@optilogic/core 1.0.0-beta.2 → 1.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +734 -219
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +308 -6
- package/dist/index.d.ts +308 -6
- package/dist/index.js +669 -168
- package/dist/index.js.map +1 -1
- package/package.json +20 -20
- package/src/components/board.tsx +251 -0
- package/src/components/card.tsx +656 -12
- package/src/components/context-menu.tsx +1 -1
- package/src/components/data-grid/hooks/useKeyboardNavigation.ts +1 -1
- package/src/index.ts +33 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/components/button.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/textarea.tsx","../src/components/badge.tsx","../src/components/checkbox.tsx","../src/components/switch.tsx","../src/components/progress.tsx","../src/components/separator.tsx","../src/components/skeleton.tsx","../src/components/select.tsx","../src/components/tabs.tsx","../src/components/accordion.tsx","../src/components/tooltip.tsx","../src/components/popover.tsx","../src/components/dropdown-menu.tsx","../src/components/alert-dialog.tsx","../src/components/card.tsx","../src/components/table.tsx","../src/components/modal.tsx","../src/components/confirmation-modal.tsx","../src/components/resize-handle.tsx","../src/components/resizable-panel.tsx","../src/components/chip.tsx","../src/components/loading-spinner.tsx","../src/components/toaster.tsx","../src/components/calendar.tsx","../src/components/date-picker.tsx","../src/components/data-grid/components/FilterPopover.tsx","../src/components/data-grid/components/HeaderCell.tsx","../src/components/data-grid/components/CellEditor.tsx","../src/components/data-grid/hooks/useDataGridState.ts","../src/components/data-grid/hooks/useKeyboardNavigation.ts","../src/components/data-grid/hooks/useColumnResize.ts","../src/components/data-grid/utils/dataProcessing.ts","../src/components/data-grid/DataGrid.tsx","../src/components/autocomplete.tsx","../src/components/icon-button.tsx","../src/components/copy-button.tsx","../src/theme/presets.ts","../src/theme/utils.ts","../src/components/theme-picker.tsx","../src/components/context-menu.tsx"],"names":["React","React2","jsx","cva","React3","React4","React5","React6","React7","React8","React9","Check","React10","React11","jsxs","ChevronDown","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","Sonner","React23","Icon","ChevronRight","React24","CalendarIcon","X","React25","isValid","format","React26","ChevronUp","React27","parseISO","getCellValue","useMemo","useState","useRef","useEffect","useCallback","React28","Fragment","ChevronLeft","React29","React30","React31","React32"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes with proper precedence.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * cn(\"px-4 py-2\", \"px-6\") // => \"py-2 px-6\"\n * cn(\"text-red-500\", isActive && \"text-blue-500\") // => conditional\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Button variant styles using class-variance-authority.\n * Provides consistent button styling across the application.\n */\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n primary: \"bg-accent text-accent-foreground shadow hover:shadow-md\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 hover:shadow-md\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * If true, the button will render as its child element (Slot pattern).\n * Useful for wrapping other components like links.\n */\n asChild?: boolean;\n}\n\n/**\n * Button Component\n *\n * A versatile button component with multiple variants and sizes.\n * Supports the Slot pattern for composing with other elements.\n *\n * @example\n * <Button variant=\"primary\">Click me</Button>\n *\n * @example\n * <Button variant=\"ghost\" size=\"icon\">\n * <Icon />\n * </Button>\n *\n * @example\n * <Button asChild>\n * <a href=\"/link\">Link Button</a>\n * </Button>\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\n/**\n * Input Component\n *\n * A styled text input with consistent theming.\n * Supports all native input attributes.\n *\n * @example\n * <Input placeholder=\"Enter your name\" />\n *\n * @example\n * <Input type=\"email\" placeholder=\"email@example.com\" />\n *\n * @example\n * <Input disabled value=\"Disabled input\" />\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nexport interface LabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,\n VariantProps<typeof labelVariants> {}\n\n/**\n * Label Component\n *\n * A form label component with consistent styling.\n * Automatically associates with form controls via htmlFor.\n *\n * @example\n * <Label htmlFor=\"email\">Email</Label>\n * <Input id=\"email\" type=\"email\" />\n */\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label, labelVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/**\n * Textarea Component\n *\n * A styled multi-line text input with consistent theming.\n * Supports all native textarea attributes.\n *\n * @example\n * <Textarea placeholder=\"Enter description...\" />\n *\n * @example\n * <Textarea rows={5} placeholder=\"Write your message...\" />\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Badge variant styles using class-variance-authority.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success:\n \"border-transparent bg-success text-success-foreground shadow hover:bg-success/80\",\n warning:\n \"border-transparent bg-warning text-warning-foreground shadow hover:bg-warning/80\",\n muted:\n \"border-transparent bg-muted text-muted-foreground hover:bg-muted/80\",\n accent:\n \"border-transparent bg-accent text-accent-foreground hover:bg-accent/80\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\n/**\n * Badge Component\n *\n * A small status indicator with various semantic variants.\n * Use for tags, labels, counts, or status indicators.\n *\n * @example\n * <Badge>Default</Badge>\n *\n * @example\n * <Badge variant=\"success\">Active</Badge>\n *\n * @example\n * <Badge variant=\"destructive\">Error</Badge>\n */\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /**\n * Whether to show a visible border around the checkbox.\n * @default true\n */\n showBorder?: boolean;\n}\n\n/**\n * Checkbox Component\n *\n * An accessible checkbox input built on Radix UI primitives.\n * Supports controlled and uncontrolled modes.\n *\n * @example\n * <Checkbox id=\"terms\" />\n * <Label htmlFor=\"terms\">Accept terms</Label>\n *\n * @example\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} />\n */\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, showBorder = true, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n // Base styles\n \"grid place-content-center peer shrink-0\",\n \"h-4 w-4 rounded-sm\",\n \"transition-colors duration-150\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Border styles (conditional)\n showBorder\n ? [\n // Visible border for better contrast\n \"border-2 border-foreground/40\",\n // Hover state\n \"hover:border-foreground/60\",\n // Checked state - use accent background with contrasting border\n \"data-[state=checked]:bg-accent data-[state=checked]:border-accent\",\n ]\n : [\n // No border variant (for inline uses)\n \"border border-transparent\",\n // Checked state with subtle background\n \"data-[state=checked]:bg-accent/80\",\n ],\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\n \"grid place-content-center\",\n // Use foreground color that contrasts with accent\n \"text-accent-foreground\"\n )}\n >\n <Check className=\"h-3.5 w-3.5 stroke-[3]\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {}\n\n/**\n * Switch Component\n *\n * A toggle switch for boolean on/off states.\n * Accessible alternative to checkbox for settings.\n *\n * @example\n * <Switch id=\"notifications\" />\n * <Label htmlFor=\"notifications\">Enable notifications</Label>\n *\n * @example\n * <Switch checked={isEnabled} onCheckedChange={setIsEnabled} />\n */\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n className={cn(\n // Base styles\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center\",\n \"rounded-full border-2 border-transparent\",\n \"transition-colors\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Unchecked state\n \"bg-input\",\n // Checked state\n \"data-[state=checked]:bg-primary\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n // Base styles\n \"pointer-events-none block h-4 w-4 rounded-full\",\n \"bg-background shadow-lg ring-0\",\n \"transition-transform\",\n // Position based on state\n \"data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ProgressProps\n extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {}\n\n/**\n * Progress Component\n *\n * A progress bar showing completion percentage.\n * Use for loading states, file uploads, or task progress.\n *\n * @example\n * <Progress value={50} />\n *\n * @example\n * <Progress value={progress} className=\"w-[60%]\" />\n */\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SeparatorProps\n extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {}\n\n/**\n * Separator Component\n *\n * A visual divider between content sections.\n * Can be horizontal (default) or vertical.\n *\n * @example\n * <div>Content above</div>\n * <Separator />\n * <div>Content below</div>\n *\n * @example\n * <div className=\"flex items-center gap-4\">\n * <span>Left</span>\n * <Separator orientation=\"vertical\" className=\"h-4\" />\n * <span>Right</span>\n * </div>\n */\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Skeleton Component\n *\n * A loading placeholder with shimmer animation.\n * Use to indicate content that is loading.\n *\n * @example\n * // Text placeholder\n * <Skeleton className=\"h-4 w-[250px]\" />\n *\n * @example\n * // Avatar placeholder\n * <Skeleton className=\"h-12 w-12 rounded-full\" />\n *\n * @example\n * // Card placeholder\n * <div className=\"space-y-2\">\n * <Skeleton className=\"h-4 w-[250px]\" />\n * <Skeleton className=\"h-4 w-[200px]\" />\n * </div>\n */\nfunction Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-primary/10\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {}\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"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, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute 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));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Tabs Root\n *\n * Container for tabbed content. Controls which tab is active.\n *\n * @example\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n */\nconst Tabs = TabsPrimitive.Root;\n\n/**\n * TabsList\n *\n * Container for tab triggers. Provides the tab header bar.\n */\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-start\",\n \"border-b border-border\",\n \"bg-transparent\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\n/**\n * TabsTrigger\n *\n * Individual tab button that activates its associated content.\n */\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n // Base styles\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"px-4 py-2.5 text-sm font-medium\",\n \"transition-colors\",\n // Border-bottom indicator style\n \"border-b-2 -mb-px\",\n // Default state\n \"border-transparent text-muted-foreground\",\n // Hover state\n \"hover:text-foreground hover:border-muted-foreground/50\",\n // Active/selected state\n \"data-[state=active]:border-foreground data-[state=active]:text-foreground\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // Disabled styles\n \"disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\n/**\n * TabsContent\n *\n * Container for the content associated with a tab.\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\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Accordion variant styles using class-variance-authority.\n * Provides consistent accordion styling across the application.\n */\nconst accordionItemVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"border-b border-border\",\n bordered:\n \"border border-border rounded-lg mb-2 last:mb-0 overflow-hidden\",\n card: \"bg-card border border-border rounded-lg mb-3 last:mb-0 shadow-sm overflow-hidden\",\n filled: \"bg-muted/50 rounded-lg mb-2 last:mb-0 overflow-hidden\",\n ghost: \"mb-1 last:mb-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst accordionTriggerVariants = cva(\n // Base styles - no text decoration\n [\n \"flex flex-1 items-center justify-between py-4 text-sm font-medium\",\n \"transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"[&[data-state=open]>svg]:rotate-180\",\n ],\n {\n variants: {\n variant: {\n default: \"hover:text-foreground/80\",\n bordered: \"px-4 hover:bg-muted/50\",\n card: \"px-4 hover:bg-muted/30\",\n filled: \"px-4 hover:bg-muted\",\n ghost: \"px-2 rounded-md hover:bg-muted/50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst accordionContentVariants = cva(\n [\"overflow-hidden text-sm\", \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"],\n {\n variants: {\n variant: {\n default: \"\",\n bordered: \"\",\n card: \"\",\n filled: \"\",\n ghost: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst accordionContentInnerVariants = cva(\"pb-4 pt-0\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"px-4\",\n card: \"px-4\",\n filled: \"px-4\",\n ghost: \"px-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n/**\n * Accordion Root\n *\n * Container for accordion items. Can be single or multiple mode.\n *\n * @example\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>Section 1</AccordionTrigger>\n * <AccordionContent>Content 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nconst Accordion = AccordionPrimitive.Root;\n\nexport type AccordionVariant = \"default\" | \"bordered\" | \"card\" | \"filled\" | \"ghost\";\n\nexport interface AccordionItemProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>,\n VariantProps<typeof accordionItemVariants> {}\n\n/**\n * AccordionItem\n *\n * Individual accordion section containing a trigger and content.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemProps\n>(({ className, variant, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(accordionItemVariants({ variant }), className)}\n data-variant={variant || \"default\"}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionTriggerProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>,\n VariantProps<typeof accordionTriggerVariants> {}\n\n/**\n * AccordionTrigger\n *\n * Button that toggles the accordion item open/closed.\n * Includes animated chevron indicator.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerProps\n>(({ className, children, variant, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(accordionTriggerVariants({ variant }), className)}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nexport interface AccordionContentProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>,\n VariantProps<typeof accordionContentVariants> {}\n\n/**\n * AccordionContent\n *\n * Animated content area that expands/collapses.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentProps\n>(({ className, children, variant, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(accordionContentVariants({ variant }))}\n {...props}\n >\n <div className={cn(accordionContentInnerVariants({ variant }), className)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n accordionItemVariants,\n accordionTriggerVariants,\n accordionContentVariants,\n};\n","/**\n * Tooltip Component\n *\n * A compact, themeable tooltip built on Radix UI.\n * Uses a portal to render at document body level, ensuring it's never clipped.\n *\n * Features:\n * - Portal-based rendering (never clipped by containers)\n * - Configurable delay duration\n * - Automatic position flipping when near edges\n * - Theme-aware styling\n */\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * TooltipProvider - Wrap your app with this for shared tooltip delay behavior\n */\nconst TooltipProvider = TooltipPrimitive.Provider;\n\n/**\n * TooltipRoot - The root component for controlled usage\n */\nconst TooltipRoot = TooltipPrimitive.Root;\n\n/**\n * TooltipTrigger - The element that triggers the tooltip\n */\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\n/**\n * TooltipPortal - Portals the content to document.body\n */\nconst TooltipPortal = TooltipPrimitive.Portal;\n\n/**\n * TooltipContent - The styled tooltip content\n */\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n // Base styles\n \"z-[99999] overflow-hidden\",\n \"px-2.5 py-1.5 rounded-md\",\n // Colors\n \"bg-popover text-popover-foreground\",\n \"border border-border\",\n // Typography\n \"text-xs font-medium\",\n // Shadow\n \"shadow-md\",\n // Animation\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\n/**\n * TooltipArrow - Optional arrow pointing to the trigger\n */\nconst TooltipArrow = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Arrow>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>\n>(({ className, ...props }, ref) => (\n <TooltipPrimitive.Arrow\n ref={ref}\n className={cn(\"fill-popover\", className)}\n {...props}\n />\n));\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\n\n// ============================================================================\n// Simple Tooltip API (backwards compatible with existing usage)\n// ============================================================================\n\nexport interface TooltipProps {\n /**\n * Tooltip content - can be string or ReactNode for rich content\n */\n content: React.ReactNode;\n\n /**\n * Element to wrap with tooltip\n */\n children: React.ReactElement;\n\n /**\n * Position of the tooltip relative to the trigger\n * @default \"top\"\n */\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\n /**\n * Delay before showing tooltip (in milliseconds)\n * @default 200\n */\n delayDuration?: number;\n\n /**\n * Offset from the trigger element (in pixels)\n * @default 6\n */\n sideOffset?: number;\n\n /**\n * Maximum width of the tooltip\n * @default 250\n */\n maxWidth?: number;\n\n /**\n * Whether the tooltip is disabled\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Additional class names for the tooltip content\n */\n className?: string;\n}\n\n/**\n * Tooltip component\n *\n * Simple wrapper around Radix Tooltip for ease of use.\n * Renders in a portal so it's never clipped by containers.\n *\n * @example\n * <Tooltip content=\"Hello world\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * <Tooltip content=\"Click to save\" position=\"bottom\" delayDuration={0}>\n * <button>Save</button>\n * </Tooltip>\n */\nfunction Tooltip({\n content,\n children,\n position = \"top\",\n delayDuration = 200,\n sideOffset = 6,\n maxWidth = 250,\n disabled = false,\n className,\n}: TooltipProps) {\n // Don't render tooltip if no content or disabled\n if (!content || disabled) {\n return children;\n }\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipContent\n side={position}\n sideOffset={sideOffset}\n className={className}\n style={{ maxWidth: `${maxWidth}px` }}\n >\n {content}\n </TooltipContent>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n\n// Export primitives for advanced usage\nexport {\n Tooltip,\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Popover - Root component for popover behavior\n */\nconst Popover = PopoverPrimitive.Root;\n\n/**\n * PopoverTrigger - Element that triggers the popover\n */\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\n/**\n * PopoverAnchor - Custom anchor element for positioning\n */\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport interface PopoverContentProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {}\n\n/**\n * PopoverContent - The popover content panel\n *\n * @example\n * <Popover>\n * <PopoverTrigger asChild>\n * <Button>Open</Button>\n * </PopoverTrigger>\n * <PopoverContent>\n * <p>Popover content here</p>\n * </PopoverContent>\n * </Popover>\n */\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n // Animation\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","import * 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/cn\";\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\nexport interface DropdownMenuSubTriggerProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> {\n inset?: boolean;\n}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"focus:bg-accent\",\n \"data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nexport interface DropdownMenuItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n inset?: boolean;\n destructive?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuItemProps\n>(({ className, inset, destructive, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n destructive && \"text-destructive focus:text-destructive\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nexport interface DropdownMenuLabelProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> {\n inset?: boolean;\n}\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n DropdownMenuLabelProps\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-border\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nexport interface DropdownMenuShortcutProps\n extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: DropdownMenuShortcutProps) => {\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","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../utils/cn\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.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-border bg-background p-6 shadow-lg duration-200\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]\",\n \"data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]\",\n \"sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nexport interface AlertDialogHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst AlertDialogHeader = ({ className, ...props }: AlertDialogHeaderProps) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nexport interface AlertDialogFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst AlertDialogFooter = ({ className, ...props }: AlertDialogFooterProps) => (\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);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Card - Container component for grouped content\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardTitle = React.forwardRef<HTMLDivElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardDescription = React.forwardRef<HTMLDivElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {}\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nexport interface TableHeaderProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n )\n);\nTableHeader.displayName = \"TableHeader\";\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n);\nTableBody.displayName = \"TableBody\";\n\nexport interface TableFooterProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n);\nTableFooter.displayName = \"TableFooter\";\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nexport interface TableHeadProps\n extends React.ThHTMLAttributes<HTMLTableCellElement> {}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nexport interface TableCaptionProps\n extends React.HTMLAttributes<HTMLTableCaptionElement> {}\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n TableCaptionProps\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import * as React from \"react\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Button, type ButtonProps } from \"./button\";\n\nexport interface ModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean;\n\n /**\n * Callback when modal should close\n */\n onClose: () => void;\n\n /**\n * Modal title\n */\n title: string;\n\n /**\n * Modal content\n */\n children: React.ReactNode;\n\n /**\n * Footer content (buttons, actions, etc.)\n */\n footer?: React.ReactNode;\n\n /**\n * Size variant\n */\n size?: \"sm\" | \"md\" | \"lg\";\n\n /**\n * Z-index for stacking modals (default: 50)\n */\n zIndex?: number;\n\n /**\n * Additional class names for modal content\n */\n className?: string;\n}\n\n/**\n * Modal component\n *\n * Extensible modal base for dialogs, confirmations, and forms.\n * Features:\n * - Backdrop overlay\n * - Escape key to close\n * - Click outside to close\n * - Customizable footer with action buttons\n * - Multiple size variants\n *\n * @example\n * <Modal isOpen={open} onClose={() => setOpen(false)} title=\"Confirm\">\n * <p>Are you sure?</p>\n * <footer slot=\"footer\">\n * <Button onClick={() => setOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\" onClick={handleConfirm}>Confirm</Button>\n * </footer>\n * </Modal>\n */\nexport function Modal({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = \"md\",\n zIndex = 50,\n className,\n}: ModalProps) {\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n window.addEventListener(\"keydown\", handleEscape);\n return () => window.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, onClose]);\n\n React.useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: \"max-w-md\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n };\n\n return (\n <div\n className=\"fixed inset-0 flex items-center justify-center p-4\"\n style={{ zIndex }}\n onClick={onClose}\n >\n <div className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\" />\n\n <div\n className={cn(\n \"relative w-full\",\n \"bg-card border border-border rounded-lg shadow-lg\",\n \"flex flex-col\",\n \"max-h-[90vh]\",\n sizeClasses[size]\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border flex-shrink-0\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>\n <Button\n onClick={onClose}\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label=\"Close modal\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n\n <div className={cn(\"flex-1 overflow-y-auto p-4\", className)}>\n {children}\n </div>\n\n {footer && (\n <div className=\"flex items-center justify-end gap-2 p-4 border-t border-border flex-shrink-0\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * ModalButton component\n * @deprecated Use Button component from @optilogic/core instead\n *\n * Wrapper around Button for backward compatibility\n */\nexport interface ModalButtonProps {\n /**\n * Button label\n */\n label: string;\n\n /**\n * Click handler\n */\n onClick: () => void;\n\n /**\n * Button variant\n */\n variant?: \"default\" | \"primary\" | \"destructive\";\n\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\nexport function ModalButton({\n label,\n onClick,\n variant = \"default\",\n disabled = false,\n className,\n}: ModalButtonProps) {\n return (\n <Button\n onClick={onClick}\n disabled={disabled}\n variant={variant}\n className={className}\n >\n {label}\n </Button>\n );\n}\n","import * as React from \"react\";\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"./alert-dialog\";\n\nexport interface ConfirmationModalProps {\n /** Whether the modal is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Title of the confirmation dialog */\n title: string;\n /** Description/message to display */\n description: string;\n /** Label for the confirm button */\n confirmLabel?: string;\n /** Label for the cancel button */\n cancelLabel?: string;\n /** Whether this is a destructive action (styles confirm button as destructive) */\n destructive?: boolean;\n /** Callback when confirmed */\n onConfirm: () => void;\n /** Callback when cancelled (optional, defaults to closing) */\n onCancel?: () => void;\n}\n\n/**\n * ConfirmationModal\n *\n * A simple yes/no confirmation dialog built on AlertDialog.\n * Use for actions that need user confirmation before proceeding.\n *\n * @example\n * <ConfirmationModal\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * title=\"Delete Item\"\n * description=\"Are you sure you want to delete this item?\"\n * destructive\n * onConfirm={handleDelete}\n * />\n */\nexport function ConfirmationModal({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n destructive = false,\n onConfirm,\n onCancel,\n}: ConfirmationModalProps) {\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleConfirm = () => {\n onConfirm();\n onOpenChange(false);\n };\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancel}>\n {cancelLabel}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleConfirm}\n className={\n destructive\n ? \"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n : undefined\n }\n >\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n\n/**\n * useConfirmation Hook\n *\n * A hook that provides imperative confirmation dialogs.\n * Returns a confirm function that shows a dialog and returns a promise.\n *\n * @example\n * const { confirm, ConfirmationDialog } = useConfirmation();\n *\n * const handleDelete = async () => {\n * const confirmed = await confirm({\n * title: \"Delete Item\",\n * description: \"Are you sure you want to delete this item?\",\n * destructive: true,\n * });\n * if (confirmed) {\n * // perform delete\n * }\n * };\n *\n * return (\n * <>\n * <button onClick={handleDelete}>Delete</button>\n * {ConfirmationDialog}\n * </>\n * );\n */\nexport function useConfirmation() {\n const [state, setState] = React.useState<{\n open: boolean;\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n resolve?: (value: boolean) => void;\n }>({\n open: false,\n title: \"\",\n description: \"\",\n });\n\n const confirm = React.useCallback(\n (options: {\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n }): Promise<boolean> => {\n return new Promise((resolve) => {\n setState({\n open: true,\n ...options,\n resolve,\n });\n });\n },\n []\n );\n\n const handleConfirm = React.useCallback(() => {\n state.resolve?.(true);\n setState((prev) => ({ ...prev, open: false }));\n }, [state.resolve]);\n\n const handleCancel = React.useCallback(() => {\n state.resolve?.(false);\n setState((prev) => ({ ...prev, open: false }));\n }, [state.resolve]);\n\n const handleOpenChange = React.useCallback(\n (open: boolean) => {\n if (!open) {\n state.resolve?.(false);\n }\n setState((prev) => ({ ...prev, open }));\n },\n [state.resolve]\n );\n\n const ConfirmationDialog = (\n <ConfirmationModal\n open={state.open}\n onOpenChange={handleOpenChange}\n title={state.title}\n description={state.description}\n confirmLabel={state.confirmLabel}\n cancelLabel={state.cancelLabel}\n destructive={state.destructive}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n\n return { confirm, ConfirmationDialog };\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ResizeHandleProps {\n /**\n * Orientation of the resize handle\n */\n orientation: \"left\" | \"right\";\n\n /**\n * Whether the handle is resizable (draggable)\n */\n resizable?: boolean;\n\n /**\n * Show/hide the handle UI\n */\n showHandle?: boolean;\n\n /**\n * Callback when drag starts\n */\n onDragStart?: () => void;\n\n /**\n * Callback during drag; receives pixel delta\n */\n onDrag?: (deltaX: number) => void;\n\n /**\n * Callback when drag ends\n */\n onDragEnd?: () => void;\n\n /**\n * Callback for keyboard resize (arrow keys)\n */\n onKeyboardResize?: (direction: 1 | -1) => void;\n\n /**\n * ARIA label for accessibility\n */\n ariaLabel?: string;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\n/**\n * ResizeHandle component\n *\n * A draggable handle for resizing panels with full keyboard and mouse support.\n * Includes visual feedback, accessibility features, and smooth interactions.\n */\nexport function ResizeHandle({\n orientation,\n resizable = true,\n showHandle = true,\n onDragStart,\n onDrag,\n onDragEnd,\n onKeyboardResize,\n ariaLabel,\n className,\n}: ResizeHandleProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const startXRef = React.useRef<number>(0);\n const handleRef = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n if (!resizable) return;\n\n e.preventDefault();\n setIsDragging(true);\n startXRef.current = e.clientX;\n\n // Prevent text selection during drag\n document.body.style.userSelect = \"none\";\n\n // Notify start\n onDragStart?.();\n },\n [resizable, onDragStart]\n );\n\n const handleMouseMove = React.useCallback(\n (e: MouseEvent) => {\n if (!isDragging) return;\n\n const deltaX = e.clientX - startXRef.current;\n startXRef.current = e.clientX;\n\n onDrag?.(deltaX);\n },\n [isDragging, onDrag]\n );\n\n const handleMouseUp = React.useCallback(() => {\n if (!isDragging) return;\n\n setIsDragging(false);\n document.body.style.userSelect = \"\";\n onDragEnd?.();\n }, [isDragging, onDragEnd]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!resizable || !onKeyboardResize) return;\n\n let direction: 1 | -1 | null = null;\n\n // Left arrow = shrink from right / expand from left\n // Right arrow = expand from right / shrink from left\n if (e.key === \"ArrowLeft\") {\n direction = orientation === \"right\" ? -1 : 1;\n } else if (e.key === \"ArrowRight\") {\n direction = orientation === \"right\" ? 1 : -1;\n }\n\n if (direction !== null) {\n e.preventDefault();\n const multiplier = e.shiftKey ? 5 : 1; // Shift = 5vw steps\n for (let i = 0; i < multiplier; i++) {\n onKeyboardResize(direction);\n }\n }\n },\n [resizable, onKeyboardResize, orientation]\n );\n\n // Attach global mouse listeners during drag\n React.useEffect(() => {\n if (isDragging) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n if (!showHandle) return null;\n\n return (\n <div\n ref={handleRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={ariaLabel || `Resize handle ${orientation}`}\n aria-valuenow={undefined}\n tabIndex={resizable ? 0 : -1}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={cn(\n // Base styles\n \"relative z-10 flex items-center justify-center\",\n \"transition-colors duration-150\",\n\n // Hit area (wider for better UX)\n \"w-3\",\n\n // Cursor\n resizable ? \"cursor-col-resize\" : \"cursor-default\",\n\n // Focus state - no visible outline\n \"outline-none\",\n\n // Disabled state\n !resizable && \"opacity-50\",\n\n className\n )}\n style={{\n touchAction: \"none\",\n }}\n />\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\nimport { ResizeHandle } from \"./resize-handle\";\n\nexport interface ResizablePanelProps {\n /**\n * Which edge the panel anchors to\n */\n orientation: \"left\" | \"right\";\n\n /**\n * Default collapsed width in vw\n */\n collapsedSizeVW: number;\n\n /**\n * Current expanded width in vw (controlled prop)\n */\n expandedWidthVW?: number;\n\n /**\n * Minimum width in vw\n */\n minWidthVW?: number;\n\n /**\n * Maximum width in vw\n */\n maxWidthVW?: number;\n\n /**\n * Whether the panel is expanded (drawer) vs collapsed\n */\n isExpanded: boolean;\n\n /**\n * Whether the panel is in overlay mode\n */\n isOverlay?: boolean;\n\n /**\n * When in overlay mode, the outer panel width in vw\n */\n outerWidthVW?: number;\n\n /**\n * When in overlay mode, the inner panel width in vw\n */\n innerWidthVW?: number;\n\n /**\n * Current left panel width in vw (needed for overlay positioning and dynamic constraints)\n */\n leftWidthVW?: number;\n\n /**\n * Whether the panel is resizable\n */\n resizable?: boolean;\n\n /**\n * Show/hide the resize handle\n */\n showHandle?: boolean;\n\n /**\n * Callback during resize; emits clamped value in vw\n */\n onResize?: (widthVW: number) => void;\n\n /**\n * Callback for collapse/expand toggle\n */\n onToggle?: (next: boolean) => void;\n\n /**\n * Callback to promote to overlay mode\n */\n onPromoteToOverlay?: () => void;\n\n /**\n * Callback to demote from overlay mode\n */\n onDemoteFromOverlay?: () => void;\n\n /**\n * Callback when resizing the overlay outer/inner split\n */\n onResizeOverlay?: (outerWidthVW: number) => void;\n\n /**\n * ARIA label for the resize handle\n */\n handleAriaLabel?: string;\n\n /**\n * Optional header slot\n */\n slotHeader?: React.ReactNode;\n\n /**\n * Optional footer slot\n */\n slotFooter?: React.ReactNode;\n\n /**\n * Optional inner panel content (for overlay mode)\n */\n innerPanelContent?: React.ReactNode;\n\n /**\n * Panel content\n */\n children: React.ReactNode;\n\n /**\n * Additional class names\n */\n className?: string;\n\n /**\n * Data attributes for styling/state\n */\n dataAttributes?: Record<string, string>;\n}\n\n/**\n * ResizablePanel component\n *\n * A generic, framework-agnostic panel that can collapse, expand, resize,\n * and promote to overlay mode. Backs both left (search) and right (preview) panels.\n */\nexport function ResizablePanel({\n orientation,\n collapsedSizeVW,\n expandedWidthVW,\n minWidthVW = 5,\n maxWidthVW = 90,\n isExpanded,\n isOverlay = false,\n outerWidthVW,\n innerWidthVW,\n leftWidthVW,\n resizable = true,\n showHandle = true,\n onResize,\n onToggle: _onToggle,\n onPromoteToOverlay: _onPromoteToOverlay,\n onDemoteFromOverlay,\n onResizeOverlay,\n handleAriaLabel,\n slotHeader,\n slotFooter,\n innerPanelContent,\n children,\n className,\n dataAttributes = {},\n}: ResizablePanelProps) {\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const [isDragging, setIsDragging] = React.useState(false);\n const [localWidth, setLocalWidth] = React.useState<number | null>(null);\n const [localOuterWidth, setLocalOuterWidth] = React.useState<number | null>(null);\n\n const currentWidthVW = isExpanded\n ? (isDragging && localWidth !== null ? localWidth : expandedWidthVW) ||\n collapsedSizeVW\n : collapsedSizeVW;\n\n const clampWidth = React.useCallback(\n (width: number): number => {\n let effectiveMinWidth = minWidthVW;\n let effectiveMaxWidth = maxWidthVW;\n\n if (orientation === \"right\" && leftWidthVW !== undefined && !isOverlay) {\n const availableSpace = 100 - leftWidthVW - 3;\n const maxFromSpace = Math.max(effectiveMinWidth, availableSpace - 33);\n effectiveMaxWidth = Math.min(maxWidthVW, maxFromSpace);\n }\n\n return Math.max(effectiveMinWidth, Math.min(effectiveMaxWidth, width));\n },\n [minWidthVW, maxWidthVW, orientation, leftWidthVW, isOverlay]\n );\n\n const handleDragStart = React.useCallback(() => {\n setIsDragging(true);\n setLocalWidth(currentWidthVW);\n }, [currentWidthVW]);\n\n const handleDrag = React.useCallback(\n (deltaX: number) => {\n if (!isExpanded || isOverlay) return;\n\n const viewportWidth = window.innerWidth;\n const deltaVW = (deltaX / viewportWidth) * 100;\n\n const adjustedDelta = orientation === \"left\" ? deltaVW : -deltaVW;\n const baseWidth = localWidth !== null ? localWidth : currentWidthVW;\n const newWidth = clampWidth(baseWidth + adjustedDelta);\n\n setLocalWidth(newWidth);\n },\n [\n isExpanded,\n isOverlay,\n orientation,\n localWidth,\n currentWidthVW,\n clampWidth,\n ]\n );\n\n const handleDragEnd = React.useCallback(() => {\n if (localWidth !== null && onResize) {\n onResize(localWidth);\n }\n setIsDragging(false);\n setLocalWidth(null);\n }, [localWidth, onResize]);\n\n const handleKeyboardResize = React.useCallback(\n (direction: 1 | -1) => {\n if (!isExpanded || isOverlay || !onResize) return;\n\n const step = 1;\n const newWidth = clampWidth(currentWidthVW + step * direction);\n onResize(newWidth);\n },\n [isExpanded, isOverlay, onResize, currentWidthVW, clampWidth]\n );\n\n const handleOverlayDragStart = React.useCallback(() => {\n if (outerWidthVW) {\n setIsDragging(true);\n setLocalOuterWidth(outerWidthVW);\n }\n }, [outerWidthVW]);\n\n const handleOverlayDrag = React.useCallback(\n (deltaX: number) => {\n if (!isOverlay) return;\n\n const viewportWidth = window.innerWidth;\n const deltaVW = (deltaX / viewportWidth) * 100;\n\n const baseWidth =\n localOuterWidth !== null ? localOuterWidth : outerWidthVW || 30;\n const newOuterWidth = baseWidth - deltaVW;\n\n setLocalOuterWidth(newOuterWidth);\n },\n [isOverlay, localOuterWidth, outerWidthVW]\n );\n\n const handleOverlayDragEnd = React.useCallback(() => {\n if (localOuterWidth !== null && onResizeOverlay) {\n onResizeOverlay(localOuterWidth);\n }\n setIsDragging(false);\n setLocalOuterWidth(null);\n }, [localOuterWidth, onResizeOverlay]);\n\n React.useEffect(() => {\n if (isOverlay && panelRef.current) {\n const focusableElement = panelRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n focusableElement?.focus();\n }\n }, [isOverlay]);\n\n React.useEffect(() => {\n if (!isOverlay) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onDemoteFromOverlay?.();\n }\n };\n\n window.addEventListener(\"keydown\", handleEscape);\n return () => window.removeEventListener(\"keydown\", handleEscape);\n }, [isOverlay, onDemoteFromOverlay]);\n\n if (!isExpanded && !isOverlay) {\n return (\n <div\n ref={panelRef}\n className={cn(\n \"flex flex-col h-full\",\n \"bg-background border-border\",\n orientation === \"left\" ? \"border-r\" : \"border-l\",\n className\n )}\n style={{\n width: `${collapsedSizeVW}vw`,\n minWidth: \"48px\", // Ensure minimum pixel width to prevent squishing\n }}\n {...dataAttributes}\n >\n {children}\n </div>\n );\n }\n\n if (isOverlay && outerWidthVW && innerWidthVW) {\n const displayOuterWidth =\n isDragging && localOuterWidth !== null ? localOuterWidth : outerWidthVW;\n const displayInnerWidth =\n isDragging && localOuterWidth !== null\n ? outerWidthVW + innerWidthVW - localOuterWidth\n : innerWidthVW;\n\n const overlayLeftPosition = leftWidthVW || 3;\n\n return (\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(\"fixed inset-y-0 z-30\", \"flex\", className)}\n style={{\n left: `${overlayLeftPosition}vw`, // Start after left panel\n right: `${3}vw`, // End before nav gutter (fixed right edge) - matches icon nav width\n width: `${displayOuterWidth + displayInnerWidth}vw`,\n }}\n {...dataAttributes}\n >\n <div\n className={cn(\n \"flex flex-col h-full\",\n \"bg-background border-r border-border\"\n )}\n style={{\n width: `${displayInnerWidth}vw`,\n }}\n >\n <div className=\"flex-1 overflow-auto p-4\">\n {innerPanelContent || (\n <div className=\"text-muted-foreground text-sm\">\n Inner panel content area\n </div>\n )}\n </div>\n </div>\n\n <ResizeHandle\n orientation=\"right\"\n resizable={resizable}\n showHandle={showHandle}\n onDragStart={handleOverlayDragStart}\n onDrag={handleOverlayDrag}\n onDragEnd={handleOverlayDragEnd}\n ariaLabel={handleAriaLabel || \"Resize overlay panels\"}\n />\n\n <div\n className={cn(\"flex flex-col h-full\", \"bg-background border-border\")}\n style={{\n width: `${displayOuterWidth}vw`,\n }}\n >\n {slotHeader && (\n <div className=\"flex-shrink-0 border-b border-border\">\n {slotHeader}\n </div>\n )}\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {slotFooter && (\n <div className=\"flex-shrink-0 border-t border-border\">\n {slotFooter}\n </div>\n )}\n </div>\n\n <div\n className=\"absolute inset-0 -z-10 bg-black/20\"\n onClick={() => onDemoteFromOverlay?.()}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n \"relative flex h-full min-w-0 overflow-hidden\",\n !isDragging && \"transition-[width] duration-200 ease-out\",\n orientation === \"left\" ? \"flex-row\" : \"flex-row-reverse\",\n className\n )}\n style={{\n width: `${currentWidthVW}vw`,\n }}\n {...dataAttributes}\n >\n <div\n className={cn(\n \"flex flex-col flex-1 min-w-0 overflow-hidden\",\n \"bg-background border-border\",\n orientation === \"left\" ? \"border-r\" : \"border-l\"\n )}\n >\n {slotHeader && (\n <div className=\"flex-shrink-0 border-b border-border min-w-0 overflow-hidden\">\n {slotHeader}\n </div>\n )}\n <div className=\"flex-1 overflow-hidden min-w-0\">{children}</div>\n {slotFooter && (\n <div className=\"flex-shrink-0 border-t border-border\">\n {slotFooter}\n </div>\n )}\n </div>\n\n {isExpanded && (\n <ResizeHandle\n orientation={orientation}\n resizable={resizable}\n showHandle={showHandle}\n onDragStart={handleDragStart}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n onKeyboardResize={handleKeyboardResize}\n ariaLabel={handleAriaLabel}\n />\n )}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ChipProps {\n /**\n * Chip label text\n */\n label: string;\n\n /**\n * Click handler\n */\n onClick?: () => void;\n\n /**\n * Whether the chip is disabled\n */\n disabled?: boolean;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\n/**\n * Chip component\n *\n * A clickable pill-shaped component for tags, filters, or suggested actions.\n * Uses the theme chip colors.\n *\n * @example\n * <Chip label=\"React\" onClick={() => console.log('clicked')} />\n *\n * @example\n * <Chip label=\"Disabled\" disabled />\n */\nexport function Chip({\n label,\n onClick,\n disabled = false,\n className,\n}: ChipProps) {\n const isClickable = !!onClick && !disabled;\n\n return (\n <button\n onClick={onClick}\n disabled={!isClickable}\n className={cn(\n \"inline-flex items-center justify-center\",\n \"px-4 py-2 rounded-full\",\n \"text-sm font-medium\",\n \"transition-all duration-150\",\n // Default styling with chip colors\n \"bg-chip text-chip-foreground\",\n \"border border-chip-foreground/20\",\n // Clickable state\n isClickable && [\n \"cursor-pointer\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"hover:border-accent\",\n \"hover:shadow-md\",\n ],\n // Non-clickable state\n !isClickable && \"cursor-default\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n type=\"button\"\n >\n {label}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst loadingSpinnerVariants = cva(\"rounded-full animate-spin border-current\", {\n variants: {\n /**\n * Size of the spinner\n */\n size: {\n sm: \"w-4 h-4 border-2\",\n default: \"w-8 h-8 border-2\",\n lg: \"w-12 h-12 border-[3px]\",\n xl: \"w-16 h-16 border-4\",\n },\n /**\n * Visual variant\n */\n variant: {\n /** Primary color spinner (default) */\n default: \"border-primary/20 border-t-primary\",\n /** Accent color spinner */\n accent: \"border-accent/20 border-t-accent\",\n /** Muted/subtle spinner */\n muted: \"border-muted-foreground/20 border-t-muted-foreground\",\n /** Inherits current text color */\n inherit: \"border-current/20 border-t-current\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n});\n\nexport interface LoadingSpinnerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof loadingSpinnerVariants> {\n /**\n * Optional label shown below the spinner\n */\n label?: string;\n /**\n * Show animated dots after the label\n */\n showDots?: boolean;\n}\n\n/**\n * LoadingSpinner Component\n *\n * A circular loading spinner with size and color variants.\n *\n * @example\n * // Basic spinner\n * <LoadingSpinner />\n *\n * @example\n * // Large spinner with label\n * <LoadingSpinner size=\"lg\" label=\"Loading...\" />\n *\n * @example\n * // Small accent spinner\n * <LoadingSpinner size=\"sm\" variant=\"accent\" />\n *\n * @example\n * // Inherit parent text color\n * <LoadingSpinner variant=\"inherit\" />\n */\nconst LoadingSpinner = React.forwardRef<HTMLDivElement, LoadingSpinnerProps>(\n ({ className, size, variant, label, showDots = false, ...props }, ref) => {\n const [dots, setDots] = React.useState(\"\");\n\n // Animated dots effect\n React.useEffect(() => {\n if (!showDots || !label) return;\n\n const interval = setInterval(() => {\n setDots((prev) => (prev.length >= 3 ? \"\" : prev + \".\"));\n }, 500);\n\n return () => clearInterval(interval);\n }, [showDots, label]);\n\n if (label) {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center gap-3\", className)}\n {...props}\n >\n <div className={loadingSpinnerVariants({ size, variant })} />\n <p className=\"text-sm text-muted-foreground\">\n {label}\n {showDots && <span className=\"inline-block w-4\">{dots}</span>}\n </p>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(loadingSpinnerVariants({ size, variant }), className)}\n {...props}\n />\n );\n }\n);\nLoadingSpinner.displayName = \"LoadingSpinner\";\n\nexport { LoadingSpinner, loadingSpinnerVariants };\n","import { Toaster as Sonner } from \"sonner\";\n\nexport interface ToasterProps {\n /**\n * Position of the toaster\n * @default \"top-right\"\n */\n position?:\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\n /**\n * Whether to expand toasts on hover\n * @default false\n */\n expand?: boolean;\n\n /**\n * Whether to use rich colors\n * @default true\n */\n richColors?: boolean;\n\n /**\n * Whether to show close button\n * @default true\n */\n closeButton?: boolean;\n\n /**\n * Theme mode\n * @default \"system\"\n */\n theme?: \"light\" | \"dark\" | \"system\";\n}\n\n/**\n * Toaster component using Sonner\n *\n * Provides toast notifications throughout the app.\n * Add this component once at the root of your app.\n *\n * Usage:\n * import { toast } from \"sonner\";\n * toast.success(\"Success!\");\n * toast.error(\"Error!\");\n * toast.info(\"Info!\");\n * toast.warning(\"Warning!\");\n *\n * @example\n * // In your app root\n * <Toaster />\n *\n * // Then anywhere in your app\n * toast.success(\"Saved successfully!\");\n */\nexport function Toaster({\n position = \"top-right\",\n expand = false,\n richColors = true,\n closeButton = true,\n theme = \"system\",\n}: ToasterProps = {}) {\n return (\n <Sonner\n position={position}\n expand={expand}\n richColors={richColors}\n closeButton={closeButton}\n theme={theme}\n toastOptions={{\n style: {\n background: \"hsl(var(--card))\",\n border: \"1px solid hsl(var(--border))\",\n color: \"hsl(var(--foreground))\",\n },\n }}\n />\n );\n}\n","/**\n * Calendar Component\n *\n * A styled calendar component built on react-day-picker.\n * Matches the library's design system with proper theming.\n *\n * Features:\n * - Single date, range, and multiple selection modes\n * - Keyboard navigation\n * - Min/max date constraints\n * - Disabled dates\n * - Theme-aware styling\n * - Month/year dropdown selectors for quick navigation\n */\n\nimport * as React from \"react\";\nimport { DayPicker, type DayPickerProps } from \"react-day-picker\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { buttonVariants } from \"./button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\n\nexport type CalendarProps = DayPickerProps;\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\n/**\n * Generate an array of years for the year selector\n * Defaults to 100 years before and 20 years after current year\n */\nfunction getYearRange(fromYear?: number, toYear?: number): number[] {\n const currentYear = new Date().getFullYear();\n const start = fromYear ?? currentYear - 100;\n const end = toYear ?? currentYear + 20;\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n return years;\n}\n\n/**\n * Calendar Component\n *\n * A fully styled calendar using react-day-picker with library design tokens.\n *\n * @example Single date selection\n * ```tsx\n * const [date, setDate] = useState<Date>();\n * <Calendar mode=\"single\" selected={date} onSelect={setDate} />\n * ```\n *\n * @example Date range selection\n * ```tsx\n * const [range, setRange] = useState<DateRange>();\n * <Calendar mode=\"range\" selected={range} onSelect={setRange} />\n * ```\n *\n * @example Quick navigation with month/year selectors\n * ```tsx\n * <Calendar\n * mode=\"single\"\n * selected={date}\n * onSelect={setDate}\n * fromYear={2020}\n * toYear={2030}\n * />\n * ```\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n month: controlledMonth,\n defaultMonth,\n onMonthChange,\n ...props\n}: CalendarProps) {\n const startMonth = props.startMonth ?? props.fromDate;\n const endMonth = props.endMonth ?? props.toDate;\n const fromYear = startMonth?.getFullYear();\n const toYear = endMonth?.getFullYear();\n const years = React.useMemo(() => getYearRange(fromYear, toYear), [fromYear, toYear]);\n\n const [internalMonth, setInternalMonth] = React.useState<Date>(\n defaultMonth ?? new Date()\n );\n\n const displayedMonth = controlledMonth ?? internalMonth;\n\n const handleMonthChange = React.useCallback(\n (newMonth: Date) => {\n if (controlledMonth === undefined) {\n setInternalMonth(newMonth);\n }\n onMonthChange?.(newMonth);\n },\n [controlledMonth, onMonthChange]\n );\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n month={displayedMonth}\n onMonthChange={handleMonthChange}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-4\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center h-7 px-10\",\n caption_label: \"text-sm font-medium hidden\",\n nav: \"flex items-center gap-1\",\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute left-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute right-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n month_grid: \"w-full border-collapse px-1\",\n weekdays: \"flex\",\n weekday:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day: cn(\n \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md\",\n props.mode === \"range\"\n ? \"[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md\"\n : \"[&:has([aria-selected])]:rounded-md\"\n ),\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_start: \"day-range-start rounded-l-md\",\n range_end: \"day-range-end rounded-r-md\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) => {\n const Icon = orientation === \"left\" ? ChevronLeft : ChevronRight;\n return <Icon className=\"h-4 w-4\" />;\n },\n MonthCaption: ({ calendarMonth }) => {\n const month = calendarMonth.date.getMonth();\n const year = calendarMonth.date.getFullYear();\n\n return (\n <div className=\"flex items-center justify-center gap-1 px-10\">\n <Select\n value={month.toString()}\n onValueChange={(value) => {\n const newDate = new Date(calendarMonth.date);\n newDate.setMonth(parseInt(value, 10));\n handleMonthChange(newDate);\n }}\n >\n <SelectTrigger\n className=\"h-7 w-[110px] text-sm font-medium border-none shadow-none hover:bg-accent focus:ring-0 px-2\"\n aria-label=\"Select month\"\n >\n <SelectValue>{MONTHS[month]}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {MONTHS.map((monthName, index) => (\n <SelectItem key={monthName} value={index.toString()}>\n {monthName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={year.toString()}\n onValueChange={(value) => {\n const newDate = new Date(calendarMonth.date);\n newDate.setFullYear(parseInt(value, 10));\n handleMonthChange(newDate);\n }}\n >\n <SelectTrigger\n className=\"h-7 w-[70px] text-sm font-medium border-none shadow-none hover:bg-accent focus:ring-0 px-2\"\n aria-label=\"Select year\"\n >\n <SelectValue>{year}</SelectValue>\n </SelectTrigger>\n <SelectContent className=\"max-h-[200px]\">\n {years.map((y) => (\n <SelectItem key={y} value={y.toString()}>\n {y}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n },\n }}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","/**\n * DatePicker Component\n *\n * A complete date picker combining an input field with a calendar popover.\n * Built using library primitives for consistent styling.\n *\n * Features:\n * - Input field with formatted date display\n * - Calendar popover for date selection\n * - Controlled and uncontrolled modes\n * - Clearable option\n * - Min/max date constraints\n * - Custom date formatting\n * - Keyboard accessible\n */\n\nimport * as React from \"react\";\nimport { format, parse, isValid } from \"date-fns\";\nimport { Calendar as CalendarIcon, X } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Calendar } from \"./calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nexport interface DatePickerProps {\n /** Selected date value */\n value?: Date;\n /** Default value for uncontrolled mode */\n defaultValue?: Date;\n /** Callback when date changes */\n onChange?: (date: Date | undefined) => void;\n /** Placeholder text when no date selected */\n placeholder?: string;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Date format string (date-fns format) */\n dateFormat?: string;\n /** Whether to show a clear button */\n clearable?: boolean;\n /** Additional class name */\n className?: string;\n /** Input ID for label association */\n id?: string;\n /** Input name for form submission */\n name?: string;\n /** Alignment of the popover */\n align?: \"start\" | \"center\" | \"end\";\n /** Side of the popover */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether the popover should match the trigger width */\n matchTriggerWidth?: boolean;\n /** Callback when the popover opens/closes */\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * DatePicker Component\n *\n * A date input with calendar popover for easy date selection.\n *\n * @example Basic usage\n * ```tsx\n * const [date, setDate] = useState<Date>();\n * <DatePicker value={date} onChange={setDate} />\n * ```\n *\n * @example With constraints\n * ```tsx\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * minDate={new Date()}\n * maxDate={addMonths(new Date(), 3)}\n * placeholder=\"Select a date\"\n * />\n * ```\n *\n * @example Custom format\n * ```tsx\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * dateFormat=\"dd/MM/yyyy\"\n * />\n * ```\n */\nfunction DatePicker({\n value,\n defaultValue,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n minDate,\n maxDate,\n dateFormat = \"PPP\",\n clearable = false,\n className,\n id,\n name,\n align = \"start\",\n side = \"bottom\",\n matchTriggerWidth = false,\n onOpenChange,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n\n // Controlled vs uncontrolled\n const isControlled = value !== undefined;\n const selectedDate = isControlled ? value : internalValue;\n\n const handleSelect = (date: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(date);\n }\n onChange?.(date);\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n handleSelect(undefined);\n };\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n // Format the selected date for display\n const formattedDate = selectedDate\n ? format(selectedDate, dateFormat)\n : undefined;\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n id={id}\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !selectedDate && \"text-muted-foreground\",\n className\n )}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n <span className=\"flex-1 truncate\">\n {formattedDate ?? placeholder}\n </span>\n {clearable && selectedDate && (\n <X\n className=\"ml-2 h-4 w-4 shrink-0 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\"w-auto p-0\", matchTriggerWidth && \"w-[var(--radix-popover-trigger-width)]\")}\n align={align}\n side={side}\n >\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n initialFocus\n />\n {name && selectedDate && (\n <input\n type=\"hidden\"\n name={name}\n value={format(selectedDate, \"yyyy-MM-dd\")}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nDatePicker.displayName = \"DatePicker\";\n\n/**\n * DatePickerInput Component\n *\n * A variant that looks more like a traditional input field.\n * Useful for inline editing or compact layouts.\n */\nexport interface DatePickerInputProps extends Omit<DatePickerProps, \"className\"> {\n /** Additional class name for the input wrapper */\n className?: string;\n /** Size variant */\n size?: \"sm\" | \"default\" | \"lg\";\n}\n\nfunction DatePickerInput({\n value,\n defaultValue,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n minDate,\n maxDate,\n dateFormat = \"yyyy-MM-dd\",\n clearable = false,\n className,\n id,\n name,\n align = \"start\",\n side = \"bottom\",\n onOpenChange,\n size = \"default\",\n}: DatePickerInputProps) {\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Controlled vs uncontrolled\n const isControlled = value !== undefined;\n const selectedDate = isControlled ? value : internalValue;\n\n // Sync input value with selected date\n React.useEffect(() => {\n if (selectedDate) {\n setInputValue(format(selectedDate, dateFormat));\n } else {\n setInputValue(\"\");\n }\n }, [selectedDate, dateFormat]);\n\n const handleSelect = (date: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(date);\n }\n onChange?.(date);\n setOpen(false);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n // Try to parse the date\n if (newValue) {\n const parsed = parse(newValue, dateFormat, new Date());\n if (isValid(parsed)) {\n if (!isControlled) {\n setInternalValue(parsed);\n }\n onChange?.(parsed);\n }\n } else {\n handleSelect(undefined);\n }\n };\n\n const handleInputBlur = () => {\n // Reset to the valid date on blur if input is invalid\n if (selectedDate) {\n setInputValue(format(selectedDate, dateFormat));\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n handleSelect(undefined);\n setInputValue(\"\");\n };\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n default: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <div className={cn(\"relative\", className)}>\n <PopoverTrigger asChild>\n <div\n className={cn(\n \"flex items-center rounded-md border border-input bg-background ring-offset-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed\",\n sizeClasses[size]\n )}\n >\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n \"flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\"\n )}\n />\n {clearable && selectedDate && (\n <X\n className=\"h-4 w-4 mx-1 cursor-pointer opacity-50 hover:opacity-100\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n />\n )}\n <CalendarIcon\n className=\"h-4 w-4 opacity-50 cursor-pointer hover:opacity-100\"\n onClick={() => !disabled && setOpen(true)}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align={align} side={side}>\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n initialFocus\n />\n </PopoverContent>\n {name && selectedDate && (\n <input\n type=\"hidden\"\n name={name}\n value={format(selectedDate, \"yyyy-MM-dd\")}\n />\n )}\n </div>\n </Popover>\n );\n}\n\nDatePickerInput.displayName = \"DatePickerInput\";\n\nexport { DatePicker, DatePickerInput };\n","/**\n * FilterPopover Component\n *\n * Renders filter UI based on column filter type:\n * - Text: Input with operator selection\n * - Number: Input with comparison operators\n * - Date: DatePicker with calendar and range support\n * - Select: Multi-select from predefined options\n * - Boolean: Checkbox toggle\n */\n\nimport * as React from \"react\";\nimport { format, parseISO, isValid } from \"date-fns\";\nimport { cn } from \"../../../utils/cn\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nimport { Label } from \"../../label\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Switch } from \"../../switch\";\nimport { DatePicker } from \"../../date-picker\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\";\nimport type {\n ColumnDef,\n FilterConfig,\n FilterType,\n TextFilterOperator,\n NumberFilterOperator,\n FilterOperator,\n CellValue,\n FilterValue,\n} from \"../types\";\n\nexport interface FilterPopoverProps<T = Record<string, CellValue>> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Current filter value */\n filter?: FilterConfig;\n /** Callback when filter changes */\n onFilterChange: (filter: FilterConfig | null) => void;\n}\n\n/** Text filter operators */\nconst TEXT_OPERATORS: { value: TextFilterOperator; label: string }[] = [\n { value: \"contains\", label: \"Contains\" },\n { value: \"notContains\", label: \"Does not contain\" },\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"startsWith\", label: \"Starts with\" },\n { value: \"endsWith\", label: \"Ends with\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/** Number filter operators */\nconst NUMBER_OPERATORS: { value: NumberFilterOperator; label: string }[] = [\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"gt\", label: \"Greater than\" },\n { value: \"gte\", label: \"Greater than or equal\" },\n { value: \"lt\", label: \"Less than\" },\n { value: \"lte\", label: \"Less than or equal\" },\n { value: \"between\", label: \"Between\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/** Date filter operators */\nconst DATE_OPERATORS: { value: string; label: string }[] = [\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"before\", label: \"Before\" },\n { value: \"after\", label: \"After\" },\n { value: \"between\", label: \"Between\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/**\n * Check if operator requires no value input\n */\nfunction isNoValueOperator(operator: string): boolean {\n return operator === \"isEmpty\" || operator === \"isNotEmpty\";\n}\n\n/**\n * Check if operator requires two values (between)\n */\nfunction isBetweenOperator(operator: string): boolean {\n return operator === \"between\";\n}\n\n/**\n * FilterPopover Component\n */\nexport function FilterPopover<T = Record<string, CellValue>>({\n column,\n filter,\n onFilterChange,\n}: FilterPopoverProps<T>) {\n const filterType = column.filterType || \"text\";\n\n const [operator, setOperator] = React.useState<FilterOperator>(\n filter?.operator || getDefaultOperator(filterType)\n );\n const [value, setValue] = React.useState<FilterValue>(filter?.value ?? \"\");\n const [valueTo, setValueTo] = React.useState<FilterValue>(filter?.valueTo ?? \"\");\n\n function getDefaultOperator(type: FilterType): FilterOperator {\n switch (type) {\n case \"text\":\n return \"contains\";\n case \"number\":\n return \"equals\";\n case \"date\":\n return \"equals\";\n case \"select\":\n return \"equals\";\n case \"boolean\":\n return \"equals\";\n default:\n return \"contains\";\n }\n }\n\n const handleApply = () => {\n if (isNoValueOperator(operator)) {\n onFilterChange({\n columnKey: column.key,\n operator,\n value: null,\n });\n return;\n }\n\n if (isBetweenOperator(operator)) {\n if (value !== \"\" && valueTo !== \"\") {\n onFilterChange({\n columnKey: column.key,\n operator,\n value,\n valueTo,\n });\n }\n return;\n }\n\n if (value !== \"\" && value !== null && value !== undefined) {\n onFilterChange({\n columnKey: column.key,\n operator,\n value,\n });\n }\n };\n\n const handleClear = () => {\n setOperator(getDefaultOperator(filterType));\n setValue(\"\");\n setValueTo(\"\");\n onFilterChange(null);\n };\n\n /**\n * Get operators based on filter type\n */\n const getOperators = () => {\n switch (filterType) {\n case \"text\":\n return TEXT_OPERATORS;\n case \"number\":\n return NUMBER_OPERATORS;\n case \"date\":\n return DATE_OPERATORS;\n default:\n return TEXT_OPERATORS;\n }\n };\n\n /**\n * Render text filter\n */\n const renderTextFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as TextFilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TEXT_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Value</Label>\n <Input\n type=\"text\"\n value={value != null && !Array.isArray(value) ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter value...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n )}\n </div>\n );\n\n /**\n * Render number filter\n */\n const renderNumberFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as NumberFilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {NUMBER_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">\n {isBetweenOperator(operator) ? \"From\" : \"Value\"}\n </Label>\n <Input\n type=\"number\"\n value={value != null && !Array.isArray(value) ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter number...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !isBetweenOperator(operator)) {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n\n {isBetweenOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">To</Label>\n <Input\n type=\"number\"\n value={valueTo != null && !Array.isArray(valueTo) ? String(valueTo) : \"\"}\n onChange={(e) => setValueTo(e.target.value)}\n placeholder=\"Enter number...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n\n const renderDateFilter = () => {\n const dateValue = React.useMemo(() => {\n if (!value) return undefined;\n if (value instanceof Date) return value;\n if (typeof value === \"string\") {\n const parsed = parseISO(value);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [value]);\n\n const dateToValue = React.useMemo(() => {\n if (!valueTo) return undefined;\n if (valueTo instanceof Date) return valueTo;\n if (typeof valueTo === \"string\") {\n const parsed = parseISO(valueTo);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [valueTo]);\n\n const handleDateChange = (date: Date | undefined) => {\n setValue(date ? format(date, \"yyyy-MM-dd\") : \"\");\n };\n\n const handleDateToChange = (date: Date | undefined) => {\n setValueTo(date ? format(date, \"yyyy-MM-dd\") : \"\");\n };\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as FilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DATE_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">\n {isBetweenOperator(operator) ? \"From\" : \"Date\"}\n </Label>\n <DatePicker\n value={dateValue}\n onChange={handleDateChange}\n placeholder=\"Select date...\"\n className=\"h-8 text-sm\"\n />\n </div>\n\n {isBetweenOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">To</Label>\n <DatePicker\n value={dateToValue}\n onChange={handleDateToChange}\n placeholder=\"Select date...\"\n className=\"h-8 text-sm\"\n minDate={dateValue}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n };\n\n const renderSelectFilter = () => {\n const options = column.filterOptions || [];\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Select value</Label>\n <Select value={value != null && !Array.isArray(value) ? String(value) : undefined} onValueChange={setValue}>\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n );\n };\n\n const renderBooleanFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm\">{column.header}</Label>\n <Switch\n checked={value === true}\n onCheckedChange={(checked) => setValue(checked)}\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Filter rows where this value is {value ? \"true\" : \"false\"}\n </p>\n </div>\n );\n\n const renderFilter = () => {\n switch (filterType) {\n case \"text\":\n return renderTextFilter();\n case \"number\":\n return renderNumberFilter();\n case \"date\":\n return renderDateFilter();\n case \"select\":\n return renderSelectFilter();\n case \"boolean\":\n return renderBooleanFilter();\n default:\n return renderTextFilter();\n }\n };\n\n return (\n <div className=\"p-3 space-y-4\">\n <div className=\"font-medium text-sm\">\n Filter: {typeof column.header === \"string\" ? column.header : \"Column\"}\n </div>\n\n {renderFilter()}\n\n <div className=\"flex gap-2 pt-2 border-t border-border\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleClear}\n className=\"flex-1\"\n >\n Clear\n </Button>\n <Button size=\"sm\" onClick={handleApply} className=\"flex-1\">\n Apply\n </Button>\n </div>\n </div>\n );\n}\n","/**\n * HeaderCell Component\n *\n * Renders a single header cell with:\n * - Sort indicator and click-to-sort\n * - Filter trigger (popover)\n * - Resize handle (drag to resize)\n */\n\nimport * as React from \"react\";\nimport { ChevronUp, ChevronDown, Filter, X, GripVertical } from \"lucide-react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../../popover\";\nimport type { ColumnDef, SortConfig, FilterConfig } from \"../types\";\nimport { FilterPopover } from \"./FilterPopover\";\n\nexport interface HeaderCellProps<T = any> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Column index */\n columnIndex: number;\n /** Current width of the column */\n width: number;\n /** Current sort config for this column (if sorted) */\n sorting?: SortConfig;\n /** Current filter config for this column (if filtered) */\n filter?: FilterConfig;\n /** Whether this column is resizable */\n isResizable: boolean;\n /** Callback when sort is toggled */\n onSort?: () => void;\n /** Callback when filter changes */\n onFilterChange?: (filter: FilterConfig | null) => void;\n /** Resize handle mouse down handler */\n onResizeMouseDown?: (event: React.MouseEvent) => void;\n /** Resize handle double click handler */\n onResizeDoubleClick?: (event: React.MouseEvent) => void;\n /** Whether currently resizing this column */\n isResizing?: boolean;\n}\n\n/**\n * HeaderCell Component\n */\nexport function HeaderCell<T = any>({\n column,\n columnIndex,\n width,\n sorting,\n filter,\n isResizable,\n onSort,\n onFilterChange,\n onResizeMouseDown,\n onResizeDoubleClick,\n isResizing,\n}: HeaderCellProps<T>) {\n const [filterOpen, setFilterOpen] = React.useState(false);\n\n const isSorted = sorting?.field === column.key;\n const isFiltered = !!filter;\n const isSortable = column.sortable && onSort;\n const isFilterable = column.filterable && onFilterChange;\n\n const handleHeaderClick = () => {\n if (isSortable) {\n onSort();\n }\n };\n\n const handleFilterChange = (newFilter: FilterConfig | null) => {\n onFilterChange?.(newFilter);\n if (!newFilter) {\n setFilterOpen(false);\n }\n };\n\n const handleClearFilter = (e: React.MouseEvent) => {\n e.stopPropagation();\n onFilterChange?.(null);\n };\n\n const renderSortIndicator = () => {\n if (!column.sortable) return null;\n\n const Icon = isSorted && sorting?.direction === \"desc\" ? ChevronDown : ChevronUp;\n\n return (\n <Icon\n className={cn(\n \"w-4 h-4 flex-shrink-0 transition-opacity\",\n isSorted\n ? \"opacity-100 text-foreground\"\n : \"opacity-30 hover:opacity-60 text-muted-foreground\"\n )}\n />\n );\n };\n\n return (\n <div\n className={cn(\n \"relative flex-shrink-0 border-r border-border last:border-r-0\",\n \"bg-muted select-none\",\n isResizing && \"bg-accent/20\"\n )}\n style={{ width }}\n >\n <div\n className={cn(\n \"flex items-center gap-1 px-3 py-2 h-full\",\n isResizable && \"pr-6\", // Extra padding to create space for resize handle\n isSortable && \"cursor-pointer hover:bg-accent/10\",\n column.align === \"center\" && \"justify-center\",\n column.align === \"right\" && \"justify-end\"\n )}\n onClick={handleHeaderClick}\n role={isSortable ? \"button\" : undefined}\n tabIndex={isSortable ? 0 : undefined}\n onKeyDown={(e) => {\n if (isSortable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleHeaderClick();\n }\n }}\n >\n <span className=\"text-sm font-medium truncate flex-1\">\n {column.header}\n </span>\n\n {renderSortIndicator()}\n\n {isFilterable && (\n <Popover open={filterOpen} onOpenChange={setFilterOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"h-6 w-6 p-0\",\n isFiltered && \"text-primary\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n setFilterOpen(!filterOpen);\n }}\n aria-label={`Filter ${column.header}`}\n >\n <Filter className=\"w-3.5 h-3.5\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <FilterPopover\n column={column}\n filter={filter}\n onFilterChange={handleFilterChange}\n />\n </PopoverContent>\n </Popover>\n )}\n\n {isFiltered && !filterOpen && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 p-0 text-primary hover:text-destructive\"\n onClick={handleClearFilter}\n aria-label=\"Clear filter\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n )}\n </div>\n\n {isResizable && (\n <div\n className={cn(\n \"absolute top-0 right-0 w-4 h-full cursor-col-resize z-10\",\n \"flex items-center justify-center\",\n \"hover:bg-accent/50 transition-colors\",\n \"group\",\n isResizing && \"bg-accent\"\n )}\n onMouseDown={onResizeMouseDown}\n onDoubleClick={onResizeDoubleClick}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize column ${column.header}`}\n >\n <GripVertical\n className={cn(\n \"w-3 h-4 transition-colors\",\n \"text-muted-foreground/40\",\n \"group-hover:text-primary\",\n isResizing && \"text-primary\"\n )}\n />\n </div>\n )}\n </div>\n );\n}\n","/**\n * CellEditor Component\n *\n * Renders an inline cell editor based on column editor type:\n * - Text: Input field\n * - Number: Number input\n * - Date: DatePicker with calendar\n * - Select: Dropdown select\n * - Boolean: Checkbox\n *\n * Supports validation with visual feedback.\n */\n\nimport * as React from \"react\";\nimport { format, parseISO, isValid } from \"date-fns\";\nimport { cn } from \"../../../utils/cn\";\nimport { Input } from \"../../input\";\nimport { Checkbox } from \"../../checkbox\";\nimport { DatePicker } from \"../../date-picker\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\";\nimport type { ColumnDef, EditorType, CellValue } from \"../types\";\n\nexport interface CellEditorProps<T = Record<string, CellValue>> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Current value being edited */\n value: CellValue;\n /** The row data */\n row: T;\n /** Row index */\n rowIndex: number;\n /** Callback to commit the edit */\n onCommit: (value: CellValue) => void;\n /** Callback to cancel the edit */\n onCancel: () => void;\n /** Callback when value changes (for controlled updates) */\n onChange?: (value: CellValue) => void;\n /** Additional class name */\n className?: string;\n}\n\nexport function CellEditor<T = Record<string, CellValue>>({\n column,\n value,\n row,\n rowIndex,\n onCommit,\n onCancel,\n onChange,\n className,\n}: CellEditorProps<T>) {\n const editorType = column.editorType || \"text\";\n const [internalValue, setInternalValue] = React.useState(value);\n const [validationError, setValidationError] = React.useState<string | null>(\n null\n );\n const inputRef = React.useRef<HTMLInputElement>(null);\n const selectRef = React.useRef<HTMLButtonElement>(null);\n\n const currentValue = onChange ? value : internalValue;\n const setValue = onChange || setInternalValue;\n\n const validate = React.useCallback(\n (val: CellValue): boolean => {\n if (!column.validator) return true;\n\n const result = column.validator(val, row);\n if (result === true) {\n setValidationError(null);\n return true;\n }\n\n setValidationError(typeof result === \"string\" ? result : \"Invalid value\");\n return false;\n },\n [column, row]\n );\n\n const handleChange = (newValue: CellValue) => {\n setValue(newValue);\n setValidationError(null);\n };\n\n const handleCommit = () => {\n if (validate(currentValue)) {\n onCommit(currentValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n handleCommit();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n } else if (e.key === \"Tab\") {\n handleCommit();\n }\n };\n\n const handleBlur = (e: React.FocusEvent) => {\n const relatedTarget = e.relatedTarget as HTMLElement;\n \n if (relatedTarget?.closest(\"[data-radix-select-viewport]\")) {\n return;\n }\n \n if (relatedTarget?.closest(\"[data-cell-editor]\")) {\n return;\n }\n \n if (relatedTarget?.closest(\"[data-radix-popper-content-wrapper]\")) {\n return;\n }\n \n handleCommit();\n };\n\n React.useEffect(() => {\n const timer = setTimeout(() => {\n if (editorType === \"select\") {\n selectRef.current?.focus();\n } else {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, 0);\n\n return () => clearTimeout(timer);\n }, [editorType]);\n\n const renderTextEditor = () => (\n <Input\n ref={inputRef}\n type=\"text\"\n value={currentValue != null ? String(currentValue) : \"\"}\n onChange={(e) => handleChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm px-2\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n aria-invalid={!!validationError}\n aria-describedby={validationError ? \"cell-editor-error\" : undefined}\n />\n );\n\n const renderNumberEditor = () => (\n <Input\n ref={inputRef}\n type=\"number\"\n value={typeof currentValue === \"number\" ? currentValue : (currentValue != null ? String(currentValue) : \"\")}\n onChange={(e) => handleChange(e.target.valueAsNumber || e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm px-2\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n aria-invalid={!!validationError}\n />\n );\n\n const renderDateEditor = () => {\n const dateValue = React.useMemo(() => {\n if (!currentValue) return undefined;\n if (currentValue instanceof Date) return currentValue;\n if (typeof currentValue === \"string\") {\n const parsed = parseISO(currentValue);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [currentValue]);\n\n const handleDateChange = (date: Date | undefined) => {\n const stringValue = date ? format(date, \"yyyy-MM-dd\") : \"\";\n if (validate(stringValue)) {\n onCommit(stringValue);\n }\n };\n\n return (\n <div \n className=\"h-full w-full\"\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n >\n <DatePicker\n value={dateValue}\n onChange={handleDateChange}\n placeholder=\"Select date...\"\n className={cn(\n \"h-full w-full border-0 rounded-none [&>button]:h-full [&>button]:rounded-none [&>button]:border-0\",\n validationError && \"ring-2 ring-destructive\",\n className\n )}\n />\n </div>\n );\n };\n\n const renderSelectEditor = () => {\n const options = column.editorOptions || [];\n\n return (\n <Select\n value={String(currentValue ?? \"\")}\n onValueChange={(val) => {\n handleChange(val);\n setTimeout(() => {\n if (validate(val)) {\n onCommit(val);\n }\n }, 0);\n }}\n >\n <SelectTrigger\n ref={selectRef}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n >\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n };\n\n const renderBooleanEditor = () => {\n const handleToggle = (checked: boolean | \"indeterminate\") => {\n const boolValue = checked === true;\n if (validate(boolValue)) {\n onCommit(boolValue);\n }\n };\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full w-full cursor-pointer\",\n className\n )}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n handleToggle(!currentValue);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleToggle(!currentValue);\n }}\n tabIndex={0}\n ref={(el) => el?.focus()}\n role=\"checkbox\"\n aria-checked={!!currentValue}\n >\n <Checkbox\n checked={!!currentValue}\n onCheckedChange={handleToggle}\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n );\n };\n\n const renderEditor = () => {\n switch (editorType) {\n case \"text\":\n return renderTextEditor();\n case \"number\":\n return renderNumberEditor();\n case \"date\":\n return renderDateEditor();\n case \"select\":\n return renderSelectEditor();\n case \"boolean\":\n return renderBooleanEditor();\n default:\n return renderTextEditor();\n }\n };\n\n return (\n <div \n className=\"relative w-full h-full\"\n data-cell-editor\n onMouseDown={(e) => {\n if (e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n >\n {renderEditor()}\n\n {validationError && (\n <div\n id=\"cell-editor-error\"\n className=\"absolute top-full left-0 mt-1 z-50 px-2 py-1 text-xs text-destructive-foreground bg-destructive rounded shadow-lg whitespace-nowrap\"\n role=\"alert\"\n >\n {validationError}\n </div>\n )}\n </div>\n );\n}\n","/**\n * useDataGridState Hook\n *\n * Manages internal state for the DataGrid component, supporting both\n * controlled and uncontrolled modes for sorting, filtering, column widths,\n * cell focus, and cell editing.\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport type {\n SortConfig,\n FilterConfig,\n CellPosition,\n EditingCell,\n DataGridInternalState,\n DataGridState,\n ColumnDef,\n CellValue,\n} from \"../types\";\n\nexport interface UseDataGridStateOptions<T = Record<string, CellValue>> {\n sorting?: SortConfig[];\n filters?: FilterConfig[];\n columnWidths?: Record<string, number>;\n focusedCell?: CellPosition | null;\n\n defaultSorting?: SortConfig[];\n defaultFilters?: FilterConfig[];\n defaultColumnWidths?: Record<string, number>;\n\n onSortChange?: (sorting: SortConfig[]) => void;\n onFilterChange?: (filters: FilterConfig[]) => void;\n onColumnResize?: (columnKey: string, width: number) => void;\n onFocusedCellChange?: (cell: CellPosition | null) => void;\n onStateChange?: (state: DataGridState) => void;\n\n onCellEdit?: (\n rowIndex: number,\n columnKey: string,\n newValue: CellValue,\n oldValue: CellValue\n ) => void;\n onCellEditStart?: (rowIndex: number, columnKey: string) => boolean | void;\n onCellEditCancel?: (rowIndex: number, columnKey: string) => void;\n\n columns: ColumnDef<T>[];\n data: T[];\n getCellValue: (row: T, column: ColumnDef<T>) => CellValue;\n}\n\nexport interface UseDataGridStateReturn {\n state: DataGridInternalState;\n actions: {\n setSorting: (sorting: SortConfig[]) => void;\n toggleSort: (columnKey: string) => void;\n setFilters: (filters: FilterConfig[]) => void;\n setFilter: (filter: FilterConfig | null, columnKey: string) => void;\n clearFilters: () => void;\n setColumnWidth: (columnKey: string, width: number) => void;\n setFocusedCell: (cell: CellPosition | null) => void;\n startEditing: (rowIndex: number, columnKey: string) => void;\n updateEditingValue: (value: CellValue) => void;\n /** Commit the current edit. Optionally pass a value to commit immediately (for async editors like checkbox/date) */\n commitEdit: (value?: CellValue) => void;\n cancelEdit: () => void;\n };\n isControlled: {\n sorting: boolean;\n filters: boolean;\n columnWidths: boolean;\n focusedCell: boolean;\n };\n}\n\n/**\n * Hook to manage DataGrid state with controlled/uncontrolled support\n */\nexport function useDataGridState<T = Record<string, CellValue>>(\n options: UseDataGridStateOptions<T>\n): UseDataGridStateReturn {\n const {\n sorting: controlledSorting,\n filters: controlledFilters,\n columnWidths: controlledColumnWidths,\n focusedCell: controlledFocusedCell,\n\n defaultSorting = [],\n defaultFilters = [],\n defaultColumnWidths = {},\n\n onSortChange,\n onFilterChange,\n onColumnResize,\n onFocusedCellChange,\n onStateChange,\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n\n columns,\n data,\n getCellValue,\n } = options;\n const isControlled = useMemo(\n () => ({\n sorting: controlledSorting !== undefined,\n filters: controlledFilters !== undefined,\n columnWidths: controlledColumnWidths !== undefined,\n focusedCell: controlledFocusedCell !== undefined,\n }),\n [\n controlledSorting,\n controlledFilters,\n controlledColumnWidths,\n controlledFocusedCell,\n ]\n );\n\n const [internalSorting, setInternalSorting] =\n useState<SortConfig[]>(defaultSorting);\n const [internalFilters, setInternalFilters] =\n useState<FilterConfig[]>(defaultFilters);\n const [internalColumnWidths, setInternalColumnWidths] =\n useState<Record<string, number>>(defaultColumnWidths);\n const [internalFocusedCell, setInternalFocusedCell] =\n useState<CellPosition | null>(null);\n const [editingCell, setEditingCell] = useState<EditingCell | null>(null);\n\n const sorting = isControlled.sorting ? controlledSorting! : internalSorting;\n const filters = isControlled.filters ? controlledFilters! : internalFilters;\n const focusedCell = isControlled.focusedCell\n ? controlledFocusedCell!\n : internalFocusedCell;\n\n const columnWidths = useMemo(() => {\n const controlled = isControlled.columnWidths\n ? controlledColumnWidths!\n : internalColumnWidths;\n const result: Record<string, number> = {};\n\n for (const column of columns) {\n result[column.key] = controlled[column.key] ?? column.width ?? 200;\n }\n\n return result;\n }, [isControlled.columnWidths, controlledColumnWidths, internalColumnWidths, columns]);\n\n const prevStateRef = useRef<DataGridState | null>(null);\n\n const state: DataGridInternalState = useMemo(\n () => ({\n sorting,\n filters,\n columnWidths,\n focusedCell,\n editingCell,\n }),\n [sorting, filters, columnWidths, focusedCell, editingCell]\n );\n\n useEffect(() => {\n if (onStateChange) {\n const currentState: DataGridState = {\n sorting,\n filters,\n columnWidths,\n focusedCell,\n editingCell,\n };\n\n if (\n JSON.stringify(currentState) !== JSON.stringify(prevStateRef.current)\n ) {\n prevStateRef.current = currentState;\n onStateChange(currentState);\n }\n }\n }, [sorting, filters, columnWidths, focusedCell, editingCell, onStateChange]);\n\n // ============ SORTING ACTIONS ============\n const setSorting = useCallback(\n (newSorting: SortConfig[]) => {\n if (isControlled.sorting) {\n onSortChange?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onSortChange?.(newSorting);\n }\n },\n [isControlled.sorting, onSortChange]\n );\n\n const toggleSort = useCallback(\n (columnKey: string) => {\n const currentSort = sorting.find((s) => s.field === columnKey);\n let newSorting: SortConfig[];\n\n if (!currentSort) {\n newSorting = [{ field: columnKey, direction: \"asc\" }];\n } else if (currentSort.direction === \"asc\") {\n newSorting = [{ field: columnKey, direction: \"desc\" }];\n } else {\n newSorting = [];\n }\n\n setSorting(newSorting);\n },\n [sorting, setSorting]\n );\n\n // ============ FILTER ACTIONS ============\n const setFilters = useCallback(\n (newFilters: FilterConfig[]) => {\n if (isControlled.filters) {\n onFilterChange?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onFilterChange?.(newFilters);\n }\n },\n [isControlled.filters, onFilterChange]\n );\n\n const setFilter = useCallback(\n (filter: FilterConfig | null, columnKey: string) => {\n const newFilters = filters.filter((f) => f.columnKey !== columnKey);\n if (filter) {\n newFilters.push(filter);\n }\n setFilters(newFilters);\n },\n [filters, setFilters]\n );\n\n const clearFilters = useCallback(() => {\n setFilters([]);\n }, [setFilters]);\n\n // ============ COLUMN WIDTH ACTIONS ============\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n if (isControlled.columnWidths) {\n onColumnResize?.(columnKey, width);\n } else {\n setInternalColumnWidths((prev) => ({\n ...prev,\n [columnKey]: width,\n }));\n onColumnResize?.(columnKey, width);\n }\n },\n [isControlled.columnWidths, onColumnResize]\n );\n\n // ============ FOCUS ACTIONS ============\n const setFocusedCell = useCallback(\n (cell: CellPosition | null) => {\n if (isControlled.focusedCell) {\n onFocusedCellChange?.(cell);\n } else {\n setInternalFocusedCell(cell);\n onFocusedCellChange?.(cell);\n }\n },\n [isControlled.focusedCell, onFocusedCellChange]\n );\n\n // ============ EDITING ACTIONS ============\n const startEditing = useCallback(\n (rowIndex: number, columnKey: string) => {\n if (onCellEditStart) {\n const allowed = onCellEditStart(rowIndex, columnKey);\n if (allowed === false) return;\n }\n\n const column = columns.find((c) => c.key === columnKey);\n if (!column || !column.editable) return;\n\n const row = data[rowIndex];\n if (!row) return;\n\n const value = getCellValue(row, column);\n\n setEditingCell({\n rowIndex,\n columnKey,\n value,\n originalValue: value,\n });\n\n setFocusedCell({ rowIndex, columnKey });\n },\n [columns, data, getCellValue, onCellEditStart, setFocusedCell]\n );\n\n const updateEditingValue = useCallback((value: CellValue) => {\n setEditingCell((prev) => (prev ? { ...prev, value } : null));\n }, []);\n\n const commitEdit = useCallback((valueOverride?: CellValue) => {\n if (!editingCell) return;\n\n const { rowIndex, columnKey, originalValue } = editingCell;\n const value = valueOverride !== undefined ? valueOverride : editingCell.value;\n\n const column = columns.find((c) => c.key === columnKey);\n if (column?.validator) {\n const row = data[rowIndex];\n const validationResult = column.validator(value, row);\n if (validationResult !== true && typeof validationResult === \"string\") {\n return;\n }\n }\n\n if (value !== originalValue) {\n onCellEdit?.(rowIndex, columnKey, value, originalValue);\n }\n\n setEditingCell(null);\n }, [editingCell, columns, data, onCellEdit]);\n\n const cancelEdit = useCallback(() => {\n if (editingCell) {\n onCellEditCancel?.(editingCell.rowIndex, editingCell.columnKey);\n }\n setEditingCell(null);\n }, [editingCell, onCellEditCancel]);\n\n return {\n state,\n actions: {\n setSorting,\n toggleSort,\n setFilters,\n setFilter,\n clearFilters,\n setColumnWidth,\n setFocusedCell,\n startEditing,\n updateEditingValue,\n commitEdit,\n cancelEdit,\n },\n isControlled,\n };\n}\n","/**\n * useKeyboardNavigation Hook\n *\n * Handles keyboard navigation for the DataGrid component including:\n * - Arrow keys: Move between cells\n * - Enter: Start editing / commit edit\n * - Escape: Cancel edit\n * - Tab/Shift+Tab: Move to next/previous cell\n * - Home/End: Jump to first/last cell in row\n * - Ctrl+Home/End: Jump to first/last cell in grid\n * - Page Up/Down: Scroll by visible page\n */\n\nimport { useCallback, useRef } from \"react\";\nimport type { CellPosition, ColumnDef, EditingCell } from \"../types\";\n\nexport interface UseKeyboardNavigationOptions<T = any> {\n /** Whether keyboard navigation is enabled */\n enabled: boolean;\n /** Current focused cell */\n focusedCell: CellPosition | null;\n /** Current editing cell */\n editingCell: EditingCell | null;\n /** Column definitions (for determining visible columns) */\n columns: ColumnDef<T>[];\n /** Total number of rows */\n rowCount: number;\n /** Number of visible rows (for page up/down) */\n visibleRowCount?: number;\n /** Callback to set focused cell */\n onFocusedCellChange: (cell: CellPosition | null) => void;\n /** Callback to start editing */\n onStartEditing: (rowIndex: number, columnKey: string) => void;\n /** Callback to commit edit */\n onCommitEdit: () => void;\n /** Callback to cancel edit */\n onCancelEdit: () => void;\n /** Callback to scroll a row into view */\n onScrollToRow?: (rowIndex: number) => void;\n /** Callback to scroll a column into view */\n onScrollToColumn?: (columnKey: string) => void;\n}\n\nexport interface UseKeyboardNavigationReturn {\n /** Handler to attach to the grid container */\n handleKeyDown: (event: React.KeyboardEvent) => void;\n /** Ref to attach to the grid container for focus management */\n containerRef: React.RefObject<HTMLDivElement>;\n /** Focus the container (useful after clicking a cell) */\n focusContainer: () => void;\n}\n\n/**\n * Get visible (non-hidden) columns\n */\nfunction getVisibleColumns<T>(columns: ColumnDef<T>[]): ColumnDef<T>[] {\n return columns.filter((col) => !col.hidden);\n}\n\n/**\n * Hook to handle keyboard navigation in the DataGrid\n */\nexport function useKeyboardNavigation<T = any>(\n options: UseKeyboardNavigationOptions<T>\n): UseKeyboardNavigationReturn {\n const {\n enabled,\n focusedCell,\n editingCell,\n columns,\n rowCount,\n visibleRowCount = 10,\n onFocusedCellChange,\n onStartEditing,\n onCommitEdit,\n onCancelEdit,\n onScrollToRow,\n onScrollToColumn,\n } = options;\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Get visible columns for navigation\n const visibleColumns = getVisibleColumns(columns);\n\n /**\n * Get column index from column key\n */\n const getColumnIndex = useCallback(\n (columnKey: string): number => {\n return visibleColumns.findIndex((col) => col.key === columnKey);\n },\n [visibleColumns]\n );\n\n /**\n * Get column key from index\n */\n const getColumnKey = useCallback(\n (index: number): string | null => {\n const column = visibleColumns[index];\n return column ? column.key : null;\n },\n [visibleColumns]\n );\n\n /**\n * Navigate to a new cell position\n */\n const navigateToCell = useCallback(\n (rowIndex: number, columnKey: string) => {\n // Clamp row index\n const clampedRow = Math.max(0, Math.min(rowIndex, rowCount - 1));\n\n onFocusedCellChange({ rowIndex: clampedRow, columnKey });\n onScrollToRow?.(clampedRow);\n onScrollToColumn?.(columnKey);\n },\n [rowCount, onFocusedCellChange, onScrollToRow, onScrollToColumn]\n );\n\n /**\n * Move focus by delta\n */\n const moveFocus = useCallback(\n (rowDelta: number, colDelta: number) => {\n if (!focusedCell || visibleColumns.length === 0 || rowCount === 0) return;\n\n const currentColIndex = getColumnIndex(focusedCell.columnKey);\n if (currentColIndex === -1) return;\n\n let newRowIndex = focusedCell.rowIndex + rowDelta;\n let newColIndex = currentColIndex + colDelta;\n\n // Handle wrapping for Tab navigation\n if (colDelta !== 0) {\n if (newColIndex < 0) {\n // Wrap to previous row, last column\n if (newRowIndex > 0) {\n newRowIndex--;\n newColIndex = visibleColumns.length - 1;\n } else {\n newColIndex = 0;\n }\n } else if (newColIndex >= visibleColumns.length) {\n // Wrap to next row, first column\n if (newRowIndex < rowCount - 1) {\n newRowIndex++;\n newColIndex = 0;\n } else {\n newColIndex = visibleColumns.length - 1;\n }\n }\n }\n\n // Clamp values\n newRowIndex = Math.max(0, Math.min(newRowIndex, rowCount - 1));\n newColIndex = Math.max(0, Math.min(newColIndex, visibleColumns.length - 1));\n\n const newColumnKey = getColumnKey(newColIndex);\n if (newColumnKey) {\n navigateToCell(newRowIndex, newColumnKey);\n }\n },\n [\n focusedCell,\n visibleColumns,\n rowCount,\n getColumnIndex,\n getColumnKey,\n navigateToCell,\n ]\n );\n\n /**\n * Jump to first cell in row\n */\n const jumpToRowStart = useCallback(() => {\n if (!focusedCell || visibleColumns.length === 0) return;\n const firstColumnKey = getColumnKey(0);\n if (firstColumnKey) {\n navigateToCell(focusedCell.rowIndex, firstColumnKey);\n }\n }, [focusedCell, visibleColumns.length, getColumnKey, navigateToCell]);\n\n /**\n * Jump to last cell in row\n */\n const jumpToRowEnd = useCallback(() => {\n if (!focusedCell || visibleColumns.length === 0) return;\n const lastColumnKey = getColumnKey(visibleColumns.length - 1);\n if (lastColumnKey) {\n navigateToCell(focusedCell.rowIndex, lastColumnKey);\n }\n }, [focusedCell, visibleColumns.length, getColumnKey, navigateToCell]);\n\n /**\n * Jump to first cell in grid\n */\n const jumpToGridStart = useCallback(() => {\n if (visibleColumns.length === 0 || rowCount === 0) return;\n const firstColumnKey = getColumnKey(0);\n if (firstColumnKey) {\n navigateToCell(0, firstColumnKey);\n }\n }, [visibleColumns.length, rowCount, getColumnKey, navigateToCell]);\n\n /**\n * Jump to last cell in grid\n */\n const jumpToGridEnd = useCallback(() => {\n if (visibleColumns.length === 0 || rowCount === 0) return;\n const lastColumnKey = getColumnKey(visibleColumns.length - 1);\n if (lastColumnKey) {\n navigateToCell(rowCount - 1, lastColumnKey);\n }\n }, [visibleColumns.length, rowCount, getColumnKey, navigateToCell]);\n\n /**\n * Handle key down events\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (!enabled) return;\n\n const { key, ctrlKey, metaKey, shiftKey } = event;\n const isModifierKey = ctrlKey || metaKey;\n\n // If editing, only handle Enter and Escape\n if (editingCell) {\n switch (key) {\n case \"Enter\":\n event.preventDefault();\n onCommitEdit();\n break;\n case \"Escape\":\n event.preventDefault();\n onCancelEdit();\n break;\n case \"Tab\":\n // Commit and move to next cell\n event.preventDefault();\n onCommitEdit();\n moveFocus(0, shiftKey ? -1 : 1);\n break;\n }\n return;\n }\n\n // Navigation when not editing\n switch (key) {\n case \"ArrowUp\":\n event.preventDefault();\n moveFocus(-1, 0);\n break;\n\n case \"ArrowDown\":\n event.preventDefault();\n moveFocus(1, 0);\n break;\n\n case \"ArrowLeft\":\n event.preventDefault();\n moveFocus(0, -1);\n break;\n\n case \"ArrowRight\":\n event.preventDefault();\n moveFocus(0, 1);\n break;\n\n case \"Tab\":\n event.preventDefault();\n moveFocus(0, shiftKey ? -1 : 1);\n break;\n\n case \"Home\":\n event.preventDefault();\n if (isModifierKey) {\n jumpToGridStart();\n } else {\n jumpToRowStart();\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (isModifierKey) {\n jumpToGridEnd();\n } else {\n jumpToRowEnd();\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n moveFocus(-visibleRowCount, 0);\n break;\n\n case \"PageDown\":\n event.preventDefault();\n moveFocus(visibleRowCount, 0);\n break;\n\n case \"Enter\":\n case \"F2\":\n // Start editing the focused cell\n if (focusedCell) {\n event.preventDefault();\n const column = columns.find(\n (c) => c.key === focusedCell.columnKey\n );\n if (column?.editable) {\n onStartEditing(focusedCell.rowIndex, focusedCell.columnKey);\n }\n }\n break;\n\n case \"Escape\":\n // Clear focus\n event.preventDefault();\n onFocusedCellChange(null);\n break;\n }\n },\n [\n enabled,\n editingCell,\n focusedCell,\n columns,\n visibleRowCount,\n moveFocus,\n jumpToRowStart,\n jumpToRowEnd,\n jumpToGridStart,\n jumpToGridEnd,\n onCommitEdit,\n onCancelEdit,\n onStartEditing,\n onFocusedCellChange,\n ]\n );\n\n /**\n * Focus the container element\n */\n const focusContainer = useCallback(() => {\n containerRef.current?.focus();\n }, []);\n\n // Note: We intentionally don't auto-focus the container when focusedCell changes.\n // This allows focus to naturally move to other elements (like search inputs) when\n // the user clicks outside the grid. The container is focused explicitly via\n // focusContainer() when the user clicks on a cell.\n\n return {\n handleKeyDown,\n containerRef,\n focusContainer,\n };\n}\n","/**\n * useColumnResize Hook\n *\n * Handles column resizing logic with:\n * - Mouse drag support\n * - Min/max width constraints\n * - Callbacks for resize start/end\n * - Double-click to auto-fit (optional)\n */\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport type { ColumnDef } from \"../types\";\n\n/** Default minimum column width */\nconst DEFAULT_MIN_WIDTH = 50;\n\n/** Default maximum column width */\nconst DEFAULT_MAX_WIDTH = 1000;\n\nexport interface UseColumnResizeOptions {\n /** Column key being resized */\n columnKey: string;\n /** Column definition (for min/max width) */\n column: ColumnDef;\n /** Current column width */\n currentWidth: number;\n /** Whether resizing is enabled */\n enabled: boolean;\n /** Callback when width changes during resize */\n onResize: (width: number) => void;\n /** Callback when resize starts */\n onResizeStart?: () => void;\n /** Callback when resize ends */\n onResizeEnd?: (width: number) => void;\n}\n\nexport interface UseColumnResizeReturn {\n /** Whether currently dragging */\n isDragging: boolean;\n /** Props to spread on the resize handle element */\n resizeHandleProps: {\n onMouseDown: (event: React.MouseEvent) => void;\n onDoubleClick: (event: React.MouseEvent) => void;\n style: React.CSSProperties;\n role: string;\n \"aria-label\": string;\n tabIndex: number;\n };\n}\n\n/**\n * Hook to handle column resize drag interactions\n */\nexport function useColumnResize(\n options: UseColumnResizeOptions\n): UseColumnResizeReturn {\n const {\n columnKey,\n column,\n currentWidth,\n enabled,\n onResize,\n onResizeStart,\n onResizeEnd,\n } = options;\n\n const [isDragging, setIsDragging] = useState(false);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n // Get min/max widths\n const minWidth = column.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column.maxWidth ?? DEFAULT_MAX_WIDTH;\n\n /**\n * Clamp width to min/max bounds\n */\n const clampWidth = useCallback(\n (width: number): number => {\n return Math.max(minWidth, Math.min(maxWidth, width));\n },\n [minWidth, maxWidth]\n );\n\n /**\n * Handle mouse down on resize handle\n */\n const handleMouseDown = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setIsDragging(true);\n startXRef.current = event.clientX;\n startWidthRef.current = currentWidth;\n\n // Prevent text selection during drag\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n onResizeStart?.();\n },\n [enabled, currentWidth, onResizeStart]\n );\n\n /**\n * Handle mouse move during drag\n */\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!isDragging) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = clampWidth(startWidthRef.current + deltaX);\n\n onResize(newWidth);\n },\n [isDragging, clampWidth, onResize]\n );\n\n /**\n * Handle mouse up to end drag\n */\n const handleMouseUp = useCallback(() => {\n if (!isDragging) return;\n\n setIsDragging(false);\n\n // Restore styles\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n\n // Calculate final width\n const finalWidth = clampWidth(currentWidth);\n onResizeEnd?.(finalWidth);\n }, [isDragging, currentWidth, clampWidth, onResizeEnd]);\n\n /**\n * Handle double-click to auto-fit column width\n * For now, this resets to the column's default width\n */\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Reset to column's defined width or default\n const defaultWidth = column.width ?? 200;\n const clampedWidth = clampWidth(defaultWidth);\n onResize(clampedWidth);\n onResizeEnd?.(clampedWidth);\n },\n [enabled, column.width, clampWidth, onResize, onResizeEnd]\n );\n\n // Attach global mouse listeners during drag\n useEffect(() => {\n if (isDragging) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n if (isDragging) {\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n }\n };\n }, [isDragging]);\n\n return {\n isDragging,\n resizeHandleProps: {\n onMouseDown: handleMouseDown,\n onDoubleClick: handleDoubleClick,\n style: {\n cursor: enabled ? \"col-resize\" : \"default\",\n touchAction: \"none\",\n },\n role: \"separator\",\n \"aria-label\": `Resize column ${columnKey}`,\n tabIndex: enabled ? 0 : -1,\n },\n };\n}\n\n/**\n * Hook to manage resize state for all columns\n */\nexport interface UseColumnResizeManagerOptions<T = any> {\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Current column widths */\n columnWidths: Record<string, number>;\n /** Whether resizing is enabled globally */\n resizableColumns: boolean;\n /** Callback when a column width changes */\n onColumnResize: (columnKey: string, width: number) => void;\n /** Callback when resize starts */\n onColumnResizeStart?: (columnKey: string) => void;\n /** Callback when resize ends */\n onColumnResizeEnd?: (columnKey: string, width: number) => void;\n}\n\nexport interface UseColumnResizeManagerReturn {\n /** Currently resizing column key */\n resizingColumn: string | null;\n /** Get resize props for a specific column */\n getResizeProps: (columnKey: string) => {\n isDragging: boolean;\n handleMouseDown: (event: React.MouseEvent) => void;\n handleDoubleClick: (event: React.MouseEvent) => void;\n };\n}\n\n/**\n * Hook to manage column resize state across all columns\n */\nexport function useColumnResizeManager<T = any>(\n options: UseColumnResizeManagerOptions<T>\n): UseColumnResizeManagerReturn {\n const {\n columns,\n columnWidths,\n resizableColumns,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n } = options;\n\n const [resizingColumn, setResizingColumn] = useState<string | null>(null);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n /**\n * Get column by key\n */\n const getColumn = useCallback(\n (columnKey: string): ColumnDef<T> | undefined => {\n return columns.find((c) => c.key === columnKey);\n },\n [columns]\n );\n\n /**\n * Clamp width for a specific column\n */\n const clampWidth = useCallback(\n (columnKey: string, width: number): number => {\n const column = getColumn(columnKey);\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column?.maxWidth ?? DEFAULT_MAX_WIDTH;\n return Math.max(minWidth, Math.min(maxWidth, width));\n },\n [getColumn]\n );\n\n /**\n * Handle mouse move during resize\n */\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!resizingColumn) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = clampWidth(\n resizingColumn,\n startWidthRef.current + deltaX\n );\n\n onColumnResize(resizingColumn, newWidth);\n },\n [resizingColumn, clampWidth, onColumnResize]\n );\n\n /**\n * Handle mouse up to end resize\n */\n const handleMouseUp = useCallback(() => {\n if (!resizingColumn) return;\n\n const finalWidth = columnWidths[resizingColumn] ?? 200;\n\n setResizingColumn(null);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n\n onColumnResizeEnd?.(resizingColumn, finalWidth);\n }, [resizingColumn, columnWidths, onColumnResizeEnd]);\n\n // Attach global listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [resizingColumn, handleMouseMove, handleMouseUp]);\n\n /**\n * Get resize props for a specific column\n */\n const getResizeProps = useCallback(\n (columnKey: string) => {\n const column = getColumn(columnKey);\n const isResizable =\n resizableColumns && (column?.resizable !== false);\n\n const handleMouseDown = (event: React.MouseEvent) => {\n if (!isResizable) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setResizingColumn(columnKey);\n startXRef.current = event.clientX;\n startWidthRef.current = columnWidths[columnKey] ?? column?.width ?? 200;\n\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n onColumnResizeStart?.(columnKey);\n };\n\n const handleDoubleClick = (event: React.MouseEvent) => {\n if (!isResizable) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Reset to default width\n const defaultWidth = column?.width ?? 200;\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column?.maxWidth ?? DEFAULT_MAX_WIDTH;\n const clampedWidth = Math.max(minWidth, Math.min(maxWidth, defaultWidth));\n\n onColumnResize(columnKey, clampedWidth);\n onColumnResizeEnd?.(columnKey, clampedWidth);\n };\n\n return {\n isDragging: resizingColumn === columnKey,\n handleMouseDown,\n handleDoubleClick,\n };\n },\n [\n getColumn,\n resizableColumns,\n columnWidths,\n resizingColumn,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n ]\n );\n\n return {\n resizingColumn,\n getResizeProps,\n };\n}\n","/**\n * Data Processing Utilities\n *\n * Functions for sorting and filtering data internally in uncontrolled mode.\n * Also exports helper functions for use in controlled mode.\n */\n\nimport type {\n ColumnDef,\n SortConfig,\n FilterConfig,\n FilterOperator,\n FilterType,\n CellValue,\n FilterValue,\n} from \"../types\";\n\n/**\n * Get a value from a row using column accessor or key\n */\nexport function getCellValue<T>(row: T, column: ColumnDef<T>): CellValue {\n if (column.accessor) {\n return column.accessor(row);\n }\n // Dynamic property access - row is expected to be an object with string keys\n return (row as Record<string, CellValue>)[column.key];\n}\n\n/**\n * Apply sorting to data\n */\nexport function applySorting<T>(\n data: T[],\n sorting: SortConfig[],\n columns: ColumnDef<T>[]\n): T[] {\n if (sorting.length === 0) return data;\n\n const result = [...data];\n\n // Apply sorts in order (primary, secondary, etc.)\n for (const sort of sorting) {\n const column = columns.find((c) => c.key === sort.field);\n if (!column) continue;\n\n result.sort((a, b) => {\n // Use custom comparator if provided\n if (column.sortComparator) {\n const cmp = column.sortComparator(a, b);\n return sort.direction === \"asc\" ? cmp : -cmp;\n }\n\n // Default comparison\n const aVal = getCellValue(a, column);\n const bVal = getCellValue(b, column);\n\n // Handle null/undefined\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return sort.direction === \"asc\" ? 1 : -1;\n if (bVal == null) return sort.direction === \"asc\" ? -1 : 1;\n\n // Compare based on type\n let comparison = 0;\n\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n comparison = aVal.localeCompare(bVal);\n } else if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n comparison = aVal - bVal;\n } else if (aVal instanceof Date && bVal instanceof Date) {\n comparison = aVal.getTime() - bVal.getTime();\n } else if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\n comparison = aVal === bVal ? 0 : aVal ? 1 : -1;\n } else {\n // Fallback: convert to string\n comparison = String(aVal).localeCompare(String(bVal));\n }\n\n return sort.direction === \"asc\" ? comparison : -comparison;\n });\n }\n\n return result;\n}\n\n/**\n * Extract a single CellValue from a FilterValue (handles arrays for single-value operations)\n */\nfunction extractSingleValue(filterValue: FilterValue): CellValue {\n if (Array.isArray(filterValue)) {\n return filterValue[0];\n }\n return filterValue;\n}\n\n/**\n * Parse a value as a Date, handling various input formats\n */\nfunction parseDate(value: CellValue): Date | null {\n if (value == null || value === \"\") return null;\n if (value instanceof Date) return value;\n if (typeof value === \"string\" || typeof value === \"number\") {\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n}\n\n/**\n * Compare two dates (ignoring time component for date-only comparisons)\n */\nfunction compareDates(date1: Date, date2: Date): number {\n // Normalize to start of day for comparison\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n}\n\n/**\n * Apply a single filter operator to a value.\n * Can be used in controlled mode to filter data with the same logic as internal filtering.\n * \n * @param value - The cell value to test\n * @param filterValue - The filter value to compare against\n * @param filterValueTo - Secondary value for 'between' operator\n * @param operator - The filter operator to apply\n * @param filterType - Optional filter type hint (text, number, date, boolean)\n * @returns true if the value passes the filter, false otherwise\n * \n * @example\n * // Using in controlled mode\n * const filteredData = data.filter(row => \n * applyFilterOperator(row.name, \"john\", undefined, \"contains\", \"text\")\n * );\n */\nexport function applyFilterOperator(\n value: CellValue,\n filterValue: FilterValue,\n filterValueTo: FilterValue,\n operator: FilterOperator,\n filterType?: string\n): boolean {\n // Handle isEmpty/isNotEmpty first (works for any type)\n if (operator === \"isEmpty\") {\n return value === \"\" || value == null;\n }\n if (operator === \"isNotEmpty\") {\n return value !== \"\" && value != null;\n }\n\n // Handle null/undefined values for other operators\n if (value == null) {\n return false;\n }\n\n // Date-specific operators\n if (filterType === \"date\" || operator === \"before\" || operator === \"after\") {\n const dateValue = parseDate(value);\n const dateFilterValue = parseDate(extractSingleValue(filterValue));\n const dateFilterValueTo = parseDate(extractSingleValue(filterValueTo));\n\n if (!dateValue) return false;\n\n switch (operator) {\n case \"equals\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) === 0 : false;\n case \"notEquals\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) !== 0 : false;\n case \"before\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) < 0 : false;\n case \"after\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) > 0 : false;\n case \"between\":\n if (!dateFilterValue || !dateFilterValueTo) return false;\n return (\n compareDates(dateValue, dateFilterValue) >= 0 &&\n compareDates(dateValue, dateFilterValueTo) <= 0\n );\n default:\n return true;\n }\n }\n\n // Number-specific operators\n if (filterType === \"number\" || [\"gt\", \"gte\", \"lt\", \"lte\", \"between\"].includes(operator)) {\n const numValue = Number(value);\n const singleFilterValue = extractSingleValue(filterValue);\n const numFilterValue = Number(singleFilterValue);\n \n if (isNaN(numValue)) return false;\n\n switch (operator) {\n case \"equals\":\n return numValue === numFilterValue;\n case \"notEquals\":\n return numValue !== numFilterValue;\n case \"gt\":\n return numValue > numFilterValue;\n case \"gte\":\n return numValue >= numFilterValue;\n case \"lt\":\n return numValue < numFilterValue;\n case \"lte\":\n return numValue <= numFilterValue;\n case \"between\":\n const singleFilterValueTo = extractSingleValue(filterValueTo);\n const numFilterValueTo = Number(singleFilterValueTo);\n return numValue >= numFilterValue && numValue <= numFilterValueTo;\n default:\n return true;\n }\n }\n\n // Boolean filter\n if (filterType === \"boolean\") {\n const boolValue = value === true || value === \"true\" || value === 1;\n const singleBoolFilterValue = extractSingleValue(filterValue);\n const boolFilterValue = singleBoolFilterValue === true || singleBoolFilterValue === \"true\" || singleBoolFilterValue === 1;\n return boolValue === boolFilterValue;\n }\n\n // Text/string operators (default)\n const strValue = String(value).toLowerCase();\n const singleStrFilterValue = extractSingleValue(filterValue);\n const strFilterValue = singleStrFilterValue != null ? String(singleStrFilterValue).toLowerCase() : \"\";\n\n switch (operator) {\n case \"contains\":\n return strValue.includes(strFilterValue);\n case \"notContains\":\n return !strValue.includes(strFilterValue);\n case \"equals\":\n return strValue === strFilterValue;\n case \"notEquals\":\n return strValue !== strFilterValue;\n case \"startsWith\":\n return strValue.startsWith(strFilterValue);\n case \"endsWith\":\n return strValue.endsWith(strFilterValue);\n default:\n return true;\n }\n}\n\n/**\n * Apply filters to data\n */\nexport function applyFilters<T>(\n data: T[],\n filters: FilterConfig[],\n columns: ColumnDef<T>[]\n): T[] {\n if (filters.length === 0) return data;\n\n return data.filter((row) => {\n // All filters must pass (AND logic)\n return filters.every((filter) => {\n const column = columns.find((c) => c.key === filter.columnKey);\n if (!column) return true;\n\n const value = getCellValue(row, column);\n\n // Use custom filter function if provided\n if (column.filterFn) {\n return column.filterFn(row, filter.value, filter.operator);\n }\n\n // Use default filter logic with filter type for better handling\n return applyFilterOperator(\n value,\n filter.value,\n filter.valueTo,\n filter.operator,\n column.filterType\n );\n });\n });\n}\n","/**\n * DataGrid Component\n *\n * A powerful, reusable grid component with:\n * - Virtualization for large datasets\n * - Resizable columns\n * - Sorting, filtering, and pagination\n * - Inline cell editing with validation\n * - Full keyboard navigation\n * - Controlled and uncontrolled state modes\n *\n * Built on @tanstack/react-virtual for performance.\n */\n\nimport * as React from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport {\n ChevronsLeft,\n ChevronLeft,\n ChevronRight,\n ChevronsRight,\n Search,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../button\";\nimport { Input } from \"../input\";\nimport { HeaderCell } from \"./components/HeaderCell\";\nimport { CellEditor } from \"./components/CellEditor\";\nimport { useDataGridState } from \"./hooks/useDataGridState\";\nimport { useKeyboardNavigation } from \"./hooks/useKeyboardNavigation\";\nimport { useColumnResizeManager } from \"./hooks/useColumnResize\";\nimport { applySorting, applyFilters, getCellValue as getCellValueUtil } from \"./utils/dataProcessing\";\nimport type {\n DataGridProps,\n ColumnDef,\n SortConfig,\n FilterConfig,\n CellPosition,\n CellValue,\n} from \"./types\";\n\n/**\n * Default row height for virtualization\n */\nconst DEFAULT_ROW_HEIGHT = 35;\n\n/**\n * Default overscan for virtualization\n */\nconst DEFAULT_OVERSCAN = 10;\n\n/**\n * Estimate minimum column width based on header text and features\n * Ensures columns are wide enough to show full header text\n */\nfunction estimateColumnWidth<T>(column: ColumnDef<T>): number {\n const headerText = typeof column.header === \"string\" ? column.header : \"\";\n // Base width: ~8px per character for the font size used\n const textWidth = headerText.length * 8;\n // Padding: 24px (px-3 = 12px on each side)\n const padding = 24;\n // Sort icon: ~20px if sortable\n const sortIconWidth = column.sortable ? 20 : 0;\n // Filter icon: ~28px if filterable (icon + some spacing)\n const filterIconWidth = column.filterable ? 28 : 0;\n // Resize handle area: ~16px if resizable (handled separately, but add small buffer)\n const resizeBuffer = 8;\n \n const estimatedWidth = textWidth + padding + sortIconWidth + filterIconWidth + resizeBuffer;\n \n // Minimum 80px, reasonable default max of 200px unless header is very long\n return Math.max(80, Math.min(estimatedWidth, 300));\n}\n\n/**\n * DataGrid Component\n */\nexport function DataGrid<T = Record<string, CellValue>>({\n // Data\n data,\n columns,\n getRowKey = (_, index) => String(index),\n\n // Feature toggles\n resizableColumns = false,\n virtualized,\n stickyHeader = true,\n showTooltips = true,\n tooltipMinLength = 30,\n enableKeyboardNavigation = true,\n showColumnBorders = true,\n enableInternalSorting = true,\n enableInternalFiltering = true,\n\n // Controlled sorting\n sorting: controlledSorting,\n onSortChange,\n\n // Controlled filtering\n filters: controlledFilters,\n onFilterChange,\n\n // Controlled column widths\n columnWidths: controlledColumnWidths,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n\n // Uncontrolled defaults\n defaultSorting,\n defaultFilters,\n defaultColumnWidths,\n\n // State change callback\n onStateChange,\n\n // Row interactions\n onRowClick,\n onRowDoubleClick,\n selectedRows = [],\n onSelectedRowsChange,\n rowClassName,\n\n // Cell editing\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n\n // Keyboard navigation\n focusedCell: controlledFocusedCell,\n onFocusedCellChange,\n\n // Pagination\n pagination,\n\n // Search\n search,\n\n // Loading & empty states\n loading = false,\n loadingComponent,\n emptyMessage = \"No data available\",\n emptyComponent,\n\n // Styling\n className,\n tableClassName,\n\n // Infinite scroll\n infiniteScroll = false,\n onLoadMore,\n hasMore = false,\n loadingMore = false,\n}: DataGridProps<T>) {\n const parentRef = React.useRef<HTMLDivElement>(null);\n const headerRef = React.useRef<HTMLDivElement>(null);\n const [headerHeight, setHeaderHeight] = React.useState(40);\n const [hoveredCell, setHoveredCell] = React.useState<{\n row: number;\n col: number;\n content: string;\n x: number;\n y: number;\n } | null>(null);\n\n // Filter visible columns\n const visibleColumns = React.useMemo(\n () => columns.filter((col) => !col.hidden),\n [columns]\n );\n\n // Get cell value helper\n const getCellValue = React.useCallback(\n (row: T, column: ColumnDef<T>): CellValue => {\n if (column.accessor) {\n return column.accessor(row);\n }\n // Dynamic property access - row is expected to be an object with string keys\n return (row as Record<string, CellValue>)[column.key];\n },\n []\n );\n\n // Use data grid state hook\n const { state, actions, isControlled } = useDataGridState({\n sorting: controlledSorting,\n filters: controlledFilters,\n columnWidths: controlledColumnWidths,\n focusedCell: controlledFocusedCell,\n defaultSorting,\n defaultFilters,\n defaultColumnWidths,\n onSortChange,\n onFilterChange,\n onColumnResize,\n onFocusedCellChange,\n onStateChange,\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n columns: visibleColumns,\n data,\n getCellValue,\n });\n\n // Process data with internal sorting/filtering (uncontrolled mode)\n const processedData = React.useMemo(() => {\n let result = data;\n\n // Apply internal filtering when not controlled\n if (enableInternalFiltering && !isControlled.filters && state.filters.length > 0) {\n result = applyFilters(result, state.filters, visibleColumns);\n }\n\n // Apply internal sorting when not controlled\n if (enableInternalSorting && !isControlled.sorting && state.sorting.length > 0) {\n result = applySorting(result, state.sorting, visibleColumns);\n }\n\n return result;\n }, [\n data,\n enableInternalFiltering,\n enableInternalSorting,\n isControlled.filters,\n isControlled.sorting,\n state.filters,\n state.sorting,\n visibleColumns,\n ]);\n\n // Use column resize manager\n const { resizingColumn, getResizeProps } = useColumnResizeManager({\n columns: visibleColumns,\n columnWidths: state.columnWidths,\n resizableColumns,\n onColumnResize: actions.setColumnWidth,\n onColumnResizeStart,\n onColumnResizeEnd,\n });\n\n // Auto-enable virtualization for large datasets\n const shouldVirtualize = virtualized ?? processedData.length > 100;\n\n // Measure header height for virtualization offset\n React.useLayoutEffect(() => {\n if (headerRef.current && shouldVirtualize) {\n setHeaderHeight(headerRef.current.offsetHeight);\n }\n }, [visibleColumns, shouldVirtualize]);\n\n // Virtualize rows\n const rowVirtualizer = useVirtualizer({\n count: processedData.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => DEFAULT_ROW_HEIGHT,\n overscan: DEFAULT_OVERSCAN,\n enabled: shouldVirtualize,\n });\n\n // Calculate table width - prefer explicit widths, fall back to estimated width from header\n const tableWidth = React.useMemo(() => {\n return visibleColumns.reduce((acc, col) => {\n const width = state.columnWidths[col.key] || col.width || estimateColumnWidth(col);\n return acc + width;\n }, 0);\n }, [visibleColumns, state.columnWidths]);\n\n // Get visible row count for keyboard navigation\n const visibleRowCount = React.useMemo(() => {\n if (!parentRef.current) return 10;\n return Math.floor(parentRef.current.clientHeight / DEFAULT_ROW_HEIGHT);\n }, []);\n\n // Use keyboard navigation hook\n const { handleKeyDown, containerRef, focusContainer } = useKeyboardNavigation({\n enabled: enableKeyboardNavigation,\n focusedCell: state.focusedCell,\n editingCell: state.editingCell,\n columns: visibleColumns,\n rowCount: processedData.length,\n visibleRowCount,\n onFocusedCellChange: actions.setFocusedCell,\n onStartEditing: actions.startEditing,\n onCommitEdit: actions.commitEdit,\n onCancelEdit: actions.cancelEdit,\n onScrollToRow: (rowIndex) => {\n rowVirtualizer.scrollToIndex(rowIndex, { align: \"auto\" });\n },\n });\n\n // Handle blur to clear selection when focus leaves the grid data area\n // This includes clicking the search bar, pagination, or anywhere outside\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n const target = event.target as HTMLElement;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // Helper to check if an element is part of the cell editing flow (Radix portals, etc.)\n const isEditingFlowElement = (el: HTMLElement | null): boolean => {\n if (!el) return false;\n return !!(\n el.closest(\"[data-radix-popper-content-wrapper]\") ||\n el.closest(\"[data-radix-select-viewport]\") ||\n el.closest(\"[data-radix-menu-content]\") ||\n el.closest(\"[role='dialog']\") ||\n el.closest(\"[data-cell-editor]\")\n );\n };\n\n // Helper to check if an element is inside the grid data area (rows/cells)\n const isInGridDataArea = (el: HTMLElement | null): boolean => {\n if (!el) return false;\n // Check if the element is a grid cell, or inside a row/cell\n return !!(\n el.closest(\"[role='gridcell']\") ||\n el.closest(\"[role='row']\") ||\n el.closest(\"[data-cell-editor]\")\n );\n };\n\n // If the blur originated from inside a cell editor, let the CellEditor's\n // own blur handler manage the commit - don't double-process\n if (target.closest(\"[data-cell-editor]\")) {\n // Clear focused cell if focus is moving outside the grid data area\n if (relatedTarget && !isInGridDataArea(relatedTarget) && !isEditingFlowElement(relatedTarget)) {\n setTimeout(() => {\n actions.setFocusedCell(null);\n }, 0);\n } else if (!relatedTarget) {\n // Focus moving to non-focusable element - check after timeout\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (!isInGridDataArea(activeElement) && !isEditingFlowElement(activeElement)) {\n actions.setFocusedCell(null);\n }\n }, 0);\n }\n return;\n }\n\n // If we're editing and focus is moving to another element\n if (state.editingCell && relatedTarget) {\n // If focus is moving to a Radix portal or cell editor, keep editing\n if (isEditingFlowElement(relatedTarget)) {\n return;\n }\n // Otherwise, commit the edit\n actions.commitEdit();\n // Clear focus if moving outside grid data area (e.g., search bar, pagination, outside)\n if (!isInGridDataArea(relatedTarget)) {\n actions.setFocusedCell(null);\n }\n return;\n }\n\n // Not editing - clear focused cell if focus moves outside the grid data area\n if (relatedTarget) {\n if (!isInGridDataArea(relatedTarget) && !isEditingFlowElement(relatedTarget)) {\n actions.setFocusedCell(null);\n }\n } else {\n // Focus is moving to nothing (e.g., clicking on non-focusable element)\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (isEditingFlowElement(activeElement)) {\n return;\n }\n if (!isInGridDataArea(activeElement)) {\n if (state.editingCell) {\n actions.commitEdit();\n }\n actions.setFocusedCell(null);\n }\n }, 0);\n }\n },\n [state.editingCell, actions]\n );\n\n // Handle infinite scroll\n React.useEffect(() => {\n if (!infiniteScroll || !hasMore || loadingMore || !parentRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n onLoadMore?.();\n }\n },\n { root: parentRef.current, threshold: 0.1 }\n );\n\n // Observe the last row\n const lastRow = parentRef.current.querySelector(\"[data-last-row]\");\n if (lastRow) {\n observer.observe(lastRow);\n }\n\n return () => observer.disconnect();\n }, [infiniteScroll, hasMore, loadingMore, onLoadMore, data.length]);\n\n // Get sort config for a column\n const getColumnSort = (columnKey: string): SortConfig | undefined => {\n return state.sorting.find((s) => s.field === columnKey);\n };\n\n // Get filter config for a column\n const getColumnFilter = (columnKey: string): FilterConfig | undefined => {\n return state.filters.find((f) => f.columnKey === columnKey);\n };\n\n // Handle header sort click\n const handleSort = (columnKey: string) => {\n actions.toggleSort(columnKey);\n };\n\n // Handle filter change\n const handleFilterChange = (\n columnKey: string,\n filter: FilterConfig | null\n ) => {\n actions.setFilter(filter, columnKey);\n };\n\n // Render cell content\n const renderCell = (\n row: T,\n column: ColumnDef<T>,\n rowIndex: number,\n isEditing: boolean\n ) => {\n // If editing this cell\n if (isEditing && state.editingCell) {\n return (\n <CellEditor\n column={column}\n value={state.editingCell.value}\n row={row}\n rowIndex={rowIndex}\n onCommit={actions.commitEdit}\n onCancel={actions.cancelEdit}\n onChange={actions.updateEditingValue}\n />\n );\n }\n\n // Custom cell renderer\n if (column.cell) {\n return column.cell(row, rowIndex);\n }\n\n // Default rendering\n const value = getCellValue(row, column);\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground italic\">NULL</span>;\n }\n return String(value);\n };\n\n // Loading state\n if (loading) {\n if (loadingComponent) {\n return <>{loadingComponent}</>;\n }\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full bg-muted/30\",\n className\n )}\n >\n <div className=\"text-muted-foreground\">Loading...</div>\n </div>\n );\n }\n\n // Empty state - but keep the search bar if it exists\n if (processedData.length === 0) {\n const emptyContent = emptyComponent ? (\n <>{emptyComponent}</>\n ) : (\n <div className=\"flex items-center justify-center flex-1 bg-muted/30\">\n <div className=\"text-muted-foreground text-sm\">{emptyMessage}</div>\n </div>\n );\n\n // If search is enabled, show the search bar with empty state below\n if (search) {\n return (\n <div className={cn(\"flex flex-col h-full w-full min-h-0\", className)}>\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n {emptyContent}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full bg-muted/30\",\n className\n )}\n >\n <div className=\"text-muted-foreground text-sm\">{emptyMessage}</div>\n </div>\n );\n }\n\n // Virtualized rendering\n if (shouldVirtualize) {\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={cn(\"flex flex-col h-full w-full min-h-0\", className)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n tabIndex={enableKeyboardNavigation ? 0 : -1}\n role=\"grid\"\n aria-rowcount={processedData.length}\n aria-colcount={visibleColumns.length}\n >\n {/* Search bar */}\n {search && (\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n )}\n\n <div\n ref={parentRef}\n className=\"flex-1 overflow-auto bg-background relative w-full min-h-0 max-h-full\"\n style={{ contain: \"strict\" }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() + headerHeight}px`,\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n position: \"relative\",\n minWidth: \"100%\",\n }}\n >\n {/* Sticky Header */}\n <div\n ref={headerRef}\n className={cn(\n \"sticky top-0 z-10 bg-muted border-b border-border\",\n stickyHeader && \"sticky\"\n )}\n style={{\n display: \"flex\",\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n }}\n role=\"row\"\n >\n {visibleColumns.map((column, colIndex) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const resizeProps = getResizeProps(column.key);\n\n return (\n <HeaderCell\n key={column.key}\n column={column}\n columnIndex={colIndex}\n width={width}\n sorting={getColumnSort(column.key)}\n filter={getColumnFilter(column.key)}\n isResizable={\n resizableColumns && column.resizable !== false\n }\n onSort={() => handleSort(column.key)}\n onFilterChange={(filter) =>\n handleFilterChange(column.key, filter)\n }\n onResizeMouseDown={resizeProps.handleMouseDown}\n onResizeDoubleClick={resizeProps.handleDoubleClick}\n isResizing={resizeProps.isDragging}\n />\n );\n })}\n </div>\n\n {/* Virtualized Rows */}\n {rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const row = processedData[virtualRow.index];\n const rowKey = getRowKey(row, virtualRow.index);\n const isSelected = selectedRows.includes(rowKey);\n const isLastRow = virtualRow.index === processedData.length - 1;\n\n return (\n <div\n key={virtualRow.key}\n data-last-row={isLastRow ? true : undefined}\n className={cn(\n \"absolute top-0 left-0 transition-colors border-b border-border\",\n onRowClick && \"cursor-pointer\",\n isSelected && \"bg-accent/20\",\n !isSelected && \"hover:bg-muted/50\",\n rowClassName && rowClassName(row, virtualRow.index)\n )}\n style={{\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start + headerHeight}px)`,\n display: \"flex\",\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n }}\n onClick={() => {\n onRowClick?.(row, virtualRow.index);\n if (enableKeyboardNavigation && visibleColumns.length > 0) {\n actions.setFocusedCell({\n rowIndex: virtualRow.index,\n columnKey: visibleColumns[0].key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={() =>\n onRowDoubleClick?.(row, virtualRow.index)\n }\n role=\"row\"\n aria-rowindex={virtualRow.index + 1}\n aria-selected={isSelected}\n >\n {visibleColumns.map((column, colIndex) => {\n const width =\n state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const isEditingThisCell =\n state.editingCell?.rowIndex === virtualRow.index &&\n state.editingCell?.columnKey === column.key;\n const isFocused =\n state.focusedCell?.rowIndex === virtualRow.index &&\n state.focusedCell?.columnKey === column.key;\n\n const cellContent = renderCell(\n row,\n column,\n virtualRow.index,\n isEditingThisCell\n );\n const cellValue =\n typeof cellContent === \"string\"\n ? cellContent\n : String(getCellValue(row, column) || \"\");\n const isLong =\n showTooltips && cellValue.length > tooltipMinLength;\n\n return (\n <div\n key={column.key}\n className={cn(\n \"flex-shrink-0 px-3 py-2 text-sm overflow-hidden\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\"\n )}\n style={{ width }}\n onMouseDown={(e) => {\n // Prevent cell from capturing mouse events when editing\n // This allows clicks on dropdowns, date pickers, etc. to work\n if (isEditingThisCell && e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n // Don't change focus if already editing this cell\n if (isEditingThisCell) return;\n if (enableKeyboardNavigation) {\n actions.setFocusedCell({\n rowIndex: virtualRow.index,\n columnKey: column.key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={(e) => {\n e.stopPropagation();\n // Don't re-trigger edit if already editing\n if (isEditingThisCell) return;\n if (column.editable && onCellEdit) {\n actions.startEditing(virtualRow.index, column.key);\n }\n }}\n onMouseEnter={(e) => {\n if (isLong && !isEditingThisCell) {\n const rect =\n e.currentTarget.getBoundingClientRect();\n setHoveredCell({\n row: virtualRow.index,\n col: colIndex,\n content: cellValue,\n x: rect.left,\n y: rect.bottom + 4,\n });\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n role=\"gridcell\"\n aria-colindex={colIndex + 1}\n tabIndex={-1}\n >\n <div className=\"truncate\">{cellContent}</div>\n </div>\n );\n })}\n </div>\n );\n })}\n\n {/* Infinite scroll loading indicator */}\n {infiniteScroll && loadingMore && (\n <div\n className=\"absolute bottom-0 left-0 right-0 flex items-center justify-center py-4 bg-background/80\"\n style={{\n transform: `translateY(${rowVirtualizer.getTotalSize() + headerHeight}px)`,\n }}\n >\n <div className=\"text-muted-foreground text-sm\">\n Loading more...\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Pagination */}\n {pagination && (\n <PaginationFooter pagination={pagination} />\n )}\n\n {/* Tooltip for long content */}\n {hoveredCell && (\n <div\n className=\"fixed z-[200] p-3 bg-popover text-popover-foreground border border-border rounded-md shadow-xl max-w-md break-words text-sm pointer-events-none\"\n style={{\n left: `${hoveredCell.x}px`,\n top: `${hoveredCell.y}px`,\n }}\n >\n <div className=\"whitespace-pre-wrap font-mono text-xs\">\n {hoveredCell.content}\n </div>\n </div>\n )}\n </div>\n );\n }\n\n // Non-virtualized rendering (standard table)\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={cn(\"flex flex-col h-full min-h-0\", className)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n tabIndex={enableKeyboardNavigation ? 0 : -1}\n role=\"grid\"\n aria-rowcount={processedData.length}\n aria-colcount={visibleColumns.length}\n >\n {/* Search bar */}\n {search && (\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-auto min-h-0\">\n {/* Header row using HeaderCell for consistent features */}\n <div\n className={cn(\n \"flex border-b border-border bg-muted\",\n stickyHeader && \"sticky top-0 z-10\"\n )}\n style={{ width: tableWidth ? `${tableWidth}px` : \"100%\" }}\n role=\"row\"\n >\n {visibleColumns.map((column, colIndex) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const resizeProps = getResizeProps(column.key);\n\n return (\n <HeaderCell\n key={column.key}\n column={column}\n columnIndex={colIndex}\n width={width}\n sorting={getColumnSort(column.key)}\n filter={getColumnFilter(column.key)}\n isResizable={resizableColumns && column.resizable !== false}\n onSort={() => handleSort(column.key)}\n onFilterChange={(filter) => handleFilterChange(column.key, filter)}\n onResizeMouseDown={resizeProps.handleMouseDown}\n onResizeDoubleClick={resizeProps.handleDoubleClick}\n isResizing={resizeProps.isDragging}\n />\n );\n })}\n </div>\n\n {/* Data rows */}\n {processedData.map((row, rowIndex) => {\n const rowKey = getRowKey(row, rowIndex);\n const isSelected = selectedRows.includes(rowKey);\n\n return (\n <div\n key={rowKey}\n className={cn(\n \"flex border-b border-border transition-colors\",\n onRowClick && \"cursor-pointer\",\n isSelected && \"bg-accent/20\",\n !isSelected && \"hover:bg-muted/50\",\n rowClassName && rowClassName(row, rowIndex)\n )}\n style={{ width: tableWidth ? `${tableWidth}px` : \"100%\" }}\n onClick={() => onRowClick?.(row, rowIndex)}\n onDoubleClick={() => onRowDoubleClick?.(row, rowIndex)}\n role=\"row\"\n >\n {visibleColumns.map((column) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const isEditingThisCell =\n state.editingCell?.rowIndex === rowIndex &&\n state.editingCell?.columnKey === column.key;\n const isFocused =\n state.focusedCell?.rowIndex === rowIndex &&\n state.focusedCell?.columnKey === column.key;\n\n return (\n <div\n key={column.key}\n className={cn(\n \"flex-shrink-0 px-3 py-2 text-sm overflow-hidden\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\"\n )}\n style={{ width }}\n onMouseDown={(e) => {\n // Prevent cell from capturing mouse events when editing\n // This allows clicks on dropdowns, date pickers, etc. to work\n if (isEditingThisCell && e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n // Don't change focus if already editing this cell\n if (isEditingThisCell) return;\n if (enableKeyboardNavigation) {\n actions.setFocusedCell({\n rowIndex,\n columnKey: column.key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={(e) => {\n e.stopPropagation();\n // Don't re-trigger edit if already editing\n if (isEditingThisCell) return;\n if (column.editable && onCellEdit) {\n actions.startEditing(rowIndex, column.key);\n }\n }}\n role=\"gridcell\"\n >\n {renderCell(row, column, rowIndex, isEditingThisCell)}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n\n {/* Pagination */}\n {pagination && (\n <PaginationFooter pagination={pagination} />\n )}\n </div>\n );\n}\n\n/**\n * Pagination Footer Component\n */\ninterface PaginationFooterProps {\n pagination: NonNullable<DataGridProps[\"pagination\"]>;\n}\n\nfunction PaginationFooter({ pagination }: PaginationFooterProps) {\n const [goToPage, setGoToPage] = React.useState(\"\");\n\n const handleGoToPage = () => {\n const page = parseInt(goToPage, 10);\n if (!isNaN(page) && page >= 1 && page <= pagination.totalPages) {\n pagination.onPageChange(page - 1);\n setGoToPage(\"\");\n }\n };\n\n return (\n <div className=\"flex-shrink-0 border-t border-border p-4 flex items-center justify-between bg-background\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Rows per page:</span>\n <select\n value={pagination.pageSize}\n onChange={(e) => pagination.onPageSizeChange(Number(e.target.value))}\n className=\"px-2 py-1 border border-border rounded bg-background text-foreground text-sm\"\n >\n {(pagination.pageSizeOptions || [15, 50, 100, 500]).map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-muted-foreground\">\n Page {pagination.currentPage + 1} of {pagination.totalPages}\n {pagination.totalItems && ` (${pagination.totalItems} total)`}\n </span>\n\n {/* Go to page input */}\n {pagination.showGoToPage && (\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={1}\n max={pagination.totalPages}\n value={goToPage}\n onChange={(e) => setGoToPage(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleGoToPage();\n }\n }}\n placeholder=\"Go to\"\n className=\"w-16 h-8 text-sm\"\n />\n <Button\n onClick={handleGoToPage}\n variant=\"outline\"\n size=\"sm\"\n disabled={!goToPage}\n >\n Go\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center gap-1\">\n <Button\n onClick={() => pagination.onPageChange(0)}\n disabled={pagination.currentPage === 0}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.currentPage - 1)}\n disabled={pagination.currentPage === 0}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.currentPage + 1)}\n disabled={pagination.currentPage >= pagination.totalPages - 1}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.totalPages - 1)}\n disabled={pagination.currentPage >= pagination.totalPages - 1}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nexport interface AutocompleteOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Optional description shown below the label */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Optional group/category for the option */\n group?: string;\n}\n\nexport interface AutocompleteProps {\n /** Array of options to display */\n options: AutocompleteOption[];\n /** Currently selected value */\n value?: string;\n /** Callback when selection changes */\n onChange?: (value: string | undefined) => void;\n /** Placeholder text when no selection */\n placeholder?: string;\n /** Placeholder for the search input */\n searchPlaceholder?: string;\n /** Text to show when no options match the search */\n emptyText?: string;\n /** Whether the autocomplete is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Whether to allow clearing the selection */\n clearable?: boolean;\n}\n\n/**\n * Autocomplete component - a searchable dropdown/select\n *\n * Features:\n * - Search filtering\n * - Grouped options support\n * - Clearable selection\n * - Keyboard navigation\n *\n * @example\n * <Autocomplete\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select a framework...\"\n * />\n */\nexport function Autocomplete({\n options,\n value,\n onChange,\n placeholder = \"Select an option...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = false,\n}: AutocompleteProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Find the selected option\n const selectedOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // Filter options based on search\n const filteredOptions = React.useMemo(() => {\n if (!search.trim()) return options;\n const searchLower = search.toLowerCase();\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [options, search]);\n\n // Group options if they have groups\n const groupedOptions = React.useMemo(() => {\n const groups: Record<string, AutocompleteOption[]> = {};\n const ungrouped: AutocompleteOption[] = [];\n\n filteredOptions.forEach((opt) => {\n if (opt.group) {\n if (!groups[opt.group]) groups[opt.group] = [];\n groups[opt.group].push(opt);\n } else {\n ungrouped.push(opt);\n }\n });\n\n return { groups, ungrouped };\n }, [filteredOptions]);\n\n const hasGroups = Object.keys(groupedOptions.groups).length > 0;\n\n // Handle selection\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n onChange?.(optionValue);\n setOpen(false);\n setSearch(\"\");\n },\n [onChange]\n );\n\n // Handle clear\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(undefined);\n setSearch(\"\");\n },\n [onChange]\n );\n\n // Focus input when popover opens\n React.useEffect(() => {\n if (open) {\n const timeout = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n return () => clearTimeout(timeout);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n }, []);\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground\",\n option.disabled && \"pointer-events-none opacity-50\",\n value === option.value && \"bg-accent/50\"\n )}\n >\n <span className=\"flex h-4 w-4 items-center justify-center flex-shrink-0 mt-0.5\">\n {value === option.value && <Check className=\"h-4 w-4\" />}\n </span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {option.description}\n </div>\n )}\n </div>\n </button>\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n className={cn(\n \"flex h-9 w-full items-center justify-between gap-2 whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !selectedOption && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate flex-1 text-left\">\n {selectedOption?.label || placeholder}\n </span>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && selectedOption && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n className=\"rounded-sm hover:bg-muted p-0.5\"\n >\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </span>\n )}\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </div>\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[--radix-popover-trigger-width] p-0\"\n align=\"start\"\n sideOffset={4}\n onKeyDown={handleKeyDown}\n >\n {/* Search input */}\n <div className=\"flex items-center border-b border-border px-3\">\n <input\n ref={inputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"p-1 hover:bg-muted rounded-sm\"\n >\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </button>\n )}\n </div>\n\n {/* Options list */}\n <div className=\"max-h-[300px] overflow-y-auto p-1\">\n {filteredOptions.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n ) : hasGroups ? (\n <>\n {/* Ungrouped options first */}\n {groupedOptions.ungrouped.map(renderOption)}\n\n {/* Grouped options */}\n {Object.entries(groupedOptions.groups).map(([group, opts]) => (\n <div key={group}>\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n {group}\n </div>\n {opts.map(renderOption)}\n </div>\n ))}\n </>\n ) : (\n filteredOptions.map(renderOption)\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport default Autocomplete;\n","/**\n * IconButton Component\n *\n * A consistent icon button primitive for toolbars and actions.\n * Features:\n * - Multiple size variants\n * - Multiple style variants\n * - Consistent hover states\n * - Theme-aware styling\n * - Optional active state\n */\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst iconButtonVariants = cva(\n // Base styles\n [\n \"inline-flex items-center justify-center\",\n \"rounded-md\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n /**\n * Default - subtle background with accent on hover\n */\n default: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"border border-transparent\",\n ],\n /**\n * Ghost - no background, accent on hover\n */\n ghost: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n ],\n /**\n * Outline - border with accent on hover\n */\n outline: [\n \"bg-transparent text-muted-foreground\",\n \"border border-border\",\n \"hover:bg-accent hover:text-accent-foreground hover:border-accent\",\n ],\n /**\n * Filled - accent background\n */\n filled: [\n \"bg-accent text-accent-foreground\",\n \"hover:bg-accent/90 hover:shadow-sm\",\n ],\n /**\n * Muted - muted background with accent on hover\n */\n muted: [\n \"bg-muted text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n ],\n },\n size: {\n /**\n * Small - 32px (8 × 4)\n */\n sm: \"h-8 w-8 [&_svg]:h-4 [&_svg]:w-4\",\n /**\n * Default - 36px (9 × 4)\n */\n default: \"h-9 w-9 [&_svg]:h-4.5 [&_svg]:w-4.5\",\n /**\n * Large - 40px (10 × 4)\n */\n lg: \"h-10 w-10 [&_svg]:h-5 [&_svg]:w-5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface IconButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButtonVariants> {\n /**\n * Whether the button is in an active/selected state\n */\n isActive?: boolean;\n /**\n * Icon element to display (typically from lucide-react)\n */\n icon?: React.ReactNode;\n /**\n * Accessibility label (required if no children)\n */\n \"aria-label\": string;\n}\n\n/**\n * IconButton component\n *\n * A versatile icon button for toolbars and action buttons.\n * Uses consistent hover states across all themes.\n *\n * @example\n * <IconButton\n * icon={<RefreshCw className=\"w-4 h-4\" />}\n * aria-label=\"Refresh\"\n * onClick={handleRefresh}\n * />\n *\n * @example With active state\n * <IconButton\n * icon={<Grid className=\"w-4 h-4\" />}\n * aria-label=\"Grid view\"\n * isActive={viewMode === 'grid'}\n * onClick={() => setViewMode('grid')}\n * />\n */\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n { className, variant, size, isActive = false, icon, children, ...props },\n ref\n ) => {\n return (\n <button\n className={cn(\n iconButtonVariants({ variant, size }),\n // Active state overrides\n isActive && [\n \"bg-accent text-accent-foreground\",\n // Add subtle shadow for visual feedback\n variant !== \"filled\" && \"shadow-sm\",\n ],\n className\n )}\n ref={ref}\n {...props}\n >\n {icon || children}\n </button>\n );\n }\n);\n\nIconButton.displayName = \"IconButton\";\n\nexport { IconButton, iconButtonVariants };\n","import * as React from \"react\";\nimport { Copy, Check } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface CopyButtonProps {\n /**\n * Content to copy to clipboard\n */\n content: string;\n\n /**\n * Additional class names\n */\n className?: string;\n\n /**\n * Size of the button\n */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * CopyButton component\n *\n * A button that copies content to clipboard and shows feedback.\n *\n * @example\n * <CopyButton content=\"Text to copy\" />\n *\n * @example\n * <div className=\"group relative\">\n * <pre>some code</pre>\n * <CopyButton content=\"some code\" className=\"absolute top-2 right-2\" />\n * </div>\n */\nexport function CopyButton({ content, className, size = \"md\" }: CopyButtonProps) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy text: \", err);\n }\n };\n\n const sizeClasses = {\n sm: \"w-6 h-6\",\n md: \"w-8 h-8\",\n lg: \"w-10 h-10\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n return (\n <button\n onClick={handleCopy}\n className={cn(\n \"inline-flex items-center justify-center\",\n \"bg-black/20 hover:bg-black/30\",\n \"text-white/80 hover:text-white\",\n \"rounded-md transition-all duration-200\",\n \"opacity-0 group-hover:opacity-100\",\n \"focus:opacity-100 focus:outline-none\",\n sizeClasses[size],\n className\n )}\n title={copied ? \"Copied!\" : \"Copy to clipboard\"}\n >\n {copied ? (\n <Check size={iconSizes[size]} />\n ) : (\n <Copy size={iconSizes[size]} />\n )}\n </button>\n );\n}\n","/**\n * Theme Presets\n *\n * Built-in theme definitions for opti-ui.\n * Ported from platform-leapfrog for consistent theming.\n */\n\nimport type { Theme } from \"./types\";\n\n/**\n * Green Theme - Alternative theme option\n */\nexport const GREEN_THEME: Theme = {\n id: \"green-theme\",\n name: \"Green Theme\",\n description: \"A green theme with natural, earthy tones\",\n author: \"Leapfrog\",\n background: \"#1a2820\",\n foreground: \"#E6F5EC\",\n card: \"#2d4038\",\n cardForeground: \"#E6F5EC\",\n popover: \"#243630\",\n popoverForeground: \"#E6F5EC\",\n primary: \"#6FCF97\",\n primaryForeground: \"#1a2820\",\n accent: \"#6FCF97\",\n accentForeground: \"#1a2820\",\n secondary: \"#1f3329\",\n secondaryForeground: \"#E6F5EC\",\n muted: \"#354840\",\n mutedForeground: \"#9DB8A8\",\n destructive: \"#EB5757\",\n destructiveForeground: \"#E6F5EC\",\n success: \"#6FCF97\",\n successForeground: \"#1a2820\",\n warning: \"#F2C94C\",\n warningForeground: \"#1a2820\",\n chip: \"#3a5045\",\n chipForeground: \"#C5E3D1\",\n border: \"#243630\",\n input: \"#243630\",\n ring: \"#6FCF97\",\n chart1: \"#6FCF97\",\n chart2: \"#8FE3B0\",\n chart3: \"#9DB8A8\",\n chart4: \"#2d4038\",\n chart5: \"#354840\",\n radius: \"0.5rem\",\n};\n\n/**\n * Optilogic Legacy Theme - Default theme\n */\nexport const OPTILOGIC_LEGACY_THEME: Theme = {\n id: \"optilogic-legacy\",\n name: \"Optilogic Legacy\",\n description: \"Classic Optilogic color scheme with blue accents\",\n author: \"Optilogic\",\n background: \"#FFFFFF\",\n foreground: \"#0C0A5A\",\n card: \"#F9F9F9\",\n cardForeground: \"#0C0A5A\",\n popover: \"#FFFFFF\",\n popoverForeground: \"#0C0A5A\",\n primary: \"#0C0A5A\",\n primaryForeground: \"#FFFFFF\",\n accent: \"#CFD4FB\",\n accentForeground: \"#0C0A5A\",\n secondary: \"#5766F2\",\n secondaryForeground: \"#FFFFFF\",\n muted: \"#E6EAF0\",\n mutedForeground: \"#737272\",\n destructive: \"#DB2828\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#44BD7E\",\n successForeground: \"#FFFFFF\",\n warning: \"#F5CF47\",\n warningForeground: \"#0C0A5A\",\n chip: \"#B8C5F9\",\n chipForeground: \"#0C0A5A\",\n border: \"#D0D0D0\",\n input: \"#FFFFFF\",\n ring: \"#5766F2\",\n chart1: \"#78D237\",\n chart2: \"#F5CF47\",\n chart3: \"#5766F2\",\n chart4: \"#44BD7E\",\n chart5: \"#929BEF\",\n radius: \"0.5rem\",\n};\n\n/**\n * Futuristic Theme - Neon cyberpunk aesthetic\n */\nexport const FUTURISTIC_THEME: Theme = {\n id: \"futuristic\",\n name: \"Futuristic\",\n description: \"Neon cyberpunk aesthetic with electric blues and purples\",\n author: \"Leapfrog\",\n background: \"#0a0e27\",\n foreground: \"#e0e7ff\",\n card: \"#1a1f3a\",\n cardForeground: \"#e0e7ff\",\n popover: \"#1a1f3a\",\n popoverForeground: \"#e0e7ff\",\n primary: \"#6366f1\",\n primaryForeground: \"#ffffff\",\n accent: \"#8b5cf6\",\n accentForeground: \"#ffffff\",\n secondary: \"#1e293b\",\n secondaryForeground: \"#e0e7ff\",\n muted: \"#1e293b\",\n mutedForeground: \"#94a3b8\",\n destructive: \"#ef4444\",\n destructiveForeground: \"#ffffff\",\n success: \"#10b981\",\n successForeground: \"#ffffff\",\n warning: \"#f59e0b\",\n warningForeground: \"#ffffff\",\n chip: \"#312e81\",\n chipForeground: \"#c7d2fe\",\n border: \"#1e293b\",\n input: \"#1e293b\",\n ring: \"#6366f1\",\n chart1: \"#6366f1\",\n chart2: \"#8b5cf6\",\n chart3: \"#a855f7\",\n chart4: \"#ec4899\",\n chart5: \"#f43f5e\",\n radius: \"0.5rem\",\n};\n\n/**\n * Nature Inspired Theme - Earthy greens and browns\n */\nexport const NATURE_THEME: Theme = {\n id: \"nature\",\n name: \"Nature Inspired\",\n description: \"Earthy greens and browns inspired by forests and meadows\",\n author: \"Leapfrog\",\n background: \"#1a2e1a\",\n foreground: \"#e8f5e9\",\n card: \"#2d4a2d\",\n cardForeground: \"#e8f5e9\",\n popover: \"#243824\",\n popoverForeground: \"#e8f5e9\",\n primary: \"#4caf50\",\n primaryForeground: \"#1a2e1a\",\n accent: \"#66bb6a\",\n accentForeground: \"#1a2e1a\",\n secondary: \"#2d4a2d\",\n secondaryForeground: \"#e8f5e9\",\n muted: \"#3d5a3d\",\n mutedForeground: \"#a5d6a7\",\n destructive: \"#e57373\",\n destructiveForeground: \"#ffffff\",\n success: \"#66bb6a\",\n successForeground: \"#1a2e1a\",\n warning: \"#ffb74d\",\n warningForeground: \"#1a2e1a\",\n chip: \"#3d5a3d\",\n chipForeground: \"#c8e6c9\",\n border: \"#243824\",\n input: \"#243824\",\n ring: \"#4caf50\",\n chart1: \"#4caf50\",\n chart2: \"#66bb6a\",\n chart3: \"#81c784\",\n chart4: \"#a5d6a7\",\n chart5: \"#c8e6c9\",\n radius: \"0.5rem\",\n};\n\n/**\n * Sci-Fi Theme - Deep space with vibrant accents\n */\nexport const SCIFI_THEME: Theme = {\n id: \"scifi\",\n name: \"Sci-Fi\",\n description: \"Deep space aesthetic with vibrant cyan and magenta accents\",\n author: \"Leapfrog\",\n background: \"#0d1117\",\n foreground: \"#c9d1d9\",\n card: \"#161b22\",\n cardForeground: \"#c9d1d9\",\n popover: \"#161b22\",\n popoverForeground: \"#c9d1d9\",\n primary: \"#00d9ff\",\n primaryForeground: \"#0d1117\",\n accent: \"#ff00ff\",\n accentForeground: \"#ffffff\",\n secondary: \"#1c2128\",\n secondaryForeground: \"#c9d1d9\",\n muted: \"#21262d\",\n mutedForeground: \"#8b949e\",\n destructive: \"#ff6b6b\",\n destructiveForeground: \"#ffffff\",\n success: \"#00ff88\",\n successForeground: \"#0d1117\",\n warning: \"#ffd93d\",\n warningForeground: \"#0d1117\",\n chip: \"#1c2128\",\n chipForeground: \"#58a6ff\",\n border: \"#30363d\",\n input: \"#21262d\",\n ring: \"#00d9ff\",\n chart1: \"#00d9ff\",\n chart2: \"#ff00ff\",\n chart3: \"#00ff88\",\n chart4: \"#ffd93d\",\n chart5: \"#58a6ff\",\n radius: \"0.5rem\",\n};\n\n/**\n * Ocean Theme - Calming blues and teals\n */\nexport const OCEAN_THEME: Theme = {\n id: \"ocean\",\n name: \"Ocean\",\n description: \"Calming blues and teals inspired by the deep sea\",\n author: \"Leapfrog\",\n background: \"#0a1929\",\n foreground: \"#e3f2fd\",\n card: \"#132f4c\",\n cardForeground: \"#e3f2fd\",\n popover: \"#0f2540\",\n popoverForeground: \"#e3f2fd\",\n primary: \"#2196f3\",\n primaryForeground: \"#ffffff\",\n accent: \"#00bcd4\",\n accentForeground: \"#0a1929\",\n secondary: \"#1565c0\",\n secondaryForeground: \"#ffffff\",\n muted: \"#1e3a5f\",\n mutedForeground: \"#90caf9\",\n destructive: \"#f44336\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#ff9800\",\n warningForeground: \"#ffffff\",\n chip: \"#1565c0\",\n chipForeground: \"#bbdefb\",\n border: \"#1e3a5f\",\n input: \"#1e3a5f\",\n ring: \"#2196f3\",\n chart1: \"#2196f3\",\n chart2: \"#00bcd4\",\n chart3: \"#03a9f4\",\n chart4: \"#0288d1\",\n chart5: \"#0277bd\",\n radius: \"0.5rem\",\n};\n\n/**\n * Sunset Theme - Warm oranges and purples\n */\nexport const SUNSET_THEME: Theme = {\n id: \"sunset\",\n name: \"Sunset\",\n description: \"Warm oranges and purples like a beautiful sunset\",\n author: \"Leapfrog\",\n background: \"#1a0d1a\",\n foreground: \"#ffe0e6\",\n card: \"#2d1a2d\",\n cardForeground: \"#ffe0e6\",\n popover: \"#241424\",\n popoverForeground: \"#ffe0e6\",\n primary: \"#ff6b35\",\n primaryForeground: \"#ffffff\",\n accent: \"#c44569\",\n accentForeground: \"#ffffff\",\n secondary: \"#f7931e\",\n secondaryForeground: \"#1a0d1a\",\n muted: \"#3d2a3d\",\n mutedForeground: \"#ffb3c1\",\n destructive: \"#e63946\",\n destructiveForeground: \"#ffffff\",\n success: \"#06d6a0\",\n successForeground: \"#1a0d1a\",\n warning: \"#ffb703\",\n warningForeground: \"#1a0d1a\",\n chip: \"#3d2a3d\",\n chipForeground: \"#ffb3c1\",\n border: \"#241424\",\n input: \"#241424\",\n ring: \"#ff6b35\",\n chart1: \"#ff6b35\",\n chart2: \"#c44569\",\n chart3: \"#f7931e\",\n chart4: \"#ffb703\",\n chart5: \"#ff8c42\",\n radius: \"0.5rem\",\n};\n\n/**\n * Forest Theme - Deep greens and browns\n */\nexport const FOREST_THEME: Theme = {\n id: \"forest\",\n name: \"Forest\",\n description: \"Deep greens and browns like an ancient forest\",\n author: \"Leapfrog\",\n background: \"#0d1b0d\",\n foreground: \"#e8f5e9\",\n card: \"#1a2e1a\",\n cardForeground: \"#e8f5e9\",\n popover: \"#152515\",\n popoverForeground: \"#e8f5e9\",\n primary: \"#2e7d32\",\n primaryForeground: \"#ffffff\",\n accent: \"#558b2f\",\n accentForeground: \"#ffffff\",\n secondary: \"#1b5e20\",\n secondaryForeground: \"#e8f5e9\",\n muted: \"#2d4a2d\",\n mutedForeground: \"#a5d6a7\",\n destructive: \"#c62828\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#f57c00\",\n warningForeground: \"#ffffff\",\n chip: \"#2d4a2d\",\n chipForeground: \"#c8e6c9\",\n border: \"#1b5e20\",\n input: \"#1a2e1a\",\n ring: \"#2e7d32\",\n chart1: \"#2e7d32\",\n chart2: \"#388e3c\",\n chart3: \"#43a047\",\n chart4: \"#66bb6a\",\n chart5: \"#81c784\",\n radius: \"0.5rem\",\n};\n\n/**\n * Cyberpunk Theme - Neon pinks and cyans\n */\nexport const CYBERPUNK_THEME: Theme = {\n id: \"cyberpunk\",\n name: \"Cyberpunk\",\n description: \"Neon pinks and cyans with high contrast\",\n author: \"Leapfrog\",\n background: \"#0a0a0f\",\n foreground: \"#f0f0f0\",\n card: \"#1a1a2e\",\n cardForeground: \"#f0f0f0\",\n popover: \"#16213e\",\n popoverForeground: \"#f0f0f0\",\n primary: \"#ff00ff\",\n primaryForeground: \"#ffffff\",\n accent: \"#00ffff\",\n accentForeground: \"#0a0a0f\",\n secondary: \"#16213e\",\n secondaryForeground: \"#f0f0f0\",\n muted: \"#1a1a2e\",\n mutedForeground: \"#a0a0a0\",\n destructive: \"#ff1744\",\n destructiveForeground: \"#ffffff\",\n success: \"#00ff88\",\n successForeground: \"#0a0a0f\",\n warning: \"#ffd700\",\n warningForeground: \"#0a0a0f\",\n chip: \"#16213e\",\n chipForeground: \"#ff00ff\",\n border: \"#1a1a2e\",\n input: \"#16213e\",\n ring: \"#ff00ff\",\n chart1: \"#ff00ff\",\n chart2: \"#00ffff\",\n chart3: \"#00ff88\",\n chart4: \"#ffd700\",\n chart5: \"#ff1744\",\n radius: \"0.5rem\",\n};\n\n/**\n * Minimalist Light Theme - Clean and simple\n */\nexport const MINIMALIST_LIGHT_THEME: Theme = {\n id: \"minimalist-light\",\n name: \"Minimalist Light\",\n description: \"Clean and simple light theme with subtle grays\",\n author: \"Leapfrog\",\n background: \"#ffffff\",\n foreground: \"#1a1a1a\",\n card: \"#f8f9fa\",\n cardForeground: \"#1a1a1a\",\n popover: \"#ffffff\",\n popoverForeground: \"#1a1a1a\",\n primary: \"#000000\",\n primaryForeground: \"#ffffff\",\n accent: \"#e9ecef\",\n accentForeground: \"#1a1a1a\",\n secondary: \"#f1f3f5\",\n secondaryForeground: \"#1a1a1a\",\n muted: \"#e9ecef\",\n mutedForeground: \"#6c757d\",\n destructive: \"#dc3545\",\n destructiveForeground: \"#ffffff\",\n success: \"#28a745\",\n successForeground: \"#ffffff\",\n warning: \"#ffc107\",\n warningForeground: \"#1a1a1a\",\n chip: \"#e9ecef\",\n chipForeground: \"#495057\",\n border: \"#dee2e6\",\n input: \"#ffffff\",\n ring: \"#000000\",\n chart1: \"#000000\",\n chart2: \"#6c757d\",\n chart3: \"#adb5bd\",\n chart4: \"#dee2e6\",\n chart5: \"#e9ecef\",\n radius: \"0.5rem\",\n};\n\n/**\n * Dark Elegant Theme - Sophisticated dark mode\n */\nexport const DARK_ELEGANT_THEME: Theme = {\n id: \"dark-elegant\",\n name: \"Dark Elegant\",\n description: \"Sophisticated dark mode with refined colors\",\n author: \"Leapfrog\",\n background: \"#121212\",\n foreground: \"#e0e0e0\",\n card: \"#1e1e1e\",\n cardForeground: \"#e0e0e0\",\n popover: \"#1e1e1e\",\n popoverForeground: \"#e0e0e0\",\n primary: \"#bb86fc\",\n primaryForeground: \"#121212\",\n accent: \"#03dac6\",\n accentForeground: \"#121212\",\n secondary: \"#2d2d2d\",\n secondaryForeground: \"#e0e0e0\",\n muted: \"#2d2d2d\",\n mutedForeground: \"#9e9e9e\",\n destructive: \"#cf6679\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#ff9800\",\n warningForeground: \"#ffffff\",\n chip: \"#2d2d2d\",\n chipForeground: \"#b39ddb\",\n border: \"#2d2d2d\",\n input: \"#1e1e1e\",\n ring: \"#bb86fc\",\n chart1: \"#bb86fc\",\n chart2: \"#03dac6\",\n chart3: \"#4caf50\",\n chart4: \"#ff9800\",\n chart5: \"#cf6679\",\n radius: \"0.5rem\",\n};\n\n/**\n * All available preset themes\n */\nexport const PRESET_THEMES: Theme[] = [OPTILOGIC_LEGACY_THEME];\n\n/**\n * All theme suggestions for preview\n */\nexport const ALL_THEMES: Theme[] = [\n OPTILOGIC_LEGACY_THEME,\n FUTURISTIC_THEME,\n NATURE_THEME,\n SCIFI_THEME,\n OCEAN_THEME,\n SUNSET_THEME,\n FOREST_THEME,\n CYBERPUNK_THEME,\n MINIMALIST_LIGHT_THEME,\n DARK_ELEGANT_THEME,\n GREEN_THEME,\n];\n\n/**\n * Get a preset theme by ID\n */\nexport function getPresetTheme(id: string): Theme | undefined {\n return ALL_THEMES.find((theme) => theme.id === id);\n}\n\n/**\n * Get the default theme (fallback)\n */\nexport function getDefaultTheme(): Theme {\n return OPTILOGIC_LEGACY_THEME;\n}\n\n/**\n * Check if a theme is a preset (not user-created)\n */\nexport function isPresetTheme(themeId: string): boolean {\n return ALL_THEMES.some((theme) => theme.id === themeId);\n}\n","/**\n * Theme Utilities\n *\n * Functions for theme conversion and application.\n * Ported from platform-leapfrog for consistent theming.\n */\n\nimport type { Theme, ThemeHSL } from \"./types\";\nimport { getDefaultTheme } from \"./presets\";\n\n// Re-export for convenience\nexport type { Theme };\n\n/**\n * Convert hex color to HSL format for CSS variables\n */\nexport function hexToHsl(hex: string): string {\n // Remove # if present\n hex = hex.replace(/^#/, \"\");\n\n // Parse hex values\n const r = parseInt(hex.substring(0, 2), 16) / 255;\n const g = parseInt(hex.substring(2, 4), 16) / 255;\n const b = parseInt(hex.substring(4, 6), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n // Convert to degrees and percentages\n const hDeg = Math.round(h * 360);\n const sPercent = Math.round(s * 100);\n const lPercent = Math.round(l * 100);\n\n return `${hDeg} ${sPercent}% ${lPercent}%`;\n}\n\n/**\n * Convert hex theme to HSL theme\n */\nexport function themeToHsl(theme: Theme): ThemeHSL {\n return {\n ...theme,\n background: hexToHsl(theme.background),\n foreground: hexToHsl(theme.foreground),\n card: hexToHsl(theme.card),\n cardForeground: hexToHsl(theme.cardForeground),\n popover: hexToHsl(theme.popover),\n popoverForeground: hexToHsl(theme.popoverForeground),\n primary: hexToHsl(theme.primary),\n primaryForeground: hexToHsl(theme.primaryForeground),\n accent: hexToHsl(theme.accent),\n accentForeground: hexToHsl(theme.accentForeground),\n secondary: hexToHsl(theme.secondary),\n secondaryForeground: hexToHsl(theme.secondaryForeground),\n muted: hexToHsl(theme.muted),\n mutedForeground: hexToHsl(theme.mutedForeground),\n destructive: hexToHsl(theme.destructive),\n destructiveForeground: hexToHsl(theme.destructiveForeground),\n success: hexToHsl(theme.success),\n successForeground: hexToHsl(theme.successForeground),\n warning: hexToHsl(theme.warning),\n warningForeground: hexToHsl(theme.warningForeground),\n chip: hexToHsl(theme.chip),\n chipForeground: hexToHsl(theme.chipForeground),\n border: hexToHsl(theme.border),\n input: hexToHsl(theme.input),\n ring: hexToHsl(theme.ring),\n chart1: hexToHsl(theme.chart1),\n chart2: hexToHsl(theme.chart2),\n chart3: hexToHsl(theme.chart3),\n chart4: hexToHsl(theme.chart4),\n chart5: hexToHsl(theme.chart5),\n };\n}\n\n/**\n * Apply a theme to the DOM\n *\n * @param theme - The theme to apply\n * @param targetElement - Optional element to apply theme to (defaults to document.documentElement)\n */\nexport function applyTheme(theme: Theme, targetElement?: HTMLElement): void {\n const element = targetElement || document.documentElement;\n const hslTheme = themeToHsl(theme);\n\n // Set CSS variables as inline styles\n element.style.setProperty(\"--background\", hslTheme.background);\n element.style.setProperty(\"--foreground\", hslTheme.foreground);\n element.style.setProperty(\"--card\", hslTheme.card);\n element.style.setProperty(\"--card-foreground\", hslTheme.cardForeground);\n element.style.setProperty(\"--popover\", hslTheme.popover);\n element.style.setProperty(\"--popover-foreground\", hslTheme.popoverForeground);\n element.style.setProperty(\"--primary\", hslTheme.primary);\n element.style.setProperty(\"--primary-foreground\", hslTheme.primaryForeground);\n element.style.setProperty(\"--accent\", hslTheme.accent);\n element.style.setProperty(\"--accent-foreground\", hslTheme.accentForeground);\n element.style.setProperty(\"--secondary\", hslTheme.secondary);\n element.style.setProperty(\n \"--secondary-foreground\",\n hslTheme.secondaryForeground\n );\n element.style.setProperty(\"--muted\", hslTheme.muted);\n element.style.setProperty(\"--muted-foreground\", hslTheme.mutedForeground);\n element.style.setProperty(\"--destructive\", hslTheme.destructive);\n element.style.setProperty(\n \"--destructive-foreground\",\n hslTheme.destructiveForeground\n );\n element.style.setProperty(\"--success\", hslTheme.success);\n element.style.setProperty(\"--success-foreground\", hslTheme.successForeground);\n element.style.setProperty(\"--warning\", hslTheme.warning);\n element.style.setProperty(\"--warning-foreground\", hslTheme.warningForeground);\n element.style.setProperty(\"--chip\", hslTheme.chip);\n element.style.setProperty(\"--chip-foreground\", hslTheme.chipForeground);\n element.style.setProperty(\"--border\", hslTheme.border);\n element.style.setProperty(\"--input\", hslTheme.input);\n element.style.setProperty(\"--ring\", hslTheme.ring);\n element.style.setProperty(\"--chart-1\", hslTheme.chart1);\n element.style.setProperty(\"--chart-2\", hslTheme.chart2);\n element.style.setProperty(\"--chart-3\", hslTheme.chart3);\n element.style.setProperty(\"--chart-4\", hslTheme.chart4);\n element.style.setProperty(\"--chart-5\", hslTheme.chart5);\n\n if (theme.radius) {\n element.style.setProperty(\"--radius\", theme.radius);\n }\n}\n\n/**\n * Get the currently active theme (uses default)\n */\nexport function getCurrentTheme(): Theme {\n return getDefaultTheme();\n}\n\n/**\n * Validate theme object structure\n */\nexport function validateTheme(theme: unknown): theme is Theme {\n if (!theme || typeof theme !== \"object\") return false;\n\n const t = theme as Record<string, unknown>;\n\n // Check required fields\n const requiredFields: string[] = [\n \"id\",\n \"name\",\n \"background\",\n \"foreground\",\n \"card\",\n \"cardForeground\",\n \"popover\",\n \"popoverForeground\",\n \"primary\",\n \"primaryForeground\",\n \"accent\",\n \"accentForeground\",\n \"secondary\",\n \"secondaryForeground\",\n \"muted\",\n \"mutedForeground\",\n \"destructive\",\n \"destructiveForeground\",\n \"success\",\n \"successForeground\",\n \"warning\",\n \"warningForeground\",\n \"chip\",\n \"chipForeground\",\n \"border\",\n \"input\",\n \"ring\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n ];\n\n for (const field of requiredFields) {\n if (!(field in t)) {\n console.error(`Theme validation failed: missing field \"${field}\"`);\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Clone a theme (for editing)\n */\nexport function cloneTheme(theme: Theme, newName?: string): Theme {\n return {\n ...theme,\n id: `custom-${Date.now()}`,\n name: newName || `${theme.name} - copy`,\n author: \"Custom\",\n };\n}\n\n/**\n * Deep comparison of two themes\n */\nexport function areThemesEqual(theme1: Theme, theme2: Theme): boolean {\n if (!theme1 || !theme2) return false;\n\n if (theme1.name !== theme2.name) return false;\n if (theme1.description !== theme2.description) return false;\n\n const colorFields: (keyof Theme)[] = [\n \"background\",\n \"foreground\",\n \"card\",\n \"cardForeground\",\n \"popover\",\n \"popoverForeground\",\n \"primary\",\n \"primaryForeground\",\n \"accent\",\n \"accentForeground\",\n \"secondary\",\n \"secondaryForeground\",\n \"muted\",\n \"mutedForeground\",\n \"destructive\",\n \"destructiveForeground\",\n \"success\",\n \"successForeground\",\n \"warning\",\n \"warningForeground\",\n \"chip\",\n \"chipForeground\",\n \"border\",\n \"input\",\n \"ring\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n ];\n\n for (const field of colorFields) {\n if (theme1[field] !== theme2[field]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Export theme as JSON string\n */\nexport function exportTheme(theme: Theme): string {\n return JSON.stringify(theme, null, 2);\n}\n\n/**\n * Import theme from JSON string\n */\nexport function importTheme(jsonString: string): {\n success: boolean;\n theme?: Theme;\n error?: string;\n} {\n try {\n const theme = JSON.parse(jsonString);\n\n if (!validateTheme(theme)) {\n return {\n success: false,\n error:\n \"Invalid theme format. Please check that all required fields are present.\",\n };\n }\n\n return {\n success: true,\n theme,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Failed to parse JSON\",\n };\n }\n}\n","/**\n * ThemePicker Component\n *\n * A polished theme selection component built with library primitives.\n * Features:\n * - Visual theme swatches showing color palette preview\n * - Popover-based selection dropdown\n * - Current theme indicator\n * - Keyboard accessible\n * - Smooth theme transitions\n */\n\nimport * as React from \"react\";\nimport { Palette, Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\nimport { IconButton } from \"./icon-button\";\nimport { Button } from \"./button\";\nimport { Tooltip } from \"./tooltip\";\nimport { ALL_THEMES, applyTheme, type Theme } from \"../theme\";\n\nexport interface ThemePickerProps {\n /** Currently selected theme (controlled) */\n value?: Theme;\n /** Callback when theme changes */\n onValueChange?: (theme: Theme) => void;\n /** Available themes to choose from */\n themes?: Theme[];\n /** Trigger style variant */\n triggerVariant?: \"icon\" | \"button\";\n /** Size of the trigger */\n triggerSize?: \"sm\" | \"default\" | \"lg\";\n /** Whether to apply the theme to the DOM when selected */\n applyOnSelect?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Alignment of the popover */\n align?: \"start\" | \"center\" | \"end\";\n /** Side of the popover */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\n/**\n * Theme swatch component showing a preview of theme colors\n */\ninterface ThemeSwatchProps {\n theme: Theme;\n isSelected: boolean;\n onClick: () => void;\n}\n\nfunction ThemeSwatch({ theme, isSelected, onClick }: ThemeSwatchProps) {\n return (\n <Tooltip\n content={\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{theme.name}</p>\n {theme.description && (\n <p className=\"text-xs text-muted-foreground\">{theme.description}</p>\n )}\n </div>\n }\n position=\"bottom\"\n delayDuration={300}\n >\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"relative flex flex-col items-center gap-1.5 p-2 rounded-lg transition-all\",\n \"hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-accent ring-2 ring-primary\"\n )}\n >\n <div\n className=\"relative w-12 h-8 rounded-md overflow-hidden border border-border shadow-sm\"\n style={{ backgroundColor: theme.background }}\n >\n <div\n className=\"absolute bottom-0 left-0 right-0 h-2\"\n style={{ backgroundColor: theme.primary }}\n />\n <div\n className=\"absolute top-1 right-1 w-2 h-2 rounded-full\"\n style={{ backgroundColor: theme.accent }}\n />\n <div\n className=\"absolute top-1 left-1 w-4 h-1 rounded-full\"\n style={{ backgroundColor: theme.foreground }}\n />\n </div>\n \n <span className=\"text-xs font-medium text-foreground truncate max-w-[60px]\">\n {theme.name.split(\" \")[0]}\n </span>\n \n {isSelected && (\n <div className=\"absolute -top-1 -right-1 w-4 h-4 bg-primary rounded-full flex items-center justify-center\">\n <Check className=\"w-2.5 h-2.5 text-primary-foreground\" />\n </div>\n )}\n </button>\n </Tooltip>\n );\n}\n\n/**\n * ThemePicker Component\n *\n * A theme selection dropdown that displays available themes as visual swatches.\n *\n * @example Basic usage\n * ```tsx\n * <ThemePicker onValueChange={(theme) => console.log(theme)} />\n * ```\n *\n * @example Controlled with custom themes\n * ```tsx\n * const [theme, setTheme] = useState(OPTILOGIC_LEGACY_THEME);\n * <ThemePicker\n * value={theme}\n * onValueChange={setTheme}\n * themes={[OPTILOGIC_LEGACY_THEME, DARK_ELEGANT_THEME]}\n * />\n * ```\n */\nexport function ThemePicker({\n value,\n onValueChange,\n themes = ALL_THEMES,\n triggerVariant = \"icon\",\n triggerSize = \"default\",\n applyOnSelect = true,\n className,\n align = \"end\",\n side = \"bottom\",\n}: ThemePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [selectedTheme, setSelectedTheme] = React.useState<Theme | undefined>(\n value || themes[0]\n );\n\n React.useEffect(() => {\n if (value) {\n setSelectedTheme(value);\n }\n }, [value]);\n\n const handleThemeSelect = (theme: Theme) => {\n setSelectedTheme(theme);\n \n if (applyOnSelect) {\n applyTheme(theme);\n }\n \n onValueChange?.(theme);\n setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) return;\n\n const currentIndex = themes.findIndex((t) => t.id === selectedTheme?.id);\n \n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n e.preventDefault();\n const nextIndex = (currentIndex + 1) % themes.length;\n handleThemeSelect(themes[nextIndex]);\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n e.preventDefault();\n const prevIndex = currentIndex <= 0 ? themes.length - 1 : currentIndex - 1;\n handleThemeSelect(themes[prevIndex]);\n break;\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n {triggerVariant === \"icon\" ? (\n <IconButton\n variant=\"ghost\"\n size={triggerSize}\n aria-label=\"Select theme\"\n className={className}\n >\n <Palette className=\"w-4 h-4\" />\n </IconButton>\n ) : (\n <Button\n variant=\"outline\"\n size={triggerSize === \"lg\" ? \"default\" : triggerSize}\n className={cn(\"gap-2\", className)}\n >\n <Palette className=\"w-4 h-4\" />\n <span>{selectedTheme?.name || \"Theme\"}</span>\n </Button>\n )}\n </PopoverTrigger>\n \n <PopoverContent\n align={align}\n side={side}\n className=\"w-auto p-3\"\n onKeyDown={handleKeyDown}\n >\n <div className=\"space-y-3\">\n <div className=\"px-1\">\n <h4 className=\"text-sm font-medium\">Select Theme</h4>\n <p className=\"text-xs text-muted-foreground\">\n Choose a color theme for the interface\n </p>\n </div>\n \n <div className=\"grid grid-cols-4 gap-1\">\n {themes.map((theme) => (\n <ThemeSwatch\n key={theme.id}\n theme={theme}\n isSelected={selectedTheme?.id === theme.id}\n onClick={() => handleThemeSelect(theme)}\n />\n ))}\n </div>\n \n {selectedTheme && (\n <div className=\"pt-2 border-t border-border\">\n <div className=\"flex items-center gap-2 px-1\">\n <div\n className=\"w-4 h-4 rounded-full border border-border\"\n style={{ backgroundColor: selectedTheme.primary }}\n />\n <span className=\"text-sm font-medium\">{selectedTheme.name}</span>\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","/**\n * ContextMenu Component\n *\n * Unified context menu primitive with support for:\n * - Icons\n * - Keyboard shortcuts\n * - Nested submenus\n * - Dividers\n * - Destructive actions\n * - Disabled states\n */\n\nimport * as React from \"react\";\nimport { ChevronRight, type LucideIcon } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Context menu item definition\n */\nexport interface ContextMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon component */\n icon?: LucideIcon;\n /** Click handler (ignored if has submenu) */\n action?: () => void;\n /** Keyboard shortcut display text */\n shortcut?: string;\n /** Whether item is disabled */\n disabled?: boolean;\n /** Whether to show as destructive/danger action */\n destructive?: boolean;\n /** Show divider line after this item */\n divider?: boolean;\n /** Nested submenu items */\n submenu?: ContextMenuItem[];\n}\n\nexport interface ContextMenuProps {\n /** Menu items */\n items: ContextMenuItem[];\n /** Whether menu is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Menu position (x, y) */\n position: { x: number; y: number };\n /** Anchor element (alternative to position) */\n anchorEl?: HTMLElement | null;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Calculate safe menu position to keep it within viewport\n */\nfunction getSafePosition(\n x: number,\n y: number,\n menuWidth: number,\n menuHeight: number\n): { x: number; y: number } {\n const padding = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let safeX = x;\n let safeY = y;\n\n if (x + menuWidth > viewportWidth - padding) {\n safeX = viewportWidth - menuWidth - padding;\n }\n if (safeX < padding) {\n safeX = padding;\n }\n\n if (y + menuHeight > viewportHeight - padding) {\n safeY = viewportHeight - menuHeight - padding;\n }\n if (safeY < padding) {\n safeY = padding;\n }\n\n return { x: safeX, y: safeY };\n}\n\n/**\n * Individual menu item component with submenu support\n */\ninterface MenuItemProps {\n item: ContextMenuItem;\n onClose: () => void;\n depth?: number;\n}\n\nfunction MenuItem({ item, onClose, depth = 0 }: MenuItemProps) {\n const [isSubmenuOpen, setIsSubmenuOpen] = React.useState(false);\n const [submenuPosition, setSubmenuPosition] = React.useState<{\n x: number;\n y: number;\n } | null>(null);\n const itemRef = React.useRef<HTMLButtonElement>(null);\n const hoverTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const hasSubmenu = item.submenu && item.submenu.length > 0;\n\n React.useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n };\n }, []);\n\n const handleMouseEnter = React.useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n\n if (hasSubmenu && itemRef.current) {\n const rect = itemRef.current.getBoundingClientRect();\n const submenuWidth = 200;\n const submenuHeight = (item.submenu?.length || 0) * 40;\n\n const spaceOnRight = window.innerWidth - rect.right;\n const posX =\n spaceOnRight > submenuWidth\n ? rect.right - 4\n : rect.left - submenuWidth + 4;\n\n const { x, y } = getSafePosition(\n posX,\n rect.top,\n submenuWidth,\n submenuHeight\n );\n setSubmenuPosition({ x, y });\n setIsSubmenuOpen(true);\n }\n }, [hasSubmenu, item.submenu?.length]);\n\n const handleMouseLeave = React.useCallback(() => {\n hoverTimeoutRef.current = setTimeout(() => {\n setIsSubmenuOpen(false);\n }, 100);\n }, []);\n\n const handleSubmenuMouseEnter = React.useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n }, []);\n\n const handleSubmenuMouseLeave = React.useCallback(() => {\n hoverTimeoutRef.current = setTimeout(() => {\n setIsSubmenuOpen(false);\n }, 100);\n }, []);\n\n const handleClick = React.useCallback(() => {\n if (item.disabled) return;\n\n if (!hasSubmenu && item.action) {\n item.action();\n onClose();\n }\n }, [item, hasSubmenu, onClose]);\n\n if (item.divider && !item.label) {\n return <div className=\"my-1 h-px bg-border\" />;\n }\n\n return (\n <div className=\"relative\" onMouseLeave={handleMouseLeave}>\n <button\n ref={itemRef}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n disabled={item.disabled}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 text-sm rounded-sm\",\n \"transition-colors text-left\",\n \"focus:outline-none focus:bg-accent focus:text-accent-foreground\",\n item.disabled\n ? \"opacity-50 cursor-not-allowed text-muted-foreground\"\n : \"hover:bg-accent hover:text-accent-foreground cursor-pointer\",\n item.destructive &&\n !item.disabled &&\n \"text-destructive hover:text-destructive\"\n )}\n >\n {item.icon && (\n <item.icon\n className={cn(\n \"w-4 h-4 flex-shrink-0\",\n item.destructive && !item.disabled && \"text-destructive\"\n )}\n />\n )}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.shortcut && (\n <span className=\"ml-auto text-xs text-muted-foreground opacity-60\">\n {item.shortcut}\n </span>\n )}\n {hasSubmenu && (\n <ChevronRight className=\"w-4 h-4 flex-shrink-0 ml-2 text-muted-foreground\" />\n )}\n </button>\n\n {item.divider && <div className=\"my-1 h-px bg-border\" />}\n\n {hasSubmenu && isSubmenuOpen && submenuPosition && (\n <div\n className={cn(\n \"fixed z-[60] min-w-[180px] max-w-[280px]\",\n \"rounded-md border border-border\",\n \"bg-popover text-popover-foreground\",\n \"shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"p-1\"\n )}\n style={{\n left: `${submenuPosition.x}px`,\n top: `${submenuPosition.y}px`,\n }}\n onMouseEnter={handleSubmenuMouseEnter}\n onMouseLeave={handleSubmenuMouseLeave}\n >\n {item.submenu!.map((subItem) => (\n <MenuItem\n key={subItem.id}\n item={subItem}\n onClose={onClose}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * ContextMenu component\n *\n * A unified context menu with support for icons, shortcuts, submenus, and more.\n *\n * @example\n * const { isOpen, position, openMenu, closeMenu } = useContextMenu();\n *\n * <div onContextMenu={(e) => {\n * e.preventDefault();\n * openMenu(e.clientX, e.clientY, item);\n * }}>\n * Right click me\n * </div>\n *\n * <ContextMenu\n * isOpen={isOpen}\n * position={position}\n * onClose={closeMenu}\n * items={[\n * { id: 'edit', label: 'Edit', icon: Edit, action: handleEdit },\n * { id: 'delete', label: 'Delete', icon: Trash, destructive: true, action: handleDelete },\n * ]}\n * />\n */\nexport function ContextMenu({\n items,\n isOpen,\n onClose,\n position,\n anchorEl,\n className,\n}: ContextMenuProps) {\n const menuRef = React.useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = React.useState<{ x: number; y: number }>({\n x: 0,\n y: 0,\n });\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n let x = position.x;\n let y = position.y;\n\n if (anchorEl) {\n const rect = anchorEl.getBoundingClientRect();\n x = rect.left;\n y = rect.bottom + 4;\n }\n\n requestAnimationFrame(() => {\n if (menuRef.current) {\n const menuRect = menuRef.current.getBoundingClientRect();\n const safePos = getSafePosition(x, y, menuRect.width, menuRect.height);\n setMenuPosition(safePos);\n } else {\n setMenuPosition({ x, y });\n }\n });\n }, [isOpen, position, anchorEl]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={menuRef}\n className={cn(\n \"fixed z-50 min-w-[180px] max-w-[280px]\",\n \"rounded-md border border-border\",\n \"bg-popover text-popover-foreground\",\n \"shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"p-1\",\n className\n )}\n style={{\n left: `${menuPosition.x}px`,\n top: `${menuPosition.y}px`,\n }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n >\n {items.map((item) => (\n <MenuItem key={item.id} item={item} onClose={onClose} />\n ))}\n </div>\n );\n}\n\n/**\n * Hook to manage context menu state\n */\nexport interface UseContextMenuResult<T = unknown> {\n /** Whether menu is open */\n isOpen: boolean;\n /** Menu position */\n position: { x: number; y: number };\n /** Target item that was right-clicked */\n targetItem: T | null;\n /** Ref for the menu element */\n menuRef: React.RefObject<HTMLDivElement>;\n /** Open the context menu */\n openMenu: (x: number, y: number, item: T) => void;\n /** Close the context menu */\n closeMenu: () => void;\n}\n\nexport function useContextMenu<T = unknown>(): UseContextMenuResult<T> {\n const [isOpen, setIsOpen] = React.useState(false);\n const [position, setPosition] = React.useState({ x: 0, y: 0 });\n const [targetItem, setTargetItem] = React.useState<T | null>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n const openMenu = React.useCallback((x: number, y: number, item: T) => {\n setPosition({ x, y });\n setTargetItem(item);\n setIsOpen(true);\n }, []);\n\n const closeMenu = React.useCallback(() => {\n setIsOpen(false);\n setTargetItem(null);\n }, []);\n\n return {\n isOpen,\n position,\n targetItem,\n menuRef,\n openMenu,\n closeMenu,\n };\n}\n\nexport default ContextMenu;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/components/button.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/textarea.tsx","../src/components/badge.tsx","../src/components/checkbox.tsx","../src/components/switch.tsx","../src/components/progress.tsx","../src/components/separator.tsx","../src/components/skeleton.tsx","../src/components/select.tsx","../src/components/tabs.tsx","../src/components/accordion.tsx","../src/components/tooltip.tsx","../src/components/popover.tsx","../src/components/dropdown-menu.tsx","../src/components/alert-dialog.tsx","../src/components/card.tsx","../src/components/board.tsx","../src/components/table.tsx","../src/components/modal.tsx","../src/components/confirmation-modal.tsx","../src/components/resize-handle.tsx","../src/components/resizable-panel.tsx","../src/components/chip.tsx","../src/components/loading-spinner.tsx","../src/components/toaster.tsx","../src/components/calendar.tsx","../src/components/date-picker.tsx","../src/components/data-grid/components/FilterPopover.tsx","../src/components/data-grid/components/HeaderCell.tsx","../src/components/data-grid/components/CellEditor.tsx","../src/components/data-grid/hooks/useDataGridState.ts","../src/components/data-grid/hooks/useKeyboardNavigation.ts","../src/components/data-grid/hooks/useColumnResize.ts","../src/components/data-grid/utils/dataProcessing.ts","../src/components/data-grid/DataGrid.tsx","../src/components/autocomplete.tsx","../src/components/icon-button.tsx","../src/components/copy-button.tsx","../src/theme/presets.ts","../src/theme/utils.ts","../src/components/theme-picker.tsx","../src/components/context-menu.tsx"],"names":["React","React2","jsx","cva","React3","React4","React5","React6","React7","React8","React9","Check","React10","React11","jsxs","ChevronDown","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","React23","Sonner","React24","Icon","ChevronRight","React25","CalendarIcon","X","React26","isValid","format","React27","ChevronUp","React28","parseISO","getCellValue","useMemo","useState","useRef","useEffect","useCallback","React29","Fragment","ChevronLeft","React30","React31","React32","React33"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACHA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,6EAAA;AAAA,QACF,OAAA,EAAS,yDAAA;AAAA,QACT,WAAA,EACE,8FAAA;AAAA,QACF,OAAA,EACE,0FAAA;AAAA,QACF,SAAA,EACE,wEAAA;AAAA,QACF,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,eAAA;AAAA,QACT,EAAA,EAAI,6BAAA;AAAA,QACJ,EAAA,EAAI,sBAAA;AAAA,QACJ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AA+BA,IAAM,MAAA,GAAeA,OAAA,CAAA,UAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,UAAU,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAChE,IAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC,CAAA;AAAA,QAC1D,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AC5DrB,IAAM,KAAA,GAAcC,OAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACEC,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,yWAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;AC/BpB,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EACpB;AACF;AAgBA,IAAM,KAAA,GAAcC,mBAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BF,GAAAA;AAAA,EAAgB,cAAA,CAAA,IAAA;AAAA,EAAf;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,aAAA,EAAc,EAAG,SAAS,CAAA;AAAA,IACvC,GAAG;AAAA;AACN,CACD;AACD,KAAA,CAAM,cAA6B,cAAA,CAAA,IAAA,CAAK,WAAA;ACfxC,IAAM,QAAA,GAAiBG,OAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACEH,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,2QAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;ACzBvB,IAAM,aAAA,GAAgBC,GAAAA;AAAA,EACpB,mKAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,kFAAA;AAAA,QACF,SAAA,EACE,iFAAA;AAAA,QACF,WAAA,EACE,8FAAA;AAAA,QACF,OAAA,EAAS,iBAAA;AAAA,QACT,OAAA,EACE,kFAAA;AAAA,QACF,OAAA,EACE,kFAAA;AAAA,QACF,KAAA,EACE,qEAAA;AAAA,QACF,MAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAqBA,SAAS,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,GAAG,OAAM,EAAe;AAC3D,EAAA,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE1E;AC/BA,IAAM,QAAA,GAAiBI,OAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CJ,GAAAA;AAAA,EAAmB,iBAAA,CAAA,IAAA;AAAA,EAAlB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA;AAAA,MAET,yCAAA;AAAA,MACA,oBAAA;AAAA,MACA,gCAAA;AAAA;AAAA,MAEA,0IAAA;AAAA;AAAA,MAEA,iDAAA;AAAA;AAAA,MAEA,UAAA,GACI;AAAA;AAAA,QAEE,+BAAA;AAAA;AAAA,QAEA,4BAAA;AAAA;AAAA,QAEA;AAAA,OACF,GACA;AAAA;AAAA,QAEE,2BAAA;AAAA;AAAA,QAEA;AAAA,OACF;AAAA,MACJ;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA;AAAA,MAAmB,iBAAA,CAAA,SAAA;AAAA,MAAlB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,2BAAA;AAAA;AAAA,UAEA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,wBAAA,EAAyB;AAAA;AAAA;AAC5C;AACF,CACD;AACD,QAAA,CAAS,cAAgC,iBAAA,CAAA,IAAA,CAAK,WAAA;ACrD9C,IAAM,MAAA,GAAeK,mBAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BL,GAAAA;AAAA,EAAiB,eAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,SAAA,EAAW,EAAA;AAAA;AAAA,MAET,+DAAA;AAAA,MACA,0CAAA;AAAA,MACA,mBAAA;AAAA;AAAA,MAEA,0IAAA;AAAA;AAAA,MAEA,iDAAA;AAAA;AAAA,MAEA,UAAA;AAAA;AAAA,MAEA,iCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAA;AAAA,IAEA,QAAA,kBAAAA,GAAAA;AAAA,MAAiB,eAAA,CAAA,KAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA;AAAA,UAET,gDAAA;AAAA,UACA,gCAAA;AAAA,UACA,sBAAA;AAAA;AAAA,UAEA;AAAA;AACF;AAAA;AACF;AACF,CACD;AACD,MAAA,CAAO,cAA8B,eAAA,CAAA,IAAA,CAAK,WAAA;ACpC1C,IAAM,QAAA,GAAiBM,OAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCN,GAAAA;AAAA,EAAmB,iBAAA,CAAA,IAAA;AAAA,EAAlB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA;AAAA,MAAmB,iBAAA,CAAA,SAAA;AAAA,MAAlB;AAAA,QACC,SAAA,EAAU,gDAAA;AAAA,QACV,OAAO,EAAE,SAAA,EAAW,eAAe,GAAA,IAAO,KAAA,IAAS,EAAE,CAAA,EAAA,CAAA;AAAK;AAAA;AAC5D;AACF,CACD;AACD,QAAA,CAAS,cAAgC,iBAAA,CAAA,IAAA,CAAK,WAAA;ACZ9C,IAAM,SAAA,GAAkBO,OAAA,CAAA,UAAA;AAAA,EAItB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEAP,GAAAA;AAAA,IAAoB,kBAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACC,GAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,oBAAA;AAAA,QACA,WAAA,KAAgB,eAAe,gBAAA,GAAmB,gBAAA;AAAA,QAClD;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,cAAiC,kBAAA,CAAA,IAAA,CAAK,WAAA;ACpBhD,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkB;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,MAChE,GAAG;AAAA;AAAA,GACN;AAEJ;AC5BA,IAAM,MAAA,GAAyB,eAAA,CAAA;AAE/B,IAAM,WAAA,GAA8B,eAAA,CAAA;AAEpC,IAAM,WAAA,GAA8B,eAAA,CAAA;AAKpC,IAAM,aAAA,GAAsBQ,mBAG1B,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,IAAA;AAAA,EAAiB,eAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gUAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDR,GAAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,CAAA,EAC9C;AAAA;AAAA;AACF,CACD;AACD,aAAA,CAAc,cAA8B,eAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,oBAAA,GAA6BQ,mBAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,GAAAA;AAAA,EAAiB,eAAA,CAAA,cAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AACjC,CACD;AACD,oBAAA,CAAqB,cAA8B,eAAA,CAAA,cAAA,CAAe,WAAA;AAElE,IAAM,sBAAA,GAA+BQ,mBAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,GAAAA;AAAA,EAAiB,eAAA,CAAA,gBAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AACnC,CACD;AACD,sBAAA,CAAuB,cACL,eAAA,CAAA,gBAAA,CAAiB,WAAA;AAEnC,IAAM,aAAA,GAAsBQ,OAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,WAAW,QAAA,EAAU,QAAA,GAAW,QAAA,EAAU,GAAG,OAAM,EAAG,GAAA,qBACzDR,GAAAA,CAAiB,wBAAhB,EACC,QAAA,kBAAA,IAAA;AAAA,EAAiB,eAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,+iBAAA;AAAA,MACA,aAAa,QAAA,IACX,iIAAA;AAAA,MACF;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAA,IAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,sBACtBA,GAAAA;AAAA,QAAiB,eAAA,CAAA,QAAA;AAAA,QAAhB;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,KAAA;AAAA,YACA,aAAa,QAAA,IACX;AAAA,WACJ;AAAA,UAEC;AAAA;AAAA,OACH;AAAA,sBACAA,IAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAC1B,CAAA,EACF,CACD;AACD,aAAA,CAAc,cAA8B,eAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,WAAA,GAAoBQ,mBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,GAAAA;AAAA,EAAiB,eAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,IAC3D,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA8B,eAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,UAAA,GAAmBQ,mBAGvB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,IAAA;AAAA,EAAiB,eAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,2NAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAR,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACd,0BAAAA,GAAAA,CAAiB,eAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAA,IAACS,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,sBACAT,GAAAA,CAAiB,eAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AACtC,CACD;AACD,UAAA,CAAW,cAA8B,eAAA,CAAA,IAAA,CAAK,WAAA;AAE9C,IAAM,eAAA,GAAwBQ,mBAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,GAAAA;AAAA,EAAiB,eAAA,CAAA,SAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,eAAA,CAAgB,cAA8B,eAAA,CAAA,SAAA,CAAU,WAAA;AC9HxD,IAAM,IAAA,GAAqB,aAAA,CAAA;AAO3B,IAAM,QAAA,GAAiBU,mBAGrB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,GAAAA;AAAA,EAAe,aAAA,CAAA,IAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,6CAAA;AAAA,MACA,wBAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,QAAA,CAAS,cAA4B,aAAA,CAAA,IAAA,CAAK,WAAA;AAO1C,IAAM,WAAA,GAAoBU,mBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,GAAAA;AAAA,EAAe,aAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA;AAAA,MAET,2DAAA;AAAA,MACA,iCAAA;AAAA,MACA,mBAAA;AAAA;AAAA,MAEA,mBAAA;AAAA;AAAA,MAEA,0CAAA;AAAA;AAAA,MAEA,wDAAA;AAAA;AAAA,MAEA,2EAAA;AAAA;AAAA,MAEA,qGAAA;AAAA;AAAA,MAEA,kDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4B,aAAA,CAAA,OAAA,CAAQ,WAAA;AAOhD,IAAM,WAAA,GAAoBU,mBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BV,GAAAA;AAAA,EAAe,aAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,MAAA;AAAA;AAAA,MAEA,qGAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4B,aAAA,CAAA,OAAA,CAAQ,WAAA;ACxFhD,IAAM,qBAAA,GAAwBC,IAAI,EAAA,EAAI;AAAA,EACpC,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,wBAAA;AAAA,MACT,QAAA,EACE,gEAAA;AAAA,MACF,IAAA,EAAM,kFAAA;AAAA,MACN,MAAA,EAAQ,uDAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAED,IAAM,wBAAA,GAA2BA,GAAAA;AAAA;AAAA,EAE/B;AAAA,IACE,mEAAA;AAAA,IACA,gBAAA;AAAA,IACA,qGAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,0BAAA;AAAA,QACT,QAAA,EAAU,wBAAA;AAAA,QACV,IAAA,EAAM,wBAAA;AAAA,QACN,MAAA,EAAQ,qBAAA;AAAA,QACR,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,wBAAA,GAA2BA,GAAAA;AAAA,EAC/B,CAAC,2BAA2B,mFAAmF,CAAA;AAAA,EAC/G;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,EAAA;AAAA,QACT,QAAA,EAAU,EAAA;AAAA,QACV,IAAA,EAAM,EAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,6BAAA,GAAgCA,IAAI,WAAA,EAAa;AAAA,EACrD,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAeD,IAAM,SAAA,GAA+B,kBAAA,CAAA;AAcrC,IAAM,aAAA,GAAsBU,OAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnCX,GAAAA;AAAA,EAAoB,kBAAA,CAAA,IAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,qBAAA,CAAsB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IAC3D,gBAAc,OAAA,IAAW,SAAA;AAAA,IACxB,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAa5B,IAAM,mBAAyBW,OAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,UAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,wBAC7CX,GAAAA,CAAoB,2BAAnB,EAA0B,SAAA,EAAU,QACnC,QAAA,kBAAAY,IAAAA;AAAA,EAAoB,kBAAA,CAAA,OAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,wBAAA,CAAyB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IAC7D,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDZ,GAAAA,CAACa,WAAAA,EAAA,EAAY,WAAU,0EAAA,EAA2E;AAAA;AAAA;AACpG,CAAA,EACF,CACD;AACD,gBAAA,CAAiB,cAAiC,kBAAA,CAAA,OAAA,CAAQ,WAAA;AAY1D,IAAM,gBAAA,GAAyBF,OAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CX,GAAAA;AAAA,EAAoB,kBAAA,CAAA,OAAA;AAAA,EAAnB;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,wBAAA,CAAyB,EAAE,OAAA,EAAS,CAAC,CAAA;AAAA,IAClD,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,6BAAA,CAA8B,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EACrE,QAAA,EACH;AAAA;AACF,CACD;AACD,gBAAA,CAAiB,cAAiC,kBAAA,CAAA,OAAA,CAAQ,WAAA;AC3J1D,IAAM,eAAA,GAAmC,gBAAA,CAAA;AAKzC,IAAM,WAAA,GAA+B,gBAAA,CAAA;AAKrC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAKxC,IAAM,aAAA,GAAiC,gBAAA,CAAA;AAKvC,IAAM,cAAA,GAAuBc,OAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1Cd,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA;AAAA,MAET,2BAAA;AAAA,MACA,0BAAA;AAAA;AAAA,MAEA,oCAAA;AAAA,MACA,sBAAA;AAAA;AAAA,MAEA,qBAAA;AAAA;AAAA,MAEA,WAAA;AAAA;AAAA,MAEA,iCAAA;AAAA,MACA,gGAAA;AAAA,MACA,wCAAA;AAAA,MACA,wCAAA;AAAA,MACA,wCAAA;AAAA,MACA,wCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA;AAKtD,IAAM,YAAA,GAAqBc,mBAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bd,GAAAA;AAAA,EAAkB,gBAAA,CAAA,KAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,IACtC,GAAG;AAAA;AACN,CACD;AACD,YAAA,CAAa,cAA+B,gBAAA,CAAA,KAAA,CAAM,WAAA;AAqElD,SAAS,OAAA,CAAQ;AAAA,EACf,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,aAAA,GAAgB,GAAA;AAAA,EAChB,UAAA,GAAa,CAAA;AAAA,EACb,QAAA,GAAW,GAAA;AAAA,EACX,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAiB;AAEf,EAAA,IAAI,CAAC,WAAW,QAAA,EAAU;AACxB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,uBACEA,IAAkB,gBAAA,CAAA,QAAA,EAAjB,EAA0B,eACzB,QAAA,kBAAAY,IAAAA,CAAkB,uBAAjB,EACC,QAAA,EAAA;AAAA,oBAAAZ,GAAAA,CAAkB,gBAAA,CAAA,OAAA,EAAjB,EAAyB,OAAA,EAAO,MAAE,QAAA,EAAS,CAAA;AAAA,oBAC5CA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,QAAA;AAAA,QACN,UAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA,EAAK;AAAA,QAElC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACnLA,IAAM,OAAA,GAA2B,gBAAA,CAAA;AAKjC,IAAM,cAAA,GAAkC,gBAAA,CAAA;AAKxC,IAAM,aAAA,GAAiC,gBAAA,CAAA;AAkBvC,IAAM,iBAAuBe,OAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,OAAM,EAAG,GAAA,qBAC5Df,GAAAA,CAAkB,gBAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,yGAAA;AAAA;AAAA,MAEA,8DAAA;AAAA,MACA,4DAAA;AAAA,MACA,8DAAA;AAAA,MACA,+EAAA;AAAA,MACA,+EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,cAAA,CAAe,cAA+B,gBAAA,CAAA,OAAA,CAAQ,WAAA;ACrDtD,IAAM,YAAA,GAAqC,qBAAA,CAAA;AAE3C,IAAM,mBAAA,GAA4C,qBAAA,CAAA;AAElD,IAAM,iBAAA,GAA0C,qBAAA,CAAA;AAEhD,IAAM,kBAAA,GAA2C,qBAAA,CAAA;AAEjD,IAAM,eAAA,GAAwC,qBAAA,CAAA;AAE9C,IAAM,sBAAA,GAA+C,qBAAA,CAAA;AAOrD,IAAM,sBAAA,GAA+BgB,OAAA,CAAA,UAAA,CAGnC,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3CJ,IAAAA;AAAA,EAAuB,qBAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,0FAAA;AAAA,MACA,iBAAA;AAAA,MACA,6BAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDZ,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,iBAAA,EAAkB;AAAA;AAAA;AAC5C,CACD;AACD,sBAAA,CAAuB,cACC,qBAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,sBAAA,GAA+BgB,mBAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhB,GAAAA;AAAA,EAAuB,qBAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,oHAAA;AAAA,MACA,8DAAA;AAAA,MACA,4DAAA;AAAA,MACA,8DAAA;AAAA,MACA,+EAAA;AAAA,MACA,+EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,sBAAA,CAAuB,cACC,qBAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,mBAAA,GAA4BgB,OAAA,CAAA,UAAA,CAGhC,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1ChB,GAAAA,CAAuB,qBAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA;AAAA,EAAuB,qBAAA,CAAA,OAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,oHAAA;AAAA,MACA,8DAAA;AAAA,MACA,4DAAA;AAAA,MACA,8DAAA;AAAA,MACA,+EAAA;AAAA,MACA,+EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD;AACD,mBAAA,CAAoB,cAAoC,qBAAA,CAAA,OAAA,CAAQ,WAAA;AAQhE,IAAM,gBAAA,GAAyBgB,OAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC9ChB,GAAAA;AAAA,EAAuB,qBAAA,CAAA,IAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qHAAA;AAAA,MACA,8CAAA;AAAA,MACA,gEAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT,WAAA,IAAe,yCAAA;AAAA,MACf;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,cAAoC,qBAAA,CAAA,IAAA,CAAK,WAAA;AAE1D,IAAM,wBAAA,GAAiCgB,OAAA,CAAA,UAAA,CAGrC,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CJ,IAAAA;AAAA,EAAuB,qBAAA,CAAA,YAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,0HAAA;AAAA,MACA,8CAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,IAACS,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,wBAAA,CAAyB,cACD,qBAAA,CAAA,YAAA,CAAa,WAAA;AAErC,IAAM,qBAAA,GAA8BO,OAAA,CAAA,UAAA,CAGlC,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCJ,IAAAA;AAAA,EAAuB,qBAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,0HAAA;AAAA,MACA,8CAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,GAAAA,CAAuB,qBAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,sBAAA,EAAuB,GAC3C,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,qBAAA,CAAsB,cAAoC,qBAAA,CAAA,SAAA,CAAU,WAAA;AAOpE,IAAM,iBAAA,GAA0BgB,OAAA,CAAA,UAAA,CAG9B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjChB,GAAAA;AAAA,EAAuB,qBAAA,CAAA,KAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mCAAA;AAAA,MACA,KAAA,IAAS,MAAA;AAAA,MACT;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAAoC,qBAAA,CAAA,KAAA,CAAM,WAAA;AAE5D,IAAM,qBAAA,GAA8BgB,mBAGlC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhB,GAAAA;AAAA,EAAuB,qBAAA,CAAA,SAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,IACnD,GAAG;AAAA;AACN,CACD;AACD,qBAAA,CAAsB,cAAoC,qBAAA,CAAA,SAAA,CAAU,WAAA;AAKpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAiC;AAC/B,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,MACpE,GAAG;AAAA;AAAA,GACN;AAEJ;AACA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AC7MnC,IAAM,WAAA,GAAmC,oBAAA,CAAA;AAEzC,IAAM,kBAAA,GAA0C,oBAAA,CAAA;AAEhD,IAAM,iBAAA,GAAyC,oBAAA,CAAA;AAE/C,IAAM,kBAAA,GAA2BiB,mBAG/B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BjB,GAAAA;AAAA,EAAsB,oBAAA,CAAA,OAAA;AAAA,EAArB;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,gCAAA;AAAA,MACA,8DAAA;AAAA,MACA,4DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ;AAAA;AACF,CACD;AACD,kBAAA,CAAmB,cAAmC,oBAAA,CAAA,OAAA,CAAQ,WAAA;AAE9D,IAAM,kBAAA,GAA2BiB,OAAA,CAAA,UAAA,CAG/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BL,IAAAA,CAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAZ,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,kBACpBA,GAAAA;AAAA,IAAsB,oBAAA,CAAA,OAAA;AAAA,IAArB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gKAAA;AAAA,QACA,8DAAA;AAAA,QACA,4DAAA;AAAA,QACA,8DAAA;AAAA,QACA,sFAAA;AAAA,QACA,oFAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AACN,CAAA,EACF,CACD;AACD,kBAAA,CAAmB,cAAmC,oBAAA,CAAA,OAAA,CAAQ,WAAA;AAK9D,IAAM,oBAAoB,CAAC,EAAE,WAAW,GAAG,KAAA,uBACzCA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,kDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAKhC,IAAM,oBAAoB,CAAC,EAAE,WAAW,GAAG,KAAA,uBACzCA,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,+DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEhC,IAAM,gBAAA,GAAyBiB,mBAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BjB,GAAAA;AAAA,EAAsB,oBAAA,CAAA,KAAA;AAAA,EAArB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,IAC/C,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,cAAmC,oBAAA,CAAA,KAAA,CAAM,WAAA;AAE1D,IAAM,sBAAA,GAA+BiB,mBAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BjB,GAAAA;AAAA,EAAsB,oBAAA,CAAA,WAAA;AAAA,EAArB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,sBAAA,CAAuB,cACA,oBAAA,CAAA,WAAA,CAAY,WAAA;AAEnC,IAAM,iBAAA,GAA0BiB,mBAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BjB,GAAAA;AAAA,EAAsB,oBAAA,CAAA,MAAA;AAAA,EAArB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,cAAA,EAAe,EAAG,SAAS,CAAA;AAAA,IACxC,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAAmC,oBAAA,CAAA,MAAA,CAAO,WAAA;AAE5D,IAAM,iBAAA,GAA0BiB,mBAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BjB,GAAAA;AAAA,EAAsB,oBAAA,CAAA,MAAA;AAAA,EAArB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,SAAA,EAAW,CAAA,EAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,IAC9E,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,cAAmC,oBAAA,CAAA,MAAA,CAAO,WAAA;AClH5D,IAAM,YAAA,GAAeC,GAAAA;AAAA,EACnB,uDAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,MAIR,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,EAAA;AAAA,QACN,EAAA,EAAI,MAAA;AAAA,QACJ,EAAA,EAAI,MAAA;AAAA,QACJ,EAAA,EAAI,MAAA;AAAA,QACJ,EAAA,EAAI,WAAA;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA;AAAA;AAAA;AAAA,MAIA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,EAAA;AAAA,QACN,IAAA,EAAM,kEAAA;AAAA,QACN,IAAA,EAAM,uEAAA;AAAA,QACN,MAAA,EAAQ,oDAAA;AAAA,QACR,gBAAA,EAAkB,qDAAA;AAAA,QAClB,gBAAA,EAAkB,qDAAA;AAAA,QAClB,oBAAA,EAAsB,yDAAA;AAAA,QACtB,cAAA,EAAgB,8DAAA;AAAA,QAChB,KAAA,EAAO;AAAA,OACT;AAAA;AAAA;AAAA;AAAA,MAIA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,oHAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA;AAAA;AAAA;AAAA,MAIA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,EAAA;AAAA,QACN,EAAA,EAAI,wCAAA;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,WAAA,EAAa,KAAA;AAAA,MACb,OAAA,EAAS;AAAA;AACX;AAEJ;AA0CA,IAAM,IAAA,GAAaiB,OAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,aAAA,GAAgB,WAAA,IAAe,QAAA,IAAY,CAAC,CAAC,OAAA;AAEnD,IAAA,MAAM,aAAA,GAAsBA,OAAA,CAAA,WAAA;AAAA,MAC1B,CAAC,CAAA,KAA2C;AAC1C,QAAA,IAAI,kBAAkB,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,CAAA,EAAM;AACzD,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,GAAU,CAAgD,CAAA;AAAA,QAC5D;AACA,QAAA,SAAA,GAAY,CAAC,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAC,aAAA,EAAe,OAAA,EAAS,SAAS;AAAA,KACpC;AAEA,IAAA,uBACElB,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAM,gBAAgB,QAAA,GAAW,MAAA;AAAA,QACjC,QAAA,EAAU,gBAAgB,CAAA,GAAI,MAAA;AAAA,QAC9B,SAAA,EAAW,EAAA;AAAA,UACT,aAAa,EAAE,IAAA,EAAM,OAAO,WAAA,EAAa,aAAA,EAAe,SAAS,CAAA;AAAA,UACjE,gBAAA;AAAA;AAAA,UAEA,gBAAA,IAAoB,gCAAA;AAAA,UACpB,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,OAAA;AAAA,QACA,SAAA,EAAW,aAAA;AAAA,QACV,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAWnB,IAAM,UAAA,GAAmBkB,OAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBlB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA;AAGV;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAOzB,IAAM,SAAA,GAAkBkB,OAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBlB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAQxB,IAAM,eAAA,GAAwBkB,OAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBlB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA;AAGV;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAQ9B,IAAM,WAAA,GAAoBkB,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBlB,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,YAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEpE;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAO1B,IAAM,UAAA,GAAmBkB,OAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBlB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA;AAGV;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAMzB,IAAM,iBAAA,GAAoBC,IAAI,qBAAA,EAAuB;AAAA,EACnD,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIR,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,EAAA;AAAA,MACN,MAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAO,cAAA;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA;AAAA;AAAA,IAIA,QAAA,EAAU;AAAA,MACR,GAAA,EAAK,cAAA;AAAA,MACL,MAAA,EAAQ,cAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa,OAAA;AAAA,IACb,QAAA,EAAU;AAAA;AAEd,CAAC;AAuBD,IAAM,SAAA,GAAkBiB,OAAA,CAAA,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,GAAG,KAAA,EAAM,EAC1E,GAAA,KACG;AACH,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,iBAAS,KAAK,CAAA;AAEpD,IAAA,MAAM,WAAA,GAAoBA,OAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAA8C;AAC7C,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MACA,CAAC,OAAO;AAAA,KACV;AAGA,IAAMA,kBAAU,MAAM;AACpB,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,uBACElB,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,2CAAA;AAAA,YACA,iBAAA,CAAkB,EAAE,WAAA,EAAa,QAAA,EAAU,CAAA;AAAA,YAC3C;AAAA,WACF;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAW,GAAG,iBAAA,CAAkB,EAAE,aAAa,QAAA,EAAU,GAAG,SAAS,CAAA;AAAA,QACrE,OAAA,EAAS,WAAA;AAAA,QACR,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAMxB,IAAM,mBAAA,GAAsBC,GAAAA;AAAA,EAC1B,uEAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,MAIR,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,mCAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACV;AAAA;AAAA;AAAA;AAAA,MAIA,QAAA,EAAU;AAAA,QACR,WAAA,EAAa,eAAA;AAAA,QACb,UAAA,EAAY,cAAA;AAAA,QACZ,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe;AAAA,OACjB;AAAA;AAAA;AAAA;AAAA,MAIA,OAAA,EAAS;AAAA;AAAA,QAEP,QAAA,EAAU,4DAAA;AAAA;AAAA,QAEV,KAAA,EAAO,KAAA;AAAA;AAAA,QAEP,GAAA,EAAK,+CAAA;AAAA;AAAA,QAEL,YAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ,OAAA;AAAA,MACR,QAAA,EAAU,WAAA;AAAA,MACV,OAAA,EAAS;AAAA;AACX;AAEJ;AA6BA,IAAM,WAAA,GAAoBiB,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnDlB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,QAAQ,QAAA,EAAU,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA;AAAA,MAE3E,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,MACjC,GAAG;AAAA;AAAA;AAGV;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AA8D1B,IAAM,cAAA,GAAuBkB,OAAA,CAAA,UAAA;AAAA,EAC3B,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,eAAA,GAAkB,KAAA;AAAA,IAClB,gBAAA;AAAA,IACA,YAAA,GAAe,KAAA;AAAA,IACf,gBAAA,GAAmB,WAAA;AAAA,IACnB,QAAA,GAAW,KAAA;AAAA,IACX,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA,GAAQ,QAAA;AAAA,IACR,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAC5CA,iBAAS,eAAe,CAAA;AAChC,IAAA,MAAM,eAAe,kBAAA,KAAuB,MAAA;AAC5C,IAAA,MAAM,UAAA,GAAa,eAAe,kBAAA,GAAqB,oBAAA;AAEvD,IAAA,MAAM,WAAA,GAAoBA,OAAA,CAAA,WAAA;AAAA,MACxB,CAAC,CAAA,KAAwC;AACvC,QAAA,IAAI,QAAA,EAAU;AAEd,QAAA,MAAM,cAAc,CAAC,UAAA;AACrB,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,QACrC;AACA,QAAA,gBAAA,GAAmB,WAAW,CAAA;AAC9B,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MACA,CAAC,QAAA,EAAU,UAAA,EAAY,YAAA,EAAc,kBAAkB,OAAO;AAAA,KAChE;AAEA,IAAA,MAAM,oBAAA,GAA6BA,OAAA,CAAA,WAAA;AAAA,MACjC,CAAC,OAAA,KAAuC;AACtC,QAAA,IAAI,QAAA,EAAU;AAEd,QAAA,MAAM,cAAc,OAAA,KAAY,IAAA;AAChC,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,QACrC;AACA,QAAA,gBAAA,GAAmB,WAAW,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,CAAC,QAAA,EAAU,YAAA,EAAc,gBAAgB;AAAA,KAC3C;AAGA,IAAA,MAAM,WAAW,gBAAA,KAAqB,aAAA;AAEtC,IAAA,uBACEN,IAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA;AAAA,UAET,UAAA,IAAc,kCAAA;AAAA,UACd,QAAA,IAAY,+BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACA,aAAa,CAAC,QAAA;AAAA,QACd,KAAA,EAAO,WAAW,MAAA,GAAS,KAAA;AAAA,QAC3B,OAAA,EAAS,WAAA;AAAA,QACT,eAAA,EAAe,UAAA;AAAA,QACf,eAAA,EAAe,QAAA;AAAA,QACd,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,YAAA,IAAgB,4BACfA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6DAAA;AAAA,cACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,cAElC,QAAA,EAAA;AAAA,gCAAAZ,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,UAAA;AAAA,oBACT,eAAA,EAAiB,oBAAA;AAAA,oBACjB;AAAA;AAAA,iBACF;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EACb,QAAA,EAAA,UAAA,GAAa,aAAa,iBAAA,EAC7B;AAAA;AAAA;AAAA,WACF;AAAA,UAED,YAAA,IAAgB,CAAC,QAAA,oBAChBA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,gEAAA;AAAA,gBACA,gBAAA,KAAqB,aAAa,cAAA,GAAiB;AAAA,eACrD;AAAA,cACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,cAElC,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,UAAA;AAAA,kBACT,eAAA,EAAiB,oBAAA;AAAA,kBACjB;AAAA;AAAA;AACF;AAAA,WACF;AAAA,UAED;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAM7B,IAAM,gBAAA,GAAmBC,IAAI,MAAA,EAAQ;AAAA,EACnC,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIR,OAAA,EAAS;AAAA,MACP,CAAA,EAAG,aAAA;AAAA,MACH,CAAA,EAAG,4BAAA;AAAA,MACH,CAAA,EAAG,2CAAA;AAAA,MACH,CAAA,EAAG,0DAAA;AAAA,MACH,IAAA,EAAM;AAAA,KACR;AAAA;AAAA;AAAA;AAAA,IAIA,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,OAAA;AAAA,MACN,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK;AAAA;AAET,CAAC;AAwBD,IAAM,QAAA,GAAiBiB,OAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,KAAK,GAAG,KAAA,EAAM,EAAG,GAAA,qBACtClB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,gBAAA,CAAiB,EAAE,SAAS,GAAA,EAAK,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AAEvB,IAAM,gBAAA,GAAmBC,IAAI,eAAA,EAAiB;AAAA,EAC5C,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIR,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,OAAA;AAAA,MACN,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA;AAAA;AAAA;AAAA,IAIA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,mGAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,GAAA,EAAK,IAAA;AAAA,IACL,OAAA,EAAS;AAAA;AAEb,CAAC;AAiBD,IAAM,QAAA,GAAiBiB,OAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAA,EAAK,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACtClB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,gBAAA,CAAiB,EAAE,KAAK,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AC1rBvB,IAAM,aAAA,GAAgBC,IAAI,sBAAA,EAAwB;AAAA,EAChD,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIR,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,EAAA;AAAA,MACN,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI,QAAA;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA;AAAA;AAAA;AAAA,IAIA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,EAAA;AAAA,MACN,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA;AAAA;AAAA;AAAA,IAIA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,EAAA;AAAA,MACN,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA;AAAA;AAAA;AAAA,IAIA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,cAAA;AAAA,MACN,EAAA,EAAI,YAAA;AAAA,MACJ,EAAA,EAAI,YAAA;AAAA,MACJ,EAAA,EAAI,YAAA;AAAA,MACJ,EAAA,EAAI,YAAA;AAAA,MACJ,IAAA,EAAM;AAAA,KACR;AAAA;AAAA;AAAA;AAAA,IAIA,UAAA,EAAY;AAAA,MACV,OAAA,EAAS,SAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA;AAAA;AAAA;AAAA,IAIA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,MAAA,EAAQ,oDAAA;AAAA,MACR,OAAA,EAAS,gDAAA;AAAA,MACT,gBAAA,EAAkB,qDAAA;AAAA,MAClB,gBAAA,EAAkB,qDAAA;AAAA,MAClB,oBAAA,EACE;AAAA;AACJ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,SAAA,EAAW,MAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,UAAA,EAAY,SAAA;AAAA,IACZ,KAAA,EAAO;AAAA;AAEX,CAAC;AA+CD,IAAM,KAAA,GAAckB,OAAA,CAAA,UAAA;AAAA,EAClB,CACE;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACEnB,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,aAAA,CAAc;AAAA,YACZ,SAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA;AAAA,YACA,MAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA;AAAA,UAED,gBAAA,IAAoB,gCAAA;AAAA,UACpB,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;AAiCpB,IAAM,WAAA,GAAoBmB,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA;AAGV;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAuB1B,IAAM,YAAA,GAAqBmB,OAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBnB,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,OAAO,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE/D;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;ACvO3B,IAAM,KAAA,GAAcoB,OAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBpB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,MACvD,GAAG;AAAA;AAAA,GACN,EACF;AAEJ;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;AAKpB,IAAM,WAAA,GAAoBoB,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBpB,GAAAA,CAAC,OAAA,EAAA,EAAM,KAAU,SAAA,EAAW,EAAA,CAAG,mBAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE7E;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,SAAA,GAAkBoB,OAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBpB,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,MACpD,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAKxB,IAAM,WAAA,GAAoBoB,OAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBpB,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAK1B,IAAM,QAAA,GAAiBoB,OAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBpB,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AAKvB,IAAM,SAAA,GAAkBoB,OAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBpB,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wIAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAKxB,IAAM,SAAA,GAAkBoB,OAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBpB,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,sFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAKxB,IAAM,YAAA,GAAqBoB,mBAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BpB,GAAAA;AAAA,EAAC,SAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,IAC5D,GAAG;AAAA;AACN,CACD;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;ACxDpB,SAAS,KAAA,CAAM;AAAA,EACpB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,MAAA,GAAS,EAAA;AAAA,EACT;AACF,CAAA,EAAe;AACb,EAAMqB,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAC/C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACjE,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI,UAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,uBACET,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oDAAA;AAAA,MACV,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,MAChB,OAAA,EAAS,OAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAqD,CAAA;AAAA,wBAEpEY,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,iBAAA;AAAA,cACA,mDAAA;AAAA,cACA,eAAA;AAAA,cACA,cAAA;AAAA,cACA,YAAY,IAAI;AAAA,aAClB;AAAA,YACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAElC,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,QAAA,EAAA;AAAA,gCAAAZ,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCAC7DA,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,OAAA;AAAA,oBACT,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,SAAA,EAAU,SAAA;AAAA,oBACV,YAAA,EAAW,aAAA;AAAA,oBAEX,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACzB,eAAA,EACF,CAAA;AAAA,8BAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,4BAAA,EAA8B,SAAS,GACvD,QAAA,EACH,CAAA;AAAA,cAEC,0BACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFACZ,QAAA,EAAA,MAAA,EACH;AAAA;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;AAmCO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AC5JO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,SAAA;AAAA,EACf,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,KAAA;AAAA,EACd,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AACX,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,SAAA,EAAU;AACV,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEA,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAY,YAAA,EACvB,QAAA,kBAAAY,KAAC,kBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,oBAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACzBA,GAAAA,CAAC,sBAAA,EAAA,EAAwB,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EACvC,CAAA;AAAA,oBACAY,KAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAS,YAAA,EACzB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,aAAA;AAAA,UACT,SAAA,EACE,cACI,oEAAA,GACA,MAAA;AAAA,UAGL,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AA6BO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUsB,OAAA,CAAA,QAAA,CAQ7B;AAAA,IACD,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,MAAM,OAAA,GAAgBA,OAAA,CAAA,WAAA;AAAA,IACpB,CAAC,OAAA,KAMuB;AACtB,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,QAAA,QAAA,CAAS;AAAA,UACP,IAAA,EAAM,IAAA;AAAA,UACN,GAAG,OAAA;AAAA,UACH;AAAA,SACD,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,aAAA,GAAsBA,oBAAY,MAAM;AAC5C,IAAA,KAAA,CAAM,UAAU,IAAI,CAAA;AACpB,IAAA,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,OAAM,CAAE,CAAA;AAAA,EAC/C,CAAA,EAAG,CAAC,KAAA,CAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,YAAA,GAAqBA,oBAAY,MAAM;AAC3C,IAAA,KAAA,CAAM,UAAU,KAAK,CAAA;AACrB,IAAA,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,OAAM,CAAE,CAAA;AAAA,EAC/C,CAAA,EAAG,CAAC,KAAA,CAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,gBAAA,GAAyBA,OAAA,CAAA,WAAA;AAAA,IAC7B,CAAC,IAAA,KAAkB;AACjB,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,KAAA,CAAM,UAAU,KAAK,CAAA;AAAA,MACvB;AACA,MAAA,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,MAAK,CAAE,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,MAAM,OAAO;AAAA,GAChB;AAEA,EAAA,MAAM,qCACJtB,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,YAAA,EAAc,gBAAA;AAAA,MACd,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAA,EAAW,aAAA;AAAA,MACX,QAAA,EAAU;AAAA;AAAA,GACZ;AAGF,EAAA,OAAO,EAAE,SAAS,kBAAA,EAAmB;AACvC;ACzIO,SAAS,YAAA,CAAa;AAAA,EAC3B,WAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,WAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUuB,iBAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,iBAAS,KAAK,CAAA;AACtD,EAAA,MAAM,SAAA,GAAkBA,eAAe,CAAC,CAAA;AACxC,EAAA,MAAM,SAAA,GAAkBA,eAAuB,IAAI,CAAA;AAEnD,EAAA,MAAM,eAAA,GAAwBA,OAAA,CAAA,WAAA;AAAA,IAC5B,CAAC,CAAA,KAAwB;AACvB,MAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,SAAA,CAAU,UAAU,CAAA,CAAE,OAAA;AAGtB,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA;AAGjC,MAAA,WAAA,IAAc;AAAA,IAChB,CAAA;AAAA,IACA,CAAC,WAAW,WAAW;AAAA,GACzB;AAEA,EAAA,MAAM,eAAA,GAAwBA,OAAA,CAAA,WAAA;AAAA,IAC5B,CAAC,CAAA,KAAkB;AACjB,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,GAAU,SAAA,CAAU,OAAA;AACrC,MAAA,SAAA,CAAU,UAAU,CAAA,CAAE,OAAA;AAEtB,MAAA,MAAA,GAAS,MAAM,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,YAAY,MAAM;AAAA,GACrB;AAEA,EAAA,MAAM,aAAA,GAAsBA,oBAAY,MAAM;AAC5C,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AACjC,IAAA,SAAA,IAAY;AAAA,EACd,CAAA,EAAG,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAE1B,EAAA,MAAM,aAAA,GAAsBA,OAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,CAAA,KAA2B;AAC1B,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,gBAAA,EAAkB;AAErC,MAAA,IAAI,SAAA,GAA2B,IAAA;AAI/B,MAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,QAAA,SAAA,GAAY,WAAA,KAAgB,UAAU,EAAA,GAAK,CAAA;AAAA,MAC7C,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc;AACjC,QAAA,SAAA,GAAY,WAAA,KAAgB,UAAU,CAAA,GAAI,EAAA;AAAA,MAC5C;AAEA,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,UAAA,GAAa,CAAA,CAAE,QAAA,GAAW,CAAA,GAAI,CAAA;AACpC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAAK;AACnC,UAAA,gBAAA,CAAiB,SAAS,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,gBAAA,EAAkB,WAAW;AAAA,GAC3C;AAGA,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAEhD,MAAA,OAAO,MAAM;AACX,QAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACvD,QAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,MACrD,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,eAAA,EAAiB,aAAa,CAAC,CAAA;AAE/C,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,uBACEvB,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,SAAA;AAAA,MACL,IAAA,EAAK,WAAA;AAAA,MACL,kBAAA,EAAiB,UAAA;AAAA,MACjB,YAAA,EAAY,SAAA,IAAa,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAA;AAAA,MACrD,eAAA,EAAe,MAAA;AAAA,MACf,QAAA,EAAU,YAAY,CAAA,GAAI,EAAA;AAAA,MAC1B,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,MAAA,EAAQ,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,MAChC,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,gDAAA;AAAA,QACA,gCAAA;AAAA;AAAA,QAGA,KAAA;AAAA;AAAA,QAGA,YAAY,mBAAA,GAAsB,gBAAA;AAAA;AAAA,QAGlC,cAAA;AAAA;AAAA,QAGA,CAAC,SAAA,IAAa,YAAA;AAAA,QAEd;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,WAAA,EAAa;AAAA;AACf;AAAA,GACF;AAEJ;ACrDO,SAAS,cAAA,CAAe;AAAA,EAC7B,WAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,UAAA,GAAa,EAAA;AAAA,EACb,UAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,YAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA,EAAU,SAAA;AAAA,EACV,kBAAA,EAAoB,mBAAA;AAAA,EACpB,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAiB;AACnB,CAAA,EAAwB;AACtB,EAAA,MAAM,QAAA,GAAiBwB,eAAuB,IAAI,CAAA;AAElD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,iBAAwB,IAAI,CAAA;AAEhF,EAAA,MAAM,iBAAiB,UAAA,GAAA,CAClB,UAAA,IAAc,eAAe,IAAA,GAAO,UAAA,GAAa,oBAClD,eAAA,GACA,eAAA;AAEJ,EAAA,MAAM,UAAA,GAAmBA,OAAA,CAAA,WAAA;AAAA,IACvB,CAAC,KAAA,KAA0B;AACzB,MAAA,IAAI,iBAAA,GAAoB,UAAA;AACxB,MAAA,IAAI,iBAAA,GAAoB,UAAA;AAExB,MAAA,IAAI,WAAA,KAAgB,OAAA,IAAW,WAAA,KAAgB,MAAA,IAAa,CAAC,SAAA,EAAW;AACtE,QAAA,MAAM,cAAA,GAAiB,MAAM,WAAA,GAAc,CAAA;AAC3C,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,iBAAiB,EAAE,CAAA;AACpE,QAAA,iBAAA,GAAoB,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,YAAY,CAAA;AAAA,MACvD;AAEA,MAAA,OAAO,KAAK,GAAA,CAAI,iBAAA,EAAmB,KAAK,GAAA,CAAI,iBAAA,EAAmB,KAAK,CAAC,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,WAAA,EAAa,aAAa,SAAS;AAAA,GAC9D;AAEA,EAAA,MAAM,eAAA,GAAwBA,oBAAY,MAAM;AAC9C,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,aAAA,CAAc,cAAc,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,UAAA,GAAmBA,OAAA,CAAA,WAAA;AAAA,IACvB,CAAC,MAAA,KAAmB;AAClB,MAAA,IAAI,CAAC,cAAc,SAAA,EAAW;AAE9B,MAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,MAAA,MAAM,OAAA,GAAW,SAAS,aAAA,GAAiB,GAAA;AAE3C,MAAA,MAAM,aAAA,GAAgB,WAAA,KAAgB,MAAA,GAAS,OAAA,GAAU,CAAC,OAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,UAAA,KAAe,IAAA,GAAO,UAAA,GAAa,cAAA;AACrD,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,SAAA,GAAY,aAAa,CAAA;AAErD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,IACxB,CAAA;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,aAAA,GAAsBA,oBAAY,MAAM;AAC5C,IAAA,IAAI,UAAA,KAAe,QAAQ,QAAA,EAAU;AACnC,MAAA,QAAA,CAAS,UAAU,CAAA;AAAA,IACrB;AACA,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAA,MAAM,oBAAA,GAA6BA,OAAA,CAAA,WAAA;AAAA,IACjC,CAAC,SAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,UAAA,IAAc,SAAA,IAAa,CAAC,QAAA,EAAU;AAE3C,MAAA,MAAM,IAAA,GAAO,CAAA;AACb,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,cAAA,GAAiB,IAAA,GAAO,SAAS,CAAA;AAC7D,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,SAAA,EAAW,QAAA,EAAU,gBAAgB,UAAU;AAAA,GAC9D;AAEA,EAAA,MAAM,sBAAA,GAA+BA,oBAAY,MAAM;AACrD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,kBAAA,CAAmB,YAAY,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,iBAAA,GAA0BA,OAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,MAAA,KAAmB;AAClB,MAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,MAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,MAAA,MAAM,OAAA,GAAW,SAAS,aAAA,GAAiB,GAAA;AAE3C,MAAA,MAAM,SAAA,GACJ,eAAA,KAAoB,IAAA,GAAO,eAAA,GAAkB,YAAA,IAAgB,EAAA;AAC/D,MAAA,MAAM,gBAAgB,SAAA,GAAY,OAAA;AAElC,MAAA,kBAAA,CAAmB,aAAa,CAAA;AAAA,IAClC,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,eAAA,EAAiB,YAAY;AAAA,GAC3C;AAEA,EAAA,MAAM,oBAAA,GAA6BA,oBAAY,MAAM;AACnD,IAAA,IAAI,eAAA,KAAoB,QAAQ,eAAA,EAAiB;AAC/C,MAAA,eAAA,CAAgB,eAAe,CAAA;AAAA,IACjC;AACA,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,eAAA,EAAiB,eAAe,CAAC,CAAA;AAErC,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,SAAA,IAAa,SAAS,OAAA,EAAS;AACjC,MAAA,MAAM,gBAAA,GAAmB,SAAS,OAAA,CAAQ,aAAA;AAAA,QACxC;AAAA,OACF;AACA,MAAA,gBAAA,EAAkB,KAAA,EAAM;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,mBAAA,IAAsB;AAAA,MACxB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAC/C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACjE,CAAA,EAAG,CAAC,SAAA,EAAW,mBAAmB,CAAC,CAAA;AAEnC,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,SAAA,EAAW;AAC7B,IAAA,uBACExB,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,sBAAA;AAAA,UACA,6BAAA;AAAA,UACA,WAAA,KAAgB,SAAS,UAAA,GAAa,UAAA;AAAA,UACtC;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,GAAG,eAAe,CAAA,EAAA,CAAA;AAAA,UACzB,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QACC,GAAG,cAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAA,IAAa,gBAAgB,YAAA,EAAc;AAC7C,IAAA,MAAM,iBAAA,GACJ,UAAA,IAAc,eAAA,KAAoB,IAAA,GAAO,eAAA,GAAkB,YAAA;AAC7D,IAAA,MAAM,oBACJ,UAAA,IAAc,eAAA,KAAoB,IAAA,GAC9B,YAAA,GAAe,eAAe,eAAA,GAC9B,YAAA;AAEN,IAAA,MAAM,sBAAsB,WAAA,IAAe,CAAA;AAE3C,IAAA,uBACEY,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,MAAA,EAAQ,SAAS,CAAA;AAAA,QACvD,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,GAAG,mBAAmB,CAAA,EAAA,CAAA;AAAA;AAAA,UAC5B,KAAA,EAAO,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA;AAAA,UACX,KAAA,EAAO,CAAA,EAAG,iBAAA,GAAoB,iBAAiB,CAAA,EAAA;AAAA,SACjD;AAAA,QACC,GAAG,cAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAZ,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,sBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,GAAG,iBAAiB,CAAA,EAAA;AAAA,eAC7B;AAAA,cAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA,iBAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,0BAAA,EAE/C,CAAA,EAEJ;AAAA;AAAA,WACF;AAAA,0BAEAA,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAY,OAAA;AAAA,cACZ,SAAA;AAAA,cACA,UAAA;AAAA,cACA,WAAA,EAAa,sBAAA;AAAA,cACb,MAAA,EAAQ,iBAAA;AAAA,cACR,SAAA,EAAW,oBAAA;AAAA,cACX,WAAW,eAAA,IAAmB;AAAA;AAAA,WAChC;AAAA,0BAEAY,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,6BAA6B,CAAA;AAAA,cACnE,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,GAAG,iBAAiB,CAAA,EAAA;AAAA,eAC7B;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,UAAA,oBACCZ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,gCAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAwB,QAAA,EAAS,CAAA;AAAA,gBAC/C,8BACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACL;AAAA;AAAA;AAAA,WAEF;AAAA,0BAEAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oCAAA;AAAA,cACV,OAAA,EAAS,MAAM,mBAAA;AAAsB;AAAA;AACvC;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEY,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,8CAAA;AAAA,QACA,CAAC,UAAA,IAAc,0CAAA;AAAA,QACf,WAAA,KAAgB,SAAS,UAAA,GAAa,kBAAA;AAAA,QACtC;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,GAAG,cAAc,CAAA,EAAA;AAAA,OAC1B;AAAA,MACC,GAAG,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,8CAAA;AAAA,cACA,6BAAA;AAAA,cACA,WAAA,KAAgB,SAAS,UAAA,GAAa;AAAA,aACxC;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,UAAA,oBACCZ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEACZ,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,8BAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAkC,QAAA,EAAS,CAAA;AAAA,cACzD,8BACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACH;AAAA;AAAA;AAAA,SAEJ;AAAA,QAEC,8BACCA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,WAAA;AAAA,YACA,SAAA;AAAA,YACA,UAAA;AAAA,YACA,WAAA,EAAa,eAAA;AAAA,YACb,MAAA,EAAQ,UAAA;AAAA,YACR,SAAA,EAAW,aAAA;AAAA,YACX,gBAAA,EAAkB,oBAAA;AAAA,YAClB,SAAA,EAAW;AAAA;AAAA;AACb;AAAA;AAAA,GAEJ;AAEJ;AC3YO,SAAS,IAAA,CAAK;AAAA,EACnB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAc;AACZ,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,OAAA,IAAW,CAAC,QAAA;AAElC,EAAA,uBACEA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,UAAU,CAAC,WAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,yCAAA;AAAA,QACA,wBAAA;AAAA,QACA,qBAAA;AAAA,QACA,6BAAA;AAAA;AAAA,QAEA,8BAAA;AAAA,QACA,kCAAA;AAAA;AAAA,QAEA,WAAA,IAAe;AAAA,UACb,gBAAA;AAAA,UACA,8CAAA;AAAA,UACA,qBAAA;AAAA,UACA;AAAA,SACF;AAAA;AAAA,QAEA,CAAC,WAAA,IAAe,gBAAA;AAAA;AAAA,QAEhB,QAAA,IAAY,+BAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MAEJ,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;ACvEA,IAAM,sBAAA,GAAyBC,IAAI,0CAAA,EAA4C;AAAA,EAC7E,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,kBAAA;AAAA,MACJ,OAAA,EAAS,kBAAA;AAAA,MACT,EAAA,EAAI,wBAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA;AAAA;AAAA;AAAA,IAIA,OAAA,EAAS;AAAA;AAAA,MAEP,OAAA,EAAS,oCAAA;AAAA;AAAA,MAET,MAAA,EAAQ,kCAAA;AAAA;AAAA,MAER,KAAA,EAAO,sDAAA;AAAA;AAAA,MAEP,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAC;AAoCD,IAAM,cAAA,GAAuBwB,OAAA,CAAA,UAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,GAAW,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACxE,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,iBAAS,EAAE,CAAA;AAGzC,IAAMA,kBAAU,MAAM;AACpB,MAAA,IAAI,CAAC,QAAA,IAAY,CAAC,KAAA,EAAO;AAEzB,MAAA,MAAM,QAAA,GAAW,YAAY,MAAM;AACjC,QAAA,OAAA,CAAQ,CAAC,IAAA,KAAU,IAAA,CAAK,UAAU,CAAA,GAAI,EAAA,GAAK,OAAO,GAAI,CAAA;AAAA,MACxD,GAAG,GAAG,CAAA;AAEN,MAAA,OAAO,MAAM,cAAc,QAAQ,CAAA;AAAA,IACrC,CAAA,EAAG,CAAC,QAAA,EAAU,KAAK,CAAC,CAAA;AAEpB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,uBACEb,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA,CAAG,kCAAA,EAAoC,SAAS,CAAA;AAAA,UAC1D,GAAG,KAAA;AAAA,UAEJ,QAAA,EAAA;AAAA,4BAAAZ,GAAAA,CAAC,SAAI,SAAA,EAAW,sBAAA,CAAuB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,4BAC3DY,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA,4BAAYZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAoB,QAAA,EAAA,IAAA,EAAK;AAAA,aAAA,EACxD;AAAA;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,GAAG,sBAAA,CAAuB,EAAE,MAAM,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,QACjE,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AClDtB,SAAS,OAAA,CAAQ;AAAA,EACtB,QAAA,GAAW,WAAA;AAAA,EACX,MAAA,GAAS,KAAA;AAAA,EACT,UAAA,GAAa,IAAA;AAAA,EACb,WAAA,GAAc,IAAA;AAAA,EACd,KAAA,GAAQ;AACV,CAAA,GAAkB,EAAC,EAAG;AACpB,EAAA,uBACEA,GAAAA;AAAA,IAAC0B,SAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,kBAAA;AAAA,UACZ,MAAA,EAAQ,8BAAA;AAAA,UACR,KAAA,EAAO;AAAA;AACT;AACF;AAAA,GACF;AAEJ;ACrDA,IAAM,MAAA,GAAS;AAAA,EACb,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAMA,SAAS,YAAA,CAAa,UAAmB,MAAA,EAA2B;AAClE,EAAA,MAAM,WAAA,GAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC3C,EAAA,MAAM,KAAA,GAAQ,YAAY,WAAA,GAAc,GAAA;AACxC,EAAA,MAAM,GAAA,GAAM,UAAU,WAAA,GAAc,EAAA;AACpC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,IAAA,GAAO,KAAA,EAAO,IAAA,IAAQ,GAAA,EAAK,IAAA,EAAA,EAAQ;AAC1C,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AA8BA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,KAAA,EAAO,eAAA;AAAA,EACP,YAAA;AAAA,EACA,aAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,QAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,MAAA;AACzC,EAAA,MAAM,QAAA,GAAW,YAAY,WAAA,EAAY;AACzC,EAAA,MAAM,MAAA,GAAS,UAAU,WAAA,EAAY;AACrC,EAAA,MAAM,KAAA,GAAcC,OAAA,CAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAEpF,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,OAAA,CAAA,QAAA;AAAA,IAC9C,YAAA,wBAAoB,IAAA;AAAK,GAC3B;AAEA,EAAA,MAAM,iBAAiB,eAAA,IAAmB,aAAA;AAE1C,EAAA,MAAM,iBAAA,GAA0BA,OAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,QAAA,KAAmB;AAClB,MAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,QAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,MAC3B;AACA,MAAA,aAAA,GAAgB,QAAQ,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,iBAAiB,aAAa;AAAA,GACjC;AAEA,EAAA,uBACE3B,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,eAAA;AAAA,MACA,KAAA,EAAO,cAAA;AAAA,MACP,aAAA,EAAe,iBAAA;AAAA,MACf,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,SAAS,CAAA;AAAA,MAC9B,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,iCAAA;AAAA,QACR,KAAA,EAAO,qBAAA;AAAA,QACP,aAAA,EAAe,0DAAA;AAAA,QACf,aAAA,EAAe,4BAAA;AAAA,QACf,GAAA,EAAK,yBAAA;AAAA,QACL,eAAA,EAAiB,EAAA;AAAA,UACf,cAAA,CAAe,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,UACrC;AAAA,SACF;AAAA,QACA,WAAA,EAAa,EAAA;AAAA,UACX,cAAA,CAAe,EAAE,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,UACrC;AAAA,SACF;AAAA,QACA,UAAA,EAAY,6BAAA;AAAA,QACZ,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EACE,gEAAA;AAAA,QACF,IAAA,EAAM,kBAAA;AAAA,QACN,GAAA,EAAK,EAAA;AAAA,UACH,mNAAA;AAAA,UACA,KAAA,CAAM,IAAA,KAAS,OAAA,GACX,sKAAA,GACA;AAAA,SACN;AAAA,QACA,UAAA,EAAY,EAAA;AAAA,UACV,cAAA,CAAe,EAAE,OAAA,EAAS,OAAA,EAAS,CAAA;AAAA,UACnC;AAAA,SACF;AAAA,QACA,WAAA,EAAa,8BAAA;AAAA,QACb,SAAA,EAAW,4BAAA;AAAA,QACX,QAAA,EACE,kIAAA;AAAA,QACF,KAAA,EAAO,kCAAA;AAAA,QACP,OAAA,EACE,sIAAA;AAAA,QACF,QAAA,EAAU,kCAAA;AAAA,QACV,YAAA,EACE,8DAAA;AAAA,QACF,MAAA,EAAQ,WAAA;AAAA,QACR,GAAG;AAAA,OACL;AAAA,MACA,UAAA,EAAY;AAAA,QACV,OAAA,EAAS,CAAC,EAAE,WAAA,EAAY,KAAM;AAC5B,UAAA,MAAM4B,KAAAA,GAAO,WAAA,KAAgB,MAAA,GAAS,WAAA,GAAcC,YAAAA;AACpD,UAAA,uBAAO7B,GAAAA,CAAC4B,KAAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,QACnC,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,EAAE,aAAA,EAAc,KAAM;AACnC,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,QAAA,EAAS;AAC1C,UAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,CAAK,WAAA,EAAY;AAE5C,UAAA,uBACEhB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,gBACtB,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,kBAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAC3C,kBAAA,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,KAAA,EAAO,EAAE,CAAC,CAAA;AACpC,kBAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,gBAC3B,CAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAZ,GAAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,6FAAA;AAAA,sBACV,YAAA,EAAW,cAAA;AAAA,sBAEX,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA;AAAA,mBAC9B;AAAA,kCACAA,GAAAA,CAAC,aAAA,EAAA,EACE,iBAAO,GAAA,CAAI,CAAC,WAAW,KAAA,qBACtBA,GAAAA,CAAC,UAAA,EAAA,EAA2B,OAAO,KAAA,CAAM,QAAA,IACtC,QAAA,EAAA,SAAA,EAAA,EADc,SAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,aACF;AAAA,4BAEAY,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,KAAK,QAAA,EAAS;AAAA,gBACrB,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,kBAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAC3C,kBAAA,OAAA,CAAQ,WAAA,CAAY,QAAA,CAAS,KAAA,EAAO,EAAE,CAAC,CAAA;AACvC,kBAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,gBAC3B,CAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAZ,GAAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,4FAAA;AAAA,sBACV,YAAA,EAAW,aAAA;AAAA,sBAEX,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,mBACrB;AAAA,kCACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,WAAU,eAAA,EACtB,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,CAAA,qBACVA,GAAAA,CAAC,UAAA,EAAA,EAAmB,OAAO,CAAA,CAAE,QAAA,IAC1B,QAAA,EAAA,CAAA,EAAA,EADc,CAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,WAAA,EACF,CAAA;AAAA,QAEJ;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AC9IvB,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,aAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA,GAAO,QAAA;AAAA,EACP,iBAAA,GAAoB,KAAA;AAAA,EACpB;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU8B,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,OAAA,CAAA,QAAA;AAAA,IAC9C;AAAA,GACF;AAGA,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,eAAe,KAAA,GAAQ,aAAA;AAE5C,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAA2B;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,QAAA,GAAW,IAAI,CAAA;AACf,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,YAAA,CAAa,MAAS,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAqB;AAC7C,IAAA,OAAA,CAAQ,OAAO,CAAA;AACf,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA;AAGA,EAAA,MAAM,aAAA,GAAgB,YAAA,GAClB,MAAA,CAAO,YAAA,EAAc,UAAU,CAAA,GAC/B,MAAA;AAEJ,EAAA,uBACElB,IAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,gBAAA,EACjC,QAAA,EAAA;AAAA,oBAAAZ,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAY,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,OAAA,EAAQ,SAAA;AAAA,QACR,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,4CAAA;AAAA,UACA,CAAC,YAAA,IAAgB,uBAAA;AAAA,UACjB;AAAA,SACF;AAAA,QACA,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAc,QAAA;AAAA,QAEd,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC+B,UAAA,EAAA,EAAa,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,0BAChD/B,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EACb,2BAAiB,WAAA,EACpB,CAAA;AAAA,UACC,SAAA,IAAa,gCACZA,GAAAA;AAAA,YAACgC,CAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oDAAA;AAAA,cACV,OAAA,EAAS,WAAA;AAAA,cACT,YAAA,EAAW;AAAA;AAAA;AACb;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,oBACApB,IAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,iBAAA,IAAqB,wCAAwC,CAAA;AAAA,QACzF,KAAA;AAAA,QACA,IAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAZ,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,YAAA;AAAA,cACV,QAAA,EAAU,YAAA;AAAA,cACV,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,gBAAA,IAAI,OAAA,IAAW,IAAA,GAAO,OAAA,EAAS,OAAO,IAAA;AACtC,gBAAA,IAAI,OAAA,IAAW,IAAA,GAAO,OAAA,EAAS,OAAO,IAAA;AACtC,gBAAA,OAAO,KAAA;AAAA,cACT,CAAA;AAAA,cACA,YAAA,EAAY;AAAA;AAAA,WACd;AAAA,UACC,IAAA,IAAQ,gCACPA,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,IAAA;AAAA,cACA,KAAA,EAAO,MAAA,CAAO,YAAA,EAAc,YAAY;AAAA;AAAA;AAC1C;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AAezB,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,aAAA;AAAA,EACd,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,YAAA;AAAA,EACb,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA,GAAO,QAAA;AAAA,EACP,YAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU8B,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,OAAA,CAAA,QAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,iBAAS,EAAE,CAAA;AACrD,EAAA,MAAM,QAAA,GAAiBA,eAAyB,IAAI,CAAA;AAGpD,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,eAAe,KAAA,GAAQ,aAAA;AAG5C,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAc,MAAA,CAAO,YAAA,EAAc,UAAU,CAAC,CAAA;AAAA,IAChD,CAAA,MAAO;AACL,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAA2B;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,QAAA,GAAW,IAAI,CAAA;AACf,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAA2C;AACpE,IAAA,MAAM,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAC1B,IAAA,aAAA,CAAc,QAAQ,CAAA;AAGtB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,SAAS,KAAA,CAAM,QAAA,EAAU,UAAA,kBAAY,IAAI,MAAM,CAAA;AACrD,MAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AACnB,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,QACzB;AACA,QAAA,QAAA,GAAW,MAAM,CAAA;AAAA,MACnB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,MAAS,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAE5B,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAc,MAAA,CAAO,YAAA,EAAc,UAAU,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,YAAA,CAAa,MAAS,CAAA;AACtB,IAAA,aAAA,CAAc,EAAE,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAqB;AAC7C,IAAA,OAAA,CAAQ,OAAO,CAAA;AACf,IAAA,YAAA,GAAe,OAAO,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,kBAAA;AAAA,IACJ,OAAA,EAAS,kBAAA;AAAA,IACT,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,uBACE9B,GAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,gBAAA,EACjC,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAAZ,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAY,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,uFAAA;AAAA,UACA,uEAAA;AAAA,UACA,QAAA,IAAY,+BAAA;AAAA,UACZ,YAAY,IAAI;AAAA,SAClB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAZ,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,UAAA;AAAA,cACP,QAAA,EAAU,iBAAA;AAAA,cACV,MAAA,EAAQ,eAAA;AAAA,cACR,WAAA;AAAA,cACA,QAAA;AAAA,cACA,SAAA,EAAW,EAAA;AAAA,gBACT,sEAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF;AAAA,UACC,SAAA,IAAa,gCACZA,GAAAA;AAAA,YAACgC,CAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,0DAAA;AAAA,cACV,OAAA,EAAS,WAAA;AAAA,cACT,YAAA,EAAW;AAAA;AAAA,WACb;AAAA,0BAEFhC,GAAAA;AAAA,YAAC+B,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,qDAAA;AAAA,cACV,OAAA,EAAS,MAAM,CAAC,QAAA,IAAY,QAAQ,IAAI;AAAA;AAAA;AAC1C;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACA/B,GAAAA,CAAC,cAAA,EAAA,EAAe,WAAU,YAAA,EAAa,KAAA,EAAc,MACnD,QAAA,kBAAAA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,YAAA;AAAA,QACV,QAAA,EAAU,YAAA;AAAA,QACV,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,UAAA,IAAI,OAAA,IAAW,IAAA,GAAO,OAAA,EAAS,OAAO,IAAA;AACtC,UAAA,IAAI,OAAA,IAAW,IAAA,GAAO,OAAA,EAAS,OAAO,IAAA;AACtC,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAAA,QACA,YAAA,EAAY;AAAA;AAAA,KACd,EACF,CAAA;AAAA,IACC,IAAA,IAAQ,gCACPA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA;AAAA,QACA,KAAA,EAAO,MAAA,CAAO,YAAA,EAAc,YAAY;AAAA;AAAA;AAC1C,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AC3T9B,IAAM,cAAA,GAAiE;AAAA,EACrE,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,EACvC,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAClD,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,gBAAA,EAAiB;AAAA,EAC9C,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,aAAA,EAAc;AAAA,EAC5C,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,WAAA,EAAY;AAAA,EACxC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACtC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,cAAA;AAChC,CAAA;AAGA,IAAM,gBAAA,GAAqE;AAAA,EACzE,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,gBAAA,EAAiB;AAAA,EAC9C,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,cAAA,EAAe;AAAA,EACrC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,uBAAA,EAAwB;AAAA,EAC/C,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,WAAA,EAAY;AAAA,EAClC,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,oBAAA,EAAqB;AAAA,EAC5C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACtC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,cAAA;AAChC,CAAA;AAGA,IAAM,cAAA,GAAqD;AAAA,EACzD,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,gBAAA,EAAiB;AAAA,EAC9C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACtC,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,cAAA;AAChC,CAAA;AAKA,SAAS,kBAAkB,QAAA,EAA2B;AACpD,EAAA,OAAO,QAAA,KAAa,aAAa,QAAA,KAAa,YAAA;AAChD;AAKA,SAAS,kBAAkB,QAAA,EAA2B;AACpD,EAAA,OAAO,QAAA,KAAa,SAAA;AACtB;AAKO,SAAS,aAAA,CAA6C;AAAA,EAC3D,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,MAAA;AAExC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUiC,OAAA,CAAA,QAAA;AAAA,IACpC,MAAA,EAAQ,QAAA,IAAY,kBAAA,CAAmB,UAAU;AAAA,GACnD;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAUA,OAAA,CAAA,QAAA,CAAsB,MAAA,EAAQ,SAAS,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAUA,OAAA,CAAA,QAAA,CAAsB,MAAA,EAAQ,WAAW,EAAE,CAAA;AAE/E,EAAA,SAAS,mBAAmB,IAAA,EAAkC;AAC5D,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,MAAA;AACH,QAAA,OAAO,UAAA;AAAA,MACT,KAAK,QAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,MAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,QAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,SAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT;AACE,QAAA,OAAO,UAAA;AAAA;AACX,EACF;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC/B,MAAA,cAAA,CAAe;AAAA,QACb,WAAW,MAAA,CAAO,GAAA;AAAA,QAClB,QAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC/B,MAAA,IAAI,KAAA,KAAU,EAAA,IAAM,OAAA,KAAY,EAAA,EAAI;AAClC,QAAA,cAAA,CAAe;AAAA,UACb,WAAW,MAAA,CAAO,GAAA;AAAA,UAClB,QAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AACzD,MAAA,cAAA,CAAe;AAAA,QACb,WAAW,MAAA,CAAO,GAAA;AAAA,QAClB,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,WAAA,CAAY,kBAAA,CAAmB,UAAU,CAAC,CAAA;AAC1C,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAqBA,EAAA,MAAM,mBAAmB,sBACvBrB,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sBACpCY,IAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,QAAA;AAAA,UACP,aAAA,EAAe,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAyB,CAAA;AAAA,UAE7D,QAAA,EAAA;AAAA,4BAAAZ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,4BACAA,GAAAA,CAAC,aAAA,EAAA,EACE,yBAAe,GAAA,CAAI,CAAC,uBACnBA,GAAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,GAAG,KAAA,EAClC,QAAA,EAAA,EAAA,CAAG,SADW,EAAA,CAAG,KAEpB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAEC,CAAC,kBAAkB,QAAQ,CAAA,oBAC1BY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBAChCA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,KAAA,IAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAAA,UAChE,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,WAAA,EAAY,gBAAA;AAAA,UACZ,SAAA,EAAU,aAAA;AAAA,UACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,WAAA,EAAY;AAAA,YACd;AAAA,UACF;AAAA;AAAA;AACF,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAMF,EAAA,MAAM,qBAAqB,sBACzBY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sBACpCY,IAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,QAAA;AAAA,UACP,aAAA,EAAe,CAAC,GAAA,KAAQ,WAAA,CAAY,GAA2B,CAAA;AAAA,UAE/D,QAAA,EAAA;AAAA,4BAAAZ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,4BACAA,GAAAA,CAAC,aAAA,EAAA,EACE,2BAAiB,GAAA,CAAI,CAAC,uBACrBA,GAAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,GAAG,KAAA,EAClC,QAAA,EAAA,EAAA,CAAG,SADW,EAAA,CAAG,KAEpB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAEC,CAAC,iBAAA,CAAkB,QAAQ,CAAA,oBAC1BY,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,SAAM,SAAA,EAAU,SAAA,EACd,4BAAkB,QAAQ,CAAA,GAAI,SAAS,OAAA,EAC1C,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAO,KAAA,IAAS,IAAA,IAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA;AAAA,YAChE,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAY,iBAAA;AAAA,YACZ,SAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,EAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AACrD,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,WAAA,EAAY;AAAA,cACd;AAAA,YACF;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,MAEC,kBAAkB,QAAQ,CAAA,oBACzBY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,wBAC7BA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAO,OAAA,IAAW,IAAA,IAAQ,CAAC,KAAA,CAAM,QAAQ,OAAO,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA,GAAI,EAAA;AAAA,YACtE,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC1C,WAAA,EAAY,iBAAA;AAAA,YACZ,SAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,WAAA,EAAY;AAAA,cACd;AAAA,YACF;AAAA;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAGF,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAM,SAAA,GAAkBiC,gBAAQ,MAAM;AACpC,MAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,MAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,QAAA,OAAOC,OAAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,MACpC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,WAAA,GAAoBD,gBAAQ,MAAM;AACtC,MAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,MAAA,IAAI,OAAA,YAAmB,MAAM,OAAO,OAAA;AACpC,MAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,MAAM,MAAA,GAAS,SAAS,OAAO,CAAA;AAC/B,QAAA,OAAOC,OAAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,MACpC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA2B;AACnD,MAAA,QAAA,CAAS,IAAA,GAAOC,MAAAA,CAAO,IAAA,EAAM,YAAY,IAAI,EAAE,CAAA;AAAA,IACjD,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA2B;AACrD,MAAA,UAAA,CAAW,IAAA,GAAOA,MAAAA,CAAO,IAAA,EAAM,YAAY,IAAI,EAAE,CAAA;AAAA,IACnD,CAAA;AAEA,IAAA,uBACEvB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,wBACpCY,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,QAAA;AAAA,YACP,aAAA,EAAe,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAqB,CAAA;AAAA,YAEzD,QAAA,EAAA;AAAA,8BAAAZ,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,GAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EACE,yBAAe,GAAA,CAAI,CAAC,uBACnBA,GAAAA,CAAC,UAAA,EAAA,EAA0B,KAAA,EAAO,GAAG,KAAA,EAClC,QAAA,EAAA,EAAA,CAAG,SADW,EAAA,CAAG,KAEpB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,MAEC,CAAC,iBAAA,CAAkB,QAAQ,CAAA,oBAC1BY,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,SAAM,SAAA,EAAU,SAAA,EACd,4BAAkB,QAAQ,CAAA,GAAI,SAAS,MAAA,EAC1C,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,SAAA;AAAA,cACP,QAAA,EAAU,gBAAA;AAAA,cACV,WAAA,EAAY,gBAAA;AAAA,cACZ,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QAEC,kBAAkB,QAAQ,CAAA,oBACzBY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,0BAC7BA,GAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,WAAA;AAAA,cACP,QAAA,EAAU,kBAAA;AAAA,cACV,WAAA,EAAY,gBAAA;AAAA,cACZ,SAAA,EAAU,aAAA;AAAA,cACV,OAAA,EAAS;AAAA;AAAA;AACX,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,aAAA,IAAiB,EAAC;AAEzC,IAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACb,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,sBACvCY,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,KAAA,IAAS,QAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,IAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA,EAAW,eAAe,QAAA,EAChG,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,iBAAc,SAAA,EAAU,aAAA,EACvB,0BAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,WAAA,EAAY,CAAA,EACvC,CAAA;AAAA,wBACAA,GAAAA,CAAC,aAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,GAAAA,CAAC,UAAA,EAAA,EAA8B,KAAA,EAAO,OAAO,KAAA,EAC1C,QAAA,EAAA,MAAA,CAAO,SADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,sBAAsB,sBAC1BY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAW,iBAAO,MAAA,EAAO,CAAA;AAAA,sBAC1CA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAS,KAAA,KAAU,IAAA;AAAA,UACnB,eAAA,EAAiB,CAAC,OAAA,KAAY,QAAA,CAAS,OAAO;AAAA;AAAA;AAChD,KAAA,EACF,CAAA;AAAA,oBACAY,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,MAAA,kCAAA;AAAA,MACV,QAAQ,MAAA,GAAS;AAAA,KAAA,EACpD;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,MAAA;AACH,QAAA,OAAO,gBAAA,EAAiB;AAAA,MAC1B,KAAK,QAAA;AACH,QAAA,OAAO,kBAAA,EAAmB;AAAA,MAC5B,KAAK,MAAA;AACH,QAAA,OAAO,gBAAA,EAAiB;AAAA,MAC1B,KAAK,QAAA;AACH,QAAA,OAAO,kBAAA,EAAmB;AAAA,MAC5B,KAAK,SAAA;AACH,QAAA,OAAO,mBAAA,EAAoB;AAAA,MAC7B;AACE,QAAA,OAAO,gBAAA,EAAiB;AAAA;AAC5B,EACF,CAAA;AAEA,EAAA,uBACEA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAC1B,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,OAAO,MAAA,GAAS;AAAA,KAAA,EAC/D,CAAA;AAAA,IAEC,YAAA,EAAa;AAAA,oBAEdA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,OAAA,EAAS,WAAA;AAAA,UACT,SAAA,EAAU,QAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACAA,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU,QAAA,EAAS,QAAA,EAAA,OAAA,EAE3D;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC7ZO,SAAS,UAAA,CAAoB;AAAA,EAClC,MAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUoC,iBAAS,KAAK,CAAA;AAExD,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,KAAA,KAAU,MAAA,CAAO,GAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,CAAC,CAAC,MAAA;AACrB,EAAA,MAAM,UAAA,GAAa,OAAO,QAAA,IAAY,MAAA;AACtC,EAAA,MAAM,YAAA,GAAe,OAAO,UAAA,IAAc,cAAA;AAE1C,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,SAAA,KAAmC;AAC7D,IAAA,cAAA,GAAiB,SAAS,CAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAwB;AACjD,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,cAAA,GAAiB,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,OAAO,IAAA;AAE7B,IAAA,MAAMR,KAAAA,GAAO,QAAA,IAAY,OAAA,EAAS,SAAA,KAAc,SAASf,WAAAA,GAAcwB,SAAAA;AAEvE,IAAA,uBACErC,GAAAA;AAAA,MAAC4B,KAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,WACI,6BAAA,GACA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEhB,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA,sBAAA;AAAA,QACA,UAAA,IAAc;AAAA,OAChB;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,0CAAA;AAAA,cACA,WAAA,IAAe,MAAA;AAAA;AAAA,cACf,UAAA,IAAc,mCAAA;AAAA,cACd,MAAA,CAAO,UAAU,QAAA,IAAY,gBAAA;AAAA,cAC7B,MAAA,CAAO,UAAU,OAAA,IAAW;AAAA,aAC9B;AAAA,YACA,OAAA,EAAS,iBAAA;AAAA,YACT,IAAA,EAAM,aAAa,QAAA,GAAW,MAAA;AAAA,YAC9B,QAAA,EAAU,aAAa,CAAA,GAAI,MAAA;AAAA,YAC3B,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,eAAe,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,CAAA,EAAM;AACtD,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,iBAAA,EAAkB;AAAA,cACpB;AAAA,YACF,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACb,iBAAO,MAAA,EACV,CAAA;AAAA,cAEC,mBAAA,EAAoB;AAAA,cAEpB,gCACCY,IAAAA,CAAC,WAAQ,IAAA,EAAM,UAAA,EAAY,cAAc,aAAA,EACvC,QAAA,EAAA;AAAA,gCAAAZ,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,SAAA,EAAW,EAAA;AAAA,sBACT,aAAA;AAAA,sBACA,UAAA,IAAc;AAAA,qBAChB;AAAA,oBACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,sBAAA,aAAA,CAAc,CAAC,UAAU,CAAA;AAAA,oBAC3B,CAAA;AAAA,oBACA,YAAA,EAAY,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,oBAEnC,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,iBAClC,EACF,CAAA;AAAA,gCACAA,GAAAA;AAAA,kBAAC,cAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAM,OAAA;AAAA,oBACN,SAAA,EAAU,UAAA;AAAA,oBACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,oBAElC,QAAA,kBAAAA,GAAAA;AAAA,sBAAC,aAAA;AAAA,sBAAA;AAAA,wBACC,MAAA;AAAA,wBACA,MAAA;AAAA,wBACA,cAAA,EAAgB;AAAA;AAAA;AAClB;AAAA;AACF,eAAA,EACF,CAAA;AAAA,cAGD,UAAA,IAAc,CAAC,UAAA,oBACdA,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,OAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,iDAAA;AAAA,kBACV,OAAA,EAAS,iBAAA;AAAA,kBACT,YAAA,EAAW,cAAA;AAAA,kBAEX,QAAA,kBAAAA,GAAAA,CAACgC,CAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB;AAAA;AAAA,SAEJ;AAAA,QAEC,+BACChC,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,0DAAA;AAAA,cACA,kCAAA;AAAA,cACA,sCAAA;AAAA,cACA,OAAA;AAAA,cACA,UAAA,IAAc;AAAA,aAChB;AAAA,YACA,WAAA,EAAa,iBAAA;AAAA,YACb,aAAA,EAAe,mBAAA;AAAA,YACf,IAAA,EAAK,WAAA;AAAA,YACL,kBAAA,EAAiB,UAAA;AAAA,YACjB,YAAA,EAAY,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,YAE1C,QAAA,kBAAAA,GAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,2BAAA;AAAA,kBACA,0BAAA;AAAA,kBACA,0BAAA;AAAA,kBACA,UAAA,IAAc;AAAA;AAChB;AAAA;AACF;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AC/JO,SAAS,UAAA,CAA0C;AAAA,EACxD,MAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,MAAA;AACxC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUsC,iBAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,OAAA,CAAA,QAAA;AAAA,IAClD;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAiBA,eAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAkBA,eAA0B,IAAI,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAe,WAAW,KAAA,GAAQ,aAAA;AACxC,EAAA,MAAM,WAAW,QAAA,IAAY,gBAAA;AAE7B,EAAA,MAAM,QAAA,GAAiBA,OAAA,CAAA,WAAA;AAAA,IACrB,CAAC,GAAA,KAA4B;AAC3B,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,EAAW,OAAO,IAAA;AAE9B,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,GAAG,CAAA;AACxC,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,kBAAA,CAAmB,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,GAAS,eAAe,CAAA;AACxE,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,QAAQ,GAAG;AAAA,GACd;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAwB;AAC5C,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,QAAA,CAAS,YAAY,CAAA,EAAG;AAC1B,MAAA,QAAA,CAAS,YAAY,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,QAAA,EAAS;AAAA,IACX,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO;AAC1B,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAwB;AAC1C,IAAA,MAAM,gBAAgB,CAAA,CAAE,aAAA;AAExB,IAAA,IAAI,aAAA,EAAe,OAAA,CAAQ,8BAA8B,CAAA,EAAG;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,EAAe,OAAA,CAAQ,oBAAoB,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,EAAe,OAAA,CAAQ,qCAAqC,CAAA,EAAG;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,EAAa;AAAA,EACf,CAAA;AAEA,EAAMA,kBAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,QAAA,SAAA,CAAU,SAAS,KAAA,EAAM;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AACxB,QAAA,QAAA,CAAS,SAAS,MAAA,EAAO;AAAA,MAC3B;AAAA,IACF,GAAG,CAAC,CAAA;AAEJ,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,gBAAA,GAAmB,sBACvBtC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,YAAA,IAAgB,IAAA,GAAO,MAAA,CAAO,YAAY,CAAA,GAAI,EAAA;AAAA,MACrD,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC5C,SAAA,EAAW,aAAA;AAAA,MACX,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kFAAA;AAAA,QACA,eAAA,IAAmB,gDAAA;AAAA,QACnB;AAAA,OACF;AAAA,MACA,cAAA,EAAc,CAAC,CAAC,eAAA;AAAA,MAChB,kBAAA,EAAkB,kBAAkB,mBAAA,GAAsB;AAAA;AAAA,GAC5D;AAGF,EAAA,MAAM,kBAAA,GAAqB,sBACzBA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO,OAAO,YAAA,KAAiB,QAAA,GAAW,eAAgB,YAAA,IAAgB,IAAA,GAAO,MAAA,CAAO,YAAY,CAAA,GAAI,EAAA;AAAA,MACxG,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,EAAE,MAAA,CAAO,aAAA,IAAiB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,MACtE,SAAA,EAAW,aAAA;AAAA,MACX,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,kFAAA;AAAA,QACA,eAAA,IAAmB,gDAAA;AAAA,QACnB;AAAA,OACF;AAAA,MACA,cAAA,EAAc,CAAC,CAAC;AAAA;AAAA,GAClB;AAGF,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAM,SAAA,GAAkBsC,gBAAQ,MAAM;AACpC,MAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAC1B,MAAA,IAAI,YAAA,YAAwB,MAAM,OAAO,YAAA;AACzC,MAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAASC,SAAS,YAAY,CAAA;AACpC,QAAA,OAAOL,OAAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,MACpC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA2B;AACnD,MAAA,MAAM,WAAA,GAAc,IAAA,GAAOC,MAAAA,CAAO,IAAA,EAAM,YAAY,CAAA,GAAI,EAAA;AACxD,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,QAAA,CAAS,WAAW,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,uBACEnC,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,eAAA;AAAA,QACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,QAAA,EAAS;AAAA,UACX;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,kBAAAA,GAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,SAAA;AAAA,YACP,QAAA,EAAU,gBAAA;AAAA,YACV,WAAA,EAAY,gBAAA;AAAA,YACZ,SAAA,EAAW,EAAA;AAAA,cACT,mGAAA;AAAA,cACA,eAAA,IAAmB,yBAAA;AAAA,cACnB;AAAA;AACF;AAAA;AACF;AAAA,KACF;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,aAAA,IAAiB,EAAC;AAEzC,IAAA,uBACEY,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,MAAA,CAAO,YAAA,IAAgB,EAAE,CAAA;AAAA,QAChC,aAAA,EAAe,CAAC,GAAA,KAAQ;AACtB,UAAA,YAAA,CAAa,GAAG,CAAA;AAChB,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,IAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACjB,cAAA,QAAA,CAAS,GAAG,CAAA;AAAA,YACd;AAAA,UACF,GAAG,CAAC,CAAA;AAAA,QACN,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAZ,GAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,6EAAA;AAAA,gBACA,eAAA,IAAmB,gDAAA;AAAA,gBACnB;AAAA,eACF;AAAA,cACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,kBAAA,QAAA,EAAS;AAAA,gBACX;AAAA,cACF,CAAA;AAAA,cAEA,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,WAAA,EAAY;AAAA;AAAA,WACvC;AAAA,0BACAA,GAAAA,CAAC,aAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,GAAAA,CAAC,UAAA,EAAA,EAA8B,KAAA,EAAO,OAAO,KAAA,EAC1C,QAAA,EAAA,MAAA,CAAO,SADO,MAAA,CAAO,KAExB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAAuC;AAC3D,MAAA,MAAM,YAAY,OAAA,KAAY,IAAA;AAC9B,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,QAAA,CAAS,SAAS,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,+DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,YAAA,CAAa,CAAC,YAAY,CAAA;AAAA,UAC5B,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,QAAA,EAAS;AAAA,UACX;AAAA,QACF,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,YAAA,CAAa,CAAC,YAAY,CAAA;AAAA,QAC5B,CAAA;AAAA,QACA,QAAA,EAAU,CAAA;AAAA,QACV,GAAA,EAAK,CAAC,EAAA,KAAO,EAAA,EAAI,KAAA,EAAM;AAAA,QACvB,IAAA,EAAK,UAAA;AAAA,QACL,cAAA,EAAc,CAAC,CAAC,YAAA;AAAA,QAEhB,QAAA,kBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,CAAC,CAAC,YAAA;AAAA,YACX,eAAA,EAAiB,YAAA;AAAA,YACjB,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YACtC,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA;AAAgB;AAAA;AACpC;AAAA,KACF;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,MAAA;AACH,QAAA,OAAO,gBAAA,EAAiB;AAAA,MAC1B,KAAK,QAAA;AACH,QAAA,OAAO,kBAAA,EAAmB;AAAA,MAC5B,KAAK,MAAA;AACH,QAAA,OAAO,gBAAA,EAAiB;AAAA,MAC1B,KAAK,QAAA;AACH,QAAA,OAAO,kBAAA,EAAmB;AAAA,MAC5B,KAAK,SAAA;AACH,QAAA,OAAO,mBAAA,EAAoB;AAAA,MAC7B;AACE,QAAA,OAAO,gBAAA,EAAiB;AAAA;AAC5B,EACF,CAAA;AAEA,EAAA,uBACEY,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,wBAAA;AAAA,MACV,kBAAA,EAAgB,IAAA;AAAA,MAChB,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,QAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AAChC,UAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,YAAA,EAAa;AAAA,QAEb,mCACCZ,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,mBAAA;AAAA,YACH,SAAA,EAAU,qIAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YAEJ,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AC5QO,SAAS,iBACd,OAAA,EACwB;AACxB,EAAA,MAAM;AAAA,IACJ,OAAA,EAAS,iBAAA;AAAA,IACT,OAAA,EAAS,iBAAA;AAAA,IACT,YAAA,EAAc,sBAAA;AAAA,IACd,WAAA,EAAa,qBAAA;AAAA,IAEb,iBAAiB,EAAC;AAAA,IAClB,iBAAiB,EAAC;AAAA,IAClB,sBAAsB,EAAC;AAAA,IAEvB,YAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IAEA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA,EAAAwC;AAAA,GACF,GAAI,OAAA;AACJ,EAAA,MAAM,YAAA,GAAeC,OAAAA;AAAA,IACnB,OAAO;AAAA,MACL,SAAS,iBAAA,KAAsB,MAAA;AAAA,MAC/B,SAAS,iBAAA,KAAsB,MAAA;AAAA,MAC/B,cAAc,sBAAA,KAA2B,MAAA;AAAA,MACzC,aAAa,qBAAA,KAA0B;AAAA,KACzC,CAAA;AAAA,IACA;AAAA,MACE,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GACxCC,SAAuB,cAAc,CAAA;AACvC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GACxCA,SAAyB,cAAc,CAAA;AACzC,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAClDA,SAAiC,mBAAmB,CAAA;AACtD,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChDA,SAA8B,IAAI,CAAA;AACpC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAA6B,IAAI,CAAA;AAEvE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,GAAU,iBAAA,GAAqB,eAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,GAAU,iBAAA,GAAqB,eAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,WAAA,GAC7B,qBAAA,GACA,mBAAA;AAEJ,EAAA,MAAM,YAAA,GAAeD,QAAQ,MAAM;AACjC,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,YAAA,GAC5B,sBAAA,GACA,oBAAA;AACJ,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,GAAI,UAAA,CAAW,OAAO,GAAG,CAAA,IAAK,OAAO,KAAA,IAAS,GAAA;AAAA,IACjE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,CAAC,YAAA,CAAa,cAAc,sBAAA,EAAwB,oBAAA,EAAsB,OAAO,CAAC,CAAA;AAErF,EAAA,MAAM,YAAA,GAAeE,OAA6B,IAAI,CAAA;AAEtD,EAAA,MAAM,KAAA,GAA+BF,OAAAA;AAAA,IACnC,OAAO;AAAA,MACL,OAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,aAAa,WAAW;AAAA,GAC3D;AAEA,EAAAG,UAAU,MAAM;AACd,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,YAAA,GAA8B;AAAA,QAClC,OAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IACE,IAAA,CAAK,UAAU,YAAY,CAAA,KAAM,KAAK,SAAA,CAAU,YAAA,CAAa,OAAO,CAAA,EACpE;AACA,QAAA,YAAA,CAAa,OAAA,GAAU,YAAA;AACvB,QAAA,aAAA,CAAc,YAAY,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,EAAS,cAAc,WAAA,EAAa,WAAA,EAAa,aAAa,CAAC,CAAA;AAG5E,EAAA,MAAM,UAAA,GAAaC,WAAAA;AAAA,IACjB,CAAC,UAAA,KAA6B;AAC5B,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,YAAA,GAAe,UAAU,CAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAC7B,QAAA,YAAA,GAAe,UAAU,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAA,CAAa,OAAA,EAAS,YAAY;AAAA,GACrC;AAEA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,SAAA,KAAsB;AACrB,MAAA,MAAM,cAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,SAAS,CAAA;AAC7D,MAAA,IAAI,UAAA;AAEJ,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,UAAA,GAAa,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA;AAAA,MACtD,CAAA,MAAA,IAAW,WAAA,CAAY,SAAA,KAAc,KAAA,EAAO;AAC1C,QAAA,UAAA,GAAa,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,UAAA,GAAa,EAAC;AAAA,MAChB;AAEA,MAAA,UAAA,CAAW,UAAU,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,GACtB;AAGA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,UAAA,KAA+B;AAC9B,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,cAAA,GAAiB,UAAU,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,kBAAA,CAAmB,UAAU,CAAA;AAC7B,QAAA,cAAA,GAAiB,UAAU,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAA,CAAa,OAAA,EAAS,cAAc;AAAA,GACvC;AAEA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CAAC,QAA6B,SAAA,KAAsB;AAClD,MAAA,MAAM,aAAa,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAClE,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AACA,MAAA,UAAA,CAAW,UAAU,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,GACtB;AAEA,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,WAAmB,KAAA,KAAkB;AACpC,MAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,QAAA,cAAA,GAAiB,WAAW,KAAK,CAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,uBAAA,CAAwB,CAAC,IAAA,MAAU;AAAA,UACjC,GAAG,IAAA;AAAA,UACH,CAAC,SAAS,GAAG;AAAA,SACf,CAAE,CAAA;AACF,QAAA,cAAA,GAAiB,WAAW,KAAK,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAA,CAAa,YAAA,EAAc,cAAc;AAAA,GAC5C;AAGA,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,IAAA,KAA8B;AAC7B,MAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,QAAA,mBAAA,GAAsB,IAAI,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,QAAA,mBAAA,GAAsB,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAA,CAAa,WAAA,EAAa,mBAAmB;AAAA,GAChD;AAGA,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,CAAC,UAAkB,SAAA,KAAsB;AACvC,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,QAAA,EAAU,SAAS,CAAA;AACnD,QAAA,IAAI,YAAY,KAAA,EAAO;AAAA,MACzB;AAEA,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;AACtD,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,QAAA,EAAU;AAEjC,MAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,MAAA,IAAI,CAAC,GAAA,EAAK;AAEV,MAAA,MAAM,KAAA,GAAQL,aAAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAEtC,MAAA,cAAA,CAAe;AAAA,QACb,QAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,aAAA,EAAe;AAAA,OAChB,CAAA;AAED,MAAA,cAAA,CAAe,EAAE,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,IAAA,EAAMA,aAAAA,EAAc,iBAAiB,cAAc;AAAA,GAC/D;AAEA,EAAA,MAAM,kBAAA,GAAqBK,WAAAA,CAAY,CAAC,KAAA,KAAqB;AAC3D,IAAA,cAAA,CAAe,CAAC,SAAU,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,KAAA,KAAU,IAAK,CAAA;AAAA,EAC7D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA,CAAY,CAAC,aAAA,KAA8B;AAC5D,IAAA,IAAI,CAAC,WAAA,EAAa;AAElB,IAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,aAAA,EAAc,GAAI,WAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,aAAA,KAAkB,MAAA,GAAY,aAAA,GAAgB,WAAA,CAAY,KAAA;AAExE,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;AACtD,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA;AACpD,MAAA,IAAI,gBAAA,KAAqB,IAAA,IAAQ,OAAO,gBAAA,KAAqB,QAAA,EAAU;AACrE,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,MAAA,UAAA,GAAa,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,aAAa,CAAA;AAAA,IACxD;AAEA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,GAAG,CAAC,WAAA,EAAa,OAAA,EAAS,IAAA,EAAM,UAAU,CAAC,CAAA;AAE3C,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,gBAAA,GAAmB,WAAA,CAAY,QAAA,EAAU,WAAA,CAAY,SAAS,CAAA;AAAA,IAChE;AACA,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,WAAA,EAAa,gBAAgB,CAAC,CAAA;AAElC,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA;AAAA,GACF;AACF;AClSA,SAAS,kBAAqB,OAAA,EAAyC;AACrE,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,MAAM,CAAA;AAC5C;AAKO,SAAS,sBACd,OAAA,EAC6B;AAC7B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,GAAkB,EAAA;AAAA,IAClB,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,YAAA,GAAeF,OAAuB,IAAI,CAAA;AAGhD,EAAA,MAAM,cAAA,GAAiB,kBAAkB,OAAO,CAAA;AAKhD,EAAA,MAAM,cAAA,GAAiBE,WAAAA;AAAA,IACrB,CAAC,SAAA,KAA8B;AAC7B,MAAA,OAAO,eAAe,SAAA,CAAU,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,SAAS,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAKA,EAAA,MAAM,YAAA,GAAeA,WAAAA;AAAA,IACnB,CAAC,KAAA,KAAiC;AAChC,MAAA,MAAM,MAAA,GAAS,eAAe,KAAK,CAAA;AACnC,MAAA,OAAO,MAAA,GAAS,OAAO,GAAA,GAAM,IAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAKA,EAAA,MAAM,cAAA,GAAiBA,WAAAA;AAAA,IACrB,CAAC,UAAkB,SAAA,KAAsB;AAEvC,MAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,QAAA,EAAU,QAAA,GAAW,CAAC,CAAC,CAAA;AAE/D,MAAA,mBAAA,CAAoB,EAAE,QAAA,EAAU,UAAA,EAAY,SAAA,EAAW,CAAA;AACvD,MAAA,aAAA,GAAgB,UAAU,CAAA;AAC1B,MAAA,gBAAA,GAAmB,SAAS,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,mBAAA,EAAqB,aAAA,EAAe,gBAAgB;AAAA,GACjE;AAKA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CAAC,UAAkB,QAAA,KAAqB;AACtC,MAAA,IAAI,CAAC,WAAA,IAAe,cAAA,CAAe,MAAA,KAAW,CAAA,IAAK,aAAa,CAAA,EAAG;AAEnE,MAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC5D,MAAA,IAAI,oBAAoB,EAAA,EAAI;AAE5B,MAAA,IAAI,WAAA,GAAc,YAAY,QAAA,GAAW,QAAA;AACzC,MAAA,IAAI,cAAc,eAAA,GAAkB,QAAA;AAGpC,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,IAAI,cAAc,CAAA,EAAG;AAEnB,UAAA,IAAI,cAAc,CAAA,EAAG;AACnB,YAAA,WAAA,EAAA;AACA,YAAA,WAAA,GAAc,eAAe,MAAA,GAAS,CAAA;AAAA,UACxC,CAAA,MAAO;AACL,YAAA,WAAA,GAAc,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAA,IAAW,WAAA,IAAe,cAAA,CAAe,MAAA,EAAQ;AAE/C,UAAA,IAAI,WAAA,GAAc,WAAW,CAAA,EAAG;AAC9B,YAAA,WAAA,EAAA;AACA,YAAA,WAAA,GAAc,CAAA;AAAA,UAChB,CAAA,MAAO;AACL,YAAA,WAAA,GAAc,eAAe,MAAA,GAAS,CAAA;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAGA,MAAA,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,WAAA,EAAa,QAAA,GAAW,CAAC,CAAC,CAAA;AAC7D,MAAA,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,WAAA,EAAa,cAAA,CAAe,MAAA,GAAS,CAAC,CAAC,CAAA;AAE1E,MAAA,MAAM,YAAA,GAAe,aAAa,WAAW,CAAA;AAC7C,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,cAAA,CAAe,aAAa,YAAY,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,WAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AAKA,EAAA,MAAM,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,IAAI,CAAC,WAAA,IAAe,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AACjD,IAAA,MAAM,cAAA,GAAiB,aAAa,CAAC,CAAA;AACrC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,cAAA,CAAe,WAAA,CAAY,UAAU,cAAc,CAAA;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,eAAe,MAAA,EAAQ,YAAA,EAAc,cAAc,CAAC,CAAA;AAKrE,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,IAAI,CAAC,WAAA,IAAe,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AACjD,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA;AAC5D,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,cAAA,CAAe,WAAA,CAAY,UAAU,aAAa,CAAA;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,eAAe,MAAA,EAAQ,YAAA,EAAc,cAAc,CAAC,CAAA;AAKrE,EAAA,MAAM,eAAA,GAAkBA,YAAY,MAAM;AACxC,IAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,IAAK,QAAA,KAAa,CAAA,EAAG;AACnD,IAAA,MAAM,cAAA,GAAiB,aAAa,CAAC,CAAA;AACrC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,cAAA,CAAe,GAAG,cAAc,CAAA;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,cAAA,CAAe,QAAQ,QAAA,EAAU,YAAA,EAAc,cAAc,CAAC,CAAA;AAKlE,EAAA,MAAM,aAAA,GAAgBA,YAAY,MAAM;AACtC,IAAA,IAAI,cAAA,CAAe,MAAA,KAAW,CAAA,IAAK,QAAA,KAAa,CAAA,EAAG;AACnD,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA;AAC5D,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,cAAA,CAAe,QAAA,GAAW,GAAG,aAAa,CAAA;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,cAAA,CAAe,QAAQ,QAAA,EAAU,YAAA,EAAc,cAAc,CAAC,CAAA;AAKlE,EAAA,MAAM,aAAA,GAAgBA,WAAAA;AAAA,IACpB,CAAC,KAAA,KAA+B;AAC9B,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAS,OAAA,EAAS,UAAS,GAAI,KAAA;AAC5C,MAAA,MAAM,gBAAgB,OAAA,IAAW,OAAA;AAGjC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,QAAQ,GAAA;AAAK,UACX,KAAK,OAAA;AACH,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,YAAA,EAAa;AACb,YAAA;AAAA,UACF,KAAK,QAAA;AACH,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,YAAA,EAAa;AACb,YAAA;AAAA,UACF,KAAK,KAAA;AAEH,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,YAAA,EAAa;AACb,YAAA,SAAA,CAAU,CAAA,EAAG,QAAA,GAAW,EAAA,GAAK,CAAC,CAAA;AAC9B,YAAA;AAAA;AAEJ,QAAA;AAAA,MACF;AAGA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,SAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AACf,UAAA;AAAA,QAEF,KAAK,WAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AACd,UAAA;AAAA,QAEF,KAAK,WAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,GAAG,EAAE,CAAA;AACf,UAAA;AAAA,QAEF,KAAK,YAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AACd,UAAA;AAAA,QAEF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,CAAA,EAAG,QAAA,GAAW,EAAA,GAAK,CAAC,CAAA;AAC9B,UAAA;AAAA,QAEF,KAAK,MAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,eAAA,EAAgB;AAAA,UAClB,CAAA,MAAO;AACL,YAAA,cAAA,EAAe;AAAA,UACjB;AACA,UAAA;AAAA,QAEF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,aAAA,EAAc;AAAA,UAChB,CAAA,MAAO;AACL,YAAA,YAAA,EAAa;AAAA,UACf;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,CAAC,iBAAiB,CAAC,CAAA;AAC7B,UAAA;AAAA,QAEF,KAAK,UAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,SAAA,CAAU,iBAAiB,CAAC,CAAA;AAC5B,UAAA;AAAA,QAEF,KAAK,OAAA;AAAA,QACL,KAAK,IAAA;AAEH,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,cACrB,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,WAAA,CAAY;AAAA,aAC/B;AACA,YAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,cAAA,cAAA,CAAe,WAAA,CAAY,QAAA,EAAU,WAAA,CAAY,SAAS,CAAA;AAAA,YAC5D;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AAEH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,UAAA;AAAA;AACJ,IACF,CAAA;AAAA,IACA;AAAA,MACE,OAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAKA,EAAA,MAAM,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,YAAA,CAAa,SAAS,KAAA,EAAM;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAOL,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AC1VA,IAAM,iBAAA,GAAoB,EAAA;AAG1B,IAAM,iBAAA,GAAoB,GAAA;AAoCnB,SAAS,gBACd,OAAA,EACuB;AACvB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIH,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,SAAA,GAAYC,OAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,aAAA,GAAgBA,OAAO,CAAC,CAAA;AAG9B,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,iBAAA;AACpC,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,iBAAA;AAKpC,EAAA,MAAM,UAAA,GAAaE,WAAAA;AAAA,IACjB,CAAC,KAAA,KAA0B;AACzB,MAAA,OAAO,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,UAAU,QAAQ;AAAA,GACrB;AAKA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,KAAA,KAA4B;AAC3B,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AAEtB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,SAAA,CAAU,UAAU,KAAA,CAAM,OAAA;AAC1B,MAAA,aAAA,CAAc,OAAA,GAAU,YAAA;AAGxB,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA;AACjC,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,YAAA;AAE7B,MAAA,aAAA,IAAgB;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,YAAA,EAAc,aAAa;AAAA,GACvC;AAKA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,KAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,GAAU,SAAA,CAAU,OAAA;AACzC,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,aAAA,CAAc,OAAA,GAAU,MAAM,CAAA;AAE1D,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,UAAA,EAAY,QAAQ;AAAA,GACnC;AAKA,EAAA,MAAM,aAAA,GAAgBA,YAAY,MAAM;AACtC,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,aAAA,CAAc,KAAK,CAAA;AAGnB,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AACjC,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAG7B,IAAA,MAAM,UAAA,GAAa,WAAW,YAAY,CAAA;AAC1C,IAAA,WAAA,GAAc,UAAU,CAAA;AAAA,EAC1B,GAAG,CAAC,UAAA,EAAY,YAAA,EAAc,UAAA,EAAY,WAAW,CAAC,CAAA;AAMtD,EAAA,MAAM,iBAAA,GAAoBA,WAAAA;AAAA,IACxB,CAAC,KAAA,KAA4B;AAC3B,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AAGtB,MAAA,MAAM,YAAA,GAAe,OAAO,KAAA,IAAS,GAAA;AACrC,MAAA,MAAM,YAAA,GAAe,WAAW,YAAY,CAAA;AAC5C,MAAA,QAAA,CAAS,YAAY,CAAA;AACrB,MAAA,WAAA,GAAc,YAAY,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,MAAA,CAAO,KAAA,EAAO,UAAA,EAAY,UAAU,WAAW;AAAA,GAC3D;AAGA,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAEhD,MAAA,OAAO,MAAM;AACX,QAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACvD,QAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,MACrD,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,eAAA,EAAiB,aAAa,CAAC,CAAA;AAG/C,EAAAA,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,WAAA,EAAa,eAAA;AAAA,MACb,aAAA,EAAe,iBAAA;AAAA,MACf,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,UAAU,YAAA,GAAe,SAAA;AAAA,QACjC,WAAA,EAAa;AAAA,OACf;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MACN,YAAA,EAAc,iBAAiB,SAAS,CAAA,CAAA;AAAA,MACxC,QAAA,EAAU,UAAU,CAAA,GAAI;AAAA;AAC1B,GACF;AACF;AAkCO,SAAS,uBACd,OAAA,EAC8B;AAC9B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIF,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,SAAA,GAAYC,OAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,aAAA,GAAgBA,OAAO,CAAC,CAAA;AAK9B,EAAA,MAAM,SAAA,GAAYE,WAAAA;AAAA,IAChB,CAAC,SAAA,KAAgD;AAC/C,MAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAKA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,WAAmB,KAAA,KAA0B;AAC5C,MAAA,MAAM,MAAA,GAAS,UAAU,SAAS,CAAA;AAClC,MAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,MAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,MAAA,OAAO,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAKA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,CAAC,KAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,GAAU,SAAA,CAAU,OAAA;AACzC,MAAA,MAAM,QAAA,GAAW,UAAA;AAAA,QACf,cAAA;AAAA,QACA,cAAc,OAAA,GAAU;AAAA,OAC1B;AAEA,MAAA,cAAA,CAAe,gBAAgB,QAAQ,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,UAAA,EAAY,cAAc;AAAA,GAC7C;AAKA,EAAA,MAAM,aAAA,GAAgBA,YAAY,MAAM;AACtC,IAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,cAAc,CAAA,IAAK,GAAA;AAEnD,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,EAAA;AACjC,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,EAAA;AAE7B,IAAA,iBAAA,GAAoB,gBAAgB,UAAU,CAAA;AAAA,EAChD,CAAA,EAAG,CAAC,cAAA,EAAgB,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAGpD,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAEhD,MAAA,OAAO,MAAM;AACX,QAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACvD,QAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,MACrD,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,eAAA,EAAiB,aAAa,CAAC,CAAA;AAKnD,EAAA,MAAM,cAAA,GAAiBC,WAAAA;AAAA,IACrB,CAAC,SAAA,KAAsB;AACrB,MAAA,MAAM,MAAA,GAAS,UAAU,SAAS,CAAA;AAClC,MAAA,MAAM,WAAA,GACJ,gBAAA,IAAqB,MAAA,EAAQ,SAAA,KAAc,KAAA;AAE7C,MAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA4B;AACnD,QAAA,IAAI,CAAC,WAAA,EAAa;AAElB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,eAAA,EAAgB;AAEtB,QAAA,iBAAA,CAAkB,SAAS,CAAA;AAC3B,QAAA,SAAA,CAAU,UAAU,KAAA,CAAM,OAAA;AAC1B,QAAA,aAAA,CAAc,OAAA,GAAU,YAAA,CAAa,SAAS,CAAA,IAAK,QAAQ,KAAA,IAAS,GAAA;AAEpE,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA;AACjC,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,MAAA,GAAS,YAAA;AAE7B,QAAA,mBAAA,GAAsB,SAAS,CAAA;AAAA,MACjC,CAAA;AAEA,MAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA4B;AACrD,QAAA,IAAI,CAAC,WAAA,EAAa;AAElB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,eAAA,EAAgB;AAGtB,QAAA,MAAM,YAAA,GAAe,QAAQ,KAAA,IAAS,GAAA;AACtC,QAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,QAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AACrC,QAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK,GAAA,CAAI,QAAA,EAAU,YAAY,CAAC,CAAA;AAExE,QAAA,cAAA,CAAe,WAAW,YAAY,CAAA;AACtC,QAAA,iBAAA,GAAoB,WAAW,YAAY,CAAA;AAAA,MAC7C,CAAA;AAEA,MAAA,OAAO;AAAA,QACL,YAAY,cAAA,KAAmB,SAAA;AAAA,QAC/B,eAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACrWO,SAAS,YAAA,CAAgB,KAAQ,MAAA,EAAiC;AACvE,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,OAAO,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAQ,GAAA,CAAkC,OAAO,GAAG,CAAA;AACtD;AAKO,SAAS,YAAA,CACd,IAAA,EACA,OAAA,EACA,OAAA,EACK;AACL,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,IAAI,CAAA;AAGvB,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,KAAK,KAAK,CAAA;AACvD,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAEpB,MAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,QAAA,MAAM,GAAA,GAAM,MAAA,CAAO,cAAA,CAAe,CAAA,EAAG,CAAC,CAAA;AACtC,QAAA,OAAO,IAAA,CAAK,SAAA,KAAc,KAAA,GAAQ,GAAA,GAAM,CAAC,GAAA;AAAA,MAC3C;AAGA,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AACnC,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AAGnC,MAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,IAAQ,IAAA,EAAM,OAAO,CAAA;AACzC,MAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,IAAA,CAAK,SAAA,KAAc,QAAQ,CAAA,GAAI,EAAA;AACxD,MAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,IAAA,CAAK,SAAA,KAAc,QAAQ,EAAA,GAAK,CAAA;AAGzD,MAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACxD,QAAA,UAAA,GAAa,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,MACtC,WAAW,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AAC/D,QAAA,UAAA,GAAa,IAAA,GAAO,IAAA;AAAA,MACtB,CAAA,MAAA,IAAW,IAAA,YAAgB,IAAA,IAAQ,IAAA,YAAgB,IAAA,EAAM;AACvD,QAAA,UAAA,GAAa,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA,CAAK,OAAA,EAAQ;AAAA,MAC7C,WAAW,OAAO,IAAA,KAAS,SAAA,IAAa,OAAO,SAAS,SAAA,EAAW;AACjE,QAAA,UAAA,GAAa,IAAA,KAAS,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,EAAA;AAAA,MAC9C,CAAA,MAAO;AAEL,QAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MACtD;AAEA,MAAA,OAAO,IAAA,CAAK,SAAA,KAAc,KAAA,GAAQ,UAAA,GAAa,CAAC,UAAA;AAAA,IAClD,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,mBAAmB,WAAA,EAAqC;AAC/D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,YAAY,CAAC,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,WAAA;AACT;AAKA,SAAS,UAAU,KAAA,EAA+B;AAChD,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,KAAU,EAAA,EAAI,OAAO,IAAA;AAC1C,EAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAI,IAAA,GAAO,IAAA;AAAA,EACxC;AACA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,YAAA,CAAa,OAAa,KAAA,EAAqB;AAEtD,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,EAAS,EAAG,KAAA,CAAM,OAAA,EAAS,CAAA;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,EAAG,KAAA,CAAM,QAAA,EAAS,EAAG,KAAA,CAAM,OAAA,EAAS,CAAA;AAC1E,EAAA,OAAO,EAAA,CAAG,OAAA,EAAQ,GAAI,EAAA,CAAG,OAAA,EAAQ;AACnC;AAmBO,SAAS,mBAAA,CACd,KAAA,EACA,WAAA,EACA,aAAA,EACA,UACA,UAAA,EACS;AAET,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,OAAO,KAAA,KAAU,MAAM,KAAA,IAAS,IAAA;AAAA,EAClC;AACA,EAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,IAAA,OAAO,KAAA,KAAU,MAAM,KAAA,IAAS,IAAA;AAAA,EAClC;AAGA,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,UAAA,KAAe,MAAA,IAAU,QAAA,KAAa,QAAA,IAAY,aAAa,OAAA,EAAS;AAC1E,IAAA,MAAM,SAAA,GAAY,UAAU,KAAK,CAAA;AACjC,IAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,kBAAA,CAAmB,WAAW,CAAC,CAAA;AACjE,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,kBAAA,CAAmB,aAAa,CAAC,CAAA;AAErE,IAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AAEvB,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,OAAO,eAAA,GAAkB,YAAA,CAAa,SAAA,EAAW,eAAe,MAAM,CAAA,GAAI,KAAA;AAAA,MAC5E,KAAK,WAAA;AACH,QAAA,OAAO,eAAA,GAAkB,YAAA,CAAa,SAAA,EAAW,eAAe,MAAM,CAAA,GAAI,KAAA;AAAA,MAC5E,KAAK,QAAA;AACH,QAAA,OAAO,eAAA,GAAkB,YAAA,CAAa,SAAA,EAAW,eAAe,IAAI,CAAA,GAAI,KAAA;AAAA,MAC1E,KAAK,OAAA;AACH,QAAA,OAAO,eAAA,GAAkB,YAAA,CAAa,SAAA,EAAW,eAAe,IAAI,CAAA,GAAI,KAAA;AAAA,MAC1E,KAAK,SAAA;AACH,QAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,iBAAA,EAAmB,OAAO,KAAA;AACnD,QAAA,OACE,YAAA,CAAa,WAAW,eAAe,CAAA,IAAK,KAC5C,YAAA,CAAa,SAAA,EAAW,iBAAiB,CAAA,IAAK,CAAA;AAAA,MAElD;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF;AAGA,EAAA,IAAI,UAAA,KAAe,QAAA,IAAY,CAAC,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,SAAS,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvF,IAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,IAAA,MAAM,iBAAA,GAAoB,mBAAmB,WAAW,CAAA;AACxD,IAAA,MAAM,cAAA,GAAiB,OAAO,iBAAiB,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,KAAA;AAE5B,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,OAAO,QAAA,KAAa,cAAA;AAAA,MACtB,KAAK,WAAA;AACH,QAAA,OAAO,QAAA,KAAa,cAAA;AAAA,MACtB,KAAK,IAAA;AACH,QAAA,OAAO,QAAA,GAAW,cAAA;AAAA,MACpB,KAAK,KAAA;AACH,QAAA,OAAO,QAAA,IAAY,cAAA;AAAA,MACrB,KAAK,IAAA;AACH,QAAA,OAAO,QAAA,GAAW,cAAA;AAAA,MACpB,KAAK,KAAA;AACH,QAAA,OAAO,QAAA,IAAY,cAAA;AAAA,MACrB,KAAK,SAAA;AACH,QAAA,MAAM,mBAAA,GAAsB,mBAAmB,aAAa,CAAA;AAC5D,QAAA,MAAM,gBAAA,GAAmB,OAAO,mBAAmB,CAAA;AACnD,QAAA,OAAO,QAAA,IAAY,kBAAkB,QAAA,IAAY,gBAAA;AAAA,MACnD;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF;AAGA,EAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,UAAU,KAAA,KAAU,CAAA;AAClE,IAAA,MAAM,qBAAA,GAAwB,mBAAmB,WAAW,CAAA;AAC5D,IAAA,MAAM,eAAA,GAAkB,qBAAA,KAA0B,IAAA,IAAQ,qBAAA,KAA0B,UAAU,qBAAA,KAA0B,CAAA;AACxH,IAAA,OAAO,SAAA,KAAc,eAAA;AAAA,EACvB;AAGA,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA,CAAE,WAAA,EAAY;AAC3C,EAAA,MAAM,oBAAA,GAAuB,mBAAmB,WAAW,CAAA;AAC3D,EAAA,MAAM,iBAAiB,oBAAA,IAAwB,IAAA,GAAO,OAAO,oBAAoB,CAAA,CAAE,aAAY,GAAI,EAAA;AAEnG,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,UAAA;AACH,MAAA,OAAO,QAAA,CAAS,SAAS,cAAc,CAAA;AAAA,IACzC,KAAK,aAAA;AACH,MAAA,OAAO,CAAC,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA;AAAA,IAC1C,KAAK,QAAA;AACH,MAAA,OAAO,QAAA,KAAa,cAAA;AAAA,IACtB,KAAK,WAAA;AACH,MAAA,OAAO,QAAA,KAAa,cAAA;AAAA,IACtB,KAAK,YAAA;AACH,MAAA,OAAO,QAAA,CAAS,WAAW,cAAc,CAAA;AAAA,IAC3C,KAAK,UAAA;AACH,MAAA,OAAO,QAAA,CAAS,SAAS,cAAc,CAAA;AAAA,IACzC;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAKO,SAAS,YAAA,CACd,IAAA,EACA,OAAA,EACA,OAAA,EACK;AACL,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ;AAE1B,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,MAAA,KAAW;AAC/B,MAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAGtC,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,OAAO,OAAO,QAAA,CAAS,GAAA,EAAK,MAAA,CAAO,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,MAC3D;AAGA,MAAA,OAAO,mBAAA;AAAA,QACL,KAAA;AAAA,QACA,MAAA,CAAO,KAAA;AAAA,QACP,MAAA,CAAO,OAAA;AAAA,QACP,MAAA,CAAO,QAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;ACxOA,IAAM,kBAAA,GAAqB,EAAA;AAK3B,IAAM,gBAAA,GAAmB,EAAA;AAMzB,SAAS,oBAAuB,MAAA,EAA8B;AAC5D,EAAA,MAAM,aAAa,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,OAAO,MAAA,GAAS,EAAA;AAEvE,EAAA,MAAM,SAAA,GAAY,WAAW,MAAA,GAAS,CAAA;AAEtC,EAAA,MAAM,OAAA,GAAU,EAAA;AAEhB,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,QAAA,GAAW,EAAA,GAAK,CAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,UAAA,GAAa,EAAA,GAAK,CAAA;AAEjD,EAAA,MAAM,YAAA,GAAe,CAAA;AAErB,EAAA,MAAM,cAAA,GAAiB,SAAA,GAAY,OAAA,GAAU,aAAA,GAAgB,eAAA,GAAkB,YAAA;AAG/E,EAAA,OAAO,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,GAAA,CAAI,cAAA,EAAgB,GAAG,CAAC,CAAA;AACnD;AAKO,SAAS,QAAA,CAAwC;AAAA;AAAA,EAEtD,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,CAAC,CAAA,EAAG,KAAA,KAAU,OAAO,KAAK,CAAA;AAAA;AAAA,EAGtC,gBAAA,GAAmB,KAAA;AAAA,EACnB,WAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,YAAA,GAAe,IAAA;AAAA,EACf,gBAAA,GAAmB,EAAA;AAAA,EACnB,wBAAA,GAA2B,IAAA;AAAA,EAC3B,iBAAA,GAAoB,IAAA;AAAA,EACpB,qBAAA,GAAwB,IAAA;AAAA,EACxB,uBAAA,GAA0B,IAAA;AAAA;AAAA,EAG1B,OAAA,EAAS,iBAAA;AAAA,EACT,YAAA;AAAA;AAAA,EAGA,OAAA,EAAS,iBAAA;AAAA,EACT,cAAA;AAAA;AAAA,EAGA,YAAA,EAAc,sBAAA;AAAA,EACd,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA;AAAA,EAGA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA,EAGA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAe,EAAC;AAAA,EAChB,oBAAA;AAAA,EACA,YAAA;AAAA;AAAA,EAGA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA;AAAA,EAGA,WAAA,EAAa,qBAAA;AAAA,EACb,mBAAA;AAAA;AAAA,EAGA,UAAA;AAAA;AAAA,EAGA,MAAA;AAAA;AAAA,EAGA,OAAA,GAAU,KAAA;AAAA,EACV,gBAAA;AAAA,EACA,YAAA,GAAe,mBAAA;AAAA,EACf,cAAA;AAAA;AAAA,EAGA,SAAA;AAAA,EACA,cAAA;AAAA;AAAA,EAGA,cAAA,GAAiB,KAAA;AAAA,EACjB,UAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,WAAA,GAAc;AAChB,CAAA,EAAqB;AACnB,EAAA,MAAM,SAAA,GAAkBC,eAAuB,IAAI,CAAA;AACnD,EAAA,MAAM,SAAA,GAAkBA,eAAuB,IAAI,CAAA;AACnD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,iBAAS,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,iBAMlC,IAAI,CAAA;AAGd,EAAA,MAAM,cAAA,GAAuBA,OAAA,CAAA,OAAA;AAAA,IAC3B,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,MAAM,CAAA;AAAA,IACzC,CAAC,OAAO;AAAA,GACV;AAGA,EAAA,MAAMN,aAAAA,GAAqBM,OAAA,CAAA,WAAA;AAAA,IACzB,CAAC,KAAQ,MAAA,KAAoC;AAC3C,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,OAAO,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,MAC5B;AAEA,MAAA,OAAQ,GAAA,CAAkC,OAAO,GAAG,CAAA;AAAA,IACtD,CAAA;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,YAAA,KAAiB,gBAAA,CAAiB;AAAA,IACxD,OAAA,EAAS,iBAAA;AAAA,IACT,OAAA,EAAS,iBAAA;AAAA,IACT,YAAA,EAAc,sBAAA;AAAA,IACd,WAAA,EAAa,qBAAA;AAAA,IACb,cAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA,EAAS,cAAA;AAAA,IACT,IAAA;AAAA,IACA,YAAA,EAAAN;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,aAAA,GAAsBM,gBAAQ,MAAM;AACxC,IAAA,IAAI,MAAA,GAAS,IAAA;AAGb,IAAA,IAAI,2BAA2B,CAAC,YAAA,CAAa,WAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChF,MAAA,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,KAAA,CAAM,OAAA,EAAS,cAAc,CAAA;AAAA,IAC7D;AAGA,IAAA,IAAI,yBAAyB,CAAC,YAAA,CAAa,WAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9E,MAAA,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,KAAA,CAAM,OAAA,EAAS,cAAc,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG;AAAA,IACD,IAAA;AAAA,IACA,uBAAA;AAAA,IACA,qBAAA;AAAA,IACA,YAAA,CAAa,OAAA;AAAA,IACb,YAAA,CAAa,OAAA;AAAA,IACb,KAAA,CAAM,OAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,EAAE,cAAA,EAAgB,cAAA,EAAe,GAAI,sBAAA,CAAuB;AAAA,IAChE,OAAA,EAAS,cAAA;AAAA,IACT,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,gBAAA;AAAA,IACA,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,mBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,gBAAA,GAAmB,WAAA,IAAe,aAAA,CAAc,MAAA,GAAS,GAAA;AAG/D,EAAMA,wBAAgB,MAAM;AAC1B,IAAA,IAAI,SAAA,CAAU,WAAW,gBAAA,EAAkB;AACzC,MAAA,eAAA,CAAgB,SAAA,CAAU,QAAQ,YAAY,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,gBAAgB,CAAC,CAAA;AAGrC,EAAA,MAAM,iBAAiB,cAAA,CAAe;AAAA,IACpC,OAAO,aAAA,CAAc,MAAA;AAAA,IACrB,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,IAClC,cAAc,MAAM,kBAAA;AAAA,IACpB,QAAA,EAAU,gBAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACV,CAAA;AAGD,EAAA,MAAM,UAAA,GAAmBA,gBAAQ,MAAM;AACrC,IAAA,OAAO,cAAA,CAAe,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ;AACzC,MAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,IAAK,GAAA,CAAI,KAAA,IAAS,mBAAA,CAAoB,GAAG,CAAA;AACjF,MAAA,OAAO,GAAA,GAAM,KAAA;AAAA,IACf,GAAG,CAAC,CAAA;AAAA,EACN,CAAA,EAAG,CAAC,cAAA,EAAgB,KAAA,CAAM,YAAY,CAAC,CAAA;AAGvC,EAAA,MAAM,eAAA,GAAwBA,gBAAQ,MAAM;AAC1C,IAAA,IAAI,CAAC,SAAA,CAAU,OAAA,EAAS,OAAO,EAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,eAAe,kBAAkB,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAc,cAAA,KAAmB,qBAAA,CAAsB;AAAA,IAC5E,OAAA,EAAS,wBAAA;AAAA,IACT,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,OAAA,EAAS,cAAA;AAAA,IACT,UAAU,aAAA,CAAc,MAAA;AAAA,IACxB,eAAA;AAAA,IACA,qBAAqB,OAAA,CAAQ,cAAA;AAAA,IAC7B,gBAAgB,OAAA,CAAQ,YAAA;AAAA,IACxB,cAAc,OAAA,CAAQ,UAAA;AAAA,IACtB,cAAc,OAAA,CAAQ,UAAA;AAAA,IACtB,aAAA,EAAe,CAAC,QAAA,KAAa;AAC3B,MAAA,cAAA,CAAe,aAAA,CAAc,QAAA,EAAU,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC1D;AAAA,GACD,CAAA;AAID,EAAA,MAAM,UAAA,GAAmBA,OAAA,CAAA,WAAA;AAAA,IACvB,CAAC,KAAA,KAA4B;AAC3B,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,gBAAgB,KAAA,CAAM,aAAA;AAG5B,MAAA,MAAM,oBAAA,GAAuB,CAAC,EAAA,KAAoC;AAChE,QAAA,IAAI,CAAC,IAAI,OAAO,KAAA;AAChB,QAAA,OAAO,CAAC,EACN,EAAA,CAAG,OAAA,CAAQ,qCAAqC,CAAA,IAChD,EAAA,CAAG,QAAQ,8BAA8B,CAAA,IACzC,GAAG,OAAA,CAAQ,2BAA2B,KACtC,EAAA,CAAG,OAAA,CAAQ,iBAAiB,CAAA,IAC5B,EAAA,CAAG,QAAQ,oBAAoB,CAAA,CAAA;AAAA,MAEnC,CAAA;AAGA,MAAA,MAAM,gBAAA,GAAmB,CAAC,EAAA,KAAoC;AAC5D,QAAA,IAAI,CAAC,IAAI,OAAO,KAAA;AAEhB,QAAA,OAAO,CAAC,EACN,EAAA,CAAG,OAAA,CAAQ,mBAAmB,CAAA,IAC9B,EAAA,CAAG,OAAA,CAAQ,cAAc,CAAA,IACzB,EAAA,CAAG,OAAA,CAAQ,oBAAoB,CAAA,CAAA;AAAA,MAEnC,CAAA;AAIA,MAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,oBAAoB,CAAA,EAAG;AAExC,QAAA,IAAI,aAAA,IAAiB,CAAC,gBAAA,CAAiB,aAAa,KAAK,CAAC,oBAAA,CAAqB,aAAa,CAAA,EAAG;AAC7F,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,OAAA,CAAQ,eAAe,IAAI,CAAA;AAAA,UAC7B,GAAG,CAAC,CAAA;AAAA,QACN,CAAA,MAAA,IAAW,CAAC,aAAA,EAAe;AAEzB,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAC/B,YAAA,IAAI,CAAC,gBAAA,CAAiB,aAAa,KAAK,CAAC,oBAAA,CAAqB,aAAa,CAAA,EAAG;AAC5E,cAAA,OAAA,CAAQ,eAAe,IAAI,CAAA;AAAA,YAC7B;AAAA,UACF,GAAG,CAAC,CAAA;AAAA,QACN;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,KAAA,CAAM,eAAe,aAAA,EAAe;AAEtC,QAAA,IAAI,oBAAA,CAAqB,aAAa,CAAA,EAAG;AACvC,UAAA;AAAA,QACF;AAEA,QAAA,OAAA,CAAQ,UAAA,EAAW;AAEnB,QAAA,IAAI,CAAC,gBAAA,CAAiB,aAAa,CAAA,EAAG;AACpC,UAAA,OAAA,CAAQ,eAAe,IAAI,CAAA;AAAA,QAC7B;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,CAAC,gBAAA,CAAiB,aAAa,KAAK,CAAC,oBAAA,CAAqB,aAAa,CAAA,EAAG;AAC5E,UAAA,OAAA,CAAQ,eAAe,IAAI,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAC/B,UAAA,IAAI,oBAAA,CAAqB,aAAa,CAAA,EAAG;AACvC,YAAA;AAAA,UACF;AACA,UAAA,IAAI,CAAC,gBAAA,CAAiB,aAAa,CAAA,EAAG;AACpC,YAAA,IAAI,MAAM,WAAA,EAAa;AACrB,cAAA,OAAA,CAAQ,UAAA,EAAW;AAAA,YACrB;AACA,YAAA,OAAA,CAAQ,eAAe,IAAI,CAAA;AAAA,UAC7B;AAAA,QACF,GAAG,CAAC,CAAA;AAAA,MACN;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,WAAA,EAAa,OAAO;AAAA,GAC7B;AAGA,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,WAAW,WAAA,IAAe,CAAC,UAAU,OAAA,EAAS;AAEtE,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACX,QAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAE,cAAA,EAAgB;AAC7B,UAAA,UAAA,IAAa;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,EAAE,IAAA,EAAM,SAAA,CAAU,OAAA,EAAS,WAAW,GAAA;AAAI,KAC5C;AAGA,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,OAAA,CAAQ,aAAA,CAAc,iBAAiB,CAAA;AACjE,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,cAAA,EAAgB,OAAA,EAAS,aAAa,UAAA,EAAY,IAAA,CAAK,MAAM,CAAC,CAAA;AAGlE,EAAA,MAAM,aAAA,GAAgB,CAAC,SAAA,KAA8C;AACnE,IAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,SAAS,CAAA;AAAA,EACxD,CAAA;AAGA,EAAA,MAAM,eAAA,GAAkB,CAAC,SAAA,KAAgD;AACvE,IAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAAA,EAC5D,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,KAAsB;AACxC,IAAA,OAAA,CAAQ,WAAW,SAAS,CAAA;AAAA,EAC9B,CAAA;AAGA,EAAA,MAAM,kBAAA,GAAqB,CACzB,SAAA,EACA,MAAA,KACG;AACH,IAAA,OAAA,CAAQ,SAAA,CAAU,QAAQ,SAAS,CAAA;AAAA,EACrC,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,CACjB,GAAA,EACA,MAAA,EACA,UACA,SAAA,KACG;AAEH,IAAA,IAAI,SAAA,IAAa,MAAM,WAAA,EAAa;AAClC,MAAA,uBACE9C,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,KAAA,EAAO,MAAM,WAAA,CAAY,KAAA;AAAA,UACzB,GAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAU,OAAA,CAAQ,UAAA;AAAA,UAClB,UAAU,OAAA,CAAQ,UAAA;AAAA,UAClB,UAAU,OAAA,CAAQ;AAAA;AAAA,OACpB;AAAA,IAEJ;AAGA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,IAClC;AAGA,IAAA,MAAM,KAAA,GAAQwC,aAAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,uBAAOxC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAA+B,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB,CAAA;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,uBAAOA,GAAAA,CAAA+C,QAAAA,EAAA,EAAG,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,IAC7B;AACA,IAAA,uBACE/C,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAwB,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA,KACnD;AAAA,EAEJ;AAGA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAM,eAAe,cAAA,mBACnBA,IAAA+C,QAAAA,EAAA,EAAG,0BAAe,CAAA,mBAElB/C,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDACb,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EAAiC,wBAAa,CAAA,EAC/D,CAAA;AAIF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,uBACEY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EACjE,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,SAAI,SAAA,EAAU,wDAAA,EACb,0BAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,0BAC3FA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,WAAA,EAAa,OAAO,WAAA,IAAe,WAAA;AAAA,cACnC,OAAO,MAAA,CAAO,WAAA;AAAA,cACd,UAAU,CAAC,CAAA,KAAM,OAAO,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACrD,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QACC;AAAA,OAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAiC,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA,KAC/D;AAAA,EAEJ;AAGA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,uBACEY,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,QAC9D,SAAA,EAAW,aAAA;AAAA,QACX,MAAA,EAAQ,UAAA;AAAA,QACR,QAAA,EAAU,2BAA2B,CAAA,GAAI,EAAA;AAAA,QACzC,IAAA,EAAK,MAAA;AAAA,QACL,iBAAe,aAAA,CAAc,MAAA;AAAA,QAC7B,iBAAe,cAAA,CAAe,MAAA;AAAA,QAG7B,QAAA,EAAA;AAAA,UAAA,MAAA,oBACCZ,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DACb,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,4BAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,4BAC3FA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,WAAA,EAAa,OAAO,WAAA,IAAe,WAAA;AAAA,gBACnC,OAAO,MAAA,CAAO,WAAA;AAAA,gBACd,UAAU,CAAC,CAAA,KAAM,OAAO,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACrD,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BAGFA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAU,uEAAA;AAAA,cACV,KAAA,EAAO,EAAE,OAAA,EAAS,QAAA,EAAS;AAAA,cAE3B,QAAA,kBAAAY,IAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO;AAAA,oBACL,MAAA,EAAQ,CAAA,EAAG,cAAA,CAAe,YAAA,KAAiB,YAAY,CAAA,EAAA,CAAA;AAAA,oBACvD,KAAA,EAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,oBACxC,QAAA,EAAU,UAAA;AAAA,oBACV,QAAA,EAAU;AAAA,mBACZ;AAAA,kBAGA,QAAA,EAAA;AAAA,oCAAAZ,GAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,GAAA,EAAK,SAAA;AAAA,wBACL,SAAA,EAAW,EAAA;AAAA,0BACT,mDAAA;AAAA,0BACA,YAAA,IAAgB;AAAA,yBAClB;AAAA,wBACA,KAAA,EAAO;AAAA,0BACL,OAAA,EAAS,MAAA;AAAA,0BACT,KAAA,EAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,EAAA,CAAA,GAAO;AAAA,yBAC1C;AAAA,wBACA,IAAA,EAAK,KAAA;AAAA,wBAEJ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAA,KAAa;AACxC,0BAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,mBAAA,CAAoB,MAAM,CAAA;AAC1F,0BAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAE7C,0BAAA,uBACEA,GAAAA;AAAA,4BAAC,UAAA;AAAA,4BAAA;AAAA,8BAEC,MAAA;AAAA,8BACA,WAAA,EAAa,QAAA;AAAA,8BACb,KAAA;AAAA,8BACA,OAAA,EAAS,aAAA,CAAc,MAAA,CAAO,GAAG,CAAA;AAAA,8BACjC,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAA;AAAA,8BAClC,WAAA,EACE,gBAAA,IAAoB,MAAA,CAAO,SAAA,KAAc,KAAA;AAAA,8BAE3C,MAAA,EAAQ,MAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA;AAAA,8BACnC,gBAAgB,CAAC,MAAA,KACf,kBAAA,CAAmB,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,8BAEvC,mBAAmB,WAAA,CAAY,eAAA;AAAA,8BAC/B,qBAAqB,WAAA,CAAY,iBAAA;AAAA,8BACjC,YAAY,WAAA,CAAY;AAAA,6BAAA;AAAA,4BAfnB,MAAA,CAAO;AAAA,2BAgBd;AAAA,wBAEJ,CAAC;AAAA;AAAA,qBACH;AAAA,oBAGC,cAAA,CAAe,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,UAAA,KAAe;AACpD,sBAAA,MAAM,GAAA,GAAM,aAAA,CAAc,UAAA,CAAW,KAAK,CAAA;AAC1C,sBAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,EAAK,UAAA,CAAW,KAAK,CAAA;AAC9C,sBAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA;AAC/C,sBAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,KAAU,aAAA,CAAc,MAAA,GAAS,CAAA;AAE9D,sBAAA,uBACEA,GAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BAEC,eAAA,EAAe,YAAY,IAAA,GAAO,MAAA;AAAA,0BAClC,SAAA,EAAW,EAAA;AAAA,4BACT,gEAAA;AAAA,4BACA,UAAA,IAAc,gBAAA;AAAA,4BACd,UAAA,IAAc,cAAA;AAAA,4BACd,CAAC,UAAA,IAAc,mBAAA;AAAA,4BACf,YAAA,IAAgB,YAAA,CAAa,GAAA,EAAK,UAAA,CAAW,KAAK;AAAA,2BACpD;AAAA,0BACA,KAAA,EAAO;AAAA,4BACL,MAAA,EAAQ,CAAA,EAAG,UAAA,CAAW,IAAI,CAAA,EAAA,CAAA;AAAA,4BAC1B,SAAA,EAAW,CAAA,WAAA,EAAc,UAAA,CAAW,KAAA,GAAQ,YAAY,CAAA,GAAA,CAAA;AAAA,4BACxD,OAAA,EAAS,MAAA;AAAA,4BACT,KAAA,EAAO,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,EAAA,CAAA,GAAO;AAAA,2BAC1C;AAAA,0BACA,SAAS,MAAM;AACb,4BAAA,UAAA,GAAa,GAAA,EAAK,WAAW,KAAK,CAAA;AAClC,4BAAA,IAAI,wBAAA,IAA4B,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACzD,8BAAA,OAAA,CAAQ,cAAA,CAAe;AAAA,gCACrB,UAAU,UAAA,CAAW,KAAA;AAAA,gCACrB,SAAA,EAAW,cAAA,CAAe,CAAC,CAAA,CAAE;AAAA,+BAC9B,CAAA;AACD,8BAAA,cAAA,EAAe;AAAA,4BACjB;AAAA,0BACF,CAAA;AAAA,0BACA,aAAA,EAAe,MACb,gBAAA,GAAmB,GAAA,EAAK,WAAW,KAAK,CAAA;AAAA,0BAE1C,IAAA,EAAK,KAAA;AAAA,0BACL,eAAA,EAAe,WAAW,KAAA,GAAQ,CAAA;AAAA,0BAClC,eAAA,EAAe,UAAA;AAAA,0BAEd,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAA,KAAa;AACxC,4BAAA,MAAM,KAAA,GACJ,MAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,mBAAA,CAAoB,MAAM,CAAA;AAC9E,4BAAA,MAAM,iBAAA,GACJ,MAAM,WAAA,EAAa,QAAA,KAAa,WAAW,KAAA,IAC3C,KAAA,CAAM,WAAA,EAAa,SAAA,KAAc,MAAA,CAAO,GAAA;AAC1C,4BAAA,MAAM,SAAA,GACJ,MAAM,WAAA,EAAa,QAAA,KAAa,WAAW,KAAA,IAC3C,KAAA,CAAM,WAAA,EAAa,SAAA,KAAc,MAAA,CAAO,GAAA;AAE1C,4BAAA,MAAM,WAAA,GAAc,UAAA;AAAA,8BAClB,GAAA;AAAA,8BACA,MAAA;AAAA,8BACA,UAAA,CAAW,KAAA;AAAA,8BACX;AAAA,6BACF;AACA,4BAAA,MAAM,SAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,GACnB,WAAA,GACA,OAAOwC,aAAAA,CAAa,GAAA,EAAK,MAAM,CAAA,IAAK,EAAE,CAAA;AAC5C,4BAAA,MAAM,MAAA,GACJ,YAAA,IAAgB,SAAA,CAAU,MAAA,GAAS,gBAAA;AAEnC,4BAAA,uBACExC,GAAAA;AAAA,8BAAC,KAAA;AAAA,8BAAA;AAAA,gCAEC,SAAA,EAAW,EAAA;AAAA,kCACT,iDAAA;AAAA,kCACA,iBAAA,IAAqB,wCAAA;AAAA,kCACrB,SAAA,IAAa,CAAC,iBAAA,IAAqB,gCAAA;AAAA,kCACnC,MAAA,CAAO,UAAU,QAAA,IAAY,aAAA;AAAA,kCAC7B,MAAA,CAAO,UAAU,OAAA,IAAW;AAAA,iCAC9B;AAAA,gCACA,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,gCACf,WAAA,EAAa,CAAC,CAAA,KAAM;AAGlB,kCAAA,IAAI,iBAAA,IAAqB,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AACrD,oCAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,kCACpB;AAAA,gCACF,CAAA;AAAA,gCACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,kCAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,kCAAA,IAAI,iBAAA,EAAmB;AACvB,kCAAA,IAAI,wBAAA,EAA0B;AAC5B,oCAAA,OAAA,CAAQ,cAAA,CAAe;AAAA,sCACrB,UAAU,UAAA,CAAW,KAAA;AAAA,sCACrB,WAAW,MAAA,CAAO;AAAA,qCACnB,CAAA;AACD,oCAAA,cAAA,EAAe;AAAA,kCACjB;AAAA,gCACF,CAAA;AAAA,gCACA,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,kCAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,kCAAA,IAAI,iBAAA,EAAmB;AACvB,kCAAA,IAAI,MAAA,CAAO,YAAY,UAAA,EAAY;AACjC,oCAAA,OAAA,CAAQ,YAAA,CAAa,UAAA,CAAW,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AAAA,kCACnD;AAAA,gCACF,CAAA;AAAA,gCACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,kCAAA,IAAI,MAAA,IAAU,CAAC,iBAAA,EAAmB;AAChC,oCAAA,MAAM,IAAA,GACJ,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACxC,oCAAA,cAAA,CAAe;AAAA,sCACb,KAAK,UAAA,CAAW,KAAA;AAAA,sCAChB,GAAA,EAAK,QAAA;AAAA,sCACL,OAAA,EAAS,SAAA;AAAA,sCACT,GAAG,IAAA,CAAK,IAAA;AAAA,sCACR,CAAA,EAAG,KAAK,MAAA,GAAS;AAAA,qCAClB,CAAA;AAAA,kCACH;AAAA,gCACF,CAAA;AAAA,gCACA,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,gCACvC,IAAA,EAAK,UAAA;AAAA,gCACL,iBAAe,QAAA,GAAW,CAAA;AAAA,gCAC1B,QAAA,EAAU,EAAA;AAAA,gCAEV,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,WAAA,EAAY;AAAA,+BAAA;AAAA,8BAtDlC,MAAA,CAAO;AAAA,6BAuDd;AAAA,0BAEN,CAAC;AAAA,yBAAA;AAAA,wBAlHI,UAAA,CAAW;AAAA,uBAmHlB;AAAA,oBAEJ,CAAC,CAAA;AAAA,oBAGA,cAAA,IAAkB,+BACjBA,GAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,yFAAA;AAAA,wBACV,KAAA,EAAO;AAAA,0BACL,SAAA,EAAW,CAAA,WAAA,EAAc,cAAA,CAAe,YAAA,KAAiB,YAAY,CAAA,GAAA;AAAA,yBACvE;AAAA,wBAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAE/C;AAAA;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA,WACF;AAAA,UAGC,UAAA,oBACCA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,EAAwB,CAAA;AAAA,UAI3C,+BACCA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iJAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,IAAA,EAAM,CAAA,EAAG,WAAA,CAAY,CAAC,CAAA,EAAA,CAAA;AAAA,gBACtB,GAAA,EAAK,CAAA,EAAG,WAAA,CAAY,CAAC,CAAA,EAAA;AAAA,eACvB;AAAA,cAEA,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,sBAAY,OAAA,EACf;AAAA;AAAA;AACF;AAAA;AAAA,KAEJ;AAAA,EAEJ;AAGA,EAAA,uBACEY,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA;AAAA,MACvD,SAAA,EAAW,aAAA;AAAA,MACX,MAAA,EAAQ,UAAA;AAAA,MACR,QAAA,EAAU,2BAA2B,CAAA,GAAI,EAAA;AAAA,MACzC,IAAA,EAAK,MAAA;AAAA,MACL,iBAAe,aAAA,CAAc,MAAA;AAAA,MAC7B,iBAAe,cAAA,CAAe,MAAA;AAAA,MAG7B,QAAA,EAAA;AAAA,QAAA,MAAA,oBACCZ,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DACb,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,0BAC3FA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,WAAA,EAAa,OAAO,WAAA,IAAe,WAAA;AAAA,cACnC,OAAO,MAAA,CAAO,WAAA;AAAA,cACd,UAAU,CAAC,CAAA,KAAM,OAAO,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACrD,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGFY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAEb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,sCAAA;AAAA,gBACA,YAAA,IAAgB;AAAA,eAClB;AAAA,cACA,OAAO,EAAE,KAAA,EAAO,aAAa,CAAA,EAAG,UAAU,OAAO,MAAA,EAAO;AAAA,cACxD,IAAA,EAAK,KAAA;AAAA,cAEJ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAA,KAAa;AACxC,gBAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,mBAAA,CAAoB,MAAM,CAAA;AAC1F,gBAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAE7C,gBAAA,uBACEA,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBAEC,MAAA;AAAA,oBACA,WAAA,EAAa,QAAA;AAAA,oBACb,KAAA;AAAA,oBACA,OAAA,EAAS,aAAA,CAAc,MAAA,CAAO,GAAG,CAAA;AAAA,oBACjC,MAAA,EAAQ,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAA;AAAA,oBAClC,WAAA,EAAa,gBAAA,IAAoB,MAAA,CAAO,SAAA,KAAc,KAAA;AAAA,oBACtD,MAAA,EAAQ,MAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA;AAAA,oBACnC,gBAAgB,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,oBACjE,mBAAmB,WAAA,CAAY,eAAA;AAAA,oBAC/B,qBAAqB,WAAA,CAAY,iBAAA;AAAA,oBACjC,YAAY,WAAA,CAAY;AAAA,mBAAA;AAAA,kBAXnB,MAAA,CAAO;AAAA,iBAYd;AAAA,cAEJ,CAAC;AAAA;AAAA,WACH;AAAA,UAGG,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,EAAK,QAAA,KAAa;AACpC,YAAA,MAAM,MAAA,GAAS,SAAA,CAAU,GAAA,EAAK,QAAQ,CAAA;AACtC,YAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA;AAE/C,YAAA,uBACEA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,EAAA;AAAA,kBACT,+CAAA;AAAA,kBACA,UAAA,IAAc,gBAAA;AAAA,kBACd,UAAA,IAAc,cAAA;AAAA,kBACd,CAAC,UAAA,IAAc,mBAAA;AAAA,kBACf,YAAA,IAAgB,YAAA,CAAa,GAAA,EAAK,QAAQ;AAAA,iBAC5C;AAAA,gBACA,OAAO,EAAE,KAAA,EAAO,aAAa,CAAA,EAAG,UAAU,OAAO,MAAA,EAAO;AAAA,gBACxD,OAAA,EAAS,MAAM,UAAA,GAAa,GAAA,EAAK,QAAQ,CAAA;AAAA,gBACzC,aAAA,EAAe,MAAM,gBAAA,GAAmB,GAAA,EAAK,QAAQ,CAAA;AAAA,gBACrD,IAAA,EAAK,KAAA;AAAA,gBAEJ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,KAAW;AAC9B,kBAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,KAAA,IAAS,mBAAA,CAAoB,MAAM,CAAA;AAC1F,kBAAA,MAAM,iBAAA,GACJ,MAAM,WAAA,EAAa,QAAA,KAAa,YAChC,KAAA,CAAM,WAAA,EAAa,cAAc,MAAA,CAAO,GAAA;AAC1C,kBAAA,MAAM,SAAA,GACJ,MAAM,WAAA,EAAa,QAAA,KAAa,YAChC,KAAA,CAAM,WAAA,EAAa,cAAc,MAAA,CAAO,GAAA;AAE1C,kBAAA,uBACEA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAW,EAAA;AAAA,wBACT,iDAAA;AAAA,wBACA,iBAAA,IAAqB,wCAAA;AAAA,wBACrB,SAAA,IAAa,CAAC,iBAAA,IAAqB,gCAAA;AAAA,wBACnC,MAAA,CAAO,UAAU,QAAA,IAAY,aAAA;AAAA,wBAC7B,MAAA,CAAO,UAAU,OAAA,IAAW;AAAA,uBAC9B;AAAA,sBACA,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,sBACf,WAAA,EAAa,CAAC,CAAA,KAAM;AAGlB,wBAAA,IAAI,iBAAA,IAAqB,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AACrD,0BAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,wBACpB;AAAA,sBACF,CAAA;AAAA,sBACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,wBAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,wBAAA,IAAI,iBAAA,EAAmB;AACvB,wBAAA,IAAI,wBAAA,EAA0B;AAC5B,0BAAA,OAAA,CAAQ,cAAA,CAAe;AAAA,4BACrB,QAAA;AAAA,4BACA,WAAW,MAAA,CAAO;AAAA,2BACnB,CAAA;AACD,0BAAA,cAAA,EAAe;AAAA,wBACjB;AAAA,sBACF,CAAA;AAAA,sBACA,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,wBAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,wBAAA,IAAI,iBAAA,EAAmB;AACvB,wBAAA,IAAI,MAAA,CAAO,YAAY,UAAA,EAAY;AACjC,0BAAA,OAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,MAAA,CAAO,GAAG,CAAA;AAAA,wBAC3C;AAAA,sBACF,CAAA;AAAA,sBACA,IAAA,EAAK,UAAA;AAAA,sBAEJ,QAAA,EAAA,UAAA,CAAW,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,iBAAiB;AAAA,qBAAA;AAAA,oBAtC/C,MAAA,CAAO;AAAA,mBAuCd;AAAA,gBAEJ,CAAC;AAAA,eAAA;AAAA,cAjEI;AAAA,aAkEP;AAAA,UAEJ,CAAC;AAAA,SAAA,EACL,CAAA;AAAA,QAGC,UAAA,oBACCA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,EAAwB;AAAA;AAAA;AAAA,GAE9C;AAEJ;AASA,SAAS,gBAAA,CAAiB,EAAE,UAAA,EAAW,EAA0B;AAC/D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU8C,iBAAS,EAAE,CAAA;AAEjD,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,EAAU,EAAE,CAAA;AAClC,IAAA,IAAI,CAAC,MAAM,IAAI,CAAA,IAAK,QAAQ,CAAA,IAAK,IAAA,IAAQ,WAAW,UAAA,EAAY;AAC9D,MAAA,UAAA,CAAW,YAAA,CAAa,OAAO,CAAC,CAAA;AAChC,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,uBACElC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,sBAC9DA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAO,UAAA,CAAW,QAAA;AAAA,UAClB,QAAA,EAAU,CAAC,CAAA,KAAM,UAAA,CAAW,iBAAiB,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UACnE,SAAA,EAAU,8EAAA;AAAA,UAER,sBAAW,eAAA,IAAmB,CAAC,IAAI,EAAA,EAAI,GAAA,EAAK,GAAG,CAAA,EAAG,GAAA,CAAI,CAAC,IAAA,qBACvDA,GAAAA,CAAC,QAAA,EAAA,EAAkB,OAAO,IAAA,EACvB,QAAA,EAAA,IAAA,EAAA,EADU,IAEb,CACD;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,oBAEAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACxC,WAAW,WAAA,GAAc,CAAA;AAAA,QAAE,MAAA;AAAA,QAAK,UAAA,CAAW,UAAA;AAAA,QAChD,UAAA,CAAW,UAAA,IAAc,CAAA,EAAA,EAAK,UAAA,CAAW,UAAU,CAAA,OAAA;AAAA,OAAA,EACtD,CAAA;AAAA,MAGC,WAAW,YAAA,oBACVA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,KAAK,UAAA,CAAW,UAAA;AAAA,YAChB,KAAA,EAAO,QAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC3C,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,gBAAA,cAAA,EAAe;AAAA,cACjB;AAAA,YACF,CAAA;AAAA,YACA,WAAA,EAAY,OAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,cAAA;AAAA,YACT,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,UAAU,CAAC,QAAA;AAAA,YACZ,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,sBAGFY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,UAAA,CAAW,YAAA,CAAa,CAAC,CAAA;AAAA,YACxC,QAAA,EAAU,WAAW,WAAA,KAAgB,CAAA;AAAA,YACrC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAW,YAAA;AAAA,YAEX,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,UAAA,CAAW,YAAA,CAAa,UAAA,CAAW,cAAc,CAAC,CAAA;AAAA,YACjE,QAAA,EAAU,WAAW,WAAA,KAAgB,CAAA;AAAA,YACrC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAW,eAAA;AAAA,YAEX,QAAA,kBAAAA,GAAAA,CAACgD,WAAAA,EAAA,EAAY,WAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBACAhD,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,UAAA,CAAW,YAAA,CAAa,UAAA,CAAW,cAAc,CAAC,CAAA;AAAA,YACjE,QAAA,EAAU,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,UAAA,GAAa,CAAA;AAAA,YAC5D,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAW,WAAA;AAAA,YAEX,QAAA,kBAAAA,GAAAA,CAAC6B,YAAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBACA7B,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,UAAA,CAAW,YAAA,CAAa,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,YAChE,QAAA,EAAU,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,UAAA,GAAa,CAAA;AAAA,YAC5D,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,YAAA,EAAW,WAAA;AAAA,YAEX,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACrC,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACt8BO,SAAS,YAAA,CAAa;AAAA,EAC3B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,qBAAA;AAAA,EACd,iBAAA,GAAoB,WAAA;AAAA,EACpB,SAAA,GAAY,mBAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUiD,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,iBAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAiBA,eAAyB,IAAI,CAAA;AAGpD,EAAA,MAAM,cAAA,GAAuBA,OAAA,CAAA,OAAA;AAAA,IAC3B,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,IAC/C,CAAC,SAAS,KAAK;AAAA,GACjB;AAGA,EAAA,MAAM,eAAA,GAAwBA,gBAAQ,MAAM;AAC1C,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG,OAAO,OAAA;AAC3B,IAAA,MAAM,WAAA,GAAc,OAAO,WAAA,EAAY;AACvC,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACb,CAAC,GAAA,KACC,GAAA,CAAI,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,WAAW,CAAA,IAC5C,GAAA,CAAI,WAAA,EAAa,WAAA,EAAY,CAAE,SAAS,WAAW;AAAA,KACvD;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAGpB,EAAA,MAAM,cAAA,GAAuBA,gBAAQ,MAAM;AACzC,IAAA,MAAM,SAA+C,EAAC;AACtD,IAAA,MAAM,YAAkC,EAAC;AAEzC,IAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/B,MAAA,IAAI,IAAI,KAAA,EAAO;AACb,QAAA,IAAI,CAAC,OAAO,GAAA,CAAI,KAAK,GAAG,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,GAAI,EAAC;AAC7C,QAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,SAAA,CAAU,KAAK,GAAG,CAAA;AAAA,MACpB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,EAAE,QAAQ,SAAA,EAAU;AAAA,EAC7B,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,MAAM,EAAE,MAAA,GAAS,CAAA;AAG9D,EAAA,MAAM,YAAA,GAAqBA,OAAA,CAAA,WAAA;AAAA,IACzB,CAAC,WAAA,KAAwB;AACvB,MAAA,QAAA,GAAW,WAAW,CAAA;AACtB,MAAA,OAAA,CAAQ,KAAK,CAAA;AACb,MAAA,SAAA,CAAU,EAAE,CAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAGA,EAAA,MAAM,WAAA,GAAoBA,OAAA,CAAA,WAAA;AAAA,IACxB,CAAC,CAAA,KAAwB;AACvB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,QAAA,GAAW,MAAS,CAAA;AACpB,MAAA,SAAA,CAAU,EAAE,CAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAGA,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,QAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,MAC1B,GAAG,CAAC,CAAA;AACJ,MAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,EAAE,CAAA;AAAA,IACd;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,MAAM,aAAA,GAAsBA,OAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAA2B;AAClE,IAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,qBACpBrC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAA,EAAS,MAAM,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA;AAAA,MACxC,SAAA,EAAW,EAAA;AAAA,QACT,+GAAA;AAAA,QACA,8CAAA;AAAA,QACA,8CAAA;AAAA,QACA,OAAO,QAAA,IAAY,gCAAA;AAAA,QACnB,KAAA,KAAU,OAAO,KAAA,IAAS;AAAA,OAC5B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA,KAAA,KAAU,MAAA,CAAO,KAAA,oBAASA,GAAAA,CAACS,KAAAA,EAAA,EAAM,SAAA,EAAU,WAAU,CAAA,EACxD,CAAA;AAAA,wBACAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,iBAAO,KAAA,EAAM,CAAA;AAAA,UACvC,MAAA,CAAO,+BACNA,GAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,iBAAO,WAAA,EACV;AAAA,SAAA,EAEJ;AAAA;AAAA,KAAA;AAAA,IAtBK,MAAA,CAAO;AAAA,GAuBd;AAGF,EAAA,uBACEY,IAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAZ,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,UACtB,QAAA,kBAAAY,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA,EAAK,UAAA;AAAA,QACL,eAAA,EAAe,IAAA;AAAA,QACf,eAAA,EAAc,SAAA;AAAA,QACd,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,uKAAA;AAAA,UACA,iDAAA;AAAA,UACA,iDAAA;AAAA,UACA,CAAC,cAAA,IAAkB,uBAAA;AAAA,UACnB;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAZ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA,cAAA,EAAgB,SAAS,WAAA,EAC5B,CAAA;AAAA,0BACAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,IAAa,kCACZZ,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,OAAA,EAAS,WAAA;AAAA,gBACT,SAAA,EAAU,iCAAA;AAAA,gBAEV,QAAA,kBAAAA,GAAAA,CAACgC,CAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA,aACnD;AAAA,4BAEFhC,GAAAA,CAACa,WAAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB;AAAA,WAAA,EAC9C;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACAD,IAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uCAAA;AAAA,QACV,KAAA,EAAM,OAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QACZ,SAAA,EAAW,aAAA;AAAA,QAGX,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,4BAAAZ,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAO,MAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACzC,WAAA,EAAa,iBAAA;AAAA,gBACb,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YACC,0BACCA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,SAAA,CAAU,EAAE,CAAA;AAAA,gBAC3B,SAAA,EAAU,+BAAA;AAAA,gBAEV,QAAA,kBAAAA,GAAAA,CAACgC,CAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA;AACnD,WAAA,EAEJ,CAAA;AAAA,0BAGAhC,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,WAAW,CAAA,mBAC1BA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACZ,QAAA,EAAA,SAAA,EACH,CAAA,GACE,4BACFY,IAAAA,CAAAmC,UAAA,EAEG,QAAA,EAAA;AAAA,YAAA,cAAA,CAAe,SAAA,CAAU,IAAI,YAAY,CAAA;AAAA,YAGzC,MAAA,CAAO,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,IAAI,CAAA,qBACtDnC,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,cACC,IAAA,CAAK,IAAI,YAAY;AAAA,aAAA,EAAA,EAJd,KAKV,CACD;AAAA,WAAA,EACH,CAAA,GAEA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAA,EAEpC;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AC3PA,IAAM,kBAAA,GAAqBC,GAAAA;AAAA;AAAA,EAEzB;AAAA,IACE,yCAAA;AAAA,IACA,YAAA;AAAA,IACA,gCAAA;AAAA,IACA,0IAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA,QAIP,OAAA,EAAS;AAAA,UACP,sCAAA;AAAA,UACA,8CAAA;AAAA,UACA;AAAA,SACF;AAAA;AAAA;AAAA;AAAA,QAIA,KAAA,EAAO;AAAA,UACL,sCAAA;AAAA,UACA;AAAA,SACF;AAAA;AAAA;AAAA;AAAA,QAIA,OAAA,EAAS;AAAA,UACP,sCAAA;AAAA,UACA,sBAAA;AAAA,UACA;AAAA,SACF;AAAA;AAAA;AAAA;AAAA,QAIA,MAAA,EAAQ;AAAA,UACN,kCAAA;AAAA,UACA;AAAA,SACF;AAAA;AAAA;AAAA;AAAA,QAIA,KAAA,EAAO;AAAA,UACL,gCAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,EAAA,EAAI,iCAAA;AAAA;AAAA;AAAA;AAAA,QAIJ,OAAA,EAAS,qCAAA;AAAA;AAAA;AAAA;AAAA,QAIT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAwCA,IAAM,UAAA,GAAmBiD,OAAA,CAAA,UAAA;AAAA,EACvB,CACE,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,QAAA,GAAW,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EACvE,GAAA,KACG;AACH,IAAA,uBACElD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,kBAAA,CAAmB,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA;AAAA,UAEpC,QAAA,IAAY;AAAA,YACV,kCAAA;AAAA;AAAA,YAEA,YAAY,QAAA,IAAY;AAAA,WAC1B;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,IAAA,IAAQ;AAAA;AAAA,KACX;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACtHlB,SAAS,WAAW,EAAE,OAAA,EAAS,SAAA,EAAW,IAAA,GAAO,MAAK,EAAoB;AAC/E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUmD,iBAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAC3C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,GAAG,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI,EAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,uBACEnD,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,EAAA;AAAA,QACT,yCAAA;AAAA,QACA,+BAAA;AAAA,QACA,gCAAA;AAAA,QACA,wCAAA;AAAA,QACA,mCAAA;AAAA,QACA,sCAAA;AAAA,QACA,YAAY,IAAI,CAAA;AAAA,QAChB;AAAA,OACF;AAAA,MACA,KAAA,EAAO,SAAS,SAAA,GAAY,mBAAA;AAAA,MAE3B,mCACCA,GAAAA,CAACS,KAAAA,EAAA,EAAM,MAAM,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA,mBAE9BT,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,SAAA,CAAU,IAAI,CAAA,EAAG;AAAA;AAAA,GAEjC;AAEJ;;;ACvEO,IAAM,WAAA,GAAqB;AAAA,EAChC,EAAA,EAAI,aAAA;AAAA,EACJ,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EAAa,0CAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,sBAAA,GAAgC;AAAA,EAC3C,EAAA,EAAI,kBAAA;AAAA,EACJ,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EAAa,kDAAA;AAAA,EACb,MAAA,EAAQ,WAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,gBAAA,GAA0B;AAAA,EACrC,EAAA,EAAI,YAAA;AAAA,EACJ,IAAA,EAAM,YAAA;AAAA,EACN,WAAA,EAAa,0DAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,YAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,iBAAA;AAAA,EACN,WAAA,EAAa,0DAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,WAAA,GAAqB;AAAA,EAChC,EAAA,EAAI,OAAA;AAAA,EACJ,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,4DAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,WAAA,GAAqB;AAAA,EAChC,EAAA,EAAI,OAAA;AAAA,EACJ,IAAA,EAAM,OAAA;AAAA,EACN,WAAA,EAAa,kDAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,YAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,kDAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,YAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,+CAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,eAAA,GAAyB;AAAA,EACpC,EAAA,EAAI,WAAA;AAAA,EACJ,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,yCAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,sBAAA,GAAgC;AAAA,EAC3C,EAAA,EAAI,kBAAA;AAAA,EACJ,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,kBAAA,GAA4B;AAAA,EACvC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,6CAAA;AAAA,EACb,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,gBAAA,EAAkB,SAAA;AAAA,EAClB,SAAA,EAAW,SAAA;AAAA,EACX,mBAAA,EAAqB,SAAA;AAAA,EACrB,KAAA,EAAO,SAAA;AAAA,EACP,eAAA,EAAiB,SAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,OAAA,EAAS,SAAA;AAAA,EACT,iBAAA,EAAmB,SAAA;AAAA,EACnB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAKO,IAAM,aAAA,GAAyB,CAAC,sBAAsB;AAKtD,IAAM,UAAA,GAAsB;AAAA,EACjC,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAKO,SAAS,eAAe,EAAA,EAA+B;AAC5D,EAAA,OAAO,WAAW,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,EAAE,CAAA;AACnD;AAKO,SAAS,eAAA,GAAyB;AACvC,EAAA,OAAO,sBAAA;AACT;AAKO,SAAS,cAAc,OAAA,EAA0B;AACtD,EAAA,OAAO,WAAW,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,OAAO,CAAA;AACxD;;;ACreO,SAAS,SAAS,GAAA,EAAqB;AAE5C,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAG1B,EAAA,MAAM,CAAA,GAAI,SAAS,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,SAAS,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,SAAS,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAE9C,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,CAAA,GAAA,CAAK,MAAM,GAAA,IAAO,CAAA;AAExB,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,MAAM,IAAI,GAAA,GAAM,GAAA;AAChB,IAAA,CAAA,GAAI,IAAI,GAAA,GAAM,CAAA,IAAK,IAAI,GAAA,GAAM,GAAA,CAAA,GAAO,KAAK,GAAA,GAAM,GAAA,CAAA;AAE/C,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,CAAA;AACH,QAAA,CAAA,GAAA,CAAA,CAAM,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,CAAA,IAAM,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,CAAA,GAAA,CAAA,CAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,IAAK,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,CAAA;AACH,QAAA,CAAA,GAAA,CAAA,CAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,IAAK,CAAA;AACxB,QAAA;AAAA;AACJ,EACF;AAGA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA;AAEnC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,KAAK,QAAQ,CAAA,CAAA,CAAA;AACzC;AAKO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAA,EAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAAA,IACrC,UAAA,EAAY,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAAA,IACrC,IAAA,EAAM,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,IACzB,cAAA,EAAgB,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA;AAAA,IAC7C,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,iBAAA,EAAmB,QAAA,CAAS,KAAA,CAAM,iBAAiB,CAAA;AAAA,IACnD,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,iBAAA,EAAmB,QAAA,CAAS,KAAA,CAAM,iBAAiB,CAAA;AAAA,IACnD,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,gBAAA,EAAkB,QAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA;AAAA,IACjD,SAAA,EAAW,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AAAA,IACnC,mBAAA,EAAqB,QAAA,CAAS,KAAA,CAAM,mBAAmB,CAAA;AAAA,IACvD,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAAA,IAC3B,eAAA,EAAiB,QAAA,CAAS,KAAA,CAAM,eAAe,CAAA;AAAA,IAC/C,WAAA,EAAa,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA;AAAA,IACvC,qBAAA,EAAuB,QAAA,CAAS,KAAA,CAAM,qBAAqB,CAAA;AAAA,IAC3D,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,iBAAA,EAAmB,QAAA,CAAS,KAAA,CAAM,iBAAiB,CAAA;AAAA,IACnD,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,iBAAA,EAAmB,QAAA,CAAS,KAAA,CAAM,iBAAiB,CAAA;AAAA,IACnD,IAAA,EAAM,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,IACzB,cAAA,EAAgB,QAAA,CAAS,KAAA,CAAM,cAAc,CAAA;AAAA,IAC7C,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAAA,IAC3B,IAAA,EAAM,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AAAA,IACzB,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AAAA,IAC7B,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,MAAM;AAAA,GAC/B;AACF;AAQO,SAAS,UAAA,CAAW,OAAc,aAAA,EAAmC;AAC1E,EAAA,MAAM,OAAA,GAAU,iBAAiB,QAAA,CAAS,eAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AAGjC,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,cAAA,EAAgB,QAAA,CAAS,UAAU,CAAA;AAC7D,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,cAAA,EAAgB,QAAA,CAAS,UAAU,CAAA;AAC7D,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,mBAAA,EAAqB,QAAA,CAAS,cAAc,CAAA;AACtE,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,OAAO,CAAA;AACvD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,EAAwB,QAAA,CAAS,iBAAiB,CAAA;AAC5E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,OAAO,CAAA;AACvD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,EAAwB,QAAA,CAAS,iBAAiB,CAAA;AAC5E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,UAAA,EAAY,QAAA,CAAS,MAAM,CAAA;AACrD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,qBAAA,EAAuB,QAAA,CAAS,gBAAgB,CAAA;AAC1E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,aAAA,EAAe,QAAA,CAAS,SAAS,CAAA;AAC3D,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,wBAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,SAAA,EAAW,QAAA,CAAS,KAAK,CAAA;AACnD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,oBAAA,EAAsB,QAAA,CAAS,eAAe,CAAA;AACxE,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,eAAA,EAAiB,QAAA,CAAS,WAAW,CAAA;AAC/D,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,0BAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,OAAO,CAAA;AACvD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,EAAwB,QAAA,CAAS,iBAAiB,CAAA;AAC5E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,OAAO,CAAA;AACvD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,EAAwB,QAAA,CAAS,iBAAiB,CAAA;AAC5E,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,mBAAA,EAAqB,QAAA,CAAS,cAAc,CAAA;AACtE,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,UAAA,EAAY,QAAA,CAAS,MAAM,CAAA;AACrD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,SAAA,EAAW,QAAA,CAAS,KAAK,CAAA;AACnD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,MAAM,CAAA;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,MAAM,CAAA;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,MAAM,CAAA;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,MAAM,CAAA;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,WAAA,EAAa,QAAA,CAAS,MAAM,CAAA;AAEtD,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,UAAA,EAAY,KAAA,CAAM,MAAM,CAAA;AAAA,EACpD;AACF;AAKO,SAAS,eAAA,GAAyB;AACvC,EAAA,OAAO,eAAA,EAAgB;AACzB;AAKO,SAAS,cAAc,KAAA,EAAgC;AAC5D,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAEhD,EAAA,MAAM,CAAA,GAAI,KAAA;AAGV,EAAA,MAAM,cAAA,GAA2B;AAAA,IAC/B,IAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,qBAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAClC,IAAA,IAAI,EAAE,SAAS,CAAA,CAAA,EAAI;AACjB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,wCAAA,EAA2C,KAAK,CAAA,CAAA,CAAG,CAAA;AACjE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,UAAA,CAAW,OAAc,OAAA,EAAyB;AAChE,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,IACxB,IAAA,EAAM,OAAA,IAAW,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,OAAA,CAAA;AAAA,IAC9B,MAAA,EAAQ;AAAA,GACV;AACF;AAKO,SAAS,cAAA,CAAe,QAAe,MAAA,EAAwB;AACpE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ,OAAO,KAAA;AAE/B,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,CAAO,IAAA,EAAM,OAAO,KAAA;AACxC,EAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,CAAO,WAAA,EAAa,OAAO,KAAA;AAEtD,EAAA,MAAM,WAAA,GAA+B;AAAA,IACnC,YAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,qBAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,MAAA,CAAO,KAAK,CAAA,EAAG;AACnC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,YAAY,KAAA,EAAsB;AAChD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AACtC;AAKO,SAAS,YAAY,UAAA,EAI1B;AACA,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAEnC,IAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EACE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF;ACjQA,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,UAAA,EAAY,SAAQ,EAAqB;AACrE,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,OAAA,kBACEY,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAZ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAe,gBAAM,IAAA,EAAK,CAAA;AAAA,QACtC,KAAA,CAAM,+BACLA,GAAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAiC,gBAAM,WAAA,EAAY;AAAA,OAAA,EAEpE,CAAA;AAAA,MAEF,QAAA,EAAS,QAAA;AAAA,MACT,aAAA,EAAe,GAAA;AAAA,MAEf,QAAA,kBAAAY,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,2EAAA;AAAA,YACA,4FAAA;AAAA,YACA,UAAA,IAAc;AAAA,WAChB;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAA,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,6EAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,UAAA,EAAW;AAAA,gBAE3C,QAAA,EAAA;AAAA,kCAAAZ,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,sCAAA;AAAA,sBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,OAAA;AAAQ;AAAA,mBAC1C;AAAA,kCACAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,6CAAA;AAAA,sBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,MAAA;AAAO;AAAA,mBACzC;AAAA,kCACAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,4CAAA;AAAA,sBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,CAAM,UAAA;AAAW;AAAA;AAC7C;AAAA;AAAA,aACF;AAAA,4BAEAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAAA,EACb,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAC1B,CAAA;AAAA,YAEC,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FAAA,EACb,QAAA,kBAAAA,GAAAA,CAACS,KAAAA,EAAA,EAAM,SAAA,EAAU,qCAAA,EAAsC,CAAA,EACzD;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ;AAsBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,UAAA;AAAA,EACT,cAAA,GAAiB,MAAA;AAAA,EACjB,WAAA,GAAc,SAAA;AAAA,EACd,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,IAAA,GAAO;AACT,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU2C,iBAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,OAAA,CAAA,QAAA;AAAA,IAC9C,KAAA,IAAS,OAAO,CAAC;AAAA,GACnB;AAEA,EAAMA,kBAAU,MAAM;AACpB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAiB;AAC1C,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAEtB,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAEA,IAAA,aAAA,GAAgB,KAAK,CAAA;AACrB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAA2B;AAChD,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,YAAA,GAAe,OAAO,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,eAAe,EAAE,CAAA;AAEvE,IAAA,QAAQ,EAAE,GAAA;AAAK,MACb,KAAK,YAAA;AAAA,MACL,KAAK,WAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,SAAA,GAAA,CAAa,YAAA,GAAe,CAAA,IAAK,MAAA,CAAO,MAAA;AAC9C,QAAA,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAC,CAAA;AACnC,QAAA;AAAA,MACF,KAAK,WAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,YAAY,YAAA,IAAgB,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,IAAI,YAAA,GAAe,CAAA;AACzE,QAAA,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAC,CAAA;AACnC,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,uBACExC,IAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAZ,IAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,cAAA,KAAmB,yBAClBA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAM,WAAA;AAAA,QACN,YAAA,EAAW,cAAA;AAAA,QACX,SAAA;AAAA,QAEA,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,wBAG/BY,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,WAAA,KAAgB,IAAA,GAAO,SAAA,GAAY,WAAA;AAAA,QACzC,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,QAEhC,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BAC7BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,aAAA,EAAe,QAAQ,OAAA,EAAQ;AAAA;AAAA;AAAA,KACxC,EAEJ,CAAA;AAAA,oBAEAA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,aAAA;AAAA,QAEX,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,4BAAAZ,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,4BAChDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,wCAAA,EAE7C;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cAEC,KAAA;AAAA,cACA,UAAA,EAAY,aAAA,EAAe,EAAA,KAAO,KAAA,CAAM,EAAA;AAAA,cACxC,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAK;AAAA,aAAA;AAAA,YAHjC,KAAA,CAAM;AAAA,WAKd,CAAA,EACH,CAAA;AAAA,UAEC,aAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACb,QAAA,kBAAAY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,4BAAAZ,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,2CAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,aAAA,CAAc,OAAA;AAAQ;AAAA,aAClD;AAAA,4BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,wBAAc,IAAA,EAAK;AAAA,WAAA,EAC5D,CAAA,EACF;AAAA,SAAA,EAEJ;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACzLA,SAAS,eAAA,CACP,CAAA,EACA,CAAA,EACA,SAAA,EACA,UAAA,EAC0B;AAC1B,EAAA,MAAM,OAAA,GAAU,CAAA;AAChB,EAAA,MAAM,gBAAgB,MAAA,CAAO,UAAA;AAC7B,EAAA,MAAM,iBAAiB,MAAA,CAAO,WAAA;AAE9B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,IAAI,CAAA,GAAI,SAAA,GAAY,aAAA,GAAgB,OAAA,EAAS;AAC3C,IAAA,KAAA,GAAQ,gBAAgB,SAAA,GAAY,OAAA;AAAA,EACtC;AACA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,KAAA,GAAQ,OAAA;AAAA,EACV;AAEA,EAAA,IAAI,CAAA,GAAI,UAAA,GAAa,cAAA,GAAiB,OAAA,EAAS;AAC7C,IAAA,KAAA,GAAQ,iBAAiB,UAAA,GAAa,OAAA;AAAA,EACxC;AACA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,KAAA,GAAQ,OAAA;AAAA,EACV;AAEA,EAAA,OAAO,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAM;AAC9B;AAWA,SAAS,SAAS,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,GAAQ,GAAE,EAAkB;AAC7D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAU,iBAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAU,iBAG1C,IAAI,CAAA;AACd,EAAA,MAAM,OAAA,GAAgB,eAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,eAAA,GAAwB,eAA6C,IAAI,CAAA;AAE/E,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AAEzD,EAAM,kBAAU,MAAM;AACpB,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,QAAA,YAAA,CAAa,gBAAgB,OAAO,CAAA;AAAA,MACtC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAyB,oBAAY,MAAM;AAC/C,IAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,gBAAgB,OAAO,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,UAAA,IAAc,QAAQ,OAAA,EAAS;AACjC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,qBAAA,EAAsB;AACnD,MAAA,MAAM,YAAA,GAAe,GAAA;AACrB,MAAA,MAAM,aAAA,GAAA,CAAiB,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,EAAA;AAEpD,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,UAAA,GAAa,IAAA,CAAK,KAAA;AAC9C,MAAA,MAAM,IAAA,GACJ,eAAe,YAAA,GACX,IAAA,CAAK,QAAQ,CAAA,GACb,IAAA,CAAK,OAAO,YAAA,GAAe,CAAA;AAEjC,MAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAE,GAAI,eAAA;AAAA,QACf,IAAA;AAAA,QACA,IAAA,CAAK,GAAA;AAAA,QACL,YAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,kBAAA,CAAmB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AAC3B,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,IAAA,CAAK,OAAA,EAAS,MAAM,CAAC,CAAA;AAErC,EAAA,MAAM,gBAAA,GAAyB,oBAAY,MAAM;AAC/C,IAAA,eAAA,CAAgB,OAAA,GAAU,WAAW,MAAM;AACzC,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB,GAAG,GAAG,CAAA;AAAA,EACR,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,uBAAA,GAAgC,oBAAY,MAAM;AACtD,IAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,MAAA,YAAA,CAAa,gBAAgB,OAAO,CAAA;AAAA,IACtC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,uBAAA,GAAgC,oBAAY,MAAM;AACtD,IAAA,eAAA,CAAgB,OAAA,GAAU,WAAW,MAAM;AACzC,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB,GAAG,GAAG,CAAA;AAAA,EACR,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAoB,oBAAY,MAAM;AAC1C,IAAA,IAAI,KAAK,QAAA,EAAU;AAEnB,IAAA,IAAI,CAAC,UAAA,IAAc,IAAA,CAAK,MAAA,EAAQ;AAC9B,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,OAAA,EAAQ;AAAA,IACV;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,UAAA,EAAY,OAAO,CAAC,CAAA;AAE9B,EAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,KAAA,EAAO;AAC/B,IAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,EAC9C;AAEA,EAAA,uBACEY,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,cAAc,gBAAA,EACtC,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAc,gBAAA;AAAA,QACd,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACT,6DAAA;AAAA,UACA,6BAAA;AAAA,UACA,iEAAA;AAAA,UACA,IAAA,CAAK,WACD,qDAAA,GACA,6DAAA;AAAA,UACJ,IAAA,CAAK,WAAA,IACH,CAAC,IAAA,CAAK,QAAA,IACN;AAAA,SACJ;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,wBACJZ,GAAAA;AAAA,YAAC,IAAA,CAAK,IAAA;AAAA,YAAL;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,uBAAA;AAAA,gBACA,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,QAAA,IAAY;AAAA;AACxC;AAAA,WACF;AAAA,0BAEFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,eAAK,KAAA,EAAM,CAAA;AAAA,UAC7C,IAAA,CAAK,4BACJA,GAAAA,CAAC,UAAK,SAAA,EAAU,kDAAA,EACb,eAAK,QAAA,EACR,CAAA;AAAA,UAED,8BACCA,GAAAA,CAAC6B,YAAAA,EAAA,EAAa,WAAU,kDAAA,EAAmD;AAAA;AAAA;AAAA,KAE/E;AAAA,IAEC,KAAK,OAAA,oBAAW7B,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,CAAA;AAAA,IAErD,UAAA,IAAc,aAAA,IAAiB,eAAA,oBAC9BA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,iCAAA;AAAA,UACA,oCAAA;AAAA,UACA,WAAA;AAAA,UACA,iCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,CAAA,EAAG,eAAA,CAAgB,CAAC,CAAA,EAAA,CAAA;AAAA,UAC1B,GAAA,EAAK,CAAA,EAAG,eAAA,CAAgB,CAAC,CAAA,EAAA;AAAA,SAC3B;AAAA,QACA,YAAA,EAAc,uBAAA;AAAA,QACd,YAAA,EAAc,uBAAA;AAAA,QAEb,QAAA,EAAA,IAAA,CAAK,OAAA,CAAS,GAAA,CAAI,CAAC,4BAClBA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAM,OAAA;AAAA,YACN,OAAA;AAAA,YACA,OAAO,KAAA,GAAQ;AAAA,WAAA;AAAA,UAHV,OAAA,CAAQ;AAAA,SAKhB;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;AA2BO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,OAAA,GAAgB,eAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAU,OAAA,CAAA,QAAA,CAAmC;AAAA,IAC/E,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ,CAAA;AAED,EAAM,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,IAAI,IAAI,QAAA,CAAS,CAAA;AACjB,IAAA,IAAI,IAAI,QAAA,CAAS,CAAA;AAEjB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAA,GAAO,SAAS,qBAAA,EAAsB;AAC5C,MAAA,CAAA,GAAI,IAAA,CAAK,IAAA;AACT,MAAA,CAAA,GAAI,KAAK,MAAA,GAAS,CAAA;AAAA,IACpB;AAEA,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,qBAAA,EAAsB;AACvD,QAAA,MAAM,UAAU,eAAA,CAAgB,CAAA,EAAG,GAAG,QAAA,CAAS,KAAA,EAAO,SAAS,MAAM,CAAA;AACrE,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,eAAA,CAAgB,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AAAA,MAC1B;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAQ,CAAC,CAAA;AAE/B,EAAM,kBAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAkB;AAC5C,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAC,OAAA,CAAQ,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAClE,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAEjD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAC5D,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,YAAY,CAAA;AAAA,IACtD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,wCAAA;AAAA,QACA,iCAAA;AAAA,QACA,oCAAA;AAAA,QACA,WAAA;AAAA,QACA,iCAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,CAAA,EAAG,YAAA,CAAa,CAAC,CAAA,EAAA,CAAA;AAAA,QACvB,GAAA,EAAK,CAAA,EAAG,YAAA,CAAa,CAAC,CAAA,EAAA;AAAA,OACxB;AAAA,MACA,IAAA,EAAK,MAAA;AAAA,MACL,kBAAA,EAAiB,UAAA;AAAA,MAEhB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA,CAAC,QAAA,EAAA,EAAuB,IAAA,EAAY,OAAA,EAAA,EAArB,IAAA,CAAK,EAAkC,CACvD;AAAA;AAAA,GACH;AAEJ;AAoBO,SAAS,cAAA,GAAuD;AACrE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,iBAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU,OAAA,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAC7D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,iBAAmB,IAAI,CAAA;AACjE,EAAA,MAAM,OAAA,GAAgB,eAAuB,IAAI,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAiB,OAAA,CAAA,WAAA,CAAY,CAAC,CAAA,EAAW,GAAW,IAAA,KAAY;AACpE,IAAA,WAAA,CAAY,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA;AACpB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAkB,oBAAY,MAAM;AACxC,IAAA,SAAA,CAAU,KAAK,CAAA;AACf,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function to merge Tailwind CSS classes with proper precedence.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * cn(\"px-4 py-2\", \"px-6\") // => \"py-2 px-6\"\n * cn(\"text-red-500\", isActive && \"text-blue-500\") // => conditional\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Button variant styles using class-variance-authority.\n * Provides consistent button styling across the application.\n */\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-muted text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n primary: \"bg-accent text-accent-foreground shadow hover:shadow-md\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 hover:shadow-md\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * If true, the button will render as its child element (Slot pattern).\n * Useful for wrapping other components like links.\n */\n asChild?: boolean;\n}\n\n/**\n * Button Component\n *\n * A versatile button component with multiple variants and sizes.\n * Supports the Slot pattern for composing with other elements.\n *\n * @example\n * <Button variant=\"primary\">Click me</Button>\n *\n * @example\n * <Button variant=\"ghost\" size=\"icon\">\n * <Icon />\n * </Button>\n *\n * @example\n * <Button asChild>\n * <a href=\"/link\">Link Button</a>\n * </Button>\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\n/**\n * Input Component\n *\n * A styled text input with consistent theming.\n * Supports all native input attributes.\n *\n * @example\n * <Input placeholder=\"Enter your name\" />\n *\n * @example\n * <Input type=\"email\" placeholder=\"email@example.com\" />\n *\n * @example\n * <Input disabled value=\"Disabled input\" />\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n);\n\nexport interface LabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,\n VariantProps<typeof labelVariants> {}\n\n/**\n * Label Component\n *\n * A form label component with consistent styling.\n * Automatically associates with form controls via htmlFor.\n *\n * @example\n * <Label htmlFor=\"email\">Email</Label>\n * <Input id=\"email\" type=\"email\" />\n */\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label, labelVariants };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/**\n * Textarea Component\n *\n * A styled multi-line text input with consistent theming.\n * Supports all native textarea attributes.\n *\n * @example\n * <Textarea placeholder=\"Enter description...\" />\n *\n * @example\n * <Textarea rows={5} placeholder=\"Write your message...\" />\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Badge variant styles using class-variance-authority.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success:\n \"border-transparent bg-success text-success-foreground shadow hover:bg-success/80\",\n warning:\n \"border-transparent bg-warning text-warning-foreground shadow hover:bg-warning/80\",\n muted:\n \"border-transparent bg-muted text-muted-foreground hover:bg-muted/80\",\n accent:\n \"border-transparent bg-accent text-accent-foreground hover:bg-accent/80\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\n/**\n * Badge Component\n *\n * A small status indicator with various semantic variants.\n * Use for tags, labels, counts, or status indicators.\n *\n * @example\n * <Badge>Default</Badge>\n *\n * @example\n * <Badge variant=\"success\">Active</Badge>\n *\n * @example\n * <Badge variant=\"destructive\">Error</Badge>\n */\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /**\n * Whether to show a visible border around the checkbox.\n * @default true\n */\n showBorder?: boolean;\n}\n\n/**\n * Checkbox Component\n *\n * An accessible checkbox input built on Radix UI primitives.\n * Supports controlled and uncontrolled modes.\n *\n * @example\n * <Checkbox id=\"terms\" />\n * <Label htmlFor=\"terms\">Accept terms</Label>\n *\n * @example\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} />\n */\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, showBorder = true, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n // Base styles\n \"grid place-content-center peer shrink-0\",\n \"h-4 w-4 rounded-sm\",\n \"transition-colors duration-150\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Border styles (conditional)\n showBorder\n ? [\n // Visible border for better contrast\n \"border-2 border-foreground/40\",\n // Hover state\n \"hover:border-foreground/60\",\n // Checked state - use accent background with contrasting border\n \"data-[state=checked]:bg-accent data-[state=checked]:border-accent\",\n ]\n : [\n // No border variant (for inline uses)\n \"border border-transparent\",\n // Checked state with subtle background\n \"data-[state=checked]:bg-accent/80\",\n ],\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\n \"grid place-content-center\",\n // Use foreground color that contrasts with accent\n \"text-accent-foreground\"\n )}\n >\n <Check className=\"h-3.5 w-3.5 stroke-[3]\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {}\n\n/**\n * Switch Component\n *\n * A toggle switch for boolean on/off states.\n * Accessible alternative to checkbox for settings.\n *\n * @example\n * <Switch id=\"notifications\" />\n * <Label htmlFor=\"notifications\">Enable notifications</Label>\n *\n * @example\n * <Switch checked={isEnabled} onCheckedChange={setIsEnabled} />\n */\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n className={cn(\n // Base styles\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center\",\n \"rounded-full border-2 border-transparent\",\n \"transition-colors\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n // Disabled styles\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n // Unchecked state\n \"bg-input\",\n // Checked state\n \"data-[state=checked]:bg-primary\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n // Base styles\n \"pointer-events-none block h-4 w-4 rounded-full\",\n \"bg-background shadow-lg ring-0\",\n \"transition-transform\",\n // Position based on state\n \"data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n));\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ProgressProps\n extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {}\n\n/**\n * Progress Component\n *\n * A progress bar showing completion percentage.\n * Use for loading states, file uploads, or task progress.\n *\n * @example\n * <Progress value={50} />\n *\n * @example\n * <Progress value={progress} className=\"w-[60%]\" />\n */\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SeparatorProps\n extends React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {}\n\n/**\n * Separator Component\n *\n * A visual divider between content sections.\n * Can be horizontal (default) or vertical.\n *\n * @example\n * <div>Content above</div>\n * <Separator />\n * <div>Content below</div>\n *\n * @example\n * <div className=\"flex items-center gap-4\">\n * <span>Left</span>\n * <Separator orientation=\"vertical\" className=\"h-4\" />\n * <span>Right</span>\n * </div>\n */\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Skeleton Component\n *\n * A loading placeholder with shimmer animation.\n * Use to indicate content that is loading.\n *\n * @example\n * // Text placeholder\n * <Skeleton className=\"h-4 w-[250px]\" />\n *\n * @example\n * // Avatar placeholder\n * <Skeleton className=\"h-12 w-12 rounded-full\" />\n *\n * @example\n * // Card placeholder\n * <div className=\"space-y-2\">\n * <Skeleton className=\"h-4 w-[250px]\" />\n * <Skeleton className=\"h-4 w-[200px]\" />\n * </div>\n */\nfunction Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-primary/10\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps\n extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {}\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"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, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute 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));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Tabs Root\n *\n * Container for tabbed content. Controls which tab is active.\n *\n * @example\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n */\nconst Tabs = TabsPrimitive.Root;\n\n/**\n * TabsList\n *\n * Container for tab triggers. Provides the tab header bar.\n */\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-start\",\n \"border-b border-border\",\n \"bg-transparent\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\n/**\n * TabsTrigger\n *\n * Individual tab button that activates its associated content.\n */\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n // Base styles\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"px-4 py-2.5 text-sm font-medium\",\n \"transition-colors\",\n // Border-bottom indicator style\n \"border-b-2 -mb-px\",\n // Default state\n \"border-transparent text-muted-foreground\",\n // Hover state\n \"hover:text-foreground hover:border-muted-foreground/50\",\n // Active/selected state\n \"data-[state=active]:border-foreground data-[state=active]:text-foreground\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n // Disabled styles\n \"disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\n/**\n * TabsContent\n *\n * Container for the content associated with a tab.\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\",\n // Focus styles\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Accordion variant styles using class-variance-authority.\n * Provides consistent accordion styling across the application.\n */\nconst accordionItemVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"border-b border-border\",\n bordered:\n \"border border-border rounded-lg mb-2 last:mb-0 overflow-hidden\",\n card: \"bg-card border border-border rounded-lg mb-3 last:mb-0 shadow-sm overflow-hidden\",\n filled: \"bg-muted/50 rounded-lg mb-2 last:mb-0 overflow-hidden\",\n ghost: \"mb-1 last:mb-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst accordionTriggerVariants = cva(\n // Base styles - no text decoration\n [\n \"flex flex-1 items-center justify-between py-4 text-sm font-medium\",\n \"transition-all\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"[&[data-state=open]>svg]:rotate-180\",\n ],\n {\n variants: {\n variant: {\n default: \"hover:text-foreground/80\",\n bordered: \"px-4 hover:bg-muted/50\",\n card: \"px-4 hover:bg-muted/30\",\n filled: \"px-4 hover:bg-muted\",\n ghost: \"px-2 rounded-md hover:bg-muted/50\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst accordionContentVariants = cva(\n [\"overflow-hidden text-sm\", \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"],\n {\n variants: {\n variant: {\n default: \"\",\n bordered: \"\",\n card: \"\",\n filled: \"\",\n ghost: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst accordionContentInnerVariants = cva(\"pb-4 pt-0\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"px-4\",\n card: \"px-4\",\n filled: \"px-4\",\n ghost: \"px-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n/**\n * Accordion Root\n *\n * Container for accordion items. Can be single or multiple mode.\n *\n * @example\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>Section 1</AccordionTrigger>\n * <AccordionContent>Content 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nconst Accordion = AccordionPrimitive.Root;\n\nexport type AccordionVariant = \"default\" | \"bordered\" | \"card\" | \"filled\" | \"ghost\";\n\nexport interface AccordionItemProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>,\n VariantProps<typeof accordionItemVariants> {}\n\n/**\n * AccordionItem\n *\n * Individual accordion section containing a trigger and content.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemProps\n>(({ className, variant, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(accordionItemVariants({ variant }), className)}\n data-variant={variant || \"default\"}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nexport interface AccordionTriggerProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>,\n VariantProps<typeof accordionTriggerVariants> {}\n\n/**\n * AccordionTrigger\n *\n * Button that toggles the accordion item open/closed.\n * Includes animated chevron indicator.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerProps\n>(({ className, children, variant, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(accordionTriggerVariants({ variant }), className)}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nexport interface AccordionContentProps\n extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>,\n VariantProps<typeof accordionContentVariants> {}\n\n/**\n * AccordionContent\n *\n * Animated content area that expands/collapses.\n * Supports variants: default, bordered, card, filled, ghost\n */\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentProps\n>(({ className, children, variant, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(accordionContentVariants({ variant }))}\n {...props}\n >\n <div className={cn(accordionContentInnerVariants({ variant }), className)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n accordionItemVariants,\n accordionTriggerVariants,\n accordionContentVariants,\n};\n","/**\n * Tooltip Component\n *\n * A compact, themeable tooltip built on Radix UI.\n * Uses a portal to render at document body level, ensuring it's never clipped.\n *\n * Features:\n * - Portal-based rendering (never clipped by containers)\n * - Configurable delay duration\n * - Automatic position flipping when near edges\n * - Theme-aware styling\n */\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * TooltipProvider - Wrap your app with this for shared tooltip delay behavior\n */\nconst TooltipProvider = TooltipPrimitive.Provider;\n\n/**\n * TooltipRoot - The root component for controlled usage\n */\nconst TooltipRoot = TooltipPrimitive.Root;\n\n/**\n * TooltipTrigger - The element that triggers the tooltip\n */\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\n/**\n * TooltipPortal - Portals the content to document.body\n */\nconst TooltipPortal = TooltipPrimitive.Portal;\n\n/**\n * TooltipContent - The styled tooltip content\n */\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n // Base styles\n \"z-[99999] overflow-hidden\",\n \"px-2.5 py-1.5 rounded-md\",\n // Colors\n \"bg-popover text-popover-foreground\",\n \"border border-border\",\n // Typography\n \"text-xs font-medium\",\n // Shadow\n \"shadow-md\",\n // Animation\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\n/**\n * TooltipArrow - Optional arrow pointing to the trigger\n */\nconst TooltipArrow = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Arrow>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>\n>(({ className, ...props }, ref) => (\n <TooltipPrimitive.Arrow\n ref={ref}\n className={cn(\"fill-popover\", className)}\n {...props}\n />\n));\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\n\n// ============================================================================\n// Simple Tooltip API (backwards compatible with existing usage)\n// ============================================================================\n\nexport interface TooltipProps {\n /**\n * Tooltip content - can be string or ReactNode for rich content\n */\n content: React.ReactNode;\n\n /**\n * Element to wrap with tooltip\n */\n children: React.ReactElement;\n\n /**\n * Position of the tooltip relative to the trigger\n * @default \"top\"\n */\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\n /**\n * Delay before showing tooltip (in milliseconds)\n * @default 200\n */\n delayDuration?: number;\n\n /**\n * Offset from the trigger element (in pixels)\n * @default 6\n */\n sideOffset?: number;\n\n /**\n * Maximum width of the tooltip\n * @default 250\n */\n maxWidth?: number;\n\n /**\n * Whether the tooltip is disabled\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Additional class names for the tooltip content\n */\n className?: string;\n}\n\n/**\n * Tooltip component\n *\n * Simple wrapper around Radix Tooltip for ease of use.\n * Renders in a portal so it's never clipped by containers.\n *\n * @example\n * <Tooltip content=\"Hello world\">\n * <button>Hover me</button>\n * </Tooltip>\n *\n * @example\n * <Tooltip content=\"Click to save\" position=\"bottom\" delayDuration={0}>\n * <button>Save</button>\n * </Tooltip>\n */\nfunction Tooltip({\n content,\n children,\n position = \"top\",\n delayDuration = 200,\n sideOffset = 6,\n maxWidth = 250,\n disabled = false,\n className,\n}: TooltipProps) {\n // Don't render tooltip if no content or disabled\n if (!content || disabled) {\n return children;\n }\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipContent\n side={position}\n sideOffset={sideOffset}\n className={className}\n style={{ maxWidth: `${maxWidth}px` }}\n >\n {content}\n </TooltipContent>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n\n// Export primitives for advanced usage\nexport {\n Tooltip,\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Popover - Root component for popover behavior\n */\nconst Popover = PopoverPrimitive.Root;\n\n/**\n * PopoverTrigger - Element that triggers the popover\n */\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\n/**\n * PopoverAnchor - Custom anchor element for positioning\n */\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport interface PopoverContentProps\n extends React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> {}\n\n/**\n * PopoverContent - The popover content panel\n *\n * @example\n * <Popover>\n * <PopoverTrigger asChild>\n * <Button>Open</Button>\n * </PopoverTrigger>\n * <PopoverContent>\n * <p>Popover content here</p>\n * </PopoverContent>\n * </Popover>\n */\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverContentProps\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n // Animation\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","import * 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/cn\";\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\nexport interface DropdownMenuSubTriggerProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> {\n inset?: boolean;\n}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"focus:bg-accent\",\n \"data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nexport interface DropdownMenuItemProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> {\n inset?: boolean;\n destructive?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuItemProps\n>(({ className, inset, destructive, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n destructive && \"text-destructive focus:text-destructive\",\n className\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nexport interface DropdownMenuLabelProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> {\n inset?: boolean;\n}\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n DropdownMenuLabelProps\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-border\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nexport interface DropdownMenuShortcutProps\n extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: DropdownMenuShortcutProps) => {\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","import * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../utils/cn\";\nimport { buttonVariants } from \"./button\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.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-border bg-background p-6 shadow-lg duration-200\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]\",\n \"data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]\",\n \"sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nexport interface AlertDialogHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst AlertDialogHeader = ({ className, ...props }: AlertDialogHeaderProps) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nexport interface AlertDialogFooterProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst AlertDialogFooter = ({ className, ...props }: AlertDialogFooterProps) => (\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);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: \"outline\" }), \"mt-2 sm:mt-0\", className)}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\nimport { Checkbox } from \"./checkbox\";\n\n// =============================================================================\n// Card Variants\n// =============================================================================\n\n/**\n * Card variant styles using class-variance-authority.\n * Provides size, hover effects, and interactive styling options.\n */\nconst cardVariants = cva(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n {\n variants: {\n /**\n * Card width size presets\n */\n size: {\n auto: \"\",\n sm: \"w-64\",\n md: \"w-80\",\n lg: \"w-96\",\n xl: \"w-[28rem]\",\n full: \"w-full\",\n },\n /**\n * Hover effect styles\n */\n hover: {\n none: \"\",\n lift: \"transition-all duration-200 hover:-translate-y-1 hover:shadow-lg\",\n glow: \"transition-shadow duration-200 hover:shadow-lg hover:shadow-accent/20\",\n border: \"transition-colors duration-200 hover:border-accent\",\n \"border-success\": \"transition-colors duration-200 hover:border-success\",\n \"border-warning\": \"transition-colors duration-200 hover:border-warning\",\n \"border-destructive\": \"transition-colors duration-200 hover:border-destructive\",\n \"border-muted\": \"transition-colors duration-200 hover:border-muted-foreground\",\n scale: \"transition-transform duration-200 hover:scale-[1.02]\",\n },\n /**\n * Whether the card is interactive (clickable)\n */\n interactive: {\n true: \"cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n false: \"\",\n },\n /**\n * Card padding density\n */\n padding: {\n none: \"\",\n sm: \"[&>*:not(img)]:p-3 [&>*:not(img)]:pt-3\",\n md: \"\",\n lg: \"[&>*:not(img)]:p-8 [&>*:not(img)]:pt-8\",\n },\n },\n defaultVariants: {\n size: \"auto\",\n hover: \"none\",\n interactive: false,\n padding: \"md\",\n },\n }\n);\n\n// =============================================================================\n// Base Card Component\n// =============================================================================\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /**\n * If true, the card acts as a button and can be clicked.\n * Adds keyboard accessibility and focus states.\n */\n asButton?: boolean;\n /**\n * Custom CSS class for hover border color.\n * Use Tailwind classes like \"hover:border-blue-500\" or custom CSS variables.\n * This overrides the hover variant's border color if specified.\n */\n hoverBorderClass?: string;\n}\n\n/**\n * Card - Versatile container component for grouped content\n *\n * A flexible card component supporting multiple sizes, hover effects,\n * and interactive states. Use with CardHeader, CardContent, CardFooter,\n * and other sub-components.\n *\n * @example\n * <Card size=\"md\" hover=\"lift\">\n * <CardHeader>\n * <CardTitle>Title</CardTitle>\n * </CardHeader>\n * <CardContent>Content here</CardContent>\n * </Card>\n *\n * @example\n * <Card interactive hover=\"border\" onClick={() => navigate('/item')}>\n * <CardContent>Clickable card</CardContent>\n * </Card>\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n className,\n size,\n hover,\n interactive,\n padding,\n asButton,\n hoverBorderClass,\n onClick,\n onKeyDown,\n ...props\n },\n ref\n ) => {\n // If asButton is true, make the card interactive\n const isInteractive = interactive || asButton || !!onClick;\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isInteractive && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n onKeyDown?.(e);\n },\n [isInteractive, onClick, onKeyDown]\n );\n\n return (\n <div\n ref={ref}\n role={isInteractive ? \"button\" : undefined}\n tabIndex={isInteractive ? 0 : undefined}\n className={cn(\n cardVariants({ size, hover, interactive: isInteractive, padding }),\n \"group relative\",\n // Custom hover border color overrides variant if provided\n hoverBorderClass && \"transition-colors duration-200\",\n hoverBorderClass,\n className\n )}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n }\n);\nCard.displayName = \"Card\";\n\n// =============================================================================\n// Card Sub-Components\n// =============================================================================\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardHeader - Header section of a card\n */\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardTitle - Title text for card header\n */\nconst CardTitle = React.forwardRef<HTMLDivElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardDescription - Descriptive text for card header\n */\nconst CardDescription = React.forwardRef<HTMLDivElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardContent - Main content area of a card\n */\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * CardFooter - Footer section of a card\n */\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n\n// =============================================================================\n// CardImage Component\n// =============================================================================\n\nconst cardImageVariants = cva(\"w-full object-cover\", {\n variants: {\n /**\n * Image aspect ratio\n */\n aspectRatio: {\n auto: \"\",\n square: \"aspect-square\",\n video: \"aspect-video\",\n wide: \"aspect-[2/1]\",\n portrait: \"aspect-[3/4]\",\n },\n /**\n * Image position in the card\n */\n position: {\n top: \"rounded-t-xl\",\n bottom: \"rounded-b-xl\",\n fill: \"rounded-xl\",\n },\n },\n defaultVariants: {\n aspectRatio: \"video\",\n position: \"top\",\n },\n});\n\nexport interface CardImageProps\n extends React.ImgHTMLAttributes<HTMLImageElement>,\n VariantProps<typeof cardImageVariants> {\n /**\n * Fallback content to display if image fails to load\n */\n fallback?: React.ReactNode;\n}\n\n/**\n * CardImage - Image/media component for cards\n *\n * Displays images with configurable aspect ratios and positions.\n * Handles loading states and fallbacks.\n *\n * @example\n * <Card>\n * <CardImage src=\"/photo.jpg\" alt=\"Photo\" aspectRatio=\"video\" />\n * <CardContent>Caption</CardContent>\n * </Card>\n */\nconst CardImage = React.forwardRef<HTMLImageElement, CardImageProps>(\n (\n { className, aspectRatio, position, fallback, alt, src, onError, ...props },\n ref\n ) => {\n const [hasError, setHasError] = React.useState(false);\n\n const handleError = React.useCallback(\n (e: React.SyntheticEvent<HTMLImageElement>) => {\n setHasError(true);\n onError?.(e);\n },\n [onError]\n );\n\n // Reset error state when src changes\n React.useEffect(() => {\n setHasError(false);\n }, [src]);\n\n if (hasError && fallback) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center bg-muted\",\n cardImageVariants({ aspectRatio, position }),\n className\n )}\n >\n {fallback}\n </div>\n );\n }\n\n return (\n <img\n ref={ref}\n src={src}\n alt={alt}\n className={cn(cardImageVariants({ aspectRatio, position }), className)}\n onError={handleError}\n {...props}\n />\n );\n }\n);\nCardImage.displayName = \"CardImage\";\n\n// =============================================================================\n// CardActions Component\n// =============================================================================\n\nconst cardActionsVariants = cva(\n \"absolute flex items-center gap-1 transition-opacity duration-200 z-10\",\n {\n variants: {\n /**\n * When to show the actions\n */\n showOn: {\n hover: \"opacity-0 group-hover:opacity-100\",\n always: \"opacity-100\",\n },\n /**\n * Position of the actions overlay\n */\n position: {\n \"top-right\": \"top-2 right-2\",\n \"top-left\": \"top-2 left-2\",\n \"bottom-right\": \"bottom-2 right-2\",\n \"bottom-left\": \"bottom-2 left-2\",\n },\n /**\n * Visual style of the actions container\n */\n variant: {\n /** Solid background with backdrop blur */\n floating: \"bg-background/90 backdrop-blur-sm rounded-md shadow-sm p-1\",\n /** No background, just spacing */\n ghost: \"p-1\",\n /** Muted bar background */\n bar: \"bg-muted/80 backdrop-blur-sm rounded-md p-1.5\",\n /** No background on container, icons get background on hover */\n \"icon-hover\":\n \"p-0 [&>button]:bg-transparent [&>button]:hover:bg-background/90 [&>button]:hover:shadow-sm [&>button]:transition-all\",\n },\n },\n defaultVariants: {\n showOn: \"hover\",\n position: \"top-right\",\n variant: \"floating\",\n },\n }\n);\n\nexport interface CardActionsProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardActionsVariants> {}\n\n/**\n * CardActions - Hover-reveal action buttons for cards\n *\n * Place action buttons that appear on hover. Position can be customized.\n * The parent Card automatically gets the 'group' class for hover detection.\n *\n * @example\n * <Card hover=\"lift\">\n * <CardActions>\n * <IconButton size=\"sm\" variant=\"ghost\"><Edit /></IconButton>\n * <IconButton size=\"sm\" variant=\"ghost\"><Trash /></IconButton>\n * </CardActions>\n * <CardContent>Content</CardContent>\n * </Card>\n *\n * @example\n * // With floating style (default)\n * <CardActions variant=\"floating\">...</CardActions>\n *\n * @example\n * // With bar style for image overlays\n * <CardActions variant=\"bar\" position=\"bottom-right\">...</CardActions>\n */\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n ({ className, showOn, position, variant, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardActionsVariants({ showOn, position, variant }), className)}\n // Prevent clicks from bubbling to parent card\n onClick={(e) => e.stopPropagation()}\n {...props}\n />\n )\n);\nCardActions.displayName = \"CardActions\";\n\n// =============================================================================\n// SelectableCard Component\n// =============================================================================\n\nexport interface SelectableCardProps extends CardProps {\n /**\n * Whether the card is selected (controlled)\n */\n selected?: boolean;\n /**\n * Default selected state (uncontrolled)\n */\n defaultSelected?: boolean;\n /**\n * Callback when selection changes\n */\n onSelectedChange?: (selected: boolean) => void;\n /**\n * Whether to show a visible checkbox\n */\n showCheckbox?: boolean;\n /**\n * Position of the checkbox\n */\n checkboxPosition?: \"top-left\" | \"top-right\" | \"inline-left\";\n /**\n * Whether the card is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * SelectableCard - Card with selection state\n *\n * A card that can be selected/deselected. Supports controlled and uncontrolled modes.\n * Can optionally display a checkbox indicator.\n *\n * @example\n * <SelectableCard\n * selected={isSelected}\n * onSelectedChange={setIsSelected}\n * showCheckbox\n * >\n * <CardContent>Selectable content</CardContent>\n * </SelectableCard>\n *\n * @example\n * // Multi-select list with inline checkbox\n * {items.map(item => (\n * <SelectableCard\n * key={item.id}\n * selected={selectedIds.includes(item.id)}\n * onSelectedChange={(sel) => toggleSelection(item.id, sel)}\n * showCheckbox\n * checkboxPosition=\"inline-left\"\n * >\n * <CardContent>{item.name}</CardContent>\n * </SelectableCard>\n * ))}\n */\nconst SelectableCard = React.forwardRef<HTMLDivElement, SelectableCardProps>(\n (\n {\n className,\n selected: controlledSelected,\n defaultSelected = false,\n onSelectedChange,\n showCheckbox = false,\n checkboxPosition = \"top-right\",\n disabled = false,\n children,\n onClick,\n hover = \"border\",\n ...props\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledSelected, setUncontrolledSelected] =\n React.useState(defaultSelected);\n const isControlled = controlledSelected !== undefined;\n const isSelected = isControlled ? controlledSelected : uncontrolledSelected;\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n const newSelected = !isSelected;\n if (!isControlled) {\n setUncontrolledSelected(newSelected);\n }\n onSelectedChange?.(newSelected);\n onClick?.(e);\n },\n [disabled, isSelected, isControlled, onSelectedChange, onClick]\n );\n\n const handleCheckboxChange = React.useCallback(\n (checked: boolean | \"indeterminate\") => {\n if (disabled) return;\n\n const newSelected = checked === true;\n if (!isControlled) {\n setUncontrolledSelected(newSelected);\n }\n onSelectedChange?.(newSelected);\n },\n [disabled, isControlled, onSelectedChange]\n );\n\n // Inline checkbox renders in a dedicated control bar\n const isInline = checkboxPosition === \"inline-left\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n // Selection styling\n isSelected && \"ring-2 ring-accent border-accent\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n interactive={!disabled}\n hover={disabled ? \"none\" : hover}\n onClick={handleClick}\n aria-selected={isSelected}\n aria-disabled={disabled}\n {...props}\n >\n {showCheckbox && isInline && (\n <div\n className=\"flex items-center gap-3 px-4 py-3 border-b border-border/50\"\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">\n {isSelected ? \"Selected\" : \"Click to select\"}\n </span>\n </div>\n )}\n {showCheckbox && !isInline && (\n <div\n className={cn(\n \"absolute z-10 p-1 bg-background/90 backdrop-blur-sm rounded-md\",\n checkboxPosition === \"top-left\" ? \"top-2 left-2\" : \"top-2 right-2\"\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleCheckboxChange}\n disabled={disabled}\n />\n </div>\n )}\n {children}\n </Card>\n );\n }\n);\nSelectableCard.displayName = \"SelectableCard\";\n\n// =============================================================================\n// Layout Components\n// =============================================================================\n\nconst cardGridVariants = cva(\"grid\", {\n variants: {\n /**\n * Number of columns\n */\n columns: {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n auto: \"grid-cols-[repeat(auto-fill,minmax(280px,1fr))]\",\n },\n /**\n * Gap between cards\n */\n gap: {\n none: \"gap-0\",\n sm: \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n xl: \"gap-8\",\n },\n },\n defaultVariants: {\n columns: \"auto\",\n gap: \"md\",\n },\n});\n\nexport interface CardGridProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardGridVariants> {}\n\n/**\n * CardGrid - Responsive grid layout for cards\n *\n * Arranges cards in a responsive grid with configurable columns and gaps.\n *\n * @example\n * <CardGrid columns={3} gap=\"lg\">\n * <Card>...</Card>\n * <Card>...</Card>\n * <Card>...</Card>\n * </CardGrid>\n *\n * @example\n * // Auto-fill columns based on available space\n * <CardGrid columns=\"auto\">\n * {items.map(item => <Card key={item.id}>...</Card>)}\n * </CardGrid>\n */\nconst CardGrid = React.forwardRef<HTMLDivElement, CardGridProps>(\n ({ className, columns, gap, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardGridVariants({ columns, gap }), className)}\n {...props}\n />\n )\n);\nCardGrid.displayName = \"CardGrid\";\n\nconst cardListVariants = cva(\"flex flex-col\", {\n variants: {\n /**\n * Gap between cards\n */\n gap: {\n none: \"gap-0\",\n sm: \"gap-2\",\n md: \"gap-4\",\n lg: \"gap-6\",\n },\n /**\n * Whether to show dividers between cards\n */\n divided: {\n true: \"[&>*:not(:last-child)]:border-b [&>*:not(:last-child)]:pb-4 [&>*:not(:last-child)]:rounded-b-none\",\n false: \"\",\n },\n },\n defaultVariants: {\n gap: \"md\",\n divided: false,\n },\n});\n\nexport interface CardListProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardListVariants> {}\n\n/**\n * CardList - Vertical list layout for cards\n *\n * Arranges cards in a vertical list with optional dividers.\n *\n * @example\n * <CardList gap=\"sm\" divided>\n * <Card>...</Card>\n * <Card>...</Card>\n * </CardList>\n */\nconst CardList = React.forwardRef<HTMLDivElement, CardListProps>(\n ({ className, gap, divided, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardListVariants({ gap, divided }), className)}\n {...props}\n />\n )\n);\nCardList.displayName = \"CardList\";\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport {\n // Core components\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n // New components\n CardImage,\n CardActions,\n SelectableCard,\n CardGrid,\n CardList,\n // Variants (for advanced customization)\n cardVariants,\n cardImageVariants,\n cardActionsVariants,\n cardGridVariants,\n cardListVariants,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Board Variants\n// =============================================================================\n\n/**\n * Board variant styles using class-variance-authority.\n * Provides elevation (shadow), border, padding, radius, background, and hover options.\n */\nconst boardVariants = cva(\"text-card-foreground\", {\n variants: {\n /**\n * Elevation (shadow depth) - similar to MUI Paper\n */\n elevation: {\n none: \"\",\n sm: \"shadow-sm\",\n md: \"shadow\",\n lg: \"shadow-lg\",\n xl: \"shadow-xl\",\n },\n /**\n * Border style\n */\n border: {\n none: \"\",\n default: \"border\",\n muted: \"border border-muted\",\n },\n /**\n * Padding size\n */\n padding: {\n none: \"\",\n sm: \"p-2\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n },\n /**\n * Border radius\n */\n radius: {\n none: \"rounded-none\",\n sm: \"rounded-sm\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n },\n /**\n * Background color\n */\n background: {\n default: \"bg-card\",\n muted: \"bg-muted\",\n transparent: \"bg-transparent\",\n },\n /**\n * Hover effect styles\n */\n hover: {\n none: \"\",\n border: \"transition-colors duration-200 hover:border-accent\",\n elevate: \"transition-shadow duration-200 hover:shadow-lg\",\n \"border-success\": \"transition-colors duration-200 hover:border-success\",\n \"border-warning\": \"transition-colors duration-200 hover:border-warning\",\n \"border-destructive\":\n \"transition-colors duration-200 hover:border-destructive\",\n },\n },\n defaultVariants: {\n elevation: \"none\",\n border: \"default\",\n padding: \"none\",\n radius: \"lg\",\n background: \"default\",\n hover: \"none\",\n },\n});\n\n// =============================================================================\n// Board Component\n// =============================================================================\n\nexport interface BoardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof boardVariants> {\n /**\n * Custom CSS class for hover border color.\n * Use Tailwind classes like \"hover:border-blue-500\" or custom CSS variables.\n * This overrides the hover variant's border color if specified.\n */\n hoverBorderClass?: string;\n}\n\n/**\n * Board - General-purpose container component with elevation support\n *\n * A flexible container similar to MUI's Paper component. Supports configurable\n * elevation (shadows), borders, padding, border radius, background colors,\n * and hover effects. Use with BoardHeader and BoardContent for structured layouts.\n *\n * @example\n * // Simple container\n * <Board elevation=\"md\" padding=\"md\">\n * <p>Content here</p>\n * </Board>\n *\n * @example\n * // With header and content\n * <Board elevation=\"lg\" border=\"default\">\n * <BoardHeader>\n * <span className=\"font-semibold\">Section Title</span>\n * </BoardHeader>\n * <BoardContent>\n * Main content goes here\n * </BoardContent>\n * </Board>\n *\n * @example\n * // Transparent background with hover effect\n * <Board background=\"transparent\" hover=\"border\" border=\"muted\">\n * <BoardContent>Hoverable content</BoardContent>\n * </Board>\n */\nconst Board = React.forwardRef<HTMLDivElement, BoardProps>(\n (\n {\n className,\n elevation,\n border,\n padding,\n radius,\n background,\n hover,\n hoverBorderClass,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n boardVariants({\n elevation,\n border,\n padding,\n radius,\n background,\n hover,\n }),\n // Custom hover border color overrides variant if provided\n hoverBorderClass && \"transition-colors duration-200\",\n hoverBorderClass,\n className\n )}\n {...props}\n />\n );\n }\n);\nBoard.displayName = \"Board\";\n\n// =============================================================================\n// BoardHeader Component\n// =============================================================================\n\nexport interface BoardHeaderProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * BoardHeader - Header section with bottom separator\n *\n * Renders a header area with a bottom border divider. Accepts any children\n * including text, icons, badges, or custom layouts.\n *\n * @example\n * <Board>\n * <BoardHeader>\n * <span className=\"font-semibold\">Title</span>\n * </BoardHeader>\n * <BoardContent>Content</BoardContent>\n * </Board>\n *\n * @example\n * // With custom layout\n * <BoardHeader className=\"flex items-center justify-between\">\n * <div className=\"flex items-center gap-2\">\n * <FileIcon />\n * <span>Documents</span>\n * </div>\n * <Badge>12</Badge>\n * </BoardHeader>\n */\nconst BoardHeader = React.forwardRef<HTMLDivElement, BoardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-4 border-b\", className)}\n {...props}\n />\n )\n);\nBoardHeader.displayName = \"BoardHeader\";\n\n// =============================================================================\n// BoardContent Component\n// =============================================================================\n\nexport interface BoardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * BoardContent - Main content area with consistent padding\n *\n * Provides a padded container for the main content. Useful when using\n * BoardHeader to maintain proper spacing.\n *\n * @example\n * <Board>\n * <BoardHeader>Title</BoardHeader>\n * <BoardContent>\n * Main content goes here\n * </BoardContent>\n * </Board>\n */\nconst BoardContent = React.forwardRef<HTMLDivElement, BoardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-4\", className)} {...props} />\n )\n);\nBoardContent.displayName = \"BoardContent\";\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport {\n // Components\n Board,\n BoardHeader,\n BoardContent,\n // Variants (for advanced customization)\n boardVariants,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface TableProps extends React.HTMLAttributes<HTMLTableElement> {}\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n);\nTable.displayName = \"Table\";\n\nexport interface TableHeaderProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n )\n);\nTableHeader.displayName = \"TableHeader\";\n\nexport interface TableBodyProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n);\nTableBody.displayName = \"TableBody\";\n\nexport interface TableFooterProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n);\nTableFooter.displayName = \"TableFooter\";\n\nexport interface TableRowProps\n extends React.HTMLAttributes<HTMLTableRowElement> {}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nexport interface TableHeadProps\n extends React.ThHTMLAttributes<HTMLTableCellElement> {}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nexport interface TableCaptionProps\n extends React.HTMLAttributes<HTMLTableCaptionElement> {}\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n TableCaptionProps\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import * as React from \"react\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Button, type ButtonProps } from \"./button\";\n\nexport interface ModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean;\n\n /**\n * Callback when modal should close\n */\n onClose: () => void;\n\n /**\n * Modal title\n */\n title: string;\n\n /**\n * Modal content\n */\n children: React.ReactNode;\n\n /**\n * Footer content (buttons, actions, etc.)\n */\n footer?: React.ReactNode;\n\n /**\n * Size variant\n */\n size?: \"sm\" | \"md\" | \"lg\";\n\n /**\n * Z-index for stacking modals (default: 50)\n */\n zIndex?: number;\n\n /**\n * Additional class names for modal content\n */\n className?: string;\n}\n\n/**\n * Modal component\n *\n * Extensible modal base for dialogs, confirmations, and forms.\n * Features:\n * - Backdrop overlay\n * - Escape key to close\n * - Click outside to close\n * - Customizable footer with action buttons\n * - Multiple size variants\n *\n * @example\n * <Modal isOpen={open} onClose={() => setOpen(false)} title=\"Confirm\">\n * <p>Are you sure?</p>\n * <footer slot=\"footer\">\n * <Button onClick={() => setOpen(false)}>Cancel</Button>\n * <Button variant=\"primary\" onClick={handleConfirm}>Confirm</Button>\n * </footer>\n * </Modal>\n */\nexport function Modal({\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = \"md\",\n zIndex = 50,\n className,\n}: ModalProps) {\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n window.addEventListener(\"keydown\", handleEscape);\n return () => window.removeEventListener(\"keydown\", handleEscape);\n }, [isOpen, onClose]);\n\n React.useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const sizeClasses = {\n sm: \"max-w-md\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n };\n\n return (\n <div\n className=\"fixed inset-0 flex items-center justify-center p-4\"\n style={{ zIndex }}\n onClick={onClose}\n >\n <div className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\" />\n\n <div\n className={cn(\n \"relative w-full\",\n \"bg-card border border-border rounded-lg shadow-lg\",\n \"flex flex-col\",\n \"max-h-[90vh]\",\n sizeClasses[size]\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border flex-shrink-0\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>\n <Button\n onClick={onClose}\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label=\"Close modal\"\n >\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n\n <div className={cn(\"flex-1 overflow-y-auto p-4\", className)}>\n {children}\n </div>\n\n {footer && (\n <div className=\"flex items-center justify-end gap-2 p-4 border-t border-border flex-shrink-0\">\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * ModalButton component\n * @deprecated Use Button component from @optilogic/core instead\n *\n * Wrapper around Button for backward compatibility\n */\nexport interface ModalButtonProps {\n /**\n * Button label\n */\n label: string;\n\n /**\n * Click handler\n */\n onClick: () => void;\n\n /**\n * Button variant\n */\n variant?: \"default\" | \"primary\" | \"destructive\";\n\n /**\n * Whether the button is disabled\n */\n disabled?: boolean;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\nexport function ModalButton({\n label,\n onClick,\n variant = \"default\",\n disabled = false,\n className,\n}: ModalButtonProps) {\n return (\n <Button\n onClick={onClick}\n disabled={disabled}\n variant={variant}\n className={className}\n >\n {label}\n </Button>\n );\n}\n","import * as React from \"react\";\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"./alert-dialog\";\n\nexport interface ConfirmationModalProps {\n /** Whether the modal is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Title of the confirmation dialog */\n title: string;\n /** Description/message to display */\n description: string;\n /** Label for the confirm button */\n confirmLabel?: string;\n /** Label for the cancel button */\n cancelLabel?: string;\n /** Whether this is a destructive action (styles confirm button as destructive) */\n destructive?: boolean;\n /** Callback when confirmed */\n onConfirm: () => void;\n /** Callback when cancelled (optional, defaults to closing) */\n onCancel?: () => void;\n}\n\n/**\n * ConfirmationModal\n *\n * A simple yes/no confirmation dialog built on AlertDialog.\n * Use for actions that need user confirmation before proceeding.\n *\n * @example\n * <ConfirmationModal\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * title=\"Delete Item\"\n * description=\"Are you sure you want to delete this item?\"\n * destructive\n * onConfirm={handleDelete}\n * />\n */\nexport function ConfirmationModal({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n destructive = false,\n onConfirm,\n onCancel,\n}: ConfirmationModalProps) {\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleConfirm = () => {\n onConfirm();\n onOpenChange(false);\n };\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancel}>\n {cancelLabel}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={handleConfirm}\n className={\n destructive\n ? \"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n : undefined\n }\n >\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n\n/**\n * useConfirmation Hook\n *\n * A hook that provides imperative confirmation dialogs.\n * Returns a confirm function that shows a dialog and returns a promise.\n *\n * @example\n * const { confirm, ConfirmationDialog } = useConfirmation();\n *\n * const handleDelete = async () => {\n * const confirmed = await confirm({\n * title: \"Delete Item\",\n * description: \"Are you sure you want to delete this item?\",\n * destructive: true,\n * });\n * if (confirmed) {\n * // perform delete\n * }\n * };\n *\n * return (\n * <>\n * <button onClick={handleDelete}>Delete</button>\n * {ConfirmationDialog}\n * </>\n * );\n */\nexport function useConfirmation() {\n const [state, setState] = React.useState<{\n open: boolean;\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n resolve?: (value: boolean) => void;\n }>({\n open: false,\n title: \"\",\n description: \"\",\n });\n\n const confirm = React.useCallback(\n (options: {\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n }): Promise<boolean> => {\n return new Promise((resolve) => {\n setState({\n open: true,\n ...options,\n resolve,\n });\n });\n },\n []\n );\n\n const handleConfirm = React.useCallback(() => {\n state.resolve?.(true);\n setState((prev) => ({ ...prev, open: false }));\n }, [state.resolve]);\n\n const handleCancel = React.useCallback(() => {\n state.resolve?.(false);\n setState((prev) => ({ ...prev, open: false }));\n }, [state.resolve]);\n\n const handleOpenChange = React.useCallback(\n (open: boolean) => {\n if (!open) {\n state.resolve?.(false);\n }\n setState((prev) => ({ ...prev, open }));\n },\n [state.resolve]\n );\n\n const ConfirmationDialog = (\n <ConfirmationModal\n open={state.open}\n onOpenChange={handleOpenChange}\n title={state.title}\n description={state.description}\n confirmLabel={state.confirmLabel}\n cancelLabel={state.cancelLabel}\n destructive={state.destructive}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n\n return { confirm, ConfirmationDialog };\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ResizeHandleProps {\n /**\n * Orientation of the resize handle\n */\n orientation: \"left\" | \"right\";\n\n /**\n * Whether the handle is resizable (draggable)\n */\n resizable?: boolean;\n\n /**\n * Show/hide the handle UI\n */\n showHandle?: boolean;\n\n /**\n * Callback when drag starts\n */\n onDragStart?: () => void;\n\n /**\n * Callback during drag; receives pixel delta\n */\n onDrag?: (deltaX: number) => void;\n\n /**\n * Callback when drag ends\n */\n onDragEnd?: () => void;\n\n /**\n * Callback for keyboard resize (arrow keys)\n */\n onKeyboardResize?: (direction: 1 | -1) => void;\n\n /**\n * ARIA label for accessibility\n */\n ariaLabel?: string;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\n/**\n * ResizeHandle component\n *\n * A draggable handle for resizing panels with full keyboard and mouse support.\n * Includes visual feedback, accessibility features, and smooth interactions.\n */\nexport function ResizeHandle({\n orientation,\n resizable = true,\n showHandle = true,\n onDragStart,\n onDrag,\n onDragEnd,\n onKeyboardResize,\n ariaLabel,\n className,\n}: ResizeHandleProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n const startXRef = React.useRef<number>(0);\n const handleRef = React.useRef<HTMLDivElement>(null);\n\n const handleMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n if (!resizable) return;\n\n e.preventDefault();\n setIsDragging(true);\n startXRef.current = e.clientX;\n\n // Prevent text selection during drag\n document.body.style.userSelect = \"none\";\n\n // Notify start\n onDragStart?.();\n },\n [resizable, onDragStart]\n );\n\n const handleMouseMove = React.useCallback(\n (e: MouseEvent) => {\n if (!isDragging) return;\n\n const deltaX = e.clientX - startXRef.current;\n startXRef.current = e.clientX;\n\n onDrag?.(deltaX);\n },\n [isDragging, onDrag]\n );\n\n const handleMouseUp = React.useCallback(() => {\n if (!isDragging) return;\n\n setIsDragging(false);\n document.body.style.userSelect = \"\";\n onDragEnd?.();\n }, [isDragging, onDragEnd]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (!resizable || !onKeyboardResize) return;\n\n let direction: 1 | -1 | null = null;\n\n // Left arrow = shrink from right / expand from left\n // Right arrow = expand from right / shrink from left\n if (e.key === \"ArrowLeft\") {\n direction = orientation === \"right\" ? -1 : 1;\n } else if (e.key === \"ArrowRight\") {\n direction = orientation === \"right\" ? 1 : -1;\n }\n\n if (direction !== null) {\n e.preventDefault();\n const multiplier = e.shiftKey ? 5 : 1; // Shift = 5vw steps\n for (let i = 0; i < multiplier; i++) {\n onKeyboardResize(direction);\n }\n }\n },\n [resizable, onKeyboardResize, orientation]\n );\n\n // Attach global mouse listeners during drag\n React.useEffect(() => {\n if (isDragging) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n if (!showHandle) return null;\n\n return (\n <div\n ref={handleRef}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={ariaLabel || `Resize handle ${orientation}`}\n aria-valuenow={undefined}\n tabIndex={resizable ? 0 : -1}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={cn(\n // Base styles\n \"relative z-10 flex items-center justify-center\",\n \"transition-colors duration-150\",\n\n // Hit area (wider for better UX)\n \"w-3\",\n\n // Cursor\n resizable ? \"cursor-col-resize\" : \"cursor-default\",\n\n // Focus state - no visible outline\n \"outline-none\",\n\n // Disabled state\n !resizable && \"opacity-50\",\n\n className\n )}\n style={{\n touchAction: \"none\",\n }}\n />\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\nimport { ResizeHandle } from \"./resize-handle\";\n\nexport interface ResizablePanelProps {\n /**\n * Which edge the panel anchors to\n */\n orientation: \"left\" | \"right\";\n\n /**\n * Default collapsed width in vw\n */\n collapsedSizeVW: number;\n\n /**\n * Current expanded width in vw (controlled prop)\n */\n expandedWidthVW?: number;\n\n /**\n * Minimum width in vw\n */\n minWidthVW?: number;\n\n /**\n * Maximum width in vw\n */\n maxWidthVW?: number;\n\n /**\n * Whether the panel is expanded (drawer) vs collapsed\n */\n isExpanded: boolean;\n\n /**\n * Whether the panel is in overlay mode\n */\n isOverlay?: boolean;\n\n /**\n * When in overlay mode, the outer panel width in vw\n */\n outerWidthVW?: number;\n\n /**\n * When in overlay mode, the inner panel width in vw\n */\n innerWidthVW?: number;\n\n /**\n * Current left panel width in vw (needed for overlay positioning and dynamic constraints)\n */\n leftWidthVW?: number;\n\n /**\n * Whether the panel is resizable\n */\n resizable?: boolean;\n\n /**\n * Show/hide the resize handle\n */\n showHandle?: boolean;\n\n /**\n * Callback during resize; emits clamped value in vw\n */\n onResize?: (widthVW: number) => void;\n\n /**\n * Callback for collapse/expand toggle\n */\n onToggle?: (next: boolean) => void;\n\n /**\n * Callback to promote to overlay mode\n */\n onPromoteToOverlay?: () => void;\n\n /**\n * Callback to demote from overlay mode\n */\n onDemoteFromOverlay?: () => void;\n\n /**\n * Callback when resizing the overlay outer/inner split\n */\n onResizeOverlay?: (outerWidthVW: number) => void;\n\n /**\n * ARIA label for the resize handle\n */\n handleAriaLabel?: string;\n\n /**\n * Optional header slot\n */\n slotHeader?: React.ReactNode;\n\n /**\n * Optional footer slot\n */\n slotFooter?: React.ReactNode;\n\n /**\n * Optional inner panel content (for overlay mode)\n */\n innerPanelContent?: React.ReactNode;\n\n /**\n * Panel content\n */\n children: React.ReactNode;\n\n /**\n * Additional class names\n */\n className?: string;\n\n /**\n * Data attributes for styling/state\n */\n dataAttributes?: Record<string, string>;\n}\n\n/**\n * ResizablePanel component\n *\n * A generic, framework-agnostic panel that can collapse, expand, resize,\n * and promote to overlay mode. Backs both left (search) and right (preview) panels.\n */\nexport function ResizablePanel({\n orientation,\n collapsedSizeVW,\n expandedWidthVW,\n minWidthVW = 5,\n maxWidthVW = 90,\n isExpanded,\n isOverlay = false,\n outerWidthVW,\n innerWidthVW,\n leftWidthVW,\n resizable = true,\n showHandle = true,\n onResize,\n onToggle: _onToggle,\n onPromoteToOverlay: _onPromoteToOverlay,\n onDemoteFromOverlay,\n onResizeOverlay,\n handleAriaLabel,\n slotHeader,\n slotFooter,\n innerPanelContent,\n children,\n className,\n dataAttributes = {},\n}: ResizablePanelProps) {\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const [isDragging, setIsDragging] = React.useState(false);\n const [localWidth, setLocalWidth] = React.useState<number | null>(null);\n const [localOuterWidth, setLocalOuterWidth] = React.useState<number | null>(null);\n\n const currentWidthVW = isExpanded\n ? (isDragging && localWidth !== null ? localWidth : expandedWidthVW) ||\n collapsedSizeVW\n : collapsedSizeVW;\n\n const clampWidth = React.useCallback(\n (width: number): number => {\n let effectiveMinWidth = minWidthVW;\n let effectiveMaxWidth = maxWidthVW;\n\n if (orientation === \"right\" && leftWidthVW !== undefined && !isOverlay) {\n const availableSpace = 100 - leftWidthVW - 3;\n const maxFromSpace = Math.max(effectiveMinWidth, availableSpace - 33);\n effectiveMaxWidth = Math.min(maxWidthVW, maxFromSpace);\n }\n\n return Math.max(effectiveMinWidth, Math.min(effectiveMaxWidth, width));\n },\n [minWidthVW, maxWidthVW, orientation, leftWidthVW, isOverlay]\n );\n\n const handleDragStart = React.useCallback(() => {\n setIsDragging(true);\n setLocalWidth(currentWidthVW);\n }, [currentWidthVW]);\n\n const handleDrag = React.useCallback(\n (deltaX: number) => {\n if (!isExpanded || isOverlay) return;\n\n const viewportWidth = window.innerWidth;\n const deltaVW = (deltaX / viewportWidth) * 100;\n\n const adjustedDelta = orientation === \"left\" ? deltaVW : -deltaVW;\n const baseWidth = localWidth !== null ? localWidth : currentWidthVW;\n const newWidth = clampWidth(baseWidth + adjustedDelta);\n\n setLocalWidth(newWidth);\n },\n [\n isExpanded,\n isOverlay,\n orientation,\n localWidth,\n currentWidthVW,\n clampWidth,\n ]\n );\n\n const handleDragEnd = React.useCallback(() => {\n if (localWidth !== null && onResize) {\n onResize(localWidth);\n }\n setIsDragging(false);\n setLocalWidth(null);\n }, [localWidth, onResize]);\n\n const handleKeyboardResize = React.useCallback(\n (direction: 1 | -1) => {\n if (!isExpanded || isOverlay || !onResize) return;\n\n const step = 1;\n const newWidth = clampWidth(currentWidthVW + step * direction);\n onResize(newWidth);\n },\n [isExpanded, isOverlay, onResize, currentWidthVW, clampWidth]\n );\n\n const handleOverlayDragStart = React.useCallback(() => {\n if (outerWidthVW) {\n setIsDragging(true);\n setLocalOuterWidth(outerWidthVW);\n }\n }, [outerWidthVW]);\n\n const handleOverlayDrag = React.useCallback(\n (deltaX: number) => {\n if (!isOverlay) return;\n\n const viewportWidth = window.innerWidth;\n const deltaVW = (deltaX / viewportWidth) * 100;\n\n const baseWidth =\n localOuterWidth !== null ? localOuterWidth : outerWidthVW || 30;\n const newOuterWidth = baseWidth - deltaVW;\n\n setLocalOuterWidth(newOuterWidth);\n },\n [isOverlay, localOuterWidth, outerWidthVW]\n );\n\n const handleOverlayDragEnd = React.useCallback(() => {\n if (localOuterWidth !== null && onResizeOverlay) {\n onResizeOverlay(localOuterWidth);\n }\n setIsDragging(false);\n setLocalOuterWidth(null);\n }, [localOuterWidth, onResizeOverlay]);\n\n React.useEffect(() => {\n if (isOverlay && panelRef.current) {\n const focusableElement = panelRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n focusableElement?.focus();\n }\n }, [isOverlay]);\n\n React.useEffect(() => {\n if (!isOverlay) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onDemoteFromOverlay?.();\n }\n };\n\n window.addEventListener(\"keydown\", handleEscape);\n return () => window.removeEventListener(\"keydown\", handleEscape);\n }, [isOverlay, onDemoteFromOverlay]);\n\n if (!isExpanded && !isOverlay) {\n return (\n <div\n ref={panelRef}\n className={cn(\n \"flex flex-col h-full\",\n \"bg-background border-border\",\n orientation === \"left\" ? \"border-r\" : \"border-l\",\n className\n )}\n style={{\n width: `${collapsedSizeVW}vw`,\n minWidth: \"48px\", // Ensure minimum pixel width to prevent squishing\n }}\n {...dataAttributes}\n >\n {children}\n </div>\n );\n }\n\n if (isOverlay && outerWidthVW && innerWidthVW) {\n const displayOuterWidth =\n isDragging && localOuterWidth !== null ? localOuterWidth : outerWidthVW;\n const displayInnerWidth =\n isDragging && localOuterWidth !== null\n ? outerWidthVW + innerWidthVW - localOuterWidth\n : innerWidthVW;\n\n const overlayLeftPosition = leftWidthVW || 3;\n\n return (\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(\"fixed inset-y-0 z-30\", \"flex\", className)}\n style={{\n left: `${overlayLeftPosition}vw`, // Start after left panel\n right: `${3}vw`, // End before nav gutter (fixed right edge) - matches icon nav width\n width: `${displayOuterWidth + displayInnerWidth}vw`,\n }}\n {...dataAttributes}\n >\n <div\n className={cn(\n \"flex flex-col h-full\",\n \"bg-background border-r border-border\"\n )}\n style={{\n width: `${displayInnerWidth}vw`,\n }}\n >\n <div className=\"flex-1 overflow-auto p-4\">\n {innerPanelContent || (\n <div className=\"text-muted-foreground text-sm\">\n Inner panel content area\n </div>\n )}\n </div>\n </div>\n\n <ResizeHandle\n orientation=\"right\"\n resizable={resizable}\n showHandle={showHandle}\n onDragStart={handleOverlayDragStart}\n onDrag={handleOverlayDrag}\n onDragEnd={handleOverlayDragEnd}\n ariaLabel={handleAriaLabel || \"Resize overlay panels\"}\n />\n\n <div\n className={cn(\"flex flex-col h-full\", \"bg-background border-border\")}\n style={{\n width: `${displayOuterWidth}vw`,\n }}\n >\n {slotHeader && (\n <div className=\"flex-shrink-0 border-b border-border\">\n {slotHeader}\n </div>\n )}\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {slotFooter && (\n <div className=\"flex-shrink-0 border-t border-border\">\n {slotFooter}\n </div>\n )}\n </div>\n\n <div\n className=\"absolute inset-0 -z-10 bg-black/20\"\n onClick={() => onDemoteFromOverlay?.()}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n \"relative flex h-full min-w-0 overflow-hidden\",\n !isDragging && \"transition-[width] duration-200 ease-out\",\n orientation === \"left\" ? \"flex-row\" : \"flex-row-reverse\",\n className\n )}\n style={{\n width: `${currentWidthVW}vw`,\n }}\n {...dataAttributes}\n >\n <div\n className={cn(\n \"flex flex-col flex-1 min-w-0 overflow-hidden\",\n \"bg-background border-border\",\n orientation === \"left\" ? \"border-r\" : \"border-l\"\n )}\n >\n {slotHeader && (\n <div className=\"flex-shrink-0 border-b border-border min-w-0 overflow-hidden\">\n {slotHeader}\n </div>\n )}\n <div className=\"flex-1 overflow-hidden min-w-0\">{children}</div>\n {slotFooter && (\n <div className=\"flex-shrink-0 border-t border-border\">\n {slotFooter}\n </div>\n )}\n </div>\n\n {isExpanded && (\n <ResizeHandle\n orientation={orientation}\n resizable={resizable}\n showHandle={showHandle}\n onDragStart={handleDragStart}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n onKeyboardResize={handleKeyboardResize}\n ariaLabel={handleAriaLabel}\n />\n )}\n </div>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface ChipProps {\n /**\n * Chip label text\n */\n label: string;\n\n /**\n * Click handler\n */\n onClick?: () => void;\n\n /**\n * Whether the chip is disabled\n */\n disabled?: boolean;\n\n /**\n * Additional class names\n */\n className?: string;\n}\n\n/**\n * Chip component\n *\n * A clickable pill-shaped component for tags, filters, or suggested actions.\n * Uses the theme chip colors.\n *\n * @example\n * <Chip label=\"React\" onClick={() => console.log('clicked')} />\n *\n * @example\n * <Chip label=\"Disabled\" disabled />\n */\nexport function Chip({\n label,\n onClick,\n disabled = false,\n className,\n}: ChipProps) {\n const isClickable = !!onClick && !disabled;\n\n return (\n <button\n onClick={onClick}\n disabled={!isClickable}\n className={cn(\n \"inline-flex items-center justify-center\",\n \"px-4 py-2 rounded-full\",\n \"text-sm font-medium\",\n \"transition-all duration-150\",\n // Default styling with chip colors\n \"bg-chip text-chip-foreground\",\n \"border border-chip-foreground/20\",\n // Clickable state\n isClickable && [\n \"cursor-pointer\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"hover:border-accent\",\n \"hover:shadow-md\",\n ],\n // Non-clickable state\n !isClickable && \"cursor-default\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n type=\"button\"\n >\n {label}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst loadingSpinnerVariants = cva(\"rounded-full animate-spin border-current\", {\n variants: {\n /**\n * Size of the spinner\n */\n size: {\n sm: \"w-4 h-4 border-2\",\n default: \"w-8 h-8 border-2\",\n lg: \"w-12 h-12 border-[3px]\",\n xl: \"w-16 h-16 border-4\",\n },\n /**\n * Visual variant\n */\n variant: {\n /** Primary color spinner (default) */\n default: \"border-primary/20 border-t-primary\",\n /** Accent color spinner */\n accent: \"border-accent/20 border-t-accent\",\n /** Muted/subtle spinner */\n muted: \"border-muted-foreground/20 border-t-muted-foreground\",\n /** Inherits current text color */\n inherit: \"border-current/20 border-t-current\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n});\n\nexport interface LoadingSpinnerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof loadingSpinnerVariants> {\n /**\n * Optional label shown below the spinner\n */\n label?: string;\n /**\n * Show animated dots after the label\n */\n showDots?: boolean;\n}\n\n/**\n * LoadingSpinner Component\n *\n * A circular loading spinner with size and color variants.\n *\n * @example\n * // Basic spinner\n * <LoadingSpinner />\n *\n * @example\n * // Large spinner with label\n * <LoadingSpinner size=\"lg\" label=\"Loading...\" />\n *\n * @example\n * // Small accent spinner\n * <LoadingSpinner size=\"sm\" variant=\"accent\" />\n *\n * @example\n * // Inherit parent text color\n * <LoadingSpinner variant=\"inherit\" />\n */\nconst LoadingSpinner = React.forwardRef<HTMLDivElement, LoadingSpinnerProps>(\n ({ className, size, variant, label, showDots = false, ...props }, ref) => {\n const [dots, setDots] = React.useState(\"\");\n\n // Animated dots effect\n React.useEffect(() => {\n if (!showDots || !label) return;\n\n const interval = setInterval(() => {\n setDots((prev) => (prev.length >= 3 ? \"\" : prev + \".\"));\n }, 500);\n\n return () => clearInterval(interval);\n }, [showDots, label]);\n\n if (label) {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center gap-3\", className)}\n {...props}\n >\n <div className={loadingSpinnerVariants({ size, variant })} />\n <p className=\"text-sm text-muted-foreground\">\n {label}\n {showDots && <span className=\"inline-block w-4\">{dots}</span>}\n </p>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(loadingSpinnerVariants({ size, variant }), className)}\n {...props}\n />\n );\n }\n);\nLoadingSpinner.displayName = \"LoadingSpinner\";\n\nexport { LoadingSpinner, loadingSpinnerVariants };\n","import { Toaster as Sonner } from \"sonner\";\n\nexport interface ToasterProps {\n /**\n * Position of the toaster\n * @default \"top-right\"\n */\n position?:\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\n /**\n * Whether to expand toasts on hover\n * @default false\n */\n expand?: boolean;\n\n /**\n * Whether to use rich colors\n * @default true\n */\n richColors?: boolean;\n\n /**\n * Whether to show close button\n * @default true\n */\n closeButton?: boolean;\n\n /**\n * Theme mode\n * @default \"system\"\n */\n theme?: \"light\" | \"dark\" | \"system\";\n}\n\n/**\n * Toaster component using Sonner\n *\n * Provides toast notifications throughout the app.\n * Add this component once at the root of your app.\n *\n * Usage:\n * import { toast } from \"sonner\";\n * toast.success(\"Success!\");\n * toast.error(\"Error!\");\n * toast.info(\"Info!\");\n * toast.warning(\"Warning!\");\n *\n * @example\n * // In your app root\n * <Toaster />\n *\n * // Then anywhere in your app\n * toast.success(\"Saved successfully!\");\n */\nexport function Toaster({\n position = \"top-right\",\n expand = false,\n richColors = true,\n closeButton = true,\n theme = \"system\",\n}: ToasterProps = {}) {\n return (\n <Sonner\n position={position}\n expand={expand}\n richColors={richColors}\n closeButton={closeButton}\n theme={theme}\n toastOptions={{\n style: {\n background: \"hsl(var(--card))\",\n border: \"1px solid hsl(var(--border))\",\n color: \"hsl(var(--foreground))\",\n },\n }}\n />\n );\n}\n","/**\n * Calendar Component\n *\n * A styled calendar component built on react-day-picker.\n * Matches the library's design system with proper theming.\n *\n * Features:\n * - Single date, range, and multiple selection modes\n * - Keyboard navigation\n * - Min/max date constraints\n * - Disabled dates\n * - Theme-aware styling\n * - Month/year dropdown selectors for quick navigation\n */\n\nimport * as React from \"react\";\nimport { DayPicker, type DayPickerProps } from \"react-day-picker\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { buttonVariants } from \"./button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\n\nexport type CalendarProps = DayPickerProps;\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\n/**\n * Generate an array of years for the year selector\n * Defaults to 100 years before and 20 years after current year\n */\nfunction getYearRange(fromYear?: number, toYear?: number): number[] {\n const currentYear = new Date().getFullYear();\n const start = fromYear ?? currentYear - 100;\n const end = toYear ?? currentYear + 20;\n const years: number[] = [];\n for (let year = start; year <= end; year++) {\n years.push(year);\n }\n return years;\n}\n\n/**\n * Calendar Component\n *\n * A fully styled calendar using react-day-picker with library design tokens.\n *\n * @example Single date selection\n * ```tsx\n * const [date, setDate] = useState<Date>();\n * <Calendar mode=\"single\" selected={date} onSelect={setDate} />\n * ```\n *\n * @example Date range selection\n * ```tsx\n * const [range, setRange] = useState<DateRange>();\n * <Calendar mode=\"range\" selected={range} onSelect={setRange} />\n * ```\n *\n * @example Quick navigation with month/year selectors\n * ```tsx\n * <Calendar\n * mode=\"single\"\n * selected={date}\n * onSelect={setDate}\n * fromYear={2020}\n * toYear={2030}\n * />\n * ```\n */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n month: controlledMonth,\n defaultMonth,\n onMonthChange,\n ...props\n}: CalendarProps) {\n const startMonth = props.startMonth ?? props.fromDate;\n const endMonth = props.endMonth ?? props.toDate;\n const fromYear = startMonth?.getFullYear();\n const toYear = endMonth?.getFullYear();\n const years = React.useMemo(() => getYearRange(fromYear, toYear), [fromYear, toYear]);\n\n const [internalMonth, setInternalMonth] = React.useState<Date>(\n defaultMonth ?? new Date()\n );\n\n const displayedMonth = controlledMonth ?? internalMonth;\n\n const handleMonthChange = React.useCallback(\n (newMonth: Date) => {\n if (controlledMonth === undefined) {\n setInternalMonth(newMonth);\n }\n onMonthChange?.(newMonth);\n },\n [controlledMonth, onMonthChange]\n );\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n month={displayedMonth}\n onMonthChange={handleMonthChange}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-4\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center h-7 px-10\",\n caption_label: \"text-sm font-medium hidden\",\n nav: \"flex items-center gap-1\",\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute left-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute right-1 h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n month_grid: \"w-full border-collapse px-1\",\n weekdays: \"flex\",\n weekday:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day: cn(\n \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md\",\n props.mode === \"range\"\n ? \"[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md\"\n : \"[&:has([aria-selected])]:rounded-md\"\n ),\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_start: \"day-range-start rounded-l-md\",\n range_end: \"day-range-end rounded-r-md\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) => {\n const Icon = orientation === \"left\" ? ChevronLeft : ChevronRight;\n return <Icon className=\"h-4 w-4\" />;\n },\n MonthCaption: ({ calendarMonth }) => {\n const month = calendarMonth.date.getMonth();\n const year = calendarMonth.date.getFullYear();\n\n return (\n <div className=\"flex items-center justify-center gap-1 px-10\">\n <Select\n value={month.toString()}\n onValueChange={(value) => {\n const newDate = new Date(calendarMonth.date);\n newDate.setMonth(parseInt(value, 10));\n handleMonthChange(newDate);\n }}\n >\n <SelectTrigger\n className=\"h-7 w-[110px] text-sm font-medium border-none shadow-none hover:bg-accent focus:ring-0 px-2\"\n aria-label=\"Select month\"\n >\n <SelectValue>{MONTHS[month]}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {MONTHS.map((monthName, index) => (\n <SelectItem key={monthName} value={index.toString()}>\n {monthName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Select\n value={year.toString()}\n onValueChange={(value) => {\n const newDate = new Date(calendarMonth.date);\n newDate.setFullYear(parseInt(value, 10));\n handleMonthChange(newDate);\n }}\n >\n <SelectTrigger\n className=\"h-7 w-[70px] text-sm font-medium border-none shadow-none hover:bg-accent focus:ring-0 px-2\"\n aria-label=\"Select year\"\n >\n <SelectValue>{year}</SelectValue>\n </SelectTrigger>\n <SelectContent className=\"max-h-[200px]\">\n {years.map((y) => (\n <SelectItem key={y} value={y.toString()}>\n {y}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n },\n }}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","/**\n * DatePicker Component\n *\n * A complete date picker combining an input field with a calendar popover.\n * Built using library primitives for consistent styling.\n *\n * Features:\n * - Input field with formatted date display\n * - Calendar popover for date selection\n * - Controlled and uncontrolled modes\n * - Clearable option\n * - Min/max date constraints\n * - Custom date formatting\n * - Keyboard accessible\n */\n\nimport * as React from \"react\";\nimport { format, parse, isValid } from \"date-fns\";\nimport { Calendar as CalendarIcon, X } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { Button } from \"./button\";\nimport { Calendar } from \"./calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nexport interface DatePickerProps {\n /** Selected date value */\n value?: Date;\n /** Default value for uncontrolled mode */\n defaultValue?: Date;\n /** Callback when date changes */\n onChange?: (date: Date | undefined) => void;\n /** Placeholder text when no date selected */\n placeholder?: string;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Date format string (date-fns format) */\n dateFormat?: string;\n /** Whether to show a clear button */\n clearable?: boolean;\n /** Additional class name */\n className?: string;\n /** Input ID for label association */\n id?: string;\n /** Input name for form submission */\n name?: string;\n /** Alignment of the popover */\n align?: \"start\" | \"center\" | \"end\";\n /** Side of the popover */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether the popover should match the trigger width */\n matchTriggerWidth?: boolean;\n /** Callback when the popover opens/closes */\n onOpenChange?: (open: boolean) => void;\n}\n\n/**\n * DatePicker Component\n *\n * A date input with calendar popover for easy date selection.\n *\n * @example Basic usage\n * ```tsx\n * const [date, setDate] = useState<Date>();\n * <DatePicker value={date} onChange={setDate} />\n * ```\n *\n * @example With constraints\n * ```tsx\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * minDate={new Date()}\n * maxDate={addMonths(new Date(), 3)}\n * placeholder=\"Select a date\"\n * />\n * ```\n *\n * @example Custom format\n * ```tsx\n * <DatePicker\n * value={date}\n * onChange={setDate}\n * dateFormat=\"dd/MM/yyyy\"\n * />\n * ```\n */\nfunction DatePicker({\n value,\n defaultValue,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n minDate,\n maxDate,\n dateFormat = \"PPP\",\n clearable = false,\n className,\n id,\n name,\n align = \"start\",\n side = \"bottom\",\n matchTriggerWidth = false,\n onOpenChange,\n}: DatePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n\n // Controlled vs uncontrolled\n const isControlled = value !== undefined;\n const selectedDate = isControlled ? value : internalValue;\n\n const handleSelect = (date: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(date);\n }\n onChange?.(date);\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n handleSelect(undefined);\n };\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n // Format the selected date for display\n const formattedDate = selectedDate\n ? format(selectedDate, dateFormat)\n : undefined;\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n id={id}\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-start text-left font-normal\",\n !selectedDate && \"text-muted-foreground\",\n className\n )}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 shrink-0\" />\n <span className=\"flex-1 truncate\">\n {formattedDate ?? placeholder}\n </span>\n {clearable && selectedDate && (\n <X\n className=\"ml-2 h-4 w-4 shrink-0 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n />\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\"w-auto p-0\", matchTriggerWidth && \"w-[var(--radix-popover-trigger-width)]\")}\n align={align}\n side={side}\n >\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n initialFocus\n />\n {name && selectedDate && (\n <input\n type=\"hidden\"\n name={name}\n value={format(selectedDate, \"yyyy-MM-dd\")}\n />\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nDatePicker.displayName = \"DatePicker\";\n\n/**\n * DatePickerInput Component\n *\n * A variant that looks more like a traditional input field.\n * Useful for inline editing or compact layouts.\n */\nexport interface DatePickerInputProps extends Omit<DatePickerProps, \"className\"> {\n /** Additional class name for the input wrapper */\n className?: string;\n /** Size variant */\n size?: \"sm\" | \"default\" | \"lg\";\n}\n\nfunction DatePickerInput({\n value,\n defaultValue,\n onChange,\n placeholder = \"Pick a date\",\n disabled = false,\n minDate,\n maxDate,\n dateFormat = \"yyyy-MM-dd\",\n clearable = false,\n className,\n id,\n name,\n align = \"start\",\n side = \"bottom\",\n onOpenChange,\n size = \"default\",\n}: DatePickerInputProps) {\n const [open, setOpen] = React.useState(false);\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(\n defaultValue\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Controlled vs uncontrolled\n const isControlled = value !== undefined;\n const selectedDate = isControlled ? value : internalValue;\n\n // Sync input value with selected date\n React.useEffect(() => {\n if (selectedDate) {\n setInputValue(format(selectedDate, dateFormat));\n } else {\n setInputValue(\"\");\n }\n }, [selectedDate, dateFormat]);\n\n const handleSelect = (date: Date | undefined) => {\n if (!isControlled) {\n setInternalValue(date);\n }\n onChange?.(date);\n setOpen(false);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n // Try to parse the date\n if (newValue) {\n const parsed = parse(newValue, dateFormat, new Date());\n if (isValid(parsed)) {\n if (!isControlled) {\n setInternalValue(parsed);\n }\n onChange?.(parsed);\n }\n } else {\n handleSelect(undefined);\n }\n };\n\n const handleInputBlur = () => {\n // Reset to the valid date on blur if input is invalid\n if (selectedDate) {\n setInputValue(format(selectedDate, dateFormat));\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n handleSelect(undefined);\n setInputValue(\"\");\n };\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n default: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <div className={cn(\"relative\", className)}>\n <PopoverTrigger asChild>\n <div\n className={cn(\n \"flex items-center rounded-md border border-input bg-background ring-offset-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed\",\n sizeClasses[size]\n )}\n >\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n \"flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\"\n )}\n />\n {clearable && selectedDate && (\n <X\n className=\"h-4 w-4 mx-1 cursor-pointer opacity-50 hover:opacity-100\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n />\n )}\n <CalendarIcon\n className=\"h-4 w-4 opacity-50 cursor-pointer hover:opacity-100\"\n onClick={() => !disabled && setOpen(true)}\n />\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align={align} side={side}>\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n initialFocus\n />\n </PopoverContent>\n {name && selectedDate && (\n <input\n type=\"hidden\"\n name={name}\n value={format(selectedDate, \"yyyy-MM-dd\")}\n />\n )}\n </div>\n </Popover>\n );\n}\n\nDatePickerInput.displayName = \"DatePickerInput\";\n\nexport { DatePicker, DatePickerInput };\n","/**\n * FilterPopover Component\n *\n * Renders filter UI based on column filter type:\n * - Text: Input with operator selection\n * - Number: Input with comparison operators\n * - Date: DatePicker with calendar and range support\n * - Select: Multi-select from predefined options\n * - Boolean: Checkbox toggle\n */\n\nimport * as React from \"react\";\nimport { format, parseISO, isValid } from \"date-fns\";\nimport { cn } from \"../../../utils/cn\";\nimport { Button } from \"../../button\";\nimport { Input } from \"../../input\";\nimport { Label } from \"../../label\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Switch } from \"../../switch\";\nimport { DatePicker } from \"../../date-picker\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\";\nimport type {\n ColumnDef,\n FilterConfig,\n FilterType,\n TextFilterOperator,\n NumberFilterOperator,\n FilterOperator,\n CellValue,\n FilterValue,\n} from \"../types\";\n\nexport interface FilterPopoverProps<T = Record<string, CellValue>> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Current filter value */\n filter?: FilterConfig;\n /** Callback when filter changes */\n onFilterChange: (filter: FilterConfig | null) => void;\n}\n\n/** Text filter operators */\nconst TEXT_OPERATORS: { value: TextFilterOperator; label: string }[] = [\n { value: \"contains\", label: \"Contains\" },\n { value: \"notContains\", label: \"Does not contain\" },\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"startsWith\", label: \"Starts with\" },\n { value: \"endsWith\", label: \"Ends with\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/** Number filter operators */\nconst NUMBER_OPERATORS: { value: NumberFilterOperator; label: string }[] = [\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"gt\", label: \"Greater than\" },\n { value: \"gte\", label: \"Greater than or equal\" },\n { value: \"lt\", label: \"Less than\" },\n { value: \"lte\", label: \"Less than or equal\" },\n { value: \"between\", label: \"Between\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/** Date filter operators */\nconst DATE_OPERATORS: { value: string; label: string }[] = [\n { value: \"equals\", label: \"Equals\" },\n { value: \"notEquals\", label: \"Does not equal\" },\n { value: \"before\", label: \"Before\" },\n { value: \"after\", label: \"After\" },\n { value: \"between\", label: \"Between\" },\n { value: \"isEmpty\", label: \"Is empty\" },\n { value: \"isNotEmpty\", label: \"Is not empty\" },\n];\n\n/**\n * Check if operator requires no value input\n */\nfunction isNoValueOperator(operator: string): boolean {\n return operator === \"isEmpty\" || operator === \"isNotEmpty\";\n}\n\n/**\n * Check if operator requires two values (between)\n */\nfunction isBetweenOperator(operator: string): boolean {\n return operator === \"between\";\n}\n\n/**\n * FilterPopover Component\n */\nexport function FilterPopover<T = Record<string, CellValue>>({\n column,\n filter,\n onFilterChange,\n}: FilterPopoverProps<T>) {\n const filterType = column.filterType || \"text\";\n\n const [operator, setOperator] = React.useState<FilterOperator>(\n filter?.operator || getDefaultOperator(filterType)\n );\n const [value, setValue] = React.useState<FilterValue>(filter?.value ?? \"\");\n const [valueTo, setValueTo] = React.useState<FilterValue>(filter?.valueTo ?? \"\");\n\n function getDefaultOperator(type: FilterType): FilterOperator {\n switch (type) {\n case \"text\":\n return \"contains\";\n case \"number\":\n return \"equals\";\n case \"date\":\n return \"equals\";\n case \"select\":\n return \"equals\";\n case \"boolean\":\n return \"equals\";\n default:\n return \"contains\";\n }\n }\n\n const handleApply = () => {\n if (isNoValueOperator(operator)) {\n onFilterChange({\n columnKey: column.key,\n operator,\n value: null,\n });\n return;\n }\n\n if (isBetweenOperator(operator)) {\n if (value !== \"\" && valueTo !== \"\") {\n onFilterChange({\n columnKey: column.key,\n operator,\n value,\n valueTo,\n });\n }\n return;\n }\n\n if (value !== \"\" && value !== null && value !== undefined) {\n onFilterChange({\n columnKey: column.key,\n operator,\n value,\n });\n }\n };\n\n const handleClear = () => {\n setOperator(getDefaultOperator(filterType));\n setValue(\"\");\n setValueTo(\"\");\n onFilterChange(null);\n };\n\n /**\n * Get operators based on filter type\n */\n const getOperators = () => {\n switch (filterType) {\n case \"text\":\n return TEXT_OPERATORS;\n case \"number\":\n return NUMBER_OPERATORS;\n case \"date\":\n return DATE_OPERATORS;\n default:\n return TEXT_OPERATORS;\n }\n };\n\n /**\n * Render text filter\n */\n const renderTextFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as TextFilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TEXT_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Value</Label>\n <Input\n type=\"text\"\n value={value != null && !Array.isArray(value) ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter value...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n )}\n </div>\n );\n\n /**\n * Render number filter\n */\n const renderNumberFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as NumberFilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {NUMBER_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">\n {isBetweenOperator(operator) ? \"From\" : \"Value\"}\n </Label>\n <Input\n type=\"number\"\n value={value != null && !Array.isArray(value) ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter number...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !isBetweenOperator(operator)) {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n\n {isBetweenOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">To</Label>\n <Input\n type=\"number\"\n value={valueTo != null && !Array.isArray(valueTo) ? String(valueTo) : \"\"}\n onChange={(e) => setValueTo(e.target.value)}\n placeholder=\"Enter number...\"\n className=\"h-8 text-sm\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleApply();\n }\n }}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n\n const renderDateFilter = () => {\n const dateValue = React.useMemo(() => {\n if (!value) return undefined;\n if (value instanceof Date) return value;\n if (typeof value === \"string\") {\n const parsed = parseISO(value);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [value]);\n\n const dateToValue = React.useMemo(() => {\n if (!valueTo) return undefined;\n if (valueTo instanceof Date) return valueTo;\n if (typeof valueTo === \"string\") {\n const parsed = parseISO(valueTo);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [valueTo]);\n\n const handleDateChange = (date: Date | undefined) => {\n setValue(date ? format(date, \"yyyy-MM-dd\") : \"\");\n };\n\n const handleDateToChange = (date: Date | undefined) => {\n setValueTo(date ? format(date, \"yyyy-MM-dd\") : \"\");\n };\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Condition</Label>\n <Select\n value={operator}\n onValueChange={(val) => setOperator(val as FilterOperator)}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DATE_OPERATORS.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!isNoValueOperator(operator) && (\n <>\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">\n {isBetweenOperator(operator) ? \"From\" : \"Date\"}\n </Label>\n <DatePicker\n value={dateValue}\n onChange={handleDateChange}\n placeholder=\"Select date...\"\n className=\"h-8 text-sm\"\n />\n </div>\n\n {isBetweenOperator(operator) && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">To</Label>\n <DatePicker\n value={dateToValue}\n onChange={handleDateToChange}\n placeholder=\"Select date...\"\n className=\"h-8 text-sm\"\n minDate={dateValue}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n };\n\n const renderSelectFilter = () => {\n const options = column.filterOptions || [];\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <Label className=\"text-xs\">Select value</Label>\n <Select value={value != null && !Array.isArray(value) ? String(value) : undefined} onValueChange={setValue}>\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n );\n };\n\n const renderBooleanFilter = () => (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm\">{column.header}</Label>\n <Switch\n checked={value === true}\n onCheckedChange={(checked) => setValue(checked)}\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Filter rows where this value is {value ? \"true\" : \"false\"}\n </p>\n </div>\n );\n\n const renderFilter = () => {\n switch (filterType) {\n case \"text\":\n return renderTextFilter();\n case \"number\":\n return renderNumberFilter();\n case \"date\":\n return renderDateFilter();\n case \"select\":\n return renderSelectFilter();\n case \"boolean\":\n return renderBooleanFilter();\n default:\n return renderTextFilter();\n }\n };\n\n return (\n <div className=\"p-3 space-y-4\">\n <div className=\"font-medium text-sm\">\n Filter: {typeof column.header === \"string\" ? column.header : \"Column\"}\n </div>\n\n {renderFilter()}\n\n <div className=\"flex gap-2 pt-2 border-t border-border\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleClear}\n className=\"flex-1\"\n >\n Clear\n </Button>\n <Button size=\"sm\" onClick={handleApply} className=\"flex-1\">\n Apply\n </Button>\n </div>\n </div>\n );\n}\n","/**\n * HeaderCell Component\n *\n * Renders a single header cell with:\n * - Sort indicator and click-to-sort\n * - Filter trigger (popover)\n * - Resize handle (drag to resize)\n */\n\nimport * as React from \"react\";\nimport { ChevronUp, ChevronDown, Filter, X, GripVertical } from \"lucide-react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Button } from \"../../button\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"../../popover\";\nimport type { ColumnDef, SortConfig, FilterConfig } from \"../types\";\nimport { FilterPopover } from \"./FilterPopover\";\n\nexport interface HeaderCellProps<T = any> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Column index */\n columnIndex: number;\n /** Current width of the column */\n width: number;\n /** Current sort config for this column (if sorted) */\n sorting?: SortConfig;\n /** Current filter config for this column (if filtered) */\n filter?: FilterConfig;\n /** Whether this column is resizable */\n isResizable: boolean;\n /** Callback when sort is toggled */\n onSort?: () => void;\n /** Callback when filter changes */\n onFilterChange?: (filter: FilterConfig | null) => void;\n /** Resize handle mouse down handler */\n onResizeMouseDown?: (event: React.MouseEvent) => void;\n /** Resize handle double click handler */\n onResizeDoubleClick?: (event: React.MouseEvent) => void;\n /** Whether currently resizing this column */\n isResizing?: boolean;\n}\n\n/**\n * HeaderCell Component\n */\nexport function HeaderCell<T = any>({\n column,\n columnIndex,\n width,\n sorting,\n filter,\n isResizable,\n onSort,\n onFilterChange,\n onResizeMouseDown,\n onResizeDoubleClick,\n isResizing,\n}: HeaderCellProps<T>) {\n const [filterOpen, setFilterOpen] = React.useState(false);\n\n const isSorted = sorting?.field === column.key;\n const isFiltered = !!filter;\n const isSortable = column.sortable && onSort;\n const isFilterable = column.filterable && onFilterChange;\n\n const handleHeaderClick = () => {\n if (isSortable) {\n onSort();\n }\n };\n\n const handleFilterChange = (newFilter: FilterConfig | null) => {\n onFilterChange?.(newFilter);\n if (!newFilter) {\n setFilterOpen(false);\n }\n };\n\n const handleClearFilter = (e: React.MouseEvent) => {\n e.stopPropagation();\n onFilterChange?.(null);\n };\n\n const renderSortIndicator = () => {\n if (!column.sortable) return null;\n\n const Icon = isSorted && sorting?.direction === \"desc\" ? ChevronDown : ChevronUp;\n\n return (\n <Icon\n className={cn(\n \"w-4 h-4 flex-shrink-0 transition-opacity\",\n isSorted\n ? \"opacity-100 text-foreground\"\n : \"opacity-30 hover:opacity-60 text-muted-foreground\"\n )}\n />\n );\n };\n\n return (\n <div\n className={cn(\n \"relative flex-shrink-0 border-r border-border last:border-r-0\",\n \"bg-muted select-none\",\n isResizing && \"bg-accent/20\"\n )}\n style={{ width }}\n >\n <div\n className={cn(\n \"flex items-center gap-1 px-3 py-2 h-full\",\n isResizable && \"pr-6\", // Extra padding to create space for resize handle\n isSortable && \"cursor-pointer hover:bg-accent/10\",\n column.align === \"center\" && \"justify-center\",\n column.align === \"right\" && \"justify-end\"\n )}\n onClick={handleHeaderClick}\n role={isSortable ? \"button\" : undefined}\n tabIndex={isSortable ? 0 : undefined}\n onKeyDown={(e) => {\n if (isSortable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleHeaderClick();\n }\n }}\n >\n <span className=\"text-sm font-medium truncate flex-1\">\n {column.header}\n </span>\n\n {renderSortIndicator()}\n\n {isFilterable && (\n <Popover open={filterOpen} onOpenChange={setFilterOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"h-6 w-6 p-0\",\n isFiltered && \"text-primary\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n setFilterOpen(!filterOpen);\n }}\n aria-label={`Filter ${column.header}`}\n >\n <Filter className=\"w-3.5 h-3.5\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-0\"\n onClick={(e) => e.stopPropagation()}\n >\n <FilterPopover\n column={column}\n filter={filter}\n onFilterChange={handleFilterChange}\n />\n </PopoverContent>\n </Popover>\n )}\n\n {isFiltered && !filterOpen && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 p-0 text-primary hover:text-destructive\"\n onClick={handleClearFilter}\n aria-label=\"Clear filter\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n )}\n </div>\n\n {isResizable && (\n <div\n className={cn(\n \"absolute top-0 right-0 w-4 h-full cursor-col-resize z-10\",\n \"flex items-center justify-center\",\n \"hover:bg-accent/50 transition-colors\",\n \"group\",\n isResizing && \"bg-accent\"\n )}\n onMouseDown={onResizeMouseDown}\n onDoubleClick={onResizeDoubleClick}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize column ${column.header}`}\n >\n <GripVertical\n className={cn(\n \"w-3 h-4 transition-colors\",\n \"text-muted-foreground/40\",\n \"group-hover:text-primary\",\n isResizing && \"text-primary\"\n )}\n />\n </div>\n )}\n </div>\n );\n}\n","/**\n * CellEditor Component\n *\n * Renders an inline cell editor based on column editor type:\n * - Text: Input field\n * - Number: Number input\n * - Date: DatePicker with calendar\n * - Select: Dropdown select\n * - Boolean: Checkbox\n *\n * Supports validation with visual feedback.\n */\n\nimport * as React from \"react\";\nimport { format, parseISO, isValid } from \"date-fns\";\nimport { cn } from \"../../../utils/cn\";\nimport { Input } from \"../../input\";\nimport { Checkbox } from \"../../checkbox\";\nimport { DatePicker } from \"../../date-picker\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../select\";\nimport type { ColumnDef, EditorType, CellValue } from \"../types\";\n\nexport interface CellEditorProps<T = Record<string, CellValue>> {\n /** Column definition */\n column: ColumnDef<T>;\n /** Current value being edited */\n value: CellValue;\n /** The row data */\n row: T;\n /** Row index */\n rowIndex: number;\n /** Callback to commit the edit */\n onCommit: (value: CellValue) => void;\n /** Callback to cancel the edit */\n onCancel: () => void;\n /** Callback when value changes (for controlled updates) */\n onChange?: (value: CellValue) => void;\n /** Additional class name */\n className?: string;\n}\n\nexport function CellEditor<T = Record<string, CellValue>>({\n column,\n value,\n row,\n rowIndex,\n onCommit,\n onCancel,\n onChange,\n className,\n}: CellEditorProps<T>) {\n const editorType = column.editorType || \"text\";\n const [internalValue, setInternalValue] = React.useState(value);\n const [validationError, setValidationError] = React.useState<string | null>(\n null\n );\n const inputRef = React.useRef<HTMLInputElement>(null);\n const selectRef = React.useRef<HTMLButtonElement>(null);\n\n const currentValue = onChange ? value : internalValue;\n const setValue = onChange || setInternalValue;\n\n const validate = React.useCallback(\n (val: CellValue): boolean => {\n if (!column.validator) return true;\n\n const result = column.validator(val, row);\n if (result === true) {\n setValidationError(null);\n return true;\n }\n\n setValidationError(typeof result === \"string\" ? result : \"Invalid value\");\n return false;\n },\n [column, row]\n );\n\n const handleChange = (newValue: CellValue) => {\n setValue(newValue);\n setValidationError(null);\n };\n\n const handleCommit = () => {\n if (validate(currentValue)) {\n onCommit(currentValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n handleCommit();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n } else if (e.key === \"Tab\") {\n handleCommit();\n }\n };\n\n const handleBlur = (e: React.FocusEvent) => {\n const relatedTarget = e.relatedTarget as HTMLElement;\n \n if (relatedTarget?.closest(\"[data-radix-select-viewport]\")) {\n return;\n }\n \n if (relatedTarget?.closest(\"[data-cell-editor]\")) {\n return;\n }\n \n if (relatedTarget?.closest(\"[data-radix-popper-content-wrapper]\")) {\n return;\n }\n \n handleCommit();\n };\n\n React.useEffect(() => {\n const timer = setTimeout(() => {\n if (editorType === \"select\") {\n selectRef.current?.focus();\n } else {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, 0);\n\n return () => clearTimeout(timer);\n }, [editorType]);\n\n const renderTextEditor = () => (\n <Input\n ref={inputRef}\n type=\"text\"\n value={currentValue != null ? String(currentValue) : \"\"}\n onChange={(e) => handleChange(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm px-2\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n aria-invalid={!!validationError}\n aria-describedby={validationError ? \"cell-editor-error\" : undefined}\n />\n );\n\n const renderNumberEditor = () => (\n <Input\n ref={inputRef}\n type=\"number\"\n value={typeof currentValue === \"number\" ? currentValue : (currentValue != null ? String(currentValue) : \"\")}\n onChange={(e) => handleChange(e.target.valueAsNumber || e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm px-2\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n aria-invalid={!!validationError}\n />\n );\n\n const renderDateEditor = () => {\n const dateValue = React.useMemo(() => {\n if (!currentValue) return undefined;\n if (currentValue instanceof Date) return currentValue;\n if (typeof currentValue === \"string\") {\n const parsed = parseISO(currentValue);\n return isValid(parsed) ? parsed : undefined;\n }\n return undefined;\n }, [currentValue]);\n\n const handleDateChange = (date: Date | undefined) => {\n const stringValue = date ? format(date, \"yyyy-MM-dd\") : \"\";\n if (validate(stringValue)) {\n onCommit(stringValue);\n }\n };\n\n return (\n <div \n className=\"h-full w-full\"\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n >\n <DatePicker\n value={dateValue}\n onChange={handleDateChange}\n placeholder=\"Select date...\"\n className={cn(\n \"h-full w-full border-0 rounded-none [&>button]:h-full [&>button]:rounded-none [&>button]:border-0\",\n validationError && \"ring-2 ring-destructive\",\n className\n )}\n />\n </div>\n );\n };\n\n const renderSelectEditor = () => {\n const options = column.editorOptions || [];\n\n return (\n <Select\n value={String(currentValue ?? \"\")}\n onValueChange={(val) => {\n handleChange(val);\n setTimeout(() => {\n if (validate(val)) {\n onCommit(val);\n }\n }, 0);\n }}\n >\n <SelectTrigger\n ref={selectRef}\n className={cn(\n \"h-full w-full border-0 rounded-none focus:ring-2 focus:ring-primary text-sm\",\n validationError && \"ring-2 ring-destructive focus:ring-destructive\",\n className\n )}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n >\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n };\n\n const renderBooleanEditor = () => {\n const handleToggle = (checked: boolean | \"indeterminate\") => {\n const boolValue = checked === true;\n if (validate(boolValue)) {\n onCommit(boolValue);\n }\n };\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full w-full cursor-pointer\",\n className\n )}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n handleToggle(!currentValue);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n onCancel();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n handleToggle(!currentValue);\n }}\n tabIndex={0}\n ref={(el) => el?.focus()}\n role=\"checkbox\"\n aria-checked={!!currentValue}\n >\n <Checkbox\n checked={!!currentValue}\n onCheckedChange={handleToggle}\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n );\n };\n\n const renderEditor = () => {\n switch (editorType) {\n case \"text\":\n return renderTextEditor();\n case \"number\":\n return renderNumberEditor();\n case \"date\":\n return renderDateEditor();\n case \"select\":\n return renderSelectEditor();\n case \"boolean\":\n return renderBooleanEditor();\n default:\n return renderTextEditor();\n }\n };\n\n return (\n <div \n className=\"relative w-full h-full\"\n data-cell-editor\n onMouseDown={(e) => {\n if (e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n >\n {renderEditor()}\n\n {validationError && (\n <div\n id=\"cell-editor-error\"\n className=\"absolute top-full left-0 mt-1 z-50 px-2 py-1 text-xs text-destructive-foreground bg-destructive rounded shadow-lg whitespace-nowrap\"\n role=\"alert\"\n >\n {validationError}\n </div>\n )}\n </div>\n );\n}\n","/**\n * useDataGridState Hook\n *\n * Manages internal state for the DataGrid component, supporting both\n * controlled and uncontrolled modes for sorting, filtering, column widths,\n * cell focus, and cell editing.\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport type {\n SortConfig,\n FilterConfig,\n CellPosition,\n EditingCell,\n DataGridInternalState,\n DataGridState,\n ColumnDef,\n CellValue,\n} from \"../types\";\n\nexport interface UseDataGridStateOptions<T = Record<string, CellValue>> {\n sorting?: SortConfig[];\n filters?: FilterConfig[];\n columnWidths?: Record<string, number>;\n focusedCell?: CellPosition | null;\n\n defaultSorting?: SortConfig[];\n defaultFilters?: FilterConfig[];\n defaultColumnWidths?: Record<string, number>;\n\n onSortChange?: (sorting: SortConfig[]) => void;\n onFilterChange?: (filters: FilterConfig[]) => void;\n onColumnResize?: (columnKey: string, width: number) => void;\n onFocusedCellChange?: (cell: CellPosition | null) => void;\n onStateChange?: (state: DataGridState) => void;\n\n onCellEdit?: (\n rowIndex: number,\n columnKey: string,\n newValue: CellValue,\n oldValue: CellValue\n ) => void;\n onCellEditStart?: (rowIndex: number, columnKey: string) => boolean | void;\n onCellEditCancel?: (rowIndex: number, columnKey: string) => void;\n\n columns: ColumnDef<T>[];\n data: T[];\n getCellValue: (row: T, column: ColumnDef<T>) => CellValue;\n}\n\nexport interface UseDataGridStateReturn {\n state: DataGridInternalState;\n actions: {\n setSorting: (sorting: SortConfig[]) => void;\n toggleSort: (columnKey: string) => void;\n setFilters: (filters: FilterConfig[]) => void;\n setFilter: (filter: FilterConfig | null, columnKey: string) => void;\n clearFilters: () => void;\n setColumnWidth: (columnKey: string, width: number) => void;\n setFocusedCell: (cell: CellPosition | null) => void;\n startEditing: (rowIndex: number, columnKey: string) => void;\n updateEditingValue: (value: CellValue) => void;\n /** Commit the current edit. Optionally pass a value to commit immediately (for async editors like checkbox/date) */\n commitEdit: (value?: CellValue) => void;\n cancelEdit: () => void;\n };\n isControlled: {\n sorting: boolean;\n filters: boolean;\n columnWidths: boolean;\n focusedCell: boolean;\n };\n}\n\n/**\n * Hook to manage DataGrid state with controlled/uncontrolled support\n */\nexport function useDataGridState<T = Record<string, CellValue>>(\n options: UseDataGridStateOptions<T>\n): UseDataGridStateReturn {\n const {\n sorting: controlledSorting,\n filters: controlledFilters,\n columnWidths: controlledColumnWidths,\n focusedCell: controlledFocusedCell,\n\n defaultSorting = [],\n defaultFilters = [],\n defaultColumnWidths = {},\n\n onSortChange,\n onFilterChange,\n onColumnResize,\n onFocusedCellChange,\n onStateChange,\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n\n columns,\n data,\n getCellValue,\n } = options;\n const isControlled = useMemo(\n () => ({\n sorting: controlledSorting !== undefined,\n filters: controlledFilters !== undefined,\n columnWidths: controlledColumnWidths !== undefined,\n focusedCell: controlledFocusedCell !== undefined,\n }),\n [\n controlledSorting,\n controlledFilters,\n controlledColumnWidths,\n controlledFocusedCell,\n ]\n );\n\n const [internalSorting, setInternalSorting] =\n useState<SortConfig[]>(defaultSorting);\n const [internalFilters, setInternalFilters] =\n useState<FilterConfig[]>(defaultFilters);\n const [internalColumnWidths, setInternalColumnWidths] =\n useState<Record<string, number>>(defaultColumnWidths);\n const [internalFocusedCell, setInternalFocusedCell] =\n useState<CellPosition | null>(null);\n const [editingCell, setEditingCell] = useState<EditingCell | null>(null);\n\n const sorting = isControlled.sorting ? controlledSorting! : internalSorting;\n const filters = isControlled.filters ? controlledFilters! : internalFilters;\n const focusedCell = isControlled.focusedCell\n ? controlledFocusedCell!\n : internalFocusedCell;\n\n const columnWidths = useMemo(() => {\n const controlled = isControlled.columnWidths\n ? controlledColumnWidths!\n : internalColumnWidths;\n const result: Record<string, number> = {};\n\n for (const column of columns) {\n result[column.key] = controlled[column.key] ?? column.width ?? 200;\n }\n\n return result;\n }, [isControlled.columnWidths, controlledColumnWidths, internalColumnWidths, columns]);\n\n const prevStateRef = useRef<DataGridState | null>(null);\n\n const state: DataGridInternalState = useMemo(\n () => ({\n sorting,\n filters,\n columnWidths,\n focusedCell,\n editingCell,\n }),\n [sorting, filters, columnWidths, focusedCell, editingCell]\n );\n\n useEffect(() => {\n if (onStateChange) {\n const currentState: DataGridState = {\n sorting,\n filters,\n columnWidths,\n focusedCell,\n editingCell,\n };\n\n if (\n JSON.stringify(currentState) !== JSON.stringify(prevStateRef.current)\n ) {\n prevStateRef.current = currentState;\n onStateChange(currentState);\n }\n }\n }, [sorting, filters, columnWidths, focusedCell, editingCell, onStateChange]);\n\n // ============ SORTING ACTIONS ============\n const setSorting = useCallback(\n (newSorting: SortConfig[]) => {\n if (isControlled.sorting) {\n onSortChange?.(newSorting);\n } else {\n setInternalSorting(newSorting);\n onSortChange?.(newSorting);\n }\n },\n [isControlled.sorting, onSortChange]\n );\n\n const toggleSort = useCallback(\n (columnKey: string) => {\n const currentSort = sorting.find((s) => s.field === columnKey);\n let newSorting: SortConfig[];\n\n if (!currentSort) {\n newSorting = [{ field: columnKey, direction: \"asc\" }];\n } else if (currentSort.direction === \"asc\") {\n newSorting = [{ field: columnKey, direction: \"desc\" }];\n } else {\n newSorting = [];\n }\n\n setSorting(newSorting);\n },\n [sorting, setSorting]\n );\n\n // ============ FILTER ACTIONS ============\n const setFilters = useCallback(\n (newFilters: FilterConfig[]) => {\n if (isControlled.filters) {\n onFilterChange?.(newFilters);\n } else {\n setInternalFilters(newFilters);\n onFilterChange?.(newFilters);\n }\n },\n [isControlled.filters, onFilterChange]\n );\n\n const setFilter = useCallback(\n (filter: FilterConfig | null, columnKey: string) => {\n const newFilters = filters.filter((f) => f.columnKey !== columnKey);\n if (filter) {\n newFilters.push(filter);\n }\n setFilters(newFilters);\n },\n [filters, setFilters]\n );\n\n const clearFilters = useCallback(() => {\n setFilters([]);\n }, [setFilters]);\n\n // ============ COLUMN WIDTH ACTIONS ============\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n if (isControlled.columnWidths) {\n onColumnResize?.(columnKey, width);\n } else {\n setInternalColumnWidths((prev) => ({\n ...prev,\n [columnKey]: width,\n }));\n onColumnResize?.(columnKey, width);\n }\n },\n [isControlled.columnWidths, onColumnResize]\n );\n\n // ============ FOCUS ACTIONS ============\n const setFocusedCell = useCallback(\n (cell: CellPosition | null) => {\n if (isControlled.focusedCell) {\n onFocusedCellChange?.(cell);\n } else {\n setInternalFocusedCell(cell);\n onFocusedCellChange?.(cell);\n }\n },\n [isControlled.focusedCell, onFocusedCellChange]\n );\n\n // ============ EDITING ACTIONS ============\n const startEditing = useCallback(\n (rowIndex: number, columnKey: string) => {\n if (onCellEditStart) {\n const allowed = onCellEditStart(rowIndex, columnKey);\n if (allowed === false) return;\n }\n\n const column = columns.find((c) => c.key === columnKey);\n if (!column || !column.editable) return;\n\n const row = data[rowIndex];\n if (!row) return;\n\n const value = getCellValue(row, column);\n\n setEditingCell({\n rowIndex,\n columnKey,\n value,\n originalValue: value,\n });\n\n setFocusedCell({ rowIndex, columnKey });\n },\n [columns, data, getCellValue, onCellEditStart, setFocusedCell]\n );\n\n const updateEditingValue = useCallback((value: CellValue) => {\n setEditingCell((prev) => (prev ? { ...prev, value } : null));\n }, []);\n\n const commitEdit = useCallback((valueOverride?: CellValue) => {\n if (!editingCell) return;\n\n const { rowIndex, columnKey, originalValue } = editingCell;\n const value = valueOverride !== undefined ? valueOverride : editingCell.value;\n\n const column = columns.find((c) => c.key === columnKey);\n if (column?.validator) {\n const row = data[rowIndex];\n const validationResult = column.validator(value, row);\n if (validationResult !== true && typeof validationResult === \"string\") {\n return;\n }\n }\n\n if (value !== originalValue) {\n onCellEdit?.(rowIndex, columnKey, value, originalValue);\n }\n\n setEditingCell(null);\n }, [editingCell, columns, data, onCellEdit]);\n\n const cancelEdit = useCallback(() => {\n if (editingCell) {\n onCellEditCancel?.(editingCell.rowIndex, editingCell.columnKey);\n }\n setEditingCell(null);\n }, [editingCell, onCellEditCancel]);\n\n return {\n state,\n actions: {\n setSorting,\n toggleSort,\n setFilters,\n setFilter,\n clearFilters,\n setColumnWidth,\n setFocusedCell,\n startEditing,\n updateEditingValue,\n commitEdit,\n cancelEdit,\n },\n isControlled,\n };\n}\n","/**\n * useKeyboardNavigation Hook\n *\n * Handles keyboard navigation for the DataGrid component including:\n * - Arrow keys: Move between cells\n * - Enter: Start editing / commit edit\n * - Escape: Cancel edit\n * - Tab/Shift+Tab: Move to next/previous cell\n * - Home/End: Jump to first/last cell in row\n * - Ctrl+Home/End: Jump to first/last cell in grid\n * - Page Up/Down: Scroll by visible page\n */\n\nimport { useCallback, useRef } from \"react\";\nimport type { CellPosition, ColumnDef, EditingCell } from \"../types\";\n\nexport interface UseKeyboardNavigationOptions<T = any> {\n /** Whether keyboard navigation is enabled */\n enabled: boolean;\n /** Current focused cell */\n focusedCell: CellPosition | null;\n /** Current editing cell */\n editingCell: EditingCell | null;\n /** Column definitions (for determining visible columns) */\n columns: ColumnDef<T>[];\n /** Total number of rows */\n rowCount: number;\n /** Number of visible rows (for page up/down) */\n visibleRowCount?: number;\n /** Callback to set focused cell */\n onFocusedCellChange: (cell: CellPosition | null) => void;\n /** Callback to start editing */\n onStartEditing: (rowIndex: number, columnKey: string) => void;\n /** Callback to commit edit */\n onCommitEdit: () => void;\n /** Callback to cancel edit */\n onCancelEdit: () => void;\n /** Callback to scroll a row into view */\n onScrollToRow?: (rowIndex: number) => void;\n /** Callback to scroll a column into view */\n onScrollToColumn?: (columnKey: string) => void;\n}\n\nexport interface UseKeyboardNavigationReturn {\n /** Handler to attach to the grid container */\n handleKeyDown: (event: React.KeyboardEvent) => void;\n /** Ref to attach to the grid container for focus management */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** Focus the container (useful after clicking a cell) */\n focusContainer: () => void;\n}\n\n/**\n * Get visible (non-hidden) columns\n */\nfunction getVisibleColumns<T>(columns: ColumnDef<T>[]): ColumnDef<T>[] {\n return columns.filter((col) => !col.hidden);\n}\n\n/**\n * Hook to handle keyboard navigation in the DataGrid\n */\nexport function useKeyboardNavigation<T = any>(\n options: UseKeyboardNavigationOptions<T>\n): UseKeyboardNavigationReturn {\n const {\n enabled,\n focusedCell,\n editingCell,\n columns,\n rowCount,\n visibleRowCount = 10,\n onFocusedCellChange,\n onStartEditing,\n onCommitEdit,\n onCancelEdit,\n onScrollToRow,\n onScrollToColumn,\n } = options;\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Get visible columns for navigation\n const visibleColumns = getVisibleColumns(columns);\n\n /**\n * Get column index from column key\n */\n const getColumnIndex = useCallback(\n (columnKey: string): number => {\n return visibleColumns.findIndex((col) => col.key === columnKey);\n },\n [visibleColumns]\n );\n\n /**\n * Get column key from index\n */\n const getColumnKey = useCallback(\n (index: number): string | null => {\n const column = visibleColumns[index];\n return column ? column.key : null;\n },\n [visibleColumns]\n );\n\n /**\n * Navigate to a new cell position\n */\n const navigateToCell = useCallback(\n (rowIndex: number, columnKey: string) => {\n // Clamp row index\n const clampedRow = Math.max(0, Math.min(rowIndex, rowCount - 1));\n\n onFocusedCellChange({ rowIndex: clampedRow, columnKey });\n onScrollToRow?.(clampedRow);\n onScrollToColumn?.(columnKey);\n },\n [rowCount, onFocusedCellChange, onScrollToRow, onScrollToColumn]\n );\n\n /**\n * Move focus by delta\n */\n const moveFocus = useCallback(\n (rowDelta: number, colDelta: number) => {\n if (!focusedCell || visibleColumns.length === 0 || rowCount === 0) return;\n\n const currentColIndex = getColumnIndex(focusedCell.columnKey);\n if (currentColIndex === -1) return;\n\n let newRowIndex = focusedCell.rowIndex + rowDelta;\n let newColIndex = currentColIndex + colDelta;\n\n // Handle wrapping for Tab navigation\n if (colDelta !== 0) {\n if (newColIndex < 0) {\n // Wrap to previous row, last column\n if (newRowIndex > 0) {\n newRowIndex--;\n newColIndex = visibleColumns.length - 1;\n } else {\n newColIndex = 0;\n }\n } else if (newColIndex >= visibleColumns.length) {\n // Wrap to next row, first column\n if (newRowIndex < rowCount - 1) {\n newRowIndex++;\n newColIndex = 0;\n } else {\n newColIndex = visibleColumns.length - 1;\n }\n }\n }\n\n // Clamp values\n newRowIndex = Math.max(0, Math.min(newRowIndex, rowCount - 1));\n newColIndex = Math.max(0, Math.min(newColIndex, visibleColumns.length - 1));\n\n const newColumnKey = getColumnKey(newColIndex);\n if (newColumnKey) {\n navigateToCell(newRowIndex, newColumnKey);\n }\n },\n [\n focusedCell,\n visibleColumns,\n rowCount,\n getColumnIndex,\n getColumnKey,\n navigateToCell,\n ]\n );\n\n /**\n * Jump to first cell in row\n */\n const jumpToRowStart = useCallback(() => {\n if (!focusedCell || visibleColumns.length === 0) return;\n const firstColumnKey = getColumnKey(0);\n if (firstColumnKey) {\n navigateToCell(focusedCell.rowIndex, firstColumnKey);\n }\n }, [focusedCell, visibleColumns.length, getColumnKey, navigateToCell]);\n\n /**\n * Jump to last cell in row\n */\n const jumpToRowEnd = useCallback(() => {\n if (!focusedCell || visibleColumns.length === 0) return;\n const lastColumnKey = getColumnKey(visibleColumns.length - 1);\n if (lastColumnKey) {\n navigateToCell(focusedCell.rowIndex, lastColumnKey);\n }\n }, [focusedCell, visibleColumns.length, getColumnKey, navigateToCell]);\n\n /**\n * Jump to first cell in grid\n */\n const jumpToGridStart = useCallback(() => {\n if (visibleColumns.length === 0 || rowCount === 0) return;\n const firstColumnKey = getColumnKey(0);\n if (firstColumnKey) {\n navigateToCell(0, firstColumnKey);\n }\n }, [visibleColumns.length, rowCount, getColumnKey, navigateToCell]);\n\n /**\n * Jump to last cell in grid\n */\n const jumpToGridEnd = useCallback(() => {\n if (visibleColumns.length === 0 || rowCount === 0) return;\n const lastColumnKey = getColumnKey(visibleColumns.length - 1);\n if (lastColumnKey) {\n navigateToCell(rowCount - 1, lastColumnKey);\n }\n }, [visibleColumns.length, rowCount, getColumnKey, navigateToCell]);\n\n /**\n * Handle key down events\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (!enabled) return;\n\n const { key, ctrlKey, metaKey, shiftKey } = event;\n const isModifierKey = ctrlKey || metaKey;\n\n // If editing, only handle Enter and Escape\n if (editingCell) {\n switch (key) {\n case \"Enter\":\n event.preventDefault();\n onCommitEdit();\n break;\n case \"Escape\":\n event.preventDefault();\n onCancelEdit();\n break;\n case \"Tab\":\n // Commit and move to next cell\n event.preventDefault();\n onCommitEdit();\n moveFocus(0, shiftKey ? -1 : 1);\n break;\n }\n return;\n }\n\n // Navigation when not editing\n switch (key) {\n case \"ArrowUp\":\n event.preventDefault();\n moveFocus(-1, 0);\n break;\n\n case \"ArrowDown\":\n event.preventDefault();\n moveFocus(1, 0);\n break;\n\n case \"ArrowLeft\":\n event.preventDefault();\n moveFocus(0, -1);\n break;\n\n case \"ArrowRight\":\n event.preventDefault();\n moveFocus(0, 1);\n break;\n\n case \"Tab\":\n event.preventDefault();\n moveFocus(0, shiftKey ? -1 : 1);\n break;\n\n case \"Home\":\n event.preventDefault();\n if (isModifierKey) {\n jumpToGridStart();\n } else {\n jumpToRowStart();\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (isModifierKey) {\n jumpToGridEnd();\n } else {\n jumpToRowEnd();\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n moveFocus(-visibleRowCount, 0);\n break;\n\n case \"PageDown\":\n event.preventDefault();\n moveFocus(visibleRowCount, 0);\n break;\n\n case \"Enter\":\n case \"F2\":\n // Start editing the focused cell\n if (focusedCell) {\n event.preventDefault();\n const column = columns.find(\n (c) => c.key === focusedCell.columnKey\n );\n if (column?.editable) {\n onStartEditing(focusedCell.rowIndex, focusedCell.columnKey);\n }\n }\n break;\n\n case \"Escape\":\n // Clear focus\n event.preventDefault();\n onFocusedCellChange(null);\n break;\n }\n },\n [\n enabled,\n editingCell,\n focusedCell,\n columns,\n visibleRowCount,\n moveFocus,\n jumpToRowStart,\n jumpToRowEnd,\n jumpToGridStart,\n jumpToGridEnd,\n onCommitEdit,\n onCancelEdit,\n onStartEditing,\n onFocusedCellChange,\n ]\n );\n\n /**\n * Focus the container element\n */\n const focusContainer = useCallback(() => {\n containerRef.current?.focus();\n }, []);\n\n // Note: We intentionally don't auto-focus the container when focusedCell changes.\n // This allows focus to naturally move to other elements (like search inputs) when\n // the user clicks outside the grid. The container is focused explicitly via\n // focusContainer() when the user clicks on a cell.\n\n return {\n handleKeyDown,\n containerRef,\n focusContainer,\n };\n}\n","/**\n * useColumnResize Hook\n *\n * Handles column resizing logic with:\n * - Mouse drag support\n * - Min/max width constraints\n * - Callbacks for resize start/end\n * - Double-click to auto-fit (optional)\n */\n\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport type { ColumnDef } from \"../types\";\n\n/** Default minimum column width */\nconst DEFAULT_MIN_WIDTH = 50;\n\n/** Default maximum column width */\nconst DEFAULT_MAX_WIDTH = 1000;\n\nexport interface UseColumnResizeOptions {\n /** Column key being resized */\n columnKey: string;\n /** Column definition (for min/max width) */\n column: ColumnDef;\n /** Current column width */\n currentWidth: number;\n /** Whether resizing is enabled */\n enabled: boolean;\n /** Callback when width changes during resize */\n onResize: (width: number) => void;\n /** Callback when resize starts */\n onResizeStart?: () => void;\n /** Callback when resize ends */\n onResizeEnd?: (width: number) => void;\n}\n\nexport interface UseColumnResizeReturn {\n /** Whether currently dragging */\n isDragging: boolean;\n /** Props to spread on the resize handle element */\n resizeHandleProps: {\n onMouseDown: (event: React.MouseEvent) => void;\n onDoubleClick: (event: React.MouseEvent) => void;\n style: React.CSSProperties;\n role: string;\n \"aria-label\": string;\n tabIndex: number;\n };\n}\n\n/**\n * Hook to handle column resize drag interactions\n */\nexport function useColumnResize(\n options: UseColumnResizeOptions\n): UseColumnResizeReturn {\n const {\n columnKey,\n column,\n currentWidth,\n enabled,\n onResize,\n onResizeStart,\n onResizeEnd,\n } = options;\n\n const [isDragging, setIsDragging] = useState(false);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n // Get min/max widths\n const minWidth = column.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column.maxWidth ?? DEFAULT_MAX_WIDTH;\n\n /**\n * Clamp width to min/max bounds\n */\n const clampWidth = useCallback(\n (width: number): number => {\n return Math.max(minWidth, Math.min(maxWidth, width));\n },\n [minWidth, maxWidth]\n );\n\n /**\n * Handle mouse down on resize handle\n */\n const handleMouseDown = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setIsDragging(true);\n startXRef.current = event.clientX;\n startWidthRef.current = currentWidth;\n\n // Prevent text selection during drag\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n onResizeStart?.();\n },\n [enabled, currentWidth, onResizeStart]\n );\n\n /**\n * Handle mouse move during drag\n */\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!isDragging) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = clampWidth(startWidthRef.current + deltaX);\n\n onResize(newWidth);\n },\n [isDragging, clampWidth, onResize]\n );\n\n /**\n * Handle mouse up to end drag\n */\n const handleMouseUp = useCallback(() => {\n if (!isDragging) return;\n\n setIsDragging(false);\n\n // Restore styles\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n\n // Calculate final width\n const finalWidth = clampWidth(currentWidth);\n onResizeEnd?.(finalWidth);\n }, [isDragging, currentWidth, clampWidth, onResizeEnd]);\n\n /**\n * Handle double-click to auto-fit column width\n * For now, this resets to the column's default width\n */\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n if (!enabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Reset to column's defined width or default\n const defaultWidth = column.width ?? 200;\n const clampedWidth = clampWidth(defaultWidth);\n onResize(clampedWidth);\n onResizeEnd?.(clampedWidth);\n },\n [enabled, column.width, clampWidth, onResize, onResizeEnd]\n );\n\n // Attach global mouse listeners during drag\n useEffect(() => {\n if (isDragging) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n if (isDragging) {\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n }\n };\n }, [isDragging]);\n\n return {\n isDragging,\n resizeHandleProps: {\n onMouseDown: handleMouseDown,\n onDoubleClick: handleDoubleClick,\n style: {\n cursor: enabled ? \"col-resize\" : \"default\",\n touchAction: \"none\",\n },\n role: \"separator\",\n \"aria-label\": `Resize column ${columnKey}`,\n tabIndex: enabled ? 0 : -1,\n },\n };\n}\n\n/**\n * Hook to manage resize state for all columns\n */\nexport interface UseColumnResizeManagerOptions<T = any> {\n /** Column definitions */\n columns: ColumnDef<T>[];\n /** Current column widths */\n columnWidths: Record<string, number>;\n /** Whether resizing is enabled globally */\n resizableColumns: boolean;\n /** Callback when a column width changes */\n onColumnResize: (columnKey: string, width: number) => void;\n /** Callback when resize starts */\n onColumnResizeStart?: (columnKey: string) => void;\n /** Callback when resize ends */\n onColumnResizeEnd?: (columnKey: string, width: number) => void;\n}\n\nexport interface UseColumnResizeManagerReturn {\n /** Currently resizing column key */\n resizingColumn: string | null;\n /** Get resize props for a specific column */\n getResizeProps: (columnKey: string) => {\n isDragging: boolean;\n handleMouseDown: (event: React.MouseEvent) => void;\n handleDoubleClick: (event: React.MouseEvent) => void;\n };\n}\n\n/**\n * Hook to manage column resize state across all columns\n */\nexport function useColumnResizeManager<T = any>(\n options: UseColumnResizeManagerOptions<T>\n): UseColumnResizeManagerReturn {\n const {\n columns,\n columnWidths,\n resizableColumns,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n } = options;\n\n const [resizingColumn, setResizingColumn] = useState<string | null>(null);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n\n /**\n * Get column by key\n */\n const getColumn = useCallback(\n (columnKey: string): ColumnDef<T> | undefined => {\n return columns.find((c) => c.key === columnKey);\n },\n [columns]\n );\n\n /**\n * Clamp width for a specific column\n */\n const clampWidth = useCallback(\n (columnKey: string, width: number): number => {\n const column = getColumn(columnKey);\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column?.maxWidth ?? DEFAULT_MAX_WIDTH;\n return Math.max(minWidth, Math.min(maxWidth, width));\n },\n [getColumn]\n );\n\n /**\n * Handle mouse move during resize\n */\n const handleMouseMove = useCallback(\n (event: MouseEvent) => {\n if (!resizingColumn) return;\n\n const deltaX = event.clientX - startXRef.current;\n const newWidth = clampWidth(\n resizingColumn,\n startWidthRef.current + deltaX\n );\n\n onColumnResize(resizingColumn, newWidth);\n },\n [resizingColumn, clampWidth, onColumnResize]\n );\n\n /**\n * Handle mouse up to end resize\n */\n const handleMouseUp = useCallback(() => {\n if (!resizingColumn) return;\n\n const finalWidth = columnWidths[resizingColumn] ?? 200;\n\n setResizingColumn(null);\n document.body.style.userSelect = \"\";\n document.body.style.cursor = \"\";\n\n onColumnResizeEnd?.(resizingColumn, finalWidth);\n }, [resizingColumn, columnWidths, onColumnResizeEnd]);\n\n // Attach global listeners during resize\n useEffect(() => {\n if (resizingColumn) {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [resizingColumn, handleMouseMove, handleMouseUp]);\n\n /**\n * Get resize props for a specific column\n */\n const getResizeProps = useCallback(\n (columnKey: string) => {\n const column = getColumn(columnKey);\n const isResizable =\n resizableColumns && (column?.resizable !== false);\n\n const handleMouseDown = (event: React.MouseEvent) => {\n if (!isResizable) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n setResizingColumn(columnKey);\n startXRef.current = event.clientX;\n startWidthRef.current = columnWidths[columnKey] ?? column?.width ?? 200;\n\n document.body.style.userSelect = \"none\";\n document.body.style.cursor = \"col-resize\";\n\n onColumnResizeStart?.(columnKey);\n };\n\n const handleDoubleClick = (event: React.MouseEvent) => {\n if (!isResizable) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Reset to default width\n const defaultWidth = column?.width ?? 200;\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n const maxWidth = column?.maxWidth ?? DEFAULT_MAX_WIDTH;\n const clampedWidth = Math.max(minWidth, Math.min(maxWidth, defaultWidth));\n\n onColumnResize(columnKey, clampedWidth);\n onColumnResizeEnd?.(columnKey, clampedWidth);\n };\n\n return {\n isDragging: resizingColumn === columnKey,\n handleMouseDown,\n handleDoubleClick,\n };\n },\n [\n getColumn,\n resizableColumns,\n columnWidths,\n resizingColumn,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n ]\n );\n\n return {\n resizingColumn,\n getResizeProps,\n };\n}\n","/**\n * Data Processing Utilities\n *\n * Functions for sorting and filtering data internally in uncontrolled mode.\n * Also exports helper functions for use in controlled mode.\n */\n\nimport type {\n ColumnDef,\n SortConfig,\n FilterConfig,\n FilterOperator,\n FilterType,\n CellValue,\n FilterValue,\n} from \"../types\";\n\n/**\n * Get a value from a row using column accessor or key\n */\nexport function getCellValue<T>(row: T, column: ColumnDef<T>): CellValue {\n if (column.accessor) {\n return column.accessor(row);\n }\n // Dynamic property access - row is expected to be an object with string keys\n return (row as Record<string, CellValue>)[column.key];\n}\n\n/**\n * Apply sorting to data\n */\nexport function applySorting<T>(\n data: T[],\n sorting: SortConfig[],\n columns: ColumnDef<T>[]\n): T[] {\n if (sorting.length === 0) return data;\n\n const result = [...data];\n\n // Apply sorts in order (primary, secondary, etc.)\n for (const sort of sorting) {\n const column = columns.find((c) => c.key === sort.field);\n if (!column) continue;\n\n result.sort((a, b) => {\n // Use custom comparator if provided\n if (column.sortComparator) {\n const cmp = column.sortComparator(a, b);\n return sort.direction === \"asc\" ? cmp : -cmp;\n }\n\n // Default comparison\n const aVal = getCellValue(a, column);\n const bVal = getCellValue(b, column);\n\n // Handle null/undefined\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return sort.direction === \"asc\" ? 1 : -1;\n if (bVal == null) return sort.direction === \"asc\" ? -1 : 1;\n\n // Compare based on type\n let comparison = 0;\n\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n comparison = aVal.localeCompare(bVal);\n } else if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n comparison = aVal - bVal;\n } else if (aVal instanceof Date && bVal instanceof Date) {\n comparison = aVal.getTime() - bVal.getTime();\n } else if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\n comparison = aVal === bVal ? 0 : aVal ? 1 : -1;\n } else {\n // Fallback: convert to string\n comparison = String(aVal).localeCompare(String(bVal));\n }\n\n return sort.direction === \"asc\" ? comparison : -comparison;\n });\n }\n\n return result;\n}\n\n/**\n * Extract a single CellValue from a FilterValue (handles arrays for single-value operations)\n */\nfunction extractSingleValue(filterValue: FilterValue): CellValue {\n if (Array.isArray(filterValue)) {\n return filterValue[0];\n }\n return filterValue;\n}\n\n/**\n * Parse a value as a Date, handling various input formats\n */\nfunction parseDate(value: CellValue): Date | null {\n if (value == null || value === \"\") return null;\n if (value instanceof Date) return value;\n if (typeof value === \"string\" || typeof value === \"number\") {\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n}\n\n/**\n * Compare two dates (ignoring time component for date-only comparisons)\n */\nfunction compareDates(date1: Date, date2: Date): number {\n // Normalize to start of day for comparison\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n}\n\n/**\n * Apply a single filter operator to a value.\n * Can be used in controlled mode to filter data with the same logic as internal filtering.\n * \n * @param value - The cell value to test\n * @param filterValue - The filter value to compare against\n * @param filterValueTo - Secondary value for 'between' operator\n * @param operator - The filter operator to apply\n * @param filterType - Optional filter type hint (text, number, date, boolean)\n * @returns true if the value passes the filter, false otherwise\n * \n * @example\n * // Using in controlled mode\n * const filteredData = data.filter(row => \n * applyFilterOperator(row.name, \"john\", undefined, \"contains\", \"text\")\n * );\n */\nexport function applyFilterOperator(\n value: CellValue,\n filterValue: FilterValue,\n filterValueTo: FilterValue,\n operator: FilterOperator,\n filterType?: string\n): boolean {\n // Handle isEmpty/isNotEmpty first (works for any type)\n if (operator === \"isEmpty\") {\n return value === \"\" || value == null;\n }\n if (operator === \"isNotEmpty\") {\n return value !== \"\" && value != null;\n }\n\n // Handle null/undefined values for other operators\n if (value == null) {\n return false;\n }\n\n // Date-specific operators\n if (filterType === \"date\" || operator === \"before\" || operator === \"after\") {\n const dateValue = parseDate(value);\n const dateFilterValue = parseDate(extractSingleValue(filterValue));\n const dateFilterValueTo = parseDate(extractSingleValue(filterValueTo));\n\n if (!dateValue) return false;\n\n switch (operator) {\n case \"equals\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) === 0 : false;\n case \"notEquals\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) !== 0 : false;\n case \"before\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) < 0 : false;\n case \"after\":\n return dateFilterValue ? compareDates(dateValue, dateFilterValue) > 0 : false;\n case \"between\":\n if (!dateFilterValue || !dateFilterValueTo) return false;\n return (\n compareDates(dateValue, dateFilterValue) >= 0 &&\n compareDates(dateValue, dateFilterValueTo) <= 0\n );\n default:\n return true;\n }\n }\n\n // Number-specific operators\n if (filterType === \"number\" || [\"gt\", \"gte\", \"lt\", \"lte\", \"between\"].includes(operator)) {\n const numValue = Number(value);\n const singleFilterValue = extractSingleValue(filterValue);\n const numFilterValue = Number(singleFilterValue);\n \n if (isNaN(numValue)) return false;\n\n switch (operator) {\n case \"equals\":\n return numValue === numFilterValue;\n case \"notEquals\":\n return numValue !== numFilterValue;\n case \"gt\":\n return numValue > numFilterValue;\n case \"gte\":\n return numValue >= numFilterValue;\n case \"lt\":\n return numValue < numFilterValue;\n case \"lte\":\n return numValue <= numFilterValue;\n case \"between\":\n const singleFilterValueTo = extractSingleValue(filterValueTo);\n const numFilterValueTo = Number(singleFilterValueTo);\n return numValue >= numFilterValue && numValue <= numFilterValueTo;\n default:\n return true;\n }\n }\n\n // Boolean filter\n if (filterType === \"boolean\") {\n const boolValue = value === true || value === \"true\" || value === 1;\n const singleBoolFilterValue = extractSingleValue(filterValue);\n const boolFilterValue = singleBoolFilterValue === true || singleBoolFilterValue === \"true\" || singleBoolFilterValue === 1;\n return boolValue === boolFilterValue;\n }\n\n // Text/string operators (default)\n const strValue = String(value).toLowerCase();\n const singleStrFilterValue = extractSingleValue(filterValue);\n const strFilterValue = singleStrFilterValue != null ? String(singleStrFilterValue).toLowerCase() : \"\";\n\n switch (operator) {\n case \"contains\":\n return strValue.includes(strFilterValue);\n case \"notContains\":\n return !strValue.includes(strFilterValue);\n case \"equals\":\n return strValue === strFilterValue;\n case \"notEquals\":\n return strValue !== strFilterValue;\n case \"startsWith\":\n return strValue.startsWith(strFilterValue);\n case \"endsWith\":\n return strValue.endsWith(strFilterValue);\n default:\n return true;\n }\n}\n\n/**\n * Apply filters to data\n */\nexport function applyFilters<T>(\n data: T[],\n filters: FilterConfig[],\n columns: ColumnDef<T>[]\n): T[] {\n if (filters.length === 0) return data;\n\n return data.filter((row) => {\n // All filters must pass (AND logic)\n return filters.every((filter) => {\n const column = columns.find((c) => c.key === filter.columnKey);\n if (!column) return true;\n\n const value = getCellValue(row, column);\n\n // Use custom filter function if provided\n if (column.filterFn) {\n return column.filterFn(row, filter.value, filter.operator);\n }\n\n // Use default filter logic with filter type for better handling\n return applyFilterOperator(\n value,\n filter.value,\n filter.valueTo,\n filter.operator,\n column.filterType\n );\n });\n });\n}\n","/**\n * DataGrid Component\n *\n * A powerful, reusable grid component with:\n * - Virtualization for large datasets\n * - Resizable columns\n * - Sorting, filtering, and pagination\n * - Inline cell editing with validation\n * - Full keyboard navigation\n * - Controlled and uncontrolled state modes\n *\n * Built on @tanstack/react-virtual for performance.\n */\n\nimport * as React from \"react\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport {\n ChevronsLeft,\n ChevronLeft,\n ChevronRight,\n ChevronsRight,\n Search,\n} from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Button } from \"../button\";\nimport { Input } from \"../input\";\nimport { HeaderCell } from \"./components/HeaderCell\";\nimport { CellEditor } from \"./components/CellEditor\";\nimport { useDataGridState } from \"./hooks/useDataGridState\";\nimport { useKeyboardNavigation } from \"./hooks/useKeyboardNavigation\";\nimport { useColumnResizeManager } from \"./hooks/useColumnResize\";\nimport { applySorting, applyFilters, getCellValue as getCellValueUtil } from \"./utils/dataProcessing\";\nimport type {\n DataGridProps,\n ColumnDef,\n SortConfig,\n FilterConfig,\n CellPosition,\n CellValue,\n} from \"./types\";\n\n/**\n * Default row height for virtualization\n */\nconst DEFAULT_ROW_HEIGHT = 35;\n\n/**\n * Default overscan for virtualization\n */\nconst DEFAULT_OVERSCAN = 10;\n\n/**\n * Estimate minimum column width based on header text and features\n * Ensures columns are wide enough to show full header text\n */\nfunction estimateColumnWidth<T>(column: ColumnDef<T>): number {\n const headerText = typeof column.header === \"string\" ? column.header : \"\";\n // Base width: ~8px per character for the font size used\n const textWidth = headerText.length * 8;\n // Padding: 24px (px-3 = 12px on each side)\n const padding = 24;\n // Sort icon: ~20px if sortable\n const sortIconWidth = column.sortable ? 20 : 0;\n // Filter icon: ~28px if filterable (icon + some spacing)\n const filterIconWidth = column.filterable ? 28 : 0;\n // Resize handle area: ~16px if resizable (handled separately, but add small buffer)\n const resizeBuffer = 8;\n \n const estimatedWidth = textWidth + padding + sortIconWidth + filterIconWidth + resizeBuffer;\n \n // Minimum 80px, reasonable default max of 200px unless header is very long\n return Math.max(80, Math.min(estimatedWidth, 300));\n}\n\n/**\n * DataGrid Component\n */\nexport function DataGrid<T = Record<string, CellValue>>({\n // Data\n data,\n columns,\n getRowKey = (_, index) => String(index),\n\n // Feature toggles\n resizableColumns = false,\n virtualized,\n stickyHeader = true,\n showTooltips = true,\n tooltipMinLength = 30,\n enableKeyboardNavigation = true,\n showColumnBorders = true,\n enableInternalSorting = true,\n enableInternalFiltering = true,\n\n // Controlled sorting\n sorting: controlledSorting,\n onSortChange,\n\n // Controlled filtering\n filters: controlledFilters,\n onFilterChange,\n\n // Controlled column widths\n columnWidths: controlledColumnWidths,\n onColumnResize,\n onColumnResizeStart,\n onColumnResizeEnd,\n\n // Uncontrolled defaults\n defaultSorting,\n defaultFilters,\n defaultColumnWidths,\n\n // State change callback\n onStateChange,\n\n // Row interactions\n onRowClick,\n onRowDoubleClick,\n selectedRows = [],\n onSelectedRowsChange,\n rowClassName,\n\n // Cell editing\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n\n // Keyboard navigation\n focusedCell: controlledFocusedCell,\n onFocusedCellChange,\n\n // Pagination\n pagination,\n\n // Search\n search,\n\n // Loading & empty states\n loading = false,\n loadingComponent,\n emptyMessage = \"No data available\",\n emptyComponent,\n\n // Styling\n className,\n tableClassName,\n\n // Infinite scroll\n infiniteScroll = false,\n onLoadMore,\n hasMore = false,\n loadingMore = false,\n}: DataGridProps<T>) {\n const parentRef = React.useRef<HTMLDivElement>(null);\n const headerRef = React.useRef<HTMLDivElement>(null);\n const [headerHeight, setHeaderHeight] = React.useState(40);\n const [hoveredCell, setHoveredCell] = React.useState<{\n row: number;\n col: number;\n content: string;\n x: number;\n y: number;\n } | null>(null);\n\n // Filter visible columns\n const visibleColumns = React.useMemo(\n () => columns.filter((col) => !col.hidden),\n [columns]\n );\n\n // Get cell value helper\n const getCellValue = React.useCallback(\n (row: T, column: ColumnDef<T>): CellValue => {\n if (column.accessor) {\n return column.accessor(row);\n }\n // Dynamic property access - row is expected to be an object with string keys\n return (row as Record<string, CellValue>)[column.key];\n },\n []\n );\n\n // Use data grid state hook\n const { state, actions, isControlled } = useDataGridState({\n sorting: controlledSorting,\n filters: controlledFilters,\n columnWidths: controlledColumnWidths,\n focusedCell: controlledFocusedCell,\n defaultSorting,\n defaultFilters,\n defaultColumnWidths,\n onSortChange,\n onFilterChange,\n onColumnResize,\n onFocusedCellChange,\n onStateChange,\n onCellEdit,\n onCellEditStart,\n onCellEditCancel,\n columns: visibleColumns,\n data,\n getCellValue,\n });\n\n // Process data with internal sorting/filtering (uncontrolled mode)\n const processedData = React.useMemo(() => {\n let result = data;\n\n // Apply internal filtering when not controlled\n if (enableInternalFiltering && !isControlled.filters && state.filters.length > 0) {\n result = applyFilters(result, state.filters, visibleColumns);\n }\n\n // Apply internal sorting when not controlled\n if (enableInternalSorting && !isControlled.sorting && state.sorting.length > 0) {\n result = applySorting(result, state.sorting, visibleColumns);\n }\n\n return result;\n }, [\n data,\n enableInternalFiltering,\n enableInternalSorting,\n isControlled.filters,\n isControlled.sorting,\n state.filters,\n state.sorting,\n visibleColumns,\n ]);\n\n // Use column resize manager\n const { resizingColumn, getResizeProps } = useColumnResizeManager({\n columns: visibleColumns,\n columnWidths: state.columnWidths,\n resizableColumns,\n onColumnResize: actions.setColumnWidth,\n onColumnResizeStart,\n onColumnResizeEnd,\n });\n\n // Auto-enable virtualization for large datasets\n const shouldVirtualize = virtualized ?? processedData.length > 100;\n\n // Measure header height for virtualization offset\n React.useLayoutEffect(() => {\n if (headerRef.current && shouldVirtualize) {\n setHeaderHeight(headerRef.current.offsetHeight);\n }\n }, [visibleColumns, shouldVirtualize]);\n\n // Virtualize rows\n const rowVirtualizer = useVirtualizer({\n count: processedData.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => DEFAULT_ROW_HEIGHT,\n overscan: DEFAULT_OVERSCAN,\n enabled: shouldVirtualize,\n });\n\n // Calculate table width - prefer explicit widths, fall back to estimated width from header\n const tableWidth = React.useMemo(() => {\n return visibleColumns.reduce((acc, col) => {\n const width = state.columnWidths[col.key] || col.width || estimateColumnWidth(col);\n return acc + width;\n }, 0);\n }, [visibleColumns, state.columnWidths]);\n\n // Get visible row count for keyboard navigation\n const visibleRowCount = React.useMemo(() => {\n if (!parentRef.current) return 10;\n return Math.floor(parentRef.current.clientHeight / DEFAULT_ROW_HEIGHT);\n }, []);\n\n // Use keyboard navigation hook\n const { handleKeyDown, containerRef, focusContainer } = useKeyboardNavigation({\n enabled: enableKeyboardNavigation,\n focusedCell: state.focusedCell,\n editingCell: state.editingCell,\n columns: visibleColumns,\n rowCount: processedData.length,\n visibleRowCount,\n onFocusedCellChange: actions.setFocusedCell,\n onStartEditing: actions.startEditing,\n onCommitEdit: actions.commitEdit,\n onCancelEdit: actions.cancelEdit,\n onScrollToRow: (rowIndex) => {\n rowVirtualizer.scrollToIndex(rowIndex, { align: \"auto\" });\n },\n });\n\n // Handle blur to clear selection when focus leaves the grid data area\n // This includes clicking the search bar, pagination, or anywhere outside\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n const target = event.target as HTMLElement;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // Helper to check if an element is part of the cell editing flow (Radix portals, etc.)\n const isEditingFlowElement = (el: HTMLElement | null): boolean => {\n if (!el) return false;\n return !!(\n el.closest(\"[data-radix-popper-content-wrapper]\") ||\n el.closest(\"[data-radix-select-viewport]\") ||\n el.closest(\"[data-radix-menu-content]\") ||\n el.closest(\"[role='dialog']\") ||\n el.closest(\"[data-cell-editor]\")\n );\n };\n\n // Helper to check if an element is inside the grid data area (rows/cells)\n const isInGridDataArea = (el: HTMLElement | null): boolean => {\n if (!el) return false;\n // Check if the element is a grid cell, or inside a row/cell\n return !!(\n el.closest(\"[role='gridcell']\") ||\n el.closest(\"[role='row']\") ||\n el.closest(\"[data-cell-editor]\")\n );\n };\n\n // If the blur originated from inside a cell editor, let the CellEditor's\n // own blur handler manage the commit - don't double-process\n if (target.closest(\"[data-cell-editor]\")) {\n // Clear focused cell if focus is moving outside the grid data area\n if (relatedTarget && !isInGridDataArea(relatedTarget) && !isEditingFlowElement(relatedTarget)) {\n setTimeout(() => {\n actions.setFocusedCell(null);\n }, 0);\n } else if (!relatedTarget) {\n // Focus moving to non-focusable element - check after timeout\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (!isInGridDataArea(activeElement) && !isEditingFlowElement(activeElement)) {\n actions.setFocusedCell(null);\n }\n }, 0);\n }\n return;\n }\n\n // If we're editing and focus is moving to another element\n if (state.editingCell && relatedTarget) {\n // If focus is moving to a Radix portal or cell editor, keep editing\n if (isEditingFlowElement(relatedTarget)) {\n return;\n }\n // Otherwise, commit the edit\n actions.commitEdit();\n // Clear focus if moving outside grid data area (e.g., search bar, pagination, outside)\n if (!isInGridDataArea(relatedTarget)) {\n actions.setFocusedCell(null);\n }\n return;\n }\n\n // Not editing - clear focused cell if focus moves outside the grid data area\n if (relatedTarget) {\n if (!isInGridDataArea(relatedTarget) && !isEditingFlowElement(relatedTarget)) {\n actions.setFocusedCell(null);\n }\n } else {\n // Focus is moving to nothing (e.g., clicking on non-focusable element)\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (isEditingFlowElement(activeElement)) {\n return;\n }\n if (!isInGridDataArea(activeElement)) {\n if (state.editingCell) {\n actions.commitEdit();\n }\n actions.setFocusedCell(null);\n }\n }, 0);\n }\n },\n [state.editingCell, actions]\n );\n\n // Handle infinite scroll\n React.useEffect(() => {\n if (!infiniteScroll || !hasMore || loadingMore || !parentRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n onLoadMore?.();\n }\n },\n { root: parentRef.current, threshold: 0.1 }\n );\n\n // Observe the last row\n const lastRow = parentRef.current.querySelector(\"[data-last-row]\");\n if (lastRow) {\n observer.observe(lastRow);\n }\n\n return () => observer.disconnect();\n }, [infiniteScroll, hasMore, loadingMore, onLoadMore, data.length]);\n\n // Get sort config for a column\n const getColumnSort = (columnKey: string): SortConfig | undefined => {\n return state.sorting.find((s) => s.field === columnKey);\n };\n\n // Get filter config for a column\n const getColumnFilter = (columnKey: string): FilterConfig | undefined => {\n return state.filters.find((f) => f.columnKey === columnKey);\n };\n\n // Handle header sort click\n const handleSort = (columnKey: string) => {\n actions.toggleSort(columnKey);\n };\n\n // Handle filter change\n const handleFilterChange = (\n columnKey: string,\n filter: FilterConfig | null\n ) => {\n actions.setFilter(filter, columnKey);\n };\n\n // Render cell content\n const renderCell = (\n row: T,\n column: ColumnDef<T>,\n rowIndex: number,\n isEditing: boolean\n ) => {\n // If editing this cell\n if (isEditing && state.editingCell) {\n return (\n <CellEditor\n column={column}\n value={state.editingCell.value}\n row={row}\n rowIndex={rowIndex}\n onCommit={actions.commitEdit}\n onCancel={actions.cancelEdit}\n onChange={actions.updateEditingValue}\n />\n );\n }\n\n // Custom cell renderer\n if (column.cell) {\n return column.cell(row, rowIndex);\n }\n\n // Default rendering\n const value = getCellValue(row, column);\n if (value === null || value === undefined) {\n return <span className=\"text-muted-foreground italic\">NULL</span>;\n }\n return String(value);\n };\n\n // Loading state\n if (loading) {\n if (loadingComponent) {\n return <>{loadingComponent}</>;\n }\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full bg-muted/30\",\n className\n )}\n >\n <div className=\"text-muted-foreground\">Loading...</div>\n </div>\n );\n }\n\n // Empty state - but keep the search bar if it exists\n if (processedData.length === 0) {\n const emptyContent = emptyComponent ? (\n <>{emptyComponent}</>\n ) : (\n <div className=\"flex items-center justify-center flex-1 bg-muted/30\">\n <div className=\"text-muted-foreground text-sm\">{emptyMessage}</div>\n </div>\n );\n\n // If search is enabled, show the search bar with empty state below\n if (search) {\n return (\n <div className={cn(\"flex flex-col h-full w-full min-h-0\", className)}>\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n {emptyContent}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center h-full bg-muted/30\",\n className\n )}\n >\n <div className=\"text-muted-foreground text-sm\">{emptyMessage}</div>\n </div>\n );\n }\n\n // Virtualized rendering\n if (shouldVirtualize) {\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={cn(\"flex flex-col h-full w-full min-h-0\", className)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n tabIndex={enableKeyboardNavigation ? 0 : -1}\n role=\"grid\"\n aria-rowcount={processedData.length}\n aria-colcount={visibleColumns.length}\n >\n {/* Search bar */}\n {search && (\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n )}\n\n <div\n ref={parentRef}\n className=\"flex-1 overflow-auto bg-background relative w-full min-h-0 max-h-full\"\n style={{ contain: \"strict\" }}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() + headerHeight}px`,\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n position: \"relative\",\n minWidth: \"100%\",\n }}\n >\n {/* Sticky Header */}\n <div\n ref={headerRef}\n className={cn(\n \"sticky top-0 z-10 bg-muted border-b border-border\",\n stickyHeader && \"sticky\"\n )}\n style={{\n display: \"flex\",\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n }}\n role=\"row\"\n >\n {visibleColumns.map((column, colIndex) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const resizeProps = getResizeProps(column.key);\n\n return (\n <HeaderCell\n key={column.key}\n column={column}\n columnIndex={colIndex}\n width={width}\n sorting={getColumnSort(column.key)}\n filter={getColumnFilter(column.key)}\n isResizable={\n resizableColumns && column.resizable !== false\n }\n onSort={() => handleSort(column.key)}\n onFilterChange={(filter) =>\n handleFilterChange(column.key, filter)\n }\n onResizeMouseDown={resizeProps.handleMouseDown}\n onResizeDoubleClick={resizeProps.handleDoubleClick}\n isResizing={resizeProps.isDragging}\n />\n );\n })}\n </div>\n\n {/* Virtualized Rows */}\n {rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const row = processedData[virtualRow.index];\n const rowKey = getRowKey(row, virtualRow.index);\n const isSelected = selectedRows.includes(rowKey);\n const isLastRow = virtualRow.index === processedData.length - 1;\n\n return (\n <div\n key={virtualRow.key}\n data-last-row={isLastRow ? true : undefined}\n className={cn(\n \"absolute top-0 left-0 transition-colors border-b border-border\",\n onRowClick && \"cursor-pointer\",\n isSelected && \"bg-accent/20\",\n !isSelected && \"hover:bg-muted/50\",\n rowClassName && rowClassName(row, virtualRow.index)\n )}\n style={{\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start + headerHeight}px)`,\n display: \"flex\",\n width: tableWidth ? `${tableWidth}px` : \"100%\",\n }}\n onClick={() => {\n onRowClick?.(row, virtualRow.index);\n if (enableKeyboardNavigation && visibleColumns.length > 0) {\n actions.setFocusedCell({\n rowIndex: virtualRow.index,\n columnKey: visibleColumns[0].key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={() =>\n onRowDoubleClick?.(row, virtualRow.index)\n }\n role=\"row\"\n aria-rowindex={virtualRow.index + 1}\n aria-selected={isSelected}\n >\n {visibleColumns.map((column, colIndex) => {\n const width =\n state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const isEditingThisCell =\n state.editingCell?.rowIndex === virtualRow.index &&\n state.editingCell?.columnKey === column.key;\n const isFocused =\n state.focusedCell?.rowIndex === virtualRow.index &&\n state.focusedCell?.columnKey === column.key;\n\n const cellContent = renderCell(\n row,\n column,\n virtualRow.index,\n isEditingThisCell\n );\n const cellValue =\n typeof cellContent === \"string\"\n ? cellContent\n : String(getCellValue(row, column) || \"\");\n const isLong =\n showTooltips && cellValue.length > tooltipMinLength;\n\n return (\n <div\n key={column.key}\n className={cn(\n \"flex-shrink-0 px-3 py-2 text-sm overflow-hidden\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\"\n )}\n style={{ width }}\n onMouseDown={(e) => {\n // Prevent cell from capturing mouse events when editing\n // This allows clicks on dropdowns, date pickers, etc. to work\n if (isEditingThisCell && e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n // Don't change focus if already editing this cell\n if (isEditingThisCell) return;\n if (enableKeyboardNavigation) {\n actions.setFocusedCell({\n rowIndex: virtualRow.index,\n columnKey: column.key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={(e) => {\n e.stopPropagation();\n // Don't re-trigger edit if already editing\n if (isEditingThisCell) return;\n if (column.editable && onCellEdit) {\n actions.startEditing(virtualRow.index, column.key);\n }\n }}\n onMouseEnter={(e) => {\n if (isLong && !isEditingThisCell) {\n const rect =\n e.currentTarget.getBoundingClientRect();\n setHoveredCell({\n row: virtualRow.index,\n col: colIndex,\n content: cellValue,\n x: rect.left,\n y: rect.bottom + 4,\n });\n }\n }}\n onMouseLeave={() => setHoveredCell(null)}\n role=\"gridcell\"\n aria-colindex={colIndex + 1}\n tabIndex={-1}\n >\n <div className=\"truncate\">{cellContent}</div>\n </div>\n );\n })}\n </div>\n );\n })}\n\n {/* Infinite scroll loading indicator */}\n {infiniteScroll && loadingMore && (\n <div\n className=\"absolute bottom-0 left-0 right-0 flex items-center justify-center py-4 bg-background/80\"\n style={{\n transform: `translateY(${rowVirtualizer.getTotalSize() + headerHeight}px)`,\n }}\n >\n <div className=\"text-muted-foreground text-sm\">\n Loading more...\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Pagination */}\n {pagination && (\n <PaginationFooter pagination={pagination} />\n )}\n\n {/* Tooltip for long content */}\n {hoveredCell && (\n <div\n className=\"fixed z-[200] p-3 bg-popover text-popover-foreground border border-border rounded-md shadow-xl max-w-md break-words text-sm pointer-events-none\"\n style={{\n left: `${hoveredCell.x}px`,\n top: `${hoveredCell.y}px`,\n }}\n >\n <div className=\"whitespace-pre-wrap font-mono text-xs\">\n {hoveredCell.content}\n </div>\n </div>\n )}\n </div>\n );\n }\n\n // Non-virtualized rendering (standard table)\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={cn(\"flex flex-col h-full min-h-0\", className)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n tabIndex={enableKeyboardNavigation ? 0 : -1}\n role=\"grid\"\n aria-rowcount={processedData.length}\n aria-colcount={visibleColumns.length}\n >\n {/* Search bar */}\n {search && (\n <div className=\"flex-shrink-0 p-3 border-b border-border bg-background\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={search.placeholder || \"Search...\"}\n value={search.searchQuery}\n onChange={(e) => search.onSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-auto min-h-0\">\n {/* Header row using HeaderCell for consistent features */}\n <div\n className={cn(\n \"flex border-b border-border bg-muted\",\n stickyHeader && \"sticky top-0 z-10\"\n )}\n style={{ width: tableWidth ? `${tableWidth}px` : \"100%\" }}\n role=\"row\"\n >\n {visibleColumns.map((column, colIndex) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const resizeProps = getResizeProps(column.key);\n\n return (\n <HeaderCell\n key={column.key}\n column={column}\n columnIndex={colIndex}\n width={width}\n sorting={getColumnSort(column.key)}\n filter={getColumnFilter(column.key)}\n isResizable={resizableColumns && column.resizable !== false}\n onSort={() => handleSort(column.key)}\n onFilterChange={(filter) => handleFilterChange(column.key, filter)}\n onResizeMouseDown={resizeProps.handleMouseDown}\n onResizeDoubleClick={resizeProps.handleDoubleClick}\n isResizing={resizeProps.isDragging}\n />\n );\n })}\n </div>\n\n {/* Data rows */}\n {processedData.map((row, rowIndex) => {\n const rowKey = getRowKey(row, rowIndex);\n const isSelected = selectedRows.includes(rowKey);\n\n return (\n <div\n key={rowKey}\n className={cn(\n \"flex border-b border-border transition-colors\",\n onRowClick && \"cursor-pointer\",\n isSelected && \"bg-accent/20\",\n !isSelected && \"hover:bg-muted/50\",\n rowClassName && rowClassName(row, rowIndex)\n )}\n style={{ width: tableWidth ? `${tableWidth}px` : \"100%\" }}\n onClick={() => onRowClick?.(row, rowIndex)}\n onDoubleClick={() => onRowDoubleClick?.(row, rowIndex)}\n role=\"row\"\n >\n {visibleColumns.map((column) => {\n const width = state.columnWidths[column.key] || column.width || estimateColumnWidth(column);\n const isEditingThisCell =\n state.editingCell?.rowIndex === rowIndex &&\n state.editingCell?.columnKey === column.key;\n const isFocused =\n state.focusedCell?.rowIndex === rowIndex &&\n state.focusedCell?.columnKey === column.key;\n\n return (\n <div\n key={column.key}\n className={cn(\n \"flex-shrink-0 px-3 py-2 text-sm overflow-hidden\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\"\n )}\n style={{ width }}\n onMouseDown={(e) => {\n // Prevent cell from capturing mouse events when editing\n // This allows clicks on dropdowns, date pickers, etc. to work\n if (isEditingThisCell && e.target !== e.currentTarget) {\n e.stopPropagation();\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n // Don't change focus if already editing this cell\n if (isEditingThisCell) return;\n if (enableKeyboardNavigation) {\n actions.setFocusedCell({\n rowIndex,\n columnKey: column.key,\n });\n focusContainer();\n }\n }}\n onDoubleClick={(e) => {\n e.stopPropagation();\n // Don't re-trigger edit if already editing\n if (isEditingThisCell) return;\n if (column.editable && onCellEdit) {\n actions.startEditing(rowIndex, column.key);\n }\n }}\n role=\"gridcell\"\n >\n {renderCell(row, column, rowIndex, isEditingThisCell)}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n\n {/* Pagination */}\n {pagination && (\n <PaginationFooter pagination={pagination} />\n )}\n </div>\n );\n}\n\n/**\n * Pagination Footer Component\n */\ninterface PaginationFooterProps {\n pagination: NonNullable<DataGridProps[\"pagination\"]>;\n}\n\nfunction PaginationFooter({ pagination }: PaginationFooterProps) {\n const [goToPage, setGoToPage] = React.useState(\"\");\n\n const handleGoToPage = () => {\n const page = parseInt(goToPage, 10);\n if (!isNaN(page) && page >= 1 && page <= pagination.totalPages) {\n pagination.onPageChange(page - 1);\n setGoToPage(\"\");\n }\n };\n\n return (\n <div className=\"flex-shrink-0 border-t border-border p-4 flex items-center justify-between bg-background\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Rows per page:</span>\n <select\n value={pagination.pageSize}\n onChange={(e) => pagination.onPageSizeChange(Number(e.target.value))}\n className=\"px-2 py-1 border border-border rounded bg-background text-foreground text-sm\"\n >\n {(pagination.pageSizeOptions || [15, 50, 100, 500]).map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-muted-foreground\">\n Page {pagination.currentPage + 1} of {pagination.totalPages}\n {pagination.totalItems && ` (${pagination.totalItems} total)`}\n </span>\n\n {/* Go to page input */}\n {pagination.showGoToPage && (\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={1}\n max={pagination.totalPages}\n value={goToPage}\n onChange={(e) => setGoToPage(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleGoToPage();\n }\n }}\n placeholder=\"Go to\"\n className=\"w-16 h-8 text-sm\"\n />\n <Button\n onClick={handleGoToPage}\n variant=\"outline\"\n size=\"sm\"\n disabled={!goToPage}\n >\n Go\n </Button>\n </div>\n )}\n\n <div className=\"flex items-center gap-1\">\n <Button\n onClick={() => pagination.onPageChange(0)}\n disabled={pagination.currentPage === 0}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.currentPage - 1)}\n disabled={pagination.currentPage === 0}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.currentPage + 1)}\n disabled={pagination.currentPage >= pagination.totalPages - 1}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"w-4 h-4\" />\n </Button>\n <Button\n onClick={() => pagination.onPageChange(pagination.totalPages - 1)}\n disabled={pagination.currentPage >= pagination.totalPages - 1}\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nexport interface AutocompleteOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Optional description shown below the label */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Optional group/category for the option */\n group?: string;\n}\n\nexport interface AutocompleteProps {\n /** Array of options to display */\n options: AutocompleteOption[];\n /** Currently selected value */\n value?: string;\n /** Callback when selection changes */\n onChange?: (value: string | undefined) => void;\n /** Placeholder text when no selection */\n placeholder?: string;\n /** Placeholder for the search input */\n searchPlaceholder?: string;\n /** Text to show when no options match the search */\n emptyText?: string;\n /** Whether the autocomplete is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Whether to allow clearing the selection */\n clearable?: boolean;\n}\n\n/**\n * Autocomplete component - a searchable dropdown/select\n *\n * Features:\n * - Search filtering\n * - Grouped options support\n * - Clearable selection\n * - Keyboard navigation\n *\n * @example\n * <Autocomplete\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select a framework...\"\n * />\n */\nexport function Autocomplete({\n options,\n value,\n onChange,\n placeholder = \"Select an option...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = false,\n}: AutocompleteProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Find the selected option\n const selectedOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // Filter options based on search\n const filteredOptions = React.useMemo(() => {\n if (!search.trim()) return options;\n const searchLower = search.toLowerCase();\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [options, search]);\n\n // Group options if they have groups\n const groupedOptions = React.useMemo(() => {\n const groups: Record<string, AutocompleteOption[]> = {};\n const ungrouped: AutocompleteOption[] = [];\n\n filteredOptions.forEach((opt) => {\n if (opt.group) {\n if (!groups[opt.group]) groups[opt.group] = [];\n groups[opt.group].push(opt);\n } else {\n ungrouped.push(opt);\n }\n });\n\n return { groups, ungrouped };\n }, [filteredOptions]);\n\n const hasGroups = Object.keys(groupedOptions.groups).length > 0;\n\n // Handle selection\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n onChange?.(optionValue);\n setOpen(false);\n setSearch(\"\");\n },\n [onChange]\n );\n\n // Handle clear\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(undefined);\n setSearch(\"\");\n },\n [onChange]\n );\n\n // Focus input when popover opens\n React.useEffect(() => {\n if (open) {\n const timeout = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n return () => clearTimeout(timeout);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n }\n }, []);\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground\",\n option.disabled && \"pointer-events-none opacity-50\",\n value === option.value && \"bg-accent/50\"\n )}\n >\n <span className=\"flex h-4 w-4 items-center justify-center flex-shrink-0 mt-0.5\">\n {value === option.value && <Check className=\"h-4 w-4\" />}\n </span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"truncate\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground truncate\">\n {option.description}\n </div>\n )}\n </div>\n </button>\n );\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n className={cn(\n \"flex h-9 w-full items-center justify-between gap-2 whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !selectedOption && \"text-muted-foreground\",\n className\n )}\n >\n <span className=\"truncate flex-1 text-left\">\n {selectedOption?.label || placeholder}\n </span>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && selectedOption && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n className=\"rounded-sm hover:bg-muted p-0.5\"\n >\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </span>\n )}\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </div>\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[--radix-popover-trigger-width] p-0\"\n align=\"start\"\n sideOffset={4}\n onKeyDown={handleKeyDown}\n >\n {/* Search input */}\n <div className=\"flex items-center border-b border-border px-3\">\n <input\n ref={inputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n className=\"flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch(\"\")}\n className=\"p-1 hover:bg-muted rounded-sm\"\n >\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </button>\n )}\n </div>\n\n {/* Options list */}\n <div className=\"max-h-[300px] overflow-y-auto p-1\">\n {filteredOptions.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n ) : hasGroups ? (\n <>\n {/* Ungrouped options first */}\n {groupedOptions.ungrouped.map(renderOption)}\n\n {/* Grouped options */}\n {Object.entries(groupedOptions.groups).map(([group, opts]) => (\n <div key={group}>\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\">\n {group}\n </div>\n {opts.map(renderOption)}\n </div>\n ))}\n </>\n ) : (\n filteredOptions.map(renderOption)\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport default Autocomplete;\n","/**\n * IconButton Component\n *\n * A consistent icon button primitive for toolbars and actions.\n * Features:\n * - Multiple size variants\n * - Multiple style variants\n * - Consistent hover states\n * - Theme-aware styling\n * - Optional active state\n */\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils/cn\";\n\nconst iconButtonVariants = cva(\n // Base styles\n [\n \"inline-flex items-center justify-center\",\n \"rounded-md\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n /**\n * Default - subtle background with accent on hover\n */\n default: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"border border-transparent\",\n ],\n /**\n * Ghost - no background, accent on hover\n */\n ghost: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n ],\n /**\n * Outline - border with accent on hover\n */\n outline: [\n \"bg-transparent text-muted-foreground\",\n \"border border-border\",\n \"hover:bg-accent hover:text-accent-foreground hover:border-accent\",\n ],\n /**\n * Filled - accent background\n */\n filled: [\n \"bg-accent text-accent-foreground\",\n \"hover:bg-accent/90 hover:shadow-sm\",\n ],\n /**\n * Muted - muted background with accent on hover\n */\n muted: [\n \"bg-muted text-muted-foreground\",\n \"hover:bg-accent hover:text-accent-foreground\",\n ],\n },\n size: {\n /**\n * Small - 32px (8 × 4)\n */\n sm: \"h-8 w-8 [&_svg]:h-4 [&_svg]:w-4\",\n /**\n * Default - 36px (9 × 4)\n */\n default: \"h-9 w-9 [&_svg]:h-4.5 [&_svg]:w-4.5\",\n /**\n * Large - 40px (10 × 4)\n */\n lg: \"h-10 w-10 [&_svg]:h-5 [&_svg]:w-5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface IconButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButtonVariants> {\n /**\n * Whether the button is in an active/selected state\n */\n isActive?: boolean;\n /**\n * Icon element to display (typically from lucide-react)\n */\n icon?: React.ReactNode;\n /**\n * Accessibility label (required if no children)\n */\n \"aria-label\": string;\n}\n\n/**\n * IconButton component\n *\n * A versatile icon button for toolbars and action buttons.\n * Uses consistent hover states across all themes.\n *\n * @example\n * <IconButton\n * icon={<RefreshCw className=\"w-4 h-4\" />}\n * aria-label=\"Refresh\"\n * onClick={handleRefresh}\n * />\n *\n * @example With active state\n * <IconButton\n * icon={<Grid className=\"w-4 h-4\" />}\n * aria-label=\"Grid view\"\n * isActive={viewMode === 'grid'}\n * onClick={() => setViewMode('grid')}\n * />\n */\nconst IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n { className, variant, size, isActive = false, icon, children, ...props },\n ref\n ) => {\n return (\n <button\n className={cn(\n iconButtonVariants({ variant, size }),\n // Active state overrides\n isActive && [\n \"bg-accent text-accent-foreground\",\n // Add subtle shadow for visual feedback\n variant !== \"filled\" && \"shadow-sm\",\n ],\n className\n )}\n ref={ref}\n {...props}\n >\n {icon || children}\n </button>\n );\n }\n);\n\nIconButton.displayName = \"IconButton\";\n\nexport { IconButton, iconButtonVariants };\n","import * as React from \"react\";\nimport { Copy, Check } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\nexport interface CopyButtonProps {\n /**\n * Content to copy to clipboard\n */\n content: string;\n\n /**\n * Additional class names\n */\n className?: string;\n\n /**\n * Size of the button\n */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * CopyButton component\n *\n * A button that copies content to clipboard and shows feedback.\n *\n * @example\n * <CopyButton content=\"Text to copy\" />\n *\n * @example\n * <div className=\"group relative\">\n * <pre>some code</pre>\n * <CopyButton content=\"some code\" className=\"absolute top-2 right-2\" />\n * </div>\n */\nexport function CopyButton({ content, className, size = \"md\" }: CopyButtonProps) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy text: \", err);\n }\n };\n\n const sizeClasses = {\n sm: \"w-6 h-6\",\n md: \"w-8 h-8\",\n lg: \"w-10 h-10\",\n };\n\n const iconSizes = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n return (\n <button\n onClick={handleCopy}\n className={cn(\n \"inline-flex items-center justify-center\",\n \"bg-black/20 hover:bg-black/30\",\n \"text-white/80 hover:text-white\",\n \"rounded-md transition-all duration-200\",\n \"opacity-0 group-hover:opacity-100\",\n \"focus:opacity-100 focus:outline-none\",\n sizeClasses[size],\n className\n )}\n title={copied ? \"Copied!\" : \"Copy to clipboard\"}\n >\n {copied ? (\n <Check size={iconSizes[size]} />\n ) : (\n <Copy size={iconSizes[size]} />\n )}\n </button>\n );\n}\n","/**\n * Theme Presets\n *\n * Built-in theme definitions for opti-ui.\n * Ported from platform-leapfrog for consistent theming.\n */\n\nimport type { Theme } from \"./types\";\n\n/**\n * Green Theme - Alternative theme option\n */\nexport const GREEN_THEME: Theme = {\n id: \"green-theme\",\n name: \"Green Theme\",\n description: \"A green theme with natural, earthy tones\",\n author: \"Leapfrog\",\n background: \"#1a2820\",\n foreground: \"#E6F5EC\",\n card: \"#2d4038\",\n cardForeground: \"#E6F5EC\",\n popover: \"#243630\",\n popoverForeground: \"#E6F5EC\",\n primary: \"#6FCF97\",\n primaryForeground: \"#1a2820\",\n accent: \"#6FCF97\",\n accentForeground: \"#1a2820\",\n secondary: \"#1f3329\",\n secondaryForeground: \"#E6F5EC\",\n muted: \"#354840\",\n mutedForeground: \"#9DB8A8\",\n destructive: \"#EB5757\",\n destructiveForeground: \"#E6F5EC\",\n success: \"#6FCF97\",\n successForeground: \"#1a2820\",\n warning: \"#F2C94C\",\n warningForeground: \"#1a2820\",\n chip: \"#3a5045\",\n chipForeground: \"#C5E3D1\",\n border: \"#243630\",\n input: \"#243630\",\n ring: \"#6FCF97\",\n chart1: \"#6FCF97\",\n chart2: \"#8FE3B0\",\n chart3: \"#9DB8A8\",\n chart4: \"#2d4038\",\n chart5: \"#354840\",\n radius: \"0.5rem\",\n};\n\n/**\n * Optilogic Legacy Theme - Default theme\n */\nexport const OPTILOGIC_LEGACY_THEME: Theme = {\n id: \"optilogic-legacy\",\n name: \"Optilogic Legacy\",\n description: \"Classic Optilogic color scheme with blue accents\",\n author: \"Optilogic\",\n background: \"#FFFFFF\",\n foreground: \"#0C0A5A\",\n card: \"#F9F9F9\",\n cardForeground: \"#0C0A5A\",\n popover: \"#FFFFFF\",\n popoverForeground: \"#0C0A5A\",\n primary: \"#0C0A5A\",\n primaryForeground: \"#FFFFFF\",\n accent: \"#CFD4FB\",\n accentForeground: \"#0C0A5A\",\n secondary: \"#5766F2\",\n secondaryForeground: \"#FFFFFF\",\n muted: \"#E6EAF0\",\n mutedForeground: \"#737272\",\n destructive: \"#DB2828\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#44BD7E\",\n successForeground: \"#FFFFFF\",\n warning: \"#F5CF47\",\n warningForeground: \"#0C0A5A\",\n chip: \"#B8C5F9\",\n chipForeground: \"#0C0A5A\",\n border: \"#D0D0D0\",\n input: \"#FFFFFF\",\n ring: \"#5766F2\",\n chart1: \"#78D237\",\n chart2: \"#F5CF47\",\n chart3: \"#5766F2\",\n chart4: \"#44BD7E\",\n chart5: \"#929BEF\",\n radius: \"0.5rem\",\n};\n\n/**\n * Futuristic Theme - Neon cyberpunk aesthetic\n */\nexport const FUTURISTIC_THEME: Theme = {\n id: \"futuristic\",\n name: \"Futuristic\",\n description: \"Neon cyberpunk aesthetic with electric blues and purples\",\n author: \"Leapfrog\",\n background: \"#0a0e27\",\n foreground: \"#e0e7ff\",\n card: \"#1a1f3a\",\n cardForeground: \"#e0e7ff\",\n popover: \"#1a1f3a\",\n popoverForeground: \"#e0e7ff\",\n primary: \"#6366f1\",\n primaryForeground: \"#ffffff\",\n accent: \"#8b5cf6\",\n accentForeground: \"#ffffff\",\n secondary: \"#1e293b\",\n secondaryForeground: \"#e0e7ff\",\n muted: \"#1e293b\",\n mutedForeground: \"#94a3b8\",\n destructive: \"#ef4444\",\n destructiveForeground: \"#ffffff\",\n success: \"#10b981\",\n successForeground: \"#ffffff\",\n warning: \"#f59e0b\",\n warningForeground: \"#ffffff\",\n chip: \"#312e81\",\n chipForeground: \"#c7d2fe\",\n border: \"#1e293b\",\n input: \"#1e293b\",\n ring: \"#6366f1\",\n chart1: \"#6366f1\",\n chart2: \"#8b5cf6\",\n chart3: \"#a855f7\",\n chart4: \"#ec4899\",\n chart5: \"#f43f5e\",\n radius: \"0.5rem\",\n};\n\n/**\n * Nature Inspired Theme - Earthy greens and browns\n */\nexport const NATURE_THEME: Theme = {\n id: \"nature\",\n name: \"Nature Inspired\",\n description: \"Earthy greens and browns inspired by forests and meadows\",\n author: \"Leapfrog\",\n background: \"#1a2e1a\",\n foreground: \"#e8f5e9\",\n card: \"#2d4a2d\",\n cardForeground: \"#e8f5e9\",\n popover: \"#243824\",\n popoverForeground: \"#e8f5e9\",\n primary: \"#4caf50\",\n primaryForeground: \"#1a2e1a\",\n accent: \"#66bb6a\",\n accentForeground: \"#1a2e1a\",\n secondary: \"#2d4a2d\",\n secondaryForeground: \"#e8f5e9\",\n muted: \"#3d5a3d\",\n mutedForeground: \"#a5d6a7\",\n destructive: \"#e57373\",\n destructiveForeground: \"#ffffff\",\n success: \"#66bb6a\",\n successForeground: \"#1a2e1a\",\n warning: \"#ffb74d\",\n warningForeground: \"#1a2e1a\",\n chip: \"#3d5a3d\",\n chipForeground: \"#c8e6c9\",\n border: \"#243824\",\n input: \"#243824\",\n ring: \"#4caf50\",\n chart1: \"#4caf50\",\n chart2: \"#66bb6a\",\n chart3: \"#81c784\",\n chart4: \"#a5d6a7\",\n chart5: \"#c8e6c9\",\n radius: \"0.5rem\",\n};\n\n/**\n * Sci-Fi Theme - Deep space with vibrant accents\n */\nexport const SCIFI_THEME: Theme = {\n id: \"scifi\",\n name: \"Sci-Fi\",\n description: \"Deep space aesthetic with vibrant cyan and magenta accents\",\n author: \"Leapfrog\",\n background: \"#0d1117\",\n foreground: \"#c9d1d9\",\n card: \"#161b22\",\n cardForeground: \"#c9d1d9\",\n popover: \"#161b22\",\n popoverForeground: \"#c9d1d9\",\n primary: \"#00d9ff\",\n primaryForeground: \"#0d1117\",\n accent: \"#ff00ff\",\n accentForeground: \"#ffffff\",\n secondary: \"#1c2128\",\n secondaryForeground: \"#c9d1d9\",\n muted: \"#21262d\",\n mutedForeground: \"#8b949e\",\n destructive: \"#ff6b6b\",\n destructiveForeground: \"#ffffff\",\n success: \"#00ff88\",\n successForeground: \"#0d1117\",\n warning: \"#ffd93d\",\n warningForeground: \"#0d1117\",\n chip: \"#1c2128\",\n chipForeground: \"#58a6ff\",\n border: \"#30363d\",\n input: \"#21262d\",\n ring: \"#00d9ff\",\n chart1: \"#00d9ff\",\n chart2: \"#ff00ff\",\n chart3: \"#00ff88\",\n chart4: \"#ffd93d\",\n chart5: \"#58a6ff\",\n radius: \"0.5rem\",\n};\n\n/**\n * Ocean Theme - Calming blues and teals\n */\nexport const OCEAN_THEME: Theme = {\n id: \"ocean\",\n name: \"Ocean\",\n description: \"Calming blues and teals inspired by the deep sea\",\n author: \"Leapfrog\",\n background: \"#0a1929\",\n foreground: \"#e3f2fd\",\n card: \"#132f4c\",\n cardForeground: \"#e3f2fd\",\n popover: \"#0f2540\",\n popoverForeground: \"#e3f2fd\",\n primary: \"#2196f3\",\n primaryForeground: \"#ffffff\",\n accent: \"#00bcd4\",\n accentForeground: \"#0a1929\",\n secondary: \"#1565c0\",\n secondaryForeground: \"#ffffff\",\n muted: \"#1e3a5f\",\n mutedForeground: \"#90caf9\",\n destructive: \"#f44336\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#ff9800\",\n warningForeground: \"#ffffff\",\n chip: \"#1565c0\",\n chipForeground: \"#bbdefb\",\n border: \"#1e3a5f\",\n input: \"#1e3a5f\",\n ring: \"#2196f3\",\n chart1: \"#2196f3\",\n chart2: \"#00bcd4\",\n chart3: \"#03a9f4\",\n chart4: \"#0288d1\",\n chart5: \"#0277bd\",\n radius: \"0.5rem\",\n};\n\n/**\n * Sunset Theme - Warm oranges and purples\n */\nexport const SUNSET_THEME: Theme = {\n id: \"sunset\",\n name: \"Sunset\",\n description: \"Warm oranges and purples like a beautiful sunset\",\n author: \"Leapfrog\",\n background: \"#1a0d1a\",\n foreground: \"#ffe0e6\",\n card: \"#2d1a2d\",\n cardForeground: \"#ffe0e6\",\n popover: \"#241424\",\n popoverForeground: \"#ffe0e6\",\n primary: \"#ff6b35\",\n primaryForeground: \"#ffffff\",\n accent: \"#c44569\",\n accentForeground: \"#ffffff\",\n secondary: \"#f7931e\",\n secondaryForeground: \"#1a0d1a\",\n muted: \"#3d2a3d\",\n mutedForeground: \"#ffb3c1\",\n destructive: \"#e63946\",\n destructiveForeground: \"#ffffff\",\n success: \"#06d6a0\",\n successForeground: \"#1a0d1a\",\n warning: \"#ffb703\",\n warningForeground: \"#1a0d1a\",\n chip: \"#3d2a3d\",\n chipForeground: \"#ffb3c1\",\n border: \"#241424\",\n input: \"#241424\",\n ring: \"#ff6b35\",\n chart1: \"#ff6b35\",\n chart2: \"#c44569\",\n chart3: \"#f7931e\",\n chart4: \"#ffb703\",\n chart5: \"#ff8c42\",\n radius: \"0.5rem\",\n};\n\n/**\n * Forest Theme - Deep greens and browns\n */\nexport const FOREST_THEME: Theme = {\n id: \"forest\",\n name: \"Forest\",\n description: \"Deep greens and browns like an ancient forest\",\n author: \"Leapfrog\",\n background: \"#0d1b0d\",\n foreground: \"#e8f5e9\",\n card: \"#1a2e1a\",\n cardForeground: \"#e8f5e9\",\n popover: \"#152515\",\n popoverForeground: \"#e8f5e9\",\n primary: \"#2e7d32\",\n primaryForeground: \"#ffffff\",\n accent: \"#558b2f\",\n accentForeground: \"#ffffff\",\n secondary: \"#1b5e20\",\n secondaryForeground: \"#e8f5e9\",\n muted: \"#2d4a2d\",\n mutedForeground: \"#a5d6a7\",\n destructive: \"#c62828\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#f57c00\",\n warningForeground: \"#ffffff\",\n chip: \"#2d4a2d\",\n chipForeground: \"#c8e6c9\",\n border: \"#1b5e20\",\n input: \"#1a2e1a\",\n ring: \"#2e7d32\",\n chart1: \"#2e7d32\",\n chart2: \"#388e3c\",\n chart3: \"#43a047\",\n chart4: \"#66bb6a\",\n chart5: \"#81c784\",\n radius: \"0.5rem\",\n};\n\n/**\n * Cyberpunk Theme - Neon pinks and cyans\n */\nexport const CYBERPUNK_THEME: Theme = {\n id: \"cyberpunk\",\n name: \"Cyberpunk\",\n description: \"Neon pinks and cyans with high contrast\",\n author: \"Leapfrog\",\n background: \"#0a0a0f\",\n foreground: \"#f0f0f0\",\n card: \"#1a1a2e\",\n cardForeground: \"#f0f0f0\",\n popover: \"#16213e\",\n popoverForeground: \"#f0f0f0\",\n primary: \"#ff00ff\",\n primaryForeground: \"#ffffff\",\n accent: \"#00ffff\",\n accentForeground: \"#0a0a0f\",\n secondary: \"#16213e\",\n secondaryForeground: \"#f0f0f0\",\n muted: \"#1a1a2e\",\n mutedForeground: \"#a0a0a0\",\n destructive: \"#ff1744\",\n destructiveForeground: \"#ffffff\",\n success: \"#00ff88\",\n successForeground: \"#0a0a0f\",\n warning: \"#ffd700\",\n warningForeground: \"#0a0a0f\",\n chip: \"#16213e\",\n chipForeground: \"#ff00ff\",\n border: \"#1a1a2e\",\n input: \"#16213e\",\n ring: \"#ff00ff\",\n chart1: \"#ff00ff\",\n chart2: \"#00ffff\",\n chart3: \"#00ff88\",\n chart4: \"#ffd700\",\n chart5: \"#ff1744\",\n radius: \"0.5rem\",\n};\n\n/**\n * Minimalist Light Theme - Clean and simple\n */\nexport const MINIMALIST_LIGHT_THEME: Theme = {\n id: \"minimalist-light\",\n name: \"Minimalist Light\",\n description: \"Clean and simple light theme with subtle grays\",\n author: \"Leapfrog\",\n background: \"#ffffff\",\n foreground: \"#1a1a1a\",\n card: \"#f8f9fa\",\n cardForeground: \"#1a1a1a\",\n popover: \"#ffffff\",\n popoverForeground: \"#1a1a1a\",\n primary: \"#000000\",\n primaryForeground: \"#ffffff\",\n accent: \"#e9ecef\",\n accentForeground: \"#1a1a1a\",\n secondary: \"#f1f3f5\",\n secondaryForeground: \"#1a1a1a\",\n muted: \"#e9ecef\",\n mutedForeground: \"#6c757d\",\n destructive: \"#dc3545\",\n destructiveForeground: \"#ffffff\",\n success: \"#28a745\",\n successForeground: \"#ffffff\",\n warning: \"#ffc107\",\n warningForeground: \"#1a1a1a\",\n chip: \"#e9ecef\",\n chipForeground: \"#495057\",\n border: \"#dee2e6\",\n input: \"#ffffff\",\n ring: \"#000000\",\n chart1: \"#000000\",\n chart2: \"#6c757d\",\n chart3: \"#adb5bd\",\n chart4: \"#dee2e6\",\n chart5: \"#e9ecef\",\n radius: \"0.5rem\",\n};\n\n/**\n * Dark Elegant Theme - Sophisticated dark mode\n */\nexport const DARK_ELEGANT_THEME: Theme = {\n id: \"dark-elegant\",\n name: \"Dark Elegant\",\n description: \"Sophisticated dark mode with refined colors\",\n author: \"Leapfrog\",\n background: \"#121212\",\n foreground: \"#e0e0e0\",\n card: \"#1e1e1e\",\n cardForeground: \"#e0e0e0\",\n popover: \"#1e1e1e\",\n popoverForeground: \"#e0e0e0\",\n primary: \"#bb86fc\",\n primaryForeground: \"#121212\",\n accent: \"#03dac6\",\n accentForeground: \"#121212\",\n secondary: \"#2d2d2d\",\n secondaryForeground: \"#e0e0e0\",\n muted: \"#2d2d2d\",\n mutedForeground: \"#9e9e9e\",\n destructive: \"#cf6679\",\n destructiveForeground: \"#ffffff\",\n success: \"#4caf50\",\n successForeground: \"#ffffff\",\n warning: \"#ff9800\",\n warningForeground: \"#ffffff\",\n chip: \"#2d2d2d\",\n chipForeground: \"#b39ddb\",\n border: \"#2d2d2d\",\n input: \"#1e1e1e\",\n ring: \"#bb86fc\",\n chart1: \"#bb86fc\",\n chart2: \"#03dac6\",\n chart3: \"#4caf50\",\n chart4: \"#ff9800\",\n chart5: \"#cf6679\",\n radius: \"0.5rem\",\n};\n\n/**\n * All available preset themes\n */\nexport const PRESET_THEMES: Theme[] = [OPTILOGIC_LEGACY_THEME];\n\n/**\n * All theme suggestions for preview\n */\nexport const ALL_THEMES: Theme[] = [\n OPTILOGIC_LEGACY_THEME,\n FUTURISTIC_THEME,\n NATURE_THEME,\n SCIFI_THEME,\n OCEAN_THEME,\n SUNSET_THEME,\n FOREST_THEME,\n CYBERPUNK_THEME,\n MINIMALIST_LIGHT_THEME,\n DARK_ELEGANT_THEME,\n GREEN_THEME,\n];\n\n/**\n * Get a preset theme by ID\n */\nexport function getPresetTheme(id: string): Theme | undefined {\n return ALL_THEMES.find((theme) => theme.id === id);\n}\n\n/**\n * Get the default theme (fallback)\n */\nexport function getDefaultTheme(): Theme {\n return OPTILOGIC_LEGACY_THEME;\n}\n\n/**\n * Check if a theme is a preset (not user-created)\n */\nexport function isPresetTheme(themeId: string): boolean {\n return ALL_THEMES.some((theme) => theme.id === themeId);\n}\n","/**\n * Theme Utilities\n *\n * Functions for theme conversion and application.\n * Ported from platform-leapfrog for consistent theming.\n */\n\nimport type { Theme, ThemeHSL } from \"./types\";\nimport { getDefaultTheme } from \"./presets\";\n\n// Re-export for convenience\nexport type { Theme };\n\n/**\n * Convert hex color to HSL format for CSS variables\n */\nexport function hexToHsl(hex: string): string {\n // Remove # if present\n hex = hex.replace(/^#/, \"\");\n\n // Parse hex values\n const r = parseInt(hex.substring(0, 2), 16) / 255;\n const g = parseInt(hex.substring(2, 4), 16) / 255;\n const b = parseInt(hex.substring(4, 6), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n // Convert to degrees and percentages\n const hDeg = Math.round(h * 360);\n const sPercent = Math.round(s * 100);\n const lPercent = Math.round(l * 100);\n\n return `${hDeg} ${sPercent}% ${lPercent}%`;\n}\n\n/**\n * Convert hex theme to HSL theme\n */\nexport function themeToHsl(theme: Theme): ThemeHSL {\n return {\n ...theme,\n background: hexToHsl(theme.background),\n foreground: hexToHsl(theme.foreground),\n card: hexToHsl(theme.card),\n cardForeground: hexToHsl(theme.cardForeground),\n popover: hexToHsl(theme.popover),\n popoverForeground: hexToHsl(theme.popoverForeground),\n primary: hexToHsl(theme.primary),\n primaryForeground: hexToHsl(theme.primaryForeground),\n accent: hexToHsl(theme.accent),\n accentForeground: hexToHsl(theme.accentForeground),\n secondary: hexToHsl(theme.secondary),\n secondaryForeground: hexToHsl(theme.secondaryForeground),\n muted: hexToHsl(theme.muted),\n mutedForeground: hexToHsl(theme.mutedForeground),\n destructive: hexToHsl(theme.destructive),\n destructiveForeground: hexToHsl(theme.destructiveForeground),\n success: hexToHsl(theme.success),\n successForeground: hexToHsl(theme.successForeground),\n warning: hexToHsl(theme.warning),\n warningForeground: hexToHsl(theme.warningForeground),\n chip: hexToHsl(theme.chip),\n chipForeground: hexToHsl(theme.chipForeground),\n border: hexToHsl(theme.border),\n input: hexToHsl(theme.input),\n ring: hexToHsl(theme.ring),\n chart1: hexToHsl(theme.chart1),\n chart2: hexToHsl(theme.chart2),\n chart3: hexToHsl(theme.chart3),\n chart4: hexToHsl(theme.chart4),\n chart5: hexToHsl(theme.chart5),\n };\n}\n\n/**\n * Apply a theme to the DOM\n *\n * @param theme - The theme to apply\n * @param targetElement - Optional element to apply theme to (defaults to document.documentElement)\n */\nexport function applyTheme(theme: Theme, targetElement?: HTMLElement): void {\n const element = targetElement || document.documentElement;\n const hslTheme = themeToHsl(theme);\n\n // Set CSS variables as inline styles\n element.style.setProperty(\"--background\", hslTheme.background);\n element.style.setProperty(\"--foreground\", hslTheme.foreground);\n element.style.setProperty(\"--card\", hslTheme.card);\n element.style.setProperty(\"--card-foreground\", hslTheme.cardForeground);\n element.style.setProperty(\"--popover\", hslTheme.popover);\n element.style.setProperty(\"--popover-foreground\", hslTheme.popoverForeground);\n element.style.setProperty(\"--primary\", hslTheme.primary);\n element.style.setProperty(\"--primary-foreground\", hslTheme.primaryForeground);\n element.style.setProperty(\"--accent\", hslTheme.accent);\n element.style.setProperty(\"--accent-foreground\", hslTheme.accentForeground);\n element.style.setProperty(\"--secondary\", hslTheme.secondary);\n element.style.setProperty(\n \"--secondary-foreground\",\n hslTheme.secondaryForeground\n );\n element.style.setProperty(\"--muted\", hslTheme.muted);\n element.style.setProperty(\"--muted-foreground\", hslTheme.mutedForeground);\n element.style.setProperty(\"--destructive\", hslTheme.destructive);\n element.style.setProperty(\n \"--destructive-foreground\",\n hslTheme.destructiveForeground\n );\n element.style.setProperty(\"--success\", hslTheme.success);\n element.style.setProperty(\"--success-foreground\", hslTheme.successForeground);\n element.style.setProperty(\"--warning\", hslTheme.warning);\n element.style.setProperty(\"--warning-foreground\", hslTheme.warningForeground);\n element.style.setProperty(\"--chip\", hslTheme.chip);\n element.style.setProperty(\"--chip-foreground\", hslTheme.chipForeground);\n element.style.setProperty(\"--border\", hslTheme.border);\n element.style.setProperty(\"--input\", hslTheme.input);\n element.style.setProperty(\"--ring\", hslTheme.ring);\n element.style.setProperty(\"--chart-1\", hslTheme.chart1);\n element.style.setProperty(\"--chart-2\", hslTheme.chart2);\n element.style.setProperty(\"--chart-3\", hslTheme.chart3);\n element.style.setProperty(\"--chart-4\", hslTheme.chart4);\n element.style.setProperty(\"--chart-5\", hslTheme.chart5);\n\n if (theme.radius) {\n element.style.setProperty(\"--radius\", theme.radius);\n }\n}\n\n/**\n * Get the currently active theme (uses default)\n */\nexport function getCurrentTheme(): Theme {\n return getDefaultTheme();\n}\n\n/**\n * Validate theme object structure\n */\nexport function validateTheme(theme: unknown): theme is Theme {\n if (!theme || typeof theme !== \"object\") return false;\n\n const t = theme as Record<string, unknown>;\n\n // Check required fields\n const requiredFields: string[] = [\n \"id\",\n \"name\",\n \"background\",\n \"foreground\",\n \"card\",\n \"cardForeground\",\n \"popover\",\n \"popoverForeground\",\n \"primary\",\n \"primaryForeground\",\n \"accent\",\n \"accentForeground\",\n \"secondary\",\n \"secondaryForeground\",\n \"muted\",\n \"mutedForeground\",\n \"destructive\",\n \"destructiveForeground\",\n \"success\",\n \"successForeground\",\n \"warning\",\n \"warningForeground\",\n \"chip\",\n \"chipForeground\",\n \"border\",\n \"input\",\n \"ring\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n ];\n\n for (const field of requiredFields) {\n if (!(field in t)) {\n console.error(`Theme validation failed: missing field \"${field}\"`);\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Clone a theme (for editing)\n */\nexport function cloneTheme(theme: Theme, newName?: string): Theme {\n return {\n ...theme,\n id: `custom-${Date.now()}`,\n name: newName || `${theme.name} - copy`,\n author: \"Custom\",\n };\n}\n\n/**\n * Deep comparison of two themes\n */\nexport function areThemesEqual(theme1: Theme, theme2: Theme): boolean {\n if (!theme1 || !theme2) return false;\n\n if (theme1.name !== theme2.name) return false;\n if (theme1.description !== theme2.description) return false;\n\n const colorFields: (keyof Theme)[] = [\n \"background\",\n \"foreground\",\n \"card\",\n \"cardForeground\",\n \"popover\",\n \"popoverForeground\",\n \"primary\",\n \"primaryForeground\",\n \"accent\",\n \"accentForeground\",\n \"secondary\",\n \"secondaryForeground\",\n \"muted\",\n \"mutedForeground\",\n \"destructive\",\n \"destructiveForeground\",\n \"success\",\n \"successForeground\",\n \"warning\",\n \"warningForeground\",\n \"chip\",\n \"chipForeground\",\n \"border\",\n \"input\",\n \"ring\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n ];\n\n for (const field of colorFields) {\n if (theme1[field] !== theme2[field]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Export theme as JSON string\n */\nexport function exportTheme(theme: Theme): string {\n return JSON.stringify(theme, null, 2);\n}\n\n/**\n * Import theme from JSON string\n */\nexport function importTheme(jsonString: string): {\n success: boolean;\n theme?: Theme;\n error?: string;\n} {\n try {\n const theme = JSON.parse(jsonString);\n\n if (!validateTheme(theme)) {\n return {\n success: false,\n error:\n \"Invalid theme format. Please check that all required fields are present.\",\n };\n }\n\n return {\n success: true,\n theme,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Failed to parse JSON\",\n };\n }\n}\n","/**\n * ThemePicker Component\n *\n * A polished theme selection component built with library primitives.\n * Features:\n * - Visual theme swatches showing color palette preview\n * - Popover-based selection dropdown\n * - Current theme indicator\n * - Keyboard accessible\n * - Smooth theme transitions\n */\n\nimport * as React from \"react\";\nimport { Palette, Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\nimport { IconButton } from \"./icon-button\";\nimport { Button } from \"./button\";\nimport { Tooltip } from \"./tooltip\";\nimport { ALL_THEMES, applyTheme, type Theme } from \"../theme\";\n\nexport interface ThemePickerProps {\n /** Currently selected theme (controlled) */\n value?: Theme;\n /** Callback when theme changes */\n onValueChange?: (theme: Theme) => void;\n /** Available themes to choose from */\n themes?: Theme[];\n /** Trigger style variant */\n triggerVariant?: \"icon\" | \"button\";\n /** Size of the trigger */\n triggerSize?: \"sm\" | \"default\" | \"lg\";\n /** Whether to apply the theme to the DOM when selected */\n applyOnSelect?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Alignment of the popover */\n align?: \"start\" | \"center\" | \"end\";\n /** Side of the popover */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\n/**\n * Theme swatch component showing a preview of theme colors\n */\ninterface ThemeSwatchProps {\n theme: Theme;\n isSelected: boolean;\n onClick: () => void;\n}\n\nfunction ThemeSwatch({ theme, isSelected, onClick }: ThemeSwatchProps) {\n return (\n <Tooltip\n content={\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{theme.name}</p>\n {theme.description && (\n <p className=\"text-xs text-muted-foreground\">{theme.description}</p>\n )}\n </div>\n }\n position=\"bottom\"\n delayDuration={300}\n >\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"relative flex flex-col items-center gap-1.5 p-2 rounded-lg transition-all\",\n \"hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n isSelected && \"bg-accent ring-2 ring-primary\"\n )}\n >\n <div\n className=\"relative w-12 h-8 rounded-md overflow-hidden border border-border shadow-sm\"\n style={{ backgroundColor: theme.background }}\n >\n <div\n className=\"absolute bottom-0 left-0 right-0 h-2\"\n style={{ backgroundColor: theme.primary }}\n />\n <div\n className=\"absolute top-1 right-1 w-2 h-2 rounded-full\"\n style={{ backgroundColor: theme.accent }}\n />\n <div\n className=\"absolute top-1 left-1 w-4 h-1 rounded-full\"\n style={{ backgroundColor: theme.foreground }}\n />\n </div>\n \n <span className=\"text-xs font-medium text-foreground truncate max-w-[60px]\">\n {theme.name.split(\" \")[0]}\n </span>\n \n {isSelected && (\n <div className=\"absolute -top-1 -right-1 w-4 h-4 bg-primary rounded-full flex items-center justify-center\">\n <Check className=\"w-2.5 h-2.5 text-primary-foreground\" />\n </div>\n )}\n </button>\n </Tooltip>\n );\n}\n\n/**\n * ThemePicker Component\n *\n * A theme selection dropdown that displays available themes as visual swatches.\n *\n * @example Basic usage\n * ```tsx\n * <ThemePicker onValueChange={(theme) => console.log(theme)} />\n * ```\n *\n * @example Controlled with custom themes\n * ```tsx\n * const [theme, setTheme] = useState(OPTILOGIC_LEGACY_THEME);\n * <ThemePicker\n * value={theme}\n * onValueChange={setTheme}\n * themes={[OPTILOGIC_LEGACY_THEME, DARK_ELEGANT_THEME]}\n * />\n * ```\n */\nexport function ThemePicker({\n value,\n onValueChange,\n themes = ALL_THEMES,\n triggerVariant = \"icon\",\n triggerSize = \"default\",\n applyOnSelect = true,\n className,\n align = \"end\",\n side = \"bottom\",\n}: ThemePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [selectedTheme, setSelectedTheme] = React.useState<Theme | undefined>(\n value || themes[0]\n );\n\n React.useEffect(() => {\n if (value) {\n setSelectedTheme(value);\n }\n }, [value]);\n\n const handleThemeSelect = (theme: Theme) => {\n setSelectedTheme(theme);\n \n if (applyOnSelect) {\n applyTheme(theme);\n }\n \n onValueChange?.(theme);\n setOpen(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) return;\n\n const currentIndex = themes.findIndex((t) => t.id === selectedTheme?.id);\n \n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n e.preventDefault();\n const nextIndex = (currentIndex + 1) % themes.length;\n handleThemeSelect(themes[nextIndex]);\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n e.preventDefault();\n const prevIndex = currentIndex <= 0 ? themes.length - 1 : currentIndex - 1;\n handleThemeSelect(themes[prevIndex]);\n break;\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n {triggerVariant === \"icon\" ? (\n <IconButton\n variant=\"ghost\"\n size={triggerSize}\n aria-label=\"Select theme\"\n className={className}\n >\n <Palette className=\"w-4 h-4\" />\n </IconButton>\n ) : (\n <Button\n variant=\"outline\"\n size={triggerSize === \"lg\" ? \"default\" : triggerSize}\n className={cn(\"gap-2\", className)}\n >\n <Palette className=\"w-4 h-4\" />\n <span>{selectedTheme?.name || \"Theme\"}</span>\n </Button>\n )}\n </PopoverTrigger>\n \n <PopoverContent\n align={align}\n side={side}\n className=\"w-auto p-3\"\n onKeyDown={handleKeyDown}\n >\n <div className=\"space-y-3\">\n <div className=\"px-1\">\n <h4 className=\"text-sm font-medium\">Select Theme</h4>\n <p className=\"text-xs text-muted-foreground\">\n Choose a color theme for the interface\n </p>\n </div>\n \n <div className=\"grid grid-cols-4 gap-1\">\n {themes.map((theme) => (\n <ThemeSwatch\n key={theme.id}\n theme={theme}\n isSelected={selectedTheme?.id === theme.id}\n onClick={() => handleThemeSelect(theme)}\n />\n ))}\n </div>\n \n {selectedTheme && (\n <div className=\"pt-2 border-t border-border\">\n <div className=\"flex items-center gap-2 px-1\">\n <div\n className=\"w-4 h-4 rounded-full border border-border\"\n style={{ backgroundColor: selectedTheme.primary }}\n />\n <span className=\"text-sm font-medium\">{selectedTheme.name}</span>\n </div>\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n","/**\n * ContextMenu Component\n *\n * Unified context menu primitive with support for:\n * - Icons\n * - Keyboard shortcuts\n * - Nested submenus\n * - Dividers\n * - Destructive actions\n * - Disabled states\n */\n\nimport * as React from \"react\";\nimport { ChevronRight, type LucideIcon } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\n\n/**\n * Context menu item definition\n */\nexport interface ContextMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon component */\n icon?: LucideIcon;\n /** Click handler (ignored if has submenu) */\n action?: () => void;\n /** Keyboard shortcut display text */\n shortcut?: string;\n /** Whether item is disabled */\n disabled?: boolean;\n /** Whether to show as destructive/danger action */\n destructive?: boolean;\n /** Show divider line after this item */\n divider?: boolean;\n /** Nested submenu items */\n submenu?: ContextMenuItem[];\n}\n\nexport interface ContextMenuProps {\n /** Menu items */\n items: ContextMenuItem[];\n /** Whether menu is open */\n isOpen: boolean;\n /** Close handler */\n onClose: () => void;\n /** Menu position (x, y) */\n position: { x: number; y: number };\n /** Anchor element (alternative to position) */\n anchorEl?: HTMLElement | null;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Calculate safe menu position to keep it within viewport\n */\nfunction getSafePosition(\n x: number,\n y: number,\n menuWidth: number,\n menuHeight: number\n): { x: number; y: number } {\n const padding = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n let safeX = x;\n let safeY = y;\n\n if (x + menuWidth > viewportWidth - padding) {\n safeX = viewportWidth - menuWidth - padding;\n }\n if (safeX < padding) {\n safeX = padding;\n }\n\n if (y + menuHeight > viewportHeight - padding) {\n safeY = viewportHeight - menuHeight - padding;\n }\n if (safeY < padding) {\n safeY = padding;\n }\n\n return { x: safeX, y: safeY };\n}\n\n/**\n * Individual menu item component with submenu support\n */\ninterface MenuItemProps {\n item: ContextMenuItem;\n onClose: () => void;\n depth?: number;\n}\n\nfunction MenuItem({ item, onClose, depth = 0 }: MenuItemProps) {\n const [isSubmenuOpen, setIsSubmenuOpen] = React.useState(false);\n const [submenuPosition, setSubmenuPosition] = React.useState<{\n x: number;\n y: number;\n } | null>(null);\n const itemRef = React.useRef<HTMLButtonElement>(null);\n const hoverTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const hasSubmenu = item.submenu && item.submenu.length > 0;\n\n React.useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n };\n }, []);\n\n const handleMouseEnter = React.useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n\n if (hasSubmenu && itemRef.current) {\n const rect = itemRef.current.getBoundingClientRect();\n const submenuWidth = 200;\n const submenuHeight = (item.submenu?.length || 0) * 40;\n\n const spaceOnRight = window.innerWidth - rect.right;\n const posX =\n spaceOnRight > submenuWidth\n ? rect.right - 4\n : rect.left - submenuWidth + 4;\n\n const { x, y } = getSafePosition(\n posX,\n rect.top,\n submenuWidth,\n submenuHeight\n );\n setSubmenuPosition({ x, y });\n setIsSubmenuOpen(true);\n }\n }, [hasSubmenu, item.submenu?.length]);\n\n const handleMouseLeave = React.useCallback(() => {\n hoverTimeoutRef.current = setTimeout(() => {\n setIsSubmenuOpen(false);\n }, 100);\n }, []);\n\n const handleSubmenuMouseEnter = React.useCallback(() => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n }, []);\n\n const handleSubmenuMouseLeave = React.useCallback(() => {\n hoverTimeoutRef.current = setTimeout(() => {\n setIsSubmenuOpen(false);\n }, 100);\n }, []);\n\n const handleClick = React.useCallback(() => {\n if (item.disabled) return;\n\n if (!hasSubmenu && item.action) {\n item.action();\n onClose();\n }\n }, [item, hasSubmenu, onClose]);\n\n if (item.divider && !item.label) {\n return <div className=\"my-1 h-px bg-border\" />;\n }\n\n return (\n <div className=\"relative\" onMouseLeave={handleMouseLeave}>\n <button\n ref={itemRef}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n disabled={item.disabled}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 text-sm rounded-sm\",\n \"transition-colors text-left\",\n \"focus:outline-none focus:bg-accent focus:text-accent-foreground\",\n item.disabled\n ? \"opacity-50 cursor-not-allowed text-muted-foreground\"\n : \"hover:bg-accent hover:text-accent-foreground cursor-pointer\",\n item.destructive &&\n !item.disabled &&\n \"text-destructive hover:text-destructive\"\n )}\n >\n {item.icon && (\n <item.icon\n className={cn(\n \"w-4 h-4 flex-shrink-0\",\n item.destructive && !item.disabled && \"text-destructive\"\n )}\n />\n )}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.shortcut && (\n <span className=\"ml-auto text-xs text-muted-foreground opacity-60\">\n {item.shortcut}\n </span>\n )}\n {hasSubmenu && (\n <ChevronRight className=\"w-4 h-4 flex-shrink-0 ml-2 text-muted-foreground\" />\n )}\n </button>\n\n {item.divider && <div className=\"my-1 h-px bg-border\" />}\n\n {hasSubmenu && isSubmenuOpen && submenuPosition && (\n <div\n className={cn(\n \"fixed z-[60] min-w-[180px] max-w-[280px]\",\n \"rounded-md border border-border\",\n \"bg-popover text-popover-foreground\",\n \"shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"p-1\"\n )}\n style={{\n left: `${submenuPosition.x}px`,\n top: `${submenuPosition.y}px`,\n }}\n onMouseEnter={handleSubmenuMouseEnter}\n onMouseLeave={handleSubmenuMouseLeave}\n >\n {item.submenu!.map((subItem) => (\n <MenuItem\n key={subItem.id}\n item={subItem}\n onClose={onClose}\n depth={depth + 1}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * ContextMenu component\n *\n * A unified context menu with support for icons, shortcuts, submenus, and more.\n *\n * @example\n * const { isOpen, position, openMenu, closeMenu } = useContextMenu();\n *\n * <div onContextMenu={(e) => {\n * e.preventDefault();\n * openMenu(e.clientX, e.clientY, item);\n * }}>\n * Right click me\n * </div>\n *\n * <ContextMenu\n * isOpen={isOpen}\n * position={position}\n * onClose={closeMenu}\n * items={[\n * { id: 'edit', label: 'Edit', icon: Edit, action: handleEdit },\n * { id: 'delete', label: 'Delete', icon: Trash, destructive: true, action: handleDelete },\n * ]}\n * />\n */\nexport function ContextMenu({\n items,\n isOpen,\n onClose,\n position,\n anchorEl,\n className,\n}: ContextMenuProps) {\n const menuRef = React.useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = React.useState<{ x: number; y: number }>({\n x: 0,\n y: 0,\n });\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n let x = position.x;\n let y = position.y;\n\n if (anchorEl) {\n const rect = anchorEl.getBoundingClientRect();\n x = rect.left;\n y = rect.bottom + 4;\n }\n\n requestAnimationFrame(() => {\n if (menuRef.current) {\n const menuRect = menuRef.current.getBoundingClientRect();\n const safePos = getSafePosition(x, y, menuRect.width, menuRect.height);\n setMenuPosition(safePos);\n } else {\n setMenuPosition({ x, y });\n }\n });\n }, [isOpen, position, anchorEl]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={menuRef}\n className={cn(\n \"fixed z-50 min-w-[180px] max-w-[280px]\",\n \"rounded-md border border-border\",\n \"bg-popover text-popover-foreground\",\n \"shadow-lg\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"p-1\",\n className\n )}\n style={{\n left: `${menuPosition.x}px`,\n top: `${menuPosition.y}px`,\n }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n >\n {items.map((item) => (\n <MenuItem key={item.id} item={item} onClose={onClose} />\n ))}\n </div>\n );\n}\n\n/**\n * Hook to manage context menu state\n */\nexport interface UseContextMenuResult<T = unknown> {\n /** Whether menu is open */\n isOpen: boolean;\n /** Menu position */\n position: { x: number; y: number };\n /** Target item that was right-clicked */\n targetItem: T | null;\n /** Ref for the menu element */\n menuRef: React.RefObject<HTMLDivElement | null>;\n /** Open the context menu */\n openMenu: (x: number, y: number, item: T) => void;\n /** Close the context menu */\n closeMenu: () => void;\n}\n\nexport function useContextMenu<T = unknown>(): UseContextMenuResult<T> {\n const [isOpen, setIsOpen] = React.useState(false);\n const [position, setPosition] = React.useState({ x: 0, y: 0 });\n const [targetItem, setTargetItem] = React.useState<T | null>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n const openMenu = React.useCallback((x: number, y: number, item: T) => {\n setPosition({ x, y });\n setTargetItem(item);\n setIsOpen(true);\n }, []);\n\n const closeMenu = React.useCallback(() => {\n setIsOpen(false);\n setTargetItem(null);\n }, []);\n\n return {\n isOpen,\n position,\n targetItem,\n menuRef,\n openMenu,\n closeMenu,\n };\n}\n\nexport default ContextMenu;\n"]}
|