{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "table",
  "title": "Table",
  "description": "A responsive table component, with an optional card-row variant.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "utils",
    "empty"
  ],
  "files": [
    {
      "path": "registry/base/ui/table.tsx",
      "content": "import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport type * as React from \"react\"\n\nimport { Empty } from \"@/components/ui/empty\"\nimport { cn } from \"@/lib/utils\"\n\nexport type TableVariant = \"default\" | \"card\"\n\nexport type TableProps = React.ComponentProps<\"table\"> & {\n  /** `\"card\"` wraps the body rows in a single elevated, rounded surface. */\n  variant?: TableVariant\n  render?: useRender.ComponentProps<\"div\">[\"render\"]\n}\n\nfunction Table({\n  className,\n  variant = \"default\",\n  render,\n  ...props\n}: TableProps) {\n  const defaultProps = {\n    children: (\n      <table\n        data-slot=\"table\"\n        className={cn(\n          \"w-full caption-bottom text-sm in-data-[variant=card]:border-separate in-data-[variant=card]:border-spacing-0\",\n          className\n        )}\n        {...props}\n      />\n    ),\n    className: \"relative w-full overflow-x-auto\",\n    \"data-slot\": \"table-container\",\n    \"data-variant\": variant,\n  }\n\n  return useRender({\n    defaultTagName: \"div\",\n    props: mergeProps<\"div\">(defaultProps, {}),\n    render,\n  })\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n  return (\n    <thead\n      data-slot=\"table-header\"\n      className={cn(\"[&_tr]:border-b\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n  return (\n    <tbody\n      data-slot=\"table-body\"\n      className={cn(\n        \"relative in-data-[variant=card]:rounded-xl in-data-[variant=card]:shadow-[var(--shadow-elevation-sm)]\",\n        \"[&_tr:last-child]:border-0\",\n        \"in-data-[variant=card]:*:[tr]:border-0\",\n        \"in-data-[variant=card]:*:[tr]:*:[td]:border-b in-data-[variant=card]:*:[tr]:*:[td]:bg-card\",\n        \"in-data-[variant=card]:*:[tr]:first:*:[td]:first:rounded-ss-xl in-data-[variant=card]:*:[tr]:first:*:[td]:border-t in-data-[variant=card]:*:[tr]:first:*:[td]:last:rounded-se-xl\",\n        \"in-data-[variant=card]:*:[tr]:last:*:[td]:last:rounded-ee-xl in-data-[variant=card]:*:[tr]:last:*:[td]:first:rounded-es-xl\",\n        \"in-data-[variant=card]:*:[tr]:*:[td]:first:border-s in-data-[variant=card]:*:[tr]:*:[td]:last:border-e\",\n        \"in-data-[variant=card]:*:[tr]:hover:*:[td]:bg-[color-mix(in_srgb,var(--card),var(--color-black)_2%)] dark:in-data-[variant=card]:*:[tr]:hover:*:[td]:bg-[color-mix(in_srgb,var(--card),var(--color-white)_2%)]\",\n        \"in-data-[variant=card]:*:[tr]:data-[state=selected]:*:[td]:bg-[color-mix(in_srgb,var(--card),var(--color-black)_4%)] dark:in-data-[variant=card]:*:[tr]:data-[state=selected]:*:[td]:bg-[color-mix(in_srgb,var(--card),var(--color-white)_4%)]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n  return (\n    <tfoot\n      data-slot=\"table-footer\"\n      className={cn(\n        \"border-t bg-transparent font-medium not-in-data-[variant=card]:bg-[color-mix(in_srgb,var(--card),var(--color-black)_2%)] in-data-[variant=card]:border-none dark:not-in-data-[variant=card]:bg-[color-mix(in_srgb,var(--card),var(--color-white)_2%)] [&>tr]:last:border-b-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n  return (\n    <tr\n      data-slot=\"table-row\"\n      className={cn(\n        \"relative border-b transition-colors not-in-data-[variant=card]:hover:bg-[color-mix(in_srgb,var(--background),var(--color-black)_2%)] not-in-data-[variant=card]:data-[state=selected]:bg-[color-mix(in_srgb,var(--background),var(--color-black)_4%)] dark:not-in-data-[variant=card]:hover:bg-[color-mix(in_srgb,var(--background),var(--color-white)_2%)] dark:not-in-data-[variant=card]:data-[state=selected]:bg-[color-mix(in_srgb,var(--background),var(--color-white)_4%)]\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n  return (\n    <th\n      data-slot=\"table-head\"\n      className={cn(\n        \"h-10 px-2.5 text-start align-middle leading-none font-medium whitespace-nowrap text-muted-foreground has-[[role=checkbox]]:w-px first:has-[[role=checkbox]]:pe-0 last:has-[[role=checkbox]]:ps-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n  return (\n    <td\n      data-slot=\"table-cell\"\n      className={cn(\n        \"bg-clip-padding p-2.5 align-middle leading-none whitespace-nowrap in-data-[slot=table-footer]:py-3.5 in-data-[variant=card]:first:ps-[calc(0.625rem-1px)] in-data-[variant=card]:last:pe-[calc(0.625rem-1px)] has-[[role=checkbox]]:w-px first:has-[[role=checkbox]]:pe-0 last:has-[[role=checkbox]]:ps-0\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction TableEmpty({\n  colSpan,\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"tr\"> & {\n  /** Number of columns for the empty row's cell to span. */\n  colSpan: number\n}) {\n  return (\n    <TableRow\n      data-slot=\"table-empty\"\n      className={cn(\n        \"not-in-data-[variant=card]:hover:bg-transparent dark:not-in-data-[variant=card]:hover:bg-transparent\",\n        className\n      )}\n      {...props}\n    >\n      <TableCell\n        colSpan={colSpan}\n        className=\"h-auto p-0 whitespace-normal in-data-[variant=card]:first:ps-0 in-data-[variant=card]:last:pe-0\"\n      >\n        <Empty className=\"rounded-none border-none p-6 md:p-10\">\n          {children}\n        </Empty>\n      </TableCell>\n    </TableRow>\n  )\n}\n\nfunction TableCaption({\n  className,\n  ...props\n}: React.ComponentProps<\"caption\">) {\n  return (\n    <caption\n      data-slot=\"table-caption\"\n      className={cn(\n        \"mt-4 text-sm text-muted-foreground in-data-[variant=card]:my-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Table,\n  TableHeader,\n  TableBody,\n  TableFooter,\n  TableHead,\n  TableRow,\n  TableCell,\n  TableEmpty,\n  TableCaption,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}