'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) => (
|
{col.header}
|
))}
{data.map((row, i) => (
{columns.map((col) => (
|
{String(row[col.key])}
|
))}
))}
);
}
export const DataGrid = forwardRef(DataGridInner) as >(
props: DataGridProps & { ref?: React.ForwardedRef }
) => JSX.Element;
export default DataGrid;