@pos-360/horizon 0.32.0 → 0.32.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/button/button.tsx","../src/components/primitives/card/card.tsx","../src/components/primitives/checkbox/checkbox.tsx","../src/components/primitives/dialog/dialog.tsx","../src/components/primitives/dropdown-menu/dropdown-menu.tsx","../src/components/primitives/form/form.tsx","../src/components/primitives/popover/popover.tsx","../src/components/primitives/select/select.tsx","../src/components/primitives/select-bar/select-bar.tsx","../src/components/primitives/separator/separator.tsx","../src/components/primitives/skeleton/skeleton.tsx","../src/components/primitives/segmented-control/segmented-control.tsx","../src/components/primitives/table/bulk-edit-popover.tsx","../src/components/primitives/table/table.tsx","../src/components/primitives/table/use-column-visibility.ts","../src/components/primitives/table/column-selection.tsx","../src/components/primitives/tabs/tabs.tsx","../src/components/primitives/textarea/textarea.tsx","../src/components/primitives/toggle/toggle.tsx","../src/components/primitives/switch/switch.tsx","../src/components/primitives/date-range-picker/time-picker.tsx","../src/components/primitives/date-range-picker/calendar.tsx","../src/components/primitives/date-range-picker/use-date-range-picker.ts","../src/components/primitives/date-range-picker/format-utils.ts","../src/components/primitives/date-range-picker/date-range-picker.tsx","../src/components/primitives/date-range-picker/date-range-picker-mobile.tsx","../src/components/primitives/mobile-data-card/mobile-data-card.tsx","../src/components/primitives/period-comparison-selector/period-comparison-selector.tsx"],"names":["React","React2","jsx","React3","React4","jsxs","React5","Check","React6","React7","React8","props","ref","motion","React9","ChevronDown","Search","cva","Separator","React10","Fragment","X","useState","useEffect","useCallback","React12","React13","React14","containerRadiusClass","itemRadiusClass","React15","min","React16","ChevronRight","React17","startOfMonth","isTimeComplete","isBefore","isSameDay","format","startOfDay","startOfWeek","endOfWeek","endOfMonth","React18","AnimatePresence","Clock","CalendarIcon","React19","subMonths","addMonths","subDays","endOfDay"],"mappings":"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","file":"chunk-R2GK7WGC.mjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils\";\n\nconst buttonVariants = cva(\n \"group inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-hz-md text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-blue-600 text-white shadow hover:bg-blue-700 active:bg-blue-800\",\n destructive:\n \"bg-rose-600 text-white shadow-sm hover:bg-rose-700 active:bg-rose-800\",\n outline:\n \"border border-gray-300 bg-white text-gray-700 shadow-sm hover:bg-gray-50 hover:text-gray-900 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-200 dark:hover:bg-neutral-700\",\n secondary:\n \"bg-gray-100 text-gray-900 shadow-sm hover:bg-gray-200 dark:bg-neutral-700 dark:text-gray-100 dark:hover:bg-neutral-600\",\n ghost:\n \"text-gray-700 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-neutral-800 dark:hover:text-gray-100\",\n link: \"text-blue-600 underline-offset-4 hover:underline dark:text-blue-400\",\n },\n size: {\n default: \"h-[52px] px-5 py-2\",\n sm: \"h-10 rounded-hz-md px-4 text-xs\",\n lg: \"h-[60px] rounded-hz-md px-8 text-base\",\n icon: \"h-[52px] w-[52px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\ninterface BaseButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\n// Enforce only one decorator at a time (leading XOR trailing, never both)\nexport type ButtonProps = BaseButtonProps &\n (\n | { leadingDecorator?: React.ReactNode; trailingDecorator?: never }\n | { leadingDecorator?: never; trailingDecorator?: React.ReactNode }\n | { leadingDecorator?: never; trailingDecorator?: never }\n );\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n leadingDecorator,\n trailingDecorator,\n children,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n // If asChild is true, render without decorators (Slot handles children differently)\n if (asChild) {\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n // Only one decorator allowed at a time (enforced by TypeScript)\n const hasDecorator = leadingDecorator || trailingDecorator;\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {leadingDecorator && (\n <span className=\"shrink-0 transition-transform duration-hz-normal group-hover:-translate-x-0.5\">\n {leadingDecorator}\n </span>\n )}\n {hasDecorator ? <span>{children}</span> : children}\n {trailingDecorator && (\n <span className=\"shrink-0 transition-transform duration-hz-normal group-hover:translate-x-0.5\">\n {trailingDecorator}\n </span>\n )}\n </Comp>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\nexport type { VariantProps };\n","import * as React from \"react\";\n\nimport { cn } from \"@/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-hz-lg border border-gray-200 bg-white text-gray-900 shadow dark:border-neutral-700 dark:bg-neutral-800 dark:text-gray-100\",\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\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-4\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\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 HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-gray-500 dark:text-gray-400\", 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\n ref={ref}\n className={cn(\"p-4 pt-0\", className)}\n {...props}\n />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-4 pt-0\", className)}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","\"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 \"@/utils\";\n\ninterface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n indicatorIcon?: React.ReactNode;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, indicatorIcon, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-hz-sm border border-gray-300 bg-transparent shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-blue-600 data-[state=checked]:border-blue-600 data-[state=checked]:text-white dark:border-neutral-600 dark:data-[state=checked]:bg-blue-600\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n {indicatorIcon ?? <Check className=\"h-3.5 w-3.5\" strokeWidth={3} />}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","\"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 \"@/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-black/80 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 border-gray-200 bg-white p-6 shadow-lg duration-hz-normal 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-hz-lg dark:border-neutral-700 dark:bg-neutral-800\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-hz-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-gray-100 data-[state=open]:text-gray-500 dark:focus:ring-offset-gray-800 dark:data-[state=open]:bg-gray-700 dark:data-[state=open]:text-gray-400\">\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\",\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 text-gray-900 dark:text-gray-100\",\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-gray-500 dark:text-gray-400\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\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 gap-2 rounded-hz-sm px-2 py-1.5 text-sm outline-none focus:bg-gray-100 data-[state=open]:bg-gray-100 dark:focus:bg-gray-700 dark:data-[state=open]:bg-gray-700 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\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-hz-md border border-gray-200 bg-white p-1 text-gray-900 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 origin-[--radix-dropdown-menu-content-transform-origin] dark:border-neutral-700 dark:bg-neutral-800 dark:text-gray-100\",\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 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-hz-md border border-gray-200 bg-white p-1 text-gray-900 shadow-md dark:border-neutral-700 dark:bg-neutral-800 dark:text-gray-100\",\n \"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 origin-[--radix-dropdown-menu-content-transform-origin]\",\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 gap-2 rounded-hz-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-gray-700 dark:focus:text-gray-100 [&>svg]:size-4 [&>svg]:shrink-0\",\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-hz-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-gray-700 dark:focus:text-gray-100\",\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-hz-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-gray-100 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-gray-700 dark:focus:text-gray-100\",\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-gray-100 dark:bg-neutral-700\", 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};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { Label } from \"../typography/label\";\n\n// Form Context for sharing validation state\ninterface FormContextValue {\n errors: Record<string, string | undefined>;\n setError: (name: string, message: string | undefined) => void;\n clearError: (name: string) => void;\n clearAllErrors: () => void;\n isSubmitting: boolean;\n isValid: boolean;\n}\n\nconst FormContext = React.createContext<FormContextValue | null>(null);\n\nfunction useFormContext() {\n const context = React.useContext(FormContext);\n if (!context) {\n throw new Error(\"useFormContext must be used within a Form component\");\n }\n return context;\n}\n\n// Field Context for individual field state\ninterface FormFieldContextValue {\n name: string;\n error?: string;\n id: string;\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(\n null\n);\n\nfunction useFormFieldContext() {\n const context = React.useContext(FormFieldContext);\n if (!context) {\n throw new Error(\n \"useFormFieldContext must be used within a FormField component\"\n );\n }\n return context;\n}\n\n// Form Component\nexport interface FormProps\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n onFormSubmit?: (\n e: React.FormEvent<HTMLFormElement>,\n helpers: {\n setError: (name: string, message: string) => void;\n clearErrors: () => void;\n setSubmitting: (value: boolean) => void;\n }\n ) => void | Promise<void>;\n}\n\nconst Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ className, children, onFormSubmit, ...props }, ref) => {\n const [errors, setErrors] = React.useState<Record<string, string | undefined>>({});\n const [isSubmitting, setIsSubmitting] = React.useState(false);\n\n const setError = React.useCallback(\n (name: string, message: string | undefined) => {\n setErrors((prev) => ({ ...prev, [name]: message }));\n },\n []\n );\n\n const clearError = React.useCallback((name: string) => {\n setErrors((prev) => {\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const clearAllErrors = React.useCallback(() => {\n setErrors({});\n }, []);\n\n const isValid = Object.keys(errors).length === 0;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (onFormSubmit) {\n setIsSubmitting(true);\n try {\n await onFormSubmit(e, {\n setError: (name, message) => setError(name, message),\n clearErrors: clearAllErrors,\n setSubmitting: setIsSubmitting,\n });\n } finally {\n setIsSubmitting(false);\n }\n }\n };\n\n const contextValue = React.useMemo(\n () => ({\n errors,\n setError,\n clearError,\n clearAllErrors,\n isSubmitting,\n isValid,\n }),\n [errors, setError, clearError, clearAllErrors, isSubmitting, isValid]\n );\n\n return (\n <FormContext.Provider value={contextValue}>\n <form\n ref={ref}\n className={cn(\"space-y-6\", className)}\n onSubmit={handleSubmit}\n {...props}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n }\n);\nForm.displayName = \"Form\";\n\n// FormField Component\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n}\n\nconst FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, name, children, ...props }, ref) => {\n const { errors } = useFormContext();\n const id = React.useId();\n const error = errors[name];\n\n const contextValue = React.useMemo(\n () => ({ name, error, id }),\n [name, error, id]\n );\n\n return (\n <FormFieldContext.Provider value={contextValue}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props}>\n {children}\n </div>\n </FormFieldContext.Provider>\n );\n }\n);\nFormField.displayName = \"FormField\";\n\n// FormLabel Component\nexport interface FormLabelProps\n extends React.ComponentPropsWithoutRef<typeof Label> {}\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof Label>,\n FormLabelProps\n>(({ className, ...props }, ref) => {\n const { id, error } = useFormFieldContext();\n\n return (\n <Label\n ref={ref}\n htmlFor={id}\n className={cn(error && \"text-rose-500 dark:text-rose-400\", className)}\n {...props}\n />\n );\n});\nFormLabel.displayName = \"FormLabel\";\n\n// FormControl Component - wraps the input and provides aria attributes\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactElement;\n}\n\nconst FormControl = React.forwardRef<HTMLDivElement, FormControlProps>(\n ({ children, ...props }, ref) => {\n const { id, error, name } = useFormFieldContext();\n\n // Clone the child element and inject form-related props\n const child = React.cloneElement(children, {\n id,\n name,\n \"aria-invalid\": !!error,\n \"aria-describedby\": error ? `${id}-error` : undefined,\n ...children.props,\n });\n\n return (\n <div ref={ref} {...props}>\n {child}\n </div>\n );\n }\n);\nFormControl.displayName = \"FormControl\";\n\n// FormDescription Component - uses span to avoid hydration errors with MDX nesting\nexport interface FormDescriptionProps\n extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst FormDescription = React.forwardRef<HTMLSpanElement, FormDescriptionProps>(\n ({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"block text-sm text-neutral-500 dark:text-neutral-400\",\n className\n )}\n {...props}\n />\n );\n }\n);\nFormDescription.displayName = \"FormDescription\";\n\n// FormMessage Component - displays error or success messages\nexport interface FormMessageProps\n extends React.HTMLAttributes<HTMLParagraphElement> {\n error?: string;\n}\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, FormMessageProps>(\n ({ className, children, error: errorProp, ...props }, ref) => {\n const fieldContext = React.useContext(FormFieldContext);\n const error = errorProp ?? fieldContext?.error;\n const id = fieldContext?.id;\n\n if (!error && !children) {\n return null;\n }\n\n return (\n <p\n ref={ref}\n id={id ? `${id}-error` : undefined}\n className={cn(\n \"text-sm font-medium\",\n error\n ? \"text-rose-500 dark:text-rose-400\"\n : \"text-neutral-600 dark:text-neutral-400\",\n className\n )}\n role={error ? \"alert\" : undefined}\n {...props}\n >\n {error || children}\n </p>\n );\n }\n);\nFormMessage.displayName = \"FormMessage\";\n\nexport {\n Form,\n FormField,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n useFormContext,\n useFormFieldContext,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nimport { cn } from \"@/utils\";\n\nconst PopoverContext = React.createContext<{ open: boolean }>({ open: false });\n\nconst Popover: React.FC<React.ComponentProps<typeof PopoverPrimitive.Root>> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n ...props\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n return (\n <PopoverContext.Provider value={{ open }}>\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </PopoverPrimitive.Root>\n </PopoverContext.Provider>\n );\n};\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, children, ...props }, ref) => {\n const { open } = React.useContext(PopoverContext);\n\n // Extract only the props we want to pass to PopoverPrimitive.Content\n const {\n onOpenAutoFocus,\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n side,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n } = props;\n\n return (\n <AnimatePresence>\n {open && (\n <PopoverPrimitive.Portal forceMount>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n side={side}\n avoidCollisions={avoidCollisions}\n collisionBoundary={collisionBoundary}\n collisionPadding={collisionPadding}\n arrowPadding={arrowPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onOpenAutoFocus={onOpenAutoFocus}\n onCloseAutoFocus={onCloseAutoFocus}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={onFocusOutside}\n onInteractOutside={onInteractOutside}\n asChild\n forceMount\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.96, y: -8 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.96, y: -8 }}\n transition={{\n type: \"spring\",\n stiffness: 400,\n damping: 25,\n mass: 0.8,\n }}\n className={cn(\n \"z-50 w-72 rounded-md border border-white/20 bg-white/80 backdrop-blur-xl p-4 text-gray-900 shadow-lg outline-none dark:border-neutral-700/50 dark:bg-neutral-900/80 dark:text-neutral-100 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n >\n {children}\n </motion.div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )}\n </AnimatePresence>\n );\n});\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n Check, ChevronDown, ChevronUp, Search\n} from \"lucide-react\";\nimport { motion } from \"framer-motion\";\n\nimport { cn } from \"@/utils\";\n\nconst SelectContext = React.createContext<{ open: boolean }>({ open: false });\n\nconst SelectSearchContext = React.createContext<string>(\"\");\n\nconst Select: React.FC<React.ComponentProps<typeof SelectPrimitive.Root>> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n ...props\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n return (\n <SelectContext.Provider value={{ open }}>\n <SelectPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n );\n};\n\nconst SelectGroup = SelectPrimitive.Group;\n\ninterface SelectValueProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value>,\n \"children\"\n > {\n /**\n * The label to display for the current value.\n * Pass `options.find(o => o.value === value)?.label` here.\n * When undefined (no value selected), `placeholder` is shown instead.\n */\n children?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n SelectValueProps\n>(({ children, placeholder, ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} placeholder={placeholder} {...props}>\n {children}\n </SelectPrimitive.Value>\n));\nSelectValue.displayName = SelectPrimitive.Value.displayName;\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-8 w-full items-center justify-between rounded-md border border-gray-300 bg-white px-3 py-1 text-sm text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-100 dark:placeholder:text-gray-500 [&>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\ninterface SelectContentProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> {\n searchable?: boolean;\n searchPlaceholder?: string;\n}\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n SelectContentProps\n>(({ className, children, position = \"popper\", searchable = false, searchPlaceholder = \"Search...\", ...props }, ref) => {\n const { open } = React.useContext(SelectContext);\n const [search, setSearch] = React.useState(\"\");\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (open && searchable) {\n const frame = requestAnimationFrame(() => {\n searchInputRef.current?.focus();\n });\n return () => cancelAnimationFrame(frame);\n }\n if (!open) setSearch(\"\");\n }, [open, searchable]);\n\n const {\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n side,\n sideOffset,\n align,\n alignOffset,\n avoidCollisions,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n } = props;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ForceMountPortal = SelectPrimitive.Portal as React.ComponentType<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ForceMountContent = SelectPrimitive.Content as React.ForwardRefExoticComponent<any>;\n\n // Strips forceMount before it reaches the DOM (Radix passes it through asChild)\n const AnimatedContent = React.useMemo(() => React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof motion.div> & { forceMount?: boolean }\n >(({ forceMount: _, ...props }, ref) => <motion.div ref={ref} {...props} />), []);\n\n return (\n <ForceMountPortal forceMount>\n <ForceMountContent\n ref={ref}\n position={position}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionBoundary={collisionBoundary}\n collisionPadding={collisionPadding}\n arrowPadding={arrowPadding}\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n onCloseAutoFocus={onCloseAutoFocus}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n asChild\n {...{ forceMount: true } as any}\n >\n <AnimatedContent\n initial={false}\n animate={\n open\n ? { opacity: 1, scale: 1, y: 0, pointerEvents: \"auto\" }\n : { opacity: 0, scale: 0.96, y: -8, pointerEvents: \"none\" }\n }\n transition={{\n type: \"spring\",\n stiffness: 400,\n damping: 25,\n mass: 0.8,\n }}\n className={cn(\n \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-hidden rounded-hz-lg border border-white/20 bg-white/80 backdrop-blur-xl text-gray-900 shadow-lg dark:border-neutral-700/50 dark:bg-neutral-900/80 dark:text-gray-100 origin-[--radix-select-content-transform-origin]\",\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 >\n {searchable && (\n <div className=\"flex items-center border-b border-neutral-200/50 dark:border-neutral-700/50\">\n <Search className=\"mr-2 h-6 w-6 shrink-0 opacity-50 pl-2\" />\n <input\n ref={searchInputRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n onKeyDown={(e) => e.stopPropagation()}\n className=\"flex h-10 w-full py-2 bg-transparent text-sm placeholder:text-neutral-400 dark:placeholder:text-neutral-500 px-2 focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-none\"\n />\n </div>\n )}\n <SelectSearchContext.Provider value={search}>\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 </SelectSearchContext.Provider>\n </AnimatedContent>\n </ForceMountContent>\n </ForceMountPortal>\n );\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(\"px-2 py-1.5 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, textValue, ...props }, ref) => {\n const search = React.useContext(SelectSearchContext);\n\n const itemText = textValue ?? (typeof children === \"string\" ? children : \"\");\n\n if (search && itemText && !itemText.toLowerCase().includes(search.toLowerCase())) {\n return null;\n }\n\n return (\n <SelectPrimitive.Item\n ref={ref}\n textValue={textValue}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-hz-md py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-black/5 focus:text-gray-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-white/10 dark:focus:text-gray-100 transition-colors\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-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 <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\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-gray-200/50 dark:bg-neutral-700/50\", 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};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronDown, Search } from \"lucide-react\";\nimport { cn } from \"@/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/primitives/popover\";\nimport { Label } from \"@/components/primitives/typography\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface SelectBarOption {\n label: string;\n value: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectBarProps {\n options: SelectBarOption[];\n /** Controlled single value */\n value?: string;\n /** Single-select change handler */\n onChange?: (value: string | undefined) => void;\n /** Enable multi-select mode */\n multiple?: boolean;\n /** Controlled multi-select values */\n multiValue?: string[];\n /** Multi-select change handler */\n onMultiChange?: (values: string[]) => void;\n /** Require explicit Apply to commit selection */\n manualApply?: boolean;\n /** Show search input in dropdown */\n searchable?: boolean;\n /** Placeholder for search input */\n searchPlaceholder?: string;\n /** Trigger placeholder text */\n placeholder?: string;\n /** Label rendered above trigger */\n label?: string;\n /** Disable the entire component */\n disabled?: boolean;\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const SelectBar = React.forwardRef<HTMLButtonElement, SelectBarProps>(({\n options,\n value,\n onChange,\n multiple = false,\n multiValue,\n onMultiChange,\n manualApply = false,\n searchable = false,\n searchPlaceholder = \"Search...\",\n placeholder = \"Select…\",\n label,\n disabled = false,\n className,\n}, ref) => {\n /* ---- open / search state ---- */\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n /* ---- internal (uncontrolled) state ---- */\n const [internalValue, setInternalValue] = React.useState<string | undefined>(\n undefined,\n );\n const [internalMultiValue, setInternalMultiValue] = React.useState<string[]>(\n [],\n );\n\n /* ---- draft state for manualApply ---- */\n const [draftValue, setDraftValue] = React.useState<string | undefined>(\n undefined,\n );\n const [draftMultiValue, setDraftMultiValue] = React.useState<string[]>([]);\n\n /* ---- resolved committed values (controlled > internal) ---- */\n const committedSingle = value !== undefined ? value : internalValue;\n const committedMulti = multiValue !== undefined ? multiValue : internalMultiValue;\n\n /* ---- which values drive the dropdown display ---- */\n const activeSingle = manualApply ? draftValue : committedSingle;\n const activeMulti = manualApply ? draftMultiValue : committedMulti;\n\n /* ---- commit helpers ---- */\n const commitSingle = React.useCallback(\n (v: string | undefined) => {\n if (value === undefined) setInternalValue(v);\n onChange?.(v);\n },\n [value, onChange],\n );\n\n const commitMulti = React.useCallback(\n (v: string[]) => {\n if (multiValue === undefined) setInternalMultiValue(v);\n onMultiChange?.(v);\n },\n [multiValue, onMultiChange],\n );\n\n /* ---- sync draft when popover opens ---- */\n const handleOpenChange = (newOpen: boolean) => {\n if (newOpen) {\n setDraftValue(committedSingle);\n setDraftMultiValue(committedMulti);\n setSearch(\"\");\n if (searchable) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }\n setOpen(newOpen);\n };\n\n /* ---- filtered options ---- */\n const filtered = React.useMemo(\n () =>\n search\n ? options.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options,\n [options, search],\n );\n\n /* ---- option click handlers ---- */\n const handleSingleSelect = (optionValue: string) => {\n if (manualApply) {\n setDraftValue(optionValue);\n } else {\n commitSingle(optionValue);\n setOpen(false);\n }\n };\n\n const handleMultiToggle = (optionValue: string) => {\n const current = manualApply ? draftMultiValue : committedMulti;\n const next = current.includes(optionValue)\n ? current.filter((v) => v !== optionValue)\n : [...current, optionValue];\n\n if (manualApply) {\n setDraftMultiValue(next);\n } else {\n commitMulti(next);\n }\n };\n\n /* ---- Apply / Clear ---- */\n const handleApply = () => {\n if (multiple) {\n commitMulti(draftMultiValue);\n } else {\n commitSingle(draftValue);\n }\n setOpen(false);\n };\n\n const handleClear = () => {\n if (manualApply) {\n if (multiple) {\n setDraftMultiValue([]);\n } else {\n setDraftValue(undefined);\n }\n } else {\n if (multiple) {\n commitMulti([]);\n } else {\n commitSingle(undefined);\n }\n setOpen(false);\n }\n };\n\n /* ---- apply-footer guard ---- */\n const canApply = (() => {\n if (!manualApply) return false;\n if (multiple) {\n const a = [...draftMultiValue].sort();\n const b = [...committedMulti].sort();\n return JSON.stringify(a) !== JSON.stringify(b);\n }\n return draftValue !== committedSingle;\n })();\n\n const canClear = (() => {\n if (manualApply) {\n return multiple ? draftMultiValue.length > 0 : draftValue !== undefined;\n }\n return multiple\n ? committedMulti.length > 0\n : committedSingle !== undefined;\n })();\n\n /* ---- label lookup ---- */\n const labelFor = (v: string) =>\n options.find((o) => o.value === v)?.label ?? v;\n\n /* ---- Trigger display ---- */\n const renderTriggerContent = () => {\n if (multiple) {\n if (committedMulti.length === 0) {\n return (\n <span className=\"text-gray-400 dark:text-gray-500 truncate\">\n {placeholder}\n </span>\n );\n }\n\n return (\n <span className=\"truncate text-gray-900 dark:text-gray-100\">\n {committedMulti.length === options.length ? \"All selected\" : `${committedMulti.length} selected`}\n </span>\n );\n }\n\n // Single select\n if (committedSingle !== undefined) {\n return (\n <span className=\"truncate text-gray-900 dark:text-gray-100\">\n {labelFor(committedSingle)}\n </span>\n );\n }\n\n return (\n <span className=\"text-gray-400 dark:text-gray-500 truncate\">\n {placeholder}\n </span>\n );\n };\n\n /* ================================================================ */\n /* Render */\n /* ================================================================ */\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {label && (\n <Label className=\"text-sm font-medium text-gray-900 dark:text-gray-100\">\n {label}\n </Label>\n )}\n\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n \"flex h-8 w-full items-center justify-between gap-2 text-left rounded-md border border-gray-300 bg-white px-3 py-1 text-sm text-gray-900 focus:outline-none focus:ring-0 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-100 [&>span]:line-clamp-1\",\n )}\n >\n <span className=\"flex-1 min-w-0 flex items-center\">\n {renderTriggerContent()}\n </span>\n <ChevronDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] min-w-[200px] p-0 overflow-hidden\"\n >\n {/* ---- search bar ---- */}\n {searchable && (\n <div className=\"flex items-center border-b border-neutral-200/50 dark:border-neutral-700/50\">\n <Search className=\"mr-2 h-6 w-6 shrink-0 opacity-50 pl-2\" />\n <input\n ref={searchRef}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n onKeyDown={(e) => e.stopPropagation()}\n className=\"flex h-10 w-full py-2 bg-transparent text-sm placeholder:text-neutral-400 dark:placeholder:text-neutral-500 px-2 focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-none\"\n />\n </div>\n )}\n\n {/* ---- options list ---- */}\n <div className=\"p-1 max-h-[240px] overflow-y-auto\">\n {filtered.length === 0 ? (\n <p className=\"px-2 py-4 text-center text-sm text-gray-400 dark:text-gray-500\">\n No results found.\n </p>\n ) : (\n filtered.map((option) => {\n if (multiple) {\n const checked = activeMulti.includes(option.value);\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={checked}\n onClick={() => !option.disabled && handleMultiToggle(option.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!option.disabled) handleMultiToggle(option.value);\n }\n }}\n tabIndex={option.disabled ? -1 : 0}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-hz-md py-1.5 px-2 text-sm outline-none transition-colors\",\n \"hover:bg-black/5 dark:hover:bg-white/10\",\n option.disabled &&\n \"pointer-events-none opacity-50\",\n )}\n >\n {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n <span className=\"truncate flex-1\">{option.label}</span>\n <div\n className={cn(\n \"h-4 w-4 shrink-0 rounded-sm border shadow flex items-center justify-center\",\n checked\n ? \"bg-blue-600 border-blue-600 text-white dark:bg-blue-600\"\n : \"border-gray-300 bg-transparent dark:border-neutral-600\",\n )}\n >\n {checked && <Check className=\"h-3.5 w-3.5\" strokeWidth={3} />}\n </div>\n </div>\n );\n }\n\n // single-select row\n const selected = activeSingle === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onClick={() => handleSingleSelect(option.value)}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-hz-md py-1.5 px-2 text-left text-sm outline-none transition-colors\",\n \"hover:bg-black/5 dark:hover:bg-white/10\",\n option.disabled && \"pointer-events-none opacity-50\",\n )}\n >\n {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n <span className=\"truncate flex-1 text-left\">{option.label}</span>\n <span className={cn(\n \"h-4 w-4 shrink-0 flex items-center justify-center\",\n selected ? \"text-blue-600 dark:text-blue-400\" : \"text-transparent\",\n )}>\n <Check className=\"h-4 w-4\" />\n </span>\n </button>\n );\n })\n )}\n </div>\n\n {/* ---- Apply / Clear footer ---- */}\n {manualApply && (\n <div className=\"flex items-center justify-end gap-2 px-2 py-3 border-t border-gray-100 dark:border-neutral-700\">\n <button\n type=\"button\"\n onClick={handleClear}\n disabled={!canClear}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm transition-colors\",\n canClear\n ? \"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-700\"\n : \"text-gray-300 dark:text-gray-600 cursor-not-allowed\",\n )}\n >\n Clear\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!canApply}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm font-medium transition-colors\",\n canApply\n ? \"bg-blue-600 text-white hover:bg-blue-700 dark:hover:bg-blue-500\"\n : \"bg-blue-100 text-blue-300 cursor-not-allowed dark:bg-blue-950/30 dark:text-blue-800\",\n )}\n >\n Apply\n </button>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n});\nSelectBar.displayName = \"SelectBar\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils\";\n\nconst separatorVariants = cva(\"shrink-0 bg-gray-200 dark:bg-neutral-700\", {\n variants: {\n orientation: {\n horizontal: \"h-[1px] w-full\",\n vertical: \"h-full w-[1px]\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n});\n\nexport interface SeparatorProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n decorative?: boolean;\n}\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: SeparatorProps) {\n return (\n <div\n role={decorative ? \"none\" : \"separator\"}\n aria-orientation={decorative ? undefined : (orientation ?? undefined)}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n );\n}\n\nexport { Separator, separatorVariants };\n","import { cn } from \"@/utils\";\n\ninterface SkeletonProps {\n className?: string;\n}\n\n/**\n * Base Skeleton component for loading states\n */\nexport function Skeleton({ className }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"animate-pulse rounded-hz-md bg-neutral-200 dark:bg-neutral-800\",\n className\n )}\n />\n );\n}\n\n/**\n * Predefined skeleton components for common use cases\n */\nexport function SkeletonText({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-4\", className)} />;\n}\n\nexport function SkeletonTitle({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-6 w-48\", className)} />;\n}\n\nexport function SkeletonSubtitle({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-3 w-64\", className)} />;\n}\n\nexport function SkeletonAvatar({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"w-10 h-10 rounded\", className)} />;\n}\n\nexport function SkeletonBadge({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-6 w-24\", className)} />;\n}\n\nexport function SkeletonIcon({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"w-6 h-6 rounded\", className)} />;\n}\n\nexport function SkeletonButton({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-10 w-24 rounded-hz-md\", className)} />;\n}\n\nexport function SkeletonInput({ className }: SkeletonProps) {\n return <Skeleton className={cn(\"h-10 w-full rounded-hz-md\", className)} />;\n}\n\n/**\n * Generic table row skeleton - customize for your table structure\n */\nexport function SkeletonTableRow({\n columns = 4,\n className,\n}: SkeletonProps & { columns?: number }) {\n return (\n <tr className={className}>\n {Array.from({ length: columns }).map((_, index) => (\n <td key={index} className=\"px-6 py-4\">\n <Skeleton className=\"h-4 w-full\" />\n </td>\n ))}\n </tr>\n );\n}\n\n/**\n * Multiple skeleton rows for tables\n */\nexport function SkeletonTableRows({\n count = 5,\n columns = 4,\n}: {\n count?: number;\n columns?: number;\n}) {\n return (\n <>\n {Array.from({ length: count }).map((_, index) => (\n <SkeletonTableRow key={`skeleton-row-${index}`} columns={columns} />\n ))}\n </>\n );\n}\n\n/**\n * Card skeleton for grid layouts\n */\nexport function SkeletonCard({ className }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"rounded-hz-lg border bg-card p-6 space-y-4\",\n className\n )}\n >\n <Skeleton className=\"h-6 w-3/4\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-5/6\" />\n <div className=\"flex gap-2 pt-2\">\n <SkeletonBadge />\n <SkeletonBadge className=\"w-16\" />\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils\";\n\nconst segmentedControlVariants = cva(\n \"inline-flex w-fit items-stretch border border-gray-200 bg-white dark:border-neutral-700 dark:bg-neutral-900\",\n {\n variants: {\n size: {\n default: \"h-[52px]\",\n sm: \"h-10\",\n lg: \"h-[60px]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nconst segmentedControlItemVariants = cva(\n \"inline-flex flex-1 cursor-pointer items-center justify-center whitespace-nowrap px-6 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed\",\n {\n variants: {\n size: {\n default: \"h-full min-w-[120px]\",\n sm: \"h-full min-w-[90px] text-xs\",\n lg: \"h-full min-w-[140px] text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nexport type SegmentedControlRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\nconst containerRadiusClass: Record<SegmentedControlRadius, string> = {\n none: \"rounded-hz-lg\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n};\n\nconst itemRadiusClass: Record<SegmentedControlRadius, string> = {\n none: \"first:rounded-l-hz-lg last:rounded-r-hz-lg\",\n sm: \"first:rounded-l-sm last:rounded-r-sm\",\n md: \"first:rounded-l-md last:rounded-r-md\",\n lg: \"first:rounded-l-lg last:rounded-r-lg\",\n full: \"rounded-full\",\n};\n\nexport interface SegmentedControlOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>,\n \"onChange\" | \"onValueChange\" | \"value\"\n >,\n VariantProps<typeof segmentedControlVariants> {\n options: SegmentedControlOption[];\n value?: string;\n onChange?: (value: string) => void;\n radius?: SegmentedControlRadius;\n}\n\nfunction SegmentedControl({\n className,\n options,\n value,\n onChange,\n size,\n radius = \"none\",\n ...props\n}: SegmentedControlProps) {\n return (\n <RadioGroupPrimitive.Root\n {...props}\n {...(value !== undefined ? { value, onValueChange: onChange } : {})}\n className={cn(\n segmentedControlVariants({ size }),\n containerRadiusClass[radius],\n className\n )}\n >\n {options.map((option) => (\n <RadioGroupPrimitive.Item\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={cn(\n segmentedControlItemVariants({ size }),\n itemRadiusClass[radius],\n \"border border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\",\n \"data-[state=checked]:!bg-blue-50 data-[state=checked]:border-blue-500 data-[state=checked]:text-blue-600\",\n \"dark:data-[state=checked]:!bg-blue-950/40 dark:data-[state=checked]:border-blue-400 dark:data-[state=checked]:text-blue-400\"\n )}\n >\n <RadioGroupPrimitive.Indicator className=\"hidden\" />\n {option.label}\n </RadioGroupPrimitive.Item>\n ))}\n </RadioGroupPrimitive.Root>\n );\n}\n\nexport { SegmentedControl, segmentedControlVariants, segmentedControlItemVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { PenLine } from \"lucide-react\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"@/components/primitives/popover\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/primitives/select\";\nimport { SegmentedControl } from \"@/components/primitives/segmented-control\";\nimport { Tooltip } from \"@/components/primitives/tooltip\";\nimport { Button } from \"@/components/primitives/button\";\nimport { cn } from \"@/utils\";\nimport type { ColumnDef } from \"./table\";\n\ninterface BulkEditPopoverProps<T = any> {\n column: ColumnDef<T>;\n onApply: (value: string) => void;\n}\n\nexport function BulkEditPopover<T = any>({ column, onApply }: BulkEditPopoverProps<T>) {\n const [value, setValue] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n const { bulkEdit } = column;\n\n if (!bulkEdit) return null;\n\n const isValid = bulkEdit.kind === \"input\" ? !!value.trim() : !!value;\n const headingLabel = bulkEdit.label ?? column.label;\n\n const handleApply = () => {\n if (!isValid) return;\n onApply(value);\n setValue(\"\");\n setOpen(false);\n };\n\n const handleOpenChange = (next: boolean) => {\n setOpen(next);\n if (next && bulkEdit.kind === \"segmented-control\") {\n setValue(bulkEdit.options[0]?.value ?? \"\");\n }\n if (!next) setValue(\"\");\n };\n\n return (\n <Tooltip content={`Apply to all ${headingLabel}`} side=\"top\" disabled={open}>\n <span className=\"inline-flex\">\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n onFocus={e => e.stopPropagation()}\n className=\"ml-1 rounded p-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 dark:hover:text-gray-300 dark:hover:bg-neutral-700 transition-colors\"\n aria-label={`Edit all ${column.label} values`}\n >\n <PenLine className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className={cn(\"p-3 space-y-3\", bulkEdit.kind === \"segmented-control\" ? \"w-auto\" : \"w-64\")}>\n <p className=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n Apply to all — {headingLabel}\n </p>\n {bulkEdit.kind === \"input\" ? (\n <div className=\"relative\">\n {bulkEdit.leadingDecorator && (\n <span className=\"absolute inset-y-0 left-0 pl-3 flex items-center text-sm text-neutral-400 pointer-events-none\">\n {bulkEdit.leadingDecorator}\n </span>\n )}\n <input\n type={bulkEdit.type ?? \"text\"}\n placeholder={bulkEdit.placeholder}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => { if (e.key === \"Enter\") { e.preventDefault(); handleApply(); } }}\n autoFocus\n className={cn(\n \"w-full rounded-hz-md border border-gray-300 bg-white py-2 text-sm text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-1 focus:ring-blue-500/50 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-100 dark:placeholder:text-gray-500\",\n bulkEdit.leadingDecorator ? \"pl-7 pr-3\" : \"px-3\"\n )}\n />\n </div>\n ) : bulkEdit.kind === \"select\" ? (\n <Select value={value} onValueChange={setValue} >\n <SelectTrigger className=\"rounded-md\">\n <SelectValue placeholder={bulkEdit.placeholder ?? \"Select a value\"}/>\n </SelectTrigger>\n <SelectContent>\n {bulkEdit.options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <SegmentedControl\n className=\"w-full\"\n size=\"sm\"\n value={value}\n onChange={setValue}\n options={bulkEdit.options}\n />\n )}\n {bulkEdit.kind === \"input\" && bulkEdit.renderPreview && value && (\n bulkEdit.renderPreview(value)\n )}\n <Button size=\"sm\" className=\"w-full rounded-md\" onClick={handleApply} disabled={!isValid}>\n Apply All\n </Button>\n </PopoverContent>\n </Popover>\n </span>\n </Tooltip>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { BulkEditPopover } from \"./bulk-edit-popover\";\nimport { Minus, X } from \"lucide-react\";\n\n// Table Selection Context\ntype SelectionMode = \"single\" | \"multiple\" | \"none\";\n\nexport type ActionColumn = \"checkbox\" | \"delete\";\n\ninterface TableContextValue {\n selectable: boolean;\n selectionMode: SelectionMode;\n selectedRows: Set<string>;\n toggleRow: (rowId: string) => void;\n isRowSelected: (rowId: string) => boolean;\n selectAll: () => void;\n deselectAll: () => void;\n isAllSelected: boolean;\n isSomeSelected: boolean;\n getRowId: (row: any) => string;\n registerRowId: (rowId: string) => void;\n unregisterRowId: (rowId: string) => void;\n stickyHeader: boolean;\n}\n\nconst TableContext = React.createContext<TableContextValue | null>(null);\n\nconst useTableContext = () => {\n const context = React.useContext(TableContext);\n return context;\n};\n\nexport interface ColumnDef<T = any> {\n key: string;\n label: string;\n cell: (row: T) => React.ReactNode;\n stickyXHeader?: boolean;\n /** Used by `useColumnVisibility` to set initial visible columns on desktop */\n defaultVisible?: boolean;\n /** Used by `useColumnVisibility` to set initial visible columns on mobile (viewport < 768px) */\n mobileVisible?: boolean;\n minWidth?: number;\n cellClassName?: string | ((row: T) => string);\n bulkEdit?:\n | { kind: \"input\"; type?: \"text\" | \"number\"; placeholder?: string; leadingDecorator?: string; label?: string; renderPreview?: (value: string) => React.ReactNode }\n | { kind: \"select\"; options: { label: string; value: string }[]; placeholder?: string; label?: string }\n | { kind: \"segmented-control\"; options: { label: string; value: string }[]; label?: string };\n}\n\nexport interface TableProps<T = any> extends React.HTMLAttributes<HTMLTableElement> {\n actionColumns?: ActionColumn[];\n onRowDelete?: (row: T) => void;\n selectionMode?: SelectionMode;\n selectedRows?: string[];\n onSelectionChange?: (selectedRows: string[]) => void;\n getRowId?: (row: any) => string;\n rows?: any[];\n // Data-driven mode\n columns?: ColumnDef<T>[];\n data?: T[];\n visibleColumns?: string[];\n showDividers?: boolean;\n highlightMode?: \"row\" | \"column\" | \"cross\" | \"none\";\n onBulkEdit?: (columnKey: string, value: string) => void;\n onRowClick?: (row: T) => void;\n checkboxCellClickable?: boolean;\n stickyYHeader?: boolean;\n containerClassName?: string;\n rounded?: boolean;\n}\n\nconst TableInner = React.forwardRef<HTMLTableElement, TableProps>(\n (\n {\n className,\n selectionMode = \"multiple\",\n selectedRows: controlledSelectedRows,\n onSelectionChange,\n getRowId,\n rows,\n columns,\n data,\n visibleColumns,\n showDividers = false,\n highlightMode = \"row\",\n onBulkEdit,\n onRowClick,\n checkboxCellClickable = false,\n stickyYHeader = false,\n containerClassName,\n rounded = false,\n actionColumns,\n onRowDelete,\n children,\n ...props\n },\n ref\n ) => {\n const effectiveActionColumns: ActionColumn[] = actionColumns ?? [];\n const effectiveSelectable = effectiveActionColumns.includes(\"checkbox\");\n\n const [internalSelectedRows, setInternalSelectedRows] = React.useState<Set<string>>(new Set());\n const [registeredRowIds, setRegisteredRowIds] = React.useState<Set<string>>(new Set());\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n \n // Use controlled or internal state\n const isControlled = controlledSelectedRows !== undefined;\n const selectedRowsSet = isControlled\n ? new Set(controlledSelectedRows)\n : internalSelectedRows;\n\n // Default getRowId function\n const defaultGetRowId = React.useCallback((row: any) => {\n if (typeof row === \"string\") return row;\n if (typeof row === \"object\" && row?.id) return String(row.id);\n return String(row);\n }, []);\n\n const finalGetRowId = getRowId || defaultGetRowId;\n\n // Get all row IDs — prefer explicit row sources over registered IDs\n const allRowIds = React.useMemo(() => {\n if (rows) return new Set(rows.map(finalGetRowId));\n if (data) return new Set((data as any[]).map(finalGetRowId));\n return registeredRowIds;\n }, [rows, data, finalGetRowId, registeredRowIds]);\n\n // Register/unregister row IDs for selectAll functionality\n const registerRowId = React.useCallback((rowId: string) => {\n if (rowId) {\n setRegisteredRowIds(prev => {\n if (prev.has(rowId)) return prev;\n return new Set(prev).add(rowId);\n });\n }\n }, []);\n\n const unregisterRowId = React.useCallback((rowId: string) => {\n if (rowId) {\n setRegisteredRowIds(prev => {\n if (!prev.has(rowId)) return prev;\n const next = new Set(prev);\n next.delete(rowId);\n return next;\n });\n }\n }, []);\n\n const toggleRow = React.useCallback(\n (rowId: string) => {\n if (!effectiveSelectable) return;\n\n const next = new Set(selectedRowsSet);\n \n if (selectionMode === \"single\") {\n // Single mode: replace selection\n next.clear();\n if (!next.has(rowId)) {\n next.add(rowId);\n }\n } else {\n // Multiple mode: toggle\n if (next.has(rowId)) {\n next.delete(rowId);\n } else {\n next.add(rowId);\n }\n }\n\n if (isControlled) {\n onSelectionChange?.(Array.from(next));\n } else {\n setInternalSelectedRows(next);\n onSelectionChange?.(Array.from(next));\n }\n },\n [effectiveSelectable, selectionMode, selectedRowsSet, isControlled, onSelectionChange]\n );\n\n const selectAll = React.useCallback(() => {\n if (!effectiveSelectable || selectionMode !== \"multiple\" || allRowIds.size === 0) return;\n \n const next = new Set(allRowIds);\n if (isControlled) {\n onSelectionChange?.(Array.from(next));\n } else {\n setInternalSelectedRows(next);\n onSelectionChange?.(Array.from(next));\n }\n }, [effectiveSelectable, selectionMode, allRowIds, isControlled, onSelectionChange]);\n\n const deselectAll = React.useCallback(() => {\n if (!effectiveSelectable) return;\n\n const next = new Set<string>();\n if (isControlled) {\n onSelectionChange?.(Array.from(next));\n } else {\n setInternalSelectedRows(next);\n onSelectionChange?.(Array.from(next));\n }\n }, [effectiveSelectable, isControlled, onSelectionChange]);\n\n const isRowSelected = React.useCallback(\n (rowId: string) => selectedRowsSet.has(rowId),\n [selectedRowsSet]\n );\n\n const isAllSelected = React.useMemo(() => {\n if (!effectiveSelectable || allRowIds.size === 0) return false;\n return allRowIds.size > 0 && Array.from(allRowIds).every(id => selectedRowsSet.has(id));\n }, [effectiveSelectable, allRowIds, selectedRowsSet]);\n\n const isSomeSelected = React.useMemo(() => {\n if (!effectiveSelectable) return false;\n return selectedRowsSet.size > 0 && !isAllSelected;\n }, [effectiveSelectable, selectedRowsSet.size, isAllSelected]);\n\n const contextValue = React.useMemo<TableContextValue>(() => ({\n selectable: effectiveSelectable,\n selectionMode,\n selectedRows: selectedRowsSet,\n toggleRow,\n isRowSelected,\n selectAll,\n deselectAll,\n isAllSelected,\n isSomeSelected,\n getRowId: finalGetRowId,\n registerRowId,\n unregisterRowId,\n stickyHeader: stickyYHeader,\n }), [\n effectiveSelectable,\n selectionMode,\n selectedRowsSet,\n toggleRow,\n isRowSelected,\n selectAll,\n deselectAll,\n isAllSelected,\n isSomeSelected,\n finalGetRowId,\n registerRowId,\n unregisterRowId,\n stickyYHeader,\n ]);\n\n React.useEffect(() => {\n const wrapper = wrapperRef.current;\n if (!wrapper || highlightMode === \"none\") return;\n\n let prevCell: HTMLElement | null = null;\n let highlighted: HTMLElement[] = [];\n\n const getHighlightBg = () =>\n document.documentElement.classList.contains(\"dark\")\n ? \"rgba(38, 38, 38, 0.5)\"\n : \"rgb(249, 250, 251)\";\n\n const clearHighlight = () => {\n for (const el of highlighted) el.style.removeProperty(\"background-color\");\n highlighted = [];\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n const cell = (e.target as HTMLElement).closest(\"td, th\") as HTMLElement | null;\n if (cell === prevCell) return;\n prevCell = cell;\n\n clearHighlight();\n if (!cell) return;\n\n const next: HTMLElement[] = [];\n const tr = cell.closest(\"tr\") as HTMLElement | null;\n const colKey = cell.getAttribute(\"data-col-key\");\n\n if ((highlightMode === \"row\" || highlightMode === \"cross\") && tr) {\n next.push(...Array.from(tr.querySelectorAll<HTMLElement>(\"td, th\")));\n }\n if ((highlightMode === \"column\" || highlightMode === \"cross\") && colKey) {\n for (const el of Array.from(wrapper.querySelectorAll<HTMLElement>(`[data-col-key=\"${colKey}\"]`))) {\n if (!next.includes(el)) next.push(el);\n }\n }\n\n const bg = getHighlightBg();\n for (const el of next) {\n if (!el.classList.contains(\"sticky\")) {\n el.style.setProperty(\"background-color\", bg, \"important\");\n }\n }\n highlighted = next.filter(el => !el.classList.contains(\"sticky\"));\n };\n\n const handleMouseLeave = () => {\n prevCell = null;\n clearHighlight();\n };\n\n wrapper.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n wrapper.addEventListener(\"mouseleave\", handleMouseLeave);\n return () => {\n wrapper.removeEventListener(\"mousemove\", handleMouseMove);\n wrapper.removeEventListener(\"mouseleave\", handleMouseLeave);\n clearHighlight();\n };\n }, [highlightMode]);\n\n const isDark = typeof document !== \"undefined\" && document.documentElement.classList.contains(\"dark\");\n const stickyBorderColor = isDark ? \"rgba(255,255,255,0.1)\" : \"rgba(0,0,0,0.1)\";\n const xShadow = `inset -1px 0 0 0 ${stickyBorderColor}`;\n const yShadow = `inset 0 -1px 0 0 ${stickyBorderColor}`;\n const xyShadow = `inset -1px -1px 0 0 ${stickyBorderColor}`;\n\n return (\n <TableContext.Provider value={contextValue}>\n <div\n ref={wrapperRef}\n className={cn(\"relative w-full overflow-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-neutral-600 scrollbar-track-transparent\", rounded && \"rounded-lg\", containerClassName)}\n >\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n >\n {columns && data ? (\n <>\n {(() => {\n const filteredCols = columns.filter(\n col => col.stickyXHeader || !visibleColumns || visibleColumns.includes(col.key)\n );\n const checkboxCol = {\n key: \"__checkbox__\",\n label: \"\",\n stickyXHeader: true,\n minWidth: 48,\n cell: (row: unknown) => (\n <TableRowCheckbox rowId={finalGetRowId(row as Parameters<typeof finalGetRowId>[0])} />\n ),\n } as ColumnDef<unknown>;\n const actionCols: ColumnDef<unknown>[] = effectiveActionColumns.map(action => {\n if (action === \"checkbox\") return checkboxCol as ColumnDef<unknown>;\n return {\n key: \"__delete__\",\n label: \"\",\n stickyXHeader: true,\n minWidth: 48,\n cell: (row: unknown) => (\n <button\n onClick={(e) => {\n e.stopPropagation();\n (onRowDelete as ((row: unknown) => void))?.(row);\n }}\n className=\"h-5 w-5 rounded-full bg-gray-100 hover:bg-gray-200 dark:bg-neutral-800 dark:hover:bg-neutral-700 text-gray-400 hover:text-gray-600 dark:hover:text-neutral-300 flex items-center justify-center\"\n aria-label=\"Remove row\"\n type=\"button\"\n >\n <X size={10} strokeWidth={1.8} />\n </button>\n ),\n } as ColumnDef<unknown>;\n });\n const visibleCols = [...actionCols, ...filteredCols];\n const stickyOffsets = visibleCols.reduce((acc, col, i) => {\n if (!col.stickyXHeader) return { ...acc, [col.key]: 0 };\n const prev = visibleCols[i - 1];\n const prevOffset = prev ? (acc[prev.key] ?? 0) : 0;\n const prevWidth = prev?.stickyXHeader ? (prev.minWidth ?? 0) : 0;\n return { ...acc, [col.key]: prevOffset + prevWidth };\n }, {} as Record<string, number>);\n return (\n <>\n <thead className=\"[&_tr]:border-b [&_tr]:border-gray-200 dark:[&_tr]:border-gray-700\">\n <tr className=\"border-b border-gray-200 transition-colors dark:border-neutral-700\">\n {visibleCols.map(col => (\n <th\n key={col.key}\n data-col-key={col.key}\n style={{\n ...(col.minWidth ? { minWidth: col.minWidth } : {}),\n ...(col.stickyXHeader ? { left: stickyOffsets[col.key] } : {}),\n ...(col.stickyXHeader && stickyYHeader ? { boxShadow: xyShadow } :\n col.stickyXHeader ? { boxShadow: xShadow } :\n stickyYHeader ? { boxShadow: yShadow } : {}),\n }}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-gray-500 dark:text-gray-400\",\n stickyYHeader && \"sticky top-0 z-20 bg-gray-50 dark:bg-neutral-800\",\n col.stickyXHeader && \"sticky z-20 bg-gray-50 dark:bg-neutral-800\",\n col.stickyXHeader && stickyYHeader && \"top-0 z-30\",\n showDividers && \"border-r border-gray-200 dark:border-neutral-700\"\n )}\n >\n {col.key === \"__checkbox__\" ? (\n <TableSelectAll />\n ) : (\n <div className=\"flex items-center gap-1\">\n {col.label}\n {col.bulkEdit && onBulkEdit && (\n <BulkEditPopover\n column={col}\n onApply={(value) => onBulkEdit(col.key, value)}\n />\n )}\n </div>\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"[&_tr:last-child]:border-0\">\n {data.map((row, rowIndex) => {\n const rowId = finalGetRowId ? finalGetRowId(row) : String(rowIndex);\n const isSelected = contextValue.isRowSelected(rowId);\n return (\n <tr\n key={rowId}\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n \"border-b border-gray-200 transition-colors dark:border-neutral-700\",\n isSelected ? \"bg-blue-50 dark:bg-blue-900/20\" : (highlightMode === \"row\" || highlightMode === \"cross\") && \"hover:bg-gray-50 dark:hover:bg-neutral-800/50\",\n onRowClick && \"cursor-pointer\"\n )}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n >\n {visibleCols.map(col => (\n <td\n key={col.key}\n data-col-key={col.key}\n style={col.stickyXHeader ? { left: stickyOffsets[col.key], boxShadow: xShadow } : undefined}\n onClick={\n col.key === \"__checkbox__\"\n ? (e) => {\n e.stopPropagation();\n\n if (!checkboxCellClickable) {\n return;\n }\n\n const target = e.target as HTMLElement;\n if (target.closest('[role=\"checkbox\"]')) {\n return;\n }\n\n contextValue.toggleRow(rowId);\n }\n : col.key === \"__delete__\"\n ? (e) => e.stopPropagation()\n : undefined\n }\n className={cn(\n \"p-4 align-middle\",\n col.stickyXHeader && cn(\"sticky z-20\", isSelected ? \"bg-blue-50 dark:bg-[#242a3a]\" : \"bg-gray-50 dark:bg-neutral-800\"),\n showDividers && \"border-r border-gray-200 dark:border-neutral-700\",\n typeof col.cellClassName === \"function\" ? col.cellClassName(row) : col.cellClassName\n )}\n >\n {col.cell(row)}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </>\n );\n })()}\n </>\n ) : (\n children\n )}\n </table>\n </div>\n </TableContext.Provider>\n );\n }\n);\nTableInner.displayName = \"Table\";\n\nconst Table = TableInner as <T = any>(\n props: TableProps<T> & { ref?: React.Ref<HTMLTableElement> }\n) => React.ReactElement | null;\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\"[&_tr]:border-b [&_tr]:border-gray-200 dark:[&_tr]:border-gray-700\", className)}\n {...props}\n />\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 border-gray-200 bg-gray-50 font-medium dark:border-neutral-700 dark:bg-neutral-800/50 [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\ninterface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n rowId?: string;\n rowData?: any;\n}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, rowId, rowData, onClick, ...props }, ref) => {\n const context = useTableContext();\n\n // Destructure stable refs to avoid depending on the entire context object\n const getRowId = context?.getRowId;\n const selectable = context?.selectable;\n const registerRowId = context?.registerRowId;\n const unregisterRowId = context?.unregisterRowId;\n\n // Determine row ID from props or context\n const finalRowId = React.useMemo(() => {\n if (rowId) return rowId;\n if (rowData && getRowId) return getRowId(rowData);\n return props.id || undefined;\n }, [rowId, rowData, getRowId, props.id]);\n\n // Register/unregister row ID for selectAll functionality\n React.useEffect(() => {\n if (finalRowId && selectable) {\n registerRowId?.(finalRowId);\n return () => {\n unregisterRowId?.(finalRowId);\n };\n }\n }, [finalRowId, selectable, registerRowId, unregisterRowId]);\n\n const isSelected = finalRowId ? context?.isRowSelected(finalRowId) : false;\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLTableRowElement>) => {\n // Always call onClick handler if provided\n onClick?.(e);\n },\n [onClick]\n );\n\n return (\n <tr\n ref={ref}\n data-state={isSelected ? \"selected\" : undefined}\n data-row-id={finalRowId}\n className={cn(\n \"border-b border-gray-200 transition-colors hover:bg-gray-50 data-[state=selected]:bg-blue-50 dark:border-neutral-700 dark:hover:bg-neutral-800/50 dark:data-[state=selected]:bg-blue-900/20\",\n className\n )}\n onClick={handleClick}\n {...props}\n />\n );\n }\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, style, ...props }, ref) => {\n const context = useTableContext();\n const isDark = typeof document !== \"undefined\" && document.documentElement.classList.contains(\"dark\");\n const yShadow = `inset 0 -1px 0 0 ${isDark ? \"rgba(255,255,255,0.1)\" : \"rgba(0,0,0,0.1)\"}`;\n return (\n <th\n ref={ref}\n style={context?.stickyHeader ? { boxShadow: yShadow, ...style } : style}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-gray-500 dark:text-gray-400 [&:has([role=checkbox])]:pr-0\",\n context?.stickyHeader && \"sticky top-0 z-20 bg-gray-50 dark:bg-neutral-800\",\n className\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = \"TableHead\";\n\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n /**\n * \"default\" — standard p-4 padding for text content.\n * \"embed\" — compact p-1.5 padding for cells that contain interactive\n * components (Input, Select, Toggle, etc.).\n */\n variant?: \"default\" | \"embed\";\n}\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, variant = \"default\", ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"align-middle [&:has([role=checkbox])]:pr-0\",\n variant === \"embed\" ? \"p-1.5\" : \"p-4\",\n className\n )}\n {...props}\n />\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-gray-500 dark:text-gray-400\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\n// Table Select All Checkbox Component\ninterface TableSelectAllProps {\n className?: string;\n}\n\nconst TableSelectAll = React.forwardRef<\n HTMLDivElement,\n TableSelectAllProps\n>(({ className, ...props }, ref) => {\n const context = useTableContext();\n\n if (!context?.selectable || context.selectionMode !== \"multiple\") {\n return null;\n }\n\n const handleCheckedChange = (checked: boolean | \"indeterminate\") => {\n if (checked === true) {\n context.selectAll();\n } else {\n context.deselectAll();\n }\n };\n\n return (\n <div ref={ref} className={className} {...props}>\n <Checkbox\n checked={context.isAllSelected}\n onCheckedChange={handleCheckedChange}\n aria-label=\"Select all rows\"\n indicatorIcon={<Minus className=\"h-3.5 w-3.5\" strokeWidth={3} />}\n className=\"data-[state=checked]:bg-white data-[state=checked]:border-blue-600 data-[state=checked]:text-blue-600 dark:data-[state=checked]:bg-white\"\n />\n </div>\n );\n});\nTableSelectAll.displayName = \"TableSelectAll\";\n\n// Table Row Checkbox Component\ninterface TableRowCheckboxProps {\n rowId?: string;\n rowData?: any;\n className?: string;\n}\n\nconst TableRowCheckbox = React.forwardRef<\n HTMLDivElement,\n TableRowCheckboxProps\n>(({ rowId, rowData, className, ...props }, ref) => {\n const context = useTableContext();\n const getRowId = context?.getRowId;\n\n if (!context?.selectable) {\n return null;\n }\n\n // Determine row ID\n const finalRowId = React.useMemo(() => {\n if (rowId) return rowId;\n if (rowData && getRowId) return getRowId(rowData);\n return undefined;\n }, [rowId, rowData, getRowId]);\n\n if (!finalRowId) {\n return null;\n }\n\n const isSelected = context.isRowSelected(finalRowId);\n\n const handleCheckedChange = () => {\n context.toggleRow(finalRowId);\n };\n\n return (\n <div ref={ref} className={className} {...props}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckedChange}\n aria-label={`Select row ${finalRowId}`}\n />\n </div>\n );\n});\nTableRowCheckbox.displayName = \"TableRowCheckbox\";\n\n// Hook for accessing table selection\nconst useTableSelection = () => {\n const context = useTableContext();\n if (!context) {\n throw new Error(\"useTableSelection must be used within a Table component with selectable prop\");\n }\n return context;\n};\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n TableSelectAll,\n TableRowCheckbox,\n useTableSelection,\n};\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { ColumnDef } from \"./table\";\n\ninterface UseColumnVisibilityOptions {\n storageKey?: string;\n}\n\nfunction getDefaultColumns<T>(columns: ColumnDef<T>[], isMobile: boolean): string[] {\n return columns\n .filter(col => {\n if (col.stickyXHeader) return true;\n if (isMobile) return col.mobileVisible === true;\n return col.defaultVisible !== false;\n })\n .map(col => col.key);\n}\n\nexport function useColumnVisibility<T = any>(\n columns: ColumnDef<T>[],\n options: UseColumnVisibilityOptions = {}\n): {\n visibleColumns: string[];\n setVisibleColumns: (cols: string[]) => void;\n} {\n const { storageKey } = options;\n\n const [visibleColumns, setVisibleColumnsState] = useState<string[]>(() => {\n // SSR-safe: try localStorage first, then fall back to desktop defaults\n if (storageKey && typeof window !== \"undefined\") {\n try {\n const saved = localStorage.getItem(storageKey);\n if (saved) {\n const parsed: string[] = JSON.parse(saved);\n const stickyKeys = columns.filter(c => c.stickyXHeader).map(c => c.key);\n return Array.from(new Set([...stickyKeys, ...parsed]));\n }\n } catch {\n // ignore malformed localStorage value\n }\n }\n // Desktop defaults — safe for SSR (no window access)\n return getDefaultColumns(columns, false);\n });\n\n // After hydration, re-check viewport and update if actually on mobile and no saved state\n useEffect(() => {\n if (storageKey) {\n try {\n const saved = localStorage.getItem(storageKey);\n if (saved) return; // user has a saved preference, don't override\n } catch {\n // ignore\n }\n }\n const isMobile = window.innerWidth < 768;\n if (isMobile) {\n setVisibleColumnsState(getDefaultColumns(columns, true));\n }\n }, []); // run once on mount only\n\n const setVisibleColumns = useCallback((cols: string[]) => {\n const stickyKeys = columns.filter(c => c.stickyXHeader).map(c => c.key);\n const merged = Array.from(new Set([...stickyKeys, ...cols]));\n setVisibleColumnsState(merged);\n if (storageKey) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(merged));\n } catch {\n // ignore storage errors\n }\n }\n }, [columns, storageKey]);\n\n return { visibleColumns, setVisibleColumns };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { SlidersHorizontal } from \"lucide-react\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"@/components/primitives/popover\";\nimport { Checkbox } from \"@/components/primitives/checkbox\";\nimport { Button } from \"@/components/primitives/button\";\nimport { cn } from \"@/utils\";\nimport { ColumnDef } from \"./table\";\n\nexport interface ColumnSelectionProps<T = any> {\n columns: ColumnDef<T>[];\n visibleColumns: string[];\n onVisibleColumnsChange: (cols: string[]) => void;\n triggerLabel?: string;\n trigger?: React.ReactNode;\n}\n\nexport function ColumnSelection<T = any>({\n columns,\n visibleColumns,\n onVisibleColumnsChange,\n triggerLabel = \"Manage Columns\",\n trigger,\n}: ColumnSelectionProps<T>) {\n const handleToggle = React.useCallback((key: string, checked: boolean) => {\n if (checked) {\n if (!visibleColumns.includes(key)) {\n onVisibleColumnsChange([...visibleColumns, key]);\n }\n } else {\n onVisibleColumnsChange(visibleColumns.filter(k => k !== key));\n }\n }, [visibleColumns, onVisibleColumnsChange]);\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n {trigger ?? (\n <Button variant=\"outline\" size=\"sm\">\n <SlidersHorizontal className=\"h-4 w-4\" aria-hidden=\"true\" />\n {triggerLabel}\n </Button>\n )}\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-56 p-2\">\n <p className=\"px-2 py-1.5 text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide\">\n Columns\n </p>\n <div className=\"space-y-1 mt-1\">\n {columns.map(col => {\n const isSticky = !!col.stickyXHeader;\n const isChecked = isSticky || visibleColumns.includes(col.key);\n\n return (\n <label\n key={col.key}\n className={cn(\n \"flex items-center gap-2.5 rounded-hz-md px-2 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-neutral-800\",\n isSticky && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <Checkbox\n aria-label={col.label}\n checked={isChecked}\n disabled={isSticky}\n onCheckedChange={(checked) => {\n if (!isSticky) handleToggle(col.key, !!checked);\n }}\n />\n <span className=\"text-gray-700 dark:text-gray-300\">{col.label}</span>\n </label>\n );\n })}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { motion } from \"framer-motion\";\n\nimport { cn } from \"@/utils\";\n\n// Context to share active tab info\ninterface TabsContextValue {\n activeTab: string | undefined;\n setActiveTab: (value: string) => void;\n registerTab: (value: string, element: HTMLButtonElement | null) => void;\n tabRefs: Map<string, HTMLButtonElement | null>;\n listRef: React.RefObject<HTMLDivElement>;\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = () => {\n const context = React.useContext(TabsContext);\n if (!context) {\n throw new Error(\"Tabs components must be used within a Tabs provider\");\n }\n return context;\n};\n\n// Context to share variant from TabsList to TabsTrigger\ninterface TabsListContextValue {\n variant: \"pill\" | \"underline\";\n}\n\nconst TabsListContext = React.createContext<TabsListContextValue>({ variant: \"pill\" });\nconst useTabsListContext = () => React.useContext(TabsListContext);\n\ninterface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst Tabs = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(({ defaultValue, value, onValueChange, children, ...props }, ref) => {\n const [activeTab, setActiveTabState] = React.useState(value ?? defaultValue);\n const tabRefs = React.useRef(new Map<string, HTMLButtonElement | null>()).current;\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const setActiveTab = React.useCallback(\n (newValue: string) => {\n setActiveTabState(newValue);\n onValueChange?.(newValue);\n },\n [onValueChange]\n );\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTabState(value);\n }\n }, [value]);\n\n const registerTab = React.useCallback(\n (tabValue: string, element: HTMLButtonElement | null) => {\n tabRefs.set(tabValue, element);\n },\n [tabRefs]\n );\n\n return (\n <TabsContext.Provider\n value={{ activeTab, setActiveTab, registerTab, tabRefs, listRef }}\n >\n <TabsPrimitive.Root\n ref={ref}\n defaultValue={defaultValue}\n value={activeTab}\n onValueChange={setActiveTab}\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsContext.Provider>\n );\n});\nTabs.displayName = \"Tabs\";\n\nexport type TabsVariant = \"pill\" | \"underline\";\n\ninterface TabsListProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {\n variant?: TabsVariant;\n}\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, children, variant = \"pill\", ...props }, ref) => {\n const { activeTab, tabRefs, listRef } = useTabsContext();\n const [indicatorStyle, setIndicatorStyle] = React.useState<{\n left: number;\n width: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (variant !== \"pill\") return;\n\n const updateIndicator = () => {\n if (!activeTab || !listRef.current) return;\n\n const activeElement = tabRefs.get(activeTab);\n if (!activeElement) return;\n\n const listRect = listRef.current.getBoundingClientRect();\n const tabRect = activeElement.getBoundingClientRect();\n\n setIndicatorStyle({\n left: tabRect.left - listRect.left,\n width: tabRect.width,\n });\n };\n\n updateIndicator();\n window.addEventListener(\"resize\", updateIndicator);\n return () => window.removeEventListener(\"resize\", updateIndicator);\n }, [activeTab, tabRefs, listRef, variant]);\n\n return (\n <TabsListContext.Provider value={{ variant }}>\n <TabsPrimitive.List\n ref={(node) => {\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={cn(\n variant === \"pill\"\n ? \"relative inline-flex h-10 items-center justify-center rounded-hz-lg p-1 bg-gray-100 text-gray-500 dark:bg-neutral-700 dark:text-gray-400\"\n : \"flex gap-4 border-b border-gray-200 dark:border-neutral-800\",\n className\n )}\n {...props}\n >\n {variant === \"pill\" && indicatorStyle && (\n <motion.div\n className=\"absolute h-8 rounded-hz-md bg-white dark:bg-neutral-900 shadow-sm\"\n initial={false}\n animate={{\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n }}\n transition={{\n type: \"spring\",\n stiffness: 500,\n damping: 35,\n }}\n />\n )}\n {children}\n </TabsPrimitive.List>\n </TabsListContext.Provider>\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\ninterface TabsTriggerProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n icon?: React.ReactNode;\n}\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, value, icon, children, ...props }, ref) => {\n const { registerTab, activeTab } = useTabsContext();\n const { variant } = useTabsListContext();\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n React.useEffect(() => {\n registerTab(value, triggerRef.current);\n return () => registerTab(value, null);\n }, [value, registerTab]);\n\n const isActive = activeTab === value;\n\n return (\n <TabsPrimitive.Trigger\n ref={(node) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n value={value}\n className={cn(\n \"inline-flex items-center gap-1.5 whitespace-nowrap text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n variant === \"pill\"\n ? cn(\n \"relative z-10 justify-center rounded-hz-md px-3 py-1.5 transition-colors\",\n isActive ? \"text-gray-900 dark:text-gray-100\" : \"text-gray-500 dark:text-gray-400\"\n )\n : cn(\n \"pb-3 border-b-2 transition-colors\",\n isActive\n ? \"border-blue-600 text-blue-600 dark:border-blue-400 dark:text-blue-400\"\n : \"border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-600\"\n ),\n className\n )}\n {...props}\n >\n {icon && <span className=\"shrink-0 inline-flex\">{icon}</span>}\n {children}\n </TabsPrimitive.Trigger>\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 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\n\nimport { cn } from \"@/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-hz-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-600 dark:bg-neutral-800 dark:text-gray-100 dark:placeholder:text-gray-500\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleGroupVariants = cva(\n \"inline-flex w-fit items-stretch border border-gray-200 bg-white dark:border-neutral-700 dark:bg-neutral-900\",\n {\n variants: {\n size: {\n default: \"h-[52px]\",\n sm: \"h-10\",\n lg: \"h-[60px]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nconst toggleItemVariants = cva(\n \"inline-flex flex-1 items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed\",\n {\n variants: {\n size: {\n default: \"h-full px-6\",\n sm: \"h-full px-4 text-xs\",\n lg: \"h-full px-8 text-base\",\n },\n iconOnly: {\n true: \"aspect-square px-0 min-w-0\",\n false: \"min-w-[120px]\",\n },\n },\n compoundVariants: [\n { size: \"sm\", iconOnly: false, class: \"min-w-[90px]\" },\n { size: \"lg\", iconOnly: false, class: \"min-w-[140px]\" },\n ],\n defaultVariants: {\n size: \"default\",\n iconOnly: false,\n },\n }\n);\n\nexport type ToggleRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\nconst containerRadiusClass: Record<ToggleRadius, string> = {\n none: \"rounded-hz-lg\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n full: \"rounded-full\",\n};\n\nconst itemRadiusClass: Record<ToggleRadius, string> = {\n none: \"first:rounded-l-hz-lg last:rounded-r-hz-lg\",\n sm: \"first:rounded-l-sm last:rounded-r-sm\",\n md: \"first:rounded-l-md last:rounded-r-md\",\n lg: \"first:rounded-l-lg last:rounded-r-lg\",\n full: \"rounded-full\",\n};\n\nexport interface ToggleOption {\n value: string;\n label?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n ariaLabel?: string;\n}\n\nexport interface ToggleProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root>,\n \"onChange\" | \"onValueChange\" | \"type\" | \"value\" | \"defaultValue\"\n >,\n VariantProps<typeof toggleGroupVariants> {\n options: ToggleOption[];\n value?: string[];\n onChange?: (value: string[]) => void;\n defaultValue?: string[];\n radius?: ToggleRadius;\n}\n\nfunction Toggle({\n className,\n options,\n value,\n onChange,\n size,\n radius = \"none\",\n ...props\n}: ToggleProps) {\n return (\n <ToggleGroupPrimitive.Root\n {...props}\n type=\"multiple\"\n {...(value !== undefined ? { value, onValueChange: onChange } : {})}\n className={cn(\n toggleGroupVariants({ size }),\n containerRadiusClass[radius],\n className\n )}\n >\n {options.map((option) => {\n const iconOnly = !!option.icon && !option.label;\n return (\n <ToggleGroupPrimitive.Item\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n aria-label={iconOnly ? (option.ariaLabel ?? option.value) : undefined}\n className={cn(\n toggleItemVariants({ size, iconOnly }),\n itemRadiusClass[radius],\n \"border border-transparent text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\",\n \"data-[state=on]:!bg-blue-50 data-[state=on]:border-blue-500 data-[state=on]:text-blue-600\",\n \"dark:data-[state=on]:!bg-blue-950/40 dark:data-[state=on]:border-blue-400 dark:data-[state=on]:text-blue-400\"\n )}\n >\n {option.icon && (\n <span className=\"shrink-0 inline-flex\">{option.icon}</span>\n )}\n {option.label}\n </ToggleGroupPrimitive.Item>\n );\n })}\n </ToggleGroupPrimitive.Root>\n );\n}\n\nexport { Toggle, toggleGroupVariants, toggleItemVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils\";\n\nconst switchTrackVariants = cva(\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-blue-600 data-[state=unchecked]:bg-gray-200 dark:data-[state=checked]:bg-blue-500 dark:data-[state=unchecked]:bg-neutral-700\",\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n default: \"h-6 w-11\",\n lg: \"h-7 w-[52px]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nconst switchThumbVariants = cva(\n \"pointer-events-none block rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=unchecked]:translate-x-0\",\n {\n variants: {\n size: {\n sm: \"h-4 w-4 data-[state=checked]:translate-x-4\",\n default: \"h-5 w-5 data-[state=checked]:translate-x-5\",\n lg: \"h-6 w-6 data-[state=checked]:translate-x-6\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n);\n\nconst switchLabelVariants = cva(\"select-none\", {\n variants: {\n size: {\n sm: \"text-xs\",\n default: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n});\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchTrackVariants> {\n label?: string;\n labelPosition?: \"left\" | \"right\";\n}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, size, label, labelPosition = \"right\", ...props }, ref) => {\n const generatedId = React.useId();\n const switchId = props.id ?? generatedId;\n\n const switchEl = (\n <SwitchPrimitive.Root\n {...props}\n id={switchId}\n ref={ref}\n className={cn(switchTrackVariants({ size }), className)}\n >\n <SwitchPrimitive.Thumb className={switchThumbVariants({ size })} />\n </SwitchPrimitive.Root>\n );\n\n if (!label) return switchEl;\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-2\",\n props.disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n {labelPosition === \"left\" && (\n <label\n htmlFor={switchId}\n className={cn(\n switchLabelVariants({ size }),\n props.disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n {label}\n </label>\n )}\n {switchEl}\n {labelPosition === \"right\" && (\n <label\n htmlFor={switchId}\n className={cn(\n switchLabelVariants({ size }),\n props.disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n {label}\n </label>\n )}\n </div>\n );\n});\nSwitch.displayName = \"Switch\";\n\nexport { Switch, switchTrackVariants, switchThumbVariants, switchLabelVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Clock } from \"lucide-react\";\nimport { cn, mergeRefs } from \"@/utils\";\nimport { Button } from \"@/components/primitives/button\";\nimport { TextButton } from \"@/components/enhanced/text-button\";\n\nexport interface TimeValue {\n hour: number | null;\n minute: number | null;\n}\n\nexport interface TimeRange {\n from: TimeValue;\n to: TimeValue;\n}\n\nexport const DEFAULT_TIME_RANGE: TimeRange = {\n from: { hour: null, minute: null },\n to: { hour: null, minute: null },\n};\n\nfunction isTimeSet(tv: TimeValue): boolean {\n return tv.hour !== null && tv.minute !== null;\n}\n\nfunction to12Hour(hour24: number | null): { hour12: number | null; period: \"AM\" | \"PM\" } {\n if (hour24 === null) return { hour12: null, period: \"AM\" };\n const period: \"AM\" | \"PM\" = hour24 >= 12 ? \"PM\" : \"AM\";\n const hour12 = hour24 % 12 || 12;\n return { hour12, period };\n}\n\nfunction to24Hour(hour12: number, period: \"AM\" | \"PM\"): number {\n if (period === \"AM\") return hour12 === 12 ? 0 : hour12;\n return hour12 === 12 ? 12 : hour12 + 12;\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, \"0\");\n}\n\nfunction clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val));\n}\n\ninterface TimeInputProps {\n value: number | null;\n min: number;\n max: number;\n onChange: (value: number) => void;\n onComplete?: () => void;\n onDirty?: () => void;\n inputRef?: React.Ref<HTMLInputElement>;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\nfunction TimeInput({\n value,\n min,\n max,\n onChange,\n onComplete,\n onDirty,\n inputRef,\n disabled = false,\n \"aria-label\": ariaLabel,\n}: TimeInputProps) {\n const [editValue, setEditValue] = React.useState<string | null>(null);\n const internalRef = React.useRef<HTMLInputElement>(null);\n const committedRef = React.useRef(false);\n const pendingDigitRef = React.useRef<string | null>(null);\n\n const setRefs = React.useCallback(mergeRefs(internalRef, inputRef), [inputRef]);\n\n const commitTwoDigits = (raw: string) => {\n const parsed = parseInt(raw, 10);\n const clamped = clamp(parsed, min, max);\n pendingDigitRef.current = null;\n committedRef.current = true;\n onChange(clamped);\n setEditValue(null);\n onComplete?.();\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const allDigits = e.target.value.replace(/\\D/g, \"\");\n\n if (allDigits === \"\") {\n setEditValue(\"\");\n pendingDigitRef.current = null;\n return;\n }\n\n if (pendingDigitRef.current !== null) {\n if (allDigits.length > 2) {\n commitTwoDigits(pendingDigitRef.current + allDigits[allDigits.length - 1]);\n return;\n }\n // Backspace from padded state — clear entirely\n pendingDigitRef.current = null;\n setEditValue(\"\");\n return;\n }\n\n if (allDigits.length === 1) {\n pendingDigitRef.current = allDigits;\n setEditValue(\"0\" + allDigits);\n onDirty?.();\n return;\n }\n\n commitTwoDigits(allDigits.slice(0, 2));\n };\n\n const commit = () => {\n if (committedRef.current) {\n committedRef.current = false;\n pendingDigitRef.current = null;\n setEditValue(null);\n return;\n }\n if (editValue === null) return;\n if (editValue === \"\") {\n pendingDigitRef.current = null;\n setEditValue(null);\n return;\n }\n const parsed = parseInt(editValue, 10);\n if (!isNaN(parsed)) {\n onChange(clamp(parsed, min, max));\n }\n pendingDigitRef.current = null;\n setEditValue(null);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n commit();\n internalRef.current?.blur();\n } else if (e.key === \"Escape\") {\n pendingDigitRef.current = null;\n setEditValue(null);\n internalRef.current?.blur();\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n pendingDigitRef.current = null;\n const curr = value ?? min;\n const next = curr >= max ? min : curr + 1;\n onChange(next);\n setEditValue(pad(next));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n pendingDigitRef.current = null;\n const curr = value ?? max;\n const next = curr <= min ? max : curr - 1;\n onChange(next);\n setEditValue(pad(next));\n }\n };\n\n return (\n <input\n ref={setRefs}\n type=\"text\"\n inputMode=\"numeric\"\n aria-label={ariaLabel}\n disabled={disabled}\n value={editValue ?? (value === null ? \"--\" : pad(value))}\n onChange={handleChange}\n onFocus={(e) => {\n pendingDigitRef.current = null;\n setEditValue(\"\");\n requestAnimationFrame(() => e.target.select());\n }}\n onBlur={() => commit()}\n onKeyDown={handleKeyDown}\n className={cn(\n \"w-9 h-8 rounded-md border text-center text-sm tabular-nums font-medium outline-none transition-colors\",\n \"bg-white border-gray-200 text-gray-600\",\n \"focus:border-blue-500 focus:ring-1 focus:ring-blue-500/30 focus:text-gray-700\",\n \"dark:bg-neutral-800 dark:border-neutral-600 dark:text-gray-100\",\n \"dark:focus:border-blue-400 dark:focus:ring-blue-400/30\",\n disabled && \"opacity-40 cursor-not-allowed bg-gray-50 dark:bg-neutral-900\"\n )}\n />\n );\n}\n\ninterface PeriodToggleProps {\n value: \"AM\" | \"PM\";\n onChange: (value: \"AM\" | \"PM\") => void;\n disabled?: boolean;\n}\n\nfunction PeriodToggle({ value, onChange, disabled = false }: PeriodToggleProps) {\n return (\n <div\n className={cn(\n \"inline-flex rounded-md border overflow-hidden\",\n disabled && \"opacity-40 cursor-not-allowed\",\n \"border-gray-200 dark:border-neutral-600\"\n )}\n >\n {([\"AM\", \"PM\"] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(p)}\n className={cn(\n \"px-2 h-8 text-xs font-semibold tracking-wide transition-colors\",\n \"disabled:pointer-events-none\",\n value === p\n ? \"!bg-blue-600 !text-white dark:!bg-blue-500\"\n : \"bg-white text-gray-500 hover:bg-gray-50 hover:text-gray-600 dark:bg-neutral-800 dark:text-gray-400 dark:hover:bg-neutral-700\"\n )}\n >\n {p}\n </button>\n ))}\n </div>\n );\n}\n\ninterface TimeFieldProps {\n label: string;\n value: TimeValue;\n onChange: (value: TimeValue) => void;\n hourRef?: React.Ref<HTMLInputElement>;\n minuteRef?: React.Ref<HTMLInputElement>;\n onMinuteComplete?: () => void;\n onDirty?: () => void;\n disabled?: boolean;\n}\n\nfunction TimeField({\n label,\n value,\n onChange,\n hourRef,\n minuteRef,\n onMinuteComplete,\n onDirty,\n disabled = false,\n}: TimeFieldProps) {\n const { hour12, period } = to12Hour(value.hour);\n const minuteInputRef = React.useRef<HTMLInputElement>(null);\n\n const mergedMinuteRef = React.useCallback(mergeRefs(minuteInputRef, minuteRef), [minuteRef]);\n\n const handleHourChange = (newHour12: number) => {\n onChange({ ...value, hour: to24Hour(newHour12, period) });\n };\n\n const handleMinuteChange = (newMinute: number) => {\n onChange({ ...value, minute: newMinute });\n };\n\n const handlePeriodChange = (newPeriod: \"AM\" | \"PM\") => {\n if (hour12 === null) return; // can't toggle period with no hour set\n onChange({ ...value, hour: to24Hour(hour12, newPeriod) });\n };\n\n const focusMinute = () => {\n minuteInputRef.current?.focus();\n };\n\n return (\n <div className=\"flex items-center gap-2 justify-between\">\n <span\n className={cn(\n \"text-xs font-semibold uppercase tracking-wider\",\n disabled\n ? \"text-gray-300 dark:text-gray-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n >\n {label}\n </span>\n <div className=\"flex items-center gap-1\">\n <TimeInput\n value={hour12}\n min={1}\n max={12}\n onChange={handleHourChange}\n onComplete={focusMinute}\n onDirty={onDirty}\n inputRef={hourRef}\n disabled={disabled}\n aria-label={`${label} hour`}\n />\n <span\n className={cn(\n \"text-sm font-bold select-none\",\n disabled\n ? \"text-gray-300 dark:text-gray-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n >\n :\n </span>\n <TimeInput\n value={value.minute}\n min={0}\n max={59}\n onChange={handleMinuteChange}\n onComplete={onMinuteComplete}\n onDirty={onDirty}\n inputRef={mergedMinuteRef}\n disabled={disabled}\n aria-label={`${label} minute`}\n />\n <PeriodToggle\n value={period}\n onChange={handlePeriodChange}\n disabled={disabled}\n />\n </div>\n </div>\n );\n}\n\ninterface TimePickerRowProps {\n value: TimeRange;\n onChange: (value: TimeRange) => void;\n disabled?: boolean;\n /** When provided, a \"Remove\" button is rendered inline with the time fields. */\n onRemove?: () => void;\n /** Controls visibility of the remove button (e.g. only show when user has entered input). */\n showRemove?: boolean;\n /** Fired when the user types any digit into a time input, even a single character. */\n onDirty?: () => void;\n}\n\nfunction useTimeFieldState(value: TimeRange) {\n const fromSet = isTimeSet(value.from);\n const toSet = isTimeSet(value.to);\n const bothSet = fromSet && toSet;\n\n const orphanMinutes =\n (value.from.hour === null && value.from.minute !== null) ||\n (value.to.hour === null && value.to.minute !== null);\n\n const fromPartial = !fromSet && (value.from.hour !== null || value.from.minute !== null);\n const toPartial = !toSet && (value.to.hour !== null || value.to.minute !== null);\n const oneSideMissing = (fromSet && !toSet && !toPartial) || (toSet && !fromSet && !fromPartial);\n\n const fromMinutes = (value.from.hour ?? 0) * 60 + (value.from.minute ?? 0);\n const toMinutes = (value.to.hour ?? 0) * 60 + (value.to.minute ?? 0);\n const bothEqual = fromMinutes === toMinutes;\n const isOvernight = bothSet && toMinutes < fromMinutes;\n\n const durationMinutes = bothSet && !bothEqual\n ? (isOvernight ? (24 * 60 - fromMinutes) + toMinutes : toMinutes - fromMinutes)\n : 0;\n const durationHours = Math.floor(durationMinutes / 60);\n const durationRemaining = durationMinutes % 60;\n const showDuration = bothSet && !bothEqual;\n const durationLabel = durationRemaining > 0\n ? `${durationHours}h ${durationRemaining}m window${isOvernight ? \" (overnight)\" : \"\"}`\n : `${durationHours}h window${isOvernight ? \" (overnight)\" : \"\"}`;\n\n const incompleteHint = orphanMinutes\n ? \"Please set hours for the time to take effect\"\n : (fromPartial || toPartial)\n ? \"Please complete both hour and minute fields\"\n : oneSideMissing\n ? `Please set the ${fromSet ? \"to\" : \"from\"} time`\n : null;\n\n return { showDuration, durationLabel, isOvernight, incompleteHint };\n}\n\nexport function TimePickerColumn({ value, onChange, disabled = false, onRemove, showRemove = false, onDirty }: TimePickerRowProps) {\n const toHourRef = React.useRef<HTMLInputElement>(null);\n const { showDuration, durationLabel, isOvernight, incompleteHint } = useTimeFieldState(value);\n\n return (\n <div className=\"flex flex-col px-2 pt-2 pb-2 gap-1\">\n <div className=\"flex items-center gap-2\">\n <Clock\n className={cn(\n \"w-4 h-4 shrink-0\",\n disabled\n ? \"text-gray-300 dark:text-gray-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n />\n <span\n className={cn(\n \"text-xs font-semibold uppercase tracking-wider\",\n disabled\n ? \"text-gray-300 dark:text-gray-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n >\n Time\n </span>\n <span className=\"text-[9px] font-medium text-gray-400 dark:text-gray-600 tracking-wide\">\n (Optional)\n </span>\n {showRemove && onRemove && (\n <div className=\"ml-auto\">\n <TextButton\n // leadingDecorator={<X className=\"w-2 h-2\" />}\n variant=\"danger\"\n onClick={onRemove}\n size=\"sm\"\n className=\"!text-[0.625rem]\"\n >\n Remove\n </TextButton>\n </div>\n )}\n </div>\n <div className=\"flex flex-col gap-2 pl-6\">\n <TimeField\n label=\"From\"\n value={value.from}\n onChange={(from) => onChange({ ...value, from })}\n onMinuteComplete={() => toHourRef.current?.focus()}\n onDirty={onDirty}\n disabled={disabled}\n />\n <TimeField\n label=\"To\"\n value={value.to}\n onChange={(to) => onChange({ ...value, to })}\n hourRef={toHourRef}\n onDirty={onDirty}\n disabled={disabled}\n />\n {showDuration && (\n <span className={cn(\n \"text-[10px] font-medium\",\n isOvernight\n ? \"text-amber-500 dark:text-amber-400\"\n : \"text-gray-400 dark:text-gray-500\"\n )}>\n {durationLabel}\n </span>\n )}\n {incompleteHint && (\n <span className=\"text-[10px] font-medium text-amber-500 dark:text-amber-400\">\n {incompleteHint}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport function TimePickerRow({ value, onChange, disabled = false, onRemove, showRemove = false, onDirty }: TimePickerRowProps) {\n const toHourRef = React.useRef<HTMLInputElement>(null);\n const { showDuration, durationLabel, isOvernight, incompleteHint } = useTimeFieldState(value);\n\n return (\n <div className=\"flex flex-col px-4 pt-2 pb-3 gap-1\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex flex-col items-center gap-1\">\n <Clock\n className={cn(\n \"w-4 h-4 shrink-0\",\n disabled\n ? \"text-gray-300 dark:text-gray-600\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n />\n <span className=\"text-[9px] font-medium text-gray-300 dark:text-gray-600 tracking-wide\">\n OPT\n </span>\n </div>\n <div className=\"flex flex-col gap-1 flex-1\">\n <div className=\"flex items-center gap-3\">\n <TimeField\n label=\"From\"\n value={value.from}\n onChange={(from) => onChange({ ...value, from })}\n onMinuteComplete={() => toHourRef.current?.focus()}\n onDirty={onDirty}\n disabled={disabled}\n />\n <div\n className={cn(\n \"w-4 h-px\",\n disabled\n ? \"bg-gray-200 dark:bg-neutral-700\"\n : \"bg-gray-300 dark:bg-neutral-600\"\n )}\n />\n <TimeField\n label=\"To\"\n value={value.to}\n onChange={(to) => onChange({ ...value, to })}\n hourRef={toHourRef}\n onDirty={onDirty}\n disabled={disabled}\n />\n {showRemove && onRemove && (\n <Button\n // leadingDecorator={<X className=\"w-2 h-2\" />}\n variant=\"outline\"\n onClick={onRemove}\n className=\"text-[0.625rem] border border-red-100 dark:border-red-700 rounded-md px-2 py-1 h-8 text-red-500 hover:text-red-600 dark:text-red-400 dark:hover:text-red-300 transition-colors\"\n >\n Remove\n </Button>\n )}\n </div>\n {showDuration && (\n <span className={cn(\n \"text-[10px] font-medium pl-0.5\",\n isOvernight\n ? \"text-amber-500 dark:text-amber-400\"\n : \"text-gray-400 dark:text-gray-500\"\n )}>\n {durationLabel}\n </span>\n )}\n {incompleteHint && (\n <span className=\"text-[10px] font-medium pl-0.5 text-amber-500 dark:text-amber-400\">\n {incompleteHint}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n format,\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n eachDayOfInterval,\n isSameMonth,\n isSameDay,\n isWithinInterval,\n isBefore,\n isAfter,\n startOfDay,\n} from \"date-fns\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"@/utils\";\nimport type { DateRange } from \"./date-range-picker\";\n\nconst WEEKDAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nfunction getCalendarDays(month: Date): Date[] {\n const start = startOfWeek(startOfMonth(month), { weekStartsOn: 0 });\n const end = endOfWeek(endOfMonth(month), { weekStartsOn: 0 });\n return eachDayOfInterval({ start, end });\n}\n\ninterface CalendarMonthProps {\n month: Date;\n range: DateRange;\n hoverDate?: Date;\n onDayClick: (date: Date) => void;\n onDayHover: (date: Date | undefined) => void;\n onPrevMonth?: () => void;\n onNextMonth?: () => void;\n showPrevNav?: boolean;\n showNextNav?: boolean;\n}\n\nexport function CalendarMonth({\n month,\n range,\n hoverDate,\n onDayClick,\n onDayHover,\n onPrevMonth,\n onNextMonth,\n showPrevNav = true,\n showNextNav = true,\n}: CalendarMonthProps) {\n const days = getCalendarDays(month);\n const today = new Date();\n\n const getEffectiveTo = () => range.to ?? hoverDate;\n\n const isInRange = (date: Date): boolean => {\n const { from } = range;\n const effectiveTo = getEffectiveTo();\n if (!from || !effectiveTo) return false;\n const [start, end] = isBefore(from, effectiveTo)\n ? [from, effectiveTo]\n : [effectiveTo, from];\n return isWithinInterval(date, { start, end });\n };\n\n const isRangeStart = (date: Date): boolean => {\n const { from } = range;\n const effectiveTo = getEffectiveTo();\n if (!from) return false;\n if (!effectiveTo) return isSameDay(date, from);\n return isBefore(from, effectiveTo)\n ? isSameDay(date, from)\n : isSameDay(date, effectiveTo);\n };\n\n const isRangeEnd = (date: Date): boolean => {\n const { from } = range;\n const effectiveTo = getEffectiveTo();\n if (!from || !effectiveTo) return false;\n return isBefore(from, effectiveTo)\n ? isSameDay(date, effectiveTo)\n : isSameDay(date, from);\n };\n\n return (\n <div className=\"w-[252px]\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n onClick={onPrevMonth}\n className={cn(\n \"p-1 rounded-md transition-colors\",\n showPrevNav\n ? \"hover:bg-gray-100 dark:hover:bg-neutral-700 text-gray-500 dark:text-gray-400\"\n : \"invisible pointer-events-none\"\n )}\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <span className=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\n {format(month, \"MMMM yyyy\")}\n </span>\n <button\n onClick={onNextMonth}\n className={cn(\n \"p-1 rounded-md transition-colors\",\n showNextNav\n ? \"hover:bg-gray-100 dark:hover:bg-neutral-700 text-gray-500 dark:text-gray-400\"\n : \"invisible pointer-events-none\"\n )}\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 mb-1\">\n {WEEKDAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-gray-400 dark:text-gray-500 py-1\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Days grid */}\n <div\n className=\"grid grid-cols-7\"\n onMouseLeave={() => onDayHover(undefined)}\n >\n {days.map((day, idx) => {\n const outside = !isSameMonth(day, month);\n\n if (outside) {\n return <div key={idx} className=\"h-9\" />;\n }\n\n const isFuture = isAfter(startOfDay(day), startOfDay(today));\n const disabled = isFuture;\n const inRange = !disabled && isInRange(day);\n const rangeStart = !disabled && isRangeStart(day);\n const rangeEnd = !disabled && isRangeEnd(day);\n const isToday = isSameDay(day, today);\n\n return (\n <div\n key={idx}\n className={cn(\n \"h-9 flex items-center justify-center\",\n (inRange || rangeStart || rangeEnd) &&\n \"bg-blue-50 dark:bg-blue-950/40\",\n rangeStart && !rangeEnd && \"rounded-l-full\",\n rangeEnd && !rangeStart && \"rounded-r-full\",\n rangeStart && rangeEnd && \"rounded-full\"\n )}\n >\n <button\n onClick={() => !disabled && onDayClick(day)}\n onMouseEnter={() => !disabled && onDayHover(day)}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n className={cn(\n \"w-8 h-8 rounded-full text-sm flex items-center justify-center transition-colors\",\n isFuture &&\n \"text-gray-300 dark:text-gray-600 pointer-events-none cursor-not-allowed\",\n !disabled &&\n !rangeStart &&\n !rangeEnd &&\n \"text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-neutral-700\",\n !disabled &&\n inRange &&\n !rangeStart &&\n !rangeEnd &&\n \"text-blue-700 dark:text-blue-300 hover:bg-blue-100 dark:hover:bg-blue-900/50\",\n (rangeStart || rangeEnd) &&\n \"bg-blue-600 text-white hover:bg-blue-700 dark:hover:bg-blue-500\",\n isToday &&\n !rangeStart &&\n !rangeEnd &&\n !disabled &&\n \"font-bold\"\n )}\n >\n {format(day, \"d\")}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { startOfMonth, isBefore } from \"date-fns\";\nimport { DEFAULT_TIME_RANGE } from \"./time-picker\";\nimport type { TimeRange } from \"./time-picker\";\nimport type { DateRange, PresetOption } from \"./date-range-picker\";\n\nexport interface UseDateRangePickerOptions {\n value?: DateRange;\n onChange?: (range: DateRange | undefined) => void;\n showTimePicker?: boolean;\n timeValue?: TimeRange;\n onTimeChange?: (time: TimeRange) => void;\n}\n\nexport function useDateRangePicker({\n value,\n onChange,\n showTimePicker = false,\n timeValue,\n onTimeChange,\n}: UseDateRangePickerOptions) {\n const [open, setOpen] = React.useState(false);\n const [internalRange, setInternalRange] = React.useState<DateRange>({\n from: undefined,\n to: undefined,\n });\n const [draft, setDraft] = React.useState<DateRange>({\n from: undefined,\n to: undefined,\n });\n const [hoverDate, setHoverDate] = React.useState<Date | undefined>();\n const [viewMonth, setViewMonth] = React.useState<Date>(() =>\n startOfMonth(value?.from ?? new Date()),\n );\n const [activePreset, setActivePreset] = React.useState<string | undefined>();\n\n // Time state — buffered like dates so both commit atomically on \"Apply\".\n // `committedInternalTime` is the uncontrolled committed time (used when no\n // `timeValue` prop is provided). `draftTime` is the working copy visible\n // inside the popover during editing.\n const [committedInternalTime, setCommittedInternalTime] =\n React.useState<TimeRange>(DEFAULT_TIME_RANGE);\n const [draftTime, setDraftTime] = React.useState<TimeRange>(DEFAULT_TIME_RANGE);\n const [timeExpanded, setTimeExpanded] = React.useState(false);\n const [timeDirty, setTimeDirty] = React.useState(false);\n\n const committedRange = value ?? internalRange;\n const committedTime = timeValue ?? committedInternalTime;\n\n // --- derived booleans (based on draftTime, since these govern popover UI) --\n const timeVisible = !!(draft.from && draft.to);\n\n const hasAnyTimeInput =\n timeDirty ||\n draftTime.from.hour !== null ||\n draftTime.from.minute !== null ||\n draftTime.to.hour !== null ||\n draftTime.to.minute !== null;\n\n const isTimeComplete =\n draftTime.from.hour !== null &&\n draftTime.from.minute !== null &&\n draftTime.to.hour !== null &&\n draftTime.to.minute !== null;\n\n const hasPartialTime =\n showTimePicker && timeExpanded && !isTimeComplete;\n\n const canClear = !!(draft.from || committedRange.from);\n\n const canApply =\n !(draft.from && !draft.to) &&\n !!(draft.from || committedRange.from) &&\n !hasPartialTime;\n\n // --- handlers -------------------------------------------------------------\n\n const resetTime = React.useCallback(() => {\n setDraftTime(DEFAULT_TIME_RANGE);\n setTimeExpanded(false);\n setTimeDirty(false);\n }, []);\n\n const handleTimeChange = React.useCallback((newTime: TimeRange) => {\n setDraftTime(newTime);\n }, []);\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (newOpen) {\n setDraft(committedRange);\n if (committedRange.from)\n setViewMonth(startOfMonth(committedRange.from));\n setDraftTime(committedTime);\n const hasExistingTime =\n committedTime.from.hour !== null ||\n committedTime.from.minute !== null ||\n committedTime.to.hour !== null ||\n committedTime.to.minute !== null;\n setTimeExpanded(hasExistingTime);\n setTimeDirty(false);\n }\n // On dismiss (newOpen === false) we simply close; draft time is discarded\n // and committedTime remains unchanged — no stale intermediate values leak.\n setOpen(newOpen);\n },\n [committedRange, committedTime],\n );\n\n const handleDayClick = React.useCallback(\n (date: Date) => {\n const { from, to } = draft;\n\n if (!from || (from && to)) {\n setDraft({ from: date, to: undefined });\n setActivePreset(undefined);\n if (showTimePicker && timeExpanded) {\n resetTime();\n }\n return;\n }\n\n const [start, end] = isBefore(from, date) ? [from, date] : [date, from];\n setDraft({ from: start, to: end });\n setHoverDate(undefined);\n },\n [draft, showTimePicker, timeExpanded, resetTime],\n );\n\n const handlePreset = React.useCallback(\n (preset: PresetOption) => {\n const newRange = preset.getRange();\n setDraft(newRange);\n setActivePreset(preset.label);\n if (newRange.from) setViewMonth(startOfMonth(newRange.from));\n if (showTimePicker) resetTime();\n },\n [showTimePicker, resetTime],\n );\n\n const handleApply = React.useCallback(() => {\n if (draft.from && !draft.to) return;\n const newRange = draft.from && draft.to ? draft : undefined;\n\n const rangeChanged =\n newRange?.from?.getTime() !== committedRange.from?.getTime() ||\n newRange?.to?.getTime() !== committedRange.to?.getTime();\n\n const timeChanged =\n draftTime.from.hour !== committedTime.from.hour ||\n draftTime.from.minute !== committedTime.from.minute ||\n draftTime.to.hour !== committedTime.to.hour ||\n draftTime.to.minute !== committedTime.to.minute;\n\n if (rangeChanged) {\n if (onChange) onChange(newRange);\n else setInternalRange(newRange ?? { from: undefined, to: undefined });\n }\n\n if (timeChanged) {\n if (onTimeChange) onTimeChange(draftTime);\n else setCommittedInternalTime(draftTime);\n }\n\n setOpen(false);\n }, [draft, onChange, committedRange, draftTime, committedTime, onTimeChange]);\n\n const handleClear = React.useCallback(() => {\n setDraft({ from: undefined, to: undefined });\n setActivePreset(undefined);\n if (showTimePicker) resetTime();\n }, [showTimePicker, resetTime]);\n\n const expandTime = React.useCallback(() => {\n setTimeExpanded(true);\n }, []);\n\n const markTimeDirty = React.useCallback(() => {\n setTimeDirty(true);\n }, []);\n\n return {\n open,\n draft,\n hoverDate,\n viewMonth,\n activePreset,\n committedRange,\n committedTime,\n draftTime,\n timeExpanded,\n timeVisible,\n hasAnyTimeInput,\n canClear,\n canApply,\n showTimePicker,\n\n setHoverDate,\n setViewMonth,\n handleTimeChange,\n handleOpenChange,\n handleDayClick,\n handlePreset,\n handleApply,\n handleClear,\n resetTime,\n expandTime,\n markTimeDirty,\n } as const;\n}\n","import { format, isSameDay } from \"date-fns\";\nimport type { TimeRange } from \"./time-picker\";\nimport type { DateRange } from \"./date-range-picker\";\n\nexport function formatTime(hour: number, minute: number): string {\n const period = hour >= 12 ? \"PM\" : \"AM\";\n const h = hour % 12 || 12;\n const m = minute.toString().padStart(2, \"0\");\n return `${h}:${m} ${period}`;\n}\n\nexport function isTimeComplete(time: TimeRange): boolean {\n return (\n time.from.hour !== null &&\n time.from.minute !== null &&\n time.to.hour !== null &&\n time.to.minute !== null\n );\n}\n\nexport function formatDateRange(\n range: DateRange | undefined,\n placeholder: string,\n time?: TimeRange\n): string {\n if (!range?.from) return placeholder;\n\n const hasTime = time && isTimeComplete(time);\n\n if (!range.to || isSameDay(range.from, range.to)) {\n const dateStr = format(range.from, \"MMM d, yyyy\");\n return hasTime\n ? `${dateStr} ${formatTime(time.from.hour!, time.from.minute!)} – ${formatTime(time.to.hour!, time.to.minute!)}`\n : dateStr;\n }\n\n const sameYear = range.from.getFullYear() === range.to.getFullYear();\n const fromDate = format(range.from, sameYear ? \"MMM d\" : \"MMM d, yyyy\");\n const toDate = format(range.to, \"MMM d, yyyy\");\n\n if (hasTime) {\n return `${fromDate} ${formatTime(time.from.hour!, time.from.minute!)} – ${toDate} ${formatTime(time.to.hour!, time.to.minute!)}`;\n }\n return `${fromDate} – ${toDate}`;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n startOfDay,\n endOfDay,\n startOfWeek,\n endOfWeek,\n startOfMonth,\n endOfMonth,\n subDays,\n subMonths,\n addMonths,\n min,\n} from \"date-fns\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { CalendarIcon, Clock } from \"lucide-react\";\nimport { cn } from \"@/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/primitives/popover\";\nimport { Button } from \"@/components/primitives/button\";\nimport { CalendarMonth } from \"./calendar\";\nimport { TimePickerRow } from \"./time-picker\";\nimport type { TimeRange } from \"./time-picker\";\nimport { useDateRangePicker } from \"./use-date-range-picker\";\nimport { formatDateRange } from \"./format-utils\";\n\nexport interface DateRange {\n from: Date | undefined;\n to: Date | undefined;\n}\n\nexport interface PresetOption {\n label: string;\n getRange: () => DateRange;\n}\n\nexport interface PresetSection {\n title: string;\n options: PresetOption[];\n}\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n onChange?: (range: DateRange | undefined) => void;\n presets?: PresetOption[];\n /** Grouped presets with section headers. Takes precedence over `presets` when provided. */\n presetSections?: PresetSection[];\n placeholder?: string;\n disabled?: boolean;\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n /** Show optional time-of-day selectors within the popover. */\n showTimePicker?: boolean;\n /** Controlled time range value. Defaults to 12:00 AM – 12:00 AM. */\n timeValue?: TimeRange;\n /** Called when the user changes a time value. */\n onTimeChange?: (time: TimeRange) => void;\n}\n\nexport const DEFAULT_PRESETS: PresetOption[] = [\n {\n label: \"Today\",\n getRange: () => ({\n from: startOfDay(new Date()),\n to: endOfDay(new Date()),\n }),\n },\n {\n label: \"Yesterday\",\n getRange: () => {\n const d = subDays(new Date(), 1);\n return { from: startOfDay(d), to: endOfDay(d) };\n },\n },\n {\n label: \"This Week\",\n getRange: () => ({\n from: startOfWeek(new Date(), { weekStartsOn: 0 }),\n to: min([endOfWeek(new Date(), { weekStartsOn: 0 }), endOfDay(new Date())]),\n }),\n },\n {\n label: \"Last Week\",\n getRange: () => {\n const d = subDays(new Date(), 7);\n return {\n from: startOfWeek(d, { weekStartsOn: 0 }),\n to: endOfWeek(d, { weekStartsOn: 0 }),\n };\n },\n },\n {\n label: \"This Month\",\n getRange: () => ({\n from: startOfMonth(new Date()),\n to: min([endOfMonth(new Date()), endOfDay(new Date())]),\n }),\n },\n {\n label: \"Last Month\",\n getRange: () => {\n const d = subMonths(new Date(), 1);\n return { from: startOfMonth(d), to: endOfMonth(d) };\n },\n },\n];\n\nexport function DateRangePicker({\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n presetSections,\n placeholder = \"Select date range\",\n disabled = false,\n align = \"start\",\n className,\n showTimePicker = false,\n timeValue,\n onTimeChange,\n}: DateRangePickerProps) {\n const picker = useDateRangePicker({\n value,\n onChange,\n showTimePicker,\n timeValue,\n onTimeChange,\n });\n\n const rightMonth = addMonths(picker.viewMonth, 1);\n\n return (\n <Popover open={picker.open} onOpenChange={picker.handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n disabled={disabled}\n className={cn(\n \"inline-flex h-8 items-center gap-2 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm shadow-sm transition-colors\",\n \"hover:bg-gray-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\",\n \"dark:border-neutral-600 dark:bg-neutral-800 dark:hover:bg-neutral-700\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n picker.committedRange.from\n ? \"text-gray-900 dark:text-gray-100\"\n : \"text-gray-400 dark:text-gray-500\",\n className\n )}\n >\n <CalendarIcon className=\"w-4 h-4 shrink-0 text-gray-400 dark:text-gray-500\" />\n <span>\n {formatDateRange(\n picker.committedRange,\n placeholder,\n showTimePicker ? picker.committedTime : undefined\n )}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent align={align} className=\"w-auto p-0 overflow-hidden\">\n <div className=\"flex divide-x divide-gray-100 dark:divide-neutral-700\">\n {/* Presets sidebar */}\n <div className=\"flex flex-col p-3 gap-0.5 min-w-[130px]\">\n {(presetSections ?? [{ title: \"Presets\", options: presets }]).map((section, si) => (\n <React.Fragment key={section.title}>\n {si > 0 && <div className=\"my-2 border-t border-gray-100 dark:border-neutral-700\" />}\n <p className=\"text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase tracking-wider mb-1 px-2\">\n {section.title}\n </p>\n {section.options.map((preset) => (\n <button\n key={preset.label}\n onClick={() => picker.handlePreset(preset)}\n className={cn(\n \"w-full text-left px-2 py-1.5 rounded-md text-sm transition-colors\",\n picker.activePreset === preset.label\n ? \"bg-blue-50 text-blue-600 font-medium dark:bg-blue-950/50 dark:text-blue-400\"\n : \"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-700\"\n )}\n >\n {preset.label}\n </button>\n ))}\n </React.Fragment>\n ))}\n </div>\n\n {/* Dual calendar + action buttons */}\n <div className=\"flex flex-col\">\n <div className=\"flex gap-4 p-4\">\n <CalendarMonth\n month={picker.viewMonth}\n range={picker.draft}\n hoverDate={picker.hoverDate}\n onDayClick={picker.handleDayClick}\n onDayHover={picker.setHoverDate}\n onPrevMonth={() => picker.setViewMonth(subMonths(picker.viewMonth, 1))}\n showPrevNav\n showNextNav={false}\n />\n <div className=\"w-px bg-gray-100 dark:bg-neutral-700 self-stretch\" />\n <CalendarMonth\n month={rightMonth}\n range={picker.draft}\n hoverDate={picker.hoverDate}\n onDayClick={picker.handleDayClick}\n onDayHover={picker.setHoverDate}\n onNextMonth={() => picker.setViewMonth(addMonths(picker.viewMonth, 1))}\n showPrevNav={false}\n showNextNav\n />\n </div>\n {showTimePicker && (\n <motion.div layout transition={{ layout: { duration: 0.2, ease: \"easeInOut\" } }}\n className=\"border-t border-gray-100 dark:border-neutral-700\">\n <AnimatePresence mode=\"wait\" initial={false}>\n {picker.timeVisible && !picker.timeExpanded ? (\n <motion.div\n key=\"add-time-btn\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.12 }}\n >\n <div className=\"px-4 py-2 \">\n <Button\n variant=\"outline\"\n onClick={picker.expandTime}\n leadingDecorator={<Clock className=\"w-3.5 h-3.5\" />}\n className=\"w-full rounded-md h-9\"\n >\n Add time range\n </Button>\n </div>\n </motion.div>\n ) : picker.timeVisible && picker.timeExpanded ? (\n <motion.div\n key=\"time-picker\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.12 }}\n >\n <TimePickerRow\n value={picker.draftTime}\n onChange={picker.handleTimeChange}\n onRemove={picker.resetTime}\n showRemove={picker.timeExpanded}\n onDirty={picker.markTimeDirty}\n />\n </motion.div>\n ) : null}\n </AnimatePresence>\n </motion.div>\n )}\n <div className=\"flex items-center justify-end gap-2 px-4 py-3 border-t border-gray-100 dark:border-neutral-700\">\n <button\n onClick={picker.handleClear}\n disabled={!picker.canClear}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm transition-colors\",\n picker.canClear\n ? \"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-700\"\n : \"text-gray-300 dark:text-gray-600 cursor-not-allowed\"\n )}\n >\n Clear\n </button>\n <button\n onClick={picker.handleApply}\n disabled={!picker.canApply}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm font-medium transition-colors\",\n picker.canApply\n ? \"bg-blue-600 text-white hover:bg-blue-700 dark:hover:bg-blue-500\"\n : \"bg-blue-100 text-blue-300 cursor-not-allowed dark:bg-blue-950/30 dark:text-blue-800\"\n )}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n subMonths,\n addMonths,\n} from \"date-fns\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { CalendarIcon, Clock } from \"lucide-react\";\nimport { Button } from \"@/components/primitives/button\";\nimport { cn } from \"@/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/primitives/popover\";\nimport { Label } from \"@/components/primitives/typography\";\nimport { CalendarMonth } from \"./calendar\";\nimport { TimePickerColumn } from \"./time-picker\";\nimport type { TimeRange } from \"./time-picker\";\nimport type { DateRange, PresetOption, PresetSection } from \"./date-range-picker\";\nimport { DEFAULT_PRESETS } from \"./date-range-picker\";\nimport { useDateRangePicker } from \"./use-date-range-picker\";\nimport { formatDateRange } from \"./format-utils\";\n\nexport interface DateRangePickerMobileProps {\n label?: string;\n value?: DateRange;\n onChange?: (range: DateRange | undefined) => void;\n presets?: PresetOption[];\n presetSections?: PresetSection[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n showTimePicker?: boolean;\n timeValue?: TimeRange;\n onTimeChange?: (time: TimeRange) => void;\n}\n\nexport function DateRangePickerMobile({\n label,\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n presetSections,\n placeholder = \"Select date range\",\n disabled = false,\n className,\n showTimePicker = false,\n timeValue,\n onTimeChange,\n}: DateRangePickerMobileProps) {\n const picker = useDateRangePicker({\n value,\n onChange,\n showTimePicker,\n timeValue,\n onTimeChange,\n });\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {label && (\n <Label className=\"text-sm font-medium text-gray-900 dark:text-gray-100\">\n {label}\n </Label>\n )}\n\n <Popover open={picker.open} onOpenChange={picker.handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n disabled={disabled}\n className={cn(\n \"inline-flex h-8 w-full items-center gap-2 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm shadow-sm transition-colors\",\n \"hover:bg-gray-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\",\n \"dark:border-neutral-600 dark:bg-neutral-800 dark:hover:bg-neutral-700\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n picker.committedRange.from\n ? \"text-gray-900 dark:text-gray-100\"\n : \"text-gray-400 dark:text-gray-500\"\n )}\n >\n <CalendarIcon className=\"w-4 h-4 shrink-0 text-gray-400 dark:text-gray-500\" />\n <span className=\"truncate\">\n {formatDateRange(\n picker.committedRange,\n placeholder,\n showTimePicker ? picker.committedTime : undefined\n )}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"center\" className=\"w-auto p-0 overflow-hidden\">\n <div className=\"flex divide-x divide-gray-100 dark:divide-neutral-700\">\n {/* Presets sidebar */}\n <div className=\"flex flex-col p-2 gap-0.5 min-w-[110px] max-h-[360px] overflow-y-auto\">\n {(presetSections ?? [{ title: \"Presets\", options: presets }]).map(\n (section, si) => (\n <React.Fragment key={section.title}>\n {si > 0 && (\n <div className=\"my-2 border-t border-gray-100 dark:border-neutral-700\" />\n )}\n <p className=\"text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase tracking-wider mb-1 px-2\">\n {section.title}\n </p>\n {section.options.map((preset) => (\n <button\n key={preset.label}\n onClick={() => picker.handlePreset(preset)}\n className={cn(\n \"w-full text-left px-2 py-1.5 rounded-md text-sm transition-colors\",\n picker.activePreset === preset.label\n ? \"bg-blue-50 text-blue-600 font-medium dark:bg-blue-950/50 dark:text-blue-400\"\n : \"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-700\"\n )}\n >\n {preset.label}\n </button>\n ))}\n </React.Fragment>\n )\n )}\n </div>\n\n {/* Single calendar + time + actions */}\n <div className=\"flex flex-col\">\n <div className=\"p-2\">\n <CalendarMonth\n month={picker.viewMonth}\n range={picker.draft}\n hoverDate={picker.hoverDate}\n onDayClick={picker.handleDayClick}\n onDayHover={picker.setHoverDate}\n onPrevMonth={() => picker.setViewMonth(subMonths(picker.viewMonth, 1))}\n onNextMonth={() => picker.setViewMonth(addMonths(picker.viewMonth, 1))}\n showPrevNav\n showNextNav\n />\n </div>\n {showTimePicker && (\n <motion.div layout transition={{ layout: { duration: 0.2, ease: \"easeInOut\" } }}\n className=\"border-t border-gray-100 dark:border-neutral-700\">\n <AnimatePresence mode=\"wait\" initial={false}>\n {picker.timeVisible && !picker.timeExpanded ? (\n <motion.div\n key=\"add-time-btn\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.12 }}\n >\n <div className=\"px-2 py-2\">\n <Button\n variant=\"outline\"\n onClick={picker.expandTime}\n leadingDecorator={<Clock className=\"w-3.5 h-3.5\" />}\n className=\"w-full rounded-md h-9\"\n >\n Add time range\n </Button>\n </div>\n </motion.div>\n ) : picker.timeVisible && picker.timeExpanded ? (\n <motion.div\n key=\"time-picker\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.12 }}\n >\n <TimePickerColumn\n value={picker.draftTime}\n onChange={picker.handleTimeChange}\n onRemove={picker.resetTime}\n showRemove={picker.timeExpanded}\n onDirty={picker.markTimeDirty}\n />\n </motion.div>\n ) : null}\n </AnimatePresence>\n </motion.div>\n )}\n <div className=\"flex items-center justify-end gap-2 px-2 py-3 border-t border-gray-100 dark:border-neutral-700\">\n <button\n onClick={picker.handleClear}\n disabled={!picker.canClear}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm transition-colors\",\n picker.canClear\n ? \"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-neutral-700\"\n : \"text-gray-300 dark:text-gray-600 cursor-not-allowed\"\n )}\n >\n Clear\n </button>\n <button\n onClick={picker.handleApply}\n disabled={!picker.canApply}\n className={cn(\n \"px-3 py-1.5 rounded-md text-sm font-medium transition-colors\",\n picker.canApply\n ? \"bg-blue-600 text-white hover:bg-blue-700 dark:hover:bg-blue-500\"\n : \"bg-blue-100 text-blue-300 cursor-not-allowed dark:bg-blue-950/30 dark:text-blue-800\"\n )}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\nimport { cn } from \"@/utils\";\nimport { Text } from \"../typography\";\nimport { Separator } from \"../separator\";\nimport { Checkbox } from \"../checkbox\";\n\nexport interface MobileDataCardSelectBarProps {\n isSelected: boolean;\n onToggle: (e: React.SyntheticEvent) => void;\n badge?: ReactNode;\n}\n\nexport interface StatItem {\n label: string;\n value: ReactNode;\n className?: string;\n}\n\nexport interface DetailRow {\n label: string;\n value: ReactNode;\n pill?: boolean;\n}\n\nexport interface ContentRow {\n label: string;\n value: ReactNode;\n}\n\nexport interface MobileDataCardProps {\n title: string;\n subtitle?: string;\n image?: ReactNode;\n contentRows?: ContentRow[];\n\n onPress?: () => void;\n showChevron?: boolean;\n\n selectBar?: MobileDataCardSelectBarProps;\n stats?: StatItem[];\n statColumns?: 2 | 3 | 4 | 5;\n statsRenderer?: ReactNode;\n details?: DetailRow[];\n extraContent?: ReactNode;\n\n className?: string;\n}\n\nconst colsClass = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n} as const;\n\nexport function MobileDataCard({\n title,\n subtitle,\n image,\n contentRows,\n onPress,\n showChevron,\n selectBar,\n stats,\n statColumns,\n statsRenderer,\n details,\n extraContent,\n className,\n}: MobileDataCardProps) {\n const isSelected = selectBar?.isSelected ?? false;\n const chevronVisible = showChevron ?? !!onPress;\n\n const contentBody = (\n <div className=\"flex items-start gap-3 px-3 py-3\">\n {image && <div className=\"flex-shrink-0\">{image}</div>}\n\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Text\n size=\"sm\"\n weight=\"semibold\"\n className=\"truncate leading-tight text-neutral-900 dark:text-neutral-100\"\n >\n {title}\n </Text>\n\n {subtitle && (\n <Text size=\"xs\" className=\"text-neutral-400 dark:text-neutral-500\">\n {subtitle}\n </Text>\n )}\n\n {contentRows && contentRows.length > 0 && (\n <div className=\"grid grid-cols-2 gap-x-4 gap-y-1 text-xs\">\n {contentRows.map((row) => (\n <div key={row.label} className=\"truncate\">\n <span className=\"text-neutral-400 dark:text-neutral-500\">\n {row.label}{\" \"}\n </span>\n <span className=\"text-neutral-700 dark:text-neutral-300\">\n {row.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {chevronVisible && (\n <ChevronRight className=\"h-4 w-4 flex-shrink-0 self-center text-neutral-300 dark:text-neutral-600\" />\n )}\n </div>\n );\n\n const hasStats = (stats && stats.length > 0) || !!statsRenderer;\n const hasDetails = details && details.length > 0;\n const cols = statColumns ?? Math.max(2, Math.min(stats?.length ?? 2, 5)) as 2 | 3 | 4 | 5;\n\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-lg border transition-colors\",\n isSelected\n ? \"border-blue-500 bg-blue-50/50 dark:border-blue-400 dark:bg-blue-900/10\"\n : \"border-neutral-200 bg-white dark:border-neutral-700 dark:bg-neutral-800/30\",\n className\n )}\n >\n {/* Select Bar — uses div[role=button] to avoid nesting <button> (Checkbox) inside <button> */}\n {selectBar && (\n <div\n role=\"button\"\n tabIndex={0}\n aria-label={isSelected ? \"Deselect item\" : \"Select item\"}\n onClick={selectBar.onToggle}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n selectBar.onToggle(e);\n }\n }}\n className=\"flex w-full cursor-pointer items-center gap-2.5 border-b border-neutral-100 px-3 py-1.5 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-blue-500 dark:border-neutral-700/50\"\n >\n <Checkbox\n checked={isSelected}\n className=\"pointer-events-none\"\n tabIndex={-1}\n />\n <Text\n size=\"xs\"\n as=\"span\"\n className={cn(\n isSelected\n ? \"font-medium text-blue-600 dark:text-blue-400\"\n : \"text-neutral-400 dark:text-neutral-500\"\n )}\n >\n {isSelected ? \"Selected\" : \"Select\"}\n </Text>\n {selectBar.badge && (\n <span className=\"ml-auto\">{selectBar.badge}</span>\n )}\n </div>\n )}\n\n {/* Content */}\n {onPress ? (\n <button\n type=\"button\"\n onClick={onPress}\n className=\"w-full text-left transition-colors active:bg-neutral-50 dark:active:bg-neutral-800\"\n >\n {contentBody}\n </button>\n ) : (\n contentBody\n )}\n\n {/* Stats */}\n {statsRenderer ??\n (stats && stats.length > 0 && (\n <div className={cn(\"grid gap-1.5 px-3 pb-3\", colsClass[cols])}>\n {stats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex flex-col items-center rounded-md bg-neutral-100 py-1.5 dark:bg-neutral-800\"\n >\n <Text\n size=\"xs\"\n as=\"span\"\n className=\"leading-none text-neutral-400 dark:text-neutral-500\"\n >\n {stat.label}\n </Text>\n <Text\n size=\"sm\"\n weight=\"semibold\"\n as=\"span\"\n className={cn(\n \"mt-0.5 tabular-nums\",\n stat.className ??\n \"text-neutral-800 dark:text-neutral-200\"\n )}\n >\n {stat.value}\n </Text>\n </div>\n ))}\n </div>\n ))}\n\n {/* Details */}\n {hasDetails && (\n <>\n {hasStats && <Separator />}\n <div className=\"space-y-1 px-3 py-2\">\n {details!.map((detail) => (\n <div\n key={detail.label}\n className=\"flex items-center justify-between\"\n >\n <Text\n size=\"xs\"\n as=\"span\"\n className=\"text-neutral-400 dark:text-neutral-500\"\n >\n {detail.label}\n </Text>\n {detail.pill ? (\n <span className=\"inline-flex items-center rounded-full bg-blue-50 px-2 py-0.5 dark:bg-blue-900/30\">\n <Text\n size=\"xs\"\n weight=\"medium\"\n as=\"span\"\n className=\"text-blue-600 dark:text-blue-400\"\n >\n {detail.value}\n </Text>\n </span>\n ) : (\n detail.value\n )}\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* Extra Content */}\n {extraContent}\n </div>\n );\n}\n","\"use client\";\n\nimport { subDays, startOfDay, endOfDay, startOfWeek, endOfWeek, startOfMonth, endOfMonth, subMonths, subYears } from \"date-fns\";\nimport { SegmentedControl } from \"@/components/primitives/segmented-control\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/primitives/select\";\n\nexport interface ComparisonPeriod {\n /** Unique key for this option */\n key: string;\n /** Display label */\n label: string;\n /** Returns the comparison date range */\n getRange: () => { from: Date; to: Date };\n}\n\nexport interface PeriodComparisonSelectorProps {\n value?: string;\n onChange?: (key: string, period: ComparisonPeriod) => void;\n options?: ComparisonPeriod[];\n /** Force a specific mode instead of auto-switching */\n mode?: \"segmented\" | \"select\";\n size?: \"sm\" | \"default\" | \"lg\";\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport const DEFAULT_COMPARISON_PERIODS: ComparisonPeriod[] = [\n {\n key: \"yesterday\",\n label: \"vs. 1 day prior\",\n getRange: () => {\n const d = subDays(new Date(), 1);\n return { from: startOfDay(d), to: endOfDay(d) };\n },\n },\n {\n key: \"last-week\",\n label: \"vs. 7 days prior\",\n getRange: () => {\n const d = subDays(new Date(), 7);\n return {\n from: startOfWeek(d, { weekStartsOn: 0 }),\n to: endOfWeek(d, { weekStartsOn: 0 }),\n };\n },\n },\n {\n key: \"last-month\",\n label: \"vs. 30 days prior\",\n getRange: () => {\n const d = subMonths(new Date(), 1);\n return { from: startOfMonth(d), to: endOfMonth(d) };\n },\n },\n {\n key: \"last-year\",\n label: \"vs. 365 days prior\",\n getRange: () => {\n const d = subYears(new Date(), 1);\n return {\n from: startOfDay(new Date(d.getFullYear(), 0, 1)),\n to: endOfDay(new Date(d.getFullYear(), 11, 31)),\n };\n },\n },\n];\n\nconst AUTO_SWITCH_THRESHOLD = 4;\n\nexport function PeriodComparisonSelector({\n value,\n onChange,\n options = DEFAULT_COMPARISON_PERIODS,\n mode,\n size = \"default\",\n placeholder = \"Compare to...\",\n disabled = false,\n className,\n}: PeriodComparisonSelectorProps) {\n const resolvedMode =\n mode ?? (options.length <= AUTO_SWITCH_THRESHOLD ? \"segmented\" : \"select\");\n\n const handleChange = (key: string) => {\n const period = options.find((o) => o.key === key);\n if (period) onChange?.(key, period);\n };\n\n if (resolvedMode === \"segmented\") {\n return (\n <SegmentedControl\n options={options.map((o) => ({ label: o.label, value: o.key }))}\n value={value}\n onChange={handleChange}\n size={size}\n radius=\"md\"\n disabled={disabled}\n className={className}\n />\n );\n }\n\n return (\n <Select value={value} onValueChange={handleChange} disabled={disabled}>\n <SelectTrigger className={className}>\n <SelectValue placeholder={placeholder}>\n {options.find((o) => o.key === value)?.label}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.key} value={o.key}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n"]}