@dynostack/react-grid 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/ui/checkbox.tsx","../src/ui/skeleton.tsx","../src/ui/button.tsx","../src/ui/input.tsx","../src/ui/badge.tsx","../src/ui/separator.tsx","../src/portal-container.tsx","../src/ui/dropdown-menu.tsx","../src/ui/popover.tsx","../src/export.ts","../src/data-table-toolbar.tsx","../src/ui/select.tsx","../src/data-table-pagination.tsx","../src/filters.tsx","../src/data-table-column-header.tsx","../src/data-table-row-actions.tsx","../src/editable-cell.tsx","../src/theme.ts","../src/ui/sheet.tsx","../src/data-table-view-sheet.tsx","../src/ui/alert-dialog.tsx","../src/data-table-confirm-delete.tsx","../src/data-table.tsx"],"names":["twMerge","clsx","jsx","CheckboxPrimitive","MinusIcon","CheckIcon","cva","Slot","SeparatorPrimitive","createContext","useContext","DropdownMenuPrimitive","PopoverPrimitive","useState","useRef","useEffect","jsxs","Fragment","Trash2Icon","XIcon","SearchIcon","RefreshCwIcon","ColumnsIcon","DownloadIcon","FileTextIcon","FileSpreadsheetIcon","PlusIcon","SelectPrimitive","ChevronDownIcon","ChevronUpIcon","ChevronsLeftIcon","ChevronLeftIcon","ChevronRightIcon","ChevronsRightIcon","useMemo","combine","ArrowDownIcon","ArrowUpIcon","ChevronsUpDownIcon","PinOffIcon","PinIcon","EyeOffIcon","FilterIcon","EyeIcon","PencilIcon","CopyIcon","useLayoutEffect","MoreHorizontalIcon","createPortal","DialogPrimitive","LayoutGridIcon","Rows3Icon","ListIcon","AlertDialogPrimitive","useId","rows","table","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getExpandedRowModel","getPaginationRowModel","GripVerticalIcon","flexRender","Loader2Icon"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer inline-flex size-4 shrink-0 items-center justify-center rounded-[5px] border border-input bg-background shadow-xs outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n {props.checked === \"indeterminate\" ? (\n <MinusIcon className=\"size-3\" />\n ) : (\n <CheckIcon className=\"size-3\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import { cn } from \"../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n outline:\n \"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 data-[size^=icon]:hover:bg-primary/10 data-[size^=icon]:hover:text-primary data-[size^=icon]:hover:[&_svg]:text-primary data-[size^=icon]:aria-expanded:bg-primary/10 data-[size^=icon]:aria-expanded:text-primary data-[size^=icon]:aria-expanded:border data-[size^=icon]:aria-expanded:border-primary/30\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs font-medium whitespace-nowrap transition-colors [&_svg]:pointer-events-none [&_svg]:size-3\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary/10 text-primary [a&]:hover:bg-primary/20\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive/10 text-destructive [a&]:hover:bg-destructive/20\",\n success:\n \"border-transparent bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 [a&]:hover:bg-emerald-500/20\",\n warning:\n \"border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-400 [a&]:hover:bg-amber-500/25\",\n outline: \"border-border text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return (\n <span\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport { createContext, useContext } from \"react\"\n\n/**\n * Shared portal container for every overlay inside a DataTable (popover,\n * dropdown, select, sheet, alert-dialog, …).\n *\n * `<DataTable>` provides a ref pointing to a `<div>` rendered *inside* the\n * themed grid root. When the value is non-null, every overlay primitive\n * mounts its portal into that div instead of `document.body`.\n *\n * Why this matters\n * ----------------\n * CSS variables cascade only down the DOM tree. The grid's `theme` prop\n * applies inline tokens to the grid root — if a popover portals to\n * `document.body` (Radix default), those tokens never reach the popover and\n * its `bg-primary` / `bg-popover` / `border` etc. resolve from `:root`\n * instead. That's why a `theme={themePresets.rose}` table can show a black\n * \"Apply\" button on a white popover surrounded by a rose grid.\n *\n * Mounting overlays inside the themed root fixes this cleanly with no global\n * CSS pollution.\n */\nexport const PortalContainerContext = createContext<HTMLElement | null>(null)\n\n/** Read the current grid's portal container, or `null` when outside a DataTable. */\nexport function usePortalContainer(): HTMLElement | null {\n return useContext(PortalContainerContext)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n const container = usePortalContainer()\n return (\n <DropdownMenuPrimitive.Portal\n data-slot=\"dropdown-menu-portal\"\n container={container ?? undefined}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <DropdownMenuPrimitive.Portal container={container ?? undefined}>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!\", className )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!\", className )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 6,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-lg border bg-popover p-3 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import type { Table } from \"@tanstack/react-table\"\n\n/** Neutralize spreadsheet formulas in untrusted text; preserve real numbers. */\nexport function sanitizeSpreadsheetValue(value: unknown): string {\n if (value == null) return \"\"\n const text = String(value)\n if (typeof value === \"string\" && (/^[\\s\\u0000-\\u001f]*[=+\\-@=+-@]/u.test(text) || /^[\\t\\r\\n]/.test(text))) return `'${text}`\n return text\n}\n\nfunction escapeCsv(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n const s = sanitizeSpreadsheetValue(value)\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`\n return s\n}\n\nfunction escapeHtml(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n return sanitizeSpreadsheetValue(value)\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n}\n\nfunction getExportRows<TData>(table: Table<TData>) {\n const visible = table.getVisibleLeafColumns().filter((c) => {\n if (c.id === \"__select\" || c.id === \"__expand\" || c.id === \"__actions\")\n return false\n return c.columnDef.meta?.exportable !== false\n })\n const headers = visible.map(\n (c) => c.columnDef.meta?.label ?? (typeof c.columnDef.header === \"string\" ? c.columnDef.header : c.id)\n )\n\n const selected = table.getSelectedRowModel().rows\n const rows = selected.length > 0 ? selected : table.getFilteredRowModel().rows\n\n const data = rows.map((row) =>\n visible.map((col) => {\n const value = row.getValue(col.id)\n if (value instanceof Date) return value.toISOString().slice(0, 10)\n if (typeof value === \"object\" && value !== null) return JSON.stringify(value)\n return value\n })\n )\n\n return { headers, data }\n}\n\nfunction triggerDownload(content: string, mime: string, filename: string) {\n const bom = \"\"\n const blob = new Blob([bom + content], { type: mime })\n const url = URL.createObjectURL(blob)\n const a = document.createElement(\"a\")\n a.href = url\n a.download = filename\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n setTimeout(() => URL.revokeObjectURL(url), 100)\n}\n\nexport function exportToCsv<TData>(table: Table<TData>, fileName = \"export\") {\n const { headers, data } = getExportRows(table)\n const lines = [headers.map(escapeCsv).join(\",\"), ...data.map((r) => r.map(escapeCsv).join(\",\"))]\n triggerDownload(lines.join(\"\\r\\n\"), \"text/csv;charset=utf-8;\", `${fileName}.csv`)\n}\n\nexport function exportToExcel<TData>(table: Table<TData>, fileName = \"export\") {\n const { headers, data } = getExportRows(table)\n const headerHtml = headers\n .map((h) => `<th style=\"background:#f4f4f5;text-align:left;padding:6px 10px;border:1px solid #d4d4d8\">${escapeHtml(h)}</th>`)\n .join(\"\")\n const bodyHtml = data\n .map(\n (row) =>\n `<tr>${row\n .map((c) => `<td style=\"padding:6px 10px;border:1px solid #d4d4d8\">${escapeHtml(c)}</td>`)\n .join(\"\")}</tr>`\n )\n .join(\"\")\n const html = `<!DOCTYPE html><html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\"><head><meta charset=\"utf-8\"/><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>${`<thead><tr>${headerHtml}</tr></thead><tbody>${bodyHtml}</tbody>`}</table></body></html>`\n triggerDownload(html, \"application/vnd.ms-excel;charset=utf-8;\", `${fileName}.xls`)\n}\n","import type { Table } from \"@tanstack/react-table\"\nimport { useEffect, useRef, useState } from \"react\"\nimport {\n ColumnsIcon,\n DownloadIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n PlusIcon,\n RefreshCwIcon,\n SearchIcon,\n Trash2Icon,\n XIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport { Input } from \"./ui/input\"\nimport { Badge } from \"./ui/badge\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Separator } from \"./ui/separator\"\nimport { cn } from \"./lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./ui/popover\"\n\nimport { exportToCsv, exportToExcel } from \"./export\"\n\ntype ToolbarFeatureFlags = {\n search?: boolean\n refresh?: boolean\n columnVisibility?: boolean\n export?: boolean\n addRow?: boolean\n}\n\ntype ToolbarLabels = {\n search?: string\n addRow?: string\n delete?: string\n clear?: string\n selected?: string\n refresh?: string\n columns?: string\n export?: string\n csv?: string\n excel?: string\n total?: string\n}\n\ntype Props<TData> = {\n table: Table<TData>\n totalRecords: number\n isFetching?: boolean\n onRefresh?: () => void\n onAddRow?: () => void\n onBulkDelete?: (rows: TData[]) => void\n exportFileName?: string\n globalFilter: string\n onGlobalFilterChange: (value: string) => void\n toolbarSlot?: React.ReactNode\n features?: ToolbarFeatureFlags\n labels?: ToolbarLabels\n}\n\nconst TOOLBAR_DEFAULT_LABELS: Required<ToolbarLabels> = {\n search: \"Search...\",\n addRow: \"Add row\",\n delete: \"Delete\",\n clear: \"Clear\",\n selected: \"selected\",\n refresh: \"Refresh\",\n columns: \"Columns\",\n export: \"Export\",\n csv: \"CSV\",\n excel: \"Excel\",\n total: \"Total\",\n}\n\nexport function DataTableToolbar<TData>({\n table,\n totalRecords,\n isFetching,\n onRefresh,\n onAddRow,\n onBulkDelete,\n exportFileName = \"export\",\n globalFilter,\n onGlobalFilterChange,\n toolbarSlot,\n features,\n labels: labelsProp,\n}: Props<TData>) {\n const labels: Required<ToolbarLabels> = {\n ...TOOLBAR_DEFAULT_LABELS,\n ...labelsProp,\n }\n const showSearch = features?.search ?? true\n const showColumnVisibility = features?.columnVisibility ?? true\n const showExport = features?.export ?? true\n const [searchOpen, setSearchOpen] = useState(Boolean(globalFilter))\n const searchInputRef = useRef<HTMLInputElement>(null)\n const selectedRows = table.getSelectedRowModel().rows\n const selectedCount = selectedRows.length\n const hideableColumns = table.getAllLeafColumns().filter((c) => c.getCanHide())\n const visibleCount = hideableColumns.filter((c) => c.getIsVisible()).length\n\n useEffect(() => {\n if (globalFilter) setSearchOpen(true)\n }, [globalFilter])\n\n useEffect(() => {\n if (searchOpen) searchInputRef.current?.focus()\n }, [searchOpen])\n\n return (\n <div className=\"flex flex-wrap items-center gap-2 border-b p-2\">\n {toolbarSlot}\n\n {selectedCount > 0 && (\n <>\n <Badge\n variant=\"secondary\"\n className=\"flex h-8 items-center gap-1 rounded-md px-2 text-xs\"\n >\n {selectedCount} {labels.selected}\n </Badge>\n {onBulkDelete && (\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"h-8\"\n onClick={() => onBulkDelete(selectedRows.map((r) => r.original))}\n >\n <Trash2Icon /> {labels.delete}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8\"\n onClick={() => table.resetRowSelection()}\n >\n <XIcon /> {labels.clear}\n </Button>\n <Separator orientation=\"vertical\" className=\"mx-2 !h-6 !self-center\" />\n </>\n )}\n\n <div className=\"ml-auto flex h-8 items-center gap-1\">\n {showSearch && (\n <div\n className={cn(\n \"relative h-8 overflow-hidden transition-[width] duration-200 ease-out\",\n searchOpen ? \"w-56\" : \"w-8\"\n )}\n >\n {searchOpen ? (\n <>\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2 opacity-60\" />\n <Input\n ref={searchInputRef}\n placeholder={labels.search}\n value={globalFilter}\n onChange={(e) => onGlobalFilterChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && !globalFilter) setSearchOpen(false)\n }}\n onBlur={() => {\n if (!globalFilter) setSearchOpen(false)\n }}\n className=\"h-8 w-56 border-input bg-transparent pl-7 pr-7 shadow-none focus-visible:bg-transparent focus-visible:ring-0\"\n />\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n if (globalFilter) {\n onGlobalFilterChange(\"\")\n searchInputRef.current?.focus()\n return\n }\n setSearchOpen(false)\n }}\n className=\"absolute top-1/2 right-1.5 -translate-y-1/2 rounded p-0.5 hover:bg-muted\"\n aria-label={globalFilter ? \"Clear search\" : \"Close search\"}\n >\n <XIcon className=\"size-3\" />\n </button>\n </>\n ) : (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => setSearchOpen(true)}\n aria-label=\"Open search\"\n >\n <SearchIcon />\n </Button>\n )}\n </div>\n )}\n {onRefresh && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={onRefresh}\n disabled={isFetching}\n aria-label={labels.refresh}\n >\n <RefreshCwIcon className={isFetching ? \"animate-spin\" : undefined} />\n </Button>\n )}\n\n {showColumnVisibility && (\n <Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <ColumnsIcon /> {labels.columns}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {visibleCount}/{hideableColumns.length}\n </Badge>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-56 p-2\">\n <div className=\"mb-1 flex items-center justify-between text-xs text-muted-foreground\">\n <span>Toggle columns</span>\n <button\n className=\"hover:text-foreground\"\n onClick={() => table.resetColumnVisibility()}\n >\n Reset\n </button>\n </div>\n <div className=\"flex max-h-72 flex-col gap-0.5 overflow-auto\">\n {hideableColumns.map((col) => (\n <label\n key={col.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-sm hover:bg-accent\"\n >\n <Checkbox\n checked={col.getIsVisible()}\n onCheckedChange={(c) => col.toggleVisibility(!!c)}\n />\n <span className=\"capitalize\">\n {col.columnDef.meta?.label ??\n (typeof col.columnDef.header === \"string\"\n ? col.columnDef.header\n : col.id)}\n </span>\n </label>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n\n {showExport && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <DownloadIcon /> {labels.export}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuLabel>\n {selectedCount > 0\n ? `${labels.export} ${selectedCount} ${labels.selected}`\n : `${labels.export} all rows`}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={() => exportToCsv(table, exportFileName)}\n >\n <FileTextIcon /> {labels.csv}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => exportToExcel(table, exportFileName)}\n >\n <FileSpreadsheetIcon /> {labels.excel}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {onAddRow && (\n <Button size=\"sm\" onClick={onAddRow}>\n <PlusIcon /> {labels.addRow}\n </Button>\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-2 !h-6 !self-center\" />\n <div className=\"flex h-8 items-center gap-1.5 rounded-md border bg-muted/40 px-2 text-xs\">\n <span className=\"text-muted-foreground\">{labels.total}</span>\n <span className=\"font-semibold tabular-nums\">\n {new Intl.NumberFormat().format(totalRecords)}\n </span>\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Select(props: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup(\n props: React.ComponentProps<typeof SelectPrimitive.Group>\n) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue(\n props: React.ComponentProps<typeof SelectPrimitive.Value>\n) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background px-2.5 text-sm whitespace-nowrap shadow-xs outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[placeholder]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"opacity-60\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <SelectPrimitive.Portal container={container ?? undefined}>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n position={position}\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border bg-popover text-popover-foreground shadow-md data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-2 py-1 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-3.5\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-3.5\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import type { Table } from \"@tanstack/react-table\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronsLeftIcon,\n ChevronsRightIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\ntype Props<TData> = {\n table: Table<TData>\n pageSizeOptions?: number[]\n}\n\nfunction getPageRange(current: number, total: number): (number | \"…\")[] {\n const pages: (number | \"…\")[] = []\n if (total <= 7) {\n for (let i = 0; i < total; i++) pages.push(i)\n return pages\n }\n pages.push(0)\n if (current > 3) pages.push(\"…\")\n const start = Math.max(1, current - 1)\n const end = Math.min(total - 2, current + 1)\n for (let i = start; i <= end; i++) pages.push(i)\n if (current < total - 4) pages.push(\"…\")\n pages.push(total - 1)\n return pages\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 25, 50, 100],\n}: Props<TData>) {\n const pageIndex = table.getState().pagination.pageIndex\n const pageSize = table.getState().pagination.pageSize\n const pageCount = table.getPageCount()\n const totalRows = table.getFilteredRowModel().rows.length\n const fromRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1\n const toRow = Math.min(totalRows, (pageIndex + 1) * pageSize)\n const selected = table.getSelectedRowModel().rows.length\n\n const range = getPageRange(pageIndex, pageCount)\n\n return (\n <div className=\"grid grid-cols-1 items-center gap-2 border-t p-2 text-xs md:grid-cols-3\">\n <div className=\"flex items-center gap-2 text-muted-foreground md:justify-self-start\">\n {selected > 0 ? (\n <span>\n <span className=\"font-medium text-foreground\">{selected}</span>{\" \"}\n selected ·{\" \"}\n </span>\n ) : null}\n <span>\n Showing{\" \"}\n <span className=\"font-medium text-foreground\">{fromRow}</span>–\n <span className=\"font-medium text-foreground\">{toRow}</span> of{\" \"}\n <span className=\"font-medium text-foreground\">\n {new Intl.NumberFormat().format(totalRows)}\n </span>\n </span>\n </div>\n\n <div className=\"flex items-center gap-1 md:justify-self-center\">\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeftIcon />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeftIcon />\n </Button>\n\n {range.map((p, idx) =>\n p === \"…\" ? (\n <span key={`e-${idx}`} className=\"px-1 text-muted-foreground\">\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => table.setPageIndex(p)}\n className={cn(\n \"h-7 min-w-7 rounded-md border border-transparent px-2 text-xs font-medium transition-colors hover:bg-accent\",\n p === pageIndex\n ? \"border-border bg-primary/10 text-primary\"\n : \"text-muted-foreground\"\n )}\n >\n {p + 1}\n </button>\n )\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRightIcon />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRightIcon />\n </Button>\n </div>\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground md:justify-self-end\">\n <span>Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger size=\"sm\" className=\"h-7 w-16\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n )\n}\n","import { useEffect, useMemo, useState } from \"react\"\nimport type { Column, FilterFn } from \"@tanstack/react-table\"\nimport { SearchIcon, XIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport { Input } from \"./ui/input\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Separator } from \"./ui/separator\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\n// ---------- types -----------------------------------------------------\n\nexport type TextOp =\n | \"contains\"\n | \"notContains\"\n | \"equals\"\n | \"notEqual\"\n | \"startsWith\"\n | \"endsWith\"\n | \"blank\"\n | \"notBlank\"\n\nexport type NumberOp =\n | \"equals\"\n | \"notEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\"\n | \"inRange\"\n | \"blank\"\n | \"notBlank\"\n\nexport type DateOp =\n | \"equals\"\n | \"notEqual\"\n | \"before\"\n | \"after\"\n | \"inRange\"\n | \"blank\"\n | \"notBlank\"\n\nexport type Combine = \"AND\" | \"OR\"\n\nexport type Condition<Op extends string, V> = {\n op: Op\n v?: V\n v2?: V\n}\n\nexport type AdvFilter<Op extends string, V> = {\n c1: Condition<Op, V>\n combine?: Combine\n c2?: Condition<Op, V>\n}\n\nexport type SetFilter = { selected: string[] }\n\n// ---------- operator metadata ----------------------------------------\n\nconst TEXT_OPS: { v: TextOp; l: string }[] = [\n { v: \"contains\", l: \"Contains\" },\n { v: \"notContains\", l: \"Does not contain\" },\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"startsWith\", l: \"Starts with\" },\n { v: \"endsWith\", l: \"Ends with\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nconst NUMBER_OPS: { v: NumberOp; l: string }[] = [\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"lessThan\", l: \"Less than\" },\n { v: \"lessThanOrEqual\", l: \"Less than or equal\" },\n { v: \"greaterThan\", l: \"Greater than\" },\n { v: \"greaterThanOrEqual\", l: \"Greater than or equal\" },\n { v: \"inRange\", l: \"In range\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nconst DATE_OPS: { v: DateOp; l: string }[] = [\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"before\", l: \"Before\" },\n { v: \"after\", l: \"After\" },\n { v: \"inRange\", l: \"In range\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nfunction isUnary(op: string) {\n return op === \"blank\" || op === \"notBlank\"\n}\nfunction isRange(op: string) {\n return op === \"inRange\"\n}\n\n// ---------- evaluation helpers ---------------------------------------\n\nfunction evalText(op: TextOp, cell: unknown, q: string | undefined): boolean {\n const c = (cell ?? \"\").toString().toLowerCase()\n const v = (q ?? \"\").toString().toLowerCase()\n switch (op) {\n case \"contains\":\n return v === \"\" ? true : c.includes(v)\n case \"notContains\":\n return v === \"\" ? true : !c.includes(v)\n case \"equals\":\n return c === v\n case \"notEqual\":\n return c !== v\n case \"startsWith\":\n return c.startsWith(v)\n case \"endsWith\":\n return c.endsWith(v)\n case \"blank\":\n return c === \"\"\n case \"notBlank\":\n return c !== \"\"\n }\n}\n\nfunction evalNumber(\n op: NumberOp,\n cell: unknown,\n a: number | undefined,\n b: number | undefined\n): boolean {\n const n = cell == null || cell === \"\" ? null : Number(cell)\n switch (op) {\n case \"blank\":\n return n === null\n case \"notBlank\":\n return n !== null\n }\n if (n === null || Number.isNaN(n)) return false\n if (a == null) return true\n switch (op) {\n case \"equals\":\n return n === a\n case \"notEqual\":\n return n !== a\n case \"lessThan\":\n return n < a\n case \"lessThanOrEqual\":\n return n <= a\n case \"greaterThan\":\n return n > a\n case \"greaterThanOrEqual\":\n return n >= a\n case \"inRange\":\n if (b == null) return n >= a\n return n >= a && n <= b\n }\n return true\n}\n\nfunction evalDate(\n op: DateOp,\n cell: unknown,\n a: string | undefined,\n b: string | undefined\n): boolean {\n const c = cell ? String(cell) : \"\"\n switch (op) {\n case \"blank\":\n return c === \"\"\n case \"notBlank\":\n return c !== \"\"\n }\n if (!c) return false\n if (!a) return true\n switch (op) {\n case \"equals\":\n return c === a\n case \"notEqual\":\n return c !== a\n case \"before\":\n return c < a\n case \"after\":\n return c > a\n case \"inRange\":\n if (!b) return c >= a\n return c >= a && c <= b\n }\n return true\n}\n\nfunction combineResults(a: boolean, b: boolean, mode: Combine | undefined) {\n if (mode === \"OR\") return a || b\n return a && b\n}\n\nfunction isAdvActive(f: AdvFilter<string, unknown> | undefined) {\n if (!f?.c1) return false\n const c1 = f.c1\n if (isUnary(c1.op)) return true\n if (c1.v == null || c1.v === \"\") {\n // c1 inactive — check c2\n if (!f.c2) return false\n const c2 = f.c2\n if (isUnary(c2.op)) return true\n return c2.v != null && c2.v !== \"\"\n }\n return true\n}\n\n// ---------- filter fns -------------------------------------------------\n\nexport const textFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<TextOp, string> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || (c1.v != null && c1.v !== \"\")\n const aRes = aActive ? evalText(c1.op, cell, c1.v) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || (c2.v != null && c2.v !== \"\")\n if (!bActive) return aRes\n const bRes = evalText(c2.op, cell, c2.v)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const numberFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<NumberOp, number> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || c1.v != null\n const aRes = aActive ? evalNumber(c1.op, cell, c1.v, c1.v2) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || c2.v != null\n if (!bActive) return aRes\n const bRes = evalNumber(c2.op, cell, c2.v, c2.v2)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const dateFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<DateOp, string> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || (c1.v != null && c1.v !== \"\")\n const aRes = aActive ? evalDate(c1.op, cell, c1.v, c1.v2) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || (c2.v != null && c2.v !== \"\")\n if (!bActive) return aRes\n const bRes = evalDate(c2.op, cell, c2.v, c2.v2)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const setFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as SetFilter | undefined\n if (!f || !Array.isArray(f.selected)) return true\n if (f.selected.length === 0) return false\n const cell = row.getValue(columnId)\n if (Array.isArray(cell)) {\n return cell.some((c) => f.selected.includes(String(c)))\n }\n return f.selected.includes(String(cell ?? \"\"))\n}\n\nexport const booleanFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n if (value === undefined || value === null || value === \"\") return true\n const cell = row.getValue(columnId)\n return Boolean(cell) === Boolean(value)\n}\n\nexport function isFilterActive(filterType: string | undefined, value: unknown) {\n if (value === undefined || value === null || value === \"\") return false\n if (filterType === \"multi-select\" || filterType === \"select\") {\n const f = value as Partial<SetFilter>\n return Array.isArray(f.selected)\n }\n if (filterType === \"text\" || filterType === \"number\" || filterType === \"date\") {\n return isAdvActive(value as AdvFilter<string, unknown>)\n }\n if (filterType === \"boolean\") return value !== undefined\n return true\n}\n\n// ---------- panel components -----------------------------------------\n\ntype CommonProps<TData, TValue> = {\n column: Column<TData, TValue>\n onClose: () => void\n}\n\nexport function ColumnFilterPanel<TData, TValue>(\n props: CommonProps<TData, TValue>\n) {\n const filterType = props.column.columnDef.meta?.filterType\n switch (filterType) {\n case \"text\":\n return <TextFilterPanel {...props} />\n case \"number\":\n return <NumberFilterPanel {...props} />\n case \"date\":\n return <DateFilterPanel {...props} />\n case \"select\":\n case \"multi-select\":\n return <SetFilterPanel {...props} />\n case \"boolean\":\n return <BooleanFilterPanel {...props} />\n default:\n return null\n }\n}\n\n// shared sub-components ------------------------------------------------\n\nfunction OpSelect<Op extends string>({\n ops,\n value,\n onChange,\n}: {\n ops: { v: Op; l: string }[]\n value: Op\n onChange: (v: Op) => void\n}) {\n return (\n <Select value={value} onValueChange={(v) => onChange(v as Op)}>\n <SelectTrigger\n size=\"sm\"\n className=\"h-8 w-full justify-between text-xs\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ops.map((o) => (\n <SelectItem key={o.v} value={o.v} className=\"text-xs\">\n {o.l}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction CombineToggle({\n value,\n onChange,\n}: {\n value: Combine\n onChange: (v: Combine) => void\n}) {\n return (\n <div className=\"inline-flex h-7 overflow-hidden rounded-md border bg-muted/30 text-[11px]\">\n {([\"AND\", \"OR\"] as const).map((m) => (\n <button\n key={m}\n type=\"button\"\n className={cn(\n \"px-2 transition-colors hover:bg-muted\",\n value === m && \"bg-primary/10 text-primary\"\n )}\n onClick={() => onChange(m)}\n >\n {m}\n </button>\n ))}\n </div>\n )\n}\n\nfunction FooterBar({\n onApply,\n onClear,\n onClose,\n applyDisabled,\n clearDisabled,\n}: {\n onApply?: () => void\n onClear: () => void\n onClose: () => void\n applyDisabled?: boolean\n clearDisabled?: boolean\n}) {\n return (\n <div className=\"mt-2 flex items-center justify-between gap-1.5\">\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={onClear}\n disabled={clearDisabled}\n >\n Clear\n </Button>\n <div className=\"flex items-center gap-1.5\">\n <Button size=\"xs\" variant=\"ghost\" onClick={onClose}>\n Close\n </Button>\n {onApply && (\n <Button size=\"xs\" onClick={onApply} disabled={applyDisabled}>\n Apply\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ----- text -----------------------------------------------------------\n\nfunction TextFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<TextOp, string>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<TextOp, string>>(\n value ?? { c1: { op: \"contains\", v: \"\" } }\n )\n // keep draft synced if external value changes\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"contains\", v: \"\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"contains\", v: \"\" } })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={TEXT_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={(c, set) => (\n <Input\n autoFocus\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={(c.v as string) ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value })}\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )}\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={TEXT_OPS}\n renderInput={(c, set) => (\n <Input\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={(c.v as string) ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value })}\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )}\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- number ---------------------------------------------------------\n\nfunction NumberFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<NumberOp, number>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<NumberOp, number>>(\n value ?? { c1: { op: \"equals\" } }\n )\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"equals\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"equals\" } })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={NUMBER_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={(c, set) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n autoFocus\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"From\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"To\"\n value={c.v2 ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v2:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n </div>\n ) : (\n <Input\n autoFocus\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )\n }\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={NUMBER_OPS}\n renderInput={(c, set) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"From\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"To\"\n value={c.v2 ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v2:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n </div>\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n )\n }\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- date -----------------------------------------------------------\n\nfunction DateFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<DateOp, string>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<DateOp, string>>(\n value ?? { c1: { op: \"equals\" } }\n )\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"equals\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"equals\" } })\n }\n\n const renderInput = (\n c: Condition<DateOp, string>,\n set: (n: Condition<DateOp, string>) => void\n ) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value || undefined })}\n />\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v2 ?? \"\"}\n onChange={(e) => set({ ...c, v2: e.target.value || undefined })}\n />\n </div>\n ) : (\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value || undefined })}\n />\n )\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={DATE_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={renderInput}\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={DATE_OPS}\n renderInput={renderInput}\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- set filter -----------------------------------------------------\n\nfunction SetFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as SetFilter | undefined\n const meta = column.columnDef.meta\n const declared = meta?.selectOptions ?? []\n\n // build option list — prefer column-defined options, otherwise derive\n // unique values from the rows we have.\n const options = useMemo(() => {\n if (declared.length) return declared\n const rows = column.getFacetedRowModel?.().rows ?? []\n const seen = new Set<string>()\n const out: { value: string; label: string }[] = []\n for (const r of rows) {\n const v = r.getValue(column.id)\n const arr = Array.isArray(v) ? v : [v]\n for (const item of arr) {\n const k = item == null ? \"\" : String(item)\n if (!seen.has(k)) {\n seen.add(k)\n out.push({ value: k, label: k === \"\" ? \"(Blank)\" : k })\n }\n }\n }\n return out.sort((a, b) => a.label.localeCompare(b.label))\n }, [declared, column])\n\n const [search, setSearch] = useState(\"\")\n const [draft, setDraft] = useState<string[]>(() => {\n if (value && Array.isArray(value.selected)) return value.selected\n return options.map((o) => o.value)\n })\n\n // sync with external changes (filter cleared elsewhere)\n useEffect(() => {\n if (!value) setDraft(options.map((o) => o.value))\n else if (Array.isArray(value.selected)) setDraft(value.selected)\n }, [value, options])\n\n const visible = useMemo(() => {\n const q = search.trim().toLowerCase()\n if (!q) return options\n return options.filter((o) => o.label.toLowerCase().includes(q))\n }, [options, search])\n\n const visibleAllSelected =\n visible.length > 0 && visible.every((o) => draft.includes(o.value))\n const visibleSomeSelected = visible.some((o) => draft.includes(o.value))\n\n const toggleAll = (checked: boolean) => {\n const visibleVals = visible.map((o) => o.value)\n if (checked) {\n const set = new Set([...draft, ...visibleVals])\n setDraft(Array.from(set))\n } else {\n setDraft(draft.filter((v) => !visibleVals.includes(v)))\n }\n }\n\n const toggle = (v: string) => {\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]))\n }\n\n const apply = () => {\n if (draft.length === options.length) {\n column.setFilterValue(undefined)\n } else {\n column.setFilterValue({ selected: draft })\n }\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft(options.map((o) => o.value))\n setSearch(\"\")\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2 opacity-60\" />\n <Input\n autoFocus\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-8 pl-7 pr-7 text-sm\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"absolute top-1/2 right-1.5 -translate-y-1/2 rounded p-0.5 hover:bg-muted\"\n aria-label=\"Clear search\"\n >\n <XIcon className=\"size-3\" />\n </button>\n )}\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 rounded px-1 py-1 text-sm hover:bg-accent\">\n <Checkbox\n checked={\n visibleAllSelected\n ? true\n : visibleSomeSelected\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={(c) => toggleAll(!!c)}\n />\n <span className=\"text-xs font-medium\">\n Select all {search ? \"(filtered)\" : \"\"}\n </span>\n <span className=\"ml-auto text-[10px] text-muted-foreground\">\n {draft.length}/{options.length}\n </span>\n </label>\n\n <div className=\"flex max-h-60 flex-col gap-0.5 overflow-auto pr-0.5\">\n {visible.length === 0 ? (\n <div className=\"px-2 py-3 text-xs text-muted-foreground\">\n No matches\n </div>\n ) : (\n visible.map((o) => {\n const checked = draft.includes(o.value)\n return (\n <label\n key={o.value}\n className=\"flex cursor-pointer items-center gap-2 rounded px-1 py-1 text-sm hover:bg-accent\"\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => toggle(o.value)}\n />\n <span className=\"truncate\">{o.label}</span>\n </label>\n )\n })\n )}\n </div>\n\n <FooterBar\n onApply={apply}\n onClear={clear}\n onClose={onClose}\n clearDisabled={!value}\n />\n </div>\n )\n}\n\n// ----- boolean -------------------------------------------------------\n\nfunction BooleanFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue()\n return (\n <div className=\"flex flex-col gap-1\">\n {[\n { v: undefined, l: \"All\" },\n { v: true, l: \"True\" },\n { v: false, l: \"False\" },\n ].map((o) => (\n <button\n key={String(o.l)}\n type=\"button\"\n onClick={() => {\n column.setFilterValue(o.v)\n onClose()\n }}\n className={cn(\n \"rounded px-2 py-1 text-left text-sm hover:bg-accent\",\n value === o.v && \"bg-accent text-accent-foreground\"\n )}\n >\n {o.l}\n </button>\n ))}\n </div>\n )\n}\n\n// ----- shared condition row ------------------------------------------\n\nfunction ConditionRow<Op extends string, V>({\n ops,\n c,\n onChange,\n renderInput,\n}: {\n ops: { v: Op; l: string }[]\n c: Condition<Op, V>\n onChange: (c: Condition<Op, V>) => void\n renderInput: (\n c: Condition<Op, V>,\n set: (n: Condition<Op, V>) => void\n ) => React.ReactNode\n}) {\n const showInput = !isUnary(c.op)\n return (\n <div className=\"flex flex-col gap-1.5\">\n <OpSelect ops={ops} value={c.op} onChange={(op) => onChange({ ...c, op })} />\n {showInput && renderInput(c, onChange)}\n </div>\n )\n}\n\nfunction SecondCondition<Op extends string, V>({\n draft,\n setDraft,\n ops,\n renderInput,\n}: {\n draft: AdvFilter<Op, V>\n setDraft: React.Dispatch<React.SetStateAction<AdvFilter<Op, V>>>\n ops: { v: Op; l: string }[]\n renderInput: (\n c: Condition<Op, V>,\n set: (n: Condition<Op, V>) => void\n ) => React.ReactNode\n}) {\n const enabled = !!draft.c2\n const c2 = draft.c2\n const combine = draft.combine ?? \"AND\"\n\n if (!enabled) {\n return (\n <button\n type=\"button\"\n onClick={() =>\n setDraft((d) => ({\n ...d,\n combine: d.combine ?? \"AND\",\n c2: { op: ops[0].v },\n }))\n }\n className=\"self-start text-[11px] font-medium text-primary hover:underline\"\n >\n + Add condition\n </button>\n )\n }\n\n const setC2 = (n: Condition<Op, V>) => setDraft((d) => ({ ...d, c2: n }))\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center justify-between\">\n <CombineToggle\n value={combine}\n onChange={(combine) => setDraft((d) => ({ ...d, combine }))}\n />\n <button\n type=\"button\"\n onClick={() =>\n setDraft((d) => ({ ...d, combine: undefined, c2: undefined }))\n }\n className=\"rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label=\"Remove second condition\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n <ConditionRow\n ops={ops}\n c={c2!}\n onChange={setC2}\n renderInput={renderInput}\n />\n </div>\n )\n}\n","import { useState } from \"react\"\nimport type { Column } from \"@tanstack/react-table\"\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n ChevronsUpDownIcon,\n EyeOffIcon,\n PinIcon,\n PinOffIcon,\n FilterIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\"\nimport { ColumnFilterPanel, isFilterActive } from \"./filters\"\n\ntype Props<TData, TValue> = {\n column: Column<TData, TValue>\n title: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n}: Props<TData, TValue>) {\n const filterType = column.columnDef.meta?.filterType\n const canSort = column.getCanSort()\n const canFilter = column.getCanFilter() && !!filterType\n const canHide = column.getCanHide()\n const canPin = column.getCanPin()\n\n const sorted = column.getIsSorted()\n const isPinned = column.getIsPinned()\n const filterValue = column.getFilterValue()\n const isFiltered = isFilterActive(filterType, filterValue)\n\n return (\n <div className=\"flex items-center justify-between gap-1\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"-ml-2 h-7 px-1.5 text-xs font-medium data-[state=open]:bg-accent\"\n >\n <span>{title}</span>\n {canSort ? (\n sorted === \"desc\" ? (\n <ArrowDownIcon className=\"opacity-70\" />\n ) : sorted === \"asc\" ? (\n <ArrowUpIcon className=\"opacity-70\" />\n ) : (\n <ChevronsUpDownIcon className=\"opacity-50\" />\n )\n ) : null}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-44\">\n {canSort && (\n <>\n <DropdownMenuItem onSelect={() => column.toggleSorting(false)}>\n <ArrowUpIcon /> Ascending\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => column.toggleSorting(true)}>\n <ArrowDownIcon /> Descending\n </DropdownMenuItem>\n {sorted && (\n <DropdownMenuItem onSelect={() => column.clearSorting()}>\n <ChevronsUpDownIcon /> Clear sort\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n </>\n )}\n {canPin && (\n <>\n <DropdownMenuLabel>Pin column</DropdownMenuLabel>\n <DropdownMenuItem\n onSelect={() => column.pin(isPinned === \"left\" ? false : \"left\")}\n >\n {isPinned === \"left\" ? <PinOffIcon /> : <PinIcon />}{\" \"}\n {isPinned === \"left\" ? \"Unpin from left\" : \"Pin to left\"}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => column.pin(isPinned === \"right\" ? false : \"right\")}\n >\n {isPinned === \"right\" ? <PinOffIcon /> : <PinIcon />}{\" \"}\n {isPinned === \"right\" ? \"Unpin from right\" : \"Pin to right\"}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {canHide && (\n <DropdownMenuItem onSelect={() => column.toggleVisibility(false)}>\n <EyeOffIcon /> Hide column\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {canFilter && (\n <ColumnFilter column={column} isFiltered={isFiltered} />\n )}\n </div>\n )\n}\n\nfunction ColumnFilter<TData, TValue>({\n column,\n isFiltered,\n}: {\n column: Column<TData, TValue>\n isFiltered: boolean\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\n \"size-6\",\n isFiltered && \"bg-primary/10 text-primary\"\n )}\n aria-label=\"Filter column\"\n >\n <FilterIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-2\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Filter\n </div>\n {isFiltered && (\n <span className=\"rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary\">\n Active\n </span>\n )}\n </div>\n <ColumnFilterPanel column={column} onClose={() => setOpen(false)} />\n </PopoverContent>\n </Popover>\n )\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport {\n CopyIcon,\n EyeIcon,\n MoreHorizontalIcon,\n PencilIcon,\n Trash2Icon,\n XIcon,\n CheckIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport { cn } from \"./lib/utils\"\nimport { usePortalContainer } from \"./portal-container\"\n\nexport type RowActionId = \"view\" | \"edit\" | \"duplicate\" | \"delete\" | string\n\nexport type CustomRowAction<TData> = {\n id: string\n label: string\n icon?: React.ReactNode\n danger?: boolean\n show?: (row: TData) => boolean\n}\n\nexport type DataTableRowActionsProps<TData> = {\n row: TData\n actions?: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customActions?: CustomRowAction<TData>[]\n onAction?: (action: RowActionId, row: TData) => void\n isEditing?: boolean\n onSaveEdit?: () => void\n onCancelEdit?: () => void\n}\n\nconst builtinIcons = {\n view: <EyeIcon />,\n edit: <PencilIcon />,\n duplicate: <CopyIcon />,\n delete: <Trash2Icon />,\n}\n\nconst builtinLabels = {\n view: \"View\",\n edit: \"Edit\",\n duplicate: \"Duplicate\",\n delete: \"Delete\",\n}\n\nexport function DataTableRowActions<TData>({\n row,\n actions = [\"view\", \"edit\", \"duplicate\", \"delete\"],\n customActions = [],\n onAction,\n isEditing,\n onSaveEdit,\n onCancelEdit,\n}: DataTableRowActionsProps<TData>) {\n const [open, setOpen] = useState(false)\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLButtonElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n const portalContainer = usePortalContainer()\n\n useLayoutEffect(() => {\n if (!open || !triggerRef.current) return\n const rect = triggerRef.current.getBoundingClientRect()\n if (portalContainer) {\n // Position relative to the container instead of the viewport so that\n // the menu inherits the grid's themed CSS variables.\n const cRect = portalContainer.getBoundingClientRect()\n setMenuPosition({\n top: rect.bottom - cRect.top + 4,\n left: Math.max(8, rect.right - cRect.left - 160),\n })\n } else {\n setMenuPosition({\n top: rect.bottom + 4,\n left: Math.max(8, rect.right - 160),\n })\n }\n }, [open, portalContainer])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n if (\n !menuRef.current?.contains(target) &&\n !triggerRef.current?.contains(target)\n ) {\n setOpen(false)\n }\n }\n const onDismiss = () => setOpen(false)\n document.addEventListener(\"pointerdown\", onPointerDown)\n window.addEventListener(\"scroll\", onDismiss, true)\n window.addEventListener(\"resize\", onDismiss)\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown)\n window.removeEventListener(\"scroll\", onDismiss, true)\n window.removeEventListener(\"resize\", onDismiss)\n }\n }, [open])\n\n if (isEditing) {\n return (\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n size=\"icon-xs\"\n variant=\"ghost\"\n onClick={onSaveEdit}\n aria-label=\"Save row\"\n className=\"text-emerald-600 hover:text-emerald-600\"\n >\n <CheckIcon />\n </Button>\n <Button\n size=\"icon-xs\"\n variant=\"ghost\"\n onClick={onCancelEdit}\n aria-label=\"Cancel edit\"\n >\n <XIcon />\n </Button>\n </div>\n )\n }\n\n return (\n <div ref={menuRef} className=\"relative flex justify-end\">\n <Button\n ref={triggerRef}\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Open row actions\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <MoreHorizontalIcon />\n </Button>\n\n {open &&\n createPortal(\n <div\n ref={menuRef}\n className=\"z-[1000] w-40 rounded-md border bg-popover p-1 text-popover-foreground shadow-lg\"\n style={{\n position: portalContainer ? \"absolute\" : \"fixed\",\n top: menuPosition.top,\n left: menuPosition.left,\n }}\n >\n {actions.map((a) => (\n <RowActionButton\n key={a}\n danger={a === \"delete\"}\n onClick={() => {\n setOpen(false)\n onAction?.(a, row)\n }}\n >\n {builtinIcons[a]} {builtinLabels[a]}\n </RowActionButton>\n ))}\n {customActions.length > 0 && actions.length > 0 && (\n <div className=\"-mx-1 my-1 h-px bg-border\" />\n )}\n {customActions\n .filter((c) => (c.show ? c.show(row) : true))\n .map((c) => (\n <RowActionButton\n key={c.id}\n danger={c.danger}\n onClick={() => {\n setOpen(false)\n onAction?.(c.id, row)\n }}\n >\n {c.icon} {c.label}\n </RowActionButton>\n ))}\n </div>,\n portalContainer ?? document.body\n )}\n </div>\n )\n}\n\nfunction RowActionButton({\n children,\n danger,\n onClick,\n}: {\n children: React.ReactNode\n danger?: boolean\n onClick: () => void\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent\",\n danger && \"text-destructive hover:bg-destructive/10 hover:text-destructive\"\n )}\n >\n {children}\n </button>\n )\n}\n","import { useEffect, useRef, useState } from \"react\"\nimport type { CellContext } from \"@tanstack/react-table\"\n\nimport { cn } from \"./lib/utils\"\nimport { Input } from \"./ui/input\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Badge } from \"./ui/badge\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\nexport type EditableCellProps<TData, TValue> = CellContext<TData, TValue> & {\n isEditing: boolean\n /** True only when this cell was directly opened for edit (double-click). Row-edit mode keeps this false to avoid auto-opening every editor at once. */\n autoOpen?: boolean\n onCommit: (value: unknown) => void\n onCancel: () => void\n onStartEdit: () => void\n}\n\nexport function EditableCell<TData, TValue>({\n getValue,\n column,\n row,\n isEditing,\n autoOpen,\n onCommit,\n onCancel,\n onStartEdit,\n}: EditableCellProps<TData, TValue>) {\n const meta = column.columnDef.meta\n const editor = meta?.editor ?? \"text\"\n const align = meta?.align ?? \"left\"\n const initial = getValue()\n const [local, setLocal] = useState<unknown>(initial)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n setLocal(initial)\n }, [initial, isEditing])\n\n useEffect(() => {\n if (isEditing && inputRef.current) inputRef.current.focus()\n }, [isEditing])\n\n const isEditable = (() => {\n const flag = meta?.isEditable\n if (flag === undefined) return true\n if (typeof flag === \"function\") return flag(row.original)\n return flag\n })()\n\n // Display mode\n if (!isEditing || !isEditable) {\n const display = renderDisplay(initial, editor, meta)\n return (\n <div\n className={cn(\n \"flex h-7 items-center gap-1.5 rounded px-1.5 text-sm\",\n isEditable &&\n \"cursor-text outline-1 outline-transparent transition-colors hover:bg-muted/60 hover:outline-border\",\n align === \"right\" && \"justify-end\",\n align === \"center\" && \"justify-center\"\n )}\n onDoubleClick={() => isEditable && onStartEdit()}\n title={isEditable ? \"Double-click to edit\" : undefined}\n >\n {display}\n </div>\n )\n }\n\n const commit = (value: unknown) => { if (isEditable) onCommit(value) }\n const handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") commit(local)\n else if (e.key === \"Escape\") onCancel()\n }\n\n if (editor === \"select\") {\n const opts = meta?.selectOptions ?? []\n if (!autoOpen) {\n return (\n <select\n value={String(local ?? \"\")}\n onChange={(e) => {\n setLocal(e.target.value)\n commit(e.target.value)\n }}\n className={cn(\n \"h-7 w-full rounded-md border border-input bg-background px-1.5 text-xs outline-none focus-visible:border-ring\",\n align === \"right\" && \"text-right\",\n align === \"center\" && \"text-center\"\n )}\n >\n {opts.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n )\n }\n\n return (\n <Select\n defaultOpen={autoOpen}\n value={String(local ?? \"\")}\n onValueChange={(v) => commit(v)}\n >\n <SelectTrigger size=\"sm\" className=\"h-7 w-full text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {opts.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n if (editor === \"checkbox\" || editor === \"switch\") {\n return (\n <div className=\"flex h-7 items-center justify-center\">\n <Checkbox\n checked={!!local}\n onCheckedChange={(c) => commit(!!c)}\n autoFocus\n />\n </div>\n )\n }\n\n return (\n <Input\n ref={inputRef}\n type={\n editor === \"number\" || editor === \"currency\"\n ? \"number\"\n : editor === \"date\"\n ? \"date\"\n : \"text\"\n }\n value={local == null ? \"\" : String(local)}\n onChange={(e) => {\n if (editor === \"number\" || editor === \"currency\") {\n setLocal(e.target.value === \"\" ? null : Number(e.target.value))\n } else {\n setLocal(e.target.value)\n }\n }}\n onBlur={() => commit(local)}\n onKeyDown={handleKey}\n className={cn(\n \"h-7 px-1.5 text-sm\",\n align === \"right\" && \"text-right\",\n align === \"center\" && \"text-center\"\n )}\n />\n )\n}\n\nfunction renderDisplay(\n value: unknown,\n editor: string,\n meta?: { selectOptions?: { value: string; label: string }[]; badgeMap?: Partial<Record<string, \"default\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\" | \"outline\">> }\n) {\n if (value === null || value === undefined || value === \"\") {\n return <span className=\"text-muted-foreground/60\">—</span>\n }\n\n if (editor === \"currency\") {\n const n = typeof value === \"number\" ? value : Number(value)\n return Number.isFinite(n)\n ? new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }).format(n)\n : String(value)\n }\n if (editor === \"number\") {\n const n = typeof value === \"number\" ? value : Number(value)\n return Number.isFinite(n) ? new Intl.NumberFormat().format(n) : String(value)\n }\n if (editor === \"checkbox\" || editor === \"switch\") {\n return (\n <Checkbox checked={!!value} disabled aria-label=\"value\" />\n )\n }\n if (editor === \"select\") {\n const opt = meta?.selectOptions?.find((o) => o.value === value)\n const label = opt?.label ?? String(value)\n if (meta?.badgeMap) {\n const variant = meta.badgeMap[String(value)] ?? \"default\"\n return <Badge variant={variant}>{label}</Badge>\n }\n return label\n }\n if (editor === \"date\") {\n if (value instanceof Date) return value.toLocaleDateString()\n return String(value)\n }\n return String(value)\n}\n","import type { CSSProperties } from \"react\"\n\n/**\n * CSS variable overrides for a single DataTable instance.\n *\n * The component is built on shadcn/ui's CSS custom properties. By default it\n * inherits whatever is defined on the consumer's :root (e.g. when shadcn is\n * already set up). Pass any of these to override on a specific instance —\n * values are emitted as inline CSS variables on the table root, scoped\n * through CSS cascade to that instance only.\n */\nexport type DataTableTokens = {\n background?: string\n foreground?: string\n card?: string\n cardForeground?: string\n popover?: string\n popoverForeground?: string\n primary?: string\n primaryForeground?: string\n secondary?: string\n secondaryForeground?: string\n muted?: string\n mutedForeground?: string\n accent?: string\n accentForeground?: string\n destructive?: string\n destructiveForeground?: string\n border?: string\n input?: string\n ring?: string\n\n /** Border radius (e.g. \"0.5rem\"). */\n radius?: string\n /** Font family for the table body. */\n fontFamily?: string\n}\n\n/**\n * A theme passed to `<DataTable theme={…}>`.\n *\n * Two accepted shapes:\n *\n * 1. A flat token map (`DataTableTokens`) — applied as-is, no dark variant.\n * 2. A moded map (`DataTableModedTheme`) — `light` is applied by default,\n * `dark` is swapped in automatically inside `@media (prefers-color-scheme: dark)`\n * *and* inside any `.dark` ancestor.\n */\nexport type DataTableModedTheme = {\n light?: DataTableTokens\n dark?: DataTableTokens\n}\n\nexport type DataTableTheme = DataTableTokens | DataTableModedTheme\n\nconst TOKEN_TO_VAR: Record<keyof DataTableTokens, string> = {\n background: \"--background\",\n foreground: \"--foreground\",\n card: \"--card\",\n cardForeground: \"--card-foreground\",\n popover: \"--popover\",\n popoverForeground: \"--popover-foreground\",\n primary: \"--primary\",\n primaryForeground: \"--primary-foreground\",\n secondary: \"--secondary\",\n secondaryForeground: \"--secondary-foreground\",\n muted: \"--muted\",\n mutedForeground: \"--muted-foreground\",\n accent: \"--accent\",\n accentForeground: \"--accent-foreground\",\n destructive: \"--destructive\",\n destructiveForeground: \"--destructive-foreground\",\n border: \"--border\",\n input: \"--input\",\n ring: \"--ring\",\n radius: \"--radius\",\n fontFamily: \"--font-family\",\n}\n\n// Values are declarations, never CSS rules or network requests. Apply the same\n// validation to inline light tokens and interpolated dark-theme declarations.\nfunction isSafeToken(value: unknown): value is string {\n return typeof value === \"string\" && !/[;{}<>@\\\\\\u0000-\\u001f]/.test(value) && !/\\/\\*|\\*\\/|url\\s*\\(|expression\\s*\\(/i.test(value)\n}\n\nfunction isModed(theme: DataTableTheme | undefined): theme is DataTableModedTheme {\n if (!theme) return false\n return \"light\" in theme || \"dark\" in theme\n}\n\n/** Convert a DataTableTokens map into a CSS `style` object. */\nexport function tokensToStyle(tokens?: DataTableTokens): CSSProperties {\n if (!tokens) return {}\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(tokens)) {\n if (!isSafeToken(v)) continue\n const cssVar = Object.prototype.hasOwnProperty.call(TOKEN_TO_VAR, k) ? TOKEN_TO_VAR[k as keyof DataTableTokens] : undefined\n if (cssVar) out[cssVar] = v\n }\n return out as CSSProperties\n}\n\n/**\n * Back-compat: original API accepted a flat `DataTableTheme`. Still works,\n * but if a moded theme is passed it returns the `light` variant only — use\n * `splitTheme` if you need both variants.\n */\nexport function themeToStyle(theme?: DataTableTheme): CSSProperties {\n if (!theme) return {}\n if (isModed(theme)) return tokensToStyle(theme.light)\n return tokensToStyle(theme as DataTableTokens)\n}\n\n/**\n * Split a theme into its `light` (always applied) and optional `dark` (applied\n * via `@media (prefers-color-scheme: dark)` and `.dark` ancestor) variants.\n *\n * For flat themes, returns `{ light: theme, dark: undefined }`.\n */\nexport function splitTheme(theme?: DataTableTheme): {\n light: DataTableTokens | undefined\n dark: DataTableTokens | undefined\n} {\n if (!theme) return { light: undefined, dark: undefined }\n if (isModed(theme)) return { light: theme.light, dark: theme.dark }\n return { light: theme as DataTableTokens, dark: undefined }\n}\n\n// ---------------------------------------------------------------------------\n// Preset builder\n// ---------------------------------------------------------------------------\n\n/**\n * Build a full light+dark token set from a single OKLCH hue.\n *\n * @param hue Hue angle 0–360 (e.g. 285 for violet, 162 for emerald).\n * @param chroma Optional base chroma for tinted neutrals (default 0.03).\n */\nexport function buildPreset(hue: number, chroma = 0.03): DataTableModedTheme {\n const c = chroma\n // The destructive hue stays in the red band but is nudged a little toward\n // the preset's hue so it sits in the same visual family without losing the\n // universal \"this is dangerous\" red signal. Distance from rose (~15°) is\n // small for warm presets and larger for cool ones — clamped.\n const destH = blendTowardRed(hue)\n return {\n light: {\n background: `oklch(0.99 ${c * 0.2} ${hue})`,\n foreground: `oklch(0.18 ${c * 1.2} ${hue})`,\n card: `oklch(1 0 0)`,\n cardForeground: `oklch(0.18 ${c * 1.2} ${hue})`,\n popover: `oklch(1 0 0)`,\n popoverForeground: `oklch(0.18 ${c * 1.2} ${hue})`,\n primary: `oklch(0.55 0.2 ${hue})`,\n primaryForeground: `oklch(0.99 0 0)`,\n secondary: `oklch(0.96 ${c} ${hue})`,\n secondaryForeground: `oklch(0.25 ${c * 2} ${hue})`,\n muted: `oklch(0.96 ${c} ${hue})`,\n mutedForeground: `oklch(0.5 ${c * 1.5} ${hue})`,\n accent: `oklch(0.94 ${c * 1.2} ${hue})`,\n accentForeground: `oklch(0.3 ${c * 3} ${hue})`,\n destructive: `oklch(0.577 0.22 ${destH})`,\n destructiveForeground: `oklch(0.985 0 0)`,\n border: `oklch(0.9 ${c * 0.8} ${hue})`,\n input: `oklch(0.9 ${c * 0.8} ${hue})`,\n ring: `oklch(0.55 0.2 ${hue} / 0.5)`,\n radius: \"0.625rem\",\n },\n dark: {\n background: `oklch(0.16 ${c * 0.6} ${hue})`,\n foreground: `oklch(0.97 ${c * 0.2} ${hue})`,\n card: `oklch(0.21 ${c * 0.8} ${hue})`,\n cardForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n popover: `oklch(0.21 ${c * 0.8} ${hue})`,\n popoverForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n primary: `oklch(0.7 0.18 ${hue})`,\n primaryForeground: `oklch(0.16 ${c * 0.6} ${hue})`,\n secondary: `oklch(0.27 ${c * 0.8} ${hue})`,\n secondaryForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n muted: `oklch(0.27 ${c * 0.8} ${hue})`,\n mutedForeground: `oklch(0.7 ${c * 0.5} ${hue})`,\n accent: `oklch(0.3 ${c * 1.5} ${hue})`,\n accentForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n destructive: `oklch(0.65 0.22 ${destH})`,\n destructiveForeground: `oklch(0.985 0 0)`,\n border: `oklch(0.27 ${c * 0.8} ${hue})`,\n input: `oklch(0.27 ${c * 0.8} ${hue})`,\n ring: `oklch(0.7 0.18 ${hue} / 0.5)`,\n radius: \"0.625rem\",\n },\n }\n}\n\n/** Pull a hue gently toward the red band so destructive stays unmistakably \"red-ish\". */\nfunction blendTowardRed(hue: number): number {\n const red = 25\n // Wrap-aware shortest-path blend with weight 0.7 toward red.\n let delta = ((hue - red + 540) % 360) - 180\n return (red + delta * 0.3 + 360) % 360\n}\n\n/**\n * Convert a tokens map into a CSS declaration string (no selector, no braces),\n * e.g. `--background:oklch(1 0 0);--foreground:oklch(0.145 0 0)`.\n *\n * Used internally to inject scoped <style> blocks for moded themes.\n */\nexport function tokensToCssBlock(tokens?: DataTableTokens): string {\n if (!tokens) return \"\"\n const parts: string[] = []\n for (const [k, v] of Object.entries(tokens)) {\n if (!isSafeToken(v)) continue\n const cssVar = Object.prototype.hasOwnProperty.call(TOKEN_TO_VAR, k) ? TOKEN_TO_VAR[k as keyof DataTableTokens] : undefined\n if (cssVar) parts.push(`${cssVar}:${v}`)\n }\n return parts.join(\";\")\n}\n\n/** Pure neutral (grayscale) preset — no hue, no chroma. */\nconst neutral: DataTableModedTheme = {\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.145 0 0)\",\n card: \"oklch(1 0 0)\",\n cardForeground: \"oklch(0.145 0 0)\",\n popover: \"oklch(1 0 0)\",\n popoverForeground: \"oklch(0.145 0 0)\",\n primary: \"oklch(0.205 0 0)\",\n primaryForeground: \"oklch(0.985 0 0)\",\n secondary: \"oklch(0.97 0 0)\",\n secondaryForeground: \"oklch(0.205 0 0)\",\n muted: \"oklch(0.97 0 0)\",\n mutedForeground: \"oklch(0.556 0 0)\",\n accent: \"oklch(0.97 0 0)\",\n accentForeground: \"oklch(0.205 0 0)\",\n destructive: \"oklch(0.577 0.245 27.325)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n border: \"oklch(0.922 0 0)\",\n input: \"oklch(0.922 0 0)\",\n ring: \"oklch(0.708 0 0)\",\n radius: \"0.625rem\",\n },\n dark: {\n background: \"oklch(0.145 0 0)\",\n foreground: \"oklch(0.985 0 0)\",\n card: \"oklch(0.205 0 0)\",\n cardForeground: \"oklch(0.985 0 0)\",\n popover: \"oklch(0.205 0 0)\",\n popoverForeground: \"oklch(0.985 0 0)\",\n primary: \"oklch(0.985 0 0)\",\n primaryForeground: \"oklch(0.205 0 0)\",\n secondary: \"oklch(0.269 0 0)\",\n secondaryForeground: \"oklch(0.985 0 0)\",\n muted: \"oklch(0.269 0 0)\",\n mutedForeground: \"oklch(0.708 0 0)\",\n accent: \"oklch(0.269 0 0)\",\n accentForeground: \"oklch(0.985 0 0)\",\n destructive: \"oklch(0.577 0.245 27.325 / 0.6)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n border: \"oklch(0.269 0 0)\",\n input: \"oklch(0.269 0 0)\",\n ring: \"oklch(0.439 0 0)\",\n radius: \"0.625rem\",\n },\n}\n\n/**\n * Ready-to-use theme presets.\n *\n * Each preset is a full light + dark token set — passing one to\n * `<DataTable theme={…}>` repaints the entire table and auto-flips on OS\n * dark mode (or when a `.dark` ancestor is added).\n *\n * Custom hues:\n *\n * ```ts\n * import { buildPreset } from \"@dynostack/react-grid\"\n * const tealPreset = buildPreset(180)\n * ```\n */\nexport const themePresets = {\n neutral,\n light: { light: neutral.light } satisfies DataTableModedTheme,\n dark: { light: neutral.dark } satisfies DataTableModedTheme,\n violet: buildPreset(285),\n emerald: buildPreset(162),\n amber: buildPreset(65),\n rose: buildPreset(15),\n sky: buildPreset(235),\n slate: buildPreset(240, 0.015),\n} satisfies Record<string, DataTableModedTheme>\n\nexport type DataTableThemeName = keyof typeof themePresets\n\n/**\n * Bundled fallback tokens used when `<DataTable isolate>` is set. These let\n * the grid render correctly even when the consumer hasn't imported\n * `styles.css` or provided any theme of their own.\n */\nexport const ISOLATE_LIGHT_TOKENS: DataTableTokens = neutral.light!\nexport const ISOLATE_DARK_TOKENS: DataTableTokens = neutral.dark!\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Sheet(props: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-foreground/30 backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\ntype SheetSide = \"right\" | \"left\" | \"top\" | \"bottom\"\n\nconst SIDE_CLASS: Record<SheetSide, string> = {\n right:\n \"right-0 top-0 h-full w-full border-l sm:w-[min(48rem,calc(100vw-2rem))] data-closed:slide-out-to-right data-open:slide-in-from-right\",\n left:\n \"left-0 top-0 h-full w-full border-r sm:w-[min(48rem,calc(100vw-2rem))] data-closed:slide-out-to-left data-open:slide-in-from-left\",\n top:\n \"left-0 top-0 w-full max-h-[80vh] border-b data-closed:slide-out-to-top data-open:slide-in-from-top\",\n bottom:\n \"left-0 bottom-0 w-full max-h-[80vh] border-t data-closed:slide-out-to-bottom data-open:slide-in-from-bottom\",\n}\n\nfunction SheetContent({\n className,\n side = \"right\",\n children,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & { side?: SheetSide }) {\n const container = usePortalContainer()\n return (\n <DialogPrimitive.Portal container={container ?? undefined}>\n <SheetOverlay />\n <DialogPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background p-6 shadow-lg outline-none transition data-open:animate-in data-closed:animate-out duration-200\",\n SIDE_CLASS[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute top-4 right-4 rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 pr-8\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetTitle,\n SheetTrigger,\n}\nexport type { SheetSide }\n","\"use client\"\n\nimport { useMemo, useState } from \"react\"\nimport type { Column, Table } from \"@tanstack/react-table\"\nimport { LayoutGridIcon, ListIcon, Rows3Icon } from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n type SheetSide,\n} from \"./ui/sheet\"\nimport { cn } from \"./lib/utils\"\n\nexport type ViewSheetDensity = \"compact\" | \"relaxed\" | \"comfy\"\n\nexport type ViewSheetLabels = {\n title?: (row: any) => React.ReactNode\n description?: (row: any) => React.ReactNode\n emptyValue?: string\n density?: {\n compact?: string\n relaxed?: string\n comfy?: string\n }\n}\n\nexport type ViewSheetConfig<TData> = {\n /** Side of the screen to slide in from. Defaults to \"right\". */\n side?: SheetSide\n /** Initial layout density. Defaults to \"compact\" (more fields per row). */\n defaultDensity?: ViewSheetDensity\n /** Hide the density tabs entirely if you want a fixed layout. */\n hideDensityTabs?: boolean\n /** Override how a field's value is rendered. */\n renderField?: (args: {\n column: Column<TData, unknown>\n value: unknown\n row: TData\n }) => React.ReactNode\n /** Custom header for the sheet. */\n renderHeader?: (row: TData) => React.ReactNode\n /** Filter / reorder which columns appear. Defaults to all visible columns. */\n fields?: string[]\n /** Override label / placeholder strings. */\n labels?: ViewSheetLabels\n}\n\nconst COLS_CLASS: Record<ViewSheetDensity, string> = {\n compact: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n relaxed: \"grid-cols-1 sm:grid-cols-2\",\n comfy: \"grid-cols-1\",\n}\n\nconst CARD_CLASS: Record<ViewSheetDensity, string> = {\n compact: \"gap-0.5 p-2.5\",\n relaxed: \"gap-1 p-3\",\n comfy: \"gap-1.5 p-4\",\n}\n\nconst DENSITY_ICON: Record<ViewSheetDensity, React.ReactNode> = {\n compact: <LayoutGridIcon className=\"size-3.5\" />,\n relaxed: <Rows3Icon className=\"size-3.5\" />,\n comfy: <ListIcon className=\"size-3.5\" />,\n}\n\nexport function DataTableViewSheet<TData>({\n table,\n row,\n open,\n onOpenChange,\n config,\n}: {\n table: Table<TData>\n row: TData | null\n open: boolean\n onOpenChange: (open: boolean) => void\n config?: ViewSheetConfig<TData>\n}) {\n const [density, setDensity] = useState<ViewSheetDensity>(\n config?.defaultDensity ?? \"compact\"\n )\n\n const fields = useMemo(() => {\n if (!row) return []\n const wanted = config?.fields\n const allCols = table.getAllLeafColumns().filter((c) => {\n // skip internal selection/actions columns\n if (c.id === \"__select\" || c.id === \"__actions\" || c.id === \"__expand\")\n return false\n // when no explicit fields list, only include currently visible cols\n if (wanted) return wanted.includes(c.id)\n return c.getIsVisible()\n })\n if (wanted) {\n // preserve consumer ordering\n return wanted\n .map((id) => allCols.find((c) => c.id === id))\n .filter((c): c is Column<TData, unknown> => Boolean(c))\n }\n return allCols\n }, [table, row, config?.fields])\n\n if (!row) return null\n\n const labels = config?.labels\n const emptyValue = labels?.emptyValue ?? \"—\"\n const densityLabels = {\n compact: labels?.density?.compact ?? \"Compact\",\n relaxed: labels?.density?.relaxed ?? \"Relaxed\",\n comfy: labels?.density?.comfy ?? \"Comfy\",\n }\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side={config?.side ?? \"right\"}>\n {config?.renderHeader ? (\n config.renderHeader(row)\n ) : (\n <SheetHeader>\n <SheetTitle>\n {labels?.title ? labels.title(row) : \"Details\"}\n </SheetTitle>\n {labels?.description && (\n <SheetDescription>{labels.description(row)}</SheetDescription>\n )}\n </SheetHeader>\n )}\n\n {!config?.hideDensityTabs && (\n <div\n role=\"tablist\"\n aria-label=\"Layout density\"\n className=\"inline-flex w-fit gap-0.5 rounded-md border bg-muted/40 p-0.5 text-xs\"\n >\n {([\"compact\", \"relaxed\", \"comfy\"] as const).map((d) => (\n <button\n key={d}\n role=\"tab\"\n aria-selected={density === d}\n onClick={() => setDensity(d)}\n className={cn(\n \"inline-flex items-center gap-1 rounded px-2 py-1 transition-colors\",\n density === d\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {DENSITY_ICON[d]}\n {densityLabels[d]}\n </button>\n ))}\n </div>\n )}\n\n <div className={cn(\"grid gap-3 overflow-y-auto\", COLS_CLASS[density])}>\n {fields.map((col) => {\n const colId = col.id\n const colDef = col.columnDef\n const headerLabel =\n (colDef.meta as { label?: string } | undefined)?.label ??\n (typeof colDef.header === \"string\" ? colDef.header : colId)\n // @ts-expect-error - accessor key is column-specific\n const rawValue = (row as any)[colDef.accessorKey ?? colId]\n const rendered = config?.renderField\n ? config.renderField({ column: col, value: rawValue, row })\n : defaultRenderValue(rawValue, emptyValue)\n return (\n <div\n key={colId}\n className={cn(\n \"flex min-w-0 flex-col rounded-md border bg-card\",\n CARD_CLASS[density]\n )}\n >\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {headerLabel}\n </span>\n <span className=\"break-words text-sm text-foreground\">\n {rendered}\n </span>\n </div>\n )\n })}\n </div>\n\n <div className=\"mt-2 flex justify-end\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n </SheetContent>\n </Sheet>\n )\n}\n\nfunction defaultRenderValue(value: unknown, empty: string): React.ReactNode {\n if (value == null || value === \"\") return empty\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\"\n if (value instanceof Date) return value.toLocaleString()\n if (typeof value === \"object\") return JSON.stringify(value)\n return String(value)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>\n) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n const container = usePortalContainer()\n const positionClass = container ? \"absolute\" : \"fixed\"\n return (\n <AlertDialogPrimitive.Portal container={container ?? undefined}>\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"inset-0 z-50 bg-foreground/30 backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n positionClass\n )}\n />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n positionClass,\n className\n )}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Content>\n </AlertDialogPrimitive.Portal>\n )\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","\"use client\"\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"./ui/alert-dialog\"\n\nexport type ConfirmDeleteContext<TData> = {\n /** The rows being deleted. Single-row delete passes one row; bulk passes many. */\n rows: TData[]\n /** \"single\" when triggered from the row actions menu; \"bulk\" from the toolbar. */\n source: \"single\" | \"bulk\"\n}\n\nexport type ConfirmDeleteConfig<TData> = {\n /** Modal title. Receives the same context the resolver receives. */\n title?: (ctx: ConfirmDeleteContext<TData>) => React.ReactNode\n /** Modal description / body. */\n description?: (ctx: ConfirmDeleteContext<TData>) => React.ReactNode\n /** Confirm button label. Defaults to \"Delete\". */\n confirmLabel?: string\n /** Cancel button label. Defaults to \"Cancel\". */\n cancelLabel?: string\n}\n\nexport function DataTableConfirmDelete<TData>({\n open,\n onOpenChange,\n context,\n onConfirm,\n config,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n context: ConfirmDeleteContext<TData> | null\n onConfirm: () => void\n config?: ConfirmDeleteConfig<TData>\n}) {\n if (!context) return null\n const title = config?.title\n ? config.title(context)\n : context.source === \"bulk\"\n ? `Delete ${context.rows.length} ${context.rows.length === 1 ? \"row\" : \"rows\"}?`\n : \"Delete this row?\"\n const description = config?.description\n ? config.description(context)\n : context.source === \"bulk\"\n ? `${context.rows.length} ${context.rows.length === 1 ? \"row\" : \"rows\"} will be permanently removed. This cannot be undone.`\n : \"This row will be permanently removed. This cannot be undone.\"\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{config?.cancelLabel ?? \"Cancel\"}</AlertDialogCancel>\n <AlertDialogAction\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={onConfirm}\n >\n {config?.confirmLabel ?? \"Delete\"}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { createContext, useContext, useEffect, useId, useMemo, useRef, useState } from \"react\"\nimport {\n type CellContext,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n type Table as TanstackTable,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n GripVerticalIcon,\n Loader2Icon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Skeleton } from \"./ui/skeleton\"\n\nimport { DataTableToolbar } from \"./data-table-toolbar\"\nimport { DataTablePagination } from \"./data-table-pagination\"\nimport { DataTableColumnHeader } from \"./data-table-column-header\"\nimport {\n DataTableRowActions,\n type CustomRowAction,\n type RowActionId,\n} from \"./data-table-row-actions\"\nimport { EditableCell } from \"./editable-cell\"\nimport {\n booleanFilterFn,\n dateFilterFn,\n numberFilterFn,\n setFilterFn,\n textFilterFn,\n} from \"./filters\"\nimport {\n ISOLATE_DARK_TOKENS,\n ISOLATE_LIGHT_TOKENS,\n splitTheme,\n tokensToCssBlock,\n tokensToStyle,\n type DataTableTheme,\n type DataTableTokens,\n} from \"./theme\"\nimport { PortalContainerContext } from \"./portal-container\"\nimport {\n DataTableViewSheet,\n type ViewSheetConfig,\n} from \"./data-table-view-sheet\"\nimport {\n DataTableConfirmDelete,\n type ConfirmDeleteConfig,\n type ConfirmDeleteContext,\n} from \"./data-table-confirm-delete\"\nimport \"./types\"\n\n// ----- public configuration types --------------------------------------\n\nexport type DataTableFeatures = {\n /** Toolbar global search input (default: true). */\n search?: boolean\n /** Toolbar refresh button (default: true when onRefresh is provided). */\n refresh?: boolean\n /** Column visibility menu (default: true). */\n columnVisibility?: boolean\n /** CSV / Excel export menu (default: true). */\n export?: boolean\n /** \"Add row\" toolbar button (default: true when onAddRow is provided). */\n addRow?: boolean\n /** Bottom pagination controls (default: true). */\n pagination?: boolean\n /** Sort headers (default: true). */\n sorting?: boolean\n /** Per-column filtering (default: true). */\n filtering?: boolean\n /** Column resizing handles (default: true). */\n resizing?: boolean\n /** Drag-to-reorder columns (default: true). */\n reordering?: boolean\n /** Pin / unpin column controls (default: true). */\n pinning?: boolean\n}\n\nexport type DataTableLabels = {\n search?: string\n addRow?: string\n delete?: string\n clear?: string\n selected?: string\n refresh?: string\n columns?: string\n export?: string\n csv?: string\n excel?: string\n total?: string\n noData?: string\n noResults?: string\n loadError?: string\n retry?: string\n refreshing?: string\n rowsPerPage?: string\n page?: string\n of?: string\n}\n\nexport type DataTableDensity = \"compact\" | \"default\" | \"comfortable\"\n\nexport type DataTableFetchParams = {\n pageIndex: number\n pageSize: number\n sorting: SortingState\n columnFilters: ColumnFiltersState\n globalFilter: string\n}\n\nexport type DataTableDataSourceResult<TData> =\n | TData[]\n | {\n rows: TData[]\n totalRecords?: number\n }\n\nexport type DataTableErrorContext = {\n type: \"load\" | \"refresh\"\n message: string\n}\n\nexport type DataTableDataSource<TData> = {\n /**\n * Fetch rows internally. In \"client\" mode, return the full data set and the\n * table applies client-side sort/filter/pagination. In \"server\" mode, return\n * the current page and optionally `totalRecords`.\n */\n fetchRows: (\n params: DataTableFetchParams\n ) => Promise<DataTableDataSourceResult<TData>>\n /** \"client\" by default. Use \"server\" for API-side pagination/filter/sort. */\n mode?: \"client\" | \"server\"\n /** Set false to pause fetching. */\n enabled?: boolean\n /** Optional rows to show before the first fetch resolves. */\n initialData?: TData[]\n /** Refetch when these external values change. Memoize this array. */\n deps?: readonly unknown[]\n /** Called for load/refresh errors so apps can show a toast. */\n onError?: (error: unknown, context: DataTableErrorContext) => void\n}\n\n// ----- helpers ----------------------------------------------------------\n\nfunction getPinningStyles<TData>(\n column: ReturnType<TanstackTable<TData>[\"getAllLeafColumns\"]>[number]\n): React.CSSProperties {\n const isPinned = column.getIsPinned()\n if (!isPinned) return {}\n const isLast =\n isPinned === \"left\" && column.getIsLastColumn(\"left\")\n const isFirst =\n isPinned === \"right\" && column.getIsFirstColumn(\"right\")\n return {\n position: \"sticky\",\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n zIndex: 1,\n boxShadow: isLast\n ? \"1px 0 0 0 var(--border)\"\n : isFirst\n ? \"-1px 0 0 0 var(--border)\"\n : undefined,\n }\n}\n\n// ----- editing context --------------------------------------------------\n//\n// Cell renderers must be stable function references. tanstack-table's\n// `flexRender` does `React.createElement(Comp, props)`, so a fresh arrow\n// function per render makes React see a brand-new component type at the\n// same tree position and unmount/remount the cell. Remounting tears down\n// and re-attaches Radix's composed refs (e.g. inside Checkbox / Slot),\n// which can trigger an infinite \"Maximum update depth\" loop under React 19.\n//\n// To keep the cell renderers stable, we keep editing state and handlers in\n// a context and let the host components read from it.\n\ntype EditingContextValue<TData> = {\n editingCell: { rowId: string; colId: string } | null\n editingRowId: string | null\n rowDraft: Record<string, Partial<TData>>\n setEditingCell: (next: { rowId: string; colId: string } | null) => void\n setEditingRowId: (next: string | null) => void\n setRowDraft: React.Dispatch<\n React.SetStateAction<Record<string, Partial<TData>>>\n >\n rowActions: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customRowActions?: CustomRowAction<TData>[]\n onRowAction?: (action: RowActionId, row: TData) => void\n onCellEdit?: (row: TData, columnId: string, value: unknown) => void\n onRowSave?: (row: TData, draft: Partial<TData>) => void\n onView?: (row: TData) => void\n onRequestDelete?: (row: TData) => void\n}\n\nconst DataTableEditingContext = createContext<EditingContextValue<unknown> | null>(\n null\n)\n\nfunction useEditingContext<TData>(): EditingContextValue<TData> {\n const ctx = useContext(DataTableEditingContext)\n if (!ctx) throw new Error(\"DataTable editing context missing\")\n return ctx as unknown as EditingContextValue<TData>\n}\n\nfunction DefaultCellHost<TData, TValue>(ctx: CellContext<TData, TValue>) {\n const value = ctx.getValue()\n return value == null ? null : String(value)\n}\n\nfunction EditableCellHost<TData, TValue>(ctx: CellContext<TData, TValue>) {\n const {\n editingCell,\n editingRowId,\n setEditingCell,\n setRowDraft,\n onCellEdit,\n } = useEditingContext<TData>()\n const colId = ctx.column.id\n const rowId = ctx.row.id\n const isCellEdit =\n editingCell?.rowId === rowId && editingCell.colId === colId\n const isRowEdit = editingRowId === rowId\n const isEditing = isCellEdit || isRowEdit\n\n return (\n <EditableCell\n {...ctx}\n isEditing={isEditing}\n autoOpen={isCellEdit}\n onStartEdit={() => setEditingCell({ rowId, colId })}\n onCancel={() => {\n if (isCellEdit) setEditingCell(null)\n }}\n onCommit={(value) => {\n if (isRowEdit) {\n setRowDraft((d) => ({\n ...d,\n [rowId]: {\n ...d[rowId],\n [colId]: value as TData[keyof TData],\n },\n }))\n return\n }\n setEditingCell(null)\n if (value !== ctx.getValue()) {\n onCellEdit?.(ctx.row.original, colId, value)\n }\n }}\n />\n )\n}\n\nfunction ActionsCellHost<TData>({ row }: CellContext<TData, unknown>) {\n const {\n editingRowId,\n setEditingRowId,\n rowDraft,\n setRowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onRowSave,\n onView,\n onRequestDelete,\n } = useEditingContext<TData>()\n const rowId = row.id\n const isRowEdit = editingRowId === rowId\n return (\n <DataTableRowActions\n row={row.original}\n actions={rowActions}\n customActions={customRowActions}\n isEditing={isRowEdit}\n onSaveEdit={() => {\n onRowSave?.(row.original, rowDraft[rowId] ?? {})\n setRowDraft((d) => {\n const { [rowId]: _, ...rest } = d\n return rest\n })\n setEditingRowId(null)\n }}\n onCancelEdit={() => {\n setRowDraft((d) => {\n const { [rowId]: _, ...rest } = d\n return rest\n })\n setEditingRowId(null)\n }}\n onAction={(a) => {\n if (a === \"edit\") {\n setEditingRowId(rowId)\n return\n }\n if (a === \"view\") {\n onView?.(row.original)\n } else if (a === \"delete\") {\n onRequestDelete?.(row.original)\n return\n }\n onRowAction?.(a, row.original)\n }}\n />\n )\n}\n\n// ----- types ------------------------------------------------------------\n\nexport type DataTableProps<TData extends { id: string | number }> = {\n data?: TData[]\n columns: ColumnDef<TData>[]\n\n /** Optional internal fetcher. Omit this when using controlled `data`. */\n dataSource?: DataTableDataSource<TData>\n\n isLoading?: boolean\n isFetching?: boolean\n onRefresh?: () => void\n\n totalRecords?: number\n exportFileName?: string\n\n /** Hide the row-selection checkbox column. */\n enableSelection?: boolean\n /** Render an expandable detail panel under the row. */\n renderSubRow?: (row: TData) => React.ReactNode\n /** Use TanStack's built-in nested rows via this accessor. */\n getSubRows?: (row: TData) => TData[] | undefined\n\n rowActions?: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customRowActions?: CustomRowAction<TData>[]\n onRowAction?: (action: RowActionId, row: TData) => void\n /**\n * Handler for the built-in \"View\" action. If omitted, the grid still opens\n * the View sheet (unless `viewSheet={false}`). Use this to also log,\n * navigate, or fetch detail data when a user opens View.\n */\n onView?: (row: TData) => void\n /**\n * Handler for the built-in \"Delete\" action. Fires *after* the user confirms\n * in the delete modal (or immediately if `confirmDelete={false}`).\n * If omitted, the grid only emits via `onRowAction(\"delete\", row)`.\n */\n onDelete?: (row: TData) => void\n /**\n * Configure the built-in View sheet — side, density, custom renderers.\n * Pass `false` to disable; clicking \"View\" will then only fire\n * `onView` / `onRowAction` without opening a sheet.\n */\n viewSheet?: ViewSheetConfig<TData> | false\n /**\n * Configure the delete confirmation modal. Pass `false` to disable it and\n * fire delete handlers immediately. Pass an object to customize title,\n * description, and button labels. Defaults to enabled with built-in copy.\n */\n confirmDelete?: ConfirmDeleteConfig<TData> | boolean\n\n /** Commit a single edited cell. Receives the row, column id and new value. */\n onCellEdit?: (row: TData, columnId: string, value: unknown) => void\n /** Commit an entire row in row-edit mode. */\n onRowSave?: (row: TData, draft: Partial<TData>) => void\n /** Build a fresh empty row when \"Add row\" is clicked. */\n onAddRow?: () => Partial<TData>\n /** Bulk delete selected rows. */\n onBulkDelete?: (rows: TData[]) => void\n\n initialPageSize?: number\n pageSizeOptions?: number[]\n\n initialColumnPinning?: ColumnPinningState\n initialColumnVisibility?: VisibilityState\n /** Initial sort order. */\n initialSorting?: SortingState\n /** Observe selected row objects (loaded rows only in server mode). */\n onSelectionChange?: (rows: TData[]) => void\n /** Accessible table name. */\n ariaLabel?: string\n /** Alternating row backgrounds. */\n striped?: boolean\n /** Keep headers visible inside a vertically constrained table. */\n stickyHeader?: boolean\n /** Scroll viewport height, e.g. \"480px\". */\n maxHeight?: React.CSSProperties[\"maxHeight\"]\n\n /** Optional controlled global filter (for cross-tab persistence). */\n globalFilter?: string\n onGlobalFilterChange?: (value: string) => void\n\n className?: string\n toolbarSlot?: React.ReactNode\n\n /** Toggle individual table features. */\n features?: DataTableFeatures\n /** Override every user-facing string. */\n labels?: DataTableLabels\n /** Row + cell padding density. Defaults to \"default\". */\n density?: DataTableDensity\n /**\n * CSS-variable overrides (shadcn-compatible) scoped to this instance.\n *\n * Two accepted shapes:\n *\n * theme={{ primary: \"...\", accent: \"...\" }} // flat tokens\n * theme={{ light: { ... }, dark: { ... } }} // moded — auto-flips\n *\n * Moded themes apply `light` always and swap to `dark` inside\n * `@media (prefers-color-scheme: dark)` *and* inside any `.dark` ancestor.\n *\n * Use `themePresets.violet` (or any preset) for a ready-made moded theme.\n */\n theme?: DataTableTheme\n /**\n * When `true`, the grid does NOT inherit CSS variables from the app's\n * `:root` (shadcn, custom theme, etc.). Instead it renders with the\n * package's bundled defaults (or whatever you pass via `theme`).\n *\n * Useful when embedding the grid inside a heavily-themed shell where you\n * want the table to keep its own look regardless of surrounding context.\n *\n * Defaults to `false` (inherit app theme).\n */\n isolate?: boolean\n}\n\nconst DEFAULT_LABELS: Required<DataTableLabels> = {\n search: \"Search...\",\n addRow: \"Add row\",\n delete: \"Delete\",\n clear: \"Clear\",\n selected: \"selected\",\n refresh: \"Refresh\",\n columns: \"Columns\",\n export: \"Export\",\n csv: \"CSV\",\n excel: \"Excel\",\n total: \"Total\",\n noData: \"No data.\",\n noResults: \"No rows match the current filters.\",\n loadError: \"Could not load rows.\",\n retry: \"Retry\",\n refreshing: \"Refreshing\",\n rowsPerPage: \"Rows per page\",\n page: \"Page\",\n of: \"of\",\n}\n\nconst DENSITY_CLASS: Record<DataTableDensity, string> = {\n compact: \"[&_tbody_td]:py-0.5 [&_tbody_td]:text-xs\",\n default: \"\",\n comfortable: \"[&_tbody_td]:py-2\",\n}\n\nconst EMPTY_DATA: never[] = []\n\n// ----- component --------------------------------------------------------\n\nexport function DataTable<TData extends { id: string | number }>({\n data,\n columns,\n dataSource,\n isLoading,\n isFetching,\n onRefresh,\n totalRecords,\n exportFileName,\n enableSelection = true,\n renderSubRow,\n getSubRows,\n rowActions = [\"view\", \"edit\", \"duplicate\", \"delete\"],\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n onAddRow,\n onBulkDelete,\n initialPageSize = 10,\n pageSizeOptions,\n initialColumnPinning,\n initialColumnVisibility,\n initialSorting,\n onSelectionChange,\n ariaLabel = \"Data table\",\n striped = false,\n stickyHeader = false,\n maxHeight,\n globalFilter: globalFilterProp,\n onGlobalFilterChange,\n className,\n toolbarSlot,\n features,\n labels: labelsProp,\n density = \"default\",\n theme,\n isolate = false,\n onView,\n onDelete,\n viewSheet,\n confirmDelete = true,\n}: DataTableProps<TData>) {\n const labels: Required<DataTableLabels> = { ...DEFAULT_LABELS, ...labelsProp }\n const f: Required<DataTableFeatures> = {\n search: features?.search ?? true,\n refresh: features?.refresh ?? !!(onRefresh || dataSource),\n columnVisibility: features?.columnVisibility ?? true,\n export: features?.export ?? true,\n addRow: features?.addRow ?? !!onAddRow,\n pagination: features?.pagination ?? true,\n sorting: features?.sorting ?? true,\n filtering: features?.filtering ?? true,\n resizing: features?.resizing ?? true,\n reordering: features?.reordering ?? true,\n pinning: features?.pinning ?? true,\n }\n // ----- theme resolution ----------------------------------------------\n // `theme` can be a flat token map OR a `{ light, dark }` moded shape.\n // When `isolate` is true, fall back to bundled neutral defaults instead\n // of inheriting from the app's :root.\n const rawInstanceId = useId()\n const instanceId = useMemo(\n () => `dyno-grid-${rawInstanceId.replace(/[^a-zA-Z0-9]/g, \"\")}`,\n [rawInstanceId]\n )\n const { lightStyle, darkCss } = useMemo(() => {\n const { light, dark } = splitTheme(theme)\n const lightTokens: DataTableTokens | undefined = isolate\n ? { ...ISOLATE_LIGHT_TOKENS, ...(light ?? {}) }\n : light\n const darkTokens: DataTableTokens | undefined = isolate\n ? { ...ISOLATE_DARK_TOKENS, ...(dark ?? light ?? {}) }\n : dark\n return {\n lightStyle: tokensToStyle(lightTokens),\n darkCss: darkTokens ? tokensToCssBlock(darkTokens) : null,\n }\n }, [theme, isolate])\n\n // ----- portal container -----------------------------------------------\n // Mount popovers / dropdowns / sheets inside the themed grid root so they\n // inherit CSS variables. Using a callback ref ensures the context value\n // flips from null → element on mount and triggers consumers to re-render.\n const [gridRoot, setGridRoot] = useState<HTMLDivElement | null>(null)\n\n // ----- view sheet + delete confirm state ------------------------------\n const [viewRow, setViewRow] = useState<TData | null>(null)\n const [confirmCtx, setConfirmCtx] =\n useState<ConfirmDeleteContext<TData> | null>(null)\n\n const confirmEnabled = confirmDelete !== false\n const confirmConfig: ConfirmDeleteConfig<TData> | undefined =\n typeof confirmDelete === \"object\" ? confirmDelete : undefined\n const viewSheetEnabled = viewSheet !== false\n const viewSheetConfig: ViewSheetConfig<TData> | undefined =\n viewSheet && typeof viewSheet === \"object\" ? viewSheet : undefined\n\n const handleViewRequest = (row: TData) => {\n onView?.(row)\n if (viewSheetEnabled) setViewRow(row)\n }\n const handleDeleteRequest = (row: TData) => {\n if (confirmEnabled) {\n setConfirmCtx({ rows: [row], source: \"single\" })\n } else {\n onDelete?.(row)\n }\n }\n const handleBulkDeleteRequest = (rows: TData[]) => {\n if (confirmEnabled) {\n setConfirmCtx({ rows, source: \"bulk\" })\n } else {\n onBulkDelete?.(rows)\n }\n }\n const handleConfirmDelete = () => {\n if (!confirmCtx) return\n if (confirmCtx.source === \"single\") {\n onDelete?.(confirmCtx.rows[0])\n } else {\n onBulkDelete?.(confirmCtx.rows)\n }\n setConfirmCtx(null)\n }\n\n // ----- state ----------------------------------------------------------\n const [sorting, setSorting] = useState<SortingState>(initialSorting ?? [])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [internalGlobalFilter, setInternalGlobalFilter] = useState(\"\")\n const isControlledFilter = globalFilterProp !== undefined\n const globalFilter = isControlledFilter ? globalFilterProp : internalGlobalFilter\n const setGlobalFilter = (v: string) => {\n if (isControlledFilter) onGlobalFilterChange?.(v)\n else setInternalGlobalFilter(v)\n }\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility ?? {}\n )\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>(\n () => {\n const base = initialColumnPinning ?? { left: [], right: [] }\n const left = [...(base.left ?? [])]\n const right = [...(base.right ?? [])]\n const hasExpandColumn = !!(renderSubRow || getSubRows)\n // Keep __expand glued to __select: if __select is pinned left and the\n // table has an expand column, ensure __expand sits right after it on\n // the left side regardless of user-supplied pin config.\n if (hasExpandColumn && left.includes(\"__select\") && !left.includes(\"__expand\")) {\n const idx = left.indexOf(\"__select\")\n left.splice(idx + 1, 0, \"__expand\")\n }\n return { left, right }\n }\n )\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({})\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n const [expanded, setExpanded] = useState<ExpandedState>({})\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: 0,\n pageSize: initialPageSize,\n })\n const [sourceRows, setSourceRows] = useState<TData[]>(\n () => dataSource?.initialData ?? []\n )\n const [sourceTotalRecords, setSourceTotalRecords] = useState<\n number | undefined\n >(undefined)\n const [sourceError, setSourceError] = useState<unknown>(null)\n const [sourceLoading, setSourceLoading] = useState(false)\n const [sourceFetching, setSourceFetching] = useState(false)\n const [sourceRefreshKey, setSourceRefreshKey] = useState(0)\n\n // editing state — single cell or whole row\n const [editingCell, setEditingCell] = useState<{ rowId: string; colId: string } | null>(null)\n const [editingRowId, setEditingRowId] = useState<string | null>(null)\n const [rowDraft, setRowDraft] = useState<Record<string, Partial<TData>>>({})\n\n const dataSourceEnabled = !!dataSource && dataSource.enabled !== false\n const dataSourceMode = dataSource?.mode ?? \"client\"\n const isServerSideDataSource =\n dataSourceEnabled && dataSourceMode === \"server\"\n const dataSourceDeps = dataSource?.deps ?? []\n\n useEffect(() => {\n if (!dataSourceEnabled || !dataSource) return\n\n let cancelled = false\n const isInitialLoad = sourceRows.length === 0\n\n setSourceError(null)\n setSourceLoading(isInitialLoad)\n setSourceFetching(!isInitialLoad)\n\n dataSource\n .fetchRows({\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n sorting,\n columnFilters,\n globalFilter,\n })\n .then((result) => {\n if (cancelled) return\n const rows = Array.isArray(result) ? result : result.rows\n setSourceRows(rows)\n setSourceTotalRecords(\n Array.isArray(result) ? rows.length : result.totalRecords ?? rows.length\n )\n })\n .catch((error) => {\n if (cancelled) return\n setSourceError(error)\n dataSource.onError?.(error, {\n type: isInitialLoad ? \"load\" : \"refresh\",\n message: isInitialLoad ? labels.loadError : labels.refreshing,\n })\n })\n .finally(() => {\n if (cancelled) return\n setSourceLoading(false)\n setSourceFetching(false)\n })\n\n return () => {\n cancelled = true\n }\n }, [\n dataSourceEnabled,\n dataSource,\n sourceRefreshKey,\n pagination.pageIndex,\n pagination.pageSize,\n sorting,\n columnFilters,\n globalFilter,\n labels.loadError,\n labels.refreshing,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...dataSourceDeps,\n ])\n\n const baseData = dataSourceEnabled ? sourceRows : data ?? EMPTY_DATA\n const effectiveIsLoading = dataSourceEnabled ? sourceLoading : isLoading\n const effectiveIsFetching = dataSourceEnabled ? sourceFetching : isFetching\n const effectiveOnRefresh = dataSourceEnabled\n ? () => setSourceRefreshKey((key) => key + 1)\n : onRefresh\n\n // newly added rows kept in local state until persisted\n const [extraRows, setExtraRows] = useState<TData[]>([])\n const mergedData = useMemo(\n () => (extraRows.length ? [...extraRows, ...baseData] : baseData),\n [extraRows, baseData]\n )\n const effectiveTotalRecords =\n totalRecords ??\n (dataSourceEnabled ? sourceTotalRecords ?? mergedData.length : mergedData.length)\n\n // ----- column augmentation -------------------------------------------\n const augmentedColumns = useMemo<ColumnDef<TData>[]>(() => {\n const wrap = (col: ColumnDef<TData>): ColumnDef<TData> => {\n const meta = col.meta\n const hasEditor = !!meta?.editor\n const id = col.id ?? (col as { accessorKey?: string }).accessorKey\n\n const original = col.cell\n const headerLabel =\n meta?.label ?? (typeof col.header === \"string\" ? col.header : id ?? \"\")\n\n // Pick a default filterFn based on declared filterType. The user can\n // still override it by setting `filterFn` directly on the column.\n const defaultFilterFn = (() => {\n switch (meta?.filterType) {\n case \"text\":\n return textFilterFn\n case \"number\":\n return numberFilterFn\n case \"date\":\n return dateFilterFn\n case \"select\":\n case \"multi-select\":\n return setFilterFn\n case \"boolean\":\n return booleanFilterFn\n default:\n return undefined\n }\n })()\n\n return ({\n ...col,\n filterFn: col.filterFn ?? defaultFilterFn,\n header:\n typeof col.header === \"function\"\n ? col.header\n : (ctx) => (\n <DataTableColumnHeader\n column={ctx.column}\n title={headerLabel}\n />\n ),\n cell: hasEditor ? (EditableCellHost as ColumnDef<TData>[\"cell\"]) : (original ?? DefaultCellHost),\n } as ColumnDef<TData>)\n }\n\n const built: ColumnDef<TData>[] = columns.map(wrap)\n\n // Order matters: unshift expand first, then select, so the final order is\n // [__select, __expand, ...userColumns]. The expand toggle should always\n // sit right next to the selection checkbox.\n if (renderSubRow || getSubRows) {\n built.unshift({\n id: \"__expand\",\n size: 32,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: () => null,\n cell: ({ row }) =>\n row.getCanExpand() ? (\n <button\n type=\"button\"\n onClick={row.getToggleExpandedHandler()}\n className=\"flex size-6 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={row.getIsExpanded() ? \"Collapse row\" : \"Expand row\"}\n >\n {row.getIsExpanded() ? (\n <ChevronDownIcon className=\"size-3.5\" />\n ) : (\n <ChevronRightIcon className=\"size-3.5\" />\n )}\n </button>\n ) : null,\n })\n }\n\n if (enableSelection) {\n built.unshift({\n id: \"__select\",\n size: 36,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: ({ table }) => (\n <div className=\"flex items-center justify-center px-1\">\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={(c) => table.toggleAllPageRowsSelected(!!c)}\n aria-label=\"Select all rows on this page\"\n />\n </div>\n ),\n cell: ({ row }) => (\n <div className=\"flex items-center justify-center px-1\">\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(c) => row.toggleSelected(!!c)}\n aria-label=\"Select row\"\n />\n </div>\n ),\n })\n }\n\n if (rowActions.length || customRowActions?.length) {\n built.push({\n id: \"__actions\",\n size: 56,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: () => <div className=\"text-right text-xs\">Actions</div>,\n cell: ActionsCellHost as ColumnDef<TData>[\"cell\"],\n })\n }\n\n return built\n }, [\n columns,\n enableSelection,\n renderSubRow,\n getSubRows,\n rowActions.length,\n customRowActions?.length,\n ])\n\n // initial column order\n const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(() =>\n augmentedColumns.map((c) => c.id ?? (c as { accessorKey?: string }).accessorKey ?? \"\")\n )\n useEffect(() => {\n const next = augmentedColumns.map(\n (c) => c.id ?? (c as { accessorKey?: string }).accessorKey ?? \"\"\n )\n setColumnOrder((prev) => {\n // preserve user-reordered positions; append new columns at the end\n const existing = prev.filter((id) => next.includes(id))\n const added = next.filter((id) => !prev.includes(id))\n const final = [...existing, ...added]\n return final.length === prev.length && final.every((v, i) => prev[i] === v)\n ? prev\n : final\n })\n }, [augmentedColumns])\n\n // ----- table ----------------------------------------------------------\n const table = useReactTable({\n data: mergedData,\n columns: augmentedColumns,\n state: {\n sorting,\n columnFilters,\n globalFilter,\n columnVisibility,\n columnPinning,\n columnSizing,\n columnOrder,\n rowSelection,\n expanded,\n pagination,\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onGlobalFilterChange: setGlobalFilter,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnSizingChange: setColumnSizing,\n onColumnOrderChange: setColumnOrder,\n onRowSelectionChange: setRowSelection,\n onExpandedChange: setExpanded,\n onPaginationChange: setPagination,\n\n enableSorting: f.sorting,\n enableColumnFilters: f.filtering,\n enableColumnResizing: f.resizing,\n columnResizeMode: \"onChange\",\n enableRowSelection: enableSelection,\n enableExpanding: !!(renderSubRow || getSubRows),\n enablePinning: f.pinning,\n manualPagination: isServerSideDataSource || !f.pagination,\n manualSorting: isServerSideDataSource,\n manualFiltering: isServerSideDataSource,\n pageCount: isServerSideDataSource\n ? Math.max(1, Math.ceil(effectiveTotalRecords / pagination.pageSize))\n : undefined,\n getRowId: (row) => String(row.id),\n getSubRows,\n getRowCanExpand: (row) => {\n if (renderSubRow) return true\n const subs = getSubRows?.(row.original)\n return !!subs && subs.length > 0\n },\n globalFilterFn: (row, _columnId, value) => {\n const q = String(value ?? \"\").toLowerCase().trim()\n if (!q) return true\n return row.getAllCells().some((cell) => {\n const v = cell.getValue()\n return v != null && String(v).toLowerCase().includes(q)\n })\n },\n filterFns: {\n // attached via columnDef.filterFn below where needed\n },\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n })\n\n // Pointer-event-based column reorder. HTML5 drag-and-drop refused to\n // initiate when the user mousedown'd on an interactive child (sort\n // dropdown button, filter trigger), which is most of the visible header\n // area. Pointer events sidestep that.\n const reorderState = useRef<{ x: number; y: number; id: string } | null>(null)\n const [activeReorderId, setActiveReorderId] = useState<string | null>(null)\n const [dragOverColId, setDragOverColId] = useState<string | null>(null)\n\n const isInteractiveTarget = (target: EventTarget | null) => {\n const el = target as HTMLElement | null\n if (!el || !el.closest) return false\n return !!el.closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [data-no-drag]'\n )\n }\n\n const onHeaderPointerDown =\n (id: string) => (e: React.PointerEvent<HTMLTableCellElement>) => {\n if (e.button !== 0) return\n if (isInteractiveTarget(e.target)) return\n reorderState.current = { x: e.clientX, y: e.clientY, id }\n }\n\n const onHeaderPointerMove = (e: React.PointerEvent<HTMLTableCellElement>) => {\n const start = reorderState.current\n if (!start) return\n if (!activeReorderId) {\n const dx = e.clientX - start.x\n const dy = e.clientY - start.y\n if (Math.hypot(dx, dy) < 6) return\n setActiveReorderId(start.id)\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n const el = document.elementFromPoint(e.clientX, e.clientY)\n const th = el ? (el.closest(\"th[data-col-id]\") as HTMLElement | null) : null\n const overId = th?.dataset.colId ?? null\n const next = overId && overId !== start.id ? overId : null\n if (next !== dragOverColId) setDragOverColId(next)\n }\n\n const onHeaderPointerUp = (e: React.PointerEvent<HTMLTableCellElement>) => {\n const start = reorderState.current\n reorderState.current = null\n if (!activeReorderId) return\n try {\n e.currentTarget.releasePointerCapture(e.pointerId)\n } catch {\n // pointer may already be released\n }\n const target = dragOverColId\n setActiveReorderId(null)\n setDragOverColId(null)\n if (!start || !target || target === start.id) return\n setColumnOrder((order) => {\n const next = [...order]\n const from = next.indexOf(start.id)\n const to = next.indexOf(target)\n if (from === -1 || to === -1) return order\n next.splice(from, 1)\n next.splice(to, 0, start.id)\n return next\n })\n }\n\n // ----- \"add row\" handling --------------------------------------------\n const handleAddRow = onAddRow\n ? () => {\n const draft = onAddRow()\n const tempId = `__new_${Date.now()}`\n const newRow = { id: tempId, ...draft } as unknown as TData\n setExtraRows((r) => [newRow, ...r])\n setPagination((p) => ({ ...p, pageIndex: 0 }))\n setEditingRowId(tempId)\n }\n : undefined\n\n // ----- render ---------------------------------------------------------\n const rows = table.getRowModel().rows\n const selectionCallback = useRef(onSelectionChange)\n selectionCallback.current = onSelectionChange\n useEffect(() => {\n selectionCallback.current?.(table.getSelectedRowModel().flatRows.map((row) => row.original))\n }, [rowSelection, mergedData, table])\n const visibleLeafCount = table.getVisibleLeafColumns().length\n\n const editingContextValue = useMemo<EditingContextValue<TData>>(\n () => ({\n editingCell,\n editingRowId,\n rowDraft,\n setEditingCell,\n setEditingRowId,\n setRowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n onView: handleViewRequest,\n onRequestDelete: handleDeleteRequest,\n }),\n [\n editingCell,\n editingRowId,\n rowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n // intentional: handleViewRequest / handleDeleteRequest close over\n // viewSheetEnabled / confirmEnabled which are derived from props above.\n // They're recreated each render; the inputs here capture the prop deps.\n onView,\n onDelete,\n onBulkDelete,\n viewSheetEnabled,\n confirmEnabled,\n ]\n )\n\n return (\n <PortalContainerContext.Provider value={gridRoot}>\n <DataTableEditingContext.Provider\n value={editingContextValue as unknown as EditingContextValue<unknown>}\n >\n <div\n ref={setGridRoot}\n data-dyno-grid={instanceId}\n className={cn(\n \"relative flex flex-col rounded-lg border bg-card text-card-foreground shadow-sm\",\n DENSITY_CLASS[density],\n className\n )}\n style={lightStyle}\n >\n {darkCss && (\n <style>\n {`@media (prefers-color-scheme: dark){[data-dyno-grid=\"${instanceId}\"]{${darkCss}}}`}\n {`.dark [data-dyno-grid=\"${instanceId}\"]{${darkCss}}`}\n {`[data-dyno-grid=\"${instanceId}\"].dark{${darkCss}}`}\n </style>\n )}\n <DataTableToolbar\n table={table}\n totalRecords={effectiveTotalRecords}\n isFetching={effectiveIsFetching}\n onRefresh={f.refresh ? effectiveOnRefresh : undefined}\n onAddRow={f.addRow ? handleAddRow : undefined}\n onBulkDelete={onBulkDelete ? handleBulkDeleteRequest : undefined}\n exportFileName={exportFileName}\n globalFilter={globalFilter}\n onGlobalFilterChange={(v) => {\n setGlobalFilter(v)\n table.setPageIndex(0)\n }}\n toolbarSlot={toolbarSlot}\n features={f}\n labels={labels}\n />\n\n <div className=\"relative w-full overflow-auto\" style={{ maxHeight }}>\n <table\n aria-label={ariaLabel}\n className={cn(\"w-full caption-bottom text-sm\", striped && \"[&_tbody>tr:nth-child(even)]:bg-muted/25\")}\n style={{\n width: table.getCenterTotalSize() ? undefined : \"100%\",\n minWidth: \"100%\",\n }}\n >\n <thead className={cn(\"bg-card\", stickyHeader && \"sticky top-0 z-10\")}>\n {table.getHeaderGroups().map((hg) => (\n <tr key={hg.id} className=\"border-b\">\n {hg.headers.map((header) => {\n const meta = header.column.columnDef.meta\n const isUtility =\n header.column.id === \"__select\" ||\n header.column.id === \"__expand\" ||\n header.column.id === \"__actions\"\n const isPinned = !!header.column.getIsPinned()\n const canReorder = !isUtility && f.reordering\n const isDropTarget =\n canReorder && dragOverColId === header.column.id\n const isBeingDragged =\n canReorder && activeReorderId === header.column.id\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n data-col-id={header.column.id}\n onPointerDown={\n canReorder\n ? onHeaderPointerDown(header.column.id)\n : undefined\n }\n onPointerMove={canReorder ? onHeaderPointerMove : undefined}\n onPointerUp={canReorder ? onHeaderPointerUp : undefined}\n onPointerCancel={\n canReorder ? onHeaderPointerUp : undefined\n }\n style={{\n width: header.getSize(),\n ...getPinningStyles(header.column),\n ...(isPinned ? { zIndex: 2 } : {}),\n }}\n className={cn(\n \"group/th relative h-9 px-2 text-left align-middle text-xs font-medium text-muted-foreground select-none\",\n canReorder && \"cursor-grab active:cursor-grabbing\",\n isPinned && \"bg-card\",\n isBeingDragged && \"opacity-50\",\n isDropTarget &&\n \"bg-primary/10 ring-2 ring-inset ring-primary/40\",\n meta?.headerClassName\n )}\n >\n <div className=\"flex items-center gap-1\">\n {canReorder && (\n <GripVerticalIcon\n className=\"-ml-1 size-3 shrink-0 text-muted-foreground/40 opacity-0 transition group-hover/th:opacity-100\"\n aria-hidden=\"true\"\n />\n )}\n <div className=\"min-w-0 flex-1\">\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </div>\n </div>\n\n {header.column.getCanResize() && (\n <span\n data-no-drag\n onPointerDown={(e) => e.stopPropagation()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n className={cn(\n \"absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none select-none bg-transparent transition-colors hover:bg-primary/40\",\n header.column.getIsResizing() && \"bg-primary\"\n )}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n\n <tbody>\n {effectiveIsLoading ? (\n renderSkeleton(visibleLeafCount, pagination.pageSize)\n ) : sourceError && rows.length === 0 ? (\n <tr>\n <td\n colSpan={visibleLeafCount}\n className=\"h-32 text-center text-sm text-muted-foreground\"\n >\n <div className=\"flex flex-col items-center gap-2\">\n <span>{labels.loadError}</span>\n {effectiveOnRefresh && (\n <button\n type=\"button\"\n onClick={effectiveOnRefresh}\n className=\"rounded-md border px-2 py-1 text-xs text-foreground hover:bg-muted\"\n >\n {labels.retry}\n </button>\n )}\n </div>\n </td>\n </tr>\n ) : rows.length === 0 ? (\n <tr>\n <td\n colSpan={visibleLeafCount}\n className=\"h-32 text-center text-sm text-muted-foreground\"\n >\n {globalFilter || columnFilters.length\n ? labels.noResults\n : labels.noData}\n </td>\n </tr>\n ) : (\n rows.map((row) => (\n <DataTableRow\n key={row.id}\n row={row}\n renderSubRow={renderSubRow}\n isRowEditing={editingRowId === row.id}\n />\n ))\n )}\n </tbody>\n </table>\n\n {effectiveIsFetching && !effectiveIsLoading && (\n <div className=\"pointer-events-none absolute top-1.5 right-2 flex items-center gap-1.5 rounded-md bg-background/80 px-2 py-1 text-xs text-muted-foreground shadow-sm backdrop-blur\">\n <Loader2Icon className=\"size-3 animate-spin\" /> {labels.refreshing}\n </div>\n )}\n </div>\n\n {f.pagination && (\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n )}\n\n <DataTableViewSheet\n table={table}\n row={viewRow}\n open={viewRow != null}\n onOpenChange={(o) => !o && setViewRow(null)}\n config={viewSheetConfig}\n />\n <DataTableConfirmDelete\n open={confirmCtx != null}\n onOpenChange={(o) => !o && setConfirmCtx(null)}\n context={confirmCtx}\n onConfirm={handleConfirmDelete}\n config={confirmConfig}\n />\n </div>\n </DataTableEditingContext.Provider>\n </PortalContainerContext.Provider>\n )\n}\n\nfunction DataTableRow<TData>({\n row,\n renderSubRow,\n isRowEditing,\n}: {\n row: Row<TData>\n renderSubRow?: (row: TData) => React.ReactNode\n isRowEditing?: boolean\n}) {\n const expanded = row.getIsExpanded()\n const isSelected = row.getIsSelected()\n return (\n <>\n <tr\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n \"group/row border-b transition-colors hover:bg-muted/40 data-[state=selected]:bg-primary/5\",\n isRowEditing && \"bg-amber-500/5\",\n row.depth > 0 && \"bg-muted/20\"\n )}\n >\n {row.getVisibleCells().map((cell) => {\n const meta = cell.column.columnDef.meta\n const isPinned = !!cell.column.getIsPinned()\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...getPinningStyles(cell.column),\n }}\n className={cn(\n \"px-2 py-1 align-middle text-sm\",\n isPinned &&\n \"bg-card group-hover/row:bg-[color-mix(in_oklab,var(--card),var(--muted)_40%)] group-data-[state=selected]/row:bg-[color-mix(in_oklab,var(--card),var(--primary)_5%)]\",\n isPinned && isRowEditing &&\n \"bg-[color-mix(in_oklab,var(--card),#f59e0b_5%)]\",\n meta?.cellClassName\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n )\n })}\n </tr>\n {expanded && renderSubRow && (\n <tr className=\"border-b bg-muted/30\">\n <td colSpan={row.getVisibleCells().length} className=\"p-3\">\n <div className=\"rounded-md border bg-background p-3 shadow-inner\">\n {renderSubRow(row.original)}\n </div>\n </td>\n </tr>\n )}\n </>\n )\n}\n\nfunction renderSkeleton(cols: number, rows: number) {\n return Array.from({ length: rows }).map((_, r) => (\n <tr key={r} className=\"border-b\">\n {Array.from({ length: cols }).map((__, c) => (\n <td key={c} className=\"px-2 py-2\">\n <Skeleton className=\"h-4 w-full\" />\n </td>\n ))}\n </tr>\n ))\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/ui/checkbox.tsx","../src/ui/skeleton.tsx","../src/ui/button.tsx","../src/ui/input.tsx","../src/ui/badge.tsx","../src/ui/separator.tsx","../src/portal-container.tsx","../src/ui/dropdown-menu.tsx","../src/ui/popover.tsx","../src/export.ts","../src/data-table-toolbar.tsx","../src/ui/select.tsx","../src/data-table-pagination.tsx","../src/filters.tsx","../src/data-table-column-header.tsx","../src/data-table-row-actions.tsx","../src/editable-cell.tsx","../src/theme.ts","../src/ui/sheet.tsx","../src/data-table-view-sheet.tsx","../src/ui/alert-dialog.tsx","../src/data-table-confirm-delete.tsx","../src/data-table.tsx"],"names":["twMerge","clsx","jsx","CheckboxPrimitive","MinusIcon","CheckIcon","cva","Slot","SeparatorPrimitive","createContext","useContext","DropdownMenuPrimitive","PopoverPrimitive","useState","useRef","useEffect","jsxs","Fragment","Trash2Icon","XIcon","SearchIcon","RefreshCwIcon","ColumnsIcon","DownloadIcon","FileTextIcon","FileSpreadsheetIcon","PlusIcon","SelectPrimitive","ChevronDownIcon","ChevronUpIcon","ChevronsLeftIcon","ChevronLeftIcon","ChevronRightIcon","ChevronsRightIcon","useMemo","combine","ArrowDownIcon","ArrowUpIcon","ChevronsUpDownIcon","PinOffIcon","PinIcon","EyeOffIcon","FilterIcon","EyeIcon","PencilIcon","CopyIcon","useLayoutEffect","MoreHorizontalIcon","createPortal","DialogPrimitive","LayoutGridIcon","Rows3Icon","ListIcon","AlertDialogPrimitive","useId","rows","table","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getExpandedRowModel","getPaginationRowModel","GripVerticalIcon","flexRender","Loader2Icon"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\nimport { CheckIcon, MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer inline-flex size-4 shrink-0 items-center justify-center rounded-[5px] border border-input bg-background shadow-xs outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n {props.checked === \"indeterminate\" ? (\n <MinusIcon className=\"size-3\" />\n ) : (\n <CheckIcon className=\"size-3\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import { cn } from \"../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n outline:\n \"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 data-[size^=icon]:hover:bg-primary/10 data-[size^=icon]:hover:text-primary data-[size^=icon]:hover:[&_svg]:text-primary data-[size^=icon]:aria-expanded:bg-primary/10 data-[size^=icon]:aria-expanded:text-primary data-[size^=icon]:aria-expanded:border data-[size^=icon]:aria-expanded:border-primary/30\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs font-medium whitespace-nowrap transition-colors [&_svg]:pointer-events-none [&_svg]:size-3\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary/10 text-primary [a&]:hover:bg-primary/20\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive/10 text-destructive [a&]:hover:bg-destructive/20\",\n success:\n \"border-transparent bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 [a&]:hover:bg-emerald-500/20\",\n warning:\n \"border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-400 [a&]:hover:bg-amber-500/25\",\n outline: \"border-border text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return (\n <span\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport { createContext, useContext } from \"react\"\n\n/**\n * Shared portal container for every overlay inside a DataTable (popover,\n * dropdown, select, sheet, alert-dialog, …).\n *\n * `<DataTable>` provides a ref pointing to a `<div>` rendered *inside* the\n * themed grid root. When the value is non-null, every overlay primitive\n * mounts its portal into that div instead of `document.body`.\n *\n * Why this matters\n * ----------------\n * CSS variables cascade only down the DOM tree. The grid's `theme` prop\n * applies inline tokens to the grid root — if a popover portals to\n * `document.body` (Radix default), those tokens never reach the popover and\n * its `bg-primary` / `bg-popover` / `border` etc. resolve from `:root`\n * instead. That's why a `theme={themePresets.rose}` table can show a black\n * \"Apply\" button on a white popover surrounded by a rose grid.\n *\n * Mounting overlays inside the themed root fixes this cleanly with no global\n * CSS pollution.\n */\nexport const PortalContainerContext = createContext<HTMLElement | null>(null)\n\n/** Read the current grid's portal container, or `null` when outside a DataTable. */\nexport function usePortalContainer(): HTMLElement | null {\n return useContext(PortalContainerContext)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n const container = usePortalContainer()\n return (\n <DropdownMenuPrimitive.Portal\n data-slot=\"dropdown-menu-portal\"\n container={container ?? undefined}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <DropdownMenuPrimitive.Portal container={container ?? undefined}>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!\", className )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!\", className )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 6,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-lg border bg-popover p-3 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import type { Table } from \"@tanstack/react-table\"\n\n/** Neutralize spreadsheet formulas in untrusted text; preserve real numbers. */\nexport function sanitizeSpreadsheetValue(value: unknown): string {\n if (value == null) return \"\"\n const text = String(value)\n if (typeof value === \"string\" && (/^[\\s\\u0000-\\u001f]*[=+\\-@=+-@]/u.test(text) || /^[\\t\\r\\n]/.test(text))) return `'${text}`\n return text\n}\n\nfunction escapeCsv(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n const s = sanitizeSpreadsheetValue(value)\n if (/[\",\\n\\r]/.test(s)) return `\"${s.replace(/\"/g, '\"\"')}\"`\n return s\n}\n\nfunction escapeHtml(value: unknown): string {\n if (value === null || value === undefined) return \"\"\n return sanitizeSpreadsheetValue(value)\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n}\n\nfunction getExportRows<TData>(table: Table<TData>) {\n const visible = table.getVisibleLeafColumns().filter((c) => {\n if (c.id === \"__select\" || c.id === \"__expand\" || c.id === \"__actions\")\n return false\n return c.columnDef.meta?.exportable !== false\n })\n const headers = visible.map(\n (c) => c.columnDef.meta?.label ?? (typeof c.columnDef.header === \"string\" ? c.columnDef.header : c.id)\n )\n\n const selected = table.getSelectedRowModel().rows\n const rows = selected.length > 0 ? selected : table.getFilteredRowModel().rows\n\n const data = rows.map((row) =>\n visible.map((col) => {\n const value = row.getValue(col.id)\n if (value instanceof Date) return value.toISOString().slice(0, 10)\n if (typeof value === \"object\" && value !== null) return JSON.stringify(value)\n return value\n })\n )\n\n return { headers, data }\n}\n\nfunction triggerDownload(content: string, mime: string, filename: string) {\n const bom = \"\"\n const blob = new Blob([bom + content], { type: mime })\n const url = URL.createObjectURL(blob)\n const a = document.createElement(\"a\")\n a.href = url\n a.download = filename\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n setTimeout(() => URL.revokeObjectURL(url), 100)\n}\n\nexport function exportToCsv<TData>(table: Table<TData>, fileName = \"export\") {\n const { headers, data } = getExportRows(table)\n const lines = [headers.map(escapeCsv).join(\",\"), ...data.map((r) => r.map(escapeCsv).join(\",\"))]\n triggerDownload(lines.join(\"\\r\\n\"), \"text/csv;charset=utf-8;\", `${fileName}.csv`)\n}\n\nexport function exportToExcel<TData>(table: Table<TData>, fileName = \"export\") {\n const { headers, data } = getExportRows(table)\n const headerHtml = headers\n .map((h) => `<th style=\"background:#f4f4f5;text-align:left;padding:6px 10px;border:1px solid #d4d4d8\">${escapeHtml(h)}</th>`)\n .join(\"\")\n const bodyHtml = data\n .map(\n (row) =>\n `<tr>${row\n .map((c) => `<td style=\"padding:6px 10px;border:1px solid #d4d4d8\">${escapeHtml(c)}</td>`)\n .join(\"\")}</tr>`\n )\n .join(\"\")\n const html = `<!DOCTYPE html><html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\"><head><meta charset=\"utf-8\"/><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>${`<thead><tr>${headerHtml}</tr></thead><tbody>${bodyHtml}</tbody>`}</table></body></html>`\n triggerDownload(html, \"application/vnd.ms-excel;charset=utf-8;\", `${fileName}.xls`)\n}\n","import type { Table } from \"@tanstack/react-table\"\nimport { useEffect, useRef, useState } from \"react\"\nimport {\n ColumnsIcon,\n DownloadIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n PlusIcon,\n RefreshCwIcon,\n SearchIcon,\n Trash2Icon,\n XIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport { Input } from \"./ui/input\"\nimport { Badge } from \"./ui/badge\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Separator } from \"./ui/separator\"\nimport { cn } from \"./lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./ui/popover\"\n\nimport { exportToCsv, exportToExcel } from \"./export\"\n\ntype ToolbarFeatureFlags = {\n search?: boolean\n refresh?: boolean\n columnVisibility?: boolean\n export?: boolean\n addRow?: boolean\n}\n\ntype ToolbarLabels = {\n search?: string\n addRow?: string\n delete?: string\n clear?: string\n selected?: string\n refresh?: string\n columns?: string\n export?: string\n csv?: string\n excel?: string\n total?: string\n}\n\ntype Props<TData> = {\n table: Table<TData>\n totalRecords: number\n isFetching?: boolean\n onRefresh?: () => void\n onAddRow?: () => void\n onBulkDelete?: (rows: TData[]) => void\n exportFileName?: string\n globalFilter: string\n onGlobalFilterChange: (value: string) => void\n toolbarSlot?: React.ReactNode\n features?: ToolbarFeatureFlags\n labels?: ToolbarLabels\n}\n\nconst TOOLBAR_DEFAULT_LABELS: Required<ToolbarLabels> = {\n search: \"Search...\",\n addRow: \"Add row\",\n delete: \"Delete\",\n clear: \"Clear\",\n selected: \"selected\",\n refresh: \"Refresh\",\n columns: \"Columns\",\n export: \"Export\",\n csv: \"CSV\",\n excel: \"Excel\",\n total: \"Total\",\n}\n\nexport function DataTableToolbar<TData>({\n table,\n totalRecords,\n isFetching,\n onRefresh,\n onAddRow,\n onBulkDelete,\n exportFileName = \"export\",\n globalFilter,\n onGlobalFilterChange,\n toolbarSlot,\n features,\n labels: labelsProp,\n}: Props<TData>) {\n const labels: Required<ToolbarLabels> = {\n ...TOOLBAR_DEFAULT_LABELS,\n ...labelsProp,\n }\n const showSearch = features?.search ?? true\n const showColumnVisibility = features?.columnVisibility ?? true\n const showExport = features?.export ?? true\n const [searchOpen, setSearchOpen] = useState(Boolean(globalFilter))\n const searchInputRef = useRef<HTMLInputElement>(null)\n const selectedRows = table.getSelectedRowModel().rows\n const selectedCount = selectedRows.length\n const hideableColumns = table.getAllLeafColumns().filter((c) => c.getCanHide())\n const visibleCount = hideableColumns.filter((c) => c.getIsVisible()).length\n\n useEffect(() => {\n if (globalFilter) setSearchOpen(true)\n }, [globalFilter])\n\n useEffect(() => {\n if (searchOpen) searchInputRef.current?.focus()\n }, [searchOpen])\n\n return (\n <div className=\"flex flex-wrap items-center gap-2 border-b p-2\">\n {toolbarSlot}\n\n {selectedCount > 0 && (\n <>\n <Badge\n variant=\"secondary\"\n className=\"flex h-8 items-center gap-1 rounded-md px-2 text-xs\"\n >\n {selectedCount} {labels.selected}\n </Badge>\n {onBulkDelete && (\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"h-8\"\n onClick={() => onBulkDelete(selectedRows.map((r) => r.original))}\n >\n <Trash2Icon /> {labels.delete}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8\"\n onClick={() => table.resetRowSelection()}\n >\n <XIcon /> {labels.clear}\n </Button>\n <Separator orientation=\"vertical\" className=\"mx-2 !h-6 !self-center\" />\n </>\n )}\n\n <div className=\"ml-auto flex h-8 items-center gap-1\">\n {showSearch && (\n <div\n className={cn(\n \"relative h-8 overflow-hidden transition-[width] duration-200 ease-out\",\n searchOpen ? \"w-56\" : \"w-8\"\n )}\n >\n {searchOpen ? (\n <>\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2 opacity-60\" />\n <Input\n ref={searchInputRef}\n placeholder={labels.search}\n value={globalFilter}\n onChange={(e) => onGlobalFilterChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && !globalFilter) setSearchOpen(false)\n }}\n onBlur={() => {\n if (!globalFilter) setSearchOpen(false)\n }}\n className=\"h-8 w-56 border-input bg-transparent pl-7 pr-7 shadow-none focus-visible:bg-transparent focus-visible:ring-0\"\n />\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n if (globalFilter) {\n onGlobalFilterChange(\"\")\n searchInputRef.current?.focus()\n return\n }\n setSearchOpen(false)\n }}\n className=\"absolute top-1/2 right-1.5 -translate-y-1/2 rounded p-0.5 hover:bg-muted\"\n aria-label={globalFilter ? \"Clear search\" : \"Close search\"}\n >\n <XIcon className=\"size-3\" />\n </button>\n </>\n ) : (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={() => setSearchOpen(true)}\n aria-label=\"Open search\"\n >\n <SearchIcon />\n </Button>\n )}\n </div>\n )}\n {onRefresh && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={onRefresh}\n disabled={isFetching}\n aria-label={labels.refresh}\n >\n <RefreshCwIcon className={isFetching ? \"animate-spin\" : undefined} />\n </Button>\n )}\n\n {showColumnVisibility && (\n <Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <ColumnsIcon /> {labels.columns}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {visibleCount}/{hideableColumns.length}\n </Badge>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-56 p-2\">\n <div className=\"mb-1 flex items-center justify-between text-xs text-muted-foreground\">\n <span>Toggle columns</span>\n <button\n className=\"hover:text-foreground\"\n onClick={() => table.resetColumnVisibility()}\n >\n Reset\n </button>\n </div>\n <div className=\"flex max-h-72 flex-col gap-0.5 overflow-auto\">\n {hideableColumns.map((col) => (\n <label\n key={col.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-sm hover:bg-accent\"\n >\n <Checkbox\n checked={col.getIsVisible()}\n onCheckedChange={(c) => col.toggleVisibility(!!c)}\n />\n <span className=\"capitalize\">\n {col.columnDef.meta?.label ??\n (typeof col.columnDef.header === \"string\"\n ? col.columnDef.header\n : col.id)}\n </span>\n </label>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n\n {showExport && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <DownloadIcon /> {labels.export}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuLabel>\n {selectedCount > 0\n ? `${labels.export} ${selectedCount} ${labels.selected}`\n : `${labels.export} all rows`}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={() => exportToCsv(table, exportFileName)}\n >\n <FileTextIcon /> {labels.csv}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => exportToExcel(table, exportFileName)}\n >\n <FileSpreadsheetIcon /> {labels.excel}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {onAddRow && (\n <Button size=\"sm\" onClick={onAddRow}>\n <PlusIcon /> {labels.addRow}\n </Button>\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-2 !h-6 !self-center\" />\n <div className=\"flex h-8 items-center gap-1.5 rounded-md border bg-muted/40 px-2 text-xs\">\n <span className=\"text-muted-foreground\">{labels.total}</span>\n <span className=\"font-semibold tabular-nums\">\n {new Intl.NumberFormat().format(totalRecords)}\n </span>\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Select(props: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup(\n props: React.ComponentProps<typeof SelectPrimitive.Group>\n) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue(\n props: React.ComponentProps<typeof SelectPrimitive.Value>\n) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background px-2.5 text-sm whitespace-nowrap shadow-xs outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[placeholder]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:size-3.5 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"opacity-60\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n const container = usePortalContainer()\n return (\n <SelectPrimitive.Portal container={container ?? undefined}>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n position={position}\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border bg-popover text-popover-foreground shadow-md data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-2 py-1 text-xs text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-3.5\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-3.5\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import type { Table } from \"@tanstack/react-table\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronsLeftIcon,\n ChevronsRightIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\ntype Props<TData> = {\n table: Table<TData>\n pageSizeOptions?: number[]\n}\n\nfunction getPageRange(current: number, total: number): (number | \"…\")[] {\n const pages: (number | \"…\")[] = []\n if (total <= 7) {\n for (let i = 0; i < total; i++) pages.push(i)\n return pages\n }\n pages.push(0)\n if (current > 3) pages.push(\"…\")\n const start = Math.max(1, current - 1)\n const end = Math.min(total - 2, current + 1)\n for (let i = start; i <= end; i++) pages.push(i)\n if (current < total - 4) pages.push(\"…\")\n pages.push(total - 1)\n return pages\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 25, 50, 100],\n}: Props<TData>) {\n const pageIndex = table.getState().pagination.pageIndex\n const pageSize = table.getState().pagination.pageSize\n const pageCount = table.getPageCount()\n const totalRows = table.getFilteredRowModel().rows.length\n const fromRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1\n const toRow = Math.min(totalRows, (pageIndex + 1) * pageSize)\n const selected = table.getSelectedRowModel().rows.length\n\n const range = getPageRange(pageIndex, pageCount)\n\n return (\n <div className=\"grid grid-cols-1 items-center gap-2 border-t p-2 text-xs md:grid-cols-3\">\n <div className=\"flex items-center gap-2 text-muted-foreground md:justify-self-start\">\n {selected > 0 ? (\n <span>\n <span className=\"font-medium text-foreground\">{selected}</span>{\" \"}\n selected ·{\" \"}\n </span>\n ) : null}\n <span>\n Showing{\" \"}\n <span className=\"font-medium text-foreground\">{fromRow}</span>–\n <span className=\"font-medium text-foreground\">{toRow}</span> of{\" \"}\n <span className=\"font-medium text-foreground\">\n {new Intl.NumberFormat().format(totalRows)}\n </span>\n </span>\n </div>\n\n <div className=\"flex items-center gap-1 md:justify-self-center\">\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeftIcon />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeftIcon />\n </Button>\n\n {range.map((p, idx) =>\n p === \"…\" ? (\n <span key={`e-${idx}`} className=\"px-1 text-muted-foreground\">\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n onClick={() => table.setPageIndex(p)}\n className={cn(\n \"h-7 min-w-7 rounded-md border border-transparent px-2 text-xs font-medium transition-colors hover:bg-accent\",\n p === pageIndex\n ? \"border-border bg-primary/10 text-primary\"\n : \"text-muted-foreground\"\n )}\n >\n {p + 1}\n </button>\n )\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRightIcon />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRightIcon />\n </Button>\n </div>\n\n <div className=\"flex items-center gap-1.5 text-muted-foreground md:justify-self-end\">\n <span>Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger size=\"sm\" className=\"h-7 w-16\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n )\n}\n","import { useEffect, useMemo, useState } from \"react\"\nimport type { Column, FilterFn } from \"@tanstack/react-table\"\nimport { SearchIcon, XIcon } from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport { Input } from \"./ui/input\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Separator } from \"./ui/separator\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\n// ---------- types -----------------------------------------------------\n\nexport type TextOp =\n | \"contains\"\n | \"notContains\"\n | \"equals\"\n | \"notEqual\"\n | \"startsWith\"\n | \"endsWith\"\n | \"blank\"\n | \"notBlank\"\n\nexport type NumberOp =\n | \"equals\"\n | \"notEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\"\n | \"inRange\"\n | \"blank\"\n | \"notBlank\"\n\nexport type DateOp =\n | \"equals\"\n | \"notEqual\"\n | \"before\"\n | \"after\"\n | \"inRange\"\n | \"blank\"\n | \"notBlank\"\n\nexport type Combine = \"AND\" | \"OR\"\n\nexport type Condition<Op extends string, V> = {\n op: Op\n v?: V\n v2?: V\n}\n\nexport type AdvFilter<Op extends string, V> = {\n c1: Condition<Op, V>\n combine?: Combine\n c2?: Condition<Op, V>\n}\n\nexport type SetFilter = { selected: string[] }\n\n// ---------- operator metadata ----------------------------------------\n\nconst TEXT_OPS: { v: TextOp; l: string }[] = [\n { v: \"contains\", l: \"Contains\" },\n { v: \"notContains\", l: \"Does not contain\" },\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"startsWith\", l: \"Starts with\" },\n { v: \"endsWith\", l: \"Ends with\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nconst NUMBER_OPS: { v: NumberOp; l: string }[] = [\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"lessThan\", l: \"Less than\" },\n { v: \"lessThanOrEqual\", l: \"Less than or equal\" },\n { v: \"greaterThan\", l: \"Greater than\" },\n { v: \"greaterThanOrEqual\", l: \"Greater than or equal\" },\n { v: \"inRange\", l: \"In range\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nconst DATE_OPS: { v: DateOp; l: string }[] = [\n { v: \"equals\", l: \"Equals\" },\n { v: \"notEqual\", l: \"Does not equal\" },\n { v: \"before\", l: \"Before\" },\n { v: \"after\", l: \"After\" },\n { v: \"inRange\", l: \"In range\" },\n { v: \"blank\", l: \"Blank\" },\n { v: \"notBlank\", l: \"Not blank\" },\n]\n\nfunction isUnary(op: string) {\n return op === \"blank\" || op === \"notBlank\"\n}\nfunction isRange(op: string) {\n return op === \"inRange\"\n}\n\n// ---------- evaluation helpers ---------------------------------------\n\nfunction evalText(op: TextOp, cell: unknown, q: string | undefined): boolean {\n const c = (cell ?? \"\").toString().toLowerCase()\n const v = (q ?? \"\").toString().toLowerCase()\n switch (op) {\n case \"contains\":\n return v === \"\" ? true : c.includes(v)\n case \"notContains\":\n return v === \"\" ? true : !c.includes(v)\n case \"equals\":\n return c === v\n case \"notEqual\":\n return c !== v\n case \"startsWith\":\n return c.startsWith(v)\n case \"endsWith\":\n return c.endsWith(v)\n case \"blank\":\n return c === \"\"\n case \"notBlank\":\n return c !== \"\"\n }\n}\n\nfunction evalNumber(\n op: NumberOp,\n cell: unknown,\n a: number | undefined,\n b: number | undefined\n): boolean {\n const n = cell == null || cell === \"\" ? null : Number(cell)\n switch (op) {\n case \"blank\":\n return n === null\n case \"notBlank\":\n return n !== null\n }\n if (n === null || Number.isNaN(n)) return false\n if (a == null) return true\n switch (op) {\n case \"equals\":\n return n === a\n case \"notEqual\":\n return n !== a\n case \"lessThan\":\n return n < a\n case \"lessThanOrEqual\":\n return n <= a\n case \"greaterThan\":\n return n > a\n case \"greaterThanOrEqual\":\n return n >= a\n case \"inRange\":\n if (b == null) return n >= a\n return n >= a && n <= b\n }\n return true\n}\n\nfunction evalDate(\n op: DateOp,\n cell: unknown,\n a: string | undefined,\n b: string | undefined\n): boolean {\n const c = cell ? String(cell) : \"\"\n switch (op) {\n case \"blank\":\n return c === \"\"\n case \"notBlank\":\n return c !== \"\"\n }\n if (!c) return false\n if (!a) return true\n switch (op) {\n case \"equals\":\n return c === a\n case \"notEqual\":\n return c !== a\n case \"before\":\n return c < a\n case \"after\":\n return c > a\n case \"inRange\":\n if (!b) return c >= a\n return c >= a && c <= b\n }\n return true\n}\n\nfunction combineResults(a: boolean, b: boolean, mode: Combine | undefined) {\n if (mode === \"OR\") return a || b\n return a && b\n}\n\nfunction isAdvActive(f: AdvFilter<string, unknown> | undefined) {\n if (!f?.c1) return false\n const c1 = f.c1\n if (isUnary(c1.op)) return true\n if (c1.v == null || c1.v === \"\") {\n // c1 inactive — check c2\n if (!f.c2) return false\n const c2 = f.c2\n if (isUnary(c2.op)) return true\n return c2.v != null && c2.v !== \"\"\n }\n return true\n}\n\n// ---------- filter fns -------------------------------------------------\n\nexport const textFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<TextOp, string> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || (c1.v != null && c1.v !== \"\")\n const aRes = aActive ? evalText(c1.op, cell, c1.v) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || (c2.v != null && c2.v !== \"\")\n if (!bActive) return aRes\n const bRes = evalText(c2.op, cell, c2.v)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const numberFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<NumberOp, number> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || c1.v != null\n const aRes = aActive ? evalNumber(c1.op, cell, c1.v, c1.v2) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || c2.v != null\n if (!bActive) return aRes\n const bRes = evalNumber(c2.op, cell, c2.v, c2.v2)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const dateFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as AdvFilter<DateOp, string> | undefined\n if (!isAdvActive(f as AdvFilter<string, unknown>)) return true\n const cell = row.getValue(columnId)\n const c1 = f!.c1\n const aActive = isUnary(c1.op) || (c1.v != null && c1.v !== \"\")\n const aRes = aActive ? evalDate(c1.op, cell, c1.v, c1.v2) : true\n if (!f!.c2) return aRes\n const c2 = f!.c2\n const bActive = isUnary(c2.op) || (c2.v != null && c2.v !== \"\")\n if (!bActive) return aRes\n const bRes = evalDate(c2.op, cell, c2.v, c2.v2)\n if (!aActive) return bRes\n return combineResults(aRes, bRes, f!.combine)\n}\n\nexport const setFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n const f = value as SetFilter | undefined\n if (!f || !Array.isArray(f.selected)) return true\n if (f.selected.length === 0) return false\n const cell = row.getValue(columnId)\n if (Array.isArray(cell)) {\n return cell.some((c) => f.selected.includes(String(c)))\n }\n return f.selected.includes(String(cell ?? \"\"))\n}\n\nexport const booleanFilterFn: FilterFn<unknown> = (row, columnId, value) => {\n if (value === undefined || value === null || value === \"\") return true\n const cell = row.getValue(columnId)\n return Boolean(cell) === Boolean(value)\n}\n\nexport function isFilterActive(filterType: string | undefined, value: unknown) {\n if (value === undefined || value === null || value === \"\") return false\n if (filterType === \"multi-select\" || filterType === \"select\") {\n const f = value as Partial<SetFilter>\n return Array.isArray(f.selected)\n }\n if (filterType === \"text\" || filterType === \"number\" || filterType === \"date\") {\n return isAdvActive(value as AdvFilter<string, unknown>)\n }\n if (filterType === \"boolean\") return value !== undefined\n return true\n}\n\n// ---------- panel components -----------------------------------------\n\ntype CommonProps<TData, TValue> = {\n column: Column<TData, TValue>\n onClose: () => void\n}\n\nexport function ColumnFilterPanel<TData, TValue>(\n props: CommonProps<TData, TValue>\n) {\n const filterType = props.column.columnDef.meta?.filterType\n switch (filterType) {\n case \"text\":\n return <TextFilterPanel {...props} />\n case \"number\":\n return <NumberFilterPanel {...props} />\n case \"date\":\n return <DateFilterPanel {...props} />\n case \"select\":\n case \"multi-select\":\n return <SetFilterPanel {...props} />\n case \"boolean\":\n return <BooleanFilterPanel {...props} />\n default:\n return null\n }\n}\n\n// shared sub-components ------------------------------------------------\n\nfunction OpSelect<Op extends string>({\n ops,\n value,\n onChange,\n}: {\n ops: { v: Op; l: string }[]\n value: Op\n onChange: (v: Op) => void\n}) {\n return (\n <Select value={value} onValueChange={(v) => onChange(v as Op)}>\n <SelectTrigger\n size=\"sm\"\n className=\"h-8 w-full justify-between text-xs\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ops.map((o) => (\n <SelectItem key={o.v} value={o.v} className=\"text-xs\">\n {o.l}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction CombineToggle({\n value,\n onChange,\n}: {\n value: Combine\n onChange: (v: Combine) => void\n}) {\n return (\n <div className=\"inline-flex h-7 overflow-hidden rounded-md border bg-muted/30 text-[11px]\">\n {([\"AND\", \"OR\"] as const).map((m) => (\n <button\n key={m}\n type=\"button\"\n className={cn(\n \"px-2 transition-colors hover:bg-muted\",\n value === m && \"bg-primary/10 text-primary\"\n )}\n onClick={() => onChange(m)}\n >\n {m}\n </button>\n ))}\n </div>\n )\n}\n\nfunction FooterBar({\n onApply,\n onClear,\n onClose,\n applyDisabled,\n clearDisabled,\n}: {\n onApply?: () => void\n onClear: () => void\n onClose: () => void\n applyDisabled?: boolean\n clearDisabled?: boolean\n}) {\n return (\n <div className=\"mt-2 flex items-center justify-between gap-1.5\">\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={onClear}\n disabled={clearDisabled}\n >\n Clear\n </Button>\n <div className=\"flex items-center gap-1.5\">\n <Button size=\"xs\" variant=\"ghost\" onClick={onClose}>\n Close\n </Button>\n {onApply && (\n <Button size=\"xs\" onClick={onApply} disabled={applyDisabled}>\n Apply\n </Button>\n )}\n </div>\n </div>\n )\n}\n\n// ----- text -----------------------------------------------------------\n\nfunction TextFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<TextOp, string>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<TextOp, string>>(\n value ?? { c1: { op: \"contains\", v: \"\" } }\n )\n // keep draft synced if external value changes\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"contains\", v: \"\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"contains\", v: \"\" } })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={TEXT_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={(c, set) => (\n <Input\n autoFocus\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={(c.v as string) ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value })}\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )}\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={TEXT_OPS}\n renderInput={(c, set) => (\n <Input\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={(c.v as string) ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value })}\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )}\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- number ---------------------------------------------------------\n\nfunction NumberFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<NumberOp, number>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<NumberOp, number>>(\n value ?? { c1: { op: \"equals\" } }\n )\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"equals\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"equals\" } })\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={NUMBER_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={(c, set) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n autoFocus\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"From\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"To\"\n value={c.v2 ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v2:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n </div>\n ) : (\n <Input\n autoFocus\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n onKeyDown={(e) => e.key === \"Enter\" && apply()}\n />\n )\n }\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={NUMBER_OPS}\n renderInput={(c, set) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"From\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"To\"\n value={c.v2 ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v2:\n e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n </div>\n ) : (\n <Input\n type=\"number\"\n className=\"h-8 text-sm\"\n placeholder=\"Value\"\n value={c.v ?? \"\"}\n onChange={(e) =>\n set({\n ...c,\n v: e.target.value === \"\" ? undefined : Number(e.target.value),\n })\n }\n />\n )\n }\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- date -----------------------------------------------------------\n\nfunction DateFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as\n | AdvFilter<DateOp, string>\n | undefined\n const [draft, setDraft] = useState<AdvFilter<DateOp, string>>(\n value ?? { c1: { op: \"equals\" } }\n )\n useEffect(() => {\n setDraft(value ?? { c1: { op: \"equals\" } })\n }, [value])\n\n const apply = () => {\n column.setFilterValue(\n isAdvActive(draft as AdvFilter<string, unknown>) ? draft : undefined\n )\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft({ c1: { op: \"equals\" } })\n }\n\n const renderInput = (\n c: Condition<DateOp, string>,\n set: (n: Condition<DateOp, string>) => void\n ) =>\n isRange(c.op) ? (\n <div className=\"flex gap-1.5\">\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value || undefined })}\n />\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v2 ?? \"\"}\n onChange={(e) => set({ ...c, v2: e.target.value || undefined })}\n />\n </div>\n ) : (\n <Input\n type=\"date\"\n className=\"h-8 text-sm\"\n value={c.v ?? \"\"}\n onChange={(e) => set({ ...c, v: e.target.value || undefined })}\n />\n )\n\n return (\n <div className=\"flex flex-col gap-2\">\n <ConditionRow\n ops={DATE_OPS}\n c={draft.c1}\n onChange={(c1) => setDraft((d) => ({ ...d, c1 }))}\n renderInput={renderInput}\n />\n <Separator />\n <SecondCondition\n draft={draft}\n setDraft={setDraft}\n ops={DATE_OPS}\n renderInput={renderInput}\n />\n <FooterBar onApply={apply} onClear={clear} onClose={onClose} clearDisabled={!value} />\n </div>\n )\n}\n\n// ----- set filter -----------------------------------------------------\n\nfunction SetFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue() as SetFilter | undefined\n const meta = column.columnDef.meta\n const declared = meta?.selectOptions ?? []\n\n // build option list — prefer column-defined options, otherwise derive\n // unique values from the rows we have.\n const options = useMemo(() => {\n if (declared.length) return declared\n const rows = column.getFacetedRowModel?.().rows ?? []\n const seen = new Set<string>()\n const out: { value: string; label: string }[] = []\n for (const r of rows) {\n const v = r.getValue(column.id)\n const arr = Array.isArray(v) ? v : [v]\n for (const item of arr) {\n const k = item == null ? \"\" : String(item)\n if (!seen.has(k)) {\n seen.add(k)\n out.push({ value: k, label: k === \"\" ? \"(Blank)\" : k })\n }\n }\n }\n return out.sort((a, b) => a.label.localeCompare(b.label))\n }, [declared, column])\n\n const [search, setSearch] = useState(\"\")\n const [draft, setDraft] = useState<string[]>(() => {\n if (value && Array.isArray(value.selected)) return value.selected\n return options.map((o) => o.value)\n })\n\n // sync with external changes (filter cleared elsewhere)\n useEffect(() => {\n if (!value) setDraft(options.map((o) => o.value))\n else if (Array.isArray(value.selected)) setDraft(value.selected)\n }, [value, options])\n\n const visible = useMemo(() => {\n const q = search.trim().toLowerCase()\n if (!q) return options\n return options.filter((o) => o.label.toLowerCase().includes(q))\n }, [options, search])\n\n const visibleAllSelected =\n visible.length > 0 && visible.every((o) => draft.includes(o.value))\n const visibleSomeSelected = visible.some((o) => draft.includes(o.value))\n\n const toggleAll = (checked: boolean) => {\n const visibleVals = visible.map((o) => o.value)\n if (checked) {\n const set = new Set([...draft, ...visibleVals])\n setDraft(Array.from(set))\n } else {\n setDraft(draft.filter((v) => !visibleVals.includes(v)))\n }\n }\n\n const toggle = (v: string) => {\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]))\n }\n\n const apply = () => {\n if (draft.length === options.length) {\n column.setFilterValue(undefined)\n } else {\n column.setFilterValue({ selected: draft })\n }\n onClose()\n }\n const clear = () => {\n column.setFilterValue(undefined)\n setDraft(options.map((o) => o.value))\n setSearch(\"\")\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2 opacity-60\" />\n <Input\n autoFocus\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-8 pl-7 pr-7 text-sm\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"absolute top-1/2 right-1.5 -translate-y-1/2 rounded p-0.5 hover:bg-muted\"\n aria-label=\"Clear search\"\n >\n <XIcon className=\"size-3\" />\n </button>\n )}\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 rounded px-1 py-1 text-sm hover:bg-accent\">\n <Checkbox\n checked={\n visibleAllSelected\n ? true\n : visibleSomeSelected\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={(c) => toggleAll(!!c)}\n />\n <span className=\"text-xs font-medium\">\n Select all {search ? \"(filtered)\" : \"\"}\n </span>\n <span className=\"ml-auto text-[10px] text-muted-foreground\">\n {draft.length}/{options.length}\n </span>\n </label>\n\n <div className=\"flex max-h-60 flex-col gap-0.5 overflow-auto pr-0.5\">\n {visible.length === 0 ? (\n <div className=\"px-2 py-3 text-xs text-muted-foreground\">\n No matches\n </div>\n ) : (\n visible.map((o) => {\n const checked = draft.includes(o.value)\n return (\n <label\n key={o.value}\n className=\"flex cursor-pointer items-center gap-2 rounded px-1 py-1 text-sm hover:bg-accent\"\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => toggle(o.value)}\n />\n <span className=\"truncate\">{o.label}</span>\n </label>\n )\n })\n )}\n </div>\n\n <FooterBar\n onApply={apply}\n onClear={clear}\n onClose={onClose}\n clearDisabled={!value}\n />\n </div>\n )\n}\n\n// ----- boolean -------------------------------------------------------\n\nfunction BooleanFilterPanel<TData, TValue>({\n column,\n onClose,\n}: CommonProps<TData, TValue>) {\n const value = column.getFilterValue()\n return (\n <div className=\"flex flex-col gap-1\">\n {[\n { v: undefined, l: \"All\" },\n { v: true, l: \"True\" },\n { v: false, l: \"False\" },\n ].map((o) => (\n <button\n key={String(o.l)}\n type=\"button\"\n onClick={() => {\n column.setFilterValue(o.v)\n onClose()\n }}\n className={cn(\n \"rounded px-2 py-1 text-left text-sm hover:bg-accent\",\n value === o.v && \"bg-accent text-accent-foreground\"\n )}\n >\n {o.l}\n </button>\n ))}\n </div>\n )\n}\n\n// ----- shared condition row ------------------------------------------\n\nfunction ConditionRow<Op extends string, V>({\n ops,\n c,\n onChange,\n renderInput,\n}: {\n ops: { v: Op; l: string }[]\n c: Condition<Op, V>\n onChange: (c: Condition<Op, V>) => void\n renderInput: (\n c: Condition<Op, V>,\n set: (n: Condition<Op, V>) => void\n ) => React.ReactNode\n}) {\n const showInput = !isUnary(c.op)\n return (\n <div className=\"flex flex-col gap-1.5\">\n <OpSelect ops={ops} value={c.op} onChange={(op) => onChange({ ...c, op })} />\n {showInput && renderInput(c, onChange)}\n </div>\n )\n}\n\nfunction SecondCondition<Op extends string, V>({\n draft,\n setDraft,\n ops,\n renderInput,\n}: {\n draft: AdvFilter<Op, V>\n setDraft: React.Dispatch<React.SetStateAction<AdvFilter<Op, V>>>\n ops: { v: Op; l: string }[]\n renderInput: (\n c: Condition<Op, V>,\n set: (n: Condition<Op, V>) => void\n ) => React.ReactNode\n}) {\n const enabled = !!draft.c2\n const c2 = draft.c2\n const combine = draft.combine ?? \"AND\"\n\n if (!enabled) {\n return (\n <button\n type=\"button\"\n onClick={() =>\n setDraft((d) => ({\n ...d,\n combine: d.combine ?? \"AND\",\n c2: { op: ops[0].v },\n }))\n }\n className=\"self-start text-[11px] font-medium text-primary hover:underline\"\n >\n + Add condition\n </button>\n )\n }\n\n const setC2 = (n: Condition<Op, V>) => setDraft((d) => ({ ...d, c2: n }))\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center justify-between\">\n <CombineToggle\n value={combine}\n onChange={(combine) => setDraft((d) => ({ ...d, combine }))}\n />\n <button\n type=\"button\"\n onClick={() =>\n setDraft((d) => ({ ...d, combine: undefined, c2: undefined }))\n }\n className=\"rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label=\"Remove second condition\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n <ConditionRow\n ops={ops}\n c={c2!}\n onChange={setC2}\n renderInput={renderInput}\n />\n </div>\n )\n}\n","import { useState } from \"react\"\nimport type { Column } from \"@tanstack/react-table\"\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n ChevronsUpDownIcon,\n EyeOffIcon,\n PinIcon,\n PinOffIcon,\n FilterIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Button } from \"./ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"./ui/popover\"\nimport { ColumnFilterPanel, isFilterActive } from \"./filters\"\n\ntype Props<TData, TValue> = {\n column: Column<TData, TValue>\n title: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n}: Props<TData, TValue>) {\n const filterType = column.columnDef.meta?.filterType\n const canSort = column.getCanSort()\n const canFilter = column.getCanFilter() && !!filterType\n const canHide = column.getCanHide()\n const canPin = column.getCanPin()\n\n const sorted = column.getIsSorted()\n const isPinned = column.getIsPinned()\n const filterValue = column.getFilterValue()\n const isFiltered = isFilterActive(filterType, filterValue)\n\n return (\n <div className=\"flex items-center justify-between gap-1\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"-ml-2 h-7 px-1.5 text-xs font-medium data-[state=open]:bg-accent\"\n >\n <span>{title}</span>\n {canSort ? (\n sorted === \"desc\" ? (\n <ArrowDownIcon className=\"opacity-70\" />\n ) : sorted === \"asc\" ? (\n <ArrowUpIcon className=\"opacity-70\" />\n ) : (\n <ChevronsUpDownIcon className=\"opacity-50\" />\n )\n ) : null}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-44\">\n {canSort && (\n <>\n <DropdownMenuItem onSelect={() => column.toggleSorting(false)}>\n <ArrowUpIcon /> Ascending\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => column.toggleSorting(true)}>\n <ArrowDownIcon /> Descending\n </DropdownMenuItem>\n {sorted && (\n <DropdownMenuItem onSelect={() => column.clearSorting()}>\n <ChevronsUpDownIcon /> Clear sort\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n </>\n )}\n {canPin && (\n <>\n <DropdownMenuLabel>Pin column</DropdownMenuLabel>\n <DropdownMenuItem\n onSelect={() => column.pin(isPinned === \"left\" ? false : \"left\")}\n >\n {isPinned === \"left\" ? <PinOffIcon /> : <PinIcon />}{\" \"}\n {isPinned === \"left\" ? \"Unpin from left\" : \"Pin to left\"}\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => column.pin(isPinned === \"right\" ? false : \"right\")}\n >\n {isPinned === \"right\" ? <PinOffIcon /> : <PinIcon />}{\" \"}\n {isPinned === \"right\" ? \"Unpin from right\" : \"Pin to right\"}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n </>\n )}\n {canHide && (\n <DropdownMenuItem onSelect={() => column.toggleVisibility(false)}>\n <EyeOffIcon /> Hide column\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {canFilter && (\n <ColumnFilter column={column} isFiltered={isFiltered} />\n )}\n </div>\n )\n}\n\nfunction ColumnFilter<TData, TValue>({\n column,\n isFiltered,\n}: {\n column: Column<TData, TValue>\n isFiltered: boolean\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\n \"size-6\",\n isFiltered && \"bg-primary/10 text-primary\"\n )}\n aria-label=\"Filter column\"\n >\n <FilterIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-2\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Filter\n </div>\n {isFiltered && (\n <span className=\"rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary\">\n Active\n </span>\n )}\n </div>\n <ColumnFilterPanel column={column} onClose={() => setOpen(false)} />\n </PopoverContent>\n </Popover>\n )\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport {\n CopyIcon,\n EyeIcon,\n MoreHorizontalIcon,\n PencilIcon,\n Trash2Icon,\n XIcon,\n CheckIcon,\n} from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport { cn } from \"./lib/utils\"\nimport { usePortalContainer } from \"./portal-container\"\n\nexport type RowActionId = \"view\" | \"edit\" | \"duplicate\" | \"delete\" | string\n\nexport type CustomRowAction<TData> = {\n id: string\n label: string\n icon?: React.ReactNode\n danger?: boolean\n show?: (row: TData) => boolean\n}\n\nexport type DataTableRowActionsProps<TData> = {\n row: TData\n actions?: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customActions?: CustomRowAction<TData>[]\n onAction?: (action: RowActionId, row: TData) => void\n isEditing?: boolean\n onSaveEdit?: () => void\n onCancelEdit?: () => void\n}\n\nconst builtinIcons = {\n view: <EyeIcon />,\n edit: <PencilIcon />,\n duplicate: <CopyIcon />,\n delete: <Trash2Icon />,\n}\n\nconst builtinLabels = {\n view: \"View\",\n edit: \"Edit\",\n duplicate: \"Duplicate\",\n delete: \"Delete\",\n}\n\nexport function DataTableRowActions<TData>({\n row,\n actions = [\"view\", \"edit\", \"duplicate\", \"delete\"],\n customActions = [],\n onAction,\n isEditing,\n onSaveEdit,\n onCancelEdit,\n}: DataTableRowActionsProps<TData>) {\n const [open, setOpen] = useState(false)\n const [menuPosition, setMenuPosition] = useState({ top: 0, left: 0 })\n const triggerRef = useRef<HTMLButtonElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n const portalContainer = usePortalContainer()\n\n useLayoutEffect(() => {\n if (!open || !triggerRef.current) return\n const rect = triggerRef.current.getBoundingClientRect()\n if (portalContainer) {\n // Position relative to the container instead of the viewport so that\n // the menu inherits the grid's themed CSS variables.\n const cRect = portalContainer.getBoundingClientRect()\n setMenuPosition({\n top: rect.bottom - cRect.top + 4,\n left: Math.max(8, rect.right - cRect.left - 160),\n })\n } else {\n setMenuPosition({\n top: rect.bottom + 4,\n left: Math.max(8, rect.right - 160),\n })\n }\n }, [open, portalContainer])\n\n useEffect(() => {\n if (!open) return\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n if (\n !menuRef.current?.contains(target) &&\n !triggerRef.current?.contains(target)\n ) {\n setOpen(false)\n }\n }\n const onDismiss = () => setOpen(false)\n document.addEventListener(\"pointerdown\", onPointerDown)\n window.addEventListener(\"scroll\", onDismiss, true)\n window.addEventListener(\"resize\", onDismiss)\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown)\n window.removeEventListener(\"scroll\", onDismiss, true)\n window.removeEventListener(\"resize\", onDismiss)\n }\n }, [open])\n\n if (isEditing) {\n return (\n <div className=\"flex items-center justify-end gap-1\">\n <Button\n size=\"icon-xs\"\n variant=\"ghost\"\n onClick={onSaveEdit}\n aria-label=\"Save row\"\n className=\"text-emerald-600 hover:text-emerald-600\"\n >\n <CheckIcon />\n </Button>\n <Button\n size=\"icon-xs\"\n variant=\"ghost\"\n onClick={onCancelEdit}\n aria-label=\"Cancel edit\"\n >\n <XIcon />\n </Button>\n </div>\n )\n }\n\n return (\n <div ref={menuRef} className=\"relative flex justify-end\">\n <Button\n ref={triggerRef}\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label=\"Open row actions\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <MoreHorizontalIcon />\n </Button>\n\n {open &&\n createPortal(\n <div\n ref={menuRef}\n className=\"z-[1000] w-40 rounded-md border bg-popover p-1 text-popover-foreground shadow-lg\"\n style={{\n position: portalContainer ? \"absolute\" : \"fixed\",\n top: menuPosition.top,\n left: menuPosition.left,\n }}\n >\n {actions.map((a) => (\n <RowActionButton\n key={a}\n danger={a === \"delete\"}\n onClick={() => {\n setOpen(false)\n onAction?.(a, row)\n }}\n >\n {builtinIcons[a]} {builtinLabels[a]}\n </RowActionButton>\n ))}\n {customActions.length > 0 && actions.length > 0 && (\n <div className=\"-mx-1 my-1 h-px bg-border\" />\n )}\n {customActions\n .filter((c) => (c.show ? c.show(row) : true))\n .map((c) => (\n <RowActionButton\n key={c.id}\n danger={c.danger}\n onClick={() => {\n setOpen(false)\n onAction?.(c.id, row)\n }}\n >\n {c.icon} {c.label}\n </RowActionButton>\n ))}\n </div>,\n portalContainer ?? document.body\n )}\n </div>\n )\n}\n\nfunction RowActionButton({\n children,\n danger,\n onClick,\n}: {\n children: React.ReactNode\n danger?: boolean\n onClick: () => void\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent\",\n danger && \"text-destructive hover:bg-destructive/10 hover:text-destructive\"\n )}\n >\n {children}\n </button>\n )\n}\n","import { useEffect, useRef, useState } from \"react\"\nimport type { CellContext } from \"@tanstack/react-table\"\n\nimport { cn } from \"./lib/utils\"\nimport { Input } from \"./ui/input\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Badge } from \"./ui/badge\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\"\n\nexport type EditableCellProps<TData, TValue> = CellContext<TData, TValue> & {\n isEditing: boolean\n /** True only when this cell was directly opened for edit (double-click). Row-edit mode keeps this false to avoid auto-opening every editor at once. */\n autoOpen?: boolean\n onCommit: (value: unknown) => void\n onCancel: () => void\n onStartEdit: () => void\n}\n\nexport function EditableCell<TData, TValue>({\n getValue,\n column,\n row,\n isEditing,\n autoOpen,\n onCommit,\n onCancel,\n onStartEdit,\n}: EditableCellProps<TData, TValue>) {\n const meta = column.columnDef.meta\n const editor = meta?.editor ?? \"text\"\n const align = meta?.align ?? \"left\"\n const initial = getValue()\n const [local, setLocal] = useState<unknown>(initial)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n setLocal(initial)\n }, [initial, isEditing])\n\n useEffect(() => {\n if (isEditing && inputRef.current) inputRef.current.focus()\n }, [isEditing])\n\n const isEditable = (() => {\n const flag = meta?.isEditable\n if (flag === undefined) return true\n if (typeof flag === \"function\") return flag(row.original)\n return flag\n })()\n\n // Display mode\n if (!isEditing || !isEditable) {\n const display = renderDisplay(initial, editor, meta)\n return (\n <div\n className={cn(\n \"flex h-7 items-center gap-1.5 rounded px-1.5 text-sm\",\n isEditable &&\n \"cursor-text outline-1 outline-transparent transition-colors hover:bg-muted/60 hover:outline-border\",\n align === \"right\" && \"justify-end\",\n align === \"center\" && \"justify-center\"\n )}\n onDoubleClick={() => isEditable && onStartEdit()}\n title={isEditable ? \"Double-click to edit\" : undefined}\n >\n {display}\n </div>\n )\n }\n\n const commit = (value: unknown) => { if (isEditable) onCommit(value) }\n const handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") commit(local)\n else if (e.key === \"Escape\") onCancel()\n }\n\n if (editor === \"select\") {\n const opts = meta?.selectOptions ?? []\n if (!autoOpen) {\n return (\n <select\n value={String(local ?? \"\")}\n onChange={(e) => {\n setLocal(e.target.value)\n commit(e.target.value)\n }}\n className={cn(\n \"h-7 w-full rounded-md border border-input bg-background px-1.5 text-xs outline-none focus-visible:border-ring\",\n align === \"right\" && \"text-right\",\n align === \"center\" && \"text-center\"\n )}\n >\n {opts.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n )\n }\n\n return (\n <Select\n defaultOpen={autoOpen}\n value={String(local ?? \"\")}\n onValueChange={(v) => commit(v)}\n >\n <SelectTrigger size=\"sm\" className=\"h-7 w-full text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {opts.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n if (editor === \"checkbox\" || editor === \"switch\") {\n return (\n <div className=\"flex h-7 items-center justify-center\">\n <Checkbox\n checked={!!local}\n onCheckedChange={(c) => commit(!!c)}\n autoFocus\n />\n </div>\n )\n }\n\n return (\n <Input\n ref={inputRef}\n type={\n editor === \"number\" || editor === \"currency\"\n ? \"number\"\n : editor === \"date\"\n ? \"date\"\n : \"text\"\n }\n value={local == null ? \"\" : String(local)}\n onChange={(e) => {\n if (editor === \"number\" || editor === \"currency\") {\n setLocal(e.target.value === \"\" ? null : Number(e.target.value))\n } else {\n setLocal(e.target.value)\n }\n }}\n onBlur={() => commit(local)}\n onKeyDown={handleKey}\n className={cn(\n \"h-7 px-1.5 text-sm\",\n align === \"right\" && \"text-right\",\n align === \"center\" && \"text-center\"\n )}\n />\n )\n}\n\nfunction renderDisplay(\n value: unknown,\n editor: string,\n meta?: { selectOptions?: { value: string; label: string }[]; badgeMap?: Partial<Record<string, \"default\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\" | \"outline\">> }\n) {\n if (value === null || value === undefined || value === \"\") {\n return <span className=\"text-muted-foreground/60\">—</span>\n }\n\n if (editor === \"currency\") {\n const n = typeof value === \"number\" ? value : Number(value)\n return Number.isFinite(n)\n ? new Intl.NumberFormat(undefined, {\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: 2,\n }).format(n)\n : String(value)\n }\n if (editor === \"number\") {\n const n = typeof value === \"number\" ? value : Number(value)\n return Number.isFinite(n) ? new Intl.NumberFormat().format(n) : String(value)\n }\n if (editor === \"checkbox\" || editor === \"switch\") {\n return (\n <Checkbox checked={!!value} disabled aria-label=\"value\" />\n )\n }\n if (editor === \"select\") {\n const opt = meta?.selectOptions?.find((o) => o.value === value)\n const label = opt?.label ?? String(value)\n if (meta?.badgeMap) {\n const variant = meta.badgeMap[String(value)] ?? \"default\"\n return <Badge variant={variant}>{label}</Badge>\n }\n return label\n }\n if (editor === \"date\") {\n if (value instanceof Date) return value.toLocaleDateString()\n return String(value)\n }\n return String(value)\n}\n","import type { CSSProperties } from \"react\"\n\n/**\n * CSS variable overrides for a single DataTable instance.\n *\n * The component is built on shadcn/ui's CSS custom properties. By default it\n * inherits whatever is defined on the consumer's :root (e.g. when shadcn is\n * already set up). Pass any of these to override on a specific instance —\n * values are emitted as inline CSS variables on the table root, scoped\n * through CSS cascade to that instance only.\n */\nexport type DataTableTokens = {\n background?: string\n foreground?: string\n card?: string\n cardForeground?: string\n popover?: string\n popoverForeground?: string\n primary?: string\n primaryForeground?: string\n secondary?: string\n secondaryForeground?: string\n muted?: string\n mutedForeground?: string\n accent?: string\n accentForeground?: string\n destructive?: string\n destructiveForeground?: string\n border?: string\n input?: string\n ring?: string\n\n /** Border radius (e.g. \"0.5rem\"). */\n radius?: string\n /** Font family for the table body. */\n fontFamily?: string\n}\n\n/**\n * A theme passed to `<DataTable theme={…}>`.\n *\n * Two accepted shapes:\n *\n * 1. A flat token map (`DataTableTokens`) — applied as-is, no dark variant.\n * 2. A moded map (`DataTableModedTheme`) — `light` is applied by default,\n * `dark` is swapped in automatically inside `@media (prefers-color-scheme: dark)`\n * *and* inside any `.dark` ancestor.\n */\nexport type DataTableModedTheme = {\n light?: DataTableTokens\n dark?: DataTableTokens\n}\n\nexport type DataTableTheme = DataTableTokens | DataTableModedTheme\n\nconst TOKEN_TO_VAR: Record<keyof DataTableTokens, string> = {\n background: \"--background\",\n foreground: \"--foreground\",\n card: \"--card\",\n cardForeground: \"--card-foreground\",\n popover: \"--popover\",\n popoverForeground: \"--popover-foreground\",\n primary: \"--primary\",\n primaryForeground: \"--primary-foreground\",\n secondary: \"--secondary\",\n secondaryForeground: \"--secondary-foreground\",\n muted: \"--muted\",\n mutedForeground: \"--muted-foreground\",\n accent: \"--accent\",\n accentForeground: \"--accent-foreground\",\n destructive: \"--destructive\",\n destructiveForeground: \"--destructive-foreground\",\n border: \"--border\",\n input: \"--input\",\n ring: \"--ring\",\n radius: \"--radius\",\n fontFamily: \"--font-family\",\n}\n\n// Values are declarations, never CSS rules or network requests. Apply the same\n// validation to inline light tokens and interpolated dark-theme declarations.\nfunction isSafeToken(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n !/[;{}<>@\\\\\\u0000-\\u001f]/.test(value) &&\n !/\\/\\*|\\*\\/|url\\s*\\(|expression\\s*\\(/i.test(value)\n )\n}\n\nfunction isModed(\n theme: DataTableTheme | undefined\n): theme is DataTableModedTheme {\n if (!theme) return false\n return \"light\" in theme || \"dark\" in theme\n}\n\n/** Convert a DataTableTokens map into a CSS `style` object. */\nexport function tokensToStyle(tokens?: DataTableTokens): CSSProperties {\n if (!tokens) return {}\n const out: Record<string, string> = {}\n for (const [k, v] of Object.entries(tokens)) {\n if (!isSafeToken(v)) continue\n const cssVar = Object.prototype.hasOwnProperty.call(TOKEN_TO_VAR, k)\n ? TOKEN_TO_VAR[k as keyof DataTableTokens]\n : undefined\n if (cssVar) out[cssVar] = v\n }\n return out as CSSProperties\n}\n\n/**\n * Back-compat: original API accepted a flat `DataTableTheme`. Still works,\n * but if a moded theme is passed it returns the `light` variant only — use\n * `splitTheme` if you need both variants.\n */\nexport function themeToStyle(theme?: DataTableTheme): CSSProperties {\n if (!theme) return {}\n if (isModed(theme)) return tokensToStyle(theme.light)\n return tokensToStyle(theme as DataTableTokens)\n}\n\n/**\n * Split a theme into its `light` (always applied) and optional `dark` (applied\n * via `@media (prefers-color-scheme: dark)` and `.dark` ancestor) variants.\n *\n * For flat themes, returns `{ light: theme, dark: undefined }`.\n */\nexport function splitTheme(theme?: DataTableTheme): {\n light: DataTableTokens | undefined\n dark: DataTableTokens | undefined\n} {\n if (!theme) return { light: undefined, dark: undefined }\n if (isModed(theme)) return { light: theme.light, dark: theme.dark }\n return { light: theme as DataTableTokens, dark: undefined }\n}\n\n// ---------------------------------------------------------------------------\n// Preset builder\n// ---------------------------------------------------------------------------\n\n/**\n * Build a full light+dark token set from a single OKLCH hue.\n *\n * @param hue Hue angle 0–360 (e.g. 285 for violet, 162 for emerald).\n * @param chroma Optional base chroma for tinted neutrals (default 0.03).\n */\nexport function buildPreset(hue: number, chroma = 0.03): DataTableModedTheme {\n const c = chroma\n // The destructive hue stays in the red band but is nudged a little toward\n // the preset's hue so it sits in the same visual family without losing the\n // universal \"this is dangerous\" red signal. Distance from rose (~15°) is\n // small for warm presets and larger for cool ones — clamped.\n const destH = blendTowardRed(hue)\n return {\n light: {\n background: `oklch(0.99 ${c * 0.2} ${hue})`,\n foreground: `oklch(0.18 ${c * 1.2} ${hue})`,\n card: `oklch(1 0 0)`,\n cardForeground: `oklch(0.18 ${c * 1.2} ${hue})`,\n popover: `oklch(1 0 0)`,\n popoverForeground: `oklch(0.18 ${c * 1.2} ${hue})`,\n primary: `oklch(0.55 0.2 ${hue})`,\n primaryForeground: `oklch(0.99 0 0)`,\n secondary: `oklch(0.96 ${c} ${hue})`,\n secondaryForeground: `oklch(0.25 ${c * 2} ${hue})`,\n muted: `oklch(0.96 ${c} ${hue})`,\n mutedForeground: `oklch(0.5 ${c * 1.5} ${hue})`,\n accent: `oklch(0.94 ${c * 1.2} ${hue})`,\n accentForeground: `oklch(0.3 ${c * 3} ${hue})`,\n destructive: `oklch(0.577 0.22 ${destH})`,\n destructiveForeground: `oklch(0.985 0 0)`,\n border: `oklch(0.9 ${c * 0.8} ${hue})`,\n input: `oklch(0.9 ${c * 0.8} ${hue})`,\n ring: `oklch(0.55 0.2 ${hue} / 0.5)`,\n radius: \"0.375rem\",\n },\n dark: {\n background: `oklch(0.16 ${c * 0.6} ${hue})`,\n foreground: `oklch(0.97 ${c * 0.2} ${hue})`,\n card: `oklch(0.21 ${c * 0.8} ${hue})`,\n cardForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n popover: `oklch(0.21 ${c * 0.8} ${hue})`,\n popoverForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n primary: `oklch(0.7 0.18 ${hue})`,\n primaryForeground: `oklch(0.16 ${c * 0.6} ${hue})`,\n secondary: `oklch(0.27 ${c * 0.8} ${hue})`,\n secondaryForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n muted: `oklch(0.27 ${c * 0.8} ${hue})`,\n mutedForeground: `oklch(0.7 ${c * 0.5} ${hue})`,\n accent: `oklch(0.3 ${c * 1.5} ${hue})`,\n accentForeground: `oklch(0.97 ${c * 0.2} ${hue})`,\n destructive: `oklch(0.65 0.22 ${destH})`,\n destructiveForeground: `oklch(0.985 0 0)`,\n border: `oklch(0.27 ${c * 0.8} ${hue})`,\n input: `oklch(0.27 ${c * 0.8} ${hue})`,\n ring: `oklch(0.7 0.18 ${hue} / 0.5)`,\n radius: \"0.375rem\",\n },\n }\n}\n\n/** Pull a hue gently toward the red band so destructive stays unmistakably \"red-ish\". */\nfunction blendTowardRed(hue: number): number {\n const red = 25\n // Wrap-aware shortest-path blend with weight 0.7 toward red.\n let delta = ((hue - red + 540) % 360) - 180\n return (red + delta * 0.3 + 360) % 360\n}\n\n/**\n * Convert a tokens map into a CSS declaration string (no selector, no braces),\n * e.g. `--background:oklch(1 0 0);--foreground:oklch(0.145 0 0)`.\n *\n * Used internally to inject scoped <style> blocks for moded themes.\n */\nexport function tokensToCssBlock(tokens?: DataTableTokens): string {\n if (!tokens) return \"\"\n const parts: string[] = []\n for (const [k, v] of Object.entries(tokens)) {\n if (!isSafeToken(v)) continue\n const cssVar = Object.prototype.hasOwnProperty.call(TOKEN_TO_VAR, k)\n ? TOKEN_TO_VAR[k as keyof DataTableTokens]\n : undefined\n if (cssVar) parts.push(`${cssVar}:${v}`)\n }\n return parts.join(\";\")\n}\n\n/** Pure neutral (grayscale) preset — no hue, no chroma. */\nconst neutral: DataTableModedTheme = {\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.145 0 0)\",\n card: \"oklch(1 0 0)\",\n cardForeground: \"oklch(0.145 0 0)\",\n popover: \"oklch(1 0 0)\",\n popoverForeground: \"oklch(0.145 0 0)\",\n primary: \"oklch(0.205 0 0)\",\n primaryForeground: \"oklch(0.985 0 0)\",\n secondary: \"oklch(0.97 0 0)\",\n secondaryForeground: \"oklch(0.205 0 0)\",\n muted: \"oklch(0.97 0 0)\",\n mutedForeground: \"oklch(0.556 0 0)\",\n accent: \"oklch(0.97 0 0)\",\n accentForeground: \"oklch(0.205 0 0)\",\n destructive: \"oklch(0.577 0.245 27.325)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n border: \"oklch(0.922 0 0)\",\n input: \"oklch(0.922 0 0)\",\n ring: \"oklch(0.708 0 0)\",\n radius: \"0.375rem\",\n },\n dark: {\n background: \"oklch(0.145 0 0)\",\n foreground: \"oklch(0.985 0 0)\",\n card: \"oklch(0.205 0 0)\",\n cardForeground: \"oklch(0.985 0 0)\",\n popover: \"oklch(0.205 0 0)\",\n popoverForeground: \"oklch(0.985 0 0)\",\n primary: \"oklch(0.985 0 0)\",\n primaryForeground: \"oklch(0.205 0 0)\",\n secondary: \"oklch(0.269 0 0)\",\n secondaryForeground: \"oklch(0.985 0 0)\",\n muted: \"oklch(0.269 0 0)\",\n mutedForeground: \"oklch(0.708 0 0)\",\n accent: \"oklch(0.269 0 0)\",\n accentForeground: \"oklch(0.985 0 0)\",\n destructive: \"oklch(0.577 0.245 27.325 / 0.6)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n border: \"oklch(0.269 0 0)\",\n input: \"oklch(0.269 0 0)\",\n ring: \"oklch(0.439 0 0)\",\n radius: \"0.375rem\",\n },\n}\n\n/**\n * Ready-to-use theme presets.\n *\n * Each preset is a full light + dark token set — passing one to\n * `<DataTable theme={…}>` repaints the entire table and auto-flips on OS\n * dark mode (or when a `.dark` ancestor is added).\n *\n * Custom hues:\n *\n * ```ts\n * import { buildPreset } from \"@dynostack/react-grid\"\n * const tealPreset = buildPreset(180)\n * ```\n */\nexport const themePresets = {\n neutral,\n graphite: {\n light: {\n ...neutral.light,\n background: \"#fafafa\",\n card: \"#ffffff\",\n border: \"#e5e5e5\",\n radius: \"0.375rem\",\n fontFamily: \"'Geist', sans-serif\",\n },\n dark: {\n ...neutral.dark,\n background: \"#101112\",\n card: \"#101112\",\n popover: \"#17191b\",\n border: \"#292c2f\",\n input: \"#303438\",\n muted: \"#1b1e21\",\n mutedForeground: \"#9ba2aa\",\n accent: \"#24282d\",\n primary: \"#edf0f3\",\n primaryForeground: \"#101112\",\n ring: \"#84b8ff\",\n destructive: \"#fb7185\",\n radius: \"0.375rem\",\n fontFamily: \"'Geist', sans-serif\",\n },\n } satisfies DataTableModedTheme,\n light: { light: neutral.light } satisfies DataTableModedTheme,\n dark: { light: neutral.dark } satisfies DataTableModedTheme,\n violet: buildPreset(285),\n emerald: buildPreset(162),\n amber: buildPreset(65),\n rose: buildPreset(15),\n sky: buildPreset(235),\n slate: buildPreset(240, 0.015),\n} satisfies Record<string, DataTableModedTheme>\n\nexport type DataTableThemeName = keyof typeof themePresets\n\n/**\n * Bundled fallback tokens used when `<DataTable isolate>` is set. These let\n * the grid render correctly even when the consumer hasn't imported\n * `styles.css` or provided any theme of their own.\n */\nexport const ISOLATE_LIGHT_TOKENS: DataTableTokens = neutral.light!\nexport const ISOLATE_DARK_TOKENS: DataTableTokens = neutral.dark!\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\n\nfunction Sheet(props: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-foreground/30 backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\ntype SheetSide = \"right\" | \"left\" | \"top\" | \"bottom\"\n\nconst SIDE_CLASS: Record<SheetSide, string> = {\n right:\n \"right-0 top-0 h-full w-full border-l sm:w-[min(48rem,calc(100vw-2rem))] data-closed:slide-out-to-right data-open:slide-in-from-right\",\n left:\n \"left-0 top-0 h-full w-full border-r sm:w-[min(48rem,calc(100vw-2rem))] data-closed:slide-out-to-left data-open:slide-in-from-left\",\n top:\n \"left-0 top-0 w-full max-h-[80vh] border-b data-closed:slide-out-to-top data-open:slide-in-from-top\",\n bottom:\n \"left-0 bottom-0 w-full max-h-[80vh] border-t data-closed:slide-out-to-bottom data-open:slide-in-from-bottom\",\n}\n\nfunction SheetContent({\n className,\n side = \"right\",\n children,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & { side?: SheetSide }) {\n const container = usePortalContainer()\n return (\n <DialogPrimitive.Portal container={container ?? undefined}>\n <SheetOverlay />\n <DialogPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background p-6 shadow-lg outline-none transition data-open:animate-in data-closed:animate-out duration-200\",\n SIDE_CLASS[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute top-4 right-4 rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 pr-8\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetTitle,\n SheetTrigger,\n}\nexport type { SheetSide }\n","\"use client\"\n\nimport { useMemo, useState } from \"react\"\nimport type { Column, Table } from \"@tanstack/react-table\"\nimport { LayoutGridIcon, ListIcon, Rows3Icon } from \"lucide-react\"\n\nimport { Button } from \"./ui/button\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n type SheetSide,\n} from \"./ui/sheet\"\nimport { cn } from \"./lib/utils\"\n\nexport type ViewSheetDensity = \"compact\" | \"relaxed\" | \"comfy\"\n\nexport type ViewSheetLabels = {\n title?: (row: any) => React.ReactNode\n description?: (row: any) => React.ReactNode\n emptyValue?: string\n density?: {\n compact?: string\n relaxed?: string\n comfy?: string\n }\n}\n\nexport type ViewSheetConfig<TData> = {\n /** Side of the screen to slide in from. Defaults to \"right\". */\n side?: SheetSide\n /** Initial layout density. Defaults to \"compact\" (more fields per row). */\n defaultDensity?: ViewSheetDensity\n /** Hide the density tabs entirely if you want a fixed layout. */\n hideDensityTabs?: boolean\n /** Override how a field's value is rendered. */\n renderField?: (args: {\n column: Column<TData, unknown>\n value: unknown\n row: TData\n }) => React.ReactNode\n /** Custom header for the sheet. */\n renderHeader?: (row: TData) => React.ReactNode\n /** Filter / reorder which columns appear. Defaults to all visible columns. */\n fields?: string[]\n /** Override label / placeholder strings. */\n labels?: ViewSheetLabels\n}\n\nconst COLS_CLASS: Record<ViewSheetDensity, string> = {\n compact: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n relaxed: \"grid-cols-1 sm:grid-cols-2\",\n comfy: \"grid-cols-1\",\n}\n\nconst CARD_CLASS: Record<ViewSheetDensity, string> = {\n compact: \"gap-0.5 p-2.5\",\n relaxed: \"gap-1 p-3\",\n comfy: \"gap-1.5 p-4\",\n}\n\nconst DENSITY_ICON: Record<ViewSheetDensity, React.ReactNode> = {\n compact: <LayoutGridIcon className=\"size-3.5\" />,\n relaxed: <Rows3Icon className=\"size-3.5\" />,\n comfy: <ListIcon className=\"size-3.5\" />,\n}\n\nexport function DataTableViewSheet<TData>({\n table,\n row,\n open,\n onOpenChange,\n config,\n}: {\n table: Table<TData>\n row: TData | null\n open: boolean\n onOpenChange: (open: boolean) => void\n config?: ViewSheetConfig<TData>\n}) {\n const [density, setDensity] = useState<ViewSheetDensity>(\n config?.defaultDensity ?? \"compact\"\n )\n\n const fields = useMemo(() => {\n if (!row) return []\n const wanted = config?.fields\n const allCols = table.getAllLeafColumns().filter((c) => {\n // skip internal selection/actions columns\n if (c.id === \"__select\" || c.id === \"__actions\" || c.id === \"__expand\")\n return false\n // when no explicit fields list, only include currently visible cols\n if (wanted) return wanted.includes(c.id)\n return c.getIsVisible()\n })\n if (wanted) {\n // preserve consumer ordering\n return wanted\n .map((id) => allCols.find((c) => c.id === id))\n .filter((c): c is Column<TData, unknown> => Boolean(c))\n }\n return allCols\n }, [table, row, config?.fields])\n\n if (!row) return null\n\n const labels = config?.labels\n const emptyValue = labels?.emptyValue ?? \"—\"\n const densityLabels = {\n compact: labels?.density?.compact ?? \"Compact\",\n relaxed: labels?.density?.relaxed ?? \"Relaxed\",\n comfy: labels?.density?.comfy ?? \"Comfy\",\n }\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side={config?.side ?? \"right\"}>\n {config?.renderHeader ? (\n config.renderHeader(row)\n ) : (\n <SheetHeader>\n <SheetTitle>\n {labels?.title ? labels.title(row) : \"Details\"}\n </SheetTitle>\n {labels?.description && (\n <SheetDescription>{labels.description(row)}</SheetDescription>\n )}\n </SheetHeader>\n )}\n\n {!config?.hideDensityTabs && (\n <div\n role=\"tablist\"\n aria-label=\"Layout density\"\n className=\"inline-flex w-fit gap-0.5 rounded-md border bg-muted/40 p-0.5 text-xs\"\n >\n {([\"compact\", \"relaxed\", \"comfy\"] as const).map((d) => (\n <button\n key={d}\n role=\"tab\"\n aria-selected={density === d}\n onClick={() => setDensity(d)}\n className={cn(\n \"inline-flex items-center gap-1 rounded px-2 py-1 transition-colors\",\n density === d\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n {DENSITY_ICON[d]}\n {densityLabels[d]}\n </button>\n ))}\n </div>\n )}\n\n <div className={cn(\"grid gap-3 overflow-y-auto\", COLS_CLASS[density])}>\n {fields.map((col) => {\n const colId = col.id\n const colDef = col.columnDef\n const headerLabel =\n (colDef.meta as { label?: string } | undefined)?.label ??\n (typeof colDef.header === \"string\" ? colDef.header : colId)\n // @ts-expect-error - accessor key is column-specific\n const rawValue = (row as any)[colDef.accessorKey ?? colId]\n const rendered = config?.renderField\n ? config.renderField({ column: col, value: rawValue, row })\n : defaultRenderValue(rawValue, emptyValue)\n return (\n <div\n key={colId}\n className={cn(\n \"flex min-w-0 flex-col rounded-md border bg-card\",\n CARD_CLASS[density]\n )}\n >\n <span className=\"text-[11px] uppercase tracking-wide text-muted-foreground\">\n {headerLabel}\n </span>\n <span className=\"break-words text-sm text-foreground\">\n {rendered}\n </span>\n </div>\n )\n })}\n </div>\n\n <div className=\"mt-2 flex justify-end\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n </SheetContent>\n </Sheet>\n )\n}\n\nfunction defaultRenderValue(value: unknown, empty: string): React.ReactNode {\n if (value == null || value === \"\") return empty\n if (typeof value === \"boolean\") return value ? \"Yes\" : \"No\"\n if (value instanceof Date) return value.toLocaleString()\n if (typeof value === \"object\") return JSON.stringify(value)\n return String(value)\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../lib/utils\"\nimport { usePortalContainer } from \"../portal-container\"\nimport { buttonVariants } from \"./button\"\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>\n) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n const container = usePortalContainer()\n const positionClass = container ? \"absolute\" : \"fixed\"\n return (\n <AlertDialogPrimitive.Portal container={container ?? undefined}>\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"inset-0 z-50 bg-foreground/30 backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n positionClass\n )}\n />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n className={cn(\n \"top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border bg-background p-6 shadow-lg outline-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n positionClass,\n className\n )}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Content>\n </AlertDialogPrimitive.Portal>\n )\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\"flex flex-col gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\"text-lg font-semibold leading-none\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {\n return (\n <AlertDialogPrimitive.Action\n className={cn(buttonVariants(), className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogCancel({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n return (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n {...props}\n />\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","\"use client\"\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"./ui/alert-dialog\"\n\nexport type ConfirmDeleteContext<TData> = {\n /** The rows being deleted. Single-row delete passes one row; bulk passes many. */\n rows: TData[]\n /** \"single\" when triggered from the row actions menu; \"bulk\" from the toolbar. */\n source: \"single\" | \"bulk\"\n}\n\nexport type ConfirmDeleteConfig<TData> = {\n /** Modal title. Receives the same context the resolver receives. */\n title?: (ctx: ConfirmDeleteContext<TData>) => React.ReactNode\n /** Modal description / body. */\n description?: (ctx: ConfirmDeleteContext<TData>) => React.ReactNode\n /** Confirm button label. Defaults to \"Delete\". */\n confirmLabel?: string\n /** Cancel button label. Defaults to \"Cancel\". */\n cancelLabel?: string\n}\n\nexport function DataTableConfirmDelete<TData>({\n open,\n onOpenChange,\n context,\n onConfirm,\n config,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n context: ConfirmDeleteContext<TData> | null\n onConfirm: () => void\n config?: ConfirmDeleteConfig<TData>\n}) {\n if (!context) return null\n const title = config?.title\n ? config.title(context)\n : context.source === \"bulk\"\n ? `Delete ${context.rows.length} ${context.rows.length === 1 ? \"row\" : \"rows\"}?`\n : \"Delete this row?\"\n const description = config?.description\n ? config.description(context)\n : context.source === \"bulk\"\n ? `${context.rows.length} ${context.rows.length === 1 ? \"row\" : \"rows\"} will be permanently removed. This cannot be undone.`\n : \"This row will be permanently removed. This cannot be undone.\"\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{config?.cancelLabel ?? \"Cancel\"}</AlertDialogCancel>\n <AlertDialogAction\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={onConfirm}\n >\n {config?.confirmLabel ?? \"Delete\"}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport {\n type CellContext,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n type Table as TanstackTable,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n GripVerticalIcon,\n Loader2Icon,\n} from \"lucide-react\"\n\nimport { cn } from \"./lib/utils\"\nimport { Checkbox } from \"./ui/checkbox\"\nimport { Skeleton } from \"./ui/skeleton\"\n\nimport { DataTableToolbar } from \"./data-table-toolbar\"\nimport { DataTablePagination } from \"./data-table-pagination\"\nimport { DataTableColumnHeader } from \"./data-table-column-header\"\nimport {\n DataTableRowActions,\n type CustomRowAction,\n type RowActionId,\n} from \"./data-table-row-actions\"\nimport { EditableCell } from \"./editable-cell\"\nimport {\n booleanFilterFn,\n dateFilterFn,\n numberFilterFn,\n setFilterFn,\n textFilterFn,\n} from \"./filters\"\nimport {\n ISOLATE_DARK_TOKENS,\n ISOLATE_LIGHT_TOKENS,\n splitTheme,\n tokensToCssBlock,\n tokensToStyle,\n type DataTableTheme,\n type DataTableTokens,\n} from \"./theme\"\nimport { PortalContainerContext } from \"./portal-container\"\nimport {\n DataTableViewSheet,\n type ViewSheetConfig,\n} from \"./data-table-view-sheet\"\nimport {\n DataTableConfirmDelete,\n type ConfirmDeleteConfig,\n type ConfirmDeleteContext,\n} from \"./data-table-confirm-delete\"\nimport \"./types\"\n\n// ----- public configuration types --------------------------------------\n\nexport type DataTableFeatures = {\n /** Toolbar global search input (default: true). */\n search?: boolean\n /** Toolbar refresh button (default: true when onRefresh is provided). */\n refresh?: boolean\n /** Column visibility menu (default: true). */\n columnVisibility?: boolean\n /** CSV / Excel export menu (default: true). */\n export?: boolean\n /** \"Add row\" toolbar button (default: true when onAddRow is provided). */\n addRow?: boolean\n /** Bottom pagination controls (default: true). */\n pagination?: boolean\n /** Sort headers (default: true). */\n sorting?: boolean\n /** Per-column filtering (default: true). */\n filtering?: boolean\n /** Column resizing handles (default: true). */\n resizing?: boolean\n /** Drag-to-reorder columns (default: true). */\n reordering?: boolean\n /** Pin / unpin column controls (default: true). */\n pinning?: boolean\n}\n\nexport type DataTableLabels = {\n search?: string\n addRow?: string\n delete?: string\n clear?: string\n selected?: string\n refresh?: string\n columns?: string\n export?: string\n csv?: string\n excel?: string\n total?: string\n noData?: string\n noResults?: string\n loadError?: string\n retry?: string\n refreshing?: string\n rowsPerPage?: string\n page?: string\n of?: string\n}\n\nexport type DataTableDensity = \"compact\" | \"default\" | \"comfortable\"\n\nexport type DataTableFetchParams = {\n pageIndex: number\n pageSize: number\n sorting: SortingState\n columnFilters: ColumnFiltersState\n globalFilter: string\n}\n\nexport type DataTableDataSourceResult<TData> =\n | TData[]\n | {\n rows: TData[]\n totalRecords?: number\n }\n\nexport type DataTableErrorContext = {\n type: \"load\" | \"refresh\"\n message: string\n}\n\nexport type DataTableDataSource<TData> = {\n /**\n * Fetch rows internally. In \"client\" mode, return the full data set and the\n * table applies client-side sort/filter/pagination. In \"server\" mode, return\n * the current page and optionally `totalRecords`.\n */\n fetchRows: (\n params: DataTableFetchParams\n ) => Promise<DataTableDataSourceResult<TData>>\n /** \"client\" by default. Use \"server\" for API-side pagination/filter/sort. */\n mode?: \"client\" | \"server\"\n /** Set false to pause fetching. */\n enabled?: boolean\n /** Optional rows to show before the first fetch resolves. */\n initialData?: TData[]\n /** Refetch when these external values change. Memoize this array. */\n deps?: readonly unknown[]\n /** Called for load/refresh errors so apps can show a toast. */\n onError?: (error: unknown, context: DataTableErrorContext) => void\n}\n\n// ----- helpers ----------------------------------------------------------\n\nfunction getPinningStyles<TData>(\n column: ReturnType<TanstackTable<TData>[\"getAllLeafColumns\"]>[number]\n): React.CSSProperties {\n const isPinned = column.getIsPinned()\n if (!isPinned) return {}\n const isLast = isPinned === \"left\" && column.getIsLastColumn(\"left\")\n const isFirst = isPinned === \"right\" && column.getIsFirstColumn(\"right\")\n return {\n position: \"sticky\",\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n zIndex: 1,\n boxShadow: isLast\n ? \"1px 0 0 0 var(--border)\"\n : isFirst\n ? \"-1px 0 0 0 var(--border)\"\n : undefined,\n }\n}\n\n// ----- editing context --------------------------------------------------\n//\n// Cell renderers must be stable function references. tanstack-table's\n// `flexRender` does `React.createElement(Comp, props)`, so a fresh arrow\n// function per render makes React see a brand-new component type at the\n// same tree position and unmount/remount the cell. Remounting tears down\n// and re-attaches Radix's composed refs (e.g. inside Checkbox / Slot),\n// which can trigger an infinite \"Maximum update depth\" loop under React 19.\n//\n// To keep the cell renderers stable, we keep editing state and handlers in\n// a context and let the host components read from it.\n\ntype EditingContextValue<TData> = {\n editingCell: { rowId: string; colId: string } | null\n editingRowId: string | null\n rowDraft: Record<string, Partial<TData>>\n setEditingCell: (next: { rowId: string; colId: string } | null) => void\n setEditingRowId: (next: string | null) => void\n setRowDraft: React.Dispatch<\n React.SetStateAction<Record<string, Partial<TData>>>\n >\n rowActions: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customRowActions?: CustomRowAction<TData>[]\n onRowAction?: (action: RowActionId, row: TData) => void\n onCellEdit?: (row: TData, columnId: string, value: unknown) => void\n onRowSave?: (row: TData, draft: Partial<TData>) => void\n onView?: (row: TData) => void\n onRequestDelete?: (row: TData) => void\n}\n\nconst DataTableEditingContext =\n createContext<EditingContextValue<unknown> | null>(null)\n\nfunction useEditingContext<TData>(): EditingContextValue<TData> {\n const ctx = useContext(DataTableEditingContext)\n if (!ctx) throw new Error(\"DataTable editing context missing\")\n return ctx as unknown as EditingContextValue<TData>\n}\n\nfunction DefaultCellHost<TData, TValue>(ctx: CellContext<TData, TValue>) {\n const value = ctx.getValue()\n return value == null ? null : String(value)\n}\n\nfunction EditableCellHost<TData, TValue>(ctx: CellContext<TData, TValue>) {\n const { editingCell, editingRowId, setEditingCell, setRowDraft, onCellEdit } =\n useEditingContext<TData>()\n const colId = ctx.column.id\n const rowId = ctx.row.id\n const isCellEdit = editingCell?.rowId === rowId && editingCell.colId === colId\n const isRowEdit = editingRowId === rowId\n const isEditing = isCellEdit || isRowEdit\n\n return (\n <EditableCell\n {...ctx}\n isEditing={isEditing}\n autoOpen={isCellEdit}\n onStartEdit={() => setEditingCell({ rowId, colId })}\n onCancel={() => {\n if (isCellEdit) setEditingCell(null)\n }}\n onCommit={(value) => {\n if (isRowEdit) {\n setRowDraft((d) => ({\n ...d,\n [rowId]: {\n ...d[rowId],\n [colId]: value as TData[keyof TData],\n },\n }))\n return\n }\n setEditingCell(null)\n if (value !== ctx.getValue()) {\n onCellEdit?.(ctx.row.original, colId, value)\n }\n }}\n />\n )\n}\n\nfunction ActionsCellHost<TData>({ row }: CellContext<TData, unknown>) {\n const {\n editingRowId,\n setEditingRowId,\n rowDraft,\n setRowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onRowSave,\n onView,\n onRequestDelete,\n } = useEditingContext<TData>()\n const rowId = row.id\n const isRowEdit = editingRowId === rowId\n return (\n <DataTableRowActions\n row={row.original}\n actions={rowActions}\n customActions={customRowActions}\n isEditing={isRowEdit}\n onSaveEdit={() => {\n onRowSave?.(row.original, rowDraft[rowId] ?? {})\n setRowDraft((d) => {\n const { [rowId]: _, ...rest } = d\n return rest\n })\n setEditingRowId(null)\n }}\n onCancelEdit={() => {\n setRowDraft((d) => {\n const { [rowId]: _, ...rest } = d\n return rest\n })\n setEditingRowId(null)\n }}\n onAction={(a) => {\n if (a === \"edit\") {\n setEditingRowId(rowId)\n return\n }\n if (a === \"view\") {\n onView?.(row.original)\n } else if (a === \"delete\") {\n onRequestDelete?.(row.original)\n return\n }\n onRowAction?.(a, row.original)\n }}\n />\n )\n}\n\n// ----- types ------------------------------------------------------------\n\nexport type DataTableProps<TData extends { id: string | number }> = {\n data?: TData[]\n columns: ColumnDef<TData>[]\n\n /** Optional internal fetcher. Omit this when using controlled `data`. */\n dataSource?: DataTableDataSource<TData>\n\n isLoading?: boolean\n isFetching?: boolean\n onRefresh?: () => void\n\n totalRecords?: number\n exportFileName?: string\n\n /** Hide the row-selection checkbox column. */\n enableSelection?: boolean\n /** Render an expandable detail panel under the row. */\n renderSubRow?: (row: TData) => React.ReactNode\n /** Use TanStack's built-in nested rows via this accessor. */\n getSubRows?: (row: TData) => TData[] | undefined\n\n rowActions?: (\"view\" | \"edit\" | \"duplicate\" | \"delete\")[]\n customRowActions?: CustomRowAction<TData>[]\n onRowAction?: (action: RowActionId, row: TData) => void\n /**\n * Handler for the built-in \"View\" action. If omitted, the grid still opens\n * the View sheet (unless `viewSheet={false}`). Use this to also log,\n * navigate, or fetch detail data when a user opens View.\n */\n onView?: (row: TData) => void\n /**\n * Handler for the built-in \"Delete\" action. Fires *after* the user confirms\n * in the delete modal (or immediately if `confirmDelete={false}`).\n * If omitted, the grid only emits via `onRowAction(\"delete\", row)`.\n */\n onDelete?: (row: TData) => void\n /**\n * Configure the built-in View sheet — side, density, custom renderers.\n * Pass `false` to disable; clicking \"View\" will then only fire\n * `onView` / `onRowAction` without opening a sheet.\n */\n viewSheet?: ViewSheetConfig<TData> | false\n /**\n * Configure the delete confirmation modal. Pass `false` to disable it and\n * fire delete handlers immediately. Pass an object to customize title,\n * description, and button labels. Defaults to enabled with built-in copy.\n */\n confirmDelete?: ConfirmDeleteConfig<TData> | boolean\n\n /** Commit a single edited cell. Receives the row, column id and new value. */\n onCellEdit?: (row: TData, columnId: string, value: unknown) => void\n /** Commit an entire row in row-edit mode. */\n onRowSave?: (row: TData, draft: Partial<TData>) => void\n /** Build a fresh empty row when \"Add row\" is clicked. */\n onAddRow?: () => Partial<TData>\n /** Bulk delete selected rows. */\n onBulkDelete?: (rows: TData[]) => void\n\n initialPageSize?: number\n pageSizeOptions?: number[]\n\n initialColumnPinning?: ColumnPinningState\n initialColumnVisibility?: VisibilityState\n /** Initial sort order. */\n initialSorting?: SortingState\n /** Observe selected row objects (loaded rows only in server mode). */\n onSelectionChange?: (rows: TData[]) => void\n /** Accessible table name. */\n ariaLabel?: string\n /** Alternating row backgrounds. */\n striped?: boolean\n /** Keep headers visible inside a vertically constrained table. */\n stickyHeader?: boolean\n /** Scroll viewport height, e.g. \"480px\". */\n maxHeight?: React.CSSProperties[\"maxHeight\"]\n\n /** Optional controlled global filter (for cross-tab persistence). */\n globalFilter?: string\n onGlobalFilterChange?: (value: string) => void\n\n className?: string\n toolbarSlot?: React.ReactNode\n\n /** Toggle individual table features. */\n features?: DataTableFeatures\n /** Override every user-facing string. */\n labels?: DataTableLabels\n /** Row + cell padding density. Defaults to \"default\". */\n density?: DataTableDensity\n /**\n * CSS-variable overrides (shadcn-compatible) scoped to this instance.\n *\n * Two accepted shapes:\n *\n * theme={{ primary: \"...\", accent: \"...\" }} // flat tokens\n * theme={{ light: { ... }, dark: { ... } }} // moded — auto-flips\n *\n * Moded themes apply `light` always and swap to `dark` inside\n * `@media (prefers-color-scheme: dark)` *and* inside any `.dark` ancestor.\n *\n * Use `themePresets.violet` (or any preset) for a ready-made moded theme.\n */\n theme?: DataTableTheme\n /**\n * When `true`, the grid does NOT inherit CSS variables from the app's\n * `:root` (shadcn, custom theme, etc.). Instead it renders with the\n * package's bundled defaults (or whatever you pass via `theme`).\n *\n * Useful when embedding the grid inside a heavily-themed shell where you\n * want the table to keep its own look regardless of surrounding context.\n *\n * Defaults to `false` (inherit app theme).\n */\n isolate?: boolean\n}\n\nconst DEFAULT_LABELS: Required<DataTableLabels> = {\n search: \"Search...\",\n addRow: \"Add row\",\n delete: \"Delete\",\n clear: \"Clear\",\n selected: \"selected\",\n refresh: \"Refresh\",\n columns: \"Columns\",\n export: \"Export\",\n csv: \"CSV\",\n excel: \"Excel\",\n total: \"Total\",\n noData: \"No data.\",\n noResults: \"No rows match the current filters.\",\n loadError: \"Could not load rows.\",\n retry: \"Retry\",\n refreshing: \"Refreshing\",\n rowsPerPage: \"Rows per page\",\n page: \"Page\",\n of: \"of\",\n}\n\nconst DENSITY_CLASS: Record<DataTableDensity, string> = {\n compact: \"[&_tbody_td]:py-0.5 [&_tbody_td]:text-xs\",\n default: \"\",\n comfortable: \"[&_tbody_td]:py-2\",\n}\n\nconst EMPTY_DATA: never[] = []\n\n// ----- component --------------------------------------------------------\n\nexport function DataTable<TData extends { id: string | number }>({\n data,\n columns,\n dataSource,\n isLoading,\n isFetching,\n onRefresh,\n totalRecords,\n exportFileName,\n enableSelection = true,\n renderSubRow,\n getSubRows,\n rowActions = [\"view\", \"edit\", \"duplicate\", \"delete\"],\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n onAddRow,\n onBulkDelete,\n initialPageSize = 10,\n pageSizeOptions,\n initialColumnPinning,\n initialColumnVisibility,\n initialSorting,\n onSelectionChange,\n ariaLabel = \"Data table\",\n striped = false,\n stickyHeader = false,\n maxHeight,\n globalFilter: globalFilterProp,\n onGlobalFilterChange,\n className,\n toolbarSlot,\n features,\n labels: labelsProp,\n density = \"default\",\n theme,\n isolate = false,\n onView,\n onDelete,\n viewSheet,\n confirmDelete = true,\n}: DataTableProps<TData>) {\n const labels: Required<DataTableLabels> = { ...DEFAULT_LABELS, ...labelsProp }\n const f: Required<DataTableFeatures> = {\n search: features?.search ?? true,\n refresh: features?.refresh ?? !!(onRefresh || dataSource),\n columnVisibility: features?.columnVisibility ?? true,\n export: features?.export ?? true,\n addRow: features?.addRow ?? !!onAddRow,\n pagination: features?.pagination ?? true,\n sorting: features?.sorting ?? true,\n filtering: features?.filtering ?? true,\n resizing: features?.resizing ?? true,\n reordering: features?.reordering ?? true,\n pinning: features?.pinning ?? true,\n }\n // ----- theme resolution ----------------------------------------------\n // `theme` can be a flat token map OR a `{ light, dark }` moded shape.\n // When `isolate` is true, fall back to bundled neutral defaults instead\n // of inheriting from the app's :root.\n const rawInstanceId = useId()\n const instanceId = useMemo(\n () => `dyno-grid-${rawInstanceId.replace(/[^a-zA-Z0-9]/g, \"\")}`,\n [rawInstanceId]\n )\n const { lightStyle, lightCss, darkCss } = useMemo(() => {\n const { light, dark } = splitTheme(theme)\n const lightTokens: DataTableTokens | undefined = isolate\n ? { ...ISOLATE_LIGHT_TOKENS, ...(light ?? {}) }\n : light\n const darkTokens: DataTableTokens | undefined = isolate\n ? { ...ISOLATE_DARK_TOKENS, ...(dark ?? light ?? {}) }\n : dark\n return {\n lightStyle: tokensToStyle(lightTokens),\n lightCss: tokensToCssBlock(lightTokens),\n darkCss: darkTokens ? tokensToCssBlock(darkTokens) : null,\n }\n }, [theme, isolate])\n\n // ----- portal container -----------------------------------------------\n // Mount popovers / dropdowns / sheets inside the themed grid root so they\n // inherit CSS variables. Using a callback ref ensures the context value\n // flips from null → element on mount and triggers consumers to re-render.\n const [gridRoot, setGridRoot] = useState<HTMLDivElement | null>(null)\n\n // ----- view sheet + delete confirm state ------------------------------\n const [viewRow, setViewRow] = useState<TData | null>(null)\n const [confirmCtx, setConfirmCtx] =\n useState<ConfirmDeleteContext<TData> | null>(null)\n\n const confirmEnabled = confirmDelete !== false\n const confirmConfig: ConfirmDeleteConfig<TData> | undefined =\n typeof confirmDelete === \"object\" ? confirmDelete : undefined\n const viewSheetEnabled = viewSheet !== false\n const viewSheetConfig: ViewSheetConfig<TData> | undefined =\n viewSheet && typeof viewSheet === \"object\" ? viewSheet : undefined\n\n const handleViewRequest = (row: TData) => {\n onView?.(row)\n if (viewSheetEnabled) setViewRow(row)\n }\n const handleDeleteRequest = (row: TData) => {\n if (confirmEnabled) {\n setConfirmCtx({ rows: [row], source: \"single\" })\n } else {\n onDelete?.(row)\n }\n }\n const handleBulkDeleteRequest = (rows: TData[]) => {\n if (confirmEnabled) {\n setConfirmCtx({ rows, source: \"bulk\" })\n } else {\n onBulkDelete?.(rows)\n }\n }\n const handleConfirmDelete = () => {\n if (!confirmCtx) return\n if (confirmCtx.source === \"single\") {\n onDelete?.(confirmCtx.rows[0])\n } else {\n onBulkDelete?.(confirmCtx.rows)\n }\n setConfirmCtx(null)\n }\n\n // ----- state ----------------------------------------------------------\n const [sorting, setSorting] = useState<SortingState>(initialSorting ?? [])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [internalGlobalFilter, setInternalGlobalFilter] = useState(\"\")\n const isControlledFilter = globalFilterProp !== undefined\n const globalFilter = isControlledFilter\n ? globalFilterProp\n : internalGlobalFilter\n const setGlobalFilter = (v: string) => {\n if (isControlledFilter) onGlobalFilterChange?.(v)\n else setInternalGlobalFilter(v)\n }\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility ?? {}\n )\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>(() => {\n const base = initialColumnPinning ?? { left: [], right: [] }\n const left = [...(base.left ?? [])]\n const right = [...(base.right ?? [])]\n const hasExpandColumn = !!(renderSubRow || getSubRows)\n // Keep __expand glued to __select: if __select is pinned left and the\n // table has an expand column, ensure __expand sits right after it on\n // the left side regardless of user-supplied pin config.\n if (\n hasExpandColumn &&\n left.includes(\"__select\") &&\n !left.includes(\"__expand\")\n ) {\n const idx = left.indexOf(\"__select\")\n left.splice(idx + 1, 0, \"__expand\")\n }\n return { left, right }\n })\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({})\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n const [expanded, setExpanded] = useState<ExpandedState>({})\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: 0,\n pageSize: initialPageSize,\n })\n const [sourceRows, setSourceRows] = useState<TData[]>(\n () => dataSource?.initialData ?? []\n )\n const [sourceTotalRecords, setSourceTotalRecords] = useState<\n number | undefined\n >(undefined)\n const [sourceError, setSourceError] = useState<unknown>(null)\n const [sourceLoading, setSourceLoading] = useState(false)\n const [sourceFetching, setSourceFetching] = useState(false)\n const [sourceRefreshKey, setSourceRefreshKey] = useState(0)\n\n // editing state — single cell or whole row\n const [editingCell, setEditingCell] = useState<{\n rowId: string\n colId: string\n } | null>(null)\n const [editingRowId, setEditingRowId] = useState<string | null>(null)\n const [rowDraft, setRowDraft] = useState<Record<string, Partial<TData>>>({})\n\n const dataSourceEnabled = !!dataSource && dataSource.enabled !== false\n const dataSourceMode = dataSource?.mode ?? \"client\"\n const isServerSideDataSource =\n dataSourceEnabled && dataSourceMode === \"server\"\n const dataSourceDeps = dataSource?.deps ?? []\n\n useEffect(() => {\n if (!dataSourceEnabled || !dataSource) return\n\n let cancelled = false\n const isInitialLoad = sourceRows.length === 0\n\n setSourceError(null)\n setSourceLoading(isInitialLoad)\n setSourceFetching(!isInitialLoad)\n\n dataSource\n .fetchRows({\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n sorting,\n columnFilters,\n globalFilter,\n })\n .then((result) => {\n if (cancelled) return\n const rows = Array.isArray(result) ? result : result.rows\n setSourceRows(rows)\n setSourceTotalRecords(\n Array.isArray(result)\n ? rows.length\n : (result.totalRecords ?? rows.length)\n )\n })\n .catch((error) => {\n if (cancelled) return\n setSourceError(error)\n dataSource.onError?.(error, {\n type: isInitialLoad ? \"load\" : \"refresh\",\n message: isInitialLoad ? labels.loadError : labels.refreshing,\n })\n })\n .finally(() => {\n if (cancelled) return\n setSourceLoading(false)\n setSourceFetching(false)\n })\n\n return () => {\n cancelled = true\n }\n }, [\n dataSourceEnabled,\n dataSource,\n sourceRefreshKey,\n pagination.pageIndex,\n pagination.pageSize,\n sorting,\n columnFilters,\n globalFilter,\n labels.loadError,\n labels.refreshing,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ...dataSourceDeps,\n ])\n\n const baseData = dataSourceEnabled ? sourceRows : (data ?? EMPTY_DATA)\n const effectiveIsLoading = dataSourceEnabled ? sourceLoading : isLoading\n const effectiveIsFetching = dataSourceEnabled ? sourceFetching : isFetching\n const effectiveOnRefresh = dataSourceEnabled\n ? () => setSourceRefreshKey((key) => key + 1)\n : onRefresh\n\n // newly added rows kept in local state until persisted\n const [extraRows, setExtraRows] = useState<TData[]>([])\n const mergedData = useMemo(\n () => (extraRows.length ? [...extraRows, ...baseData] : baseData),\n [extraRows, baseData]\n )\n const effectiveTotalRecords =\n totalRecords ??\n (dataSourceEnabled\n ? (sourceTotalRecords ?? mergedData.length)\n : mergedData.length)\n\n // ----- column augmentation -------------------------------------------\n const augmentedColumns = useMemo<ColumnDef<TData>[]>(() => {\n const wrap = (col: ColumnDef<TData>): ColumnDef<TData> => {\n const meta = col.meta\n const hasEditor = !!meta?.editor\n const id = col.id ?? (col as { accessorKey?: string }).accessorKey\n\n const original = col.cell\n const headerLabel =\n meta?.label ??\n (typeof col.header === \"string\" ? col.header : (id ?? \"\"))\n\n // Pick a default filterFn based on declared filterType. The user can\n // still override it by setting `filterFn` directly on the column.\n const defaultFilterFn = (() => {\n switch (meta?.filterType) {\n case \"text\":\n return textFilterFn\n case \"number\":\n return numberFilterFn\n case \"date\":\n return dateFilterFn\n case \"select\":\n case \"multi-select\":\n return setFilterFn\n case \"boolean\":\n return booleanFilterFn\n default:\n return undefined\n }\n })()\n\n return {\n ...col,\n filterFn: col.filterFn ?? defaultFilterFn,\n header:\n typeof col.header === \"function\"\n ? col.header\n : (ctx) => (\n <DataTableColumnHeader\n column={ctx.column}\n title={headerLabel}\n />\n ),\n cell: hasEditor\n ? (EditableCellHost as ColumnDef<TData>[\"cell\"])\n : (original ?? DefaultCellHost),\n } as ColumnDef<TData>\n }\n\n const built: ColumnDef<TData>[] = columns.map(wrap)\n\n // Order matters: unshift expand first, then select, so the final order is\n // [__select, __expand, ...userColumns]. The expand toggle should always\n // sit right next to the selection checkbox.\n if (renderSubRow || getSubRows) {\n built.unshift({\n id: \"__expand\",\n size: 32,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: () => null,\n cell: ({ row }) =>\n row.getCanExpand() ? (\n <button\n type=\"button\"\n onClick={row.getToggleExpandedHandler()}\n className=\"flex size-6 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={row.getIsExpanded() ? \"Collapse row\" : \"Expand row\"}\n >\n {row.getIsExpanded() ? (\n <ChevronDownIcon className=\"size-3.5\" />\n ) : (\n <ChevronRightIcon className=\"size-3.5\" />\n )}\n </button>\n ) : null,\n })\n }\n\n if (enableSelection) {\n built.unshift({\n id: \"__select\",\n size: 36,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: ({ table }) => (\n <div className=\"flex items-center justify-center px-1\">\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={(c) => table.toggleAllPageRowsSelected(!!c)}\n aria-label=\"Select all rows on this page\"\n />\n </div>\n ),\n cell: ({ row }) => (\n <div className=\"flex items-center justify-center px-1\">\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(c) => row.toggleSelected(!!c)}\n aria-label=\"Select row\"\n />\n </div>\n ),\n })\n }\n\n if (rowActions.length || customRowActions?.length) {\n built.push({\n id: \"__actions\",\n size: 56,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: () => <div className=\"text-right text-xs\">Actions</div>,\n cell: ActionsCellHost as ColumnDef<TData>[\"cell\"],\n })\n }\n\n return built\n }, [\n columns,\n enableSelection,\n renderSubRow,\n getSubRows,\n rowActions.length,\n customRowActions?.length,\n ])\n\n // initial column order\n const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(() =>\n augmentedColumns.map(\n (c) => c.id ?? (c as { accessorKey?: string }).accessorKey ?? \"\"\n )\n )\n useEffect(() => {\n const next = augmentedColumns.map(\n (c) => c.id ?? (c as { accessorKey?: string }).accessorKey ?? \"\"\n )\n setColumnOrder((prev) => {\n // preserve user-reordered positions; append new columns at the end\n const existing = prev.filter((id) => next.includes(id))\n const added = next.filter((id) => !prev.includes(id))\n const final = [...existing, ...added]\n return final.length === prev.length &&\n final.every((v, i) => prev[i] === v)\n ? prev\n : final\n })\n }, [augmentedColumns])\n\n // ----- table ----------------------------------------------------------\n const table = useReactTable({\n data: mergedData,\n columns: augmentedColumns,\n state: {\n sorting,\n columnFilters,\n globalFilter,\n columnVisibility,\n columnPinning,\n columnSizing,\n columnOrder,\n rowSelection,\n expanded,\n pagination,\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onGlobalFilterChange: setGlobalFilter,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnSizingChange: setColumnSizing,\n onColumnOrderChange: setColumnOrder,\n onRowSelectionChange: setRowSelection,\n onExpandedChange: setExpanded,\n onPaginationChange: setPagination,\n\n enableSorting: f.sorting,\n enableColumnFilters: f.filtering,\n enableColumnResizing: f.resizing,\n columnResizeMode: \"onChange\",\n enableRowSelection: enableSelection,\n enableExpanding: !!(renderSubRow || getSubRows),\n enablePinning: f.pinning,\n manualPagination: isServerSideDataSource || !f.pagination,\n manualSorting: isServerSideDataSource,\n manualFiltering: isServerSideDataSource,\n pageCount: isServerSideDataSource\n ? Math.max(1, Math.ceil(effectiveTotalRecords / pagination.pageSize))\n : undefined,\n getRowId: (row) => String(row.id),\n getSubRows,\n getRowCanExpand: (row) => {\n if (renderSubRow) return true\n const subs = getSubRows?.(row.original)\n return !!subs && subs.length > 0\n },\n globalFilterFn: (row, _columnId, value) => {\n const q = String(value ?? \"\")\n .toLowerCase()\n .trim()\n if (!q) return true\n return row.getAllCells().some((cell) => {\n const v = cell.getValue()\n return v != null && String(v).toLowerCase().includes(q)\n })\n },\n filterFns: {\n // attached via columnDef.filterFn below where needed\n },\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n })\n\n // Pointer-event-based column reorder. HTML5 drag-and-drop refused to\n // initiate when the user mousedown'd on an interactive child (sort\n // dropdown button, filter trigger), which is most of the visible header\n // area. Pointer events sidestep that.\n const reorderState = useRef<{ x: number; y: number; id: string } | null>(null)\n const [activeReorderId, setActiveReorderId] = useState<string | null>(null)\n const [dragOverColId, setDragOverColId] = useState<string | null>(null)\n\n const isInteractiveTarget = (target: EventTarget | null) => {\n const el = target as HTMLElement | null\n if (!el || !el.closest) return false\n return !!el.closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [data-no-drag]'\n )\n }\n\n const onHeaderPointerDown =\n (id: string) => (e: React.PointerEvent<HTMLTableCellElement>) => {\n if (e.button !== 0) return\n if (isInteractiveTarget(e.target)) return\n reorderState.current = { x: e.clientX, y: e.clientY, id }\n }\n\n const onHeaderPointerMove = (e: React.PointerEvent<HTMLTableCellElement>) => {\n const start = reorderState.current\n if (!start) return\n if (!activeReorderId) {\n const dx = e.clientX - start.x\n const dy = e.clientY - start.y\n if (Math.hypot(dx, dy) < 6) return\n setActiveReorderId(start.id)\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n const el = document.elementFromPoint(e.clientX, e.clientY)\n const th = el ? (el.closest(\"th[data-col-id]\") as HTMLElement | null) : null\n const overId = th?.dataset.colId ?? null\n const next = overId && overId !== start.id ? overId : null\n if (next !== dragOverColId) setDragOverColId(next)\n }\n\n const onHeaderPointerUp = (e: React.PointerEvent<HTMLTableCellElement>) => {\n const start = reorderState.current\n reorderState.current = null\n if (!activeReorderId) return\n try {\n e.currentTarget.releasePointerCapture(e.pointerId)\n } catch {\n // pointer may already be released\n }\n const target = dragOverColId\n setActiveReorderId(null)\n setDragOverColId(null)\n if (!start || !target || target === start.id) return\n setColumnOrder((order) => {\n const next = [...order]\n const from = next.indexOf(start.id)\n const to = next.indexOf(target)\n if (from === -1 || to === -1) return order\n next.splice(from, 1)\n next.splice(to, 0, start.id)\n return next\n })\n }\n\n // ----- \"add row\" handling --------------------------------------------\n const handleAddRow = onAddRow\n ? () => {\n const draft = onAddRow()\n const tempId = `__new_${Date.now()}`\n const newRow = { id: tempId, ...draft } as unknown as TData\n setExtraRows((r) => [newRow, ...r])\n setPagination((p) => ({ ...p, pageIndex: 0 }))\n setEditingRowId(tempId)\n }\n : undefined\n\n // ----- render ---------------------------------------------------------\n const rows = table.getRowModel().rows\n const selectionCallback = useRef(onSelectionChange)\n selectionCallback.current = onSelectionChange\n useEffect(() => {\n selectionCallback.current?.(\n table.getSelectedRowModel().flatRows.map((row) => row.original)\n )\n }, [rowSelection, mergedData, table])\n const visibleLeafCount = table.getVisibleLeafColumns().length\n\n const editingContextValue = useMemo<EditingContextValue<TData>>(\n () => ({\n editingCell,\n editingRowId,\n rowDraft,\n setEditingCell,\n setEditingRowId,\n setRowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n onView: handleViewRequest,\n onRequestDelete: handleDeleteRequest,\n }),\n [\n editingCell,\n editingRowId,\n rowDraft,\n rowActions,\n customRowActions,\n onRowAction,\n onCellEdit,\n onRowSave,\n // intentional: handleViewRequest / handleDeleteRequest close over\n // viewSheetEnabled / confirmEnabled which are derived from props above.\n // They're recreated each render; the inputs here capture the prop deps.\n onView,\n onDelete,\n onBulkDelete,\n viewSheetEnabled,\n confirmEnabled,\n ]\n )\n\n return (\n <PortalContainerContext.Provider value={gridRoot}>\n <DataTableEditingContext.Provider\n value={editingContextValue as unknown as EditingContextValue<unknown>}\n >\n <div\n ref={setGridRoot}\n data-dyno-grid={instanceId}\n className={cn(\n \"relative flex flex-col rounded-lg border bg-card text-card-foreground shadow-sm\",\n DENSITY_CLASS[density],\n className\n )}\n style={darkCss ? undefined : lightStyle}\n >\n {darkCss && (\n <style>\n {`[data-dyno-grid=\"${instanceId}\"]{${lightCss}}`}\n {`@media (prefers-color-scheme: dark){[data-dyno-grid=\"${instanceId}\"]{${darkCss}}}`}\n {`.dark [data-dyno-grid=\"${instanceId}\"]{${darkCss}}`}\n {`.light [data-dyno-grid=\"${instanceId}\"]{${lightCss}}`}\n {`[data-dyno-grid=\"${instanceId}\"].dark{${darkCss}}`}\n {`[data-dyno-grid=\"${instanceId}\"].light{${lightCss}}`}\n </style>\n )}\n <DataTableToolbar\n table={table}\n totalRecords={effectiveTotalRecords}\n isFetching={effectiveIsFetching}\n onRefresh={f.refresh ? effectiveOnRefresh : undefined}\n onAddRow={f.addRow ? handleAddRow : undefined}\n onBulkDelete={onBulkDelete ? handleBulkDeleteRequest : undefined}\n exportFileName={exportFileName}\n globalFilter={globalFilter}\n onGlobalFilterChange={(v) => {\n setGlobalFilter(v)\n table.setPageIndex(0)\n }}\n toolbarSlot={toolbarSlot}\n features={f}\n labels={labels}\n />\n\n <div className=\"relative w-full overflow-auto\" style={{ maxHeight }}>\n <table\n aria-label={ariaLabel}\n className={cn(\n \"w-full caption-bottom text-sm\",\n striped && \"[&_tbody>tr:nth-child(even)]:bg-muted/25\"\n )}\n style={{\n width: table.getCenterTotalSize() ? undefined : \"100%\",\n minWidth: \"100%\",\n }}\n >\n <thead\n className={cn(\"bg-card\", stickyHeader && \"sticky top-0 z-10\")}\n >\n {table.getHeaderGroups().map((hg) => (\n <tr key={hg.id} className=\"border-b\">\n {hg.headers.map((header) => {\n const meta = header.column.columnDef.meta\n const isUtility =\n header.column.id === \"__select\" ||\n header.column.id === \"__expand\" ||\n header.column.id === \"__actions\"\n const isPinned = !!header.column.getIsPinned()\n const canReorder = !isUtility && f.reordering\n const isDropTarget =\n canReorder && dragOverColId === header.column.id\n const isBeingDragged =\n canReorder && activeReorderId === header.column.id\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n data-col-id={header.column.id}\n onPointerDown={\n canReorder\n ? onHeaderPointerDown(header.column.id)\n : undefined\n }\n onPointerMove={\n canReorder ? onHeaderPointerMove : undefined\n }\n onPointerUp={\n canReorder ? onHeaderPointerUp : undefined\n }\n onPointerCancel={\n canReorder ? onHeaderPointerUp : undefined\n }\n style={{\n width: header.getSize(),\n ...getPinningStyles(header.column),\n ...(isPinned ? { zIndex: 2 } : {}),\n }}\n className={cn(\n \"group/th relative h-9 px-2 text-left align-middle text-xs font-medium text-muted-foreground select-none\",\n canReorder && \"cursor-grab active:cursor-grabbing\",\n isPinned && \"bg-card\",\n isBeingDragged && \"opacity-50\",\n isDropTarget &&\n \"bg-primary/10 ring-2 ring-primary/40 ring-inset\",\n meta?.headerClassName\n )}\n >\n <div className=\"flex items-center gap-1\">\n {canReorder && (\n <GripVerticalIcon\n className=\"-ml-1 size-3 shrink-0 text-muted-foreground/40 opacity-0 transition group-hover/th:opacity-100\"\n aria-hidden=\"true\"\n />\n )}\n <div className=\"min-w-0 flex-1\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </div>\n </div>\n\n {header.column.getCanResize() && (\n <span\n data-no-drag\n onPointerDown={(e) => e.stopPropagation()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n className={cn(\n \"absolute top-0 right-0 h-full w-1 cursor-col-resize touch-none bg-transparent transition-colors select-none hover:bg-primary/40\",\n header.column.getIsResizing() && \"bg-primary\"\n )}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n\n <tbody>\n {effectiveIsLoading ? (\n renderSkeleton(visibleLeafCount, pagination.pageSize)\n ) : sourceError && rows.length === 0 ? (\n <tr>\n <td\n colSpan={visibleLeafCount}\n className=\"h-32 text-center text-sm text-muted-foreground\"\n >\n <div className=\"flex flex-col items-center gap-2\">\n <span>{labels.loadError}</span>\n {effectiveOnRefresh && (\n <button\n type=\"button\"\n onClick={effectiveOnRefresh}\n className=\"rounded-md border px-2 py-1 text-xs text-foreground hover:bg-muted\"\n >\n {labels.retry}\n </button>\n )}\n </div>\n </td>\n </tr>\n ) : rows.length === 0 ? (\n <tr>\n <td\n colSpan={visibleLeafCount}\n className=\"h-32 text-center text-sm text-muted-foreground\"\n >\n {globalFilter || columnFilters.length\n ? labels.noResults\n : labels.noData}\n </td>\n </tr>\n ) : (\n rows.map((row) => (\n <DataTableRow\n key={row.id}\n row={row}\n renderSubRow={renderSubRow}\n isRowEditing={editingRowId === row.id}\n />\n ))\n )}\n </tbody>\n </table>\n\n {effectiveIsFetching && !effectiveIsLoading && (\n <div className=\"pointer-events-none absolute top-1.5 right-2 flex items-center gap-1.5 rounded-md bg-background/80 px-2 py-1 text-xs text-muted-foreground shadow-sm backdrop-blur\">\n <Loader2Icon className=\"size-3 animate-spin\" />{\" \"}\n {labels.refreshing}\n </div>\n )}\n </div>\n\n {f.pagination && (\n <DataTablePagination\n table={table}\n pageSizeOptions={pageSizeOptions}\n />\n )}\n\n <DataTableViewSheet\n table={table}\n row={viewRow}\n open={viewRow != null}\n onOpenChange={(o) => !o && setViewRow(null)}\n config={viewSheetConfig}\n />\n <DataTableConfirmDelete\n open={confirmCtx != null}\n onOpenChange={(o) => !o && setConfirmCtx(null)}\n context={confirmCtx}\n onConfirm={handleConfirmDelete}\n config={confirmConfig}\n />\n </div>\n </DataTableEditingContext.Provider>\n </PortalContainerContext.Provider>\n )\n}\n\nfunction DataTableRow<TData>({\n row,\n renderSubRow,\n isRowEditing,\n}: {\n row: Row<TData>\n renderSubRow?: (row: TData) => React.ReactNode\n isRowEditing?: boolean\n}) {\n const expanded = row.getIsExpanded()\n const isSelected = row.getIsSelected()\n return (\n <>\n <tr\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n \"group/row border-b transition-colors hover:bg-muted/40 data-[state=selected]:bg-primary/5\",\n isRowEditing && \"bg-amber-500/5\",\n row.depth > 0 && \"bg-muted/20\"\n )}\n >\n {row.getVisibleCells().map((cell) => {\n const meta = cell.column.columnDef.meta\n const isPinned = !!cell.column.getIsPinned()\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...getPinningStyles(cell.column),\n }}\n className={cn(\n \"px-2 py-1 align-middle text-sm\",\n isPinned &&\n \"bg-card group-hover/row:bg-[color-mix(in_oklab,var(--card),var(--muted)_40%)] group-data-[state=selected]/row:bg-[color-mix(in_oklab,var(--card),var(--primary)_5%)]\",\n isPinned &&\n isRowEditing &&\n \"bg-[color-mix(in_oklab,var(--card),#f59e0b_5%)]\",\n meta?.cellClassName\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n )\n })}\n </tr>\n {expanded && renderSubRow && (\n <tr className=\"border-b bg-muted/30\">\n <td colSpan={row.getVisibleCells().length} className=\"p-3\">\n <div className=\"rounded-md border bg-background p-3 shadow-inner\">\n {renderSubRow(row.original)}\n </div>\n </td>\n </tr>\n )}\n </>\n )\n}\n\nfunction renderSkeleton(cols: number, rows: number) {\n return Array.from({ length: rows }).map((_, r) => (\n <tr key={r} className=\"border-b\">\n {Array.from({ length: cols }).map((__, c) => (\n <td key={c} className=\"px-2 py-2\">\n <Skeleton className=\"h-4 w-full\" />\n </td>\n ))}\n </tr>\n ))\n}\n"]}