{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "table",
  "type": "registry:ui",
  "dependencies": [
    "class-variance-authority"
  ],
  "registryDependencies": [
    "https://ui.getlyse.com/r/lyse-tokens.json"
  ],
  "files": [
    {
      "path": "registry/new-york/ui/table/table.tsx",
      "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport \"./table.css\"\n\n/* ------------------------------------------------------------------ */\n/*  CVA                                                                */\n/* ------------------------------------------------------------------ */\n\nconst tableVariants = cva(\"table-base w-full caption-bottom\")\n\nconst tableHeaderVariants = cva(\"table-header\")\n\nconst tableBodyVariants = cva(\"table-body\")\n\nconst tableFooterVariants = cva(\"table-footer\")\n\nconst tableRowVariants = cva(\"table-row\")\n\nconst tableHeadVariants = cva(\n  \"table-head text-content-caption font-accent text-left\"\n)\n\nconst tableCellVariants = cva(\"table-cell text-content-note text-left\")\n\nconst tableCaptionVariants = cva(\n  \"table-caption text-content-caption\"\n)\n\n/* ------------------------------------------------------------------ */\n/*  Table                                                              */\n/* ------------------------------------------------------------------ */\n\nfunction Table({\n  className,\n  wrapperClassName,\n  variant = \"default\",\n  compact = false,\n  children,\n  ...props\n}: React.ComponentProps<\"table\"> & {\n  wrapperClassName?: string\n  variant?: \"default\" | \"striped\"\n  compact?: boolean\n}) {\n  const wrapperRef = React.useRef<HTMLDivElement>(null)\n  const [overflows, setOverflows] = React.useState(false)\n\n  React.useEffect(() => {\n    const el = wrapperRef.current\n    if (!el) return\n\n    function check() {\n      if (el) setOverflows(el.scrollWidth > el.clientWidth)\n    }\n\n    check()\n\n    const ro = new ResizeObserver(check)\n    ro.observe(el)\n    return () => ro.disconnect()\n  }, [])\n\n  return (\n    <div\n      ref={wrapperRef}\n      data-slot=\"table-wrapper\"\n      role={overflows ? \"region\" : undefined}\n      aria-label={overflows ? \"Scrollable table\" : undefined}\n      tabIndex={overflows ? 0 : undefined}\n      className={cn(\"table-wrapper w-full\", wrapperClassName)}\n    >\n      <table\n        data-slot=\"table\"\n        data-variant={variant}\n        data-compact={compact || undefined}\n        className={cn(tableVariants(), className)}\n        {...props}\n      >\n        {children}\n      </table>\n    </div>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableHeader                                                        */\n/* ------------------------------------------------------------------ */\n\nfunction TableHeader({\n  className,\n  ...props\n}: React.ComponentProps<\"thead\">) {\n  return (\n    <thead\n      data-slot=\"table-header\"\n      className={cn(tableHeaderVariants(), className)}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableBody                                                          */\n/* ------------------------------------------------------------------ */\n\nfunction TableBody({\n  className,\n  ...props\n}: React.ComponentProps<\"tbody\">) {\n  return (\n    <tbody\n      data-slot=\"table-body\"\n      className={cn(tableBodyVariants(), className)}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableFooter                                                        */\n/* ------------------------------------------------------------------ */\n\nfunction TableFooter({\n  className,\n  ...props\n}: React.ComponentProps<\"tfoot\">) {\n  return (\n    <tfoot\n      data-slot=\"table-footer\"\n      className={cn(tableFooterVariants(), className)}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableRow                                                           */\n/* ------------------------------------------------------------------ */\n\nfunction TableRow({\n  className,\n  ...props\n}: React.ComponentProps<\"tr\">) {\n  return (\n    <tr\n      data-slot=\"table-row\"\n      className={cn(tableRowVariants(), className)}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableHead                                                          */\n/* ------------------------------------------------------------------ */\n\nfunction TableHead({\n  className,\n  scope = \"col\",\n  align = \"left\",\n  ...props\n}: React.ComponentProps<\"th\"> & {\n  align?: \"left\" | \"center\" | \"right\"\n}) {\n  return (\n    <th\n      data-slot=\"table-head\"\n      scope={scope}\n      className={cn(\n        tableHeadVariants(),\n        align === \"center\" && \"text-center\",\n        align === \"right\" && \"text-right\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableCell                                                          */\n/* ------------------------------------------------------------------ */\n\nfunction TableCell({\n  className,\n  align = \"left\",\n  ...props\n}: React.ComponentProps<\"td\"> & {\n  align?: \"left\" | \"center\" | \"right\"\n}) {\n  return (\n    <td\n      data-slot=\"table-cell\"\n      className={cn(\n        tableCellVariants(),\n        align === \"center\" && \"text-center\",\n        align === \"right\" && \"text-right\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TableCaption                                                       */\n/* ------------------------------------------------------------------ */\n\nfunction TableCaption({\n  className,\n  ...props\n}: React.ComponentProps<\"caption\">) {\n  return (\n    <caption\n      data-slot=\"table-caption\"\n      className={cn(tableCaptionVariants(), className)}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  Exports                                                            */\n/* ------------------------------------------------------------------ */\n\nexport {\n  Table,\n  TableHeader,\n  TableBody,\n  TableFooter,\n  TableRow,\n  TableHead,\n  TableCell,\n  TableCaption,\n  tableVariants,\n  tableHeaderVariants,\n  tableBodyVariants,\n  tableFooterVariants,\n  tableRowVariants,\n  tableHeadVariants,\n  tableCellVariants,\n  tableCaptionVariants,\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "registry/new-york/ui/table/table.css",
      "content": "/* ================================================================\n * TABLE — Token-based theming\n * ================================================================ */\n\n/* --------------------------------\n * Scroll wrapper\n * -------------------------------- */\n.table-wrapper {\n  overflow-x: auto;\n  overflow-y: clip;\n}\n\n/* --------------------------------\n * Table — base\n * -------------------------------- */\n.table-base {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\n/* --------------------------------\n * TableHead — sticky + styling\n * -------------------------------- */\n.table-head {\n  padding: var(--layout-padding-md) var(--layout-padding-lg);\n  color: var(--text-base-moderate);\n  position: sticky;\n  top: 0;\n  z-index: 10;\n}\n\n/* --------------------------------\n * TableCell — default padding\n * -------------------------------- */\n.table-cell {\n  padding: var(--layout-padding-md) var(--layout-padding-lg);\n  color: var(--text-base-strong);\n}\n\n/* --------------------------------\n * Body — rounded border container\n * -------------------------------- */\n.table-body .table-cell {\n  border-left: var(--layout-border-thin) solid transparent;\n  border-right: var(--layout-border-thin) solid transparent;\n}\n\n.table-body .table-row:first-child .table-cell {\n  border-top: var(--layout-border-thin) solid var(--border-default);\n}\n\n.table-body .table-row:last-child .table-cell {\n  border-bottom: var(--layout-border-thin) solid var(--border-default);\n}\n\n.table-body .table-row:first-child .table-cell:first-child {\n  border-left-color: var(--border-default);\n  border-top-left-radius: var(--layout-radius-lg);\n}\n\n.table-body .table-row:first-child .table-cell:last-child {\n  border-right-color: var(--border-default);\n  border-top-right-radius: var(--layout-radius-lg);\n}\n\n.table-body .table-row:last-child .table-cell:first-child {\n  border-left-color: var(--border-default);\n  border-bottom-left-radius: var(--layout-radius-lg);\n}\n\n.table-body .table-row:last-child .table-cell:last-child {\n  border-right-color: var(--border-default);\n  border-bottom-right-radius: var(--layout-radius-lg);\n}\n\n/* Middle rows — left/right borders */\n.table-body .table-row .table-cell:first-child {\n  border-left-color: var(--border-default);\n}\n\n.table-body .table-row .table-cell:last-child {\n  border-right-color: var(--border-default);\n}\n\n/* --------------------------------\n * TableRow — divider + hover\n * -------------------------------- */\n.table-body .table-row + .table-row .table-cell {\n  border-top: var(--layout-border-thin) solid var(--border-divider);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .table-row {\n    transition: background 150ms ease;\n  }\n}\n\n/* Stripe — scoped to tbody only, declared BEFORE hover */\n[data-variant=\"striped\"] tbody .table-row:nth-child(even) {\n  background: var(--background-neutral-faint-default);\n}\n\n/* Hover — declared AFTER stripe, wins via source order */\ntbody .table-row:hover {\n  background: var(--background-neutral-faint-hover);\n}\n\n/* --------------------------------\n * TableFooter\n * -------------------------------- */\n.table-footer {\n  background: var(--background-neutral-faint-default);\n}\n\n.table-footer .table-row {\n  background: transparent;\n}\n\n.table-footer .table-cell {\n  color: var(--text-base-moderate);\n}\n\n/* --------------------------------\n * TableCaption\n * -------------------------------- */\n.table-caption {\n  color: var(--text-base-medium);\n  padding: var(--layout-padding-md) var(--layout-padding-lg);\n}\n\n/* --------------------------------\n * Compact density\n * -------------------------------- */\n[data-compact] .table-head {\n  padding: var(--layout-padding-xs) var(--layout-padding-md);\n}\n\n[data-compact] .table-cell {\n  padding: var(--layout-padding-xs) var(--layout-padding-md);\n}\n\n[data-compact] .table-caption {\n  padding: var(--layout-padding-xs) var(--layout-padding-md);\n}\n",
      "type": "registry:ui"
    }
  ]
}