@startsimpli/ui 0.1.3 → 0.1.4

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/utils/cn.ts","../../src/components/ui/accordion.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/button.tsx","../../src/components/ui/calendar.tsx","../../src/components/ui/card.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/collapsible.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/input.tsx","../../src/components/ui/label.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/scroll-area.tsx","../../src/components/ui/select.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/table.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/tooltip.tsx","../../src/components/ui/feature-gate.tsx","../../src/components/states/ErrorState.tsx","../../src/components/ui/api-error-boundary.tsx","../../src/components/ui/page-loader.tsx","../../src/components/ui/query-provider.tsx","../../src/components/unified-table/hooks/useTableState.ts","../../src/components/unified-table/hooks/useSelection.ts","../../src/components/unified-table/hooks/usePagination.ts","../../src/components/unified-table/hooks/useFilters.ts","../../src/components/unified-table/hooks/useResponsive.ts","../../src/components/unified-table/hooks/useColumnVisibility.ts","../../src/components/unified-table/hooks/useTablePreferences.ts","../../src/components/unified-table/hooks/useTableKeyboard.ts","../../src/components/unified-table/hooks/useTableURL.ts","../../src/components/unified-table/hooks/useColumnReorder.ts","../../src/components/unified-table/hooks/useColumnResize.ts","../../src/components/unified-table/components/TableFilters/index.tsx","../../src/components/unified-table/components/BulkActionBar/index.tsx","../../src/components/unified-table/components/InlineEditCell/index.tsx","../../src/components/unified-table/components/DataTableCore/index.tsx","../../src/components/unified-table/components/TablePagination/index.tsx","../../src/components/unified-table/utils/export.ts","../../src/components/unified-table/components/Toolbar/ExportButton.tsx","../../src/components/unified-table/components/Toolbar/SavedViewsDropdown.tsx","../../src/components/unified-table/components/Toolbar/StandardTableToolbar.tsx","../../src/components/unified-table/UnifiedTable.tsx","../../src/components/unified-table/components/MobileView/CardActions.tsx","../../src/components/unified-table/components/MobileView/Card.tsx","../../src/components/unified-table/components/MobileView/types.ts","../../src/components/unified-table/components/MobileView/index.tsx","../../src/components/unified-table/utils/renderers.ts","../../src/components/unified-table/utils/themes.ts","../../src/components/unified-table/utils/validation.ts","../../src/components/navigation/sidebar.tsx","../../src/components/safe-html.tsx","../../src/components/toast/use-toast.ts","../../src/components/toast/Toaster.tsx","../../src/components/toast/use-notify.ts","../../src/components/states/EmptyState.tsx","../../src/components/dialog/BaseDialog.tsx","../../src/components/badge/StatusBadge.tsx","../../src/components/loading/TableSkeleton.tsx","../../src/components/loading/DashboardSkeleton.tsx","../../src/components/wizard/StepIndicator.tsx"],"names":["twMerge","clsx","AccordionPrimitive","React","jsx","jsxs","ChevronDown","cva","React2","React3","Slot","DayPicker","ChevronLeft","ChevronRight","React4","React5","CheckboxPrimitive","Check","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","DialogPrimitive","React6","X","DropdownMenuPrimitive","React7","Circle","React8","Label","React9","LabelPrimitive","PopoverPrimitive","React10","React11","ProgressPrimitive","React12","ScrollAreaPrimitive","SelectPrimitive","React13","ChevronUp","Separator","React14","SeparatorPrimitive","React15","TabsPrimitive","React16","React17","TooltipPrimitive","React18","Fragment","React19","error","info","useState","QueryClient","QueryClientProvider","useMemo","useCallback","useRef","useEffect","useSearchParams","useRouter","usePathname","isExpanded","Filter","XCircle","Icon","Loader2","ArrowUp","ArrowDown","ArrowUpDown","DragDropContext","Droppable","Draggable","provided","GripVertical","MoreHorizontal","ChevronsLeft","ChevronsRight","exportData","XLSX","Download","FileText","FileSpreadsheet","BookmarkPlus","Star","Trash2","Columns3","comparison","MoreVertical","Card","getNestedValue","Link","DOMPurify","React20","React21","DialogPrimitive2","DialogHeader","DialogTitle","DialogFooter","sizeClasses","_"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } 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 * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }","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 rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? (\n <ChevronLeft className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n ),\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-4 sm:p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg max-h-[95vh] max-sm:max-h-[90vh] max-sm:m-4 max-sm:w-[calc(100%-2rem)] overflow-hidden\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3 top-3 sm:right-4 sm:top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground min-h-[44px] min-w-[44px] flex items-center justify-center\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 space-y-2 space-y-reverse sm:space-y-0\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../../utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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',\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors 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 left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-4 w-full overflow-hidden rounded-full bg-secondary\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-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 left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }","import { cn } from '../../utils'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-gray-200', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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\",\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface FeatureGateProps {\n /** Whether the feature is available. When false, applies mode behavior. */\n enabled: boolean\n /**\n * How to render when enabled=false:\n * - 'disable' (default): renders children as disabled with a tooltip\n * - 'hide': renders nothing\n * - 'badge': renders children with a 'Coming soon' badge overlay\n */\n mode?: \"disable\" | \"hide\" | \"badge\"\n /** Tooltip text shown in 'disable' mode. Defaults to 'Coming soon'. */\n tooltip?: string\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Gates a UI element behind a feature flag.\n *\n * Use this to wrap any button, link, or UI section that is not yet implemented.\n * This prevents shipping clickable elements with no handlers.\n *\n * @example\n * // Disable a button with a tooltip\n * <FeatureGate enabled={false}>\n * <Button onClick={handleReply}>Reply</Button>\n * </FeatureGate>\n *\n * @example\n * // Hide completely\n * <FeatureGate enabled={false} mode=\"hide\">\n * <Button>Archive</Button>\n * </FeatureGate>\n */\nexport function FeatureGate({\n enabled,\n mode = \"disable\",\n tooltip = \"Coming soon\",\n children,\n className,\n}: FeatureGateProps) {\n if (enabled) {\n return <>{children}</>\n }\n\n if (mode === \"hide\") {\n return null\n }\n\n if (mode === \"badge\") {\n return (\n <div className={cn(\"relative inline-flex\", className)}>\n <div className=\"opacity-60 pointer-events-none select-none\">{children}</div>\n <span className=\"absolute -top-1.5 -right-1.5 rounded-full bg-muted text-muted-foreground text-[10px] font-medium px-1.5 py-0.5 leading-none border\">\n Soon\n </span>\n </div>\n )\n }\n\n // mode === 'disable' (default): wrap in tooltip, disable interaction\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\"inline-flex cursor-not-allowed\", className)}\n aria-disabled=\"true\"\n >\n <span className=\"pointer-events-none opacity-50 select-none\">\n {children}\n </span>\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface ErrorStateProps {\n title?: string\n message: string\n onRetry?: () => void\n className?: string\n}\n\nexport function ErrorState({\n title = 'Something went wrong',\n message,\n onRetry,\n className,\n}: ErrorStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <div\n className=\"w-16 h-16 mb-4 rounded-full bg-red-50 flex items-center justify-center\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-red-500\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{title}</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-sm\">{message}</p>\n {onRetry && (\n <button\n onClick={onRetry}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 transition-colors\"\n aria-label=\"Retry loading content\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"mr-2\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n Try Again\n </button>\n )}\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ErrorState } from \"../states/ErrorState\"\n\ninterface ApiErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\ninterface ApiErrorBoundaryProps {\n children: React.ReactNode\n /** Custom fallback to render on error. Receives error and reset function. */\n fallback?: (props: { error: Error; reset: () => void }) => React.ReactNode\n /** Called when the error boundary catches an error. */\n onError?: (error: Error, info: React.ErrorInfo) => void\n}\n\n/**\n * Error boundary for API-driven page content.\n *\n * Catches unhandled errors from children and renders ErrorState with a retry button.\n *\n * @example\n * <ApiErrorBoundary>\n * <InvestorsTable />\n * </ApiErrorBoundary>\n */\nexport class ApiErrorBoundary extends React.Component<\n ApiErrorBoundaryProps,\n ApiErrorBoundaryState\n> {\n constructor(props: ApiErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ApiErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n this.props.onError?.(error, info)\n }\n\n reset = () => {\n this.setState({ hasError: false, error: null })\n }\n\n render() {\n if (this.state.hasError && this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback({ error: this.state.error, reset: this.reset })\n }\n return (\n <ErrorState\n message={this.state.error.message || \"An unexpected error occurred\"}\n onRetry={this.reset}\n />\n )\n }\n return this.props.children\n }\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface PageLoaderProps {\n /** Number of skeleton rows to show. Default: 5. */\n rows?: number\n className?: string\n}\n\n/**\n * Page-level skeleton loader. Renders animated skeleton rows as a loading placeholder.\n *\n * @example\n * if (loading) return <PageLoader />\n */\nexport function PageLoader({ rows = 5, className }: PageLoaderProps) {\n return (\n <div className={cn(\"w-full space-y-3 p-4\", className)} aria-busy=\"true\" aria-label=\"Loading\">\n <div className=\"h-8 w-1/3 rounded-md bg-muted animate-pulse\" />\n <div className=\"space-y-2\">\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n className=\"h-12 w-full rounded-md bg-muted animate-pulse\"\n style={{ opacity: 1 - i * 0.1 }}\n />\n ))}\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\n\n/**\n * Shared QueryClient provider with consistent defaults.\n *\n * - staleTime: 5 minutes (avoids unnecessary refetches)\n * - refetchOnWindowFocus: false (explicit control over refetches)\n */\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n },\n },\n })\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UseTableStateReturn, TableState } from '../types'\n\ninterface UseTableStateProps<TData> {\n initialData?: TData[]\n initialPageSize?: number\n}\n\nexport function useTableState<TData>({\n initialData = [],\n initialPageSize = 25,\n}: UseTableStateProps<TData>): UseTableStateReturn<TData> {\n const [data, setDataState] = useState<TData[]>(initialData)\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSizeState] = useState(initialPageSize)\n const [searchTerm, setSearchTerm] = useState('')\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState('')\n const [sortBy, setSortBy] = useState<string | null>(null)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [loading, setLoadingState] = useState(false)\n const [loadingRows, setLoadingRowsState] = useState<Set<string>>(new Set())\n const [error, setErrorState] = useState<Error | null>(null)\n const [viewMode, setViewModeState] = useState<'table' | 'card'>('table')\n\n // Computed values\n const totalCount = data.length\n const totalPages = Math.max(1, Math.ceil(totalCount / pageSize))\n\n const state: TableState<TData> = useMemo(() => ({\n data,\n filteredData: data, // Will be computed by filters hook\n displayedData: data, // Will be computed by pagination\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n selectedIds: new Set(),\n selectAllPages: false,\n activeFilters: {},\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n }), [\n data,\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n ])\n\n const setData = useCallback((newData: TData[]) => {\n setDataState(newData)\n }, [])\n\n const setPage = useCallback((page: number) => {\n setCurrentPage(page)\n }, [])\n\n const setPageSize = useCallback((size: number) => {\n setPageSizeState(size)\n setCurrentPage(1) // Reset to first page when changing page size\n }, [])\n\n const setLoading = useCallback((isLoading: boolean) => {\n setLoadingState(isLoading)\n }, [])\n\n const setLoadingRows = useCallback((ids: Set<string>) => {\n setLoadingRowsState(ids)\n }, [])\n\n const setError = useCallback((err: Error | null) => {\n setErrorState(err)\n }, [])\n\n const setViewMode = useCallback((mode: 'table' | 'card') => {\n setViewModeState(mode)\n }, [])\n\n return {\n state,\n setData,\n setPage,\n setPageSize,\n setLoading,\n setLoadingRows,\n setError,\n setViewMode,\n }\n}\n","'use client'\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport { UseSelectionReturn } from '../types'\n\ninterface UseSelectionProps {\n currentPageData: any[]\n totalCount: number\n getRowId: (row: any) => string\n onSelectionChange?: (ids: Set<string>) => void\n onSelectAllPages?: (enabled: boolean) => void\n // External controlled state\n externalSelectedIds?: Set<string>\n externalSelectAllPages?: boolean\n}\n\nexport function useSelection({\n currentPageData,\n totalCount,\n getRowId,\n onSelectionChange,\n onSelectAllPages,\n externalSelectedIds,\n externalSelectAllPages,\n}: UseSelectionProps): UseSelectionReturn {\n const [internalSelectedIds, setInternalSelectedIds] = useState<Set<string>>(new Set())\n const [internalSelectAllPages, setInternalSelectAllPages] = useState(false)\n\n // Track if we're in controlled mode\n const isControlled = externalSelectedIds !== undefined\n\n // Use external state if provided, otherwise internal\n const selectedIds = isControlled ? externalSelectedIds : internalSelectedIds\n const selectAllPages = externalSelectAllPages ?? internalSelectAllPages\n\n // Store callbacks in refs to avoid stale closures\n const onSelectionChangeRef = useRef(onSelectionChange)\n const onSelectAllPagesRef = useRef(onSelectAllPages)\n useEffect(() => {\n onSelectionChangeRef.current = onSelectionChange\n onSelectAllPagesRef.current = onSelectAllPages\n }, [onSelectionChange, onSelectAllPages])\n\n // Sync external state to internal when in controlled mode\n const prevExternalIdsRef = useRef<Set<string> | undefined>(undefined)\n useEffect(() => {\n if (externalSelectedIds !== undefined && externalSelectedIds !== prevExternalIdsRef.current) {\n setInternalSelectedIds(new Set(externalSelectedIds))\n prevExternalIdsRef.current = externalSelectedIds\n }\n }, [externalSelectedIds])\n\n useEffect(() => {\n if (externalSelectAllPages !== undefined) {\n setInternalSelectAllPages(externalSelectAllPages)\n }\n }, [externalSelectAllPages])\n\n const toggleRow = useCallback((id: string) => {\n setInternalSelectedIds(prev => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n // Notify parent after state update\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // If we're toggling individual rows, turn off select all pages\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [])\n\n const toggleAll = useCallback(() => {\n const currentPageIds = currentPageData.map(getRowId)\n\n setInternalSelectedIds(prev => {\n const allSelected = currentPageIds.every(id => prev.has(id))\n\n let next: Set<string>\n if (allSelected) {\n // Deselect all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.delete(id))\n } else {\n // Select all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.add(id))\n }\n\n // Notify parent\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // Turn off select all pages if toggling individual page\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [currentPageData, getRowId])\n\n const selectAllPagesToggle = useCallback(() => {\n setInternalSelectAllPages(prev => {\n const next = !prev\n // Notify parent\n onSelectAllPagesRef.current?.(next)\n\n if (next) {\n // When selecting all pages, clear individual selections\n setInternalSelectedIds(new Set())\n onSelectionChangeRef.current?.(new Set())\n }\n return next\n })\n }, [])\n\n const clearSelection = useCallback(() => {\n // Update internal state\n setInternalSelectedIds(new Set())\n setInternalSelectAllPages(false)\n // Notify parent\n onSelectionChangeRef.current?.(new Set())\n onSelectAllPagesRef.current?.(false)\n }, [])\n\n const getSelectedCount = useCallback(() => {\n if (selectAllPages) {\n return totalCount\n }\n return selectedIds.size\n }, [selectAllPages, selectedIds, totalCount])\n\n return {\n selectedIds,\n selectAllPages,\n toggleRow,\n toggleAll,\n selectAllPagesToggle,\n clearSelection,\n getSelectedCount,\n }\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UsePaginationReturn } from '../types'\n\ninterface UsePaginationProps {\n totalCount: number\n initialPageSize?: number\n initialPage?: number\n serverSide?: boolean\n onPageChange?: (page: number) => void\n}\n\nexport function usePagination({\n totalCount,\n initialPageSize = 25,\n initialPage = 1,\n serverSide = false,\n onPageChange,\n}: UsePaginationProps): UsePaginationReturn {\n const [currentPage, setCurrentPage] = useState(initialPage)\n const [pageSize, setPageSize] = useState(initialPageSize)\n\n const totalPages = useMemo(() => {\n return Math.max(1, Math.ceil(totalCount / pageSize))\n }, [totalCount, pageSize])\n\n const canGoNext = useMemo(() => {\n return currentPage < totalPages\n }, [currentPage, totalPages])\n\n const canGoPrevious = useMemo(() => {\n return currentPage > 1\n }, [currentPage])\n\n const goToPage = useCallback((page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages))\n setCurrentPage(validPage)\n onPageChange?.(validPage)\n }, [totalPages, onPageChange])\n\n const goToFirstPage = useCallback(() => {\n goToPage(1)\n }, [goToPage])\n\n const goToLastPage = useCallback(() => {\n goToPage(totalPages)\n }, [goToPage, totalPages])\n\n const goToNextPage = useCallback(() => {\n if (canGoNext) {\n goToPage(currentPage + 1)\n }\n }, [canGoNext, currentPage, goToPage])\n\n const goToPreviousPage = useCallback(() => {\n if (canGoPrevious) {\n goToPage(currentPage - 1)\n }\n }, [canGoPrevious, currentPage, goToPage])\n\n const getPageNumbers = useCallback((): (number | '...')[] => {\n const maxVisible = 7 // Maximum number of page buttons to show\n\n if (totalPages <= maxVisible) {\n // Show all pages if total is small\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const pages: (number | '...')[] = []\n\n // Always show first page\n pages.push(1)\n\n if (currentPage > 3) {\n pages.push('...')\n }\n\n // Show pages around current\n const start = Math.max(2, currentPage - 1)\n const end = Math.min(totalPages - 1, currentPage + 1)\n\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) {\n pages.push(i)\n }\n }\n\n if (currentPage < totalPages - 2) {\n pages.push('...')\n }\n\n // Always show last page\n if (!pages.includes(totalPages)) {\n pages.push(totalPages)\n }\n\n return pages\n }, [currentPage, totalPages])\n\n const getDisplayRange = useCallback(() => {\n const start = (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalCount)\n return { start, end }\n }, [currentPage, pageSize, totalCount])\n\n return {\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n }\n}\n","'use client'\nimport { useState, useCallback } from 'react'\nimport { UseFiltersReturn, FilterState } from '../types'\n\ninterface UseFiltersProps {\n initialFilters?: FilterState\n onChange?: (filters: FilterState) => void\n}\n\nexport function useFilters({\n initialFilters = {},\n onChange,\n}: UseFiltersProps): UseFiltersReturn {\n const [filters, setFilters] = useState<FilterState>(initialFilters)\n\n const setFilter = useCallback((key: string, value: any) => {\n setFilters((prev) => {\n const next = { ...prev, [key]: value }\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearFilter = useCallback((key: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n delete next[key]\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearAllFilters = useCallback(() => {\n setFilters({})\n onChange?.({})\n }, [onChange])\n\n const hasActiveFilters = useCallback(() => {\n return Object.keys(filters).length > 0\n }, [filters])\n\n const getActiveFilterCount = useCallback(() => {\n return Object.keys(filters).length\n }, [filters])\n\n return {\n filters,\n setFilter,\n clearFilter,\n clearAllFilters,\n hasActiveFilters,\n getActiveFilterCount,\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nexport interface ResponsiveBreakpoints {\n mobile: number\n tablet: number\n desktop: number\n}\n\nexport const DEFAULT_BREAKPOINTS: ResponsiveBreakpoints = {\n mobile: 768,\n tablet: 1024,\n desktop: 1280,\n}\n\nexport type ViewMode = 'mobile' | 'tablet' | 'desktop'\n\nexport function useResponsive(breakpoints: ResponsiveBreakpoints = DEFAULT_BREAKPOINTS) {\n const [viewMode, setViewMode] = useState<ViewMode>('desktop')\n const [windowWidth, setWindowWidth] = useState<number>(0)\n\n useEffect(() => {\n const handleResize = () => {\n const width = window.innerWidth\n setWindowWidth(width)\n\n if (width < breakpoints.mobile) {\n setViewMode('mobile')\n } else if (width < breakpoints.tablet) {\n setViewMode('tablet')\n } else {\n setViewMode('desktop')\n }\n }\n\n handleResize()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [breakpoints])\n\n return {\n viewMode,\n windowWidth,\n isMobile: viewMode === 'mobile',\n isTablet: viewMode === 'tablet',\n isDesktop: viewMode === 'desktop',\n isMobileOrTablet: viewMode === 'mobile' || viewMode === 'tablet',\n }\n}\n","'use client'\n\nimport { useState, useCallback, useEffect } from 'react'\nimport { ColumnVisibilityState } from '../types'\n\nexport interface UseColumnVisibilityOptions {\n defaultVisibility?: ColumnVisibilityState\n persistKey?: string\n onVisibilityChange?: (visibility: ColumnVisibilityState) => void\n}\n\nexport function useColumnVisibility({\n defaultVisibility = {},\n persistKey,\n onVisibilityChange\n}: UseColumnVisibilityOptions = {}) {\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n if (persistKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(`column-visibility-${persistKey}`)\n if (stored) {\n try {\n return JSON.parse(stored)\n } catch {\n return defaultVisibility\n }\n }\n }\n return defaultVisibility\n })\n\n useEffect(() => {\n if (persistKey && typeof window !== 'undefined') {\n localStorage.setItem(`column-visibility-${persistKey}`, JSON.stringify(columnVisibility))\n }\n onVisibilityChange?.(columnVisibility)\n }, [columnVisibility, persistKey, onVisibilityChange])\n\n const toggleColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: !(prev[columnId] ?? true)\n }))\n }, [])\n\n const showColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: true\n }))\n }, [])\n\n const hideColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: false\n }))\n }, [])\n\n const showAllColumns = useCallback(() => {\n setColumnVisibility({})\n }, [])\n\n const hideAllColumns = useCallback((exceptColumns: string[] = []) => {\n setColumnVisibility((prev) => {\n const newVisibility: ColumnVisibilityState = {}\n Object.keys(prev).forEach((key) => {\n newVisibility[key] = exceptColumns.includes(key)\n })\n return newVisibility\n })\n }, [])\n\n const resetVisibility = useCallback(() => {\n setColumnVisibility(defaultVisibility)\n }, [defaultVisibility])\n\n const isColumnVisible = useCallback((columnId: string): boolean => {\n return columnVisibility[columnId] ?? true\n }, [columnVisibility])\n\n return {\n columnVisibility,\n setColumnVisibility,\n toggleColumn,\n showColumn,\n hideColumn,\n showAllColumns,\n hideAllColumns,\n resetVisibility,\n isColumnVisible,\n }\n}\n","'use client'\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { ColumnVisibilityState, SortState } from '../types'\n\ninterface TablePreferences {\n columnVisibility: ColumnVisibilityState\n columnOrder: string[] | null\n defaultSortColumn: string | null\n defaultSortDirection: 'asc' | 'desc' | null\n pageSize: number\n}\n\ninterface UseTablePreferencesOptions {\n tableId: string\n enabled?: boolean\n defaultColumnVisibility?: ColumnVisibilityState\n defaultPageSize?: number\n debounceMs?: number\n // Custom fetch function for API calls\n // Applications should provide their own apiFetch implementation\n apiFetch?: typeof fetch\n}\n\ninterface UseTablePreferencesReturn {\n preferences: TablePreferences | null\n isLoading: boolean\n error: Error | null\n updateColumnVisibility: (visibility: ColumnVisibilityState) => void\n updateColumnOrder: (order: string[]) => void\n updateSortPreference: (sort: SortState) => void\n updatePageSize: (size: number) => void\n resetPreferences: () => Promise<void>\n}\n\nexport function useTablePreferences({\n tableId,\n enabled = true,\n defaultColumnVisibility = {},\n defaultPageSize = 25,\n debounceMs = 500,\n apiFetch = fetch // Default to native fetch if not provided\n}: UseTablePreferencesOptions): UseTablePreferencesReturn {\n const [preferences, setPreferences] = useState<TablePreferences | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n const saveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pendingUpdatesRef = useRef<Partial<TablePreferences>>({})\n\n // Load preferences on mount\n useEffect(() => {\n if (!enabled) {\n setIsLoading(false)\n return\n }\n\n const loadPreferences = async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`)\n if (!response.ok) {\n throw new Error('Failed to load table preferences')\n }\n const data = await response.json()\n\n if (data) {\n setPreferences(data)\n } else {\n // Use defaults if no saved preferences\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n }\n } catch (err) {\n console.error('Error loading table preferences:', err)\n setError(err instanceof Error ? err : new Error('Unknown error'))\n // Fall back to defaults on error\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } finally {\n setIsLoading(false)\n }\n }\n\n loadPreferences()\n }, [tableId, enabled, defaultPageSize])\n\n // Debounced save function\n const savePreferences = useCallback(async (updates: Partial<TablePreferences>) => {\n // Merge with pending updates\n pendingUpdatesRef.current = { ...pendingUpdatesRef.current, ...updates }\n\n // Clear existing timeout\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n\n // Set new debounced timeout\n saveTimeoutRef.current = setTimeout(async () => {\n const updatesToSave = { ...pendingUpdatesRef.current }\n pendingUpdatesRef.current = {}\n\n try {\n const response = await apiFetch('/api/v1/table-preferences/', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tableId,\n ...updatesToSave\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to save table preferences')\n }\n } catch (err) {\n console.error('Error saving table preferences:', err)\n // Don't update error state for save failures - user can continue working\n }\n }, debounceMs)\n }, [tableId, debounceMs])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n }\n }, [])\n\n const updateColumnVisibility = useCallback((visibility: ColumnVisibilityState) => {\n setPreferences(prev => prev ? { ...prev, columnVisibility: visibility } : null)\n savePreferences({ columnVisibility: visibility })\n }, [savePreferences])\n\n const updateColumnOrder = useCallback((order: string[]) => {\n setPreferences(prev => prev ? { ...prev, columnOrder: order } : null)\n savePreferences({ columnOrder: order })\n }, [savePreferences])\n\n const updateSortPreference = useCallback((sort: SortState) => {\n setPreferences(prev => prev ? {\n ...prev,\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n } : null)\n savePreferences({\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n })\n }, [savePreferences])\n\n const updatePageSize = useCallback((size: number) => {\n setPreferences(prev => prev ? { ...prev, pageSize: size } : null)\n savePreferences({ pageSize: size })\n }, [savePreferences])\n\n const resetPreferences = useCallback(async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`, {\n method: 'DELETE'\n })\n\n if (!response.ok) {\n throw new Error('Failed to reset table preferences')\n }\n\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } catch (err) {\n console.error('Error resetting table preferences:', err)\n throw err\n }\n }, [tableId, defaultColumnVisibility, defaultPageSize])\n\n return {\n preferences,\n isLoading,\n error,\n updateColumnVisibility,\n updateColumnOrder,\n updateSortPreference,\n updatePageSize,\n resetPreferences\n }\n}\n","'use client'\nimport { useEffect, useCallback, useRef, useState, RefObject } from 'react'\n\nexport interface UseTableKeyboardProps<TData> {\n data: TData[]\n getRowId: (row: TData) => string\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n onRowClick?: (row: TData) => void\n onDelete?: (ids: Set<string>) => void\n tableRef: RefObject<HTMLElement | null>\n enabled?: boolean\n}\n\nexport interface UseTableKeyboardReturn {\n focusedRowIndex: number\n setFocusedRowIndex: (index: number) => void\n handleKeyDown: (event: React.KeyboardEvent) => void\n}\n\n/**\n * Hook for handling keyboard navigation in UnifiedTable\n *\n * Features:\n * - Arrow Up/Down: Navigate between rows\n * - Enter: Expand/click row (trigger onRowClick)\n * - Space: Toggle row selection\n * - Tab: Move between interactive elements (native browser behavior)\n * - Escape: Close menus/dialogs (handled by menu components)\n * - Ctrl/Cmd+A: Select all rows\n * - Delete: Trigger delete action if available\n */\nexport function useTableKeyboard<TData>({\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n enabled = true,\n}: UseTableKeyboardProps<TData>): UseTableKeyboardReturn {\n // Use state for reactive updates so consumers get re-renders\n const [focusedRowIndex, setFocusedRowIndexState] = useState<number>(-1)\n // Keep a ref in sync for use in callbacks to avoid stale closures\n const focusedRowIndexRef = useRef<number>(-1)\n\n const setFocusedRowIndex = useCallback((index: number) => {\n focusedRowIndexRef.current = index\n setFocusedRowIndexState(index)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (!enabled || data.length === 0) return\n\n const { key, ctrlKey, metaKey, shiftKey } = event\n const isModifierPressed = ctrlKey || metaKey\n\n // Ctrl/Cmd + A: Select all rows\n if (key === 'a' && isModifierPressed && onToggleAll) {\n event.preventDefault()\n onToggleAll()\n return\n }\n\n // Delete: Trigger delete action if available\n if (key === 'Delete' && onDelete && selectedIds && selectedIds.size > 0) {\n event.preventDefault()\n onDelete(selectedIds)\n return\n }\n\n // Arrow navigation\n if (key === 'ArrowDown') {\n event.preventDefault()\n const nextIndex = Math.min(focusedRowIndexRef.current + 1, data.length - 1)\n setFocusedRowIndex(nextIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${nextIndex}\"]`\n ) as HTMLElement\n if (rowElement && typeof rowElement.focus === 'function') {\n rowElement.focus()\n }\n }\n return\n }\n\n if (key === 'ArrowUp') {\n event.preventDefault()\n const prevIndex = Math.max(focusedRowIndexRef.current - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${prevIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // Enter: Trigger row click\n if (key === 'Enter' && focusedRowIndexRef.current >= 0 && onRowClick) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n onRowClick(row)\n }\n return\n }\n\n // Space: Toggle row selection\n if (key === ' ' && focusedRowIndexRef.current >= 0 && onToggleRow) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n const rowId = getRowId(row)\n onToggleRow(rowId)\n }\n return\n }\n\n // Home: Focus first row\n if (key === 'Home') {\n event.preventDefault()\n setFocusedRowIndex(0)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n '[data-row-index=\"0\"]'\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // End: Focus last row\n if (key === 'End') {\n event.preventDefault()\n const lastIndex = data.length - 1\n setFocusedRowIndex(lastIndex)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${lastIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n }, [\n enabled,\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n setFocusedRowIndex,\n ])\n\n // Set up keyboard event listener on the table\n useEffect(() => {\n if (!enabled || !tableRef.current) return\n\n const handleKeyboardEvent = (event: KeyboardEvent) => {\n // Convert native event to React synthetic event shape\n const syntheticEvent = {\n key: event.key,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n } as React.KeyboardEvent\n\n handleKeyDown(syntheticEvent)\n }\n\n const tableElement = tableRef.current\n tableElement.addEventListener('keydown', handleKeyboardEvent as any)\n\n return () => {\n tableElement.removeEventListener('keydown', handleKeyboardEvent as any)\n }\n }, [enabled, tableRef, handleKeyDown])\n\n return {\n focusedRowIndex,\n setFocusedRowIndex,\n handleKeyDown,\n }\n}\n","'use client'\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useSearchParams, useRouter, usePathname } from 'next/navigation'\nimport { SortState, FilterState } from '../types'\n\nexport interface UseTableURLConfig {\n tableId: string\n persistToUrl: boolean\n debounceMs?: number\n}\n\nexport interface TableURLState {\n sortBy: string | null\n sortDirection: 'asc' | 'desc'\n filters: FilterState\n page: number\n search: string\n}\n\nexport interface UseTableURLReturn {\n // Read state from URL\n getURLState: () => TableURLState\n\n // Update individual state pieces\n setSortToURL: (sort: SortState) => void\n setFiltersToURL: (filters: FilterState) => void\n setPageToURL: (page: number) => void\n setSearchToURL: (search: string) => void\n\n // Clear state\n clearURLState: () => void\n\n // Check if URL has state\n hasURLState: () => boolean\n}\n\n/**\n * Hook for persisting table state to URL query parameters.\n * Enables shareability and browser navigation for table state.\n *\n * URL params are namespaced with tableId prefix:\n * - {tableId}_sortBy: column ID\n * - {tableId}_sortDir: 'asc' | 'desc'\n * - {tableId}_page: current page number\n * - {tableId}_search: search term\n * - {tableId}_filter_{filterKey}: filter values (JSON encoded)\n *\n * @example\n * const urlState = useTableURL({\n * tableId: 'firms',\n * persistToUrl: true,\n * debounceMs: 300\n * })\n *\n * // Read initial state from URL\n * const initialState = urlState.getURLState()\n *\n * // Update URL when state changes\n * urlState.setSortToURL({ sortBy: 'name', sortDirection: 'asc' })\n * urlState.setSearchToURL('acme')\n */\nexport function useTableURL({\n tableId,\n persistToUrl,\n debounceMs = 300,\n}: UseTableURLConfig): UseTableURLReturn {\n const searchParams = useSearchParams()\n const router = useRouter()\n const pathname = usePathname()\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Track if we're currently applying URL changes to avoid loops\n const isApplyingURLRef = useRef(false)\n\n /**\n * Build namespaced param key\n */\n const getParamKey = useCallback((key: string): string => {\n return `${tableId}_${key}`\n }, [tableId])\n\n /**\n * Parse URL state from current search params\n */\n const getURLState = useCallback((): TableURLState => {\n if (!persistToUrl) {\n return {\n sortBy: null,\n sortDirection: 'asc',\n filters: {},\n page: 1,\n search: '',\n }\n }\n\n const sortBy = searchParams.get(getParamKey('sortBy'))\n const sortDirection = searchParams.get(getParamKey('sortDir')) as 'asc' | 'desc' | null\n const page = parseInt(searchParams.get(getParamKey('page')) || '1', 10)\n const search = searchParams.get(getParamKey('search')) || ''\n\n // Parse filters (any param starting with tableId_filter_)\n const filters: FilterState = {}\n const filterPrefix = getParamKey('filter_')\n\n searchParams.forEach((value, key) => {\n if (key.startsWith(filterPrefix)) {\n const filterKey = key.substring(filterPrefix.length)\n try {\n // Try to parse as JSON first (for complex values)\n filters[filterKey] = JSON.parse(value)\n } catch {\n // Fall back to raw string value\n filters[filterKey] = value\n }\n }\n })\n\n return {\n sortBy: sortBy || null,\n sortDirection: sortDirection || 'asc',\n filters,\n page: isNaN(page) || page < 1 ? 1 : page,\n search,\n }\n }, [searchParams, persistToUrl, getParamKey])\n\n /**\n * Update URL with new params (debounced)\n */\n const updateURL = useCallback((updates: Record<string, string | null>) => {\n if (!persistToUrl) return\n\n // Clear existing debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // Debounce the URL update\n debounceTimerRef.current = setTimeout(() => {\n const newParams = new URLSearchParams(searchParams.toString())\n\n // Apply updates\n Object.entries(updates).forEach(([key, value]) => {\n if (value === null || value === '') {\n newParams.delete(key)\n } else {\n newParams.set(key, value)\n }\n })\n\n // Only update if params actually changed\n const newParamsString = newParams.toString()\n const currentParamsString = searchParams.toString()\n\n if (newParamsString !== currentParamsString) {\n isApplyingURLRef.current = true\n const newURL = newParamsString ? `${pathname}?${newParamsString}` : pathname\n router.replace(newURL, { scroll: false })\n\n // Reset flag after a short delay\n setTimeout(() => {\n isApplyingURLRef.current = false\n }, 50)\n }\n }, debounceMs)\n }, [persistToUrl, searchParams, pathname, router, debounceMs])\n\n /**\n * Update sort state in URL\n */\n const setSortToURL = useCallback((sort: SortState) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('sortBy')]: sort.sortBy,\n [getParamKey('sortDir')]: sort.sortBy ? sort.sortDirection : null,\n // Reset to page 1 when sorting changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update filters in URL\n */\n const setFiltersToURL = useCallback((filters: FilterState) => {\n if (!persistToUrl) return\n\n // Build updates object - clear old filters and set new ones\n const updates: Record<string, string | null> = {}\n const filterPrefix = getParamKey('filter_')\n\n // Clear all existing filter params\n searchParams.forEach((_, key) => {\n if (key.startsWith(filterPrefix)) {\n updates[key] = null\n }\n })\n\n // Set new filter params\n Object.entries(filters).forEach(([key, value]) => {\n const paramKey = `${filterPrefix}${key}`\n if (value === undefined || value === null || value === '') {\n updates[paramKey] = null\n } else if (typeof value === 'object') {\n // Encode complex values as JSON\n updates[paramKey] = JSON.stringify(value)\n } else {\n updates[paramKey] = String(value)\n }\n })\n\n // Reset to page 1 when filters change\n updates[getParamKey('page')] = '1'\n\n updateURL(updates)\n }, [persistToUrl, updateURL, getParamKey, searchParams])\n\n /**\n * Update page in URL\n */\n const setPageToURL = useCallback((page: number) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('page')]: page > 1 ? String(page) : null, // Remove param if page 1\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update search term in URL\n */\n const setSearchToURL = useCallback((search: string) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('search')]: search || null,\n // Reset to page 1 when search changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Clear all table-related URL params\n */\n const clearURLState = useCallback(() => {\n if (!persistToUrl) return\n\n const newParams = new URLSearchParams(searchParams.toString())\n const keysToDelete: string[] = []\n\n // Find all params for this table\n newParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n keysToDelete.push(key)\n }\n })\n\n // Delete them\n keysToDelete.forEach(key => newParams.delete(key))\n\n const newURL = newParams.toString() ? `${pathname}?${newParams.toString()}` : pathname\n router.replace(newURL, { scroll: false })\n }, [persistToUrl, searchParams, pathname, router, tableId])\n\n /**\n * Check if URL has any state for this table\n */\n const hasURLState = useCallback((): boolean => {\n if (!persistToUrl) return false\n\n let hasState = false\n searchParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n hasState = true\n }\n })\n return hasState\n }, [persistToUrl, searchParams, tableId])\n\n // Cleanup debounce timer on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n return {\n getURLState,\n setSortToURL,\n setFiltersToURL,\n setPageToURL,\n setSearchToURL,\n clearURLState,\n hasURLState,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useMemo } from 'react'\nimport { DropResult } from '@hello-pangea/dnd'\nimport { ColumnConfig } from '../types'\n\ninterface UseColumnReorderOptions<TData> {\n columns: ColumnConfig<TData>[]\n initialOrder?: string[] | null\n enabled?: boolean\n onOrderChange?: (order: string[]) => void\n}\n\ninterface UseColumnReorderReturn<TData> {\n orderedColumns: ColumnConfig<TData>[]\n columnOrder: string[]\n handleDragEnd: (result: DropResult) => void\n resetOrder: () => void\n}\n\nexport function useColumnReorder<TData>({\n columns,\n initialOrder = null,\n enabled = true,\n onOrderChange,\n}: UseColumnReorderOptions<TData>): UseColumnReorderReturn<TData> {\n // Initialize order from provided order or default to column IDs\n const defaultOrder = useMemo(() => columns.map(c => c.id), [columns])\n\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n if (initialOrder && initialOrder.length > 0) {\n // Validate that all columns exist and add any new ones\n const validOrder = initialOrder.filter(id => columns.some(c => c.id === id))\n const newColumns = columns.filter(c => !initialOrder.includes(c.id)).map(c => c.id)\n return [...validOrder, ...newColumns]\n }\n return defaultOrder\n })\n\n // Reorder columns based on current order\n const orderedColumns = useMemo(() => {\n if (!enabled) return columns\n\n const columnMap = new Map(columns.map(c => [c.id, c]))\n const ordered: ColumnConfig<TData>[] = []\n\n // Add columns in order\n for (const id of columnOrder) {\n const column = columnMap.get(id)\n if (column) {\n ordered.push(column)\n }\n }\n\n // Add any columns not in the order (new columns)\n for (const column of columns) {\n if (!columnOrder.includes(column.id)) {\n ordered.push(column)\n }\n }\n\n return ordered\n }, [columns, columnOrder, enabled])\n\n // Handle drag end\n const handleDragEnd = useCallback((result: DropResult) => {\n if (!result.destination) return\n if (result.source.index === result.destination.index) return\n\n const newOrder = Array.from(columnOrder)\n const [removed] = newOrder.splice(result.source.index, 1)\n newOrder.splice(result.destination.index, 0, removed)\n\n setColumnOrder(newOrder)\n onOrderChange?.(newOrder)\n }, [columnOrder, onOrderChange])\n\n // Reset to default order\n const resetOrder = useCallback(() => {\n setColumnOrder(defaultOrder)\n onOrderChange?.(defaultOrder)\n }, [defaultOrder, onOrderChange])\n\n return {\n orderedColumns,\n columnOrder,\n handleDragEnd,\n resetOrder,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\ninterface ColumnWidths {\n [columnId: string]: number\n}\n\ninterface UseColumnResizeOptions {\n enabled?: boolean\n initialWidths?: ColumnWidths | null\n minWidth?: number\n onWidthChange?: (widths: ColumnWidths) => void\n}\n\ninterface UseColumnResizeReturn {\n columnWidths: ColumnWidths\n getColumnWidth: (columnId: string, defaultWidth?: number) => number | undefined\n startResize: (columnId: string, startX: number, startWidth: number) => void\n resetWidths: () => void\n isResizing: boolean\n resizingColumn: string | null\n}\n\nexport function useColumnResize({\n enabled = true,\n initialWidths = null,\n minWidth = 50,\n onWidthChange,\n}: UseColumnResizeOptions = {}): UseColumnResizeReturn {\n const [columnWidths, setColumnWidths] = useState<ColumnWidths>(() => initialWidths ?? {})\n const [resizingColumn, setResizingColumn] = useState<string | null>(null)\n const resizeRef = useRef<{\n columnId: string\n startX: number\n startWidth: number\n } | null>(null)\n\n // Store dependencies in refs to avoid useCallback recreation\n const minWidthRef = useRef(minWidth)\n const onWidthChangeRef = useRef(onWidthChange)\n useEffect(() => {\n minWidthRef.current = minWidth\n onWidthChangeRef.current = onWidthChange\n }, [minWidth, onWidthChange])\n\n // Get column width (undefined allows CSS default)\n const getColumnWidth = useCallback((columnId: string, defaultWidth?: number): number | undefined => {\n if (!enabled) return defaultWidth\n return columnWidths[columnId] ?? defaultWidth\n }, [enabled, columnWidths])\n\n // Start resizing a column\n const startResize = useCallback((columnId: string, startX: number, startWidth: number) => {\n if (!enabled) return\n resizeRef.current = { columnId, startX, startWidth }\n setResizingColumn(columnId)\n }, [enabled])\n\n // Handle pointer/mouse move during resize - uses refs to avoid recreating\n const handlePointerMove = useCallback((e: PointerEvent | MouseEvent) => {\n if (!resizeRef.current) return\n\n const { columnId, startX, startWidth } = resizeRef.current\n const diff = e.clientX - startX\n const newWidth = Math.max(minWidthRef.current, startWidth + diff)\n\n setColumnWidths(prev => ({ ...prev, [columnId]: newWidth }))\n }, [])\n\n // Handle pointer/mouse up to end resize - uses refs to avoid recreating\n const handlePointerUp = useCallback(() => {\n if (!resizeRef.current) return\n\n resizeRef.current = null\n setResizingColumn(null)\n\n // Notify parent of the final width changes\n setColumnWidths(current => {\n onWidthChangeRef.current?.(current)\n return current\n })\n }, [])\n\n // Add/remove global pointer/mouse listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n // Add listeners for both pointer and mouse events for cross-browser support\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n document.addEventListener('mousemove', handlePointerMove)\n document.addEventListener('mouseup', handlePointerUp)\n // Prevent text selection during resize\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n return () => {\n // Remove listeners\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n document.removeEventListener('mousemove', handlePointerMove)\n document.removeEventListener('mouseup', handlePointerUp)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [resizingColumn, handlePointerMove, handlePointerUp])\n\n // Reset all widths\n const resetWidths = useCallback(() => {\n setColumnWidths({})\n onWidthChange?.({})\n }, [onWidthChange])\n\n return {\n columnWidths,\n getColumnWidth,\n startResize,\n resetWidths,\n isResizing: resizingColumn !== null,\n resizingColumn,\n }\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { Badge } from '../../../ui/badge'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Filter, XCircle, ChevronDown, ChevronUp } from 'lucide-react'\nimport { FilterConfig, FilterSection, UseFiltersReturn } from '../../types'\nimport { cn } from '../../../../lib/utils'\nimport { useState, useCallback } from 'react'\n\ninterface TableFiltersProps {\n config: FilterConfig\n filters: UseFiltersReturn\n className?: string\n defaultExpanded?: boolean\n}\n\nexport function TableFilters({ config, filters, className, defaultExpanded = false }: TableFiltersProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const toggleSection = (sectionId: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(sectionId)) {\n next.delete(sectionId)\n } else {\n next.add(sectionId)\n }\n return next\n })\n }\n\n const renderChipsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'chips' || !section.filters) return null\n\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n {section.filters.map((filter) => {\n if (!filter.options) return null\n\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <Label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <div className=\"flex gap-1\">\n {filter.options.map((option) => {\n const isActive = filters.filters[filter.id] === option\n\n return (\n <Button\n key={option}\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => {\n if (isActive) {\n filters.clearFilter(filter.id)\n } else {\n filters.setFilter(filter.id, option)\n }\n }}\n className=\"h-7 px-2 text-xs\"\n >\n {option}\n </Button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n const renderBucketsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'buckets' || !section.buckets) return null\n\n const currentValue = filters.filters[section.id] || 'all'\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <Label htmlFor={section.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(section.id, value)}>\n <SelectTrigger id={section.id} className=\"w-32 h-8 text-xs\">\n <SelectValue placeholder=\"Select range\" />\n </SelectTrigger>\n <SelectContent>\n {section.buckets.map((bucket, idx) => (\n <SelectItem key={idx} value={bucket.label.toLowerCase().replace(/\\s+/g, '-')}>\n {bucket.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderDropdownFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n if (!filter.options) return null\n\n const currentValue = filters.filters[filter.id] || 'all'\n // Filter out 'all' from options since we add it explicitly below\n const filteredOptions = filter.options.filter((option: string) => option.toLowerCase() !== 'all')\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(filter.id, value)}>\n <SelectTrigger id={filter.id} className=\"w-28 h-8 text-xs\">\n <SelectValue placeholder=\"All\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All</SelectItem>\n {filteredOptions.map((option: string) => (\n <SelectItem key={option} value={option}>\n {option === 'null' ? 'Not Set' : option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderSearchFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n const currentValue = filters.filters[filter.id] || ''\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Input\n id={filter.id}\n type=\"text\"\n placeholder={filter.label}\n value={currentValue}\n onChange={(e) => filters.setFilter(filter.id, e.target.value)}\n className=\"w-32 h-8 text-xs\"\n />\n </div>\n )\n }\n\n const renderCollapsibleSection = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'collapsible' || !section.filters) return null\n\n const isExpanded = expandedSections.has(section.id)\n\n return (\n <div key={section.id} className=\"border rounded-lg p-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => toggleSection(section.id)}\n className=\"w-full justify-between -ml-2\"\n >\n <span className=\"font-medium\">{section.label}</span>\n {isExpanded ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\n {section.filters.map((filter) => {\n if (filter.type === 'dropdown') {\n return renderDropdownFilter(filter)\n }\n if (filter.type === 'search') {\n return renderSearchFilter(filter)\n }\n return null\n })}\n </div>\n )}\n </div>\n )\n }\n\n // Render custom filter using the provided render function\n const renderCustomFilter = useCallback((section: FilterSection) => {\n if (section.type !== 'custom' || !section.customFilter) return null\n\n const currentValue = filters.filters[section.id] ?? section.customFilter.defaultValue\n const onChange = (value: any) => {\n if (value === section.customFilter?.defaultValue || value === undefined || value === null) {\n filters.clearFilter(section.id)\n } else {\n filters.setFilter(section.id, value)\n }\n }\n\n return (\n <div key={section.id} className=\"flex items-center gap-1.5\">\n {section.label && (\n <Label className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n )}\n {section.customFilter.render(currentValue, onChange)}\n </div>\n )\n }, [filters])\n\n const hasActiveFilters = filters.hasActiveFilters()\n const activeFilterCount = filters.getActiveFilterCount()\n\n return (\n <div className={cn('rounded-lg border bg-muted/30', className)}>\n {/* Collapsible Header */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Filters</span>\n {hasActiveFilters && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activeFilterCount}\n </Badge>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n filters.clearAllFilters()\n }}\n className=\"gap-1 h-6 px-2 text-xs\"\n >\n <XCircle className=\"h-3 w-3\" />\n Clear\n </Button>\n )}\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </div>\n </button>\n\n {/* Expanded filter content */}\n {isExpanded && (\n <div className=\"px-3 pb-3 pt-1\">\n {/* Compact horizontal layout for all filters */}\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n {config.sections.map((section) => {\n if (section.type === 'chips') {\n return <div key={section.id}>{renderChipsFilter(section)}</div>\n }\n\n if (section.type === 'buckets') {\n return <div key={section.id}>{renderBucketsFilter(section)}</div>\n }\n\n if (section.type === 'collapsible') {\n return renderCollapsibleSection(section)\n }\n\n if (section.type === 'dropdown' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderDropdownFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'search' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderSearchFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'custom') {\n return <div key={section.id}>{renderCustomFilter(section)}</div>\n }\n\n return null\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { X } from 'lucide-react'\nimport { BulkAction } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\ninterface BulkActionBarProps {\n selectedCount: number\n selectAllPages: boolean\n totalCount: number\n bulkActions: BulkAction[]\n onClearSelection: () => void\n onExecuteAction: (action: BulkAction) => void\n className?: string\n}\n\nexport function BulkActionBar({\n selectedCount,\n selectAllPages,\n totalCount,\n bulkActions,\n onClearSelection,\n onExecuteAction,\n className,\n}: BulkActionBarProps) {\n const isVisible = selectedCount > 0\n\n const getVariantClassName = (variant: BulkAction['variant']) => {\n switch (variant) {\n case 'gradient-purple':\n return 'bg-gradient-to-r from-purple-600 to-blue-600 text-white hover:from-purple-700 hover:to-blue-700'\n case 'gradient-green':\n return 'bg-gradient-to-r from-green-600 to-teal-600 text-white hover:from-green-700 hover:to-teal-700'\n case 'gradient-indigo':\n return 'bg-gradient-to-r from-indigo-600 to-purple-600 text-white hover:from-indigo-700 hover:to-purple-700'\n case 'gradient-orange':\n return 'bg-gradient-to-r from-orange-600 to-red-600 text-white hover:from-orange-700 hover:to-red-700'\n case 'gradient-blue':\n return 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white hover:from-blue-700 hover:to-indigo-700'\n default:\n return ''\n }\n }\n\n return (\n <div\n className={cn(\n 'transition-all duration-200 ease-in-out overflow-hidden',\n isVisible\n ? 'opacity-100 max-h-20'\n : 'opacity-0 max-h-0 pointer-events-none',\n className\n )}\n aria-hidden={!isVisible}\n >\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg border\">\n {/* Selection summary */}\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n {selectAllPages ? (\n <span className=\"text-blue-600\">\n All <span className=\"font-semibold\">{totalCount}</span> items selected\n </span>\n ) : (\n <span>\n {`${selectedCount} ${selectedCount === 1 ? 'item' : 'items'} selected`}\n </span>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"h-6 w-px bg-border mx-1\" />\n\n {/* Bulk action buttons */}\n <div className=\"flex items-center gap-2 flex-1\">\n {bulkActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled?.(new Set()) || false\n const exceedsMaxSelection = !!(action.maxSelection && selectedCount > action.maxSelection)\n\n return (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'default' ? 'default' : 'default'}\n className={cn(\n getVariantClassName(action.variant),\n 'gap-2'\n )}\n onClick={() => onExecuteAction(action)}\n disabled={isDisabled || exceedsMaxSelection}\n title={\n exceedsMaxSelection\n ? `Maximum ${action.maxSelection} items can be selected for this action`\n : action.label\n }\n >\n <Icon className=\"h-4 w-4\" />\n {action.label}\n {selectAllPages && totalCount > 0 && ` (${totalCount})`}\n </Button>\n )\n })}\n </div>\n\n {/* Clear selection button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClearSelection}\n className=\"gap-2\"\n >\n <X className=\"h-4 w-4\" />\n Clear\n </Button>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport { Input } from '../../../ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../../ui/select'\nimport { Check, X, Loader2 } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\n\ninterface InlineEditCellProps {\n value: any\n columnId: string\n rowId: string\n editType?: 'text' | 'number' | 'select' | 'date'\n editOptions?: string[]\n onSave: (value: any) => Promise<void>\n onCancel: () => void\n validate?: (value: any) => string | null\n}\n\nexport function InlineEditCell({\n value: initialValue,\n columnId,\n rowId,\n editType = 'text',\n editOptions = [],\n onSave,\n onCancel,\n validate,\n}: InlineEditCellProps) {\n const [value, setValue] = useState(initialValue ?? '')\n const [error, setError] = useState<string | null>(null)\n const [isSaving, setIsSaving] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Focus the input on mount\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [])\n\n // Handle save\n const handleSave = useCallback(async () => {\n // Validate if validator provided\n if (validate) {\n const validationError = validate(value)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n await onSave(value)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save')\n setIsSaving(false)\n }\n }, [value, validate, onSave])\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSave()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }, [handleSave, onCancel])\n\n // Render select editor\n if (editType === 'select') {\n return (\n <div className=\"flex items-center gap-1\">\n <Select\n value={String(value)}\n onValueChange={(newValue) => {\n setValue(newValue)\n // Auto-save on select\n onSave(newValue)\n }}\n >\n <SelectTrigger className=\"h-8 w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {editOptions.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-muted rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n )\n }\n\n // Render text/number/date editor\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1\">\n <Input\n ref={inputRef}\n type={editType === 'number' ? 'number' : editType === 'date' ? 'date' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value)\n setError(null)\n }}\n onKeyDown={handleKeyDown}\n className={cn(\n 'h-8 w-full',\n error && 'border-red-500 focus-visible:ring-red-500'\n )}\n disabled={isSaving}\n />\n <button\n onClick={handleSave}\n className=\"p-1 hover:bg-green-100 rounded\"\n disabled={isSaving}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n </button>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-red-100 rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-red-600\" />\n </button>\n </div>\n {error && (\n <span className=\"text-xs text-red-500\">{error}</span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/table'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { Button } from '../../../ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '../../../ui/dropdown-menu'\nimport { ArrowUpDown, ArrowUp, ArrowDown, MoreHorizontal, Loader2, GripVertical } from 'lucide-react'\nimport { DragDropContext, Droppable, Draggable, DropResult, DragStart } from '@hello-pangea/dnd'\nimport { ColumnConfig, RowAction } from '../../types'\nimport { InlineEditCell } from '../InlineEditCell'\nimport { cn } from '../../../../lib/utils'\n\ninterface DataTableCoreProps<TData> {\n data: TData[]\n columns: ColumnConfig<TData>[]\n getRowId: (row: TData) => string\n\n // Selection\n selectionEnabled?: boolean\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n allRowsSelected?: boolean\n renderSelectionCell?: (row: TData) => React.ReactNode\n\n // Sorting\n sortingEnabled?: boolean\n sortBy?: string | null\n sortDirection?: 'asc' | 'desc'\n onSort?: (columnId: string) => void\n\n // Column Reordering\n columnReorderEnabled?: boolean\n onColumnDragEnd?: (result: DropResult) => void\n\n // Column Resizing\n columnResizeEnabled?: boolean\n columnWidths?: { [columnId: string]: number }\n onColumnResizeStart?: (columnId: string, startX: number, startWidth: number) => void\n isResizing?: boolean\n\n // Inline Editing\n inlineEditEnabled?: boolean\n onCellEdit?: (rowId: string, columnId: string, value: any, row: TData) => Promise<void>\n\n // Row Actions\n rowActions?: RowAction<TData>[]\n onRowClick?: (row: TData) => void\n\n // Loading\n loadingRows?: Set<string>\n\n className?: string\n}\n\nexport function DataTableCore<TData>({\n data,\n columns,\n getRowId,\n selectionEnabled,\n selectedIds = new Set(),\n onToggleRow,\n onToggleAll,\n allRowsSelected,\n renderSelectionCell,\n sortingEnabled,\n sortBy,\n sortDirection,\n onSort,\n columnReorderEnabled,\n onColumnDragEnd,\n columnResizeEnabled,\n columnWidths = {},\n onColumnResizeStart,\n isResizing,\n inlineEditEnabled,\n onCellEdit,\n rowActions,\n onRowClick,\n loadingRows = new Set(),\n className,\n}: DataTableCoreProps<TData>) {\n // State for tracking which cell is being edited\n const [editingCell, setEditingCell] = useState<{ rowId: string; columnId: string } | null>(null)\n\n // State for tracking if a column is being dragged (to disable sorting during drag)\n const [isDraggingColumn, setIsDraggingColumn] = useState(false)\n\n // Drag handlers\n const handleDragStart = useCallback((_: DragStart) => {\n setIsDraggingColumn(true)\n }, [])\n\n const handleDragEnd = useCallback((result: DropResult) => {\n setIsDraggingColumn(false)\n onColumnDragEnd?.(result)\n }, [onColumnDragEnd])\n\n // Get effective column width (resized or default)\n const getEffectiveWidth = (column: ColumnConfig<TData>) => {\n if (columnResizeEnabled && columnWidths[column.id]) {\n return columnWidths[column.id]\n }\n return column.width\n }\n\n // Resize handle with stable callback reference\n const handleResizeMouseDown = useCallback((columnId: string, e: React.MouseEvent | React.PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n const th = (e.target as HTMLElement).closest('th')\n if (th && onColumnResizeStart) {\n onColumnResizeStart(columnId, e.clientX, th.offsetWidth)\n }\n }, [onColumnResizeStart])\n\n // Resize handle component - wider hit area for easier grabbing\n const renderResizeHandle = (columnId: string) => {\n if (!columnResizeEnabled) return null\n\n return (\n <div\n data-resize-handle=\"true\"\n className=\"absolute right-0 top-0 h-full w-5 cursor-col-resize z-50 flex items-center justify-center group/resize pointer-events-auto\"\n style={{ marginRight: '-10px' }}\n onMouseDown={(e) => handleResizeMouseDown(columnId, e)}\n onPointerDown={(e) => handleResizeMouseDown(columnId, e)}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Visible indicator line */}\n <div className=\"w-[3px] h-full bg-transparent group-hover/resize:bg-primary transition-colors rounded-full\" />\n </div>\n )\n }\n\n const renderCellContent = (column: ColumnConfig<TData>, row: TData) => {\n if (column.cell) {\n return column.cell(row)\n }\n\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const value = (row as any)[column.accessorKey]\n return value !== null && value !== undefined ? String(value) : '-'\n }\n\n return '-'\n }\n\n // Sort indicator component for cleaner rendering\n const SortIndicator = ({ columnId }: { columnId: string }) => {\n const isSorted = sortBy === columnId\n const direction = isSorted ? sortDirection : null\n\n if (direction === 'asc') {\n return <ArrowUp className=\"ml-2 h-4 w-4\" />\n } else if (direction === 'desc') {\n return <ArrowDown className=\"ml-2 h-4 w-4\" />\n }\n return <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\n }\n\n // Handle sort click - disabled during column dragging\n const handleSortClick = useCallback((columnId: string) => {\n if (isDraggingColumn) return // Don't sort while dragging columns\n onSort?.(columnId)\n }, [isDraggingColumn, onSort])\n\n const renderHeader = (column: ColumnConfig<TData>, inDragContext = false) => {\n if (typeof column.header === 'function') {\n return column.header({})\n }\n\n // In drag context, render a simpler header (sorting handled separately)\n if (inDragContext) {\n return <span>{column.header}</span>\n }\n\n if (sortingEnabled && column.sortable !== false) {\n return (\n <Button\n variant=\"ghost\"\n onClick={() => handleSortClick(column.id)}\n className=\"-ml-4 h-8 hover:bg-transparent\"\n >\n {column.header}\n <SortIndicator columnId={column.id} />\n </Button>\n )\n }\n\n return column.header\n }\n\n const renderColumnHeaders = () => {\n if (columnReorderEnabled && onColumnDragEnd) {\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <TableHeader>\n <Droppable droppableId=\"columns\" direction=\"horizontal\">\n {(provided) => (\n <TableRow\n ref={provided.innerRef}\n {...provided.droppableProps}\n >\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Draggable data columns */}\n {columns.map((column, index) => (\n <Draggable key={column.id} draggableId={column.id} index={index}>\n {(provided, snapshot) => (\n <TableHead\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={{\n ...provided.draggableProps.style,\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n 'relative group overflow-visible',\n snapshot.isDragging && 'bg-primary/10 shadow-lg ring-2 ring-primary/20 z-50',\n columnResizeEnabled && 'select-none'\n )}\n >\n {/* Drag handle area - leaves space for resize handle on the right */}\n <div\n {...provided.dragHandleProps}\n className={cn(\n 'flex items-center gap-2 cursor-grab active:cursor-grabbing',\n 'hover:bg-muted/50 rounded px-1 -mx-1 py-1 transition-colors',\n columnResizeEnabled && 'pr-4'\n )}\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />\n {/* Sortable header text */}\n <div\n className=\"flex-1 flex items-center\"\n onClick={(e) => {\n // Only trigger sort if not dragging and column is sortable\n if (!snapshot.isDragging && sortingEnabled && column.sortable !== false) {\n e.stopPropagation()\n handleSortClick(column.id)\n }\n }}\n >\n {renderHeader(column, true)}\n {sortingEnabled && column.sortable !== false && (\n <SortIndicator columnId={column.id} />\n )}\n </div>\n </div>\n {renderResizeHandle(column.id)}\n </TableHead>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n )}\n </Droppable>\n </TableHeader>\n </DragDropContext>\n )\n }\n\n // Standard non-draggable headers\n return (\n <TableHeader>\n <TableRow>\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHead\n key={column.id}\n className={cn('relative group overflow-visible', columnResizeEnabled && 'select-none')}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n >\n {renderHeader(column)}\n {renderResizeHandle(column.id)}\n </TableHead>\n ))}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n )\n }\n\n return (\n <div className={cn('rounded-md border', className)}>\n <Table>\n {renderColumnHeaders()}\n\n <TableBody>\n {data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectionEnabled ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIndex) => {\n const rowId = getRowId(row)\n const isSelected = selectedIds.has(rowId)\n const isLoading = loadingRows.has(rowId)\n\n return (\n <TableRow\n key={rowId}\n data-row-index={rowIndex}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row)}\n tabIndex={0}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isLoading && 'opacity-50'\n )}\n >\n {/* Selection cell */}\n {selectionEnabled && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center gap-1\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => onToggleRow?.(rowId)}\n aria-label=\"Select row\"\n />\n {renderSelectionCell?.(row)}\n </div>\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const isEditing = editingCell?.rowId === rowId && editingCell?.columnId === column.id\n const canEdit = inlineEditEnabled && column.editable && onCellEdit\n\n // Get the cell value for editing\n const getCellValue = () => {\n if (column.accessorFn) return column.accessorFn(row)\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n return keys.reduce((obj, key) => obj?.[key], row as any)\n }\n return undefined\n }\n\n return (\n <TableCell\n key={column.id}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n canEdit && !isEditing && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={(e) => {\n if (canEdit && !isEditing) {\n e.stopPropagation()\n setEditingCell({ rowId, columnId: column.id })\n }\n }}\n >\n {isEditing ? (\n <InlineEditCell\n value={getCellValue()}\n columnId={column.id}\n rowId={rowId}\n editType={column.editType}\n editOptions={column.editOptions}\n validate={column.validate ? (v) => column.validate!(v, row) : undefined}\n onSave={async (value) => {\n await onCellEdit!(rowId, column.id, value, row)\n setEditingCell(null)\n }}\n onCancel={() => setEditingCell(null)}\n />\n ) : (\n <>\n {isLoading && <Loader2 className=\"h-4 w-4 animate-spin inline-block mr-2\" />}\n {renderCellContent(column, row)}\n </>\n )}\n </TableCell>\n )\n })}\n\n {/* Actions cell */}\n {rowActions && rowActions.length > 0 && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">Open menu</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n {rowActions.map((action, idx) => {\n const isDisabled = action.disabled?.(row) || false\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => !isDisabled && action.onClick(row)}\n disabled={isDisabled}\n className={cn(action.destructive && 'text-red-600')}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n )}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { UsePaginationReturn } from '../../types'\n\ninterface TablePaginationProps {\n pagination: UsePaginationReturn\n showSelectAllPrompt?: boolean\n onSelectAllPages?: () => void\n totalFilteredCount?: number\n className?: string\n}\n\nexport function TablePagination({\n pagination,\n showSelectAllPrompt,\n onSelectAllPages,\n totalFilteredCount,\n className,\n}: TablePaginationProps) {\n const {\n currentPage,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n } = pagination\n\n const { start, end } = getDisplayRange()\n const pageNumbers = getPageNumbers()\n\n return (\n <div className={className}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* Item count display */}\n <div className=\"text-sm text-muted-foreground\">\n Showing <span className=\"font-medium\">{start}-{end}</span> of{' '}\n <span className=\"font-medium\">{totalCount}</span>\n {totalFilteredCount && totalFilteredCount !== totalCount && (\n <span> filtered items</span>\n )}\n </div>\n\n {/* Page controls */}\n {totalPages > 1 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground hidden sm:inline\">\n Page {currentPage} of {totalPages}\n </span>\n\n <div className=\"flex gap-1\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToFirstPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {pageNumbers.map((pageNum, idx) => {\n if (pageNum === '...') {\n return (\n <span\n key={`ellipsis-${idx}`}\n className=\"flex items-center px-2 text-muted-foreground\"\n >\n •••\n </span>\n )\n }\n\n const page = pageNum as number\n return (\n <Button\n key={page}\n variant={page === currentPage ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => goToPage(page)}\n className=\"h-8 w-8 p-0\"\n >\n {page}\n </Button>\n )\n })}\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToLastPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n\n {/* Select all pages prompt */}\n {showSelectAllPrompt && onSelectAllPages && totalFilteredCount && totalFilteredCount > end && (\n <div className=\"mt-3 flex items-center justify-center p-3 bg-blue-50 border border-blue-200 rounded-lg\">\n <span className=\"text-sm text-blue-900 mr-2\">\n Select all <span className=\"font-semibold\">{totalFilteredCount}</span> items?\n </span>\n <Button\n size=\"sm\"\n variant=\"link\"\n onClick={onSelectAllPages}\n className=\"text-blue-700 hover:text-blue-900 font-semibold p-0 h-auto\"\n >\n Select all {totalFilteredCount} items\n </Button>\n </div>\n )}\n </div>\n )\n}\n","import * as XLSX from 'xlsx'\nimport { ColumnConfig } from '../types'\n\nexport type ExportFormat = 'csv' | 'excel'\n\nexport interface ExportOptions {\n filename: string\n format: ExportFormat\n includeHeaders?: boolean\n dateFormat?: string\n}\n\n/**\n * Extracts the value from a row using column configuration\n */\nfunction getColumnValue<TData>(row: TData, column: ColumnConfig<TData>): any {\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n let value: any = row\n for (const key of keys) {\n value = value?.[key]\n }\n return value\n }\n\n return ''\n}\n\n/**\n * Formats a value for export (handles dates, objects, arrays)\n */\nfunction formatValueForExport(value: any): string {\n if (value == null) {\n return ''\n }\n\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n\n return String(value)\n}\n\n/**\n * Gets the header text for a column\n */\nfunction getColumnHeader<TData>(column: ColumnConfig<TData>): string {\n if (typeof column.header === 'string') {\n return column.header\n }\n return column.id\n}\n\n/**\n * Prepares data for export based on visible columns\n */\nfunction prepareExportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n includeHeaders: boolean = true\n): string[][] {\n const rows: string[][] = []\n\n // Add headers\n if (includeHeaders) {\n rows.push(columns.map(getColumnHeader))\n }\n\n // Add data rows\n for (const row of data) {\n const rowData: string[] = []\n for (const column of columns) {\n const value = getColumnValue(row, column)\n rowData.push(formatValueForExport(value))\n }\n rows.push(rowData)\n }\n\n return rows\n}\n\n/**\n * Converts array data to CSV string\n */\nfunction arrayToCSV(data: string[][]): string {\n return data\n .map(row =>\n row\n .map(cell => {\n // Escape quotes and wrap in quotes if contains comma, quote, or newline\n const needsQuotes = /[,\"\\n\\r]/.test(cell)\n if (needsQuotes) {\n return `\"${cell.replace(/\"/g, '\"\"')}\"`\n }\n return cell\n })\n .join(',')\n )\n .join('\\n')\n}\n\n/**\n * Triggers a download of the given content\n */\nfunction downloadFile(content: string | Blob, filename: string, mimeType: string): void {\n const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n\n/**\n * Exports data to CSV format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToCSV<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n const csv = arrayToCSV(exportData)\n\n downloadFile(csv, `${filename}.csv`, 'text/csv;charset=utf-8;')\n}\n\n/**\n * Exports data to Excel format (XLSX)\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToExcel<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n\n // Create workbook and worksheet\n const ws = XLSX.utils.aoa_to_sheet(exportData)\n const wb = XLSX.utils.book_new()\n XLSX.utils.book_append_sheet(wb, ws, 'Data')\n\n // Auto-size columns\n const columnWidths = columns.map((column, idx) => {\n const header = getColumnHeader(column)\n const maxWidth = exportData.reduce((max, row) => {\n const cellValue = row[idx] || ''\n return Math.max(max, cellValue.length)\n }, header.length)\n return { wch: Math.min(maxWidth + 2, 50) } // Max width of 50 chars\n })\n ws['!cols'] = columnWidths\n\n // Generate Excel file and trigger download\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n const blob = new Blob([excelBuffer], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n })\n\n downloadFile(blob, `${filename}.xlsx`, blob.type)\n}\n\n/**\n * Generic export function that routes to CSV or Excel based on format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param options Export options including format and filename\n */\nexport function exportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n options: ExportOptions\n): void {\n const { format, filename, includeHeaders = true } = options\n\n switch (format) {\n case 'csv':\n exportToCSV(data, columns, filename, includeHeaders)\n break\n case 'excel':\n exportToExcel(data, columns, filename, includeHeaders)\n break\n default:\n throw new Error(`Unsupported export format: ${format}`)\n }\n}\n\n/**\n * Helper to generate a filename with timestamp\n */\nexport function generateExportFilename(baseFilename: string): string {\n const now = new Date()\n const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, -5)\n return `${baseFilename}_${timestamp}`\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Download, FileSpreadsheet, FileText, Loader2 } from 'lucide-react'\nimport { ColumnConfig } from '../../types'\nimport { exportToCSV, exportToExcel, generateExportFilename } from '../../utils/export'\n\nexport type ExportScope = 'all' | 'filtered' | 'selected'\n\nexport interface ExportButtonProps<TData> {\n data: TData[]\n filteredData?: TData[]\n selectedData?: TData[]\n columns: ColumnConfig<TData>[]\n baseFilename?: string\n disabled?: boolean\n className?: string\n showProgress?: boolean\n onExportStart?: (format: 'csv' | 'excel', scope: ExportScope) => void\n onExportComplete?: (format: 'csv' | 'excel', scope: ExportScope, rowCount: number) => void\n onExportError?: (error: Error) => void\n}\n\nexport function ExportButton<TData>({\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename = 'export',\n disabled = false,\n className,\n showProgress = true,\n onExportStart,\n onExportComplete,\n onExportError,\n}: ExportButtonProps<TData>) {\n const [isExporting, setIsExporting] = useState(false)\n const [progress, setProgress] = useState(0)\n\n // Determine what export options are available\n const hasFilteredData = filteredData && filteredData.length > 0 && filteredData.length < data.length\n const hasSelectedData = selectedData && selectedData.length > 0\n\n const handleExport = useCallback(\n async (format: 'csv' | 'excel', scope: ExportScope) => {\n setIsExporting(true)\n setProgress(0)\n\n try {\n onExportStart?.(format, scope)\n\n // Determine which data to export\n let dataToExport: TData[]\n let scopeLabel: string\n\n switch (scope) {\n case 'selected':\n if (!selectedData || selectedData.length === 0) {\n throw new Error('No rows selected')\n }\n dataToExport = selectedData\n scopeLabel = 'selected'\n break\n case 'filtered':\n if (!filteredData || filteredData.length === 0) {\n throw new Error('No filtered data available')\n }\n dataToExport = filteredData\n scopeLabel = 'filtered'\n break\n case 'all':\n default:\n dataToExport = data\n scopeLabel = 'all'\n break\n }\n\n // Simulate progress for large datasets\n if (showProgress && dataToExport.length > 100) {\n setProgress(25)\n await new Promise(resolve => setTimeout(resolve, 100))\n setProgress(50)\n }\n\n // Generate filename with timestamp and scope\n const filename = `${baseFilename}_${scopeLabel}_${generateExportFilename('')}`.replace(\n /__/g,\n '_'\n )\n\n // Export based on format\n if (format === 'csv') {\n exportToCSV(dataToExport, columns, filename)\n } else {\n exportToExcel(dataToExport, columns, filename)\n }\n\n if (showProgress) {\n setProgress(100)\n }\n\n onExportComplete?.(format, scope, dataToExport.length)\n } catch (error) {\n console.error('Export failed:', error)\n const errorObj = error instanceof Error ? error : new Error('Export failed')\n onExportError?.(errorObj)\n } finally {\n // Reset state after a brief delay to show completion\n if (showProgress) {\n setTimeout(() => {\n setIsExporting(false)\n setProgress(0)\n }, 500)\n } else {\n setIsExporting(false)\n setProgress(0)\n }\n }\n },\n [\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename,\n showProgress,\n onExportStart,\n onExportComplete,\n onExportError,\n ]\n )\n\n const isDisabled = disabled || isExporting || data.length === 0\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isDisabled}\n className={className}\n aria-label=\"Export data\"\n >\n {isExporting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Exporting{showProgress && progress > 0 ? ` ${progress}%` : '...'}\n </>\n ) : (\n <>\n <Download className=\"mr-2 h-4 w-4\" />\n Export\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {/* CSV Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">CSV Format</div>\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'filtered')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'selected')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n\n <DropdownMenuSeparator />\n\n {/* Excel Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n Excel Format\n </div>\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'filtered')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'selected')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { BookmarkPlus, ChevronDown, Check, Trash2, Star } from 'lucide-react'\nimport { SavedView } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\nexport interface SavedViewsDropdownProps {\n views: SavedView[]\n currentViewId?: string | null\n onSaveView: (view: Omit<SavedView, 'id' | 'createdAt'>) => Promise<SavedView>\n onUpdateView?: (viewId: string, updates: Partial<SavedView>) => Promise<void>\n onDeleteView?: (viewId: string) => Promise<void>\n onLoadView: (viewId: string) => void\n // Current state to save\n getCurrentViewState: () => Omit<SavedView, 'id' | 'name' | 'createdAt'>\n}\n\nexport function SavedViewsDropdown({\n views,\n currentViewId,\n onSaveView,\n onUpdateView,\n onDeleteView,\n onLoadView,\n getCurrentViewState,\n}: SavedViewsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false)\n const [viewName, setViewName] = useState('')\n const [isDefault, setIsDefault] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n const currentView = views.find(v => v.id === currentViewId)\n\n const handleSaveView = async () => {\n if (!viewName.trim()) return\n\n setIsSaving(true)\n try {\n const viewState = getCurrentViewState()\n await onSaveView({\n name: viewName.trim(),\n isDefault,\n ...viewState,\n })\n setIsSaveDialogOpen(false)\n setViewName('')\n setIsDefault(false)\n } catch (error) {\n console.error('Failed to save view:', error)\n } finally {\n setIsSaving(false)\n }\n }\n\n const handleDeleteView = async (viewId: string) => {\n if (!onDeleteView) return\n\n try {\n await onDeleteView(viewId)\n setDeleteConfirmId(null)\n } catch (error) {\n console.error('Failed to delete view:', error)\n }\n }\n\n const handleSetDefault = async (viewId: string) => {\n if (!onUpdateView) return\n\n try {\n // Remove default from all other views\n for (const view of views) {\n if (view.isDefault && view.id !== viewId) {\n await onUpdateView(view.id, { isDefault: false })\n }\n }\n // Set this view as default\n await onUpdateView(viewId, { isDefault: true })\n } catch (error) {\n console.error('Failed to set default view:', error)\n }\n }\n\n return (\n <>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n {currentView ? currentView.name : 'Views'}\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel>Saved Views</DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {views.length === 0 ? (\n <DropdownMenuItem disabled>\n No saved views\n </DropdownMenuItem>\n ) : (\n views.map((view) => (\n <DropdownMenuItem\n key={view.id}\n className=\"flex items-center justify-between cursor-pointer\"\n onSelect={(e) => {\n e.preventDefault()\n if (deleteConfirmId === view.id) return\n onLoadView(view.id)\n setIsOpen(false)\n }}\n >\n <div className=\"flex items-center gap-2\">\n {currentViewId === view.id && (\n <Check className=\"h-4 w-4 text-primary\" />\n )}\n {currentViewId !== view.id && <div className=\"w-4\" />}\n <span>{view.name}</span>\n {view.isDefault && (\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onUpdateView && !view.isDefault && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleSetDefault(view.id)\n }}\n className=\"p-1 hover:bg-muted rounded opacity-50 hover:opacity-100\"\n title=\"Set as default\"\n >\n <Star className=\"h-3 w-3\" />\n </button>\n )}\n {onDeleteView && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n if (deleteConfirmId === view.id) {\n handleDeleteView(view.id)\n } else {\n setDeleteConfirmId(view.id)\n setTimeout(() => setDeleteConfirmId(null), 3000)\n }\n }}\n className={cn(\n 'p-1 hover:bg-muted rounded',\n deleteConfirmId === view.id\n ? 'text-red-600 hover:text-red-700'\n : 'opacity-50 hover:opacity-100'\n )}\n title={deleteConfirmId === view.id ? 'Click again to confirm' : 'Delete view'}\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n </DropdownMenuItem>\n ))\n )}\n\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={(e) => {\n e.preventDefault()\n setIsSaveDialogOpen(true)\n setIsOpen(false)\n }}\n >\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n Save Current View\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={isSaveDialogOpen} onOpenChange={setIsSaveDialogOpen}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>Save View</DialogTitle>\n <DialogDescription>\n Save your current table configuration as a named view.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"view-name\">View Name</Label>\n <Input\n id=\"view-name\"\n value={viewName}\n onChange={(e) => setViewName(e.target.value)}\n placeholder=\"My Custom View\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSaveView()\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"is-default\"\n checked={isDefault}\n onCheckedChange={(checked) => setIsDefault(checked === true)}\n />\n <Label htmlFor=\"is-default\" className=\"cursor-pointer\">\n Set as default view\n </Label>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setIsSaveDialogOpen(false)}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSaveView}\n disabled={!viewName.trim() || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save View'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","'use client'\n\nimport { Input } from '../../../ui/input'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Columns3, ChevronDown } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\nimport { ExportButton, ExportButtonProps } from './ExportButton'\nimport { SavedViewsDropdown, SavedViewsDropdownProps } from './SavedViewsDropdown'\nimport { ColumnConfig, ColumnVisibilityState, SavedView } from '../../types'\nimport { RefObject } from 'react'\n\nexport interface StandardTableToolbarProps<TData> {\n // Search\n searchEnabled?: boolean\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n searchInputRef?: RefObject<HTMLInputElement | null>\n searchAutoFocus?: boolean\n\n // Column visibility\n columnVisibilityEnabled?: boolean\n hideableColumns?: ColumnConfig<TData>[]\n columnVisibility?: ColumnVisibilityState\n onToggleColumnVisibility?: (columnId: string) => void\n\n // Export\n exportEnabled?: boolean\n exportProps?: Omit<ExportButtonProps<TData>, 'data' | 'columns'>\n exportData?: TData[]\n exportColumns?: ColumnConfig<TData>[]\n\n // Saved views\n savedViewsEnabled?: boolean\n savedViews?: SavedView[]\n currentViewId?: string | null\n savedViewsProps?: Omit<SavedViewsDropdownProps, 'views' | 'currentViewId'>\n\n className?: string\n}\n\n/**\n * StandardTableToolbar provides a consistent toolbar layout across all tables.\n *\n * Layout (left to right):\n * - Search input (left)\n * - Export button\n * - Columns dropdown (right)\n */\nexport function StandardTableToolbar<TData>({\n searchEnabled,\n searchPlaceholder = 'Search...',\n searchValue = '',\n onSearchChange,\n searchInputRef,\n searchAutoFocus,\n columnVisibilityEnabled,\n hideableColumns = [],\n columnVisibility = {},\n onToggleColumnVisibility,\n exportEnabled,\n exportProps,\n exportData = [],\n exportColumns = [],\n savedViewsEnabled,\n savedViews = [],\n currentViewId,\n savedViewsProps,\n className,\n}: StandardTableToolbarProps<TData>) {\n const hasRightSideButtons = exportEnabled || columnVisibilityEnabled || savedViewsEnabled\n\n return (\n <div className={cn('flex items-center justify-between gap-4', className)}>\n {/* Left side: Search */}\n <div className=\"flex items-center gap-3 flex-1\">\n {searchEnabled ? (\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n ref={searchInputRef}\n autoFocus={searchAutoFocus}\n className=\"max-w-xl w-full\"\n />\n ) : (\n <div /> // Spacer\n )}\n </div>\n\n {/* Right side: Toolbar buttons */}\n {hasRightSideButtons && (\n <div className=\"flex items-center gap-2\">\n {/* Export button */}\n {exportEnabled && exportProps && (\n <ExportButton\n data={exportData}\n columns={exportColumns}\n {...exportProps}\n />\n )}\n\n {/* Column visibility dropdown */}\n {columnVisibilityEnabled && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Columns3 className=\"mr-2 h-4 w-4\" />\n Columns\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {hideableColumns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={columnVisibility[column.id] !== false}\n onCheckedChange={() => onToggleColumnVisibility?.(column.id)}\n >\n {typeof column.header === 'string' ? column.header : column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Saved views dropdown */}\n {savedViewsEnabled && savedViewsProps && (\n <SavedViewsDropdown\n views={savedViews}\n currentViewId={currentViewId}\n {...savedViewsProps}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useMemo, useRef, useState, useCallback } from 'react'\nimport { UnifiedTableProps, ColumnVisibilityState, SortState, SavedView } from './types'\nimport { useSelection, usePagination, useFilters, useTableURL, useColumnReorder, useColumnResize } from './hooks'\nimport { useTableKeyboard } from './hooks/useTableKeyboard'\nimport { TableFilters } from './components/TableFilters'\nimport { BulkActionBar } from './components/BulkActionBar'\nimport { DataTableCore } from './components/DataTableCore'\nimport { TablePagination } from './components/TablePagination'\nimport { StandardTableToolbar } from './components/Toolbar'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../../utils'\n\nexport function UnifiedTable<TData>({\n data,\n columns,\n tableId,\n getRowId,\n pagination: paginationConfig,\n selection: selectionConfig,\n filters: filtersConfig,\n bulkActions = [],\n rowActions = [],\n search: searchConfig,\n sorting: sortingConfig,\n columnVisibility: columnVisibilityConfig,\n columnReorder: columnReorderConfig,\n columnResize: columnResizeConfig,\n inlineEdit: inlineEditConfig,\n savedViews: savedViewsConfig,\n urlPersistence: urlPersistenceConfig,\n export: exportConfig,\n onRowClick,\n mobileConfig,\n loading = false,\n loadingRows = new Set(),\n className,\n emptyState,\n errorState,\n}: UnifiedTableProps<TData>) {\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const shouldRestoreFocusRef = useRef(false)\n const tableRef = useRef<HTMLDivElement>(null)\n\n // URL state persistence hook\n const urlState = useTableURL({\n tableId,\n persistToUrl: urlPersistenceConfig?.enabled ?? false,\n debounceMs: urlPersistenceConfig?.debounceMs ?? 300,\n })\n\n // Initialize state from URL if persistence is enabled\n const initialURLState = useMemo(() => {\n if (!urlPersistenceConfig?.enabled) return null\n return urlState.getURLState()\n }, []) // Only run once on mount\n\n // Column visibility state\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n // Try to load from localStorage if persistKey is set\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`table-columns-${columnVisibilityConfig.persistKey}`)\n if (stored) {\n return JSON.parse(stored)\n }\n } catch {\n // Ignore localStorage errors\n }\n }\n\n // Initialize default visibility\n const initial: ColumnVisibilityState = {}\n columns.forEach(col => {\n if (columnVisibilityConfig?.defaultVisible) {\n initial[col.id] = columnVisibilityConfig.defaultVisible.includes(col.id)\n } else {\n initial[col.id] = true // Default all visible\n }\n })\n return initial\n })\n\n // Client-side sorting state (used when no external sorting config is provided)\n const [localSort, setLocalSort] = useState<SortState>(() => {\n // Initialize from URL if available\n if (initialURLState) {\n return {\n sortBy: initialURLState.sortBy,\n sortDirection: initialURLState.sortDirection,\n }\n }\n return { sortBy: null, sortDirection: 'asc' }\n })\n\n // Persist column visibility\n useEffect(() => {\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n localStorage.setItem(\n `table-columns-${columnVisibilityConfig.persistKey}`,\n JSON.stringify(columnVisibility)\n )\n } catch {\n // Ignore localStorage errors\n }\n }\n }, [columnVisibility, columnVisibilityConfig?.persistKey])\n\n // Toggle column visibility\n const toggleColumnVisibility = useCallback((columnId: string) => {\n // Don't allow toggling always-visible columns\n if (columnVisibilityConfig?.alwaysVisible?.includes(columnId)) {\n return\n }\n setColumnVisibility(prev => ({\n ...prev,\n [columnId]: !prev[columnId]\n }))\n }, [columnVisibilityConfig?.alwaysVisible])\n\n // Filter visible columns\n const visibleColumns = useMemo(() => {\n if (!columnVisibilityConfig?.enabled) {\n return columns\n }\n return columns.filter(col => columnVisibility[col.id] !== false)\n }, [columns, columnVisibility, columnVisibilityConfig?.enabled])\n\n // Get hideable columns for the dropdown\n const hideableColumns = useMemo(() => {\n return columns.filter(col => {\n // Can't hide if hideable is explicitly false\n if (col.hideable === false) return false\n // Can't hide if in alwaysVisible list\n if (columnVisibilityConfig?.alwaysVisible?.includes(col.id)) return false\n return true\n })\n }, [columns, columnVisibilityConfig?.alwaysVisible])\n\n // Column reordering hook\n const columnReorder = useColumnReorder({\n columns: visibleColumns,\n initialOrder: columnReorderConfig?.initialOrder,\n enabled: columnReorderConfig?.enabled ?? false,\n onOrderChange: columnReorderConfig?.onOrderChange,\n })\n\n // Final columns to display (ordered if reorder enabled)\n const displayColumns = columnReorderConfig?.enabled\n ? columnReorder.orderedColumns\n : visibleColumns\n\n // Column resize hook\n const columnResize = useColumnResize({\n enabled: columnResizeConfig?.enabled ?? false,\n initialWidths: columnResizeConfig?.initialWidths,\n minWidth: columnResizeConfig?.minWidth ?? 50,\n onWidthChange: columnResizeConfig?.onWidthChange,\n })\n\n // Determine sorting state and handler\n const sortingEnabled = sortingConfig?.enabled ?? true // Default to enabled\n const currentSortBy = sortingConfig?.value?.sortBy ?? localSort.sortBy\n const currentSortDirection = sortingConfig?.value?.sortDirection ?? localSort.sortDirection\n\n const handleSort = useCallback((columnId: string) => {\n const newDirection = currentSortBy === columnId && currentSortDirection === 'asc' ? 'desc' : 'asc'\n const newSort = { sortBy: columnId, sortDirection: newDirection as 'asc' | 'desc' }\n\n if (sortingConfig?.onChange) {\n sortingConfig.onChange(newSort)\n } else {\n setLocalSort(newSort)\n }\n\n // Sync to URL if enabled\n urlState.setSortToURL(newSort)\n }, [currentSortBy, currentSortDirection, sortingConfig, urlState])\n\n // Ensure data is always an array\n const safeData = useMemo(() => Array.isArray(data) ? data : [], [data])\n\n // Apply client-side sorting if no server-side sorting\n const sortedData = useMemo(() => {\n if (sortingConfig?.serverSide || !currentSortBy) {\n return safeData\n }\n\n const column = columns.find(c => c.id === currentSortBy)\n if (!column) return safeData\n\n return [...safeData].sort((a, b) => {\n let valueA: any\n let valueB: any\n\n if (column.sortingFn) {\n return currentSortDirection === 'asc'\n ? column.sortingFn(a, b)\n : column.sortingFn(b, a)\n }\n\n if (column.accessorFn) {\n valueA = column.accessorFn(a)\n valueB = column.accessorFn(b)\n } else if (column.accessorKey) {\n // Handle nested keys like 'firm.name'\n const keys = column.accessorKey.split('.')\n valueA = keys.reduce((obj, key) => obj?.[key], a as any)\n valueB = keys.reduce((obj, key) => obj?.[key], b as any)\n } else {\n return 0\n }\n\n // Handle null/undefined\n if (valueA == null && valueB == null) return 0\n if (valueA == null) return currentSortDirection === 'asc' ? 1 : -1\n if (valueB == null) return currentSortDirection === 'asc' ? -1 : 1\n\n // Compare\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n const comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' })\n return currentSortDirection === 'asc' ? comparison : -comparison\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return currentSortDirection === 'asc' ? valueA - valueB : valueB - valueA\n }\n\n const comparison = String(valueA).localeCompare(String(valueB))\n return currentSortDirection === 'asc' ? comparison : -comparison\n })\n }, [safeData, columns, currentSortBy, currentSortDirection, sortingConfig?.serverSide])\n\n // Pagination hook\n const pagination = usePagination({\n totalCount: paginationConfig?.totalCount || sortedData.length,\n initialPageSize: paginationConfig?.pageSize || 25,\n initialPage: paginationConfig?.currentPage || (initialURLState?.page ?? 1),\n serverSide: paginationConfig?.serverSide || false,\n onPageChange: paginationConfig?.onPageChange,\n })\n\n // Selection hook - supports both controlled and uncontrolled modes\n const selection = useSelection({\n currentPageData: sortedData,\n totalCount: paginationConfig?.totalCount || sortedData.length,\n getRowId,\n onSelectionChange: selectionConfig?.onSelectionChange,\n onSelectAllPages: selectionConfig?.onSelectAllPages,\n // External controlled state\n externalSelectedIds: selectionConfig?.selectedIds,\n externalSelectAllPages: selectionConfig?.selectAllPages,\n })\n\n // Filters hook\n const filters = useFilters({\n initialFilters: filtersConfig?.value || (initialURLState?.filters ?? {}),\n onChange: filtersConfig?.onChange,\n })\n\n // Get current view state for saving\n const getCurrentViewState = useCallback((): Omit<SavedView, 'id' | 'name' | 'createdAt'> => {\n return {\n columnVisibility: columnVisibilityConfig?.enabled ? columnVisibility : undefined,\n columnOrder: columnReorderConfig?.enabled ? columnReorder.columnOrder : undefined,\n sortBy: currentSortBy,\n sortDirection: currentSortDirection,\n filters: filtersConfig?.enabled ? filters.filters : undefined,\n pageSize: paginationConfig?.pageSize,\n }\n }, [\n columnVisibility,\n columnVisibilityConfig?.enabled,\n columnReorder.columnOrder,\n columnReorderConfig?.enabled,\n currentSortBy,\n currentSortDirection,\n filters.filters,\n filtersConfig?.enabled,\n paginationConfig?.pageSize,\n ])\n\n // Keyboard navigation hook\n const keyboard = useTableKeyboard({\n data: sortedData,\n getRowId,\n selectedIds: selection.selectedIds,\n onToggleRow: selection.toggleRow,\n onToggleAll: selection.toggleAll,\n onRowClick,\n onDelete: bulkActions.find(action => action.id === 'delete')?.onClick\n ? (ids) => {\n const deleteAction = bulkActions.find(action => action.id === 'delete')\n if (deleteAction) {\n deleteAction.onClick(ids)\n }\n }\n : undefined,\n tableRef,\n enabled: true,\n })\n\n // Restore focus to search input after state-driven rerenders (e.g., URL sync)\n useEffect(() => {\n if (!searchConfig?.enabled || !searchConfig.preserveFocus) return\n if (!shouldRestoreFocusRef.current) return\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n const len = searchConfig.value?.length ?? 0\n try {\n searchInputRef.current.setSelectionRange(len, len)\n } catch {\n // selection range may fail on some input types; ignore\n }\n }\n shouldRestoreFocusRef.current = false\n }, [searchConfig?.enabled, searchConfig?.preserveFocus, searchConfig?.value])\n\n // External selection state is now synced in useSelection hook\n\n // Sync pagination changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!paginationConfig?.enabled) return\n\n urlState.setPageToURL(pagination.currentPage)\n }, [pagination.currentPage, urlPersistenceConfig?.enabled, paginationConfig?.enabled, urlState])\n\n // Sync filter changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!filtersConfig?.enabled) return\n\n urlState.setFiltersToURL(filters.filters)\n }, [filters.filters, urlPersistenceConfig?.enabled, filtersConfig?.enabled, urlState])\n\n // Initialize search from URL on mount\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!searchConfig?.enabled) return\n if (!initialURLState?.search) return\n\n // Only set if search value is empty (first mount)\n if (!searchConfig.value && initialURLState.search) {\n searchConfig.onChange(initialURLState.search)\n }\n }, []) // Only run on mount\n\n // Check if all current page rows are selected\n const allRowsSelected = useMemo(() => {\n if (sortedData.length === 0) return false\n return sortedData.every(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId])\n\n // Prepare selected data for export\n const selectedDataForExport = useMemo(() => {\n if (!selectionConfig?.enabled || selection.selectedIds.size === 0) {\n return undefined\n }\n return sortedData.filter(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId, selectionConfig?.enabled])\n\n // Handle bulk action execution\n const handleExecuteBulkAction = async (action: typeof bulkActions[0]) => {\n const selectedIds = selection.selectAllPages\n ? new Set(sortedData.map(getRowId)) // In real implementation, this would fetch all IDs\n : selection.selectedIds\n\n // Show confirmation if needed\n if (action.confirmMessage) {\n const message = action.confirmMessage.replace('{count}', selectedIds.size.toString())\n if (!confirm(message)) {\n return\n }\n }\n\n // Check max selection\n if (action.maxSelection && selectedIds.size > action.maxSelection) {\n alert(`Maximum ${action.maxSelection} items can be selected for this action`)\n return\n }\n\n try {\n await action.onClick(selectedIds)\n // Clear selection after successful action\n selection.clearSelection()\n } catch (error) {\n console.error('Bulk action failed:', error)\n }\n }\n\n // Loading state\n if (loading && sortedData.length === 0) {\n return (\n <div className={cn('flex items-center justify-center p-12', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )\n }\n\n // Empty state\n if (!loading && sortedData.length === 0 && emptyState) {\n return <div className={className}>{emptyState}</div>\n }\n\n return (\n <div ref={tableRef} className={cn('space-y-4', className)} tabIndex={0}>\n {/* Standard Table Toolbar */}\n <StandardTableToolbar\n searchEnabled={searchConfig?.enabled}\n searchPlaceholder={searchConfig?.placeholder}\n searchValue={searchConfig?.value}\n onSearchChange={(value) => {\n if (searchConfig) {\n shouldRestoreFocusRef.current = true\n searchConfig.onChange(value)\n urlState.setSearchToURL(value)\n }\n }}\n searchInputRef={searchInputRef}\n searchAutoFocus={searchConfig?.autoFocus}\n columnVisibilityEnabled={columnVisibilityConfig?.enabled}\n hideableColumns={hideableColumns}\n columnVisibility={columnVisibility}\n onToggleColumnVisibility={toggleColumnVisibility}\n exportEnabled={exportConfig?.enabled}\n exportData={sortedData}\n exportColumns={displayColumns}\n exportProps={exportConfig?.enabled ? {\n filteredData: sortedData.length < safeData.length ? sortedData : undefined,\n selectedData: selectedDataForExport,\n baseFilename: exportConfig.baseFilename,\n showProgress: exportConfig.showProgress,\n onExportStart: exportConfig.onExportStart,\n onExportComplete: exportConfig.onExportComplete,\n onExportError: exportConfig.onExportError,\n } : undefined}\n savedViewsEnabled={savedViewsConfig?.enabled}\n savedViews={savedViewsConfig?.views}\n currentViewId={savedViewsConfig?.currentViewId}\n savedViewsProps={savedViewsConfig?.enabled ? {\n onSaveView: savedViewsConfig.onSaveView,\n onUpdateView: savedViewsConfig.onUpdateView,\n onDeleteView: savedViewsConfig.onDeleteView,\n onLoadView: savedViewsConfig.onLoadView || (() => {}),\n getCurrentViewState,\n } : undefined}\n />\n\n {/* Filters */}\n {filtersConfig?.enabled && filtersConfig.config && (\n <TableFilters config={filtersConfig.config} filters={filters} />\n )}\n\n {/* Bulk Actions Bar */}\n {selectionConfig?.enabled && bulkActions.length > 0 && (\n <BulkActionBar\n selectedCount={selection.getSelectedCount()}\n selectAllPages={selection.selectAllPages}\n totalCount={paginationConfig?.totalCount || sortedData.length}\n bulkActions={bulkActions}\n onClearSelection={selection.clearSelection}\n onExecuteAction={handleExecuteBulkAction}\n />\n )}\n\n {/* Selection summary - only show when no bulk actions (BulkActionBar handles this otherwise) */}\n {selectionConfig?.enabled && selection.getSelectedCount() > 0 && bulkActions.length === 0 && (\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div>\n {selection.selectAllPages ? (\n <span className=\"font-medium text-blue-600\">\n All {paginationConfig?.totalCount || sortedData.length} items selected\n </span>\n ) : (\n <span>\n {selection.getSelectedCount()} item{selection.getSelectedCount() === 1 ? '' : 's'} selected{allRowsSelected ? ' on this page' : ''}\n </span>\n )}\n </div>\n\n {/* Show \"Select All Pages\" button if not all pages selected and there are multiple pages */}\n {!selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Select all {paginationConfig.totalCount} items\n </button>\n )}\n </div>\n )}\n\n {/* Select all pages option - shown below bulk action bar when applicable */}\n {selectionConfig?.enabled &&\n bulkActions.length > 0 &&\n !selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <div className=\"flex items-center justify-center p-2 bg-blue-50 border border-blue-200 rounded-lg\">\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium text-sm\"\n >\n Select all {paginationConfig.totalCount} items across all pages\n </button>\n </div>\n )}\n\n {/* Data Table */}\n <DataTableCore\n data={sortedData}\n columns={displayColumns}\n getRowId={getRowId}\n selectionEnabled={selectionConfig?.enabled}\n selectedIds={selection.selectedIds}\n onToggleRow={selection.toggleRow}\n onToggleAll={selection.toggleAll}\n allRowsSelected={allRowsSelected}\n renderSelectionCell={selectionConfig?.renderSelectionCell}\n sortingEnabled={sortingEnabled}\n sortBy={currentSortBy}\n sortDirection={currentSortDirection}\n onSort={handleSort}\n columnReorderEnabled={columnReorderConfig?.enabled}\n onColumnDragEnd={columnReorder.handleDragEnd}\n columnResizeEnabled={columnResizeConfig?.enabled}\n columnWidths={columnResize.columnWidths}\n onColumnResizeStart={columnResize.startResize}\n isResizing={columnResize.isResizing}\n inlineEditEnabled={inlineEditConfig?.enabled}\n onCellEdit={inlineEditConfig?.onSave}\n rowActions={rowActions}\n onRowClick={onRowClick}\n loadingRows={loadingRows}\n />\n\n {/* Pagination */}\n {paginationConfig?.enabled && (\n <TablePagination\n pagination={pagination}\n totalFilteredCount={paginationConfig.totalCount}\n />\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { cn } from '../../../../lib/utils'\nimport { MoreVertical } from 'lucide-react'\nimport { useState } from 'react'\nimport { CardActionsProps } from './types'\n\nexport function CardActions({\n actions,\n row,\n className,\n maxVisibleActions = 2\n}: CardActionsProps) {\n const [isExecuting, setIsExecuting] = useState<string | null>(null)\n\n const visibleActions = actions.filter((action) => {\n return !(action.hidden && action.hidden(row))\n })\n\n if (visibleActions.length === 0) {\n return null\n }\n\n const handleActionClick = async (action: any) => {\n if (action.disabled && action.disabled(row)) {\n return\n }\n\n setIsExecuting(action.id)\n try {\n await action.onClick(row)\n } finally {\n setIsExecuting(null)\n }\n }\n\n const primaryActions = visibleActions.slice(0, maxVisibleActions)\n const overflowActions = visibleActions.slice(maxVisibleActions)\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {primaryActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <Button\n key={action.id}\n variant={action.variant || 'ghost'}\n size=\"sm\"\n className={cn(\n 'h-9 min-w-[44px]',\n Icon && !action.label && 'w-9 p-0',\n action.className\n )}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n >\n {Icon && (\n <Icon className={cn(\n 'h-4 w-4',\n action.label && 'mr-1.5'\n )} />\n )}\n {action.label && (\n <span className=\"text-xs font-medium\">{action.label}</span>\n )}\n </Button>\n )\n })}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">More actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {overflowActions.map((action, index) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n className={cn(\n action.variant === 'destructive' && 'text-destructive focus:text-destructive',\n action.className\n )}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{action.label || 'Action'}</span>\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Card as UICard, CardContent, CardHeader, CardFooter } from '../../../ui/card'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { cn } from '../../../../lib/utils'\nimport { Loader2 } from 'lucide-react'\nimport { CardProps, MobileCardField } from './types'\nimport { CardActions } from './CardActions'\n\nfunction getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nfunction renderField(field: MobileCardField, row: any) {\n const value = getNestedValue(row, field.key)\n\n if (field.render) {\n return field.render(value, row)\n }\n\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground\">-</span>\n }\n\n if (typeof value === 'boolean') {\n return <span>{value ? 'Yes' : 'No'}</span>\n }\n\n return <span>{String(value)}</span>\n}\n\nexport function Card<TData = any>({\n row,\n config,\n rowId,\n isLoading = false,\n className\n}: CardProps<TData>) {\n const {\n titleKey,\n titleRender,\n subtitleKey,\n subtitleRender,\n imageKey,\n imageRender,\n primaryFields,\n secondaryFields,\n actions,\n renderCustomContent,\n renderCustomHeader,\n renderCustomFooter,\n showSelection,\n onSelectionChange,\n isSelected,\n onClick,\n headerClassName,\n contentClassName,\n footerClassName,\n } = config\n\n const handleClick = () => {\n if (onClick && !isLoading) {\n onClick(row)\n }\n }\n\n const handleSelectionChange = (checked: boolean) => {\n if (onSelectionChange && rowId) {\n onSelectionChange(rowId, checked)\n }\n }\n\n const selected = isSelected ? isSelected(row) : false\n\n return (\n <UICard\n className={cn(\n 'relative transition-all duration-200',\n onClick && !isLoading && 'cursor-pointer hover:shadow-md hover:border-primary/50',\n selected && 'ring-2 ring-primary border-primary',\n isLoading && 'opacity-60 pointer-events-none',\n className,\n config.className\n )}\n onClick={handleClick}\n >\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-background/50 rounded-lg z-10\">\n <Loader2 className=\"h-6 w-6 animate-spin text-primary\" />\n </div>\n )}\n\n <CardHeader className={cn('pb-3', headerClassName)}>\n {renderCustomHeader ? (\n renderCustomHeader(row)\n ) : (\n <div className=\"flex items-start gap-3\">\n {showSelection && (\n <div\n className=\"flex items-center pt-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selected}\n onCheckedChange={handleSelectionChange}\n aria-label=\"Select row\"\n className=\"h-5 w-5\"\n />\n </div>\n )}\n\n {(imageKey || imageRender) && (\n <div className=\"flex-shrink-0\">\n {imageRender ? imageRender(row) : (\n <div className=\"h-12 w-12 rounded-full bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center\">\n <span className=\"text-lg font-semibold text-primary\">\n {String(getNestedValue(row, titleKey) || '?').charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-base leading-tight truncate\">\n {titleRender ? titleRender(row) : getNestedValue(row, titleKey)}\n </h3>\n {subtitleKey && (\n <p className=\"text-sm text-muted-foreground mt-1 truncate\">\n {subtitleRender ? subtitleRender(row) : getNestedValue(row, subtitleKey)}\n </p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div onClick={(e) => e.stopPropagation()}>\n <CardActions\n actions={actions}\n row={row}\n maxVisibleActions={2}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </CardHeader>\n\n <CardContent className={cn('pt-0 space-y-4', contentClassName)}>\n {renderCustomContent ? (\n renderCustomContent(row)\n ) : (\n <>\n {primaryFields && primaryFields.length > 0 && (\n <div className=\"space-y-3\">\n {primaryFields.map((field) => (\n <div\n key={field.key}\n className={cn(\n 'flex justify-between items-center gap-2',\n field.className\n )}\n >\n <span className=\"text-sm font-medium text-muted-foreground flex-shrink-0\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}:\n </span>\n <div className=\"text-sm font-medium text-right truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {secondaryFields && secondaryFields.length > 0 && (\n <div className=\"border-t pt-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n {secondaryFields.map((field) => (\n <div\n key={field.key}\n className={cn('space-y-1', field.className)}\n >\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}\n </div>\n <div className=\"text-sm font-semibold truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n\n {renderCustomFooter && (\n <CardFooter className={cn('pt-0', footerClassName)}>\n {renderCustomFooter(row)}\n </CardFooter>\n )}\n </UICard>\n )\n}\n","import { ReactNode } from 'react'\n\nexport interface MobileCardField {\n key: string\n label?: string\n render?: (value: any, row: any) => ReactNode\n className?: string\n}\n\nexport interface MobileCardAction {\n id: string\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: (row: any) => void | Promise<void>\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n disabled?: (row: any) => boolean\n hidden?: (row: any) => boolean\n className?: string\n}\n\nexport interface MobileCardConfig<TData = any> {\n titleKey: string\n titleRender?: (row: TData) => ReactNode\n\n subtitleKey?: string\n subtitleRender?: (row: TData) => ReactNode\n\n imageKey?: string\n imageRender?: (row: TData) => ReactNode\n\n primaryFields: MobileCardField[]\n secondaryFields?: MobileCardField[]\n\n actions?: MobileCardAction[]\n\n renderCustomContent?: (row: TData) => ReactNode\n renderCustomHeader?: (row: TData) => ReactNode\n renderCustomFooter?: (row: TData) => ReactNode\n\n showSelection?: boolean\n onSelectionChange?: (id: string, selected: boolean) => void\n isSelected?: (row: TData) => boolean\n\n onClick?: (row: TData) => void\n\n className?: string\n headerClassName?: string\n contentClassName?: string\n footerClassName?: string\n}\n\nexport interface MobileViewProps<TData = any> {\n data: TData[]\n config: MobileCardConfig<TData>\n getRowId?: (row: TData) => string\n loading?: boolean\n loadingRows?: Set<string>\n emptyState?: ReactNode\n className?: string\n}\n\nexport interface CardProps<TData = any> {\n row: TData\n config: MobileCardConfig<TData>\n rowId?: string\n isLoading?: boolean\n className?: string\n}\n\nexport interface CardActionsProps {\n actions: MobileCardAction[]\n row: any\n className?: string\n maxVisibleActions?: number\n}\n\nexport const MOBILE_BREAKPOINT = 768 // px\n","'use client'\n\nimport { cn } from '../../../../lib/utils'\nimport { useEffect, useState } from 'react'\nimport { Card } from './Card'\nimport { MobileViewProps, MOBILE_BREAKPOINT } from './types'\n\nexport function MobileView<TData = any>({\n data,\n config,\n getRowId,\n loading = false,\n loadingRows,\n emptyState,\n className\n}: MobileViewProps<TData>) {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n\n checkMobile()\n window.addEventListener('resize', checkMobile)\n return () => window.removeEventListener('resize', checkMobile)\n }, [])\n\n if (data.length === 0 && !loading) {\n return (\n <div className={cn('flex items-center justify-center py-12', className)}>\n {emptyState || (\n <div className=\"text-center\">\n <p className=\"text-muted-foreground text-sm\">No data to display</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'space-y-4',\n isMobile && 'space-y-3',\n className\n )}\n >\n {data.map((row, index) => {\n const rowId = getRowId ? getRowId(row) : String(index)\n const isRowLoading = loadingRows?.has(rowId) || false\n\n return (\n <Card\n key={rowId}\n row={row}\n config={config}\n rowId={rowId}\n isLoading={isRowLoading}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Card } from './Card'\nexport { CardActions } from './CardActions'\nexport type {\n MobileViewProps,\n MobileCardConfig,\n MobileCardField,\n MobileCardAction,\n CardProps,\n CardActionsProps\n} from './types'\nexport { MOBILE_BREAKPOINT } from './types'\n","import { ReactNode } from 'react'\n\nexport type CellRenderer<TData = any> = (value: any, row: TData) => ReactNode\n\nexport interface RendererConfig {\n [columnId: string]: CellRenderer\n}\n\nexport function createCellRenderer<TData = any>(\n render: (value: any, row: TData) => ReactNode\n): CellRenderer<TData> {\n return render\n}\n\nexport function getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nexport const commonRenderers = {\n text: createCellRenderer((value) => String(value || '-')),\n\n number: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat().format(Number(value))\n }),\n\n currency: createCellRenderer((value, row, options?: { currency?: string; locale?: string }) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat(options?.locale || 'en-US', {\n style: 'currency',\n currency: options?.currency || 'USD',\n }).format(Number(value))\n }),\n\n percentage: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return `${Number(value).toFixed(2)}%`\n }),\n\n date: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleDateString()\n }),\n\n datetime: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleString()\n }),\n\n boolean: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return value ? 'Yes' : 'No'\n }),\n\n badge: createCellRenderer((value, row, options?: { variant?: 'default' | 'success' | 'warning' | 'error' }) => {\n if (!value) return null\n return value\n }),\n\n truncate: createCellRenderer((value, row, options?: { maxLength?: number }) => {\n if (!value) return '-'\n const str = String(value)\n const maxLength = options?.maxLength || 50\n if (str.length <= maxLength) return str\n return `${str.substring(0, maxLength)}...`\n }),\n\n array: createCellRenderer((value, row, options?: { separator?: string; maxItems?: number }) => {\n if (!Array.isArray(value) || value.length === 0) return '-'\n const maxItems = options?.maxItems || value.length\n const items = value.slice(0, maxItems)\n const separator = options?.separator || ', '\n const display = items.join(separator)\n if (value.length > maxItems) {\n return `${display} +${value.length - maxItems} more`\n }\n return display\n }),\n}\n\nexport function combineRenderers<TData = any>(\n ...renderers: CellRenderer<TData>[]\n): CellRenderer<TData> {\n return (value, row) => {\n for (const renderer of renderers) {\n const result = renderer(value, row)\n if (result !== null && result !== undefined) {\n return result\n }\n }\n return value\n }\n}\n","export interface TableTheme {\n name: string\n container: string\n header: string\n headerCell: string\n body: string\n row: string\n rowHover: string\n rowSelected: string\n cell: string\n pagination: string\n emptyState: string\n mobileCard: string\n mobileCardHeader: string\n mobileCardContent: string\n}\n\nexport const defaultTheme: TableTheme = {\n name: 'default',\n container: 'w-full',\n header: 'bg-muted/50',\n headerCell: 'px-4 py-3 text-left text-sm font-medium text-muted-foreground',\n body: '',\n row: 'border-b transition-colors',\n rowHover: 'hover:bg-muted/50',\n rowSelected: 'bg-primary/10 border-primary',\n cell: 'px-4 py-3 text-sm',\n pagination: 'flex items-center justify-between px-4 py-3 border-t',\n emptyState: 'flex items-center justify-center py-12 text-muted-foreground',\n mobileCard: 'rounded-lg border bg-card shadow-sm',\n mobileCardHeader: 'p-4 pb-2',\n mobileCardContent: 'p-4 pt-2',\n}\n\nexport const compactTheme: TableTheme = {\n ...defaultTheme,\n name: 'compact',\n headerCell: 'px-2 py-2 text-left text-xs font-medium text-muted-foreground',\n cell: 'px-2 py-2 text-xs',\n pagination: 'flex items-center justify-between px-2 py-2 border-t',\n mobileCardHeader: 'p-3 pb-1',\n mobileCardContent: 'p-3 pt-1',\n}\n\nexport const spaciousTheme: TableTheme = {\n ...defaultTheme,\n name: 'spacious',\n headerCell: 'px-6 py-4 text-left text-sm font-medium text-muted-foreground',\n cell: 'px-6 py-4 text-sm',\n pagination: 'flex items-center justify-between px-6 py-4 border-t',\n mobileCardHeader: 'p-6 pb-3',\n mobileCardContent: 'p-6 pt-3',\n}\n\nexport const minimalTheme: TableTheme = {\n ...defaultTheme,\n name: 'minimal',\n header: '',\n headerCell: 'px-4 py-3 text-left text-sm font-semibold',\n row: 'border-b border-border/50',\n rowHover: 'hover:bg-muted/30',\n mobileCard: 'rounded-lg border border-border/50 bg-card',\n}\n\nexport const themes = {\n default: defaultTheme,\n compact: compactTheme,\n spacious: spaciousTheme,\n minimal: minimalTheme,\n}\n\nexport type ThemeName = keyof typeof themes\n\nexport function getTheme(themeName: ThemeName = 'default'): TableTheme {\n return themes[themeName] || defaultTheme\n}\n\nexport function createCustomTheme(\n baseTheme: ThemeName = 'default',\n overrides: Partial<TableTheme>\n): TableTheme {\n return {\n ...themes[baseTheme],\n ...overrides,\n name: overrides.name || `custom-${baseTheme}`,\n }\n}\n","import { MobileCardConfig } from '../components/MobileView/types'\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\nexport function validateMobileCardConfig<TData = any>(\n config: MobileCardConfig<TData>\n): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!config.titleKey && !config.titleRender) {\n errors.push('Mobile card config must have either titleKey or titleRender')\n }\n\n if (!config.primaryFields || config.primaryFields.length === 0) {\n warnings.push('Mobile card config has no primary fields defined')\n }\n\n if (config.primaryFields) {\n config.primaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Primary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.secondaryFields) {\n config.secondaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Secondary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.actions) {\n config.actions.forEach((action, index) => {\n if (!action.id) {\n errors.push(`Action at index ${index} must have an id`)\n }\n if (!action.onClick) {\n errors.push(`Action '${action.id || index}' must have an onClick handler`)\n }\n if (!action.label && !action.icon) {\n warnings.push(`Action '${action.id || index}' should have either a label or icon`)\n }\n })\n }\n\n if (config.showSelection && !config.onSelectionChange) {\n warnings.push('showSelection is enabled but onSelectionChange handler is not provided')\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function validateColumnConfig(columns: any[]): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!columns || columns.length === 0) {\n errors.push('At least one column must be defined')\n return { valid: false, errors, warnings }\n }\n\n const columnIds = new Set<string>()\n\n columns.forEach((column, index) => {\n if (!column.id && !column.accessorKey) {\n errors.push(`Column at index ${index} must have either id or accessorKey`)\n }\n\n const columnId = column.id || column.accessorKey\n\n if (columnIds.has(columnId)) {\n errors.push(`Duplicate column id: '${columnId}'`)\n }\n columnIds.add(columnId)\n\n if (!column.header && !column.hideHeader) {\n warnings.push(`Column '${columnId}' has no header defined`)\n }\n\n if (!column.cell && !column.accessorKey && !column.accessorFn) {\n warnings.push(`Column '${columnId}' has no way to access data (missing cell, accessorKey, or accessorFn)`)\n }\n })\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function logValidationResults(\n configName: string,\n result: ValidationResult,\n throwOnError: boolean = false\n): void {\n if (result.errors.length > 0) {\n console.error(`[${configName}] Validation Errors:`, result.errors)\n if (throwOnError) {\n throw new Error(`${configName} validation failed: ${result.errors.join(', ')}`)\n }\n }\n\n if (result.warnings.length > 0) {\n console.warn(`[${configName}] Validation Warnings:`, result.warnings)\n }\n\n if (result.valid && result.warnings.length === 0) {\n console.log(`[${configName}] Configuration is valid`)\n }\n}\n","'use client';\n\nimport { ReactNode, useState } from 'react';\nimport Link from 'next/link';\nimport { usePathname } from 'next/navigation';\nimport { cn } from '../../lib/utils';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Button } from '../ui/button';\n\nexport interface SidebarLink {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface SidebarSection {\n title?: string;\n links: SidebarLink[];\n}\n\nexport interface SidebarProps {\n /**\n * Application name/logo\n */\n appName: string;\n /**\n * Navigation sections\n */\n sections: SidebarSection[];\n /**\n * User dropdown content (rendered at bottom of sidebar)\n */\n userDropdown?: ReactNode;\n /**\n * Additional className for sidebar\n */\n className?: string;\n /**\n * Whether sidebar is collapsible\n */\n collapsible?: boolean;\n /**\n * Default collapsed state\n */\n defaultCollapsed?: boolean;\n}\n\nexport function Sidebar({\n appName,\n sections,\n userDropdown,\n className,\n collapsible = true,\n defaultCollapsed = false,\n}: SidebarProps) {\n const pathname = usePathname();\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n const isActivePath = (href: string) => {\n if (href === '/') {\n return pathname === '/';\n }\n return pathname.startsWith(href);\n };\n\n return (\n <div\n className={cn(\n 'fixed left-0 inset-y-0 z-30 flex flex-col bg-gray-900 text-white transition-all duration-200',\n collapsed ? 'w-20' : 'w-64',\n className\n )}\n >\n {/* Logo */}\n <div className=\"p-4 border-b border-gray-800\">\n <Link\n href=\"/\"\n className={cn(\n 'font-bold hover:text-primary-400 transition-colors',\n collapsed ? 'text-lg' : 'text-xl'\n )}\n >\n {collapsed ? appName.substring(0, 2).toUpperCase() : appName}\n </Link>\n </div>\n\n {/* Navigation */}\n <nav className=\"flex-1 overflow-y-auto p-4 space-y-6\">\n {sections.map((section, idx) => (\n <div key={idx}>\n {section.title && !collapsed && (\n <h3 className=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2 px-3\">\n {section.title}\n </h3>\n )}\n <div className=\"space-y-1\">\n {section.links.map((link) => {\n const isActive = isActivePath(link.href);\n return (\n <Link\n key={link.href}\n href={link.href}\n className={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-md text-sm font-medium transition-colors',\n isActive\n ? 'bg-primary-600 text-white'\n : 'text-gray-300 hover:bg-gray-800 hover:text-white',\n collapsed && 'justify-center'\n )}\n >\n {link.icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">\n {link.icon}\n </span>\n )}\n {!collapsed && <span>{link.label}</span>}\n </Link>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n\n {/* User Dropdown */}\n {userDropdown && (\n <div className=\"p-4 border-t border-gray-800\">\n {userDropdown}\n </div>\n )}\n\n {/* Collapse Toggle */}\n {collapsible && (\n <div className={cn('p-4 border-t border-gray-800', userDropdown && 'border-t-0')}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className=\"w-full text-gray-400 hover:text-white hover:bg-gray-800\"\n >\n {collapsed ? (\n <ChevronRight className=\"w-5 h-5\" />\n ) : (\n <>\n <ChevronLeft className=\"w-5 h-5 mr-2\" />\n <span>Collapse</span>\n </>\n )}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Layout wrapper that adds proper spacing for sidebar\n */\nexport interface SidebarLayoutProps {\n children: ReactNode;\n collapsed?: boolean;\n}\n\nexport function SidebarLayout({ children, collapsed = false }: SidebarLayoutProps) {\n return (\n <div className=\"flex h-screen bg-gray-50\">\n {/* Spacer for fixed sidebar */}\n <div className={cn('flex-shrink-0 transition-all duration-200', collapsed ? 'w-20' : 'w-64')} />\n\n {/* Main content area */}\n <div className=\"flex-1 overflow-auto\">\n <main className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import DOMPurify from 'isomorphic-dompurify';\nimport { type ElementType, type HTMLAttributes } from 'react';\n\ninterface SafeHtmlProps extends HTMLAttributes<HTMLElement> {\n html: string;\n as?: ElementType;\n}\n\n/**\n * Renders user-supplied or external HTML safely by running it through DOMPurify.\n * Strips script tags, event handlers, javascript: URLs, and other XSS vectors.\n * Use this instead of dangerouslySetInnerHTML anywhere app content is rendered.\n */\nexport function SafeHtml({ html, as: Tag = 'div', ...props }: SafeHtmlProps) {\n const sanitized = DOMPurify.sanitize(html, { ALLOW_DATA_ATTR: false });\n // eslint-disable-next-line react/no-danger\n return <Tag {...props} dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n","import * as React from 'react'\n\nconst TOAST_LIMIT = 5\nconst TOAST_AUTO_DISMISS = 5000\n\nexport type ToastVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info'\n\nexport interface ToasterToast {\n id: string\n title?: string\n description?: string\n action?: React.ReactNode\n variant?: ToastVariant\n duration?: number\n}\n\ntype Action =\n | { type: 'ADD_TOAST'; toast: ToasterToast }\n | { type: 'UPDATE_TOAST'; toast: Partial<ToasterToast> & { id: string } }\n | { type: 'DISMISS_TOAST'; toastId?: string }\n | { type: 'REMOVE_TOAST'; toastId?: string }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nfunction addToRemoveQueue(toastId: string, delay: number) {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({ type: 'REMOVE_TOAST', toastId })\n }, delay)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'ADD_TOAST':\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case 'UPDATE_TOAST':\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case 'DISMISS_TOAST': {\n const { toastId } = action\n\n if (toastId) {\n addToRemoveQueue(toastId, 300)\n } else {\n state.toasts.forEach((t) => addToRemoveQueue(t.id, 300))\n }\n\n return state\n }\n\n case 'REMOVE_TOAST':\n if (action.toastId === undefined) {\n return { ...state, toasts: [] }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => listener(memoryState))\n}\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_VALUE\n return count.toString()\n}\n\ntype ToastInput = Omit<ToasterToast, 'id'>\n\nfunction toast(props: ToastInput) {\n const id = genId()\n const duration = props.duration ?? TOAST_AUTO_DISMISS\n\n dispatch({\n type: 'ADD_TOAST',\n toast: { ...props, id },\n })\n\n // Auto-dismiss\n if (duration > 0) {\n addToRemoveQueue(id, duration)\n }\n\n const update = (updateProps: Partial<ToasterToast>) =>\n dispatch({ type: 'UPDATE_TOAST', toast: { ...updateProps, id } })\n\n const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id })\n\n return { id, dismiss, update }\n}\n\nfunction clearAllToasts() {\n // Clear all pending timeouts\n toastTimeouts.forEach((timeout) => clearTimeout(timeout))\n toastTimeouts.clear()\n dispatch({ type: 'REMOVE_TOAST', toastId: undefined })\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: 'DISMISS_TOAST', toastId }),\n clear: clearAllToasts,\n }\n}\n\nexport { useToast, toast, clearAllToasts }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { useToast, type ToastVariant } from './use-toast'\n\nconst variantClasses: Record<ToastVariant, string> = {\n default: 'bg-background border-border text-foreground',\n destructive: 'bg-destructive border-destructive text-destructive-foreground',\n success: 'bg-green-50 border-green-200 text-green-900',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-900',\n info: 'bg-blue-50 border-blue-200 text-blue-900',\n}\n\nexport function Toaster() {\n const { toasts, dismiss } = useToast()\n\n if (toasts.length === 0) return null\n\n return (\n <div\n className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 w-full max-w-sm\"\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <div\n key={t.id}\n className={cn(\n 'rounded-lg border p-4 shadow-lg transition-all animate-in slide-in-from-bottom-2 fade-in-0',\n variantClasses[t.variant ?? 'default']\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1\">\n {t.title && (\n <div className=\"text-sm font-semibold\">{t.title}</div>\n )}\n {t.description && (\n <div className=\"text-sm opacity-90 mt-1\">{t.description}</div>\n )}\n </div>\n <button\n onClick={() => dismiss(t.id)}\n className=\"shrink-0 rounded-sm opacity-70 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss notification\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n {t.action && <div className=\"mt-2\">{t.action}</div>}\n </div>\n ))}\n </div>\n )\n}\n","import { toast } from './use-toast'\n\nexport interface NotifyOptions {\n title?: string\n description?: string\n duration?: number\n}\n\nfunction success(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'success', ...opts })\n}\n\nfunction error(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'destructive', ...opts })\n}\n\nfunction warning(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'warning', ...opts })\n}\n\nfunction info(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'info', ...opts })\n}\n\nexport const notify = { success, error, warning, info }\n\nexport function useNotify() {\n return notify\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface EmptyStateAction {\n label: string\n onClick: () => void\n}\n\nexport interface EmptyStateProps {\n title: string\n description?: string\n action?: EmptyStateAction\n className?: string\n}\n\nexport function EmptyState({\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <h3 className=\"text-xl font-semibold text-foreground mb-3\">{title}</h3>\n {description && (\n <p className=\"text-base text-muted-foreground mb-8 max-w-md leading-relaxed\">\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium bg-primary text-primary-foreground shadow hover:bg-primary/90 h-9 px-4 py-2 transition-colors\"\n aria-label={action.label}\n >\n {action.label}\n </button>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { cn } from '../../lib/utils'\n\ninterface DialogContextValue {\n isLoading: boolean\n setIsLoading: (loading: boolean) => void\n canClose: boolean\n setCanClose: (canClose: boolean) => void\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\nfunction useDialogContext() {\n const context = React.useContext(DialogContext)\n if (!context) {\n throw new Error('Dialog components must be used within BaseDialog')\n }\n return context\n}\n\nexport interface BaseDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n size?: 'sm' | 'md' | 'lg'\n loading?: boolean\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n}\n\nexport function BaseDialog({\n open,\n onOpenChange,\n children,\n size = 'md',\n loading = false,\n}: BaseDialogProps) {\n const [isLoading, setIsLoading] = React.useState(loading)\n const [canClose, setCanClose] = React.useState(!loading)\n\n React.useEffect(() => {\n setIsLoading(loading)\n setCanClose(!loading)\n }, [loading])\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (!newOpen && !canClose) {\n return\n }\n onOpenChange(newOpen)\n },\n [canClose, onOpenChange]\n )\n\n const contextValue = React.useMemo(\n () => ({ isLoading, setIsLoading, canClose, setCanClose }),\n [isLoading, canClose]\n )\n\n return (\n <DialogContext.Provider value={contextValue}>\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n sizeClasses[size]\n )}\n onInteractOutside={(e) => {\n if (!canClose) e.preventDefault()\n }}\n onEscapeKeyDown={(e) => {\n if (!canClose) e.preventDefault()\n }}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n )\n}\n\nexport interface DialogHeaderProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogHeader({ children, className }: DialogHeaderProps) {\n const { canClose } = useDialogContext()\n\n return (\n <div className={cn('flex items-start justify-between', className)}>\n <div className=\"flex flex-col space-y-1.5\">{children}</div>\n <DialogPrimitive.Close\n className={cn(\n 'rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none',\n !canClose && 'pointer-events-none opacity-30'\n )}\n disabled={!canClose}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </div>\n )\n}\n\nexport interface DialogTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogTitle({ children, className }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n className={cn(\n 'text-lg font-semibold leading-none tracking-tight',\n className\n )}\n >\n {children}\n </DialogPrimitive.Title>\n )\n}\n\nexport interface DialogBodyProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogBody({ children, className }: DialogBodyProps) {\n return (\n <div className={cn('py-4 overflow-y-auto', className)}>{children}</div>\n )\n}\n\nexport interface DialogFooterProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogFooter({ children, className }: DialogFooterProps) {\n return (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n// Compound component pattern\nBaseDialog.Header = DialogHeader\nBaseDialog.Title = DialogTitle\nBaseDialog.Body = DialogBody\nBaseDialog.Footer = DialogFooter\n\nexport { useDialogContext }\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface StatusBadgeConfig {\n label: string\n className: string\n}\n\nexport interface StatusBadgeProps<T extends string> {\n status: T\n config: Record<T, StatusBadgeConfig>\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-xs',\n}\n\nexport function StatusBadge<T extends string>({\n status,\n config,\n size = 'md',\n className,\n}: StatusBadgeProps<T>) {\n const entry = config[status]\n\n if (!entry) {\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium bg-gray-100 text-gray-700 border border-gray-200',\n sizeClasses[size],\n className\n )}\n >\n {status}\n </span>\n )\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium',\n sizeClasses[size],\n entry.className,\n className\n )}\n >\n {entry.label}\n </span>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface TableSkeletonProps {\n rows?: number\n columns?: number\n className?: string\n}\n\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n className,\n}: TableSkeletonProps) {\n return (\n <div className={cn('bg-background rounded-lg border', className)}>\n {/* Header skeleton */}\n <div className=\"p-4 border-b\">\n <div className=\"flex justify-between items-center gap-4\">\n <div className=\"h-10 w-full max-w-sm animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-10 w-24 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n\n {/* Table body skeleton */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead className=\"border-b bg-muted/50\">\n <tr>\n {Array.from({ length: columns }).map((_, i) => (\n <th key={i} className=\"p-4 text-left\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <tr key={rowIndex} className=\"border-b last:border-b-0\">\n {Array.from({ length: columns }).map((_, colIndex) => (\n <td key={colIndex} className=\"p-4\">\n <div className=\"h-4 w-full max-w-[200px] animate-pulse rounded-md bg-gray-200\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination skeleton */}\n <div className=\"p-4 border-t flex justify-between items-center\">\n <div className=\"h-4 w-40 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface DashboardSkeletonProps {\n cards?: number\n className?: string\n}\n\nexport function DashboardSkeleton({\n cards = 4,\n className,\n}: DashboardSkeletonProps) {\n return (\n <div className={cn('grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4', className)}>\n {Array.from({ length: cards }).map((_, i) => (\n <div key={i} className=\"rounded-lg border bg-background p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-8 w-8 animate-pulse rounded-md bg-gray-200\" />\n </div>\n <div className=\"h-8 w-20 animate-pulse rounded-md bg-gray-200 mb-2\" />\n <div className=\"h-3 w-32 animate-pulse rounded-md bg-gray-200\" />\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Check } from 'lucide-react'\n\nexport interface StepConfig {\n label: string\n description?: string\n}\n\nexport interface StepIndicatorProps {\n steps: StepConfig[]\n currentIndex: number\n className?: string\n}\n\nexport function StepIndicator({ steps, currentIndex, className = '' }: StepIndicatorProps) {\n return (\n <ol className={`flex items-center gap-0 ${className}`}>\n {steps.map((step, index) => {\n const isCompleted = index < currentIndex\n const isActive = index === currentIndex\n const isLast = index === steps.length - 1\n\n return (\n <li key={index} className={`flex items-center ${!isLast ? 'flex-1' : ''}`}>\n <div className=\"flex flex-col items-center\">\n <div\n className={[\n 'flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-medium transition-colors',\n isCompleted\n ? 'border-primary-600 bg-primary-600 text-white'\n : isActive\n ? 'border-primary-600 bg-white text-primary-600'\n : 'border-gray-300 bg-white text-gray-400',\n ].join(' ')}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : index + 1}\n </div>\n <span\n className={[\n 'mt-1 text-xs font-medium',\n isActive ? 'text-primary-600' : isCompleted ? 'text-gray-600' : 'text-gray-400',\n ].join(' ')}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n className={[\n 'h-0.5 flex-1 mx-2 mb-4 transition-colors',\n isCompleted ? 'bg-primary-600' : 'bg-gray-200',\n ].join(' ')}\n />\n )}\n </li>\n )\n })}\n </ol>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/components/ui/accordion.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/button.tsx","../../src/components/ui/calendar.tsx","../../src/components/ui/card.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/collapsible.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/input.tsx","../../src/components/ui/label.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/scroll-area.tsx","../../src/components/ui/select.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/table.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/tooltip.tsx","../../src/components/ui/feature-gate.tsx","../../src/components/states/ErrorState.tsx","../../src/components/ui/api-error-boundary.tsx","../../src/components/ui/page-loader.tsx","../../src/components/ui/query-provider.tsx","../../src/components/unified-table/hooks/useTableState.ts","../../src/components/unified-table/hooks/useSelection.ts","../../src/components/unified-table/hooks/usePagination.ts","../../src/components/unified-table/hooks/useFilters.ts","../../src/components/unified-table/hooks/useResponsive.ts","../../src/components/unified-table/hooks/useColumnVisibility.ts","../../src/components/unified-table/hooks/useTablePreferences.ts","../../src/components/unified-table/hooks/useTableKeyboard.ts","../../src/components/unified-table/hooks/useTableURL.ts","../../src/components/unified-table/hooks/useColumnReorder.ts","../../src/components/unified-table/hooks/useColumnResize.ts","../../src/components/unified-table/components/TableFilters/index.tsx","../../src/components/unified-table/components/BulkActionBar/index.tsx","../../src/components/unified-table/components/InlineEditCell/index.tsx","../../src/components/unified-table/components/DataTableCore/index.tsx","../../src/components/unified-table/components/TablePagination/index.tsx","../../src/components/unified-table/utils/export.ts","../../src/components/unified-table/components/Toolbar/ExportButton.tsx","../../src/components/unified-table/components/Toolbar/SavedViewsDropdown.tsx","../../src/components/unified-table/components/Toolbar/StandardTableToolbar.tsx","../../src/components/unified-table/UnifiedTable.tsx","../../src/components/unified-table/components/MobileView/CardActions.tsx","../../src/components/unified-table/components/MobileView/Card.tsx","../../src/components/unified-table/components/MobileView/types.ts","../../src/components/unified-table/components/MobileView/index.tsx","../../src/components/unified-table/utils/renderers.ts","../../src/components/unified-table/utils/themes.ts","../../src/components/unified-table/utils/validation.ts","../../src/components/navigation/sidebar.tsx","../../src/components/safe-html.tsx","../../src/components/toast/use-toast.ts","../../src/components/toast/Toaster.tsx","../../src/components/toast/use-notify.ts","../../src/components/states/EmptyState.tsx","../../src/components/dialog/BaseDialog.tsx","../../src/components/badge/StatusBadge.tsx","../../src/components/loading/TableSkeleton.tsx","../../src/components/loading/DashboardSkeleton.tsx","../../src/components/wizard/StepIndicator.tsx"],"names":["twMerge","clsx","AccordionPrimitive","React","jsx","jsxs","ChevronDown","cva","React2","React3","Slot","DayPicker","ChevronLeft","ChevronRight","React4","React5","CheckboxPrimitive","Check","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","DialogPrimitive","React6","X","DropdownMenuPrimitive","React7","Circle","React8","Label","React9","LabelPrimitive","PopoverPrimitive","React10","React11","ProgressPrimitive","React12","ScrollAreaPrimitive","SelectPrimitive","React13","ChevronUp","Separator","React14","SeparatorPrimitive","React15","TabsPrimitive","React16","React17","TooltipPrimitive","React18","Fragment","React19","error","info","useState","QueryClient","QueryClientProvider","useMemo","useCallback","useRef","useEffect","useSearchParams","useRouter","usePathname","isExpanded","Filter","XCircle","Icon","Loader2","ArrowUp","ArrowDown","ArrowUpDown","DragDropContext","Droppable","Draggable","provided","GripVertical","MoreHorizontal","ChevronsLeft","ChevronsRight","exportData","XLSX","Download","FileText","FileSpreadsheet","BookmarkPlus","Star","Trash2","Columns3","comparison","MoreVertical","Card","getNestedValue","Link","DOMPurify","React20","React21","DialogPrimitive2","DialogHeader","DialogTitle","DialogFooter","sizeClasses","_"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } 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 * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }","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 rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? (\n <ChevronLeft className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n ),\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-4 sm:p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg max-h-[95vh] max-sm:max-h-[90vh] max-sm:m-4 max-sm:w-[calc(100%-2rem)] overflow-hidden\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3 top-3 sm:right-4 sm:top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground min-h-[44px] min-w-[44px] flex items-center justify-center\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 space-y-2 space-y-reverse sm:space-y-0\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../../utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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',\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors 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 left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-4 w-full overflow-hidden rounded-full bg-secondary\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-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 left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }","import { cn } from '../../utils'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-gray-200', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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\",\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface FeatureGateProps {\n /** Whether the feature is available. When false, applies mode behavior. */\n enabled: boolean\n /**\n * How to render when enabled=false:\n * - 'disable' (default): renders children as disabled with a tooltip\n * - 'hide': renders nothing\n * - 'badge': renders children with a 'Coming soon' badge overlay\n */\n mode?: \"disable\" | \"hide\" | \"badge\"\n /** Tooltip text shown in 'disable' mode. Defaults to 'Coming soon'. */\n tooltip?: string\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Gates a UI element behind a feature flag.\n *\n * Use this to wrap any button, link, or UI section that is not yet implemented.\n * This prevents shipping clickable elements with no handlers.\n *\n * @example\n * // Disable a button with a tooltip\n * <FeatureGate enabled={false}>\n * <Button onClick={handleReply}>Reply</Button>\n * </FeatureGate>\n *\n * @example\n * // Hide completely\n * <FeatureGate enabled={false} mode=\"hide\">\n * <Button>Archive</Button>\n * </FeatureGate>\n */\nexport function FeatureGate({\n enabled,\n mode = \"disable\",\n tooltip = \"Coming soon\",\n children,\n className,\n}: FeatureGateProps) {\n if (enabled) {\n return <>{children}</>\n }\n\n if (mode === \"hide\") {\n return null\n }\n\n if (mode === \"badge\") {\n return (\n <div className={cn(\"relative inline-flex\", className)}>\n <div className=\"opacity-60 pointer-events-none select-none\">{children}</div>\n <span className=\"absolute -top-1.5 -right-1.5 rounded-full bg-muted text-muted-foreground text-[10px] font-medium px-1.5 py-0.5 leading-none border\">\n Soon\n </span>\n </div>\n )\n }\n\n // mode === 'disable' (default): wrap in tooltip, disable interaction\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\"inline-flex cursor-not-allowed\", className)}\n aria-disabled=\"true\"\n >\n <span className=\"pointer-events-none opacity-50 select-none\">\n {children}\n </span>\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface ErrorStateProps {\n title?: string\n message: string\n onRetry?: () => void\n className?: string\n}\n\nexport function ErrorState({\n title = 'Something went wrong',\n message,\n onRetry,\n className,\n}: ErrorStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <div\n className=\"w-16 h-16 mb-4 rounded-full bg-red-50 flex items-center justify-center\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-red-500\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{title}</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-sm\">{message}</p>\n {onRetry && (\n <button\n onClick={onRetry}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 transition-colors\"\n aria-label=\"Retry loading content\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"mr-2\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n Try Again\n </button>\n )}\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ErrorState } from \"../states/ErrorState\"\n\ninterface ApiErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\ninterface ApiErrorBoundaryProps {\n children: React.ReactNode\n /** Custom fallback to render on error. Receives error and reset function. */\n fallback?: (props: { error: Error; reset: () => void }) => React.ReactNode\n /** Called when the error boundary catches an error. */\n onError?: (error: Error, info: React.ErrorInfo) => void\n}\n\n/**\n * Error boundary for API-driven page content.\n *\n * Catches unhandled errors from children and renders ErrorState with a retry button.\n *\n * @example\n * <ApiErrorBoundary>\n * <InvestorsTable />\n * </ApiErrorBoundary>\n */\nexport class ApiErrorBoundary extends React.Component<\n ApiErrorBoundaryProps,\n ApiErrorBoundaryState\n> {\n constructor(props: ApiErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ApiErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n this.props.onError?.(error, info)\n }\n\n reset = () => {\n this.setState({ hasError: false, error: null })\n }\n\n render() {\n if (this.state.hasError && this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback({ error: this.state.error, reset: this.reset })\n }\n return (\n <ErrorState\n message={this.state.error.message || \"An unexpected error occurred\"}\n onRetry={this.reset}\n />\n )\n }\n return this.props.children\n }\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface PageLoaderProps {\n /** Number of skeleton rows to show. Default: 5. */\n rows?: number\n className?: string\n}\n\n/**\n * Page-level skeleton loader. Renders animated skeleton rows as a loading placeholder.\n *\n * @example\n * if (loading) return <PageLoader />\n */\nexport function PageLoader({ rows = 5, className }: PageLoaderProps) {\n return (\n <div className={cn(\"w-full space-y-3 p-4\", className)} aria-busy=\"true\" aria-label=\"Loading\">\n <div className=\"h-8 w-1/3 rounded-md bg-muted animate-pulse\" />\n <div className=\"space-y-2\">\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n className=\"h-12 w-full rounded-md bg-muted animate-pulse\"\n style={{ opacity: 1 - i * 0.1 }}\n />\n ))}\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\n\n/**\n * Shared QueryClient provider with consistent defaults.\n *\n * - staleTime: 5 minutes (avoids unnecessary refetches)\n * - refetchOnWindowFocus: false (explicit control over refetches)\n */\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n },\n },\n })\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UseTableStateReturn, TableState } from '../types'\n\ninterface UseTableStateProps<TData> {\n initialData?: TData[]\n initialPageSize?: number\n}\n\nexport function useTableState<TData>({\n initialData = [],\n initialPageSize = 25,\n}: UseTableStateProps<TData>): UseTableStateReturn<TData> {\n const [data, setDataState] = useState<TData[]>(initialData)\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSizeState] = useState(initialPageSize)\n const [searchTerm, setSearchTerm] = useState('')\n const [debouncedSearchTerm, setDebouncedSearchTerm] = useState('')\n const [sortBy, setSortBy] = useState<string | null>(null)\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')\n const [loading, setLoadingState] = useState(false)\n const [loadingRows, setLoadingRowsState] = useState<Set<string>>(new Set())\n const [error, setErrorState] = useState<Error | null>(null)\n const [viewMode, setViewModeState] = useState<'table' | 'card'>('table')\n\n // Computed values\n const totalCount = data.length\n const totalPages = Math.max(1, Math.ceil(totalCount / pageSize))\n\n const state: TableState<TData> = useMemo(() => ({\n data,\n filteredData: data, // Will be computed by filters hook\n displayedData: data, // Will be computed by pagination\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n selectedIds: new Set(),\n selectAllPages: false,\n activeFilters: {},\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n }), [\n data,\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n sortBy,\n sortDirection,\n searchTerm,\n debouncedSearchTerm,\n loading,\n loadingRows,\n error,\n viewMode,\n ])\n\n const setData = useCallback((newData: TData[]) => {\n setDataState(newData)\n }, [])\n\n const setPage = useCallback((page: number) => {\n setCurrentPage(page)\n }, [])\n\n const setPageSize = useCallback((size: number) => {\n setPageSizeState(size)\n setCurrentPage(1) // Reset to first page when changing page size\n }, [])\n\n const setLoading = useCallback((isLoading: boolean) => {\n setLoadingState(isLoading)\n }, [])\n\n const setLoadingRows = useCallback((ids: Set<string>) => {\n setLoadingRowsState(ids)\n }, [])\n\n const setError = useCallback((err: Error | null) => {\n setErrorState(err)\n }, [])\n\n const setViewMode = useCallback((mode: 'table' | 'card') => {\n setViewModeState(mode)\n }, [])\n\n return {\n state,\n setData,\n setPage,\n setPageSize,\n setLoading,\n setLoadingRows,\n setError,\n setViewMode,\n }\n}\n","'use client'\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport { UseSelectionReturn } from '../types'\n\ninterface UseSelectionProps {\n currentPageData: any[]\n totalCount: number\n getRowId: (row: any) => string\n onSelectionChange?: (ids: Set<string>) => void\n onSelectAllPages?: (enabled: boolean) => void\n // External controlled state\n externalSelectedIds?: Set<string>\n externalSelectAllPages?: boolean\n}\n\nexport function useSelection({\n currentPageData,\n totalCount,\n getRowId,\n onSelectionChange,\n onSelectAllPages,\n externalSelectedIds,\n externalSelectAllPages,\n}: UseSelectionProps): UseSelectionReturn {\n const [internalSelectedIds, setInternalSelectedIds] = useState<Set<string>>(new Set())\n const [internalSelectAllPages, setInternalSelectAllPages] = useState(false)\n\n // Track if we're in controlled mode\n const isControlled = externalSelectedIds !== undefined\n\n // Use external state if provided, otherwise internal\n const selectedIds = isControlled ? externalSelectedIds : internalSelectedIds\n const selectAllPages = externalSelectAllPages ?? internalSelectAllPages\n\n // Store callbacks in refs to avoid stale closures\n const onSelectionChangeRef = useRef(onSelectionChange)\n const onSelectAllPagesRef = useRef(onSelectAllPages)\n useEffect(() => {\n onSelectionChangeRef.current = onSelectionChange\n onSelectAllPagesRef.current = onSelectAllPages\n }, [onSelectionChange, onSelectAllPages])\n\n // Sync external state to internal when in controlled mode\n const prevExternalIdsRef = useRef<Set<string> | undefined>(undefined)\n useEffect(() => {\n if (externalSelectedIds !== undefined && externalSelectedIds !== prevExternalIdsRef.current) {\n setInternalSelectedIds(new Set(externalSelectedIds))\n prevExternalIdsRef.current = externalSelectedIds\n }\n }, [externalSelectedIds])\n\n useEffect(() => {\n if (externalSelectAllPages !== undefined) {\n setInternalSelectAllPages(externalSelectAllPages)\n }\n }, [externalSelectAllPages])\n\n const toggleRow = useCallback((id: string) => {\n setInternalSelectedIds(prev => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n // Notify parent after state update\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // If we're toggling individual rows, turn off select all pages\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [])\n\n const toggleAll = useCallback(() => {\n const currentPageIds = currentPageData.map(getRowId)\n\n setInternalSelectedIds(prev => {\n const allSelected = currentPageIds.every(id => prev.has(id))\n\n let next: Set<string>\n if (allSelected) {\n // Deselect all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.delete(id))\n } else {\n // Select all on current page\n next = new Set(prev)\n currentPageIds.forEach(id => next.add(id))\n }\n\n // Notify parent\n onSelectionChangeRef.current?.(next)\n return next\n })\n\n // Turn off select all pages if toggling individual page\n setInternalSelectAllPages(prev => {\n if (prev) {\n onSelectAllPagesRef.current?.(false)\n return false\n }\n return prev\n })\n }, [currentPageData, getRowId])\n\n const selectAllPagesToggle = useCallback(() => {\n setInternalSelectAllPages(prev => {\n const next = !prev\n // Notify parent\n onSelectAllPagesRef.current?.(next)\n\n if (next) {\n // When selecting all pages, clear individual selections\n setInternalSelectedIds(new Set())\n onSelectionChangeRef.current?.(new Set())\n }\n return next\n })\n }, [])\n\n const clearSelection = useCallback(() => {\n // Update internal state\n setInternalSelectedIds(new Set())\n setInternalSelectAllPages(false)\n // Notify parent\n onSelectionChangeRef.current?.(new Set())\n onSelectAllPagesRef.current?.(false)\n }, [])\n\n const getSelectedCount = useCallback(() => {\n if (selectAllPages) {\n return totalCount\n }\n return selectedIds.size\n }, [selectAllPages, selectedIds, totalCount])\n\n return {\n selectedIds,\n selectAllPages,\n toggleRow,\n toggleAll,\n selectAllPagesToggle,\n clearSelection,\n getSelectedCount,\n }\n}\n","'use client'\nimport { useState, useCallback, useMemo } from 'react'\nimport { UsePaginationReturn } from '../types'\n\ninterface UsePaginationProps {\n totalCount: number\n initialPageSize?: number\n initialPage?: number\n serverSide?: boolean\n onPageChange?: (page: number) => void\n}\n\nexport function usePagination({\n totalCount,\n initialPageSize = 25,\n initialPage = 1,\n serverSide = false,\n onPageChange,\n}: UsePaginationProps): UsePaginationReturn {\n const [currentPage, setCurrentPage] = useState(initialPage)\n const [pageSize, setPageSize] = useState(initialPageSize)\n\n const totalPages = useMemo(() => {\n return Math.max(1, Math.ceil(totalCount / pageSize))\n }, [totalCount, pageSize])\n\n const canGoNext = useMemo(() => {\n return currentPage < totalPages\n }, [currentPage, totalPages])\n\n const canGoPrevious = useMemo(() => {\n return currentPage > 1\n }, [currentPage])\n\n const goToPage = useCallback((page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages))\n setCurrentPage(validPage)\n onPageChange?.(validPage)\n }, [totalPages, onPageChange])\n\n const goToFirstPage = useCallback(() => {\n goToPage(1)\n }, [goToPage])\n\n const goToLastPage = useCallback(() => {\n goToPage(totalPages)\n }, [goToPage, totalPages])\n\n const goToNextPage = useCallback(() => {\n if (canGoNext) {\n goToPage(currentPage + 1)\n }\n }, [canGoNext, currentPage, goToPage])\n\n const goToPreviousPage = useCallback(() => {\n if (canGoPrevious) {\n goToPage(currentPage - 1)\n }\n }, [canGoPrevious, currentPage, goToPage])\n\n const getPageNumbers = useCallback((): (number | '...')[] => {\n const maxVisible = 7 // Maximum number of page buttons to show\n\n if (totalPages <= maxVisible) {\n // Show all pages if total is small\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const pages: (number | '...')[] = []\n\n // Always show first page\n pages.push(1)\n\n if (currentPage > 3) {\n pages.push('...')\n }\n\n // Show pages around current\n const start = Math.max(2, currentPage - 1)\n const end = Math.min(totalPages - 1, currentPage + 1)\n\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) {\n pages.push(i)\n }\n }\n\n if (currentPage < totalPages - 2) {\n pages.push('...')\n }\n\n // Always show last page\n if (!pages.includes(totalPages)) {\n pages.push(totalPages)\n }\n\n return pages\n }, [currentPage, totalPages])\n\n const getDisplayRange = useCallback(() => {\n const start = (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalCount)\n return { start, end }\n }, [currentPage, pageSize, totalCount])\n\n return {\n currentPage,\n pageSize,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n }\n}\n","'use client'\nimport { useState, useCallback } from 'react'\nimport { UseFiltersReturn, FilterState } from '../types'\n\ninterface UseFiltersProps {\n initialFilters?: FilterState\n onChange?: (filters: FilterState) => void\n}\n\nexport function useFilters({\n initialFilters = {},\n onChange,\n}: UseFiltersProps): UseFiltersReturn {\n const [filters, setFilters] = useState<FilterState>(initialFilters)\n\n const setFilter = useCallback((key: string, value: any) => {\n setFilters((prev) => {\n const next = { ...prev, [key]: value }\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearFilter = useCallback((key: string) => {\n setFilters((prev) => {\n const next = { ...prev }\n delete next[key]\n onChange?.(next)\n return next\n })\n }, [onChange])\n\n const clearAllFilters = useCallback(() => {\n setFilters({})\n onChange?.({})\n }, [onChange])\n\n const hasActiveFilters = useCallback(() => {\n return Object.keys(filters).length > 0\n }, [filters])\n\n const getActiveFilterCount = useCallback(() => {\n return Object.keys(filters).length\n }, [filters])\n\n return {\n filters,\n setFilter,\n clearFilter,\n clearAllFilters,\n hasActiveFilters,\n getActiveFilterCount,\n }\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\n\nexport interface ResponsiveBreakpoints {\n mobile: number\n tablet: number\n desktop: number\n}\n\nexport const DEFAULT_BREAKPOINTS: ResponsiveBreakpoints = {\n mobile: 768,\n tablet: 1024,\n desktop: 1280,\n}\n\nexport type ViewMode = 'mobile' | 'tablet' | 'desktop'\n\nexport function useResponsive(breakpoints: ResponsiveBreakpoints = DEFAULT_BREAKPOINTS) {\n const [viewMode, setViewMode] = useState<ViewMode>('desktop')\n const [windowWidth, setWindowWidth] = useState<number>(0)\n\n useEffect(() => {\n const handleResize = () => {\n const width = window.innerWidth\n setWindowWidth(width)\n\n if (width < breakpoints.mobile) {\n setViewMode('mobile')\n } else if (width < breakpoints.tablet) {\n setViewMode('tablet')\n } else {\n setViewMode('desktop')\n }\n }\n\n handleResize()\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [breakpoints])\n\n return {\n viewMode,\n windowWidth,\n isMobile: viewMode === 'mobile',\n isTablet: viewMode === 'tablet',\n isDesktop: viewMode === 'desktop',\n isMobileOrTablet: viewMode === 'mobile' || viewMode === 'tablet',\n }\n}\n","'use client'\n\nimport { useState, useCallback, useEffect } from 'react'\nimport { ColumnVisibilityState } from '../types'\n\nexport interface UseColumnVisibilityOptions {\n defaultVisibility?: ColumnVisibilityState\n persistKey?: string\n onVisibilityChange?: (visibility: ColumnVisibilityState) => void\n}\n\nexport function useColumnVisibility({\n defaultVisibility = {},\n persistKey,\n onVisibilityChange\n}: UseColumnVisibilityOptions = {}) {\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n if (persistKey && typeof window !== 'undefined') {\n const stored = localStorage.getItem(`column-visibility-${persistKey}`)\n if (stored) {\n try {\n return JSON.parse(stored)\n } catch {\n return defaultVisibility\n }\n }\n }\n return defaultVisibility\n })\n\n useEffect(() => {\n if (persistKey && typeof window !== 'undefined') {\n localStorage.setItem(`column-visibility-${persistKey}`, JSON.stringify(columnVisibility))\n }\n onVisibilityChange?.(columnVisibility)\n }, [columnVisibility, persistKey, onVisibilityChange])\n\n const toggleColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: !(prev[columnId] ?? true)\n }))\n }, [])\n\n const showColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: true\n }))\n }, [])\n\n const hideColumn = useCallback((columnId: string) => {\n setColumnVisibility((prev) => ({\n ...prev,\n [columnId]: false\n }))\n }, [])\n\n const showAllColumns = useCallback(() => {\n setColumnVisibility({})\n }, [])\n\n const hideAllColumns = useCallback((exceptColumns: string[] = []) => {\n setColumnVisibility((prev) => {\n const newVisibility: ColumnVisibilityState = {}\n Object.keys(prev).forEach((key) => {\n newVisibility[key] = exceptColumns.includes(key)\n })\n return newVisibility\n })\n }, [])\n\n const resetVisibility = useCallback(() => {\n setColumnVisibility(defaultVisibility)\n }, [defaultVisibility])\n\n const isColumnVisible = useCallback((columnId: string): boolean => {\n return columnVisibility[columnId] ?? true\n }, [columnVisibility])\n\n return {\n columnVisibility,\n setColumnVisibility,\n toggleColumn,\n showColumn,\n hideColumn,\n showAllColumns,\n hideAllColumns,\n resetVisibility,\n isColumnVisible,\n }\n}\n","'use client'\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { ColumnVisibilityState, SortState } from '../types'\n\ninterface TablePreferences {\n columnVisibility: ColumnVisibilityState\n columnOrder: string[] | null\n defaultSortColumn: string | null\n defaultSortDirection: 'asc' | 'desc' | null\n pageSize: number\n}\n\ninterface UseTablePreferencesOptions {\n tableId: string\n enabled?: boolean\n defaultColumnVisibility?: ColumnVisibilityState\n defaultPageSize?: number\n debounceMs?: number\n // Custom fetch function for API calls\n // Applications should provide their own apiFetch implementation\n apiFetch?: typeof fetch\n}\n\ninterface UseTablePreferencesReturn {\n preferences: TablePreferences | null\n isLoading: boolean\n error: Error | null\n updateColumnVisibility: (visibility: ColumnVisibilityState) => void\n updateColumnOrder: (order: string[]) => void\n updateSortPreference: (sort: SortState) => void\n updatePageSize: (size: number) => void\n resetPreferences: () => Promise<void>\n}\n\nexport function useTablePreferences({\n tableId,\n enabled = true,\n defaultColumnVisibility = {},\n defaultPageSize = 25,\n debounceMs = 500,\n apiFetch = fetch // Default to native fetch if not provided\n}: UseTablePreferencesOptions): UseTablePreferencesReturn {\n const [preferences, setPreferences] = useState<TablePreferences | null>(null)\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n const saveTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pendingUpdatesRef = useRef<Partial<TablePreferences>>({})\n\n // Load preferences on mount\n useEffect(() => {\n if (!enabled) {\n setIsLoading(false)\n return\n }\n\n const loadPreferences = async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`)\n if (!response.ok) {\n throw new Error('Failed to load table preferences')\n }\n const data = await response.json()\n\n if (data) {\n setPreferences(data)\n } else {\n // Use defaults if no saved preferences\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n }\n } catch (err) {\n console.error('Error loading table preferences:', err)\n setError(err instanceof Error ? err : new Error('Unknown error'))\n // Fall back to defaults on error\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } finally {\n setIsLoading(false)\n }\n }\n\n loadPreferences()\n }, [tableId, enabled, defaultPageSize])\n\n // Debounced save function\n const savePreferences = useCallback(async (updates: Partial<TablePreferences>) => {\n // Merge with pending updates\n pendingUpdatesRef.current = { ...pendingUpdatesRef.current, ...updates }\n\n // Clear existing timeout\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n\n // Set new debounced timeout\n saveTimeoutRef.current = setTimeout(async () => {\n const updatesToSave = { ...pendingUpdatesRef.current }\n pendingUpdatesRef.current = {}\n\n try {\n const response = await apiFetch('/api/v1/table-preferences/', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tableId,\n ...updatesToSave\n })\n })\n\n if (!response.ok) {\n throw new Error('Failed to save table preferences')\n }\n } catch (err) {\n console.error('Error saving table preferences:', err)\n // Don't update error state for save failures - user can continue working\n }\n }, debounceMs)\n }, [tableId, debounceMs])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current)\n }\n }\n }, [])\n\n const updateColumnVisibility = useCallback((visibility: ColumnVisibilityState) => {\n setPreferences(prev => prev ? { ...prev, columnVisibility: visibility } : null)\n savePreferences({ columnVisibility: visibility })\n }, [savePreferences])\n\n const updateColumnOrder = useCallback((order: string[]) => {\n setPreferences(prev => prev ? { ...prev, columnOrder: order } : null)\n savePreferences({ columnOrder: order })\n }, [savePreferences])\n\n const updateSortPreference = useCallback((sort: SortState) => {\n setPreferences(prev => prev ? {\n ...prev,\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n } : null)\n savePreferences({\n defaultSortColumn: sort.sortBy,\n defaultSortDirection: sort.sortDirection\n })\n }, [savePreferences])\n\n const updatePageSize = useCallback((size: number) => {\n setPreferences(prev => prev ? { ...prev, pageSize: size } : null)\n savePreferences({ pageSize: size })\n }, [savePreferences])\n\n const resetPreferences = useCallback(async () => {\n try {\n const response = await apiFetch(`/api/v1/table-preferences/?tableId=${encodeURIComponent(tableId)}`, {\n method: 'DELETE'\n })\n\n if (!response.ok) {\n throw new Error('Failed to reset table preferences')\n }\n\n setPreferences({\n columnVisibility: defaultColumnVisibility,\n columnOrder: null,\n defaultSortColumn: null,\n defaultSortDirection: null,\n pageSize: defaultPageSize\n })\n } catch (err) {\n console.error('Error resetting table preferences:', err)\n throw err\n }\n }, [tableId, defaultColumnVisibility, defaultPageSize])\n\n return {\n preferences,\n isLoading,\n error,\n updateColumnVisibility,\n updateColumnOrder,\n updateSortPreference,\n updatePageSize,\n resetPreferences\n }\n}\n","'use client'\nimport { useEffect, useCallback, useRef, useState, RefObject } from 'react'\n\nexport interface UseTableKeyboardProps<TData> {\n data: TData[]\n getRowId: (row: TData) => string\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n onRowClick?: (row: TData) => void\n onDelete?: (ids: Set<string>) => void\n tableRef: RefObject<HTMLElement | null>\n enabled?: boolean\n}\n\nexport interface UseTableKeyboardReturn {\n focusedRowIndex: number\n setFocusedRowIndex: (index: number) => void\n handleKeyDown: (event: React.KeyboardEvent) => void\n}\n\n/**\n * Hook for handling keyboard navigation in UnifiedTable\n *\n * Features:\n * - Arrow Up/Down: Navigate between rows\n * - Enter: Expand/click row (trigger onRowClick)\n * - Space: Toggle row selection\n * - Tab: Move between interactive elements (native browser behavior)\n * - Escape: Close menus/dialogs (handled by menu components)\n * - Ctrl/Cmd+A: Select all rows\n * - Delete: Trigger delete action if available\n */\nexport function useTableKeyboard<TData>({\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n enabled = true,\n}: UseTableKeyboardProps<TData>): UseTableKeyboardReturn {\n // Use state for reactive updates so consumers get re-renders\n const [focusedRowIndex, setFocusedRowIndexState] = useState<number>(-1)\n // Keep a ref in sync for use in callbacks to avoid stale closures\n const focusedRowIndexRef = useRef<number>(-1)\n\n const setFocusedRowIndex = useCallback((index: number) => {\n focusedRowIndexRef.current = index\n setFocusedRowIndexState(index)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (!enabled || data.length === 0) return\n\n const { key, ctrlKey, metaKey, shiftKey } = event\n const isModifierPressed = ctrlKey || metaKey\n\n // Ctrl/Cmd + A: Select all rows\n if (key === 'a' && isModifierPressed && onToggleAll) {\n event.preventDefault()\n onToggleAll()\n return\n }\n\n // Delete: Trigger delete action if available\n if (key === 'Delete' && onDelete && selectedIds && selectedIds.size > 0) {\n event.preventDefault()\n onDelete(selectedIds)\n return\n }\n\n // Arrow navigation\n if (key === 'ArrowDown') {\n event.preventDefault()\n const nextIndex = Math.min(focusedRowIndexRef.current + 1, data.length - 1)\n setFocusedRowIndex(nextIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${nextIndex}\"]`\n ) as HTMLElement\n if (rowElement && typeof rowElement.focus === 'function') {\n rowElement.focus()\n }\n }\n return\n }\n\n if (key === 'ArrowUp') {\n event.preventDefault()\n const prevIndex = Math.max(focusedRowIndexRef.current - 1, 0)\n setFocusedRowIndex(prevIndex)\n\n // Focus the row element\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${prevIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // Enter: Trigger row click\n if (key === 'Enter' && focusedRowIndexRef.current >= 0 && onRowClick) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n onRowClick(row)\n }\n return\n }\n\n // Space: Toggle row selection\n if (key === ' ' && focusedRowIndexRef.current >= 0 && onToggleRow) {\n event.preventDefault()\n const row = data[focusedRowIndexRef.current]\n if (row) {\n const rowId = getRowId(row)\n onToggleRow(rowId)\n }\n return\n }\n\n // Home: Focus first row\n if (key === 'Home') {\n event.preventDefault()\n setFocusedRowIndex(0)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n '[data-row-index=\"0\"]'\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n\n // End: Focus last row\n if (key === 'End') {\n event.preventDefault()\n const lastIndex = data.length - 1\n setFocusedRowIndex(lastIndex)\n\n if (tableRef.current) {\n const rowElement = tableRef.current.querySelector(\n `[data-row-index=\"${lastIndex}\"]`\n ) as HTMLElement\n if (rowElement) {\n rowElement.focus()\n }\n }\n return\n }\n }, [\n enabled,\n data,\n getRowId,\n selectedIds,\n onToggleRow,\n onToggleAll,\n onRowClick,\n onDelete,\n tableRef,\n setFocusedRowIndex,\n ])\n\n // Set up keyboard event listener on the table\n useEffect(() => {\n if (!enabled || !tableRef.current) return\n\n const handleKeyboardEvent = (event: KeyboardEvent) => {\n // Convert native event to React synthetic event shape\n const syntheticEvent = {\n key: event.key,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n } as React.KeyboardEvent\n\n handleKeyDown(syntheticEvent)\n }\n\n const tableElement = tableRef.current\n tableElement.addEventListener('keydown', handleKeyboardEvent as any)\n\n return () => {\n tableElement.removeEventListener('keydown', handleKeyboardEvent as any)\n }\n }, [enabled, tableRef, handleKeyDown])\n\n return {\n focusedRowIndex,\n setFocusedRowIndex,\n handleKeyDown,\n }\n}\n","'use client'\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useSearchParams, useRouter, usePathname } from 'next/navigation'\nimport { SortState, FilterState } from '../types'\n\nexport interface UseTableURLConfig {\n tableId: string\n persistToUrl: boolean\n debounceMs?: number\n}\n\nexport interface TableURLState {\n sortBy: string | null\n sortDirection: 'asc' | 'desc'\n filters: FilterState\n page: number\n search: string\n}\n\nexport interface UseTableURLReturn {\n // Read state from URL\n getURLState: () => TableURLState\n\n // Update individual state pieces\n setSortToURL: (sort: SortState) => void\n setFiltersToURL: (filters: FilterState) => void\n setPageToURL: (page: number) => void\n setSearchToURL: (search: string) => void\n\n // Clear state\n clearURLState: () => void\n\n // Check if URL has state\n hasURLState: () => boolean\n}\n\n/**\n * Hook for persisting table state to URL query parameters.\n * Enables shareability and browser navigation for table state.\n *\n * URL params are namespaced with tableId prefix:\n * - {tableId}_sortBy: column ID\n * - {tableId}_sortDir: 'asc' | 'desc'\n * - {tableId}_page: current page number\n * - {tableId}_search: search term\n * - {tableId}_filter_{filterKey}: filter values (JSON encoded)\n *\n * @example\n * const urlState = useTableURL({\n * tableId: 'firms',\n * persistToUrl: true,\n * debounceMs: 300\n * })\n *\n * // Read initial state from URL\n * const initialState = urlState.getURLState()\n *\n * // Update URL when state changes\n * urlState.setSortToURL({ sortBy: 'name', sortDirection: 'asc' })\n * urlState.setSearchToURL('acme')\n */\nexport function useTableURL({\n tableId,\n persistToUrl,\n debounceMs = 300,\n}: UseTableURLConfig): UseTableURLReturn {\n const searchParams = useSearchParams()\n const router = useRouter()\n const pathname = usePathname()\n\n // Debounce timer ref\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Track if we're currently applying URL changes to avoid loops\n const isApplyingURLRef = useRef(false)\n\n /**\n * Build namespaced param key\n */\n const getParamKey = useCallback((key: string): string => {\n return `${tableId}_${key}`\n }, [tableId])\n\n /**\n * Parse URL state from current search params\n */\n const getURLState = useCallback((): TableURLState => {\n if (!persistToUrl) {\n return {\n sortBy: null,\n sortDirection: 'asc',\n filters: {},\n page: 1,\n search: '',\n }\n }\n\n const sortBy = searchParams.get(getParamKey('sortBy'))\n const sortDirection = searchParams.get(getParamKey('sortDir')) as 'asc' | 'desc' | null\n const page = parseInt(searchParams.get(getParamKey('page')) || '1', 10)\n const search = searchParams.get(getParamKey('search')) || ''\n\n // Parse filters (any param starting with tableId_filter_)\n const filters: FilterState = {}\n const filterPrefix = getParamKey('filter_')\n\n searchParams.forEach((value, key) => {\n if (key.startsWith(filterPrefix)) {\n const filterKey = key.substring(filterPrefix.length)\n try {\n // Try to parse as JSON first (for complex values)\n filters[filterKey] = JSON.parse(value)\n } catch {\n // Fall back to raw string value\n filters[filterKey] = value\n }\n }\n })\n\n return {\n sortBy: sortBy || null,\n sortDirection: sortDirection || 'asc',\n filters,\n page: isNaN(page) || page < 1 ? 1 : page,\n search,\n }\n }, [searchParams, persistToUrl, getParamKey])\n\n /**\n * Update URL with new params (debounced)\n */\n const updateURL = useCallback((updates: Record<string, string | null>) => {\n if (!persistToUrl) return\n\n // Clear existing debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // Debounce the URL update\n debounceTimerRef.current = setTimeout(() => {\n const newParams = new URLSearchParams(searchParams.toString())\n\n // Apply updates\n Object.entries(updates).forEach(([key, value]) => {\n if (value === null || value === '') {\n newParams.delete(key)\n } else {\n newParams.set(key, value)\n }\n })\n\n // Only update if params actually changed\n const newParamsString = newParams.toString()\n const currentParamsString = searchParams.toString()\n\n if (newParamsString !== currentParamsString) {\n isApplyingURLRef.current = true\n const newURL = newParamsString ? `${pathname}?${newParamsString}` : pathname\n router.replace(newURL, { scroll: false })\n\n // Reset flag after a short delay\n setTimeout(() => {\n isApplyingURLRef.current = false\n }, 50)\n }\n }, debounceMs)\n }, [persistToUrl, searchParams, pathname, router, debounceMs])\n\n /**\n * Update sort state in URL\n */\n const setSortToURL = useCallback((sort: SortState) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('sortBy')]: sort.sortBy,\n [getParamKey('sortDir')]: sort.sortBy ? sort.sortDirection : null,\n // Reset to page 1 when sorting changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update filters in URL\n */\n const setFiltersToURL = useCallback((filters: FilterState) => {\n if (!persistToUrl) return\n\n // Build updates object - clear old filters and set new ones\n const updates: Record<string, string | null> = {}\n const filterPrefix = getParamKey('filter_')\n\n // Clear all existing filter params\n searchParams.forEach((_, key) => {\n if (key.startsWith(filterPrefix)) {\n updates[key] = null\n }\n })\n\n // Set new filter params\n Object.entries(filters).forEach(([key, value]) => {\n const paramKey = `${filterPrefix}${key}`\n if (value === undefined || value === null || value === '') {\n updates[paramKey] = null\n } else if (typeof value === 'object') {\n // Encode complex values as JSON\n updates[paramKey] = JSON.stringify(value)\n } else {\n updates[paramKey] = String(value)\n }\n })\n\n // Reset to page 1 when filters change\n updates[getParamKey('page')] = '1'\n\n updateURL(updates)\n }, [persistToUrl, updateURL, getParamKey, searchParams])\n\n /**\n * Update page in URL\n */\n const setPageToURL = useCallback((page: number) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('page')]: page > 1 ? String(page) : null, // Remove param if page 1\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Update search term in URL\n */\n const setSearchToURL = useCallback((search: string) => {\n if (!persistToUrl) return\n\n updateURL({\n [getParamKey('search')]: search || null,\n // Reset to page 1 when search changes\n [getParamKey('page')]: '1',\n })\n }, [persistToUrl, updateURL, getParamKey])\n\n /**\n * Clear all table-related URL params\n */\n const clearURLState = useCallback(() => {\n if (!persistToUrl) return\n\n const newParams = new URLSearchParams(searchParams.toString())\n const keysToDelete: string[] = []\n\n // Find all params for this table\n newParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n keysToDelete.push(key)\n }\n })\n\n // Delete them\n keysToDelete.forEach(key => newParams.delete(key))\n\n const newURL = newParams.toString() ? `${pathname}?${newParams.toString()}` : pathname\n router.replace(newURL, { scroll: false })\n }, [persistToUrl, searchParams, pathname, router, tableId])\n\n /**\n * Check if URL has any state for this table\n */\n const hasURLState = useCallback((): boolean => {\n if (!persistToUrl) return false\n\n let hasState = false\n searchParams.forEach((_, key) => {\n if (key.startsWith(`${tableId}_`)) {\n hasState = true\n }\n })\n return hasState\n }, [persistToUrl, searchParams, tableId])\n\n // Cleanup debounce timer on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n return {\n getURLState,\n setSortToURL,\n setFiltersToURL,\n setPageToURL,\n setSearchToURL,\n clearURLState,\n hasURLState,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useMemo } from 'react'\nimport { DropResult } from '@hello-pangea/dnd'\nimport { ColumnConfig } from '../types'\n\ninterface UseColumnReorderOptions<TData> {\n columns: ColumnConfig<TData>[]\n initialOrder?: string[] | null\n enabled?: boolean\n onOrderChange?: (order: string[]) => void\n}\n\ninterface UseColumnReorderReturn<TData> {\n orderedColumns: ColumnConfig<TData>[]\n columnOrder: string[]\n handleDragEnd: (result: DropResult) => void\n resetOrder: () => void\n}\n\nexport function useColumnReorder<TData>({\n columns,\n initialOrder = null,\n enabled = true,\n onOrderChange,\n}: UseColumnReorderOptions<TData>): UseColumnReorderReturn<TData> {\n // Initialize order from provided order or default to column IDs\n const defaultOrder = useMemo(() => columns.map(c => c.id), [columns])\n\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n if (initialOrder && initialOrder.length > 0) {\n // Validate that all columns exist and add any new ones\n const validOrder = initialOrder.filter(id => columns.some(c => c.id === id))\n const newColumns = columns.filter(c => !initialOrder.includes(c.id)).map(c => c.id)\n return [...validOrder, ...newColumns]\n }\n return defaultOrder\n })\n\n // Reorder columns based on current order\n const orderedColumns = useMemo(() => {\n if (!enabled) return columns\n\n const columnMap = new Map(columns.map(c => [c.id, c]))\n const ordered: ColumnConfig<TData>[] = []\n\n // Add columns in order\n for (const id of columnOrder) {\n const column = columnMap.get(id)\n if (column) {\n ordered.push(column)\n }\n }\n\n // Add any columns not in the order (new columns)\n for (const column of columns) {\n if (!columnOrder.includes(column.id)) {\n ordered.push(column)\n }\n }\n\n return ordered\n }, [columns, columnOrder, enabled])\n\n // Handle drag end\n const handleDragEnd = useCallback((result: DropResult) => {\n if (!result.destination) return\n if (result.source.index === result.destination.index) return\n\n const newOrder = Array.from(columnOrder)\n const [removed] = newOrder.splice(result.source.index, 1)\n newOrder.splice(result.destination.index, 0, removed)\n\n setColumnOrder(newOrder)\n onOrderChange?.(newOrder)\n }, [columnOrder, onOrderChange])\n\n // Reset to default order\n const resetOrder = useCallback(() => {\n setColumnOrder(defaultOrder)\n onOrderChange?.(defaultOrder)\n }, [defaultOrder, onOrderChange])\n\n return {\n orderedColumns,\n columnOrder,\n handleDragEnd,\n resetOrder,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\ninterface ColumnWidths {\n [columnId: string]: number\n}\n\ninterface UseColumnResizeOptions {\n enabled?: boolean\n initialWidths?: ColumnWidths | null\n minWidth?: number\n onWidthChange?: (widths: ColumnWidths) => void\n}\n\ninterface UseColumnResizeReturn {\n columnWidths: ColumnWidths\n getColumnWidth: (columnId: string, defaultWidth?: number) => number | undefined\n startResize: (columnId: string, startX: number, startWidth: number) => void\n resetWidths: () => void\n isResizing: boolean\n resizingColumn: string | null\n}\n\nexport function useColumnResize({\n enabled = true,\n initialWidths = null,\n minWidth = 50,\n onWidthChange,\n}: UseColumnResizeOptions = {}): UseColumnResizeReturn {\n const [columnWidths, setColumnWidths] = useState<ColumnWidths>(() => initialWidths ?? {})\n const [resizingColumn, setResizingColumn] = useState<string | null>(null)\n const resizeRef = useRef<{\n columnId: string\n startX: number\n startWidth: number\n } | null>(null)\n\n // Store dependencies in refs to avoid useCallback recreation\n const minWidthRef = useRef(minWidth)\n const onWidthChangeRef = useRef(onWidthChange)\n useEffect(() => {\n minWidthRef.current = minWidth\n onWidthChangeRef.current = onWidthChange\n }, [minWidth, onWidthChange])\n\n // Get column width (undefined allows CSS default)\n const getColumnWidth = useCallback((columnId: string, defaultWidth?: number): number | undefined => {\n if (!enabled) return defaultWidth\n return columnWidths[columnId] ?? defaultWidth\n }, [enabled, columnWidths])\n\n // Start resizing a column\n const startResize = useCallback((columnId: string, startX: number, startWidth: number) => {\n if (!enabled) return\n resizeRef.current = { columnId, startX, startWidth }\n setResizingColumn(columnId)\n }, [enabled])\n\n // Handle pointer/mouse move during resize - uses refs to avoid recreating\n const handlePointerMove = useCallback((e: PointerEvent | MouseEvent) => {\n if (!resizeRef.current) return\n\n const { columnId, startX, startWidth } = resizeRef.current\n const diff = e.clientX - startX\n const newWidth = Math.max(minWidthRef.current, startWidth + diff)\n\n setColumnWidths(prev => ({ ...prev, [columnId]: newWidth }))\n }, [])\n\n // Handle pointer/mouse up to end resize - uses refs to avoid recreating\n const handlePointerUp = useCallback(() => {\n if (!resizeRef.current) return\n\n resizeRef.current = null\n setResizingColumn(null)\n\n // Notify parent of the final width changes\n setColumnWidths(current => {\n onWidthChangeRef.current?.(current)\n return current\n })\n }, [])\n\n // Add/remove global pointer/mouse listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n // Add listeners for both pointer and mouse events for cross-browser support\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp)\n document.addEventListener('mousemove', handlePointerMove)\n document.addEventListener('mouseup', handlePointerUp)\n // Prevent text selection during resize\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n\n return () => {\n // Remove listeners\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp)\n document.removeEventListener('mousemove', handlePointerMove)\n document.removeEventListener('mouseup', handlePointerUp)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [resizingColumn, handlePointerMove, handlePointerUp])\n\n // Reset all widths\n const resetWidths = useCallback(() => {\n setColumnWidths({})\n onWidthChange?.({})\n }, [onWidthChange])\n\n return {\n columnWidths,\n getColumnWidth,\n startResize,\n resetWidths,\n isResizing: resizingColumn !== null,\n resizingColumn,\n }\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { Badge } from '../../../ui/badge'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../../ui/select'\nimport { Filter, XCircle, ChevronDown, ChevronUp } from 'lucide-react'\nimport { FilterConfig, FilterSection, UseFiltersReturn } from '../../types'\nimport { cn } from '../../../../lib/utils'\nimport { useState, useCallback } from 'react'\n\ninterface TableFiltersProps {\n config: FilterConfig\n filters: UseFiltersReturn\n className?: string\n defaultExpanded?: boolean\n}\n\nexport function TableFilters({ config, filters, className, defaultExpanded = false }: TableFiltersProps) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded)\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const toggleSection = (sectionId: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev)\n if (next.has(sectionId)) {\n next.delete(sectionId)\n } else {\n next.add(sectionId)\n }\n return next\n })\n }\n\n const renderChipsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'chips' || !section.filters) return null\n\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n {section.filters.map((filter) => {\n if (!filter.options) return null\n\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <Label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <div className=\"flex gap-1\">\n {filter.options.map((option) => {\n const isActive = filters.filters[filter.id] === option\n\n return (\n <Button\n key={option}\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => {\n if (isActive) {\n filters.clearFilter(filter.id)\n } else {\n filters.setFilter(filter.id, option)\n }\n }}\n className=\"h-7 px-2 text-xs\"\n >\n {option}\n </Button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n }\n\n const renderBucketsFilter = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'buckets' || !section.buckets) return null\n\n const currentValue = filters.filters[section.id] || 'all'\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <Label htmlFor={section.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(section.id, value)}>\n <SelectTrigger id={section.id} className=\"w-32 h-8 text-xs\">\n <SelectValue placeholder=\"Select range\" />\n </SelectTrigger>\n <SelectContent>\n {section.buckets.map((bucket, idx) => (\n <SelectItem key={idx} value={bucket.label.toLowerCase().replace(/\\s+/g, '-')}>\n {bucket.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderDropdownFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n if (!filter.options) return null\n\n const currentValue = filters.filters[filter.id] || 'all'\n // Filter out 'all' from options since we add it explicitly below\n const filteredOptions = filter.options.filter((option: string) => option.toLowerCase() !== 'all')\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Select value={currentValue} onValueChange={(value) => filters.setFilter(filter.id, value)}>\n <SelectTrigger id={filter.id} className=\"w-28 h-8 text-xs\">\n <SelectValue placeholder=\"All\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All</SelectItem>\n {filteredOptions.map((option: string) => (\n <SelectItem key={option} value={option}>\n {option === 'null' ? 'Not Set' : option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n const renderSearchFilter = (filter: NonNullable<FilterConfig['sections'][0]['filters']>[0]) => {\n const currentValue = filters.filters[filter.id] || ''\n\n return (\n <div key={filter.id} className=\"flex items-center gap-1.5\">\n <Label htmlFor={filter.id} className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {filter.label}:\n </Label>\n <Input\n id={filter.id}\n type=\"text\"\n placeholder={filter.label}\n value={currentValue}\n onChange={(e) => filters.setFilter(filter.id, e.target.value)}\n className=\"w-32 h-8 text-xs\"\n />\n </div>\n )\n }\n\n const renderCollapsibleSection = (section: FilterConfig['sections'][0]) => {\n if (section.type !== 'collapsible' || !section.filters) return null\n\n const isExpanded = expandedSections.has(section.id)\n\n return (\n <div key={section.id} className=\"border rounded-lg p-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => toggleSection(section.id)}\n className=\"w-full justify-between -ml-2\"\n >\n <span className=\"font-medium\">{section.label}</span>\n {isExpanded ? <ChevronUp className=\"h-4 w-4\" /> : <ChevronDown className=\"h-4 w-4\" />}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-3 space-y-3\">\n {section.filters.map((filter) => {\n if (filter.type === 'dropdown') {\n return renderDropdownFilter(filter)\n }\n if (filter.type === 'search') {\n return renderSearchFilter(filter)\n }\n return null\n })}\n </div>\n )}\n </div>\n )\n }\n\n // Render custom filter using the provided render function\n const renderCustomFilter = useCallback((section: FilterSection) => {\n if (section.type !== 'custom' || !section.customFilter) return null\n\n const currentValue = filters.filters[section.id] ?? section.customFilter.defaultValue\n const onChange = (value: any) => {\n if (value === section.customFilter?.defaultValue || value === undefined || value === null) {\n filters.clearFilter(section.id)\n } else {\n filters.setFilter(section.id, value)\n }\n }\n\n return (\n <div key={section.id} className=\"flex items-center gap-1.5\">\n {section.label && (\n <Label className=\"text-xs text-muted-foreground whitespace-nowrap\">\n {section.label}:\n </Label>\n )}\n {section.customFilter.render(currentValue, onChange)}\n </div>\n )\n }, [filters])\n\n const hasActiveFilters = filters.hasActiveFilters()\n const activeFilterCount = filters.getActiveFilterCount()\n\n return (\n <div className={cn('rounded-lg border bg-muted/30', className)}>\n {/* Collapsible Header */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">Filters</span>\n {hasActiveFilters && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activeFilterCount}\n </Badge>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n filters.clearAllFilters()\n }}\n className=\"gap-1 h-6 px-2 text-xs\"\n >\n <XCircle className=\"h-3 w-3\" />\n Clear\n </Button>\n )}\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </div>\n </button>\n\n {/* Expanded filter content */}\n {isExpanded && (\n <div className=\"px-3 pb-3 pt-1\">\n {/* Compact horizontal layout for all filters */}\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-2\">\n {config.sections.map((section) => {\n if (section.type === 'chips') {\n return <div key={section.id}>{renderChipsFilter(section)}</div>\n }\n\n if (section.type === 'buckets') {\n return <div key={section.id}>{renderBucketsFilter(section)}</div>\n }\n\n if (section.type === 'collapsible') {\n return renderCollapsibleSection(section)\n }\n\n if (section.type === 'dropdown' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderDropdownFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'search' && section.filters) {\n return section.filters.map((filter) => (\n <div key={filter.id}>{renderSearchFilter(filter)}</div>\n ))\n }\n\n if (section.type === 'custom') {\n return <div key={section.id}>{renderCustomFilter(section)}</div>\n }\n\n return null\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { X } from 'lucide-react'\nimport { BulkAction } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\ninterface BulkActionBarProps {\n selectedCount: number\n selectAllPages: boolean\n totalCount: number\n bulkActions: BulkAction[]\n onClearSelection: () => void\n onExecuteAction: (action: BulkAction) => void\n className?: string\n}\n\nexport function BulkActionBar({\n selectedCount,\n selectAllPages,\n totalCount,\n bulkActions,\n onClearSelection,\n onExecuteAction,\n className,\n}: BulkActionBarProps) {\n const isVisible = selectedCount > 0\n\n const getVariantClassName = (variant: BulkAction['variant']) => {\n switch (variant) {\n case 'gradient-purple':\n return 'bg-gradient-to-r from-purple-600 to-blue-600 text-white hover:from-purple-700 hover:to-blue-700'\n case 'gradient-green':\n return 'bg-gradient-to-r from-green-600 to-teal-600 text-white hover:from-green-700 hover:to-teal-700'\n case 'gradient-indigo':\n return 'bg-gradient-to-r from-indigo-600 to-purple-600 text-white hover:from-indigo-700 hover:to-purple-700'\n case 'gradient-orange':\n return 'bg-gradient-to-r from-orange-600 to-red-600 text-white hover:from-orange-700 hover:to-red-700'\n case 'gradient-blue':\n return 'bg-gradient-to-r from-blue-600 to-indigo-600 text-white hover:from-blue-700 hover:to-indigo-700'\n default:\n return ''\n }\n }\n\n return (\n <div\n className={cn(\n 'transition-all duration-200 ease-in-out overflow-hidden',\n isVisible\n ? 'opacity-100 max-h-20'\n : 'opacity-0 max-h-0 pointer-events-none',\n className\n )}\n aria-hidden={!isVisible}\n >\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg border\">\n {/* Selection summary */}\n <div className=\"flex items-center gap-2 text-sm font-medium\">\n {selectAllPages ? (\n <span className=\"text-blue-600\">\n All <span className=\"font-semibold\">{totalCount}</span> items selected\n </span>\n ) : (\n <span>\n {`${selectedCount} ${selectedCount === 1 ? 'item' : 'items'} selected`}\n </span>\n )}\n </div>\n\n {/* Divider */}\n <div className=\"h-6 w-px bg-border mx-1\" />\n\n {/* Bulk action buttons */}\n <div className=\"flex items-center gap-2 flex-1\">\n {bulkActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled?.(new Set()) || false\n const exceedsMaxSelection = !!(action.maxSelection && selectedCount > action.maxSelection)\n\n return (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant === 'default' ? 'default' : 'default'}\n className={cn(\n getVariantClassName(action.variant),\n 'gap-2'\n )}\n onClick={() => onExecuteAction(action)}\n disabled={isDisabled || exceedsMaxSelection}\n title={\n exceedsMaxSelection\n ? `Maximum ${action.maxSelection} items can be selected for this action`\n : action.label\n }\n >\n <Icon className=\"h-4 w-4\" />\n {action.label}\n {selectAllPages && totalCount > 0 && ` (${totalCount})`}\n </Button>\n )\n })}\n </div>\n\n {/* Clear selection button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onClearSelection}\n className=\"gap-2\"\n >\n <X className=\"h-4 w-4\" />\n Clear\n </Button>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport { Input } from '../../../ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../../ui/select'\nimport { Check, X, Loader2 } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\n\ninterface InlineEditCellProps {\n value: any\n columnId: string\n rowId: string\n editType?: 'text' | 'number' | 'select' | 'date'\n editOptions?: string[]\n onSave: (value: any) => Promise<void>\n onCancel: () => void\n validate?: (value: any) => string | null\n}\n\nexport function InlineEditCell({\n value: initialValue,\n columnId,\n rowId,\n editType = 'text',\n editOptions = [],\n onSave,\n onCancel,\n validate,\n}: InlineEditCellProps) {\n const [value, setValue] = useState(initialValue ?? '')\n const [error, setError] = useState<string | null>(null)\n const [isSaving, setIsSaving] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Focus the input on mount\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [])\n\n // Handle save\n const handleSave = useCallback(async () => {\n // Validate if validator provided\n if (validate) {\n const validationError = validate(value)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n\n setIsSaving(true)\n setError(null)\n\n try {\n await onSave(value)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save')\n setIsSaving(false)\n }\n }, [value, validate, onSave])\n\n // Handle keyboard events\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSave()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }, [handleSave, onCancel])\n\n // Render select editor\n if (editType === 'select') {\n return (\n <div className=\"flex items-center gap-1\">\n <Select\n value={String(value)}\n onValueChange={(newValue) => {\n setValue(newValue)\n // Auto-save on select\n onSave(newValue)\n }}\n >\n <SelectTrigger className=\"h-8 w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {editOptions.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-muted rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n </div>\n )\n }\n\n // Render text/number/date editor\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1\">\n <Input\n ref={inputRef}\n type={editType === 'number' ? 'number' : editType === 'date' ? 'date' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value)\n setError(null)\n }}\n onKeyDown={handleKeyDown}\n className={cn(\n 'h-8 w-full',\n error && 'border-red-500 focus-visible:ring-red-500'\n )}\n disabled={isSaving}\n />\n <button\n onClick={handleSave}\n className=\"p-1 hover:bg-green-100 rounded\"\n disabled={isSaving}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <Check className=\"h-4 w-4 text-green-600\" />\n )}\n </button>\n <button\n onClick={onCancel}\n className=\"p-1 hover:bg-red-100 rounded\"\n disabled={isSaving}\n >\n <X className=\"h-4 w-4 text-red-600\" />\n </button>\n </div>\n {error && (\n <span className=\"text-xs text-red-500\">{error}</span>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../../../ui/table'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { Button } from '../../../ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '../../../ui/dropdown-menu'\nimport { ArrowUpDown, ArrowUp, ArrowDown, MoreHorizontal, Loader2, GripVertical } from 'lucide-react'\nimport { DragDropContext, Droppable, Draggable, DropResult, DragStart } from '@hello-pangea/dnd'\nimport { ColumnConfig, RowAction } from '../../types'\nimport { InlineEditCell } from '../InlineEditCell'\nimport { cn } from '../../../../lib/utils'\n\ninterface DataTableCoreProps<TData> {\n data: TData[]\n columns: ColumnConfig<TData>[]\n getRowId: (row: TData) => string\n\n // Selection\n selectionEnabled?: boolean\n selectedIds?: Set<string>\n onToggleRow?: (id: string) => void\n onToggleAll?: () => void\n allRowsSelected?: boolean\n renderSelectionCell?: (row: TData) => React.ReactNode\n\n // Sorting\n sortingEnabled?: boolean\n sortBy?: string | null\n sortDirection?: 'asc' | 'desc'\n onSort?: (columnId: string) => void\n\n // Column Reordering\n columnReorderEnabled?: boolean\n onColumnDragEnd?: (result: DropResult) => void\n\n // Column Resizing\n columnResizeEnabled?: boolean\n columnWidths?: { [columnId: string]: number }\n onColumnResizeStart?: (columnId: string, startX: number, startWidth: number) => void\n isResizing?: boolean\n\n // Inline Editing\n inlineEditEnabled?: boolean\n onCellEdit?: (rowId: string, columnId: string, value: any, row: TData) => Promise<void>\n\n // Row Actions\n rowActions?: RowAction<TData>[]\n onRowClick?: (row: TData) => void\n\n // Loading\n loadingRows?: Set<string>\n\n className?: string\n}\n\nexport function DataTableCore<TData>({\n data,\n columns,\n getRowId,\n selectionEnabled,\n selectedIds = new Set(),\n onToggleRow,\n onToggleAll,\n allRowsSelected,\n renderSelectionCell,\n sortingEnabled,\n sortBy,\n sortDirection,\n onSort,\n columnReorderEnabled,\n onColumnDragEnd,\n columnResizeEnabled,\n columnWidths = {},\n onColumnResizeStart,\n isResizing,\n inlineEditEnabled,\n onCellEdit,\n rowActions,\n onRowClick,\n loadingRows = new Set(),\n className,\n}: DataTableCoreProps<TData>) {\n // State for tracking which cell is being edited\n const [editingCell, setEditingCell] = useState<{ rowId: string; columnId: string } | null>(null)\n\n // State for tracking if a column is being dragged (to disable sorting during drag)\n const [isDraggingColumn, setIsDraggingColumn] = useState(false)\n\n // Drag handlers\n const handleDragStart = useCallback((_: DragStart) => {\n setIsDraggingColumn(true)\n }, [])\n\n const handleDragEnd = useCallback((result: DropResult) => {\n setIsDraggingColumn(false)\n onColumnDragEnd?.(result)\n }, [onColumnDragEnd])\n\n // Get effective column width (resized or default)\n const getEffectiveWidth = (column: ColumnConfig<TData>) => {\n if (columnResizeEnabled && columnWidths[column.id]) {\n return columnWidths[column.id]\n }\n return column.width\n }\n\n // Resize handle with stable callback reference\n const handleResizeMouseDown = useCallback((columnId: string, e: React.MouseEvent | React.PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n const th = (e.target as HTMLElement).closest('th')\n if (th && onColumnResizeStart) {\n onColumnResizeStart(columnId, e.clientX, th.offsetWidth)\n }\n }, [onColumnResizeStart])\n\n // Resize handle component - wider hit area for easier grabbing\n const renderResizeHandle = (columnId: string) => {\n if (!columnResizeEnabled) return null\n\n return (\n <div\n data-resize-handle=\"true\"\n className=\"absolute right-0 top-0 h-full w-5 cursor-col-resize z-50 flex items-center justify-center group/resize pointer-events-auto\"\n style={{ marginRight: '-10px' }}\n onMouseDown={(e) => handleResizeMouseDown(columnId, e)}\n onPointerDown={(e) => handleResizeMouseDown(columnId, e)}\n onDragStart={(e) => e.preventDefault()}\n >\n {/* Visible indicator line */}\n <div className=\"w-[3px] h-full bg-transparent group-hover/resize:bg-primary transition-colors rounded-full\" />\n </div>\n )\n }\n\n const renderCellContent = (column: ColumnConfig<TData>, row: TData) => {\n if (column.cell) {\n return column.cell(row)\n }\n\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const value = (row as any)[column.accessorKey]\n return value !== null && value !== undefined ? String(value) : '-'\n }\n\n return '-'\n }\n\n // Sort indicator component for cleaner rendering\n const SortIndicator = ({ columnId }: { columnId: string }) => {\n const isSorted = sortBy === columnId\n const direction = isSorted ? sortDirection : null\n\n if (direction === 'asc') {\n return <ArrowUp className=\"ml-2 h-4 w-4\" />\n } else if (direction === 'desc') {\n return <ArrowDown className=\"ml-2 h-4 w-4\" />\n }\n return <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\n }\n\n // Handle sort click - disabled during column dragging\n const handleSortClick = useCallback((columnId: string) => {\n if (isDraggingColumn) return // Don't sort while dragging columns\n onSort?.(columnId)\n }, [isDraggingColumn, onSort])\n\n const renderHeader = (column: ColumnConfig<TData>, inDragContext = false) => {\n if (typeof column.header === 'function') {\n return column.header({})\n }\n\n // In drag context, render a simpler header (sorting handled separately)\n if (inDragContext) {\n return <span>{column.header}</span>\n }\n\n if (sortingEnabled && column.sortable !== false) {\n return (\n <Button\n variant=\"ghost\"\n onClick={() => handleSortClick(column.id)}\n className=\"-ml-4 h-8 hover:bg-transparent\"\n >\n {column.header}\n <SortIndicator columnId={column.id} />\n </Button>\n )\n }\n\n return column.header\n }\n\n const renderColumnHeaders = () => {\n if (columnReorderEnabled && onColumnDragEnd) {\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <TableHeader>\n <Droppable droppableId=\"columns\" direction=\"horizontal\">\n {(provided) => (\n <TableRow\n ref={provided.innerRef}\n {...provided.droppableProps}\n >\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Draggable data columns */}\n {columns.map((column, index) => (\n <Draggable key={column.id} draggableId={column.id} index={index}>\n {(provided, snapshot) => (\n <TableHead\n ref={provided.innerRef}\n {...provided.draggableProps}\n style={{\n ...provided.draggableProps.style,\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n 'relative group overflow-visible',\n snapshot.isDragging && 'bg-primary/10 shadow-lg ring-2 ring-primary/20 z-50',\n columnResizeEnabled && 'select-none'\n )}\n >\n {/* Drag handle area - leaves space for resize handle on the right */}\n <div\n {...provided.dragHandleProps}\n className={cn(\n 'flex items-center gap-2 cursor-grab active:cursor-grabbing',\n 'hover:bg-muted/50 rounded px-1 -mx-1 py-1 transition-colors',\n columnResizeEnabled && 'pr-4'\n )}\n >\n <GripVertical className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />\n {/* Sortable header text */}\n <div\n className=\"flex-1 flex items-center\"\n onClick={(e) => {\n // Only trigger sort if not dragging and column is sortable\n if (!snapshot.isDragging && sortingEnabled && column.sortable !== false) {\n e.stopPropagation()\n handleSortClick(column.id)\n }\n }}\n >\n {renderHeader(column, true)}\n {sortingEnabled && column.sortable !== false && (\n <SortIndicator columnId={column.id} />\n )}\n </div>\n </div>\n {renderResizeHandle(column.id)}\n </TableHead>\n )}\n </Draggable>\n ))}\n {provided.placeholder}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n )}\n </Droppable>\n </TableHeader>\n </DragDropContext>\n )\n }\n\n // Standard non-draggable headers\n return (\n <TableHeader>\n <TableRow>\n {/* Selection column */}\n {selectionEnabled && (\n <TableHead className=\"w-12\">\n <Checkbox\n checked={allRowsSelected}\n onCheckedChange={onToggleAll}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n\n {/* Data columns */}\n {columns.map((column) => (\n <TableHead\n key={column.id}\n className={cn('relative group overflow-visible', columnResizeEnabled && 'select-none')}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n >\n {renderHeader(column)}\n {renderResizeHandle(column.id)}\n </TableHead>\n ))}\n\n {/* Actions column */}\n {rowActions && rowActions.length > 0 && (\n <TableHead className=\"w-12\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n )\n }\n\n return (\n <div className={cn('rounded-md border', className)}>\n <Table>\n {renderColumnHeaders()}\n\n <TableBody>\n {data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectionEnabled ? 1 : 0) + (rowActions ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIndex) => {\n const rowId = getRowId(row)\n const isSelected = selectedIds.has(rowId)\n const isLoading = loadingRows.has(rowId)\n\n return (\n <TableRow\n key={rowId}\n data-row-index={rowIndex}\n data-state={isSelected && 'selected'}\n onClick={() => onRowClick?.(row)}\n tabIndex={0}\n className={cn(\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isLoading && 'opacity-50'\n )}\n >\n {/* Selection cell */}\n {selectionEnabled && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <div className=\"flex items-center gap-1\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => onToggleRow?.(rowId)}\n aria-label=\"Select row\"\n />\n {renderSelectionCell?.(row)}\n </div>\n </TableCell>\n )}\n\n {/* Data cells */}\n {columns.map((column) => {\n const isEditing = editingCell?.rowId === rowId && editingCell?.columnId === column.id\n const canEdit = inlineEditEnabled && column.editable && onCellEdit\n\n // Get the cell value for editing\n const getCellValue = () => {\n if (column.accessorFn) return column.accessorFn(row)\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n return keys.reduce((obj, key) => obj?.[key], row as any)\n }\n return undefined\n }\n\n return (\n <TableCell\n key={column.id}\n style={{\n width: getEffectiveWidth(column),\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n }}\n className={cn(\n canEdit && !isEditing && 'cursor-pointer hover:bg-muted/50'\n )}\n onClick={(e) => {\n if (canEdit && !isEditing) {\n e.stopPropagation()\n setEditingCell({ rowId, columnId: column.id })\n }\n }}\n >\n {isEditing ? (\n <InlineEditCell\n value={getCellValue()}\n columnId={column.id}\n rowId={rowId}\n editType={column.editType}\n editOptions={column.editOptions}\n validate={column.validate ? (v) => column.validate!(v, row) : undefined}\n onSave={async (value) => {\n await onCellEdit!(rowId, column.id, value, row)\n setEditingCell(null)\n }}\n onCancel={() => setEditingCell(null)}\n />\n ) : (\n <>\n {isLoading && <Loader2 className=\"h-4 w-4 animate-spin inline-block mr-2\" />}\n {renderCellContent(column, row)}\n </>\n )}\n </TableCell>\n )\n })}\n\n {/* Actions cell */}\n {rowActions && rowActions.length > 0 && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">Open menu</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Actions</DropdownMenuLabel>\n {rowActions.map((action, idx) => {\n const isDisabled = action.disabled?.(row) || false\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => !isDisabled && action.onClick(row)}\n disabled={isDisabled}\n className={cn(action.destructive && 'text-red-600')}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n </TableCell>\n )}\n </TableRow>\n )\n })\n )}\n </TableBody>\n </Table>\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { UsePaginationReturn } from '../../types'\n\ninterface TablePaginationProps {\n pagination: UsePaginationReturn\n showSelectAllPrompt?: boolean\n onSelectAllPages?: () => void\n totalFilteredCount?: number\n className?: string\n}\n\nexport function TablePagination({\n pagination,\n showSelectAllPrompt,\n onSelectAllPages,\n totalFilteredCount,\n className,\n}: TablePaginationProps) {\n const {\n currentPage,\n totalPages,\n totalCount,\n canGoNext,\n canGoPrevious,\n goToPage,\n goToFirstPage,\n goToLastPage,\n goToNextPage,\n goToPreviousPage,\n getPageNumbers,\n getDisplayRange,\n } = pagination\n\n const { start, end } = getDisplayRange()\n const pageNumbers = getPageNumbers()\n\n return (\n <div className={className}>\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* Item count display */}\n <div className=\"text-sm text-muted-foreground\">\n Showing <span className=\"font-medium\">{start}-{end}</span> of{' '}\n <span className=\"font-medium\">{totalCount}</span>\n {totalFilteredCount && totalFilteredCount !== totalCount && (\n <span> filtered items</span>\n )}\n </div>\n\n {/* Page controls */}\n {totalPages > 1 && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground hidden sm:inline\">\n Page {currentPage} of {totalPages}\n </span>\n\n <div className=\"flex gap-1\">\n {/* First page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToFirstPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Previous page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToPreviousPage}\n disabled={!canGoPrevious}\n className=\"h-8 w-8 p-0\"\n title=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {pageNumbers.map((pageNum, idx) => {\n if (pageNum === '...') {\n return (\n <span\n key={`ellipsis-${idx}`}\n className=\"flex items-center px-2 text-muted-foreground\"\n >\n •••\n </span>\n )\n }\n\n const page = pageNum as number\n return (\n <Button\n key={page}\n variant={page === currentPage ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => goToPage(page)}\n className=\"h-8 w-8 p-0\"\n >\n {page}\n </Button>\n )\n })}\n\n {/* Next page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToNextPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={goToLastPage}\n disabled={!canGoNext}\n className=\"h-8 w-8 p-0\"\n title=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n )}\n </div>\n\n {/* Select all pages prompt */}\n {showSelectAllPrompt && onSelectAllPages && totalFilteredCount && totalFilteredCount > end && (\n <div className=\"mt-3 flex items-center justify-center p-3 bg-blue-50 border border-blue-200 rounded-lg\">\n <span className=\"text-sm text-blue-900 mr-2\">\n Select all <span className=\"font-semibold\">{totalFilteredCount}</span> items?\n </span>\n <Button\n size=\"sm\"\n variant=\"link\"\n onClick={onSelectAllPages}\n className=\"text-blue-700 hover:text-blue-900 font-semibold p-0 h-auto\"\n >\n Select all {totalFilteredCount} items\n </Button>\n </div>\n )}\n </div>\n )\n}\n","import * as XLSX from 'xlsx'\nimport { ColumnConfig } from '../types'\n\nexport type ExportFormat = 'csv' | 'excel'\n\nexport interface ExportOptions {\n filename: string\n format: ExportFormat\n includeHeaders?: boolean\n dateFormat?: string\n}\n\n/**\n * Extracts the value from a row using column configuration\n */\nfunction getColumnValue<TData>(row: TData, column: ColumnConfig<TData>): any {\n if (column.accessorFn) {\n return column.accessorFn(row)\n }\n\n if (column.accessorKey) {\n const keys = column.accessorKey.split('.')\n let value: any = row\n for (const key of keys) {\n value = value?.[key]\n }\n return value\n }\n\n return ''\n}\n\n/**\n * Formats a value for export (handles dates, objects, arrays)\n */\nfunction formatValueForExport(value: any): string {\n if (value == null) {\n return ''\n }\n\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n\n return String(value)\n}\n\n/**\n * Gets the header text for a column\n */\nfunction getColumnHeader<TData>(column: ColumnConfig<TData>): string {\n if (typeof column.header === 'string') {\n return column.header\n }\n return column.id\n}\n\n/**\n * Prepares data for export based on visible columns\n */\nfunction prepareExportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n includeHeaders: boolean = true\n): string[][] {\n const rows: string[][] = []\n\n // Add headers\n if (includeHeaders) {\n rows.push(columns.map(getColumnHeader))\n }\n\n // Add data rows\n for (const row of data) {\n const rowData: string[] = []\n for (const column of columns) {\n const value = getColumnValue(row, column)\n rowData.push(formatValueForExport(value))\n }\n rows.push(rowData)\n }\n\n return rows\n}\n\n/**\n * Converts array data to CSV string\n */\nfunction arrayToCSV(data: string[][]): string {\n return data\n .map(row =>\n row\n .map(cell => {\n // Escape quotes and wrap in quotes if contains comma, quote, or newline\n const needsQuotes = /[,\"\\n\\r]/.test(cell)\n if (needsQuotes) {\n return `\"${cell.replace(/\"/g, '\"\"')}\"`\n }\n return cell\n })\n .join(',')\n )\n .join('\\n')\n}\n\n/**\n * Triggers a download of the given content\n */\nfunction downloadFile(content: string | Blob, filename: string, mimeType: string): void {\n const blob = content instanceof Blob ? content : new Blob([content], { type: mimeType })\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n\n/**\n * Exports data to CSV format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToCSV<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n const csv = arrayToCSV(exportData)\n\n downloadFile(csv, `${filename}.csv`, 'text/csv;charset=utf-8;')\n}\n\n/**\n * Exports data to Excel format (XLSX)\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param filename Name of the file to download (without extension)\n * @param includeHeaders Whether to include header row (default: true)\n */\nexport function exportToExcel<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n filename: string,\n includeHeaders: boolean = true\n): void {\n if (!data || data.length === 0) {\n throw new Error('No data to export')\n }\n\n if (!columns || columns.length === 0) {\n throw new Error('No columns specified for export')\n }\n\n const exportData = prepareExportData(data, columns, includeHeaders)\n\n // Create workbook and worksheet\n const ws = XLSX.utils.aoa_to_sheet(exportData)\n const wb = XLSX.utils.book_new()\n XLSX.utils.book_append_sheet(wb, ws, 'Data')\n\n // Auto-size columns\n const columnWidths = columns.map((column, idx) => {\n const header = getColumnHeader(column)\n const maxWidth = exportData.reduce((max, row) => {\n const cellValue = row[idx] || ''\n return Math.max(max, cellValue.length)\n }, header.length)\n return { wch: Math.min(maxWidth + 2, 50) } // Max width of 50 chars\n })\n ws['!cols'] = columnWidths\n\n // Generate Excel file and trigger download\n const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' })\n const blob = new Blob([excelBuffer], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n })\n\n downloadFile(blob, `${filename}.xlsx`, blob.type)\n}\n\n/**\n * Generic export function that routes to CSV or Excel based on format\n * @param data Array of data to export\n * @param columns Visible columns configuration\n * @param options Export options including format and filename\n */\nexport function exportData<TData>(\n data: TData[],\n columns: ColumnConfig<TData>[],\n options: ExportOptions\n): void {\n const { format, filename, includeHeaders = true } = options\n\n switch (format) {\n case 'csv':\n exportToCSV(data, columns, filename, includeHeaders)\n break\n case 'excel':\n exportToExcel(data, columns, filename, includeHeaders)\n break\n default:\n throw new Error(`Unsupported export format: ${format}`)\n }\n}\n\n/**\n * Helper to generate a filename with timestamp\n */\nexport function generateExportFilename(baseFilename: string): string {\n const now = new Date()\n const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, -5)\n return `${baseFilename}_${timestamp}`\n}\n","'use client'\n\nimport { useState, useCallback } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Download, FileSpreadsheet, FileText, Loader2 } from 'lucide-react'\nimport { ColumnConfig } from '../../types'\nimport { exportToCSV, exportToExcel, generateExportFilename } from '../../utils/export'\n\nexport type ExportScope = 'all' | 'filtered' | 'selected'\n\nexport interface ExportButtonProps<TData> {\n data: TData[]\n filteredData?: TData[]\n selectedData?: TData[]\n columns: ColumnConfig<TData>[]\n baseFilename?: string\n disabled?: boolean\n className?: string\n showProgress?: boolean\n onExportStart?: (format: 'csv' | 'excel', scope: ExportScope) => void\n onExportComplete?: (format: 'csv' | 'excel', scope: ExportScope, rowCount: number) => void\n onExportError?: (error: Error) => void\n}\n\nexport function ExportButton<TData>({\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename = 'export',\n disabled = false,\n className,\n showProgress = true,\n onExportStart,\n onExportComplete,\n onExportError,\n}: ExportButtonProps<TData>) {\n const [isExporting, setIsExporting] = useState(false)\n const [progress, setProgress] = useState(0)\n\n // Determine what export options are available\n const hasFilteredData = filteredData && filteredData.length > 0 && filteredData.length < data.length\n const hasSelectedData = selectedData && selectedData.length > 0\n\n const handleExport = useCallback(\n async (format: 'csv' | 'excel', scope: ExportScope) => {\n setIsExporting(true)\n setProgress(0)\n\n try {\n onExportStart?.(format, scope)\n\n // Determine which data to export\n let dataToExport: TData[]\n let scopeLabel: string\n\n switch (scope) {\n case 'selected':\n if (!selectedData || selectedData.length === 0) {\n throw new Error('No rows selected')\n }\n dataToExport = selectedData\n scopeLabel = 'selected'\n break\n case 'filtered':\n if (!filteredData || filteredData.length === 0) {\n throw new Error('No filtered data available')\n }\n dataToExport = filteredData\n scopeLabel = 'filtered'\n break\n case 'all':\n default:\n dataToExport = data\n scopeLabel = 'all'\n break\n }\n\n // Simulate progress for large datasets\n if (showProgress && dataToExport.length > 100) {\n setProgress(25)\n await new Promise(resolve => setTimeout(resolve, 100))\n setProgress(50)\n }\n\n // Generate filename with timestamp and scope\n const filename = `${baseFilename}_${scopeLabel}_${generateExportFilename('')}`.replace(\n /__/g,\n '_'\n )\n\n // Export based on format\n if (format === 'csv') {\n exportToCSV(dataToExport, columns, filename)\n } else {\n exportToExcel(dataToExport, columns, filename)\n }\n\n if (showProgress) {\n setProgress(100)\n }\n\n onExportComplete?.(format, scope, dataToExport.length)\n } catch (error) {\n console.error('Export failed:', error)\n const errorObj = error instanceof Error ? error : new Error('Export failed')\n onExportError?.(errorObj)\n } finally {\n // Reset state after a brief delay to show completion\n if (showProgress) {\n setTimeout(() => {\n setIsExporting(false)\n setProgress(0)\n }, 500)\n } else {\n setIsExporting(false)\n setProgress(0)\n }\n }\n },\n [\n data,\n filteredData,\n selectedData,\n columns,\n baseFilename,\n showProgress,\n onExportStart,\n onExportComplete,\n onExportError,\n ]\n )\n\n const isDisabled = disabled || isExporting || data.length === 0\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={isDisabled}\n className={className}\n aria-label=\"Export data\"\n >\n {isExporting ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Exporting{showProgress && progress > 0 ? ` ${progress}%` : '...'}\n </>\n ) : (\n <>\n <Download className=\"mr-2 h-4 w-4\" />\n Export\n </>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {/* CSV Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">CSV Format</div>\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'filtered')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('csv', 'selected')}\n disabled={isExporting}\n >\n <FileText className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n\n <DropdownMenuSeparator />\n\n {/* Excel Export Options */}\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n Excel Format\n </div>\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'all')}\n disabled={isExporting || data.length === 0}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export All ({data.length} rows)\n </DropdownMenuItem>\n {hasFilteredData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'filtered')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Filtered ({filteredData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n {hasSelectedData && (\n <DropdownMenuItem\n onClick={() => handleExport('excel', 'selected')}\n disabled={isExporting}\n >\n <FileSpreadsheet className=\"mr-2 h-4 w-4\" />\n Export Selected ({selectedData?.length || 0} rows)\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../../../ui/dialog'\nimport { Input } from '../../../ui/input'\nimport { Label } from '../../../ui/label'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { BookmarkPlus, ChevronDown, Check, Trash2, Star } from 'lucide-react'\nimport { SavedView } from '../../types'\nimport { cn } from '../../../../lib/utils'\n\nexport interface SavedViewsDropdownProps {\n views: SavedView[]\n currentViewId?: string | null\n onSaveView: (view: Omit<SavedView, 'id' | 'createdAt'>) => Promise<SavedView>\n onUpdateView?: (viewId: string, updates: Partial<SavedView>) => Promise<void>\n onDeleteView?: (viewId: string) => Promise<void>\n onLoadView: (viewId: string) => void\n // Current state to save\n getCurrentViewState: () => Omit<SavedView, 'id' | 'name' | 'createdAt'>\n}\n\nexport function SavedViewsDropdown({\n views,\n currentViewId,\n onSaveView,\n onUpdateView,\n onDeleteView,\n onLoadView,\n getCurrentViewState,\n}: SavedViewsDropdownProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false)\n const [viewName, setViewName] = useState('')\n const [isDefault, setIsDefault] = useState(false)\n const [isSaving, setIsSaving] = useState(false)\n const [deleteConfirmId, setDeleteConfirmId] = useState<string | null>(null)\n\n const currentView = views.find(v => v.id === currentViewId)\n\n const handleSaveView = async () => {\n if (!viewName.trim()) return\n\n setIsSaving(true)\n try {\n const viewState = getCurrentViewState()\n await onSaveView({\n name: viewName.trim(),\n isDefault,\n ...viewState,\n })\n setIsSaveDialogOpen(false)\n setViewName('')\n setIsDefault(false)\n } catch (error) {\n console.error('Failed to save view:', error)\n } finally {\n setIsSaving(false)\n }\n }\n\n const handleDeleteView = async (viewId: string) => {\n if (!onDeleteView) return\n\n try {\n await onDeleteView(viewId)\n setDeleteConfirmId(null)\n } catch (error) {\n console.error('Failed to delete view:', error)\n }\n }\n\n const handleSetDefault = async (viewId: string) => {\n if (!onUpdateView) return\n\n try {\n // Remove default from all other views\n for (const view of views) {\n if (view.isDefault && view.id !== viewId) {\n await onUpdateView(view.id, { isDefault: false })\n }\n }\n // Set this view as default\n await onUpdateView(viewId, { isDefault: true })\n } catch (error) {\n console.error('Failed to set default view:', error)\n }\n }\n\n return (\n <>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n {currentView ? currentView.name : 'Views'}\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel>Saved Views</DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {views.length === 0 ? (\n <DropdownMenuItem disabled>\n No saved views\n </DropdownMenuItem>\n ) : (\n views.map((view) => (\n <DropdownMenuItem\n key={view.id}\n className=\"flex items-center justify-between cursor-pointer\"\n onSelect={(e) => {\n e.preventDefault()\n if (deleteConfirmId === view.id) return\n onLoadView(view.id)\n setIsOpen(false)\n }}\n >\n <div className=\"flex items-center gap-2\">\n {currentViewId === view.id && (\n <Check className=\"h-4 w-4 text-primary\" />\n )}\n {currentViewId !== view.id && <div className=\"w-4\" />}\n <span>{view.name}</span>\n {view.isDefault && (\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onUpdateView && !view.isDefault && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n handleSetDefault(view.id)\n }}\n className=\"p-1 hover:bg-muted rounded opacity-50 hover:opacity-100\"\n title=\"Set as default\"\n >\n <Star className=\"h-3 w-3\" />\n </button>\n )}\n {onDeleteView && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n if (deleteConfirmId === view.id) {\n handleDeleteView(view.id)\n } else {\n setDeleteConfirmId(view.id)\n setTimeout(() => setDeleteConfirmId(null), 3000)\n }\n }}\n className={cn(\n 'p-1 hover:bg-muted rounded',\n deleteConfirmId === view.id\n ? 'text-red-600 hover:text-red-700'\n : 'opacity-50 hover:opacity-100'\n )}\n title={deleteConfirmId === view.id ? 'Click again to confirm' : 'Delete view'}\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n </DropdownMenuItem>\n ))\n )}\n\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onSelect={(e) => {\n e.preventDefault()\n setIsSaveDialogOpen(true)\n setIsOpen(false)\n }}\n >\n <BookmarkPlus className=\"mr-2 h-4 w-4\" />\n Save Current View\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <Dialog open={isSaveDialogOpen} onOpenChange={setIsSaveDialogOpen}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>Save View</DialogTitle>\n <DialogDescription>\n Save your current table configuration as a named view.\n </DialogDescription>\n </DialogHeader>\n <div className=\"grid gap-4 py-4\">\n <div className=\"grid gap-2\">\n <Label htmlFor=\"view-name\">View Name</Label>\n <Input\n id=\"view-name\"\n value={viewName}\n onChange={(e) => setViewName(e.target.value)}\n placeholder=\"My Custom View\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSaveView()\n }}\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"is-default\"\n checked={isDefault}\n onCheckedChange={(checked) => setIsDefault(checked === true)}\n />\n <Label htmlFor=\"is-default\" className=\"cursor-pointer\">\n Set as default view\n </Label>\n </div>\n </div>\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => setIsSaveDialogOpen(false)}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSaveView}\n disabled={!viewName.trim() || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save View'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","'use client'\n\nimport { Input } from '../../../ui/input'\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { Columns3, ChevronDown } from 'lucide-react'\nimport { cn } from '../../../../lib/utils'\nimport { ExportButton, ExportButtonProps } from './ExportButton'\nimport { SavedViewsDropdown, SavedViewsDropdownProps } from './SavedViewsDropdown'\nimport { ColumnConfig, ColumnVisibilityState, SavedView } from '../../types'\nimport { RefObject } from 'react'\n\nexport interface StandardTableToolbarProps<TData> {\n // Search\n searchEnabled?: boolean\n searchPlaceholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n searchInputRef?: RefObject<HTMLInputElement | null>\n searchAutoFocus?: boolean\n\n // Column visibility\n columnVisibilityEnabled?: boolean\n hideableColumns?: ColumnConfig<TData>[]\n columnVisibility?: ColumnVisibilityState\n onToggleColumnVisibility?: (columnId: string) => void\n\n // Export\n exportEnabled?: boolean\n exportProps?: Omit<ExportButtonProps<TData>, 'data' | 'columns'>\n exportData?: TData[]\n exportColumns?: ColumnConfig<TData>[]\n\n // Saved views\n savedViewsEnabled?: boolean\n savedViews?: SavedView[]\n currentViewId?: string | null\n savedViewsProps?: Omit<SavedViewsDropdownProps, 'views' | 'currentViewId'>\n\n className?: string\n}\n\n/**\n * StandardTableToolbar provides a consistent toolbar layout across all tables.\n *\n * Layout (left to right):\n * - Search input (left)\n * - Export button\n * - Columns dropdown (right)\n */\nexport function StandardTableToolbar<TData>({\n searchEnabled,\n searchPlaceholder = 'Search...',\n searchValue = '',\n onSearchChange,\n searchInputRef,\n searchAutoFocus,\n columnVisibilityEnabled,\n hideableColumns = [],\n columnVisibility = {},\n onToggleColumnVisibility,\n exportEnabled,\n exportProps,\n exportData = [],\n exportColumns = [],\n savedViewsEnabled,\n savedViews = [],\n currentViewId,\n savedViewsProps,\n className,\n}: StandardTableToolbarProps<TData>) {\n const hasRightSideButtons = exportEnabled || columnVisibilityEnabled || savedViewsEnabled\n\n return (\n <div className={cn('flex items-center justify-between gap-4', className)}>\n {/* Left side: Search */}\n <div className=\"flex items-center gap-3 flex-1\">\n {searchEnabled ? (\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={(e) => onSearchChange?.(e.target.value)}\n ref={searchInputRef}\n autoFocus={searchAutoFocus}\n className=\"max-w-xl w-full\"\n />\n ) : (\n <div /> // Spacer\n )}\n </div>\n\n {/* Right side: Toolbar buttons */}\n {hasRightSideButtons && (\n <div className=\"flex items-center gap-2\">\n {/* Export button */}\n {exportEnabled && exportProps && (\n <ExportButton\n data={exportData}\n columns={exportColumns}\n {...exportProps}\n />\n )}\n\n {/* Column visibility dropdown */}\n {columnVisibilityEnabled && hideableColumns.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Columns3 className=\"mr-2 h-4 w-4\" />\n Columns\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {hideableColumns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={columnVisibility[column.id] !== false}\n onCheckedChange={() => onToggleColumnVisibility?.(column.id)}\n >\n {typeof column.header === 'string' ? column.header : column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Saved views dropdown */}\n {savedViewsEnabled && savedViewsProps && (\n <SavedViewsDropdown\n views={savedViews}\n currentViewId={currentViewId}\n {...savedViewsProps}\n />\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useMemo, useRef, useState, useCallback } from 'react'\nimport { UnifiedTableProps, ColumnVisibilityState, SortState, SavedView } from './types'\nimport { useSelection, usePagination, useFilters, useTableURL, useColumnReorder, useColumnResize } from './hooks'\nimport { useTableKeyboard } from './hooks/useTableKeyboard'\nimport { TableFilters } from './components/TableFilters'\nimport { BulkActionBar } from './components/BulkActionBar'\nimport { DataTableCore } from './components/DataTableCore'\nimport { TablePagination } from './components/TablePagination'\nimport { StandardTableToolbar } from './components/Toolbar'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '../../utils'\n\nexport function UnifiedTable<TData>({\n data,\n columns,\n tableId,\n getRowId,\n pagination: paginationConfig,\n selection: selectionConfig,\n filters: filtersConfig,\n bulkActions = [],\n rowActions = [],\n search: searchConfig,\n sorting: sortingConfig,\n columnVisibility: columnVisibilityConfig,\n columnReorder: columnReorderConfig,\n columnResize: columnResizeConfig,\n inlineEdit: inlineEditConfig,\n savedViews: savedViewsConfig,\n urlPersistence: urlPersistenceConfig,\n export: exportConfig,\n onRowClick,\n mobileConfig,\n loading = false,\n loadingRows = new Set(),\n className,\n emptyState,\n errorState,\n}: UnifiedTableProps<TData>) {\n const searchInputRef = useRef<HTMLInputElement | null>(null)\n const shouldRestoreFocusRef = useRef(false)\n const tableRef = useRef<HTMLDivElement>(null)\n\n // URL state persistence hook\n const urlState = useTableURL({\n tableId,\n persistToUrl: urlPersistenceConfig?.enabled ?? false,\n debounceMs: urlPersistenceConfig?.debounceMs ?? 300,\n })\n\n // Initialize state from URL if persistence is enabled\n const initialURLState = useMemo(() => {\n if (!urlPersistenceConfig?.enabled) return null\n return urlState.getURLState()\n }, []) // Only run once on mount\n\n // Column visibility state\n const [columnVisibility, setColumnVisibility] = useState<ColumnVisibilityState>(() => {\n // Try to load from localStorage if persistKey is set\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(`table-columns-${columnVisibilityConfig.persistKey}`)\n if (stored) {\n return JSON.parse(stored)\n }\n } catch {\n // Ignore localStorage errors\n }\n }\n\n // Initialize default visibility\n const initial: ColumnVisibilityState = {}\n columns.forEach(col => {\n if (columnVisibilityConfig?.defaultVisible) {\n initial[col.id] = columnVisibilityConfig.defaultVisible.includes(col.id)\n } else {\n initial[col.id] = true // Default all visible\n }\n })\n return initial\n })\n\n // Client-side sorting state (used when no external sorting config is provided)\n const [localSort, setLocalSort] = useState<SortState>(() => {\n // Initialize from URL if available\n if (initialURLState) {\n return {\n sortBy: initialURLState.sortBy,\n sortDirection: initialURLState.sortDirection,\n }\n }\n return { sortBy: null, sortDirection: 'asc' }\n })\n\n // Persist column visibility\n useEffect(() => {\n if (columnVisibilityConfig?.persistKey && typeof window !== 'undefined') {\n try {\n localStorage.setItem(\n `table-columns-${columnVisibilityConfig.persistKey}`,\n JSON.stringify(columnVisibility)\n )\n } catch {\n // Ignore localStorage errors\n }\n }\n }, [columnVisibility, columnVisibilityConfig?.persistKey])\n\n // Toggle column visibility\n const toggleColumnVisibility = useCallback((columnId: string) => {\n // Don't allow toggling always-visible columns\n if (columnVisibilityConfig?.alwaysVisible?.includes(columnId)) {\n return\n }\n setColumnVisibility(prev => ({\n ...prev,\n [columnId]: !prev[columnId]\n }))\n }, [columnVisibilityConfig?.alwaysVisible])\n\n // Filter visible columns\n const visibleColumns = useMemo(() => {\n if (!columnVisibilityConfig?.enabled) {\n return columns\n }\n return columns.filter(col => columnVisibility[col.id] !== false)\n }, [columns, columnVisibility, columnVisibilityConfig?.enabled])\n\n // Get hideable columns for the dropdown\n const hideableColumns = useMemo(() => {\n return columns.filter(col => {\n // Can't hide if hideable is explicitly false\n if (col.hideable === false) return false\n // Can't hide if in alwaysVisible list\n if (columnVisibilityConfig?.alwaysVisible?.includes(col.id)) return false\n return true\n })\n }, [columns, columnVisibilityConfig?.alwaysVisible])\n\n // Column reordering hook\n const columnReorder = useColumnReorder({\n columns: visibleColumns,\n initialOrder: columnReorderConfig?.initialOrder,\n enabled: columnReorderConfig?.enabled ?? false,\n onOrderChange: columnReorderConfig?.onOrderChange,\n })\n\n // Final columns to display (ordered if reorder enabled)\n const displayColumns = columnReorderConfig?.enabled\n ? columnReorder.orderedColumns\n : visibleColumns\n\n // Column resize hook\n const columnResize = useColumnResize({\n enabled: columnResizeConfig?.enabled ?? false,\n initialWidths: columnResizeConfig?.initialWidths,\n minWidth: columnResizeConfig?.minWidth ?? 50,\n onWidthChange: columnResizeConfig?.onWidthChange,\n })\n\n // Determine sorting state and handler\n const sortingEnabled = sortingConfig?.enabled ?? true // Default to enabled\n const currentSortBy = sortingConfig?.value?.sortBy ?? localSort.sortBy\n const currentSortDirection = sortingConfig?.value?.sortDirection ?? localSort.sortDirection\n\n const handleSort = useCallback((columnId: string) => {\n const newDirection = currentSortBy === columnId && currentSortDirection === 'asc' ? 'desc' : 'asc'\n const newSort = { sortBy: columnId, sortDirection: newDirection as 'asc' | 'desc' }\n\n if (sortingConfig?.onChange) {\n sortingConfig.onChange(newSort)\n } else {\n setLocalSort(newSort)\n }\n\n // Sync to URL if enabled\n urlState.setSortToURL(newSort)\n }, [currentSortBy, currentSortDirection, sortingConfig, urlState])\n\n // Ensure data is always an array\n const safeData = useMemo(() => Array.isArray(data) ? data : [], [data])\n\n // Apply client-side sorting if no server-side sorting\n const sortedData = useMemo(() => {\n if (sortingConfig?.serverSide || !currentSortBy) {\n return safeData\n }\n\n const column = columns.find(c => c.id === currentSortBy)\n if (!column) return safeData\n\n return [...safeData].sort((a, b) => {\n let valueA: any\n let valueB: any\n\n if (column.sortingFn) {\n return currentSortDirection === 'asc'\n ? column.sortingFn(a, b)\n : column.sortingFn(b, a)\n }\n\n if (column.accessorFn) {\n valueA = column.accessorFn(a)\n valueB = column.accessorFn(b)\n } else if (column.accessorKey) {\n // Handle nested keys like 'firm.name'\n const keys = column.accessorKey.split('.')\n valueA = keys.reduce((obj, key) => obj?.[key], a as any)\n valueB = keys.reduce((obj, key) => obj?.[key], b as any)\n } else {\n return 0\n }\n\n // Handle null/undefined\n if (valueA == null && valueB == null) return 0\n if (valueA == null) return currentSortDirection === 'asc' ? 1 : -1\n if (valueB == null) return currentSortDirection === 'asc' ? -1 : 1\n\n // Compare\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n const comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' })\n return currentSortDirection === 'asc' ? comparison : -comparison\n }\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return currentSortDirection === 'asc' ? valueA - valueB : valueB - valueA\n }\n\n const comparison = String(valueA).localeCompare(String(valueB))\n return currentSortDirection === 'asc' ? comparison : -comparison\n })\n }, [safeData, columns, currentSortBy, currentSortDirection, sortingConfig?.serverSide])\n\n // Pagination hook\n const pagination = usePagination({\n totalCount: paginationConfig?.totalCount || sortedData.length,\n initialPageSize: paginationConfig?.pageSize || 25,\n initialPage: paginationConfig?.currentPage || (initialURLState?.page ?? 1),\n serverSide: paginationConfig?.serverSide || false,\n onPageChange: paginationConfig?.onPageChange,\n })\n\n // Selection hook - supports both controlled and uncontrolled modes\n const selection = useSelection({\n currentPageData: sortedData,\n totalCount: paginationConfig?.totalCount || sortedData.length,\n getRowId,\n onSelectionChange: selectionConfig?.onSelectionChange,\n onSelectAllPages: selectionConfig?.onSelectAllPages,\n // External controlled state\n externalSelectedIds: selectionConfig?.selectedIds,\n externalSelectAllPages: selectionConfig?.selectAllPages,\n })\n\n // Filters hook\n const filters = useFilters({\n initialFilters: filtersConfig?.value || (initialURLState?.filters ?? {}),\n onChange: filtersConfig?.onChange,\n })\n\n // Get current view state for saving\n const getCurrentViewState = useCallback((): Omit<SavedView, 'id' | 'name' | 'createdAt'> => {\n return {\n columnVisibility: columnVisibilityConfig?.enabled ? columnVisibility : undefined,\n columnOrder: columnReorderConfig?.enabled ? columnReorder.columnOrder : undefined,\n sortBy: currentSortBy,\n sortDirection: currentSortDirection,\n filters: filtersConfig?.enabled ? filters.filters : undefined,\n pageSize: paginationConfig?.pageSize,\n }\n }, [\n columnVisibility,\n columnVisibilityConfig?.enabled,\n columnReorder.columnOrder,\n columnReorderConfig?.enabled,\n currentSortBy,\n currentSortDirection,\n filters.filters,\n filtersConfig?.enabled,\n paginationConfig?.pageSize,\n ])\n\n // Keyboard navigation hook\n const keyboard = useTableKeyboard({\n data: sortedData,\n getRowId,\n selectedIds: selection.selectedIds,\n onToggleRow: selection.toggleRow,\n onToggleAll: selection.toggleAll,\n onRowClick,\n onDelete: bulkActions.find(action => action.id === 'delete')?.onClick\n ? (ids) => {\n const deleteAction = bulkActions.find(action => action.id === 'delete')\n if (deleteAction) {\n deleteAction.onClick(ids)\n }\n }\n : undefined,\n tableRef,\n enabled: true,\n })\n\n // Restore focus to search input after state-driven rerenders (e.g., URL sync)\n useEffect(() => {\n if (!searchConfig?.enabled || !searchConfig.preserveFocus) return\n if (!shouldRestoreFocusRef.current) return\n if (searchInputRef.current) {\n searchInputRef.current.focus()\n const len = searchConfig.value?.length ?? 0\n try {\n searchInputRef.current.setSelectionRange(len, len)\n } catch {\n // selection range may fail on some input types; ignore\n }\n }\n shouldRestoreFocusRef.current = false\n }, [searchConfig?.enabled, searchConfig?.preserveFocus, searchConfig?.value])\n\n // External selection state is now synced in useSelection hook\n\n // Sync pagination changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!paginationConfig?.enabled) return\n\n urlState.setPageToURL(pagination.currentPage)\n }, [pagination.currentPage, urlPersistenceConfig?.enabled, paginationConfig?.enabled, urlState])\n\n // Sync filter changes to URL\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!filtersConfig?.enabled) return\n\n urlState.setFiltersToURL(filters.filters)\n }, [filters.filters, urlPersistenceConfig?.enabled, filtersConfig?.enabled, urlState])\n\n // Initialize search from URL on mount\n useEffect(() => {\n if (!urlPersistenceConfig?.enabled) return\n if (!searchConfig?.enabled) return\n if (!initialURLState?.search) return\n\n // Only set if search value is empty (first mount)\n if (!searchConfig.value && initialURLState.search) {\n searchConfig.onChange(initialURLState.search)\n }\n }, []) // Only run on mount\n\n // Check if all current page rows are selected\n const allRowsSelected = useMemo(() => {\n if (sortedData.length === 0) return false\n return sortedData.every(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId])\n\n // Prepare selected data for export\n const selectedDataForExport = useMemo(() => {\n if (!selectionConfig?.enabled || selection.selectedIds.size === 0) {\n return undefined\n }\n return sortedData.filter(row => selection.selectedIds.has(getRowId(row)))\n }, [sortedData, selection.selectedIds, getRowId, selectionConfig?.enabled])\n\n // Handle bulk action execution\n const handleExecuteBulkAction = async (action: typeof bulkActions[0]) => {\n const selectedIds = selection.selectAllPages\n ? new Set(sortedData.map(getRowId)) // In real implementation, this would fetch all IDs\n : selection.selectedIds\n\n // Show confirmation if needed\n if (action.confirmMessage) {\n const message = action.confirmMessage.replace('{count}', selectedIds.size.toString())\n if (!confirm(message)) {\n return\n }\n }\n\n // Check max selection\n if (action.maxSelection && selectedIds.size > action.maxSelection) {\n alert(`Maximum ${action.maxSelection} items can be selected for this action`)\n return\n }\n\n try {\n await action.onClick(selectedIds)\n // Clear selection after successful action\n selection.clearSelection()\n } catch (error) {\n console.error('Bulk action failed:', error)\n }\n }\n\n // Loading state\n if (loading && sortedData.length === 0) {\n return (\n <div className={cn('flex items-center justify-center p-12', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )\n }\n\n // Empty state\n if (!loading && sortedData.length === 0 && emptyState) {\n return <div className={className}>{emptyState}</div>\n }\n\n return (\n <div ref={tableRef} className={cn('space-y-4', className)} tabIndex={0}>\n {/* Standard Table Toolbar */}\n <StandardTableToolbar\n searchEnabled={searchConfig?.enabled}\n searchPlaceholder={searchConfig?.placeholder}\n searchValue={searchConfig?.value}\n onSearchChange={(value) => {\n if (searchConfig) {\n shouldRestoreFocusRef.current = true\n searchConfig.onChange(value)\n urlState.setSearchToURL(value)\n }\n }}\n searchInputRef={searchInputRef}\n searchAutoFocus={searchConfig?.autoFocus}\n columnVisibilityEnabled={columnVisibilityConfig?.enabled}\n hideableColumns={hideableColumns}\n columnVisibility={columnVisibility}\n onToggleColumnVisibility={toggleColumnVisibility}\n exportEnabled={exportConfig?.enabled}\n exportData={sortedData}\n exportColumns={displayColumns}\n exportProps={exportConfig?.enabled ? {\n filteredData: sortedData.length < safeData.length ? sortedData : undefined,\n selectedData: selectedDataForExport,\n baseFilename: exportConfig.baseFilename,\n showProgress: exportConfig.showProgress,\n onExportStart: exportConfig.onExportStart,\n onExportComplete: exportConfig.onExportComplete,\n onExportError: exportConfig.onExportError,\n } : undefined}\n savedViewsEnabled={savedViewsConfig?.enabled}\n savedViews={savedViewsConfig?.views}\n currentViewId={savedViewsConfig?.currentViewId}\n savedViewsProps={savedViewsConfig?.enabled ? {\n onSaveView: savedViewsConfig.onSaveView,\n onUpdateView: savedViewsConfig.onUpdateView,\n onDeleteView: savedViewsConfig.onDeleteView,\n onLoadView: savedViewsConfig.onLoadView || (() => {}),\n getCurrentViewState,\n } : undefined}\n />\n\n {/* Filters */}\n {filtersConfig?.enabled && filtersConfig.config && (\n <TableFilters config={filtersConfig.config} filters={filters} />\n )}\n\n {/* Bulk Actions Bar */}\n {selectionConfig?.enabled && bulkActions.length > 0 && (\n <BulkActionBar\n selectedCount={selection.getSelectedCount()}\n selectAllPages={selection.selectAllPages}\n totalCount={paginationConfig?.totalCount || sortedData.length}\n bulkActions={bulkActions}\n onClearSelection={selection.clearSelection}\n onExecuteAction={handleExecuteBulkAction}\n />\n )}\n\n {/* Selection summary - only show when no bulk actions (BulkActionBar handles this otherwise) */}\n {selectionConfig?.enabled && selection.getSelectedCount() > 0 && bulkActions.length === 0 && (\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div>\n {selection.selectAllPages ? (\n <span className=\"font-medium text-blue-600\">\n All {paginationConfig?.totalCount || sortedData.length} items selected\n </span>\n ) : (\n <span>\n {selection.getSelectedCount()} item{selection.getSelectedCount() === 1 ? '' : 's'} selected{allRowsSelected ? ' on this page' : ''}\n </span>\n )}\n </div>\n\n {/* Show \"Select All Pages\" button if not all pages selected and there are multiple pages */}\n {!selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium\"\n >\n Select all {paginationConfig.totalCount} items\n </button>\n )}\n </div>\n )}\n\n {/* Select all pages option - shown below bulk action bar when applicable */}\n {selectionConfig?.enabled &&\n bulkActions.length > 0 &&\n !selection.selectAllPages &&\n allRowsSelected &&\n paginationConfig &&\n (paginationConfig.totalCount || 0) > sortedData.length && (\n <div className=\"flex items-center justify-center p-2 bg-blue-50 border border-blue-200 rounded-lg\">\n <button\n onClick={selection.selectAllPagesToggle}\n className=\"text-blue-600 hover:text-blue-800 font-medium text-sm\"\n >\n Select all {paginationConfig.totalCount} items across all pages\n </button>\n </div>\n )}\n\n {/* Data Table */}\n <DataTableCore\n data={sortedData}\n columns={displayColumns}\n getRowId={getRowId}\n selectionEnabled={selectionConfig?.enabled}\n selectedIds={selection.selectedIds}\n onToggleRow={selection.toggleRow}\n onToggleAll={selection.toggleAll}\n allRowsSelected={allRowsSelected}\n renderSelectionCell={selectionConfig?.renderSelectionCell}\n sortingEnabled={sortingEnabled}\n sortBy={currentSortBy}\n sortDirection={currentSortDirection}\n onSort={handleSort}\n columnReorderEnabled={columnReorderConfig?.enabled}\n onColumnDragEnd={columnReorder.handleDragEnd}\n columnResizeEnabled={columnResizeConfig?.enabled}\n columnWidths={columnResize.columnWidths}\n onColumnResizeStart={columnResize.startResize}\n isResizing={columnResize.isResizing}\n inlineEditEnabled={inlineEditConfig?.enabled}\n onCellEdit={inlineEditConfig?.onSave}\n rowActions={rowActions}\n onRowClick={onRowClick}\n loadingRows={loadingRows}\n />\n\n {/* Pagination */}\n {paginationConfig?.enabled && (\n <TablePagination\n pagination={pagination}\n totalFilteredCount={paginationConfig.totalCount}\n />\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Button } from '../../../ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../../ui/dropdown-menu'\nimport { cn } from '../../../../lib/utils'\nimport { MoreVertical } from 'lucide-react'\nimport { useState } from 'react'\nimport { CardActionsProps } from './types'\n\nexport function CardActions({\n actions,\n row,\n className,\n maxVisibleActions = 2\n}: CardActionsProps) {\n const [isExecuting, setIsExecuting] = useState<string | null>(null)\n\n const visibleActions = actions.filter((action) => {\n return !(action.hidden && action.hidden(row))\n })\n\n if (visibleActions.length === 0) {\n return null\n }\n\n const handleActionClick = async (action: any) => {\n if (action.disabled && action.disabled(row)) {\n return\n }\n\n setIsExecuting(action.id)\n try {\n await action.onClick(row)\n } finally {\n setIsExecuting(null)\n }\n }\n\n const primaryActions = visibleActions.slice(0, maxVisibleActions)\n const overflowActions = visibleActions.slice(maxVisibleActions)\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {primaryActions.map((action) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <Button\n key={action.id}\n variant={action.variant || 'ghost'}\n size=\"sm\"\n className={cn(\n 'h-9 min-w-[44px]',\n Icon && !action.label && 'w-9 p-0',\n action.className\n )}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n >\n {Icon && (\n <Icon className={cn(\n 'h-4 w-4',\n action.label && 'mr-1.5'\n )} />\n )}\n {action.label && (\n <span className=\"text-xs font-medium\">{action.label}</span>\n )}\n </Button>\n )\n })}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-9 w-9 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVertical className=\"h-4 w-4\" />\n <span className=\"sr-only\">More actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n {overflowActions.map((action, index) => {\n const Icon = action.icon\n const isDisabled = action.disabled ? action.disabled(row) : false\n const isLoading = isExecuting === action.id\n\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={(e) => {\n e.stopPropagation()\n handleActionClick(action)\n }}\n disabled={isDisabled || isLoading}\n className={cn(\n action.variant === 'destructive' && 'text-destructive focus:text-destructive',\n action.className\n )}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n <span>{action.label || 'Action'}</span>\n </DropdownMenuItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { Card as UICard, CardContent, CardHeader, CardFooter } from '../../../ui/card'\nimport { Checkbox } from '../../../ui/checkbox'\nimport { cn } from '../../../../lib/utils'\nimport { Loader2 } from 'lucide-react'\nimport { CardProps, MobileCardField } from './types'\nimport { CardActions } from './CardActions'\n\nfunction getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nfunction renderField(field: MobileCardField, row: any) {\n const value = getNestedValue(row, field.key)\n\n if (field.render) {\n return field.render(value, row)\n }\n\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground\">-</span>\n }\n\n if (typeof value === 'boolean') {\n return <span>{value ? 'Yes' : 'No'}</span>\n }\n\n return <span>{String(value)}</span>\n}\n\nexport function Card<TData = any>({\n row,\n config,\n rowId,\n isLoading = false,\n className\n}: CardProps<TData>) {\n const {\n titleKey,\n titleRender,\n subtitleKey,\n subtitleRender,\n imageKey,\n imageRender,\n primaryFields,\n secondaryFields,\n actions,\n renderCustomContent,\n renderCustomHeader,\n renderCustomFooter,\n showSelection,\n onSelectionChange,\n isSelected,\n onClick,\n headerClassName,\n contentClassName,\n footerClassName,\n } = config\n\n const handleClick = () => {\n if (onClick && !isLoading) {\n onClick(row)\n }\n }\n\n const handleSelectionChange = (checked: boolean) => {\n if (onSelectionChange && rowId) {\n onSelectionChange(rowId, checked)\n }\n }\n\n const selected = isSelected ? isSelected(row) : false\n\n return (\n <UICard\n className={cn(\n 'relative transition-all duration-200',\n onClick && !isLoading && 'cursor-pointer hover:shadow-md hover:border-primary/50',\n selected && 'ring-2 ring-primary border-primary',\n isLoading && 'opacity-60 pointer-events-none',\n className,\n config.className\n )}\n onClick={handleClick}\n >\n {isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-background/50 rounded-lg z-10\">\n <Loader2 className=\"h-6 w-6 animate-spin text-primary\" />\n </div>\n )}\n\n <CardHeader className={cn('pb-3', headerClassName)}>\n {renderCustomHeader ? (\n renderCustomHeader(row)\n ) : (\n <div className=\"flex items-start gap-3\">\n {showSelection && (\n <div\n className=\"flex items-center pt-1\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={selected}\n onCheckedChange={handleSelectionChange}\n aria-label=\"Select row\"\n className=\"h-5 w-5\"\n />\n </div>\n )}\n\n {(imageKey || imageRender) && (\n <div className=\"flex-shrink-0\">\n {imageRender ? imageRender(row) : (\n <div className=\"h-12 w-12 rounded-full bg-gradient-to-br from-primary/20 to-primary/10 flex items-center justify-center\">\n <span className=\"text-lg font-semibold text-primary\">\n {String(getNestedValue(row, titleKey) || '?').charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-base leading-tight truncate\">\n {titleRender ? titleRender(row) : getNestedValue(row, titleKey)}\n </h3>\n {subtitleKey && (\n <p className=\"text-sm text-muted-foreground mt-1 truncate\">\n {subtitleRender ? subtitleRender(row) : getNestedValue(row, subtitleKey)}\n </p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div onClick={(e) => e.stopPropagation()}>\n <CardActions\n actions={actions}\n row={row}\n maxVisibleActions={2}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </CardHeader>\n\n <CardContent className={cn('pt-0 space-y-4', contentClassName)}>\n {renderCustomContent ? (\n renderCustomContent(row)\n ) : (\n <>\n {primaryFields && primaryFields.length > 0 && (\n <div className=\"space-y-3\">\n {primaryFields.map((field) => (\n <div\n key={field.key}\n className={cn(\n 'flex justify-between items-center gap-2',\n field.className\n )}\n >\n <span className=\"text-sm font-medium text-muted-foreground flex-shrink-0\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}:\n </span>\n <div className=\"text-sm font-medium text-right truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {secondaryFields && secondaryFields.length > 0 && (\n <div className=\"border-t pt-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n {secondaryFields.map((field) => (\n <div\n key={field.key}\n className={cn('space-y-1', field.className)}\n >\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n {field.label || field.key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())}\n </div>\n <div className=\"text-sm font-semibold truncate\">\n {renderField(field, row)}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </CardContent>\n\n {renderCustomFooter && (\n <CardFooter className={cn('pt-0', footerClassName)}>\n {renderCustomFooter(row)}\n </CardFooter>\n )}\n </UICard>\n )\n}\n","import { ReactNode } from 'react'\n\nexport interface MobileCardField {\n key: string\n label?: string\n render?: (value: any, row: any) => ReactNode\n className?: string\n}\n\nexport interface MobileCardAction {\n id: string\n label: string\n icon?: React.ComponentType<{ className?: string }>\n onClick: (row: any) => void | Promise<void>\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n disabled?: (row: any) => boolean\n hidden?: (row: any) => boolean\n className?: string\n}\n\nexport interface MobileCardConfig<TData = any> {\n titleKey: string\n titleRender?: (row: TData) => ReactNode\n\n subtitleKey?: string\n subtitleRender?: (row: TData) => ReactNode\n\n imageKey?: string\n imageRender?: (row: TData) => ReactNode\n\n primaryFields: MobileCardField[]\n secondaryFields?: MobileCardField[]\n\n actions?: MobileCardAction[]\n\n renderCustomContent?: (row: TData) => ReactNode\n renderCustomHeader?: (row: TData) => ReactNode\n renderCustomFooter?: (row: TData) => ReactNode\n\n showSelection?: boolean\n onSelectionChange?: (id: string, selected: boolean) => void\n isSelected?: (row: TData) => boolean\n\n onClick?: (row: TData) => void\n\n className?: string\n headerClassName?: string\n contentClassName?: string\n footerClassName?: string\n}\n\nexport interface MobileViewProps<TData = any> {\n data: TData[]\n config: MobileCardConfig<TData>\n getRowId?: (row: TData) => string\n loading?: boolean\n loadingRows?: Set<string>\n emptyState?: ReactNode\n className?: string\n}\n\nexport interface CardProps<TData = any> {\n row: TData\n config: MobileCardConfig<TData>\n rowId?: string\n isLoading?: boolean\n className?: string\n}\n\nexport interface CardActionsProps {\n actions: MobileCardAction[]\n row: any\n className?: string\n maxVisibleActions?: number\n}\n\nexport const MOBILE_BREAKPOINT = 768 // px\n","'use client'\n\nimport { cn } from '../../../../lib/utils'\nimport { useEffect, useState } from 'react'\nimport { Card } from './Card'\nimport { MobileViewProps, MOBILE_BREAKPOINT } from './types'\n\nexport function MobileView<TData = any>({\n data,\n config,\n getRowId,\n loading = false,\n loadingRows,\n emptyState,\n className\n}: MobileViewProps<TData>) {\n const [isMobile, setIsMobile] = useState(false)\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n\n checkMobile()\n window.addEventListener('resize', checkMobile)\n return () => window.removeEventListener('resize', checkMobile)\n }, [])\n\n if (data.length === 0 && !loading) {\n return (\n <div className={cn('flex items-center justify-center py-12', className)}>\n {emptyState || (\n <div className=\"text-center\">\n <p className=\"text-muted-foreground text-sm\">No data to display</p>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'space-y-4',\n isMobile && 'space-y-3',\n className\n )}\n >\n {data.map((row, index) => {\n const rowId = getRowId ? getRowId(row) : String(index)\n const isRowLoading = loadingRows?.has(rowId) || false\n\n return (\n <Card\n key={rowId}\n row={row}\n config={config}\n rowId={rowId}\n isLoading={isRowLoading}\n />\n )\n })}\n </div>\n )\n}\n\nexport { Card } from './Card'\nexport { CardActions } from './CardActions'\nexport type {\n MobileViewProps,\n MobileCardConfig,\n MobileCardField,\n MobileCardAction,\n CardProps,\n CardActionsProps\n} from './types'\nexport { MOBILE_BREAKPOINT } from './types'\n","import { ReactNode } from 'react'\n\nexport type CellRenderer<TData = any> = (value: any, row: TData) => ReactNode\n\nexport interface RendererConfig {\n [columnId: string]: CellRenderer\n}\n\nexport function createCellRenderer<TData = any>(\n render: (value: any, row: TData) => ReactNode\n): CellRenderer<TData> {\n return render\n}\n\nexport function getNestedValue(obj: any, path: string): any {\n if (!path || !obj) return obj\n\n const keys = path.split('.')\n let value = obj\n\n for (const key of keys) {\n if (value === null || value === undefined) return undefined\n value = value[key]\n }\n\n return value\n}\n\nexport const commonRenderers = {\n text: createCellRenderer((value) => String(value || '-')),\n\n number: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat().format(Number(value))\n }),\n\n currency: createCellRenderer((value, row, options?: { currency?: string; locale?: string }) => {\n if (value === null || value === undefined) return '-'\n return new Intl.NumberFormat(options?.locale || 'en-US', {\n style: 'currency',\n currency: options?.currency || 'USD',\n }).format(Number(value))\n }),\n\n percentage: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return `${Number(value).toFixed(2)}%`\n }),\n\n date: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleDateString()\n }),\n\n datetime: createCellRenderer((value) => {\n if (!value) return '-'\n const date = new Date(value)\n return date.toLocaleString()\n }),\n\n boolean: createCellRenderer((value) => {\n if (value === null || value === undefined) return '-'\n return value ? 'Yes' : 'No'\n }),\n\n badge: createCellRenderer((value, row, options?: { variant?: 'default' | 'success' | 'warning' | 'error' }) => {\n if (!value) return null\n return value\n }),\n\n truncate: createCellRenderer((value, row, options?: { maxLength?: number }) => {\n if (!value) return '-'\n const str = String(value)\n const maxLength = options?.maxLength || 50\n if (str.length <= maxLength) return str\n return `${str.substring(0, maxLength)}...`\n }),\n\n array: createCellRenderer((value, row, options?: { separator?: string; maxItems?: number }) => {\n if (!Array.isArray(value) || value.length === 0) return '-'\n const maxItems = options?.maxItems || value.length\n const items = value.slice(0, maxItems)\n const separator = options?.separator || ', '\n const display = items.join(separator)\n if (value.length > maxItems) {\n return `${display} +${value.length - maxItems} more`\n }\n return display\n }),\n}\n\nexport function combineRenderers<TData = any>(\n ...renderers: CellRenderer<TData>[]\n): CellRenderer<TData> {\n return (value, row) => {\n for (const renderer of renderers) {\n const result = renderer(value, row)\n if (result !== null && result !== undefined) {\n return result\n }\n }\n return value\n }\n}\n","export interface TableTheme {\n name: string\n container: string\n header: string\n headerCell: string\n body: string\n row: string\n rowHover: string\n rowSelected: string\n cell: string\n pagination: string\n emptyState: string\n mobileCard: string\n mobileCardHeader: string\n mobileCardContent: string\n}\n\nexport const defaultTheme: TableTheme = {\n name: 'default',\n container: 'w-full',\n header: 'bg-muted/50',\n headerCell: 'px-4 py-3 text-left text-sm font-medium text-muted-foreground',\n body: '',\n row: 'border-b transition-colors',\n rowHover: 'hover:bg-muted/50',\n rowSelected: 'bg-primary/10 border-primary',\n cell: 'px-4 py-3 text-sm',\n pagination: 'flex items-center justify-between px-4 py-3 border-t',\n emptyState: 'flex items-center justify-center py-12 text-muted-foreground',\n mobileCard: 'rounded-lg border bg-card shadow-sm',\n mobileCardHeader: 'p-4 pb-2',\n mobileCardContent: 'p-4 pt-2',\n}\n\nexport const compactTheme: TableTheme = {\n ...defaultTheme,\n name: 'compact',\n headerCell: 'px-2 py-2 text-left text-xs font-medium text-muted-foreground',\n cell: 'px-2 py-2 text-xs',\n pagination: 'flex items-center justify-between px-2 py-2 border-t',\n mobileCardHeader: 'p-3 pb-1',\n mobileCardContent: 'p-3 pt-1',\n}\n\nexport const spaciousTheme: TableTheme = {\n ...defaultTheme,\n name: 'spacious',\n headerCell: 'px-6 py-4 text-left text-sm font-medium text-muted-foreground',\n cell: 'px-6 py-4 text-sm',\n pagination: 'flex items-center justify-between px-6 py-4 border-t',\n mobileCardHeader: 'p-6 pb-3',\n mobileCardContent: 'p-6 pt-3',\n}\n\nexport const minimalTheme: TableTheme = {\n ...defaultTheme,\n name: 'minimal',\n header: '',\n headerCell: 'px-4 py-3 text-left text-sm font-semibold',\n row: 'border-b border-border/50',\n rowHover: 'hover:bg-muted/30',\n mobileCard: 'rounded-lg border border-border/50 bg-card',\n}\n\nexport const themes = {\n default: defaultTheme,\n compact: compactTheme,\n spacious: spaciousTheme,\n minimal: minimalTheme,\n}\n\nexport type ThemeName = keyof typeof themes\n\nexport function getTheme(themeName: ThemeName = 'default'): TableTheme {\n return themes[themeName] || defaultTheme\n}\n\nexport function createCustomTheme(\n baseTheme: ThemeName = 'default',\n overrides: Partial<TableTheme>\n): TableTheme {\n return {\n ...themes[baseTheme],\n ...overrides,\n name: overrides.name || `custom-${baseTheme}`,\n }\n}\n","import { MobileCardConfig } from '../components/MobileView/types'\n\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\nexport function validateMobileCardConfig<TData = any>(\n config: MobileCardConfig<TData>\n): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!config.titleKey && !config.titleRender) {\n errors.push('Mobile card config must have either titleKey or titleRender')\n }\n\n if (!config.primaryFields || config.primaryFields.length === 0) {\n warnings.push('Mobile card config has no primary fields defined')\n }\n\n if (config.primaryFields) {\n config.primaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Primary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.secondaryFields) {\n config.secondaryFields.forEach((field, index) => {\n if (!field.key && !field.render) {\n errors.push(`Secondary field at index ${index} must have either key or render function`)\n }\n })\n }\n\n if (config.actions) {\n config.actions.forEach((action, index) => {\n if (!action.id) {\n errors.push(`Action at index ${index} must have an id`)\n }\n if (!action.onClick) {\n errors.push(`Action '${action.id || index}' must have an onClick handler`)\n }\n if (!action.label && !action.icon) {\n warnings.push(`Action '${action.id || index}' should have either a label or icon`)\n }\n })\n }\n\n if (config.showSelection && !config.onSelectionChange) {\n warnings.push('showSelection is enabled but onSelectionChange handler is not provided')\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function validateColumnConfig(columns: any[]): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n if (!columns || columns.length === 0) {\n errors.push('At least one column must be defined')\n return { valid: false, errors, warnings }\n }\n\n const columnIds = new Set<string>()\n\n columns.forEach((column, index) => {\n if (!column.id && !column.accessorKey) {\n errors.push(`Column at index ${index} must have either id or accessorKey`)\n }\n\n const columnId = column.id || column.accessorKey\n\n if (columnIds.has(columnId)) {\n errors.push(`Duplicate column id: '${columnId}'`)\n }\n columnIds.add(columnId)\n\n if (!column.header && !column.hideHeader) {\n warnings.push(`Column '${columnId}' has no header defined`)\n }\n\n if (!column.cell && !column.accessorKey && !column.accessorFn) {\n warnings.push(`Column '${columnId}' has no way to access data (missing cell, accessorKey, or accessorFn)`)\n }\n })\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\nexport function logValidationResults(\n configName: string,\n result: ValidationResult,\n throwOnError: boolean = false\n): void {\n if (result.errors.length > 0) {\n console.error(`[${configName}] Validation Errors:`, result.errors)\n if (throwOnError) {\n throw new Error(`${configName} validation failed: ${result.errors.join(', ')}`)\n }\n }\n\n if (result.warnings.length > 0) {\n console.warn(`[${configName}] Validation Warnings:`, result.warnings)\n }\n\n if (result.valid && result.warnings.length === 0) {\n console.log(`[${configName}] Configuration is valid`)\n }\n}\n","'use client';\n\nimport { ReactNode, useState } from 'react';\nimport Link from 'next/link';\nimport { usePathname } from 'next/navigation';\nimport { cn } from '../../lib/utils';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Button } from '../ui/button';\n\nexport interface SidebarLink {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface SidebarSection {\n title?: string;\n links: SidebarLink[];\n}\n\nexport interface SidebarProps {\n /**\n * Application name/logo\n */\n appName: string;\n /**\n * Navigation sections\n */\n sections: SidebarSection[];\n /**\n * User dropdown content (rendered at bottom of sidebar)\n */\n userDropdown?: ReactNode;\n /**\n * Additional className for sidebar\n */\n className?: string;\n /**\n * Whether sidebar is collapsible\n */\n collapsible?: boolean;\n /**\n * Default collapsed state\n */\n defaultCollapsed?: boolean;\n}\n\nexport function Sidebar({\n appName,\n sections,\n userDropdown,\n className,\n collapsible = true,\n defaultCollapsed = false,\n}: SidebarProps) {\n const pathname = usePathname();\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n const isActivePath = (href: string) => {\n if (href === '/') {\n return pathname === '/';\n }\n return pathname.startsWith(href);\n };\n\n return (\n <div\n className={cn(\n 'fixed left-0 inset-y-0 z-30 flex flex-col bg-gray-900 text-white transition-all duration-200',\n collapsed ? 'w-20' : 'w-64',\n className\n )}\n >\n {/* Logo */}\n <div className=\"p-4 border-b border-gray-800\">\n <Link\n href=\"/\"\n className={cn(\n 'font-bold hover:text-primary-400 transition-colors',\n collapsed ? 'text-lg' : 'text-xl'\n )}\n >\n {collapsed ? appName.substring(0, 2).toUpperCase() : appName}\n </Link>\n </div>\n\n {/* Navigation */}\n <nav className=\"flex-1 overflow-y-auto p-4 space-y-6\">\n {sections.map((section, idx) => (\n <div key={idx}>\n {section.title && !collapsed && (\n <h3 className=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2 px-3\">\n {section.title}\n </h3>\n )}\n <div className=\"space-y-1\">\n {section.links.map((link) => {\n const isActive = isActivePath(link.href);\n return (\n <Link\n key={link.href}\n href={link.href}\n className={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-md text-sm font-medium transition-colors',\n isActive\n ? 'bg-primary-600 text-white'\n : 'text-gray-300 hover:bg-gray-800 hover:text-white',\n collapsed && 'justify-center'\n )}\n >\n {link.icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">\n {link.icon}\n </span>\n )}\n {!collapsed && <span>{link.label}</span>}\n </Link>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n\n {/* User Dropdown */}\n {userDropdown && (\n <div className=\"p-4 border-t border-gray-800\">\n {userDropdown}\n </div>\n )}\n\n {/* Collapse Toggle */}\n {collapsible && (\n <div className={cn('p-4 border-t border-gray-800', userDropdown && 'border-t-0')}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className=\"w-full text-gray-400 hover:text-white hover:bg-gray-800\"\n >\n {collapsed ? (\n <ChevronRight className=\"w-5 h-5\" />\n ) : (\n <>\n <ChevronLeft className=\"w-5 h-5 mr-2\" />\n <span>Collapse</span>\n </>\n )}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Layout wrapper that adds proper spacing for sidebar\n */\nexport interface SidebarLayoutProps {\n children: ReactNode;\n collapsed?: boolean;\n}\n\nexport function SidebarLayout({ children, collapsed = false }: SidebarLayoutProps) {\n return (\n <div className=\"flex h-screen bg-gray-50\">\n {/* Spacer for fixed sidebar */}\n <div className={cn('flex-shrink-0 transition-all duration-200', collapsed ? 'w-20' : 'w-64')} />\n\n {/* Main content area */}\n <div className=\"flex-1 overflow-auto\">\n <main className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import DOMPurify from 'isomorphic-dompurify';\nimport { type ElementType, type HTMLAttributes } from 'react';\n\ninterface SafeHtmlProps extends HTMLAttributes<HTMLElement> {\n html: string;\n as?: ElementType;\n}\n\n/**\n * Renders user-supplied or external HTML safely by running it through DOMPurify.\n * Strips script tags, event handlers, javascript: URLs, and other XSS vectors.\n * Use this instead of dangerouslySetInnerHTML anywhere app content is rendered.\n */\nexport function SafeHtml({ html, as: Tag = 'div', ...props }: SafeHtmlProps) {\n const sanitized = DOMPurify.sanitize(html, { ALLOW_DATA_ATTR: false });\n // eslint-disable-next-line react/no-danger\n return <Tag {...props} dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n","import * as React from 'react'\n\nconst TOAST_LIMIT = 5\nconst TOAST_AUTO_DISMISS = 5000\n\nexport type ToastVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info'\n\nexport interface ToasterToast {\n id: string\n title?: string\n description?: string\n action?: React.ReactNode\n variant?: ToastVariant\n duration?: number\n}\n\ntype Action =\n | { type: 'ADD_TOAST'; toast: ToasterToast }\n | { type: 'UPDATE_TOAST'; toast: Partial<ToasterToast> & { id: string } }\n | { type: 'DISMISS_TOAST'; toastId?: string }\n | { type: 'REMOVE_TOAST'; toastId?: string }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nfunction addToRemoveQueue(toastId: string, delay: number) {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({ type: 'REMOVE_TOAST', toastId })\n }, delay)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'ADD_TOAST':\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case 'UPDATE_TOAST':\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case 'DISMISS_TOAST': {\n const { toastId } = action\n\n if (toastId) {\n addToRemoveQueue(toastId, 300)\n } else {\n state.toasts.forEach((t) => addToRemoveQueue(t.id, 300))\n }\n\n return state\n }\n\n case 'REMOVE_TOAST':\n if (action.toastId === undefined) {\n return { ...state, toasts: [] }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => listener(memoryState))\n}\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_VALUE\n return count.toString()\n}\n\ntype ToastInput = Omit<ToasterToast, 'id'>\n\nfunction toast(props: ToastInput) {\n const id = genId()\n const duration = props.duration ?? TOAST_AUTO_DISMISS\n\n dispatch({\n type: 'ADD_TOAST',\n toast: { ...props, id },\n })\n\n // Auto-dismiss\n if (duration > 0) {\n addToRemoveQueue(id, duration)\n }\n\n const update = (updateProps: Partial<ToasterToast>) =>\n dispatch({ type: 'UPDATE_TOAST', toast: { ...updateProps, id } })\n\n const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id })\n\n return { id, dismiss, update }\n}\n\nfunction clearAllToasts() {\n // Clear all pending timeouts\n toastTimeouts.forEach((timeout) => clearTimeout(timeout))\n toastTimeouts.clear()\n dispatch({ type: 'REMOVE_TOAST', toastId: undefined })\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: 'DISMISS_TOAST', toastId }),\n clear: clearAllToasts,\n }\n}\n\nexport { useToast, toast, clearAllToasts }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { useToast, type ToastVariant } from './use-toast'\n\nconst variantClasses: Record<ToastVariant, string> = {\n default: 'bg-background border-border text-foreground',\n destructive: 'bg-destructive border-destructive text-destructive-foreground',\n success: 'bg-green-50 border-green-200 text-green-900',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-900',\n info: 'bg-blue-50 border-blue-200 text-blue-900',\n}\n\nexport function Toaster() {\n const { toasts, dismiss } = useToast()\n\n if (toasts.length === 0) return null\n\n return (\n <div\n className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 w-full max-w-sm\"\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <div\n key={t.id}\n className={cn(\n 'rounded-lg border p-4 shadow-lg transition-all animate-in slide-in-from-bottom-2 fade-in-0',\n variantClasses[t.variant ?? 'default']\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1\">\n {t.title && (\n <div className=\"text-sm font-semibold\">{t.title}</div>\n )}\n {t.description && (\n <div className=\"text-sm opacity-90 mt-1\">{t.description}</div>\n )}\n </div>\n <button\n onClick={() => dismiss(t.id)}\n className=\"shrink-0 rounded-sm opacity-70 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss notification\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n {t.action && <div className=\"mt-2\">{t.action}</div>}\n </div>\n ))}\n </div>\n )\n}\n","import { toast } from './use-toast'\n\nexport interface NotifyOptions {\n title?: string\n description?: string\n duration?: number\n}\n\nfunction success(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'success', ...opts })\n}\n\nfunction error(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'destructive', ...opts })\n}\n\nfunction warning(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'warning', ...opts })\n}\n\nfunction info(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'info', ...opts })\n}\n\nexport const notify = { success, error, warning, info }\n\nexport function useNotify() {\n return notify\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface EmptyStateAction {\n label: string\n onClick: () => void\n}\n\nexport interface EmptyStateProps {\n title: string\n description?: string\n action?: EmptyStateAction\n className?: string\n}\n\nexport function EmptyState({\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <h3 className=\"text-xl font-semibold text-foreground mb-3\">{title}</h3>\n {description && (\n <p className=\"text-base text-muted-foreground mb-8 max-w-md leading-relaxed\">\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium bg-primary text-primary-foreground shadow hover:bg-primary/90 h-9 px-4 py-2 transition-colors\"\n aria-label={action.label}\n >\n {action.label}\n </button>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { cn } from '../../lib/utils'\n\ninterface DialogContextValue {\n isLoading: boolean\n setIsLoading: (loading: boolean) => void\n canClose: boolean\n setCanClose: (canClose: boolean) => void\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\nfunction useDialogContext() {\n const context = React.useContext(DialogContext)\n if (!context) {\n throw new Error('Dialog components must be used within BaseDialog')\n }\n return context\n}\n\nexport interface BaseDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n size?: 'sm' | 'md' | 'lg'\n loading?: boolean\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n}\n\nexport function BaseDialog({\n open,\n onOpenChange,\n children,\n size = 'md',\n loading = false,\n}: BaseDialogProps) {\n const [isLoading, setIsLoading] = React.useState(loading)\n const [canClose, setCanClose] = React.useState(!loading)\n\n React.useEffect(() => {\n setIsLoading(loading)\n setCanClose(!loading)\n }, [loading])\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (!newOpen && !canClose) {\n return\n }\n onOpenChange(newOpen)\n },\n [canClose, onOpenChange]\n )\n\n const contextValue = React.useMemo(\n () => ({ isLoading, setIsLoading, canClose, setCanClose }),\n [isLoading, canClose]\n )\n\n return (\n <DialogContext.Provider value={contextValue}>\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n sizeClasses[size]\n )}\n onInteractOutside={(e) => {\n if (!canClose) e.preventDefault()\n }}\n onEscapeKeyDown={(e) => {\n if (!canClose) e.preventDefault()\n }}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n )\n}\n\nexport interface DialogHeaderProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogHeader({ children, className }: DialogHeaderProps) {\n const { canClose } = useDialogContext()\n\n return (\n <div className={cn('flex items-start justify-between', className)}>\n <div className=\"flex flex-col space-y-1.5\">{children}</div>\n <DialogPrimitive.Close\n className={cn(\n 'rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none',\n !canClose && 'pointer-events-none opacity-30'\n )}\n disabled={!canClose}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </div>\n )\n}\n\nexport interface DialogTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogTitle({ children, className }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n className={cn(\n 'text-lg font-semibold leading-none tracking-tight',\n className\n )}\n >\n {children}\n </DialogPrimitive.Title>\n )\n}\n\nexport interface DialogBodyProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogBody({ children, className }: DialogBodyProps) {\n return (\n <div className={cn('py-4 overflow-y-auto', className)}>{children}</div>\n )\n}\n\nexport interface DialogFooterProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogFooter({ children, className }: DialogFooterProps) {\n return (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n// Compound component pattern\nBaseDialog.Header = DialogHeader\nBaseDialog.Title = DialogTitle\nBaseDialog.Body = DialogBody\nBaseDialog.Footer = DialogFooter\n\nexport { useDialogContext }\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface StatusBadgeConfig {\n label: string\n className: string\n}\n\nexport interface StatusBadgeProps<T extends string> {\n status: T\n config: Record<T, StatusBadgeConfig>\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-xs',\n}\n\nexport function StatusBadge<T extends string>({\n status,\n config,\n size = 'md',\n className,\n}: StatusBadgeProps<T>) {\n const entry = config[status]\n\n if (!entry) {\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium bg-gray-100 text-gray-700 border border-gray-200',\n sizeClasses[size],\n className\n )}\n >\n {status}\n </span>\n )\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium',\n sizeClasses[size],\n entry.className,\n className\n )}\n >\n {entry.label}\n </span>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface TableSkeletonProps {\n rows?: number\n columns?: number\n className?: string\n}\n\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n className,\n}: TableSkeletonProps) {\n return (\n <div className={cn('bg-background rounded-lg border', className)}>\n {/* Header skeleton */}\n <div className=\"p-4 border-b\">\n <div className=\"flex justify-between items-center gap-4\">\n <div className=\"h-10 w-full max-w-sm animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-10 w-24 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n\n {/* Table body skeleton */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead className=\"border-b bg-muted/50\">\n <tr>\n {Array.from({ length: columns }).map((_, i) => (\n <th key={i} className=\"p-4 text-left\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <tr key={rowIndex} className=\"border-b last:border-b-0\">\n {Array.from({ length: columns }).map((_, colIndex) => (\n <td key={colIndex} className=\"p-4\">\n <div className=\"h-4 w-full max-w-[200px] animate-pulse rounded-md bg-gray-200\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination skeleton */}\n <div className=\"p-4 border-t flex justify-between items-center\">\n <div className=\"h-4 w-40 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface DashboardSkeletonProps {\n cards?: number\n className?: string\n}\n\nexport function DashboardSkeleton({\n cards = 4,\n className,\n}: DashboardSkeletonProps) {\n return (\n <div className={cn('grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4', className)}>\n {Array.from({ length: cards }).map((_, i) => (\n <div key={i} className=\"rounded-lg border bg-background p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-8 w-8 animate-pulse rounded-md bg-gray-200\" />\n </div>\n <div className=\"h-8 w-20 animate-pulse rounded-md bg-gray-200 mb-2\" />\n <div className=\"h-3 w-32 animate-pulse rounded-md bg-gray-200\" />\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Check } from 'lucide-react'\n\nexport interface StepConfig {\n label: string\n description?: string\n}\n\nexport interface StepIndicatorProps {\n steps: StepConfig[]\n currentIndex: number\n className?: string\n}\n\nexport function StepIndicator({ steps, currentIndex, className = '' }: StepIndicatorProps) {\n return (\n <ol className={`flex items-center gap-0 ${className}`}>\n {steps.map((step, index) => {\n const isCompleted = index < currentIndex\n const isActive = index === currentIndex\n const isLast = index === steps.length - 1\n\n return (\n <li key={index} className={`flex items-center ${!isLast ? 'flex-1' : ''}`}>\n <div className=\"flex flex-col items-center\">\n <div\n className={[\n 'flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-medium transition-colors',\n isCompleted\n ? 'border-primary-600 bg-primary-600 text-white'\n : isActive\n ? 'border-primary-600 bg-white text-primary-600'\n : 'border-gray-300 bg-white text-gray-400',\n ].join(' ')}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : index + 1}\n </div>\n <span\n className={[\n 'mt-1 text-xs font-medium',\n isActive ? 'text-primary-600' : isCompleted ? 'text-gray-600' : 'text-gray-400',\n ].join(' ')}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n className={[\n 'h-0.5 flex-1 mx-2 mb-4 transition-colors',\n isCompleted ? 'bg-primary-600' : 'bg-gray-200',\n ].join(' ')}\n />\n )}\n </li>\n )\n })}\n </ol>\n )\n}\n"]}