'use client'
import React, { useState } from 'react'
// ---------- Pagination ----------
interface PaginationProps {
page: number
totalPages: number
onPageChange: (p: number) => void
}
export function Pagination({ page, totalPages, onPageChange }: PaginationProps) {
if (totalPages <= 1) return null
return (
Seite {page} / {totalPages}
)
}
// ---------- Search ----------
interface SearchInputProps {
value: string
onChange: (v: string) => void
placeholder?: string
}
export function SearchInput({ value, onChange, placeholder }: SearchInputProps) {
return (
)
}
// ---------- Filter Dropdown ----------
interface FilterDropdownProps {
label: string
value: string
options: { value: string; label: string }[]
onChange: (v: string) => void
}
export function FilterDropdown({ label, value, options, onChange }: FilterDropdownProps) {
return (
)
}
// ---------- Expandable Row ----------
interface ExpandableRowProps {
cells: React.ReactNode[]
expandedContent: React.ReactNode
colSpan: number
}
export function ExpandableRow({ cells, expandedContent, colSpan }: ExpandableRowProps) {
const [open, setOpen] = useState(false)
return (
<>
setOpen(!open)}
className="cursor-pointer hover:bg-purple-50/50 dark:hover:bg-purple-900/10 transition-colors even:bg-gray-50/50 dark:even:bg-gray-800/30"
>
{cells.map((cell, i) => (
|
{cell}
|
))}
|
{open && (
|
{expandedContent}
|
)}
>
)
}
// ---------- External Link Icon ----------
export function ExternalLinkIcon() {
return (
)
}