'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 (
onChange(e.target.value)} placeholder={placeholder || 'Suchen...'} className="w-full pl-10 pr-4 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
) } // ---------- 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 ( ) }