{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "data-table",
  "title": "Data Table",
  "author": "ilinxa",
  "description": "A typed, composable table primitive with column accessors and per-cell rendering.",
  "registryDependencies": [
    "table"
  ],
  "files": [
    {
      "path": "src/registry/components/data/data-table/data-table.tsx",
      "content": "import {\n  Table,\n  TableBody,\n  TableCaption,\n  TableCell,\n  TableHead,\n  TableHeader,\n  TableRow,\n} from \"@/components/ui/table\";\nimport { cn } from \"@/lib/utils\";\nimport type { DataTableProps } from \"./types\";\n\nexport function DataTable<TRow>({\n  columns,\n  rows,\n  caption,\n  emptyState,\n  rowKey,\n}: DataTableProps<TRow>) {\n  if (rows.length === 0) {\n    return (\n      <div className=\"rounded-md border border-border bg-card p-8 text-center text-sm text-muted-foreground\">\n        {emptyState ?? \"No records to display.\"}\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"rounded-md border border-border bg-card\">\n      <Table>\n        {caption ? <TableCaption>{caption}</TableCaption> : null}\n        <TableHeader>\n          <TableRow>\n            {columns.map((column) => (\n              <TableHead\n                key={column.id}\n                className={cn(\n                  column.align === \"right\" && \"text-right\",\n                  column.align === \"center\" && \"text-center\",\n                )}\n                style={column.width ? { width: column.width } : undefined}\n              >\n                {column.header}\n              </TableHead>\n            ))}\n          </TableRow>\n        </TableHeader>\n        <TableBody>\n          {rows.map((row, index) => (\n            <TableRow key={rowKey(row, index)}>\n              {columns.map((column) => (\n                <TableCell\n                  key={column.id}\n                  className={cn(\n                    column.align === \"right\" && \"text-right\",\n                    column.align === \"center\" && \"text-center\",\n                  )}\n                >\n                  {column.accessor(row)}\n                </TableCell>\n              ))}\n            </TableRow>\n          ))}\n        </TableBody>\n      </Table>\n    </div>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/data-table/data-table.tsx"
    },
    {
      "path": "src/registry/components/data/data-table/index.ts",
      "content": "export { DataTable } from \"./data-table\";\nexport type { DataTableColumn, DataTableProps } from \"./types\";\n",
      "type": "registry:component",
      "target": "components/data-table/index.ts"
    },
    {
      "path": "src/registry/components/data/data-table/types.ts",
      "content": "import type { ReactNode } from \"react\";\n\nexport type DataTableColumn<TRow> = {\n  id: string;\n  header: ReactNode;\n  accessor: (row: TRow) => ReactNode;\n  align?: \"left\" | \"right\" | \"center\";\n  width?: string;\n};\n\nexport type DataTableProps<TRow> = {\n  columns: DataTableColumn<TRow>[];\n  rows: TRow[];\n  caption?: string;\n  emptyState?: ReactNode;\n  rowKey: (row: TRow, index: number) => string | number;\n};\n",
      "type": "registry:component",
      "target": "components/data-table/types.ts"
    }
  ],
  "categories": [
    "data"
  ],
  "type": "registry:block"
}