@optilogic/core 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +91 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -2
- package/dist/index.d.ts +15 -2
- package/dist/index.js +91 -26
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/data-grid/DataGrid.tsx +81 -25
- package/src/components/data-grid/components/HeaderCell.tsx +5 -1
- package/src/components/data-grid/hooks/useColumnResize.ts +30 -1
- package/src/components/data-grid/types.ts +5 -0
package/dist/index.cjs.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/board.tsx","../src/components/table.tsx","../src/components/loading-spinner.tsx","../src/components/data-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/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/multi-select.tsx","../src/components/combobox.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","../src/components/file-view/utils/contentTypeDetection.ts","../src/components/file-view/hooks/useContentType.ts","../src/components/file-view/hooks/useShikiHighlighter.ts","../src/components/file-view/hooks/useDarkMode.ts","../src/components/file-view/hooks/useHighlightedTokens.ts","../src/components/file-view/utils/languageMapping.ts","../src/components/file-view/components/CodeRenderer.tsx","../src/components/file-view/components/MarkdownRenderer.tsx","../src/components/file-view/components/ImageRenderer.tsx","../src/components/file-view/components/PlainTextRenderer.tsx","../src/components/file-view/components/CsvRenderer.tsx","../src/components/file-view/components/HtmlRenderer.tsx","../src/components/file-view/utils/rendererRegistry.ts","../src/components/file-view/FileView.tsx","../src/components/branding/OptilogicLogo.tsx","../src/components/branding/OptilogicLogoWithText.tsx","../src/components/branding/CosmicFrogIcon.tsx","../src/components/branding/DataStarIcon.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","LabelPrimitive","React4","React5","CheckboxPrimitive","Check","React6","SwitchPrimitive","React7","ProgressPrimitive","React8","SeparatorPrimitive","SelectPrimitive","React9","jsxs","ChevronDown","ChevronUp","TabsPrimitive","React10","AccordionPrimitive","React11","TooltipPrimitive","React12","PopoverPrimitive","React13","DropdownMenuPrimitive","React14","ChevronRight","Circle","AlertDialogPrimitive","React15","React16","React17","React18","React19","React20","Search","ArrowUp","ArrowDown","ArrowUpDown","ChevronsLeft","ChevronLeft","ChevronsRight","React21","X","React22","React23","React24","Sonner","React25","DayPicker","Icon","React26","format","CalendarIcon","parse","isValid","React27","Fragment","parseISO","React28","Filter","GripVertical","React29","getCellValue","useMemo","useState","useRef","useEffect","useCallback","React30","useVirtualizer","React31","React32","React33","React34","React35","Copy","React36","Palette","React37","React38","React39","ReactMarkdownImport","remarkGfmImport","React40","React41","React42","React43","forwardRef","useId"],"mappings":"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","file":"index.cjs","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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-muted text-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:text-muted-foreground\",\n primary:\n \"bg-accent text-accent-foreground shadow hover:shadow-md disabled:opacity-50\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 hover:shadow-md disabled:opacity-50\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:bg-muted/20 disabled:text-muted-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80 disabled:opacity-50\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground disabled:text-muted-foreground disabled:bg-muted/30 disabled:opacity-70\",\n link: \"text-primary underline-offset-4 hover:underline disabled:opacity-50 disabled:text-muted-foreground\",\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 hover:border-input-hover focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input 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 hover:border-input-hover focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input 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 disabled:bg-muted\",\n // Unchecked state\n \"bg-toggle-track\",\n // Hover\n \"hover:bg-toggle-track/80 data-[state=checked]:hover:bg-primary/80\",\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-toggle-track-foreground 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 hover:border-input-hover focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input [&>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 border-popover-border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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-start 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 mt-0.5\">\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\nexport interface SelectItemDescriptionProps\n extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst SelectItemDescription = React.forwardRef<\n HTMLSpanElement,\n SelectItemDescriptionProps\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"text-xs text-muted-foreground\", className)}\n {...props}\n />\n));\nSelectItemDescription.displayName = \"SelectItemDescription\";\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 SelectItemDescription,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\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\nconst tabsListVariants = cva(\n \"inline-flex h-10 items-center justify-start bg-transparent\",\n {\n variants: {\n variant: {\n default: \"border-b border-border\",\n pill: \"gap-1 rounded-lg bg-muted p-1\",\n unstyled: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst tabsTriggerVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"px-4 py-2.5 text-sm font-medium\",\n \"transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\n \"-mb-px\",\n \"border-transparent text-muted-foreground\",\n \"hover:text-foreground hover:border-muted-foreground/50\",\n \"data-[state=active]:border-foreground data-[state=active]:text-foreground\",\n ],\n pill: [\n \"rounded-md\",\n \"text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n ],\n unstyled: [\n \"text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:text-foreground\",\n ],\n },\n indicatorSize: {\n sm: \"border-b\",\n default: \"border-b-2\",\n lg: \"border-b-[3px]\",\n },\n },\n compoundVariants: [\n { variant: \"pill\", indicatorSize: \"sm\", className: \"border-b-0\" },\n { variant: \"pill\", indicatorSize: \"default\", className: \"border-b-0\" },\n { variant: \"pill\", indicatorSize: \"lg\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"sm\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"default\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"lg\", className: \"border-b-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n indicatorSize: \"default\",\n },\n }\n);\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof tabsListVariants> {}\n\n/**\n * TabsList\n *\n * Container for tab triggers. Provides the tab header bar.\n * Supports variants: default, pill, unstyled\n */\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nexport interface TabsTriggerProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {}\n\n/**\n * TabsTrigger\n *\n * Individual tab button that activates its associated content.\n * Supports variants: default, pill, unstyled\n * Supports indicatorSize: sm, default, lg (only applies to default variant)\n */\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, variant, indicatorSize, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n tabsTriggerVariants({ variant, indicatorSize }),\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-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 {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\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-popover-border\",\n // Typography\n \"text-xs font-medium\",\n // Shadow\n \"shadow-lg\",\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-auto max-w-[90vw] rounded-md border border-popover-border bg-popover p-4 text-popover-foreground shadow-lg 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-popover-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] max-w-[90vw] overflow-hidden rounded-md border border-popover-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 </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 { 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","/**\n * DataTable Component\n *\n * A data-driven table that sits between the simple Table primitives and the\n * full DataGrid. Supports opt-in sorting, search, pagination, row selection,\n * and pinned rows -- all composed from existing core primitives.\n */\n\nimport * as React from \"react\";\nimport {\n ArrowUp,\n ArrowDown,\n ArrowUpDown,\n Search,\n ChevronsLeft,\n ChevronLeft,\n ChevronRight,\n ChevronsRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport {\n Table,\n TableHeader,\n TableBody,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./table\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Checkbox } from \"./checkbox\";\nimport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n} from \"./select\";\nimport { LoadingSpinner } from \"./loading-spinner\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Column definition for the DataTable.\n */\nexport interface DataTableColumn<T> {\n /** Unique key identifying this column */\n key: string;\n /** Header label (string or ReactNode) */\n header: string | React.ReactNode;\n /**\n * Custom cell renderer. When omitted the table renders\n * `String(accessor(row))` or `String(row[key])`.\n */\n cell?: (row: T, rowIndex: number) => React.ReactNode;\n /** Accessor function to pull the raw value from a row (used for sorting & default rendering) */\n accessor?: (row: T) => string | number | boolean | null | undefined;\n /** Whether this column is sortable (default false) */\n sortable?: boolean;\n /** Custom sort comparator. Receives two rows, return negative / 0 / positive. */\n sortFn?: (a: T, b: T) => number;\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n /** Extra class name applied to every `<td>` in this column */\n className?: string;\n /** Extra class name applied to the `<th>` for this column */\n headerClassName?: string;\n /** Tailwind width class or inline width, e.g. \"w-[100px]\" */\n width?: string;\n}\n\n/** Sort descriptor */\nexport interface DataTableSort {\n /** Column key */\n key: string;\n /** Direction */\n direction: \"asc\" | \"desc\";\n}\n\n/**\n * Props for the DataTable component.\n */\nexport interface DataTableProps<T> {\n // ── Data ─────────────────────────────────────────────────────────────────\n /** Array of row data */\n data: T[];\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Return a stable unique key for each row */\n getRowKey: (row: T, index: number) => string;\n\n // ── Sorting ──────────────────────────────────────────────────────────────\n /** Default sort (uncontrolled) */\n defaultSort?: DataTableSort;\n /** Controlled sort */\n sort?: DataTableSort | null;\n /** Called when sort changes (controlled) */\n onSortChange?: (sort: DataTableSort | null) => void;\n\n // ── Search ───────────────────────────────────────────────────────────────\n /**\n * Enable the search bar. Pass `true` for defaults or a config object.\n * Search is always controlled by the consumer via `searchValue` /\n * `onSearchChange`, or managed internally when omitted.\n */\n searchable?: boolean;\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Controlled search value */\n searchValue?: string;\n /** Called when the search value changes */\n onSearchChange?: (value: string) => void;\n /** Custom search predicate. When omitted, a case-insensitive substring\n * match across all columns (using accessor / row[key]) is used. */\n searchFn?: (row: T, query: string) => boolean;\n\n // ── Pagination ───────────────────────────────────────────────────────────\n /** Pass a number to enable pagination with that default page size */\n pageSize?: number;\n /** Options shown in the rows-per-page selector */\n pageSizeOptions?: number[];\n /** Controlled current page (0-indexed) */\n currentPage?: number;\n /** Called when page changes */\n onPageChange?: (page: number) => void;\n /** Called when page size changes */\n onPageSizeChange?: (size: number) => void;\n\n // ── Selection ────────────────────────────────────────────────────────────\n /** Enable selection mode: \"checkbox\" adds a checkbox column, \"highlight\" selects on row click */\n selectable?: \"checkbox\" | \"highlight\";\n /** Currently selected row keys */\n selectedRows?: string[];\n /** Called when selection changes */\n onSelectedRowsChange?: (keys: string[]) => void;\n\n // ── Row interactions ─────────────────────────────────────────────────────\n /** Called when a row is clicked (independent of selection) */\n onRowClick?: (row: T, index: number) => void;\n /** Dynamic row class name */\n rowClassName?: (row: T, index: number) => string;\n\n // ── Pinned rows ──────────────────────────────────────────────────────────\n /** Row keys that should be pinned to the top */\n pinnedRows?: string[];\n\n // ── Slots ────────────────────────────────────────────────────────────────\n /** Custom toolbar rendered between search bar and table */\n toolbar?: React.ReactNode;\n /** Custom empty state */\n emptyState?: React.ReactNode;\n /** Table caption */\n caption?: string;\n\n // ── Loading ──────────────────────────────────────────────────────────────\n /** Show loading state */\n loading?: boolean;\n\n // ── Styling ──────────────────────────────────────────────────────────────\n /** Class name for the outermost wrapper */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getCellRawValue<T>(row: T, col: DataTableColumn<T>): string | number | boolean | null | undefined {\n if (col.accessor) return col.accessor(row);\n return (row as Record<string, unknown>)[col.key] as string | number | boolean | null | undefined;\n}\n\nfunction defaultSearch<T>(row: T, query: string, columns: DataTableColumn<T>[]): boolean {\n const lowerQuery = query.toLowerCase();\n return columns.some((col) => {\n const val = getCellRawValue(row, col);\n if (val == null) return false;\n return String(val).toLowerCase().includes(lowerQuery);\n });\n}\n\nfunction defaultSortComparator<T>(\n a: T,\n b: T,\n col: DataTableColumn<T>,\n direction: \"asc\" | \"desc\",\n): number {\n if (col.sortFn) {\n const result = col.sortFn(a, b);\n return direction === \"asc\" ? result : -result;\n }\n const aVal = getCellRawValue(a, col);\n const bVal = getCellRawValue(b, col);\n const aStr = aVal == null ? \"\" : String(aVal);\n const bStr = bVal == null ? \"\" : String(bVal);\n\n // Try numeric comparison first\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n if (!isNaN(aNum) && !isNaN(bNum) && aStr !== \"\" && bStr !== \"\") {\n return direction === \"asc\" ? aNum - bNum : bNum - aNum;\n }\n\n const cmp = aStr.localeCompare(bStr);\n return direction === \"asc\" ? cmp : -cmp;\n}\n\n// ---------------------------------------------------------------------------\n// DataTable\n// ---------------------------------------------------------------------------\n\nexport function DataTable<T>({\n data,\n columns,\n getRowKey,\n\n // Sorting\n defaultSort,\n sort: controlledSort,\n onSortChange,\n\n // Search\n searchable = false,\n searchPlaceholder = \"Search...\",\n searchValue: controlledSearchValue,\n onSearchChange,\n searchFn,\n\n // Pagination\n pageSize: defaultPageSize,\n pageSizeOptions = [10, 15, 25, 50, 100],\n currentPage: controlledPage,\n onPageChange,\n onPageSizeChange,\n\n // Selection\n selectable,\n selectedRows: controlledSelectedRows,\n onSelectedRowsChange,\n\n // Row interaction\n onRowClick,\n rowClassName,\n\n // Pinned rows\n pinnedRows = [],\n\n // Slots\n toolbar,\n emptyState,\n caption,\n\n // Loading\n loading = false,\n\n // Styling\n className,\n}: DataTableProps<T>) {\n // ── Internal state (uncontrolled defaults) ───────────────────────────────\n\n const [internalSort, setInternalSort] = React.useState<DataTableSort | null>(\n defaultSort ?? null,\n );\n const [internalSearchValue, setInternalSearchValue] = React.useState(\"\");\n const [internalPage, setInternalPage] = React.useState(0);\n const [internalPageSize, setInternalPageSize] = React.useState(\n defaultPageSize ?? 10,\n );\n const [internalSelectedRows, setInternalSelectedRows] = React.useState<string[]>([]);\n\n // Resolve controlled vs uncontrolled\n const sort = controlledSort !== undefined ? controlledSort : internalSort;\n const searchQuery =\n controlledSearchValue !== undefined ? controlledSearchValue : internalSearchValue;\n const page = controlledPage !== undefined ? controlledPage : internalPage;\n const pageSize = defaultPageSize != null ? (internalPageSize ?? defaultPageSize) : undefined;\n const selectedRowKeys =\n controlledSelectedRows !== undefined ? controlledSelectedRows : internalSelectedRows;\n\n const handleSortChange = React.useCallback(\n (next: DataTableSort | null) => {\n if (onSortChange) onSortChange(next);\n else setInternalSort(next);\n },\n [onSortChange],\n );\n\n const handleSearchChange = React.useCallback(\n (value: string) => {\n if (onSearchChange) onSearchChange(value);\n else setInternalSearchValue(value);\n // Reset to first page on search\n if (onPageChange) onPageChange(0);\n else setInternalPage(0);\n },\n [onSearchChange, onPageChange],\n );\n\n const handlePageChange = React.useCallback(\n (p: number) => {\n if (onPageChange) onPageChange(p);\n else setInternalPage(p);\n },\n [onPageChange],\n );\n\n const handlePageSizeChange = React.useCallback(\n (size: number) => {\n if (onPageSizeChange) onPageSizeChange(size);\n else setInternalPageSize(size);\n // Reset to first page\n if (onPageChange) onPageChange(0);\n else setInternalPage(0);\n },\n [onPageSizeChange, onPageChange],\n );\n\n const handleSelectionChange = React.useCallback(\n (keys: string[]) => {\n if (onSelectedRowsChange) onSelectedRowsChange(keys);\n else setInternalSelectedRows(keys);\n },\n [onSelectedRowsChange],\n );\n\n // ── Header sort click ────────────────────────────────────────────────────\n\n const handleHeaderClick = React.useCallback(\n (colKey: string) => {\n if (sort?.key === colKey) {\n if (sort.direction === \"asc\") {\n handleSortChange({ key: colKey, direction: \"desc\" });\n } else {\n handleSortChange(null);\n }\n } else {\n handleSortChange({ key: colKey, direction: \"asc\" });\n }\n },\n [sort, handleSortChange],\n );\n\n // ── Data pipeline: search → sort → split pinned / unpinned → paginate ──\n\n // 1. Search\n const searchedData = React.useMemo(() => {\n if (!searchable || !searchQuery) return data;\n if (searchFn) return data.filter((row) => searchFn(row, searchQuery));\n return data.filter((row) => defaultSearch(row, searchQuery, columns));\n }, [data, searchable, searchQuery, searchFn, columns]);\n\n // 2. Sort\n const sortedData = React.useMemo(() => {\n if (!sort) return searchedData;\n const col = columns.find((c) => c.key === sort.key);\n if (!col) return searchedData;\n return [...searchedData].sort((a, b) =>\n defaultSortComparator(a, b, col, sort.direction),\n );\n }, [searchedData, sort, columns]);\n\n // 3. Split pinned vs unpinned\n const pinnedSet = React.useMemo(() => new Set(pinnedRows), [pinnedRows]);\n\n const { pinnedData, unpinnedData } = React.useMemo(() => {\n if (pinnedSet.size === 0) return { pinnedData: [] as T[], unpinnedData: sortedData };\n const pinned: T[] = [];\n const unpinned: T[] = [];\n // Collect pinned rows from the full dataset in pinnedRows order\n const dataByKey = new Map<string, T>();\n data.forEach((row, i) => {\n dataByKey.set(getRowKey(row, i), row);\n });\n pinnedRows.forEach((key) => {\n const row = dataByKey.get(key);\n if (row) pinned.push(row);\n });\n // Unpinned: from sorted/searched data, excluding pinned keys\n sortedData.forEach((row, i) => {\n const key = getRowKey(row, i);\n // Need original index from data for stable keys\n if (!pinnedSet.has(key)) unpinned.push(row);\n });\n return { pinnedData: pinned, unpinnedData: unpinned };\n }, [sortedData, pinnedSet, pinnedRows, data, getRowKey]);\n\n // 4. Pagination (applied to unpinned data only)\n const totalUnpinned = unpinnedData.length;\n const totalPages = pageSize ? Math.max(1, Math.ceil(totalUnpinned / pageSize)) : 1;\n const paginatedData = React.useMemo(() => {\n if (!pageSize) return unpinnedData;\n const start = page * pageSize;\n return unpinnedData.slice(start, start + pageSize);\n }, [unpinnedData, pageSize, page]);\n\n // All visible rows (pinned + current page of unpinned)\n const visibleRows = React.useMemo(\n () => [...pinnedData, ...paginatedData],\n [pinnedData, paginatedData],\n );\n\n // Total items count (for display in pagination)\n const totalItems = searchedData.length;\n\n // ── Selection helpers ────────────────────────────────────────────────────\n\n const visibleKeys = React.useMemo(\n () => visibleRows.map((row, i) => getRowKey(row, i)),\n [visibleRows, getRowKey],\n );\n\n const allVisibleSelected =\n visibleKeys.length > 0 && visibleKeys.every((k) => selectedRowKeys.includes(k));\n const someVisibleSelected =\n !allVisibleSelected && visibleKeys.some((k) => selectedRowKeys.includes(k));\n\n const toggleRowSelection = React.useCallback(\n (key: string) => {\n const isSelected = selectedRowKeys.includes(key);\n const next = isSelected\n ? selectedRowKeys.filter((k) => k !== key)\n : [...selectedRowKeys, key];\n handleSelectionChange(next);\n },\n [selectedRowKeys, handleSelectionChange],\n );\n\n const toggleAllVisible = React.useCallback(() => {\n if (allVisibleSelected) {\n // Deselect all visible\n const visibleSet = new Set(visibleKeys);\n handleSelectionChange(selectedRowKeys.filter((k) => !visibleSet.has(k)));\n } else {\n // Select all visible\n const merged = new Set([...selectedRowKeys, ...visibleKeys]);\n handleSelectionChange(Array.from(merged));\n }\n }, [allVisibleSelected, visibleKeys, selectedRowKeys, handleSelectionChange]);\n\n // ── Row click handler ────────────────────────────────────────────────────\n\n const handleRowClick = React.useCallback(\n (row: T, index: number, key: string) => {\n if (selectable === \"highlight\") {\n toggleRowSelection(key);\n }\n onRowClick?.(row, index);\n },\n [selectable, toggleRowSelection, onRowClick],\n );\n\n // ── Render helpers ───────────────────────────────────────────────────────\n\n const renderCellContent = (row: T, col: DataTableColumn<T>, rowIndex: number) => {\n if (col.cell) return col.cell(row, rowIndex);\n const val = getCellRawValue(row, col);\n if (val == null) return <span className=\"text-muted-foreground italic\">--</span>;\n return String(val);\n };\n\n const alignClass = (align?: \"left\" | \"center\" | \"right\") => {\n if (align === \"center\") return \"text-center\";\n if (align === \"right\") return \"text-right\";\n return \"text-left\";\n };\n\n // ── Loading state ────────────────────────────────────────────────────────\n\n if (loading) {\n return (\n <div className={cn(\"flex items-center justify-center py-16\", className)}>\n <LoadingSpinner label=\"Loading\" showDots />\n </div>\n );\n }\n\n // ── Render ───────────────────────────────────────────────────────────────\n\n const showSearch = searchable;\n const showPagination = pageSize != null;\n const showCheckboxColumn = selectable === \"checkbox\";\n\n return (\n <div className={cn(\"flex flex-col w-full\", className)}>\n {/* Toolbar area: search + custom toolbar */}\n {(showSearch || toolbar) && (\n <div className=\"flex items-center gap-3 pb-4\">\n {showSearch && (\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n )}\n {toolbar && <div className=\"flex items-center gap-2\">{toolbar}</div>}\n </div>\n )}\n\n {/* Table */}\n <Table>\n {caption && <TableCaption>{caption}</TableCaption>}\n\n <TableHeader>\n <TableRow>\n {showCheckboxColumn && (\n <TableHead className=\"w-[40px]\">\n <Checkbox\n checked={allVisibleSelected ? true : someVisibleSelected ? \"indeterminate\" : false}\n onCheckedChange={() => toggleAllVisible()}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {columns.map((col) => {\n const isSorted = sort?.key === col.key;\n const sortDir = isSorted ? sort!.direction : null;\n\n return (\n <TableHead\n key={col.key}\n className={cn(\n col.width,\n col.headerClassName,\n alignClass(col.align),\n col.sortable && \"cursor-pointer select-none\",\n )}\n onClick={col.sortable ? () => handleHeaderClick(col.key) : undefined}\n >\n <div\n className={cn(\n \"flex items-center gap-1\",\n col.align === \"center\" && \"justify-center\",\n col.align === \"right\" && \"justify-end\",\n )}\n >\n <span>{col.header}</span>\n {col.sortable && (\n <span className=\"inline-flex ml-1\">\n {sortDir === \"asc\" ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === \"desc\" ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowUpDown className=\"h-3.5 w-3.5 opacity-40\" />\n )}\n </span>\n )}\n </div>\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n\n {/* Pinned rows */}\n {pinnedData.length > 0 && (\n <TableBody className=\"bg-muted/30 border-b-2 border-border\">\n {pinnedData.map((row, i) => {\n const key = getRowKey(row, i);\n const isSelected = selectedRowKeys.includes(key);\n return (\n <TableRow\n key={key}\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n (onRowClick || selectable === \"highlight\") && \"cursor-pointer\",\n rowClassName?.(row, i),\n )}\n onClick={() => handleRowClick(row, i, key)}\n >\n {showCheckboxColumn && (\n <TableCell className=\"w-[40px]\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRowSelection(key)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(alignClass(col.align), col.className)}\n >\n {renderCellContent(row, col, i)}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n </TableBody>\n )}\n\n {/* Main body */}\n <TableBody>\n {paginatedData.length === 0 && pinnedData.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (showCheckboxColumn ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n {emptyState ?? (\n <span className=\"text-muted-foreground\">No results.</span>\n )}\n </TableCell>\n </TableRow>\n ) : (\n paginatedData.map((row, i) => {\n // Compute a stable key – need original data index for getRowKey\n const globalIndex = pageSize ? page * pageSize + i : i;\n const key = getRowKey(row, globalIndex);\n const isSelected = selectedRowKeys.includes(key);\n return (\n <TableRow\n key={key}\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n (onRowClick || selectable === \"highlight\") && \"cursor-pointer\",\n rowClassName?.(row, globalIndex),\n )}\n onClick={() => handleRowClick(row, globalIndex, key)}\n >\n {showCheckboxColumn && (\n <TableCell className=\"w-[40px]\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRowSelection(key)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(alignClass(col.align), col.className)}\n >\n {renderCellContent(row, col, globalIndex)}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n\n {/* Pagination footer */}\n {showPagination && (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(val) => handlePageSizeChange(Number(val))}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={String(pageSize)} />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-muted-foreground\">\n Page {page + 1} of {totalPages}\n {` (${totalItems} total)`}\n </span>\n\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(0)}\n disabled={page === 0}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(page - 1)}\n disabled={page === 0}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(page + 1)}\n disabled={page >= totalPages - 1}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(totalPages - 1)}\n disabled={page >= totalPages - 1}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\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 { 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-2 relative px-8\",\n month_caption: \"flex justify-center pt-1 items-center h-7\",\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 top-1/2 -translate-y-1/2 h-6 w-6 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute right-1 top-1/2 -translate-y-1/2 h-6 w-6 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n month_grid: \"border-collapse mx-auto\",\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\",\n \"[&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md\",\n // Override the button's ghost text color when day is selected (data-selected is on the td, not the button)\n \"[&[data-selected]>button]:bg-primary [&[data-selected]>button]:text-primary-foreground\",\n \"[&[data-selected]>button]:hover:bg-primary/90 [&[data-selected]>button]:hover:text-primary-foreground\",\n \"[&[data-selected]>button]:focus:bg-primary [&[data-selected]>button]:focus:text-primary-foreground\",\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\"\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-3.5 w-3.5\" />;\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\">\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 \"hover:border-input-hover\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed hover:border-input\",\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 bg-background focus:ring-0 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 bg-background focus:ring-0 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 bg-background focus:ring-0 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, type MutableRefObject } 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 /** Ref that DataGrid should populate with the current processedData array */\n processedDataRef: MutableRefObject<unknown[]>;\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 // Ref populated by DataGrid with the current sorted/filtered data.\n // Editing callbacks read from this so they resolve the correct row after sort/filter.\n const processedDataRef = useRef<unknown[]>([]);\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 // Use processedData (sorted/filtered) so the rowIndex maps to the\n // correct visual row, falling back to the raw data array.\n const resolvedData = processedDataRef.current.length > 0\n ? processedDataRef.current\n : data;\n const row = resolvedData[rowIndex] as T | undefined;\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 resolvedData = processedDataRef.current.length > 0\n ? processedDataRef.current\n : data;\n const row = resolvedData[rowIndex] as T;\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 processedDataRef,\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 let comparison = 0;\n\n // If column specifies a dataType, coerce values accordingly\n if (column.dataType === \"number\") {\n const aNum = Number(aVal);\n const bNum = Number(bVal);\n if (!isNaN(aNum) && !isNaN(bNum)) {\n comparison = aNum - bNum;\n } else {\n comparison = String(aVal).localeCompare(String(bVal));\n }\n } else if (column.dataType === \"date\") {\n const aDate = aVal instanceof Date ? aVal : new Date(aVal as string | number);\n const bDate = bVal instanceof Date ? bVal : new Date(bVal as string | number);\n const aTime = isNaN(aDate.getTime()) ? 0 : aDate.getTime();\n const bTime = isNaN(bDate.getTime()) ? 0 : bDate.getTime();\n comparison = aTime - bTime;\n } else if (column.dataType === \"boolean\") {\n const aBool = aVal === true || aVal === \"true\" || aVal === 1;\n const bBool = bVal === true || bVal === \"true\" || bVal === 1;\n comparison = aBool === bBool ? 0 : aBool ? 1 : -1;\n } else if (column.dataType === \"string\") {\n comparison = String(aVal).localeCompare(String(bVal));\n } else {\n // No dataType specified -- auto-detect from runtime types\n 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 // Try numeric parse (handles string-encoded numbers from SQL results etc.)\n const aStr = String(aVal);\n const bStr = String(bVal);\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n if (!isNaN(aNum) && !isNaN(bNum) && aStr !== \"\" && bStr !== \"\") {\n comparison = aNum - bNum;\n } else {\n comparison = aStr.localeCompare(bStr);\n }\n }\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, processedDataRef, 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 // Keep the state hook's ref in sync so editing resolves the correct row\n processedDataRef.current = processedData;\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 isEditingThisCell && \"ring-2 ring-inset ring-primary bg-background\",\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-popover-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 isEditingThisCell && \"ring-2 ring-inset ring-primary bg-background\",\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 \"hover:border-input-hover\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input\",\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","import * as React from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Checkbox } from \"./checkbox\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport type { AutocompleteOption } from \"./autocomplete\";\n\nexport interface MultiSelectProps {\n /** Array of options to display */\n options: AutocompleteOption[];\n /** Currently selected values */\n value?: string[];\n /** Callback when selection changes */\n onChange?: (values: string[]) => 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 multi-select is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Whether to show the clear-all button */\n clearable?: boolean;\n /** Max number of pills to display before showing \"+N more\" */\n maxDisplayItems?: number;\n /** Whether to show a \"Select All\" toggle */\n showSelectAll?: boolean;\n /** Custom label for the select all option */\n selectAllLabel?: string;\n}\n\n/**\n * MultiSelect component - a multi-select dropdown with checkboxes\n *\n * Features:\n * - Checkbox selection for multiple options\n * - Search filtering\n * - Grouped options support\n * - Descriptions per option\n * - Tag pills with individual removal\n * - \"Select All\" toggle\n *\n * @example\n * <MultiSelect\n * options={[\n * { value: 'react', label: 'React', description: 'A JS library' },\n * { value: 'vue', label: 'Vue', group: 'Frameworks' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select frameworks...\"\n * showSelectAll\n * />\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n placeholder = \"Select items...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = true,\n maxDisplayItems = 3,\n showSelectAll = false,\n selectAllLabel = \"Select all\",\n}: MultiSelectProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const safeOptions = options ?? [];\n const safeValue = value ?? [];\n const selectedSet = React.useMemo(() => new Set(safeValue), [safeValue]);\n\n const filteredOptions = React.useMemo(() => {\n if (!search.trim()) return safeOptions;\n const searchLower = search.toLowerCase();\n return safeOptions.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [safeOptions, search]);\n\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 // Select All logic\n const selectableFiltered = React.useMemo(\n () => filteredOptions.filter((opt) => !opt.disabled),\n [filteredOptions]\n );\n\n const allFilteredSelected = React.useMemo(\n () =>\n selectableFiltered.length > 0 &&\n selectableFiltered.every((opt) => selectedSet.has(opt.value)),\n [selectableFiltered, selectedSet]\n );\n\n const someFilteredSelected = React.useMemo(\n () =>\n !allFilteredSelected &&\n selectableFiltered.some((opt) => selectedSet.has(opt.value)),\n [selectableFiltered, selectedSet, allFilteredSelected]\n );\n\n const handleToggle = React.useCallback(\n (optionValue: string) => {\n const next = selectedSet.has(optionValue)\n ? safeValue.filter((v) => v !== optionValue)\n : [...safeValue, optionValue];\n onChange?.(next);\n },\n [onChange, safeValue, selectedSet]\n );\n\n const handleRemove = React.useCallback(\n (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(safeValue.filter((v) => v !== optionValue));\n },\n [onChange, safeValue]\n );\n\n const handleClearAll = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.([]);\n },\n [onChange]\n );\n\n const handleSelectAll = React.useCallback(() => {\n if (allFilteredSelected) {\n // Deselect all filtered\n const filteredValues = new Set(selectableFiltered.map((o) => o.value));\n onChange?.(safeValue.filter((v) => !filteredValues.has(v)));\n } else {\n // Select all filtered (merge with existing selections)\n const existing = new Set(safeValue);\n const next = [...safeValue];\n for (const opt of selectableFiltered) {\n if (!existing.has(opt.value)) {\n next.push(opt.value);\n }\n }\n onChange?.(next);\n }\n }, [allFilteredSelected, selectableFiltered, safeValue, onChange]);\n\n React.useEffect(() => {\n if (open) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n }, []);\n\n const selectedLabels = React.useMemo(\n () =>\n safeValue\n .map((v) => safeOptions.find((o) => o.value === v)?.label ?? v)\n .slice(0, maxDisplayItems),\n [safeValue, safeOptions, maxDisplayItems]\n );\n\n const overflow = safeValue.length - maxDisplayItems;\n\n const isSearching = search.trim().length > 0;\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onClick={() => handleToggle(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 option.disabled && \"pointer-events-none opacity-50\"\n )}\n >\n <Checkbox\n checked={selectedSet.has(option.value)}\n tabIndex={-1}\n className=\"mt-0.5 pointer-events-none\"\n />\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 min-h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-1.5 text-sm shadow-sm ring-offset-background\",\n \"hover:border-input-hover\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input\",\n className\n )}\n >\n <div className=\"flex flex-1 flex-wrap gap-1 items-center min-w-0\">\n {safeValue.length === 0 ? (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n ) : (\n <>\n {selectedLabels.map((label, i) => (\n <span\n key={safeValue[i]}\n className=\"inline-flex items-center gap-0.5 rounded-sm bg-accent px-1.5 py-0.5 text-xs font-medium text-accent-foreground\"\n >\n <span className=\"truncate max-w-[100px]\">{label}</span>\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={(e) => handleRemove(safeValue[i]!, e)}\n className=\"rounded-sm hover:bg-foreground/10 p-0.5\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n +{overflow}\n </span>\n )}\n </>\n )}\n </div>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && safeValue.length > 0 && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClearAll}\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 {/* Select All */}\n {showSelectAll && selectableFiltered.length > 0 && (\n <>\n <button\n type=\"button\"\n onClick={handleSelectAll}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"hover:bg-accent hover:text-accent-foreground\"\n )}\n >\n <Checkbox\n checked={\n allFilteredSelected\n ? true\n : someFilteredSelected\n ? \"indeterminate\"\n : false\n }\n tabIndex={-1}\n className=\"pointer-events-none\"\n />\n <span className=\"font-medium\">\n {isSearching\n ? `${selectAllLabel} (filtered)`\n : selectAllLabel}\n </span>\n </button>\n <div className=\"-mx-1 my-1 h-px bg-border\" />\n </>\n )}\n\n {filteredOptions.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n ) : hasGroups ? (\n <>\n {groupedOptions.ungrouped.map(renderOption)}\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\nMultiSelect.displayName = \"MultiSelect\";\n\nexport default MultiSelect;\n","import * as React from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"./popover\";\nimport type { AutocompleteOption } from \"./autocomplete\";\n\nexport interface ComboboxProps {\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 /** Callback when the input text changes (for controlled/async filtering) */\n onInputChange?: (input: string) => void;\n /** Placeholder text when empty */\n placeholder?: string;\n /** Text to show when no options match */\n emptyText?: string;\n /** Whether the combobox 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 /** Whether to allow custom values not in the options list */\n allowCustomValue?: boolean;\n}\n\n/**\n * Combobox component - a searchable input that also allows custom values\n *\n * Unlike Autocomplete (button trigger, select-only), Combobox uses an\n * inline text input as the trigger. Users can type to filter options\n * AND optionally commit custom values not in the list.\n *\n * Features:\n * - Inline text input trigger\n * - Dropdown opens on focus/typing\n * - Grouped options with descriptions\n * - Custom value support (allowCustomValue)\n * - Clearable selection\n * - Async filtering via onInputChange\n *\n * @example\n * <Combobox\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Type or select...\"\n * allowCustomValue\n * />\n */\nexport function Combobox({\n options,\n value,\n onChange,\n onInputChange,\n placeholder = \"Type or select...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = false,\n allowCustomValue = true,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n\n // Sync input display with selected value\n const selectedOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // When value changes externally, update input display\n React.useEffect(() => {\n if (!open) {\n setInputValue(selectedOption?.label ?? value ?? \"\");\n }\n }, [value, selectedOption, open]);\n\n // Filter options based on input\n const filteredOptions = React.useMemo(() => {\n if (!inputValue.trim()) return options;\n const searchLower = inputValue.toLowerCase();\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [options, inputValue]);\n\n // Group options\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 const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onInputChange?.(newValue);\n if (!open) setOpen(true);\n },\n [onInputChange, open]\n );\n\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n const option = options.find((o) => o.value === optionValue);\n onChange?.(optionValue);\n setInputValue(option?.label ?? optionValue);\n setOpen(false);\n },\n [onChange, options]\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onChange?.(undefined);\n setInputValue(\"\");\n inputRef.current?.focus();\n },\n [onChange]\n );\n\n const handleFocus = React.useCallback(() => {\n setOpen(true);\n // Select all text on focus for easy replacement\n inputRef.current?.select();\n }, []);\n\n const handleBlur = React.useCallback(() => {\n // Delay to allow click events on options to fire\n setTimeout(() => {\n // If focus moved outside the wrapper entirely, close\n if (!wrapperRef.current?.contains(document.activeElement)) {\n setOpen(false);\n }\n\n if (allowCustomValue && inputValue.trim()) {\n // Check if input matches an existing option label\n const matchingOption = options.find(\n (opt) => opt.label.toLowerCase() === inputValue.toLowerCase()\n );\n if (matchingOption) {\n onChange?.(matchingOption.value);\n setInputValue(matchingOption.label);\n } else {\n // Commit custom value\n onChange?.(inputValue.trim());\n }\n } else if (!allowCustomValue) {\n // Reset to selected option or clear\n setInputValue(selectedOption?.label ?? \"\");\n }\n }, 200);\n }, [allowCustomValue, inputValue, options, onChange, selectedOption]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n setInputValue(selectedOption?.label ?? value ?? \"\");\n inputRef.current?.blur();\n } else if (e.key === \"Enter\" && open) {\n e.preventDefault();\n // If there's exactly one filtered option, select it\n if (filteredOptions.length === 1) {\n handleSelect(filteredOptions[0]!.value);\n } else if (allowCustomValue && inputValue.trim()) {\n // Check for exact match first\n const exactMatch = filteredOptions.find(\n (opt) => opt.label.toLowerCase() === inputValue.toLowerCase()\n );\n if (exactMatch) {\n handleSelect(exactMatch.value);\n } else {\n onChange?.(inputValue.trim());\n setOpen(false);\n }\n }\n }\n },\n [\n open,\n filteredOptions,\n handleSelect,\n allowCustomValue,\n inputValue,\n onChange,\n selectedOption,\n value,\n ]\n );\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onMouseDown={(e) => e.preventDefault()}\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 <PopoverAnchor asChild>\n <div\n ref={wrapperRef}\n className={cn(\n \"flex h-9 w-full items-center gap-2 rounded-md border border-input bg-transparent px-3 text-sm shadow-sm ring-offset-background\",\n \"hover:border-input-hover\",\n \"focus-within:outline-none focus-within:ring-1 focus-within:ring-ring\",\n disabled &&\n \"cursor-not-allowed opacity-50 hover:border-input\",\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className=\"flex-1 min-w-0 bg-transparent py-2 outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n />\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && value && (\n <span\n role=\"button\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\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 </div>\n </PopoverAnchor>\n <PopoverContent\n className=\"p-0\"\n style={{ width: wrapperRef.current?.offsetWidth }}\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => {\n if (wrapperRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }}\n onInteractOutside={(e) => {\n if (wrapperRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }}\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 {groupedOptions.ungrouped.map(renderOption)}\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\nCombobox.displayName = \"Combobox\";\n\nexport default Combobox;\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 * Curated set of production-ready themes with proper contrast and border visibility.\n */\n\nimport type { Theme } from \"./types\";\n\n/**\n * Optilogic Legacy Theme - Default light theme\n *\n * Classic Optilogic branding with deep blue (#0C0A5A) primary.\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: \"#D0D0D0\",\n ring: \"#5766F2\",\n popoverBorder: \"#D0D0D0\",\n divider: \"#D0D0D0\",\n toggleTrack: \"#D0D0D0\",\n toggleTrackForeground: \"#FFFFFF\",\n inputHover: \"#5766F2\",\n chart1: \"#78D237\",\n chart2: \"#F5CF47\",\n chart3: \"#5766F2\",\n chart4: \"#44BD7E\",\n chart5: \"#929BEF\",\n chart6: \"#DB2828\",\n chart7: \"#E07B39\",\n chart8: \"#2BBBAD\",\n chart9: \"#A5673F\",\n chart10: \"#00B5AD\",\n chart11: \"#6435C9\",\n chart12: \"#E03997\",\n radius: \"0.5rem\",\n};\n\n/**\n * Optilogic Dark Theme - Branded dark mode\n *\n * Uses Optilogic marketing site colors for a branded dark experience.\n * Primary palette: deep teal background with signature neon green accent.\n */\nexport const OPTILOGIC_DARK_THEME: Theme = {\n id: \"optilogic-dark\",\n name: \"Optilogic Dark\",\n description: \"Optilogic branded dark theme with signature green\",\n author: \"Optilogic\",\n background: \"#042926\",\n foreground: \"#E0E7E6\",\n card: \"#0A3F34\",\n cardForeground: \"#E0E7E6\",\n popover: \"#0A3F34\",\n popoverForeground: \"#E0E7E6\",\n primary: \"#23EF6A\",\n primaryForeground: \"#042926\",\n accent: \"#23EF6A\",\n accentForeground: \"#042926\",\n secondary: \"#0D4D3F\",\n secondaryForeground: \"#E0E7E6\",\n muted: \"#0D4D3F\",\n mutedForeground: \"#9CB5B0\",\n destructive: \"#EF4444\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#23EF6A\",\n successForeground: \"#042926\",\n warning: \"#FBBF24\",\n warningForeground: \"#042926\",\n chip: \"#0D4D3F\",\n chipForeground: \"#A7D5CA\",\n border: \"#1A5C4C\",\n input: \"#1A5C4C\",\n ring: \"#23EF6A\",\n popoverBorder: \"#237A64\",\n divider: \"#1A5C4C\",\n toggleTrack: \"#1A5C4C\",\n toggleTrackForeground: \"#E0E7E6\",\n inputHover: \"#23EF6A\",\n chart1: \"#23EF6A\",\n chart2: \"#3B82F6\",\n chart3: \"#FBBF24\",\n chart4: \"#F97316\",\n chart5: \"#A78BFA\",\n chart6: \"#EF4444\",\n chart7: \"#06B6D4\",\n chart8: \"#EC4899\",\n chart9: \"#84CC16\",\n chart10: \"#14B8A6\",\n chart11: \"#F59E0B\",\n chart12: \"#8B5CF6\",\n radius: \"0.5rem\",\n};\n\n/**\n * Modern Light Theme - Clean, readable light mode\n *\n * Neutral grays with blue primary for a modern, professional look.\n * Reworked from the original Minimalist Light theme.\n */\nexport const MODERN_LIGHT_THEME: Theme = {\n id: \"modern-light\",\n name: \"Modern Light\",\n description: \"Clean and modern light theme with blue accents\",\n author: \"opti-ui\",\n background: \"#FFFFFF\",\n foreground: \"#1A1A1A\",\n card: \"#F8F9FA\",\n cardForeground: \"#1A1A1A\",\n popover: \"#FFFFFF\",\n popoverForeground: \"#1A1A1A\",\n primary: \"#2563EB\",\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: \"#DEE2E6\",\n ring: \"#2563EB\",\n popoverBorder: \"#DEE2E6\",\n divider: \"#DEE2E6\",\n toggleTrack: \"#CED4DA\",\n toggleTrackForeground: \"#FFFFFF\",\n inputHover: \"#6C757D\",\n chart1: \"#2563EB\",\n chart2: \"#16A34A\",\n chart3: \"#EA580C\",\n chart4: \"#9333EA\",\n chart5: \"#DC2626\",\n chart6: \"#0891B2\",\n chart7: \"#CA8A04\",\n chart8: \"#DB2777\",\n chart9: \"#4F46E5\",\n chart10: \"#059669\",\n chart11: \"#D97706\",\n chart12: \"#7C3AED\",\n radius: \"0.5rem\",\n};\n\n/** @deprecated Use MODERN_LIGHT_THEME instead */\nexport const MINIMALIST_LIGHT_THEME = MODERN_LIGHT_THEME;\n\n/**\n * Modern Dark Theme - Neutral, clean dark mode\n *\n * Zinc-based palette with blue accents. Strong border contrast\n * for clear visual separation of UI elements.\n */\nexport const MODERN_DARK_THEME: Theme = {\n id: \"modern-dark\",\n name: \"Modern Dark\",\n description: \"Clean, neutral dark theme with blue accents\",\n author: \"opti-ui\",\n background: \"#09090B\",\n foreground: \"#FAFAFA\",\n card: \"#18181B\",\n cardForeground: \"#FAFAFA\",\n popover: \"#18181B\",\n popoverForeground: \"#FAFAFA\",\n primary: \"#3B82F6\",\n primaryForeground: \"#FFFFFF\",\n accent: \"#27272A\",\n accentForeground: \"#FAFAFA\",\n secondary: \"#27272A\",\n secondaryForeground: \"#FAFAFA\",\n muted: \"#27272A\",\n mutedForeground: \"#A1A1AA\",\n destructive: \"#EF4444\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#22C55E\",\n successForeground: \"#FFFFFF\",\n warning: \"#EAB308\",\n warningForeground: \"#09090B\",\n chip: \"#27272A\",\n chipForeground: \"#D4D4D8\",\n border: \"#3F3F46\",\n input: \"#3F3F46\",\n ring: \"#3B82F6\",\n popoverBorder: \"#52525B\",\n divider: \"#3F3F46\",\n toggleTrack: \"#3F3F46\",\n toggleTrackForeground: \"#FAFAFA\",\n inputHover: \"#3B82F6\",\n chart1: \"#3B82F6\",\n chart2: \"#22C55E\",\n chart3: \"#F59E0B\",\n chart4: \"#EF4444\",\n chart5: \"#A855F7\",\n chart6: \"#14B8A6\",\n chart7: \"#F97316\",\n chart8: \"#EC4899\",\n chart9: \"#0EA5E9\",\n chart10: \"#EAB308\",\n chart11: \"#10B981\",\n chart12: \"#C084FC\",\n radius: \"0.5rem\",\n};\n\n/**\n * Dark Elegant Theme - Sophisticated dark mode\n *\n * Deep charcoal with purple/teal accents for a refined aesthetic.\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: \"opti-ui\",\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: \"#121212\",\n chip: \"#2D2D2D\",\n chipForeground: \"#B39DDB\",\n border: \"#404040\",\n input: \"#404040\",\n ring: \"#BB86FC\",\n popoverBorder: \"#525252\",\n divider: \"#404040\",\n toggleTrack: \"#404040\",\n toggleTrackForeground: \"#E0E0E0\",\n inputHover: \"#BB86FC\",\n chart1: \"#BB86FC\",\n chart2: \"#03DAC6\",\n chart3: \"#4CAF50\",\n chart4: \"#FF9800\",\n chart5: \"#CF6679\",\n chart6: \"#64B5F6\",\n chart7: \"#81C784\",\n chart8: \"#FFB74D\",\n chart9: \"#E57373\",\n chart10: \"#7986CB\",\n chart11: \"#4DB6AC\",\n chart12: \"#F06292\",\n radius: \"0.5rem\",\n};\n\n/**\n * All available preset themes\n */\nexport const PRESET_THEMES: Theme[] = [\n OPTILOGIC_LEGACY_THEME,\n OPTILOGIC_DARK_THEME,\n MODERN_LIGHT_THEME,\n MODERN_DARK_THEME,\n DARK_ELEGANT_THEME,\n];\n\n/**\n * All theme suggestions for preview\n */\nexport const ALL_THEMES: Theme[] = PRESET_THEMES;\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 popoverBorder: theme.popoverBorder\n ? hexToHsl(theme.popoverBorder)\n : undefined,\n divider: theme.divider ? hexToHsl(theme.divider) : undefined,\n toggleTrack: theme.toggleTrack ? hexToHsl(theme.toggleTrack) : undefined,\n toggleTrackForeground: theme.toggleTrackForeground\n ? hexToHsl(theme.toggleTrackForeground)\n : undefined,\n inputHover: theme.inputHover ? hexToHsl(theme.inputHover) : undefined,\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 chart6: hexToHsl(theme.chart6),\n chart7: hexToHsl(theme.chart7),\n chart8: hexToHsl(theme.chart8),\n chart9: hexToHsl(theme.chart9),\n chart10: hexToHsl(theme.chart10),\n chart11: hexToHsl(theme.chart11),\n chart12: hexToHsl(theme.chart12),\n };\n}\n\n/**\n * Derive an input hover border color from the theme's HSL values.\n * Blends toward the foreground for a subtle but visible hover effect.\n */\nfunction deriveInputHoverHsl(hslTheme: ThemeHSL): string {\n const parts = hslTheme.foreground.split(/\\s+/);\n if (parts.length >= 3) {\n const h = parts[0];\n const s = parts[1];\n return `${h} ${s} 50%`;\n }\n return hslTheme.foreground;\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\n // Elevated surface & divider tokens (with fallbacks)\n element.style.setProperty(\n \"--popover-border\",\n hslTheme.popoverBorder ?? hslTheme.border\n );\n element.style.setProperty(\n \"--divider\",\n hslTheme.divider ?? hslTheme.border\n );\n\n // Interactive control tokens (with fallbacks)\n element.style.setProperty(\n \"--toggle-track\",\n hslTheme.toggleTrack ?? hslTheme.muted\n );\n element.style.setProperty(\n \"--toggle-track-foreground\",\n hslTheme.toggleTrackForeground ?? hslTheme.background\n );\n element.style.setProperty(\n \"--input-hover\",\n hslTheme.inputHover ?? deriveInputHoverHsl(hslTheme)\n );\n\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 element.style.setProperty(\"--chart-6\", hslTheme.chart6);\n element.style.setProperty(\"--chart-7\", hslTheme.chart7);\n element.style.setProperty(\"--chart-8\", hslTheme.chart8);\n element.style.setProperty(\"--chart-9\", hslTheme.chart9);\n element.style.setProperty(\"--chart-10\", hslTheme.chart10);\n element.style.setProperty(\"--chart-11\", hslTheme.chart11);\n element.style.setProperty(\"--chart-12\", hslTheme.chart12);\n\n if (theme.disabledOpacity) {\n element.style.setProperty(\"--disabled-opacity\", theme.disabledOpacity);\n }\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 \"chart6\",\n \"chart7\",\n \"chart8\",\n \"chart9\",\n \"chart10\",\n \"chart11\",\n \"chart12\",\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 \"popoverBorder\",\n \"divider\",\n \"toggleTrack\",\n \"toggleTrackForeground\",\n \"inputHover\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n \"chart6\",\n \"chart7\",\n \"chart8\",\n \"chart9\",\n \"chart10\",\n \"chart11\",\n \"chart12\",\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// ---------------------------------------------------------------------------\n// Contrast validation utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a hex color string into linear-light sRGB components (0-1).\n */\nfunction hexToLinearRgb(hex: string): [number, number, number] {\n hex = hex.replace(/^#/, \"\");\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 toLinear = (c: number) =>\n c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n\n return [toLinear(r), toLinear(g), toLinear(b)];\n}\n\n/**\n * Calculate WCAG 2.x relative luminance for a hex color.\n * @see https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n */\nexport function getRelativeLuminance(hex: string): number {\n const [r, g, b] = hexToLinearRgb(hex);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n/**\n * Calculate the WCAG contrast ratio between two hex colors.\n * Returns a value >= 1, where 1 means no contrast and 21 is maximum.\n * @see https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n */\nexport function getContrastRatio(hex1: string, hex2: string): number {\n const l1 = getRelativeLuminance(hex1);\n const l2 = getRelativeLuminance(hex2);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nexport interface ContrastWarning {\n pair: [string, string];\n pairLabels: [string, string];\n ratio: number;\n required: number;\n level: \"fail\" | \"AA-large\" | \"AA\";\n}\n\n/**\n * Validate contrast ratios for critical color pairs in a theme.\n *\n * WCAG 2.1 requirements:\n * - **3:1** minimum for UI components and large text (AA)\n * - **4.5:1** minimum for normal text (AA)\n *\n * Returns an array of warnings for pairs that fall below the recommended\n * minimums. An empty array means all checked pairs pass.\n */\nexport function validateThemeContrast(theme: Theme): ContrastWarning[] {\n const warnings: ContrastWarning[] = [];\n\n const uiPairs: {\n a: string;\n b: string;\n labelA: string;\n labelB: string;\n minRatio: number;\n }[] = [\n // Text on background\n {\n a: theme.foreground,\n b: theme.background,\n labelA: \"foreground\",\n labelB: \"background\",\n minRatio: 4.5,\n },\n // Primary button text on primary bg\n {\n a: theme.primaryForeground,\n b: theme.primary,\n labelA: \"primaryForeground\",\n labelB: \"primary\",\n minRatio: 4.5,\n },\n // Accent foreground on accent\n {\n a: theme.accentForeground,\n b: theme.accent,\n labelA: \"accentForeground\",\n labelB: \"accent\",\n minRatio: 4.5,\n },\n // Input border vs background (UI component boundary — 3:1)\n {\n a: theme.input,\n b: theme.background,\n labelA: \"input\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Toggle track vs background (UI component — 3:1)\n {\n a: theme.toggleTrack ?? theme.muted,\n b: theme.background,\n labelA: \"toggleTrack\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Toggle thumb vs track (UI component — 3:1)\n {\n a: theme.toggleTrackForeground ?? theme.background,\n b: theme.toggleTrack ?? theme.muted,\n labelA: \"toggleTrackForeground\",\n labelB: \"toggleTrack\",\n minRatio: 3,\n },\n // Border vs background (UI component boundary — 3:1)\n {\n a: theme.border,\n b: theme.background,\n labelA: \"border\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Popover border vs popover background (elevated surface boundary — 3:1)\n {\n a: theme.popoverBorder ?? theme.border,\n b: theme.popover,\n labelA: \"popoverBorder\",\n labelB: \"popover\",\n minRatio: 3,\n },\n // Muted foreground on muted bg\n {\n a: theme.mutedForeground,\n b: theme.muted,\n labelA: \"mutedForeground\",\n labelB: \"muted\",\n minRatio: 4.5,\n },\n // Destructive foreground on destructive bg\n {\n a: theme.destructiveForeground,\n b: theme.destructive,\n labelA: \"destructiveForeground\",\n labelB: \"destructive\",\n minRatio: 4.5,\n },\n ];\n\n for (const { a, b, labelA, labelB, minRatio } of uiPairs) {\n const ratio = getContrastRatio(a, b);\n if (ratio < minRatio) {\n let level: ContrastWarning[\"level\"] = \"fail\";\n if (ratio >= 3) level = \"AA-large\";\n\n warnings.push({\n pair: [a, b],\n pairLabels: [labelA, labelB],\n ratio: Math.round(ratio * 100) / 100,\n required: minRatio,\n level,\n });\n }\n }\n\n return warnings;\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-popover-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-popover-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","import type { ContentType, ContentTypeDetectionResult } from \"../types\";\n\n/**\n * Extension-to-content-type mapping.\n */\nconst EXTENSION_MAP: Record<string, ContentType> = {\n // Code / programming languages\n ts: \"code\",\n tsx: \"code\",\n js: \"code\",\n jsx: \"code\",\n mjs: \"code\",\n cjs: \"code\",\n py: \"code\",\n rb: \"code\",\n go: \"code\",\n rs: \"code\",\n java: \"code\",\n c: \"code\",\n cpp: \"code\",\n h: \"code\",\n hpp: \"code\",\n cs: \"code\",\n php: \"code\",\n swift: \"code\",\n kt: \"code\",\n scala: \"code\",\n r: \"code\",\n sql: \"code\",\n sh: \"code\",\n bash: \"code\",\n zsh: \"code\",\n ps1: \"code\",\n bat: \"code\",\n lua: \"code\",\n perl: \"code\",\n pl: \"code\",\n // Config / data (code-rendered)\n json: \"code\",\n yaml: \"code\",\n yml: \"code\",\n toml: \"code\",\n xml: \"code\",\n html: \"html\",\n htm: \"html\",\n css: \"code\",\n scss: \"code\",\n sass: \"code\",\n less: \"code\",\n graphql: \"code\",\n gql: \"code\",\n // Optimization / domain-specific\n lp: \"code\",\n dat: \"code\",\n // Markdown\n md: \"markdown\",\n mdx: \"markdown\",\n // Images\n png: \"image\",\n jpg: \"image\",\n jpeg: \"image\",\n gif: \"image\",\n svg: \"image\",\n webp: \"image\",\n ico: \"image\",\n bmp: \"image\",\n // PDF\n pdf: \"pdf\",\n // CSV\n csv: \"csv\",\n tsv: \"csv\",\n // Plain text\n txt: \"plaintext\",\n log: \"plaintext\",\n env: \"plaintext\",\n};\n\n/**\n * Special file names (without extension) that map to content types.\n */\nconst SPECIAL_FILES: Record<string, ContentType> = {\n dockerfile: \"code\",\n makefile: \"code\",\n rakefile: \"code\",\n gemfile: \"code\",\n procfile: \"code\",\n};\n\n/**\n * Extract the file extension from a file name.\n * Handles dotfiles (e.g., \".gitignore\" -> \"gitignore\") and\n * compound extensions (e.g., \"file.test.ts\" -> \"ts\").\n */\nexport function getFileExtension(fileName: string): string | null {\n if (!fileName) return null;\n\n const baseName = fileName.split(\"/\").pop() || fileName;\n\n // Dotfile with no other extension (e.g., \".gitignore\")\n if (baseName.startsWith(\".\") && !baseName.slice(1).includes(\".\")) {\n return baseName.slice(1).toLowerCase();\n }\n\n const lastDot = baseName.lastIndexOf(\".\");\n if (lastDot === -1 || lastDot === baseName.length - 1) return null;\n\n return baseName.slice(lastDot + 1).toLowerCase();\n}\n\n/**\n * Detect content type from a file name.\n *\n * @example\n * detectContentType(\"app.tsx\") // { type: \"code\", extension: \"tsx\" }\n * detectContentType(\"README.md\") // { type: \"markdown\", extension: \"md\" }\n * detectContentType(\"photo.png\") // { type: \"image\", extension: \"png\" }\n * detectContentType(\"unknown.xyz\") // { type: \"unknown\", extension: \"xyz\" }\n */\nexport function detectContentType(\n fileName: string,\n): ContentTypeDetectionResult {\n // Check special file names first\n const baseName = (fileName.split(\"/\").pop() || fileName).toLowerCase();\n const specialType = SPECIAL_FILES[baseName];\n if (specialType) {\n return { type: specialType, extension: baseName };\n }\n\n const extension = getFileExtension(fileName);\n if (!extension) {\n return { type: \"unknown\", extension: null };\n }\n\n const type = EXTENSION_MAP[extension] ?? \"unknown\";\n return { type, extension };\n}\n\n/**\n * Check if a content type is text-based (uses `content` string).\n */\nexport function isTextContentType(contentType: ContentType): boolean {\n return (\n contentType === \"code\" ||\n contentType === \"markdown\" ||\n contentType === \"plaintext\" ||\n contentType === \"csv\" ||\n contentType === \"html\" ||\n contentType === \"unknown\"\n );\n}\n\n/**\n * Check if a content type is URL-based (uses `url` string).\n */\nexport function isUrlContentType(contentType: ContentType): boolean {\n return contentType === \"image\" || contentType === \"pdf\";\n}\n","import { useMemo } from \"react\";\nimport type { ContentType, ContentTypeDetectionResult } from \"../types\";\nimport { detectContentType } from \"../utils/contentTypeDetection\";\n\nexport interface UseContentTypeOptions {\n fileName: string;\n contentTypeOverride?: ContentType;\n}\n\nexport interface UseContentTypeReturn extends ContentTypeDetectionResult {\n /** Whether the type was explicitly overridden. */\n isOverridden: boolean;\n}\n\n/**\n * Hook to determine the content type for a file.\n * Uses explicit override if provided, otherwise auto-detects from fileName.\n */\nexport function useContentType({\n fileName,\n contentTypeOverride,\n}: UseContentTypeOptions): UseContentTypeReturn {\n return useMemo(() => {\n if (contentTypeOverride) {\n return {\n type: contentTypeOverride,\n extension: null,\n isOverridden: true,\n };\n }\n const detected = detectContentType(fileName);\n return { ...detected, isOverridden: false };\n }, [fileName, contentTypeOverride]);\n}\n","import { useState, useEffect } from \"react\";\n\ntype Highlighter = Awaited<ReturnType<typeof import(\"shiki\")[\"createHighlighter\"]>>;\n\ninterface ShikiHighlighterState {\n highlighter: Highlighter | null;\n isReady: boolean;\n}\n\n/** Singleton: one global highlighter instance shared across all components. */\nlet globalHighlighter: Highlighter | null = null;\nlet initPromise: Promise<Highlighter | null> | null = null;\n\nasync function getOrCreateHighlighter(): Promise<Highlighter | null> {\n if (globalHighlighter) return globalHighlighter;\n\n if (!initPromise) {\n initPromise = (async () => {\n try {\n const { createHighlighter } = await import(\"shiki\");\n globalHighlighter = await createHighlighter({\n themes: [\"github-light\", \"github-dark\"],\n langs: [],\n });\n return globalHighlighter;\n } catch {\n // shiki not installed or failed to load — fall back to plain text\n return null;\n }\n })();\n }\n\n return initPromise;\n}\n\n/**\n * Singleton async initialization of the shiki highlighter.\n *\n * - Dynamically imports shiki so it's an optional peer dependency\n * - Creates one global `Highlighter` instance with github-light and github-dark themes\n * - Languages are loaded on demand per-highlight call (not at init)\n * - Returns `{ highlighter, isReady }`\n */\nexport function useShikiHighlighter(): ShikiHighlighterState {\n const [state, setState] = useState<ShikiHighlighterState>({\n highlighter: globalHighlighter,\n isReady: globalHighlighter !== null,\n });\n\n useEffect(() => {\n if (globalHighlighter) {\n setState({ highlighter: globalHighlighter, isReady: true });\n return;\n }\n\n let cancelled = false;\n getOrCreateHighlighter().then((h) => {\n if (!cancelled) {\n setState({ highlighter: h, isReady: true });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n return state;\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\n/**\n * Parse the lightness percentage from a `--background` CSS variable value.\n * Expects HSL format like `\"222 84% 5%\"` or `\"0 0% 100%\"`.\n * Returns the lightness as a number (0-100), or `null` if unparseable.\n */\nfunction getBackgroundLightness(el: HTMLElement): number | null {\n const value = getComputedStyle(el).getPropertyValue(\"--background\").trim();\n if (!value) return null;\n\n // Match the last percentage in the HSL string (lightness)\n const match = value.match(/(\\d+(?:\\.\\d+)?)%\\s*$/);\n return match ? parseFloat(match[1]) : null;\n}\n\n/**\n * Detects whether the current theme is \"dark\" by examining the\n * `--background` CSS variable's lightness.\n *\n * Works with:\n * - The theme system (`applyTheme` sets `--background` as inline style)\n * - The `.dark` class (which also changes `--background` via CSS)\n * - Any mechanism that updates `--background`\n *\n * SSR-safe: defaults to `false` when `document` is unavailable.\n */\nexport function useDarkMode(): boolean {\n const checkDark = useCallback((): boolean => {\n if (typeof document === \"undefined\") return false;\n const lightness = getBackgroundLightness(document.documentElement);\n // If we can't read the variable, fall back to checking .dark class\n if (lightness === null) {\n return document.documentElement.classList.contains(\"dark\");\n }\n return lightness < 50;\n }, []);\n\n const [isDark, setIsDark] = useState(checkDark);\n\n useEffect(() => {\n const el = document.documentElement;\n\n const update = () => {\n setIsDark(checkDark());\n };\n\n // Watch both class and style attribute changes\n const observer = new MutationObserver(update);\n observer.observe(el, {\n attributes: true,\n attributeFilter: [\"class\", \"style\"],\n });\n\n // Sync in case the value changed between render and effect\n update();\n\n return () => observer.disconnect();\n }, [checkDark]);\n\n return isDark;\n}\n","import { useState, useEffect } from \"react\";\nimport { useShikiHighlighter } from \"./useShikiHighlighter\";\nimport { useDarkMode } from \"./useDarkMode\";\n\nexport interface HighlightToken {\n content: string;\n color?: string;\n}\n\nexport interface UseHighlightedTokensResult {\n lines: HighlightToken[][] | null;\n}\n\n/**\n * Combines the shiki highlighter + dark mode detection to produce\n * highlighted tokens for a given code string and language.\n *\n * - Loads the language on demand (with try/catch for unsupported languages)\n * - Returns `null` while loading or if shiki is unavailable (signals \"use plain text\")\n * - Re-tokenizes when dark mode toggles\n */\nexport function useHighlightedTokens(\n code: string,\n language: string,\n): UseHighlightedTokensResult {\n const { highlighter, isReady } = useShikiHighlighter();\n const isDark = useDarkMode();\n const [lines, setLines] = useState<HighlightToken[][] | null>(null);\n\n useEffect(() => {\n if (!isReady || !highlighter || !code) {\n setLines(null);\n return;\n }\n\n let cancelled = false;\n const theme = isDark ? \"github-dark\" : \"github-light\";\n\n (async () => {\n try {\n // Load language on demand — skip if it's plaintext\n if (language !== \"text\") {\n const loadedLangs = highlighter.getLoadedLanguages();\n if (!loadedLangs.includes(language as never)) {\n await highlighter.loadLanguage(language as Parameters<typeof highlighter.loadLanguage>[0]);\n }\n }\n } catch {\n // Language not supported by shiki — fall back to plain text\n if (!cancelled) setLines(null);\n return;\n }\n\n if (cancelled) return;\n\n try {\n const result = highlighter.codeToTokens(code, {\n lang: language as Parameters<typeof highlighter.codeToTokens>[1][\"lang\"],\n theme,\n });\n\n if (!cancelled) {\n setLines(\n result.tokens.map((line) =>\n line.map((token) => ({\n content: token.content,\n color: token.color,\n })),\n ),\n );\n }\n } catch {\n if (!cancelled) setLines(null);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [highlighter, isReady, code, language, isDark]);\n\n return { lines };\n}\n","/**\n * Maps file extensions to shiki language IDs.\n *\n * Most extensions work directly as shiki lang IDs. This map only\n * contains edge-cases where the extension differs from the shiki ID.\n */\nconst EXTENSION_OVERRIDES: Record<string, string> = {\n yml: \"yaml\",\n htm: \"html\",\n cjs: \"javascript\",\n mjs: \"javascript\",\n jsx: \"jsx\",\n tsx: \"tsx\",\n h: \"c\",\n hpp: \"cpp\",\n cs: \"csharp\",\n rb: \"ruby\",\n sh: \"shellscript\",\n bash: \"shellscript\",\n zsh: \"shellscript\",\n ps1: \"powershell\",\n bat: \"bat\",\n kt: \"kotlin\",\n rs: \"rust\",\n gql: \"graphql\",\n pl: \"perl\",\n sass: \"sass\",\n scss: \"scss\",\n less: \"less\",\n // Domain-specific / data formats without shiki support\n lp: \"text\",\n dat: \"text\",\n env: \"shellscript\",\n};\n\n/**\n * Special file names (without extension) mapped to shiki language IDs.\n */\nconst SPECIAL_FILE_LANGUAGES: Record<string, string> = {\n dockerfile: \"dockerfile\",\n makefile: \"makefile\",\n rakefile: \"ruby\",\n gemfile: \"ruby\",\n procfile: \"yaml\",\n};\n\n/**\n * Get the shiki language ID for a given file name.\n *\n * @example\n * getLanguageFromFileName(\"app.tsx\") // \"tsx\"\n * getLanguageFromFileName(\"config.yml\") // \"yaml\"\n * getLanguageFromFileName(\"Dockerfile\") // \"dockerfile\"\n * getLanguageFromFileName(\"unknown.xyz\") // \"text\"\n */\nexport function getLanguageFromFileName(fileName: string): string {\n const baseName = (fileName.split(\"/\").pop() || fileName).toLowerCase();\n\n // Check special file names\n const specialLang = SPECIAL_FILE_LANGUAGES[baseName];\n if (specialLang) return specialLang;\n\n // Extract extension\n let ext: string | null = null;\n if (baseName.startsWith(\".\") && !baseName.slice(1).includes(\".\")) {\n ext = baseName.slice(1);\n } else {\n const lastDot = baseName.lastIndexOf(\".\");\n if (lastDot !== -1 && lastDot !== baseName.length - 1) {\n ext = baseName.slice(lastDot + 1);\n }\n }\n\n if (!ext) return \"text\";\n\n // Check overrides first, then use extension directly as shiki lang ID\n return EXTENSION_OVERRIDES[ext] ?? ext;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useHighlightedTokens } from \"../hooks/useHighlightedTokens\";\nimport type { FileRendererProps } from \"../types\";\nimport { getLanguageFromFileName } from \"../utils/languageMapping\";\n\n/**\n * CodeRenderer\n *\n * Renders text content as code with line numbers in a left gutter.\n * Uses shiki for syntax highlighting when available, falling back to\n * plain monospace text otherwise.\n *\n * Layout:\n * ┌─────────────────────────────────────────┐\n * │ 1 │ import React from \"react\"; │\n * │ 2 │ │\n * │ 3 │ export function App() { │\n * │ 4 │ return <div>Hello</div>; │\n * │ 5 │ } │\n * └─────────────────────────────────────────┘\n */\nexport function CodeRenderer({\n content,\n fileName,\n className,\n}: FileRendererProps) {\n const language = React.useMemo(\n () => getLanguageFromFileName(fileName),\n [fileName],\n );\n\n const plainLines = React.useMemo(\n () => (content ?? \"\").split(\"\\n\"),\n [content],\n );\n\n const { lines: highlightedLines } = useHighlightedTokens(\n content ?? \"\",\n language,\n );\n\n const gutterWidth = React.useMemo(\n () => `${Math.max(String(plainLines.length).length, 2) + 2}ch`,\n [plainLines.length],\n );\n\n return (\n <div\n className={cn(\n \"relative h-full w-full overflow-auto rounded-md border border-border bg-background\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <pre className=\"m-0 p-0\">\n <code className=\"block font-mono text-sm leading-relaxed\">\n {highlightedLines\n ? highlightedLines.map((tokens, index) => (\n <div key={index} className=\"flex\">\n <span\n className=\"sticky left-0 shrink-0 select-none border-r border-border bg-muted px-3 text-right text-muted-foreground\"\n style={{ minWidth: gutterWidth }}\n >\n {index + 1}\n </span>\n <span className=\"whitespace-pre px-4\">\n {tokens.length === 0 || (tokens.length === 1 && tokens[0].content === \"\")\n ? \" \"\n : tokens.map((token, ti) => (\n <span key={ti} style={{ color: token.color }}>\n {token.content}\n </span>\n ))}\n </span>\n </div>\n ))\n : plainLines.map((line, index) => (\n <div key={index} className=\"flex\">\n <span\n className=\"sticky left-0 shrink-0 select-none border-r border-border bg-muted px-3 text-right text-muted-foreground\"\n style={{ minWidth: gutterWidth }}\n >\n {index + 1}\n </span>\n <span className=\"whitespace-pre px-4 text-foreground\">\n {line || \" \"}\n </span>\n </div>\n ))}\n </code>\n </pre>\n </div>\n );\n}\n\nCodeRenderer.displayName = \"CodeRenderer\";\n","import * as React from \"react\";\nimport ReactMarkdownImport from \"react-markdown\";\nimport remarkGfmImport from \"remark-gfm\";\nimport { cn } from \"../../../utils/cn\";\nimport { useHighlightedTokens } from \"../hooks/useHighlightedTokens\";\nimport type { FileRendererProps, ResolveImageUrl } from \"../types\";\n\n/**\n * Renders a fenced code block with shiki syntax highlighting.\n * Falls back to plain text if shiki is unavailable or the language isn't supported.\n */\nfunction HighlightedCodeBlock({\n children,\n className: codeClassName,\n ...props\n}: React.HTMLAttributes<HTMLElement>) {\n // Extract language from className (e.g., \"language-javascript\" -> \"javascript\")\n const language = React.useMemo(() => {\n if (!codeClassName) return \"text\";\n const match = codeClassName.match(/language-(\\S+)/);\n return match ? match[1] : \"text\";\n }, [codeClassName]);\n\n const code = React.useMemo(() => {\n const raw = String(children);\n // react-markdown adds a trailing newline to code blocks — strip it\n return raw.endsWith(\"\\n\") ? raw.slice(0, -1) : raw;\n }, [children]);\n\n const { lines } = useHighlightedTokens(code, language);\n\n if (lines) {\n return (\n <code className={cn(\"bg-transparent p-0\", codeClassName)} {...props}>\n {lines.map((tokens, i) => (\n <React.Fragment key={i}>\n {i > 0 && \"\\n\"}\n {tokens.map((token, ti) => (\n <span key={ti} style={{ color: token.color }}>\n {token.content}\n </span>\n ))}\n </React.Fragment>\n ))}\n </code>\n );\n }\n\n return (\n <code className={cn(\"bg-transparent p-0\", codeClassName)} {...props}>\n {children}\n </code>\n );\n}\n\n/**\n * Renders an image in markdown, with optional async URL resolution\n * for relative paths via the `resolveImageUrl` callback.\n *\n * - Remote URLs (http/https) and data URIs render directly.\n * - If no `resolveImageUrl` is provided, renders the src as-is.\n * - Otherwise, calls `resolveImageUrl(src)` and manages loading/error/resolved states.\n * - Cleans up blob URLs on unmount.\n */\nfunction MarkdownImage({\n src,\n alt,\n resolveImageUrl,\n ...props\n}: React.ImgHTMLAttributes<HTMLImageElement> & {\n resolveImageUrl?: ResolveImageUrl;\n}) {\n const needsResolution =\n !!src &&\n !!resolveImageUrl &&\n !src.startsWith(\"http://\") &&\n !src.startsWith(\"https://\") &&\n !src.startsWith(\"data:\");\n\n const [resolvedUrl, setResolvedUrl] = React.useState<string | null>(null);\n const [error, setError] = React.useState(false);\n const [loading, setLoading] = React.useState(needsResolution);\n\n React.useEffect(() => {\n if (!needsResolution || !src || !resolveImageUrl) return;\n\n let cancelled = false;\n let blobUrl: string | null = null;\n\n setLoading(true);\n setError(false);\n setResolvedUrl(null);\n\n Promise.resolve(resolveImageUrl(src))\n .then((url) => {\n if (cancelled) {\n // Revoke immediately if we're already unmounted/stale\n if (url.startsWith(\"blob:\")) URL.revokeObjectURL(url);\n return;\n }\n if (url.startsWith(\"blob:\")) blobUrl = url;\n setResolvedUrl(url);\n setLoading(false);\n })\n .catch(() => {\n if (!cancelled) {\n setError(true);\n setLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n if (blobUrl) URL.revokeObjectURL(blobUrl);\n };\n }, [needsResolution, src, resolveImageUrl]);\n\n // No resolution needed — render directly (current behavior)\n if (!needsResolution) {\n return (\n <img src={src} alt={alt} className=\"max-w-full rounded\" {...props} />\n );\n }\n\n // Loading\n if (loading) {\n return (\n <span className=\"my-2 inline-block h-24 w-40 animate-pulse rounded bg-muted\" />\n );\n }\n\n // Error — fall back to raw src (browser's broken image)\n if (error || !resolvedUrl) {\n return (\n <img src={src} alt={alt} className=\"max-w-full rounded\" {...props} />\n );\n }\n\n // Resolved\n return (\n <img\n src={resolvedUrl}\n alt={alt}\n className=\"max-w-full rounded\"\n {...props}\n />\n );\n}\n\n/**\n * MarkdownRenderer\n *\n * Renders markdown content using react-markdown + remark-gfm.\n * Fenced code blocks use shiki syntax highlighting when available.\n * Styled with Tailwind using semantic CSS variables for theme support.\n *\n * Requires `react-markdown` and `remark-gfm` as peer dependencies of @optilogic/core.\n */\nexport function MarkdownRenderer({\n content,\n className,\n resolveImageUrl,\n}: FileRendererProps) {\n const markdownComponents = React.useMemo(\n () => ({\n code: ({\n children,\n className: codeClassName,\n ...props\n }: React.HTMLAttributes<HTMLElement> & {\n inline?: boolean;\n node?: unknown;\n }) => {\n // Detect inline vs block: block code is wrapped in <pre> by react-markdown\n const isInline = !codeClassName;\n if (isInline) {\n return (\n <code\n className=\"rounded bg-muted px-1.5 py-0.5 font-mono text-[85%]\"\n {...props}\n >\n {children}\n </code>\n );\n }\n return (\n <HighlightedCodeBlock className={codeClassName} {...props}>\n {children}\n </HighlightedCodeBlock>\n );\n },\n pre: ({ children, ...props }: React.HTMLAttributes<HTMLPreElement>) => (\n <pre\n className=\"my-4 overflow-auto rounded-md border border-border bg-muted p-4 font-mono text-sm leading-relaxed\"\n {...props}\n >\n {children}\n </pre>\n ),\n blockquote: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLQuoteElement>) => (\n <blockquote\n className=\"my-4 border-l-4 border-border pl-4 text-muted-foreground\"\n {...props}\n >\n {children}\n </blockquote>\n ),\n a: ({\n children,\n href,\n ...props\n }: React.AnchorHTMLAttributes<HTMLAnchorElement>) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n {...props}\n >\n {children}\n </a>\n ),\n table: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableElement>) => (\n <div className=\"my-4 overflow-auto\">\n <table\n className=\"w-full border-collapse border border-border text-sm\"\n {...props}\n >\n {children}\n </table>\n </div>\n ),\n th: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableCellElement>) => (\n <th\n className=\"border border-border bg-muted px-3 py-2 text-left font-semibold\"\n {...props}\n >\n {children}\n </th>\n ),\n td: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableCellElement>) => (\n <td className=\"border border-border px-3 py-2\" {...props}>\n {children}\n </td>\n ),\n img: ({\n src,\n alt,\n ...props\n }: React.ImgHTMLAttributes<HTMLImageElement>) => (\n <MarkdownImage\n src={src}\n alt={alt}\n resolveImageUrl={resolveImageUrl}\n {...props}\n />\n ),\n }),\n [resolveImageUrl],\n );\n\n return (\n <div\n className={cn(\n \"h-full w-full overflow-auto bg-background p-6 text-sm leading-relaxed text-foreground\",\n // Heading styles\n \"[&_h1]:mb-4 [&_h1]:mt-6 [&_h1]:border-b [&_h1]:border-border [&_h1]:pb-2 [&_h1]:text-2xl [&_h1]:font-bold\",\n \"[&_h2]:mb-4 [&_h2]:mt-6 [&_h2]:border-b [&_h2]:border-border [&_h2]:pb-2 [&_h2]:text-xl [&_h2]:font-semibold\",\n \"[&_h3]:mb-3 [&_h3]:mt-5 [&_h3]:text-lg [&_h3]:font-semibold\",\n \"[&_h4]:mb-3 [&_h4]:mt-4 [&_h4]:text-base [&_h4]:font-semibold\",\n // Paragraph and list styles\n \"[&_p]:mb-4 [&_p]:leading-relaxed\",\n \"[&_ul]:mb-4 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:mb-4 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:mb-1\",\n // Horizontal rule\n \"[&_hr]:my-6 [&_hr]:border-border\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <ReactMarkdownImport\n remarkPlugins={[remarkGfmImport]}\n components={markdownComponents}\n >\n {content ?? \"\"}\n </ReactMarkdownImport>\n </div>\n );\n}\n\nMarkdownRenderer.displayName = \"MarkdownRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * ImageRenderer\n *\n * Renders an image from a URL, centered in its container.\n * Handles load errors with a fallback message.\n */\nexport function ImageRenderer({\n url,\n fileName,\n className,\n}: FileRendererProps) {\n const [hasError, setHasError] = React.useState(false);\n\n React.useEffect(() => {\n setHasError(false);\n }, [url]);\n\n if (!url) {\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center text-sm text-muted-foreground\",\n className,\n )}\n >\n No image URL provided\n </div>\n );\n }\n\n if (hasError) {\n return (\n <div\n className={cn(\n \"flex h-full w-full flex-col items-center justify-center gap-2 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span>Failed to load image</span>\n <span className=\"text-xs\">{fileName}</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center overflow-auto bg-background p-4\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <img\n src={url}\n alt={fileName}\n onError={() => setHasError(true)}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n}\n\nImageRenderer.displayName = \"ImageRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * PlainTextRenderer\n *\n * Renders plain text content without line numbers.\n * Used for .txt, .log, and as the ultimate fallback renderer.\n */\nexport function PlainTextRenderer({ content, className }: FileRendererProps) {\n return (\n <div\n className={cn(\n \"h-full w-full overflow-auto rounded-md border border-border bg-background p-4\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <pre className=\"m-0 whitespace-pre-wrap break-words font-mono text-sm leading-relaxed text-foreground\">\n {content ?? \"\"}\n </pre>\n </div>\n );\n}\n\nPlainTextRenderer.displayName = \"PlainTextRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { DataGrid } from \"../../data-grid\";\nimport type { ColumnDef } from \"../../data-grid\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * Parse a CSV/TSV string into headers and row objects.\n * Handles quoted fields and double-quote escaping.\n */\nfunction parseCSV(text: string): {\n headers: string[];\n rows: Record<string, string>[];\n} {\n const lines = text.split(\"\\n\");\n if (lines.length === 0) return { headers: [], rows: [] };\n\n // Auto-detect delimiter: if first line has tabs, treat as TSV\n const firstLine = lines[0] ?? \"\";\n const delimiter = firstLine.includes(\"\\t\") ? \"\\t\" : \",\";\n\n function parseLine(line: string): string[] {\n const fields: string[] = [];\n let current = \"\";\n let inQuotes = false;\n let i = 0;\n\n while (i < line.length) {\n const char = line[i]!;\n if (inQuotes) {\n if (char === '\"') {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n current += '\"';\n i += 2;\n } else {\n inQuotes = false;\n i++;\n }\n } else {\n current += char;\n i++;\n }\n } else {\n if (char === '\"') {\n inQuotes = true;\n i++;\n } else if (char === delimiter) {\n fields.push(current.trim());\n current = \"\";\n i++;\n } else {\n current += char;\n i++;\n }\n }\n }\n fields.push(current.trim());\n return fields;\n }\n\n const headers = parseLine(firstLine);\n const rows: Record<string, string>[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i]!;\n if (line.trim() === \"\") continue;\n const values = parseLine(line);\n const row: Record<string, string> = {};\n for (let j = 0; j < headers.length; j++) {\n row[headers[j]!] = values[j] ?? \"\";\n }\n rows.push(row);\n }\n\n return { headers, rows };\n}\n\n/**\n * CsvRenderer\n *\n * Parses CSV/TSV content and renders it in a DataGrid\n * with sorting, filtering, resizable columns, and virtualization.\n */\nexport function CsvRenderer({ content, className }: FileRendererProps) {\n const { headers, rows } = React.useMemo(\n () => parseCSV(content ?? \"\"),\n [content],\n );\n\n const columns = React.useMemo<ColumnDef<Record<string, string>>[]>(\n () =>\n headers.map((header) => ({\n key: header,\n header,\n sortable: true,\n filterable: true,\n filterType: \"text\" as const,\n })),\n [headers],\n );\n\n if (headers.length === 0) {\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center text-sm text-muted-foreground\",\n className,\n )}\n >\n No CSV data to display\n </div>\n );\n }\n\n return (\n <div className={cn(\"h-full w-full overflow-auto\", className)}>\n <DataGrid\n data={rows}\n columns={columns}\n getRowKey={(_, index) => String(index)}\n resizableColumns\n />\n </div>\n );\n}\n\nCsvRenderer.displayName = \"CsvRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * Strict CSP applied at two layers:\n *\n * 1. `csp` attribute on the <iframe> — browser-enforced, cannot be\n * overridden or loosened by anything inside the document.\n * (Supported in Chromium-based browsers.)\n *\n * 2. <meta http-equiv=\"Content-Security-Policy\"> in the <head> of the\n * srcdoc — fallback for browsers that don't support the `csp` attr.\n * Safe from injection: content is placed in <body>, and per the\n * HTML5 spec CSP meta tags are only honoured in <head>. Multiple\n * CSP policies are additive (can only restrict, never loosen).\n */\nconst CSP_POLICY = [\n \"default-src 'none'\",\n \"script-src 'unsafe-inline'\",\n \"style-src 'unsafe-inline'\",\n \"img-src data: blob:\",\n].join(\"; \");\n\n/**\n * All Permissions-Policy features explicitly denied. Prevents sandboxed\n * content from accessing device APIs even if a future browser grants\n * them by default.\n */\nconst PERMISSIONS_POLICY = [\n \"camera=()\",\n \"microphone=()\",\n \"geolocation=()\",\n \"payment=()\",\n \"usb=()\",\n \"clipboard-read=()\",\n \"clipboard-write=()\",\n \"display-capture=()\",\n \"fullscreen=()\",\n \"autoplay=()\",\n \"web-share=()\",\n \"screen-wake-lock=()\",\n \"xr-spatial-tracking=()\",\n \"magnetometer=()\",\n \"gyroscope=()\",\n \"accelerometer=()\",\n].join(\", \");\n\nfunction buildSandboxedHtml(content: string): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Security-Policy\" content=\"${CSP_POLICY}\">\n<script>\n// Neutralise APIs that the sandbox + CSP can't fully block.\n// This runs in <head> before any user content in <body>.\n// Uses Object.defineProperty to make overrides non-configurable\n// so user scripts cannot restore the original via prototype tricks.\n(function(){\n // postMessage: iframe can message parent even without allow-same-origin.\n // Kill it so content can't probe or spam any future parent listeners.\n // Also kill parent/top refs as an extra layer.\n var noop = function(){};\n try { Object.defineProperty(window, 'postMessage', { value: noop, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'parent', { value: window, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'top', { value: window, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'opener', { value: null, writable: false, configurable: false }); } catch(e) {}\n\n // RTCPeerConnection: not governed by CSP; could contact a STUN server\n // over UDP to leak the user's IP. Kill all browser-prefixed variants.\n var rtcNames = ['RTCPeerConnection', 'webkitRTCPeerConnection', 'mozRTCPeerConnection'];\n for (var i = 0; i < rtcNames.length; i++) {\n try { Object.defineProperty(window, rtcNames[i], { value: undefined, writable: false, configurable: false }); } catch(e) {}\n }\n})();\n</script>\n</head>\n<body>${content}</body>\n</html>`;\n}\n\n/**\n * HtmlRenderer\n *\n * Renders HTML content in a triple-locked iframe:\n *\n * Layer 1 — `sandbox=\"allow-scripts\"` (no allow-same-origin):\n * Opaque origin. No access to parent DOM, cookies, localStorage,\n * sessionStorage, or IndexedDB. No form submission, popups,\n * top-navigation, or pointer-lock.\n *\n * Layer 2 — Content-Security-Policy (iframe `csp` attr + meta fallback):\n * Blocks ALL network requests (fetch, XHR, WebSocket, sendBeacon,\n * image pings, external scripts/styles/fonts). Only inline scripts,\n * inline styles, and data:/blob: images are allowed.\n *\n * Layer 3 — Permissions-Policy via `allow` attribute:\n * Explicitly denies every device/sensor API (camera, microphone,\n * geolocation, payment, USB, display-capture, etc.).\n *\n * Additional hardening:\n * - referrerpolicy=\"no-referrer\" — no URL leakage to embedded content\n */\nexport function HtmlRenderer({\n content,\n fileName,\n className,\n}: FileRendererProps) {\n const srcDoc = React.useMemo(\n () => buildSandboxedHtml(content ?? \"\"),\n [content],\n );\n\n // The `csp` attribute is a valid HTML attribute for iframes (enforces CSP\n // at the browser level, cannot be overridden by document content) but is\n // not yet in React's type definitions. We spread it to avoid a TS error.\n const iframeProps = { csp: CSP_POLICY } as React.IframeHTMLAttributes<HTMLIFrameElement>;\n\n return (\n <iframe\n srcDoc={srcDoc}\n sandbox=\"allow-scripts\"\n title={fileName}\n referrerPolicy=\"no-referrer\"\n allow={PERMISSIONS_POLICY}\n className={cn(\"h-full w-full border-0\", className)}\n {...iframeProps}\n />\n );\n}\n\nHtmlRenderer.displayName = \"HtmlRenderer\";\n","import type { RendererRegistry, FileRenderer } from \"../types\";\nimport { CodeRenderer } from \"../components/CodeRenderer\";\nimport { MarkdownRenderer } from \"../components/MarkdownRenderer\";\nimport { ImageRenderer } from \"../components/ImageRenderer\";\nimport { PlainTextRenderer } from \"../components/PlainTextRenderer\";\nimport { CsvRenderer } from \"../components/CsvRenderer\";\nimport { HtmlRenderer } from \"../components/HtmlRenderer\";\n\n/**\n * Default renderer registry.\n * Maps built-in content types to their default renderer components.\n */\nexport const DEFAULT_RENDERERS: RendererRegistry = {\n code: CodeRenderer,\n markdown: MarkdownRenderer,\n image: ImageRenderer,\n plaintext: PlainTextRenderer,\n csv: CsvRenderer,\n html: HtmlRenderer,\n};\n\n/**\n * Merge user-provided renderers with defaults.\n * User renderers override defaults for the same content type.\n */\nexport function mergeRenderers(\n userRenderers?: RendererRegistry,\n): RendererRegistry {\n if (!userRenderers) return DEFAULT_RENDERERS;\n return { ...DEFAULT_RENDERERS, ...userRenderers };\n}\n\n/**\n * Resolve a renderer for a given content type.\n * Falls back to PlainTextRenderer if no match found.\n */\nexport function resolveRenderer(\n registry: RendererRegistry,\n contentType: string,\n): FileRenderer {\n return registry[contentType] ?? registry[\"plaintext\"] ?? PlainTextRenderer;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useContentType } from \"./hooks/useContentType\";\nimport { mergeRenderers, resolveRenderer } from \"./utils/rendererRegistry\";\nimport type { FileViewProps, FileViewError, RendererRegistry } from \"./types\";\n\nfunction DefaultEmptyState({ message }: { message: string }) {\n return (\n <div className=\"flex h-full w-full items-center justify-center text-sm text-muted-foreground\">\n {message}\n </div>\n );\n}\n\nfunction DefaultLoadingState() {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-primary/20 border-t-primary\" />\n <p className=\"text-sm text-muted-foreground\">Loading file...</p>\n </div>\n </div>\n );\n}\n\nfunction DefaultErrorState({ error }: { error: FileViewError }) {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <div className=\"flex max-w-sm flex-col items-center gap-3 text-center\">\n <p className=\"text-sm font-medium text-destructive\">{error.message}</p>\n {error.onRetry && (\n <button\n onClick={error.onRetry}\n className={cn(\n \"rounded-md border border-border bg-background px-3 py-1.5 text-sm text-foreground\",\n \"transition-colors hover:bg-muted\",\n )}\n >\n Retry\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * FileView\n *\n * A configurable file viewer that detects content type from the file name\n * and delegates rendering to a pluggable renderer system.\n *\n * Built-in renderers: Code, Markdown, Image, PlainText.\n * Users can override any renderer or add custom ones via the `renderers` prop.\n *\n * @example\n * <FileView fileName=\"app.tsx\" content={sourceCode} />\n *\n * @example\n * <FileView fileName=\"photo.png\" content={null} url={imageUrl} />\n *\n * @example\n * <FileView\n * fileName=\"data.txt\"\n * content={jsonContent}\n * contentType=\"code\"\n * renderers={{ code: MyCustomCodeRenderer }}\n * />\n */\nexport function FileView({\n content,\n url = null,\n fileName,\n contentType: contentTypeOverride,\n renderers: userRenderers,\n loading = false,\n error = null,\n loadingComponent,\n emptyComponent,\n emptyMessage = \"No content to display\",\n errorComponent: ErrorComponent,\n className,\n rendererClassName,\n resolveImageUrl,\n}: FileViewProps) {\n const { type: resolvedType } = useContentType({\n fileName,\n contentTypeOverride,\n });\n\n const registry = React.useMemo<RendererRegistry>(\n () => mergeRenderers(userRenderers),\n [userRenderers],\n );\n\n const Renderer = React.useMemo(\n () => resolveRenderer(registry, resolvedType),\n [registry, resolvedType],\n );\n\n // Loading state\n if (loading) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {loadingComponent ?? <DefaultLoadingState />}\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {ErrorComponent ? (\n <ErrorComponent error={error} />\n ) : (\n <DefaultErrorState error={error} />\n )}\n </div>\n );\n }\n\n // Empty state\n if ((content == null || content === \"\") && url == null) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {emptyComponent ?? <DefaultEmptyState message={emptyMessage} />}\n </div>\n );\n }\n\n // Render\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n <Renderer\n content={content}\n url={url ?? null}\n fileName={fileName}\n contentType={resolvedType}\n className={rendererClassName}\n resolveImageUrl={resolveImageUrl}\n />\n </div>\n );\n}\n\nFileView.displayName = \"FileView\";\n","import { forwardRef, useId } from \"react\";\n\nexport interface OptilogicLogoProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Override the green gradient with a solid color. Pass `\"currentColor\"` to inherit from CSS. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const OptilogicLogo = forwardRef<SVGSVGElement, OptilogicLogoProps>(\n ({ color, size, width, height, ...props }, ref) => {\n const uid = useId();\n const w = size ?? width ?? 32;\n const h = size ?? height ?? 32;\n const useGradient = !color;\n\n const fill = (idx: number) =>\n useGradient ? `url(#${uid}-g${idx})` : color;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 44 44\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"m 19.710153,24.886531 -0.018,-0.0332 -13.0194005,8.2119 17.2811005,-0.0485 -4.2451,-8.1302 z\"\n fill={fill(0)}\n />\n <path\n d=\"m 31.367953,26.996531 7.3048,-4.2341 -7.334,-12.652796 -7.3048,4.2341 z\"\n fill={fill(1)}\n />\n <path\n d=\"m 19.257253,24.563831 -3.8352,-6.752096 -8.7493005,15.254896 13.0942005,-7.6094 c -0.1597,-0.3029 -0.3297,-0.6007 -0.5097,-0.8934 z\"\n fill={fill(2)}\n />\n <path\n d=\"m 24.393053,23.112531 c -1.0221,-1.9514 -2.5557,-3.587996 -4.4365,-4.734696 -1.8808,-1.1467 -4.0381,-1.7602 -6.2408,-1.775 l 4.8033,8.455596 c 0.1745,0.2844 0.3398,0.5753 0.4959,0.8726 l 5.0969,8.9751 c 1.0457,-1.7798 1.6202,-3.7968 1.6694,-5.8604 0.0492,-2.0636 -0.4286,-4.1057 -1.3882,-5.9332 z\"\n fill={fill(3)}\n />\n {useGradient && (\n <defs>\n <linearGradient id={`${uid}-g0`} x1=\"-10.349\" y1=\"21.971\" x2=\"7.45\" y2=\"21.971\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.016\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.308\" stopColor=\"#36D87A\" />\n <stop offset=\"0.578\" stopColor=\"#20C75F\" />\n <stop offset=\"0.817\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g1`} x1=\"-590.283\" y1=\"3567.46\" x2=\"-597.588\" y2=\"3571.69\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0EBA49\" />\n <stop offset=\"0.031\" stopColor=\"#11BC4D\" />\n <stop offset=\"0.315\" stopColor=\"#30D371\" />\n <stop offset=\"0.58\" stopColor=\"#46E38C\" />\n <stop offset=\"0.816\" stopColor=\"#53ED9C\" />\n <stop offset=\"1\" stopColor=\"#58F1A2\" />\n </linearGradient>\n <linearGradient id={`${uid}-g2`} x1=\"-10.35\" y1=\"18.453\" x2=\"7.38\" y2=\"18.453\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.184\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.685\" stopColor=\"#30D371\" />\n <stop offset=\"0.969\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g3`} x1=\"8.369\" y1=\"24.711\" x2=\"26.243\" y2=\"24.711\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.184\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.685\" stopColor=\"#30D371\" />\n <stop offset=\"0.969\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n );\n }\n);\n\nOptilogicLogo.displayName = \"OptilogicLogo\";\n","import { forwardRef, useId } from \"react\";\n\nexport interface OptilogicLogoWithTextProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Override the green gradient on the icon with a solid color. */\n color?: string;\n /** Override the text fill. Defaults to `\"currentColor\"`. */\n textColor?: string;\n /** Shorthand for setting height (width scales proportionally at ~3:1). */\n size?: number | string;\n}\n\nexport const OptilogicLogoWithText = forwardRef<\n SVGSVGElement,\n OptilogicLogoWithTextProps\n>(({ color, textColor = \"currentColor\", size, width, height, ...props }, ref) => {\n const uid = useId();\n const h = size ?? height ?? 35;\n const w = width ?? (typeof h === \"number\" ? Math.round((h as number) * (102 / 35)) : 102);\n const useGradient = !color;\n\n const iconFill = (idx: number) =>\n useGradient ? `url(#${uid}-g${idx})` : color;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 102 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n {/* Icon mark */}\n <path d=\"M87.8887 8.94166L87.9811 9.12063L87.7877 8.76953C87.8258 8.81696 87.8588 8.87662 87.8887 8.94166Z\" fill={iconFill(0)} />\n <path d=\"M87.9808 9.11386L87.7872 8.76282L87.6158 8.45508C87.6774 8.55543 87.7358 8.65573 87.7938 8.75874C87.8253 8.81704 87.8583 8.87665 87.8883 8.93494L87.9808 9.11386Z\" fill={iconFill(1)} />\n <path d=\"M93.0335 2.12149L91.0895 3.27987C90.4698 3.64931 90.2588 4.46544 90.6177 5.10275L93.5225 10.2545C93.8819 10.8918 94.6755 11.109 95.2957 10.7395L97.2391 9.58114C97.8588 9.21171 98.0703 8.39559 97.7109 7.75827L94.8061 2.60653C94.4467 1.96921 93.6532 1.75205 93.0335 2.12149Z\" fill={iconFill(2)} />\n <path d=\"M79.4231 14.3186L84.3908 5.41699L86.529 9.28695L86.9077 9.96469L87.0633 10.2467L87.2412 10.5665L87.2529 10.5883L90.0601 15.6768L80.2116 15.7039C80.0535 15.7051 79.8974 15.6634 79.7597 15.583C79.6224 15.5025 79.5075 15.3862 79.4277 15.2457C79.3479 15.1052 79.3052 14.9456 79.3047 14.7828C79.3037 14.62 79.3449 14.4599 79.4231 14.3186Z\" fill={iconFill(3)} />\n <path d=\"M91.9324 13.4257C91.9171 13.5856 91.8988 13.7456 91.877 13.9056C91.8612 14.0113 91.8439 14.117 91.8241 14.2228C91.8043 14.3285 91.7844 14.4355 91.7611 14.5399C91.7372 14.6443 91.7123 14.7486 91.6858 14.853C91.6594 14.9574 91.6304 15.0631 91.5999 15.1661C91.5592 15.3017 91.5145 15.4373 91.4682 15.5728C91.422 15.7084 91.3681 15.8439 91.3142 15.9794C91.2771 16.0703 91.239 16.1571 91.2003 16.2506V16.2587C91.1653 16.3358 91.1098 16.4014 91.0407 16.4484C90.9716 16.4954 90.8907 16.5218 90.8079 16.5249C90.725 16.5279 90.6432 16.5075 90.5705 16.4658C90.4983 16.4241 90.4383 16.3628 90.3976 16.2885L90.0616 15.6785L87.256 10.5995C87.256 10.5927 87.256 10.5845 87.2453 10.5778L87.1609 10.4151C87.1335 10.3609 87.1029 10.3067 87.074 10.2538C87.0211 10.1603 86.9672 10.0681 86.9118 9.98269L86.5336 9.30494L84.3914 5.41738L83.9704 4.65422C83.9293 4.5799 83.9089 4.49533 83.9115 4.40982C83.914 4.32431 83.9394 4.24116 83.9847 4.16955C84.0304 4.09794 84.0945 4.04062 84.1692 4.00392C84.2444 3.96723 84.3283 3.95257 84.4107 3.96156C85.7934 4.11436 87.1177 4.61474 88.2671 5.41853C89.417 6.22228 90.3564 7.30472 91.0026 8.57025C91.1642 8.88468 91.3061 9.20929 91.4276 9.54216C91.4881 9.70619 91.5435 9.87429 91.5948 10.041C91.6106 10.0939 91.6253 10.1467 91.6396 10.1982C91.6843 10.3568 91.7239 10.5154 91.7611 10.6754C91.9598 11.5769 92.0178 12.5054 91.9324 13.4257Z\" fill={iconFill(4)} />\n <path d=\"M87.1593 10.4138C87.1289 10.3609 87.101 10.3067 87.0711 10.2538C87.0183 10.1589 86.9656 10.0668 86.9103 9.97461C86.9656 10.0668 87.0198 10.1589 87.0721 10.2457C87.0944 10.3053 87.1248 10.3596 87.1593 10.4138Z\" fill={iconFill(5)} />\n\n {/* \"optilogic\" text */}\n <path d=\"M16.9243 20.9745C16.9243 25.6035 13.6033 29.5561 8.46292 29.5561C3.32258 29.5561 0.00289826 25.6035 0.00289826 20.9745C-0.0434 18.7389 0.775929 16.576 2.28065 14.9615C3.78537 13.3471 5.85223 12.4133 8.02654 12.3657C8.17158 12.3657 8.31661 12.3657 8.46292 12.3657C10.6366 12.294 12.7488 13.1131 14.3351 14.6426C15.9214 16.1721 16.8518 18.2869 16.9217 20.5217C16.9256 20.6749 16.9269 20.824 16.9243 20.9745ZM3.6179 20.9745C3.6179 24.1314 5.59546 26.3056 8.46292 26.3056C11.3304 26.3056 13.3093 24.1368 13.3093 20.9745C13.3093 17.8121 11.3317 15.6175 8.46424 15.6175C5.59678 15.6175 3.6179 17.8175 3.6179 20.9745Z\" fill={textColor} />\n <path d=\"M30.774 23.8266C30.774 27.0541 28.4998 29.5563 25.5004 29.5563C24.4662 29.56 23.4594 29.2147 22.6343 28.5736V34.1162H19.2065V18.4723H21.8683L22.2968 19.4077C23.1653 18.5707 24.3141 18.1099 25.5044 18.1213C28.4998 18.1213 30.774 20.5991 30.774 23.8266ZM22.6317 23.8266C22.6317 25.3001 23.4965 26.6095 24.9744 26.6095C26.4523 26.6095 27.3172 25.3001 27.3172 23.8266C27.3172 22.3532 26.4536 21.0654 24.9744 21.0654C23.4952 21.0654 22.6317 22.3532 22.6317 23.8266Z\" fill={textColor} />\n <path d=\"M41.148 18.4718V21.4186H37.5739V24.9958C37.5739 26.0246 38.4374 26.5154 39.4196 26.1412L40.2107 25.8376L41.235 28.6435L40.2107 29.0854C37.3458 30.3473 34.1382 29.0393 34.1382 25.0406V21.4186H31.4553V18.4718H34.1395V15.083H37.5673V18.4718H41.148Z\" fill={textColor} />\n <path d=\"M46.9673 14.8024C46.9673 15.1778 46.8591 15.5447 46.6563 15.8567C46.4535 16.1688 46.1652 16.4121 45.8279 16.5557C45.4907 16.6993 45.1195 16.7369 44.7615 16.6637C44.4035 16.5905 44.0746 16.4097 43.8165 16.1443C43.5584 15.8789 43.3826 15.5408 43.3113 15.1727C43.2401 14.8045 43.2767 14.423 43.4164 14.0762C43.5561 13.7295 43.7927 13.4331 44.0962 13.2246C44.3997 13.016 44.7566 12.9047 45.1216 12.9047C45.3591 12.8995 45.5953 12.9425 45.8166 13.0312C46.0379 13.1199 46.2401 13.2525 46.4115 13.4216C46.5829 13.5907 46.7202 13.7928 46.8156 14.0165C46.911 14.2402 46.9625 14.481 46.9673 14.7252V14.8024ZM43.4196 29.2074V18.4718H46.8473V29.2047L43.4196 29.2074Z\" fill={textColor} />\n <path d=\"M49.5854 29.2044V12.7188H53.0133V29.2044H49.5854Z\" fill={textColor} />\n <path d=\"M66.7762 23.8518C66.7762 26.9844 64.5018 29.5571 60.9753 29.5571C57.4483 29.5571 55.1744 26.9817 55.1744 23.8518C55.1744 20.7219 57.4483 18.1221 60.9753 18.1221C64.5018 18.1221 66.7762 20.7165 66.7762 23.8518ZM58.6338 23.8518C58.6338 25.3713 59.5209 26.6116 60.9763 26.6116C62.4317 26.6116 63.3193 25.3727 63.3193 23.8518C63.3193 22.3309 62.4317 21.0689 60.9763 21.0689C59.5209 21.0689 58.6338 22.3295 58.6338 23.8518Z\" fill={textColor} />\n <path d=\"M76.5321 19.4068L76.9617 18.4715H79.6224V28.9468C79.6224 31.6836 77.9626 34.8867 73.6619 34.8867C70.5228 34.8867 68.4085 33.0391 68.0222 30.0068L71.2294 29.4457C71.3204 30.9652 72.1841 31.9479 73.7768 31.9479C75.5738 31.9479 76.164 30.5667 76.164 29.3521V28.0427C75.3273 28.6367 74.3334 28.9526 73.3167 28.9482C71.9203 28.9482 70.5807 28.3778 69.5935 27.3625C68.6057 26.3472 68.0511 24.9702 68.0511 23.5343C68.0511 22.0984 68.6057 20.7214 69.5935 19.7061C70.5807 18.6908 71.9203 18.1204 73.3167 18.1204C74.5098 18.107 75.6618 18.5678 76.5321 19.4068ZM71.5064 23.5221C71.5156 23.9966 71.661 24.4578 71.9238 24.8477C72.1871 25.2376 72.5562 25.539 72.9853 25.7139C73.4143 25.8888 73.8846 25.9294 74.336 25.8307C74.7874 25.7321 75.2002 25.4985 75.523 25.1593C75.8463 24.82 76.0644 24.3903 76.1503 23.9241C76.2367 23.4578 76.1869 22.9758 76.0075 22.5385C75.828 22.1012 75.5271 21.7282 75.1422 21.4662C74.7569 21.2042 74.3055 21.0649 73.8439 21.0659C73.5399 21.0618 73.2384 21.1193 72.9563 21.235C72.6742 21.3509 72.4169 21.5227 72.1993 21.7407C71.9818 21.9587 71.8084 22.2187 71.6884 22.5057C71.5685 22.7928 71.5049 23.1013 71.5014 23.4137C71.5039 23.4448 71.5049 23.4855 71.5064 23.5221Z\" fill={textColor} />\n <path d=\"M82.4911 29.2048V18.4746H85.9281V29.2075L82.4911 29.2048Z\" fill={textColor} />\n <path d=\"M98.8928 22.0489L95.7288 22.774C95.6388 22.2871 95.3841 21.8486 95.0099 21.5362C94.6358 21.2239 94.1661 21.0578 93.6841 21.0675C92.5698 21.0675 91.4321 21.9553 91.4321 23.8503C91.4321 25.7453 92.5698 26.6101 93.6841 26.6101C94.1661 26.6201 94.6358 26.4541 95.0104 26.1417C95.3846 25.8293 95.6393 25.3906 95.7288 24.9036L98.8928 25.6287C98.5969 26.7867 97.9269 27.8067 96.9925 28.5211C96.0582 29.2355 94.9149 29.6018 93.7512 29.5597C90.272 29.5597 87.9742 26.9409 87.9742 23.8544C87.9697 23.1054 88.1089 22.3628 88.3835 21.6691C88.658 20.9754 89.0626 20.344 89.5751 19.8112C90.087 19.2784 90.696 18.8545 91.3675 18.5637C92.0386 18.2729 92.7589 18.121 93.4874 18.1165C93.5748 18.1165 93.6628 18.1165 93.7512 18.1165C94.9154 18.0745 96.0582 18.441 96.9931 19.1557C97.9274 19.8703 98.5974 20.8907 98.8928 22.0489Z\" fill={textColor} />\n\n {useGradient && (\n <defs>\n <linearGradient id={`${uid}-g0`} x1=\"87.5964\" y1=\"8.93628\" x2=\"87.7953\" y2=\"8.93628\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g1`} x1=\"87.1426\" y1=\"8.7845\" x2=\"87.6357\" y2=\"8.7845\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.18\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.69\" stopColor=\"#30D371\" />\n <stop offset=\"0.97\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g2`} x1=\"-1054.89\" y1=\"692.801\" x2=\"-1059.13\" y2=\"695.193\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0EBA49\" />\n <stop offset=\"0.03\" stopColor=\"#11BC4D\" />\n <stop offset=\"0.32\" stopColor=\"#30D371\" />\n <stop offset=\"0.58\" stopColor=\"#46E38C\" />\n <stop offset=\"0.82\" stopColor=\"#53ED9C\" />\n <stop offset=\"1\" stopColor=\"#58F1A2\" />\n </linearGradient>\n <linearGradient id={`${uid}-g3`} x1=\"79.3032\" y1=\"10.5625\" x2=\"90.0545\" y2=\"10.5625\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g4`} x1=\"83.9074\" y1=\"10.2429\" x2=\"91.969\" y2=\"10.2429\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g5`} x1=\"86.7936\" y1=\"10.1942\" x2=\"87.1619\" y2=\"10.1942\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.18\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.69\" stopColor=\"#30D371\" />\n <stop offset=\"0.97\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n );\n});\n\nOptilogicLogoWithText.displayName = \"OptilogicLogoWithText\";\n","import { forwardRef } from \"react\";\n\nexport interface CosmicFrogIconProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Icon fill color. Defaults to `\"currentColor\"` for theme compatibility. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const CosmicFrogIcon = forwardRef<SVGSVGElement, CosmicFrogIconProps>(\n ({ color = \"currentColor\", size, width, height, ...props }, ref) => {\n const w = size ?? width ?? 24;\n const h = size ?? height ?? 24;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 300 286.9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M189.4,277.9l0-0.7c0-2.3,1.3-4.4,3.5-5.2c5.9-2.2,9.2-9.9,4.9-16.1c-6.2-9-20.2-28.4-25.3-35.3 c0,0,6-9.4,13.2-19.5c5.8,6.9,36.2,46.7,45.7,58.4c6.8,8.3,20.3,11.9,29.5,12.9c2.9,0.3,5.1,2.8,5,5.7v0c0,3.2-2.6,5.7-5.7,5.7 h-65.2C192,283.6,189.4,281.1,189.4,277.9z\"\n fill={color}\n />\n <path\n d=\"M214.5,154.3c9.1-9.5,29.6-47.6,19.9-65c-7.6-13.7-26-11.9-48.7-3.1c-1.5,0.6-2.5,2.1-2.3,3.6 c0.9,10.5-6,20.9-17.3,25.8c-13.8,6-29.2,1.2-34.5-11.2c-4.2-9.8-2.9-20.5,2.5-28.3c0.7-1-0.5-2.2-1.5-1.6 c-9.3,6.1-15.5,16.7-15.5,28.7c0,6.1,1.6,11.8,4.4,16.7c-31.6,21.4-48.6,48-55.3,59.6c-7.4,12.8-7.5,29.9-7.5,34.2 c0,0-5.2-8.1-10.5-17.6c-1.9-3.4-5.4-7.9-12-3c-8.8,6.6-27.6,29.3-31.7,57c-2.9,19.8,6.7,33.4,18.8,33.4h33.9c3,0,5.4-2.4,5.5-5.4 l0-1c0-2.5-1.6-4.6-3.9-5.3c-12.7-3.9-17.8-26.3-15.2-38c7.2,9.7,10.7,14.8,24.7,27.7c9.6,8.8,20.2,4.2,23.6-2.5 c5.7-11.3,8.7-24.3,12-35.3c1.4,5.1,6.8,22.2,6.8,30.3c0,7.1-2.9,16-10.2,18.3c-2.3,0.7-3.9,2.8-3.9,5.2l0,0.5 c0,3.1,2.5,5.5,5.5,5.5h59.7c2.6,0,5.1-1.7,5.7-4.3c0.8-3.3-1.4-6.3-4.6-6.8c-9.4-1.6-24.3-7.3-27.4-17c-4.5-14-14.5-55-15.2-60.4 l14.4,15.3c9.9-17.1,40.6-67.7,64.3-92.6c23.7-25,29.2-9.6,25.6,4.2C221.7,133.6,217.9,146.9,214.5,154.3z\"\n fill={color}\n />\n <path\n d=\"M269,19.7l3.5,12.1c1.3,4.4,4.7,7.8,9.1,9.1l12.1,3.5c2.9,0.9,2.9,5,0,5.8l-12.1,3.5c-4.4,1.3-7.8,4.7-9.1,9.1 L269,75c-0.9,2.9-5,2.9-5.8,0l-3.5-12.1c-1.3-4.4-4.7-7.8-9.1-9.1l-12.1-3.5c-2.9-0.9-2.9-5,0-5.8l12.1-3.5 c4.4-1.3,7.8-4.7,9.1-9.1l3.5-12.1C264,16.7,268.2,16.7,269,19.7z\"\n fill={color}\n />\n <path\n d=\"M185.3,4.6l2.2,7.5c0.8,2.7,2.9,4.8,5.6,5.6l7.5,2.2c1.8,0.5,1.8,3.1,0,3.6l-7.5,2.2c-2.7,0.8-4.8,2.9-5.6,5.6 l-2.2,7.5c-0.5,1.8-3.1,1.8-3.6,0l-2.2-7.5c-0.8-2.7-2.9-4.8-5.6-5.6l-7.5-2.2c-1.8-0.5-1.8-3.1,0-3.6l7.5-2.2 c2.7-0.8,4.8-2.9,5.6-5.6l2.2-7.5C182.2,2.8,184.8,2.8,185.3,4.6z\"\n fill={color}\n />\n <path\n d=\"M274.3,131.6l2.2,7.7c0.8,2.8,3,5,5.8,5.8l7.7,2.2c1.9,0.5,1.9,3.2,0,3.7l-7.7,2.2c-2.8,0.8-5,3-5.8,5.8 l-2.2,7.7c-0.5,1.9-3.2,1.9-3.7,0l-2.2-7.7c-0.8-2.8-3-5-5.8-5.8l-7.7-2.2c-1.9-0.5-1.9-3.2,0-3.7l7.7-2.2c2.8-0.8,5-3,5.8-5.8 l2.2-7.7C271.1,129.8,273.7,129.8,274.3,131.6z\"\n fill={color}\n />\n <ellipse\n transform=\"matrix(0.7071 -0.7071 0.7071 0.7071 -11.8631 139.9984)\"\n cx=\"163.1\"\n cy=\"84.3\"\n rx=\"10.2\"\n ry=\"16.5\"\n fill={color}\n />\n </svg>\n );\n }\n);\n\nCosmicFrogIcon.displayName = \"CosmicFrogIcon\";\n","import { forwardRef } from \"react\";\n\nexport interface DataStarIconProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Icon fill color. Defaults to `\"currentColor\"` for theme compatibility. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const DataStarIcon = forwardRef<SVGSVGElement, DataStarIconProps>(\n ({ color = \"currentColor\", size, width, height, ...props }, ref) => {\n const w = size ?? width ?? 24;\n const h = size ?? height ?? 24;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 31 29\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M26.9476 14.2775C30.1992 9.06819 30.9839 4.11351 28.4804 1.69452C25.9768 -0.724468 20.8494 0.0323405 15.4592 3.17632C9.90111 -0.190461 4.5547 -1.06752 1.98551 1.40805C-0.583687 3.88363 0.295825 8.9727 3.68979 14.2775C0.0622617 19.7379 -0.912135 25.0321 1.7045 27.5607C4.32114 30.0893 9.79893 29.1486 15.4519 25.6439C20.9479 28.9258 26.2104 29.7534 28.7577 27.2919C31.305 24.8305 30.4328 19.6424 26.9476 14.2775ZM27.4074 3.96143C28.4767 5.84641 27.7724 9.03282 25.736 12.5446C24.5761 10.9981 23.2924 9.54244 21.8968 8.19113C23.5104 6.54516 25.3528 5.12513 27.3709 3.97204L27.4074 3.96143ZM24.6193 14.2987C23.4165 16.0228 22.0545 17.6374 20.5501 19.1226C19.5977 18.0439 18.9371 17.1775 18.6707 16.8132C17.7036 14.9494 17.7328 13.6303 18.7619 11.7418C19.1524 11.2361 19.7619 10.4757 20.5501 9.61989C22.0448 11.0668 23.4052 12.6384 24.6156 14.3164L24.6193 14.2987ZM25.7141 2.55036C24.5163 4.44516 23.0632 6.17683 21.3932 7.69955C20.0996 6.48666 18.7191 5.36399 17.262 4.33984C20.6414 2.49377 23.7434 1.79 25.7287 2.54682L25.7141 2.55036ZM19.9334 8.99392C18.7291 10.0018 17.7437 10.695 17.3788 10.9567C15.4592 11.8338 14.0943 11.7135 12.0178 10.603L11.9192 10.5606C11.5069 10.2529 10.9996 9.8533 10.4376 9.39355C11.9782 7.93165 13.6515 6.60719 15.4373 5.43617C17.0317 6.50371 18.5353 7.69343 19.9334 8.99392ZM11.609 16.3994C11.4667 16.5975 10.8098 17.4993 9.76611 18.6911C8.40065 17.3248 7.15322 15.8522 6.03638 14.2881C7.15586 12.7784 8.39558 11.3559 9.74418 10.0337C10.9376 11.3952 11.6346 12.389 11.6346 12.389C11.951 13.0138 12.1134 13.7012 12.109 14.3971C12.1045 15.0931 11.9334 15.7785 11.609 16.3994ZM13.6454 4.30094C11.9738 5.43758 10.4006 6.7043 8.9413 8.08857C7.11704 6.45833 5.54718 4.57962 4.28101 2.51146L4.24084 2.50085C6.2736 1.36562 9.79893 2.12244 13.6454 4.31155V4.30094ZM2.84313 4.13472C4.90738 5.37184 6.78411 6.88106 8.41947 8.61905C7.15181 9.86002 5.97733 11.1872 4.90507 12.5906C2.88327 9.21672 2.0804 6.14348 2.84313 4.14533V4.13472ZM4.87587 15.9963C5.95746 17.4555 7.14924 18.835 8.44136 20.1234C6.72159 21.949 4.73312 23.5184 2.54022 24.781C1.78844 22.7192 2.6935 19.4833 4.87587 16.0069V15.9963ZM4.00366 26.4892V26.4715C5.35389 24.2982 7.03309 22.3335 8.98512 20.6433C10.4334 22.0512 11.9995 23.3405 13.6673 24.4981C9.71502 26.811 6.06558 27.6421 4.00366 26.4998V26.4892ZM15.43 23.3664C13.6493 22.1829 11.9809 20.8479 10.4449 19.3772C11.2696 18.7088 11.9521 18.2137 12.3462 17.9378C14.171 17.0254 15.4519 16.9405 17.1671 17.6832C17.2438 17.7362 18.386 18.4966 19.886 19.7485C18.4975 21.0722 17.0026 22.2867 15.4154 23.3805L15.43 23.3664ZM17.2219 24.4627C18.6867 23.4156 20.0722 22.268 21.3676 21.0287C23.1328 22.6267 24.6552 24.4592 25.8893 26.4715C23.8383 27.1894 20.6633 26.4114 17.2219 24.4733V24.4627ZM27.6629 25.0569L27.6447 25.0286C25.5077 23.8079 23.5653 22.2926 21.8786 20.5301C23.3024 19.1424 24.6049 17.6425 25.7725 16.0458C28.0205 19.7238 28.8052 23.1188 27.6629 25.0675V25.0569Z\"\n fill={color}\n />\n </svg>\n );\n }\n);\n\nDataStarIcon.displayName = \"DataStarIcon\";\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/loading-spinner.tsx","../src/components/data-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/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/multi-select.tsx","../src/components/combobox.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","../src/components/file-view/utils/contentTypeDetection.ts","../src/components/file-view/hooks/useContentType.ts","../src/components/file-view/hooks/useShikiHighlighter.ts","../src/components/file-view/hooks/useDarkMode.ts","../src/components/file-view/hooks/useHighlightedTokens.ts","../src/components/file-view/utils/languageMapping.ts","../src/components/file-view/components/CodeRenderer.tsx","../src/components/file-view/components/MarkdownRenderer.tsx","../src/components/file-view/components/ImageRenderer.tsx","../src/components/file-view/components/PlainTextRenderer.tsx","../src/components/file-view/components/CsvRenderer.tsx","../src/components/file-view/components/HtmlRenderer.tsx","../src/components/file-view/utils/rendererRegistry.ts","../src/components/file-view/FileView.tsx","../src/components/branding/OptilogicLogo.tsx","../src/components/branding/OptilogicLogoWithText.tsx","../src/components/branding/CosmicFrogIcon.tsx","../src/components/branding/DataStarIcon.tsx"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","React3","LabelPrimitive","React4","React5","CheckboxPrimitive","Check","React6","SwitchPrimitive","React7","ProgressPrimitive","React8","SeparatorPrimitive","SelectPrimitive","React9","jsxs","ChevronDown","ChevronUp","TabsPrimitive","React10","AccordionPrimitive","React11","TooltipPrimitive","React12","PopoverPrimitive","React13","DropdownMenuPrimitive","React14","ChevronRight","Circle","AlertDialogPrimitive","React15","React16","React17","React18","React19","React20","Search","ArrowUp","ArrowDown","ArrowUpDown","ChevronsLeft","ChevronLeft","ChevronsRight","React21","X","React22","React23","React24","Sonner","React25","DayPicker","Icon","React26","format","CalendarIcon","parse","isValid","React27","Fragment","parseISO","React28","Filter","GripVertical","React29","getCellValue","useMemo","useState","useRef","useEffect","useCallback","React30","useVirtualizer","React31","React32","React33","React34","React35","Copy","React36","Palette","React37","React38","React39","ReactMarkdownImport","remarkGfmImport","React40","React41","React42","React43","forwardRef","useId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACHA,IAAM,cAAA,GAAiBC,0BAAA;AAAA,EACrB,mRAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,0HAAA;AAAA,QACF,OAAA,EACE,6EAAA;AAAA,QACF,WAAA,EACE,kHAAA;AAAA,QACF,OAAA,EACE,kKAAA;AAAA,QACF,SAAA,EACE,4FAAA;AAAA,QACF,KAAA,EACE,sIAAA;AAAA,QACF,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,GAAeC,kBAAA,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,UAAUC,cAAA,GAAO,QAAA;AAC9B,IAAA,uBACEC,cAAA;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;AC9DrB,IAAM,KAAA,GAAcC,kBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACED,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,8ZAAA;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,GAAgBH,0BAAAA;AAAA,EACpB;AACF;AAgBA,IAAM,KAAA,GAAcK,8BAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BF,cAAAA;AAAA,EAAgBG,yBAAA,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,cAA6BA,yBAAA,CAAA,IAAA,CAAK,WAAA;ACfxC,IAAM,QAAA,GAAiBC,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACEJ,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,gUAAA;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,GAAgBH,0BAAAA;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,uBACEG,cAAAA,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,GAAiBK,kBAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CL,cAAAA;AAAA,EAAmBM,4BAAA,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,kBAAAN,cAAAA;AAAA,MAAmBM,4BAAA,CAAA,SAAA;AAAA,MAAlB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,2BAAA;AAAA;AAAA,UAEA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAN,cAAAA,CAACO,iBAAA,EAAA,EAAM,SAAA,EAAU,wBAAA,EAAyB;AAAA;AAAA;AAC5C;AACF,CACD;AACD,QAAA,CAAS,cAAgCD,4BAAA,CAAA,IAAA,CAAK,WAAA;ACrD9C,IAAM,MAAA,GAAeE,8BAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BR,cAAAA;AAAA,EAAiBS,0BAAA,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,mEAAA;AAAA;AAAA,MAEA,iBAAA;AAAA;AAAA,MAEA,mEAAA;AAAA;AAAA,MAEA,iCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,GAAA;AAAA,IAEA,QAAA,kBAAAT,cAAAA;AAAA,MAAiBS,0BAAA,CAAA,KAAA;AAAA,MAAhB;AAAA,QACC,SAAA,EAAW,EAAA;AAAA;AAAA,UAET,gDAAA;AAAA,UACA,6CAAA;AAAA,UACA,sBAAA;AAAA;AAAA,UAEA;AAAA;AACF;AAAA;AACF;AACF,CACD;AACD,MAAA,CAAO,cAA8BA,0BAAA,CAAA,IAAA,CAAK,WAAA;ACtC1C,IAAM,QAAA,GAAiBC,kBAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjCV,cAAAA;AAAA,EAAmBW,4BAAA,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,kBAAAX,cAAAA;AAAA,MAAmBW,4BAAA,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,cAAgCA,4BAAA,CAAA,IAAA,CAAK,WAAA;ACZ9C,IAAM,SAAA,GAAkBC,kBAAA,CAAA,UAAA;AAAA,EAItB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEAZ,cAAAA;AAAA,IAAoBa,6BAAA,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,cAAiCA,6BAAA,CAAA,IAAA,CAAK,WAAA;ACpBhD,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAkB;AACxD,EAAA,uBACEb,cAAAA;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,GAAyBc,0BAAA,CAAA;AAE/B,IAAM,WAAA,GAA8BA,0BAAA,CAAA;AAEpC,IAAM,WAAA,GAA8BA,0BAAA,CAAA;AAKpC,IAAM,aAAA,GAAsBC,8BAG1B,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCC,eAAA;AAAA,EAAiBF,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qXAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACDd,cAAAA,CAAiBc,0BAAA,CAAA,IAAA,EAAhB,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAAd,cAAAA,CAACiB,uBAAA,EAAA,EAAY,SAAA,EAAU,oBAAA,EAAqB,CAAA,EAC9C;AAAA;AAAA;AACF,CACD;AACD,aAAA,CAAc,cAA8BH,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,oBAAA,GAA6BC,8BAGjC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bf,cAAAA;AAAA,EAAiBc,0BAAA,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,kBAAAd,cAAAA,CAACkB,qBAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AACjC,CACD;AACD,oBAAA,CAAqB,cAA8BJ,0BAAA,CAAA,cAAA,CAAe,WAAA;AAElE,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bf,cAAAA;AAAA,EAAiBc,0BAAA,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,kBAAAd,cAAAA,CAACiB,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AACnC,CACD;AACD,sBAAA,CAAuB,cACLH,0BAAA,CAAA,gBAAA,CAAiB,WAAA;AAEnC,IAAM,aAAA,GAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,WAAW,QAAA,EAAU,QAAA,GAAW,QAAA,EAAU,GAAG,OAAM,EAAG,GAAA,qBACzDf,cAAAA,CAAiBc,mCAAhB,EACC,QAAA,kBAAAE,eAAA;AAAA,EAAiBF,0BAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qkBAAA;AAAA,MACA,aAAa,QAAA,IACX,iIAAA;AAAA,MACF;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAd,eAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,sBACtBA,cAAAA;AAAA,QAAiBc,0BAAA,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,sBACAd,eAAC,sBAAA,EAAA,EAAuB;AAAA;AAAA;AAC1B,CAAA,EACF,CACD;AACD,aAAA,CAAc,cAA8Bc,0BAAA,CAAA,OAAA,CAAQ,WAAA;AAEpD,IAAM,WAAA,GAAoBC,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bf,cAAAA;AAAA,EAAiBc,0BAAA,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,cAA8BA,0BAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,UAAA,GAAmBC,8BAGvB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCC,eAAA;AAAA,EAAiBF,0BAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,0NAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,sBAAAd,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sEAAA,EACd,0BAAAA,cAAAA,CAAiBc,0BAAA,CAAA,aAAA,EAAhB,EACC,QAAA,kBAAAd,eAACO,iBAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,sBACAP,cAAAA,CAAiBc,0BAAA,CAAA,QAAA,EAAhB,EAA0B,QAAA,EAAS;AAAA;AAAA;AACtC,CACD;AACD,UAAA,CAAW,cAA8BA,0BAAA,CAAA,IAAA,CAAK,WAAA;AAK9C,IAAM,qBAAA,GAA8BC,8BAGlC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bf,cAAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,qBAAA,CAAsB,WAAA,GAAc,uBAAA;AAEpC,IAAM,eAAA,GAAwBe,8BAG5B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1Bf,cAAAA;AAAA,EAAiBc,0BAAA,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,cAA8BA,0BAAA,CAAA,SAAA,CAAU,WAAA;AC5IxD,IAAM,IAAA,GAAqBK,wBAAA,CAAA;AAE3B,IAAM,gBAAA,GAAmBtB,0BAAAA;AAAA,EACvB,4DAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wBAAA;AAAA,QACT,IAAA,EAAM,+BAAA;AAAA,QACN,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,mBAAA,GAAsBA,0BAAAA;AAAA,EAC1B;AAAA,IACE,2DAAA;AAAA,IACA,iCAAA;AAAA,IACA,mBAAA;AAAA,IACA,qGAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS;AAAA,UACP,QAAA;AAAA,UACA,0CAAA;AAAA,UACA,wDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,YAAA;AAAA,UACA,uBAAA;AAAA,UACA,uBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,QAAA,EAAU;AAAA,UACR,uBAAA;AAAA,UACA,uBAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,EAAA,EAAI,UAAA;AAAA,QACJ,OAAA,EAAS,YAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,IAAA,EAAM,WAAW,YAAA,EAAa;AAAA,MAChE,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,SAAA,EAAW,WAAW,YAAA,EAAa;AAAA,MACrE,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,IAAA,EAAM,WAAW,YAAA,EAAa;AAAA,MAChE,EAAE,OAAA,EAAS,UAAA,EAAY,aAAA,EAAe,IAAA,EAAM,WAAW,YAAA,EAAa;AAAA,MACpE,EAAE,OAAA,EAAS,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,WAAW,YAAA,EAAa;AAAA,MACzE,EAAE,OAAA,EAAS,UAAA,EAAY,aAAA,EAAe,IAAA,EAAM,WAAW,YAAA;AAAa,KACtE;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,aAAA,EAAe;AAAA;AACjB;AAEJ;AAYA,IAAM,QAAA,GAAiBuB,kBAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnCpB,cAAAA;AAAA,EAAemB,wBAAA,CAAA,IAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,gBAAA,CAAiB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IACrD,GAAG;AAAA;AACN,CACD;AACD,QAAA,CAAS,cAA4BA,wBAAA,CAAA,IAAA,CAAK,WAAA;AAa1C,IAAM,WAAA,GAAoBC,kBAAA,CAAA,UAAA,CAGxB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,aAAA,EAAe,GAAG,KAAA,EAAM,EAAG,GAAA,qBAClDpB,cAAAA;AAAA,EAAemB,wBAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,mBAAA,CAAoB,EAAE,OAAA,EAAS,aAAA,EAAe,CAAA;AAAA,MAC9C;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4BA,wBAAA,CAAA,OAAA,CAAQ,WAAA;AAOhD,IAAM,WAAA,GAAoBC,8BAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BpB,cAAAA;AAAA,EAAemB,wBAAA,CAAA,OAAA;AAAA,EAAd;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,MAAA;AAAA,MACA,qGAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA4BA,wBAAA,CAAA,OAAA,CAAQ,WAAA;ACjJhD,IAAM,qBAAA,GAAwBtB,2BAAI,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,0BAAAA;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,0BAAAA;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,2BAAI,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+BwB,6BAAA,CAAA;AAcrC,IAAM,aAAA,GAAsBC,kBAAA,CAAA,UAAA,CAG1B,CAAC,EAAE,SAAA,EAAW,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnCtB,cAAAA;AAAA,EAAoBqB,6BAAA,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,mBAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,UAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,wBAC7CtB,cAAAA,CAAoBqB,sCAAnB,EAA0B,SAAA,EAAU,QACnC,QAAA,kBAAAL,eAAAA;AAAA,EAAoBK,6BAAA,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,sBACDrB,cAAAA,CAACiB,uBAAAA,EAAA,EAAY,WAAU,0EAAA,EAA2E;AAAA;AAAA;AACpG,CAAA,EACF,CACD;AACD,gBAAA,CAAiB,cAAiCI,6BAAA,CAAA,OAAA,CAAQ,WAAA;AAY1D,IAAM,gBAAA,GAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CtB,cAAAA;AAAA,EAAoBqB,6BAAA,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,kBAAArB,cAAAA,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,cAAiCqB,6BAAA,CAAA,OAAA,CAAQ,WAAA;AC3J1D,IAAM,eAAA,GAAmCE,2BAAA,CAAA;AAKzC,IAAM,WAAA,GAA+BA,2BAAA,CAAA;AAKrC,IAAM,cAAA,GAAkCA,2BAAA,CAAA;AAKxC,IAAM,aAAA,GAAiCA,2BAAA,CAAA;AAKvC,IAAM,cAAA,GAAuBC,kBAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1CxB,cAAAA,CAAkBuB,2BAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAvB,cAAAA;AAAA,EAAkBuB,2BAAA,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,8BAAA;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+BA,2BAAA,CAAA,OAAA,CAAQ,WAAA;AAKtD,IAAM,YAAA,GAAqBC,8BAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BxB,cAAAA;AAAA,EAAkBuB,2BAAA,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+BA,2BAAA,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,uBACEvB,eAAkBuB,2BAAA,CAAA,QAAA,EAAjB,EAA0B,eACzB,QAAA,kBAAAP,eAAAA,CAAkBO,kCAAjB,EACC,QAAA,EAAA;AAAA,oBAAAvB,cAAAA,CAAkBuB,2BAAA,CAAA,OAAA,EAAjB,EAAyB,OAAA,EAAO,MAAE,QAAA,EAAS,CAAA;AAAA,oBAC5CvB,cAAAA;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,GAA2ByB,2BAAA,CAAA;AAKjC,IAAM,cAAA,GAAkCA,2BAAA,CAAA;AAKxC,IAAM,aAAA,GAAiCA,2BAAA,CAAA;AAkBvC,IAAM,iBAAuBC,kBAAA,CAAA,UAAA,CAG3B,CAAC,EAAE,SAAA,EAAW,QAAQ,QAAA,EAAU,UAAA,GAAa,CAAA,EAAG,GAAG,OAAM,EAAG,GAAA,qBAC5D1B,cAAAA,CAAkByB,2BAAA,CAAA,MAAA,EAAjB,EACC,QAAA,kBAAAzB,cAAAA;AAAA,EAAkByB,2BAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,gIAAA;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+BA,2BAAA,CAAA,OAAA,CAAQ,WAAA;ACrDtD,IAAM,YAAA,GAAqCE,gCAAA,CAAA;AAE3C,IAAM,mBAAA,GAA4CA,gCAAA,CAAA;AAElD,IAAM,iBAAA,GAA0CA,gCAAA,CAAA;AAEhD,IAAM,kBAAA,GAA2CA,gCAAA,CAAA;AAEjD,IAAM,eAAA,GAAwCA,gCAAA,CAAA;AAE9C,IAAM,sBAAA,GAA+CA,gCAAA,CAAA;AAOrD,IAAM,sBAAA,GAA+BC,kBAAA,CAAA,UAAA,CAGnC,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC3CZ,eAAAA;AAAA,EAAuBW,gCAAA,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,sBACD3B,cAAAA,CAAC6B,wBAAA,EAAA,EAAa,SAAA,EAAU,iBAAA,EAAkB;AAAA;AAAA;AAC5C,CACD;AACD,sBAAA,CAAuB,cACCF,gCAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B5B,cAAAA;AAAA,EAAuB2B,gCAAA,CAAA,UAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,4HAAA;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,cACCA,gCAAA,CAAA,UAAA,CAAW,WAAA;AAEnC,IAAM,mBAAA,GAA4BC,kBAAA,CAAA,UAAA,CAGhC,CAAC,EAAE,WAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,IAAS,GAAA,qBAC1C5B,cAAAA,CAAuB2B,gCAAA,CAAA,MAAA,EAAtB,EACC,QAAA,kBAAA3B,cAAAA;AAAA,EAAuB2B,gCAAA,CAAA,OAAA;AAAA,EAAtB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,yIAAA;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,cAAoCA,gCAAA,CAAA,OAAA,CAAQ,WAAA;AAQhE,IAAM,gBAAA,GAAyBC,kBAAA,CAAA,UAAA,CAG7B,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC9C5B,cAAAA;AAAA,EAAuB2B,gCAAA,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,cAAoCA,gCAAA,CAAA,IAAA,CAAK,WAAA;AAE1D,IAAM,wBAAA,GAAiCC,kBAAA,CAAA,UAAA,CAGrC,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC7CZ,eAAAA;AAAA,EAAuBW,gCAAA,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,sBAAA3B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAuB2B,gCAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAA3B,eAACO,iBAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,GAC7B,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,wBAAA,CAAyB,cACDoB,gCAAA,CAAA,YAAA,CAAa,WAAA;AAErC,IAAM,qBAAA,GAA8BC,kBAAA,CAAA,UAAA,CAGlC,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCZ,eAAAA;AAAA,EAAuBW,gCAAA,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,sBAAA3B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8DAAA,EACd,0BAAAA,cAAAA,CAAuB2B,gCAAA,CAAA,aAAA,EAAtB,EACC,QAAA,kBAAA3B,cAAAA,CAAC8B,kBAAA,EAAA,EAAO,SAAA,EAAU,sBAAA,EAAuB,GAC3C,CAAA,EACF,CAAA;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,qBAAA,CAAsB,cAAoCH,gCAAA,CAAA,SAAA,CAAU,WAAA;AAOpE,IAAM,iBAAA,GAA0BC,kBAAA,CAAA,UAAA,CAG9B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,EAAM,EAAG,GAAA,qBACjC5B,cAAAA;AAAA,EAAuB2B,gCAAA,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,cAAoCA,gCAAA,CAAA,KAAA,CAAM,WAAA;AAE5D,IAAM,qBAAA,GAA8BC,8BAGlC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1B5B,cAAAA;AAAA,EAAuB2B,gCAAA,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,cAAoCA,gCAAA,CAAA,SAAA,CAAU,WAAA;AAKpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAiC;AAC/B,EAAA,uBACE3B,cAAAA;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+B,+BAAA,CAAA;AAEzC,IAAM,kBAAA,GAA0CA,+BAAA,CAAA;AAEhD,IAAM,iBAAA,GAAyCA,+BAAA,CAAA;AAE/C,IAAM,kBAAA,GAA2BC,8BAG/B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhC,cAAAA;AAAA,EAAsB+B,+BAAA,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,cAAmCA,+BAAA,CAAA,OAAA,CAAQ,WAAA;AAE9D,IAAM,kBAAA,GAA2BC,kBAAA,CAAA,UAAA,CAG/B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhB,eAAAA,CAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAAhB,eAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,kBACpBA,cAAAA;AAAA,IAAsB+B,+BAAA,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,cAAmCA,+BAAA,CAAA,OAAA,CAAQ,WAAA;AAK9D,IAAM,oBAAoB,CAAC,EAAE,WAAW,GAAG,KAAA,uBACzC/B,cAAAA;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,cAAAA;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,GAAyBgC,8BAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhC,cAAAA;AAAA,EAAsB+B,+BAAA,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,cAAmCA,+BAAA,CAAA,KAAA,CAAM,WAAA;AAE1D,IAAM,sBAAA,GAA+BC,8BAGnC,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhC,cAAAA;AAAA,EAAsB+B,+BAAA,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,cACAA,+BAAA,CAAA,WAAA,CAAY,WAAA;AAEnC,IAAM,iBAAA,GAA0BC,8BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhC,cAAAA;AAAA,EAAsB+B,+BAAA,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,cAAmCA,+BAAA,CAAA,MAAA,CAAO,WAAA;AAE5D,IAAM,iBAAA,GAA0BC,8BAG9B,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BhC,cAAAA;AAAA,EAAsB+B,+BAAA,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,cAAmCA,+BAAA,CAAA,MAAA,CAAO,WAAA;AClH5D,IAAM,YAAA,GAAelC,0BAAAA;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,GAAaoC,kBAAA,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,kBAAA,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,uBACEjC,cAAAA;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,GAAmBiC,kBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBjC,cAAAA;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,GAAkBiC,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBjC,cAAAA;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,GAAwBiC,kBAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBjC,cAAAA;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,GAAoBiC,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBjC,cAAAA,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,GAAmBiC,kBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBjC,cAAAA;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,GAAoBH,2BAAI,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,GAAkBoC,kBAAA,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,4BAAS,KAAK,CAAA;AAEpD,IAAA,MAAM,WAAA,GAAoBA,kBAAA,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,6BAAU,MAAM;AACpB,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,uBACEjC,cAAAA;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,cAAAA;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,GAAsBH,0BAAAA;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,GAAoBoC,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnDjC,cAAAA;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,GAAuBiC,kBAAA,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,4BAAS,eAAe,CAAA;AAChC,IAAA,MAAM,eAAe,kBAAA,KAAuB,MAAA;AAC5C,IAAA,MAAM,UAAA,GAAa,eAAe,kBAAA,GAAqB,oBAAA;AAEvD,IAAA,MAAM,WAAA,GAAoBA,kBAAA,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,kBAAA,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,uBACEjB,eAAAA;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,eAAAA;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,gCAAAhB,cAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,UAAA;AAAA,oBACT,eAAA,EAAiB,oBAAA;AAAA,oBACjB;AAAA;AAAA,iBACF;AAAA,gCACAA,cAAAA,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,cAAAA;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,cAAAA;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,GAAmBH,2BAAI,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,GAAiBoC,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,KAAK,GAAG,KAAA,EAAM,EAAG,GAAA,qBACtCjC,cAAAA;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,GAAmBH,2BAAI,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,GAAiBoC,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAA,EAAK,SAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACtCjC,cAAAA;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,GAAgBH,2BAAI,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,GAAcqC,kBAAA,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,uBACElC,cAAAA;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,GAAoBkC,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBlC,cAAAA;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,GAAqBkC,kBAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBlC,cAAAA,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,GAAcmC,kBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxBnC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,kBAAAA,cAAAA;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,GAAoBmC,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxBnC,cAAAA,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,GAAkBmC,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnC,cAAAA;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,GAAoBmC,kBAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnC,cAAAA;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,GAAiBmC,kBAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnC,cAAAA;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,GAAkBmC,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnC,cAAAA;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,GAAkBmC,kBAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxBnC,cAAAA;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,GAAqBmC,8BAGzB,CAAC,EAAE,WAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1BnC,cAAAA;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;ACvH3B,IAAM,sBAAA,GAAyBH,2BAAI,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,GAAuBuC,kBAAA,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,4BAAS,EAAE,CAAA;AAGzC,IAAMA,6BAAU,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,uBACEpB,eAAAA;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,4BAAAhB,cAAAA,CAAC,SAAI,SAAA,EAAW,sBAAA,CAAuB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,4BAC3DgB,eAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,cAAA,KAAA;AAAA,cACA,4BAAYhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAoB,QAAA,EAAA,IAAA,EAAK;AAAA,aAAA,EACxD;AAAA;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACEA,cAAAA;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;AC6D7B,SAAS,eAAA,CAAmB,KAAQ,GAAA,EAAuE;AACzG,EAAA,IAAI,GAAA,CAAI,QAAA,EAAU,OAAO,GAAA,CAAI,SAAS,GAAG,CAAA;AACzC,EAAA,OAAQ,GAAA,CAAgC,IAAI,GAAG,CAAA;AACjD;AAEA,SAAS,aAAA,CAAiB,GAAA,EAAQ,KAAA,EAAe,OAAA,EAAwC;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ;AAC3B,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,GAAA,EAAK,GAAG,CAAA;AACpC,IAAA,IAAI,GAAA,IAAO,MAAM,OAAO,KAAA;AACxB,IAAA,OAAO,OAAO,GAAG,CAAA,CAAE,WAAA,EAAY,CAAE,SAAS,UAAU,CAAA;AAAA,EACtD,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CACP,CAAA,EACA,CAAA,EACA,GAAA,EACA,SAAA,EACQ;AACR,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,MAAA,GAAS,CAAC,MAAA;AAAA,EACzC;AACA,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAO,EAAA,GAAK,OAAO,IAAI,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAO,EAAA,GAAK,OAAO,IAAI,CAAA;AAG5C,EAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,EAAA,IAAI,CAAC,KAAA,CAAM,IAAI,CAAA,IAAK,CAAC,KAAA,CAAM,IAAI,CAAA,IAAK,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,EAAA,EAAI;AAC9D,IAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,IAAA,GAAO,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,EACpD;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AACnC,EAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,GAAA,GAAM,CAAC,GAAA;AACtC;AAMO,SAAS,SAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAGA,WAAA;AAAA,EACA,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA;AAAA,EAGA,UAAA,GAAa,KAAA;AAAA,EACb,iBAAA,GAAoB,WAAA;AAAA,EACpB,WAAA,EAAa,qBAAA;AAAA,EACb,cAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAGA,QAAA,EAAU,eAAA;AAAA,EACV,kBAAkB,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,GAAG,CAAA;AAAA,EACtC,WAAA,EAAa,cAAA;AAAA,EACb,YAAA;AAAA,EACA,gBAAA;AAAA;AAAA,EAGA,UAAA;AAAA,EACA,YAAA,EAAc,sBAAA;AAAA,EACd,oBAAA;AAAA;AAAA,EAGA,UAAA;AAAA,EACA,YAAA;AAAA;AAAA,EAGA,aAAa,EAAC;AAAA;AAAA,EAGd,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAGA,OAAA,GAAU,KAAA;AAAA;AAAA,EAGV;AACF,CAAA,EAAsB;AAGpB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUqC,kBAAA,CAAA,QAAA;AAAA,IAC5C,WAAA,IAAe;AAAA,GACjB;AACA,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAUA,4BAAS,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,4BAAS,CAAC,CAAA;AACxD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,IACpD,eAAA,IAAmB;AAAA,GACrB;AACA,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAUA,kBAAA,CAAA,QAAA,CAAmB,EAAE,CAAA;AAGnF,EAAA,MAAM,IAAA,GAAO,cAAA,KAAmB,MAAA,GAAY,cAAA,GAAiB,YAAA;AAC7D,EAAA,MAAM,WAAA,GACJ,qBAAA,KAA0B,MAAA,GAAY,qBAAA,GAAwB,mBAAA;AAChE,EAAA,MAAM,IAAA,GAAO,cAAA,KAAmB,MAAA,GAAY,cAAA,GAAiB,YAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,eAAA,IAAmB,IAAA,GAAQ,gBAAA,IAAoB,eAAA,GAAmB,MAAA;AACnF,EAAA,MAAM,eAAA,GACJ,sBAAA,KAA2B,MAAA,GAAY,sBAAA,GAAyB,oBAAA;AAElE,EAAA,MAAM,gBAAA,GAAyBA,kBAAA,CAAA,WAAA;AAAA,IAC7B,CAAC,IAAA,KAA+B;AAC9B,MAAA,IAAI,YAAA,eAA2B,IAAI,CAAA;AAAA,2BACd,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA;AAAA,IAC/B,CAAC,KAAA,KAAkB;AACjB,MAAA,IAAI,cAAA,iBAA+B,KAAK,CAAA;AAAA,kCACZ,KAAK,CAAA;AAEjC,MAAA,IAAI,YAAA,eAA2B,CAAC,CAAA;AAAA,2BACX,CAAC,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,gBAAgB,YAAY;AAAA,GAC/B;AAEA,EAAA,MAAM,gBAAA,GAAyBA,kBAAA,CAAA,WAAA;AAAA,IAC7B,CAAC,CAAA,KAAc;AACb,MAAA,IAAI,YAAA,eAA2B,CAAC,CAAA;AAAA,2BACX,CAAC,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,oBAAA,GAA6BA,kBAAA,CAAA,WAAA;AAAA,IACjC,CAAC,IAAA,KAAiB;AAChB,MAAA,IAAI,gBAAA,mBAAmC,IAAI,CAAA;AAAA,+BAClB,IAAI,CAAA;AAE7B,MAAA,IAAI,YAAA,eAA2B,CAAC,CAAA;AAAA,2BACX,CAAC,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAA,MAAM,qBAAA,GAA8BA,kBAAA,CAAA,WAAA;AAAA,IAClC,CAAC,IAAA,KAAmB;AAClB,MAAA,IAAI,oBAAA,uBAA2C,IAAI,CAAA;AAAA,mCACtB,IAAI,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAC,oBAAoB;AAAA,GACvB;AAIA,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,MAAA,KAAmB;AAClB,MAAA,IAAI,IAAA,EAAM,QAAQ,MAAA,EAAQ;AACxB,QAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC5B,UAAA,gBAAA,CAAiB,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,QAAQ,CAAA;AAAA,QACrD,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACvB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,MACpD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM,gBAAgB;AAAA,GACzB;AAKA,EAAA,MAAM,YAAA,GAAqBA,2BAAQ,MAAM;AACvC,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,EAAa,OAAO,IAAA;AACxC,IAAA,IAAI,QAAA,SAAiB,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,QAAA,CAAS,GAAA,EAAK,WAAW,CAAC,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,GAAA,KAAQ,cAAc,GAAA,EAAK,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,EACtE,GAAG,CAAC,IAAA,EAAM,YAAY,WAAA,EAAa,QAAA,EAAU,OAAO,CAAC,CAAA;AAGrD,EAAA,MAAM,UAAA,GAAmBA,2BAAQ,MAAM;AACrC,IAAA,IAAI,CAAC,MAAM,OAAO,YAAA;AAClB,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,KAAK,GAAG,CAAA;AAClD,IAAA,IAAI,CAAC,KAAK,OAAO,YAAA;AACjB,IAAA,OAAO,CAAC,GAAG,YAAY,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,GAAG,CAAA,KAChC,qBAAA,CAAsB,GAAG,CAAA,EAAG,GAAA,EAAK,KAAK,SAAS;AAAA,KACjD;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,IAAA,EAAM,OAAO,CAAC,CAAA;AAGhC,EAAA,MAAM,SAAA,GAAkBA,2BAAQ,MAAM,IAAI,IAAI,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEvE,EAAA,MAAM,EAAE,UAAA,EAAY,YAAA,EAAa,GAAUA,2BAAQ,MAAM;AACvD,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG,OAAO,EAAE,UAAA,EAAY,EAAC,EAAU,YAAA,EAAc,UAAA,EAAW;AACnF,IAAA,MAAM,SAAc,EAAC;AACrB,IAAA,MAAM,WAAgB,EAAC;AAEvB,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAe;AACrC,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AACvB,MAAA,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,CAAC,GAAG,GAAG,CAAA;AAAA,IACtC,CAAC,CAAA;AACD,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1B,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC7B,MAAA,IAAI,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC7B,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,EAAK,CAAC,CAAA;AAE5B,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,IAC5C,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,UAAA,EAAY,MAAA,EAAQ,YAAA,EAAc,QAAA,EAAS;AAAA,EACtD,GAAG,CAAC,UAAA,EAAY,WAAW,UAAA,EAAY,IAAA,EAAM,SAAS,CAAC,CAAA;AAGvD,EAAA,MAAM,gBAAgB,YAAA,CAAa,MAAA;AACnC,EAAA,MAAM,UAAA,GAAa,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,aAAA,GAAgB,QAAQ,CAAC,CAAA,GAAI,CAAA;AACjF,EAAA,MAAM,aAAA,GAAsBA,2BAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,UAAU,OAAO,YAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,GAAO,QAAA;AACrB,IAAA,OAAO,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,QAAQ,CAAA;AAAA,EACnD,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,IAAI,CAAC,CAAA;AAGjC,EAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,OAAA;AAAA,IACxB,MAAM,CAAC,GAAG,UAAA,EAAY,GAAG,aAAa,CAAA;AAAA,IACtC,CAAC,YAAY,aAAa;AAAA,GAC5B;AAGA,EAAA,MAAM,aAAa,YAAA,CAAa,MAAA;AAIhC,EAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,OAAA;AAAA,IACxB,MAAM,YAAY,GAAA,CAAI,CAAC,KAAK,CAAA,KAAM,SAAA,CAAU,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,IACnD,CAAC,aAAa,SAAS;AAAA,GACzB;AAEA,EAAA,MAAM,kBAAA,GACJ,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA,KAAM,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAC,CAAA;AAChF,EAAA,MAAM,mBAAA,GACJ,CAAC,kBAAA,IAAsB,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAC,CAAA;AAE5E,EAAA,MAAM,kBAAA,GAA2BA,kBAAA,CAAA,WAAA;AAAA,IAC/B,CAAC,GAAA,KAAgB;AACf,MAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,QAAA,CAAS,GAAG,CAAA;AAC/C,MAAA,MAAM,IAAA,GAAO,UAAA,GACT,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,GAAG,CAAA,GACvC,CAAC,GAAG,eAAA,EAAiB,GAAG,CAAA;AAC5B,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,iBAAiB,qBAAqB;AAAA,GACzC;AAEA,EAAA,MAAM,gBAAA,GAAyBA,+BAAY,MAAM;AAC/C,IAAA,IAAI,kBAAA,EAAoB;AAEtB,MAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,WAAW,CAAA;AACtC,MAAA,qBAAA,CAAsB,eAAA,CAAgB,OAAO,CAAC,CAAA,KAAM,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,IACzE,CAAA,MAAO;AAEL,MAAA,MAAM,MAAA,uBAAa,GAAA,CAAI,CAAC,GAAG,eAAA,EAAiB,GAAG,WAAW,CAAC,CAAA;AAC3D,MAAA,qBAAA,CAAsB,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,kBAAA,EAAoB,WAAA,EAAa,eAAA,EAAiB,qBAAqB,CAAC,CAAA;AAI5E,EAAA,MAAM,cAAA,GAAuBA,kBAAA,CAAA,WAAA;AAAA,IAC3B,CAAC,GAAA,EAAQ,KAAA,EAAe,GAAA,KAAgB;AACtC,MAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,QAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,MACxB;AACA,MAAA,UAAA,GAAa,KAAK,KAAK,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,kBAAA,EAAoB,UAAU;AAAA,GAC7C;AAIA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,EAAQ,GAAA,EAAyB,QAAA,KAAqB;AAC/E,IAAA,IAAI,IAAI,IAAA,EAAM,OAAO,GAAA,CAAI,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC3C,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,GAAA,EAAK,GAAG,CAAA;AACpC,IAAA,IAAI,GAAA,IAAO,MAAM,uBAAOrC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAA+B,QAAA,EAAA,IAAA,EAAE,CAAA;AACzE,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAwC;AAC1D,IAAA,IAAI,KAAA,KAAU,UAAU,OAAO,aAAA;AAC/B,IAAA,IAAI,KAAA,KAAU,SAAS,OAAO,YAAA;AAC9B,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AAIA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,wCAAA,EAA0C,SAAS,CAAA,EACpE,QAAA,kBAAAA,eAAC,cAAA,EAAA,EAAe,KAAA,EAAM,SAAA,EAAU,QAAA,EAAQ,MAAC,CAAA,EAC3C,CAAA;AAAA,EAEJ;AAIA,EAAA,MAAM,UAAA,GAAa,UAAA;AACnB,EAAA,MAAM,iBAAiB,QAAA,IAAY,IAAA;AACnC,EAAA,MAAM,qBAAqB,UAAA,KAAe,UAAA;AAE1C,EAAA,uBACEgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA,EAEhD,QAAA,EAAA;AAAA,IAAA,CAAA,UAAA,IAAc,OAAA,qBACdA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EACZ,QAAA,EAAA;AAAA,MAAA,UAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAACsC,kBAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,wBAC3FtC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,WAAA,EAAa,iBAAA;AAAA,YACb,KAAA,EAAO,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAClD,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA;AAAA,MAED,2BAAWA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAA2B,QAAA,EAAA,OAAA,EAAQ;AAAA,KAAA,EAChE,CAAA;AAAA,oBAIFgB,gBAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,OAAA,oBAAWhB,cAAAA,CAAC,YAAA,EAAA,EAAc,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,sBAEnCA,cAAAA,CAAC,WAAA,EAAA,EACC,QAAA,kBAAAgB,gBAAC,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,kBAAA,oBACChB,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,YACnB,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,kBAAA,GAAqB,IAAA,GAAO,mBAAA,GAAsB,eAAA,GAAkB,KAAA;AAAA,YAC7E,eAAA,EAAiB,MAAM,gBAAA,EAAiB;AAAA,YACxC,YAAA,EAAW;AAAA;AAAA,SACb,EACF,CAAA;AAAA,QAED,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,UAAA,MAAM,QAAA,GAAW,IAAA,EAAM,GAAA,KAAQ,GAAA,CAAI,GAAA;AACnC,UAAA,MAAM,OAAA,GAAU,QAAA,GAAW,IAAA,CAAM,SAAA,GAAY,IAAA;AAE7C,UAAA,uBACEA,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,GAAA,CAAI,KAAA;AAAA,gBACJ,GAAA,CAAI,eAAA;AAAA,gBACJ,UAAA,CAAW,IAAI,KAAK,CAAA;AAAA,gBACpB,IAAI,QAAA,IAAY;AAAA,eAClB;AAAA,cACA,SAAS,GAAA,CAAI,QAAA,GAAW,MAAM,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AAAA,cAE3D,QAAA,kBAAAgB,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,yBAAA;AAAA,oBACA,GAAA,CAAI,UAAU,QAAA,IAAY,gBAAA;AAAA,oBAC1B,GAAA,CAAI,UAAU,OAAA,IAAW;AAAA,mBAC3B;AAAA,kBAEA,QAAA,EAAA;AAAA,oCAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,GAAA,CAAI,MAAA,EAAO,CAAA;AAAA,oBACjB,GAAA,CAAI,QAAA,oBACHA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA,OAAA,KAAY,KAAA,mBACXA,cAAAA,CAACuC,mBAAA,EAAA,EAAQ,SAAA,EAAU,aAAA,EAAc,CAAA,GAC/B,OAAA,KAAY,MAAA,mBACdvC,cAAAA,CAACwC,qBAAA,EAAA,EAAU,SAAA,EAAU,aAAA,EAAc,CAAA,mBAEnCxC,cAAAA,CAACyC,uBAAA,EAAA,EAAY,SAAA,EAAU,wBAAA,EAAyB,CAAA,EAEpD;AAAA;AAAA;AAAA;AAEJ,aAAA;AAAA,YA5BK,GAAA,CAAI;AAAA,WA6BX;AAAA,QAEJ,CAAC;AAAA,OAAA,EACH,CAAA,EACF,CAAA;AAAA,MAGC,UAAA,CAAW,MAAA,GAAS,CAAA,oBACnBzC,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,sCAAA,EAClB,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,EAAK,CAAC,CAAA;AAC5B,QAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,QAAA,CAAS,GAAG,CAAA;AAC/C,QAAA,uBACEgB,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,YAAA,EAAY,aAAa,UAAA,GAAa,MAAA;AAAA,YACtC,SAAA,EAAW,EAAA;AAAA,cAAA,CACR,UAAA,IAAc,eAAe,WAAA,KAAgB,gBAAA;AAAA,cAC9C,YAAA,GAAe,KAAK,CAAC;AAAA,aACvB;AAAA,YACA,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,EAAK,GAAG,GAAG,CAAA;AAAA,YAExC,QAAA,EAAA;AAAA,cAAA,kBAAA,oBACChB,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,YACnB,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,UAAA;AAAA,kBACT,eAAA,EAAiB,MAAM,kBAAA,CAAmB,GAAG,CAAA;AAAA,kBAC7C,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,kBAClC,YAAA,EAAW;AAAA;AAAA,eACb,EACF,CAAA;AAAA,cAED,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBAEC,WAAW,EAAA,CAAG,UAAA,CAAW,IAAI,KAAK,CAAA,EAAG,IAAI,SAAS,CAAA;AAAA,kBAEjD,QAAA,EAAA,iBAAA,CAAkB,GAAA,EAAK,GAAA,EAAK,CAAC;AAAA,iBAAA;AAAA,gBAHzB,GAAA,CAAI;AAAA,eAKZ;AAAA;AAAA,WAAA;AAAA,UAzBI;AAAA,SA0BP;AAAA,MAEJ,CAAC,CAAA,EACH,CAAA;AAAA,sBAIFA,cAAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,MAAA,KAAW,CAAA,mBACnDA,cAAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,OAAA,CAAQ,MAAA,IAAU,kBAAA,GAAqB,CAAA,GAAI,CAAA,CAAA;AAAA,UACpD,SAAA,EAAU,kBAAA;AAAA,UAET,wCACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,aAAA,EAAW;AAAA;AAAA,SAGzD,CAAA,GAEA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAK,CAAA,KAAM;AAE5B,QAAA,MAAM,WAAA,GAAc,QAAA,GAAW,IAAA,GAAO,QAAA,GAAW,CAAA,GAAI,CAAA;AACrD,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,EAAK,WAAW,CAAA;AACtC,QAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,QAAA,CAAS,GAAG,CAAA;AAC/C,QAAA,uBACEgB,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,YAAA,EAAY,aAAa,UAAA,GAAa,MAAA;AAAA,YACtC,SAAA,EAAW,EAAA;AAAA,cAAA,CACR,UAAA,IAAc,eAAe,WAAA,KAAgB,gBAAA;AAAA,cAC9C,YAAA,GAAe,KAAK,WAAW;AAAA,aACjC;AAAA,YACA,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,EAAK,aAAa,GAAG,CAAA;AAAA,YAElD,QAAA,EAAA;AAAA,cAAA,kBAAA,oBACChB,cAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,YACnB,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,UAAA;AAAA,kBACT,eAAA,EAAiB,MAAM,kBAAA,CAAmB,GAAG,CAAA;AAAA,kBAC7C,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,kBAClC,YAAA,EAAW;AAAA;AAAA,eACb,EACF,CAAA;AAAA,cAED,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZA,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBAEC,WAAW,EAAA,CAAG,UAAA,CAAW,IAAI,KAAK,CAAA,EAAG,IAAI,SAAS,CAAA;AAAA,kBAEjD,QAAA,EAAA,iBAAA,CAAkB,GAAA,EAAK,GAAA,EAAK,WAAW;AAAA,iBAAA;AAAA,gBAHnC,GAAA,CAAI;AAAA,eAKZ;AAAA;AAAA,WAAA;AAAA,UAzBI;AAAA,SA0BP;AAAA,MAEJ,CAAC,CAAA,EAEL;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,cAAA,oBACCgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,wBAC7DgB,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,YACtB,eAAe,CAAC,GAAA,KAAQ,oBAAA,CAAqB,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,YAExD,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,cAAA,EACvB,QAAA,kBAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,MAAA,CAAO,QAAQ,CAAA,EAAG,CAAA,EAC9C,CAAA;AAAA,8BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,GAAA,qBACpBA,cAAAA,CAAC,UAAA,EAAA,EAAqB,OAAO,MAAA,CAAO,GAAG,GACpC,QAAA,EAAA,GAAA,EAAA,EADc,GAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAEAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACxC,IAAA,GAAO,CAAA;AAAA,UAAE,MAAA;AAAA,UAAK,UAAA;AAAA,UACnB,KAAK,UAAU,CAAA,OAAA;AAAA,SAAA,EAClB,CAAA;AAAA,wBAEAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,CAAC,CAAA;AAAA,cACjC,UAAU,IAAA,KAAS,CAAA;AAAA,cACnB,YAAA,EAAW,YAAA;AAAA,cAEX,QAAA,kBAAAA,cAAAA,CAAC0C,wBAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WACpC;AAAA,0BACA1C,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAA,GAAO,CAAC,CAAA;AAAA,cACxC,UAAU,IAAA,KAAS,CAAA;AAAA,cACnB,YAAA,EAAW,eAAA;AAAA,cAEX,QAAA,kBAAAA,cAAAA,CAAC2C,uBAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WACnC;AAAA,0BACA3C,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAA,GAAO,CAAC,CAAA;AAAA,cACxC,QAAA,EAAU,QAAQ,UAAA,GAAa,CAAA;AAAA,cAC/B,YAAA,EAAW,WAAA;AAAA,cAEX,QAAA,kBAAAA,cAAAA,CAAC6B,wBAAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA;AAAA,WACpC;AAAA,0BACA7B,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,OAAA,EAAS,MAAM,gBAAA,CAAiB,UAAA,GAAa,CAAC,CAAA;AAAA,cAC9C,QAAA,EAAU,QAAQ,UAAA,GAAa,CAAA;AAAA,cAC/B,YAAA,EAAW,WAAA;AAAA,cAEX,QAAA,kBAAAA,cAAAA,CAAC4C,yBAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACrC,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AC1pBjB,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,EAAMC,6BAAU,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,6BAAU,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,uBACE7B,eAAAA;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,wBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EAAqD,CAAA;AAAA,wBAEpEgB,eAAAA;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,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,QAAA,EAAA;AAAA,gCAAAhB,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCAC7DA,cAAAA;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,cAAAA,CAAC8C,aAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACzB,eAAA,EACF,CAAA;AAAA,8BAEA9C,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,4BAAA,EAA8B,SAAS,GACvD,QAAA,EACH,CAAA;AAAA,cAEC,0BACCA,cAAAA,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,cAAAA;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,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAY,YAAA,EACvB,QAAA,kBAAAgB,gBAAC,kBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,gBAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,oBAAkB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACzBA,cAAAA,CAAC,sBAAA,EAAA,EAAwB,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EACvC,CAAA;AAAA,oBACAgB,gBAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAS,YAAA,EACzB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,sBACAA,cAAAA;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,GAAU+C,kBAAA,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,kBAAA,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,+BAAY,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,+BAAY,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,kBAAA,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,qCACJ/C,cAAAA;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,GAAUgD,4BAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACtD,EAAA,MAAM,SAAA,GAAkBA,0BAAe,CAAC,CAAA;AACxC,EAAA,MAAM,SAAA,GAAkBA,0BAAuB,IAAI,CAAA;AAEnD,EAAA,MAAM,eAAA,GAAwBA,kBAAA,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,kBAAA,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,+BAAY,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,kBAAA,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,6BAAU,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,uBACEhD,cAAAA;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,GAAiBiD,0BAAuB,IAAI,CAAA;AAElD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,4BAAwB,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,kBAAA,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,+BAAY,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,kBAAA,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,+BAAY,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,kBAAA,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,+BAAY,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,kBAAA,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,+BAAY,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,6BAAU,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,6BAAU,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,uBACEjD,cAAAA;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,uBACEgB,eAAAA;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,0BAAAhB,cAAAA;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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA,iBAAA,oBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,0BAAA,EAE/C,CAAA,EAEJ;AAAA;AAAA,WACF;AAAA,0BAEAA,cAAAA;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,0BAEAgB,eAAAA;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,oBACChB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,gCAEFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAwB,QAAA,EAAS,CAAA;AAAA,gBAC/C,8BACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACL;AAAA;AAAA;AAAA,WAEF;AAAA,0BAEAA,cAAAA;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,uBACEgB,eAAAA;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,eAAAA;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,oBACChB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEACZ,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,8BAEFA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAkC,QAAA,EAAS,CAAA;AAAA,cACzD,8BACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,UAAA,EACH;AAAA;AAAA;AAAA,SAEJ;AAAA,QAEC,8BACCA,cAAAA;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,cAAAA;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;AChBO,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,cAAAA;AAAA,IAACkD,cAAA;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,kBAAA,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,kBAAA,CAAA,QAAA;AAAA,IAC9C,YAAA,wBAAoB,IAAA;AAAK,GAC3B;AAEA,EAAA,MAAM,iBAAiB,eAAA,IAAmB,aAAA;AAE1C,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,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,uBACEnD,cAAAA;AAAA,IAACoD,wBAAA;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,mCAAA;AAAA,QACP,aAAA,EAAe,2CAAA;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,yBAAA;AAAA,QACZ,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EACE,gEAAA;AAAA,QACF,IAAA,EAAM,kBAAA;AAAA,QACN,GAAA,EAAK,EAAA;AAAA,UACH,0EAAA;AAAA,UACA,0IAAA;AAAA;AAAA,UAEA,wFAAA;AAAA,UACA,uGAAA;AAAA,UACA,oGAAA;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,MAAMC,KAAAA,GAAO,WAAA,KAAgB,MAAA,GAASV,uBAAAA,GAAcd,wBAAAA;AACpD,UAAA,uBAAO7B,cAAAA,CAACqD,KAAAA,EAAA,EAAK,WAAU,aAAA,EAAc,CAAA;AAAA,QACvC,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,uBACErC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA;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,kCAAAhB,cAAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,6FAAA;AAAA,sBACV,YAAA,EAAW,cAAA;AAAA,sBAEX,QAAA,kBAAAA,cAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA;AAAA,mBAC9B;AAAA,kCACAA,cAAAA,CAAC,aAAA,EAAA,EACE,iBAAO,GAAA,CAAI,CAAC,WAAW,KAAA,qBACtBA,cAAAA,CAAC,UAAA,EAAA,EAA2B,OAAO,KAAA,CAAM,QAAA,IACtC,QAAA,EAAA,SAAA,EAAA,EADc,SAEjB,CACD,CAAA,EACH;AAAA;AAAA;AAAA,aACF;AAAA,4BAEAgB,eAAAA;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,kCAAAhB,cAAAA;AAAA,oBAAC,aAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,4FAAA;AAAA,sBACV,YAAA,EAAW,aAAA;AAAA,sBAEX,QAAA,kBAAAA,cAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,mBACrB;AAAA,kCACAA,cAAAA,CAAC,aAAA,EAAA,EAAc,WAAU,eAAA,EACtB,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,CAAA,qBACVA,cAAAA,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;ACnJvB,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,GAAUsD,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,kBAAA,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,GAClBC,cAAA,CAAO,YAAA,EAAc,UAAU,CAAA,GAC/B,MAAA;AAEJ,EAAA,uBACEvC,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,gBAAA,EACjC,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAgB,eAAAA;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,0BAAAhB,cAAAA,CAACwD,oBAAA,EAAA,EAAa,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,0BAChDxD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EACb,2BAAiB,WAAA,EACpB,CAAA;AAAA,UACC,SAAA,IAAa,gCACZA,cAAAA;AAAA,YAAC8C,aAAAA;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,oBACA9B,eAAAA;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,0BAAAhB,cAAAA;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,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,IAAA;AAAA,cACA,KAAA,EAAOuD,cAAA,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,GAAUD,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAS,EAAE,CAAA;AACrD,EAAA,MAAM,QAAA,GAAiBA,0BAAyB,IAAI,CAAA;AAGpD,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAC/B,EAAA,MAAM,YAAA,GAAe,eAAe,KAAA,GAAQ,aAAA;AAG5C,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAcC,cAAA,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,SAASE,aAAA,CAAM,QAAA,EAAU,UAAA,kBAAY,IAAI,MAAM,CAAA;AACrD,MAAA,IAAIC,eAAA,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,CAAcH,cAAA,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,uBACEvD,cAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,gBAAA,EACjC,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAgB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,uFAAA;AAAA,UACA,0BAAA;AAAA,UACA,uEAAA;AAAA,UACA,QAAA,IAAY,kDAAA;AAAA,UACZ,YAAY,IAAI;AAAA,SAClB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;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,cAAAA;AAAA,YAAC8C,aAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,0DAAA;AAAA,cACV,OAAA,EAAS,WAAA;AAAA,cACT,YAAA,EAAW;AAAA;AAAA,WACb;AAAA,0BAEF9C,cAAAA;AAAA,YAACwD,oBAAA;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,oBACAxD,cAAAA,CAAC,cAAA,EAAA,EAAe,WAAU,YAAA,EAAa,KAAA,EAAc,MACnD,QAAA,kBAAAA,cAAAA;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,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,IAAA;AAAA,QACA,KAAA,EAAOuD,cAAA,CAAO,YAAA,EAAc,YAAY;AAAA;AAAA;AAC1C,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AC5T9B,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,GAAUI,kBAAA,CAAA,QAAA;AAAA,IACpC,MAAA,EAAQ,QAAA,IAAY,kBAAA,CAAmB,UAAU;AAAA,GACnD;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAUA,kBAAA,CAAA,QAAA,CAAsB,MAAA,EAAQ,SAAS,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAUA,kBAAA,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,sBACvB3C,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sBACpCgB,eAAAA;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,4BAAAhB,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,4BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,yBAAe,GAAA,CAAI,CAAC,uBACnBA,cAAAA,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,oBAC1BgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBAChCA,cAAAA;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,sBACzBgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,sBACpCgB,eAAAA;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,4BAAAhB,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,4BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,2BAAiB,GAAA,CAAI,CAAC,uBACrBA,cAAAA,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,oBAC1BgB,gBAAA4C,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,SAAM,SAAA,EAAU,SAAA,EACd,4BAAkB,QAAQ,CAAA,GAAI,SAAS,OAAA,EAC1C,CAAA;AAAA,wBACAA,cAAAA;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,oBACzBgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,wBAC7BA,cAAAA;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,GAAkB2D,2BAAQ,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,GAASE,iBAAS,KAAK,CAAA;AAC7B,QAAA,OAAOH,eAAAA,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,GAAoBC,2BAAQ,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,GAASE,iBAAS,OAAO,CAAA;AAC/B,QAAA,OAAOH,eAAAA,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,GAAOH,cAAAA,CAAO,IAAA,EAAM,YAAY,IAAI,EAAE,CAAA;AAAA,IACjD,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA2B;AACrD,MAAA,UAAA,CAAW,IAAA,GAAOA,cAAAA,CAAO,IAAA,EAAM,YAAY,IAAI,EAAE,CAAA;AAAA,IACnD,CAAA;AAEA,IAAA,uBACEvC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,wBACpCgB,eAAAA;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,8BAAAhB,eAAC,aAAA,EAAA,EAAc,SAAA,EAAU,eACvB,QAAA,kBAAAA,cAAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,8BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,yBAAe,GAAA,CAAI,CAAC,uBACnBA,cAAAA,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,oBAC1BgB,gBAAA4C,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,SAAM,SAAA,EAAU,SAAA,EACd,4BAAkB,QAAQ,CAAA,GAAI,SAAS,MAAA,EAC1C,CAAA;AAAA,0BACAA,cAAAA;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,oBACzBgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,0BAC7BA,cAAAA;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,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,sBACvCgB,eAAAA,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,wBAAAhB,cAAAA,CAAC,iBAAc,SAAA,EAAU,aAAA,EACvB,0BAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,WAAA,EAAY,CAAA,EACvC,CAAA;AAAA,wBACAA,cAAAA,CAAC,aAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,cAAAA,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,sBAC1BgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAW,iBAAO,MAAA,EAAO,CAAA;AAAA,sBAC1CA,cAAAA;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,oBACAgB,eAAAA,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,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,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,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA;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,eAAC,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;AC3ZO,SAAS,UAAA,CAAoB;AAAA,EAClC,MAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;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,GAAU8D,4BAAS,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,MAAMT,KAAAA,GAAO,QAAA,IAAY,OAAA,EAAS,SAAA,KAAc,SAASpC,uBAAAA,GAAcC,qBAAAA;AAEvE,IAAA,uBACElB,cAAAA;AAAA,MAACqD,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,uBACErC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iDAAA;AAAA,QACA,CAAC,SAAA,IAAa,eAAA;AAAA,QACd,sBAAA;AAAA,QACA,UAAA,IAAc;AAAA,OAChB;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAA,eAAAA;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,8BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACb,iBAAO,MAAA,EACV,CAAA;AAAA,cAEC,mBAAA,EAAoB;AAAA,cAEpB,gCACCgB,eAAAA,CAAC,WAAQ,IAAA,EAAM,UAAA,EAAY,cAAc,aAAA,EACvC,QAAA,EAAA;AAAA,gCAAAhB,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,cAAAA;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,cAAAA,CAAC+D,kBAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,iBAClC,EACF,CAAA;AAAA,gCACA/D,cAAAA;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,cAAAA;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,cAAAA;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,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB;AAAA;AAAA,SAEJ;AAAA,QAEC,+BACC9C,cAAAA;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,cAAAA;AAAA,cAACgE,wBAAA;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;ACnKO,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,GAAUC,4BAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,IAClD;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAiBA,0BAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,SAAA,GAAkBA,0BAA0B,IAAI,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAe,WAAW,KAAA,GAAQ,aAAA;AACxC,EAAA,MAAM,WAAW,QAAA,IAAY,gBAAA;AAE7B,EAAA,MAAM,QAAA,GAAiBA,kBAAA,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,6BAAU,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,sBACvBjE,cAAAA;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,6EAAA;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,cAAAA;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,6EAAA;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,GAAkBiE,2BAAQ,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,GAASJ,iBAAS,YAAY,CAAA;AACpC,QAAA,OAAOH,eAAAA,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,GAAOH,cAAAA,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,uBACEvD,cAAAA;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,cAAAA;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,uBACEgB,eAAAA;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,0BAAAhB,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAW,EAAA;AAAA,gBACT,wEAAA;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,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAY,WAAA,EAAY;AAAA;AAAA,WACvC;AAAA,0BACAA,cAAAA,CAAC,aAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,cAAAA,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,cAAAA;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,cAAAA;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,uBACEgB,eAAAA;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,mCACChB,cAAAA;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;AC1QO,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,EAAAkE;AAAA,GACF,GAAI,OAAA;AACJ,EAAA,MAAM,YAAA,GAAeC,eAAAA;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,iBAAuB,cAAc,CAAA;AACvC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GACxCA,iBAAyB,cAAc,CAAA;AACzC,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAClDA,iBAAiC,mBAAmB,CAAA;AACtD,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChDA,iBAA8B,IAAI,CAAA;AACpC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,iBAA6B,IAAI,CAAA;AAIvE,EAAA,MAAM,gBAAA,GAAmBC,cAAAA,CAAkB,EAAE,CAAA;AAE7C,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,GAAeF,gBAAQ,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,eAA6B,IAAI,CAAA;AAEtD,EAAA,MAAM,KAAA,GAA+BF,eAAAA;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,kBAAU,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,mBAAAA;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,mBAAAA;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,mBAAAA;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,mBAAAA;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,oBAAY,MAAM;AACrC,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,MAAM,cAAA,GAAiBA,mBAAAA;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,mBAAAA;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,mBAAAA;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;AAIjC,MAAA,MAAM,eAAe,gBAAA,CAAiB,OAAA,CAAQ,MAAA,GAAS,CAAA,GACnD,iBAAiB,OAAA,GACjB,IAAA;AACJ,MAAA,MAAM,GAAA,GAAM,aAAa,QAAQ,CAAA;AACjC,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,mBAAAA,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,mBAAAA,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,eAAe,gBAAA,CAAiB,OAAA,CAAQ,MAAA,GAAS,CAAA,GACnD,iBAAiB,OAAA,GACjB,IAAA;AACJ,MAAA,MAAM,GAAA,GAAM,aAAa,QAAQ,CAAA;AACjC,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,oBAAY,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,gBAAA;AAAA,IACA;AAAA,GACF;AACF;ACjTA,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,eAAuB,IAAI,CAAA;AAGhD,EAAA,MAAM,cAAA,GAAiB,kBAAkB,OAAO,CAAA;AAKhD,EAAA,MAAM,cAAA,GAAiBE,mBAAAA;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,mBAAAA;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,mBAAAA;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,mBAAAA;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,oBAAY,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,oBAAY,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,oBAAY,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,oBAAY,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,mBAAAA;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,oBAAY,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,iBAAS,KAAK,CAAA;AAClD,EAAA,MAAM,SAAA,GAAYC,eAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,aAAA,GAAgBA,eAAO,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,mBAAAA;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,mBAAAA;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,mBAAAA;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,oBAAY,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,mBAAAA;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,kBAAU,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,kBAAU,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;AAwCO,SAAS,uBACd,OAAA,EAC8B;AAC9B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIF,iBAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,SAAA,GAAYC,eAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,aAAA,GAAgBA,eAAO,CAAC,CAAA;AAC9B,EAAA,MAAM,uBAAA,GAA0BA,cAAAA,CAA+B,EAAE,CAAA;AAKjE,EAAA,MAAM,SAAA,GAAYE,mBAAAA;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,mBAAAA;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,mBAAAA;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,IAAI,aAAa,cAAA,EAAgB;AAC/B,QAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,cAAc,CAAA;AAC9D,QAAA,MAAM,iBAAiB,uBAAA,CAAwB,OAAA;AAC/C,QAAA,MAAM,UAAA,GAAa,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,cAAA,CAAe,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AACjF,QAAA,MAAM,YAAY,cAAA,GAAiB,QAAA;AAEnC,QAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,UAAA,MAAM,UAAA,GAAA,CAAc,cAAA,CAAe,GAAA,CAAI,GAAG,KAAK,CAAA,IAAK,UAAA;AACpD,UAAA,MAAM,QAAA,GAAW,WAAW,GAAA,CAAI,GAAA,EAAK,KAAK,KAAA,CAAM,SAAA,GAAY,UAAU,CAAC,CAAA;AACvE,UAAA,cAAA,CAAe,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,QAClC;AAAA,MACF;AAEA,MAAA,cAAA,CAAe,gBAAgB,QAAQ,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,UAAA,EAAY,cAAA,EAAgB,SAAA,EAAW,gBAAgB,OAAO;AAAA,GACjF;AAKA,EAAA,MAAM,aAAA,GAAgBA,oBAAY,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,kBAAU,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,mBAAAA;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;AAE/B,QAAA,IAAI,aAAa,qBAAA,EAAuB;AACtC,UAAA,uBAAA,CAAwB,OAAA,GAAU,EAAE,GAAG,qBAAA,EAAsB;AAAA,QAC/D;AAAA,MACF,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,iBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA;AAAA,GACF;AACF;;;AClYO,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;AAEzD,MAAA,IAAI,UAAA,GAAa,CAAA;AAGjB,MAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAChC,QAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,QAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,QAAA,IAAI,CAAC,KAAA,CAAM,IAAI,KAAK,CAAC,KAAA,CAAM,IAAI,CAAA,EAAG;AAChC,UAAA,UAAA,GAAa,IAAA,GAAO,IAAA;AAAA,QACtB,CAAA,MAAO;AACL,UAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,QACtD;AAAA,MACF,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,KAAa,MAAA,EAAQ;AACrC,QAAA,MAAM,QAAQ,IAAA,YAAgB,IAAA,GAAO,IAAA,GAAO,IAAI,KAAK,IAAuB,CAAA;AAC5E,QAAA,MAAM,QAAQ,IAAA,YAAgB,IAAA,GAAO,IAAA,GAAO,IAAI,KAAK,IAAuB,CAAA;AAC5E,QAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,OAAA,EAAS,CAAA,GAAI,CAAA,GAAI,MAAM,OAAA,EAAQ;AACzD,QAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,OAAA,EAAS,CAAA,GAAI,CAAA,GAAI,MAAM,OAAA,EAAQ;AACzD,QAAA,UAAA,GAAa,KAAA,GAAQ,KAAA;AAAA,MACvB,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,KAAa,SAAA,EAAW;AACxC,QAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,UAAU,IAAA,KAAS,CAAA;AAC3D,QAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,UAAU,IAAA,KAAS,CAAA;AAC3D,QAAA,UAAA,GAAa,KAAA,KAAU,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,EAAA;AAAA,MACjD,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MACtD,CAAA,MAAO;AAEL,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACxD,UAAA,UAAA,GAAa,IAAA,GAAO,IAAA;AAAA,QACtB,CAAA,MAAA,IAAW,IAAA,YAAgB,IAAA,IAAQ,IAAA,YAAgB,IAAA,EAAM;AACvD,UAAA,UAAA,GAAa,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA,CAAK,OAAA,EAAQ;AAAA,QAC7C,WAAW,OAAO,IAAA,KAAS,SAAA,IAAa,OAAO,SAAS,SAAA,EAAW;AACjE,UAAA,UAAA,GAAa,IAAA,KAAS,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,EAAA;AAAA,QAC9C,CAAA,MAAO;AAEL,UAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,UAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,UAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,UAAA,MAAM,IAAA,GAAO,OAAO,IAAI,CAAA;AACxB,UAAA,IAAI,CAAC,KAAA,CAAM,IAAI,CAAA,IAAK,CAAC,KAAA,CAAM,IAAI,CAAA,IAAK,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,EAAA,EAAI;AAC9D,YAAA,UAAA,GAAa,IAAA,GAAO,IAAA;AAAA,UACtB,CAAA,MAAO;AACL,YAAA,UAAA,GAAa,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,UACtC;AAAA,QACF;AAAA,MACF;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;ACrQA,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,SAAA;AAAA,EACA,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,0BAAuB,IAAI,CAAA;AACnD,EAAA,MAAM,SAAA,GAAkBA,0BAAuB,IAAI,CAAA;AACnD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,4BAAS,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,4BAMlC,IAAI,CAAA;AAGd,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAUA,4BAAS,CAAC,CAAA;AAC5D,EAAA,MAAM,oBAAA,GAA6BA,0BAA8B,IAAI,CAAA;AAErE,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,IAAA,KAAgC;AAC/B,MAAA,oBAAA,CAAqB,SAAS,UAAA,EAAW;AACzC,MAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAE/B,MAAC,UAA4D,OAAA,GAAU,IAAA;AAEvE,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,IAAA,EAAM;AAEzB,MAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,CAAC,OAAA,KAAY;AAC/C,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,KAAA;AAClC,QAAA,IAAI,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG,iBAAA,CAAkB,CAAC,CAAA;AAAA,MACrC,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,MAAA,oBAAA,CAAqB,OAAA,GAAU,QAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAMA,6BAAU,MAAM;AACpB,IAAA,OAAO,MAAM,oBAAA,CAAqB,OAAA,EAAS,UAAA,EAAW;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAA,GAAuBA,kBAAA,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,kBAAA,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,gBAAA,EAAkB,YAAA,KAAiB,gBAAA,CAAiB;AAAA,IAC1E,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,2BAAQ,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,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAG3B,EAAA,MAAM,gBAAA,GAAmB,WAAA,IAAe,aAAA,CAAc,MAAA,GAAS,GAAA;AAG/D,EAAMA,mCAAgB,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,iBAAiBC,2BAAA,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,EAAE,UAAA,EAAY,qBAAA,EAAsB,GAAUD,2BAAQ,MAAM;AAEhE,IAAA,MAAM,YAAoC,EAAC;AAC3C,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,MAAM,CAAA,GAAI,MAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,IAAK,GAAA,CAAI,KAAA,IAAS,mBAAA,CAAoB,GAAG,CAAA;AAC7E,MAAA,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA;AACrB,MAAA,QAAA,IAAY,CAAA;AAAA,IACd;AAGA,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,cAAA,IAAkB,YAAY,cAAA,EAAgB;AAC/D,MAAA,OAAO,EAAE,UAAA,EAAY,QAAA,EAAU,qBAAA,EAAuB,SAAA,EAAU;AAAA,IAClE;AAGA,IAAA,MAAM,QAAQ,cAAA,GAAiB,QAAA;AAC/B,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,UAAU,GAAA,CAAI,GAAG,IAAI,KAAK,CAAA;AAC7C,MAAA,IAAI,IAAI,QAAA,EAAU,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,QAAQ,CAAA;AAC9C,MAAA,IAAI,IAAI,QAAA,EAAU,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,EAAE,UAAA,EAAY,cAAA,EAAgB,qBAAA,EAAuB,MAAA,EAAO;AAAA,EACrE,GAAG,CAAC,cAAA,EAAgB,MAAM,YAAA,EAAc,SAAA,EAAW,cAAc,CAAC,CAAA;AAGlE,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,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,eAAA,GAAwBA,2BAAQ,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,kBAAA,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,6BAAU,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,uBACExE,cAAAA;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,GAAQkE,aAAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AACtC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,uBAAOlE,cAAAA,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,cAAAA,CAAA4D,mBAAAA,EAAA,EAAG,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,IAC7B;AACA,IAAA,uBACE5D,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,cAAAA,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,eAAA4D,mBAAAA,EAAA,EAAG,0BAAe,CAAA,mBAElB5D,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDACb,QAAA,kBAAAA,cAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EAAiC,wBAAa,CAAA,EAC/D,CAAA;AAIF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,uBACEgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EACjE,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,SAAI,SAAA,EAAU,wDAAA,EACb,0BAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAACsC,kBAAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,0BAC3FtC,cAAAA;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,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAiC,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA,KAC/D;AAAA,EAEJ;AAGA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,uBACEgB,eAAAA;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,oBACChB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAACsC,kBAAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,4BAC3FtC,cAAAA;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,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,iBAAA;AAAA,cACL,SAAA,EAAU,uEAAA;AAAA,cACV,KAAA,EAAO,EAAE,OAAA,EAAS,QAAA,EAAS;AAAA,cAE3B,QAAA,kBAAAgB,eAAAA;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,oCAAAhB,cAAAA;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,qBAAA,CAAsB,MAAA,CAAO,GAAG,CAAA;AAC9C,0BAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAE7C,0BAAA,uBACEA,cAAAA;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,SAAA;AAAA,8BACA,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,4BAhBnB,MAAA,CAAO;AAAA,2BAiBd;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,cAAAA;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,qBAAA,CAAsB,MAAA,CAAO,GAAG,CAAA;AAClC,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,OAAOkE,aAAAA,CAAa,GAAA,EAAK,MAAM,CAAA,IAAK,EAAE,CAAA;AAC5C,4BAAA,MAAM,MAAA,GACJ,YAAA,IAAgB,SAAA,CAAU,MAAA,GAAS,gBAAA;AAEnC,4BAAA,uBACElE,cAAAA;AAAA,8BAAC,KAAA;AAAA,8BAAA;AAAA,gCAEC,SAAA,EAAW,EAAA;AAAA,kCACT,mCAAA;AAAA,kCACA,CAAC,SAAA,IAAa,eAAA;AAAA,kCACd,iBAAA,IAAqB,wCAAA;AAAA,kCACrB,SAAA,IAAa,CAAC,iBAAA,IAAqB,gCAAA;AAAA,kCACnC,iBAAA,IAAqB,8CAAA;AAAA,kCACrB,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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,WAAA,EAAY;AAAA,+BAAA;AAAA,8BAxDlC,MAAA,CAAO;AAAA,6BAyDd;AAAA,0BAEN,CAAC;AAAA,yBAAA;AAAA,wBApHI,UAAA,CAAW;AAAA,uBAqHlB;AAAA,oBAEJ,CAAC,CAAA;AAAA,oBAGA,cAAA,IAAkB,+BACjBA,cAAAA;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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAE/C;AAAA;AAAA;AACF;AAAA;AAAA;AAEJ;AAAA,WACF;AAAA,UAGC,UAAA,oBACCA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,EAAwB,CAAA;AAAA,UAI3C,+BACCA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,yJAAA;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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,sBAAY,OAAA,EACf;AAAA;AAAA;AACF;AAAA;AAAA,KAEJ;AAAA,EAEJ;AAGA,EAAA,uBACEgB,eAAAA;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,oBACChB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAACsC,kBAAAA,EAAA,EAAO,SAAA,EAAU,wEAAA,EAAyE,CAAA;AAAA,0BAC3FtC,cAAAA;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,wBAGFgB,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,iBAAA,EAAmB,WAAU,8BAAA,EAErC,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;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,qBAAA,CAAsB,MAAA,CAAO,GAAG,CAAA;AAC9C,gBAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,GAAG,CAAA;AAE7C,gBAAA,uBACEA,cAAAA;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,SAAA;AAAA,oBACA,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,kBAZnB,MAAA,CAAO;AAAA,iBAad;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,cAAAA;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,qBAAA,CAAsB,MAAA,CAAO,GAAG,CAAA;AAC9C,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,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBAEC,SAAA,EAAW,EAAA;AAAA,wBACT,mCAAA;AAAA,wBACA,CAAC,SAAA,IAAa,eAAA;AAAA,wBACd,iBAAA,IAAqB,wCAAA;AAAA,wBACrB,SAAA,IAAa,CAAC,iBAAA,IAAqB,gCAAA;AAAA,wBACnC,iBAAA,IAAqB,8CAAA;AAAA,wBACrB,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,oBAxC/C,MAAA,CAAO;AAAA,mBAyCd;AAAA,gBAEJ,CAAC;AAAA,eAAA;AAAA,cAnEI;AAAA,aAoEP;AAAA,UAEJ,CAAC;AAAA,SAAA,EACL,CAAA;AAAA,QAGC,UAAA,oBACCA,cAAAA,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,GAAUwE,4BAAS,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,uBACExD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0FAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,sBAC9DA,cAAAA;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,cAAAA,CAAC,QAAA,EAAA,EAAkB,OAAO,IAAA,EACvB,QAAA,EAAA,IAAA,EAAA,EADU,IAEb,CACD;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,oBAEAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,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,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA;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,cAAAA;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,sBAGFgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA;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,cAAAA,CAAC0C,wBAAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBACA1C,cAAAA;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,cAAAA,CAAC2C,uBAAAA,EAAA,EAAY,WAAU,SAAA,EAAU;AAAA;AAAA,SACnC;AAAA,wBACA3C,cAAAA;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,cAAAA,CAAC6B,wBAAAA,EAAA,EAAa,WAAU,SAAA,EAAU;AAAA;AAAA,SACpC;AAAA,wBACA7B,cAAAA;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,cAAAA,CAAC4C,yBAAAA,EAAA,EAAc,WAAU,SAAA,EAAU;AAAA;AAAA;AACrC,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACngCO,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,GAAU8B,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,4BAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAiBA,0BAAyB,IAAI,CAAA;AAGpD,EAAA,MAAM,cAAA,GAAuBA,kBAAA,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,2BAAQ,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,2BAAQ,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,kBAAA,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,kBAAA,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,6BAAU,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,kBAAA,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,qBACpB1D,eAAAA;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,wBAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA,KAAA,KAAU,MAAA,CAAO,KAAA,oBAASA,cAAAA,CAACO,iBAAAA,EAAA,EAAM,SAAA,EAAU,WAAU,CAAA,EACxD,CAAA;AAAA,wBACAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,iBAAO,KAAA,EAAM,CAAA;AAAA,UACvC,MAAA,CAAO,+BACNA,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,iBAAO,WAAA,EACV;AAAA,SAAA,EAEJ;AAAA;AAAA,KAAA;AAAA,IAtBK,MAAA,CAAO;AAAA,GAuBd;AAGF,EAAA,uBACEgB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,UACtB,QAAA,kBAAAgB,eAAAA;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,0BAAA;AAAA,UACA,iDAAA;AAAA,UACA,6EAAA;AAAA,UACA,CAAC,cAAA,IAAkB,uBAAA;AAAA,UACnB;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAhB,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA,cAAA,EAAgB,SAAS,WAAA,EAC5B,CAAA;AAAA,0BACAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,IAAa,kCACZhB,cAAAA;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,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA,aACnD;AAAA,4BAEF9C,cAAAA,CAACiB,uBAAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB;AAAA,WAAA,EAC9C;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACAD,eAAAA;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,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,4BAAAhB,cAAAA;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,cAAAA;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,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA;AACnD,WAAA,EAEJ,CAAA;AAAA,0BAGA9C,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,WAAW,CAAA,mBAC1BA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACZ,QAAA,EAAA,SAAA,EACH,CAAA,GACE,4BACFgB,eAAAA,CAAA4C,qBAAA,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,qBACtD5C,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,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;ACnNO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,iBAAA;AAAA,EACd,iBAAA,GAAoB,WAAA;AAAA,EACpB,SAAA,GAAY,mBAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,eAAA,GAAkB,CAAA;AAAA,EAClB,aAAA,GAAgB,KAAA;AAAA,EAChB,cAAA,GAAiB;AACnB,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU2E,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,4BAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAiBA,0BAAyB,IAAI,CAAA;AAEpD,EAAA,MAAM,WAAA,GAAc,WAAW,EAAC;AAChC,EAAA,MAAM,SAAA,GAAY,SAAS,EAAC;AAC5B,EAAA,MAAM,WAAA,GAAoBA,2BAAQ,MAAM,IAAI,IAAI,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEvE,EAAA,MAAM,eAAA,GAAwBA,2BAAQ,MAAM;AAC1C,IAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG,OAAO,WAAA;AAC3B,IAAA,MAAM,WAAA,GAAc,OAAO,WAAA,EAAY;AACvC,IAAA,OAAO,WAAA,CAAY,MAAA;AAAA,MACjB,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,WAAA,EAAa,MAAM,CAAC,CAAA;AAExB,EAAA,MAAM,cAAA,GAAuBA,2BAAQ,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,CAAG,IAAA,CAAK,GAAG,CAAA;AAAA,MAC7B,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,kBAAA,GAA2BA,kBAAA,CAAA,OAAA;AAAA,IAC/B,MAAM,eAAA,CAAgB,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,IAAI,QAAQ,CAAA;AAAA,IACnD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,mBAAA,GAA4BA,kBAAA,CAAA,OAAA;AAAA,IAChC,MACE,kBAAA,CAAmB,MAAA,GAAS,CAAA,IAC5B,kBAAA,CAAmB,KAAA,CAAM,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IAC9D,CAAC,oBAAoB,WAAW;AAAA,GAClC;AAEA,EAAA,MAAM,oBAAA,GAA6BA,kBAAA,CAAA,OAAA;AAAA,IACjC,MACE,CAAC,mBAAA,IACD,kBAAA,CAAmB,IAAA,CAAK,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IAC7D,CAAC,kBAAA,EAAoB,WAAA,EAAa,mBAAmB;AAAA,GACvD;AAEA,EAAA,MAAM,YAAA,GAAqBA,kBAAA,CAAA,WAAA;AAAA,IACzB,CAAC,WAAA,KAAwB;AACvB,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,WAAW,IACpC,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,WAAW,CAAA,GACzC,CAAC,GAAG,WAAW,WAAW,CAAA;AAC9B,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW;AAAA,GACnC;AAEA,EAAA,MAAM,YAAA,GAAqBA,kBAAA,CAAA,WAAA;AAAA,IACzB,CAAC,aAAqB,CAAA,KAAwB;AAC5C,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,QAAA,GAAW,UAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,WAAW,CAAC,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,UAAU,SAAS;AAAA,GACtB;AAEA,EAAA,MAAM,cAAA,GAAuBA,kBAAA,CAAA,WAAA;AAAA,IAC3B,CAAC,CAAA,KAAwB;AACvB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,QAAA,GAAW,EAAE,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,eAAA,GAAwBA,+BAAY,MAAM;AAC9C,IAAA,IAAI,mBAAA,EAAqB;AAEvB,MAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,kBAAA,CAAmB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACrE,MAAA,QAAA,GAAW,SAAA,CAAU,OAAO,CAAC,CAAA,KAAM,CAAC,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,SAAS,CAAA;AAClC,MAAA,MAAM,IAAA,GAAO,CAAC,GAAG,SAAS,CAAA;AAC1B,MAAA,KAAA,MAAW,OAAO,kBAAA,EAAoB;AACpC,QAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,EAAG;AAC5B,UAAA,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,QACrB;AAAA,MACF;AACA,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,mBAAA,EAAqB,kBAAA,EAAoB,SAAA,EAAW,QAAQ,CAAC,CAAA;AAEjE,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,UAAU,UAAA,CAAW,MAAM,SAAS,OAAA,EAAS,KAAA,IAAS,CAAC,CAAA;AAC7D,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;AAET,EAAA,MAAM,aAAA,GAAsBA,kBAAA,CAAA,WAAA,CAAY,CAAC,CAAA,KAA2B;AAClE,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,EACvC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAA,GAAuBA,kBAAA,CAAA,OAAA;AAAA,IAC3B,MACE,SAAA,CACG,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,IAAS,CAAC,CAAA,CAC7D,KAAA,CAAM,GAAG,eAAe,CAAA;AAAA,IAC7B,CAAC,SAAA,EAAW,WAAA,EAAa,eAAe;AAAA,GAC1C;AAEA,EAAA,MAAM,QAAA,GAAW,UAAU,MAAA,GAAS,eAAA;AAEpC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA;AAE3C,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,qBACpB3D,eAAAA;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,OAAO,QAAA,IAAY;AAAA,OACrB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAhB,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAAA,YACrC,QAAA,EAAU,EAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,iBAAO,KAAA,EAAM,CAAA;AAAA,UACvC,MAAA,CAAO,+BACNA,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,iBAAO,WAAA,EACV;AAAA,SAAA,EAEJ;AAAA;AAAA,KAAA;AAAA,IAtBK,MAAA,CAAO;AAAA,GAuBd;AAGF,EAAA,uBACEgB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,UACtB,QAAA,kBAAAgB,eAAAA;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,2JAAA;AAAA,UACA,0BAAA;AAAA,UACA,iDAAA;AAAA,UACA,6EAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAhB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACZ,QAAA,EAAA,SAAA,CAAU,WAAW,CAAA,mBACpBA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAAyB,QAAA,EAAA,WAAA,EAAY,oBAErDgB,eAAAA,CAAA4C,qBAAA,EACG,QAAA,EAAA;AAAA,YAAA,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAC1B5C,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,gHAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,kCAChDA,cAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,QAAA,EAAU,EAAA;AAAA,sBACV,SAAS,CAAC,CAAA,KAAM,aAAa,SAAA,CAAU,CAAC,GAAI,CAAC,CAAA;AAAA,sBAC7C,SAAA,EAAU,yCAAA;AAAA,sBAEV,QAAA,kBAAAA,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,SAAA,EAAU;AAAA;AAAA;AACzB;AAAA,eAAA;AAAA,cAXK,UAAU,CAAC;AAAA,aAanB,CAAA;AAAA,YACA,WAAW,CAAA,oBACV9B,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAC5C;AAAA,aAAA,EACJ;AAAA,WAAA,EAEJ,CAAA,EAEJ,CAAA;AAAA,0BACAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,oBAC/BhB,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,OAAA,EAAS,cAAA;AAAA,gBACT,SAAA,EAAU,iCAAA;AAAA,gBAEV,QAAA,kBAAAA,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA,aACnD;AAAA,4BAEF9C,cAAAA,CAACiB,uBAAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB;AAAA,WAAA,EAC9C;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACAD,eAAAA;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,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,4BAAAhB,cAAAA;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,cAAAA;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,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA;AACnD,WAAA,EAEJ,CAAA;AAAA,0BAGA9B,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAEZ,QAAA,EAAA;AAAA,YAAA,aAAA,IAAiB,mBAAmB,MAAA,GAAS,CAAA,oBAC5CA,eAAAA,CAAA4C,qBAAA,EACE,QAAA,EAAA;AAAA,8BAAA5C,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,eAAA;AAAA,kBACT,SAAA,EAAW,EAAA;AAAA,oBACT,gHAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBAEA,QAAA,EAAA;AAAA,oCAAAhB,cAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EACE,mBAAA,GACI,IAAA,GACA,oBAAA,GACE,eAAA,GACA,KAAA;AAAA,wBAER,QAAA,EAAU,EAAA;AAAA,wBACV,SAAA,EAAU;AAAA;AAAA,qBACZ;AAAA,oCACAA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eACb,QAAA,EAAA,WAAA,GACG,CAAA,EAAG,cAAc,CAAA,WAAA,CAAA,GACjB,cAAA,EACN;AAAA;AAAA;AAAA,eACF;AAAA,8BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B;AAAA,aAAA,EAC7C,CAAA;AAAA,YAGD,eAAA,CAAgB,MAAA,KAAW,CAAA,mBAC1BA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACZ,QAAA,EAAA,SAAA,EACH,CAAA,GACE,SAAA,mBACFgB,eAAAA,CAAA4C,qBAAA,EACG,QAAA,EAAA;AAAA,cAAA,cAAA,CAAe,SAAA,CAAU,IAAI,YAAY,CAAA;AAAA,cACzC,MAAA,CAAO,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,IAAI,CAAA,qBACtD5C,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gBACC,IAAA,CAAK,IAAI,YAAY;AAAA,eAAA,EAAA,EAJd,KAKV,CACD;AAAA,aAAA,EACH,CAAA,GAEA,eAAA,CAAgB,GAAA,CAAI,YAAY;AAAA,WAAA,EAEpC;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC3TnB,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,mBAAA;AAAA,EACd,SAAA,GAAY,mBAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,gBAAA,GAAmB;AACrB,CAAA,EAAkB;AAChB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU4E,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAS,EAAE,CAAA;AACrD,EAAA,MAAM,QAAA,GAAiBA,0BAAyB,IAAI,CAAA;AACpD,EAAA,MAAM,UAAA,GAAmBA,0BAAuB,IAAI,CAAA;AAGpD,EAAA,MAAM,cAAA,GAAuBA,kBAAA,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,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,aAAA,CAAc,cAAA,EAAgB,KAAA,IAAS,KAAA,IAAS,EAAE,CAAA;AAAA,IACpD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,cAAA,EAAgB,IAAI,CAAC,CAAA;AAGhC,EAAA,MAAM,eAAA,GAAwBA,2BAAQ,MAAM;AAC1C,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG,OAAO,OAAA;AAC/B,IAAA,MAAM,WAAA,GAAc,WAAW,WAAA,EAAY;AAC3C,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,UAAU,CAAC,CAAA;AAGxB,EAAA,MAAM,cAAA,GAAuBA,2BAAQ,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,CAAG,IAAA,CAAK,GAAG,CAAA;AAAA,MAC7B,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;AAE9D,EAAA,MAAM,iBAAA,GAA0BA,kBAAA,CAAA,WAAA;AAAA,IAC9B,CAAC,CAAA,KAA2C;AAC1C,MAAA,MAAM,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAC1B,MAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,MAAA,aAAA,GAAgB,QAAQ,CAAA;AACxB,MAAA,IAAI,CAAC,IAAA,EAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,eAAe,IAAI;AAAA,GACtB;AAEA,EAAA,MAAM,YAAA,GAAqBA,kBAAA,CAAA,WAAA;AAAA,IACzB,CAAC,WAAA,KAAwB;AACvB,MAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,WAAW,CAAA;AAC1D,MAAA,QAAA,GAAW,WAAW,CAAA;AACtB,MAAA,aAAA,CAAc,MAAA,EAAQ,SAAS,WAAW,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,WAAA;AAAA,IACxB,CAAC,CAAA,KAAwB;AACvB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,GAAW,MAAS,CAAA;AACpB,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,WAAA,GAAoBA,+BAAY,MAAM;AAC1C,IAAA,OAAA,CAAQ,IAAI,CAAA;AAEZ,IAAA,QAAA,CAAS,SAAS,MAAA,EAAO;AAAA,EAC3B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAmBA,+BAAY,MAAM;AAEzC,IAAA,UAAA,CAAW,MAAM;AAEf,MAAA,IAAI,CAAC,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,EAAG;AACzD,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAEA,MAAA,IAAI,gBAAA,IAAoB,UAAA,CAAW,IAAA,EAAK,EAAG;AAEzC,QAAA,MAAM,iBAAiB,OAAA,CAAQ,IAAA;AAAA,UAC7B,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAM,WAAA,EAAY,KAAM,WAAW,WAAA;AAAY,SAC9D;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,QAAA,GAAW,eAAe,KAAK,CAAA;AAC/B,UAAA,aAAA,CAAc,eAAe,KAAK,CAAA;AAAA,QACpC,CAAA,MAAO;AAEL,UAAA,QAAA,GAAW,UAAA,CAAW,MAAM,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA,MAAA,IAAW,CAAC,gBAAA,EAAkB;AAE5B,QAAA,aAAA,CAAc,cAAA,EAAgB,SAAS,EAAE,CAAA;AAAA,MAC3C;AAAA,IACF,GAAG,GAAG,CAAA;AAAA,EACR,GAAG,CAAC,gBAAA,EAAkB,YAAY,OAAA,EAAS,QAAA,EAAU,cAAc,CAAC,CAAA;AAEpE,EAAA,MAAM,aAAA,GAAsBA,kBAAA,CAAA,WAAA;AAAA,IAC1B,CAAC,CAAA,KAA2B;AAC1B,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,CAAQ,KAAK,CAAA;AACb,QAAA,aAAA,CAAc,cAAA,EAAgB,KAAA,IAAS,KAAA,IAAS,EAAE,CAAA;AAClD,QAAA,QAAA,CAAS,SAAS,IAAA,EAAK;AAAA,MACzB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,IAAA,EAAM;AACpC,QAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,QAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,UAAA,YAAA,CAAa,eAAA,CAAgB,CAAC,CAAA,CAAG,KAAK,CAAA;AAAA,QACxC,CAAA,MAAA,IAAW,gBAAA,IAAoB,UAAA,CAAW,IAAA,EAAK,EAAG;AAEhD,UAAA,MAAM,aAAa,eAAA,CAAgB,IAAA;AAAA,YACjC,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAM,WAAA,EAAY,KAAM,WAAW,WAAA;AAAY,WAC9D;AACA,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,YAAA,CAAa,WAAW,KAAK,CAAA;AAAA,UAC/B,CAAA,MAAO;AACL,YAAA,QAAA,GAAW,UAAA,CAAW,MAAM,CAAA;AAC5B,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,qBACpB5D,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,IAAA,EAAK,QAAA;AAAA,MACL,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,MACrC,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,wBAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA,KAAA,KAAU,MAAA,CAAO,KAAA,oBAASA,cAAAA,CAACO,iBAAAA,EAAA,EAAM,SAAA,EAAU,WAAU,CAAA,EACxD,CAAA;AAAA,wBACAS,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,iBAAO,KAAA,EAAM,CAAA;AAAA,UACvC,MAAA,CAAO,+BACNA,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EACZ,iBAAO,WAAA,EACV;AAAA,SAAA,EAEJ;AAAA;AAAA,KAAA;AAAA,IAvBK,MAAA,CAAO;AAAA,GAwBd;AAGF,EAAA,uBACEgB,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAO,IAAA,EACpB,QAAA,kBAAAgB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,gIAAA;AAAA,UACA,0BAAA;AAAA,UACA,sEAAA;AAAA,UACA,QAAA,IACE,kDAAA;AAAA,UACF;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,QAAA;AAAA,cACL,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,UAAA;AAAA,cACP,QAAA,EAAU,iBAAA;AAAA,cACV,OAAA,EAAS,WAAA;AAAA,cACT,MAAA,EAAQ,UAAA;AAAA,cACR,SAAA,EAAW,aAAA;AAAA,cACX,WAAA;AAAA,cACA,QAAA;AAAA,cACA,SAAA,EAAU,+GAAA;AAAA,cACV,IAAA,EAAK,UAAA;AAAA,cACL,eAAA,EAAe,IAAA;AAAA,cACf,eAAA,EAAc,SAAA;AAAA,cACd,mBAAA,EAAkB;AAAA;AAAA,WACpB;AAAA,0BACAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,IAAa,yBACZhB,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,QAAA,EAAU,EAAA;AAAA,gBACV,WAAA,EAAa,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,gBACrC,OAAA,EAAS,WAAA;AAAA,gBACT,SAAA,EAAU,iCAAA;AAAA,gBAEV,QAAA,kBAAAA,cAAAA,CAAC8C,aAAAA,EAAA,EAAE,WAAU,mCAAA,EAAoC;AAAA;AAAA,aACnD;AAAA,4BAEF9C,cAAAA,CAACiB,uBAAAA,EAAA,EAAY,WAAU,oBAAA,EAAqB;AAAA,WAAA,EAC9C;AAAA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACAjB,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,CAAW,SAAS,WAAA,EAAY;AAAA,QAChD,KAAA,EAAM,OAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QACZ,eAAA,EAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,EAAe;AAAA,QACzC,cAAA,EAAgB,CAAC,CAAA,KAAM;AACrB,UAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAClD,YAAA,CAAA,CAAE,cAAA,EAAe;AAAA,UACnB;AAAA,QACF,CAAA;AAAA,QACA,iBAAA,EAAmB,CAAC,CAAA,KAAM;AACxB,UAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AAClD,YAAA,CAAA,CAAE,cAAA,EAAe;AAAA,UACnB;AAAA,QACF,CAAA;AAAA,QAGA,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,WAAW,CAAA,mBAC1BA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACZ,QAAA,EAAA,SAAA,EACH,CAAA,GACE,4BACFgB,eAAAA,CAAA4C,qBAAA,EACG,QAAA,EAAA;AAAA,UAAA,cAAA,CAAe,SAAA,CAAU,IAAI,YAAY,CAAA;AAAA,UACzC,MAAA,CAAO,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,IAAI,CAAA,qBACtD5C,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YACC,IAAA,CAAK,IAAI,YAAY;AAAA,WAAA,EAAA,EAJd,KAKV,CACD;AAAA,SAAA,EACH,CAAA,GAEA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAA,EAEpC;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AChUvB,IAAM,kBAAA,GAAqBH,0BAAAA;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,GAAmBgF,kBAAA,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,uBACE7E,cAAAA;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,GAAU8E,4BAAS,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,uBACE9E,cAAAA;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,cAAAA,CAACO,iBAAAA,EAAA,EAAM,MAAM,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA,mBAE9BP,cAAAA,CAAC+E,gBAAA,EAAA,EAAK,IAAA,EAAM,SAAA,CAAU,IAAI,CAAA,EAAG;AAAA;AAAA,GAEjC;AAEJ;;;ACrEO,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,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,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,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAQO,IAAM,oBAAA,GAA8B;AAAA,EACzC,EAAA,EAAI,gBAAA;AAAA,EACJ,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAa,mDAAA;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,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,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,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAQO,IAAM,kBAAA,GAA4B;AAAA,EACvC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,MAAA,EAAQ,SAAA;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,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,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,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAGO,IAAM,sBAAA,GAAyB;AAQ/B,IAAM,iBAAA,GAA2B;AAAA,EACtC,EAAA,EAAI,aAAA;AAAA,EACJ,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EAAa,6CAAA;AAAA,EACb,MAAA,EAAQ,SAAA;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,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,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,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAOO,IAAM,kBAAA,GAA4B;AAAA,EACvC,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,EAAa,6CAAA;AAAA,EACb,MAAA,EAAQ,SAAA;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,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,SAAA;AAAA,EACb,qBAAA,EAAuB,SAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,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,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAKO,IAAM,aAAA,GAAyB;AAAA,EACpC,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;AAKO,IAAM,UAAA,GAAsB;AAK5B,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;;;ACrTO,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,eAAe,KAAA,CAAM,aAAA,GACjB,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA,GAC5B,MAAA;AAAA,IACJ,SAAS,KAAA,CAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAAA,IACnD,aAAa,KAAA,CAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAAA,IAC/D,uBAAuB,KAAA,CAAM,qBAAA,GACzB,QAAA,CAAS,KAAA,CAAM,qBAAqB,CAAA,GACpC,MAAA;AAAA,IACJ,YAAY,KAAA,CAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAAA,IAC5D,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,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,CAAA;AAAA,IAC7B,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAO;AAAA,GACjC;AACF;AAMA,SAAS,oBAAoB,QAAA,EAA4B;AACvD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA;AAC7C,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,IAAA,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,QAAA,CAAS,UAAA;AAClB;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;AAGjD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,kBAAA;AAAA,IACA,QAAA,CAAS,iBAAiB,QAAA,CAAS;AAAA,GACrC;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,WAAA;AAAA,IACA,QAAA,CAAS,WAAW,QAAA,CAAS;AAAA,GAC/B;AAGA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,gBAAA;AAAA,IACA,QAAA,CAAS,eAAe,QAAA,CAAS;AAAA,GACnC;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,2BAAA;AAAA,IACA,QAAA,CAAS,yBAAyB,QAAA,CAAS;AAAA,GAC7C;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA;AAAA,IACZ,eAAA;AAAA,IACA,QAAA,CAAS,UAAA,IAAc,mBAAA,CAAoB,QAAQ;AAAA,GACrD;AAEA,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;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;AACtD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,YAAA,EAAc,QAAA,CAAS,OAAO,CAAA;AACxD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,YAAA,EAAc,QAAA,CAAS,OAAO,CAAA;AACxD,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,YAAA,EAAc,QAAA,CAAS,OAAO,CAAA;AAExD,EAAA,IAAI,MAAM,eAAA,EAAiB;AACzB,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,oBAAA,EAAsB,KAAA,CAAM,eAAe,CAAA;AAAA,EACvE;AAEA,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,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;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,eAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;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;ACtVA,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,UAAA,EAAY,SAAQ,EAAqB;AACrE,EAAA,uBACE/E,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,OAAA,kBACEgB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAhB,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAe,gBAAM,IAAA,EAAK,CAAA;AAAA,QACtC,KAAA,CAAM,+BACLA,cAAAA,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,kBAAAgB,eAAAA;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,eAAAA;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,kCAAAhB,cAAAA;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,cAAAA;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,cAAAA;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,cAAAA,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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2FAAA,EACb,QAAA,kBAAAA,cAAAA,CAACO,iBAAAA,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,GAAUyE,4BAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUA,kBAAA,CAAA,QAAA;AAAA,IAC9C,KAAA,IAAS,OAAO,CAAC;AAAA,GACnB;AAEA,EAAMA,6BAAU,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,uBACEhE,eAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,cAAc,OAAA,EACjC,QAAA,EAAA;AAAA,oBAAAhB,eAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACpB,QAAA,EAAA,cAAA,KAAmB,yBAClBA,cAAAA;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,cAAAA,CAACiF,mBAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,wBAG/BjE,eAAAA;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,0BAAAhB,cAAAA,CAACiF,mBAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,0BAC7BjF,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,aAAA,EAAe,QAAQ,OAAA,EAAQ;AAAA;AAAA;AAAA,KACxC,EAEJ,CAAA;AAAA,oBAEAA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,aAAA;AAAA,QAEX,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,4BAChDA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,wCAAA,EAE7C;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,cAAAA;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,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,4BAAAhB,cAAAA;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,cAAAA,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,GAAUkF,4BAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUA,4BAG1C,IAAI,CAAA;AACd,EAAA,MAAM,OAAA,GAAgBA,0BAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,eAAA,GAAwBA,0BAA6C,IAAI,CAAA;AAE/E,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AAEzD,EAAMA,6BAAU,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,GAAyBA,+BAAY,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,GAAyBA,+BAAY,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,GAAgCA,+BAAY,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,GAAgCA,+BAAY,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,GAAoBA,+BAAY,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,uBAAOlF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,EAC9C;AAEA,EAAA,uBACEgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,cAAc,gBAAA,EACtC,QAAA,EAAA;AAAA,oBAAAA,eAAAA;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,wBACJhB,cAAAA;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,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,eAAK,KAAA,EAAM,CAAA;AAAA,UAC7C,IAAA,CAAK,4BACJA,cAAAA,CAAC,UAAK,SAAA,EAAU,kDAAA,EACb,eAAK,QAAA,EACR,CAAA;AAAA,UAED,8BACCA,cAAAA,CAAC6B,wBAAAA,EAAA,EAAa,WAAU,kDAAA,EAAmD;AAAA;AAAA;AAAA,KAE/E;AAAA,IAEC,KAAK,OAAA,oBAAW7B,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EAAsB,CAAA;AAAA,IAErD,UAAA,IAAc,aAAA,IAAiB,eAAA,oBAC9BA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,yCAAA;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,cAAAA;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,GAAgBkF,0BAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAUA,kBAAA,CAAA,QAAA,CAAmC;AAAA,IAC/E,CAAA,EAAG,CAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ,CAAA;AAED,EAAMA,6BAAU,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,EAAMA,6BAAU,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,uBACElF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,EAAA;AAAA,QACT,wCAAA;AAAA,QACA,yCAAA;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,cAAAA,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,GAAUkF,4BAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,kBAAA,CAAA,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;AAC7D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUA,4BAAmB,IAAI,CAAA;AACjE,EAAA,MAAM,OAAA,GAAgBA,0BAAuB,IAAI,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAiBA,kBAAA,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,GAAkBA,+BAAY,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;;;AC9YA,IAAM,aAAA,GAA6C;AAAA;AAAA,EAEjD,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,IAAA,EAAM,MAAA;AAAA,EACN,CAAA,EAAG,MAAA;AAAA,EACH,GAAA,EAAK,MAAA;AAAA,EACL,CAAA,EAAG,MAAA;AAAA,EACH,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,KAAA,EAAO,MAAA;AAAA,EACP,EAAA,EAAI,MAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,CAAA,EAAG,MAAA;AAAA,EACH,GAAA,EAAK,MAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,EAAA,EAAI,MAAA;AAAA;AAAA,EAEJ,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,MAAA;AAAA;AAAA,EAEL,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA;AAAA,EAEL,EAAA,EAAI,UAAA;AAAA,EACJ,GAAA,EAAK,UAAA;AAAA;AAAA,EAEL,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA,EACL,IAAA,EAAM,OAAA;AAAA,EACN,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,OAAA;AAAA;AAAA,EAEL,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA;AAAA,EAEL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK,WAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAKA,IAAM,aAAA,GAA6C;AAAA,EACjD,UAAA,EAAY,MAAA;AAAA,EACZ,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAOO,SAAS,iBAAiB,QAAA,EAAiC;AAChE,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,QAAA;AAG9C,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,IAAK,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAChE,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AAAA,EACvC;AAEA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,IAAI,YAAY,EAAA,IAAM,OAAA,KAAY,QAAA,CAAS,MAAA,GAAS,GAAG,OAAO,IAAA;AAE9D,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,OAAA,GAAU,CAAC,EAAE,WAAA,EAAY;AACjD;AAWO,SAAS,kBACd,QAAA,EAC4B;AAE5B,EAAA,MAAM,QAAA,GAAA,CAAY,SAAS,KAAA,CAAM,GAAG,EAAE,GAAA,EAAI,IAAK,UAAU,WAAA,EAAY;AACrE,EAAA,MAAM,WAAA,GAAc,cAAc,QAAQ,CAAA;AAC1C,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,QAAA,EAAS;AAAA,EAClD;AAEA,EAAA,MAAM,SAAA,GAAY,iBAAiB,QAAQ,CAAA;AAC3C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,IAAA,EAAK;AAAA,EAC5C;AAEA,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,SAAS,CAAA,IAAK,SAAA;AACzC,EAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAC3B;AAKO,SAAS,kBAAkB,WAAA,EAAmC;AACnE,EAAA,OACE,WAAA,KAAgB,MAAA,IAChB,WAAA,KAAgB,UAAA,IAChB,WAAA,KAAgB,eAChB,WAAA,KAAgB,KAAA,IAChB,WAAA,KAAgB,MAAA,IAChB,WAAA,KAAgB,SAAA;AAEpB;AAKO,SAAS,iBAAiB,WAAA,EAAmC;AAClE,EAAA,OAAO,WAAA,KAAgB,WAAW,WAAA,KAAgB,KAAA;AACpD;;;AC1IO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA;AACF,CAAA,EAAgD;AAC9C,EAAA,OAAOf,gBAAQ,MAAM;AACnB,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,mBAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,YAAA,EAAc;AAAA,OAChB;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,kBAAkB,QAAQ,CAAA;AAC3C,IAAA,OAAO,EAAE,GAAG,QAAA,EAAU,YAAA,EAAc,KAAA,EAAM;AAAA,EAC5C,CAAA,EAAG,CAAC,QAAA,EAAU,mBAAmB,CAAC,CAAA;AACpC;ACvBA,IAAI,iBAAA,GAAwC,IAAA;AAC5C,IAAI,WAAA,GAAkD,IAAA;AAEtD,eAAe,sBAAA,GAAsD;AACnE,EAAA,IAAI,mBAAmB,OAAO,iBAAA;AAE9B,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,WAAA,GAAA,CAAe,YAAY;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,MAAM,OAAO,OAAO,CAAA;AAClD,QAAA,iBAAA,GAAoB,MAAM,iBAAA,CAAkB;AAAA,UAC1C,MAAA,EAAQ,CAAC,cAAA,EAAgB,aAAa,CAAA;AAAA,UACtC,OAAO;AAAC,SACT,CAAA;AACD,QAAA,OAAO,iBAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,GAAG;AAAA,EACL;AAEA,EAAA,OAAO,WAAA;AACT;AAUO,SAAS,mBAAA,GAA6C;AAC3D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,gBAAAA,CAAgC;AAAA,IACxD,WAAA,EAAa,iBAAA;AAAA,IACb,SAAS,iBAAA,KAAsB;AAAA,GAChC,CAAA;AAED,EAAAE,kBAAU,MAAM;AACd,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,QAAA,CAAS,EAAE,WAAA,EAAa,iBAAA,EAAmB,OAAA,EAAS,MAAM,CAAA;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,sBAAA,EAAuB,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM;AACnC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,QAAA,CAAS,EAAE,WAAA,EAAa,CAAA,EAAG,OAAA,EAAS,MAAM,CAAA;AAAA,MAC5C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,KAAA;AACT;AC7DA,SAAS,uBAAuB,EAAA,EAAgC;AAC9D,EAAA,MAAM,QAAQ,gBAAA,CAAiB,EAAE,EAAE,gBAAA,CAAiB,cAAc,EAAE,IAAA,EAAK;AACzE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,sBAAsB,CAAA;AAChD,EAAA,OAAO,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AACxC;AAaO,SAAS,WAAA,GAAuB;AACrC,EAAA,MAAM,SAAA,GAAYC,oBAAY,MAAe;AAC3C,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,KAAA;AAC5C,IAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,QAAA,CAAS,eAAe,CAAA;AAEjE,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,OAAO,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA;AAAA,IAC3D;AACA,IAAA,OAAO,SAAA,GAAY,EAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIH,iBAAS,SAAS,CAAA;AAE9C,EAAAE,kBAAU,MAAM;AACd,IAAA,MAAM,KAAK,QAAA,CAAS,eAAA;AAEpB,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,SAAA,CAAU,WAAW,CAAA;AAAA,IACvB,CAAA;AAGA,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM,CAAA;AAC5C,IAAA,QAAA,CAAS,QAAQ,EAAA,EAAI;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,OAAA,EAAS,OAAO;AAAA,KACnC,CAAA;AAGD,IAAA,MAAA,EAAO;AAEP,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,MAAA;AACT;;;ACxCO,SAAS,oBAAA,CACd,MACA,QAAA,EAC4B;AAC5B,EAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAQ,GAAI,mBAAA,EAAoB;AACrD,EAAA,MAAM,SAAS,WAAA,EAAY;AAC3B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIF,iBAAoC,IAAI,CAAA;AAElE,EAAAE,kBAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,WAAA,IAAe,CAAC,IAAA,EAAM;AACrC,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,SAAS,aAAA,GAAgB,cAAA;AAEvC,IAAA,CAAC,YAAY;AACX,MAAA,IAAI;AAEF,QAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,UAAA,MAAM,WAAA,GAAc,YAAY,kBAAA,EAAmB;AACnD,UAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAiB,CAAA,EAAG;AAC5C,YAAA,MAAM,WAAA,CAAY,aAAa,QAA0D,CAAA;AAAA,UAC3F;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAEN,QAAA,IAAI,CAAC,SAAA,EAAW,QAAA,CAAS,IAAI,CAAA;AAC7B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,EAAW;AAEf,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,WAAA,CAAY,YAAA,CAAa,IAAA,EAAM;AAAA,UAC5C,IAAA,EAAM,QAAA;AAAA,UACN;AAAA,SACD,CAAA;AAED,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,QAAA;AAAA,YACE,OAAO,MAAA,CAAO,GAAA;AAAA,cAAI,CAAC,IAAA,KACjB,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,gBACnB,SAAS,KAAA,CAAM,OAAA;AAAA,gBACf,OAAO,KAAA,CAAM;AAAA,eACf,CAAE;AAAA;AACJ,WACF;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI,CAAC,SAAA,EAAW,QAAA,CAAS,IAAI,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,SAAS,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,CAAA;AAEjD,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;;;AC5EA,IAAM,mBAAA,GAA8C;AAAA,EAClD,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,CAAA,EAAG,GAAA;AAAA,EACH,GAAA,EAAK,KAAA;AAAA,EACL,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,IAAA,EAAM,aAAA;AAAA,EACN,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,YAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,SAAA;AAAA,EACL,EAAA,EAAI,MAAA;AAAA,EACJ,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA;AAAA,EAEN,EAAA,EAAI,MAAA;AAAA,EACJ,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAKA,IAAM,sBAAA,GAAiD;AAAA,EACrD,UAAA,EAAY,YAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAWO,SAAS,wBAAwB,QAAA,EAA0B;AAChE,EAAA,MAAM,QAAA,GAAA,CAAY,SAAS,KAAA,CAAM,GAAG,EAAE,GAAA,EAAI,IAAK,UAAU,WAAA,EAAY;AAGrE,EAAA,MAAM,WAAA,GAAc,uBAAuB,QAAQ,CAAA;AACnD,EAAA,IAAI,aAAa,OAAO,WAAA;AAGxB,EAAA,IAAI,GAAA,GAAqB,IAAA;AACzB,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,IAAK,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAChE,IAAA,GAAA,GAAM,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,IAAA,IAAI,OAAA,KAAY,EAAA,IAAM,OAAA,KAAY,QAAA,CAAS,SAAS,CAAA,EAAG;AACrD,MAAA,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAGjB,EAAA,OAAO,mBAAA,CAAoB,GAAG,CAAA,IAAK,GAAA;AACrC;ACvDO,SAAS,YAAA,CAAa;AAAA,EAC3B,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,QAAA,GAAiBa,kBAAA,CAAA,OAAA;AAAA,IACrB,MAAM,wBAAwB,QAAQ,CAAA;AAAA,IACtC,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,UAAA,GAAmBA,kBAAA,CAAA,OAAA;AAAA,IACvB,MAAA,CAAO,OAAA,IAAW,EAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AAAA,IAChC,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,gBAAA,EAAiB,GAAI,oBAAA;AAAA,IAClC,OAAA,IAAW,EAAA;AAAA,IACX;AAAA,GACF;AAEA,EAAA,MAAM,WAAA,GAAoBA,kBAAA,CAAA,OAAA;AAAA,IACxB,MAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,GAAI,CAAC,CAAA,EAAA,CAAA;AAAA,IAC1D,CAAC,WAAW,MAAM;AAAA,GACpB;AAEA,EAAA,uBACEnF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oFAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WACb,QAAA,kBAAAA,cAAAA,CAAC,UAAK,SAAA,EAAU,yCAAA,EACb,6BACG,gBAAA,CAAiB,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAC5BgB,eAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,MAAA,EACzB,QAAA,EAAA;AAAA,wBAAAhB,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0GAAA;AAAA,YACV,KAAA,EAAO,EAAE,QAAA,EAAU,WAAA,EAAY;AAAA,YAE9B,QAAA,EAAA,KAAA,GAAQ;AAAA;AAAA,SACX;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBACb,QAAA,EAAA,MAAA,CAAO,MAAA,KAAW,CAAA,IAAM,MAAA,CAAO,WAAW,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,CAAE,YAAY,EAAA,GAClE,GAAA,GACA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,EAAA,qBACjBA,cAAAA,CAAC,UAAc,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,OAAM,EACxC,QAAA,EAAA,KAAA,CAAM,OAAA,EAAA,EADE,EAEX,CACD,CAAA,EACP;AAAA,OAAA,EAAA,EAfQ,KAgBV,CACD,CAAA,GACD,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACpBgB,eAAAA,CAAC,KAAA,EAAA,EAAgB,SAAA,EAAU,MAAA,EACzB,QAAA,EAAA;AAAA,wBAAAhB,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0GAAA;AAAA,YACV,KAAA,EAAO,EAAE,QAAA,EAAU,WAAA,EAAY;AAAA,YAE9B,QAAA,EAAA,KAAA,GAAQ;AAAA;AAAA,SACX;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACb,kBAAQ,GAAA,EACX;AAAA,OAAA,EAAA,EATQ,KAUV,CACD,CAAA,EACP,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;ACrF3B,SAAS,oBAAA,CAAqB;AAAA,EAC5B,QAAA;AAAA,EACA,SAAA,EAAW,aAAA;AAAA,EACX,GAAG;AACL,CAAA,EAAsC;AAEpC,EAAA,MAAM,QAAA,GAAiBoF,2BAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,eAAe,OAAO,MAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,CAAM,gBAAgB,CAAA;AAClD,IAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,IAAA,GAAaA,2BAAQ,MAAM;AAC/B,IAAA,MAAM,GAAA,GAAM,OAAO,QAAQ,CAAA;AAE3B,IAAA,OAAO,GAAA,CAAI,SAAS,IAAI,CAAA,GAAI,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAAA,EACjD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,oBAAA,CAAqB,MAAM,QAAQ,CAAA;AAErD,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEpF,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,oBAAA,EAAsB,aAAa,CAAA,EAAI,GAAG,KAAA,EAC3D,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,MAAA,EAAQ,sBAClBgB,eAAAA,CAAOoE,6BAAN,EACE,QAAA,EAAA;AAAA,MAAA,CAAA,GAAI,CAAA,IAAK,IAAA;AAAA,MACT,OAAO,GAAA,CAAI,CAAC,KAAA,EAAO,EAAA,qBAClBpF,cAAAA,CAAC,MAAA,EAAA,EAAc,KAAA,EAAO,EAAE,OAAO,KAAA,CAAM,KAAA,IAClC,QAAA,EAAA,KAAA,CAAM,OAAA,EAAA,EADE,EAEX,CACD;AAAA,KAAA,EAAA,EANkB,CAOrB,CACD,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,sBAAsB,aAAa,CAAA,EAAI,GAAG,KAAA,EAC3D,QAAA,EACH,CAAA;AAEJ;AAWA,SAAS,aAAA,CAAc;AAAA,EACrB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,eAAA,GACJ,CAAC,CAAC,GAAA,IACF,CAAC,CAAC,eAAA,IACF,CAAC,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,IACzB,CAAC,IAAI,UAAA,CAAW,UAAU,KAC1B,CAAC,GAAA,CAAI,WAAW,OAAO,CAAA;AAEzB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUoF,4BAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,4BAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUA,4BAAS,eAAe,CAAA;AAE5D,EAAMA,6BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,GAAA,IAAO,CAAC,eAAA,EAAiB;AAElD,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,OAAA,GAAyB,IAAA;AAE7B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AAEnB,IAAA,OAAA,CAAQ,QAAQ,eAAA,CAAgB,GAAG,CAAC,CAAA,CACjC,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,MAAA,IAAI,SAAA,EAAW;AAEb,QAAA,IAAI,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACpD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG,OAAA,GAAU,GAAA;AACvC,MAAA,cAAA,CAAe,GAAG,CAAA;AAClB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAC,CAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,IAAI,OAAA,EAAS,GAAA,CAAI,eAAA,CAAgB,OAAO,CAAA;AAAA,IAC1C,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,GAAA,EAAK,eAAe,CAAC,CAAA;AAG1C,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,uBACEpF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,SAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAAA,EAEvE;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EAA6D,CAAA;AAAA,EAEjF;AAGA,EAAA,IAAI,KAAA,IAAS,CAAC,WAAA,EAAa;AACzB,IAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,GAAA,EAAU,KAAU,SAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAAA,EAEvE;AAGA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,GAAA;AAAA,MACA,SAAA,EAAU,oBAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAEJ;AAWO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,kBAAA,GAA2BoF,kBAAA,CAAA,OAAA;AAAA,IAC/B,OAAO;AAAA,MACL,MAAM,CAAC;AAAA,QACL,QAAA;AAAA,QACA,SAAA,EAAW,aAAA;AAAA,QACX,GAAG;AAAA,OACL,KAGM;AAEJ,QAAA,MAAM,WAAW,CAAC,aAAA;AAClB,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,uBACEpF,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,qDAAA;AAAA,cACT,GAAG,KAAA;AAAA,cAEH;AAAA;AAAA,WACH;AAAA,QAEJ;AACA,QAAA,uBACEA,cAAAA,CAAC,oBAAA,EAAA,EAAqB,WAAW,aAAA,EAAgB,GAAG,OACjD,QAAA,EACH,CAAA;AAAA,MAEJ,CAAA;AAAA,MACA,KAAK,CAAC,EAAE,UAAU,GAAG,KAAA,uBACnBA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,mGAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA,OACH;AAAA,MAEF,YAAY,CAAC;AAAA,QACX,QAAA;AAAA,QACA,GAAG;AAAA,4BAEHA,cAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,0DAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA,OACH;AAAA,MAEF,GAAG,CAAC;AAAA,QACF,QAAA;AAAA,QACA,IAAA;AAAA,QACA,GAAG;AAAA,4BAEHA,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,SAAA,EAAU,8BAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA,OACH;AAAA,MAEF,OAAO,CAAC;AAAA,QACN,QAAA;AAAA,QACA,GAAG;AAAA,4BAEHA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,qDAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA,OACH,EACF,CAAA;AAAA,MAEF,IAAI,CAAC;AAAA,QACH,QAAA;AAAA,QACA,GAAG;AAAA,4BAEHA,cAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iEAAA;AAAA,UACT,GAAG,KAAA;AAAA,UAEH;AAAA;AAAA,OACH;AAAA,MAEF,IAAI,CAAC;AAAA,QACH,QAAA;AAAA,QACA,GAAG;AAAA,OACL,qBACEA,cAAAA,CAAC,IAAA,EAAA,EAAG,WAAU,gCAAA,EAAkC,GAAG,OAChD,QAAA,EACH,CAAA;AAAA,MAEF,KAAK,CAAC;AAAA,QACJ,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAG;AAAA,4BAEHA,cAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,GAAA;AAAA,UACA,eAAA;AAAA,UACC,GAAG;AAAA;AAAA;AACN,KAEJ,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,uFAAA;AAAA;AAAA,QAEA,2GAAA;AAAA,QACA,8GAAA;AAAA,QACA,6DAAA;AAAA,QACA,+DAAA;AAAA;AAAA,QAEA,kCAAA;AAAA,QACA,0CAAA;AAAA,QACA,6CAAA;AAAA,QACA,aAAA;AAAA;AAAA,QAEA,kCAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,cAAAA;AAAA,QAACqF,oCAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAe,CAACC,gCAAe,CAAA;AAAA,UAC/B,UAAA,EAAY,kBAAA;AAAA,UAEX,QAAA,EAAA,OAAA,IAAW;AAAA;AAAA;AACd;AAAA,GACF;AAEJ;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACrSxB,SAAS,aAAA,CAAc;AAAA,EAC5B,GAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUC,4BAAS,KAAK,CAAA;AAEpD,EAAMA,6BAAU,MAAM;AACpB,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,uBACEvF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,8EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACEgB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,6FAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAhB,cAAAA,CAAC,UAAK,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,0BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAW,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA;AAAA,KACtC;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,GAAA;AAAA,UACL,GAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,UAC/B,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GACF;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;ACxDrB,SAAS,iBAAA,CAAkB,EAAE,OAAA,EAAS,SAAA,EAAU,EAAsB;AAC3E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+EAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uFAAA,EACZ,qBAAW,EAAA,EACd;AAAA;AAAA,GACF;AAEJ;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AChBhC,SAAS,SAAS,IAAA,EAGhB;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,SAAS,EAAC,EAAG,IAAA,EAAM,EAAC,EAAE;AAGvD,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,GAAI,IAAI,GAAA,GAAO,GAAA;AAEpD,EAAA,SAAS,UAAU,IAAA,EAAwB;AACzC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,SAAS,GAAA,EAAK;AAChB,UAAA,IAAI,CAAA,GAAI,IAAI,IAAA,CAAK,MAAA,IAAU,KAAK,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAC9C,YAAA,OAAA,IAAW,GAAA;AACX,YAAA,CAAA,IAAK,CAAA;AAAA,UACP,CAAA,MAAO;AACL,YAAA,QAAA,GAAW,KAAA;AACX,YAAA,CAAA,EAAA;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,IAAW,IAAA;AACX,UAAA,CAAA,EAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,SAAS,GAAA,EAAK;AAChB,UAAA,QAAA,GAAW,IAAA;AACX,UAAA,CAAA,EAAA;AAAA,QACF,CAAA,MAAA,IAAW,SAAS,SAAA,EAAW;AAC7B,UAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC1B,UAAA,OAAA,GAAU,EAAA;AACV,UAAA,CAAA,EAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,IAAW,IAAA;AACX,UAAA,CAAA,EAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,UAAU,SAAS,CAAA;AACnC,EAAA,MAAM,OAAiC,EAAC;AAExC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACxB,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,IAAA,MAAM,MAA8B,EAAC;AACrC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,GAAA,CAAI,QAAQ,CAAC,CAAE,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,IAAK,EAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACf;AAEA,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AACzB;AAQO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAS,SAAA,EAAU,EAAsB;AACrE,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAK,GAAUwF,kBAAA,CAAA,OAAA;AAAA,IAC9B,MAAM,QAAA,CAAS,OAAA,IAAW,EAAE,CAAA;AAAA,IAC5B,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,OAAA,GAAgBA,kBAAA,CAAA,OAAA;AAAA,IACpB,MACE,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MACvB,GAAA,EAAK,MAAA;AAAA,MACL,MAAA;AAAA,MACA,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY,IAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd,CAAE,CAAA;AAAA,IACJ,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,uBACExF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,8EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,6BAAA,EAA+B,SAAS,GACzD,QAAA,kBAAAA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,IAAA;AAAA,MACN,OAAA;AAAA,MACA,SAAA,EAAW,CAAC,CAAA,EAAG,KAAA,KAAU,OAAO,KAAK,CAAA;AAAA,MACrC,gBAAA,EAAgB;AAAA;AAAA,GAClB,EACF,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC7G1B,IAAM,UAAA,GAAa;AAAA,EACjB,oBAAA;AAAA,EACA,4BAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,IAAI,CAAA;AAOX,IAAM,kBAAA,GAAqB;AAAA,EACzB,WAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,IAAI,CAAA;AAEX,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA,oDAAA,EAG6C,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAyBxD,OAAO,CAAA;AAAA,OAAA,CAAA;AAEf;AAwBO,SAAS,YAAA,CAAa;AAAA,EAC3B,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,MAAA,GAAeyF,kBAAA,CAAA,OAAA;AAAA,IACnB,MAAM,kBAAA,CAAmB,OAAA,IAAW,EAAE,CAAA;AAAA,IACtC,CAAC,OAAO;AAAA,GACV;AAKA,EAAA,MAAM,WAAA,GAAc,EAAE,GAAA,EAAK,UAAA,EAAW;AAEtC,EAAA,uBACEzF,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,OAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,cAAA,EAAe,aAAA;AAAA,MACf,KAAA,EAAO,kBAAA;AAAA,MACP,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAChD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;;ACvHpB,IAAM,iBAAA,GAAsC;AAAA,EACjD,IAAA,EAAM,YAAA;AAAA,EACN,QAAA,EAAU,gBAAA;AAAA,EACV,KAAA,EAAO,aAAA;AAAA,EACP,SAAA,EAAW,iBAAA;AAAA,EACX,GAAA,EAAK,WAAA;AAAA,EACL,IAAA,EAAM;AACR;AAMO,SAAS,eACd,aAAA,EACkB;AAClB,EAAA,IAAI,CAAC,eAAe,OAAO,iBAAA;AAC3B,EAAA,OAAO,EAAE,GAAG,iBAAA,EAAmB,GAAG,aAAA,EAAc;AAClD;AAMO,SAAS,eAAA,CACd,UACA,WAAA,EACc;AACd,EAAA,OAAO,QAAA,CAAS,WAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,IAAK,iBAAA;AAC3D;ACnCA,SAAS,iBAAA,CAAkB,EAAE,OAAA,EAAQ,EAAwB;AAC3D,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFACZ,QAAA,EAAA,OAAA,EACH,CAAA;AAEJ;AAEA,SAAS,mBAAA,GAAsB;AAC7B,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EAAgF,CAAA;AAAA,oBAC/FA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAAe;AAAA,GAAA,EAC9D,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAM,EAA6B;AAC9D,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACb,QAAA,kBAAAgB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,EAAA;AAAA,oBAAAhB,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAA,EAAwC,gBAAM,OAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,CAAM,2BACLA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACT,mFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACD,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAyBO,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,GAAA,GAAM,IAAA;AAAA,EACN,QAAA;AAAA,EACA,WAAA,EAAa,mBAAA;AAAA,EACb,SAAA,EAAW,aAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,KAAA,GAAQ,IAAA;AAAA,EACR,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA,GAAe,uBAAA;AAAA,EACf,cAAA,EAAgB,cAAA;AAAA,EAChB,SAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,cAAA,CAAe;AAAA,IAC5C,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,QAAA,GAAiB0F,kBAAA,CAAA,OAAA;AAAA,IACrB,MAAM,eAAe,aAAa,CAAA;AAAA,IAClC,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,QAAA,GAAiBA,kBAAA,CAAA,OAAA;AAAA,IACrB,MAAM,eAAA,CAAgB,QAAA,EAAU,YAAY,CAAA;AAAA,IAC5C,CAAC,UAAU,YAAY;AAAA,GACzB;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE1F,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EACnD,QAAA,EAAA,gBAAA,oBAAoBA,cAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAC5C,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA,EACnD,QAAA,EAAA,cAAA,mBACCA,cAAAA,CAAC,kBAAe,KAAA,EAAc,CAAA,mBAE9BA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAc,CAAA,EAErC,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAA,CAAK,OAAA,IAAW,IAAA,IAAQ,OAAA,KAAY,EAAA,KAAO,OAAO,IAAA,EAAM;AACtD,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,wBAAA,EAA0B,SAAS,CAAA,EACnD,QAAA,EAAA,cAAA,oBAAkBA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAS,cAAc,CAAA,EAC/D,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,wBAAA,EAA0B,SAAS,GACpD,QAAA,kBAAAA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAK,GAAA,IAAO,IAAA;AAAA,MACZ,QAAA;AAAA,MACA,WAAA,EAAa,YAAA;AAAA,MACb,SAAA,EAAW,iBAAA;AAAA,MACX;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;ACxIhB,IAAM,aAAA,GAAgB2F,kBAAAA;AAAA,EAC3B,CAAC,EAAE,KAAA,EAAO,IAAA,EAAM,OAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACjD,IAAA,MAAM,MAAMC,aAAA,EAAM;AAClB,IAAA,MAAM,CAAA,GAAI,QAAQ,KAAA,IAAS,EAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,IAAU,EAAA;AAC5B,IAAA,MAAM,cAAc,CAAC,KAAA;AAErB,IAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KACZ,WAAA,GAAc,QAAQ,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA,GAAM,KAAA;AAEzC,IAAA,uBACE5E,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAM,4BAAA;AAAA,QACL,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,8FAAA;AAAA,cACF,IAAA,EAAM,KAAK,CAAC;AAAA;AAAA,WACd;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,yEAAA;AAAA,cACF,IAAA,EAAM,KAAK,CAAC;AAAA;AAAA,WACd;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,qIAAA;AAAA,cACF,IAAA,EAAM,KAAK,CAAC;AAAA;AAAA,WACd;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,0SAAA;AAAA,cACF,IAAA,EAAM,KAAK,CAAC;AAAA;AAAA,WACd;AAAA,UACC,WAAA,oBACCgB,eAAAA,CAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,UAAS,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,QAAA,EAAS,eAAc,gBAAA,EAC5F,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,aAAA,EACvC,CAAA;AAAA,4BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,UAAA,EAAW,EAAA,EAAG,WAAU,EAAA,EAAG,UAAA,EAAW,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EACnG,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,8BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,aAAA,EACvC,CAAA;AAAA,4BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,QAAA,EAAS,EAAA,EAAG,UAAS,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,QAAA,EAAS,eAAc,gBAAA,EAC3F,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,8BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,aAAA,EACvC,CAAA;AAAA,4BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,UAAS,EAAA,EAAG,QAAA,EAAS,EAAA,EAAG,QAAA,EAAS,eAAc,gBAAA,EAC5F,QAAA,EAAA;AAAA,8BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,8BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAU,SAAA,EAAU,CAAA;AAAA,8BACzCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,aAAA,EACvC;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AC3ErB,IAAM,qBAAA,GAAwB2F,kBAAAA,CAGnC,CAAC,EAAE,KAAA,EAAO,SAAA,GAAY,cAAA,EAAgB,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC/E,EAAA,MAAM,MAAMC,aAAAA,EAAM;AAClB,EAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,IAAU,EAAA;AAC5B,EAAA,MAAM,CAAA,GAAI,KAAA,KAAU,OAAO,CAAA,KAAM,QAAA,GAAW,KAAK,KAAA,CAAO,CAAA,IAAgB,GAAA,GAAM,EAAA,CAAG,CAAA,GAAI,GAAA,CAAA;AACrF,EAAA,MAAM,cAAc,CAAC,KAAA;AAErB,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAChB,WAAA,GAAc,QAAQ,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA,GAAM,KAAA;AAEzC,EAAA,uBACE5E,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,CAAA;AAAA,MACR,OAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACL,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAhB,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qGAAoG,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBAC/HA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qKAAoK,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBAC/LA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oRAAmR,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBAC9SA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iVAAgV,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBAC3WA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+0CAA80C,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBACz2CA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oNAAmN,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,wBAG9OA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,omBAAA,EAAqmB,MAAM,SAAA,EAAW,CAAA;AAAA,wBAC9nBA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8cAAA,EAA+c,MAAM,SAAA,EAAW,CAAA;AAAA,wBACxeA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uPAAA,EAAwP,MAAM,SAAA,EAAW,CAAA;AAAA,wBACjRA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gpBAAA,EAAipB,MAAM,SAAA,EAAW,CAAA;AAAA,wBAC1qBA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mDAAA,EAAoD,MAAM,SAAA,EAAW,CAAA;AAAA,wBAC7EA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oaAAA,EAAqa,MAAM,SAAA,EAAW,CAAA;AAAA,wBAC9bA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iqCAAA,EAAkqC,MAAM,SAAA,EAAW,CAAA;AAAA,wBAC3rCA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2DAAA,EAA4D,MAAM,SAAA,EAAW,CAAA;AAAA,wBACrFA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2yBAAA,EAA4yB,MAAM,SAAA,EAAW,CAAA;AAAA,QAEp0B,WAAA,oBACCgB,eAAAA,CAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,WAAU,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EACjG,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC,CAAA;AAAA,0BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,UAAS,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,QAAA,EAAS,eAAc,gBAAA,EAC/F,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC,CAAA;AAAA,0BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,UAAA,EAAW,EAAA,EAAG,WAAU,EAAA,EAAG,UAAA,EAAW,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EACnG,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC,CAAA;AAAA,0BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,WAAU,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EACjG,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC,CAAA;AAAA,0BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,WAAU,EAAA,EAAG,QAAA,EAAS,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EAChG,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC,CAAA;AAAA,0BACAgB,eAAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,CAAA,EAAG,GAAG,CAAA,GAAA,CAAA,EAAO,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,WAAU,EAAA,EAAG,SAAA,EAAU,EAAA,EAAG,SAAA,EAAU,eAAc,gBAAA,EACjG,QAAA,EAAA;AAAA,4BAAAhB,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC1BA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,4BACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,GAAA,EAAI,WAAU,SAAA,EAAU;AAAA,WAAA,EACvC;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAC;AAED,qBAAA,CAAsB,WAAA,GAAc,uBAAA;ACnG7B,IAAM,cAAA,GAAiB2F,kBAAAA;AAAA,EAC5B,CAAC,EAAE,KAAA,GAAQ,cAAA,EAAgB,IAAA,EAAM,OAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAClE,IAAA,MAAM,CAAA,GAAI,QAAQ,KAAA,IAAS,EAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,IAAU,EAAA;AAE5B,IAAA,uBACE3E,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAM,4BAAA;AAAA,QACL,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAhB,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,mQAAA;AAAA,cACF,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,62BAAA;AAAA,cACF,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,oRAAA;AAAA,cACF,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,uRAAA;AAAA,cACF,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,CAAA,EAAE,+QAAA;AAAA,cACF,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,cAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wDAAA;AAAA,cACV,EAAA,EAAG,OAAA;AAAA,cACH,EAAA,EAAG,MAAA;AAAA,cACH,EAAA,EAAG,MAAA;AAAA,cACH,EAAA,EAAG,MAAA;AAAA,cACH,IAAA,EAAM;AAAA;AAAA;AACR;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;AChDtB,IAAM,YAAA,GAAe2F,kBAAAA;AAAA,EAC1B,CAAC,EAAE,KAAA,GAAQ,cAAA,EAAgB,IAAA,EAAM,OAAO,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAClE,IAAA,MAAM,CAAA,GAAI,QAAQ,KAAA,IAAS,EAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,IAAU,EAAA;AAE5B,IAAA,uBACE3F,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAM,4BAAA;AAAA,QACL,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,k2FAAA;AAAA,YACF,IAAA,EAAM;AAAA;AAAA;AACR;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA","file":"index.cjs","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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-muted text-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:text-muted-foreground\",\n primary:\n \"bg-accent text-accent-foreground shadow hover:shadow-md disabled:opacity-50\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 hover:shadow-md disabled:opacity-50\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:bg-muted/20 disabled:text-muted-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80 disabled:opacity-50\",\n ghost:\n \"text-foreground hover:bg-accent hover:text-accent-foreground disabled:text-muted-foreground disabled:bg-muted/30 disabled:opacity-70\",\n link: \"text-primary underline-offset-4 hover:underline disabled:opacity-50 disabled:text-muted-foreground\",\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 hover:border-input-hover focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input 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 hover:border-input-hover focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input 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 disabled:bg-muted\",\n // Unchecked state\n \"bg-toggle-track\",\n // Hover\n \"hover:bg-toggle-track/80 data-[state=checked]:hover:bg-primary/80\",\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-toggle-track-foreground 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 hover:border-input-hover focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input [&>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 border-popover-border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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-start 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 mt-0.5\">\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\nexport interface SelectItemDescriptionProps\n extends React.HTMLAttributes<HTMLSpanElement> {}\n\nconst SelectItemDescription = React.forwardRef<\n HTMLSpanElement,\n SelectItemDescriptionProps\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"text-xs text-muted-foreground\", className)}\n {...props}\n />\n));\nSelectItemDescription.displayName = \"SelectItemDescription\";\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 SelectItemDescription,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\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\nconst tabsListVariants = cva(\n \"inline-flex h-10 items-center justify-start bg-transparent\",\n {\n variants: {\n variant: {\n default: \"border-b border-border\",\n pill: \"gap-1 rounded-lg bg-muted p-1\",\n unstyled: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst tabsTriggerVariants = cva(\n [\n \"inline-flex items-center justify-center whitespace-nowrap\",\n \"px-4 py-2.5 text-sm font-medium\",\n \"transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n ],\n {\n variants: {\n variant: {\n default: [\n \"-mb-px\",\n \"border-transparent text-muted-foreground\",\n \"hover:text-foreground hover:border-muted-foreground/50\",\n \"data-[state=active]:border-foreground data-[state=active]:text-foreground\",\n ],\n pill: [\n \"rounded-md\",\n \"text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n ],\n unstyled: [\n \"text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:text-foreground\",\n ],\n },\n indicatorSize: {\n sm: \"border-b\",\n default: \"border-b-2\",\n lg: \"border-b-[3px]\",\n },\n },\n compoundVariants: [\n { variant: \"pill\", indicatorSize: \"sm\", className: \"border-b-0\" },\n { variant: \"pill\", indicatorSize: \"default\", className: \"border-b-0\" },\n { variant: \"pill\", indicatorSize: \"lg\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"sm\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"default\", className: \"border-b-0\" },\n { variant: \"unstyled\", indicatorSize: \"lg\", className: \"border-b-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n indicatorSize: \"default\",\n },\n }\n);\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof tabsListVariants> {}\n\n/**\n * TabsList\n *\n * Container for tab triggers. Provides the tab header bar.\n * Supports variants: default, pill, unstyled\n */\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nexport interface TabsTriggerProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {}\n\n/**\n * TabsTrigger\n *\n * Individual tab button that activates its associated content.\n * Supports variants: default, pill, unstyled\n * Supports indicatorSize: sm, default, lg (only applies to default variant)\n */\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, variant, indicatorSize, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n tabsTriggerVariants({ variant, indicatorSize }),\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-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 {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\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-popover-border\",\n // Typography\n \"text-xs font-medium\",\n // Shadow\n \"shadow-lg\",\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-auto max-w-[90vw] rounded-md border border-popover-border bg-popover p-4 text-popover-foreground shadow-lg 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-popover-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] max-w-[90vw] overflow-hidden rounded-md border border-popover-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 </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 { 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","/**\n * DataTable Component\n *\n * A data-driven table that sits between the simple Table primitives and the\n * full DataGrid. Supports opt-in sorting, search, pagination, row selection,\n * and pinned rows -- all composed from existing core primitives.\n */\n\nimport * as React from \"react\";\nimport {\n ArrowUp,\n ArrowDown,\n ArrowUpDown,\n Search,\n ChevronsLeft,\n ChevronLeft,\n ChevronRight,\n ChevronsRight,\n} from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport {\n Table,\n TableHeader,\n TableBody,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./table\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Checkbox } from \"./checkbox\";\nimport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n} from \"./select\";\nimport { LoadingSpinner } from \"./loading-spinner\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Column definition for the DataTable.\n */\nexport interface DataTableColumn<T> {\n /** Unique key identifying this column */\n key: string;\n /** Header label (string or ReactNode) */\n header: string | React.ReactNode;\n /**\n * Custom cell renderer. When omitted the table renders\n * `String(accessor(row))` or `String(row[key])`.\n */\n cell?: (row: T, rowIndex: number) => React.ReactNode;\n /** Accessor function to pull the raw value from a row (used for sorting & default rendering) */\n accessor?: (row: T) => string | number | boolean | null | undefined;\n /** Whether this column is sortable (default false) */\n sortable?: boolean;\n /** Custom sort comparator. Receives two rows, return negative / 0 / positive. */\n sortFn?: (a: T, b: T) => number;\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n /** Extra class name applied to every `<td>` in this column */\n className?: string;\n /** Extra class name applied to the `<th>` for this column */\n headerClassName?: string;\n /** Tailwind width class or inline width, e.g. \"w-[100px]\" */\n width?: string;\n}\n\n/** Sort descriptor */\nexport interface DataTableSort {\n /** Column key */\n key: string;\n /** Direction */\n direction: \"asc\" | \"desc\";\n}\n\n/**\n * Props for the DataTable component.\n */\nexport interface DataTableProps<T> {\n // ── Data ─────────────────────────────────────────────────────────────────\n /** Array of row data */\n data: T[];\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Return a stable unique key for each row */\n getRowKey: (row: T, index: number) => string;\n\n // ── Sorting ──────────────────────────────────────────────────────────────\n /** Default sort (uncontrolled) */\n defaultSort?: DataTableSort;\n /** Controlled sort */\n sort?: DataTableSort | null;\n /** Called when sort changes (controlled) */\n onSortChange?: (sort: DataTableSort | null) => void;\n\n // ── Search ───────────────────────────────────────────────────────────────\n /**\n * Enable the search bar. Pass `true` for defaults or a config object.\n * Search is always controlled by the consumer via `searchValue` /\n * `onSearchChange`, or managed internally when omitted.\n */\n searchable?: boolean;\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Controlled search value */\n searchValue?: string;\n /** Called when the search value changes */\n onSearchChange?: (value: string) => void;\n /** Custom search predicate. When omitted, a case-insensitive substring\n * match across all columns (using accessor / row[key]) is used. */\n searchFn?: (row: T, query: string) => boolean;\n\n // ── Pagination ───────────────────────────────────────────────────────────\n /** Pass a number to enable pagination with that default page size */\n pageSize?: number;\n /** Options shown in the rows-per-page selector */\n pageSizeOptions?: number[];\n /** Controlled current page (0-indexed) */\n currentPage?: number;\n /** Called when page changes */\n onPageChange?: (page: number) => void;\n /** Called when page size changes */\n onPageSizeChange?: (size: number) => void;\n\n // ── Selection ────────────────────────────────────────────────────────────\n /** Enable selection mode: \"checkbox\" adds a checkbox column, \"highlight\" selects on row click */\n selectable?: \"checkbox\" | \"highlight\";\n /** Currently selected row keys */\n selectedRows?: string[];\n /** Called when selection changes */\n onSelectedRowsChange?: (keys: string[]) => void;\n\n // ── Row interactions ─────────────────────────────────────────────────────\n /** Called when a row is clicked (independent of selection) */\n onRowClick?: (row: T, index: number) => void;\n /** Dynamic row class name */\n rowClassName?: (row: T, index: number) => string;\n\n // ── Pinned rows ──────────────────────────────────────────────────────────\n /** Row keys that should be pinned to the top */\n pinnedRows?: string[];\n\n // ── Slots ────────────────────────────────────────────────────────────────\n /** Custom toolbar rendered between search bar and table */\n toolbar?: React.ReactNode;\n /** Custom empty state */\n emptyState?: React.ReactNode;\n /** Table caption */\n caption?: string;\n\n // ── Loading ──────────────────────────────────────────────────────────────\n /** Show loading state */\n loading?: boolean;\n\n // ── Styling ──────────────────────────────────────────────────────────────\n /** Class name for the outermost wrapper */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getCellRawValue<T>(row: T, col: DataTableColumn<T>): string | number | boolean | null | undefined {\n if (col.accessor) return col.accessor(row);\n return (row as Record<string, unknown>)[col.key] as string | number | boolean | null | undefined;\n}\n\nfunction defaultSearch<T>(row: T, query: string, columns: DataTableColumn<T>[]): boolean {\n const lowerQuery = query.toLowerCase();\n return columns.some((col) => {\n const val = getCellRawValue(row, col);\n if (val == null) return false;\n return String(val).toLowerCase().includes(lowerQuery);\n });\n}\n\nfunction defaultSortComparator<T>(\n a: T,\n b: T,\n col: DataTableColumn<T>,\n direction: \"asc\" | \"desc\",\n): number {\n if (col.sortFn) {\n const result = col.sortFn(a, b);\n return direction === \"asc\" ? result : -result;\n }\n const aVal = getCellRawValue(a, col);\n const bVal = getCellRawValue(b, col);\n const aStr = aVal == null ? \"\" : String(aVal);\n const bStr = bVal == null ? \"\" : String(bVal);\n\n // Try numeric comparison first\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n if (!isNaN(aNum) && !isNaN(bNum) && aStr !== \"\" && bStr !== \"\") {\n return direction === \"asc\" ? aNum - bNum : bNum - aNum;\n }\n\n const cmp = aStr.localeCompare(bStr);\n return direction === \"asc\" ? cmp : -cmp;\n}\n\n// ---------------------------------------------------------------------------\n// DataTable\n// ---------------------------------------------------------------------------\n\nexport function DataTable<T>({\n data,\n columns,\n getRowKey,\n\n // Sorting\n defaultSort,\n sort: controlledSort,\n onSortChange,\n\n // Search\n searchable = false,\n searchPlaceholder = \"Search...\",\n searchValue: controlledSearchValue,\n onSearchChange,\n searchFn,\n\n // Pagination\n pageSize: defaultPageSize,\n pageSizeOptions = [10, 15, 25, 50, 100],\n currentPage: controlledPage,\n onPageChange,\n onPageSizeChange,\n\n // Selection\n selectable,\n selectedRows: controlledSelectedRows,\n onSelectedRowsChange,\n\n // Row interaction\n onRowClick,\n rowClassName,\n\n // Pinned rows\n pinnedRows = [],\n\n // Slots\n toolbar,\n emptyState,\n caption,\n\n // Loading\n loading = false,\n\n // Styling\n className,\n}: DataTableProps<T>) {\n // ── Internal state (uncontrolled defaults) ───────────────────────────────\n\n const [internalSort, setInternalSort] = React.useState<DataTableSort | null>(\n defaultSort ?? null,\n );\n const [internalSearchValue, setInternalSearchValue] = React.useState(\"\");\n const [internalPage, setInternalPage] = React.useState(0);\n const [internalPageSize, setInternalPageSize] = React.useState(\n defaultPageSize ?? 10,\n );\n const [internalSelectedRows, setInternalSelectedRows] = React.useState<string[]>([]);\n\n // Resolve controlled vs uncontrolled\n const sort = controlledSort !== undefined ? controlledSort : internalSort;\n const searchQuery =\n controlledSearchValue !== undefined ? controlledSearchValue : internalSearchValue;\n const page = controlledPage !== undefined ? controlledPage : internalPage;\n const pageSize = defaultPageSize != null ? (internalPageSize ?? defaultPageSize) : undefined;\n const selectedRowKeys =\n controlledSelectedRows !== undefined ? controlledSelectedRows : internalSelectedRows;\n\n const handleSortChange = React.useCallback(\n (next: DataTableSort | null) => {\n if (onSortChange) onSortChange(next);\n else setInternalSort(next);\n },\n [onSortChange],\n );\n\n const handleSearchChange = React.useCallback(\n (value: string) => {\n if (onSearchChange) onSearchChange(value);\n else setInternalSearchValue(value);\n // Reset to first page on search\n if (onPageChange) onPageChange(0);\n else setInternalPage(0);\n },\n [onSearchChange, onPageChange],\n );\n\n const handlePageChange = React.useCallback(\n (p: number) => {\n if (onPageChange) onPageChange(p);\n else setInternalPage(p);\n },\n [onPageChange],\n );\n\n const handlePageSizeChange = React.useCallback(\n (size: number) => {\n if (onPageSizeChange) onPageSizeChange(size);\n else setInternalPageSize(size);\n // Reset to first page\n if (onPageChange) onPageChange(0);\n else setInternalPage(0);\n },\n [onPageSizeChange, onPageChange],\n );\n\n const handleSelectionChange = React.useCallback(\n (keys: string[]) => {\n if (onSelectedRowsChange) onSelectedRowsChange(keys);\n else setInternalSelectedRows(keys);\n },\n [onSelectedRowsChange],\n );\n\n // ── Header sort click ────────────────────────────────────────────────────\n\n const handleHeaderClick = React.useCallback(\n (colKey: string) => {\n if (sort?.key === colKey) {\n if (sort.direction === \"asc\") {\n handleSortChange({ key: colKey, direction: \"desc\" });\n } else {\n handleSortChange(null);\n }\n } else {\n handleSortChange({ key: colKey, direction: \"asc\" });\n }\n },\n [sort, handleSortChange],\n );\n\n // ── Data pipeline: search → sort → split pinned / unpinned → paginate ──\n\n // 1. Search\n const searchedData = React.useMemo(() => {\n if (!searchable || !searchQuery) return data;\n if (searchFn) return data.filter((row) => searchFn(row, searchQuery));\n return data.filter((row) => defaultSearch(row, searchQuery, columns));\n }, [data, searchable, searchQuery, searchFn, columns]);\n\n // 2. Sort\n const sortedData = React.useMemo(() => {\n if (!sort) return searchedData;\n const col = columns.find((c) => c.key === sort.key);\n if (!col) return searchedData;\n return [...searchedData].sort((a, b) =>\n defaultSortComparator(a, b, col, sort.direction),\n );\n }, [searchedData, sort, columns]);\n\n // 3. Split pinned vs unpinned\n const pinnedSet = React.useMemo(() => new Set(pinnedRows), [pinnedRows]);\n\n const { pinnedData, unpinnedData } = React.useMemo(() => {\n if (pinnedSet.size === 0) return { pinnedData: [] as T[], unpinnedData: sortedData };\n const pinned: T[] = [];\n const unpinned: T[] = [];\n // Collect pinned rows from the full dataset in pinnedRows order\n const dataByKey = new Map<string, T>();\n data.forEach((row, i) => {\n dataByKey.set(getRowKey(row, i), row);\n });\n pinnedRows.forEach((key) => {\n const row = dataByKey.get(key);\n if (row) pinned.push(row);\n });\n // Unpinned: from sorted/searched data, excluding pinned keys\n sortedData.forEach((row, i) => {\n const key = getRowKey(row, i);\n // Need original index from data for stable keys\n if (!pinnedSet.has(key)) unpinned.push(row);\n });\n return { pinnedData: pinned, unpinnedData: unpinned };\n }, [sortedData, pinnedSet, pinnedRows, data, getRowKey]);\n\n // 4. Pagination (applied to unpinned data only)\n const totalUnpinned = unpinnedData.length;\n const totalPages = pageSize ? Math.max(1, Math.ceil(totalUnpinned / pageSize)) : 1;\n const paginatedData = React.useMemo(() => {\n if (!pageSize) return unpinnedData;\n const start = page * pageSize;\n return unpinnedData.slice(start, start + pageSize);\n }, [unpinnedData, pageSize, page]);\n\n // All visible rows (pinned + current page of unpinned)\n const visibleRows = React.useMemo(\n () => [...pinnedData, ...paginatedData],\n [pinnedData, paginatedData],\n );\n\n // Total items count (for display in pagination)\n const totalItems = searchedData.length;\n\n // ── Selection helpers ────────────────────────────────────────────────────\n\n const visibleKeys = React.useMemo(\n () => visibleRows.map((row, i) => getRowKey(row, i)),\n [visibleRows, getRowKey],\n );\n\n const allVisibleSelected =\n visibleKeys.length > 0 && visibleKeys.every((k) => selectedRowKeys.includes(k));\n const someVisibleSelected =\n !allVisibleSelected && visibleKeys.some((k) => selectedRowKeys.includes(k));\n\n const toggleRowSelection = React.useCallback(\n (key: string) => {\n const isSelected = selectedRowKeys.includes(key);\n const next = isSelected\n ? selectedRowKeys.filter((k) => k !== key)\n : [...selectedRowKeys, key];\n handleSelectionChange(next);\n },\n [selectedRowKeys, handleSelectionChange],\n );\n\n const toggleAllVisible = React.useCallback(() => {\n if (allVisibleSelected) {\n // Deselect all visible\n const visibleSet = new Set(visibleKeys);\n handleSelectionChange(selectedRowKeys.filter((k) => !visibleSet.has(k)));\n } else {\n // Select all visible\n const merged = new Set([...selectedRowKeys, ...visibleKeys]);\n handleSelectionChange(Array.from(merged));\n }\n }, [allVisibleSelected, visibleKeys, selectedRowKeys, handleSelectionChange]);\n\n // ── Row click handler ────────────────────────────────────────────────────\n\n const handleRowClick = React.useCallback(\n (row: T, index: number, key: string) => {\n if (selectable === \"highlight\") {\n toggleRowSelection(key);\n }\n onRowClick?.(row, index);\n },\n [selectable, toggleRowSelection, onRowClick],\n );\n\n // ── Render helpers ───────────────────────────────────────────────────────\n\n const renderCellContent = (row: T, col: DataTableColumn<T>, rowIndex: number) => {\n if (col.cell) return col.cell(row, rowIndex);\n const val = getCellRawValue(row, col);\n if (val == null) return <span className=\"text-muted-foreground italic\">--</span>;\n return String(val);\n };\n\n const alignClass = (align?: \"left\" | \"center\" | \"right\") => {\n if (align === \"center\") return \"text-center\";\n if (align === \"right\") return \"text-right\";\n return \"text-left\";\n };\n\n // ── Loading state ────────────────────────────────────────────────────────\n\n if (loading) {\n return (\n <div className={cn(\"flex items-center justify-center py-16\", className)}>\n <LoadingSpinner label=\"Loading\" showDots />\n </div>\n );\n }\n\n // ── Render ───────────────────────────────────────────────────────────────\n\n const showSearch = searchable;\n const showPagination = pageSize != null;\n const showCheckboxColumn = selectable === \"checkbox\";\n\n return (\n <div className={cn(\"flex flex-col w-full\", className)}>\n {/* Toolbar area: search + custom toolbar */}\n {(showSearch || toolbar) && (\n <div className=\"flex items-center gap-3 pb-4\">\n {showSearch && (\n <div className=\"relative flex-1 max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n )}\n {toolbar && <div className=\"flex items-center gap-2\">{toolbar}</div>}\n </div>\n )}\n\n {/* Table */}\n <Table>\n {caption && <TableCaption>{caption}</TableCaption>}\n\n <TableHeader>\n <TableRow>\n {showCheckboxColumn && (\n <TableHead className=\"w-[40px]\">\n <Checkbox\n checked={allVisibleSelected ? true : someVisibleSelected ? \"indeterminate\" : false}\n onCheckedChange={() => toggleAllVisible()}\n aria-label=\"Select all\"\n />\n </TableHead>\n )}\n {columns.map((col) => {\n const isSorted = sort?.key === col.key;\n const sortDir = isSorted ? sort!.direction : null;\n\n return (\n <TableHead\n key={col.key}\n className={cn(\n col.width,\n col.headerClassName,\n alignClass(col.align),\n col.sortable && \"cursor-pointer select-none\",\n )}\n onClick={col.sortable ? () => handleHeaderClick(col.key) : undefined}\n >\n <div\n className={cn(\n \"flex items-center gap-1\",\n col.align === \"center\" && \"justify-center\",\n col.align === \"right\" && \"justify-end\",\n )}\n >\n <span>{col.header}</span>\n {col.sortable && (\n <span className=\"inline-flex ml-1\">\n {sortDir === \"asc\" ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === \"desc\" ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowUpDown className=\"h-3.5 w-3.5 opacity-40\" />\n )}\n </span>\n )}\n </div>\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n\n {/* Pinned rows */}\n {pinnedData.length > 0 && (\n <TableBody className=\"bg-muted/30 border-b-2 border-border\">\n {pinnedData.map((row, i) => {\n const key = getRowKey(row, i);\n const isSelected = selectedRowKeys.includes(key);\n return (\n <TableRow\n key={key}\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n (onRowClick || selectable === \"highlight\") && \"cursor-pointer\",\n rowClassName?.(row, i),\n )}\n onClick={() => handleRowClick(row, i, key)}\n >\n {showCheckboxColumn && (\n <TableCell className=\"w-[40px]\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRowSelection(key)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(alignClass(col.align), col.className)}\n >\n {renderCellContent(row, col, i)}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n </TableBody>\n )}\n\n {/* Main body */}\n <TableBody>\n {paginatedData.length === 0 && pinnedData.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (showCheckboxColumn ? 1 : 0)}\n className=\"h-24 text-center\"\n >\n {emptyState ?? (\n <span className=\"text-muted-foreground\">No results.</span>\n )}\n </TableCell>\n </TableRow>\n ) : (\n paginatedData.map((row, i) => {\n // Compute a stable key – need original data index for getRowKey\n const globalIndex = pageSize ? page * pageSize + i : i;\n const key = getRowKey(row, globalIndex);\n const isSelected = selectedRowKeys.includes(key);\n return (\n <TableRow\n key={key}\n data-state={isSelected ? \"selected\" : undefined}\n className={cn(\n (onRowClick || selectable === \"highlight\") && \"cursor-pointer\",\n rowClassName?.(row, globalIndex),\n )}\n onClick={() => handleRowClick(row, globalIndex, key)}\n >\n {showCheckboxColumn && (\n <TableCell className=\"w-[40px]\">\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleRowSelection(key)}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Select row\"\n />\n </TableCell>\n )}\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(alignClass(col.align), col.className)}\n >\n {renderCellContent(row, col, globalIndex)}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n\n {/* Pagination footer */}\n {showPagination && (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(val) => handlePageSizeChange(Number(val))}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={String(pageSize)} />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((opt) => (\n <SelectItem key={opt} value={String(opt)}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-muted-foreground\">\n Page {page + 1} of {totalPages}\n {` (${totalItems} total)`}\n </span>\n\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(0)}\n disabled={page === 0}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(page - 1)}\n disabled={page === 0}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(page + 1)}\n disabled={page >= totalPages - 1}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => handlePageChange(totalPages - 1)}\n disabled={page >= totalPages - 1}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\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 { 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-2 relative px-8\",\n month_caption: \"flex justify-center pt-1 items-center h-7\",\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 top-1/2 -translate-y-1/2 h-6 w-6 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"absolute right-1 top-1/2 -translate-y-1/2 h-6 w-6 bg-transparent p-0 opacity-50 hover:opacity-100 z-10\"\n ),\n month_grid: \"border-collapse mx-auto\",\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\",\n \"[&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md\",\n // Override the button's ghost text color when day is selected (data-selected is on the td, not the button)\n \"[&[data-selected]>button]:bg-primary [&[data-selected]>button]:text-primary-foreground\",\n \"[&[data-selected]>button]:hover:bg-primary/90 [&[data-selected]>button]:hover:text-primary-foreground\",\n \"[&[data-selected]>button]:focus:bg-primary [&[data-selected]>button]:focus:text-primary-foreground\",\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\"\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-3.5 w-3.5\" />;\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\">\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 \"hover:border-input-hover\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed hover:border-input\",\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 /** Whether fillWidth mode is active */\n fillWidth?: 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 fillWidth,\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 border-r border-border last:border-r-0\",\n !fillWidth && \"flex-shrink-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 bg-background focus:ring-0 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 bg-background focus:ring-0 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 bg-background focus:ring-0 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, type MutableRefObject } 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 /** Ref that DataGrid should populate with the current processedData array */\n processedDataRef: MutableRefObject<unknown[]>;\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 // Ref populated by DataGrid with the current sorted/filtered data.\n // Editing callbacks read from this so they resolve the correct row after sort/filter.\n const processedDataRef = useRef<unknown[]>([]);\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 // Use processedData (sorted/filtered) so the rowIndex maps to the\n // correct visual row, falling back to the raw data array.\n const resolvedData = processedDataRef.current.length > 0\n ? processedDataRef.current\n : data;\n const row = resolvedData[rowIndex] as T | undefined;\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 resolvedData = processedDataRef.current.length > 0\n ? processedDataRef.current\n : data;\n const row = resolvedData[rowIndex] as T;\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 processedDataRef,\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 /** Whether fillWidth mode is active */\n fillWidth?: boolean;\n /** Measured container width for fillWidth redistribution */\n containerWidth?: number;\n /** Effective column widths (after fillWidth scaling) */\n effectiveColumnWidths?: Record<string, number>;\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 fillWidth,\n containerWidth,\n effectiveColumnWidths,\n } = options;\n\n const [resizingColumn, setResizingColumn] = useState<string | null>(null);\n const startXRef = useRef(0);\n const startWidthRef = useRef(0);\n const startEffectiveWidthsRef = useRef<Record<string, number>>({});\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 if (fillWidth && containerWidth) {\n const otherCols = columns.filter(c => c.key !== resizingColumn);\n const startEffective = startEffectiveWidthsRef.current;\n const otherTotal = otherCols.reduce((s, c) => s + (startEffective[c.key] || 0), 0);\n const remaining = containerWidth - newWidth;\n\n for (const col of otherCols) {\n const proportion = (startEffective[col.key] || 0) / otherTotal;\n const adjusted = clampWidth(col.key, Math.floor(remaining * proportion));\n onColumnResize(col.key, adjusted);\n }\n }\n\n onColumnResize(resizingColumn, newWidth);\n },\n [resizingColumn, clampWidth, onColumnResize, fillWidth, containerWidth, columns]\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 if (fillWidth && effectiveColumnWidths) {\n startEffectiveWidthsRef.current = { ...effectiveColumnWidths };\n }\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 fillWidth,\n effectiveColumnWidths,\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 let comparison = 0;\n\n // If column specifies a dataType, coerce values accordingly\n if (column.dataType === \"number\") {\n const aNum = Number(aVal);\n const bNum = Number(bVal);\n if (!isNaN(aNum) && !isNaN(bNum)) {\n comparison = aNum - bNum;\n } else {\n comparison = String(aVal).localeCompare(String(bVal));\n }\n } else if (column.dataType === \"date\") {\n const aDate = aVal instanceof Date ? aVal : new Date(aVal as string | number);\n const bDate = bVal instanceof Date ? bVal : new Date(bVal as string | number);\n const aTime = isNaN(aDate.getTime()) ? 0 : aDate.getTime();\n const bTime = isNaN(bDate.getTime()) ? 0 : bDate.getTime();\n comparison = aTime - bTime;\n } else if (column.dataType === \"boolean\") {\n const aBool = aVal === true || aVal === \"true\" || aVal === 1;\n const bBool = bVal === true || bVal === \"true\" || bVal === 1;\n comparison = aBool === bBool ? 0 : aBool ? 1 : -1;\n } else if (column.dataType === \"string\") {\n comparison = String(aVal).localeCompare(String(bVal));\n } else {\n // No dataType specified -- auto-detect from runtime types\n 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 // Try numeric parse (handles string-encoded numbers from SQL results etc.)\n const aStr = String(aVal);\n const bStr = String(bVal);\n const aNum = Number(aStr);\n const bNum = Number(bStr);\n if (!isNaN(aNum) && !isNaN(bNum) && aStr !== \"\" && bStr !== \"\") {\n comparison = aNum - bNum;\n } else {\n comparison = aStr.localeCompare(bStr);\n }\n }\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 fillWidth,\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 // Measure container width for fillWidth mode\n const [containerWidth, setContainerWidth] = React.useState(0);\n const fillWidthObserverRef = React.useRef<ResizeObserver | null>(null);\n\n const parentCallbackRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n fillWidthObserverRef.current?.disconnect();\n fillWidthObserverRef.current = null;\n\n (parentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\n if (!fillWidth || !node) return;\n\n const observer = new ResizeObserver((entries) => {\n const w = entries[0]?.contentRect.width;\n if (w && w > 0) setContainerWidth(w);\n });\n observer.observe(node);\n fillWidthObserverRef.current = observer;\n },\n [fillWidth],\n );\n\n React.useEffect(() => {\n return () => fillWidthObserverRef.current?.disconnect();\n }, []);\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, processedDataRef, 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 // Keep the state hook's ref in sync so editing resolves the correct row\n processedDataRef.current = processedData;\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 and effective column widths (with fillWidth scaling)\n const { tableWidth, effectiveColumnWidths } = React.useMemo(() => {\n // 1. Collect raw widths\n const rawWidths: Record<string, number> = {};\n let rawTotal = 0;\n for (const col of visibleColumns) {\n const w = state.columnWidths[col.key] || col.width || estimateColumnWidth(col);\n rawWidths[col.key] = w;\n rawTotal += w;\n }\n\n // 2. If fillWidth off or container not measured, use raw widths\n if (!fillWidth || !containerWidth || rawTotal >= containerWidth) {\n return { tableWidth: rawTotal, effectiveColumnWidths: rawWidths };\n }\n\n // 3. Scale proportionally to fill container, respecting minWidth/maxWidth\n const scale = containerWidth / rawTotal;\n const scaled: Record<string, number> = {};\n for (const col of visibleColumns) {\n let w = Math.floor(rawWidths[col.key] * scale);\n if (col.minWidth) w = Math.max(w, col.minWidth);\n if (col.maxWidth) w = Math.min(w, col.maxWidth);\n scaled[col.key] = w;\n }\n\n return { tableWidth: containerWidth, effectiveColumnWidths: scaled };\n }, [visibleColumns, state.columnWidths, fillWidth, containerWidth]);\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 fillWidth,\n containerWidth,\n effectiveColumnWidths,\n });\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={parentCallbackRef}\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 = effectiveColumnWidths[column.key];\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 fillWidth={fillWidth}\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 effectiveColumnWidths[column.key];\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 \"px-3 py-2 text-sm overflow-hidden\",\n !fillWidth && \"flex-shrink-0\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n isEditingThisCell && \"ring-2 ring-inset ring-primary bg-background\",\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-popover-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 ref={parentCallbackRef} 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 = effectiveColumnWidths[column.key];\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 fillWidth={fillWidth}\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 = effectiveColumnWidths[column.key];\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 \"px-3 py-2 text-sm overflow-hidden\",\n !fillWidth && \"flex-shrink-0\",\n showColumnBorders && \"border-r border-border last:border-r-0\",\n isFocused && !isEditingThisCell && \"ring-2 ring-inset ring-primary\",\n isEditingThisCell && \"ring-2 ring-inset ring-primary bg-background\",\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 \"hover:border-input-hover\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input\",\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","import * as React from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Checkbox } from \"./checkbox\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport type { AutocompleteOption } from \"./autocomplete\";\n\nexport interface MultiSelectProps {\n /** Array of options to display */\n options: AutocompleteOption[];\n /** Currently selected values */\n value?: string[];\n /** Callback when selection changes */\n onChange?: (values: string[]) => 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 multi-select is disabled */\n disabled?: boolean;\n /** Additional class name for the trigger */\n className?: string;\n /** Whether to show the clear-all button */\n clearable?: boolean;\n /** Max number of pills to display before showing \"+N more\" */\n maxDisplayItems?: number;\n /** Whether to show a \"Select All\" toggle */\n showSelectAll?: boolean;\n /** Custom label for the select all option */\n selectAllLabel?: string;\n}\n\n/**\n * MultiSelect component - a multi-select dropdown with checkboxes\n *\n * Features:\n * - Checkbox selection for multiple options\n * - Search filtering\n * - Grouped options support\n * - Descriptions per option\n * - Tag pills with individual removal\n * - \"Select All\" toggle\n *\n * @example\n * <MultiSelect\n * options={[\n * { value: 'react', label: 'React', description: 'A JS library' },\n * { value: 'vue', label: 'Vue', group: 'Frameworks' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select frameworks...\"\n * showSelectAll\n * />\n */\nexport function MultiSelect({\n options,\n value,\n onChange,\n placeholder = \"Select items...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = true,\n maxDisplayItems = 3,\n showSelectAll = false,\n selectAllLabel = \"Select all\",\n}: MultiSelectProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const safeOptions = options ?? [];\n const safeValue = value ?? [];\n const selectedSet = React.useMemo(() => new Set(safeValue), [safeValue]);\n\n const filteredOptions = React.useMemo(() => {\n if (!search.trim()) return safeOptions;\n const searchLower = search.toLowerCase();\n return safeOptions.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [safeOptions, search]);\n\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 // Select All logic\n const selectableFiltered = React.useMemo(\n () => filteredOptions.filter((opt) => !opt.disabled),\n [filteredOptions]\n );\n\n const allFilteredSelected = React.useMemo(\n () =>\n selectableFiltered.length > 0 &&\n selectableFiltered.every((opt) => selectedSet.has(opt.value)),\n [selectableFiltered, selectedSet]\n );\n\n const someFilteredSelected = React.useMemo(\n () =>\n !allFilteredSelected &&\n selectableFiltered.some((opt) => selectedSet.has(opt.value)),\n [selectableFiltered, selectedSet, allFilteredSelected]\n );\n\n const handleToggle = React.useCallback(\n (optionValue: string) => {\n const next = selectedSet.has(optionValue)\n ? safeValue.filter((v) => v !== optionValue)\n : [...safeValue, optionValue];\n onChange?.(next);\n },\n [onChange, safeValue, selectedSet]\n );\n\n const handleRemove = React.useCallback(\n (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(safeValue.filter((v) => v !== optionValue));\n },\n [onChange, safeValue]\n );\n\n const handleClearAll = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.([]);\n },\n [onChange]\n );\n\n const handleSelectAll = React.useCallback(() => {\n if (allFilteredSelected) {\n // Deselect all filtered\n const filteredValues = new Set(selectableFiltered.map((o) => o.value));\n onChange?.(safeValue.filter((v) => !filteredValues.has(v)));\n } else {\n // Select all filtered (merge with existing selections)\n const existing = new Set(safeValue);\n const next = [...safeValue];\n for (const opt of selectableFiltered) {\n if (!existing.has(opt.value)) {\n next.push(opt.value);\n }\n }\n onChange?.(next);\n }\n }, [allFilteredSelected, selectableFiltered, safeValue, onChange]);\n\n React.useEffect(() => {\n if (open) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(timeout);\n } else {\n setSearch(\"\");\n }\n }, [open]);\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n }, []);\n\n const selectedLabels = React.useMemo(\n () =>\n safeValue\n .map((v) => safeOptions.find((o) => o.value === v)?.label ?? v)\n .slice(0, maxDisplayItems),\n [safeValue, safeOptions, maxDisplayItems]\n );\n\n const overflow = safeValue.length - maxDisplayItems;\n\n const isSearching = search.trim().length > 0;\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onClick={() => handleToggle(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 option.disabled && \"pointer-events-none opacity-50\"\n )}\n >\n <Checkbox\n checked={selectedSet.has(option.value)}\n tabIndex={-1}\n className=\"mt-0.5 pointer-events-none\"\n />\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 min-h-9 w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-1.5 text-sm shadow-sm ring-offset-background\",\n \"hover:border-input-hover\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:border-input\",\n className\n )}\n >\n <div className=\"flex flex-1 flex-wrap gap-1 items-center min-w-0\">\n {safeValue.length === 0 ? (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n ) : (\n <>\n {selectedLabels.map((label, i) => (\n <span\n key={safeValue[i]}\n className=\"inline-flex items-center gap-0.5 rounded-sm bg-accent px-1.5 py-0.5 text-xs font-medium text-accent-foreground\"\n >\n <span className=\"truncate max-w-[100px]\">{label}</span>\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={(e) => handleRemove(safeValue[i]!, e)}\n className=\"rounded-sm hover:bg-foreground/10 p-0.5\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n +{overflow}\n </span>\n )}\n </>\n )}\n </div>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && safeValue.length > 0 && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClearAll}\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 {/* Select All */}\n {showSelectAll && selectableFiltered.length > 0 && (\n <>\n <button\n type=\"button\"\n onClick={handleSelectAll}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"hover:bg-accent hover:text-accent-foreground\"\n )}\n >\n <Checkbox\n checked={\n allFilteredSelected\n ? true\n : someFilteredSelected\n ? \"indeterminate\"\n : false\n }\n tabIndex={-1}\n className=\"pointer-events-none\"\n />\n <span className=\"font-medium\">\n {isSearching\n ? `${selectAllLabel} (filtered)`\n : selectAllLabel}\n </span>\n </button>\n <div className=\"-mx-1 my-1 h-px bg-border\" />\n </>\n )}\n\n {filteredOptions.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n ) : hasGroups ? (\n <>\n {groupedOptions.ungrouped.map(renderOption)}\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\nMultiSelect.displayName = \"MultiSelect\";\n\nexport default MultiSelect;\n","import * as React from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"./popover\";\nimport type { AutocompleteOption } from \"./autocomplete\";\n\nexport interface ComboboxProps {\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 /** Callback when the input text changes (for controlled/async filtering) */\n onInputChange?: (input: string) => void;\n /** Placeholder text when empty */\n placeholder?: string;\n /** Text to show when no options match */\n emptyText?: string;\n /** Whether the combobox 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 /** Whether to allow custom values not in the options list */\n allowCustomValue?: boolean;\n}\n\n/**\n * Combobox component - a searchable input that also allows custom values\n *\n * Unlike Autocomplete (button trigger, select-only), Combobox uses an\n * inline text input as the trigger. Users can type to filter options\n * AND optionally commit custom values not in the list.\n *\n * Features:\n * - Inline text input trigger\n * - Dropdown opens on focus/typing\n * - Grouped options with descriptions\n * - Custom value support (allowCustomValue)\n * - Clearable selection\n * - Async filtering via onInputChange\n *\n * @example\n * <Combobox\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Type or select...\"\n * allowCustomValue\n * />\n */\nexport function Combobox({\n options,\n value,\n onChange,\n onInputChange,\n placeholder = \"Type or select...\",\n emptyText = \"No options found.\",\n disabled = false,\n className,\n clearable = false,\n allowCustomValue = true,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n\n // Sync input display with selected value\n const selectedOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // When value changes externally, update input display\n React.useEffect(() => {\n if (!open) {\n setInputValue(selectedOption?.label ?? value ?? \"\");\n }\n }, [value, selectedOption, open]);\n\n // Filter options based on input\n const filteredOptions = React.useMemo(() => {\n if (!inputValue.trim()) return options;\n const searchLower = inputValue.toLowerCase();\n return options.filter(\n (opt) =>\n opt.label.toLowerCase().includes(searchLower) ||\n opt.description?.toLowerCase().includes(searchLower)\n );\n }, [options, inputValue]);\n\n // Group options\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 const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onInputChange?.(newValue);\n if (!open) setOpen(true);\n },\n [onInputChange, open]\n );\n\n const handleSelect = React.useCallback(\n (optionValue: string) => {\n const option = options.find((o) => o.value === optionValue);\n onChange?.(optionValue);\n setInputValue(option?.label ?? optionValue);\n setOpen(false);\n },\n [onChange, options]\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onChange?.(undefined);\n setInputValue(\"\");\n inputRef.current?.focus();\n },\n [onChange]\n );\n\n const handleFocus = React.useCallback(() => {\n setOpen(true);\n // Select all text on focus for easy replacement\n inputRef.current?.select();\n }, []);\n\n const handleBlur = React.useCallback(() => {\n // Delay to allow click events on options to fire\n setTimeout(() => {\n // If focus moved outside the wrapper entirely, close\n if (!wrapperRef.current?.contains(document.activeElement)) {\n setOpen(false);\n }\n\n if (allowCustomValue && inputValue.trim()) {\n // Check if input matches an existing option label\n const matchingOption = options.find(\n (opt) => opt.label.toLowerCase() === inputValue.toLowerCase()\n );\n if (matchingOption) {\n onChange?.(matchingOption.value);\n setInputValue(matchingOption.label);\n } else {\n // Commit custom value\n onChange?.(inputValue.trim());\n }\n } else if (!allowCustomValue) {\n // Reset to selected option or clear\n setInputValue(selectedOption?.label ?? \"\");\n }\n }, 200);\n }, [allowCustomValue, inputValue, options, onChange, selectedOption]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n setInputValue(selectedOption?.label ?? value ?? \"\");\n inputRef.current?.blur();\n } else if (e.key === \"Enter\" && open) {\n e.preventDefault();\n // If there's exactly one filtered option, select it\n if (filteredOptions.length === 1) {\n handleSelect(filteredOptions[0]!.value);\n } else if (allowCustomValue && inputValue.trim()) {\n // Check for exact match first\n const exactMatch = filteredOptions.find(\n (opt) => opt.label.toLowerCase() === inputValue.toLowerCase()\n );\n if (exactMatch) {\n handleSelect(exactMatch.value);\n } else {\n onChange?.(inputValue.trim());\n setOpen(false);\n }\n }\n }\n },\n [\n open,\n filteredOptions,\n handleSelect,\n allowCustomValue,\n inputValue,\n onChange,\n selectedOption,\n value,\n ]\n );\n\n const renderOption = (option: AutocompleteOption) => (\n <button\n key={option.value}\n type=\"button\"\n disabled={option.disabled}\n onMouseDown={(e) => e.preventDefault()}\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 <PopoverAnchor asChild>\n <div\n ref={wrapperRef}\n className={cn(\n \"flex h-9 w-full items-center gap-2 rounded-md border border-input bg-transparent px-3 text-sm shadow-sm ring-offset-background\",\n \"hover:border-input-hover\",\n \"focus-within:outline-none focus-within:ring-1 focus-within:ring-ring\",\n disabled &&\n \"cursor-not-allowed opacity-50 hover:border-input\",\n className\n )}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className=\"flex-1 min-w-0 bg-transparent py-2 outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n />\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {clearable && value && (\n <span\n role=\"button\"\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\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 </div>\n </PopoverAnchor>\n <PopoverContent\n className=\"p-0\"\n style={{ width: wrapperRef.current?.offsetWidth }}\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => {\n if (wrapperRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }}\n onInteractOutside={(e) => {\n if (wrapperRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }}\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 {groupedOptions.ungrouped.map(renderOption)}\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\nCombobox.displayName = \"Combobox\";\n\nexport default Combobox;\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 * Curated set of production-ready themes with proper contrast and border visibility.\n */\n\nimport type { Theme } from \"./types\";\n\n/**\n * Optilogic Legacy Theme - Default light theme\n *\n * Classic Optilogic branding with deep blue (#0C0A5A) primary.\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: \"#D0D0D0\",\n ring: \"#5766F2\",\n popoverBorder: \"#D0D0D0\",\n divider: \"#D0D0D0\",\n toggleTrack: \"#D0D0D0\",\n toggleTrackForeground: \"#FFFFFF\",\n inputHover: \"#5766F2\",\n chart1: \"#78D237\",\n chart2: \"#F5CF47\",\n chart3: \"#5766F2\",\n chart4: \"#44BD7E\",\n chart5: \"#929BEF\",\n chart6: \"#DB2828\",\n chart7: \"#E07B39\",\n chart8: \"#2BBBAD\",\n chart9: \"#A5673F\",\n chart10: \"#00B5AD\",\n chart11: \"#6435C9\",\n chart12: \"#E03997\",\n radius: \"0.5rem\",\n};\n\n/**\n * Optilogic Dark Theme - Branded dark mode\n *\n * Uses Optilogic marketing site colors for a branded dark experience.\n * Primary palette: deep teal background with signature neon green accent.\n */\nexport const OPTILOGIC_DARK_THEME: Theme = {\n id: \"optilogic-dark\",\n name: \"Optilogic Dark\",\n description: \"Optilogic branded dark theme with signature green\",\n author: \"Optilogic\",\n background: \"#042926\",\n foreground: \"#E0E7E6\",\n card: \"#0A3F34\",\n cardForeground: \"#E0E7E6\",\n popover: \"#0A3F34\",\n popoverForeground: \"#E0E7E6\",\n primary: \"#23EF6A\",\n primaryForeground: \"#042926\",\n accent: \"#23EF6A\",\n accentForeground: \"#042926\",\n secondary: \"#0D4D3F\",\n secondaryForeground: \"#E0E7E6\",\n muted: \"#0D4D3F\",\n mutedForeground: \"#9CB5B0\",\n destructive: \"#EF4444\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#23EF6A\",\n successForeground: \"#042926\",\n warning: \"#FBBF24\",\n warningForeground: \"#042926\",\n chip: \"#0D4D3F\",\n chipForeground: \"#A7D5CA\",\n border: \"#1A5C4C\",\n input: \"#1A5C4C\",\n ring: \"#23EF6A\",\n popoverBorder: \"#237A64\",\n divider: \"#1A5C4C\",\n toggleTrack: \"#1A5C4C\",\n toggleTrackForeground: \"#E0E7E6\",\n inputHover: \"#23EF6A\",\n chart1: \"#23EF6A\",\n chart2: \"#3B82F6\",\n chart3: \"#FBBF24\",\n chart4: \"#F97316\",\n chart5: \"#A78BFA\",\n chart6: \"#EF4444\",\n chart7: \"#06B6D4\",\n chart8: \"#EC4899\",\n chart9: \"#84CC16\",\n chart10: \"#14B8A6\",\n chart11: \"#F59E0B\",\n chart12: \"#8B5CF6\",\n radius: \"0.5rem\",\n};\n\n/**\n * Modern Light Theme - Clean, readable light mode\n *\n * Neutral grays with blue primary for a modern, professional look.\n * Reworked from the original Minimalist Light theme.\n */\nexport const MODERN_LIGHT_THEME: Theme = {\n id: \"modern-light\",\n name: \"Modern Light\",\n description: \"Clean and modern light theme with blue accents\",\n author: \"opti-ui\",\n background: \"#FFFFFF\",\n foreground: \"#1A1A1A\",\n card: \"#F8F9FA\",\n cardForeground: \"#1A1A1A\",\n popover: \"#FFFFFF\",\n popoverForeground: \"#1A1A1A\",\n primary: \"#2563EB\",\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: \"#DEE2E6\",\n ring: \"#2563EB\",\n popoverBorder: \"#DEE2E6\",\n divider: \"#DEE2E6\",\n toggleTrack: \"#CED4DA\",\n toggleTrackForeground: \"#FFFFFF\",\n inputHover: \"#6C757D\",\n chart1: \"#2563EB\",\n chart2: \"#16A34A\",\n chart3: \"#EA580C\",\n chart4: \"#9333EA\",\n chart5: \"#DC2626\",\n chart6: \"#0891B2\",\n chart7: \"#CA8A04\",\n chart8: \"#DB2777\",\n chart9: \"#4F46E5\",\n chart10: \"#059669\",\n chart11: \"#D97706\",\n chart12: \"#7C3AED\",\n radius: \"0.5rem\",\n};\n\n/** @deprecated Use MODERN_LIGHT_THEME instead */\nexport const MINIMALIST_LIGHT_THEME = MODERN_LIGHT_THEME;\n\n/**\n * Modern Dark Theme - Neutral, clean dark mode\n *\n * Zinc-based palette with blue accents. Strong border contrast\n * for clear visual separation of UI elements.\n */\nexport const MODERN_DARK_THEME: Theme = {\n id: \"modern-dark\",\n name: \"Modern Dark\",\n description: \"Clean, neutral dark theme with blue accents\",\n author: \"opti-ui\",\n background: \"#09090B\",\n foreground: \"#FAFAFA\",\n card: \"#18181B\",\n cardForeground: \"#FAFAFA\",\n popover: \"#18181B\",\n popoverForeground: \"#FAFAFA\",\n primary: \"#3B82F6\",\n primaryForeground: \"#FFFFFF\",\n accent: \"#27272A\",\n accentForeground: \"#FAFAFA\",\n secondary: \"#27272A\",\n secondaryForeground: \"#FAFAFA\",\n muted: \"#27272A\",\n mutedForeground: \"#A1A1AA\",\n destructive: \"#EF4444\",\n destructiveForeground: \"#FFFFFF\",\n success: \"#22C55E\",\n successForeground: \"#FFFFFF\",\n warning: \"#EAB308\",\n warningForeground: \"#09090B\",\n chip: \"#27272A\",\n chipForeground: \"#D4D4D8\",\n border: \"#3F3F46\",\n input: \"#3F3F46\",\n ring: \"#3B82F6\",\n popoverBorder: \"#52525B\",\n divider: \"#3F3F46\",\n toggleTrack: \"#3F3F46\",\n toggleTrackForeground: \"#FAFAFA\",\n inputHover: \"#3B82F6\",\n chart1: \"#3B82F6\",\n chart2: \"#22C55E\",\n chart3: \"#F59E0B\",\n chart4: \"#EF4444\",\n chart5: \"#A855F7\",\n chart6: \"#14B8A6\",\n chart7: \"#F97316\",\n chart8: \"#EC4899\",\n chart9: \"#0EA5E9\",\n chart10: \"#EAB308\",\n chart11: \"#10B981\",\n chart12: \"#C084FC\",\n radius: \"0.5rem\",\n};\n\n/**\n * Dark Elegant Theme - Sophisticated dark mode\n *\n * Deep charcoal with purple/teal accents for a refined aesthetic.\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: \"opti-ui\",\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: \"#121212\",\n chip: \"#2D2D2D\",\n chipForeground: \"#B39DDB\",\n border: \"#404040\",\n input: \"#404040\",\n ring: \"#BB86FC\",\n popoverBorder: \"#525252\",\n divider: \"#404040\",\n toggleTrack: \"#404040\",\n toggleTrackForeground: \"#E0E0E0\",\n inputHover: \"#BB86FC\",\n chart1: \"#BB86FC\",\n chart2: \"#03DAC6\",\n chart3: \"#4CAF50\",\n chart4: \"#FF9800\",\n chart5: \"#CF6679\",\n chart6: \"#64B5F6\",\n chart7: \"#81C784\",\n chart8: \"#FFB74D\",\n chart9: \"#E57373\",\n chart10: \"#7986CB\",\n chart11: \"#4DB6AC\",\n chart12: \"#F06292\",\n radius: \"0.5rem\",\n};\n\n/**\n * All available preset themes\n */\nexport const PRESET_THEMES: Theme[] = [\n OPTILOGIC_LEGACY_THEME,\n OPTILOGIC_DARK_THEME,\n MODERN_LIGHT_THEME,\n MODERN_DARK_THEME,\n DARK_ELEGANT_THEME,\n];\n\n/**\n * All theme suggestions for preview\n */\nexport const ALL_THEMES: Theme[] = PRESET_THEMES;\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 popoverBorder: theme.popoverBorder\n ? hexToHsl(theme.popoverBorder)\n : undefined,\n divider: theme.divider ? hexToHsl(theme.divider) : undefined,\n toggleTrack: theme.toggleTrack ? hexToHsl(theme.toggleTrack) : undefined,\n toggleTrackForeground: theme.toggleTrackForeground\n ? hexToHsl(theme.toggleTrackForeground)\n : undefined,\n inputHover: theme.inputHover ? hexToHsl(theme.inputHover) : undefined,\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 chart6: hexToHsl(theme.chart6),\n chart7: hexToHsl(theme.chart7),\n chart8: hexToHsl(theme.chart8),\n chart9: hexToHsl(theme.chart9),\n chart10: hexToHsl(theme.chart10),\n chart11: hexToHsl(theme.chart11),\n chart12: hexToHsl(theme.chart12),\n };\n}\n\n/**\n * Derive an input hover border color from the theme's HSL values.\n * Blends toward the foreground for a subtle but visible hover effect.\n */\nfunction deriveInputHoverHsl(hslTheme: ThemeHSL): string {\n const parts = hslTheme.foreground.split(/\\s+/);\n if (parts.length >= 3) {\n const h = parts[0];\n const s = parts[1];\n return `${h} ${s} 50%`;\n }\n return hslTheme.foreground;\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\n // Elevated surface & divider tokens (with fallbacks)\n element.style.setProperty(\n \"--popover-border\",\n hslTheme.popoverBorder ?? hslTheme.border\n );\n element.style.setProperty(\n \"--divider\",\n hslTheme.divider ?? hslTheme.border\n );\n\n // Interactive control tokens (with fallbacks)\n element.style.setProperty(\n \"--toggle-track\",\n hslTheme.toggleTrack ?? hslTheme.muted\n );\n element.style.setProperty(\n \"--toggle-track-foreground\",\n hslTheme.toggleTrackForeground ?? hslTheme.background\n );\n element.style.setProperty(\n \"--input-hover\",\n hslTheme.inputHover ?? deriveInputHoverHsl(hslTheme)\n );\n\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 element.style.setProperty(\"--chart-6\", hslTheme.chart6);\n element.style.setProperty(\"--chart-7\", hslTheme.chart7);\n element.style.setProperty(\"--chart-8\", hslTheme.chart8);\n element.style.setProperty(\"--chart-9\", hslTheme.chart9);\n element.style.setProperty(\"--chart-10\", hslTheme.chart10);\n element.style.setProperty(\"--chart-11\", hslTheme.chart11);\n element.style.setProperty(\"--chart-12\", hslTheme.chart12);\n\n if (theme.disabledOpacity) {\n element.style.setProperty(\"--disabled-opacity\", theme.disabledOpacity);\n }\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 \"chart6\",\n \"chart7\",\n \"chart8\",\n \"chart9\",\n \"chart10\",\n \"chart11\",\n \"chart12\",\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 \"popoverBorder\",\n \"divider\",\n \"toggleTrack\",\n \"toggleTrackForeground\",\n \"inputHover\",\n \"chart1\",\n \"chart2\",\n \"chart3\",\n \"chart4\",\n \"chart5\",\n \"chart6\",\n \"chart7\",\n \"chart8\",\n \"chart9\",\n \"chart10\",\n \"chart11\",\n \"chart12\",\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// ---------------------------------------------------------------------------\n// Contrast validation utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a hex color string into linear-light sRGB components (0-1).\n */\nfunction hexToLinearRgb(hex: string): [number, number, number] {\n hex = hex.replace(/^#/, \"\");\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 toLinear = (c: number) =>\n c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n\n return [toLinear(r), toLinear(g), toLinear(b)];\n}\n\n/**\n * Calculate WCAG 2.x relative luminance for a hex color.\n * @see https://www.w3.org/TR/WCAG21/#dfn-relative-luminance\n */\nexport function getRelativeLuminance(hex: string): number {\n const [r, g, b] = hexToLinearRgb(hex);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n/**\n * Calculate the WCAG contrast ratio between two hex colors.\n * Returns a value >= 1, where 1 means no contrast and 21 is maximum.\n * @see https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio\n */\nexport function getContrastRatio(hex1: string, hex2: string): number {\n const l1 = getRelativeLuminance(hex1);\n const l2 = getRelativeLuminance(hex2);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nexport interface ContrastWarning {\n pair: [string, string];\n pairLabels: [string, string];\n ratio: number;\n required: number;\n level: \"fail\" | \"AA-large\" | \"AA\";\n}\n\n/**\n * Validate contrast ratios for critical color pairs in a theme.\n *\n * WCAG 2.1 requirements:\n * - **3:1** minimum for UI components and large text (AA)\n * - **4.5:1** minimum for normal text (AA)\n *\n * Returns an array of warnings for pairs that fall below the recommended\n * minimums. An empty array means all checked pairs pass.\n */\nexport function validateThemeContrast(theme: Theme): ContrastWarning[] {\n const warnings: ContrastWarning[] = [];\n\n const uiPairs: {\n a: string;\n b: string;\n labelA: string;\n labelB: string;\n minRatio: number;\n }[] = [\n // Text on background\n {\n a: theme.foreground,\n b: theme.background,\n labelA: \"foreground\",\n labelB: \"background\",\n minRatio: 4.5,\n },\n // Primary button text on primary bg\n {\n a: theme.primaryForeground,\n b: theme.primary,\n labelA: \"primaryForeground\",\n labelB: \"primary\",\n minRatio: 4.5,\n },\n // Accent foreground on accent\n {\n a: theme.accentForeground,\n b: theme.accent,\n labelA: \"accentForeground\",\n labelB: \"accent\",\n minRatio: 4.5,\n },\n // Input border vs background (UI component boundary — 3:1)\n {\n a: theme.input,\n b: theme.background,\n labelA: \"input\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Toggle track vs background (UI component — 3:1)\n {\n a: theme.toggleTrack ?? theme.muted,\n b: theme.background,\n labelA: \"toggleTrack\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Toggle thumb vs track (UI component — 3:1)\n {\n a: theme.toggleTrackForeground ?? theme.background,\n b: theme.toggleTrack ?? theme.muted,\n labelA: \"toggleTrackForeground\",\n labelB: \"toggleTrack\",\n minRatio: 3,\n },\n // Border vs background (UI component boundary — 3:1)\n {\n a: theme.border,\n b: theme.background,\n labelA: \"border\",\n labelB: \"background\",\n minRatio: 3,\n },\n // Popover border vs popover background (elevated surface boundary — 3:1)\n {\n a: theme.popoverBorder ?? theme.border,\n b: theme.popover,\n labelA: \"popoverBorder\",\n labelB: \"popover\",\n minRatio: 3,\n },\n // Muted foreground on muted bg\n {\n a: theme.mutedForeground,\n b: theme.muted,\n labelA: \"mutedForeground\",\n labelB: \"muted\",\n minRatio: 4.5,\n },\n // Destructive foreground on destructive bg\n {\n a: theme.destructiveForeground,\n b: theme.destructive,\n labelA: \"destructiveForeground\",\n labelB: \"destructive\",\n minRatio: 4.5,\n },\n ];\n\n for (const { a, b, labelA, labelB, minRatio } of uiPairs) {\n const ratio = getContrastRatio(a, b);\n if (ratio < minRatio) {\n let level: ContrastWarning[\"level\"] = \"fail\";\n if (ratio >= 3) level = \"AA-large\";\n\n warnings.push({\n pair: [a, b],\n pairLabels: [labelA, labelB],\n ratio: Math.round(ratio * 100) / 100,\n required: minRatio,\n level,\n });\n }\n }\n\n return warnings;\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-popover-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-popover-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","import type { ContentType, ContentTypeDetectionResult } from \"../types\";\n\n/**\n * Extension-to-content-type mapping.\n */\nconst EXTENSION_MAP: Record<string, ContentType> = {\n // Code / programming languages\n ts: \"code\",\n tsx: \"code\",\n js: \"code\",\n jsx: \"code\",\n mjs: \"code\",\n cjs: \"code\",\n py: \"code\",\n rb: \"code\",\n go: \"code\",\n rs: \"code\",\n java: \"code\",\n c: \"code\",\n cpp: \"code\",\n h: \"code\",\n hpp: \"code\",\n cs: \"code\",\n php: \"code\",\n swift: \"code\",\n kt: \"code\",\n scala: \"code\",\n r: \"code\",\n sql: \"code\",\n sh: \"code\",\n bash: \"code\",\n zsh: \"code\",\n ps1: \"code\",\n bat: \"code\",\n lua: \"code\",\n perl: \"code\",\n pl: \"code\",\n // Config / data (code-rendered)\n json: \"code\",\n yaml: \"code\",\n yml: \"code\",\n toml: \"code\",\n xml: \"code\",\n html: \"html\",\n htm: \"html\",\n css: \"code\",\n scss: \"code\",\n sass: \"code\",\n less: \"code\",\n graphql: \"code\",\n gql: \"code\",\n // Optimization / domain-specific\n lp: \"code\",\n dat: \"code\",\n // Markdown\n md: \"markdown\",\n mdx: \"markdown\",\n // Images\n png: \"image\",\n jpg: \"image\",\n jpeg: \"image\",\n gif: \"image\",\n svg: \"image\",\n webp: \"image\",\n ico: \"image\",\n bmp: \"image\",\n // PDF\n pdf: \"pdf\",\n // CSV\n csv: \"csv\",\n tsv: \"csv\",\n // Plain text\n txt: \"plaintext\",\n log: \"plaintext\",\n env: \"plaintext\",\n};\n\n/**\n * Special file names (without extension) that map to content types.\n */\nconst SPECIAL_FILES: Record<string, ContentType> = {\n dockerfile: \"code\",\n makefile: \"code\",\n rakefile: \"code\",\n gemfile: \"code\",\n procfile: \"code\",\n};\n\n/**\n * Extract the file extension from a file name.\n * Handles dotfiles (e.g., \".gitignore\" -> \"gitignore\") and\n * compound extensions (e.g., \"file.test.ts\" -> \"ts\").\n */\nexport function getFileExtension(fileName: string): string | null {\n if (!fileName) return null;\n\n const baseName = fileName.split(\"/\").pop() || fileName;\n\n // Dotfile with no other extension (e.g., \".gitignore\")\n if (baseName.startsWith(\".\") && !baseName.slice(1).includes(\".\")) {\n return baseName.slice(1).toLowerCase();\n }\n\n const lastDot = baseName.lastIndexOf(\".\");\n if (lastDot === -1 || lastDot === baseName.length - 1) return null;\n\n return baseName.slice(lastDot + 1).toLowerCase();\n}\n\n/**\n * Detect content type from a file name.\n *\n * @example\n * detectContentType(\"app.tsx\") // { type: \"code\", extension: \"tsx\" }\n * detectContentType(\"README.md\") // { type: \"markdown\", extension: \"md\" }\n * detectContentType(\"photo.png\") // { type: \"image\", extension: \"png\" }\n * detectContentType(\"unknown.xyz\") // { type: \"unknown\", extension: \"xyz\" }\n */\nexport function detectContentType(\n fileName: string,\n): ContentTypeDetectionResult {\n // Check special file names first\n const baseName = (fileName.split(\"/\").pop() || fileName).toLowerCase();\n const specialType = SPECIAL_FILES[baseName];\n if (specialType) {\n return { type: specialType, extension: baseName };\n }\n\n const extension = getFileExtension(fileName);\n if (!extension) {\n return { type: \"unknown\", extension: null };\n }\n\n const type = EXTENSION_MAP[extension] ?? \"unknown\";\n return { type, extension };\n}\n\n/**\n * Check if a content type is text-based (uses `content` string).\n */\nexport function isTextContentType(contentType: ContentType): boolean {\n return (\n contentType === \"code\" ||\n contentType === \"markdown\" ||\n contentType === \"plaintext\" ||\n contentType === \"csv\" ||\n contentType === \"html\" ||\n contentType === \"unknown\"\n );\n}\n\n/**\n * Check if a content type is URL-based (uses `url` string).\n */\nexport function isUrlContentType(contentType: ContentType): boolean {\n return contentType === \"image\" || contentType === \"pdf\";\n}\n","import { useMemo } from \"react\";\nimport type { ContentType, ContentTypeDetectionResult } from \"../types\";\nimport { detectContentType } from \"../utils/contentTypeDetection\";\n\nexport interface UseContentTypeOptions {\n fileName: string;\n contentTypeOverride?: ContentType;\n}\n\nexport interface UseContentTypeReturn extends ContentTypeDetectionResult {\n /** Whether the type was explicitly overridden. */\n isOverridden: boolean;\n}\n\n/**\n * Hook to determine the content type for a file.\n * Uses explicit override if provided, otherwise auto-detects from fileName.\n */\nexport function useContentType({\n fileName,\n contentTypeOverride,\n}: UseContentTypeOptions): UseContentTypeReturn {\n return useMemo(() => {\n if (contentTypeOverride) {\n return {\n type: contentTypeOverride,\n extension: null,\n isOverridden: true,\n };\n }\n const detected = detectContentType(fileName);\n return { ...detected, isOverridden: false };\n }, [fileName, contentTypeOverride]);\n}\n","import { useState, useEffect } from \"react\";\n\ntype Highlighter = Awaited<ReturnType<typeof import(\"shiki\")[\"createHighlighter\"]>>;\n\ninterface ShikiHighlighterState {\n highlighter: Highlighter | null;\n isReady: boolean;\n}\n\n/** Singleton: one global highlighter instance shared across all components. */\nlet globalHighlighter: Highlighter | null = null;\nlet initPromise: Promise<Highlighter | null> | null = null;\n\nasync function getOrCreateHighlighter(): Promise<Highlighter | null> {\n if (globalHighlighter) return globalHighlighter;\n\n if (!initPromise) {\n initPromise = (async () => {\n try {\n const { createHighlighter } = await import(\"shiki\");\n globalHighlighter = await createHighlighter({\n themes: [\"github-light\", \"github-dark\"],\n langs: [],\n });\n return globalHighlighter;\n } catch {\n // shiki not installed or failed to load — fall back to plain text\n return null;\n }\n })();\n }\n\n return initPromise;\n}\n\n/**\n * Singleton async initialization of the shiki highlighter.\n *\n * - Dynamically imports shiki so it's an optional peer dependency\n * - Creates one global `Highlighter` instance with github-light and github-dark themes\n * - Languages are loaded on demand per-highlight call (not at init)\n * - Returns `{ highlighter, isReady }`\n */\nexport function useShikiHighlighter(): ShikiHighlighterState {\n const [state, setState] = useState<ShikiHighlighterState>({\n highlighter: globalHighlighter,\n isReady: globalHighlighter !== null,\n });\n\n useEffect(() => {\n if (globalHighlighter) {\n setState({ highlighter: globalHighlighter, isReady: true });\n return;\n }\n\n let cancelled = false;\n getOrCreateHighlighter().then((h) => {\n if (!cancelled) {\n setState({ highlighter: h, isReady: true });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n return state;\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\n/**\n * Parse the lightness percentage from a `--background` CSS variable value.\n * Expects HSL format like `\"222 84% 5%\"` or `\"0 0% 100%\"`.\n * Returns the lightness as a number (0-100), or `null` if unparseable.\n */\nfunction getBackgroundLightness(el: HTMLElement): number | null {\n const value = getComputedStyle(el).getPropertyValue(\"--background\").trim();\n if (!value) return null;\n\n // Match the last percentage in the HSL string (lightness)\n const match = value.match(/(\\d+(?:\\.\\d+)?)%\\s*$/);\n return match ? parseFloat(match[1]) : null;\n}\n\n/**\n * Detects whether the current theme is \"dark\" by examining the\n * `--background` CSS variable's lightness.\n *\n * Works with:\n * - The theme system (`applyTheme` sets `--background` as inline style)\n * - The `.dark` class (which also changes `--background` via CSS)\n * - Any mechanism that updates `--background`\n *\n * SSR-safe: defaults to `false` when `document` is unavailable.\n */\nexport function useDarkMode(): boolean {\n const checkDark = useCallback((): boolean => {\n if (typeof document === \"undefined\") return false;\n const lightness = getBackgroundLightness(document.documentElement);\n // If we can't read the variable, fall back to checking .dark class\n if (lightness === null) {\n return document.documentElement.classList.contains(\"dark\");\n }\n return lightness < 50;\n }, []);\n\n const [isDark, setIsDark] = useState(checkDark);\n\n useEffect(() => {\n const el = document.documentElement;\n\n const update = () => {\n setIsDark(checkDark());\n };\n\n // Watch both class and style attribute changes\n const observer = new MutationObserver(update);\n observer.observe(el, {\n attributes: true,\n attributeFilter: [\"class\", \"style\"],\n });\n\n // Sync in case the value changed between render and effect\n update();\n\n return () => observer.disconnect();\n }, [checkDark]);\n\n return isDark;\n}\n","import { useState, useEffect } from \"react\";\nimport { useShikiHighlighter } from \"./useShikiHighlighter\";\nimport { useDarkMode } from \"./useDarkMode\";\n\nexport interface HighlightToken {\n content: string;\n color?: string;\n}\n\nexport interface UseHighlightedTokensResult {\n lines: HighlightToken[][] | null;\n}\n\n/**\n * Combines the shiki highlighter + dark mode detection to produce\n * highlighted tokens for a given code string and language.\n *\n * - Loads the language on demand (with try/catch for unsupported languages)\n * - Returns `null` while loading or if shiki is unavailable (signals \"use plain text\")\n * - Re-tokenizes when dark mode toggles\n */\nexport function useHighlightedTokens(\n code: string,\n language: string,\n): UseHighlightedTokensResult {\n const { highlighter, isReady } = useShikiHighlighter();\n const isDark = useDarkMode();\n const [lines, setLines] = useState<HighlightToken[][] | null>(null);\n\n useEffect(() => {\n if (!isReady || !highlighter || !code) {\n setLines(null);\n return;\n }\n\n let cancelled = false;\n const theme = isDark ? \"github-dark\" : \"github-light\";\n\n (async () => {\n try {\n // Load language on demand — skip if it's plaintext\n if (language !== \"text\") {\n const loadedLangs = highlighter.getLoadedLanguages();\n if (!loadedLangs.includes(language as never)) {\n await highlighter.loadLanguage(language as Parameters<typeof highlighter.loadLanguage>[0]);\n }\n }\n } catch {\n // Language not supported by shiki — fall back to plain text\n if (!cancelled) setLines(null);\n return;\n }\n\n if (cancelled) return;\n\n try {\n const result = highlighter.codeToTokens(code, {\n lang: language as Parameters<typeof highlighter.codeToTokens>[1][\"lang\"],\n theme,\n });\n\n if (!cancelled) {\n setLines(\n result.tokens.map((line) =>\n line.map((token) => ({\n content: token.content,\n color: token.color,\n })),\n ),\n );\n }\n } catch {\n if (!cancelled) setLines(null);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [highlighter, isReady, code, language, isDark]);\n\n return { lines };\n}\n","/**\n * Maps file extensions to shiki language IDs.\n *\n * Most extensions work directly as shiki lang IDs. This map only\n * contains edge-cases where the extension differs from the shiki ID.\n */\nconst EXTENSION_OVERRIDES: Record<string, string> = {\n yml: \"yaml\",\n htm: \"html\",\n cjs: \"javascript\",\n mjs: \"javascript\",\n jsx: \"jsx\",\n tsx: \"tsx\",\n h: \"c\",\n hpp: \"cpp\",\n cs: \"csharp\",\n rb: \"ruby\",\n sh: \"shellscript\",\n bash: \"shellscript\",\n zsh: \"shellscript\",\n ps1: \"powershell\",\n bat: \"bat\",\n kt: \"kotlin\",\n rs: \"rust\",\n gql: \"graphql\",\n pl: \"perl\",\n sass: \"sass\",\n scss: \"scss\",\n less: \"less\",\n // Domain-specific / data formats without shiki support\n lp: \"text\",\n dat: \"text\",\n env: \"shellscript\",\n};\n\n/**\n * Special file names (without extension) mapped to shiki language IDs.\n */\nconst SPECIAL_FILE_LANGUAGES: Record<string, string> = {\n dockerfile: \"dockerfile\",\n makefile: \"makefile\",\n rakefile: \"ruby\",\n gemfile: \"ruby\",\n procfile: \"yaml\",\n};\n\n/**\n * Get the shiki language ID for a given file name.\n *\n * @example\n * getLanguageFromFileName(\"app.tsx\") // \"tsx\"\n * getLanguageFromFileName(\"config.yml\") // \"yaml\"\n * getLanguageFromFileName(\"Dockerfile\") // \"dockerfile\"\n * getLanguageFromFileName(\"unknown.xyz\") // \"text\"\n */\nexport function getLanguageFromFileName(fileName: string): string {\n const baseName = (fileName.split(\"/\").pop() || fileName).toLowerCase();\n\n // Check special file names\n const specialLang = SPECIAL_FILE_LANGUAGES[baseName];\n if (specialLang) return specialLang;\n\n // Extract extension\n let ext: string | null = null;\n if (baseName.startsWith(\".\") && !baseName.slice(1).includes(\".\")) {\n ext = baseName.slice(1);\n } else {\n const lastDot = baseName.lastIndexOf(\".\");\n if (lastDot !== -1 && lastDot !== baseName.length - 1) {\n ext = baseName.slice(lastDot + 1);\n }\n }\n\n if (!ext) return \"text\";\n\n // Check overrides first, then use extension directly as shiki lang ID\n return EXTENSION_OVERRIDES[ext] ?? ext;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useHighlightedTokens } from \"../hooks/useHighlightedTokens\";\nimport type { FileRendererProps } from \"../types\";\nimport { getLanguageFromFileName } from \"../utils/languageMapping\";\n\n/**\n * CodeRenderer\n *\n * Renders text content as code with line numbers in a left gutter.\n * Uses shiki for syntax highlighting when available, falling back to\n * plain monospace text otherwise.\n *\n * Layout:\n * ┌─────────────────────────────────────────┐\n * │ 1 │ import React from \"react\"; │\n * │ 2 │ │\n * │ 3 │ export function App() { │\n * │ 4 │ return <div>Hello</div>; │\n * │ 5 │ } │\n * └─────────────────────────────────────────┘\n */\nexport function CodeRenderer({\n content,\n fileName,\n className,\n}: FileRendererProps) {\n const language = React.useMemo(\n () => getLanguageFromFileName(fileName),\n [fileName],\n );\n\n const plainLines = React.useMemo(\n () => (content ?? \"\").split(\"\\n\"),\n [content],\n );\n\n const { lines: highlightedLines } = useHighlightedTokens(\n content ?? \"\",\n language,\n );\n\n const gutterWidth = React.useMemo(\n () => `${Math.max(String(plainLines.length).length, 2) + 2}ch`,\n [plainLines.length],\n );\n\n return (\n <div\n className={cn(\n \"relative h-full w-full overflow-auto rounded-md border border-border bg-background\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <pre className=\"m-0 p-0\">\n <code className=\"block font-mono text-sm leading-relaxed\">\n {highlightedLines\n ? highlightedLines.map((tokens, index) => (\n <div key={index} className=\"flex\">\n <span\n className=\"sticky left-0 shrink-0 select-none border-r border-border bg-muted px-3 text-right text-muted-foreground\"\n style={{ minWidth: gutterWidth }}\n >\n {index + 1}\n </span>\n <span className=\"whitespace-pre px-4\">\n {tokens.length === 0 || (tokens.length === 1 && tokens[0].content === \"\")\n ? \" \"\n : tokens.map((token, ti) => (\n <span key={ti} style={{ color: token.color }}>\n {token.content}\n </span>\n ))}\n </span>\n </div>\n ))\n : plainLines.map((line, index) => (\n <div key={index} className=\"flex\">\n <span\n className=\"sticky left-0 shrink-0 select-none border-r border-border bg-muted px-3 text-right text-muted-foreground\"\n style={{ minWidth: gutterWidth }}\n >\n {index + 1}\n </span>\n <span className=\"whitespace-pre px-4 text-foreground\">\n {line || \" \"}\n </span>\n </div>\n ))}\n </code>\n </pre>\n </div>\n );\n}\n\nCodeRenderer.displayName = \"CodeRenderer\";\n","import * as React from \"react\";\nimport ReactMarkdownImport from \"react-markdown\";\nimport remarkGfmImport from \"remark-gfm\";\nimport { cn } from \"../../../utils/cn\";\nimport { useHighlightedTokens } from \"../hooks/useHighlightedTokens\";\nimport type { FileRendererProps, ResolveImageUrl } from \"../types\";\n\n/**\n * Renders a fenced code block with shiki syntax highlighting.\n * Falls back to plain text if shiki is unavailable or the language isn't supported.\n */\nfunction HighlightedCodeBlock({\n children,\n className: codeClassName,\n ...props\n}: React.HTMLAttributes<HTMLElement>) {\n // Extract language from className (e.g., \"language-javascript\" -> \"javascript\")\n const language = React.useMemo(() => {\n if (!codeClassName) return \"text\";\n const match = codeClassName.match(/language-(\\S+)/);\n return match ? match[1] : \"text\";\n }, [codeClassName]);\n\n const code = React.useMemo(() => {\n const raw = String(children);\n // react-markdown adds a trailing newline to code blocks — strip it\n return raw.endsWith(\"\\n\") ? raw.slice(0, -1) : raw;\n }, [children]);\n\n const { lines } = useHighlightedTokens(code, language);\n\n if (lines) {\n return (\n <code className={cn(\"bg-transparent p-0\", codeClassName)} {...props}>\n {lines.map((tokens, i) => (\n <React.Fragment key={i}>\n {i > 0 && \"\\n\"}\n {tokens.map((token, ti) => (\n <span key={ti} style={{ color: token.color }}>\n {token.content}\n </span>\n ))}\n </React.Fragment>\n ))}\n </code>\n );\n }\n\n return (\n <code className={cn(\"bg-transparent p-0\", codeClassName)} {...props}>\n {children}\n </code>\n );\n}\n\n/**\n * Renders an image in markdown, with optional async URL resolution\n * for relative paths via the `resolveImageUrl` callback.\n *\n * - Remote URLs (http/https) and data URIs render directly.\n * - If no `resolveImageUrl` is provided, renders the src as-is.\n * - Otherwise, calls `resolveImageUrl(src)` and manages loading/error/resolved states.\n * - Cleans up blob URLs on unmount.\n */\nfunction MarkdownImage({\n src,\n alt,\n resolveImageUrl,\n ...props\n}: React.ImgHTMLAttributes<HTMLImageElement> & {\n resolveImageUrl?: ResolveImageUrl;\n}) {\n const needsResolution =\n !!src &&\n !!resolveImageUrl &&\n !src.startsWith(\"http://\") &&\n !src.startsWith(\"https://\") &&\n !src.startsWith(\"data:\");\n\n const [resolvedUrl, setResolvedUrl] = React.useState<string | null>(null);\n const [error, setError] = React.useState(false);\n const [loading, setLoading] = React.useState(needsResolution);\n\n React.useEffect(() => {\n if (!needsResolution || !src || !resolveImageUrl) return;\n\n let cancelled = false;\n let blobUrl: string | null = null;\n\n setLoading(true);\n setError(false);\n setResolvedUrl(null);\n\n Promise.resolve(resolveImageUrl(src))\n .then((url) => {\n if (cancelled) {\n // Revoke immediately if we're already unmounted/stale\n if (url.startsWith(\"blob:\")) URL.revokeObjectURL(url);\n return;\n }\n if (url.startsWith(\"blob:\")) blobUrl = url;\n setResolvedUrl(url);\n setLoading(false);\n })\n .catch(() => {\n if (!cancelled) {\n setError(true);\n setLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n if (blobUrl) URL.revokeObjectURL(blobUrl);\n };\n }, [needsResolution, src, resolveImageUrl]);\n\n // No resolution needed — render directly (current behavior)\n if (!needsResolution) {\n return (\n <img src={src} alt={alt} className=\"max-w-full rounded\" {...props} />\n );\n }\n\n // Loading\n if (loading) {\n return (\n <span className=\"my-2 inline-block h-24 w-40 animate-pulse rounded bg-muted\" />\n );\n }\n\n // Error — fall back to raw src (browser's broken image)\n if (error || !resolvedUrl) {\n return (\n <img src={src} alt={alt} className=\"max-w-full rounded\" {...props} />\n );\n }\n\n // Resolved\n return (\n <img\n src={resolvedUrl}\n alt={alt}\n className=\"max-w-full rounded\"\n {...props}\n />\n );\n}\n\n/**\n * MarkdownRenderer\n *\n * Renders markdown content using react-markdown + remark-gfm.\n * Fenced code blocks use shiki syntax highlighting when available.\n * Styled with Tailwind using semantic CSS variables for theme support.\n *\n * Requires `react-markdown` and `remark-gfm` as peer dependencies of @optilogic/core.\n */\nexport function MarkdownRenderer({\n content,\n className,\n resolveImageUrl,\n}: FileRendererProps) {\n const markdownComponents = React.useMemo(\n () => ({\n code: ({\n children,\n className: codeClassName,\n ...props\n }: React.HTMLAttributes<HTMLElement> & {\n inline?: boolean;\n node?: unknown;\n }) => {\n // Detect inline vs block: block code is wrapped in <pre> by react-markdown\n const isInline = !codeClassName;\n if (isInline) {\n return (\n <code\n className=\"rounded bg-muted px-1.5 py-0.5 font-mono text-[85%]\"\n {...props}\n >\n {children}\n </code>\n );\n }\n return (\n <HighlightedCodeBlock className={codeClassName} {...props}>\n {children}\n </HighlightedCodeBlock>\n );\n },\n pre: ({ children, ...props }: React.HTMLAttributes<HTMLPreElement>) => (\n <pre\n className=\"my-4 overflow-auto rounded-md border border-border bg-muted p-4 font-mono text-sm leading-relaxed\"\n {...props}\n >\n {children}\n </pre>\n ),\n blockquote: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLQuoteElement>) => (\n <blockquote\n className=\"my-4 border-l-4 border-border pl-4 text-muted-foreground\"\n {...props}\n >\n {children}\n </blockquote>\n ),\n a: ({\n children,\n href,\n ...props\n }: React.AnchorHTMLAttributes<HTMLAnchorElement>) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n {...props}\n >\n {children}\n </a>\n ),\n table: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableElement>) => (\n <div className=\"my-4 overflow-auto\">\n <table\n className=\"w-full border-collapse border border-border text-sm\"\n {...props}\n >\n {children}\n </table>\n </div>\n ),\n th: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableCellElement>) => (\n <th\n className=\"border border-border bg-muted px-3 py-2 text-left font-semibold\"\n {...props}\n >\n {children}\n </th>\n ),\n td: ({\n children,\n ...props\n }: React.HTMLAttributes<HTMLTableCellElement>) => (\n <td className=\"border border-border px-3 py-2\" {...props}>\n {children}\n </td>\n ),\n img: ({\n src,\n alt,\n ...props\n }: React.ImgHTMLAttributes<HTMLImageElement>) => (\n <MarkdownImage\n src={src}\n alt={alt}\n resolveImageUrl={resolveImageUrl}\n {...props}\n />\n ),\n }),\n [resolveImageUrl],\n );\n\n return (\n <div\n className={cn(\n \"h-full w-full overflow-auto bg-background p-6 text-sm leading-relaxed text-foreground\",\n // Heading styles\n \"[&_h1]:mb-4 [&_h1]:mt-6 [&_h1]:border-b [&_h1]:border-border [&_h1]:pb-2 [&_h1]:text-2xl [&_h1]:font-bold\",\n \"[&_h2]:mb-4 [&_h2]:mt-6 [&_h2]:border-b [&_h2]:border-border [&_h2]:pb-2 [&_h2]:text-xl [&_h2]:font-semibold\",\n \"[&_h3]:mb-3 [&_h3]:mt-5 [&_h3]:text-lg [&_h3]:font-semibold\",\n \"[&_h4]:mb-3 [&_h4]:mt-4 [&_h4]:text-base [&_h4]:font-semibold\",\n // Paragraph and list styles\n \"[&_p]:mb-4 [&_p]:leading-relaxed\",\n \"[&_ul]:mb-4 [&_ul]:list-disc [&_ul]:pl-6\",\n \"[&_ol]:mb-4 [&_ol]:list-decimal [&_ol]:pl-6\",\n \"[&_li]:mb-1\",\n // Horizontal rule\n \"[&_hr]:my-6 [&_hr]:border-border\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <ReactMarkdownImport\n remarkPlugins={[remarkGfmImport]}\n components={markdownComponents}\n >\n {content ?? \"\"}\n </ReactMarkdownImport>\n </div>\n );\n}\n\nMarkdownRenderer.displayName = \"MarkdownRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * ImageRenderer\n *\n * Renders an image from a URL, centered in its container.\n * Handles load errors with a fallback message.\n */\nexport function ImageRenderer({\n url,\n fileName,\n className,\n}: FileRendererProps) {\n const [hasError, setHasError] = React.useState(false);\n\n React.useEffect(() => {\n setHasError(false);\n }, [url]);\n\n if (!url) {\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center text-sm text-muted-foreground\",\n className,\n )}\n >\n No image URL provided\n </div>\n );\n }\n\n if (hasError) {\n return (\n <div\n className={cn(\n \"flex h-full w-full flex-col items-center justify-center gap-2 text-sm text-muted-foreground\",\n className,\n )}\n >\n <span>Failed to load image</span>\n <span className=\"text-xs\">{fileName}</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center overflow-auto bg-background p-4\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <img\n src={url}\n alt={fileName}\n onError={() => setHasError(true)}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n}\n\nImageRenderer.displayName = \"ImageRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * PlainTextRenderer\n *\n * Renders plain text content without line numbers.\n * Used for .txt, .log, and as the ultimate fallback renderer.\n */\nexport function PlainTextRenderer({ content, className }: FileRendererProps) {\n return (\n <div\n className={cn(\n \"h-full w-full overflow-auto rounded-md border border-border bg-background p-4\",\n \"scrollbar-thin\",\n className,\n )}\n >\n <pre className=\"m-0 whitespace-pre-wrap break-words font-mono text-sm leading-relaxed text-foreground\">\n {content ?? \"\"}\n </pre>\n </div>\n );\n}\n\nPlainTextRenderer.displayName = \"PlainTextRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { DataGrid } from \"../../data-grid\";\nimport type { ColumnDef } from \"../../data-grid\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * Parse a CSV/TSV string into headers and row objects.\n * Handles quoted fields and double-quote escaping.\n */\nfunction parseCSV(text: string): {\n headers: string[];\n rows: Record<string, string>[];\n} {\n const lines = text.split(\"\\n\");\n if (lines.length === 0) return { headers: [], rows: [] };\n\n // Auto-detect delimiter: if first line has tabs, treat as TSV\n const firstLine = lines[0] ?? \"\";\n const delimiter = firstLine.includes(\"\\t\") ? \"\\t\" : \",\";\n\n function parseLine(line: string): string[] {\n const fields: string[] = [];\n let current = \"\";\n let inQuotes = false;\n let i = 0;\n\n while (i < line.length) {\n const char = line[i]!;\n if (inQuotes) {\n if (char === '\"') {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n current += '\"';\n i += 2;\n } else {\n inQuotes = false;\n i++;\n }\n } else {\n current += char;\n i++;\n }\n } else {\n if (char === '\"') {\n inQuotes = true;\n i++;\n } else if (char === delimiter) {\n fields.push(current.trim());\n current = \"\";\n i++;\n } else {\n current += char;\n i++;\n }\n }\n }\n fields.push(current.trim());\n return fields;\n }\n\n const headers = parseLine(firstLine);\n const rows: Record<string, string>[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i]!;\n if (line.trim() === \"\") continue;\n const values = parseLine(line);\n const row: Record<string, string> = {};\n for (let j = 0; j < headers.length; j++) {\n row[headers[j]!] = values[j] ?? \"\";\n }\n rows.push(row);\n }\n\n return { headers, rows };\n}\n\n/**\n * CsvRenderer\n *\n * Parses CSV/TSV content and renders it in a DataGrid\n * with sorting, filtering, resizable columns, and virtualization.\n */\nexport function CsvRenderer({ content, className }: FileRendererProps) {\n const { headers, rows } = React.useMemo(\n () => parseCSV(content ?? \"\"),\n [content],\n );\n\n const columns = React.useMemo<ColumnDef<Record<string, string>>[]>(\n () =>\n headers.map((header) => ({\n key: header,\n header,\n sortable: true,\n filterable: true,\n filterType: \"text\" as const,\n })),\n [headers],\n );\n\n if (headers.length === 0) {\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center text-sm text-muted-foreground\",\n className,\n )}\n >\n No CSV data to display\n </div>\n );\n }\n\n return (\n <div className={cn(\"h-full w-full overflow-auto\", className)}>\n <DataGrid\n data={rows}\n columns={columns}\n getRowKey={(_, index) => String(index)}\n resizableColumns\n />\n </div>\n );\n}\n\nCsvRenderer.displayName = \"CsvRenderer\";\n","import * as React from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport type { FileRendererProps } from \"../types\";\n\n/**\n * Strict CSP applied at two layers:\n *\n * 1. `csp` attribute on the <iframe> — browser-enforced, cannot be\n * overridden or loosened by anything inside the document.\n * (Supported in Chromium-based browsers.)\n *\n * 2. <meta http-equiv=\"Content-Security-Policy\"> in the <head> of the\n * srcdoc — fallback for browsers that don't support the `csp` attr.\n * Safe from injection: content is placed in <body>, and per the\n * HTML5 spec CSP meta tags are only honoured in <head>. Multiple\n * CSP policies are additive (can only restrict, never loosen).\n */\nconst CSP_POLICY = [\n \"default-src 'none'\",\n \"script-src 'unsafe-inline'\",\n \"style-src 'unsafe-inline'\",\n \"img-src data: blob:\",\n].join(\"; \");\n\n/**\n * All Permissions-Policy features explicitly denied. Prevents sandboxed\n * content from accessing device APIs even if a future browser grants\n * them by default.\n */\nconst PERMISSIONS_POLICY = [\n \"camera=()\",\n \"microphone=()\",\n \"geolocation=()\",\n \"payment=()\",\n \"usb=()\",\n \"clipboard-read=()\",\n \"clipboard-write=()\",\n \"display-capture=()\",\n \"fullscreen=()\",\n \"autoplay=()\",\n \"web-share=()\",\n \"screen-wake-lock=()\",\n \"xr-spatial-tracking=()\",\n \"magnetometer=()\",\n \"gyroscope=()\",\n \"accelerometer=()\",\n].join(\", \");\n\nfunction buildSandboxedHtml(content: string): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv=\"Content-Security-Policy\" content=\"${CSP_POLICY}\">\n<script>\n// Neutralise APIs that the sandbox + CSP can't fully block.\n// This runs in <head> before any user content in <body>.\n// Uses Object.defineProperty to make overrides non-configurable\n// so user scripts cannot restore the original via prototype tricks.\n(function(){\n // postMessage: iframe can message parent even without allow-same-origin.\n // Kill it so content can't probe or spam any future parent listeners.\n // Also kill parent/top refs as an extra layer.\n var noop = function(){};\n try { Object.defineProperty(window, 'postMessage', { value: noop, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'parent', { value: window, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'top', { value: window, writable: false, configurable: false }); } catch(e) {}\n try { Object.defineProperty(window, 'opener', { value: null, writable: false, configurable: false }); } catch(e) {}\n\n // RTCPeerConnection: not governed by CSP; could contact a STUN server\n // over UDP to leak the user's IP. Kill all browser-prefixed variants.\n var rtcNames = ['RTCPeerConnection', 'webkitRTCPeerConnection', 'mozRTCPeerConnection'];\n for (var i = 0; i < rtcNames.length; i++) {\n try { Object.defineProperty(window, rtcNames[i], { value: undefined, writable: false, configurable: false }); } catch(e) {}\n }\n})();\n</script>\n</head>\n<body>${content}</body>\n</html>`;\n}\n\n/**\n * HtmlRenderer\n *\n * Renders HTML content in a triple-locked iframe:\n *\n * Layer 1 — `sandbox=\"allow-scripts\"` (no allow-same-origin):\n * Opaque origin. No access to parent DOM, cookies, localStorage,\n * sessionStorage, or IndexedDB. No form submission, popups,\n * top-navigation, or pointer-lock.\n *\n * Layer 2 — Content-Security-Policy (iframe `csp` attr + meta fallback):\n * Blocks ALL network requests (fetch, XHR, WebSocket, sendBeacon,\n * image pings, external scripts/styles/fonts). Only inline scripts,\n * inline styles, and data:/blob: images are allowed.\n *\n * Layer 3 — Permissions-Policy via `allow` attribute:\n * Explicitly denies every device/sensor API (camera, microphone,\n * geolocation, payment, USB, display-capture, etc.).\n *\n * Additional hardening:\n * - referrerpolicy=\"no-referrer\" — no URL leakage to embedded content\n */\nexport function HtmlRenderer({\n content,\n fileName,\n className,\n}: FileRendererProps) {\n const srcDoc = React.useMemo(\n () => buildSandboxedHtml(content ?? \"\"),\n [content],\n );\n\n // The `csp` attribute is a valid HTML attribute for iframes (enforces CSP\n // at the browser level, cannot be overridden by document content) but is\n // not yet in React's type definitions. We spread it to avoid a TS error.\n const iframeProps = { csp: CSP_POLICY } as React.IframeHTMLAttributes<HTMLIFrameElement>;\n\n return (\n <iframe\n srcDoc={srcDoc}\n sandbox=\"allow-scripts\"\n title={fileName}\n referrerPolicy=\"no-referrer\"\n allow={PERMISSIONS_POLICY}\n className={cn(\"h-full w-full border-0\", className)}\n {...iframeProps}\n />\n );\n}\n\nHtmlRenderer.displayName = \"HtmlRenderer\";\n","import type { RendererRegistry, FileRenderer } from \"../types\";\nimport { CodeRenderer } from \"../components/CodeRenderer\";\nimport { MarkdownRenderer } from \"../components/MarkdownRenderer\";\nimport { ImageRenderer } from \"../components/ImageRenderer\";\nimport { PlainTextRenderer } from \"../components/PlainTextRenderer\";\nimport { CsvRenderer } from \"../components/CsvRenderer\";\nimport { HtmlRenderer } from \"../components/HtmlRenderer\";\n\n/**\n * Default renderer registry.\n * Maps built-in content types to their default renderer components.\n */\nexport const DEFAULT_RENDERERS: RendererRegistry = {\n code: CodeRenderer,\n markdown: MarkdownRenderer,\n image: ImageRenderer,\n plaintext: PlainTextRenderer,\n csv: CsvRenderer,\n html: HtmlRenderer,\n};\n\n/**\n * Merge user-provided renderers with defaults.\n * User renderers override defaults for the same content type.\n */\nexport function mergeRenderers(\n userRenderers?: RendererRegistry,\n): RendererRegistry {\n if (!userRenderers) return DEFAULT_RENDERERS;\n return { ...DEFAULT_RENDERERS, ...userRenderers };\n}\n\n/**\n * Resolve a renderer for a given content type.\n * Falls back to PlainTextRenderer if no match found.\n */\nexport function resolveRenderer(\n registry: RendererRegistry,\n contentType: string,\n): FileRenderer {\n return registry[contentType] ?? registry[\"plaintext\"] ?? PlainTextRenderer;\n}\n","import * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useContentType } from \"./hooks/useContentType\";\nimport { mergeRenderers, resolveRenderer } from \"./utils/rendererRegistry\";\nimport type { FileViewProps, FileViewError, RendererRegistry } from \"./types\";\n\nfunction DefaultEmptyState({ message }: { message: string }) {\n return (\n <div className=\"flex h-full w-full items-center justify-center text-sm text-muted-foreground\">\n {message}\n </div>\n );\n}\n\nfunction DefaultLoadingState() {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-primary/20 border-t-primary\" />\n <p className=\"text-sm text-muted-foreground\">Loading file...</p>\n </div>\n </div>\n );\n}\n\nfunction DefaultErrorState({ error }: { error: FileViewError }) {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <div className=\"flex max-w-sm flex-col items-center gap-3 text-center\">\n <p className=\"text-sm font-medium text-destructive\">{error.message}</p>\n {error.onRetry && (\n <button\n onClick={error.onRetry}\n className={cn(\n \"rounded-md border border-border bg-background px-3 py-1.5 text-sm text-foreground\",\n \"transition-colors hover:bg-muted\",\n )}\n >\n Retry\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * FileView\n *\n * A configurable file viewer that detects content type from the file name\n * and delegates rendering to a pluggable renderer system.\n *\n * Built-in renderers: Code, Markdown, Image, PlainText.\n * Users can override any renderer or add custom ones via the `renderers` prop.\n *\n * @example\n * <FileView fileName=\"app.tsx\" content={sourceCode} />\n *\n * @example\n * <FileView fileName=\"photo.png\" content={null} url={imageUrl} />\n *\n * @example\n * <FileView\n * fileName=\"data.txt\"\n * content={jsonContent}\n * contentType=\"code\"\n * renderers={{ code: MyCustomCodeRenderer }}\n * />\n */\nexport function FileView({\n content,\n url = null,\n fileName,\n contentType: contentTypeOverride,\n renderers: userRenderers,\n loading = false,\n error = null,\n loadingComponent,\n emptyComponent,\n emptyMessage = \"No content to display\",\n errorComponent: ErrorComponent,\n className,\n rendererClassName,\n resolveImageUrl,\n}: FileViewProps) {\n const { type: resolvedType } = useContentType({\n fileName,\n contentTypeOverride,\n });\n\n const registry = React.useMemo<RendererRegistry>(\n () => mergeRenderers(userRenderers),\n [userRenderers],\n );\n\n const Renderer = React.useMemo(\n () => resolveRenderer(registry, resolvedType),\n [registry, resolvedType],\n );\n\n // Loading state\n if (loading) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {loadingComponent ?? <DefaultLoadingState />}\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {ErrorComponent ? (\n <ErrorComponent error={error} />\n ) : (\n <DefaultErrorState error={error} />\n )}\n </div>\n );\n }\n\n // Empty state\n if ((content == null || content === \"\") && url == null) {\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n {emptyComponent ?? <DefaultEmptyState message={emptyMessage} />}\n </div>\n );\n }\n\n // Render\n return (\n <div className={cn(\"relative h-full w-full\", className)}>\n <Renderer\n content={content}\n url={url ?? null}\n fileName={fileName}\n contentType={resolvedType}\n className={rendererClassName}\n resolveImageUrl={resolveImageUrl}\n />\n </div>\n );\n}\n\nFileView.displayName = \"FileView\";\n","import { forwardRef, useId } from \"react\";\n\nexport interface OptilogicLogoProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Override the green gradient with a solid color. Pass `\"currentColor\"` to inherit from CSS. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const OptilogicLogo = forwardRef<SVGSVGElement, OptilogicLogoProps>(\n ({ color, size, width, height, ...props }, ref) => {\n const uid = useId();\n const w = size ?? width ?? 32;\n const h = size ?? height ?? 32;\n const useGradient = !color;\n\n const fill = (idx: number) =>\n useGradient ? `url(#${uid}-g${idx})` : color;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 44 44\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"m 19.710153,24.886531 -0.018,-0.0332 -13.0194005,8.2119 17.2811005,-0.0485 -4.2451,-8.1302 z\"\n fill={fill(0)}\n />\n <path\n d=\"m 31.367953,26.996531 7.3048,-4.2341 -7.334,-12.652796 -7.3048,4.2341 z\"\n fill={fill(1)}\n />\n <path\n d=\"m 19.257253,24.563831 -3.8352,-6.752096 -8.7493005,15.254896 13.0942005,-7.6094 c -0.1597,-0.3029 -0.3297,-0.6007 -0.5097,-0.8934 z\"\n fill={fill(2)}\n />\n <path\n d=\"m 24.393053,23.112531 c -1.0221,-1.9514 -2.5557,-3.587996 -4.4365,-4.734696 -1.8808,-1.1467 -4.0381,-1.7602 -6.2408,-1.775 l 4.8033,8.455596 c 0.1745,0.2844 0.3398,0.5753 0.4959,0.8726 l 5.0969,8.9751 c 1.0457,-1.7798 1.6202,-3.7968 1.6694,-5.8604 0.0492,-2.0636 -0.4286,-4.1057 -1.3882,-5.9332 z\"\n fill={fill(3)}\n />\n {useGradient && (\n <defs>\n <linearGradient id={`${uid}-g0`} x1=\"-10.349\" y1=\"21.971\" x2=\"7.45\" y2=\"21.971\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.016\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.308\" stopColor=\"#36D87A\" />\n <stop offset=\"0.578\" stopColor=\"#20C75F\" />\n <stop offset=\"0.817\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g1`} x1=\"-590.283\" y1=\"3567.46\" x2=\"-597.588\" y2=\"3571.69\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0EBA49\" />\n <stop offset=\"0.031\" stopColor=\"#11BC4D\" />\n <stop offset=\"0.315\" stopColor=\"#30D371\" />\n <stop offset=\"0.58\" stopColor=\"#46E38C\" />\n <stop offset=\"0.816\" stopColor=\"#53ED9C\" />\n <stop offset=\"1\" stopColor=\"#58F1A2\" />\n </linearGradient>\n <linearGradient id={`${uid}-g2`} x1=\"-10.35\" y1=\"18.453\" x2=\"7.38\" y2=\"18.453\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.184\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.685\" stopColor=\"#30D371\" />\n <stop offset=\"0.969\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g3`} x1=\"8.369\" y1=\"24.711\" x2=\"26.243\" y2=\"24.711\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.184\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.685\" stopColor=\"#30D371\" />\n <stop offset=\"0.969\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n );\n }\n);\n\nOptilogicLogo.displayName = \"OptilogicLogo\";\n","import { forwardRef, useId } from \"react\";\n\nexport interface OptilogicLogoWithTextProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Override the green gradient on the icon with a solid color. */\n color?: string;\n /** Override the text fill. Defaults to `\"currentColor\"`. */\n textColor?: string;\n /** Shorthand for setting height (width scales proportionally at ~3:1). */\n size?: number | string;\n}\n\nexport const OptilogicLogoWithText = forwardRef<\n SVGSVGElement,\n OptilogicLogoWithTextProps\n>(({ color, textColor = \"currentColor\", size, width, height, ...props }, ref) => {\n const uid = useId();\n const h = size ?? height ?? 35;\n const w = width ?? (typeof h === \"number\" ? Math.round((h as number) * (102 / 35)) : 102);\n const useGradient = !color;\n\n const iconFill = (idx: number) =>\n useGradient ? `url(#${uid}-g${idx})` : color;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 102 35\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n {/* Icon mark */}\n <path d=\"M87.8887 8.94166L87.9811 9.12063L87.7877 8.76953C87.8258 8.81696 87.8588 8.87662 87.8887 8.94166Z\" fill={iconFill(0)} />\n <path d=\"M87.9808 9.11386L87.7872 8.76282L87.6158 8.45508C87.6774 8.55543 87.7358 8.65573 87.7938 8.75874C87.8253 8.81704 87.8583 8.87665 87.8883 8.93494L87.9808 9.11386Z\" fill={iconFill(1)} />\n <path d=\"M93.0335 2.12149L91.0895 3.27987C90.4698 3.64931 90.2588 4.46544 90.6177 5.10275L93.5225 10.2545C93.8819 10.8918 94.6755 11.109 95.2957 10.7395L97.2391 9.58114C97.8588 9.21171 98.0703 8.39559 97.7109 7.75827L94.8061 2.60653C94.4467 1.96921 93.6532 1.75205 93.0335 2.12149Z\" fill={iconFill(2)} />\n <path d=\"M79.4231 14.3186L84.3908 5.41699L86.529 9.28695L86.9077 9.96469L87.0633 10.2467L87.2412 10.5665L87.2529 10.5883L90.0601 15.6768L80.2116 15.7039C80.0535 15.7051 79.8974 15.6634 79.7597 15.583C79.6224 15.5025 79.5075 15.3862 79.4277 15.2457C79.3479 15.1052 79.3052 14.9456 79.3047 14.7828C79.3037 14.62 79.3449 14.4599 79.4231 14.3186Z\" fill={iconFill(3)} />\n <path d=\"M91.9324 13.4257C91.9171 13.5856 91.8988 13.7456 91.877 13.9056C91.8612 14.0113 91.8439 14.117 91.8241 14.2228C91.8043 14.3285 91.7844 14.4355 91.7611 14.5399C91.7372 14.6443 91.7123 14.7486 91.6858 14.853C91.6594 14.9574 91.6304 15.0631 91.5999 15.1661C91.5592 15.3017 91.5145 15.4373 91.4682 15.5728C91.422 15.7084 91.3681 15.8439 91.3142 15.9794C91.2771 16.0703 91.239 16.1571 91.2003 16.2506V16.2587C91.1653 16.3358 91.1098 16.4014 91.0407 16.4484C90.9716 16.4954 90.8907 16.5218 90.8079 16.5249C90.725 16.5279 90.6432 16.5075 90.5705 16.4658C90.4983 16.4241 90.4383 16.3628 90.3976 16.2885L90.0616 15.6785L87.256 10.5995C87.256 10.5927 87.256 10.5845 87.2453 10.5778L87.1609 10.4151C87.1335 10.3609 87.1029 10.3067 87.074 10.2538C87.0211 10.1603 86.9672 10.0681 86.9118 9.98269L86.5336 9.30494L84.3914 5.41738L83.9704 4.65422C83.9293 4.5799 83.9089 4.49533 83.9115 4.40982C83.914 4.32431 83.9394 4.24116 83.9847 4.16955C84.0304 4.09794 84.0945 4.04062 84.1692 4.00392C84.2444 3.96723 84.3283 3.95257 84.4107 3.96156C85.7934 4.11436 87.1177 4.61474 88.2671 5.41853C89.417 6.22228 90.3564 7.30472 91.0026 8.57025C91.1642 8.88468 91.3061 9.20929 91.4276 9.54216C91.4881 9.70619 91.5435 9.87429 91.5948 10.041C91.6106 10.0939 91.6253 10.1467 91.6396 10.1982C91.6843 10.3568 91.7239 10.5154 91.7611 10.6754C91.9598 11.5769 92.0178 12.5054 91.9324 13.4257Z\" fill={iconFill(4)} />\n <path d=\"M87.1593 10.4138C87.1289 10.3609 87.101 10.3067 87.0711 10.2538C87.0183 10.1589 86.9656 10.0668 86.9103 9.97461C86.9656 10.0668 87.0198 10.1589 87.0721 10.2457C87.0944 10.3053 87.1248 10.3596 87.1593 10.4138Z\" fill={iconFill(5)} />\n\n {/* \"optilogic\" text */}\n <path d=\"M16.9243 20.9745C16.9243 25.6035 13.6033 29.5561 8.46292 29.5561C3.32258 29.5561 0.00289826 25.6035 0.00289826 20.9745C-0.0434 18.7389 0.775929 16.576 2.28065 14.9615C3.78537 13.3471 5.85223 12.4133 8.02654 12.3657C8.17158 12.3657 8.31661 12.3657 8.46292 12.3657C10.6366 12.294 12.7488 13.1131 14.3351 14.6426C15.9214 16.1721 16.8518 18.2869 16.9217 20.5217C16.9256 20.6749 16.9269 20.824 16.9243 20.9745ZM3.6179 20.9745C3.6179 24.1314 5.59546 26.3056 8.46292 26.3056C11.3304 26.3056 13.3093 24.1368 13.3093 20.9745C13.3093 17.8121 11.3317 15.6175 8.46424 15.6175C5.59678 15.6175 3.6179 17.8175 3.6179 20.9745Z\" fill={textColor} />\n <path d=\"M30.774 23.8266C30.774 27.0541 28.4998 29.5563 25.5004 29.5563C24.4662 29.56 23.4594 29.2147 22.6343 28.5736V34.1162H19.2065V18.4723H21.8683L22.2968 19.4077C23.1653 18.5707 24.3141 18.1099 25.5044 18.1213C28.4998 18.1213 30.774 20.5991 30.774 23.8266ZM22.6317 23.8266C22.6317 25.3001 23.4965 26.6095 24.9744 26.6095C26.4523 26.6095 27.3172 25.3001 27.3172 23.8266C27.3172 22.3532 26.4536 21.0654 24.9744 21.0654C23.4952 21.0654 22.6317 22.3532 22.6317 23.8266Z\" fill={textColor} />\n <path d=\"M41.148 18.4718V21.4186H37.5739V24.9958C37.5739 26.0246 38.4374 26.5154 39.4196 26.1412L40.2107 25.8376L41.235 28.6435L40.2107 29.0854C37.3458 30.3473 34.1382 29.0393 34.1382 25.0406V21.4186H31.4553V18.4718H34.1395V15.083H37.5673V18.4718H41.148Z\" fill={textColor} />\n <path d=\"M46.9673 14.8024C46.9673 15.1778 46.8591 15.5447 46.6563 15.8567C46.4535 16.1688 46.1652 16.4121 45.8279 16.5557C45.4907 16.6993 45.1195 16.7369 44.7615 16.6637C44.4035 16.5905 44.0746 16.4097 43.8165 16.1443C43.5584 15.8789 43.3826 15.5408 43.3113 15.1727C43.2401 14.8045 43.2767 14.423 43.4164 14.0762C43.5561 13.7295 43.7927 13.4331 44.0962 13.2246C44.3997 13.016 44.7566 12.9047 45.1216 12.9047C45.3591 12.8995 45.5953 12.9425 45.8166 13.0312C46.0379 13.1199 46.2401 13.2525 46.4115 13.4216C46.5829 13.5907 46.7202 13.7928 46.8156 14.0165C46.911 14.2402 46.9625 14.481 46.9673 14.7252V14.8024ZM43.4196 29.2074V18.4718H46.8473V29.2047L43.4196 29.2074Z\" fill={textColor} />\n <path d=\"M49.5854 29.2044V12.7188H53.0133V29.2044H49.5854Z\" fill={textColor} />\n <path d=\"M66.7762 23.8518C66.7762 26.9844 64.5018 29.5571 60.9753 29.5571C57.4483 29.5571 55.1744 26.9817 55.1744 23.8518C55.1744 20.7219 57.4483 18.1221 60.9753 18.1221C64.5018 18.1221 66.7762 20.7165 66.7762 23.8518ZM58.6338 23.8518C58.6338 25.3713 59.5209 26.6116 60.9763 26.6116C62.4317 26.6116 63.3193 25.3727 63.3193 23.8518C63.3193 22.3309 62.4317 21.0689 60.9763 21.0689C59.5209 21.0689 58.6338 22.3295 58.6338 23.8518Z\" fill={textColor} />\n <path d=\"M76.5321 19.4068L76.9617 18.4715H79.6224V28.9468C79.6224 31.6836 77.9626 34.8867 73.6619 34.8867C70.5228 34.8867 68.4085 33.0391 68.0222 30.0068L71.2294 29.4457C71.3204 30.9652 72.1841 31.9479 73.7768 31.9479C75.5738 31.9479 76.164 30.5667 76.164 29.3521V28.0427C75.3273 28.6367 74.3334 28.9526 73.3167 28.9482C71.9203 28.9482 70.5807 28.3778 69.5935 27.3625C68.6057 26.3472 68.0511 24.9702 68.0511 23.5343C68.0511 22.0984 68.6057 20.7214 69.5935 19.7061C70.5807 18.6908 71.9203 18.1204 73.3167 18.1204C74.5098 18.107 75.6618 18.5678 76.5321 19.4068ZM71.5064 23.5221C71.5156 23.9966 71.661 24.4578 71.9238 24.8477C72.1871 25.2376 72.5562 25.539 72.9853 25.7139C73.4143 25.8888 73.8846 25.9294 74.336 25.8307C74.7874 25.7321 75.2002 25.4985 75.523 25.1593C75.8463 24.82 76.0644 24.3903 76.1503 23.9241C76.2367 23.4578 76.1869 22.9758 76.0075 22.5385C75.828 22.1012 75.5271 21.7282 75.1422 21.4662C74.7569 21.2042 74.3055 21.0649 73.8439 21.0659C73.5399 21.0618 73.2384 21.1193 72.9563 21.235C72.6742 21.3509 72.4169 21.5227 72.1993 21.7407C71.9818 21.9587 71.8084 22.2187 71.6884 22.5057C71.5685 22.7928 71.5049 23.1013 71.5014 23.4137C71.5039 23.4448 71.5049 23.4855 71.5064 23.5221Z\" fill={textColor} />\n <path d=\"M82.4911 29.2048V18.4746H85.9281V29.2075L82.4911 29.2048Z\" fill={textColor} />\n <path d=\"M98.8928 22.0489L95.7288 22.774C95.6388 22.2871 95.3841 21.8486 95.0099 21.5362C94.6358 21.2239 94.1661 21.0578 93.6841 21.0675C92.5698 21.0675 91.4321 21.9553 91.4321 23.8503C91.4321 25.7453 92.5698 26.6101 93.6841 26.6101C94.1661 26.6201 94.6358 26.4541 95.0104 26.1417C95.3846 25.8293 95.6393 25.3906 95.7288 24.9036L98.8928 25.6287C98.5969 26.7867 97.9269 27.8067 96.9925 28.5211C96.0582 29.2355 94.9149 29.6018 93.7512 29.5597C90.272 29.5597 87.9742 26.9409 87.9742 23.8544C87.9697 23.1054 88.1089 22.3628 88.3835 21.6691C88.658 20.9754 89.0626 20.344 89.5751 19.8112C90.087 19.2784 90.696 18.8545 91.3675 18.5637C92.0386 18.2729 92.7589 18.121 93.4874 18.1165C93.5748 18.1165 93.6628 18.1165 93.7512 18.1165C94.9154 18.0745 96.0582 18.441 96.9931 19.1557C97.9274 19.8703 98.5974 20.8907 98.8928 22.0489Z\" fill={textColor} />\n\n {useGradient && (\n <defs>\n <linearGradient id={`${uid}-g0`} x1=\"87.5964\" y1=\"8.93628\" x2=\"87.7953\" y2=\"8.93628\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g1`} x1=\"87.1426\" y1=\"8.7845\" x2=\"87.6357\" y2=\"8.7845\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.18\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.69\" stopColor=\"#30D371\" />\n <stop offset=\"0.97\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g2`} x1=\"-1054.89\" y1=\"692.801\" x2=\"-1059.13\" y2=\"695.193\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#0EBA49\" />\n <stop offset=\"0.03\" stopColor=\"#11BC4D\" />\n <stop offset=\"0.32\" stopColor=\"#30D371\" />\n <stop offset=\"0.58\" stopColor=\"#46E38C\" />\n <stop offset=\"0.82\" stopColor=\"#53ED9C\" />\n <stop offset=\"1\" stopColor=\"#58F1A2\" />\n </linearGradient>\n <linearGradient id={`${uid}-g3`} x1=\"79.3032\" y1=\"10.5625\" x2=\"90.0545\" y2=\"10.5625\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g4`} x1=\"83.9074\" y1=\"10.2429\" x2=\"91.969\" y2=\"10.2429\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.02\" stopColor=\"#56EF9F\" />\n <stop offset=\"0.31\" stopColor=\"#36D87A\" />\n <stop offset=\"0.58\" stopColor=\"#20C75F\" />\n <stop offset=\"0.82\" stopColor=\"#12BD4E\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n <linearGradient id={`${uid}-g5`} x1=\"86.7936\" y1=\"10.1942\" x2=\"87.1619\" y2=\"10.1942\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#58F1A2\" />\n <stop offset=\"0.18\" stopColor=\"#53ED9C\" />\n <stop offset=\"0.42\" stopColor=\"#46E38C\" />\n <stop offset=\"0.69\" stopColor=\"#30D371\" />\n <stop offset=\"0.97\" stopColor=\"#11BC4D\" />\n <stop offset=\"1\" stopColor=\"#0EBA49\" />\n </linearGradient>\n </defs>\n )}\n </svg>\n );\n});\n\nOptilogicLogoWithText.displayName = \"OptilogicLogoWithText\";\n","import { forwardRef } from \"react\";\n\nexport interface CosmicFrogIconProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Icon fill color. Defaults to `\"currentColor\"` for theme compatibility. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const CosmicFrogIcon = forwardRef<SVGSVGElement, CosmicFrogIconProps>(\n ({ color = \"currentColor\", size, width, height, ...props }, ref) => {\n const w = size ?? width ?? 24;\n const h = size ?? height ?? 24;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 300 286.9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M189.4,277.9l0-0.7c0-2.3,1.3-4.4,3.5-5.2c5.9-2.2,9.2-9.9,4.9-16.1c-6.2-9-20.2-28.4-25.3-35.3 c0,0,6-9.4,13.2-19.5c5.8,6.9,36.2,46.7,45.7,58.4c6.8,8.3,20.3,11.9,29.5,12.9c2.9,0.3,5.1,2.8,5,5.7v0c0,3.2-2.6,5.7-5.7,5.7 h-65.2C192,283.6,189.4,281.1,189.4,277.9z\"\n fill={color}\n />\n <path\n d=\"M214.5,154.3c9.1-9.5,29.6-47.6,19.9-65c-7.6-13.7-26-11.9-48.7-3.1c-1.5,0.6-2.5,2.1-2.3,3.6 c0.9,10.5-6,20.9-17.3,25.8c-13.8,6-29.2,1.2-34.5-11.2c-4.2-9.8-2.9-20.5,2.5-28.3c0.7-1-0.5-2.2-1.5-1.6 c-9.3,6.1-15.5,16.7-15.5,28.7c0,6.1,1.6,11.8,4.4,16.7c-31.6,21.4-48.6,48-55.3,59.6c-7.4,12.8-7.5,29.9-7.5,34.2 c0,0-5.2-8.1-10.5-17.6c-1.9-3.4-5.4-7.9-12-3c-8.8,6.6-27.6,29.3-31.7,57c-2.9,19.8,6.7,33.4,18.8,33.4h33.9c3,0,5.4-2.4,5.5-5.4 l0-1c0-2.5-1.6-4.6-3.9-5.3c-12.7-3.9-17.8-26.3-15.2-38c7.2,9.7,10.7,14.8,24.7,27.7c9.6,8.8,20.2,4.2,23.6-2.5 c5.7-11.3,8.7-24.3,12-35.3c1.4,5.1,6.8,22.2,6.8,30.3c0,7.1-2.9,16-10.2,18.3c-2.3,0.7-3.9,2.8-3.9,5.2l0,0.5 c0,3.1,2.5,5.5,5.5,5.5h59.7c2.6,0,5.1-1.7,5.7-4.3c0.8-3.3-1.4-6.3-4.6-6.8c-9.4-1.6-24.3-7.3-27.4-17c-4.5-14-14.5-55-15.2-60.4 l14.4,15.3c9.9-17.1,40.6-67.7,64.3-92.6c23.7-25,29.2-9.6,25.6,4.2C221.7,133.6,217.9,146.9,214.5,154.3z\"\n fill={color}\n />\n <path\n d=\"M269,19.7l3.5,12.1c1.3,4.4,4.7,7.8,9.1,9.1l12.1,3.5c2.9,0.9,2.9,5,0,5.8l-12.1,3.5c-4.4,1.3-7.8,4.7-9.1,9.1 L269,75c-0.9,2.9-5,2.9-5.8,0l-3.5-12.1c-1.3-4.4-4.7-7.8-9.1-9.1l-12.1-3.5c-2.9-0.9-2.9-5,0-5.8l12.1-3.5 c4.4-1.3,7.8-4.7,9.1-9.1l3.5-12.1C264,16.7,268.2,16.7,269,19.7z\"\n fill={color}\n />\n <path\n d=\"M185.3,4.6l2.2,7.5c0.8,2.7,2.9,4.8,5.6,5.6l7.5,2.2c1.8,0.5,1.8,3.1,0,3.6l-7.5,2.2c-2.7,0.8-4.8,2.9-5.6,5.6 l-2.2,7.5c-0.5,1.8-3.1,1.8-3.6,0l-2.2-7.5c-0.8-2.7-2.9-4.8-5.6-5.6l-7.5-2.2c-1.8-0.5-1.8-3.1,0-3.6l7.5-2.2 c2.7-0.8,4.8-2.9,5.6-5.6l2.2-7.5C182.2,2.8,184.8,2.8,185.3,4.6z\"\n fill={color}\n />\n <path\n d=\"M274.3,131.6l2.2,7.7c0.8,2.8,3,5,5.8,5.8l7.7,2.2c1.9,0.5,1.9,3.2,0,3.7l-7.7,2.2c-2.8,0.8-5,3-5.8,5.8 l-2.2,7.7c-0.5,1.9-3.2,1.9-3.7,0l-2.2-7.7c-0.8-2.8-3-5-5.8-5.8l-7.7-2.2c-1.9-0.5-1.9-3.2,0-3.7l7.7-2.2c2.8-0.8,5-3,5.8-5.8 l2.2-7.7C271.1,129.8,273.7,129.8,274.3,131.6z\"\n fill={color}\n />\n <ellipse\n transform=\"matrix(0.7071 -0.7071 0.7071 0.7071 -11.8631 139.9984)\"\n cx=\"163.1\"\n cy=\"84.3\"\n rx=\"10.2\"\n ry=\"16.5\"\n fill={color}\n />\n </svg>\n );\n }\n);\n\nCosmicFrogIcon.displayName = \"CosmicFrogIcon\";\n","import { forwardRef } from \"react\";\n\nexport interface DataStarIconProps\n extends Omit<React.SVGProps<SVGSVGElement>, \"color\"> {\n /** Icon fill color. Defaults to `\"currentColor\"` for theme compatibility. */\n color?: string;\n /** Shorthand for width and height. */\n size?: number | string;\n}\n\nexport const DataStarIcon = forwardRef<SVGSVGElement, DataStarIconProps>(\n ({ color = \"currentColor\", size, width, height, ...props }, ref) => {\n const w = size ?? width ?? 24;\n const h = size ?? height ?? 24;\n\n return (\n <svg\n ref={ref}\n width={w}\n height={h}\n viewBox=\"0 0 31 29\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M26.9476 14.2775C30.1992 9.06819 30.9839 4.11351 28.4804 1.69452C25.9768 -0.724468 20.8494 0.0323405 15.4592 3.17632C9.90111 -0.190461 4.5547 -1.06752 1.98551 1.40805C-0.583687 3.88363 0.295825 8.9727 3.68979 14.2775C0.0622617 19.7379 -0.912135 25.0321 1.7045 27.5607C4.32114 30.0893 9.79893 29.1486 15.4519 25.6439C20.9479 28.9258 26.2104 29.7534 28.7577 27.2919C31.305 24.8305 30.4328 19.6424 26.9476 14.2775ZM27.4074 3.96143C28.4767 5.84641 27.7724 9.03282 25.736 12.5446C24.5761 10.9981 23.2924 9.54244 21.8968 8.19113C23.5104 6.54516 25.3528 5.12513 27.3709 3.97204L27.4074 3.96143ZM24.6193 14.2987C23.4165 16.0228 22.0545 17.6374 20.5501 19.1226C19.5977 18.0439 18.9371 17.1775 18.6707 16.8132C17.7036 14.9494 17.7328 13.6303 18.7619 11.7418C19.1524 11.2361 19.7619 10.4757 20.5501 9.61989C22.0448 11.0668 23.4052 12.6384 24.6156 14.3164L24.6193 14.2987ZM25.7141 2.55036C24.5163 4.44516 23.0632 6.17683 21.3932 7.69955C20.0996 6.48666 18.7191 5.36399 17.262 4.33984C20.6414 2.49377 23.7434 1.79 25.7287 2.54682L25.7141 2.55036ZM19.9334 8.99392C18.7291 10.0018 17.7437 10.695 17.3788 10.9567C15.4592 11.8338 14.0943 11.7135 12.0178 10.603L11.9192 10.5606C11.5069 10.2529 10.9996 9.8533 10.4376 9.39355C11.9782 7.93165 13.6515 6.60719 15.4373 5.43617C17.0317 6.50371 18.5353 7.69343 19.9334 8.99392ZM11.609 16.3994C11.4667 16.5975 10.8098 17.4993 9.76611 18.6911C8.40065 17.3248 7.15322 15.8522 6.03638 14.2881C7.15586 12.7784 8.39558 11.3559 9.74418 10.0337C10.9376 11.3952 11.6346 12.389 11.6346 12.389C11.951 13.0138 12.1134 13.7012 12.109 14.3971C12.1045 15.0931 11.9334 15.7785 11.609 16.3994ZM13.6454 4.30094C11.9738 5.43758 10.4006 6.7043 8.9413 8.08857C7.11704 6.45833 5.54718 4.57962 4.28101 2.51146L4.24084 2.50085C6.2736 1.36562 9.79893 2.12244 13.6454 4.31155V4.30094ZM2.84313 4.13472C4.90738 5.37184 6.78411 6.88106 8.41947 8.61905C7.15181 9.86002 5.97733 11.1872 4.90507 12.5906C2.88327 9.21672 2.0804 6.14348 2.84313 4.14533V4.13472ZM4.87587 15.9963C5.95746 17.4555 7.14924 18.835 8.44136 20.1234C6.72159 21.949 4.73312 23.5184 2.54022 24.781C1.78844 22.7192 2.6935 19.4833 4.87587 16.0069V15.9963ZM4.00366 26.4892V26.4715C5.35389 24.2982 7.03309 22.3335 8.98512 20.6433C10.4334 22.0512 11.9995 23.3405 13.6673 24.4981C9.71502 26.811 6.06558 27.6421 4.00366 26.4998V26.4892ZM15.43 23.3664C13.6493 22.1829 11.9809 20.8479 10.4449 19.3772C11.2696 18.7088 11.9521 18.2137 12.3462 17.9378C14.171 17.0254 15.4519 16.9405 17.1671 17.6832C17.2438 17.7362 18.386 18.4966 19.886 19.7485C18.4975 21.0722 17.0026 22.2867 15.4154 23.3805L15.43 23.3664ZM17.2219 24.4627C18.6867 23.4156 20.0722 22.268 21.3676 21.0287C23.1328 22.6267 24.6552 24.4592 25.8893 26.4715C23.8383 27.1894 20.6633 26.4114 17.2219 24.4733V24.4627ZM27.6629 25.0569L27.6447 25.0286C25.5077 23.8079 23.5653 22.2926 21.8786 20.5301C23.3024 19.1424 24.6049 17.6425 25.7725 16.0458C28.0205 19.7238 28.8052 23.1188 27.6629 25.0675V25.0569Z\"\n fill={color}\n />\n </svg>\n );\n }\n);\n\nDataStarIcon.displayName = \"DataStarIcon\";\n"]}
|