import React from "react"; interface Column { key: string; header: string; render?: (row: T) => React.ReactNode; } interface TableProps { columns: Column[]; data: T[]; keyField: keyof T; loading?: boolean; emptyText?: string; } export function Table({ columns, data, keyField, loading, emptyText = "No records found." }: TableProps) { return (
{columns.map((col) => ( ))} {loading ? ( ) : data.length === 0 ? ( ) : ( data.map((row) => ( {columns.map((col) => ( ))} )) )}
{col.header}
Loading…
{emptyText}
{col.render ? col.render(row) : String((row as Record)[col.key] ?? "")}
); } const s: Record = { wrapper: { overflowX: "auto", border: "1px solid var(--color-border)", borderRadius: "var(--radius)", background: "var(--color-surface)", }, table: { width: "100%", borderCollapse: "collapse", fontSize: 14 }, th: { textAlign: "left", padding: "10px 16px", background: "#f8fafc", borderBottom: "1px solid var(--color-border)", fontWeight: 600, color: "var(--color-text-muted)", fontSize: 12, textTransform: "uppercase", letterSpacing: "0.04em", whiteSpace: "nowrap", }, tr: { borderBottom: "1px solid var(--color-border)" }, td: { padding: "10px 16px", verticalAlign: "middle" }, empty: { padding: "32px 16px", textAlign: "center", color: "var(--color-text-muted)" }, };