'use client'; import { forwardRef, TableHTMLAttributes } from 'react'; export interface DataGridColumn { key: keyof T; header: string; width?: string; } export interface DataGridProps> extends Omit, 'children'> { columns: DataGridColumn[]; data: T[]; variant?: 'cyan' | 'green' | 'amber'; striped?: boolean; hoverable?: boolean; } const variantStyles = { cyan: { border: 'border-cyan-400', header: 'text-cyan-400 bg-cyan-400/10', hover: 'hover:bg-cyan-400/10' }, green: { border: 'border-emerald-400', header: 'text-emerald-400 bg-emerald-400/10', hover: 'hover:bg-emerald-400/10' }, amber: { border: 'border-amber-400', header: 'text-amber-400 bg-amber-400/10', hover: 'hover:bg-amber-400/10' }, }; function DataGridInner>( { columns, data, variant = 'cyan', striped = true, hoverable = true, className = '', ...props }: DataGridProps, ref: React.ForwardedRef ) { const colors = variantStyles[variant]; return (
{columns.map((col) => ( ))} {data.map((row, i) => ( {columns.map((col) => ( ))} ))}
{col.header}
{String(row[col.key])}
); } export const DataGrid = forwardRef(DataGridInner) as >( props: DataGridProps & { ref?: React.ForwardedRef } ) => JSX.Element; export default DataGrid;