@hilum/ui 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +4 -0
  2. package/dist/{chunk-MAHPAP65.js → chunk-RI6QJR2L.js} +6 -3
  3. package/dist/chunk-RI6QJR2L.js.map +1 -0
  4. package/dist/index.d.ts +789 -115
  5. package/dist/index.js +10404 -1099
  6. package/dist/index.js.map +1 -1
  7. package/dist/tokens.css +17 -0
  8. package/dist/tokens.d.ts +3 -0
  9. package/dist/tokens.js +1 -1
  10. package/llms.txt +18 -4
  11. package/package.json +19 -1
  12. package/src/components/accordion.tsx +746 -58
  13. package/src/components/alert-dialog.tsx +11 -5
  14. package/src/components/ask-user-questions.tsx +1366 -0
  15. package/src/components/badge.tsx +105 -24
  16. package/src/components/button.tsx +207 -38
  17. package/src/components/card.tsx +3 -2
  18. package/src/components/chat-message.tsx +116 -0
  19. package/src/components/checkbox-group.tsx +403 -0
  20. package/src/components/checkbox.tsx +6 -3
  21. package/src/components/color-input.tsx +3 -1
  22. package/src/components/color-picker.tsx +1992 -80
  23. package/src/components/dialog.tsx +141 -81
  24. package/src/components/dropdown-menu.tsx +21 -13
  25. package/src/components/dropdown.tsx +245 -0
  26. package/src/components/file-thumbnail.tsx +156 -0
  27. package/src/components/hover-card.tsx +2 -0
  28. package/src/components/input-copy.tsx +307 -0
  29. package/src/components/input-group.tsx +303 -108
  30. package/src/components/input-message.tsx +883 -0
  31. package/src/components/input.tsx +6 -3
  32. package/src/components/menu-item.tsx +156 -0
  33. package/src/components/mobile-drawer.tsx +50 -0
  34. package/src/components/nav-item.tsx +43 -0
  35. package/src/components/nav-menu.tsx +47 -0
  36. package/src/components/popover.tsx +3 -1
  37. package/src/components/radio-group.tsx +381 -35
  38. package/src/components/scroll-area.tsx +9 -2
  39. package/src/components/select.tsx +708 -121
  40. package/src/components/sheet.tsx +15 -6
  41. package/src/components/slider.tsx +1583 -20
  42. package/src/components/status-badge.tsx +2 -0
  43. package/src/components/switch.tsx +245 -28
  44. package/src/components/table.tsx +191 -77
  45. package/src/components/tabs-subtle.tsx +411 -0
  46. package/src/components/tabs.tsx +459 -49
  47. package/src/components/textarea.tsx +7 -3
  48. package/src/components/thinking-indicator.tsx +106 -0
  49. package/src/components/thinking-steps.tsx +382 -0
  50. package/src/components/tooltip.tsx +158 -33
  51. package/src/hooks/use-merge-split.tsx +359 -0
  52. package/src/hooks/use-proximity-hover.ts +208 -0
  53. package/src/index.ts +14 -0
  54. package/src/lib/elevated.tsx +52 -0
  55. package/src/lib/font-weight.ts +18 -0
  56. package/src/lib/icon-context.tsx +98 -0
  57. package/src/lib/icon-map.tsx +669 -0
  58. package/src/lib/interaction.ts +102 -0
  59. package/src/lib/scroll-fade.tsx +241 -0
  60. package/src/lib/shape-context.tsx +121 -0
  61. package/src/lib/springs.ts +30 -0
  62. package/src/lib/surface-classes.ts +43 -0
  63. package/src/lib/surface-context.tsx +17 -0
  64. package/src/tokens/tokens.ts +3 -0
  65. package/dist/chunk-MAHPAP65.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/lib/mobile-popper-sheet.ts","../src/components/dropdown-menu.tsx","../src/components/avatar.tsx","../src/components/account-menu.tsx","../src/components/accordion.tsx","../src/components/button.tsx","../src/components/action-panel.tsx","../src/components/activity-feed.tsx","../src/components/alert-dialog.tsx","../src/components/alert.tsx","../src/components/aspect-ratio.tsx","../src/components/avatar-stack.tsx","../src/components/badge.tsx","../src/components/breadcrumb.tsx","../src/components/button-group.tsx","../src/components/calendar.tsx","../src/components/callout.tsx","../src/components/card-heading.tsx","../src/components/card.tsx","../src/components/carousel.tsx","../src/components/chart.tsx","../src/components/checkbox.tsx","../src/components/collapsible.tsx","../src/components/popover.tsx","../src/components/color-picker.tsx","../src/components/color-input.tsx","../src/components/combobox.tsx","../src/components/dialog.tsx","../src/components/command-palette.tsx","../src/components/command.tsx","../src/components/context-menu.tsx","../src/components/table.tsx","../src/components/input.tsx","../src/components/data-table.tsx","../src/components/select.tsx","../src/components/data-transfer-controls.tsx","../src/components/date-picker.tsx","../src/components/description-list.tsx","../src/components/drawer.tsx","../src/components/empty-state.tsx","../src/components/label.tsx","../src/components/field.tsx","../src/components/spinner.tsx","../src/components/file-dropzone.tsx","../src/components/grid-list.tsx","../src/components/tooltip.tsx","../src/components/help-tooltip.tsx","../src/components/hover-card.tsx","../src/components/input-group.tsx","../src/components/input-number.tsx","../src/components/input-otp.tsx","../src/components/kbd.tsx","../src/components/media-asset-card.tsx","../src/components/media-object.tsx","../src/components/menubar.tsx","../src/components/native-select.tsx","../src/components/navigation-menu.tsx","../src/components/notification.tsx","../src/components/page-heading.tsx","../src/components/pagination.tsx","../src/components/progress.tsx","../src/components/property-row.tsx","../src/components/radio-card.tsx","../src/components/radio-group.tsx","../src/components/resizable.tsx","../src/components/separator.tsx","../src/components/rich-text-editor.tsx","../src/components/scroll-area.tsx","../src/components/section-heading.tsx","../src/components/stacked-list.tsx","../src/components/searchable-table.tsx","../src/components/sheet.tsx","../src/components/sidebar.tsx","../src/components/skeleton.tsx","../src/components/slider.tsx","../src/components/sonner.tsx","../src/components/stat-card.tsx","../src/components/status-badge.tsx","../src/components/steps.tsx","../src/components/switch.tsx","../src/components/tabs.tsx","../src/components/textarea.tsx","../src/components/titled-card.tsx","../src/components/toggle.tsx","../src/components/toggle-group.tsx","../src/components/url-redirect-prompt.tsx"],"names":["React","React2","jsx","AvatarPrimitive","jsxs","React3","React4","React5","cva","React6","React7","sizeMap","React8","ChevronRight","React9","React10","React11","Fragment","React12","Check","React13","React14","React15","React16","React17","React18","ArrowRight","Search","React20","Circle","React21","React22","ChevronDown","ChevronsUpDown","React23","ChevronUp","MoreHorizontal","DrawerPrimitive","React24","React25","LabelPrimitive","React26","Upload","FileIcon","Tooltip","React27","React28","React29","React30","React31","React32","Minus","React33","gapMap","React34","React35","React36","AlertCircle","X","React37","React38","ChevronLeft","React39","colMap","React40","Separator","React41","SeparatorPrimitive","React42","Image","React43","React44","Dialog","React45","React46","Slot","React47","SonnerToaster","React48","React49","React50","React51","React52"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export const mobileDialogSheetContentClassName = [\n \"fixed inset-x-0 bottom-0 z-50 max-h-[calc(100dvh-1rem)] w-full overflow-y-auto\",\n \"rounded-t-2xl border border-border bg-card p-6 shadow-elevated\",\n \"max-sm:pb-[calc(1.5rem+env(safe-area-inset-bottom))] max-sm:pt-8\",\n \"max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-3 max-sm:before:h-1 max-sm:before:w-9\",\n \"max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35\",\n].join(\" \");\n\nexport const desktopDialogContentClassName =\n \"sm:bottom-auto sm:left-1/2 sm:top-1/2 sm:max-h-[calc(100dvh-2rem)] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-2xl\";\n\nexport const dialogSheetMotionClassName = [\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]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n \"sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95\",\n].join(\" \");\n\nexport const mobilePopperSheetPositionClassName = [\n \"max-sm:!fixed max-sm:!inset-x-3 max-sm:!bottom-3 max-sm:!top-auto max-sm:!left-3 max-sm:!right-3\",\n \"max-sm:!w-auto max-sm:!min-w-0 max-sm:!max-w-none max-sm:!transform-none\",\n].join(\" \");\n\nexport const mobilePopperSheetSurfaceClassName =\n \"max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:border max-sm:border-border max-sm:shadow-elevated\";\n\nexport const mobilePopperSheetMotionClassName = [\n \"max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=open]:slide-in-from-bottom\",\n].join(\" \");\n\nexport const mobilePopperSheetStyle = `\n@media (max-width: 639px) {\n [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet=\"true\"]) {\n position: fixed !important;\n inset: 0 !important;\n min-width: 0 !important;\n transform: none !important;\n pointer-events: none;\n z-index: 50 !important;\n }\n\n [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet=\"true\"][data-state=\"open\"])::before {\n content: \"\";\n position: fixed;\n inset: 0;\n background: rgb(0 0 0 / 0.3);\n backdrop-filter: blur(4px);\n pointer-events: auto;\n }\n\n [data-hilum-mobile-sheet=\"true\"] {\n position: fixed !important;\n left: 0.75rem !important;\n right: 0.75rem !important;\n bottom: max(0.75rem, env(safe-area-inset-bottom)) !important;\n top: auto !important;\n width: calc(100dvw - 1.5rem) !important;\n min-width: 0 !important;\n max-width: none !important;\n transform: none !important;\n pointer-events: auto;\n transform-origin: bottom center !important;\n overscroll-behavior: contain;\n }\n\n [data-hilum-mobile-sheet=\"true\"]::before {\n content: \"\";\n position: absolute;\n top: 0.5rem;\n left: 50%;\n width: 2.25rem;\n height: 0.25rem;\n border-radius: 999px;\n background: hsl(var(--muted-foreground) / 0.35);\n transform: translateX(-50%);\n }\n}\n`;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst DropdownMenuRoot = DropdownMenu.Root;\nconst DropdownMenuTrigger = DropdownMenu.Trigger;\nconst DropdownMenuGroup = DropdownMenu.Group;\nconst DropdownMenuPortal = DropdownMenu.Portal;\nconst DropdownMenuSub = DropdownMenu.Sub;\nconst DropdownMenuRadioGroup = DropdownMenu.RadioGroup;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] bg-card rounded-xl shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenu.Portal>\n </>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nconst DropdownMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(({ className, inset, destructive, ...props }, ref) => (\n <DropdownMenu.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body outline-none transition-colors\",\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-muted-foreground focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenu.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenu.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </DropdownMenu.ItemIndicator>\n </span>\n {children}\n </DropdownMenu.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenu.RadioItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenu.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </DropdownMenu.ItemIndicator>\n </span>\n {children}\n </DropdownMenu.RadioItem>\n));\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\";\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenu.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenu.Separator\n ref={ref}\n className={cn(\"mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenu.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </DropdownMenu.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <DropdownMenu.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] bg-card rounded-xl border border-border shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nfunction DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenuRoot as DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuRadioGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst sizeMap = {\n xs: \"size-5 caption-xs\",\n sm: \"size-7 caption\",\n md: \"size-8 body\",\n lg: \"size-10 body-lg\",\n xl: \"size-12 subheading\",\n} as const;\n\ntype AvatarSize = keyof typeof sizeMap;\n\ninterface AvatarProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> {\n size?: AvatarSize;\n}\n\nconst Avatar = React.forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n ({ className, size = \"md\", ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex shrink-0 overflow-hidden rounded-full\",\n sizeMap[size],\n className,\n )}\n {...props}\n />\n ),\n);\nAvatar.displayName = \"Avatar\";\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\n \"aspect-square h-full w-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10\",\n className,\n )}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted body font-semibold text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n\nconst statusColorMap = {\n online: \"bg-brand-secondary\",\n offline: \"bg-muted\",\n busy: \"bg-destructive\",\n away: \"bg-brand-secondary\",\n};\n\nconst statusSizeMap = {\n xs: \"size-1.5 ring-1\",\n sm: \"size-2 ring-1\",\n md: \"size-2.5 ring-[1.5px]\",\n lg: \"size-3 ring-2\",\n xl: \"size-3.5 ring-2\",\n};\n\ninterface AvatarWithStatusProps extends AvatarProps {\n status?: keyof typeof statusColorMap;\n}\n\nconst AvatarWithStatus = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarWithStatusProps & { children?: React.ReactNode }\n>(({ status, size = \"md\", className, children, ...props }, ref) => (\n <div className=\"relative inline-flex shrink-0\">\n <Avatar ref={ref} size={size} className={className} {...props}>\n {children}\n </Avatar>\n {status && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 rounded-full ring-background\",\n statusColorMap[status],\n statusSizeMap[size],\n )}\n />\n )}\n </div>\n));\nAvatarWithStatus.displayName = \"AvatarWithStatus\";\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarWithStatus };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator } from \"./dropdown-menu\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { cn } from \"../lib/utils\";\n\nconst AccountMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuContent>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuContent\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"w-72 overflow-hidden rounded-xl border border-border bg-card p-0 text-foreground shadow-elevated\",\n className,\n )}\n {...props}\n />\n));\nAccountMenuContent.displayName = \"AccountMenuContent\";\n\ninterface AccountMenuHeaderProps extends React.ComponentProps<\"div\"> {\n name: React.ReactNode;\n email?: React.ReactNode;\n avatarSrc?: string | null;\n avatarAlt?: string;\n fallback?: React.ReactNode;\n}\n\nconst AccountMenuHeader = React.forwardRef<HTMLDivElement, AccountMenuHeaderProps>(\n ({ name, email, avatarSrc, avatarAlt, fallback, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center px-5 py-5 text-center\", className)}\n {...props}\n >\n <Avatar size=\"lg\" className=\"mb-3\">\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarAlt ?? \"\"} />}\n <AvatarFallback className=\"bg-brand-primary text-primary-foreground\">\n {fallback}\n </AvatarFallback>\n </Avatar>\n <p className=\"body font-medium leading-tight text-foreground\">{name}</p>\n {email && <p className=\"caption text-muted-foreground\">{email}</p>}\n </div>\n ),\n);\nAccountMenuHeader.displayName = \"AccountMenuHeader\";\n\nconst AccountMenuSection = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"p-2\", className)} {...props} />,\n);\nAccountMenuSection.displayName = \"AccountMenuSection\";\n\ninterface AccountMenuItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuItem> {\n icon?: React.ReactNode;\n trailing?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nconst AccountMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuItem>,\n AccountMenuItemProps\n>(({ icon, trailing, description, destructive, children, className, ...props }, ref) => (\n <DropdownMenuItem\n ref={ref}\n className={cn(\n \"min-h-10 rounded-md px-2.5 py-2\",\n \"group\",\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-foreground focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:opacity-40\",\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {icon && <span className=\"flex size-5 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"body truncate font-medium leading-tight\">{children}</span>\n {description && (\n <span className=\"caption truncate font-normal text-muted-foreground group-focus:text-muted-foreground\">\n {description}\n </span>\n )}\n </span>\n {trailing && <span className=\"caption ml-3 shrink-0 text-muted-foreground\">{trailing}</span>}\n </DropdownMenuItem>\n));\nAccountMenuItem.displayName = \"AccountMenuItem\";\n\nconst AccountMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuSeparator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuSeparator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuSeparator ref={ref} className={cn(\"m-0 bg-border\", className)} {...props} />\n));\nAccountMenuSeparator.displayName = \"AccountMenuSeparator\";\n\nexport {\n AccountMenuContent,\n AccountMenuHeader,\n AccountMenuSection,\n AccountMenuItem,\n AccountMenuSeparator,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Accordion } from \"radix-ui\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst AccordionRoot = React.forwardRef<\n React.ComponentRef<typeof Accordion.Root>,\n React.ComponentPropsWithoutRef<typeof Accordion.Root>\n>(({ className, ...props }, ref) => (\n <Accordion.Root ref={ref} className={cn(\"divide-y divide-border\", className)} {...props} />\n));\nAccordionRoot.displayName = \"Accordion\";\n\nconst AccordionItem = React.forwardRef<\n React.ComponentRef<typeof Accordion.Item>,\n React.ComponentPropsWithoutRef<typeof Accordion.Item>\n>(({ className, ...props }, ref) => (\n <Accordion.Item ref={ref} className={cn(\"\", className)} {...props} />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ComponentRef<typeof Accordion.Trigger>,\n React.ComponentPropsWithoutRef<typeof Accordion.Trigger>\n>(({ className, children, ...props }, ref) => (\n <Accordion.Header className=\"flex\">\n <Accordion.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between py-4\",\n \"body font-medium text-foreground transition-colors hover:text-muted-foreground\",\n \"[&[data-state=open]>svg]:rotate-180\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n size={16}\n className=\"text-muted-foreground transition-transform duration-200 shrink-0\"\n />\n </Accordion.Trigger>\n </Accordion.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ComponentRef<typeof Accordion.Content>,\n React.ComponentPropsWithoutRef<typeof Accordion.Content>\n>(({ className, children, ...props }, ref) => (\n <Accordion.Content\n ref={ref}\n className={cn(\n \"overflow-hidden body text-muted-foreground\",\n \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\",\n className,\n )}\n {...props}\n >\n <div className=\"pb-4\">{children}</div>\n </Accordion.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { AccordionRoot as Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex shrink-0 items-center justify-center gap-2\",\n \"body font-medium whitespace-nowrap\",\n \"transition-[background-color,border-color,box-shadow,color,opacity,scale] duration-150 outline-none active:scale-[0.96]\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n variant: {\n default:\n \"bg-brand-primary text-background hover:bg-brand-primary/90 active:bg-brand-primary/80\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80\",\n outline: \"bg-card text-muted-foreground shadow-natural hover:bg-muted rounded-xl\",\n secondary: \"bg-muted text-muted-foreground hover:bg-muted\",\n brand:\n \"bg-brand-secondary text-foreground hover:bg-brand-secondary/90 active:bg-brand-secondary/80\",\n ghost: \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n link: \"text-foreground underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2 rounded-md\",\n xs: \"h-6 gap-1 px-2 caption rounded-md\",\n sm: \"h-8 gap-1.5 px-3 rounded-md\",\n lg: \"h-11 px-6 rounded-md\",\n icon: \"size-9 rounded-md\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8 rounded-md\",\n \"icon-lg\": \"size-11 rounded-md\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ninterface ButtonProps extends React.ComponentProps<\"button\">, VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nfunction Button({ className, variant, size, asChild = false, ...props }: ButtonProps) {\n const Comp = asChild ? Slot.Root : \"button\";\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface ActionPanelAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"destructive\" | \"outline\" | \"ghost\";\n}\n\ninterface ActionPanelLink {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\ninterface ActionPanelProps {\n title: string;\n description?: string;\n action?: ActionPanelAction;\n actions?: ActionPanelAction[];\n link?: ActionPanelLink;\n variant?: \"default\" | \"muted\";\n layout?: \"stacked\" | \"inline\";\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction ActionPanel({\n title,\n description,\n action,\n actions,\n link,\n variant = \"default\",\n layout = \"stacked\",\n children,\n className,\n}: ActionPanelProps) {\n const allActions = actions ?? (action ? [action] : []);\n\n const renderActions = () => {\n if (allActions.length === 0 && !link) return null;\n return (\n <div className=\"flex items-center gap-2\">\n {link &&\n (link.href ? (\n <a\n href={link.href}\n className=\"inline-flex min-h-10 items-center gap-1 body font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label} <span aria-hidden>→</span>\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={link.onClick}\n className=\"inline-flex min-h-10 items-center gap-1 body font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label} <span aria-hidden>→</span>\n </button>\n ))}\n {allActions.map((a, i) =>\n a.href ? (\n <Button key={i} size=\"sm\" variant={a.variant ?? \"default\"} asChild>\n <a href={a.href}>{a.label}</a>\n </Button>\n ) : (\n <Button key={i} size=\"sm\" variant={a.variant ?? \"default\"} onClick={a.onClick}>\n {a.label}\n </Button>\n ),\n )}\n </div>\n );\n };\n\n return (\n <div\n className={cn(\n \"rounded-xl border px-5 py-5\",\n variant === \"muted\" ? \"border-border bg-muted\" : \"border-border bg-card shadow-natural\",\n layout === \"inline\" && \"flex items-center justify-between gap-6\",\n className,\n )}\n >\n <div className={cn(\"min-w-0\", layout === \"inline\" ? \"flex-1\" : \"\")}>\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && (\n <p\n className={cn(\n \"body text-muted-foreground text-pretty\",\n layout === \"stacked\" ? \"mt-1\" : \"\",\n )}\n >\n {description}\n </p>\n )}\n {children && layout === \"stacked\" && <div className=\"mt-4\">{children}</div>}\n </div>\n\n {layout === \"stacked\" ? (\n (allActions.length > 0 || link) && <div className=\"mt-4\">{renderActions()}</div>\n ) : (\n <div className=\"shrink-0 flex items-center gap-3\">\n {children}\n {renderActions()}\n </div>\n )}\n </div>\n );\n}\n\nActionPanel.displayName = \"ActionPanel\";\n\nexport { ActionPanel };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface FeedEvent {\n id?: string | number;\n content: React.ReactNode;\n date?: string;\n datetime?: string;\n icon?: React.ReactNode;\n iconBgClass?: string;\n}\n\ninterface ActivityFeedProps {\n events: FeedEvent[];\n className?: string;\n}\n\nfunction ActivityFeed({ events, className }: ActivityFeedProps) {\n return (\n <div className={cn(\"flow-root\", className)}>\n <ul role=\"list\" className=\"-mb-8\">\n {events.map((event, i) => {\n const isLast = i === events.length - 1;\n return (\n <li key={event.id ?? i}>\n <div className=\"relative pb-8\">\n {!isLast && (\n <span\n className=\"absolute top-4 left-4 -ml-px h-full w-0.5 bg-muted\"\n aria-hidden=\"true\"\n />\n )}\n <div className=\"relative flex gap-3\">\n {/* Icon */}\n <div>\n <span\n className={cn(\n \"flex size-8 items-center justify-center rounded-full ring-8 ring-background\",\n event.iconBgClass ?? \"bg-muted text-muted-foreground\",\n )}\n >\n {event.icon}\n </span>\n </div>\n\n {/* Content */}\n <div className=\"flex min-w-0 flex-1 items-baseline justify-between gap-4 pt-1\">\n <div className=\"body text-muted-foreground\">{event.content}</div>\n {event.date && (\n <time\n dateTime={event.datetime ?? event.date}\n className=\"caption whitespace-nowrap text-muted-foreground\"\n >\n {event.date}\n </time>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nActivityFeed.displayName = \"ActivityFeed\";\n\nexport { ActivityFeed };\nexport type { FeedEvent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertDialog } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport {\n desktopDialogContentClassName,\n dialogSheetMotionClassName,\n mobileDialogSheetContentClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst AlertDialogRoot = AlertDialog.Root;\nconst AlertDialogTrigger = AlertDialog.Trigger;\nconst AlertDialogPortal = AlertDialog.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/30 backdrop-blur-sm\",\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 />\n));\nAlertDialogOverlay.displayName = \"AlertDialogOverlay\";\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Content>\n>(({ className, children, ...props }, ref) => (\n <AlertDialog.Portal>\n <AlertDialogOverlay />\n <AlertDialog.Content\n ref={ref}\n className={cn(\n mobileDialogSheetContentClassName,\n desktopDialogContentClassName,\n \"sm:max-w-md\",\n dialogSheetMotionClassName,\n className,\n )}\n {...props}\n >\n {children}\n </AlertDialog.Content>\n </AlertDialog.Portal>\n));\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-5\", className)} {...props} />;\n}\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n \"[&>*]:w-full sm:[&>*]:w-auto\",\n className,\n )}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Title\n ref={ref}\n className={cn(\"body-lg font-semibold text-balance text-foreground\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Description\n ref={ref}\n className={cn(\"body text-pretty text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Action\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md px-4\",\n \"body font-medium whitespace-nowrap transition-[background-color,box-shadow,color,opacity,scale] duration-150 active:scale-[0.96]\",\n \"bg-brand-primary text-background hover:bg-brand-primary/90 active:bg-brand-primary/80\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1 outline-none\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogAction.displayName = \"AlertDialogAction\";\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Cancel\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md px-4\",\n \"body font-medium whitespace-nowrap transition-[background-color,box-shadow,color,opacity,scale] duration-150 active:scale-[0.96]\",\n \"bg-card text-muted-foreground shadow-natural hover:bg-muted rounded-xl\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1 outline-none\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogCancel.displayName = \"AlertDialogCancel\";\n\nexport {\n AlertDialogRoot as AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\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\";\nimport { cn } from \"../lib/utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-xl px-4 py-3.5 body [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-3.5 [&>svg~*]:pl-6\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-muted-foreground [&>svg]:text-muted-foreground\",\n info: \"bg-brand-secondary/40 text-muted-foreground [&>svg]:text-muted-foreground\",\n success: \"bg-brand-secondary/15 text-muted-foreground [&>svg]:text-muted-foreground\",\n warning: \"bg-brand-secondary/70 text-muted-foreground [&>svg]:text-muted-foreground\",\n destructive: \"bg-destructive/10 text-destructive [&>svg]:text-destructive/70\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\ninterface AlertProps extends React.ComponentProps<\"div\">, VariantProps<typeof alertVariants> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n ),\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"mb-0.5 body font-semibold leading-tight text-balance\", className)}\n {...props}\n />\n ),\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"body text-pretty opacity-90\", className)} {...props} />\n ),\n);\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst AspectRatioRoot = React.forwardRef<\n React.ComponentRef<typeof AspectRatio.Root>,\n React.ComponentPropsWithoutRef<typeof AspectRatio.Root>\n>(({ className, ...props }, ref) => (\n <AspectRatio.Root\n ref={ref}\n className={cn(\"relative w-full overflow-hidden\", className)}\n {...props}\n />\n));\nAspectRatioRoot.displayName = \"AspectRatio\";\n\nexport { AspectRatioRoot as AspectRatio };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface AvatarStackItem {\n src?: string;\n name: string;\n fallback?: string;\n colorClass?: string;\n}\n\ninterface AvatarStackProps {\n avatars: AvatarStackItem[];\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = {\n sm: { wrapper: \"size-6 ring-[1.5px]\", text: \"caption-xs\" },\n md: { wrapper: \"size-8 ring-2\", text: \"caption\" },\n lg: { wrapper: \"size-10 ring-2\", text: \"body\" },\n};\n\nfunction AvatarStack({ avatars, max, size = \"md\", className }: AvatarStackProps) {\n const shown = max ? avatars.slice(0, max) : avatars;\n const overflow = max && avatars.length > max ? avatars.length - max : 0;\n const s = sizeMap[size];\n\n return (\n <div className={cn(\"flex -space-x-2\", className)}>\n {shown.map((avatar, i) => (\n <span\n key={i}\n title={avatar.name}\n className={cn(\n \"relative inline-flex shrink-0 overflow-hidden rounded-full ring-background\",\n s.wrapper,\n )}\n >\n {avatar.src ? (\n <img\n src={avatar.src}\n alt={avatar.name}\n className=\"size-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10\"\n />\n ) : (\n <span\n className={cn(\n \"flex size-full items-center justify-center font-medium\",\n s.text,\n avatar.colorClass ?? \"bg-muted text-muted-foreground\",\n )}\n >\n {avatar.fallback ?? avatar.name.slice(0, 2).toUpperCase()}\n </span>\n )}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-full ring-background bg-muted font-medium text-muted-foreground\",\n s.wrapper,\n s.text,\n \"tabular-nums\",\n )}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n\nexport { AvatarStack };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 caption font-medium transition-colors\",\n {\n variants: {\n variant: {\n default: \"bg-foreground text-background\",\n secondary: \"bg-muted text-muted-foreground\",\n outline: \"border border-border text-muted-foreground bg-transparent\",\n brand: \"bg-brand-primary text-background\",\n success: \"bg-brand-secondary/20 text-muted-foreground border border-brand-secondary/50\",\n warning: \"bg-brand-secondary/70 text-muted-foreground border border-brand-secondary\",\n destructive: \"bg-destructive/10 text-destructive border border-destructive/20\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ninterface BadgeProps extends React.ComponentProps<\"span\">, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <span data-slot=\"badge\" className={cn(badgeVariants({ variant, className }))} {...props} />\n );\n}\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"nav\"> & { separator?: React.ReactNode }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentProps<\"ol\">>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\"flex flex-wrap items-center gap-1.5 body text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"inline-flex items-center gap-1.5\", className)} {...props} />\n ),\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, React.ComponentProps<\"a\">>(\n ({ className, ...props }, ref) => (\n <a ref={ref} className={cn(\"transition-colors hover:text-foreground\", className)} {...props} />\n ),\n);\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentProps<\"span\">>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-current=\"page\"\n className={cn(\"body font-medium text-foreground\", className)}\n {...props}\n />\n ),\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n >\n {children ?? <ChevronRight size={14} />}\n </li>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-5 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal size={14} className=\"text-muted-foreground\" />\n </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface ButtonGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction ButtonGroup({ children, className }: ButtonGroupProps) {\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-0.5 rounded-xl bg-muted p-0.5\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\ninterface ButtonGroupItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n active?: boolean;\n}\n\nfunction ButtonGroupItem({ active, className, children, ...props }: ButtonGroupItemProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"relative inline-flex min-h-8 items-center justify-center gap-1 rounded-[10px] px-3 py-1 body-sm font-medium\",\n \"transition-[background-color,box-shadow,color,opacity,scale] active:scale-[0.96]\",\n \"focus:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\",\n active\n ? \"bg-card text-foreground shadow-natural\"\n : \"text-muted-foreground hover:text-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nButtonGroup.displayName = \"ButtonGroup\";\nButtonGroupItem.displayName = \"ButtonGroupItem\";\n\nexport { ButtonGroup, ButtonGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-4\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center px-10\",\n caption_label: \"body font-semibold text-foreground\",\n nav: \"flex items-center justify-between absolute inset-x-0 top-1\",\n button_previous: cn(\n \"absolute left-0 flex h-9 w-9 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:bg-muted hover:text-muted-foreground transition-colors\",\n ),\n button_next: cn(\n \"absolute right-0 flex h-9 w-9 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:bg-muted hover:text-muted-foreground transition-colors\",\n ),\n month_grid: \"w-full border-collapse mt-1\",\n weekdays: \"flex\",\n weekday: \"flex h-9 w-9 items-center justify-center label text-muted-foreground font-normal\",\n week: \"flex w-full mt-1\",\n day: \"relative p-0 text-center\",\n day_button: cn(\n \"flex h-9 w-9 items-center justify-center rounded-full body font-normal\",\n \"text-foreground hover:bg-muted transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n ),\n selected:\n \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:hover:bg-brand-primary/90\",\n today: \"[&>button]:font-semibold [&>button]:text-brand-primary\",\n outside: \"opacity-40 [&>button]:text-muted-foreground\",\n disabled: \"opacity-30 [&>button]:cursor-not-allowed\",\n range_start:\n \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:rounded-full\",\n range_end: \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:rounded-full\",\n range_middle:\n \"[&>button]:bg-brand-primary/15 [&>button]:text-foreground [&>button]:rounded-none\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? <ChevronLeft size={14} /> : <ChevronRight size={14} />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst calloutVariants = cva(\n \"flex w-full min-w-0 gap-3 rounded-xl border px-4 py-3.5 shadow-natural\",\n {\n variants: {\n tone: {\n default: \"border-border bg-card text-foreground\",\n info: \"border-brand-secondary/50 bg-brand-secondary/15 text-foreground\",\n success: \"border-success/25 bg-success/10 text-foreground\",\n warning: \"border-warning/35 bg-warning/15 text-foreground\",\n destructive: \"border-destructive/25 bg-destructive/10 text-foreground\",\n },\n compact: {\n true: \"px-3 py-2.5\",\n false: \"\",\n },\n },\n defaultVariants: {\n tone: \"default\",\n compact: false,\n },\n },\n);\n\nconst calloutIconVariants = cva(\n \"mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-lg [&_svg]:size-4\",\n {\n variants: {\n tone: {\n default: \"bg-muted text-muted-foreground\",\n info: \"bg-brand-secondary/35 text-muted-foreground\",\n success: \"bg-success/15 text-success\",\n warning: \"bg-warning/20 text-warning\",\n destructive: \"bg-destructive/15 text-destructive\",\n },\n },\n defaultVariants: {\n tone: \"default\",\n },\n },\n);\n\ninterface CalloutProps\n extends Omit<React.ComponentProps<\"div\">, \"title\">,\n VariantProps<typeof calloutVariants> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nfunction Callout({\n title,\n description,\n icon,\n actions,\n tone = \"default\",\n compact = false,\n className,\n children,\n role,\n ...props\n}: CalloutProps) {\n const resolvedRole = role ?? (tone === \"destructive\" ? \"alert\" : \"status\");\n\n return (\n <div\n role={resolvedRole}\n className={cn(calloutVariants({ tone, compact }), className)}\n {...props}\n >\n {icon && <div className={cn(calloutIconVariants({ tone }))}>{icon}</div>}\n <div className=\"flex min-w-0 flex-1 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n {title && <p className=\"body font-semibold text-balance\">{title}</p>}\n {description && (\n <p className={cn(\"body text-pretty text-muted-foreground\", title && \"mt-1\")}>\n {description}\n </p>\n )}\n {children && <div className={cn(title || description ? \"mt-2\" : \"\")}>{children}</div>}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-2 max-sm:w-full max-sm:flex-col max-sm:items-stretch\">\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nCallout.displayName = \"Callout\";\n\nexport { Callout };\nexport type { CalloutProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface CardHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\" | \"destructive\";\n}\n\ninterface CardHeadingProps {\n title: string;\n description?: string;\n actions?: CardHeadingAction[];\n children?: React.ReactNode; // e.g. avatar or icon on the left\n className?: string;\n}\n\nfunction CardHeading({ title, description, actions, children, className }: CardHeadingProps) {\n return (\n <div\n className={cn(\n \"flex items-start justify-between gap-4 border-b border-border px-5 py-4\",\n className,\n )}\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n {children}\n <div className=\"min-w-0\">\n <p className=\"body truncate font-semibold text-balance text-foreground\">{title}</p>\n {description && (\n <p className=\"caption mt-0.5 text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions.map((action, i) =>\n action.href ? (\n <Button key={i} size=\"sm\" variant={action.variant ?? \"default\"} asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.variant ?? \"default\"}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { CardHeading };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\n/* ------------------------------------------------------------------ */\n/* Card root */\n/* ------------------------------------------------------------------ */\n\nconst cardVariants = cva(\"rounded-xl\", {\n variants: {\n variant: {\n default: \"bg-card shadow-natural\",\n muted: \"bg-muted\",\n ghost: \"bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\ninterface CardProps extends React.ComponentProps<\"div\">, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n className={cn(cardVariants({ variant }), className)}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\n/* ------------------------------------------------------------------ */\n/* Card sub-components */\n/* ------------------------------------------------------------------ */\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 p-5\", className)}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.ComponentProps<\"h3\">>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\"subheading text-balance text-foreground\", className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn(\"caption text-pretty text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-5 pt-0\", className)}\n {...props}\n />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nconst CardAction = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-action\"\n className={cn(\"col-start-2 row-span-2 row-start-1 self-start justify-self-end\", className)}\n {...props}\n />\n ),\n);\nCardAction.displayName = \"CardAction\";\n\n/* ------------------------------------------------------------------ */\n/* CardMedia — full-bleed image/gradient header */\n/* ------------------------------------------------------------------ */\n\nconst CardMedia = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n />\n ),\n);\nCardMedia.displayName = \"CardMedia\";\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardAction,\n CardMedia,\n cardVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ninterface CarouselProps {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n if (!context) throw new Error(\"useCarousel must be used within a <Carousel />\");\n return context;\n}\n\nfunction Carousel({\n opts,\n plugins,\n orientation = \"horizontal\",\n setApi,\n className,\n children,\n ...props\n}: CarouselProps & React.ComponentProps<\"div\">) {\n const [carouselRef, emblaApi] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"vertical\" ? \"y\" : \"x\",\n },\n plugins,\n );\n\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n emblaApi?.scrollPrev();\n }, [emblaApi]);\n\n const scrollNext = React.useCallback(() => {\n emblaApi?.scrollNext();\n }, [emblaApi]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!emblaApi) return;\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onSelect);\n emblaApi.on(\"select\", onSelect);\n return () => {\n emblaApi.off(\"reInit\", onSelect);\n emblaApi.off(\"select\", onSelect);\n };\n }, [emblaApi, onSelect]);\n\n React.useEffect(() => {\n if (!emblaApi || !setApi) return;\n setApi(emblaApi);\n }, [emblaApi, setApi]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: emblaApi,\n opts,\n orientation,\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n className={cn(\"flex\", orientation === \"vertical\" ? \"-mt-4 flex-col\" : \"-ml-4\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"vertical\" ? \"pt-4\" : \"pl-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-9 w-9 rounded-full\",\n orientation === \"vertical\"\n ? \"-top-12 left-1/2 -translate-x-1/2 rotate-90\"\n : \"-left-12 top-1/2 -translate-y-1/2\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"size-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-9 w-9 rounded-full\",\n orientation === \"vertical\"\n ? \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\"\n : \"-right-12 top-1/2 -translate-y-1/2\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"size-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { cn } from \"../lib/utils\";\nimport { tokens } from \"../tokens/tokens\";\n\nexport const CHART_COLORS = {\n primary: tokens.semantic.light.primary,\n secondary: tokens.semantic.light.success,\n tertiary: tokens.semantic.light.warning,\n muted: tokens.semantic.light.mutedForeground,\n subtle: tokens.semantic.light.border,\n dark: tokens.semantic.light.foreground,\n};\n\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n );\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\ntype ChartContainerProps = React.ComponentProps<\"div\"> & {\n config?: ChartConfig;\n height?: number;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>[\"children\"];\n};\n\nfunction ChartContainer({\n id,\n className,\n children,\n config = {},\n height,\n style,\n ...props\n}: ChartContainerProps) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [canRenderChart, setCanRenderChart] = React.useState(false);\n const initialDimension = React.useMemo(\n () => ({ width: 800, height: typeof height === \"number\" ? height : 450 }),\n [height],\n );\n const resolvedStyle =\n height === undefined ? style : ({ ...style, height } as React.CSSProperties);\n\n React.useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const updateCanRenderChart = () => {\n const rect = element.getBoundingClientRect();\n setCanRenderChart(rect.width > 0 && rect.height > 0);\n };\n\n updateCanRenderChart();\n\n if (typeof ResizeObserver === \"undefined\") {\n setCanRenderChart(true);\n return;\n }\n\n const observer = new ResizeObserver(updateCanRenderChart);\n observer.observe(element);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n ref={containerRef}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs\",\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground\",\n \"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50\",\n \"[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border\",\n \"[&_.recharts-dot[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-layer]:outline-hidden\",\n \"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-radial-bar-background-sector]:fill-muted\",\n \"[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted\",\n \"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-sector]:outline-hidden\",\n \"[&_.recharts-sector[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-surface]:outline-hidden\",\n className,\n )}\n style={resolvedStyle}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {canRenderChart ? (\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n minWidth={0}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n ) : null}\n </div>\n </ChartContext.Provider>\n );\n}\nChartContainer.displayName = \"ChartContainer\";\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, itemConfig]) => itemConfig.theme || itemConfig.color,\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join(\"\\n\")}\n}\n`,\n )\n .join(\"\\n\"),\n }}\n />\n );\n};\n\ntype ChartTooltipContentProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"children\" | \"content\"\n> & {\n active?: boolean;\n payload?: Array<Record<string, any>>;\n indicator?: \"line\" | \"dot\" | \"dashed\";\n hideLabel?: boolean;\n hideIndicator?: boolean;\n label?: React.ReactNode;\n labelFormatter?: (\n value: React.ReactNode,\n payload: Array<Record<string, any>>,\n ) => React.ReactNode;\n labelClassName?: string;\n formatter?: (\n value: unknown,\n name: unknown,\n item: Record<string, any>,\n index: number,\n payload: unknown,\n ) => React.ReactNode;\n color?: string;\n nameKey?: string;\n labelKey?: string;\n};\n\ntype ChartTooltipProps =\n | React.ComponentProps<typeof RechartsPrimitive.Tooltip>\n | ChartTooltipContentProps;\n\nfunction ChartTooltip(props: ChartTooltipProps) {\n const hasDirectTooltipPayload = \"active\" in props || \"payload\" in props;\n if (hasDirectTooltipPayload) {\n return <ChartTooltipContent {...(props as ChartTooltipContentProps)} />;\n }\n return (\n <RechartsPrimitive.Tooltip\n {...(props as React.ComponentProps<typeof RechartsPrimitive.Tooltip>)}\n />\n );\n}\nChartTooltip.displayName = \"ChartTooltip\";\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: ChartTooltipContentProps) {\n const chartContext = React.useContext(ChartContext);\n const config = chartContext?.config ?? {};\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item: Record<string, any>, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const itemPayload = item.payload as Record<string, unknown> | undefined;\n const indicatorColor =\n color ||\n (typeof itemPayload?.fill === \"string\" ? itemPayload.fill : undefined) ||\n item.color;\n\n return (\n <div\n key={`${item.dataKey || item.name || index}`}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\",\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n },\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\",\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value !== undefined && item.value !== null && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : item.value}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\nChartTooltipContent.displayName = \"ChartTooltipContent\";\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\ntype ChartLegendPayloadItem = {\n color?: string;\n dataKey?: string | number;\n value?: string | number;\n};\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> & {\n hideIcon?: boolean;\n nameKey?: string;\n payload?: ChartLegendPayloadItem[];\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n}) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className,\n )}\n >\n {payload.map((item: ChartLegendPayloadItem) => {\n const key = `${nameKey || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={`${item.value}`}\n className=\"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\nChartLegendContent.displayName = \"ChartLegendContent\";\n\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string;\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n\nexport {\n BarChart,\n Bar,\n LineChart,\n Line,\n AreaChart,\n Area,\n PieChart,\n Pie,\n Cell,\n CartesianGrid,\n XAxis,\n YAxis,\n Tooltip as RechartsTooltip,\n Legend,\n type TooltipProps as RechartsTooltipProps,\n} from \"recharts\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Checkbox } from \"radix-ui\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst CheckboxRoot = React.forwardRef<\n React.ComponentRef<typeof Checkbox.Root>,\n React.ComponentPropsWithoutRef<typeof Checkbox.Root>\n>(({ className, ...props }, ref) => (\n <Checkbox.Root\n ref={ref}\n className={cn(\n \"peer relative size-4 shrink-0 rounded border border-border bg-card transition-colors\",\n \"after:absolute after:left-1/2 after:top-1/2 after:size-10 after:-translate-x-1/2 after:-translate-y-1/2\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-brand-primary data-[state=checked]:border-brand-primary\",\n \"data-[state=indeterminate]:bg-brand-primary data-[state=indeterminate]:border-brand-primary\",\n className,\n )}\n {...props}\n >\n <Checkbox.Indicator className=\"flex items-center justify-center text-background\">\n {props.checked === \"indeterminate\" ? (\n <Minus size={11} strokeWidth={3} />\n ) : (\n <Check size={11} strokeWidth={3} />\n )}\n </Checkbox.Indicator>\n </Checkbox.Root>\n));\nCheckboxRoot.displayName = \"Checkbox\";\n\nexport { CheckboxRoot as Checkbox };\n","\"use client\";\n\nimport { Collapsible } from \"radix-ui\";\n\nconst CollapsibleRoot = Collapsible.Root;\nconst CollapsibleTrigger = Collapsible.Trigger;\nconst CollapsibleContent = Collapsible.Content;\n\nexport { CollapsibleRoot as Collapsible, CollapsibleTrigger, CollapsibleContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst PopoverRoot = Popover.Root;\nconst PopoverTrigger = Popover.Trigger;\nconst PopoverClose = Popover.Close;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof Popover.Content>,\n React.ComponentPropsWithoutRef<typeof Popover.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Popover.Portal>\n <Popover.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"relative z-50 w-72 rounded-xl bg-card p-4 shadow-natural outline-none\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-4 max-sm:pb-4 max-sm:pt-6\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </Popover.Portal>\n </>\n));\nPopoverContent.displayName = \"PopoverContent\";\n\nexport { PopoverRoot as Popover, PopoverTrigger, PopoverContent, PopoverClose };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\ninterface ColorPickerProps {\n value: string;\n onChange: (next: string) => void;\n className?: string;\n disabled?: boolean;\n /** Optional preset palette shown above the picker. */\n presets?: string[];\n /** Accessible label for the trigger. */\n ariaLabel?: string;\n}\n\nfunction isValidHex(s: string): boolean {\n return /^#([0-9a-fA-F]{3}){1,2}$/.test(s);\n}\n\nfunction ColorPicker({\n value,\n onChange,\n className,\n disabled,\n presets,\n ariaLabel = \"Color\",\n}: ColorPickerProps) {\n const [hex, setHex] = React.useState(value);\n\n React.useEffect(() => {\n setHex(value);\n }, [value]);\n\n const commit = (next: string) => {\n if (isValidHex(next)) onChange(next);\n };\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-md border border-border bg-card\",\n \"transition-colors hover:border-border\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <span\n aria-hidden\n className=\"size-4 rounded-sm border border-black/5\"\n style={{ backgroundColor: value }}\n />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={6} className=\"w-56 p-3 max-sm:px-3\">\n <input\n type=\"color\"\n value={isValidHex(hex) ? hex : \"#000000\"}\n onChange={(e) => {\n setHex(e.target.value);\n onChange(e.target.value);\n }}\n className=\"h-9 w-full cursor-pointer rounded-md border border-border bg-card p-0.5\"\n />\n <div className=\"mt-2 flex items-center gap-2\">\n <span className=\"caption text-muted-foreground\">Hex</span>\n <input\n type=\"text\"\n value={hex}\n onChange={(e) => setHex(e.target.value)}\n onBlur={(e) => commit(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit((e.target as HTMLInputElement).value);\n }}\n className=\"h-9 flex-1 rounded-md border border-border bg-card px-2 caption text-foreground focus:outline-none focus:border-brand-primary\"\n />\n </div>\n {presets && presets.length > 0 && (\n <div className=\"mt-3 grid grid-cols-4 gap-2\">\n {presets.map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => onChange(p)}\n aria-label={p}\n className=\"size-9 rounded-md border border-black/10 transition-transform hover:scale-105 active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\"\n style={{ backgroundColor: p }}\n />\n ))}\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\nexport type { ColorPickerProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { ColorPicker } from \"./color-picker\";\n\ninterface ColorInputProps {\n value: string;\n onChange: (next: string) => void;\n /** Show an opacity slider (0–100). Pass `opacity` and `onOpacityChange`. */\n opacity?: number;\n onOpacityChange?: (next: number) => void;\n className?: string;\n disabled?: boolean;\n presets?: string[];\n}\n\n/**\n * Compact, inline color input designed for designer property panels.\n * Combines a swatch trigger (ColorPicker), a hex input, and an optional opacity field.\n */\nfunction ColorInput({\n value,\n onChange,\n opacity,\n onOpacityChange,\n className,\n disabled,\n presets,\n}: ColorInputProps) {\n const [hex, setHex] = React.useState(value);\n\n React.useEffect(() => {\n setHex(value);\n }, [value]);\n\n const commitHex = (next: string) => {\n if (/^#([0-9a-fA-F]{3}){1,2}$/.test(next)) onChange(next);\n else setHex(value);\n };\n\n return (\n <div\n className={cn(\n \"inline-flex h-8 items-stretch gap-0 rounded-md border border-border bg-card overflow-hidden\",\n \"focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <ColorPicker\n value={value}\n onChange={onChange}\n {...(presets !== undefined && { presets })}\n {...(disabled !== undefined && { disabled })}\n className=\"h-full w-8 border-0 rounded-none focus-visible:ring-0\"\n />\n <input\n type=\"text\"\n value={hex.replace(/^#/, \"\")}\n onChange={(e) => setHex(\"#\" + e.target.value.replace(/^#/, \"\"))}\n onBlur={(e) => commitHex(\"#\" + e.target.value.replace(/^#/, \"\"))}\n onKeyDown={(e) => {\n if (e.key === \"Enter\")\n commitHex(\"#\" + (e.target as HTMLInputElement).value.replace(/^#/, \"\"));\n }}\n spellCheck={false}\n className=\"w-[5.5rem] caption text-foreground px-2 bg-transparent border-l border-border focus:outline-none uppercase\"\n />\n {typeof opacity === \"number\" && onOpacityChange && (\n <div className=\"relative flex items-center border-l border-border\">\n <input\n type=\"number\"\n min={0}\n max={100}\n value={Math.round(opacity)}\n onChange={(e) => onOpacityChange(Number(e.target.value))}\n className=\"w-12 caption text-foreground px-2 bg-transparent focus:outline-none text-right [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <span aria-hidden className=\"caption-xs text-muted-foreground pr-2\">\n %\n </span>\n </div>\n )}\n </div>\n );\n}\n\nColorInput.displayName = \"ColorInput\";\n\nexport { ColorInput };\nexport type { ColorInputProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n statusColor?: string;\n avatar?: string;\n}\n\ninterface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n}\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n className,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(-1);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listboxId = React.useId();\n\n const selectedOption = options.find((o) => o.value === value);\n\n const filtered =\n query === \"\"\n ? options\n : options.filter(\n (o) =>\n o.label.toLowerCase().includes(query.toLowerCase()) ||\n o.description?.toLowerCase().includes(query.toLowerCase()),\n );\n\n // Reset active index when the filtered list changes\n React.useEffect(() => {\n setActiveIndex(-1);\n }, [filtered.length, open]);\n\n // Close on outside click\n React.useEffect(() => {\n function onMouseDown(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n setQuery(\"\");\n }\n }\n document.addEventListener(\"mousedown\", onMouseDown);\n return () => document.removeEventListener(\"mousedown\", onMouseDown);\n }, []);\n\n function closeDropdown() {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(-1);\n }\n\n function selectOption(opt: ComboboxOption) {\n onValueChange?.(opt.value);\n closeDropdown();\n }\n\n function handleInputKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"Escape\") {\n closeDropdown();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n const target = activeIndex >= 0 ? filtered[activeIndex] : filtered[0];\n if (target) selectOption(target);\n } else if (e.key === \"Tab\") {\n closeDropdown();\n }\n }\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger */}\n <div className=\"relative flex items-center\">\n {selectedOption?.avatar && !open && (\n <div className=\"pointer-events-none absolute left-2.5 flex size-5 items-center justify-center rounded-full bg-muted caption-xs font-semibold text-muted-foreground shrink-0\">\n {selectedOption.avatar}\n </div>\n )}\n {selectedOption?.statusColor && !open && (\n <div\n className=\"pointer-events-none absolute left-3 size-2 rounded-full shrink-0\"\n style={{ backgroundColor: selectedOption.statusColor }}\n />\n )}\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined\n }\n aria-autocomplete=\"list\"\n className={cn(\n \"flex h-10 w-full rounded-lg border border-border bg-card pr-10 body text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:border-border\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n selectedOption?.avatar && !open\n ? \"pl-8\"\n : selectedOption?.statusColor && !open\n ? \"pl-7\"\n : \"pl-3\",\n )}\n placeholder={open ? searchPlaceholder : (selectedOption?.label ?? placeholder)}\n value={open ? query : (selectedOption?.label ?? \"\")}\n onChange={(e) => {\n setQuery(e.target.value);\n if (!open) setOpen(true);\n }}\n onFocus={() => {\n setOpen(true);\n setQuery(\"\");\n }}\n onKeyDown={handleInputKeyDown}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? \"Close\" : \"Open\"}\n className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center text-muted-foreground hover:text-muted-foreground transition-colors\"\n onClick={() => {\n if (open) {\n closeDropdown();\n } else {\n setOpen(true);\n inputRef.current?.focus();\n }\n }}\n >\n <ChevronsUpDown size={14} />\n </button>\n </div>\n\n {/* Dropdown */}\n {open && (\n <>\n <button\n type=\"button\"\n aria-label=\"Close options\"\n className=\"fixed inset-0 z-40 hidden bg-black/30 backdrop-blur-sm max-sm:block\"\n onClick={closeDropdown}\n />\n <div\n className={cn(\n \"absolute z-50 mt-1 w-full overflow-hidden rounded-lg border border-border bg-card shadow-elevated\",\n \"max-sm:fixed max-sm:inset-x-3 max-sm:bottom-3 max-sm:[bottom:max(0.75rem,env(safe-area-inset-bottom))] max-sm:top-auto max-sm:mt-0 max-sm:w-auto\",\n \"max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:p-2 max-sm:pt-5\",\n \"max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-2 max-sm:before:h-1 max-sm:before:w-9 max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35\",\n )}\n >\n <ul\n id={listboxId}\n role=\"listbox\"\n className=\"max-h-60 overflow-auto py-1 max-sm:max-h-[calc(min(70dvh,28rem)-3rem)]\"\n >\n {filtered.length === 0 ? (\n <li className=\"px-3 py-2 body text-muted-foreground\">{emptyText}</li>\n ) : (\n filtered.map((option, idx) => {\n const isSelected = option.value === value;\n const isActive = idx === activeIndex;\n return (\n <li\n key={option.value}\n id={`${listboxId}-option-${idx}`}\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"flex min-h-10 cursor-pointer select-none items-center gap-2.5 px-3 py-2 body transition-colors\",\n isSelected\n ? \"bg-brand-primary text-background\"\n : isActive\n ? \"bg-muted text-foreground\"\n : \"text-foreground hover:bg-muted\",\n )}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setActiveIndex(idx)}\n onClick={() => selectOption(option)}\n >\n {/* Avatar */}\n {option.avatar && (\n <div\n className={cn(\n \"flex size-6 shrink-0 items-center justify-center rounded-full caption-xs font-semibold\",\n isSelected\n ? \"bg-card/20 text-background\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n {option.avatar}\n </div>\n )}\n {/* Status dot */}\n {option.statusColor && !option.avatar && (\n <div\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: option.statusColor }}\n />\n )}\n <div className=\"min-w-0 flex-1\">\n <p className={cn(\"truncate\", isSelected && \"font-semibold\")}>\n {option.label}\n </p>\n {option.description && (\n <p\n className={cn(\n \"caption truncate\",\n isSelected ? \"text-background/70\" : \"text-muted-foreground\",\n )}\n >\n {option.description}\n </p>\n )}\n </div>\n {isSelected && <Check size={14} className=\"shrink-0\" />}\n </li>\n );\n })\n )}\n </ul>\n </div>\n </>\n )}\n </div>\n );\n}\n\nCombobox.displayName = \"Combobox\";\n\nexport { Combobox };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Dialog } from \"radix-ui\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n desktopDialogContentClassName,\n dialogSheetMotionClassName,\n mobileDialogSheetContentClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst DialogRoot = Dialog.Root;\nconst DialogTrigger = Dialog.Trigger;\nconst DialogClose = Dialog.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof Dialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof Dialog.Overlay>\n>(({ className, ...props }, ref) => (\n <Dialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/30 backdrop-blur-sm\",\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 />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof Dialog.Content>,\n React.ComponentPropsWithoutRef<typeof Dialog.Content>\n>(({ className, children, ...props }, ref) => (\n <Dialog.Portal>\n <DialogOverlay />\n <Dialog.Content\n ref={ref}\n className={cn(\n mobileDialogSheetContentClassName,\n desktopDialogContentClassName,\n \"sm:max-w-lg\",\n dialogSheetMotionClassName,\n className,\n )}\n {...props}\n >\n {children}\n <Dialog.Close className=\"absolute right-3 top-3 flex size-9 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,scale] hover:opacity-100 active:scale-[0.96] focus:outline-none focus:ring-2 focus:ring-ground-900/20\">\n <X size={16} />\n <span className=\"sr-only\">Close</span>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Portal>\n));\nDialogContent.displayName = \"DialogContent\";\n\nfunction DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-4\", className)} {...props} />;\n}\nDialogHeader.displayName = \"DialogHeader\";\n\nfunction DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n \"[&>*]:w-full sm:[&>*]:w-auto\",\n className,\n )}\n {...props}\n />\n );\n}\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof Dialog.Title>,\n React.ComponentPropsWithoutRef<typeof Dialog.Title>\n>(({ className, ...props }, ref) => (\n <Dialog.Title\n ref={ref}\n className={cn(\"body-lg font-semibold text-balance text-foreground\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof Dialog.Description>,\n React.ComponentPropsWithoutRef<typeof Dialog.Description>\n>(({ className, ...props }, ref) => (\n <Dialog.Description\n ref={ref}\n className={cn(\"body text-pretty text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n DialogRoot as Dialog,\n DialogTrigger,\n DialogOverlay,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Search, ArrowRight } from \"lucide-react\";\nimport { Dialog, DialogContent } from \"./dialog\";\n\nexport interface CommandPaletteItem {\n id?: string | number;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n category?: string;\n href?: string;\n onSelect?: () => void;\n}\n\ninterface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandPaletteItem[];\n placeholder?: string;\n emptyText?: string;\n}\n\nfunction CommandPalette({\n open,\n onClose,\n items,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n}: CommandPaletteProps) {\n const [query, setQuery] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Focus input when opened\n React.useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 50);\n setQuery(\"\");\n }\n }, [open]);\n\n const filtered =\n query === \"\"\n ? items\n : items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description?.toLowerCase().includes(query.toLowerCase()) ||\n item.category?.toLowerCase().includes(query.toLowerCase()),\n );\n\n // Group by category\n const grouped = filtered.reduce<Record<string, CommandPaletteItem[]>>((acc, item) => {\n const cat = item.category ?? \"\";\n if (!acc[cat]) acc[cat] = [];\n acc[cat].push(item);\n return acc;\n }, {});\n\n const categories = Object.keys(grouped);\n\n function handleSelect(item: CommandPaletteItem) {\n if (item.href) {\n window.location.href = item.href;\n } else {\n item.onSelect?.();\n }\n onClose();\n }\n\n return (\n <Dialog open={open} onOpenChange={(v) => !v && onClose()}>\n <DialogContent className=\"gap-0 overflow-hidden p-0 sm:max-w-xl\">\n {/* Search input */}\n <div className=\"flex items-center gap-3 border-b border-border px-4\">\n <Search size={16} className=\"shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n className=\"h-12 flex-1 bg-transparent body text-foreground placeholder:text-muted-foreground focus:outline-none\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onClose();\n if (e.key === \"Enter\" && filtered.length > 0) handleSelect(filtered[0]);\n }}\n />\n <kbd className=\"hidden items-center gap-0.5 sm:flex\">\n <span className=\"caption-xs font-medium text-muted-foreground rounded border border-border px-1.5 py-0.5\">\n esc\n </span>\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"max-h-80 overflow-y-auto\">\n {filtered.length === 0 ? (\n <p className=\"px-4 py-8 text-center body text-muted-foreground\">{emptyText}</p>\n ) : (\n <ul role=\"list\" className=\"py-2\">\n {categories.map((cat) => (\n <li key={cat}>\n {cat && <p className=\"label px-4 py-2 text-muted-foreground\">{cat}</p>}\n {grouped[cat].map((item, i) => (\n <button\n key={item.id ?? i}\n type=\"button\"\n className=\"flex min-h-10 w-full items-center gap-3 px-4 py-2.5 body text-left transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\"\n onClick={() => handleSelect(item)}\n >\n {item.icon && (\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg border border-border bg-card text-muted-foreground\">\n {item.icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-foreground truncate\">{item.label}</p>\n {item.description && (\n <p className=\"caption text-muted-foreground truncate\">\n {item.description}\n </p>\n )}\n </div>\n <ArrowRight size={13} className=\"shrink-0 text-muted-foreground\" />\n </button>\n ))}\n </li>\n ))}\n </ul>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nCommandPalette.displayName = \"CommandPalette\";\n\nexport { CommandPalette };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Search } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\ninterface CommandContextValue {\n query: string;\n setQuery: React.Dispatch<React.SetStateAction<string>>;\n onSelect?: (value: string) => void;\n reportVisible: (id: string, visible: boolean) => void;\n}\n\nconst CommandCtx = React.createContext<CommandContextValue>({\n query: \"\",\n setQuery: () => {},\n reportVisible: () => {},\n});\n\nconst CommandVisibleCtx = React.createContext(0);\n\ninterface CommandProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n onSelect?: (value: string) => void;\n}\n\nfunction Command({ className, children, onSelect, ...props }: CommandProps) {\n const [query, setQuery] = React.useState(\"\");\n const visibleIds = React.useRef(new Set<string>());\n const [visibleCount, setVisibleCount] = React.useState(0);\n\n const reportVisible = React.useCallback((id: string, visible: boolean) => {\n const had = visibleIds.current.has(id);\n if (visible && !had) {\n visibleIds.current.add(id);\n setVisibleCount(visibleIds.current.size);\n } else if (!visible && had) {\n visibleIds.current.delete(id);\n setVisibleCount(visibleIds.current.size);\n }\n }, []);\n\n return (\n <CommandCtx.Provider\n value={{ query, setQuery, ...(onSelect !== undefined && { onSelect }), reportVisible }}\n >\n <CommandVisibleCtx.Provider value={visibleCount}>\n <div\n className={cn(\n \"flex flex-col overflow-hidden rounded-xl border border-border bg-card\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CommandVisibleCtx.Provider>\n </CommandCtx.Provider>\n );\n}\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\">\n>(({ className, ...props }, ref) => {\n const { query, setQuery } = React.useContext(CommandCtx);\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Search size={14} className=\"shrink-0 text-muted-foreground\" />\n <input\n ref={ref}\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n className={cn(\n \"flex h-10 w-full bg-transparent body text-foreground\",\n \"placeholder:text-muted-foreground focus:outline-none\",\n className,\n )}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const listRef = React.useRef<HTMLDivElement | null>(null);\n\n const combinedRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n listRef.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n },\n [ref],\n );\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (![\"ArrowDown\", \"ArrowUp\"].includes(e.key)) return;\n e.preventDefault();\n const el = listRef.current;\n if (!el) return;\n const items = Array.from(\n el.querySelectorAll<HTMLElement>(\"[data-cmd-item]:not([aria-disabled='true'])\"),\n );\n if (!items.length) return;\n const focused = el.querySelector<HTMLElement>(\"[data-cmd-item]:focus\");\n const idx = focused ? items.indexOf(focused) : -1;\n const next =\n e.key === \"ArrowDown\"\n ? items[Math.min(idx + 1, items.length - 1)]\n : items[Math.max(idx - 1, 0)];\n next?.focus();\n };\n\n return (\n <div\n ref={combinedRef}\n role=\"listbox\"\n onKeyDown={handleKeyDown}\n className={cn(\"max-h-[300px] overflow-y-auto py-1\", className)}\n {...props}\n />\n );\n },\n);\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children = \"No results found.\", ...props }, ref) => {\n const visibleCount = React.useContext(CommandVisibleCtx);\n if (visibleCount > 0) return null;\n return (\n <div\n ref={ref}\n className={cn(\"py-6 text-center caption text-muted-foreground\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCommandEmpty.displayName = \"CommandEmpty\";\n\ninterface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: string;\n}\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ className, heading, children, ...props }, ref) => (\n <div ref={ref} role=\"group\" className={cn(\"py-1\", className)} {...props}>\n {heading && <p className=\"px-3 pb-1 pt-0.5 label text-muted-foreground\">{heading}</p>}\n {children}\n </div>\n ),\n);\nCommandGroup.displayName = \"CommandGroup\";\n\ninterface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n value?: string;\n keywords?: string[];\n disabled?: boolean;\n onSelect?: (value: string) => void;\n}\n\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n ({ className, value = \"\", keywords, disabled, onSelect, children, ...props }, ref) => {\n const { query, onSelect: ctxOnSelect, reportVisible } = React.useContext(CommandCtx);\n const id = React.useId();\n\n const searchText = (keywords ?? [value]).join(\" \").toLowerCase();\n const isVisible = !query || searchText.includes(query.toLowerCase());\n\n React.useLayoutEffect(() => {\n reportVisible(id, isVisible && !disabled);\n return () => reportVisible(id, false);\n }, [id, isVisible, disabled, reportVisible]);\n\n if (!isVisible) return null;\n\n const handleSelect = () => {\n if (disabled) return;\n onSelect?.(value);\n ctxOnSelect?.(value);\n };\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={false}\n aria-disabled={disabled || undefined}\n data-cmd-item\n tabIndex={disabled ? undefined : 0}\n className={cn(\n \"relative mx-1 flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"hover:bg-muted hover:text-foreground\",\n \"focus:bg-muted focus:text-foreground\",\n disabled && \"pointer-events-none opacity-40\",\n className,\n )}\n onClick={handleSelect}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSelect();\n }\n }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCommandItem.displayName = \"CommandItem\";\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"my-1 h-px bg-muted\", className)} {...props} />\n ),\n);\nCommandSeparator.displayName = \"CommandSeparator\";\n\nfunction CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn(\"ml-auto caption text-muted-foreground tracking-widest font-medium\", className)}\n {...props}\n />\n );\n}\nCommandShortcut.displayName = \"CommandShortcut\";\n\ninterface CommandDialogProps extends React.ComponentProps<typeof Dialog> {\n title?: string;\n description?: string;\n className?: string;\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog {...props}>\n <DialogContent className={cn(\"gap-0 overflow-hidden p-0 sm:max-w-xl\", className)}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command className=\"rounded-none border-0 shadow-none\">{children}</Command>\n </DialogContent>\n </Dialog>\n );\n}\nCommandDialog.displayName = \"CommandDialog\";\n\nCommand.displayName = \"Command\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandSeparator,\n CommandShortcut,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ContextMenu } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst ContextMenuRoot = ContextMenu.Root;\nconst ContextMenuTrigger = ContextMenu.Trigger;\nconst ContextMenuGroup = ContextMenu.Group;\nconst ContextMenuPortal = ContextMenu.Portal;\nconst ContextMenuSub = ContextMenu.Sub;\nconst ContextMenuRadioGroup = ContextMenu.RadioGroup;\n\nconst ContextMenuContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Content>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <ContextMenu.Portal>\n <ContextMenu.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-xl border border-border bg-card p-1 text-card-foreground shadow-elevated outline-none\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </ContextMenu.Portal>\n </>\n));\nContextMenuContent.displayName = \"ContextMenuContent\";\n\nconst ContextMenuItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(({ className, inset, destructive, ...props }, ref) => (\n <ContextMenu.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body outline-none transition-colors\",\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-muted-foreground focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = \"ContextMenuItem\";\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenu.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenu.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </ContextMenu.ItemIndicator>\n </span>\n {children}\n </ContextMenu.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = \"ContextMenuCheckboxItem\";\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenu.RadioItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenu.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </ContextMenu.ItemIndicator>\n </span>\n {children}\n </ContextMenu.RadioItem>\n));\nContextMenuRadioItem.displayName = \"ContextMenuRadioItem\";\n\nconst ContextMenuLabel = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenu.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nContextMenuLabel.displayName = \"ContextMenuLabel\";\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenu.Separator\n ref={ref}\n className={cn(\"mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenu.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </ContextMenu.SubTrigger>\n));\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <ContextMenu.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-xl border border-border bg-card p-1 text-card-foreground shadow-elevated outline-none\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nContextMenuSubContent.displayName = \"ContextMenuSubContent\";\n\nfunction ContextMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\";\n\nexport {\n ContextMenuRoot as ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuRadioGroup,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubTrigger,\n ContextMenuSubContent,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement> & { containerClassName?: string }\n>(({ className, containerClassName, ...props }, ref) => (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-xl border border-border bg-card\",\n containerClassName,\n )}\n >\n <table\n ref={ref}\n className={cn(\"min-w-full caption-bottom divide-y divide-border\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"bg-muted\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"divide-y divide-border bg-card\", className)} {...props} />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"bg-muted font-medium\", className)} {...props} />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className,\n )}\n {...props}\n />\n ),\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"px-6 py-3 text-left align-middle label text-muted-foreground\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-6 py-4 align-middle body text-muted-foreground\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 caption text-muted-foreground\", className)} {...props} />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"flex h-10 w-full rounded-md border border-border bg-card px-3 py-1\",\n \"body text-foreground placeholder:text-muted-foreground\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type ColumnFiltersState,\n} from \"@tanstack/react-table\";\nimport { ChevronUp, ChevronDown, ChevronsUpDown } from \"lucide-react\";\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { cn } from \"../lib/utils\";\n\ninterface DataTableProps<TData> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[];\n data: TData[];\n searchKey?: string;\n searchPlaceholder?: string;\n pageSize?: number;\n showPagination?: boolean;\n}\n\nfunction DataTable<TData>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Search...\",\n pageSize = 10,\n showPagination = true,\n}: DataTableProps<TData>) {\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n state: { sorting, columnFilters },\n initialState: { pagination: { pageSize } },\n });\n\n return (\n <div className=\"flex flex-col gap-4\">\n {searchKey && (\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(e) => table.getColumn(searchKey)?.setFilterValue(e.target.value)}\n className=\"max-w-sm\"\n />\n )}\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n aria-sort={\n header.column.getCanSort()\n ? header.column.getIsSorted() === \"asc\"\n ? \"ascending\"\n : header.column.getIsSorted() === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined\n }\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <button\n className={cn(\n \"flex min-h-10 items-center gap-1 transition-colors hover:text-muted-foreground\",\n header.column.getIsSorted() && \"text-foreground\",\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getIsSorted() === \"asc\" ? (\n <ChevronUp size={12} className=\"text-brand-primary\" />\n ) : header.column.getIsSorted() === \"desc\" ? (\n <ChevronDown size={12} className=\"text-brand-primary\" />\n ) : (\n <ChevronsUpDown size={12} className=\"text-muted-foreground\" />\n )}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n {showPagination && (\n <div className=\"flex items-center justify-between\">\n <p className=\"caption tabular-nums text-muted-foreground\">\n {table.getFilteredRowModel().rows.length} result\n {table.getFilteredRowModel().rows.length !== 1 ? \"s\" : \"\"}\n </p>\n <div className=\"flex items-center gap-2\">\n <span className=\"caption tabular-nums text-muted-foreground\">\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport { DataTable };\nexport { createColumnHelper } from \"@tanstack/react-table\";\nexport type { ColumnDef };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Select } from \"radix-ui\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst SelectRoot = Select.Root;\nconst SelectGroup = Select.Group;\nconst SelectValue = Select.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ComponentRef<typeof Select.Trigger>,\n React.ComponentPropsWithoutRef<typeof Select.Trigger>\n>(({ className, children, ...props }, ref) => (\n <Select.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-xl bg-card px-3 py-2\",\n \"body text-foreground shadow-natural\",\n \"focus:outline-none focus:ring-2 focus:ring-ring/20\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <Select.Icon asChild>\n <ChevronDown size={15} className=\"text-muted-foreground shrink-0\" />\n </Select.Icon>\n </Select.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nconst SelectContent = React.forwardRef<\n React.ComponentRef<typeof Select.Content>,\n React.ComponentPropsWithoutRef<typeof Select.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Select.Portal>\n <Select.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden\",\n \"bg-card rounded-xl shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <Select.ScrollUpButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronUp size={14} className=\"text-muted-foreground\" />\n </Select.ScrollUpButton>\n <Select.Viewport\n className={cn(\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n \"max-sm:!h-auto max-sm:max-h-[calc(min(70dvh,28rem)-3rem)] max-sm:!w-full max-sm:!min-w-0\",\n )}\n >\n {children}\n </Select.Viewport>\n <Select.ScrollDownButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronDown size={14} className=\"text-muted-foreground\" />\n </Select.ScrollDownButton>\n </Select.Content>\n </Select.Portal>\n </>\n));\nSelectContent.displayName = \"SelectContent\";\n\nconst SelectItem = React.forwardRef<\n React.ComponentRef<typeof Select.Item>,\n React.ComponentPropsWithoutRef<typeof Select.Item>\n>(({ className, children, ...props }, ref) => (\n <Select.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 w-full cursor-default select-none items-center rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <Select.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </Select.ItemIndicator>\n </span>\n <Select.ItemText>{children}</Select.ItemText>\n </Select.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\nconst SelectLabel = React.forwardRef<\n React.ComponentRef<typeof Select.Label>,\n React.ComponentPropsWithoutRef<typeof Select.Label>\n>(({ className, ...props }, ref) => (\n <Select.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n\nconst SelectSeparator = React.forwardRef<\n React.ComponentRef<typeof Select.Separator>,\n React.ComponentPropsWithoutRef<typeof Select.Separator>\n>(({ className, ...props }, ref) => (\n <Select.Separator ref={ref} className={cn(\"mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nSelectSeparator.displayName = \"SelectSeparator\";\n\nexport {\n SelectRoot as Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Download, Loader2, MoreHorizontal, Upload } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { ButtonGroup, ButtonGroupItem } from \"./button-group\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\";\nimport { cn } from \"../lib/utils\";\n\ninterface DataTransferScopeOption {\n value: string;\n label: string;\n}\n\ninterface DataTransferAction {\n label: string;\n shortLabel?: string;\n ariaLabel?: string;\n icon?: React.ReactNode;\n loading?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n}\n\ninterface DataTransferControlsProps {\n scopeValue?: string;\n onScopeChange?: (value: string) => void;\n scopeOptions?: DataTransferScopeOption[];\n scopePlaceholder?: string;\n actions: DataTransferAction[];\n compact?: boolean;\n compactLabel?: string;\n className?: string;\n selectClassName?: string;\n actionGroupClassName?: string;\n}\n\nfunction normalizeIcon(icon: React.ReactNode, fallback: React.ReactNode, loading?: boolean) {\n if (loading) return <Loader2 className=\"size-4 animate-spin\" aria-hidden=\"true\" />;\n return icon ?? fallback;\n}\n\nfunction DataTransferControls({\n scopeValue,\n onScopeChange,\n scopeOptions = [],\n scopePlaceholder = \"Scope\",\n actions,\n compact = false,\n compactLabel = \"Import and export actions\",\n className,\n selectClassName,\n actionGroupClassName,\n}: DataTransferControlsProps) {\n const hasScope = scopeOptions.length > 0 && scopeValue !== undefined && onScopeChange;\n\n const renderScopeSelect = () => {\n if (!hasScope) return null;\n\n return (\n <Select value={scopeValue} onValueChange={onScopeChange}>\n <SelectTrigger\n aria-label={scopePlaceholder}\n className={cn(\"min-h-10 w-full max-w-full bg-background sm:w-[180px]\", selectClassName)}\n >\n <SelectValue placeholder={scopePlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {scopeOptions.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 defaultActionIcon = (index: number) =>\n index === 0 ? (\n <Upload className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Download className=\"size-4\" aria-hidden=\"true\" />\n );\n\n return (\n <div\n className={cn(\n compact\n ? \"grid w-full min-w-0 grid-cols-[minmax(0,1fr)_auto] gap-2\"\n : \"grid w-full min-w-0 gap-2 sm:flex sm:w-auto sm:flex-wrap sm:items-center\",\n className,\n )}\n >\n {renderScopeSelect()}\n\n {compact ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"size-9\"\n aria-label={compactLabel}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {actions.map((action, index) => {\n const disabled = Boolean(action.disabled || action.loading);\n\n return (\n <DropdownMenuItem\n key={`${action.label}-${index}`}\n disabled={disabled}\n onClick={action.onSelect}\n >\n {normalizeIcon(action.icon, defaultActionIcon(index), action.loading)}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n <ButtonGroup className={cn(\"grid w-full grid-cols-3 sm:inline-flex sm:w-auto\", actionGroupClassName)}>\n {actions.map((action, index) => (\n <ButtonGroupItem\n key={`${action.label}-${index}`}\n className=\"min-h-10 justify-center px-3 disabled:pointer-events-none disabled:opacity-50\"\n onClick={action.onSelect}\n disabled={action.disabled || action.loading}\n aria-label={action.ariaLabel ?? action.label}\n >\n {normalizeIcon(action.icon, defaultActionIcon(index), action.loading)}\n {action.shortLabel ?? action.label}\n </ButtonGroupItem>\n ))}\n </ButtonGroup>\n )}\n </div>\n );\n}\n\nDataTransferControls.displayName = \"DataTransferControls\";\n\nexport { DataTransferControls };\nexport type { DataTransferAction, DataTransferControlsProps, DataTransferScopeOption };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Calendar } from \"./calendar\";\nimport { Button } from \"./button\";\nimport { cn } from \"../lib/utils\";\n\nconst formatDate = (date: Date) =>\n date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n });\n\ninterface DatePickerProps {\n value?: Date | undefined;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Pick a date\",\n disabled,\n className,\n}: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"w-[240px] justify-start gap-2 text-left font-normal\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon size={14} className=\"text-muted-foreground shrink-0\" />\n {value ? formatDate(value) : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0 shadow-elevated\" align=\"start\">\n <Calendar\n mode=\"single\"\n {...(value !== undefined && { selected: value })}\n {...(onChange !== undefined && { onSelect: onChange })}\n autoFocus\n />\n </PopoverContent>\n </Popover>\n );\n}\nDatePicker.displayName = \"DatePicker\";\n\nexport { DatePicker, formatDate };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface DescriptionItem {\n term: string;\n details: React.ReactNode;\n action?: React.ReactNode;\n}\n\ninterface DescriptionListProps {\n title?: string;\n description?: string;\n items: DescriptionItem[];\n columns?: 1 | 2;\n striped?: boolean;\n className?: string;\n}\n\nfunction DescriptionList({\n title,\n description,\n items,\n columns = 1,\n striped = false,\n className,\n}: DescriptionListProps) {\n return (\n <div className={className}>\n {(title || description) && (\n <div className=\"mb-4\">\n {title && <p className=\"body font-semibold text-balance text-foreground\">{title}</p>}\n {description && (\n <p className=\"mt-1 caption text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n\n <dl className={cn(\"border-t border-border\", columns === 2 && \"sm:grid sm:grid-cols-2\")}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn(\n \"py-3.5\",\n columns === 1\n ? \"grid grid-cols-3 gap-4 items-baseline\"\n : \"flex flex-col gap-1 border-b border-border\",\n columns === 1 && i !== items.length - 1 && \"border-b border-border\",\n striped && i % 2 === 0 && \"bg-muted -mx-4 px-4 rounded\",\n )}\n >\n <dt className=\"caption font-semibold text-muted-foreground uppercase tracking-wide\">\n {item.term}\n </dt>\n <dd className={cn(\"body text-foreground\", columns === 1 ? \"col-span-2\" : \"\")}>\n {item.action ? (\n <div className=\"flex items-center justify-between gap-4\">\n <span>{item.details}</span>\n {item.action}\n </div>\n ) : (\n item.details\n )}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\nDescriptionList.displayName = \"DescriptionList\";\n\nexport { DescriptionList };\nexport type { DescriptionItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"../lib/utils\";\n\nconst DrawerRoot = DrawerPrimitive.Root;\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-foreground/40 backdrop-blur-[1px]\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst DrawerContent = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border border-border bg-card\",\n className,\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-1 w-12 rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"grid gap-1 px-6 py-4 text-center sm:text-left\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mt-auto flex flex-col gap-2 px-6 pb-6\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\"subheading text-foreground\", className)}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"body text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport {\n DrawerRoot as Drawer,\n DrawerTrigger,\n DrawerPortal,\n DrawerClose,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface EmptyStateProps {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: {\n label: string;\n href?: string;\n onClick?: () => void;\n };\n className?: string;\n}\n\nfunction EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(\"flex flex-col items-center gap-4 px-6 py-14 text-center\", className)}>\n {icon && (\n <div className=\"flex size-9 items-center justify-center rounded-md bg-brand-secondary/20 text-muted-foreground\">\n {icon}\n </div>\n )}\n <div className=\"flex flex-col gap-1.5\">\n <p className=\"body text-balance font-semibold text-foreground\">{title}</p>\n {description && (\n <p className=\"body max-w-xs text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n {action &&\n (action.href ? (\n <Button size=\"sm\" asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ))}\n </div>\n );\n}\n\nEmptyState.displayName = \"EmptyState\";\n\nexport { EmptyState };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Label as LabelPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"body font-medium leading-none text-muted-foreground\",\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n\nexport { Label };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Label } from \"./label\";\n\ninterface FieldProps {\n label: string;\n htmlFor?: string;\n hint?: string;\n error?: string;\n required?: boolean;\n cornerHint?: string;\n className?: string;\n children: React.ReactNode;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction Field({\n label,\n htmlFor,\n hint,\n error,\n required,\n cornerHint,\n className,\n children,\n ref,\n}: FieldProps) {\n // Predictable ID for the description/error paragraph so consumers can wire\n // aria-describedby on the child input: aria-describedby={`${id}-description`}\n const descriptionId = htmlFor ? `${htmlFor}-description` : undefined;\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label htmlFor={htmlFor} aria-required={required}>\n {label}\n {required && (\n <span className=\"ml-0.5 text-destructive\" aria-hidden=\"true\">\n *\n </span>\n )}\n </Label>\n {cornerHint && <span className=\"caption text-muted-foreground\">{cornerHint}</span>}\n </div>\n {children}\n {error ? (\n <p id={descriptionId} role=\"alert\" className=\"caption text-destructive\">\n {error}\n </p>\n ) : hint ? (\n <p id={descriptionId} className=\"caption text-muted-foreground\">\n {hint}\n </p>\n ) : null}\n </div>\n );\n}\nField.displayName = \"Field\";\n\nexport { Field };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst spinnerVariants = cva(\n \"inline-block animate-spin rounded-full border-2 border-current border-t-transparent\",\n {\n variants: {\n size: {\n xs: \"size-3\",\n sm: \"size-4\",\n default: \"size-5\",\n lg: \"size-6\",\n xl: \"size-8\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n\ninterface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, ...props }: SpinnerProps) {\n return (\n <span\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nexport { Spinner, spinnerVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { File as FileIcon, Upload } from \"lucide-react\";\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"../lib/utils\";\n\ntype FileDropzoneSelectedFile = Pick<File, \"name\" | \"size\">;\n\ninterface FileDropzoneProps extends Omit<\n React.HTMLAttributes<HTMLLabelElement>,\n \"children\" | \"onChange\" | \"onDrop\" | \"onDragOver\" | \"onDragLeave\"\n> {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n loading?: boolean;\n loadingText?: React.ReactNode;\n label?: React.ReactNode;\n activeLabel?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n selectedFiles?: readonly FileDropzoneSelectedFile[] | null;\n inputRef?: React.Ref<HTMLInputElement>;\n inputClassName?: string;\n inputName?: string;\n onFilesSelected?: (files: File[]) => void;\n}\n\nfunction formatFileSize(bytes: number) {\n if (!Number.isFinite(bytes) || bytes <= 0) return \"0 B\";\n\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n const unitIndex = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / Math.pow(1024, unitIndex);\n\n return `${value.toFixed(value >= 10 || unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`;\n}\n\nfunction getFileSummary(files: readonly FileDropzoneSelectedFile[]) {\n if (files.length === 0) return null;\n if (files.length === 1) return `${files[0].name} (${formatFileSize(files[0].size)})`;\n const totalSize = files.reduce((sum, file) => sum + file.size, 0);\n return `${files.length} files selected (${formatFileSize(totalSize)})`;\n}\n\nfunction FileDropzone({\n accept,\n multiple,\n disabled,\n loading,\n loadingText = \"Uploading...\",\n label = \"Drag files here or click to upload\",\n activeLabel = \"Drop files to upload\",\n description,\n icon,\n selectedFiles,\n inputRef,\n inputClassName,\n inputName,\n onFilesSelected,\n className,\n id,\n tabIndex,\n onKeyDown,\n onClick,\n ...props\n}: FileDropzoneProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const inputId = React.useId();\n const resolvedId = id ?? inputId;\n const fileSummary = getFileSummary(selectedFiles ?? []);\n const isUnavailable = Boolean(disabled || loading);\n\n const emitFiles = React.useCallback(\n (fileList: FileList | null) => {\n if (!fileList || isUnavailable) return;\n onFilesSelected?.(Array.from(fileList));\n },\n [isUnavailable, onFilesSelected],\n );\n\n return (\n <label\n htmlFor={resolvedId}\n role=\"button\"\n tabIndex={isUnavailable ? -1 : (tabIndex ?? 0)}\n aria-disabled={isUnavailable || undefined}\n data-dragging={isDragging ? \"true\" : \"false\"}\n className={cn(\n \"group flex min-h-36 cursor-pointer flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card p-6 text-center shadow-natural\",\n \"transition-[background-color,border-color,box-shadow,scale] duration-150\",\n \"hover:border-brand-primary/50 hover:bg-muted/40 active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"data-[dragging=true]:border-brand-primary data-[dragging=true]:bg-brand-secondary/25\",\n isUnavailable && \"pointer-events-none cursor-not-allowed opacity-60 active:scale-100\",\n className,\n )}\n onDragOver={(event) => {\n event.preventDefault();\n if (!isUnavailable) setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n emitFiles(event.dataTransfer.files);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || isUnavailable) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(resolvedId)?.click();\n }\n }}\n onClick={(event) => {\n if (isUnavailable) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n }}\n {...props}\n >\n <input\n ref={inputRef}\n id={resolvedId}\n name={inputName}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={isUnavailable}\n className={cn(\"sr-only\", inputClassName)}\n onChange={(event) => emitFiles(event.currentTarget.files)}\n />\n <span\n className={cn(\n \"mb-3 flex size-12 items-center justify-center rounded-xl bg-muted text-muted-foreground\",\n \"transition-[background-color,color,scale] duration-150 group-hover:bg-brand-secondary/35 group-hover:text-foreground\",\n \"group-data-[dragging=true]:bg-brand-secondary group-data-[dragging=true]:text-foreground\",\n )}\n aria-hidden=\"true\"\n >\n {loading ? <Spinner size=\"sm\" /> : (icon ?? <Upload className=\"size-5\" />)}\n </span>\n <span className=\"body-sm font-medium text-foreground text-balance\">\n {loading ? loadingText : isDragging ? activeLabel : fileSummary ? fileSummary : label}\n </span>\n {description && (\n <span className=\"caption mt-1 max-w-md text-pretty text-muted-foreground\">\n {description}\n </span>\n )}\n {fileSummary && !loading && (\n <span className=\"caption mt-2 inline-flex min-h-7 max-w-full items-center gap-1 rounded-full bg-muted px-2.5 text-muted-foreground\">\n <FileIcon className=\"size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate\">{multiple ? \"Ready to upload\" : \"Selected\"}</span>\n </span>\n )}\n </label>\n );\n}\n\nFileDropzone.displayName = \"FileDropzone\";\n\nexport { FileDropzone, formatFileSize };\nexport type { FileDropzoneProps, FileDropzoneSelectedFile };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/* ------------------------------------------------------------------ */\n/* Generic grid container */\n/* ------------------------------------------------------------------ */\n\ninterface GridListProps {\n children: React.ReactNode;\n columns?: 2 | 3 | 4;\n gap?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst colMap = {\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-4\",\n};\n\nconst gapMap = {\n sm: \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n};\n\nfunction GridList({ children, columns = 3, gap = \"md\", className }: GridListProps) {\n return (\n <ul role=\"list\" className={cn(\"grid\", colMap[columns], gapMap[gap], className)}>\n {children}\n </ul>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Simple card item */\n/* ------------------------------------------------------------------ */\n\ninterface GridListCardProps {\n title: string;\n description?: string;\n meta?: string;\n href?: string;\n accent?: React.ReactNode;\n trailing?: React.ReactNode;\n className?: string;\n}\n\nfunction GridListCard({\n title,\n description,\n meta,\n href,\n accent,\n trailing,\n className,\n}: GridListCardProps) {\n const inner = (\n <div\n className={cn(\n \"flex h-full flex-col gap-1 rounded-xl border border-border bg-card p-4 shadow-natural transition-shadow\",\n href && \"hover:shadow-elevated\",\n className,\n )}\n >\n {accent && <div className=\"mb-2\">{accent}</div>}\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && <p className=\"caption text-muted-foreground text-pretty\">{description}</p>}\n {(meta || trailing) && (\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {meta && <span className=\"caption text-muted-foreground\">{meta}</span>}\n {trailing && <span className=\"caption text-muted-foreground\">{trailing}</span>}\n </div>\n )}\n </div>\n );\n\n return (\n <li>\n {href ? (\n <a\n href={href}\n className=\"block h-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl\"\n >\n {inner}\n </a>\n ) : (\n inner\n )}\n </li>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Horizontal accent card (colored left strip + title + meta) */\n/* ------------------------------------------------------------------ */\n\ninterface GridListAccentCardProps {\n title: string;\n meta?: string;\n href?: string;\n accentClass?: string;\n initials?: string;\n trailing?: React.ReactNode;\n className?: string;\n}\n\nfunction GridListAccentCard({\n title,\n meta,\n href,\n accentClass = \"bg-foreground\",\n initials,\n trailing,\n className,\n}: GridListAccentCardProps) {\n const inner = (\n <div\n className={cn(\n \"flex overflow-hidden rounded-xl border border-border bg-card shadow-natural transition-shadow\",\n href && \"hover:shadow-elevated\",\n className,\n )}\n >\n <div\n className={cn(\n \"flex w-14 shrink-0 items-center justify-center body font-semibold text-background\",\n accentClass,\n )}\n >\n {initials}\n </div>\n <div className=\"flex flex-1 items-center justify-between truncate border-l border-border px-4 py-3\">\n <div className=\"min-w-0\">\n <p className=\"body font-semibold text-foreground truncate text-balance\">{title}</p>\n {meta && <p className=\"caption text-muted-foreground\">{meta}</p>}\n </div>\n {trailing && <div className=\"shrink-0 pl-2\">{trailing}</div>}\n </div>\n </div>\n );\n\n return (\n <li>\n {href ? (\n <a\n href={href}\n className=\"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl\"\n >\n {inner}\n </a>\n ) : (\n inner\n )}\n </li>\n );\n}\n\nGridList.displayName = \"GridList\";\nGridListCard.displayName = \"GridListCard\";\nGridListAccentCard.displayName = \"GridListAccentCard\";\n\nexport { GridList, GridListCard, GridListAccentCard };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tooltip } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nfunction TooltipProvider({\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof Tooltip.Provider>) {\n return (\n <Tooltip.Provider delayDuration={300} {...props}>\n {children}\n </Tooltip.Provider>\n );\n}\n\nconst TooltipRoot = Tooltip.Root;\nconst TooltipTrigger = Tooltip.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof Tooltip.Content>,\n React.ComponentPropsWithoutRef<typeof Tooltip.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <Tooltip.Portal>\n <Tooltip.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 rounded-lg bg-foreground px-2.5 py-1.5 caption text-background\",\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-1 data-[side=top]:slide-in-from-bottom-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n className,\n )}\n {...props}\n />\n </Tooltip.Portal>\n));\nTooltipContent.displayName = \"TooltipContent\";\n\nexport { TooltipProvider, TooltipRoot as Tooltip, TooltipTrigger, TooltipContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\ninterface HelpTooltipProps {\n text: string;\n learnMoreUrl?: string;\n learnMoreURL?: string;\n placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n contentClassName?: string;\n}\n\nfunction HelpTooltip({\n text,\n learnMoreUrl,\n learnMoreURL,\n placement = \"top\",\n className,\n contentClassName,\n}: HelpTooltipProps) {\n const [open, setOpen] = React.useState(false);\n const rootRef = React.useRef<HTMLSpanElement>(null);\n const url = learnMoreUrl ?? learnMoreURL;\n const body = text.length > 120 ? `${text.slice(0, 117)}...` : text;\n\n React.useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [open]);\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip open={open} onOpenChange={setOpen}>\n <span ref={rootRef} className={cn(\"inline-flex align-middle\", className)}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"relative ml-1 inline-flex size-5 items-center justify-center rounded-full text-muted-foreground\",\n \"transition-[color,scale] duration-150 hover:text-foreground active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"before:absolute before:-inset-2.5 before:content-['']\",\n )}\n aria-label=\"Help\"\n onClick={(event) => {\n event.preventDefault();\n setOpen((current) => !current);\n }}\n >\n <CircleHelp className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </TooltipTrigger>\n <TooltipContent\n side={placement}\n collisionPadding={12}\n className={cn(\"max-w-xs text-sm\", contentClassName)}\n >\n <p className=\"text-pretty\">{body}</p>\n {url && (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-1 block text-xs font-medium text-brand-primary underline-offset-4 hover:underline\"\n >\n Learn more\n </a>\n )}\n </TooltipContent>\n </span>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nHelpTooltip.displayName = \"HelpTooltip\";\n\nexport { HelpTooltip, type HelpTooltipProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { HoverCard } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst HoverCardRoot = HoverCard.Root;\nconst HoverCardTrigger = HoverCard.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ComponentRef<typeof HoverCard.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCard.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <HoverCard.Portal>\n <HoverCard.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-xl border border-border bg-card p-4 shadow-elevated outline-none\",\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=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </HoverCard.Portal>\n));\nHoverCardContent.displayName = \"HoverCardContent\";\n\nexport { HoverCardRoot as HoverCard, HoverCardTrigger, HoverCardContent };\n","import * as React from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface InputGroupProps extends React.InputHTMLAttributes<HTMLInputElement> {\n leadingAddon?: React.ReactNode;\n trailingAddon?: React.ReactNode;\n leadingIcon?: React.ReactNode;\n trailingIcon?: React.ReactNode;\n trailingAction?: React.ReactNode;\n trailingActionClassName?: string;\n trailingButton?: React.ReactNode;\n error?: boolean;\n pill?: boolean;\n wrapperClassName?: string;\n}\n\nconst InputGroup = React.forwardRef<HTMLInputElement, InputGroupProps>(\n (\n {\n leadingAddon,\n trailingAddon,\n leadingIcon,\n trailingIcon,\n trailingAction,\n trailingActionClassName,\n trailingButton,\n error,\n pill,\n className,\n wrapperClassName,\n ...props\n },\n ref,\n ) => {\n const radius = pill ? \"rounded-full\" : \"rounded-lg\";\n const hasLeading = leadingAddon || leadingIcon;\n const hasInsetTrailing = trailingIcon || trailingAction || error;\n const hasTrailing = trailingAddon || hasInsetTrailing || trailingButton;\n\n const baseInput = cn(\n \"flex h-10 w-full border bg-card body text-foreground placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:disabled:cursor-not-allowed disabled:opacity-50\",\n error\n ? \"border-destructive focus-visible:ring-destructive/20 focus-visible:border-destructive\"\n : \"border-border focus-visible:ring-brand-primary/20 focus-visible:border-brand-primary\",\n );\n\n if (!hasLeading && !hasTrailing) {\n return <input ref={ref} className={cn(baseInput, radius, \"px-3\", className)} {...props} />;\n }\n\n return (\n <div className={cn(\"flex\", wrapperClassName)}>\n {/* Leading addon (text) */}\n {leadingAddon && (\n <span\n className={cn(\n \"inline-flex items-center border border-r-0 bg-muted px-3 body text-muted-foreground select-none\",\n error ? \"border-destructive\" : \"border-border\",\n pill ? \"rounded-l-full\" : \"rounded-l-lg\",\n )}\n >\n {leadingAddon}\n </span>\n )}\n\n {/* Relative wrapper for icon-only inputs */}\n <div className=\"relative flex-1\">\n {leadingIcon && (\n <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-muted-foreground\">\n {leadingIcon}\n </div>\n )}\n\n <input\n ref={ref}\n className={cn(\n baseInput,\n // Border radius\n leadingAddon\n ? trailingAddon || trailingButton\n ? \"rounded-none px-3\"\n : pill\n ? \"rounded-none rounded-r-full px-3\"\n : \"rounded-none rounded-r-lg px-3\"\n : leadingIcon\n ? trailingAddon\n ? pill\n ? \"rounded-l-full rounded-r-none pl-9 pr-3\"\n : \"rounded-l-lg rounded-r-none pl-9 pr-3\"\n : hasInsetTrailing\n ? cn(radius, \"pl-9 pr-9\")\n : cn(radius, \"pl-9 pr-3\")\n : trailingAddon\n ? pill\n ? \"rounded-l-full rounded-r-none px-3\"\n : \"rounded-l-lg rounded-r-none px-3\"\n : hasInsetTrailing\n ? cn(radius, \"pl-3 pr-9\")\n : cn(radius, \"px-3\"),\n trailingAction && \"pr-16\",\n className,\n )}\n {...props}\n />\n\n {(trailingIcon || error) && (\n <div className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n {error ? (\n <AlertCircle size={15} className=\"text-destructive\" />\n ) : (\n <span className=\"text-muted-foreground\">{trailingIcon}</span>\n )}\n </div>\n )}\n\n {trailingAction && (\n <div\n className={cn(\n \"absolute right-2 top-1/2 flex -translate-y-1/2 items-center\",\n trailingActionClassName,\n )}\n >\n {trailingAction}\n </div>\n )}\n </div>\n\n {/* Trailing addon (text) */}\n {trailingAddon && (\n <span\n className={cn(\n \"inline-flex items-center border border-l-0 bg-muted px-3 body text-muted-foreground select-none\",\n error ? \"border-destructive\" : \"border-border\",\n pill ? \"rounded-r-full\" : \"rounded-r-lg\",\n )}\n >\n {trailingAddon}\n </span>\n )}\n\n {/* Trailing button */}\n {trailingButton && <div className=\"flex\">{trailingButton}</div>}\n </div>\n );\n },\n);\nInputGroup.displayName = \"InputGroup\";\n\nexport { InputGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface InputNumberProps extends Omit<\n React.ComponentProps<\"input\">,\n \"type\" | \"value\" | \"onChange\"\n> {\n value: number | null;\n onChange: (next: number) => void;\n min?: number | undefined;\n max?: number | undefined;\n step?: number | undefined;\n /** Suffix shown after the number (e.g. \"px\", \"mm\", \"°\", \"%\"). */\n unit?: string | undefined;\n /** Number of decimals to display. Default: 0. */\n precision?: number | undefined;\n /** Text shown when value is null. Useful for mixed multi-selection values. */\n mixedLabel?: string | undefined;\n /** Calls onChange while typing instead of waiting for blur/Enter. */\n commitOnChange?: boolean | undefined;\n /** Hides the up/down stepper buttons. */\n hideSteppers?: boolean | undefined;\n}\n\n/**\n * Numeric input with up/down steppers, unit suffix, and arrow-key step (Shift = 10×).\n * Designed for designer property panels — see PHASE_0_AUDIT.md §P0.2.\n */\nconst InputNumber = React.forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value,\n onChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n unit,\n precision = 0,\n mixedLabel = \"Mixed\",\n commitOnChange = false,\n hideSteppers = false,\n className,\n disabled,\n onBlur,\n onFocus,\n onKeyDown,\n ...rest\n },\n ref,\n ) => {\n const formatValue = React.useCallback(\n (next: number | null) => (next === null ? mixedLabel : next.toFixed(precision)),\n [mixedLabel, precision],\n );\n\n const [text, setText] = React.useState<string>(formatValue(value));\n\n React.useEffect(() => {\n setText(formatValue(value));\n }, [formatValue, value]);\n\n const clamp = React.useCallback((n: number) => Math.min(max, Math.max(min, n)), [min, max]);\n\n const parseAndClamp = React.useCallback((raw: string) => {\n const n = parseFloat(raw);\n if (Number.isFinite(n)) {\n return clamp(n);\n }\n return null;\n }, [clamp]);\n\n const commit = (raw: string) => {\n const next = parseAndClamp(raw);\n if (next === null) {\n setText(formatValue(value));\n return;\n }\n onChange(next);\n setText(next.toFixed(precision));\n };\n\n const bump = (delta: number) => {\n const next = clamp((value ?? 0) + delta);\n onChange(next);\n setText(next.toFixed(precision));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n bump(step * (e.shiftKey ? 10 : 1));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n bump(-step * (e.shiftKey ? 10 : 1));\n } else if (e.key === \"Enter\") {\n commit((e.target as HTMLInputElement).value);\n }\n };\n\n return (\n <div\n className={cn(\n \"inline-flex h-8 items-stretch rounded-md border border-border bg-card overflow-hidden\",\n \"focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n spellCheck={false}\n value={text}\n onChange={(e) => {\n setText(e.target.value);\n if (commitOnChange) {\n const next = parseAndClamp(e.target.value);\n if (next !== null) {\n onChange(next);\n }\n }\n }}\n onFocus={(e) => {\n if (value === null) {\n setText(\"\");\n }\n onFocus?.(e);\n }}\n onBlur={(e) => {\n commit(e.target.value);\n onBlur?.(e);\n }}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"w-full caption text-foreground px-2 bg-transparent focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none text-right\"\n {...rest}\n />\n {unit && (\n <span\n aria-hidden\n className=\"caption-xs text-muted-foreground self-center pr-1.5 select-none\"\n >\n {unit}\n </span>\n )}\n {!hideSteppers && (\n <div className=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => bump(step)}\n aria-label=\"Increment\"\n className=\"flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground\"\n >\n <svg viewBox=\"0 0 8 5\" width=\"8\" height=\"5\" fill=\"currentColor\">\n <path d=\"M0 5 L4 0 L8 5 Z\" />\n </svg>\n </button>\n <div className=\"border-t border-border\" />\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => bump(-step)}\n aria-label=\"Decrement\"\n className=\"flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground\"\n >\n <svg viewBox=\"0 0 8 5\" width=\"8\" height=\"5\" fill=\"currentColor\">\n <path d=\"M0 0 L4 5 L8 0 Z\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n );\n },\n);\nInputNumber.displayName = \"InputNumber\";\n\nexport { InputNumber };\nexport type { InputNumberProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { Minus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst InputOTP = React.forwardRef<\n React.ComponentRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\"flex items-center gap-2 has-disabled:opacity-50\", containerClassName)}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n));\nInputOTP.displayName = \"InputOTP\";\n\nconst InputOTPGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props} />\n ),\n);\nInputOTPGroup.displayName = \"InputOTPGroup\";\n\nconst InputOTPSlot = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex h-12 w-11 items-center justify-center\",\n \"border-y border-r border-border body font-medium text-foreground\",\n \"first:rounded-l-xl first:border-l last:rounded-r-xl\",\n \"transition-[border-color,box-shadow]\",\n isActive && \"z-10 ring-2 ring-brand-primary/40 border-brand-primary\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-5 w-px animate-caret-blink bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n );\n});\nInputOTPSlot.displayName = \"InputOTPSlot\";\n\nconst InputOTPSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus size={14} className=\"text-muted-foreground\" />\n </div>\n ),\n);\nInputOTPSeparator.displayName = \"InputOTPSeparator\";\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst Kbd = React.forwardRef<HTMLElement, React.ComponentProps<\"kbd\">>(\n ({ className, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono caption-xs font-medium text-muted-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\nKbd.displayName = \"Kbd\";\n\nexport { Kbd };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { File, Image } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface MediaAssetCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n src?: string | null;\n alt?: string;\n meta?: React.ReactNode;\n details?: React.ReactNode;\n actions?: React.ReactNode;\n selected?: boolean;\n mediaType?: \"image\" | \"file\" | \"video\" | \"unknown\";\n orientation?: \"responsive\" | \"grid\" | \"list\";\n onSelect?: () => void;\n}\n\nfunction MediaAssetCard({\n name,\n src,\n alt = \"\",\n meta,\n details,\n actions,\n selected,\n mediaType = src ? \"image\" : \"file\",\n orientation = \"responsive\",\n onSelect,\n className,\n onClick,\n ...props\n}: MediaAssetCardProps) {\n const isInteractive = Boolean(onSelect || onClick);\n const Wrapper = isInteractive ? \"button\" : \"div\";\n const isList = orientation === \"list\";\n const isGrid = orientation === \"grid\";\n const showImage = Boolean(src && mediaType === \"image\");\n\n const fallbackIcon =\n mediaType === \"image\" ? (\n <Image className=\"size-6 text-muted-foreground\" aria-hidden=\"true\" />\n ) : (\n <File className=\"size-6 text-muted-foreground\" aria-hidden=\"true\" />\n );\n\n return (\n <div\n className={cn(\n \"group min-w-0\",\n isGrid && \"overflow-hidden rounded-xl border border-border bg-card shadow-natural\",\n isList && \"flex gap-3 border-b border-border py-3 last:border-b-0\",\n orientation === \"responsive\" &&\n \"flex gap-3 border-b border-border py-3 last:border-b-0 sm:block sm:overflow-hidden sm:rounded-xl sm:border sm:bg-card sm:py-0 sm:shadow-natural\",\n selected && \"ring-2 ring-brand-primary/35\",\n className,\n )}\n data-slot=\"media-asset-card\"\n data-selected={selected ? \"true\" : \"false\"}\n {...props}\n >\n <Wrapper\n type={Wrapper === \"button\" ? \"button\" : undefined}\n className={cn(\n \"relative flex shrink-0 items-center justify-center overflow-hidden bg-muted text-left\",\n \"transition-[background-color,box-shadow,scale] duration-150\",\n isInteractive &&\n \"cursor-pointer active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n isList && \"size-16 rounded-lg\",\n isGrid && \"aspect-square w-full\",\n orientation === \"responsive\" &&\n \"size-16 rounded-lg sm:aspect-square sm:size-auto sm:w-full sm:rounded-none\",\n )}\n onClick={(event) => {\n onClick?.(event as React.MouseEvent<HTMLDivElement>);\n if (!event.defaultPrevented) onSelect?.();\n }}\n aria-label={isInteractive && typeof name === \"string\" ? name : undefined}\n >\n {showImage ? (\n <img\n src={src ?? undefined}\n alt={alt}\n className=\"size-full object-cover shadow-[inset_0_0_0_1px_rgba(0,0,0,0.1)] dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)]\"\n />\n ) : (\n fallbackIcon\n )}\n </Wrapper>\n\n <div\n className={cn(\n \"min-w-0 flex-1\",\n isGrid && \"p-3\",\n isList && \"py-0.5\",\n orientation === \"responsive\" && \"py-0.5 sm:p-3\",\n )}\n >\n <div className=\"flex min-w-0 items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"line-clamp-2 break-words text-sm font-medium leading-5 text-foreground sm:truncate\">\n {name}\n </p>\n {meta && <p className=\"caption mt-0.5 truncate text-muted-foreground\">{meta}</p>}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n {details && <div className=\"caption mt-2 text-pretty text-muted-foreground\">{details}</div>}\n </div>\n </div>\n );\n}\n\nMediaAssetCard.displayName = \"MediaAssetCard\";\n\nexport { MediaAssetCard };\nexport type { MediaAssetCardProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface MediaObjectProps {\n media: React.ReactNode;\n children: React.ReactNode;\n mediaPosition?: \"left\" | \"right\";\n align?: \"top\" | \"center\" | \"bottom\";\n gap?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst alignMap = {\n top: \"items-start\",\n center: \"items-center\",\n bottom: \"items-end\",\n};\n\nconst gapMap = {\n sm: \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n};\n\nfunction MediaObject({\n media,\n children,\n mediaPosition = \"left\",\n align = \"top\",\n gap = \"md\",\n className,\n}: MediaObjectProps) {\n return (\n <div\n className={cn(\n \"flex\",\n mediaPosition === \"right\" && \"flex-row-reverse\",\n alignMap[align],\n gapMap[gap],\n className,\n )}\n >\n <div className=\"shrink-0\">{media}</div>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n );\n}\n\nMediaObject.displayName = \"MediaObject\";\n\nexport { MediaObject };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menubar } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst MenubarRoot = React.forwardRef<\n React.ComponentRef<typeof Menubar.Root>,\n React.ComponentPropsWithoutRef<typeof Menubar.Root>\n>(({ className, ...props }, ref) => (\n <Menubar.Root\n ref={ref}\n className={cn(\n \"flex min-h-10 items-center gap-0.5 rounded-lg border border-border bg-card px-1\",\n className,\n )}\n {...props}\n />\n));\nMenubarRoot.displayName = \"Menubar\";\n\nconst MenubarMenu = Menubar.Menu;\n\nconst MenubarGroup = Menubar.Group;\n\nconst MenubarSub = Menubar.Sub;\n\nconst MenubarRadioGroup = Menubar.RadioGroup;\n\nconst MenubarTrigger = React.forwardRef<\n React.ComponentRef<typeof Menubar.Trigger>,\n React.ComponentPropsWithoutRef<typeof Menubar.Trigger>\n>(({ className, ...props }, ref) => (\n <Menubar.Trigger\n ref={ref}\n className={cn(\n \"flex min-h-8 cursor-default items-center rounded-md px-3 py-1 body font-medium text-muted-foreground select-none outline-none\",\n \"hover:bg-muted\",\n \"data-[state=open]:bg-muted data-[state=open]:text-foreground\",\n \"focus:bg-muted\",\n className,\n )}\n {...props}\n />\n));\nMenubarTrigger.displayName = \"MenubarTrigger\";\n\nconst MenubarContent = React.forwardRef<\n React.ComponentRef<typeof Menubar.Content>,\n React.ComponentPropsWithoutRef<typeof Menubar.Content>\n>(({ className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Menubar.Portal>\n <Menubar.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] bg-card rounded-xl shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </Menubar.Portal>\n </>\n));\nMenubarContent.displayName = \"MenubarContent\";\n\nconst MenubarItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.Item>,\n React.ComponentPropsWithoutRef<typeof Menubar.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Menubar.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nMenubarItem.displayName = \"MenubarItem\";\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof Menubar.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <Menubar.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <Menubar.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </Menubar.ItemIndicator>\n </span>\n {children}\n </Menubar.CheckboxItem>\n));\nMenubarCheckboxItem.displayName = \"MenubarCheckboxItem\";\n\nconst MenubarRadioItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.RadioItem>,\n React.ComponentPropsWithoutRef<typeof Menubar.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <Menubar.RadioItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <Menubar.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </Menubar.ItemIndicator>\n </span>\n {children}\n </Menubar.RadioItem>\n));\nMenubarRadioItem.displayName = \"MenubarRadioItem\";\n\nconst MenubarLabel = React.forwardRef<\n React.ComponentRef<typeof Menubar.Label>,\n React.ComponentPropsWithoutRef<typeof Menubar.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Menubar.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nMenubarLabel.displayName = \"MenubarLabel\";\n\nconst MenubarSeparator = React.forwardRef<\n React.ComponentRef<typeof Menubar.Separator>,\n React.ComponentPropsWithoutRef<typeof Menubar.Separator>\n>(({ className, ...props }, ref) => (\n <Menubar.Separator ref={ref} className={cn(\"mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nMenubarSeparator.displayName = \"MenubarSeparator\";\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ComponentRef<typeof Menubar.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof Menubar.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <Menubar.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </Menubar.SubTrigger>\n));\nMenubarSubTrigger.displayName = \"MenubarSubTrigger\";\n\nconst MenubarSubContent = React.forwardRef<\n React.ComponentRef<typeof Menubar.SubContent>,\n React.ComponentPropsWithoutRef<typeof Menubar.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Menubar.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] bg-card rounded-xl border border-border shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nMenubarSubContent.displayName = \"MenubarSubContent\";\n\nfunction MenubarShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nMenubarShortcut.displayName = \"MenubarShortcut\";\n\nexport {\n MenubarRoot as Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarLabel,\n MenubarSeparator,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n MenubarShortcut,\n MenubarGroup,\n};\n","import * as React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst NativeSelect = React.forwardRef<\n HTMLSelectElement,\n React.SelectHTMLAttributes<HTMLSelectElement>\n>(({ className, children, ...props }, ref) => (\n <div className=\"relative\">\n <select\n ref={ref}\n className={cn(\n \"peer h-10 w-full appearance-none rounded-lg border border-border bg-card pl-3 pr-8\",\n \"body text-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring/30 focus:border-border\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/20\",\n className,\n )}\n {...props}\n >\n {children}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground peer-disabled:opacity-50\"\n />\n </div>\n));\nNativeSelect.displayName = \"NativeSelect\";\n\nconst NativeSelectOption = React.forwardRef<\n HTMLOptionElement,\n React.OptionHTMLAttributes<HTMLOptionElement>\n>((props, ref) => <option ref={ref} {...props} />);\nNativeSelectOption.displayName = \"NativeSelectOption\";\n\nconst NativeSelectOptGroup = React.forwardRef<\n HTMLOptGroupElement,\n React.OptgroupHTMLAttributes<HTMLOptGroupElement>\n>((props, ref) => <optgroup ref={ref} {...props} />);\nNativeSelectOptGroup.displayName = \"NativeSelectOptGroup\";\n\nexport { NativeSelect, NativeSelectOption, NativeSelectOptGroup };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { NavigationMenu } from \"radix-ui\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst NavigationMenuRoot = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenu.Root\n ref={ref}\n className={cn(\"relative z-10 flex max-w-max flex-1 items-center justify-center\", className)}\n {...props}\n >\n {children}\n </NavigationMenu.Root>\n));\nNavigationMenuRoot.displayName = \"NavigationMenu\";\n\nconst NavigationMenuList = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.List\n ref={ref}\n className={cn(\"group flex flex-1 list-none items-center justify-center gap-1\", className)}\n {...props}\n />\n));\nNavigationMenuList.displayName = \"NavigationMenuList\";\n\nconst NavigationMenuItem = NavigationMenu.Item;\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenu.Trigger\n ref={ref}\n className={cn(\n \"group inline-flex h-10 w-max items-center justify-center gap-1 rounded-md px-3 py-2\",\n \"body font-medium text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[active]:bg-muted data-[state=open]:bg-muted\",\n \"outline-none transition-colors\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n size={12}\n className=\"transition-transform duration-200 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenu.Trigger>\n));\nNavigationMenuTrigger.displayName = \"NavigationMenuTrigger\";\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Content\n ref={ref}\n className={cn(\n \"left-0 top-0 w-full\",\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out\",\n \"data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out\",\n \"data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52\",\n \"data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52\",\n \"md:absolute md:w-auto\",\n className,\n )}\n {...props}\n />\n));\nNavigationMenuContent.displayName = \"NavigationMenuContent\";\n\nconst NavigationMenuLink = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Link>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Link>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Link\n ref={ref}\n className={cn(\n \"block min-h-10 select-none rounded-md px-3 py-2 body text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"outline-none transition-colors\",\n className,\n )}\n {...props}\n />\n));\nNavigationMenuLink.displayName = \"NavigationMenuLink\";\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Viewport>\n>(({ className, ...props }, ref) => (\n <div className=\"absolute left-0 top-full flex justify-center\">\n <NavigationMenu.Viewport\n ref={ref}\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-xl border border-border bg-card shadow-elevated\",\n \"md:w-[var(--radix-navigation-menu-viewport-width)]\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90\",\n className,\n )}\n {...props}\n />\n </div>\n));\nNavigationMenuViewport.displayName = \"NavigationMenuViewport\";\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out\",\n \"data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className,\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-muted shadow-elevated\" />\n </NavigationMenu.Indicator>\n));\nNavigationMenuIndicator.displayName = \"NavigationMenuIndicator\";\n\nfunction navigationMenuTriggerStyle() {\n return cn(\n \"group inline-flex h-10 w-max items-center justify-center gap-1 rounded-md px-3 py-2\",\n \"body font-medium text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[active]:bg-muted data-[state=open]:bg-muted\",\n \"outline-none transition-colors\",\n );\n}\n\nexport {\n NavigationMenuRoot as NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuViewport,\n NavigationMenuIndicator,\n navigationMenuTriggerStyle,\n};\n","import * as React from \"react\";\nimport { X, CheckCircle, AlertCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface NotificationAction {\n label: string;\n onClick?: () => void;\n variant?: \"default\" | \"ghost\";\n}\n\ninterface NotificationProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n variant?: \"default\" | \"success\" | \"error\" | \"warning\" | \"info\";\n actions?: NotificationAction[];\n onClose?: () => void;\n className?: string;\n}\n\nconst variantConfig = {\n default: { icon: null, iconClass: \"text-muted-foreground\" },\n success: {\n icon: CheckCircle,\n iconClass: \"bg-brand-secondary/25 text-muted-foreground rounded-full p-1\",\n },\n error: { icon: AlertCircle, iconClass: \"text-destructive\" },\n warning: {\n icon: AlertTriangle,\n iconClass: \"bg-brand-secondary/80 text-muted-foreground rounded-full p-1\",\n },\n info: { icon: Info, iconClass: \"text-muted-foreground\" },\n};\n\nfunction Notification({\n title,\n description,\n icon,\n variant = \"default\",\n actions,\n onClose,\n className,\n}: NotificationProps) {\n const config = variantConfig[variant];\n const DefaultIcon = config.icon;\n\n const resolvedIcon = icon ?? (DefaultIcon ? <DefaultIcon size={20} /> : null);\n\n return (\n <div\n className={cn(\n \"pointer-events-auto w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-elevated\",\n className,\n )}\n >\n <div className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n {resolvedIcon && (\n <div className={cn(\"shrink-0 mt-0.5\", config.iconClass)}>{resolvedIcon}</div>\n )}\n\n {/* Body */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && (\n <p className=\"mt-0.5 body text-muted-foreground text-pretty\">{description}</p>\n )}\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <div className=\"mt-3 flex gap-3\">\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"min-h-10 body font-semibold transition-colors\",\n action.variant === \"ghost\"\n ? \"text-muted-foreground hover:text-muted-foreground\"\n : \"text-foreground hover:text-muted-foreground\",\n )}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Close */}\n {onClose && (\n <div className=\"shrink-0\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex size-9 items-center justify-center rounded-md text-muted-foreground transition-[color,scale] hover:text-muted-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\"\n >\n <span className=\"sr-only\">Close</span>\n <X size={16} />\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nNotification.displayName = \"Notification\";\n\nexport { Notification };\n","import * as React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Badge } from \"./badge\";\n\ninterface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface PageHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\";\n primary?: boolean;\n}\n\ninterface PageHeadingMeta {\n icon?: React.ReactNode;\n text: string;\n}\n\ninterface PageHeadingProps {\n title: string;\n description?: string;\n breadcrumbs?: BreadcrumbItem[];\n actions?: PageHeadingAction[];\n meta?: PageHeadingMeta[];\n badge?: string | { label: string; variant?: \"default\" | \"secondary\" | \"outline\" | \"destructive\" };\n className?: string;\n}\n\nfunction PageHeading({\n title,\n description,\n breadcrumbs,\n actions,\n meta,\n badge,\n className,\n}: PageHeadingProps) {\n return (\n <div className={cn(\"border-b border-border pb-6\", className)}>\n {/* Breadcrumbs */}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"mb-3 flex items-center gap-1.5\" aria-label=\"Breadcrumb\">\n {breadcrumbs.map((crumb, i) => (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight size={12} className=\"text-muted-foreground shrink-0\" />}\n {crumb.href ? (\n <a\n href={crumb.href}\n className=\"caption text-muted-foreground hover:text-muted-foreground transition-colors\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"caption font-semibold text-muted-foreground\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n\n {/* Title row */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"display text-balance text-foreground truncate\">{title}</h1>\n {badge &&\n (typeof badge === \"string\" ? (\n <Badge variant=\"secondary\">{badge}</Badge>\n ) : (\n <Badge variant={badge.variant ?? \"secondary\"}>{badge.label}</Badge>\n ))}\n </div>\n {description && (\n <p className=\"mt-1.5 body max-w-2xl text-pretty text-muted-foreground\">{description}</p>\n )}\n\n {/* Meta */}\n {meta && meta.length > 0 && (\n <div className=\"mt-3 flex flex-wrap items-center gap-4\">\n {meta.map((m, i) => (\n <div key={i} className=\"flex items-center gap-1.5 caption text-muted-foreground\">\n {m.icon && <span className=\"text-muted-foreground\">{m.icon}</span>}\n <span>{m.text}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions.map((action, i) =>\n action.href ? (\n <Button\n key={i}\n size=\"sm\"\n variant={action.primary ? \"default\" : (action.variant ?? \"outline\")}\n asChild\n >\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.primary ? \"default\" : (action.variant ?? \"outline\")}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport { PageHeading };\n","import * as React from \"react\";\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n);\nPagination.displayName = \"Pagination\";\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn(\"flex flex-row items-center gap-1\", className)} {...props} />\n ),\n);\nPaginationContent.displayName = \"PaginationContent\";\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => <li ref={ref} className={cn(\"\", className)} {...props} />,\n);\nPaginationItem.displayName = \"PaginationItem\";\n\ntype PaginationLinkProps = React.ComponentProps<\"a\"> & { isActive?: boolean };\n\nconst PaginationLink = ({ className, isActive, ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({ variant: isActive ? \"default\" : \"ghost\", size: \"icon\" }),\n \"size-9 rounded-md body\",\n className,\n )}\n {...props}\n />\n);\nPaginationLink.displayName = \"PaginationLink\";\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(\"gap-1 px-3 w-auto\", className)}\n {...props}\n >\n <ChevronLeft size={14} />\n <span className=\"body\">Prev</span>\n </PaginationLink>\n);\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(\"gap-1 px-3 w-auto\", className)}\n {...props}\n >\n <span className=\"body\">Next</span>\n <ChevronRight size={14} />\n </PaginationLink>\n);\nPaginationNext.displayName = \"PaginationNext\";\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex size-9 items-center justify-center text-muted-foreground\", className)}\n {...props}\n >\n <MoreHorizontal size={14} />\n </span>\n);\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n};\n","import * as React from \"react\";\nimport { Progress } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst ProgressRoot = React.forwardRef<\n React.ComponentRef<typeof Progress.Root>,\n React.ComponentPropsWithoutRef<typeof Progress.Root>\n>(({ className, value, ...props }, ref) => (\n <Progress.Root\n ref={ref}\n className={cn(\"relative h-2 w-full overflow-hidden rounded-full bg-muted\", className)}\n value={value}\n {...props}\n >\n <Progress.Indicator\n className=\"h-full w-full flex-1 bg-brand-primary transition-transform\"\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </Progress.Root>\n));\nProgressRoot.displayName = \"Progress\";\n\nexport { ProgressRoot as Progress };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface PropertyRowProps extends React.ComponentProps<\"div\"> {\n /** Optional label rendered on the left. Pass a string or any React node (icon + label, etc.). */\n label?: React.ReactNode;\n /** Label layout. Default: \"stacked\". */\n layout?: \"stacked\" | \"inline\";\n /** Width of the label column when layout=\"inline\". Default: 96px. */\n labelWidth?: number | string;\n /** Aligns label vertically with controls when layout=\"inline\". Default: \"center\". */\n labelAlign?: \"start\" | \"center\";\n}\n\n/**\n * Property row used inside designer inspector panels:\n * label above controls by default, with an inline option for dense rows.\n * Different from <Field>, which is a vertical form field with hint/error.\n *\n * <PropertyRow label=\"Opacity\">\n * <Slider />\n * <InputNumber />\n * </PropertyRow>\n */\nfunction PropertyRow({\n label,\n layout = \"stacked\",\n labelWidth = 96,\n labelAlign = \"center\",\n className,\n children,\n ...rest\n}: PropertyRowProps) {\n const inline = layout === \"inline\";\n\n return (\n <div\n className={cn(\n \"flex w-full min-w-0 py-1\",\n inline\n ? cn(\"gap-3\", labelAlign === \"center\" ? \"items-center\" : \"items-start\")\n : \"flex-col items-stretch gap-1.5\",\n className,\n )}\n {...rest}\n >\n {label !== undefined && (\n <div\n className={cn(\n \"caption select-none text-muted-foreground\",\n inline ? \"shrink-0\" : \"w-full\",\n )}\n style={\n inline\n ? { width: typeof labelWidth === \"number\" ? `${labelWidth}px` : labelWidth }\n : undefined\n }\n >\n {label}\n </div>\n )}\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">{children}</div>\n </div>\n );\n}\n\nPropertyRow.displayName = \"PropertyRow\";\n\nexport { PropertyRow };\nexport type { PropertyRowProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface RadioCardOption {\n value: string;\n label: string;\n description?: string;\n meta?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface RadioCardsProps {\n options: RadioCardOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nfunction RadioCards({ options, value, onValueChange, columns = 3, className }: RadioCardsProps) {\n const colMap = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-3\",\n 4: \"grid-cols-2 sm:grid-cols-4\",\n };\n\n return (\n <div className={cn(\"grid gap-3\", colMap[columns], className)}>\n {options.map((option) => {\n const isSelected = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={option.disabled}\n onClick={() => !option.disabled && onValueChange?.(option.value)}\n className={cn(\n \"relative flex cursor-pointer flex-col gap-1 rounded-xl border p-4 text-left transition-[background-color,border-color,box-shadow,opacity,scale]\",\n \"active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isSelected\n ? \"border-brand-primary bg-card shadow-natural\"\n : \"border-border bg-card hover:border-border\",\n )}\n >\n {/* Selected ring overlay */}\n {isSelected && (\n <span\n className=\"pointer-events-none absolute inset-0 rounded-xl ring-2 ring-brand-primary\"\n aria-hidden=\"true\"\n />\n )}\n\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n {option.icon && <div className=\"mb-2 text-muted-foreground\">{option.icon}</div>}\n <p\n className={cn(\n \"body font-semibold text-pretty\",\n isSelected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.label}\n </p>\n {option.description && (\n <p className=\"mt-0.5 caption text-pretty text-muted-foreground\">\n {option.description}\n </p>\n )}\n </div>\n <div\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors\",\n isSelected ? \"border-brand-primary bg-brand-primary\" : \"border-border bg-card\",\n )}\n >\n {isSelected && <Check size={10} className=\"text-background\" strokeWidth={3} />}\n </div>\n </div>\n\n {option.meta && (\n <p\n className={cn(\n \"caption font-semibold mt-2\",\n isSelected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.meta}\n </p>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n\nRadioCards.displayName = \"RadioCards\";\n\nexport { RadioCards };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { RadioGroup } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst RadioGroupRoot = React.forwardRef<\n React.ComponentRef<typeof RadioGroup.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroup.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroup.Root ref={ref} className={cn(\"grid gap-2\", className)} {...props} />\n));\nRadioGroupRoot.displayName = \"RadioGroup\";\n\nconst RadioGroupItem = React.forwardRef<\n React.ComponentRef<typeof RadioGroup.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroup.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroup.Item\n ref={ref}\n className={cn(\n \"relative aspect-square size-4 rounded-full border border-border text-foreground\",\n \"after:absolute after:left-1/2 after:top-1/2 after:size-10 after:-translate-x-1/2 after:-translate-y-1/2\",\n \"shadow-none transition-colors\",\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-foreground data-[state=checked]:border-foreground\",\n className,\n )}\n {...props}\n >\n <RadioGroup.Indicator className=\"flex items-center justify-center\">\n <div className=\"size-2 rounded-full bg-card\" />\n </RadioGroup.Indicator>\n </RadioGroup.Item>\n));\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\nexport { RadioGroupRoot as RadioGroup, RadioGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Group, Panel, Separator } from \"react-resizable-panels\";\nimport type { GroupProps, SeparatorProps } from \"react-resizable-panels\";\nimport { GripVertical } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\n// react-resizable-panels v4 uses `orientation` and `elementRef` instead of\n// the older `direction` prop + React.forwardRef pattern.\n\ntype ResizablePanelGroupProps = Omit<GroupProps, \"orientation\"> & {\n /** Alias for `orientation` — matches the common shadcn/ui API. */\n direction?: \"horizontal\" | \"vertical\";\n orientation?: \"horizontal\" | \"vertical\";\n};\n\nfunction ResizablePanelGroup({\n className,\n direction,\n orientation,\n ...props\n}: ResizablePanelGroupProps) {\n const resolvedOrientation = orientation ?? direction ?? \"horizontal\";\n return (\n <Group\n orientation={resolvedOrientation}\n className={cn(\n \"flex h-full w-full\",\n resolvedOrientation === \"vertical\" && \"flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\nResizablePanelGroup.displayName = \"ResizablePanelGroup\";\n\nconst ResizablePanel = Panel;\n\ntype ResizableHandleProps = SeparatorProps & {\n withHandle?: boolean;\n};\n\nfunction ResizableHandle({ className, withHandle = true, ...props }: ResizableHandleProps) {\n return (\n <Separator\n className={cn(\n \"relative flex shrink-0 items-center justify-center bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-brand-primary/50\",\n // Horizontal (default): vertical bar\n \"[&:not([aria-orientation=vertical])]:h-full [&:not([aria-orientation=vertical])]:w-px\",\n // Vertical: horizontal bar\n \"[aria-orientation=vertical]:h-px [aria-orientation=vertical]:w-full\",\n // Wider hit target via pseudo-element\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2\",\n \"[aria-orientation=vertical]:after:left-0 [aria-orientation=vertical]:after:h-1 [aria-orientation=vertical]:after:w-full [aria-orientation=vertical]:after:translate-x-0 [aria-orientation=vertical]:after:-translate-y-1/2\",\n // Active drag state\n \"active:bg-brand-primary/30\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-5 w-3 items-center justify-center rounded-sm border border-border bg-card shadow-natural\">\n <GripVertical size={10} className=\"text-muted-foreground\" />\n </div>\n )}\n </Separator>\n );\n}\nResizableHandle.displayName = \"ResizableHandle\";\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-muted\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n\nexport { Separator };\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n AlignLeft,\n Bold,\n FileText,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Italic,\n Link,\n List,\n ListOrdered,\n Minus,\n Strikethrough,\n Underline,\n XCircle,\n} from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport { cn } from \"../lib/utils\";\n\ntype RichTextImageUrlHandler = () => string | null | undefined | Promise<string | null | undefined>;\n\ninterface RichTextEditorProps {\n value: string;\n onChange: (html: string) => void;\n placeholder?: string;\n minHeight?: string | number;\n id?: string;\n \"aria-label\"?: string;\n className?: string;\n editorClassName?: string;\n toolbarClassName?: string;\n onRequestImageUrl?: RichTextImageUrlHandler;\n}\n\ninterface ToolbarButtonConfig {\n icon: React.ComponentType<{ className?: string }>;\n command: string;\n title: string;\n value?: string;\n}\n\nfunction wrapSelectionInline(tag: string, attrs?: Record<string, string>) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n const wrapper = document.createElement(tag);\n\n Object.entries(attrs ?? {}).forEach(([key, value]) => {\n wrapper.setAttribute(key, value);\n });\n\n wrapper.appendChild(range.extractContents());\n range.insertNode(wrapper);\n\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(wrapper);\n selection.addRange(nextRange);\n}\n\nfunction formatBlock(tag: string) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n let block = range.startContainer as HTMLElement;\n\n if (block.nodeType === Node.TEXT_NODE) block = block.parentElement as HTMLElement;\n while (block && block.isContentEditable !== true) {\n const parent = block.parentElement;\n if (!parent || parent.getAttribute(\"contenteditable\") === \"true\") break;\n block = parent;\n }\n\n const nextBlock = document.createElement(tag);\n if (block && block.getAttribute(\"contenteditable\") !== \"true\") {\n nextBlock.innerHTML = block.innerHTML;\n block.replaceWith(nextBlock);\n } else {\n nextBlock.appendChild(range.extractContents());\n range.insertNode(nextBlock);\n }\n\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(nextBlock);\n selection.addRange(nextRange);\n}\n\nfunction insertList(ordered: boolean) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const fragment = range.extractContents();\n const list = document.createElement(ordered ? \"ol\" : \"ul\");\n const children = Array.from(fragment.childNodes);\n\n if (children.length === 0) {\n const item = document.createElement(\"li\");\n item.innerHTML = \"\\u200B\";\n list.appendChild(item);\n } else {\n children.forEach((child) => {\n const item = document.createElement(\"li\");\n item.appendChild(child);\n list.appendChild(item);\n });\n }\n\n range.insertNode(list);\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(list);\n selection.addRange(nextRange);\n}\n\nfunction insertElement(element: HTMLElement) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(element);\n\n const nextRange = document.createRange();\n nextRange.setStartAfter(element);\n nextRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(nextRange);\n}\n\nfunction removeFormat() {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n const fragment = range.extractContents();\n const cleaned = document.createDocumentFragment();\n\n Array.from(fragment.childNodes).forEach((child) => {\n cleaned.appendChild(document.createTextNode(child.textContent ?? \"\"));\n });\n\n range.insertNode(cleaned);\n}\n\nfunction RichTextEditor({\n value,\n onChange,\n placeholder = \"Start writing...\",\n minHeight = \"200px\",\n id,\n \"aria-label\": ariaLabel,\n className,\n editorClassName,\n toolbarClassName,\n onRequestImageUrl,\n}: RichTextEditorProps) {\n const editorRef = React.useRef<HTMLDivElement>(null);\n const savedRangeRef = React.useRef<Range | null>(null);\n const [showLinkInput, setShowLinkInput] = React.useState(false);\n const [linkUrl, setLinkUrl] = React.useState(\"\");\n\n React.useEffect(() => {\n const editor = editorRef.current;\n if (!editor || document.activeElement === editor || editor.innerHTML === value) return;\n editor.innerHTML = value;\n }, [value]);\n\n const emitChange = React.useCallback(() => {\n if (editorRef.current) onChange(editorRef.current.innerHTML);\n }, [onChange]);\n\n const saveSelection = React.useCallback(() => {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n savedRangeRef.current = selection.getRangeAt(0).cloneRange();\n }\n }, []);\n\n const restoreSelection = React.useCallback(() => {\n const range = savedRangeRef.current;\n const selection = window.getSelection();\n if (!range || !selection) return;\n selection.removeAllRanges();\n selection.addRange(range);\n savedRangeRef.current = null;\n }, []);\n\n const runCommand = React.useCallback(\n (command: string, commandValue?: string) => {\n editorRef.current?.focus();\n\n switch (command) {\n case \"bold\":\n wrapSelectionInline(\"strong\");\n break;\n case \"italic\":\n wrapSelectionInline(\"em\");\n break;\n case \"underline\":\n wrapSelectionInline(\"u\");\n break;\n case \"strikeThrough\":\n wrapSelectionInline(\"s\");\n break;\n case \"formatBlock\":\n if (commandValue) formatBlock(commandValue);\n break;\n case \"insertUnorderedList\":\n insertList(false);\n break;\n case \"insertOrderedList\":\n insertList(true);\n break;\n case \"insertHorizontalRule\":\n insertElement(document.createElement(\"hr\"));\n break;\n case \"removeFormat\":\n removeFormat();\n break;\n default:\n break;\n }\n\n emitChange();\n },\n [emitChange],\n );\n\n const insertLink = React.useCallback(() => {\n const url = linkUrl.trim();\n if (!url) return;\n\n restoreSelection();\n wrapSelectionInline(\"a\", { href: url });\n editorRef.current?.focus();\n setLinkUrl(\"\");\n setShowLinkInput(false);\n emitChange();\n }, [emitChange, linkUrl, restoreSelection]);\n\n const insertImage = React.useCallback(async () => {\n const url =\n (await onRequestImageUrl?.()) ??\n (typeof window !== \"undefined\" ? window.prompt(\"Image URL:\") : null);\n\n if (!url) return;\n\n const image = document.createElement(\"img\");\n image.src = url;\n image.alt = \"\";\n editorRef.current?.focus();\n insertElement(image);\n emitChange();\n }, [emitChange, onRequestImageUrl]);\n\n const toolbarGroups: ToolbarButtonConfig[][] = [\n [\n { icon: Bold, command: \"bold\", title: \"Bold (Ctrl+B)\" },\n { icon: Italic, command: \"italic\", title: \"Italic (Ctrl+I)\" },\n { icon: Underline, command: \"underline\", title: \"Underline (Ctrl+U)\" },\n { icon: Strikethrough, command: \"strikeThrough\", title: \"Strikethrough\" },\n ],\n [\n { icon: Heading1, command: \"formatBlock\", title: \"Heading 1\", value: \"h1\" },\n { icon: Heading2, command: \"formatBlock\", title: \"Heading 2\", value: \"h2\" },\n { icon: Heading3, command: \"formatBlock\", title: \"Heading 3\", value: \"h3\" },\n ],\n [\n { icon: List, command: \"insertUnorderedList\", title: \"Bullet list\" },\n { icon: ListOrdered, command: \"insertOrderedList\", title: \"Numbered list\" },\n { icon: AlignLeft, command: \"formatBlock\", title: \"Blockquote\", value: \"blockquote\" },\n { icon: FileText, command: \"formatBlock\", title: \"Code block\", value: \"pre\" },\n ],\n ];\n\n const renderToolbarButton = ({\n icon: Icon,\n command,\n title,\n value: commandValue,\n }: ToolbarButtonConfig) => (\n <Button\n key={`${command}-${title}`}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title={title}\n aria-label={title}\n onMouseDown={(event) => {\n event.preventDefault();\n runCommand(command, commandValue);\n }}\n >\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n );\n\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-xl border border-border bg-card shadow-natural\",\n \"focus-within:border-brand-primary/50 focus-within:ring-2 focus-within:ring-brand-primary/25\",\n className,\n )}\n data-slot=\"rich-text-editor\"\n >\n <div\n className={cn(\n \"flex min-w-0 flex-wrap items-center gap-1 border-b border-border bg-muted/40 p-1.5\",\n toolbarClassName,\n )}\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n >\n {toolbarGroups.map((group, index) => (\n <React.Fragment key={`toolbar-group-${index}`}>\n {index > 0 && <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />}\n {group.map(renderToolbarButton)}\n </React.Fragment>\n ))}\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title=\"Insert link\"\n aria-label=\"Insert link\"\n onMouseDown={(event) => {\n event.preventDefault();\n saveSelection();\n setShowLinkInput((current) => !current);\n }}\n >\n <Link className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title=\"Insert image\"\n aria-label=\"Insert image\"\n onMouseDown={(event) => {\n event.preventDefault();\n void insertImage();\n }}\n >\n <Image className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n {renderToolbarButton({\n icon: Minus,\n command: \"insertHorizontalRule\",\n title: \"Horizontal rule\",\n })}\n {renderToolbarButton({\n icon: XCircle,\n command: \"removeFormat\",\n title: \"Clear formatting\",\n })}\n </div>\n\n {showLinkInput && (\n <div className=\"flex min-w-0 flex-col gap-2 border-b border-border bg-muted/60 p-2 sm:flex-row\">\n <Input\n type=\"url\"\n value={linkUrl}\n onChange={(event) => setLinkUrl(event.target.value)}\n placeholder=\"https://...\"\n className=\"h-10 flex-1 bg-background\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n insertLink();\n }\n }}\n autoFocus\n aria-label=\"Link URL\"\n />\n <div className=\"grid grid-cols-2 gap-2 sm:flex sm:shrink-0\">\n <Button type=\"button\" size=\"sm\" className=\"h-10\" onClick={insertLink}>\n Insert\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-10\"\n onClick={() => setShowLinkInput(false)}\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n\n <div\n ref={editorRef}\n id={id}\n contentEditable\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel ?? \"Content editor\"}\n className={cn(\n \"rich-text-editor-content min-w-0 px-4 py-3 text-sm leading-6 text-foreground outline-none\",\n \"empty:before:pointer-events-none empty:before:text-muted-foreground empty:before:content-[attr(data-placeholder)]\",\n editorClassName,\n )}\n style={{ minHeight }}\n dangerouslySetInnerHTML={{ __html: value }}\n onInput={emitChange}\n onBlur={emitChange}\n data-placeholder={placeholder}\n suppressContentEditableWarning\n />\n\n <style>{`\n .rich-text-editor-content h1 { font-size: 1.5rem; font-weight: 700; line-height: 1.2; margin: 0.75rem 0 0.5rem; text-wrap: balance; }\n .rich-text-editor-content h2 { font-size: 1.25rem; font-weight: 650; line-height: 1.25; margin: 0.75rem 0 0.5rem; text-wrap: balance; }\n .rich-text-editor-content h3 { font-size: 1.1rem; font-weight: 650; line-height: 1.3; margin: 0.5rem 0 0.25rem; text-wrap: balance; }\n .rich-text-editor-content blockquote { border-left: 3px solid var(--border); color: var(--muted-foreground); margin: 0.75rem 0; padding-left: 1rem; text-wrap: pretty; }\n .rich-text-editor-content pre { background: var(--muted); border-radius: 0.5rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.85rem; margin: 0.75rem 0; overflow-x: auto; padding: 0.75rem; }\n .rich-text-editor-content a { color: var(--brand-primary); text-decoration: underline; text-underline-offset: 3px; }\n .rich-text-editor-content img { border-radius: 0.5rem; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); height: auto; margin: 0.5rem 0; max-width: 100%; }\n .dark .rich-text-editor-content img { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1); }\n .rich-text-editor-content hr { border: none; border-top: 1px solid var(--border); margin: 1rem 0; }\n .rich-text-editor-content ul, .rich-text-editor-content ol { margin: 0.5rem 0; padding-left: 1.5rem; }\n .rich-text-editor-content li { margin: 0.25rem 0; }\n `}</style>\n </div>\n );\n}\n\nRichTextEditor.displayName = \"RichTextEditor\";\n\nexport { RichTextEditor };\nexport type { RichTextEditorProps, RichTextImageUrlHandler };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ScrollArea } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst ScrollAreaRoot = React.forwardRef<\n React.ComponentRef<typeof ScrollArea.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollArea.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollArea.Root ref={ref} className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollArea.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollArea.Viewport>\n <ScrollAreaScrollbar orientation=\"vertical\" />\n <ScrollAreaScrollbar orientation=\"horizontal\" />\n <ScrollArea.Corner />\n </ScrollArea.Root>\n));\nScrollAreaRoot.displayName = \"ScrollArea\";\n\nconst ScrollAreaScrollbar = React.forwardRef<\n React.ComponentRef<typeof ScrollArea.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollArea.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2 border-l border-l-transparent p-px\",\n orientation === \"horizontal\" && \"h-2 flex-col border-t border-t-transparent p-px\",\n className,\n )}\n {...props}\n >\n <ScrollArea.Thumb className=\"relative flex-1 rounded-full bg-muted hover:bg-muted transition-colors\" />\n </ScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = \"ScrollAreaScrollbar\";\n\nexport { ScrollAreaRoot as ScrollArea };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface SectionHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\";\n}\n\ninterface SectionHeadingProps {\n title: string;\n description?: string;\n actions?: SectionHeadingAction[];\n border?: boolean;\n className?: string;\n}\n\nfunction SectionHeading({\n title,\n description,\n actions,\n border = true,\n className,\n}: SectionHeadingProps) {\n return (\n <div\n className={cn(\n \"flex flex-col gap-1 pb-4 sm:flex-row sm:items-start sm:justify-between\",\n border && \"border-b border-border\",\n className,\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"heading text-balance text-foreground truncate\">{title}</h2>\n {description && (\n <p className=\"mt-1 body text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2 pt-1\">\n {actions.map((action, i) =>\n action.href ? (\n <Button key={i} size=\"sm\" variant={action.variant ?? \"default\"} asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.variant ?? \"default\"}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { SectionHeading };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface StackedListProps {\n children: React.ReactNode;\n divided?: boolean;\n bordered?: boolean;\n className?: string;\n}\n\nfunction StackedList({ children, divided = true, bordered = true, className }: StackedListProps) {\n return (\n <ul\n role=\"list\"\n className={cn(\n \"overflow-hidden rounded-xl bg-card\",\n bordered && \"border border-border shadow-natural\",\n divided && \"divide-y divide-border\",\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n\ninterface StackedListItemProps {\n children: React.ReactNode;\n href?: string;\n onClick?: () => void;\n className?: string;\n}\n\nfunction StackedListItem({ children, href, onClick, className }: StackedListItemProps) {\n const inner = <div className={cn(\"px-4 py-3.5\", className)}>{children}</div>;\n\n if (href) {\n return (\n <li>\n <a href={href} className=\"block hover:bg-muted transition-colors\">\n {inner}\n </a>\n </li>\n );\n }\n\n if (onClick) {\n return (\n <li>\n <button\n type=\"button\"\n className=\"w-full text-left hover:bg-muted transition-colors\"\n onClick={onClick}\n >\n {inner}\n </button>\n </li>\n );\n }\n\n return <li>{inner}</li>;\n}\n\nexport { StackedList, StackedListItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ArrowDown, ArrowUp, ChevronsUpDown, Filter, Search } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { EmptyState } from \"./empty-state\";\nimport { InputGroup } from \"./input-group\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"./pagination\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\";\nimport { StackedList, StackedListItem } from \"./stacked-list\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\nimport { cn } from \"../lib/utils\";\n\ninterface SearchableTableFilterOption {\n value: string;\n label: string;\n}\n\ninterface SearchableTableColumn<T = unknown> {\n key: string;\n label: string;\n render?: (item: T) => React.ReactNode;\n sortable?: boolean;\n sortAccessor?: (item: T) => string | number | Date | null | undefined;\n className?: string;\n}\n\ninterface SearchableTableProps<T extends { id: string | number }> {\n data: T[];\n columns: SearchableTableColumn<T>[];\n searchPlaceholder?: string;\n searchTerm: string;\n onSearchChange: (value: string) => void;\n filters?: Record<\n string,\n {\n value: string;\n onChange: (value: string) => void;\n options: SearchableTableFilterOption[];\n placeholder: string;\n }\n >;\n emptyState?: {\n icon?: React.ReactNode;\n title: string;\n description: string;\n action?: {\n label: string;\n href?: string;\n onClick?: () => void;\n };\n };\n actions?: (item: T) => React.ReactNode;\n mobileCard?: (item: T) => React.ReactNode;\n tableClassName?: string;\n pagination?: {\n pageSize?: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n };\n}\n\nfunction appendSearchableValue(value: unknown, parts: string[], depth = 0) {\n if (value == null || depth > 2) return;\n\n if (value instanceof Date) {\n parts.push(value.toISOString());\n return;\n }\n\n if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) {\n parts.push(String(value));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => appendSearchableValue(entry, parts, depth + 1));\n return;\n }\n\n if (typeof value === \"object\") {\n Object.values(value as Record<string, unknown>).forEach((entry) =>\n appendSearchableValue(entry, parts, depth + 1),\n );\n }\n}\n\nfunction getSearchableText(item: unknown) {\n const parts: string[] = [];\n appendSearchableValue(item, parts);\n return parts.join(\" \").toLowerCase();\n}\n\nfunction normalizeEmptyStateIcon(icon: React.ReactNode) {\n return icon ? <span className=\"flex [&_svg]:size-5\">{icon}</span> : undefined;\n}\n\nfunction SearchableTable<T extends { id: string | number }>({\n data,\n columns,\n searchPlaceholder = \"Search...\",\n searchTerm,\n onSearchChange,\n filters = {},\n emptyState,\n actions,\n mobileCard,\n tableClassName,\n pagination,\n}: SearchableTableProps<T>) {\n const [sort, setSort] = React.useState<{ key: string; direction: \"asc\" | \"desc\" } | null>(null);\n const rows = React.useMemo(() => (Array.isArray(data) ? data : []), [data]);\n const normalizedSearchTerm = searchTerm.trim().toLowerCase();\n\n const filteredRows = React.useMemo(() => {\n if (!normalizedSearchTerm) return rows;\n return rows.filter((item) => getSearchableText(item).includes(normalizedSearchTerm));\n }, [normalizedSearchTerm, rows]);\n\n const sortedData = React.useMemo(() => {\n if (!sort) return filteredRows;\n\n const column = columns.find((candidate) => candidate.key === sort.key);\n if (!column || (!column.sortable && !column.sortAccessor)) return filteredRows;\n\n const directionMultiplier = sort.direction === \"asc\" ? 1 : -1;\n const getSortValue = (item: T) =>\n column.sortAccessor?.(item) ?? (item as Record<string, unknown>)[column.key];\n\n return [...filteredRows].sort((left, right) => {\n const leftValue = getSortValue(left);\n const rightValue = getSortValue(right);\n\n if (leftValue == null && rightValue == null) return 0;\n if (leftValue == null) return 1;\n if (rightValue == null) return -1;\n\n const leftComparable = leftValue instanceof Date ? leftValue.getTime() : leftValue;\n const rightComparable = rightValue instanceof Date ? rightValue.getTime() : rightValue;\n\n if (typeof leftComparable === \"number\" && typeof rightComparable === \"number\") {\n return (leftComparable - rightComparable) * directionMultiplier;\n }\n\n return (\n String(leftComparable).localeCompare(String(rightComparable), undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) * directionMultiplier\n );\n });\n }, [columns, filteredRows, sort]);\n\n const pageSize = pagination?.pageSize ?? 10;\n const currentPage = pagination?.currentPage ?? 1;\n const totalPages = Math.max(1, Math.ceil(sortedData.length / pageSize));\n const startIndex = (currentPage - 1) * pageSize;\n const displayData = pagination ? sortedData.slice(startIndex, startIndex + pageSize) : sortedData;\n\n const toggleSort = (column: SearchableTableColumn<T>) => {\n if (!column.sortable && !column.sortAccessor) return;\n\n setSort((current) =>\n current?.key === column.key\n ? { key: column.key, direction: current.direction === \"asc\" ? \"desc\" : \"asc\" }\n : { key: column.key, direction: \"asc\" },\n );\n };\n\n const renderEmptyState = (className?: string) => (\n <EmptyState\n title={emptyState?.title ?? \"No results found\"}\n description={emptyState?.description ?? \"Try changing the search or filters.\"}\n {...(className ? { className } : {})}\n {...(emptyState?.icon ? { icon: normalizeEmptyStateIcon(emptyState.icon) } : {})}\n {...(emptyState?.action ? { action: emptyState.action } : {})}\n />\n );\n\n const renderPagination = () => {\n if (!pagination || totalPages <= 1) return null;\n\n const pages: Array<number | \"ellipsis-start\" | \"ellipsis-end\"> = [];\n const showEllipsis = totalPages > 7;\n\n if (showEllipsis) {\n pages.push(1);\n if (currentPage > 4) pages.push(\"ellipsis-start\");\n\n for (let page = Math.max(2, currentPage - 1); page <= Math.min(totalPages - 1, currentPage + 1); page++) {\n pages.push(page);\n }\n\n if (currentPage < totalPages - 3) pages.push(\"ellipsis-end\");\n pages.push(totalPages);\n } else {\n for (let page = 1; page <= totalPages; page++) pages.push(page);\n }\n\n return (\n <div className=\"mt-6 flex justify-center\">\n <Pagination>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n onClick={() => pagination.onPageChange(Math.max(1, currentPage - 1))}\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\n />\n </PaginationItem>\n {pages.map((page, index) => (\n <PaginationItem key={`${page}-${index}`}>\n {page === \"ellipsis-start\" || page === \"ellipsis-end\" ? (\n <PaginationEllipsis />\n ) : (\n <PaginationLink\n onClick={() => pagination.onPageChange(page)}\n isActive={currentPage === page}\n className=\"cursor-pointer\"\n >\n {page}\n </PaginationLink>\n )}\n </PaginationItem>\n ))}\n <PaginationItem>\n <PaginationNext\n onClick={() => pagination.onPageChange(Math.min(totalPages, currentPage + 1))}\n className={\n currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n </div>\n );\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"md:rounded-lg md:border md:border-border md:bg-muted/30 md:p-3\">\n <div className=\"flex flex-col gap-2.5 md:flex-row md:flex-wrap md:items-center md:justify-start md:gap-3\">\n <InputGroup\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(event) => onSearchChange(event.target.value)}\n leadingIcon={<Search className=\"size-4\" />}\n wrapperClassName=\"w-full min-w-0 md:min-w-[280px] md:max-w-[520px] md:flex-1 md:basis-[340px]\"\n className=\"h-9 bg-background\"\n />\n <div className=\"flex w-full min-w-0 flex-col gap-2 sm:flex-row sm:flex-wrap md:w-auto md:justify-end\">\n {Object.entries(filters).map(([key, filter]) => (\n <Select key={key} value={filter.value} onValueChange={filter.onChange}>\n <SelectTrigger className=\"h-9 w-full bg-background sm:w-[180px]\">\n <Filter className=\"mr-2 size-4\" />\n <SelectValue placeholder={filter.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {filter.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ))}\n </div>\n </div>\n </div>\n\n <StackedList bordered={false} className=\"rounded-none bg-transparent md:hidden\">\n {displayData.length === 0\n ? renderEmptyState(\"px-0 py-9\")\n : displayData.map((item) => {\n if (mobileCard) {\n return (\n <StackedListItem key={item.id} className=\"px-0 py-0\">\n {mobileCard(item)}\n </StackedListItem>\n );\n }\n\n const primaryColumn = columns.find((column) => column.label.trim()) ?? columns[0];\n const secondaryColumns = columns\n .filter((column) => column.key !== primaryColumn?.key && column.label)\n .slice(0, 5);\n\n return (\n <StackedListItem key={item.id} className=\"px-0 py-2.5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {primaryColumn && (\n <div className=\"min-w-0 text-sm font-semibold text-foreground [&_*]:min-w-0\">\n {primaryColumn.render\n ? primaryColumn.render(item)\n : (item as Record<string, React.ReactNode>)[primaryColumn.key]}\n </div>\n )}\n </div>\n {actions && <div className=\"shrink-0\">{actions(item)}</div>}\n </div>\n {secondaryColumns.length > 0 && (\n <dl className=\"mt-2 divide-y divide-border/70 border-y border-border/70 text-xs\">\n {secondaryColumns.map((column) => (\n <div\n key={column.key}\n className=\"grid min-w-0 grid-cols-[6.25rem_minmax(0,1fr)] gap-2 py-1.5\"\n >\n <dt className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {column.label}\n </dt>\n <dd className=\"min-w-0 break-words text-foreground\">\n {column.render\n ? column.render(item)\n : (item as Record<string, React.ReactNode>)[column.key]}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </StackedListItem>\n );\n })}\n </StackedList>\n\n {displayData.length === 0 ? (\n <div className=\"hidden min-h-[18rem] items-center justify-center border-t border-border/60 md:flex\">\n {renderEmptyState(\"px-6 py-12\")}\n </div>\n ) : (\n <Table containerClassName=\"hidden overflow-x-auto md:block\" className={cn(\"min-w-full\", tableClassName)}>\n <TableHeader>\n <TableRow className=\"relative border-b-0 bg-muted/80 transition-colors hover:bg-muted/80\">\n {columns.map((column) => {\n const isSortable = Boolean(column.sortable || column.sortAccessor);\n const isSorted = sort?.key === column.key;\n const SortIcon = !isSorted ? ChevronsUpDown : sort.direction === \"asc\" ? ArrowUp : ArrowDown;\n\n return (\n <TableHead\n key={column.key}\n className={cn(\n \"cursor-default select-none whitespace-nowrap px-4 py-3 text-xs font-medium text-muted-foreground transition-colors\",\n column.className,\n )}\n aria-sort={\n isSortable\n ? isSorted\n ? sort.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined\n }\n >\n {isSortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 h-auto px-2 py-1 text-xs font-medium\"\n onClick={() => toggleSort(column)}\n aria-label={`Sort by ${column.label}`}\n >\n <span>{column.label}</span>\n <SortIcon className=\"size-3.5\" />\n </Button>\n ) : (\n column.label\n )}\n </TableHead>\n );\n })}\n {actions && (\n <TableHead className=\"w-32 cursor-default select-none whitespace-nowrap px-4 py-3 text-xs font-medium text-muted-foreground\">\n Actions\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n <TableBody>\n {displayData.map((item, index) => (\n <TableRow key={item.id} className={cn(index === 0 && \"border-t-0\")}>\n {columns.map((column) => (\n <TableCell key={column.key} className={cn(\"py-3\", column.className)}>\n {column.render\n ? column.render(item)\n : (item as Record<string, React.ReactNode>)[column.key]}\n </TableCell>\n ))}\n {actions && <TableCell className=\"w-32 whitespace-nowrap py-3\">{actions(item)}</TableCell>}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n\n {renderPagination()}\n </div>\n );\n}\n\nexport { SearchableTable };\nexport type { SearchableTableColumn, SearchableTableFilterOption, SearchableTableProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Dialog } from \"radix-ui\";\nimport { X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst SheetRoot = Dialog.Root;\nconst SheetTrigger = Dialog.Trigger;\nconst SheetClose = Dialog.Close;\n\nconst SheetOverlay = React.forwardRef<\n React.ComponentRef<typeof Dialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof Dialog.Overlay>\n>(({ className, ...props }, ref) => (\n <Dialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/30 backdrop-blur-sm\",\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 />\n));\nSheetOverlay.displayName = \"SheetOverlay\";\n\nconst sheetContentVariants = cva(\n [\n \"fixed z-50 bg-card shadow-elevated p-6\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"transition-transform ease-in-out duration-300\",\n ],\n {\n variants: {\n side: {\n right:\n \"right-0 top-0 h-full w-full max-w-sm data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n left: \"left-0 top-0 h-full w-full max-w-sm data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n top: \"top-0 inset-x-0 h-auto data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"bottom-0 inset-x-0 h-auto data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n);\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof Dialog.Content>,\n VariantProps<typeof sheetContentVariants> {}\n\nconst SheetContent = React.forwardRef<React.ComponentRef<typeof Dialog.Content>, SheetContentProps>(\n ({ className, children, side = \"right\", ...props }, ref) => (\n <Dialog.Portal>\n <SheetOverlay />\n <Dialog.Content\n ref={ref}\n className={cn(sheetContentVariants({ side }), className)}\n {...props}\n >\n {children}\n <Dialog.Close className=\"absolute right-3 top-3 flex size-9 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,scale] hover:opacity-100 active:scale-[0.96] focus:outline-none focus:ring-2 focus:ring-ground-900/20\">\n <X size={16} />\n <span className=\"sr-only\">Close</span>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Portal>\n ),\n);\nSheetContent.displayName = \"SheetContent\";\n\nfunction SheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-4\", className)} {...props} />;\n}\nSheetHeader.displayName = \"SheetHeader\";\n\nfunction SheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex items-center justify-end gap-2 mt-6\", className)} {...props} />;\n}\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ComponentRef<typeof Dialog.Title>,\n React.ComponentPropsWithoutRef<typeof Dialog.Title>\n>(({ className, ...props }, ref) => (\n <Dialog.Title\n ref={ref}\n className={cn(\"body-lg font-semibold text-balance text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = \"SheetTitle\";\n\nconst SheetDescription = React.forwardRef<\n React.ComponentRef<typeof Dialog.Description>,\n React.ComponentPropsWithoutRef<typeof Dialog.Description>\n>(({ className, ...props }, ref) => (\n <Dialog.Description\n ref={ref}\n className={cn(\"body text-pretty text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = \"SheetDescription\";\n\nexport {\n SheetRoot as Sheet,\n SheetTrigger,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetClose,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { PanelLeft } from \"lucide-react\";\nimport { Slot } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"./sheet\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar:state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3.5rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\nconst MOBILE_BREAKPOINT = 768;\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mediaQuery = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => setIsMobile(mediaQuery.matches);\n\n onChange();\n mediaQuery.addEventListener(\"change\", onChange);\n return () => mediaQuery.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n openMobile: boolean;\n setOpenMobile: React.Dispatch<React.SetStateAction<boolean>>;\n isMobile: boolean;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar() {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) throw new Error(\"useSidebar must be used inside SidebarProvider\");\n return ctx;\n}\n\nfunction useOptionalSidebar() {\n return React.useContext(SidebarContext);\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarProvider */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarProviderProps extends React.ComponentProps<\"div\"> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [_open, _setOpen] = React.useState(defaultOpen);\n\n const open = openProp !== undefined ? openProp : _open;\n\n const setOpen = React.useCallback(\n (value: React.SetStateAction<boolean>) => {\n const nextOpen = typeof value === \"function\" ? value(open) : value;\n if (onOpenChange) {\n onOpenChange(nextOpen);\n } else {\n _setOpen(nextOpen);\n }\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${nextOpen}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [onOpenChange, open],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile((currentOpen) => !currentOpen);\n return;\n }\n\n setOpen((currentOpen) => !currentOpen);\n }, [isMobile, setOpen]);\n\n React.useEffect(() => {\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n openMobile,\n setOpenMobile,\n isMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, openMobile, setOpenMobile, isMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-sidebar=\"provider\"\n data-state={state}\n className={cn(\"group/sidebar-wrapper flex min-h-svh w-full\", className)}\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-mobile\": SIDEBAR_WIDTH_MOBILE,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Sidebar */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarProps extends React.ComponentProps<\"div\"> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"icon\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <aside\n data-side={side}\n data-variant={variant}\n data-collapsible=\"none\"\n className={cn(\n \"flex flex-col h-svh bg-card border-r border-border w-(--sidebar-width)\",\n side === \"right\" && \"border-r-0 border-l\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n className={cn(\n \"w-(--sidebar-width-mobile) max-w-[85dvw] bg-card p-0 text-foreground [&>button]:hidden\",\n className,\n )}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n if (collapsible === \"offcanvas\") {\n return (\n <aside\n data-state={state}\n data-side={side}\n data-variant={variant}\n data-collapsible=\"offcanvas\"\n className={cn(\n \"group peer flex flex-col h-svh bg-card border-r border-border\",\n \"transition-[width,transform] duration-200 ease-linear\",\n \"data-[state=expanded]:w-(--sidebar-width) data-[state=collapsed]:w-0 data-[state=collapsed]:-translate-x-full\",\n side === \"right\" && \"border-r-0 border-l data-[state=collapsed]:translate-x-full\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n // collapsible === \"icon\" (default)\n return (\n <aside\n data-state={state}\n data-side={side}\n data-variant={variant}\n data-collapsible=\"icon\"\n className={cn(\n \"group peer hidden md:flex flex-col h-svh bg-card border-r border-border\",\n \"transition-[width] duration-200 ease-linear overflow-hidden\",\n \"data-[state=expanded]:w-(--sidebar-width) data-[state=collapsed]:w-(--sidebar-width-icon)\",\n side === \"right\" && \"border-r-0 border-l\",\n variant === \"floating\" && \"m-2 h-[calc(100svh-1rem)] rounded-xl border shadow-natural\",\n variant === \"inset\" && \"border-r-0\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarTrigger */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={className}\n onClick={(e) => {\n onClick?.(e);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeft size={16} />\n <span className=\"sr-only\">Toggle sidebar</span>\n </Button>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarRail */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n aria-label=\"Toggle sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 cursor-col-resize transition-[left,right,width] ease-linear\",\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]\",\n \"hover:after:bg-brand-primary/30\",\n \"group-data-[side=left]:-right-4 group-data-[side=right]:left-0\",\n \"sm:flex\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarInset */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-sidebar=\"inset\"\n className={cn(\"relative flex min-h-svh flex-1 flex-col overflow-hidden bg-background\", className)}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Structure components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-3 border-b border-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"content\"\n className={cn(\"flex min-h-0 flex-1 flex-col gap-2 overflow-auto p-3\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-3 border-t border-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-sidebar=\"separator\"\n className={cn(\"mx-2 my-1 bg-muted\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Group components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\";\n\n return (\n <Comp\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 label text-muted-foreground\",\n \"outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear\",\n \"group-data-[state=collapsed]/sidebar-wrapper:opacity-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:h-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:m-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:p-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-sidebar=\"group-content\" className={cn(\"w-full text-sm\", className)} {...props} />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute right-2 top-2 flex size-8 items-center justify-center\",\n \"rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Menu components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li data-sidebar=\"menu-item\" className={cn(\"group/menu-item relative\", className)} {...props} />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuButton */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarMenuButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string;\n size?: \"default\" | \"sm\" | \"lg\";\n}\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n tooltip,\n size = \"default\",\n className,\n children,\n ...props\n}: SidebarMenuButtonProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"button\";\n\n const button = (\n <Comp\n data-sidebar=\"menu-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n // Base\n \"peer/menu-button flex min-h-8 w-full items-center gap-2 overflow-hidden rounded-md px-2 py-1.5 body-sm text-left\",\n \"outline-none ring-ring\",\n \"transition-[width,height,padding] duration-150\",\n \"hover:bg-muted hover:text-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"active:bg-muted\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&>svg]:size-4 [&>svg]:shrink-0\",\n // Size variants\n size === \"sm\" && \"h-7 text-xs\",\n size === \"lg\" && \"h-10\",\n // Active state\n isActive && [\n \"bg-brand-primary/10 text-brand-primary\",\n \"hover:bg-brand-primary/15 hover:text-brand-primary\",\n ],\n // Collapsed state\n \"group-data-[state=collapsed]/sidebar-wrapper:justify-center\",\n \"group-data-[state=collapsed]/sidebar-wrapper:size-9\",\n \"group-data-[state=collapsed]/sidebar-wrapper:p-0\",\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n\n if (!tooltip) {\n return button;\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n className={cn(\n // Only visible when collapsed\n \"hidden group-data-[state=collapsed]/sidebar-wrapper:block\",\n )}\n >\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuAction */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarMenuActionProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n showOnHover?: boolean;\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: SidebarMenuActionProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"button\";\n\n return (\n <Comp\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute right-1 top-1/2 flex size-8 -translate-y-1/2 items-center justify-center\",\n \"rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n showOnHover && [\n \"opacity-0 transition-opacity\",\n \"group-hover/menu-item:opacity-100\",\n \"peer-data-[active=true]/menu-button:opacity-100\",\n ],\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuBadge */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"menu-badge\"\n className={cn(\n \"absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-full\",\n \"caption font-medium bg-muted text-muted-foreground px-1\",\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuSkeleton */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & { showIcon?: boolean }) {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && <div className=\"size-4 shrink-0 rounded-md bg-muted animate-pulse\" />}\n <div\n className=\"h-4 max-w-(--skeleton-width) flex-1 rounded-md bg-muted animate-pulse\"\n style={{ \"--skeleton-width\": width } as React.CSSProperties}\n />\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Sub menu */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 flex-col gap-1 border-l border-border pl-3\",\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\ninterface SidebarMenuSubButtonProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n isActive?: boolean;\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n isActive = false,\n className,\n ...props\n}: SidebarMenuSubButtonProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"a\";\n\n return (\n <Comp\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={cn(\n \"flex min-h-8 min-w-0 items-center gap-2 overflow-hidden rounded-md px-2\",\n \"body text-muted-foreground outline-none\",\n \"transition-colors duration-150\",\n \"hover:text-foreground hover:bg-muted\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&>svg]:size-3.5 [&>svg]:shrink-0\",\n isActive && \"text-brand-primary hover:text-brand-primary\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Exports */\n/* ------------------------------------------------------------------ */\n\nexport {\n SidebarProvider,\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n SIDEBAR_COOKIE_MAX_AGE,\n SIDEBAR_COOKIE_NAME,\n SIDEBAR_KEYBOARD_SHORTCUT,\n SIDEBAR_WIDTH,\n SIDEBAR_WIDTH_ICON,\n SIDEBAR_WIDTH_MOBILE,\n useOptionalSidebar,\n useSidebar,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slider } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst SliderRoot = React.forwardRef<\n React.ComponentRef<typeof Slider.Root>,\n React.ComponentPropsWithoutRef<typeof Slider.Root>\n>(({ className, ...props }, ref) => (\n <Slider.Root\n ref={ref}\n className={cn(\"relative flex w-full touch-none select-none items-center\", className)}\n {...props}\n >\n <Slider.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted\">\n <Slider.Range className=\"absolute h-full bg-brand-primary\" />\n </Slider.Track>\n <Slider.Thumb className=\"relative block size-4 rounded-full border-2 border-brand-primary bg-card shadow-natural transition-colors after:absolute after:left-1/2 after:top-1/2 after:size-10 after:-translate-x-1/2 after:-translate-y-1/2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30 disabled:pointer-events-none disabled:opacity-50\" />\n </Slider.Root>\n));\nSliderRoot.displayName = \"Slider\";\n\nexport { SliderRoot as Slider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Toaster as SonnerToaster } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof SonnerToaster>;\n\nfunction Toaster({ ...props }: ToasterProps) {\n return (\n <SonnerToaster\n theme=\"light\"\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast font-sans text-sm group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border group-[.toaster]:border-border group-[.toaster]:shadow-elevated group-[.toaster]:rounded-xl\",\n description: \"group-[.toast]:text-muted-foreground group-[.toast]:text-xs\",\n actionButton:\n \"group-[.toast]:bg-brand-primary group-[.toast]:text-background group-[.toast]:rounded-md group-[.toast]:text-xs group-[.toast]:font-medium\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:rounded-md group-[.toast]:text-xs group-[.toast]:font-medium\",\n success: \"group-[.toaster]:border-brand-secondary/40 group-[.toaster]:text-foreground\",\n error:\n \"group-[.toaster]:bg-destructive/10 group-[.toaster]:text-destructive group-[.toaster]:border-destructive/20\",\n warning:\n \"group-[.toaster]:bg-warning group-[.toaster]:text-warning-foreground group-[.toaster]:border-warning/40\",\n info: \"group-[.toaster]:border-border\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster };\n","import * as React from \"react\";\nimport { TrendingUp, TrendingDown, Minus, Plus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface StatCardProps {\n label?: string;\n title?: string;\n value?: string | number;\n trend?: {\n value: string;\n direction: \"up\" | \"down\" | \"neutral\";\n };\n icon?: React.ReactNode;\n children?: React.ReactNode;\n actionButtons?: React.ReactNode;\n className?: string;\n containerClassName?: string;\n titleClassName?: string;\n valueClassName?: string;\n}\n\ninterface StatCardGridProps {\n children: React.ReactNode;\n maxSlots?: number;\n onAddCard?: () => void;\n className?: string;\n showEmptySlots?: boolean;\n}\n\ninterface StatCardSlotProps {\n onAddCard?: () => void;\n className?: string;\n label?: string;\n}\n\nfunction StatCard({\n label,\n title,\n value,\n trend,\n icon,\n children,\n actionButtons,\n className,\n containerClassName,\n titleClassName,\n valueClassName,\n}: StatCardProps) {\n const displayLabel = title ?? label;\n const trendColor = {\n up: \"text-muted-foreground bg-brand-secondary/30 rounded-full px-2 py-0.5 w-fit\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n };\n\n const TrendIcon = {\n up: TrendingUp,\n down: TrendingDown,\n neutral: Minus,\n };\n\n return (\n <div\n className={cn(\n \"min-w-0 rounded-xl border border-border bg-card p-4 shadow-natural sm:p-5\",\n containerClassName,\n className,\n )}\n data-slot=\"stat-card\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n {displayLabel && (\n <p className={cn(\"label min-w-0 text-muted-foreground\", titleClassName)}>\n {displayLabel}\n </p>\n )}\n {icon && (\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground\">\n {icon}\n </div>\n )}\n {actionButtons && <div className=\"flex shrink-0 items-center gap-2\">{actionButtons}</div>}\n </div>\n {value !== undefined ? (\n <p className={cn(\"heading-xl mt-2 tabular-nums text-foreground\", valueClassName)}>\n {value}\n </p>\n ) : children ? (\n <div className=\"mt-2\">{children}</div>\n ) : null}\n {trend &&\n (() => {\n const Icon = TrendIcon[trend.direction];\n return (\n <div className={cn(\"mt-2 flex items-center gap-1\", trendColor[trend.direction])}>\n <Icon size={12} />\n <span className=\"caption tabular-nums font-medium\">{trend.value}</span>\n </div>\n );\n })()}\n </div>\n );\n}\n\nStatCard.displayName = \"StatCard\";\n\nfunction StatCardSlot({ onAddCard, className, label = \"Add card\" }: StatCardSlotProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"flex min-h-28 w-full min-w-0 items-center justify-center rounded-xl border border-dashed border-border bg-card p-4 text-muted-foreground shadow-natural\",\n \"transition-[background-color,border-color,color,scale] duration-150 hover:border-ground-300 hover:bg-muted hover:text-foreground active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n className,\n )}\n onClick={onAddCard}\n >\n <span className=\"flex flex-col items-center gap-1.5\">\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n <span className=\"caption font-medium\">{label}</span>\n </span>\n </button>\n );\n}\n\nStatCardSlot.displayName = \"StatCardSlot\";\n\nfunction StatCardGrid({\n children,\n maxSlots = 6,\n onAddCard,\n className,\n showEmptySlots = false,\n}: StatCardGridProps) {\n const childrenArray = React.Children.toArray(children);\n const emptySlots = showEmptySlots ? Math.max(0, maxSlots - childrenArray.length) : 0;\n\n return (\n <div\n className={cn(\n \"grid min-w-0 grid-cols-2 items-stretch gap-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6\",\n className,\n )}\n data-slot=\"stat-card-grid\"\n >\n {childrenArray.map((child, index) => (\n <div key={`filled-${index}`} className=\"min-w-0\">\n {child}\n </div>\n ))}\n {Array.from({ length: emptySlots }, (_, index) => (\n <div key={`empty-${index}`} className=\"min-w-0\">\n <StatCardSlot {...(onAddCard ? { onAddCard } : {})} />\n </div>\n ))}\n </div>\n );\n}\n\nStatCardGrid.displayName = \"StatCardGrid\";\n\nexport {\n StatCard,\n StatCardGrid,\n StatCardSlot,\n type StatCardProps,\n type StatCardGridProps,\n type StatCardSlotProps,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Badge } from \"./badge\";\nimport { cn } from \"../lib/utils\";\n\ntype StatusBadgeVariant = NonNullable<React.ComponentProps<typeof Badge>[\"variant\"]>;\ntype StatusBadgeIcon = React.ComponentType<{ className?: string }>;\n\ninterface StatusBadgeProps extends Omit<\n React.ComponentProps<typeof Badge>,\n \"children\" | \"variant\"\n> {\n status?: string | null;\n label?: React.ReactNode;\n variant?: StatusBadgeVariant;\n variantMap?: Record<string, StatusBadgeVariant>;\n labelMap?: Record<string, React.ReactNode>;\n icon?: StatusBadgeIcon;\n iconMap?: Record<string, StatusBadgeIcon>;\n iconClassName?: string;\n showDot?: boolean;\n dotClassName?: string;\n}\n\nconst DEFAULT_STATUS_VARIANT: Record<string, StatusBadgeVariant> = {\n active: \"success\",\n approved: \"success\",\n complete: \"success\",\n completed: \"success\",\n confirmed: \"success\",\n delivered: \"success\",\n enabled: \"success\",\n healthy: \"success\",\n optimized: \"success\",\n paid: \"success\",\n published: \"success\",\n resolved: \"success\",\n translated: \"success\",\n verified: \"success\",\n\n degraded: \"warning\",\n flagged: \"warning\",\n held_for_review: \"warning\",\n pending: \"warning\",\n processing: \"warning\",\n retrying: \"warning\",\n scheduled: \"warning\",\n trial: \"warning\",\n warning: \"warning\",\n\n archived: \"secondary\",\n disabled: \"secondary\",\n draft: \"secondary\",\n inactive: \"secondary\",\n missing: \"secondary\",\n neutral: \"secondary\",\n skipped: \"secondary\",\n\n blocked: \"destructive\",\n cancelled: \"destructive\",\n critical: \"destructive\",\n dead_letter: \"destructive\",\n deleted: \"destructive\",\n error: \"destructive\",\n failed: \"destructive\",\n rejected: \"destructive\",\n suspended: \"destructive\",\n unpaid: \"destructive\",\n outdated: \"destructive\",\n};\n\nconst DEFAULT_DOT_CLASS: Record<StatusBadgeVariant, string> = {\n default: \"bg-background\",\n secondary: \"bg-muted-foreground\",\n outline: \"bg-muted-foreground\",\n brand: \"bg-background\",\n success: \"bg-emerald-500\",\n warning: \"bg-amber-500\",\n destructive: \"bg-destructive\",\n};\n\nfunction normalizeStatus(status?: string | null) {\n return String(status ?? \"unknown\")\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\");\n}\n\nfunction statusLabel(status?: string | null) {\n const normalized = normalizeStatus(status);\n if (normalized === \"unknown\") return \"Unknown\";\n\n return normalized\n .split(\"_\")\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction statusBadgeVariantFor(\n status?: string | null,\n variantMap?: Record<string, StatusBadgeVariant>,\n) {\n const normalized = normalizeStatus(status);\n return variantMap?.[normalized] ?? DEFAULT_STATUS_VARIANT[normalized] ?? \"outline\";\n}\n\nfunction StatusBadge({\n status,\n label,\n variant,\n variantMap,\n labelMap,\n icon,\n iconMap,\n iconClassName,\n showDot = false,\n dotClassName,\n className,\n ...props\n}: StatusBadgeProps) {\n const normalized = normalizeStatus(status);\n const resolvedVariant = variant ?? statusBadgeVariantFor(normalized, variantMap);\n const resolvedLabel = label ?? labelMap?.[normalized] ?? statusLabel(normalized);\n const Icon = icon ?? iconMap?.[normalized];\n\n return (\n <Badge\n variant={resolvedVariant}\n className={cn(\"max-w-full whitespace-nowrap\", (showDot || Icon) && \"pl-2\", className)}\n {...props}\n >\n {showDot && (\n <span\n className={cn(\n \"size-1.5 shrink-0 rounded-full\",\n DEFAULT_DOT_CLASS[resolvedVariant],\n dotClassName,\n )}\n aria-hidden=\"true\"\n />\n )}\n {Icon && <Icon className={cn(\"size-3 shrink-0\", iconClassName)} aria-hidden=\"true\" />}\n <span className=\"min-w-0 truncate\">{resolvedLabel}</span>\n </Badge>\n );\n}\n\nStatusBadge.displayName = \"StatusBadge\";\n\nexport { StatusBadge, statusBadgeVariantFor, statusLabel };\nexport type { StatusBadgeProps, StatusBadgeVariant };\n","import * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport type StepStatus = \"complete\" | \"current\" | \"upcoming\";\n\nexport interface Step {\n id?: string | number;\n name: string;\n description?: string;\n status: StepStatus;\n href?: string;\n}\n\ninterface StepsProps {\n steps: Step[];\n variant?: \"circles\" | \"bullets\" | \"progress\";\n className?: string;\n}\n\n/* ---------- Circles variant ---------- */\nfunction CirclesSteps({ steps, className }: { steps: Step[]; className?: string }) {\n return (\n <nav aria-label=\"Progress\" className={className}>\n <ol role=\"list\" className=\"flex items-center\">\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n return (\n <li key={step.id ?? i} className={cn(\"relative\", !isLast && \"flex-1\")}>\n {/* Connector line */}\n {!isLast && (\n <div className=\"absolute left-9 right-0 top-[18px] h-0.5\" aria-hidden=\"true\">\n <div\n className={cn(\n \"h-full\",\n step.status === \"complete\" ? \"bg-brand-primary\" : \"bg-muted\",\n )}\n />\n </div>\n )}\n\n <a\n href={step.href ?? \"#\"}\n onClick={!step.href ? (e) => e.preventDefault() : undefined}\n className=\"group relative flex flex-col items-center gap-2\"\n >\n {/* Circle */}\n <span\n className={cn(\n \"relative z-10 flex h-9 w-9 items-center justify-center rounded-full transition-colors\",\n step.status === \"complete\" &&\n \"bg-brand-primary group-hover:bg-brand-primary/80\",\n step.status === \"current\" && \"border-2 border-brand-primary bg-card\",\n step.status === \"upcoming\" &&\n \"border-2 border-border bg-card group-hover:border-border\",\n )}\n >\n {step.status === \"complete\" ? (\n <Check size={14} className=\"text-background\" strokeWidth={2.5} />\n ) : step.status === \"current\" ? (\n <span className=\"size-3 rounded-full bg-brand-primary\" />\n ) : (\n <span className=\"size-3 rounded-full bg-transparent group-hover:bg-muted\" />\n )}\n </span>\n\n {/* Labels */}\n <span className=\"flex flex-col items-center\">\n <span\n className={cn(\n \"caption font-semibold\",\n step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\",\n )}\n >\n {step.name}\n </span>\n {step.description && (\n <span className=\"caption text-pretty text-muted-foreground\">\n {step.description}\n </span>\n )}\n </span>\n </a>\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n/* ---------- Bullets variant ---------- */\nfunction BulletsSteps({ steps, className }: { steps: Step[]; className?: string }) {\n const currentIdx = steps.findIndex((s) => s.status === \"current\");\n\n return (\n <nav className={cn(\"flex items-center gap-4\", className)} aria-label=\"Progress\">\n <p className=\"body font-medium tabular-nums text-muted-foreground\">\n Step {currentIdx + 1} of {steps.length}\n </p>\n <ol role=\"list\" className=\"flex items-center gap-2\">\n {steps.map((step, i) => (\n <li key={step.id ?? i}>\n <a\n href={step.href ?? \"#\"}\n onClick={!step.href ? (e) => e.preventDefault() : undefined}\n className=\"relative flex h-9 w-9 items-center justify-center\"\n >\n {step.status === \"complete\" ? (\n <span\n className=\"block size-2.5 rounded-full bg-brand-primary transition-colors hover:bg-brand-primary/80\"\n aria-label={`${step.name}: completed`}\n />\n ) : step.status === \"current\" ? (\n <span\n className=\"relative flex size-4 items-center justify-center\"\n aria-current=\"step\"\n aria-label={`${step.name}: current step`}\n >\n <span className=\"absolute size-4 rounded-full bg-brand-primary/20\" />\n <span className=\"relative size-2.5 rounded-full bg-brand-primary\" />\n </span>\n ) : (\n <span\n className=\"block size-2.5 rounded-full bg-muted transition-colors hover:bg-muted\"\n aria-label={`${step.name}: upcoming`}\n />\n )}\n </a>\n </li>\n ))}\n </ol>\n </nav>\n );\n}\n\n/* ---------- Progress bar variant ---------- */\nfunction ProgressSteps({ steps, className }: { steps: Step[]; className?: string }) {\n const completeCount = steps.filter((s) => s.status === \"complete\").length;\n const currentIdx = steps.findIndex((s) => s.status === \"current\");\n const progress = ((completeCount + (currentIdx >= 0 ? 0.5 : 0)) / steps.length) * 100;\n\n return (\n <div className={cn(\"w-full\", className)}>\n {/* Bar */}\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-brand-primary transition-[width] duration-500\"\n style={{ width: `${progress}%` }}\n />\n </div>\n {/* Labels */}\n <div className=\"mt-4 grid\" style={{ gridTemplateColumns: `repeat(${steps.length}, 1fr)` }}>\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n return (\n <div\n key={step.id ?? i}\n className={cn(\n \"caption font-medium text-pretty\",\n i === 0 ? \"text-left\" : isLast ? \"text-right\" : \"text-center\",\n step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\",\n )}\n >\n {step.name}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n/* ---------- Main component ---------- */\nfunction Steps({ steps, variant = \"circles\", className }: StepsProps) {\n const classNameProp = className !== undefined ? { className } : {};\n if (variant === \"bullets\") return <BulletsSteps steps={steps} {...classNameProp} />;\n if (variant === \"progress\") return <ProgressSteps steps={steps} {...classNameProp} />;\n return <CirclesSteps steps={steps} {...classNameProp} />;\n}\n\nSteps.displayName = \"Steps\";\n\nexport { Steps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Switch } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst SwitchRoot = React.forwardRef<\n React.ComponentRef<typeof Switch.Root>,\n React.ComponentPropsWithoutRef<typeof Switch.Root>\n>(({ className, ...props }, ref) => (\n <Switch.Root\n ref={ref}\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full\",\n \"border-2 border-transparent transition-[background-color,border-color,box-shadow] duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=unchecked]:bg-muted data-[state=checked]:bg-brand-primary\",\n className,\n )}\n {...props}\n >\n <Switch.Thumb\n className={cn(\n \"pointer-events-none block size-5 rounded-full bg-card shadow-natural\",\n \"transition-transform data-[state=unchecked]:translate-x-0 data-[state=checked]:translate-x-5\",\n )}\n />\n </Switch.Root>\n));\nSwitchRoot.displayName = \"Switch\";\n\nexport { SwitchRoot as Switch };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Tabs } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst TabsRoot = React.forwardRef<\n React.ComponentRef<typeof Tabs.Root>,\n React.ComponentPropsWithoutRef<typeof Tabs.Root>\n>(({ className, ...props }, ref) => (\n <Tabs.Root ref={ref} className={cn(\"w-full\", className)} {...props} />\n));\nTabsRoot.displayName = \"Tabs\";\n\nconst TabsList = React.forwardRef<\n React.ComponentRef<typeof Tabs.List>,\n React.ComponentPropsWithoutRef<typeof Tabs.List>\n>(({ className, ...props }, ref) => (\n <Tabs.List\n ref={ref}\n className={cn(\"inline-flex items-center gap-1 border-b border-border w-full\", className)}\n {...props}\n />\n));\nTabsList.displayName = \"TabsList\";\n\nconst TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof Tabs.Trigger>,\n React.ComponentPropsWithoutRef<typeof Tabs.Trigger>\n>(({ className, ...props }, ref) => (\n <Tabs.Trigger\n ref={ref}\n className={cn(\n \"px-0 pb-2.5 body font-medium text-muted-foreground\",\n \"border-b-2 border-transparent -mb-px\",\n \"transition-colors cursor-pointer\",\n \"data-[state=active]:text-brand-primary data-[state=active]:border-brand-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/20\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = \"TabsTrigger\";\n\nconst TabsContent = React.forwardRef<\n React.ComponentRef<typeof Tabs.Content>,\n React.ComponentPropsWithoutRef<typeof Tabs.Content>\n>(({ className, ...props }, ref) => (\n <Tabs.Content ref={ref} className={cn(\"mt-4\", className)} {...props} />\n));\nTabsContent.displayName = \"TabsContent\";\n\nexport { TabsRoot as Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-border bg-card px-3 py-2\",\n \"body text-foreground placeholder:text-muted-foreground\",\n \"resize-none transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:border-border\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"./card\";\nimport { CardHeading } from \"./card-heading\";\n\ninterface TitledCardProps {\n title?: string;\n subtitle?: string;\n children?: React.ReactNode;\n actionButtons?: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n className?: string;\n contentClassName?: string;\n containerClassName?: string;\n titleClassName?: string;\n}\n\nfunction TitledCard({\n title,\n subtitle,\n children,\n actionButtons,\n icon: Icon,\n className,\n contentClassName,\n containerClassName,\n titleClassName,\n}: TitledCardProps) {\n const hasHeader = Boolean(title || subtitle || actionButtons);\n const canUseCardHeading = Boolean(title) && !actionButtons && !titleClassName;\n\n return (\n <Card\n className={cn(\n \"min-w-0 overflow-hidden border border-border bg-card shadow-natural\",\n \"max-sm:rounded-none max-sm:border-0 max-sm:bg-transparent max-sm:shadow-none\",\n containerClassName,\n className,\n )}\n data-slot=\"titled-card\"\n >\n {canUseCardHeading ? (\n <CardHeading\n title={title!}\n {...(subtitle ? { description: subtitle } : {})}\n className=\"max-sm:border-b-0 max-sm:px-0 max-sm:pb-3\"\n >\n {Icon && <Icon className=\"size-5 shrink-0 text-muted-foreground\" />}\n </CardHeading>\n ) : hasHeader ? (\n <CardHeader className=\"flex flex-col gap-3 border-b border-border p-4 max-sm:border-b-0 max-sm:px-0 max-sm:pb-3 sm:flex-row sm:items-start sm:justify-between sm:p-5\">\n <div className=\"min-w-0 flex-1\">\n {title && (\n <CardTitle\n className={cn(\n \"flex min-w-0 items-center gap-2 text-base leading-tight sm:text-lg\",\n titleClassName,\n )}\n >\n {Icon && <Icon className=\"size-5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 truncate\">{title}</span>\n </CardTitle>\n )}\n {subtitle && (\n <CardDescription className=\"mt-1 max-w-3xl text-sm leading-5\">\n {subtitle}\n </CardDescription>\n )}\n </div>\n {actionButtons && (\n <div className=\"flex w-full min-w-0 flex-wrap items-center gap-2 sm:w-auto sm:justify-end\">\n {actionButtons}\n </div>\n )}\n </CardHeader>\n ) : null}\n {children && (\n <CardContent\n className={cn(\n hasHeader ? \"p-4 sm:p-5\" : \"p-0 sm:p-5\",\n \"min-w-0 max-sm:px-0\",\n contentClassName,\n )}\n >\n {children}\n </CardContent>\n )}\n </Card>\n );\n}\n\nTitledCard.displayName = \"TitledCard\";\n\nexport { TitledCard, type TitledCardProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Toggle } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst toggleVariants = cva(\n [\n \"inline-flex shrink-0 items-center justify-center gap-2\",\n \"body font-medium whitespace-nowrap rounded-md\",\n \"transition-[background-color,border-color,box-shadow,color,opacity,scale] duration-150 outline-none active:scale-[0.96]\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n variant: {\n default: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-muted data-[state=on]:text-foreground\",\n ],\n outline: [\n \"border border-border bg-card text-muted-foreground shadow-natural\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-muted data-[state=on]:text-foreground data-[state=on]:border-border\",\n ],\n brand: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-brand-primary data-[state=on]:text-background\",\n ],\n },\n size: {\n sm: \"h-8 gap-1.5 px-3\",\n default: \"h-10 px-3\",\n lg: \"h-11 px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-11\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ninterface ToggleProps\n extends React.ComponentPropsWithoutRef<typeof Toggle.Root>, VariantProps<typeof toggleVariants> {}\n\nconst ToggleRoot = React.forwardRef<React.ComponentRef<typeof Toggle.Root>, ToggleProps>(\n ({ className, variant, size, ...props }, ref) => (\n <Toggle.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size }), className)}\n {...props}\n />\n ),\n);\nToggleRoot.displayName = \"Toggle\";\n\nexport { ToggleRoot as Toggle, toggleVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ToggleGroup } from \"radix-ui\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: \"default\",\n variant: \"default\",\n});\n\nconst ToggleGroupRoot = React.forwardRef<\n React.ComponentRef<typeof ToggleGroup.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroup.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroup.Root\n ref={ref}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroup.Root>\n));\nToggleGroupRoot.displayName = \"ToggleGroup\";\n\nconst ToggleGroupItem = React.forwardRef<\n React.ComponentRef<typeof ToggleGroup.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroup.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: variant ?? context.variant,\n size: size ?? context.size,\n }),\n className,\n )}\n {...props}\n />\n );\n});\nToggleGroupItem.displayName = \"ToggleGroupItem\";\n\nexport { ToggleGroupRoot as ToggleGroup, ToggleGroupItem };\n","import * as React from \"react\";\nimport { ArrowRight } from \"lucide-react\";\nimport { Callout } from \"./callout\";\nimport { Switch } from \"./switch\";\nimport { cn } from \"../lib/utils\";\n\nfunction normalizeUrlHandle(value: string): string {\n return String(value || \"\")\n .trim()\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction urlResourcePath(prefix: string, handle: string): string {\n const cleanPrefix = normalizeUrlHandle(prefix);\n const cleanHandle = normalizeUrlHandle(handle);\n if (!cleanPrefix || !cleanHandle) return \"\";\n return `/${cleanPrefix}/${cleanHandle}`;\n}\n\nfunction hasUrlHandleChanged(originalHandle?: string, nextHandle?: string): boolean {\n const original = normalizeUrlHandle(originalHandle || \"\");\n const next = normalizeUrlHandle(nextHandle || \"\");\n return Boolean(original && next && original !== next);\n}\n\ninterface UrlRedirectPromptProps {\n originalHandle?: string;\n nextHandle?: string;\n pathPrefix: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n switchLabel?: string;\n className?: string;\n}\n\nfunction UrlRedirectPrompt({\n originalHandle,\n nextHandle,\n pathPrefix,\n checked,\n onCheckedChange,\n title = \"Create URL redirect\",\n description,\n switchLabel = \"Create URL redirect\",\n className,\n}: UrlRedirectPromptProps) {\n if (!hasUrlHandleChanged(originalHandle, nextHandle)) return null;\n\n const fromPath = urlResourcePath(pathPrefix, originalHandle || \"\");\n const toPath = urlResourcePath(pathPrefix, nextHandle || \"\");\n const calloutProps = className ? { className } : {};\n\n return (\n <Callout\n tone=\"warning\"\n compact\n icon={<ArrowRight aria-hidden=\"true\" />}\n title={title}\n actions={\n <Switch checked={checked} onCheckedChange={onCheckedChange} aria-label={switchLabel} />\n }\n {...calloutProps}\n >\n {description || (\n <p className=\"body-sm text-pretty text-muted-foreground\">\n Preserve search rankings and old links by redirecting{\" \"}\n <span className=\"font-mono text-foreground\">{fromPath}</span> to{\" \"}\n <span className=\"font-mono text-foreground\">{toPath}</span>.\n </p>\n )}\n </Callout>\n );\n}\n\nUrlRedirectPrompt.displayName = \"UrlRedirectPrompt\";\n\nexport {\n UrlRedirectPrompt,\n hasUrlHandleChanged,\n normalizeUrlHandle,\n urlResourcePath,\n};\nexport type { UrlRedirectPromptProps };\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/lib/interaction.ts","../src/lib/mobile-popper-sheet.ts","../src/components/dropdown-menu.tsx","../src/components/avatar.tsx","../src/components/account-menu.tsx","../src/lib/icon-map.tsx","../src/lib/icon-context.tsx","../src/lib/springs.ts","../src/lib/font-weight.ts","../src/hooks/use-proximity-hover.ts","../src/lib/shape-context.tsx","../src/components/accordion.tsx","../src/components/button.tsx","../src/components/action-panel.tsx","../src/components/activity-feed.tsx","../src/components/alert-dialog.tsx","../src/components/alert.tsx","../src/components/aspect-ratio.tsx","../src/hooks/use-merge-split.tsx","../src/components/ask-user-questions.tsx","../src/components/avatar-stack.tsx","../src/components/badge.tsx","../src/components/breadcrumb.tsx","../src/components/button-group.tsx","../src/components/calendar.tsx","../src/components/callout.tsx","../src/components/card-heading.tsx","../src/components/card.tsx","../src/components/carousel.tsx","../src/components/chart.tsx","../src/components/file-thumbnail.tsx","../src/components/chat-message.tsx","../src/components/checkbox.tsx","../src/components/checkbox-group.tsx","../src/components/collapsible.tsx","../src/lib/surface-context.tsx","../src/lib/surface-classes.ts","../src/components/slider.tsx","../src/lib/elevated.tsx","../src/components/dropdown.tsx","../src/components/tooltip.tsx","../src/components/color-picker.tsx","../src/components/color-input.tsx","../src/components/combobox.tsx","../src/components/dialog.tsx","../src/components/command-palette.tsx","../src/components/command.tsx","../src/components/context-menu.tsx","../src/components/table.tsx","../src/components/input.tsx","../src/components/data-table.tsx","../src/lib/scroll-fade.tsx","../src/components/select.tsx","../src/components/data-transfer-controls.tsx","../src/components/popover.tsx","../src/components/date-picker.tsx","../src/components/description-list.tsx","../src/components/drawer.tsx","../src/components/empty-state.tsx","../src/components/label.tsx","../src/components/field.tsx","../src/components/spinner.tsx","../src/components/file-dropzone.tsx","../src/components/grid-list.tsx","../src/components/help-tooltip.tsx","../src/components/hover-card.tsx","../src/components/input-copy.tsx","../src/components/input-group.tsx","../src/components/input-message.tsx","../src/components/input-number.tsx","../src/components/input-otp.tsx","../src/components/kbd.tsx","../src/components/media-asset-card.tsx","../src/components/media-object.tsx","../src/components/menu-item.tsx","../src/components/menubar.tsx","../src/components/sheet.tsx","../src/components/mobile-drawer.tsx","../src/components/native-select.tsx","../src/components/nav-item.tsx","../src/components/nav-menu.tsx","../src/components/navigation-menu.tsx","../src/components/notification.tsx","../src/components/page-heading.tsx","../src/components/pagination.tsx","../src/components/progress.tsx","../src/components/property-row.tsx","../src/components/radio-card.tsx","../src/components/radio-group.tsx","../src/components/resizable.tsx","../src/components/separator.tsx","../src/components/rich-text-editor.tsx","../src/components/scroll-area.tsx","../src/components/section-heading.tsx","../src/components/stacked-list.tsx","../src/components/searchable-table.tsx","../src/components/sidebar.tsx","../src/components/skeleton.tsx","../src/components/sonner.tsx","../src/components/stat-card.tsx","../src/components/status-badge.tsx","../src/components/steps.tsx","../src/components/switch.tsx","../src/components/tabs.tsx","../src/components/tabs-subtle.tsx","../src/components/textarea.tsx","../src/components/thinking-indicator.tsx","../src/components/thinking-steps.tsx","../src/components/titled-card.tsx","../src/components/toggle.tsx","../src/components/toggle-group.tsx","../src/components/url-redirect-prompt.tsx"],"names":["React","React2","React3","jsx","AvatarPrimitive","jsxs","React4","ChevronRight","Circle","Check","PhCaretRight","PhCaretDown","PhEyedropper","PhX","PhCopy","PhList","PhDotOutline","PhMonitor","PhSun","PhMoon","PhRectangle","PhCircle","PhBooks","PhClock","PhStar","PhGear","PhPlus","PhArrowLeft","PhArrowRight","PhArrowUp","PhMagnifyingGlass","PhSpinner","PhUsers","PhLock","PhEnvelope","PhBell","PhShield","PhPalette","PhLightbulb","PhRocket","PhHeart","PhPaintBrush","PhBrain","PhGlobe","PhUser","PhImage","PhLink","PhCheck","PhRotateCcw","PhPlay","PhPause","PhHouse","PhChatCircle","PhTray","PhPencil","PhSkipForward","PhArrowElbowDownRight","HiArrowRight","UuiChevronRight","UuiChevronDown","UuiDropper","UuiX","UuiCopy","UuiMenu","UuiCircle","UuiMonitor","UuiSun","UuiMoon","UuiSquare","UuiBook","UuiClock","UuiStar","UuiSettings","UuiPlus","UuiArrowLeft","UuiArrowRight","UuiArrowUp","UuiSearch","UuiLoader","UuiUsers","UuiLock","UuiMail","UuiBell","UuiShield","UuiPalette","UuiLightbulb","UuiRocket","UuiHeart","UuiBrush","UuiCpuChip","UuiGlobe","UuiUser","UuiImage","UuiLink","UuiCheck","UuiRotateCcw","UuiHome","UuiMessage","UuiInbox","UuiPencil","UuiSkipForward","UuiCornerDownRight","useRef","useState","useCallback","useEffect","createContext","useContext","forwardRef","shape","Fragment","React5","cva","React6","React7","AnimatePresence","motion","AskUserQuestions","ArrowLeft","ArrowRight","useMemo","ArrowLeftKey","ArrowRightKey","sizeMap","React8","React9","React10","React11","React12","isValidElement","cloneElement","useLayoutEffect","Tooltip","hsv","value","parsed","ColorInput","React13","React14","React15","Search","React17","React18","ChevronDown","ChevronsUpDown","Children","createPortal","MoreHorizontal","React19","DrawerPrimitive","React20","React21","LabelPrimitive","React22","Upload","FileIcon","React23","React24","useIsoLayoutEffect","ImageIcon","React25","React26","Minus","React27","Image","gapMap","React28","Dialog","React29","X","Menu","React30","React31","React32","React33","React34","ChevronLeft","React35","colMap","Separator","React36","SeparatorPrimitive","React37","List","Link","React38","React39","ArrowUp","React40","Slot","SonnerToaster","Plus","React41","iconMap","THUMB_SIZE","useMotionValue","animate","useId","React42","React43"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nexport const motionClasses =\n \"transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-150 ease-out motion-reduce:transition-none\";\n\nexport const springMotionClasses =\n \"transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200 ease-[cubic-bezier(0.2,0.9,0.2,1.15)] motion-reduce:transition-none\";\n\nexport const pressClasses = \"active:scale-[0.97] motion-reduce:active:scale-100\";\n\nexport const focusRingClasses =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1\";\n\nexport const iconStrokeClasses =\n \"[&_svg]:transition-[stroke-width,transform,color] [&_svg]:duration-150 [&_svg]:ease-out group-hover:[&_svg]:stroke-[2]\";\n\nexport const controlSurfaceClasses =\n \"border border-border bg-card shadow-natural hover:border-ground-200 hover:shadow-elevated\";\n\nexport const surfaceElevationClasses = {\n flat: \"border border-border bg-card\",\n raised: \"border border-border bg-card shadow-natural\",\n floating: \"border border-border bg-card shadow-elevated\",\n} as const;\n\nexport const radiusClasses = {\n control: \"rounded-md\",\n panel: \"rounded-xl\",\n pill: \"rounded-full\",\n} as const;\n\nexport const menuItemClasses =\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2 body outline-none transition-[background-color,color,box-shadow] duration-150 ease-out\";\n\nexport const menuItemActiveClasses =\n \"focus:bg-muted focus:text-foreground data-[highlighted]:bg-muted\";\n\nexport function useProximityIndex<T extends HTMLElement>(axis: \"x\" | \"y\" = \"y\") {\n const containerRef = React.useRef<T | null>(null);\n const itemRefs = React.useRef(new Map<number, HTMLElement>());\n const frameRef = React.useRef<number | null>(null);\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\n const registerItem = React.useCallback((index: number, node: HTMLElement | null) => {\n if (node) itemRefs.current.set(index, node);\n else itemRefs.current.delete(index);\n }, []);\n\n const onPointerMove = React.useCallback(\n (event: React.PointerEvent<T>) => {\n if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);\n const pointer = axis === \"x\" ? event.clientX : event.clientY;\n\n frameRef.current = requestAnimationFrame(() => {\n frameRef.current = null;\n let closestIndex: number | null = null;\n let closestDistance = Number.POSITIVE_INFINITY;\n\n itemRefs.current.forEach((node, index) => {\n const rect = node.getBoundingClientRect();\n const start = axis === \"x\" ? rect.left : rect.top;\n const size = axis === \"x\" ? rect.width : rect.height;\n const center = start + size / 2;\n const distance = Math.abs(pointer - center);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n });\n\n setActiveIndex(closestIndex);\n });\n },\n [axis],\n );\n\n const clearActiveIndex = React.useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n React.useEffect(\n () => () => {\n if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);\n },\n [],\n );\n\n return {\n activeIndex,\n containerRef,\n registerItem,\n handlers: {\n onPointerMove,\n onPointerLeave: clearActiveIndex,\n },\n };\n}\n","export const mobileDialogSheetContentClassName = [\n \"fixed inset-x-0 bottom-0 z-50 max-h-[calc(100dvh-1rem)] w-full overflow-y-auto\",\n \"rounded-t-2xl border border-border bg-card p-6 shadow-elevated\",\n \"max-sm:pb-[calc(1.5rem+env(safe-area-inset-bottom))] max-sm:pt-8\",\n \"max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-3 max-sm:before:h-1 max-sm:before:w-9\",\n \"max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35\",\n].join(\" \");\n\nexport const desktopDialogContentClassName =\n \"sm:bottom-auto sm:left-1/2 sm:top-1/2 sm:max-h-[calc(100dvh-2rem)] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-2xl\";\n\nexport const dialogSheetMotionClassName = [\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]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n \"sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95\",\n].join(\" \");\n\nexport const mobilePopperSheetPositionClassName = [\n \"max-sm:!fixed max-sm:!inset-x-3 max-sm:!bottom-3 max-sm:!top-auto max-sm:!left-3 max-sm:!right-3\",\n \"max-sm:!w-auto max-sm:!min-w-0 max-sm:!max-w-none max-sm:!transform-none\",\n].join(\" \");\n\nexport const mobilePopperSheetSurfaceClassName =\n \"max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:border max-sm:border-border max-sm:shadow-elevated\";\n\nexport const mobilePopperSheetMotionClassName = [\n \"max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=open]:slide-in-from-bottom\",\n].join(\" \");\n\nexport const mobilePopperSheetStyle = `\n@media (max-width: 639px) {\n [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet=\"true\"]) {\n position: fixed !important;\n inset: 0 !important;\n min-width: 0 !important;\n transform: none !important;\n pointer-events: none;\n z-index: 50 !important;\n }\n\n [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet=\"true\"][data-state=\"open\"])::before {\n content: \"\";\n position: fixed;\n inset: 0;\n background: rgb(0 0 0 / 0.3);\n backdrop-filter: blur(4px);\n pointer-events: auto;\n }\n\n [data-hilum-mobile-sheet=\"true\"] {\n position: fixed !important;\n left: 0.75rem !important;\n right: 0.75rem !important;\n bottom: max(0.75rem, env(safe-area-inset-bottom)) !important;\n top: auto !important;\n width: calc(100dvw - 1.5rem) !important;\n min-width: 0 !important;\n max-width: none !important;\n transform: none !important;\n pointer-events: auto;\n transform-origin: bottom center !important;\n overscroll-behavior: contain;\n }\n\n [data-hilum-mobile-sheet=\"true\"]::before {\n content: \"\";\n position: absolute;\n top: 0.5rem;\n left: 50%;\n width: 2.25rem;\n height: 0.25rem;\n border-radius: 999px;\n background: hsl(var(--muted-foreground) / 0.35);\n transform: translateX(-50%);\n }\n}\n`;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenu } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n menuItemActiveClasses,\n menuItemClasses,\n motionClasses,\n pressClasses,\n} from \"../lib/interaction\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst DropdownMenuRoot = DropdownMenu.Root;\nconst DropdownMenuTrigger = DropdownMenu.Trigger;\nconst DropdownMenuGroup = DropdownMenu.Group;\nconst DropdownMenuPortal = DropdownMenu.Portal;\nconst DropdownMenuSub = DropdownMenu.Sub;\nconst DropdownMenuRadioGroup = DropdownMenu.RadioGroup;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </DropdownMenu.Portal>\n </>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nconst DropdownMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(({ className, inset, destructive, ...props }, ref) => (\n <DropdownMenu.Item\n ref={ref}\n className={cn(\n menuItemClasses,\n motionClasses,\n pressClasses,\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-muted-foreground focus:bg-muted focus:text-foreground\",\n !destructive && menuItemActiveClasses,\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenu.CheckboxItem\n ref={ref}\n className={cn(\n menuItemClasses,\n menuItemActiveClasses,\n \"py-2 pl-8 pr-2.5 text-muted-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenu.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </DropdownMenu.ItemIndicator>\n </span>\n {children}\n </DropdownMenu.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenu.RadioItem\n ref={ref}\n className={cn(\n menuItemClasses,\n menuItemActiveClasses,\n \"py-2 pl-8 pr-2.5 text-muted-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenu.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </DropdownMenu.ItemIndicator>\n </span>\n {children}\n </DropdownMenu.RadioItem>\n));\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\";\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenu.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenu.Separator\n ref={ref}\n className={cn(\"mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenu.SubTrigger\n ref={ref}\n className={cn(\n menuItemClasses,\n menuItemActiveClasses,\n \"text-muted-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </DropdownMenu.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenu.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenu.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <DropdownMenu.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nfunction DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenuRoot as DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuRadioGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst sizeMap = {\n xs: \"size-5 caption-xs\",\n sm: \"size-7 caption\",\n md: \"size-8 body\",\n lg: \"size-10 body-lg\",\n xl: \"size-12 subheading\",\n} as const;\n\ntype AvatarSize = keyof typeof sizeMap;\n\ninterface AvatarProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> {\n size?: AvatarSize;\n}\n\nconst Avatar = React.forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n ({ className, size = \"md\", ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex shrink-0 overflow-hidden rounded-full\",\n sizeMap[size],\n className,\n )}\n {...props}\n />\n ),\n);\nAvatar.displayName = \"Avatar\";\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\n \"aspect-square h-full w-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10\",\n className,\n )}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted body font-semibold text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n\nconst statusColorMap = {\n online: \"bg-brand-secondary\",\n offline: \"bg-muted\",\n busy: \"bg-destructive\",\n away: \"bg-brand-secondary\",\n};\n\nconst statusSizeMap = {\n xs: \"size-1.5 ring-1\",\n sm: \"size-2 ring-1\",\n md: \"size-2.5 ring-[1.5px]\",\n lg: \"size-3 ring-2\",\n xl: \"size-3.5 ring-2\",\n};\n\ninterface AvatarWithStatusProps extends AvatarProps {\n status?: keyof typeof statusColorMap;\n}\n\nconst AvatarWithStatus = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarWithStatusProps & { children?: React.ReactNode }\n>(({ status, size = \"md\", className, children, ...props }, ref) => (\n <div className=\"relative inline-flex shrink-0\">\n <Avatar ref={ref} size={size} className={className} {...props}>\n {children}\n </Avatar>\n {status && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 rounded-full ring-background\",\n statusColorMap[status],\n statusSizeMap[size],\n )}\n />\n )}\n </div>\n));\nAvatarWithStatus.displayName = \"AvatarWithStatus\";\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarWithStatus };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator } from \"./dropdown-menu\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { cn } from \"../lib/utils\";\n\nconst AccountMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuContent>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuContent\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"w-72 overflow-hidden rounded-xl border border-border bg-card p-0 text-foreground shadow-elevated\",\n className,\n )}\n {...props}\n />\n));\nAccountMenuContent.displayName = \"AccountMenuContent\";\n\ninterface AccountMenuHeaderProps extends React.ComponentProps<\"div\"> {\n name: React.ReactNode;\n email?: React.ReactNode;\n avatarSrc?: string | null;\n avatarAlt?: string;\n fallback?: React.ReactNode;\n}\n\nconst AccountMenuHeader = React.forwardRef<HTMLDivElement, AccountMenuHeaderProps>(\n ({ name, email, avatarSrc, avatarAlt, fallback, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center px-5 py-5 text-center\", className)}\n {...props}\n >\n <Avatar size=\"lg\" className=\"mb-3\">\n {avatarSrc && <AvatarImage src={avatarSrc} alt={avatarAlt ?? \"\"} />}\n <AvatarFallback className=\"bg-brand-primary text-primary-foreground\">\n {fallback}\n </AvatarFallback>\n </Avatar>\n <p className=\"body font-medium leading-tight text-foreground\">{name}</p>\n {email && <p className=\"caption text-muted-foreground\">{email}</p>}\n </div>\n ),\n);\nAccountMenuHeader.displayName = \"AccountMenuHeader\";\n\nconst AccountMenuSection = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => <div ref={ref} className={cn(\"p-2\", className)} {...props} />,\n);\nAccountMenuSection.displayName = \"AccountMenuSection\";\n\ninterface AccountMenuItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuItem> {\n icon?: React.ReactNode;\n trailing?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nconst AccountMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuItem>,\n AccountMenuItemProps\n>(({ icon, trailing, description, destructive, children, className, ...props }, ref) => (\n <DropdownMenuItem\n ref={ref}\n className={cn(\n \"min-h-10 rounded-md px-2.5 py-2\",\n \"group\",\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-foreground focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:opacity-40\",\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {icon && <span className=\"flex size-5 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"body truncate font-medium leading-tight\">{children}</span>\n {description && (\n <span className=\"caption truncate font-normal text-muted-foreground group-focus:text-muted-foreground\">\n {description}\n </span>\n )}\n </span>\n {trailing && <span className=\"caption ml-3 shrink-0 text-muted-foreground\">{trailing}</span>}\n </DropdownMenuItem>\n));\nAccountMenuItem.displayName = \"AccountMenuItem\";\n\nconst AccountMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuSeparator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuSeparator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuSeparator ref={ref} className={cn(\"m-0 bg-border\", className)} {...props} />\n));\nAccountMenuSeparator.displayName = \"AccountMenuSeparator\";\n\nexport {\n AccountMenuContent,\n AccountMenuHeader,\n AccountMenuSection,\n AccountMenuItem,\n AccountMenuSeparator,\n};\n","\"use client\";\n\nimport type { ComponentType } from \"react\";\n\n// ── Lucide ──────────────────────────────────────────────────\nimport {\n ChevronRight,\n ChevronDown,\n X,\n Copy,\n Menu,\n Dot,\n Monitor,\n Sun,\n Moon,\n RectangleHorizontal,\n Circle,\n SquareLibrary,\n Clock,\n Star,\n Settings,\n Plus,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n Search,\n Loader,\n Users,\n Lock,\n Mail,\n Bell,\n Shield,\n Palette,\n Lightbulb,\n Rocket,\n Heart,\n Paintbrush,\n Brain,\n Globe,\n User,\n ImageIcon,\n Link,\n Check,\n RotateCcw,\n Play,\n Pause,\n Pipette,\n Home,\n MessageCircle,\n Inbox,\n Pencil,\n SkipForward,\n CornerDownRight,\n} from \"lucide-react\";\n\n// ── Tabler ──────────────────────────────────────────────────\nimport {\n IconChevronRight,\n IconChevronDown,\n IconColorPicker,\n IconX,\n IconCopy,\n IconMenu2,\n IconPoint,\n IconDeviceDesktop,\n IconSun,\n IconMoon,\n IconSquare,\n IconCircle,\n IconLibrary,\n IconClock,\n IconStar,\n IconSettings,\n IconPlus,\n IconArrowLeft,\n IconArrowRight,\n IconArrowUp,\n IconSearch,\n IconLoader2,\n IconUsers,\n IconLock,\n IconMail,\n IconBell,\n IconShield,\n IconPalette,\n IconBulb,\n IconRocket,\n IconHeart,\n IconBrush,\n IconBrain,\n IconGlobe,\n IconUser,\n IconPhoto,\n IconLink,\n IconCheck,\n IconRotate2,\n IconPlayerPlay,\n IconPlayerPause,\n IconHome,\n IconMessageCircle,\n IconInbox,\n IconPencil,\n IconPlayerSkipForward,\n IconCornerDownRight,\n} from \"@tabler/icons-react\";\n\n// ── Phosphor ────────────────────────────────────────────────\nimport {\n CaretRight as PhCaretRight,\n CaretDown as PhCaretDown,\n Eyedropper as PhEyedropper,\n X as PhX,\n Copy as PhCopy,\n List as PhList,\n DotOutline as PhDotOutline,\n Monitor as PhMonitor,\n Sun as PhSun,\n Moon as PhMoon,\n Rectangle as PhRectangle,\n Circle as PhCircle,\n Books as PhBooks,\n Clock as PhClock,\n Star as PhStar,\n Gear as PhGear,\n Plus as PhPlus,\n ArrowLeft as PhArrowLeft,\n ArrowRight as PhArrowRight,\n ArrowUp as PhArrowUp,\n MagnifyingGlass as PhMagnifyingGlass,\n Spinner as PhSpinner,\n Users as PhUsers,\n Lock as PhLock,\n Envelope as PhEnvelope,\n Bell as PhBell,\n Shield as PhShield,\n Palette as PhPalette,\n Lightbulb as PhLightbulb,\n Rocket as PhRocket,\n Heart as PhHeart,\n PaintBrush as PhPaintBrush,\n Brain as PhBrain,\n Globe as PhGlobe,\n User as PhUser,\n Image as PhImage,\n Link as PhLink,\n Check as PhCheck,\n ArrowCounterClockwise as PhRotateCcw,\n Play as PhPlay,\n Pause as PhPause,\n House as PhHouse,\n ChatCircle as PhChatCircle,\n Tray as PhTray,\n Pencil as PhPencil,\n SkipForward as PhSkipForward,\n ArrowElbowDownRight as PhArrowElbowDownRight,\n} from \"@phosphor-icons/react\";\n\n// ── HugeIcons ───────────────────────────────────────────────\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport HiChevronRight from \"@hugeicons/core-free-icons/ArrowRight01Icon\";\nimport HiChevronDown from \"@hugeicons/core-free-icons/ArrowDown01Icon\";\nimport HiDropper from \"@hugeicons/core-free-icons/DropperIcon\";\nimport HiX from \"@hugeicons/core-free-icons/Cancel01Icon\";\nimport HiCopy from \"@hugeicons/core-free-icons/Copy01Icon\";\nimport HiMenu from \"@hugeicons/core-free-icons/Menu01Icon\";\nimport HiDot from \"@hugeicons/core-free-icons/CircleIcon\";\nimport HiMonitor from \"@hugeicons/core-free-icons/ComputerIcon\";\nimport HiSun from \"@hugeicons/core-free-icons/Sun01Icon\";\nimport HiMoon from \"@hugeicons/core-free-icons/Moon01Icon\";\nimport HiRectangle from \"@hugeicons/core-free-icons/DashboardCircleIcon\";\nimport HiLibrary from \"@hugeicons/core-free-icons/LibraryIcon\";\nimport HiClock from \"@hugeicons/core-free-icons/Clock01Icon\";\nimport HiStar from \"@hugeicons/core-free-icons/StarIcon\";\nimport HiSettings from \"@hugeicons/core-free-icons/Settings01Icon\";\nimport HiPlus from \"@hugeicons/core-free-icons/PlusSignIcon\";\nimport HiArrowLeft from \"@hugeicons/core-free-icons/ArrowLeft01Icon\";\nimport HiArrowRight from \"@hugeicons/core-free-icons/ArrowRight01Icon\";\nimport HiArrowUp from \"@hugeicons/core-free-icons/ArrowUp01Icon\";\nimport HiSearch from \"@hugeicons/core-free-icons/Search01Icon\";\nimport HiLoader from \"@hugeicons/core-free-icons/Loading01Icon\";\nimport HiUsers from \"@hugeicons/core-free-icons/UserGroupIcon\";\nimport HiLock from \"@hugeicons/core-free-icons/LockIcon\";\nimport HiMail from \"@hugeicons/core-free-icons/Mail01Icon\";\nimport HiBell from \"@hugeicons/core-free-icons/Notification01Icon\";\nimport HiShield from \"@hugeicons/core-free-icons/Shield01Icon\";\nimport HiPalette from \"@hugeicons/core-free-icons/PaintBrush01Icon\";\nimport HiLightbulb from \"@hugeicons/core-free-icons/BulbIcon\";\nimport HiRocket from \"@hugeicons/core-free-icons/Rocket01Icon\";\nimport HiHeart from \"@hugeicons/core-free-icons/FavouriteIcon\";\nimport HiPaintbrush from \"@hugeicons/core-free-icons/PaintBrush02Icon\";\nimport HiBrain from \"@hugeicons/core-free-icons/BrainIcon\";\nimport HiGlobe from \"@hugeicons/core-free-icons/GlobeIcon\";\nimport HiUser from \"@hugeicons/core-free-icons/UserIcon\";\nimport HiImage from \"@hugeicons/core-free-icons/Image01Icon\";\nimport HiLink from \"@hugeicons/core-free-icons/Link01Icon\";\nimport HiCheck from \"@hugeicons/core-free-icons/Tick02Icon\";\nimport HiRotateCcw from \"@hugeicons/core-free-icons/ArrowReloadHorizontalIcon\";\nimport HiHome from \"@hugeicons/core-free-icons/Home01Icon\";\nimport HiMessage from \"@hugeicons/core-free-icons/BubbleChatIcon\";\nimport HiInbox from \"@hugeicons/core-free-icons/InboxIcon\";\nimport HiPencil from \"@hugeicons/core-free-icons/PencilEdit01Icon\";\nimport HiSkipForward from \"@hugeicons/core-free-icons/NextIcon\";\nimport HiCornerDownRight from \"@hugeicons/core-free-icons/ArrowMoveDownRightIcon\";\n\n// ── Untitled UI ─────────────────────────────────────────────\n// Aliased with a Uui prefix to avoid collisions with the Lucide imports above.\nimport {\n ChevronRight as UuiChevronRight,\n ChevronDown as UuiChevronDown,\n Dropper as UuiDropper,\n XClose as UuiX,\n Copy01 as UuiCopy,\n Menu01 as UuiMenu,\n Monitor01 as UuiMonitor,\n Sun as UuiSun,\n Moon01 as UuiMoon,\n Square as UuiSquare,\n Circle as UuiCircle,\n BookClosed as UuiBook,\n Clock as UuiClock,\n Star01 as UuiStar,\n Settings01 as UuiSettings,\n Plus as UuiPlus,\n ArrowLeft as UuiArrowLeft,\n ArrowRight as UuiArrowRight,\n ArrowUp as UuiArrowUp,\n SearchMd as UuiSearch,\n Loading01 as UuiLoader,\n Users01 as UuiUsers,\n Lock01 as UuiLock,\n Mail01 as UuiMail,\n Bell01 as UuiBell,\n Shield01 as UuiShield,\n Palette as UuiPalette,\n Lightbulb01 as UuiLightbulb,\n Rocket01 as UuiRocket,\n Heart as UuiHeart,\n Brush01 as UuiBrush,\n CpuChip01 as UuiCpuChip,\n Globe01 as UuiGlobe,\n User01 as UuiUser,\n Image01 as UuiImage,\n Link01 as UuiLink,\n Check as UuiCheck,\n RefreshCcw01 as UuiRotateCcw,\n Home01 as UuiHome,\n MessageCircle01 as UuiMessage,\n Inbox01 as UuiInbox,\n Pencil01 as UuiPencil,\n SkipForward as UuiSkipForward,\n CornerDownRight as UuiCornerDownRight,\n} from \"@untitledui/icons\";\n\n// ── Types ───────────────────────────────────────────────────\n\nexport interface IconComponentProps {\n size?: number;\n strokeWidth?: number;\n className?: string;\n}\n\nexport type IconComponent = ComponentType<IconComponentProps>;\n\nexport type IconLibrary = \"lucide\" | \"tabler\" | \"phosphor\" | \"hugeicons\" | \"untitledui\";\n\nexport type IconName =\n | \"chevron-right\"\n | \"chevron-down\"\n | \"x\"\n | \"copy\"\n | \"menu\"\n | \"dot\"\n | \"monitor\"\n | \"sun\"\n | \"moon\"\n | \"rectangle-horizontal\"\n | \"circle\"\n | \"square-library\"\n | \"clock\"\n | \"star\"\n | \"settings\"\n | \"plus\"\n | \"arrow-left\"\n | \"arrow-right\"\n | \"arrow-up\"\n | \"search\"\n | \"loader\"\n | \"users\"\n | \"lock\"\n | \"mail\"\n | \"bell\"\n | \"shield\"\n | \"palette\"\n | \"lightbulb\"\n | \"rocket\"\n | \"heart\"\n | \"paintbrush\"\n | \"brain\"\n | \"globe\"\n | \"user\"\n | \"image\"\n | \"link\"\n | \"check\"\n | \"rotate-ccw\"\n | \"play\"\n | \"pause\"\n | \"pipette\"\n | \"home\"\n | \"message-circle\"\n | \"inbox\"\n | \"pencil\"\n | \"skip-forward\"\n | \"corner-down-right\";\n\nexport const iconLibraryOrder: IconLibrary[] = [\n \"lucide\",\n \"tabler\",\n \"phosphor\",\n \"hugeicons\",\n \"untitledui\",\n];\n\nexport const iconLibraryLabels: Record<IconLibrary, string> = {\n lucide: \"Lucide\",\n tabler: \"Tabler\",\n phosphor: \"Phosphor\",\n hugeicons: \"HugeIcons\",\n untitledui: \"Untitled UI\",\n};\n\n// ── Adapter Factories ───────────────────────────────────────\n\n// Tabler: `strokeWidth` → `stroke` prop\nfunction tabler(\n Icon: ComponentType<{ size?: number; stroke?: number; className?: string }>,\n): IconComponent {\n return function TablerAdapter({ size, strokeWidth, className }: IconComponentProps) {\n const props: { size?: number; stroke?: number; className?: string } = {};\n if (size !== undefined) props.size = size;\n if (strokeWidth !== undefined) props.stroke = strokeWidth;\n if (className !== undefined) props.className = className;\n return <Icon {...props} />;\n };\n}\n\n// Phosphor: uses filled paths per weight variant, not CSS stroke.\n// Map numeric strokeWidth → discrete weight prop.\ntype PhosphorWeight = \"thin\" | \"light\" | \"regular\" | \"bold\";\nfunction phosphor(\n Icon: ComponentType<{ size?: number; weight?: PhosphorWeight; className?: string }>,\n): IconComponent {\n return function PhosphorAdapter({ size, strokeWidth, className }: IconComponentProps) {\n const weight: PhosphorWeight = strokeWidth != null && strokeWidth >= 1.75 ? \"regular\" : \"light\";\n const props: { size?: number; weight?: PhosphorWeight; className?: string } = { weight };\n if (size !== undefined) props.size = size;\n if (className !== undefined) props.className = className;\n return <Icon {...props} />;\n };\n}\n\n// HugeIcons: wraps icon definition in HugeiconsIcon renderer\nfunction hugeicons(iconDef: unknown): IconComponent {\n return function HugeIconsAdapter({ size, strokeWidth, className }: IconComponentProps) {\n const props: { size?: number; strokeWidth?: number; className?: string } = {};\n if (size !== undefined) props.size = size;\n if (strokeWidth !== undefined) props.strokeWidth = strokeWidth;\n if (className !== undefined) props.className = className;\n return (\n <HugeiconsIcon\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n icon={iconDef as any}\n {...props}\n />\n );\n };\n}\n\n// Untitled UI: standard 24px SVG components — `strokeWidth`/`className` pass\n// through natively; only `size` needs mapping to `width`/`height`.\nfunction untitledui(\n Icon: ComponentType<{\n width?: number;\n height?: number;\n strokeWidth?: number;\n className?: string;\n }>,\n): IconComponent {\n return function UntitledUiAdapter({ size, strokeWidth, className }: IconComponentProps) {\n const props: {\n width?: number;\n height?: number;\n strokeWidth?: number;\n className?: string;\n } = {};\n if (size !== undefined) {\n props.width = size;\n props.height = size;\n }\n if (strokeWidth !== undefined) props.strokeWidth = strokeWidth;\n if (className !== undefined) props.className = className;\n return <Icon {...props} />;\n };\n}\n\n// ── Icon Maps ───────────────────────────────────────────────\n\nconst lucideMap: Record<IconName, IconComponent> = {\n \"chevron-right\": ChevronRight,\n \"chevron-down\": ChevronDown,\n pipette: Pipette,\n x: X,\n copy: Copy,\n menu: Menu,\n dot: Dot,\n monitor: Monitor,\n sun: Sun,\n moon: Moon,\n \"rectangle-horizontal\": RectangleHorizontal,\n circle: Circle,\n \"square-library\": SquareLibrary,\n clock: Clock,\n star: Star,\n settings: Settings,\n plus: Plus,\n \"arrow-left\": ArrowLeft,\n \"arrow-right\": ArrowRight,\n \"arrow-up\": ArrowUp,\n search: Search,\n loader: Loader,\n users: Users,\n lock: Lock,\n mail: Mail,\n bell: Bell,\n shield: Shield,\n palette: Palette,\n lightbulb: Lightbulb,\n rocket: Rocket,\n heart: Heart,\n paintbrush: Paintbrush,\n brain: Brain,\n globe: Globe,\n user: User,\n image: ImageIcon,\n link: Link,\n check: Check,\n \"rotate-ccw\": RotateCcw,\n play: Play,\n pause: Pause,\n home: Home,\n \"message-circle\": MessageCircle,\n inbox: Inbox,\n pencil: Pencil,\n \"skip-forward\": SkipForward,\n \"corner-down-right\": CornerDownRight,\n};\n\nconst tablerMap: Record<IconName, IconComponent> = {\n \"chevron-right\": tabler(IconChevronRight),\n \"chevron-down\": tabler(IconChevronDown),\n pipette: tabler(IconColorPicker),\n x: tabler(IconX),\n copy: tabler(IconCopy),\n menu: tabler(IconMenu2),\n dot: tabler(IconPoint),\n monitor: tabler(IconDeviceDesktop),\n sun: tabler(IconSun),\n moon: tabler(IconMoon),\n \"rectangle-horizontal\": tabler(IconSquare),\n circle: tabler(IconCircle),\n \"square-library\": tabler(IconLibrary),\n clock: tabler(IconClock),\n star: tabler(IconStar),\n settings: tabler(IconSettings),\n plus: tabler(IconPlus),\n \"arrow-left\": tabler(IconArrowLeft),\n \"arrow-right\": tabler(IconArrowRight),\n \"arrow-up\": tabler(IconArrowUp),\n search: tabler(IconSearch),\n loader: tabler(IconLoader2),\n users: tabler(IconUsers),\n lock: tabler(IconLock),\n mail: tabler(IconMail),\n bell: tabler(IconBell),\n shield: tabler(IconShield),\n palette: tabler(IconPalette),\n lightbulb: tabler(IconBulb),\n rocket: tabler(IconRocket),\n heart: tabler(IconHeart),\n paintbrush: tabler(IconBrush),\n brain: tabler(IconBrain),\n globe: tabler(IconGlobe),\n user: tabler(IconUser),\n image: tabler(IconPhoto),\n link: tabler(IconLink),\n check: tabler(IconCheck),\n \"rotate-ccw\": tabler(IconRotate2),\n play: tabler(IconPlayerPlay),\n pause: tabler(IconPlayerPause),\n home: tabler(IconHome),\n \"message-circle\": tabler(IconMessageCircle),\n inbox: tabler(IconInbox),\n pencil: tabler(IconPencil),\n \"skip-forward\": tabler(IconPlayerSkipForward),\n \"corner-down-right\": tabler(IconCornerDownRight),\n};\n\nconst phosphorMap: Record<IconName, IconComponent> = {\n \"chevron-right\": phosphor(PhCaretRight),\n \"chevron-down\": phosphor(PhCaretDown),\n pipette: phosphor(PhEyedropper),\n x: phosphor(PhX),\n copy: phosphor(PhCopy),\n menu: phosphor(PhList),\n dot: phosphor(PhDotOutline),\n monitor: phosphor(PhMonitor),\n sun: phosphor(PhSun),\n moon: phosphor(PhMoon),\n \"rectangle-horizontal\": phosphor(PhRectangle),\n circle: phosphor(PhCircle),\n \"square-library\": phosphor(PhBooks),\n clock: phosphor(PhClock),\n star: phosphor(PhStar),\n settings: phosphor(PhGear),\n plus: phosphor(PhPlus),\n \"arrow-left\": phosphor(PhArrowLeft),\n \"arrow-right\": phosphor(PhArrowRight),\n \"arrow-up\": phosphor(PhArrowUp),\n search: phosphor(PhMagnifyingGlass),\n loader: phosphor(PhSpinner),\n users: phosphor(PhUsers),\n lock: phosphor(PhLock),\n mail: phosphor(PhEnvelope),\n bell: phosphor(PhBell),\n shield: phosphor(PhShield),\n palette: phosphor(PhPalette),\n lightbulb: phosphor(PhLightbulb),\n rocket: phosphor(PhRocket),\n heart: phosphor(PhHeart),\n paintbrush: phosphor(PhPaintBrush),\n brain: phosphor(PhBrain),\n globe: phosphor(PhGlobe),\n user: phosphor(PhUser),\n image: phosphor(PhImage),\n link: phosphor(PhLink),\n check: phosphor(PhCheck),\n \"rotate-ccw\": phosphor(PhRotateCcw),\n play: phosphor(PhPlay),\n pause: phosphor(PhPause),\n home: phosphor(PhHouse),\n \"message-circle\": phosphor(PhChatCircle),\n inbox: phosphor(PhTray),\n pencil: phosphor(PhPencil),\n \"skip-forward\": phosphor(PhSkipForward),\n \"corner-down-right\": phosphor(PhArrowElbowDownRight),\n};\n\nconst hugeiconsMap: Record<IconName, IconComponent> = {\n \"chevron-right\": hugeicons(HiChevronRight),\n \"chevron-down\": hugeicons(HiChevronDown),\n pipette: hugeicons(HiDropper),\n x: hugeicons(HiX),\n copy: hugeicons(HiCopy),\n menu: hugeicons(HiMenu),\n dot: hugeicons(HiDot),\n monitor: hugeicons(HiMonitor),\n sun: hugeicons(HiSun),\n moon: hugeicons(HiMoon),\n \"rectangle-horizontal\": hugeicons(HiRectangle),\n circle: hugeicons(HiDot),\n \"square-library\": hugeicons(HiLibrary),\n clock: hugeicons(HiClock),\n star: hugeicons(HiStar),\n settings: hugeicons(HiSettings),\n plus: hugeicons(HiPlus),\n \"arrow-left\": hugeicons(HiArrowLeft),\n \"arrow-right\": hugeicons(HiArrowRight),\n \"arrow-up\": hugeicons(HiArrowUp),\n search: hugeicons(HiSearch),\n loader: hugeicons(HiLoader),\n users: hugeicons(HiUsers),\n lock: hugeicons(HiLock),\n mail: hugeicons(HiMail),\n bell: hugeicons(HiBell),\n shield: hugeicons(HiShield),\n palette: hugeicons(HiPalette),\n lightbulb: hugeicons(HiLightbulb),\n rocket: hugeicons(HiRocket),\n heart: hugeicons(HiHeart),\n paintbrush: hugeicons(HiPaintbrush),\n brain: hugeicons(HiBrain),\n globe: hugeicons(HiGlobe),\n user: hugeicons(HiUser),\n image: hugeicons(HiImage),\n link: hugeicons(HiLink),\n check: hugeicons(HiCheck),\n \"rotate-ccw\": hugeicons(HiRotateCcw),\n play: Play,\n pause: Pause,\n home: hugeicons(HiHome),\n \"message-circle\": hugeicons(HiMessage),\n inbox: hugeicons(HiInbox),\n pencil: hugeicons(HiPencil),\n \"skip-forward\": hugeicons(HiSkipForward),\n \"corner-down-right\": hugeicons(HiCornerDownRight),\n};\n\nconst untitleduiMap: Record<IconName, IconComponent> = {\n \"chevron-right\": untitledui(UuiChevronRight),\n \"chevron-down\": untitledui(UuiChevronDown),\n pipette: untitledui(UuiDropper),\n x: untitledui(UuiX),\n copy: untitledui(UuiCopy),\n menu: untitledui(UuiMenu),\n // No bare dot in the set — reuse Circle (matches HugeIcons' dot handling).\n dot: untitledui(UuiCircle),\n monitor: untitledui(UuiMonitor),\n sun: untitledui(UuiSun),\n moon: untitledui(UuiMoon),\n \"rectangle-horizontal\": untitledui(UuiSquare),\n circle: untitledui(UuiCircle),\n \"square-library\": untitledui(UuiBook),\n clock: untitledui(UuiClock),\n star: untitledui(UuiStar),\n settings: untitledui(UuiSettings),\n plus: untitledui(UuiPlus),\n \"arrow-left\": untitledui(UuiArrowLeft),\n \"arrow-right\": untitledui(UuiArrowRight),\n \"arrow-up\": untitledui(UuiArrowUp),\n search: untitledui(UuiSearch),\n loader: untitledui(UuiLoader),\n users: untitledui(UuiUsers),\n lock: untitledui(UuiLock),\n mail: untitledui(UuiMail),\n bell: untitledui(UuiBell),\n shield: untitledui(UuiShield),\n palette: untitledui(UuiPalette),\n lightbulb: untitledui(UuiLightbulb),\n rocket: untitledui(UuiRocket),\n heart: untitledui(UuiHeart),\n paintbrush: untitledui(UuiBrush),\n // No brain icon in the free set — CpuChip01 carries the \"intelligence\" metaphor.\n brain: untitledui(UuiCpuChip),\n globe: untitledui(UuiGlobe),\n user: untitledui(UuiUser),\n image: untitledui(UuiImage),\n link: untitledui(UuiLink),\n check: untitledui(UuiCheck),\n \"rotate-ccw\": untitledui(UuiRotateCcw),\n // Only enclosed Pause variants exist; fall back to Lucide for a bare pair\n // (matches HugeIcons' play/pause handling).\n play: Play,\n pause: Pause,\n home: untitledui(UuiHome),\n \"message-circle\": untitledui(UuiMessage),\n inbox: untitledui(UuiInbox),\n pencil: untitledui(UuiPencil),\n \"skip-forward\": untitledui(UuiSkipForward),\n \"corner-down-right\": untitledui(UuiCornerDownRight),\n};\n\n// ── Unified Map ─────────────────────────────────────────────\n\nexport const iconMap: Record<IconLibrary, Record<IconName, IconComponent>> = {\n lucide: lucideMap,\n tabler: tablerMap,\n phosphor: phosphorMap,\n hugeicons: hugeiconsMap,\n untitledui: untitleduiMap,\n};\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useEffect,\n useMemo,\n type ReactNode,\n} from \"react\";\n\nimport {\n iconMap,\n iconLibraryOrder,\n type IconLibrary,\n type IconName,\n type IconComponent,\n} from \"./icon-map\";\n\n// Re-export types for consumers\nexport type { IconComponent, IconName, IconLibrary } from \"./icon-map\";\nexport { iconLibraryOrder, iconLibraryLabels } from \"./icon-map\";\n\ninterface IconContextValue {\n iconLibrary: IconLibrary;\n setIconLibrary: (lib: IconLibrary) => void;\n}\n\nconst IconContext = createContext<IconContextValue | null>(null);\n\n/**\n * Returns the current icon library and setter.\n * Throws if used outside IconProvider.\n */\nfunction useIconLibrary() {\n const ctx = useContext(IconContext);\n if (!ctx) throw new Error(\"useIconLibrary must be used within an IconProvider\");\n return ctx;\n}\n\n/**\n * Returns a single icon component for the given name.\n * Falls back to Lucide if no provider is present.\n */\nfunction useIcon(name: IconName): IconComponent {\n const ctx = useContext(IconContext);\n if (!ctx) return iconMap.lucide[name];\n return iconMap[ctx.iconLibrary][name];\n}\n\n/**\n * Returns the full icon map for the current library.\n * Falls back to Lucide if no provider is present.\n */\nfunction useIcons(): Record<IconName, IconComponent> {\n const ctx = useContext(IconContext);\n const lib = ctx?.iconLibrary ?? \"lucide\";\n return useMemo(() => iconMap[lib], [lib]);\n}\n\nfunction IconProvider({\n children,\n defaultLibrary = \"lucide\",\n}: {\n children: ReactNode;\n defaultLibrary?: IconLibrary;\n}) {\n const [iconLibrary, setIconLibraryState] = useState<IconLibrary>(defaultLibrary);\n\n const setIconLibrary = useCallback((next: IconLibrary) => {\n setIconLibraryState(next);\n }, []);\n\n // Global keyboard shortcut: I to cycle icon library\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"i\" && e.key !== \"I\") return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || (e.target as HTMLElement)?.isContentEditable)\n return;\n e.preventDefault();\n setIconLibraryState((prev) => {\n const idx = iconLibraryOrder.indexOf(prev);\n return iconLibraryOrder[(idx + 1) % iconLibraryOrder.length];\n });\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n return (\n <IconContext.Provider value={{ iconLibrary, setIconLibrary }}>{children}</IconContext.Provider>\n );\n}\n\nexport { IconProvider, useIcon, useIcons, useIconLibrary };\n","// Motion tokens. Each tier's value is the ENTER transition — a spring, with a\n// little bounce on the larger tiers. Its `.exit` is the matching EXIT transition\n// — a plain tween, no bounce, one tier quicker — so a dismissal reads as crisp\n// and final rather than replaying the entrance in reverse.\n//\n// transition={spring.fast} // enter\n// exit={{ opacity: 0, transition: spring.fast.exit }} // leave\n//\n// The bigger the thing that moves, the slower the spring. Never hand-write a\n// duration — always reach for a tier.\nexport const spring = {\n fast: {\n type: \"spring\" as const,\n duration: 0.08,\n bounce: 0,\n exit: { duration: 0.06 },\n },\n moderate: {\n type: \"spring\" as const,\n duration: 0.16,\n bounce: 0.08,\n exit: { duration: 0.12 },\n },\n slow: {\n type: \"spring\" as const,\n duration: 0.24,\n bounce: 0.12,\n exit: { duration: 0.16 },\n },\n} as const;\n","// Inter (variable) weight tokens for `fontVariationSettings`.\n//\n// Each weight is paired with an optical-size (`opsz`) value so that animating\n// between weights keeps the text's advance width nearly constant: a heavier\n// `wght` widens the text, and a tighter (higher) `opsz` pulls it back. The\n// opsz values below were measured against the 400/opsz-14 baseline and hold\n// the closed→bold width delta to within ~0.6px (≈±0.5%), centered on zero,\n// down from ~3px with no compensation. A single opsz value can't zero every\n// string (glyph mixes scale differently), so a sub-pixel residual remains.\n//\n// Setting `opsz` explicitly here overrides `font-optical-sizing: auto`, which\n// is intended — we want weight, not font-size, to drive optical size.\nexport const fontWeights = {\n normal: \"'wght' 400, 'opsz' 14\",\n medium: \"'wght' 450, 'opsz' 15\",\n semibold: \"'wght' 550, 'opsz' 20\",\n bold: \"'wght' 700, 'opsz' 25\",\n} as const;\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useCallback,\n useEffect,\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from \"react\";\n\nexport interface ItemRect {\n top: number;\n height: number;\n left: number;\n width: number;\n}\n\ninterface UseProximityHoverOptions {\n axis?: \"x\" | \"y\";\n}\n\ninterface UseProximityHoverReturn {\n activeIndex: number | null;\n setActiveIndex: Dispatch<SetStateAction<number | null>>;\n itemRects: ItemRect[];\n sessionRef: RefObject<number>;\n handlers: {\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n };\n registerItem: (index: number, element: HTMLElement | null) => void;\n measureItems: () => void;\n}\n\nexport function useProximityHover<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseProximityHoverOptions = {},\n): UseProximityHoverReturn {\n const { axis = \"y\" } = options;\n const itemsRef = useRef(new Map<number, HTMLElement>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [itemRects, setItemRects] = useState<ItemRect[]>([]);\n const itemRectsRef = useRef<ItemRect[]>([]);\n const sessionRef = useRef(0);\n const rafIdRef = useRef<number | null>(null);\n const remeasureRafIdRef = useRef<number | null>(null);\n\n const measureItems = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n const rects: ItemRect[] = [];\n itemsRef.current.forEach((element, index) => {\n // Use offset* instead of getBoundingClientRect so measurements are\n // unaffected by CSS transforms (e.g. scaleY animation on the parent\n // motion.div). offsetTop/offsetLeft are layout values relative to the\n // offsetParent (the scroll container), matching the coordinate space\n // used by `position: absolute` children.\n rects[index] = {\n top: element.offsetTop,\n height: element.offsetHeight,\n left: element.offsetLeft,\n width: element.offsetWidth,\n };\n });\n itemRectsRef.current = rects;\n setItemRects(rects);\n }, [containerRef]);\n\n const registerItem = useCallback(\n (index: number, element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n } else {\n itemsRef.current.delete(index);\n }\n // Coalesce rapid register/unregister calls (e.g. when an AnimatePresence\n // remounts a list of rows) into a single remeasure on the next frame,\n // so consumers don't have to manually call measureItems after the\n // container's children swap.\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n remeasureRafIdRef.current = requestAnimationFrame(() => {\n remeasureRafIdRef.current = null;\n measureItems();\n });\n },\n [measureItems],\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n const container = containerRef.current;\n if (!container) return;\n\n const containerRect = container.getBoundingClientRect();\n const mousePos = axis === \"x\" ? mouseX : mouseY;\n\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n let containingIndex: number | null = null;\n\n const rects = itemRectsRef.current;\n // Convert content-relative rects to viewport coords using live scroll\n const scrollOffset = axis === \"x\" ? container.scrollLeft : container.scrollTop;\n const borderOffset = axis === \"x\" ? container.clientLeft : container.clientTop;\n const containerEdge = axis === \"x\" ? containerRect.left : containerRect.top;\n // Item rects are layout values (offset*); the container's bounding rect\n // reflects any cumulative ancestor transform: scale. Compute the scale\n // factor so we can map layout coords into the same visual viewport\n // space the mouse cursor lives in.\n const layoutSize = axis === \"x\" ? container.offsetWidth : container.offsetHeight;\n const visualSize = axis === \"x\" ? containerRect.width : containerRect.height;\n const scale = layoutSize > 0 ? visualSize / layoutSize : 1;\n\n for (let index = 0; index < rects.length; index++) {\n const r = rects[index];\n if (!r) continue;\n\n const contentPos = axis === \"x\" ? r.left : r.top;\n const itemStart = containerEdge + (borderOffset + contentPos - scrollOffset) * scale;\n const itemSize = (axis === \"x\" ? r.width : r.height) * scale;\n const itemEnd = itemStart + itemSize;\n\n if (mousePos >= itemStart && mousePos <= itemEnd) {\n containingIndex = index;\n }\n\n const itemCenter = itemStart + itemSize / 2;\n const distance = Math.abs(mousePos - itemCenter);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n setActiveIndex(containingIndex ?? closestIndex);\n });\n },\n [axis, containerRef],\n );\n\n const handleMouseEnter = useCallback(() => {\n sessionRef.current += 1;\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n // Clean up rAF on unmount\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n };\n }, []);\n\n return {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n },\n registerItem,\n measureItems,\n };\n}\n\n/**\n * Hook for child items to register themselves with the proximity hover system.\n * Call in useEffect with the item's ref and index.\n */\nexport function useRegisterProximityItem(\n registerItem: (index: number, element: HTMLElement | null) => void,\n index: number,\n ref: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem, ref]);\n}\n","\"use client\";\n\nimport { createContext, useContext, useState, useEffect, useCallback, type ReactNode } from \"react\";\n\ntype ShapeVariant = \"pill\" | \"rounded\";\n\nconst shapeOrder: ShapeVariant[] = [\"rounded\", \"pill\"];\n\ninterface ShapeClasses {\n item: string;\n bg: string;\n focusRing: string;\n mergedBg: string;\n container: string;\n button: string;\n input: string;\n // Numeric counterparts of `bg` / `mergedBg`, in px. Needed where individual\n // corners are animated (e.g. the selected-background merge/split animation),\n // which requires per-corner numeric border-radii rather than a class.\n bgRadius: number;\n mergedRadius: number;\n}\n\nconst shapeMap: Record<ShapeVariant, ShapeClasses> = {\n pill: {\n item: \"rounded-[20px]\",\n bg: \"rounded-[20px]\",\n // +2px over `item` because the focus ring sits 2px outside the element\n // (top/left -2, width/height +4); this keeps the corners concentric so a\n // pill element gets a pill ring (matches the rounded-mode 8px→10px bump).\n focusRing: \"rounded-[22px]\",\n mergedBg: \"rounded-2xl\",\n container: \"rounded-3xl\",\n button: \"rounded-[20px]\",\n input: \"rounded-[20px]\",\n bgRadius: 20,\n mergedRadius: 16,\n },\n rounded: {\n item: \"rounded-lg\",\n bg: \"rounded-lg\",\n focusRing: \"rounded-[10px]\",\n mergedBg: \"rounded-lg\",\n container: \"rounded-xl\",\n button: \"rounded-lg\",\n input: \"rounded-lg\",\n bgRadius: 8,\n mergedRadius: 8,\n },\n};\n\ninterface ShapeContextValue {\n shape: ShapeVariant;\n setShape: (shape: ShapeVariant) => void;\n classes: ShapeClasses;\n}\n\nconst ShapeContext = createContext<ShapeContextValue | null>(null);\n\nfunction useShape(): ShapeClasses {\n const ctx = useContext(ShapeContext);\n if (!ctx) return shapeMap.pill;\n return ctx.classes;\n}\n\nfunction useShapeContext() {\n const ctx = useContext(ShapeContext);\n if (!ctx) throw new Error(\"useShapeContext must be used within a ShapeProvider\");\n return ctx;\n}\n\nfunction transitionShape(callback: () => void) {\n const root = document.documentElement;\n root.classList.add(\"transitioning\");\n void root.offsetHeight;\n callback();\n setTimeout(() => root.classList.remove(\"transitioning\"), 200);\n}\n\nfunction ShapeProvider({\n children,\n defaultShape = \"pill\",\n}: {\n children: ReactNode;\n defaultShape?: ShapeVariant;\n}) {\n const [shape, setShapeState] = useState<ShapeVariant>(defaultShape);\n\n const setShape = useCallback((next: ShapeVariant) => {\n transitionShape(() => setShapeState(next));\n }, []);\n\n // Global keyboard shortcut: R to cycle radius\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"r\" && e.key !== \"R\") return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || (e.target as HTMLElement)?.isContentEditable)\n return;\n e.preventDefault();\n transitionShape(() => {\n setShapeState((prev) => {\n const idx = shapeOrder.indexOf(prev);\n return shapeOrder[(idx + 1) % shapeOrder.length];\n });\n });\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n return (\n <ShapeContext.Provider value={{ shape, setShape, classes: shapeMap[shape] }}>\n {children}\n </ShapeContext.Provider>\n );\n}\n\nexport { ShapeProvider, useShape, useShapeContext, shapeMap };\nexport type { ShapeVariant, ShapeClasses };\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useEffect,\n useCallback,\n createContext,\n useContext,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cn } from \"../lib/utils\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { useShape } from \"../lib/shape-context\";\n\n// ─── Contexts ────────────────────────────────────────────────────────────────\n\ninterface ItemRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface AccordionGroupContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n registerFullItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n grouped: true;\n remeasure: () => void;\n openValues: Set<string>;\n openItemRects: Map<number, ItemRect>;\n toggleValue: (value: string) => void;\n}\n\nconst AccordionGroupContext = createContext<AccordionGroupContextValue | null>(null);\n\nfunction useAccordionGroup() {\n return useContext(AccordionGroupContext);\n}\n\ninterface AccordionItemContextValue {\n index?: number;\n value: string;\n isOpen: boolean;\n onToggle: () => void;\n triggerRef: React.MutableRefObject<HTMLDivElement | null>;\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionItemContext() {\n const ctx = useContext(AccordionItemContext);\n if (!ctx)\n throw new Error(\"AccordionTrigger/AccordionContent must be used within an AccordionItem\");\n return ctx;\n}\n\n// ─── AccordionGroup ──────────────────────────────────────────────────────────\n\ntype AccordionGroupSingleProps = {\n type?: \"single\";\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n collapsible?: boolean;\n};\n\ntype AccordionGroupMultipleProps = {\n type: \"multiple\";\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n};\n\ntype AccordionGroupProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode;\n} & (AccordionGroupSingleProps | AccordionGroupMultipleProps);\n\nconst AccordionGroup = forwardRef<HTMLDivElement, AccordionGroupProps>((props, ref) => {\n const { children, type = \"single\", className, ...rest } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const fullItemElementsRef = useRef<Map<number, HTMLElement>>(new Map());\n const [openItemRects, setOpenItemRects] = useState<Map<number, ItemRect>>(new Map());\n\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef);\n\n const registerFullItem = useCallback((index: number, element: HTMLElement | null) => {\n if (element) {\n fullItemElementsRef.current.set(index, element);\n } else {\n fullItemElementsRef.current.delete(index);\n }\n }, []);\n\n const measureFullItems = useCallback(() => {\n if (!containerRef.current) return;\n const next = new Map<number, ItemRect>();\n // Use offset* (layout coords) to match the proximity hook's items.\n // getBoundingClientRect would return visual coords already scaled by\n // any ancestor transform; once applied as CSS inside the same scaled\n // container, the overlay would scale a second time.\n fullItemElementsRef.current.forEach((el, idx) => {\n next.set(idx, {\n top: el.offsetTop,\n left: el.offsetLeft,\n width: el.offsetWidth,\n height: el.offsetHeight,\n });\n });\n setOpenItemRects(next);\n }, []);\n\n // Track open values for context\n const [internalSingleValue, setInternalSingleValue] = useState<string>(() => {\n if (type === \"single\") {\n const sp = props as AccordionGroupSingleProps;\n return sp.defaultValue ?? \"\";\n }\n return \"\";\n });\n const [internalMultipleValue, setInternalMultipleValue] = useState<string[]>(() => {\n if (type === \"multiple\") {\n const mp = props as AccordionGroupMultipleProps;\n return mp.defaultValue ?? [];\n }\n return [];\n });\n const singleOnValueChange = (props as AccordionGroupSingleProps).onValueChange;\n const multipleOnValueChange = (props as AccordionGroupMultipleProps).onValueChange;\n const controlledMultipleValue = (props as AccordionGroupMultipleProps).value;\n\n const openValues = new Set<string>(\n type === \"multiple\"\n ? ((props as AccordionGroupMultipleProps).value ?? internalMultipleValue)\n : (() => {\n const v = (props as AccordionGroupSingleProps).value ?? internalSingleValue;\n return v ? [v] : [];\n })(),\n );\n\n const handleSingleValueChange = useCallback(\n (value: string) => {\n const sp = props as AccordionGroupSingleProps;\n if (sp.onValueChange) sp.onValueChange(value);\n else setInternalSingleValue(value);\n },\n [singleOnValueChange],\n );\n\n const handleMultipleValueChange = useCallback(\n (value: string[]) => {\n const mp = props as AccordionGroupMultipleProps;\n if (mp.onValueChange) mp.onValueChange(value);\n else setInternalMultipleValue(value);\n },\n [multipleOnValueChange],\n );\n\n const toggleValue = useCallback(\n (val: string) => {\n if (type === \"multiple\") {\n const current = (props as AccordionGroupMultipleProps).value ?? internalMultipleValue;\n handleMultipleValueChange(current.filter((v) => v !== val));\n } else {\n handleSingleValueChange(\"\");\n }\n },\n [\n type,\n handleSingleValueChange,\n handleMultipleValueChange,\n internalMultipleValue,\n controlledMultipleValue,\n ],\n );\n\n useEffect(() => {\n measureItems();\n measureFullItems();\n }, [measureItems, measureFullItems, children]);\n\n // Remeasure synchronously when open values change so the first\n // paint already reflects shifted trigger positions.\n const openValuesKey = [...openValues].join(\",\");\n\n useEffect(() => {\n measureItems();\n measureFullItems();\n }, [measureItems, measureFullItems, openValuesKey]);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n // Dimming: reduce expanded BG opacity when hovering a non-expanded trigger\n const isHoveringNonOpen = activeIndex !== null && !openItemRects.has(activeIndex);\n const shape = useShape();\n\n // Strip non-HTML props before spreading\n const {\n value: _value,\n defaultValue: _defaultValue,\n onValueChange: _onValueChange,\n collapsible: _collapsible,\n type: _type,\n ...htmlProps\n } = rest as Record<string, unknown>;\n\n // Build Radix root props\n const radixProps =\n type === \"multiple\"\n ? {\n type: \"multiple\" as const,\n value: (props as AccordionGroupMultipleProps).value ?? internalMultipleValue,\n onValueChange: handleMultipleValueChange,\n }\n : {\n type: \"single\" as const,\n collapsible: (props as AccordionGroupSingleProps).collapsible ?? true,\n value: (props as AccordionGroupSingleProps).value ?? internalSingleValue,\n onValueChange: handleSingleValueChange,\n };\n\n return (\n <AccordionGroupContext.Provider\n value={{\n registerItem,\n registerFullItem,\n activeIndex,\n grouped: true,\n remeasure: () => {\n measureItems();\n measureFullItems();\n },\n openValues,\n openItemRects,\n toggleValue,\n }}\n >\n <AccordionPrimitive.Root {...radixProps} asChild>\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={(e) => {\n // Suppress proximity hover when cursor is over an expanded\n // content area (below the item's trigger). This keeps trigger\n // hover scoped to the trigger row only.\n const container = containerRef.current;\n if (container) {\n const cRect = container.getBoundingClientRect();\n const layoutH = container.offsetHeight;\n const visualH = cRect.height;\n const scale = layoutH > 0 ? visualH / layoutH : 1;\n const localY = (e.clientY - cRect.top) / scale + container.scrollTop;\n for (const [idx, full] of openItemRects) {\n const trigger = itemRects[idx];\n if (!trigger) continue;\n const contentTop = trigger.top + trigger.height;\n const contentBottom = full.top + full.height;\n if (localY >= contentTop && localY <= contentBottom) {\n setActiveIndex(null);\n return;\n }\n }\n }\n handlers.onMouseMove(e);\n }}\n onMouseLeave={handlers.onMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setActiveIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n setActiveIndex(null);\n }}\n className={cn(\"relative flex flex-col gap-0.5 w-72 max-w-full\", className)}\n {...(htmlProps as HTMLAttributes<HTMLDivElement>)}\n >\n {/* Expanded item backgrounds */}\n <AnimatePresence>\n {[...openItemRects.entries()].map(([idx, rect]) => (\n <motion.div\n key={`expanded-${idx}`}\n className={`absolute ${shape.bg} bg-accent/20 dark:bg-accent/12 pointer-events-none`}\n initial={false}\n animate={{\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n opacity: isHoveringNonOpen ? 0.7 : 1,\n }}\n exit={{ opacity: 0, transition: spring.moderate.exit }}\n transition={{\n top: { duration: 0 },\n left: { duration: 0 },\n width: { duration: 0 },\n height: { duration: 0 },\n opacity: { duration: 0.08 },\n }}\n />\n ))}\n </AnimatePresence>\n\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className={`absolute ${shape.bg} bg-hover pointer-events-none`}\n initial={{\n opacity: 0,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={`absolute ${shape.focusRing} pointer-events-none z-20 border border-[#6B97FF]`}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {children}\n </div>\n </AccordionPrimitive.Root>\n </AccordionGroupContext.Provider>\n );\n});\n\nAccordionGroup.displayName = \"AccordionGroup\";\n\n// ─── Accordion (Standalone) ──────────────────────────────────────────────────\n\ninterface AccordionProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n type?: \"single\" | \"multiple\";\n collapsible?: boolean;\n defaultValue?: string | string[];\n value?: string | string[];\n onValueChange?: ((value: string) => void) | ((value: string[]) => void);\n}\n\nconst Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n children,\n type = \"single\",\n collapsible = true,\n defaultValue,\n value,\n onValueChange,\n className,\n ...props\n },\n ref,\n ) => {\n // Track open values for AccordionItemContext\n const [internalSingleValue, setInternalSingleValue] = useState<string>(() => {\n if (type === \"single\") {\n return (defaultValue as string) ?? \"\";\n }\n return \"\";\n });\n const [internalMultipleValue, setInternalMultipleValue] = useState<string[]>(() => {\n if (type === \"multiple\") {\n return (defaultValue as string[]) ?? [];\n }\n return [];\n });\n\n const openValues = new Set<string>(\n type === \"multiple\"\n ? ((value as string[] | undefined) ?? internalMultipleValue)\n : (() => {\n const v = (value as string | undefined) ?? internalSingleValue;\n return v ? [v] : [];\n })(),\n );\n\n const handleSingleChange = useCallback(\n (v: string) => {\n if (onValueChange) (onValueChange as (v: string) => void)(v);\n else setInternalSingleValue(v);\n },\n [onValueChange],\n );\n\n const handleMultipleChange = useCallback(\n (v: string[]) => {\n if (onValueChange) (onValueChange as (v: string[]) => void)(v);\n else setInternalMultipleValue(v);\n },\n [onValueChange],\n );\n\n const standaloneToggle = useCallback(\n (val: string) => {\n if (type === \"multiple\") {\n const current = (value as string[] | undefined) ?? internalMultipleValue;\n handleMultipleChange(current.filter((v) => v !== val));\n } else {\n handleSingleChange(\"\");\n }\n },\n [type, value, internalMultipleValue, handleSingleChange, handleMultipleChange],\n );\n\n const radixProps =\n type === \"multiple\"\n ? {\n type: \"multiple\" as const,\n value: (value as string[] | undefined) ?? internalMultipleValue,\n onValueChange: handleMultipleChange,\n ...((defaultValue as string[] | undefined) !== undefined\n ? { defaultValue: defaultValue as string[] }\n : {}),\n }\n : {\n type: \"single\" as const,\n collapsible,\n value: (value as string | undefined) ?? internalSingleValue,\n onValueChange: handleSingleChange,\n ...((defaultValue as string | undefined) !== undefined\n ? { defaultValue: defaultValue as string }\n : {}),\n };\n\n return (\n <AccordionPrimitive.Root {...radixProps} asChild>\n <div\n ref={ref}\n className={cn(\"w-72 max-w-full flex flex-col gap-0.5\", className)}\n {...props}\n >\n <StandaloneOpenContext.Provider value={openValues}>\n <StandaloneToggleContext.Provider value={standaloneToggle}>\n {children}\n </StandaloneToggleContext.Provider>\n </StandaloneOpenContext.Provider>\n </div>\n </AccordionPrimitive.Root>\n );\n },\n);\n\nAccordion.displayName = \"Accordion\";\n\n// Standalone contexts to provide open values and toggle without AccordionGroup\nconst StandaloneOpenContext = createContext<Set<string>>(new Set());\nconst StandaloneToggleContext = createContext<(value: string) => void>(() => {});\n\n// ─── AccordionItem ───────────────────────────────────────────────────────────\n\ninterface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n index?: number;\n disabled?: boolean;\n children: ReactNode;\n}\n\nconst AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ value, index, disabled, children, className, ...props }, ref) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const groupCtx = useAccordionGroup();\n const standaloneOpen = useContext(StandaloneOpenContext);\n const standaloneToggle = useContext(StandaloneToggleContext);\n const shape = useShape();\n\n const isOpen = groupCtx?.grouped ? groupCtx.openValues.has(value) : standaloneOpen.has(value);\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const onToggle = useCallback(() => {\n if (groupCtx?.grouped) {\n groupCtx.toggleValue(value);\n } else {\n standaloneToggle(value);\n }\n }, [groupCtx, standaloneToggle, value]);\n\n // Register trigger element (not full item) for proximity hover\n useEffect(() => {\n if (groupCtx?.grouped && index !== undefined) {\n groupCtx.registerItem(index, triggerRef.current);\n return () => groupCtx.registerItem(index, null);\n }\n }, [index, groupCtx]);\n\n // Register full item element for expanded background measurement\n useEffect(() => {\n if (groupCtx?.grouped && index !== undefined) {\n if (isOpen) {\n groupCtx.registerFullItem(index, internalRef.current);\n } else {\n groupCtx.registerFullItem(index, null);\n }\n return () => groupCtx.registerFullItem(index, null);\n }\n }, [index, groupCtx, isOpen]);\n\n return (\n <AccordionItemContext.Provider\n value={\n index === undefined\n ? { value, isOpen, onToggle, triggerRef }\n : { index, value, isOpen, onToggle, triggerRef }\n }\n >\n <AccordionPrimitive.Item\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n value={value}\n {...(disabled !== undefined ? { disabled } : {})}\n data-proximity-index={index}\n className={cn(!groupCtx?.grouped && \"relative\", className)}\n {...props}\n >\n {/* Standalone expanded background */}\n {!groupCtx?.grouped && (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n className={`absolute inset-0 ${shape.bg} bg-accent/20 dark:bg-accent/12 pointer-events-none`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{ duration: 0.08 }}\n />\n )}\n </AnimatePresence>\n )}\n {children}\n </AccordionPrimitive.Item>\n </AccordionItemContext.Provider>\n );\n },\n);\n\nAccordionItem.displayName = \"AccordionItem\";\n\n// ─── AccordionTrigger ────────────────────────────────────────────────────────\n\ninterface AccordionTriggerProps extends HTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nconst AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ children, className, ...props }, ref) => {\n const ChevronRight = useIcon(\"chevron-right\");\n const groupCtx = useAccordionGroup();\n const { index, isOpen, triggerRef } = useAccordionItemContext();\n const shape = useShape();\n const [isHovered, setIsHovered] = useState(false);\n\n const isActive = groupCtx?.grouped ? groupCtx.activeIndex === index : isHovered;\n\n const triggerContent = (\n <AccordionPrimitive.Header asChild>\n <div>\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n `relative z-10 flex items-center gap-2.5 ${shape.item} px-3 py-2 w-full cursor-pointer outline-none select-none`,\n !groupCtx?.grouped &&\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF] focus-visible:ring-offset-0\",\n className,\n )}\n {...(props as React.ComponentProps<typeof AccordionPrimitive.Trigger>)}\n >\n {/* Label with dual-layer text */}\n <span className=\"inline-grid text-[13px] flex-1 text-left\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {\"\\u00a0\"}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isOpen || isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: isOpen ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {children}\n </span>\n </span>\n\n {/* Chevron — right when collapsed, rotates 90° down when expanded */}\n <motion.span\n className=\"shrink-0 inline-flex items-center justify-center\"\n animate={{ rotate: isOpen ? 90 : 0 }}\n transition={spring.fast}\n >\n <ChevronRight\n size={16}\n strokeWidth={isOpen || isActive ? 2 : 1.5}\n className={cn(\n \"transition-[color,stroke-width] duration-80\",\n isOpen || isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n />\n </motion.span>\n </AccordionPrimitive.Trigger>\n </div>\n </AccordionPrimitive.Header>\n );\n\n // In grouped mode, wrap in a div for proximity hover registration\n if (groupCtx?.grouped) {\n return <div ref={triggerRef}>{triggerContent}</div>;\n }\n\n // Standalone mode: local hover with animated BG\n return (\n <div\n className=\"relative\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <AnimatePresence>\n {isHovered && (\n <motion.div\n className={`absolute inset-0 ${shape.bg} bg-hover pointer-events-none`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{ duration: 0.08 }}\n />\n )}\n </AnimatePresence>\n {triggerContent}\n </div>\n );\n },\n);\n\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\n// ─── AccordionContent ────────────────────────────────────────────────────────\n\ninterface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, ...props }, ref) => {\n const groupCtx = useAccordionGroup();\n const { isOpen } = useAccordionItemContext();\n\n return (\n <AnimatePresence initial={false}>\n {isOpen && (\n <AccordionPrimitive.Content forceMount asChild {...props}>\n <motion.div\n ref={ref}\n className={cn(\"overflow-hidden\", className)}\n initial={{ height: 0 }}\n animate={{ height: \"auto\" }}\n exit={{ height: 0 }}\n // bounce: 0 — a critically damped spring on body height.\n // spring.moderate has bounce 0.15 which overshoots the\n // \"auto\" target by a few px; under an ancestor transform:\n // scale (e.g. /demo's 1.7x card), that overshoot becomes a\n // visible pop. Pure height has no aesthetic value in\n // bouncing, so a smooth approach reads better.\n transition={{ ...spring.moderate, bounce: 0 }}\n onUpdate={() => {\n groupCtx?.remeasure();\n }}\n onAnimationComplete={() => {\n groupCtx?.remeasure();\n }}\n >\n <div className=\"px-3 pb-3 pt-1 text-[13px] text-muted-foreground\">{children}</div>\n </motion.div>\n </AccordionPrimitive.Content>\n )}\n </AnimatePresence>\n );\n },\n);\n\nAccordionContent.displayName = \"AccordionContent\";\n\n// ─── Exports ─────────────────────────────────────────────────────────────────\n\nexport { Accordion, AccordionGroup, AccordionItem, AccordionTrigger, AccordionContent };\nexport default Accordion;\n","\"use client\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactElement,\n} from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { cn } from \"../lib/utils\";\nimport { useShape } from \"../lib/shape-context\";\n\nconst buttonVariants = cva(\n [\n \"group relative isolate inline-flex items-center justify-center outline-none cursor-pointer\",\n \"text-box-trim-both text-box-edge-cap-alphabetic\",\n \"transition-colors duration-80\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF]\",\n ],\n {\n variants: {\n variant: {\n default: \"text-background\",\n primary: \"text-background\",\n brand: \"text-background\",\n secondary: \"text-foreground\",\n outline: \"border border-border text-foreground\",\n tertiary: \"border border-border text-foreground\",\n destructive: \"text-destructive border border-destructive/30\",\n ghost: \"text-muted-foreground hover:text-foreground\",\n link: \"text-foreground underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 px-2.5 text-[11px] gap-1\",\n sm: \"h-7 px-3 text-[12px] gap-1\",\n default: \"h-8 px-4 text-[13px] gap-1.5\",\n md: \"h-8 px-4 text-[13px] gap-1.5\",\n lg: \"h-9 px-5 text-[14px] gap-1.5\",\n \"icon-xs\": \"h-7 w-7 p-0 [&_svg]:h-3 [&_svg]:w-3\",\n \"icon-sm\": \"h-8 w-8 p-0 [&_svg]:h-3.5 [&_svg]:w-3.5\",\n icon: \"h-9 w-9 p-0 [&_svg]:h-4 [&_svg]:w-4\",\n \"icon-lg\": \"h-10 w-10 p-0 [&_svg]:h-5 [&_svg]:w-5\",\n },\n iconLeft: { true: \"\" },\n iconRight: { true: \"\" },\n },\n compoundVariants: [\n { size: \"sm\", iconLeft: true, className: \"pl-[6px]\" },\n { size: \"md\", iconLeft: true, className: \"pl-[10px]\" },\n { size: \"lg\", iconLeft: true, className: \"pl-[14px]\" },\n { size: \"sm\", iconRight: true, className: \"pr-[6px]\" },\n { size: \"md\", iconRight: true, className: \"pr-[10px]\" },\n { size: \"lg\", iconRight: true, className: \"pr-[14px]\" },\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\ninterface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n leadingIcon?: IconComponent;\n trailingIcon?: IconComponent;\n /** Force the visual pressed/held state. Useful when the button drives an\n * external open piece of UI (a popover, dropdown, etc.) so it reads as\n * engaged while the menu is showing. */\n active?: boolean;\n}\n\nconst bgVariants: Record<string, string> = {\n default: \"bg-foreground group-hover:bg-foreground/90 group-active:bg-foreground/80\",\n primary: \"bg-foreground group-hover:bg-foreground/90 group-active:bg-foreground/80\",\n brand: \"bg-brand group-hover:bg-brand/90 group-active:bg-brand/80\",\n secondary: \"bg-accent group-hover:bg-accent/80 group-active:bg-accent\",\n outline: \"bg-transparent group-hover:bg-hover group-active:bg-active\",\n tertiary: \"bg-transparent group-hover:bg-hover group-active:bg-active\",\n destructive: \"bg-destructive/10 group-hover:bg-destructive/15 group-active:bg-destructive/20\",\n ghost: \"bg-transparent group-hover:bg-hover group-active:bg-active\",\n link: \"bg-transparent\",\n};\n\nconst activeBgVariants: Record<string, string> = {\n default: \"bg-foreground/80\",\n primary: \"bg-foreground/80\",\n brand: \"bg-brand/80\",\n secondary: \"bg-accent\",\n outline: \"bg-active\",\n tertiary: \"bg-active\",\n destructive: \"bg-destructive/20\",\n ghost: \"bg-active\",\n link: \"bg-transparent\",\n};\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n leadingIcon: LeadingIcon,\n trailingIcon: TrailingIcon,\n active = false,\n disabled,\n children,\n style,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const isIconOnly =\n size === \"icon\" || size === \"icon-xs\" || size === \"icon-sm\" || size === \"icon-lg\";\n const iconSize = size === \"xs\" || size === \"sm\" ? 14 : size === \"lg\" ? 20 : 16;\n const shape = useShape();\n const bgClass = active\n ? activeBgVariants[variant ?? \"primary\"]\n : bgVariants[variant ?? \"primary\"];\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<{ className?: string; style?: CSSProperties }>;\n return (cloneElement as any)(child, {\n ...props,\n \"data-slot\": \"button\",\n className: cn(\n buttonVariants({\n variant,\n size,\n iconLeft: !isIconOnly && !!LeadingIcon,\n iconRight: !isIconOnly && !!TrailingIcon,\n }),\n shape.button,\n child.props.className,\n className,\n ),\n style: { ...child.props.style, ...style },\n });\n }\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n className={cn(\n buttonVariants({\n variant,\n size,\n iconLeft: !isIconOnly && !!LeadingIcon,\n iconRight: !isIconOnly && !!TrailingIcon,\n }),\n shape.button,\n className,\n )}\n disabled={disabled || loading}\n style={style}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n \"absolute inset-0 rounded-[inherit] transition-[background-color,transform] duration-80 group-active:scale-[0.98]\",\n bgClass,\n )}\n />\n <span className=\"relative inline-flex items-center justify-center gap-[inherit]\">\n {loading ? (\n <>\n <span className=\"flex items-center justify-center gap-[inherit] opacity-0\">\n {LeadingIcon && !isIconOnly && <LeadingIcon size={iconSize} strokeWidth={2} />}\n {children}\n {TrailingIcon && !isIconOnly && <TrailingIcon size={iconSize} strokeWidth={2} />}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <svg className=\"h-8 w-8\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M 12 12 C 14 8.5 19 8.5 19 12 C 19 15.5 14 15.5 12 12 C 10 8.5 5 8.5 5 12 C 5 15.5 10 15.5 12 12 Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.125\"\n strokeLinecap=\"round\"\n pathLength=\"100\"\n style={{\n strokeDasharray: \"15 85\",\n animation:\n \"spinner-move 2s linear infinite, spinner-dash 4s ease-in-out infinite\",\n }}\n />\n </svg>\n </span>\n </>\n ) : isIconOnly ? (\n <span className=\"[&_svg]:stroke-[1.5] [&_svg]:transition-[stroke-width] [&_svg]:duration-80 group-hover:[&_svg]:stroke-[2]\">\n {children}\n </span>\n ) : (\n <>\n {LeadingIcon && (\n <LeadingIcon\n size={iconSize}\n strokeWidth={1.5}\n className=\"transition-[stroke-width] duration-80 group-hover:stroke-[2]\"\n />\n )}\n <span>{children}</span>\n {TrailingIcon && (\n <TrailingIcon\n size={iconSize}\n strokeWidth={1.5}\n className=\"transition-[stroke-width] duration-80 group-hover:stroke-[2]\"\n />\n )}\n </>\n )}\n </span>\n </Comp>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\nexport type { ButtonProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface ActionPanelAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"destructive\" | \"outline\" | \"ghost\";\n}\n\ninterface ActionPanelLink {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\ninterface ActionPanelProps {\n title: string;\n description?: string;\n action?: ActionPanelAction;\n actions?: ActionPanelAction[];\n link?: ActionPanelLink;\n variant?: \"default\" | \"muted\";\n layout?: \"stacked\" | \"inline\";\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction ActionPanel({\n title,\n description,\n action,\n actions,\n link,\n variant = \"default\",\n layout = \"stacked\",\n children,\n className,\n}: ActionPanelProps) {\n const allActions = actions ?? (action ? [action] : []);\n\n const renderActions = () => {\n if (allActions.length === 0 && !link) return null;\n return (\n <div className=\"flex items-center gap-2\">\n {link &&\n (link.href ? (\n <a\n href={link.href}\n className=\"inline-flex min-h-10 items-center gap-1 body font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label} <span aria-hidden>→</span>\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={link.onClick}\n className=\"inline-flex min-h-10 items-center gap-1 body font-medium text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label} <span aria-hidden>→</span>\n </button>\n ))}\n {allActions.map((a, i) =>\n a.href ? (\n <Button key={i} size=\"sm\" variant={a.variant ?? \"default\"} asChild>\n <a href={a.href}>{a.label}</a>\n </Button>\n ) : (\n <Button key={i} size=\"sm\" variant={a.variant ?? \"default\"} onClick={a.onClick}>\n {a.label}\n </Button>\n ),\n )}\n </div>\n );\n };\n\n return (\n <div\n className={cn(\n \"rounded-xl border px-5 py-5\",\n variant === \"muted\" ? \"border-border bg-muted\" : \"border-border bg-card shadow-natural\",\n layout === \"inline\" && \"flex items-center justify-between gap-6\",\n className,\n )}\n >\n <div className={cn(\"min-w-0\", layout === \"inline\" ? \"flex-1\" : \"\")}>\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && (\n <p\n className={cn(\n \"body text-muted-foreground text-pretty\",\n layout === \"stacked\" ? \"mt-1\" : \"\",\n )}\n >\n {description}\n </p>\n )}\n {children && layout === \"stacked\" && <div className=\"mt-4\">{children}</div>}\n </div>\n\n {layout === \"stacked\" ? (\n (allActions.length > 0 || link) && <div className=\"mt-4\">{renderActions()}</div>\n ) : (\n <div className=\"shrink-0 flex items-center gap-3\">\n {children}\n {renderActions()}\n </div>\n )}\n </div>\n );\n}\n\nActionPanel.displayName = \"ActionPanel\";\n\nexport { ActionPanel };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface FeedEvent {\n id?: string | number;\n content: React.ReactNode;\n date?: string;\n datetime?: string;\n icon?: React.ReactNode;\n iconBgClass?: string;\n}\n\ninterface ActivityFeedProps {\n events: FeedEvent[];\n className?: string;\n}\n\nfunction ActivityFeed({ events, className }: ActivityFeedProps) {\n return (\n <div className={cn(\"flow-root\", className)}>\n <ul role=\"list\" className=\"-mb-8\">\n {events.map((event, i) => {\n const isLast = i === events.length - 1;\n return (\n <li key={event.id ?? i}>\n <div className=\"relative pb-8\">\n {!isLast && (\n <span\n className=\"absolute top-4 left-4 -ml-px h-full w-0.5 bg-muted\"\n aria-hidden=\"true\"\n />\n )}\n <div className=\"relative flex gap-3\">\n {/* Icon */}\n <div>\n <span\n className={cn(\n \"flex size-8 items-center justify-center rounded-full ring-8 ring-background\",\n event.iconBgClass ?? \"bg-muted text-muted-foreground\",\n )}\n >\n {event.icon}\n </span>\n </div>\n\n {/* Content */}\n <div className=\"flex min-w-0 flex-1 items-baseline justify-between gap-4 pt-1\">\n <div className=\"body text-muted-foreground\">{event.content}</div>\n {event.date && (\n <time\n dateTime={event.datetime ?? event.date}\n className=\"caption whitespace-nowrap text-muted-foreground\"\n >\n {event.date}\n </time>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nActivityFeed.displayName = \"ActivityFeed\";\n\nexport { ActivityFeed };\nexport type { FeedEvent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AlertDialog } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { focusRingClasses, motionClasses, pressClasses } from \"../lib/interaction\";\nimport {\n desktopDialogContentClassName,\n dialogSheetMotionClassName,\n mobileDialogSheetContentClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst AlertDialogRoot = AlertDialog.Root;\nconst AlertDialogTrigger = AlertDialog.Trigger;\nconst AlertDialogPortal = AlertDialog.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/30 backdrop-blur-sm\",\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]:duration-100 data-[state=open]:duration-150\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = \"AlertDialogOverlay\";\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Content>\n>(({ className, children, ...props }, ref) => (\n <AlertDialog.Portal>\n <AlertDialogOverlay />\n <AlertDialog.Content\n ref={ref}\n className={cn(\n mobileDialogSheetContentClassName,\n desktopDialogContentClassName,\n \"border border-border shadow-elevated sm:max-w-md\",\n dialogSheetMotionClassName,\n className,\n )}\n {...props}\n >\n {children}\n </AlertDialog.Content>\n </AlertDialog.Portal>\n));\nAlertDialogContent.displayName = \"AlertDialogContent\";\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-5\", className)} {...props} />;\n}\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n \"[&>*]:w-full sm:[&>*]:w-auto\",\n className,\n )}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Title\n ref={ref}\n className={cn(\"body-lg font-semibold text-balance text-foreground\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = \"AlertDialogTitle\";\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Description\n ref={ref}\n className={cn(\"body text-pretty text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = \"AlertDialogDescription\";\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Action\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md px-4\",\n \"body font-medium whitespace-nowrap\",\n motionClasses,\n pressClasses,\n \"bg-brand-primary text-background hover:bg-brand-primary/90 active:bg-brand-primary/80\",\n focusRingClasses,\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogAction.displayName = \"AlertDialogAction\";\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialog.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialog.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialog.Cancel\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md px-4\",\n \"body font-medium whitespace-nowrap\",\n motionClasses,\n pressClasses,\n \"bg-card text-muted-foreground shadow-natural hover:bg-muted rounded-xl\",\n focusRingClasses,\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogCancel.displayName = \"AlertDialogCancel\";\n\nexport {\n AlertDialogRoot as AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\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\";\nimport { cn } from \"../lib/utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-xl px-4 py-3.5 body [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-3.5 [&>svg~*]:pl-6\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-muted-foreground [&>svg]:text-muted-foreground\",\n info: \"bg-brand-secondary/40 text-muted-foreground [&>svg]:text-muted-foreground\",\n success: \"bg-brand-secondary/15 text-muted-foreground [&>svg]:text-muted-foreground\",\n warning: \"bg-brand-secondary/70 text-muted-foreground [&>svg]:text-muted-foreground\",\n destructive: \"bg-destructive/10 text-destructive [&>svg]:text-destructive/70\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\ninterface AlertProps extends React.ComponentProps<\"div\">, VariantProps<typeof alertVariants> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n ),\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"mb-0.5 body font-semibold leading-tight text-balance\", className)}\n {...props}\n />\n ),\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"body text-pretty opacity-90\", className)} {...props} />\n ),\n);\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AspectRatio } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst AspectRatioRoot = React.forwardRef<\n React.ComponentRef<typeof AspectRatio.Root>,\n React.ComponentPropsWithoutRef<typeof AspectRatio.Root>\n>(({ className, ...props }, ref) => (\n <AspectRatio.Root\n ref={ref}\n className={cn(\"relative w-full overflow-hidden\", className)}\n {...props}\n />\n));\nAspectRatioRoot.displayName = \"AspectRatio\";\n\nexport { AspectRatioRoot as AspectRatio };\n","\"use client\";\n\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport type { ItemRect } from \"./use-proximity-hover\";\n\n// Run the layout effect on the client (where it must fire before paint, so a\n// merge/split shows on the first frame) and a no-op-safe useEffect on the server.\nconst useIsoLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// Edge spring for the selected-bg merge/split: moderate, no bounce so converging\n// edges meet exactly instead of overshooting. On a merge the inner corners trail\n// by `cornerDelay`, staying rounded until the halves meet.\nconst mergeSpring = { type: \"spring\" as const, duration: 0.16, bounce: 0 };\nconst cornerDelay = 0.07;\n// A boundary resolves after its motion finishes (merge → swap to one block;\n// split → drop), driven by a duration timer rather than onAnimationComplete —\n// framer skips that callback when an animation's target equals its current value\n// (which spam-toggling produces), which would otherwise strand a half. The\n// buffer biases late, by which point the halves have met/parted, so it's unseen.\nconst convergeMs = (mergeSpring.duration + cornerDelay) * 1000 + 80;\nconst splitMs = mergeSpring.duration * 1000 + 80;\n\n// A selected-background block for one render. A run is normally one block; mid\n// merge/split it is drawn as two abutting halves with sharp inner corners.\ntype Rect = { top: number; left: number; width: number; height: number };\nexport interface SelBlock extends Rect {\n key: string;\n radii: [number, number, number, number]; // tl, tr, br, bl\n instant: boolean; // skip the spring (the zero-shift swap, the split snap-in)\n exitInstant: boolean; // drop without the fade (absorbed half at the swap)\n delayCorners: boolean; // trail the corner straightening (merge converge)\n cornerDelay?: number; // optional per-block delay override\n opacity?: number; // override the hover-derived opacity (commit ghost = 0)\n // State a fresh block animates *from* on mount, so it springs into place\n // instead of snapping when continuity is lost (fast toggling) or the block is\n // inherently new (a split's lower half). Continuous blocks ignore it.\n enterFrom?: { top: number; height: number; radii: [number, number, number, number] };\n}\n\n// A contiguous run of selected/checked rows, with a stable id so framer-motion\n// can morph it across renders rather than exit+re-enter.\nexport type Run = { start: number; end: number; id: number };\n\n// One in-flight merge or split; geometry is recomputed from the live runs each\n// render so rapid toggles redirect instead of freezing.\ninterface Boundary {\n tid: number;\n kind: \"merge\" | \"split\";\n survivorId: number; // persisting run (merged run / split's upper run)\n otherId: number; // merge: absorbed run; split: new lower run\n gapIndex: number; // bridging/deselected row — where the halves meet\n phase: \"converge\" | \"commit\" | \"splitIn\" | \"diverge\";\n}\n\n// Two runs within `outer`, ordered, separated by exactly one row (a single-row\n// bridge — the only shape a click can merge or split).\nfunction bridgePair(outer: Run, runs: Run[]) {\n const inside = runs\n .filter((r) => r.start >= outer.start && r.end <= outer.end)\n .sort((a, b) => a.start - b.start);\n if (inside.length !== 2) return null;\n const [up, lo] = inside;\n return lo.start === up.end + 2 ? { up, lo, gap: up.end + 1 } : null;\n}\n\n// ── Merge / split boundary animation ─────────────────────────────\n// When one unselected row bridges two selected runs, their inner edges glide to\n// the bridging row's midpoint (facing corners straightening to sharp), then swap\n// to one block with no visible motion — instead of the surviving block\n// spring-growing over the whole union. Deselecting a middle row plays the\n// inverse: snap into two abutting halves, then glide apart.\n//\n// Given the contiguous selection `runs` (with stable ids), the measured\n// `itemRects`, and the corner radius `R` to round to, this returns the list of\n// background blocks to paint — one per run, or two abutting halves for any run\n// currently mid merge/split. Render them with <SelectionBackgrounds>.\nexport function useMergeSplitBlocks(runs: Run[], itemRects: ItemRect[], R: number): SelBlock[] {\n const [boundaries, setBoundaries] = useState<Boundary[]>([]);\n const prevRunsRef = useRef<Run[]>([]);\n const tidRef = useRef(0);\n const timersRef = useRef(new Map<number, ReturnType<typeof setTimeout>>());\n const runsSig = runs.map((g) => `${g.id}:${g.start}-${g.end}`).join(\"|\");\n\n // Detect merges/splits before paint (so the first frame already shows the\n // halves) and drop any boundary the latest selection invalidated (e.g. the\n // bridge row was toggled again mid-flight).\n useIsoLayoutEffect(() => {\n const prev = prevRunsRef.current;\n const cur = runs;\n const found: Boundary[] = [];\n for (const c of cur) {\n const p = bridgePair(c, prev); // two prev runs collapsed into one\n if (p && (c.id === p.up.id || c.id === p.lo.id))\n found.push({\n tid: ++tidRef.current,\n kind: \"merge\",\n survivorId: c.id,\n otherId: c.id === p.up.id ? p.lo.id : p.up.id,\n gapIndex: p.gap,\n phase: \"converge\",\n });\n }\n for (const p of prev) {\n const c = bridgePair(p, cur); // one prev run split into two\n if (c)\n found.push({\n tid: ++tidRef.current,\n kind: \"split\",\n survivorId: c.up.id,\n otherId: c.lo.id,\n gapIndex: c.gap,\n phase: \"splitIn\",\n });\n }\n prevRunsRef.current = cur.map((r) => ({ ...r }));\n // Resolve each new boundary after its motion window (merge → swap to one\n // block; split → drop), so an interrupted animation can't strand a half.\n for (const b of found) {\n timersRef.current.set(\n b.tid,\n setTimeout(\n () => {\n timersRef.current.delete(b.tid);\n setBoundaries((bs) =>\n bs.some((x) => x.tid === b.tid)\n ? bs.flatMap((x) =>\n x.tid !== b.tid\n ? [x]\n : x.kind === \"merge\"\n ? [{ ...x, phase: \"commit\" as const }]\n : [],\n )\n : bs,\n );\n },\n b.kind === \"merge\" ? convergeMs : splitMs,\n ),\n );\n }\n setBoundaries((active) => [\n ...active.filter((b) =>\n b.kind === \"merge\"\n ? cur.some((c) => c.id === b.survivorId && b.gapIndex > c.start && b.gapIndex < c.end)\n : cur.some((c) => c.id === b.survivorId && c.end === b.gapIndex - 1) &&\n cur.some((c) => c.id === b.otherId && c.start === b.gapIndex + 1),\n ),\n ...found,\n ]);\n }, [runsSig]);\n\n // Clear any pending timers on unmount.\n useEffect(() => {\n const timers = timersRef.current;\n return () => timers.forEach(clearTimeout);\n }, []);\n\n // Follow-up render: a fresh split holds its abutting frame once then\n // diverges; a committed merge is dropped.\n useEffect(() => {\n if (!boundaries.some((b) => b.phase === \"splitIn\" || b.phase === \"commit\")) return;\n setBoundaries((bs) =>\n bs.flatMap((b) =>\n b.phase === \"commit\" ? [] : [{ ...b, phase: b.phase === \"splitIn\" ? \"diverge\" : b.phase }],\n ),\n );\n }, [boundaries]);\n\n // Build the blocks to paint: one per run, overridden into abutting halves for\n // any run in an in-flight boundary.\n const rectOf = (start: number, end: number): Rect | null => {\n const s = itemRects[start];\n const e = itemRects[end];\n if (!s || !e) return null;\n return {\n top: s.top,\n left: Math.min(s.left, e.left),\n width: Math.max(s.width, e.width),\n height: e.top + e.height - s.top,\n };\n };\n const blocks: SelBlock[] = [];\n for (const run of runs) {\n const r = rectOf(run.start, run.end);\n if (r)\n blocks.push({\n key: `sel-${run.id}`,\n ...r,\n radii: [R, R, R, R],\n instant: false,\n exitInstant: false,\n delayCorners: false,\n });\n }\n const byId = new Map(blocks.map((b) => [b.key, b]));\n for (const b of boundaries) {\n const gap = itemRects[b.gapIndex];\n const sv = byId.get(`sel-${b.survivorId}`);\n if (!gap || !sv) continue;\n const midY = gap.top + gap.height / 2;\n if (b.kind === \"merge\") {\n if (b.phase === \"commit\") {\n // Zero-shift swap: survivor jumps to the full union (already covered by\n // its top half + the absorbed bottom half). The absorbed half is held\n // one render at opacity 0 so removing it next render can't flash a\n // one-frame overlap with the now-full survivor.\n sv.instant = true;\n blocks.push({\n key: `sel-${b.otherId}`,\n top: midY,\n left: sv.left,\n width: sv.width,\n height: sv.top + sv.height - midY,\n radii: [0, 0, R, R],\n instant: true,\n exitInstant: true,\n delayCorners: false,\n opacity: 0,\n });\n continue;\n }\n // converge: survivor → top half, absorbed run → bottom-half ghost, inner\n // corners straightening to sharp.\n // Slightly trail lower merges while keeping a baseline and small cap.\n const mergeCornerDelay = Math.min(\n cornerDelay + 0.03,\n Math.max(cornerDelay, cornerDelay + (midY / Math.max(gap.height, 1)) * 0.002),\n );\n const bottom = sv.top + sv.height;\n sv.height = midY - sv.top;\n sv.radii = [R, R, 0, 0];\n sv.delayCorners = true;\n sv.cornerDelay = mergeCornerDelay;\n blocks.push({\n key: `sel-${b.otherId}`,\n top: midY,\n left: sv.left,\n width: sv.width,\n height: bottom - midY,\n radii: [0, 0, R, R],\n // Mount at full corners so a fresh ghost still animates the\n // straightening with the same delay as the survivor.\n enterFrom: { top: midY, height: bottom - midY, radii: [R, R, R, R] },\n instant: false,\n exitInstant: true,\n delayCorners: true,\n cornerDelay: mergeCornerDelay,\n });\n } else if (b.phase === \"splitIn\") {\n const lo = byId.get(`sel-${b.otherId}`);\n if (!lo) continue;\n // Pin both halves at the seam (identical to the single block); the\n // diverge render then springs them to their real rects.\n const bottom = lo.top + lo.height;\n sv.height = midY - sv.top;\n sv.radii = [R, R, 0, 0];\n sv.instant = true;\n lo.top = midY;\n lo.height = bottom - midY;\n lo.radii = [0, 0, R, R];\n lo.instant = true;\n lo.enterFrom = { top: midY, height: bottom - midY, radii: [0, 0, R, R] };\n }\n // diverge: nothing to override — the steady blocks spring to their real\n // rects from the seam; the timer drops the boundary.\n }\n\n // Split safety net, pinned synchronously. The split boundary above is created\n // in a layout effect that runs *after* this render, so on the very frame a\n // split first appears its fresh lower half would mount at its final rect and\n // snap. Detecting the split here (previous runs vs current) and pinning both\n // halves at the seam guarantees the lower mounts on the seam regardless of\n // render/paint timing (the cause of the rapid-toggle snap).\n for (const p of prevRunsRef.current) {\n const c = bridgePair(p, runs);\n const gap = c && itemRects[c.gap];\n if (!c || !gap) continue;\n const midY = gap.top + gap.height / 2;\n const up = byId.get(`sel-${c.up.id}`);\n const lo = byId.get(`sel-${c.lo.id}`);\n if (!up || !lo) continue;\n const bottom = lo.top + lo.height;\n up.height = midY - up.top;\n up.radii = [R, R, 0, 0];\n up.instant = true;\n lo.top = midY;\n lo.height = bottom - midY;\n lo.radii = [0, 0, R, R];\n lo.instant = true;\n lo.enterFrom = { top: midY, height: bottom - midY, radii: [0, 0, R, R] };\n }\n\n return blocks;\n}\n\n// Renders the selected-background blocks produced by useMergeSplitBlocks — one\n// per run, or two abutting halves mid merge/split. `dimmed` drops the opacity to\n// 0.8 (when the user is hovering a non-selected row) to match the standalone\n// hover indicator; a block's own `opacity` override (e.g. the commit ghost)\n// always wins. Corners are driven numerically so merge/split can straighten and\n// re-round individual corners.\nexport function SelectionBackgrounds({ blocks, dimmed }: { blocks: SelBlock[]; dimmed: boolean }) {\n return (\n <AnimatePresence>\n {blocks.map((b) => {\n const corner = b.delayCorners\n ? { ...mergeSpring, delay: b.cornerDelay ?? cornerDelay }\n : mergeSpring;\n const opacity = b.opacity ?? (dimmed ? 0.8 : 1);\n return (\n <motion.div\n key={b.key}\n aria-hidden\n className=\"absolute bg-active pointer-events-none\"\n initial={\n b.enterFrom\n ? {\n opacity,\n top: b.enterFrom.top,\n left: b.left,\n width: b.width,\n height: b.enterFrom.height,\n borderTopLeftRadius: b.enterFrom.radii[0],\n borderTopRightRadius: b.enterFrom.radii[1],\n borderBottomRightRadius: b.enterFrom.radii[2],\n borderBottomLeftRadius: b.enterFrom.radii[3],\n }\n : false\n }\n animate={{\n top: b.top,\n left: b.left,\n width: b.width,\n height: b.height,\n borderTopLeftRadius: b.radii[0],\n borderTopRightRadius: b.radii[1],\n borderBottomRightRadius: b.radii[2],\n borderBottomLeftRadius: b.radii[3],\n opacity,\n }}\n exit={{ opacity: 0, transition: { duration: b.exitInstant ? 0 : 0.12 } }}\n transition={\n b.instant\n ? { duration: 0 }\n : {\n ...mergeSpring,\n borderTopLeftRadius: corner,\n borderTopRightRadius: corner,\n borderBottomRightRadius: corner,\n borderBottomLeftRadius: corner,\n opacity: { duration: 0.08 },\n }\n }\n />\n );\n })}\n </AnimatePresence>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { useMergeSplitBlocks, SelectionBackgrounds } from \"../hooks/use-merge-split\";\nimport { Button } from \"./button\";\n\nexport interface AskUserOption {\n id?: string;\n title: string;\n description?: string;\n}\n\nexport interface AskUserQuestion {\n id?: string;\n title: string;\n options: AskUserOption[];\n multiSelect?: boolean;\n allowOther?: boolean;\n otherPlaceholder?: string;\n skippable?: boolean;\n nextLabel?: string;\n /** Visual layout for each option row.\n * - \"inline\" (default): title and description on one line.\n * - \"stacked\": title above, description below — useful when descriptions\n * are long enough to wrap. */\n layout?: \"inline\" | \"stacked\";\n /** Which side of the row the numbered chip sits on.\n * - \"right\" (default): chip on the right; the single-select submit\n * arrow overlays it on hover/focus.\n * - \"left\": chip on the left, before the body. The submit arrow\n * still appears on the right edge of the row, so the action\n * affordance stays where the eye expects it.\n * Works with every other option (single/multi-select, allowOther,\n * inline/stacked layout). */\n chipPosition?: \"left\" | \"right\";\n}\n\nexport interface AskUserAnswer {\n questionId: string;\n selectedIds: string[];\n otherText?: string;\n skipped?: boolean;\n}\n\nexport interface AskUserQuestionsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n questions: AskUserQuestion[];\n currentIndex?: number;\n defaultCurrentIndex?: number;\n onCurrentIndexChange?: (index: number) => void;\n answers?: Record<string, AskUserAnswer>;\n defaultAnswers?: Record<string, AskUserAnswer>;\n onAnswersChange?: (answers: Record<string, AskUserAnswer>) => void;\n onComplete?: (answers: Record<string, AskUserAnswer>) => void;\n onSkip?: (questionId: string, currentIndex: number) => void;\n skipLabel?: string;\n}\n\nfunction questionKey(q: AskUserQuestion, i: number) {\n return q.id ?? `q-${i}`;\n}\n\nfunction optionKey(o: AskUserOption, i: number) {\n return o.id ?? `o-${i}`;\n}\n\nconst AskUserQuestions = forwardRef<HTMLDivElement, AskUserQuestionsProps>(\n function AskUserQuestions(\n {\n questions,\n currentIndex: controlledIndex,\n defaultCurrentIndex = 0,\n onCurrentIndexChange,\n answers: controlledAnswers,\n defaultAnswers,\n onAnswersChange,\n onComplete,\n onSkip,\n skipLabel = \"Skip\",\n className,\n ...rest\n },\n ref,\n ) {\n // ── Controlled / uncontrolled state ──────────────────────────\n const [internalIndex, setInternalIndex] = useState(defaultCurrentIndex);\n const isIndexControlled = controlledIndex !== undefined;\n const index = isIndexControlled ? (controlledIndex as number) : internalIndex;\n const setIndex = useCallback(\n (next: number) => {\n if (!isIndexControlled) setInternalIndex(next);\n onCurrentIndexChange?.(next);\n },\n [isIndexControlled, onCurrentIndexChange],\n );\n\n const [internalAnswers, setInternalAnswers] = useState<Record<string, AskUserAnswer>>(\n defaultAnswers ?? {},\n );\n const isAnswersControlled = controlledAnswers !== undefined;\n const answers = isAnswersControlled\n ? (controlledAnswers as Record<string, AskUserAnswer>)\n : internalAnswers;\n\n const answersRef = useRef(answers);\n useEffect(() => {\n answersRef.current = answers;\n }, [answers]);\n\n const writeAnswers = useCallback(\n (updater: (prev: Record<string, AskUserAnswer>) => Record<string, AskUserAnswer>) => {\n const next = updater(answersRef.current);\n answersRef.current = next;\n if (!isAnswersControlled) setInternalAnswers(next);\n onAnswersChange?.(next);\n return next;\n },\n [isAnswersControlled, onAnswersChange],\n );\n\n const shape = useShape();\n const ArrowLeft = useIcon(\"arrow-left\");\n const ArrowRight = useIcon(\"arrow-right\");\n\n // The footer ← / → icons hint at the ArrowLeft/ArrowRight keys, which\n // mobile has no equivalent for, so render them desktop-only. (The inline\n // submit arrows on option rows stay — those are tap affordances, not\n // keyboard hints.)\n const ArrowLeftKey = useMemo(\n () =>\n function ArrowLeftKey(p: { size?: number; strokeWidth?: number; className?: string }) {\n return <ArrowLeft {...p} className={cn(p.className, \"hidden sm:block\")} />;\n },\n [ArrowLeft],\n );\n const ArrowRightKey = useMemo(\n () =>\n function ArrowRightKey(p: { size?: number; strokeWidth?: number; className?: string }) {\n return <ArrowRight {...p} className={cn(p.className, \"hidden sm:block\")} />;\n },\n [ArrowRight],\n );\n\n // Detect the platform so the Continue shortcut hint shows the right\n // modifier: ⌘ on macOS, ⌃ (Control) elsewhere. Resolved after mount to\n // avoid a hydration mismatch (the server can't know the platform).\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n const nav = navigator as Navigator & {\n userAgentData?: { platform?: string };\n };\n const platform = nav.userAgentData?.platform || nav.platform || \"\";\n setIsMac(/mac/i.test(platform));\n }, []);\n\n const reactId = useId();\n const total = questions.length;\n const safeIndex = Math.max(0, Math.min(index, Math.max(0, total - 1)));\n const question = questions[safeIndex];\n const qId = question ? questionKey(question, safeIndex) : \"\";\n const currentAnswer = answers[qId];\n\n const isMulti = !!question?.multiSelect;\n const isSkippable = question?.skippable !== false;\n const allowOther = !!question?.allowOther;\n const selectedIds = useMemo(() => currentAnswer?.selectedIds ?? [], [currentAnswer]);\n const otherText = currentAnswer?.otherText ?? \"\";\n\n const options = question?.options ?? [];\n const otherIndex = allowOther ? options.length : -1;\n const rowCount = options.length + (allowOther ? 1 : 0);\n\n // ── Refs & proximity hover ───────────────────────────────────\n const rowsContainerRef = useRef<HTMLDivElement>(null);\n // The Other field is a multi-line textarea — it auto-resizes to fit\n // wrapped content and lets users press Enter for a newline.\n const otherInputRef = useRef<HTMLTextAreaElement>(null);\n // Stable IDs for contiguous-selection runs (see selectedGroups below).\n const groupIdCounterRef = useRef(0);\n const prevGroupMapRef = useRef(new Map<number, number>());\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(rowsContainerRef);\n\n // Remeasure on row count change, question change, shape change\n useEffect(() => {\n measureItems();\n }, [measureItems, qId, rowCount, shape]);\n\n // ── Other-row textarea auto-resize ──────────────────────────\n // The Other field is a textarea so users can write a multi-line answer.\n // Browsers don't auto-fit textarea height to content, so we set it\n // manually: reset to 0 (so the field can shrink when lines are deleted),\n // then expand to scrollHeight. Remeasure the proximity rows after — the\n // hover, selected and focus indicators absolutely-position against\n // itemRects, so they need fresh rects when the row's height changes.\n //\n // We also track whether the textarea is currently displaying more than\n // one line (either via explicit \\n or text that wraps). Only then do\n // we switch the Other row to `topAlign`; in the 1-line state the row\n // stays `items-center` so a single line sits at the row's optical\n // centre, matching the surrounding option rows.\n const [isOtherMultiline, setIsOtherMultiline] = useState(false);\n // Reset the multi-line flag when the question changes so the new\n // question's first paint of an empty Other row doesn't inherit a\n // stale `true` from the previous question's multi-line draft (which\n // would briefly apply `items-start` + the -5px chip nudge on an\n // empty single-line row before the resize effect below corrects it).\n useEffect(() => {\n setIsOtherMultiline(false);\n }, [qId]);\n useEffect(() => {\n const el = otherInputRef.current;\n if (!el) return;\n el.style.height = \"0px\";\n el.style.height = `${el.scrollHeight}px`;\n // Threshold against the textarea's *measured* line-height, not a\n // hard-coded 22px — so the flag stays correct at high browser\n // font-size / zoom settings where line-height grows past 22 even\n // for a single line. 1.5× line-height is a generous fudge below\n // a true second wrapped line (2× line-height) but well above any\n // single-line rounding artefact.\n const lineHeight = parseFloat(window.getComputedStyle(el).lineHeight) || 18;\n setIsOtherMultiline(el.scrollHeight > lineHeight * 1.5);\n measureItems();\n }, [otherText, measureItems, qId]);\n\n // ── Animated height ──────────────────────────────────────────\n // Track the natural height of the Q/A content and animate the wrapper's\n // REAL height to it. Animating the actual height (not a layout transform)\n // means the card border and the footer below reflow frame-by-frame, so the\n // height morph and the footer move together. A ResizeObserver keeps the\n // target in sync across question swaps, shape changes, and text wrapping.\n const contentMeasureRef = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number | \"auto\">(\"auto\");\n useEffect(() => {\n const el = contentMeasureRef.current;\n if (!el) return;\n const update = () => setContentHeight(el.offsetHeight);\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n // Reset transient state when question changes\n useEffect(() => {\n setActiveIndex(null);\n setFocusedIndex(null);\n }, [safeIndex, setActiveIndex]);\n\n // ── Keyboard focus restoration across question changes ───────\n // The question content remounts on qId, which destroys the focused row and\n // drops focus to <body>. If we navigated *from within* the rows (i.e. the\n // user was driving with the keyboard), refocus the new question's first row\n // so focus-within is kept and arrows keep routing here instead of falling\n // through to page-level navigation.\n const restoreFocusRef = useRef(false);\n const markFocusRestore = useCallback(() => {\n if (rowsContainerRef.current?.contains(document.activeElement)) {\n restoreFocusRef.current = true;\n }\n }, []);\n useEffect(() => {\n if (!restoreFocusRef.current) return;\n restoreFocusRef.current = false;\n const firstRow = rowsContainerRef.current?.querySelector(\n '[data-proximity-index=\"0\"]',\n ) as HTMLElement | null;\n firstRow?.focus();\n }, [safeIndex]);\n\n // ── Answer actions ───────────────────────────────────────────\n const goNext = useCallback(\n (snapshot: Record<string, AskUserAnswer>) => {\n if (safeIndex >= total - 1) {\n onComplete?.(snapshot);\n } else {\n markFocusRestore();\n setIndex(safeIndex + 1);\n }\n },\n [safeIndex, total, onComplete, setIndex, markFocusRestore],\n );\n\n const handleSingleSelect = useCallback(\n (optId: string) => {\n if (!question) return;\n const text = answers[qId]?.otherText;\n const snapshot = writeAnswers((prev) => ({\n ...prev,\n [qId]: {\n questionId: qId,\n selectedIds: [optId],\n skipped: false,\n ...(text ? { otherText: text } : {}),\n },\n }));\n goNext(snapshot);\n },\n [question, qId, answers, writeAnswers, goNext],\n );\n\n const handleMultiToggle = useCallback(\n (optId: string) => {\n if (!question) return;\n writeAnswers((prev) => {\n const existing = prev[qId];\n const set = new Set(existing?.selectedIds ?? []);\n if (set.has(optId)) set.delete(optId);\n else set.add(optId);\n return {\n ...prev,\n [qId]: {\n questionId: qId,\n selectedIds: Array.from(set),\n skipped: false,\n ...(existing?.otherText ? { otherText: existing.otherText } : {}),\n },\n };\n });\n },\n [question, qId, writeAnswers],\n );\n\n const handleOtherChange = useCallback(\n (text: string) => {\n if (!question) return;\n writeAnswers((prev) => ({\n ...prev,\n [qId]: {\n questionId: qId,\n selectedIds: prev[qId]?.selectedIds ?? [],\n otherText: text,\n skipped: false,\n },\n }));\n },\n [question, qId, writeAnswers],\n );\n\n const handleOtherSubmit = useCallback(() => {\n if (!question) return;\n const text = (answers[qId]?.otherText ?? \"\").trim();\n if (!text) return;\n const snapshot = writeAnswers((prev) => ({\n ...prev,\n [qId]: {\n questionId: qId,\n selectedIds: prev[qId]?.selectedIds ?? [],\n otherText: text,\n skipped: false,\n },\n }));\n goNext(snapshot);\n }, [question, qId, answers, writeAnswers, goNext]);\n\n const handleSkip = useCallback(() => {\n if (!question) return;\n const snapshot = writeAnswers((prev) => ({\n ...prev,\n [qId]: {\n questionId: qId,\n selectedIds: prev[qId]?.selectedIds ?? [],\n skipped: true,\n ...(prev[qId]?.otherText ? { otherText: prev[qId].otherText } : {}),\n },\n }));\n onSkip?.(qId, safeIndex);\n goNext(snapshot);\n }, [question, qId, writeAnswers, onSkip, safeIndex, goNext]);\n\n const handleMultiNext = useCallback(() => {\n goNext(answers);\n }, [goNext, answers]);\n\n const handleBack = useCallback(() => {\n if (safeIndex > 0) {\n markFocusRestore();\n setIndex(safeIndex - 1);\n }\n }, [safeIndex, setIndex, markFocusRestore]);\n\n // ── Keyboard shortcuts: 1-9 ──────────────────────────────────\n useEffect(() => {\n if (!question) return;\n const handler = (e: KeyboardEvent) => {\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const tag = target.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || target.isContentEditable) return;\n const code = e.key;\n if (code < \"1\" || code > \"9\") return;\n const idx = parseInt(code, 10) - 1;\n if (idx >= 0 && idx < options.length) {\n e.preventDefault();\n const oid = optionKey(options[idx], idx);\n if (isMulti) handleMultiToggle(oid);\n else handleSingleSelect(oid);\n } else if (idx === options.length && allowOther) {\n e.preventDefault();\n otherInputRef.current?.focus();\n }\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [question, options, isMulti, allowOther, handleSingleSelect, handleMultiToggle]);\n\n // ── Keyboard navigation ──────────────────────────────────────\n // Up/Down move the highlight between rows using the SAME indicator as\n // mouse hover (activeIndex → bg-hover), so keyboard and pointer focus look\n // identical. Left = Back, Right = Skip. We stopPropagation on the arrows we\n // handle so the doc page's ←/→ page-change nav (a window listener) doesn't\n // also fire — important for multi-select, whose container is role=\"group\"\n // (not \"radiogroup\") and so isn't auto-skipped by that handler.\n const focusRow = (idx: number) => {\n const el = rowsContainerRef.current?.querySelector(\n `[data-proximity-index=\"${idx}\"]`,\n ) as HTMLElement | null;\n el?.focus();\n };\n\n const moveActive = useCallback(\n (next: number) => {\n setActiveIndex(next);\n // The Other row is a text field — focus the input directly so typing\n // works; everything else focuses the row for Enter/Space selection.\n if (allowOther && next === otherIndex) otherInputRef.current?.focus();\n else focusRow(next);\n },\n [allowOther, otherIndex, setActiveIndex],\n );\n\n const handleNavKey = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n const isTextInput =\n target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable;\n\n // Inside the Other text field, ←/→ and Home/End move the caret natively.\n // ↑/↓ are dual-purpose in the textarea: when the caret has more lines\n // to move to in that direction (there's a \\n before/after it), let the\n // browser handle native caret movement; only steal the keystroke to\n // navigate to an adjacent option row when the caret is already at the\n // first / last line — otherwise the user can't edit a multi-line draft\n // without focus jumping out of the field.\n if (isTextInput && e.key !== \"ArrowDown\" && e.key !== \"ArrowUp\") return;\n if (\n isTextInput &&\n (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") &&\n target.tagName === \"TEXTAREA\"\n ) {\n // Position-bounds check — works for BOTH explicit `\\n` AND visual\n // line wraps. Only steal the key when the caret has nowhere left\n // to go inside the textarea: ArrowUp at the very start, or\n // ArrowDown at the very end. Anywhere else, let the textarea\n // handle native caret movement (line-by-line up/down, including\n // through wrapped lines without `\\n`).\n const ta = target as HTMLTextAreaElement;\n if (e.key === \"ArrowUp\" && ta.selectionStart > 0) return;\n if (e.key === \"ArrowDown\" && ta.selectionEnd < ta.value.length) return;\n }\n\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n e.stopPropagation();\n if (e.key === \"ArrowLeft\") {\n if (safeIndex > 0) handleBack();\n } else if (isSkippable && total > 1) {\n handleSkip();\n }\n return;\n }\n\n if (rowCount === 0) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Home\" || e.key === \"End\") {\n e.preventDefault();\n e.stopPropagation();\n let next: number;\n if (e.key === \"Home\") next = 0;\n else if (e.key === \"End\") next = rowCount - 1;\n else {\n // When focus is in the Other field, treat it as the Other row.\n const base = isTextInput ? otherIndex : (activeIndex ?? -1);\n next = e.key === \"ArrowDown\" ? base + 1 : base - 1;\n next = (next + rowCount) % rowCount;\n }\n moveActive(next);\n }\n };\n\n // Cmd+Enter (macOS) / Ctrl+Enter (Windows/Linux) commits a multi-select\n // question, mirroring the Continue button. Handled at the root so it works\n // wherever focus sits inside the card, and scoped to this instance because\n // the event has to bubble up from a focused descendant (no global listener,\n // so stacked demos don't all fire at once).\n const handleRootKey = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n if (e.key !== \"Enter\") return;\n const mod = isMac ? e.metaKey : e.ctrlKey;\n if (!mod || !isMulti) return;\n e.preventDefault(); // keep a focused button/row from also activating\n const hasAnswer = selectedIds.length > 0 || otherText.trim().length > 0;\n if (hasAnswer) handleMultiNext();\n };\n\n if (!question) {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-[520px] p-5 bg-card border border-border\",\n shape.container,\n className,\n )}\n {...rest}\n >\n <p className=\"text-[13px] text-muted-foreground\">No questions.</p>\n </div>\n );\n }\n\n // ── Layout calculations for hover/focus indicators ───────────\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n // The blue morphing focus ring is intentionally suppressed for the Other\n // field: that row has its own input-field treatment (the \"type here\" hint\n // when empty, the merged selected bg once it has text), so the ring is\n // redundant there and reads as noise while typing. focusedIndex is still\n // tracked for the hint and submit-arrow visibility — we just don't draw a\n // ring around it.\n const focusRect =\n focusedIndex !== null && !(allowOther && focusedIndex === otherIndex)\n ? itemRects[focusedIndex]\n : null;\n\n // ── Selected-row grouping (merges contiguous selections) ─────\n // Mirrors the CheckboxGroup pattern: contiguous selected indices\n // collapse into a single rounded background block; stable IDs let\n // framer-motion morph block size/position when neighbours toggle.\n // The Other row gets its own input-field-style indicator (see below) and\n // is intentionally excluded here so it doesn't merge into a contiguous\n // bg-accent block with adjacent selected options.\n // Include the Other row in selectedIndices when it has text. This lets\n // it merge into the same morphing bg block as adjacent selected options\n // (instead of looking like a disconnected input field next to them).\n const selectedIndices = useMemo(() => {\n const set = new Set<number>();\n options.forEach((opt, i) => {\n if (selectedIds.includes(optionKey(opt, i))) set.add(i);\n });\n if (allowOther && otherText.length > 0) set.add(otherIndex);\n return set;\n }, [options, selectedIds, allowOther, otherText, otherIndex]);\n\n const selectedGroups = useMemo(() => {\n const runs: { start: number; end: number }[] = [];\n const sorted = [...selectedIndices].sort((a, b) => a - b);\n for (const idx of sorted) {\n const last = runs[runs.length - 1];\n if (last && idx === last.end + 1) last.end = idx;\n else runs.push({ start: idx, end: idx });\n }\n\n // Stable run IDs so a growing/shrinking run animates instead of\n // exit+re-enter when neighbours flip.\n const usedIds = new Set<number>();\n const nextGroupMap = new Map<number, number>();\n const groups = runs.map((run) => {\n let stableId: number | null = null;\n for (let i = run.start; i <= run.end; i++) {\n const prev = prevGroupMapRef.current.get(i);\n if (prev !== undefined && !usedIds.has(prev)) {\n stableId = prev;\n break;\n }\n }\n const id = stableId ?? ++groupIdCounterRef.current;\n usedIds.add(id);\n for (let i = run.start; i <= run.end; i++) nextGroupMap.set(i, id);\n return { ...run, id };\n });\n prevGroupMapRef.current = nextGroupMap;\n return groups;\n }, [selectedIndices]);\n\n // True when the user is hovering a row that ISN'T part of any selected\n // run — we dim the selected backgrounds slightly to draw attention to\n // the hover target.\n const isHoveringNonSelected = activeIndex !== null && !selectedIndices.has(activeIndex);\n\n // Selected backgrounds, with the merge/split boundary animation when one\n // unselected row bridges or splits two selected runs. Selected backgrounds\n // use shape.bg, so corners animate around its radius.\n const blocks = useMergeSplitBlocks(selectedGroups, itemRects, shape.bgRadius);\n\n const showBack = total > 1 && safeIndex > 0;\n const showSkip = total > 1 && isSkippable;\n const showFooter = showBack || showSkip || isMulti;\n\n return (\n <div\n ref={ref}\n className={cn(\n // overflow-hidden crops the footer buttons to the card's rounded\n // bounds, so a button animating out (e.g. Continue on exit) is\n // clipped at the edge instead of visibly flying outside the card.\n \"relative w-full max-w-[520px] overflow-hidden bg-card border border-border\",\n shape.container,\n className,\n )}\n {...rest}\n onKeyDown={(e) => {\n rest.onKeyDown?.(e);\n handleRootKey(e);\n }}\n >\n {/* Header — static top, fixed across questions; only the number\n changes. Lives outside the morphing region so it never shifts. */}\n <div className=\"flex items-center px-4 sm:px-5 pt-4 sm:pt-5 pb-2 text-[12px] text-muted-foreground\">\n <span>\n Question {safeIndex + 1} of {total}\n </span>\n </div>\n\n {/* Morphing Q/A region — its REAL height animates to the measured\n natural height of the content below, so the card border and the\n footer reflow in lockstep with the spring. overflow-hidden clips\n the instantly-swapped content, revealing it as the height opens.\n Header and footer sit outside, so neither is clipped or yanked. */}\n <motion.div\n animate={{ height: contentHeight }}\n initial={false}\n transition={spring.slow}\n className=\"overflow-hidden\"\n >\n <div\n ref={contentMeasureRef}\n className={cn(\"px-4 sm:px-5\", showFooter ? \"pb-1\" : \"pb-2.5 sm:pb-3\")}\n >\n <div key={qId} className=\"flex flex-col gap-2\">\n {/* Question title */}\n <h3\n id={`${reactId}-${qId}-title`}\n className=\"text-[16px] text-foreground leading-snug\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n >\n {question.title}\n </h3>\n\n {/* Options + Other (proximity-tracked container) */}\n <div\n ref={rowsContainerRef}\n role={isMulti ? \"group\" : \"radiogroup\"}\n aria-labelledby={`${reactId}-${qId}-title`}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n onKeyDown={handleNavKey}\n className=\"relative flex flex-col gap-0.5 -mx-3\"\n >\n {/* Other-row input hint — shown only when the Other input is\n focused and still empty, to signal \"type here\". As soon as\n text exists, the row joins selectedIndices and inherits the\n selected merged bg, so it visually integrates with adjacent\n selected options instead of looking like a standalone field. */}\n <AnimatePresence>\n {(() => {\n if (!allowOther) return null;\n const otherRect = itemRects[otherIndex];\n const isEmptyFocused = focusedIndex === otherIndex && otherText.length === 0;\n if (!otherRect || !isEmptyFocused) return null;\n return (\n <motion.div\n key=\"other-input\"\n aria-hidden\n className={cn(\n \"absolute pointer-events-none bg-card ring-1 ring-inset ring-border\",\n shape.bg,\n )}\n initial={{\n opacity: 0,\n top: otherRect.top,\n left: otherRect.left,\n width: otherRect.width,\n height: otherRect.height,\n }}\n animate={{\n opacity: 1,\n top: otherRect.top,\n left: otherRect.left,\n width: otherRect.width,\n height: otherRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n );\n })()}\n </AnimatePresence>\n\n {/* Single morphing hover indicator (rendered below selected bg\n so a hovered+selected row still reads as clearly selected) */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={`hover-${sessionRef.current}`}\n aria-hidden\n className={cn(\"absolute pointer-events-none bg-hover\", shape.bg)}\n initial={{\n opacity: 0,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Selected-row backgrounds (merged for contiguous selections).\n A run is normally one block; mid merge/split it is drawn as two\n abutting halves — see useMergeSplitBlocks. Uses bg-active\n (overlay-aware) and renders ABOVE the hover indicator so the\n selected state stays readable when mousing over a row. Corners\n are driven numerically (around shape.bg's radius) so a single\n selected row matches its hover. */}\n <SelectionBackgrounds blocks={blocks} dimmed={isHoveringNonSelected} />\n\n {/* Single morphing focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n aria-hidden\n className={cn(\n \"absolute pointer-events-none border border-[#6B97FF] z-20\",\n shape.focusRing,\n )}\n initial={{\n opacity: 0,\n top: focusRect.top - 2,\n left: focusRect.left - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n animate={{\n opacity: 1,\n top: focusRect.top - 2,\n left: focusRect.left - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {options.map((opt, i) => {\n const oid = optionKey(opt, i);\n const isSelected = selectedIds.includes(oid);\n const isHover = activeIndex === i;\n const showArrow = !isMulti && isHover;\n return (\n <Row\n key={oid}\n index={i}\n registerItem={registerItem}\n role={isMulti ? \"checkbox\" : \"radio\"}\n isSelected={isSelected}\n tabIndex={\n isMulti\n ? 0\n : selectedIds[0] === oid || (!selectedIds.length && i === 0)\n ? 0\n : -1\n }\n onFocusVisible={() => setActiveIndex(i)}\n onBlurAny={() => setActiveIndex((prev) => (prev === i ? null : prev))}\n onClick={() => (isMulti ? handleMultiToggle(oid) : handleSingleSelect(oid))}\n onKeyDown={(e) => {\n // Let ⌘/Ctrl+Enter fall through to the root handler\n // (Continue) instead of toggling the focused row.\n if ((e.key === \" \" || e.key === \"Enter\") && !e.metaKey && !e.ctrlKey) {\n e.preventDefault();\n if (isMulti) handleMultiToggle(oid);\n else handleSingleSelect(oid);\n }\n }}\n shape={shape}\n aria-checked={isSelected}\n chipContent={i + 1}\n chipFilled={isSelected}\n isMulti={isMulti}\n showArrow={showArrow}\n bodyLayout={question.layout === \"stacked\" ? \"stacked\" : \"inline\"}\n // Anchor the chip to the first text line whenever the\n // body can wrap to multiple lines (stacked layouts\n // pair a title with a description that often wraps).\n topAlign={question.layout === \"stacked\"}\n chipPosition={question.chipPosition ?? \"right\"}\n arrowIcon={<ArrowRight size={14} strokeWidth={2} className=\"h-3.5 w-3.5\" />}\n >\n {question.layout === \"stacked\" ? (\n <>\n <span className=\"inline-grid\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {opt.title}\n </span>\n <span\n className=\"col-start-1 row-start-1 text-foreground transition-[color,font-variation-settings] duration-80\"\n style={{\n fontVariationSettings: isSelected\n ? fontWeights.semibold\n : fontWeights.medium,\n }}\n >\n {opt.title}\n </span>\n </span>\n {opt.description && (\n <span className=\"text-[12px] text-muted-foreground leading-snug\">\n {opt.description}\n </span>\n )}\n </>\n ) : (\n <span>\n <span className=\"inline-grid\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {opt.title}\n </span>\n <span\n className=\"col-start-1 row-start-1 text-foreground transition-[color,font-variation-settings] duration-80\"\n style={{\n fontVariationSettings: isSelected\n ? fontWeights.semibold\n : fontWeights.medium,\n }}\n >\n {opt.title}\n </span>\n </span>\n {opt.description && (\n <>\n {\" \"}\n <span className=\"text-muted-foreground\">{opt.description}</span>\n </>\n )}\n </span>\n )}\n </Row>\n );\n })}\n\n {allowOther && (\n <Row\n index={otherIndex}\n registerItem={registerItem}\n role={null}\n isSelected={otherText.length > 0}\n tabIndex={-1}\n onFocusVisible={() => setFocusedIndex(otherIndex)}\n onBlurAny={() => setFocusedIndex((prev) => (prev === otherIndex ? null : prev))}\n onClick={() => otherInputRef.current?.focus()}\n shape={shape}\n chipContent={otherIndex + 1}\n chipFilled={otherText.length > 0}\n isMulti={isMulti}\n // Other body is a textarea that may grow past one line;\n // only switch to top-aligned when it actually wraps, so\n // the 1-line empty / single-line state stays visually\n // centred like the surrounding option rows.\n topAlign={isOtherMultiline}\n chipPosition={question.chipPosition ?? \"right\"}\n ariaLabel={question.otherPlaceholder ?? \"Describe in your own words\"}\n showArrow={\n !isMulti &&\n (focusedIndex === otherIndex || activeIndex === otherIndex) &&\n otherText.trim().length > 0\n }\n arrowIcon={<ArrowRight size={14} strokeWidth={2} className=\"h-3.5 w-3.5\" />}\n {...(!isMulti && otherText.trim().length > 0\n ? { onArrowClick: handleOtherSubmit }\n : {})}\n >\n <span className=\"inline-grid w-full\">\n <textarea\n ref={otherInputRef}\n rows={1}\n value={otherText}\n placeholder={question.otherPlaceholder ?? \"Describe in your own words…\"}\n aria-label={question.otherPlaceholder ?? \"Describe in your own words\"}\n onChange={(e) => handleOtherChange(e.target.value)}\n onFocus={() => setFocusedIndex(otherIndex)}\n onBlur={() =>\n setFocusedIndex((prev) => (prev === otherIndex ? null : prev))\n }\n onKeyDown={(e) => {\n // Standard chat pattern: plain Enter submits,\n // Shift+Enter inserts a newline. Works for both\n // desktop and mobile soft keyboards (where ⌘/⌃\n // isn't reachable). In multi-select we leave plain\n // Enter to the textarea (newline) and let the\n // root handler catch ⌘/⌃+Enter for Continue —\n // multi-select has its own Continue button as the\n // primary submit affordance.\n if (e.key !== \"Enter\") return;\n if (e.shiftKey) return; // Shift+Enter = newline\n if (!isMulti) {\n e.preventDefault();\n handleOtherSubmit();\n }\n }}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n // Reset every textarea default that would otherwise\n // make the field taller/boxier than the single-line\n // input it replaces — no border, no padding, no\n // resize handle, no scrollbars (height is JS-driven,\n // see the auto-resize effect above).\n \"col-start-1 row-start-1 block w-full bg-transparent border-0 p-0 m-0 outline-none resize-none overflow-hidden text-[13px] leading-snug text-foreground placeholder:text-muted-foreground\",\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n />\n </span>\n </Row>\n )}\n </div>\n </div>\n </div>\n </motion.div>\n\n {/* Footer — outside the morphing region, so the animating height never\n clips it. Because the height is a real layout value (not a\n transform), the footer reflows frame-by-frame and rides the morph\n in lockstep. */}\n {showFooter && (\n <div className=\"px-4 sm:px-5 pt-1 pb-2\">\n <div className=\"flex items-center justify-between gap-2 -mx-2 sm:-mx-3\">\n {/* Each button is wrapped in a motion.div so it fades + scales\n when it appears/disappears (e.g. Continue on multi-select).\n popLayout pops the exiting button out of flow so its\n neighbours slide to their new spot *at the same time* it fades\n (not sequentially). The group is `relative` so the popped\n (absolutely positioned) button stays put instead of flying to\n the page origin. */}\n <div className=\"relative flex items-center gap-2\">\n <AnimatePresence mode=\"popLayout\" initial={false}>\n {showBack && (\n <motion.div\n key=\"back\"\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.85 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.85 }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.1 },\n }}\n >\n {/* Bare ← icon via the Button's icon slot, so it gets the\n proper tighter icon-side padding. */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n leadingIcon={ArrowLeftKey}\n onClick={handleBack}\n // Arrow is desktop-only; restore symmetric padding on\n // mobile where it's hidden, tighten for the icon on ≥sm.\n className=\"pl-3 sm:pl-[6px]\"\n >\n Back\n </Button>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className=\"relative flex items-center gap-2\">\n <AnimatePresence mode=\"popLayout\" initial={false}>\n {showSkip && (\n <motion.div\n key=\"skip\"\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.85 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.85 }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.1 },\n }}\n >\n {/* Bare → icon via the Button's icon slot (mirror of Back). */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n trailingIcon={ArrowRightKey}\n onClick={handleSkip}\n // Arrow is desktop-only; restore symmetric padding on\n // mobile where it's hidden, tighten for the icon on ≥sm.\n className=\"pr-3 sm:pr-[6px]\"\n >\n {skipLabel}\n </Button>\n </motion.div>\n )}\n {isMulti && (\n <motion.div\n key=\"continue\"\n layout=\"position\"\n initial={{ opacity: 0, scale: 0.85 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.85 }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.1 },\n }}\n >\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={handleMultiNext}\n disabled={selectedIds.length === 0 && otherText.trim().length === 0}\n // The shortcut chip acts as a trailing icon, so tighten\n // the right padding to match the Button's iconRight on\n // desktop. The chip is hidden on mobile, so restore\n // symmetric padding there.\n className=\"pr-3 sm:pr-[6px]\"\n >\n <span className=\"inline-flex items-center gap-1.5\">\n {question.nextLabel ?? (safeIndex >= total - 1 ? \"Finish\" : \"Continue\")}\n {/* Shortcut hint — replaces the trailing arrow. Sits\n inside the button so it dims with the disabled\n state. ⌘↵ on macOS, ⌃↵ elsewhere. Desktop-only:\n mobile has no physical keyboard to trigger it. */}\n <span className=\"hidden sm:contents\">\n <ShortcutChip shape={shape} tone=\"inverted\">\n {isMac ? \"⌘\" : \"⌃\"}\n {\"↵\"}\n </ShortcutChip>\n </span>\n </span>\n </Button>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nAskUserQuestions.displayName = \"AskUserQuestions\";\n\n// ── Shortcut chip ─────────────────────────────────────────────\n// Small keycap showing the keyboard shortcut for an action, so Back (←),\n// Skip (→) and Continue (⌘↵ / ⌃↵) all read consistently. `tone=\"inverted\"`\n// sits on the dark primary button; the default reads on quiet ghost buttons.\nfunction ShortcutChip({\n children,\n tone = \"muted\",\n shape,\n}: {\n children: React.ReactNode;\n tone?: \"muted\" | \"inverted\";\n shape: ReturnType<typeof useShape>;\n}) {\n return (\n <kbd\n aria-hidden\n className={cn(\n \"inline-flex items-center justify-center gap-0.5 px-1 min-w-[18px] h-[18px] text-[11px] leading-none font-sans tracking-wide\",\n tone === \"inverted\"\n ? \"bg-background/15 text-background\"\n : \"bg-foreground/10 text-muted-foreground\",\n shape.bg,\n )}\n >\n {children}\n </kbd>\n );\n}\n\n// ── Row sub-component ─────────────────────────────────────────\n\ninterface RowProps {\n index: number;\n registerItem: (index: number, element: HTMLElement | null) => void;\n role: \"radio\" | \"checkbox\" | null;\n isSelected: boolean;\n tabIndex: number;\n onFocusVisible: () => void;\n onBlurAny: () => void;\n onClick: () => void;\n onKeyDown?: (e: ReactKeyboardEvent<HTMLDivElement>) => void;\n shape: ReturnType<typeof useShape>;\n chipContent: React.ReactNode;\n chipFilled: boolean;\n isMulti: boolean;\n ariaLabel?: string;\n \"aria-checked\"?: boolean;\n showArrow?: boolean;\n arrowIcon?: React.ReactNode;\n onArrowClick?: () => void;\n /** Body content layout. \"inline\" keeps title + description on one line;\n * \"stacked\" puts description below the title with extra vertical padding. */\n bodyLayout?: \"inline\" | \"stacked\";\n /** Anchor the chip to the first line of the body instead of vertically\n * centering it on the row. Use when the body can grow taller than one\n * line (Other row's textarea, stacked title + description, or any\n * wrapping content) — otherwise the chip drifts toward the middle of a\n * tall row and stops reading as a marker for the row's title. */\n topAlign?: boolean;\n /** Mirrors the per-question `chipPosition`. \"left\" moves the chip to\n * the leading edge of the row; the trailing arrow slot still sits on\n * the right. Defaults to \"right\". */\n chipPosition?: \"left\" | \"right\";\n children: React.ReactNode;\n}\n\nfunction Row({\n index,\n registerItem,\n role,\n isSelected,\n tabIndex,\n onFocusVisible,\n onBlurAny,\n onClick,\n onKeyDown,\n shape,\n chipContent,\n chipFilled,\n isMulti,\n ariaLabel,\n showArrow,\n arrowIcon,\n onArrowClick,\n bodyLayout = \"inline\",\n topAlign = false,\n chipPosition = \"right\",\n children,\n ...aria\n}: RowProps) {\n const rowRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n registerItem(index, rowRef.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n // The arrow keeps the same animation regardless of which slot it lands\n // in — pull it out so the chip-on-right (overlay) and chip-on-left\n // (separate right slot) paths can reuse the exact same element.\n const arrowOverlay = (\n <AnimatePresence>\n {showArrow && (\n <motion.span\n aria-hidden={!onArrowClick}\n role={onArrowClick ? \"button\" : undefined}\n onClick={\n onArrowClick\n ? (e) => {\n e.stopPropagation();\n onArrowClick();\n }\n : undefined\n }\n className={cn(\n \"absolute inset-0 inline-flex items-center justify-center bg-foreground text-background\",\n shape.bg,\n onArrowClick && \"cursor-pointer\",\n )}\n initial={{ opacity: 0, scale: 0.6 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{\n opacity: 0,\n scale: 0.6,\n transition: spring.fast.exit,\n }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n >\n {arrowIcon}\n </motion.span>\n )}\n </AnimatePresence>\n );\n\n // The chip \"slot\" is a fixed 28×28 cell holding the chip number/circle.\n // When topAlign is on, the slot floats up so the chip's vertical centre\n // lines up with the centre of a `text-[13px] leading-snug` first line\n // (line-height ≈ 18px → centre 9px; chip centre 14px → diff 5px).\n // Stacked rows pair a title with a description, so we add 4px of\n // breathing room back on top (effective shift -1px) — that lands the\n // chip near the title's baseline rather than its optical centre, which\n // reads as \"row marker\" instead of \"title label\" when descriptions wrap.\n // The arrow overlay only co-renders here when `chipPosition === \"right\"`\n // — in chip-on-left mode the arrow has its own right-edge slot so the\n // chip stays visible while the submit affordance lives where users\n // expect it (the trailing end of the row).\n const chipSlot = (\n <span\n className={cn(\n \"shrink-0 w-7 h-7 relative inline-flex items-center justify-center\",\n topAlign && (bodyLayout === \"stacked\" ? \"-mt-[1px]\" : \"-mt-[5px]\"),\n )}\n >\n <span\n aria-hidden\n className={cn(\n \"absolute inline-flex items-center justify-center w-5 h-5 text-[11px] transition-[opacity,font-variation-settings] duration-80\",\n isMulti && shape.bg,\n isMulti\n ? chipFilled\n ? \"bg-foreground text-background\"\n : \"border border-border text-muted-foreground\"\n : chipFilled\n ? \"text-foreground\"\n : \"text-muted-foreground\",\n // Only fade the chip when it shares a slot with the arrow — for\n // chip-on-left the arrow has its own slot on the right, so the\n // chip stays in place.\n chipPosition === \"right\" && showArrow && \"opacity-0\",\n )}\n style={{\n fontVariationSettings: chipFilled ? fontWeights.semibold : fontWeights.medium,\n }}\n >\n {chipContent}\n </span>\n {chipPosition === \"right\" && arrowOverlay}\n </span>\n );\n\n // Right-edge arrow slot — only used when the chip is on the LEFT and\n // the row can show an arrow (single-select only; in multi-select\n // showArrow is always false and there's nothing to anchor here). Mirrors\n // the chip slot's stacked-vs-inline shift so both end markers stay on\n // the same horizontal line at all times.\n const rightArrowSlot = chipPosition === \"left\" && !isMulti && (\n <span\n className={cn(\n \"shrink-0 w-7 h-7 relative inline-flex items-center justify-center\",\n topAlign && (bodyLayout === \"stacked\" ? \"-mt-[1px]\" : \"-mt-[5px]\"),\n )}\n >\n {arrowOverlay}\n </span>\n );\n\n return (\n <div\n ref={rowRef}\n data-proximity-index={index}\n data-state={isSelected ? \"checked\" : \"unchecked\"}\n role={role ?? undefined}\n aria-checked={role === \"radio\" || role === \"checkbox\" ? !!aria[\"aria-checked\"] : undefined}\n aria-label={ariaLabel}\n tabIndex={tabIndex}\n onFocus={(e) => {\n if ((e.target as HTMLElement).matches(\":focus-visible\")) {\n onFocusVisible();\n }\n }}\n onBlur={onBlurAny}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={cn(\n \"relative z-10 flex cursor-pointer select-none outline-none\",\n // Tighter gap when the chip sits on the left — it reads as a\n // leading list marker, so coupling it close to the title looks\n // more intentional than the larger right-side gap (where the\n // chip is a trailing affordance instead).\n chipPosition === \"left\" ? \"gap-2\" : \"gap-3\",\n // items-start when the body may exceed one line (stacked layouts,\n // multi-line textareas) so the chip tracks the first line instead\n // of sliding to the row's vertical centre. When topAlign is OFF,\n // items-center keeps a 1-line row visually centred — that's why\n // the Other row defers topAlign until its textarea actually wraps.\n topAlign ? \"items-start\" : \"items-center\",\n bodyLayout === \"stacked\" ? \"min-h-14 py-2\" : \"min-h-10 py-1.5\",\n // Mirror the horizontal padding based on chip side so the row\n // reads visually balanced in both orientations. For chip-on-left\n // + multi-select there's no right slot, so widen the right padding\n // to match the chip-on-right's 12px / 6px asymmetry mirrored.\n chipPosition === \"left\" ? (isMulti ? \"pl-1.5 pr-3\" : \"pl-1.5 pr-1.5\") : \"pl-3 pr-1.5\",\n shape.item,\n )}\n >\n {/* Selected background is drawn at the container level so contiguous\n selections can merge into a single block (see AskUserQuestions's\n selectedGroups / merged-bg block). Row keeps z-10 to sit above it. */}\n\n {chipPosition === \"left\" && chipSlot}\n\n {/* Body — fills row */}\n <span\n className={cn(\n \"min-w-0 flex-1 text-[13px] leading-snug\",\n bodyLayout === \"stacked\" ? \"flex flex-col gap-0.5\" : \"inline-flex items-center gap-0\",\n )}\n >\n {children}\n </span>\n\n {chipPosition === \"right\" ? chipSlot : rightArrowSlot}\n </div>\n );\n}\n\nexport { AskUserQuestions };\nexport default AskUserQuestions;\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface AvatarStackItem {\n src?: string;\n name: string;\n fallback?: string;\n colorClass?: string;\n}\n\ninterface AvatarStackProps {\n avatars: AvatarStackItem[];\n max?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = {\n sm: { wrapper: \"size-6 ring-[1.5px]\", text: \"caption-xs\" },\n md: { wrapper: \"size-8 ring-2\", text: \"caption\" },\n lg: { wrapper: \"size-10 ring-2\", text: \"body\" },\n};\n\nfunction AvatarStack({ avatars, max, size = \"md\", className }: AvatarStackProps) {\n const shown = max ? avatars.slice(0, max) : avatars;\n const overflow = max && avatars.length > max ? avatars.length - max : 0;\n const s = sizeMap[size];\n\n return (\n <div className={cn(\"flex -space-x-2\", className)}>\n {shown.map((avatar, i) => (\n <span\n key={i}\n title={avatar.name}\n className={cn(\n \"relative inline-flex shrink-0 overflow-hidden rounded-full ring-background\",\n s.wrapper,\n )}\n >\n {avatar.src ? (\n <img\n src={avatar.src}\n alt={avatar.name}\n className=\"size-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10\"\n />\n ) : (\n <span\n className={cn(\n \"flex size-full items-center justify-center font-medium\",\n s.text,\n avatar.colorClass ?? \"bg-muted text-muted-foreground\",\n )}\n >\n {avatar.fallback ?? avatar.name.slice(0, 2).toUpperCase()}\n </span>\n )}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-full ring-background bg-muted font-medium text-muted-foreground\",\n s.wrapper,\n s.text,\n \"tabular-nums\",\n )}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n\nexport { AvatarStack };\n","\"use client\";\n\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { useShape } from \"../lib/shape-context\";\n\nconst badgeColors = {\n gray: \"#a3a3a3\",\n red: \"#ef4444\",\n orange: \"#f97316\",\n amber: \"#f59e0b\",\n yellow: \"#eab308\",\n lime: \"#84cc16\",\n green: \"#22c55e\",\n emerald: \"#10b981\",\n teal: \"#14b8a6\",\n cyan: \"#06b6d4\",\n blue: \"#3b82f6\",\n indigo: \"#6366f1\",\n violet: \"#8b5cf6\",\n purple: \"#a855f7\",\n fuchsia: \"#d946ef\",\n pink: \"#ec4899\",\n rose: \"#f43f5e\",\n} as const;\n\ntype BadgeColor = keyof typeof badgeColors;\n\nconst badgeVariants = cva(\"inline-flex items-center font-medium whitespace-nowrap\", {\n variants: {\n variant: {\n default: \"\",\n secondary: \"\",\n outline: \"border border-border text-foreground\",\n brand: \"\",\n success: \"\",\n warning: \"\",\n destructive: \"\",\n solid: \"\",\n dot: \"border border-border text-foreground\",\n },\n size: {\n sm: \"h-5 px-2 text-[11px] gap-1\",\n md: \"h-6 px-2.5 text-[12px] gap-1.5\",\n lg: \"h-7 px-3 text-[13px] gap-1.5\",\n },\n },\n defaultVariants: {\n variant: \"solid\",\n size: \"md\",\n },\n});\n\ninterface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"color\">, VariantProps<typeof badgeVariants> {\n color?: BadgeColor;\n}\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = \"solid\", size = \"md\", color, children, style, ...props }, ref) => {\n const shape = useShape();\n const resolvedColor =\n color ??\n (variant === \"brand\"\n ? \"blue\"\n : variant === \"success\"\n ? \"green\"\n : variant === \"warning\"\n ? \"amber\"\n : variant === \"destructive\"\n ? \"red\"\n : \"gray\");\n const colorValue = badgeColors[resolvedColor];\n const isSolid = variant !== \"dot\" && variant !== \"outline\";\n const dotSize = size === \"sm\" ? 6 : size === \"lg\" ? 8 : 7;\n\n const colorStyle = isSolid\n ? resolvedColor === \"gray\"\n ? { backgroundColor: \"var(--accent)\", color: \"var(--foreground)\" }\n : {\n color: \"var(--foreground)\",\n backgroundColor: `color-mix(in srgb, ${colorValue} 15%, var(--background))`,\n }\n : {};\n\n const dotColor = resolvedColor === \"gray\" ? \"var(--muted-foreground)\" : colorValue;\n\n return (\n <span\n ref={ref}\n className={cn(badgeVariants({ variant, size }), shape.item, className)}\n style={{ ...colorStyle, ...style }}\n {...props}\n >\n {!isSolid && (\n <span\n className=\"shrink-0 rounded-full\"\n style={{\n width: dotSize,\n height: dotSize,\n backgroundColor: dotColor,\n }}\n />\n )}\n {children}\n </span>\n );\n },\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants, badgeColors };\nexport type { BadgeProps, BadgeColor };\n","import * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"nav\"> & { separator?: React.ReactNode }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentProps<\"ol\">>(\n ({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\"flex flex-wrap items-center gap-1.5 body text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => (\n <li ref={ref} className={cn(\"inline-flex items-center gap-1.5\", className)} {...props} />\n ),\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, React.ComponentProps<\"a\">>(\n ({ className, ...props }, ref) => (\n <a ref={ref} className={cn(\"transition-colors hover:text-foreground\", className)} {...props} />\n ),\n);\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentProps<\"span\">>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n aria-current=\"page\"\n className={cn(\"body font-medium text-foreground\", className)}\n {...props}\n />\n ),\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n >\n {children ?? <ChevronRight size={14} />}\n </li>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-5 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal size={14} className=\"text-muted-foreground\" />\n </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface ButtonGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction ButtonGroup({ children, className }: ButtonGroupProps) {\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-0.5 rounded-xl bg-muted p-0.5\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\ninterface ButtonGroupItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n active?: boolean;\n}\n\nfunction ButtonGroupItem({ active, className, children, ...props }: ButtonGroupItemProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"relative inline-flex min-h-8 items-center justify-center gap-1 rounded-[10px] px-3 py-1 body-sm font-medium\",\n \"transition-[background-color,box-shadow,color,opacity,scale] active:scale-[0.96]\",\n \"focus:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\",\n active\n ? \"bg-card text-foreground shadow-natural\"\n : \"text-muted-foreground hover:text-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nButtonGroup.displayName = \"ButtonGroup\";\nButtonGroupItem.displayName = \"ButtonGroupItem\";\n\nexport { ButtonGroup, ButtonGroupItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row gap-4\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center px-10\",\n caption_label: \"body font-semibold text-foreground\",\n nav: \"flex items-center justify-between absolute inset-x-0 top-1\",\n button_previous: cn(\n \"absolute left-0 flex h-9 w-9 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:bg-muted hover:text-muted-foreground transition-colors\",\n ),\n button_next: cn(\n \"absolute right-0 flex h-9 w-9 items-center justify-center rounded-md\",\n \"text-muted-foreground hover:bg-muted hover:text-muted-foreground transition-colors\",\n ),\n month_grid: \"w-full border-collapse mt-1\",\n weekdays: \"flex\",\n weekday: \"flex h-9 w-9 items-center justify-center label text-muted-foreground font-normal\",\n week: \"flex w-full mt-1\",\n day: \"relative p-0 text-center\",\n day_button: cn(\n \"flex h-9 w-9 items-center justify-center rounded-full body font-normal\",\n \"text-foreground hover:bg-muted transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n ),\n selected:\n \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:hover:bg-brand-primary/90\",\n today: \"[&>button]:font-semibold [&>button]:text-brand-primary\",\n outside: \"opacity-40 [&>button]:text-muted-foreground\",\n disabled: \"opacity-30 [&>button]:cursor-not-allowed\",\n range_start:\n \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:rounded-full\",\n range_end: \"[&>button]:bg-brand-primary [&>button]:text-background [&>button]:rounded-full\",\n range_middle:\n \"[&>button]:bg-brand-primary/15 [&>button]:text-foreground [&>button]:rounded-none\",\n hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? <ChevronLeft size={14} /> : <ChevronRight size={14} />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst calloutVariants = cva(\n \"flex w-full min-w-0 gap-3 rounded-xl border px-4 py-3.5 shadow-natural\",\n {\n variants: {\n tone: {\n default: \"border-border bg-card text-foreground\",\n info: \"border-brand-secondary/50 bg-brand-secondary/15 text-foreground\",\n success: \"border-success/25 bg-success/10 text-foreground\",\n warning: \"border-warning/35 bg-warning/15 text-foreground\",\n destructive: \"border-destructive/25 bg-destructive/10 text-foreground\",\n },\n compact: {\n true: \"px-3 py-2.5\",\n false: \"\",\n },\n },\n defaultVariants: {\n tone: \"default\",\n compact: false,\n },\n },\n);\n\nconst calloutIconVariants = cva(\n \"mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-lg [&_svg]:size-4\",\n {\n variants: {\n tone: {\n default: \"bg-muted text-muted-foreground\",\n info: \"bg-brand-secondary/35 text-muted-foreground\",\n success: \"bg-success/15 text-success\",\n warning: \"bg-warning/20 text-warning\",\n destructive: \"bg-destructive/15 text-destructive\",\n },\n },\n defaultVariants: {\n tone: \"default\",\n },\n },\n);\n\ninterface CalloutProps\n extends Omit<React.ComponentProps<\"div\">, \"title\">,\n VariantProps<typeof calloutVariants> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nfunction Callout({\n title,\n description,\n icon,\n actions,\n tone = \"default\",\n compact = false,\n className,\n children,\n role,\n ...props\n}: CalloutProps) {\n const resolvedRole = role ?? (tone === \"destructive\" ? \"alert\" : \"status\");\n\n return (\n <div\n role={resolvedRole}\n className={cn(calloutVariants({ tone, compact }), className)}\n {...props}\n >\n {icon && <div className={cn(calloutIconVariants({ tone }))}>{icon}</div>}\n <div className=\"flex min-w-0 flex-1 flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n {title && <p className=\"body font-semibold text-balance\">{title}</p>}\n {description && (\n <p className={cn(\"body text-pretty text-muted-foreground\", title && \"mt-1\")}>\n {description}\n </p>\n )}\n {children && <div className={cn(title || description ? \"mt-2\" : \"\")}>{children}</div>}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-2 max-sm:w-full max-sm:flex-col max-sm:items-stretch\">\n {actions}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nCallout.displayName = \"Callout\";\n\nexport { Callout };\nexport type { CalloutProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface CardHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\" | \"destructive\";\n}\n\ninterface CardHeadingProps {\n title: string;\n description?: string;\n actions?: CardHeadingAction[];\n children?: React.ReactNode; // e.g. avatar or icon on the left\n className?: string;\n}\n\nfunction CardHeading({ title, description, actions, children, className }: CardHeadingProps) {\n return (\n <div\n className={cn(\n \"flex items-start justify-between gap-4 border-b border-border px-5 py-4\",\n className,\n )}\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n {children}\n <div className=\"min-w-0\">\n <p className=\"body truncate font-semibold text-balance text-foreground\">{title}</p>\n {description && (\n <p className=\"caption mt-0.5 text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n </div>\n\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions.map((action, i) =>\n action.href ? (\n <Button key={i} size=\"sm\" variant={action.variant ?? \"default\"} asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.variant ?? \"default\"}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { CardHeading };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { motionClasses } from \"../lib/interaction\";\n\n/* ------------------------------------------------------------------ */\n/* Card root */\n/* ------------------------------------------------------------------ */\n\nconst cardVariants = cva([\"rounded-xl\", motionClasses], {\n variants: {\n variant: {\n default: \"bg-card shadow-natural\",\n muted: \"bg-muted shadow-natural\",\n ghost: \"bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\ninterface CardProps extends React.ComponentProps<\"div\">, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n className={cn(cardVariants({ variant }), className)}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\n/* ------------------------------------------------------------------ */\n/* Card sub-components */\n/* ------------------------------------------------------------------ */\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 p-5\", className)}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.ComponentProps<\"h3\">>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\"subheading text-balance text-foreground\", className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.ComponentProps<\"p\">>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"card-description\"\n className={cn(\"caption text-pretty text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-5 pt-0\", className)}\n {...props}\n />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nconst CardAction = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-action\"\n className={cn(\"col-start-2 row-span-2 row-start-1 self-start justify-self-end\", className)}\n {...props}\n />\n ),\n);\nCardAction.displayName = \"CardAction\";\n\n/* ------------------------------------------------------------------ */\n/* CardMedia — full-bleed image/gradient header */\n/* ------------------------------------------------------------------ */\n\nconst CardMedia = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-media\"\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n />\n ),\n);\nCardMedia.displayName = \"CardMedia\";\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n CardAction,\n CardMedia,\n cardVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ninterface CarouselProps {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n if (!context) throw new Error(\"useCarousel must be used within a <Carousel />\");\n return context;\n}\n\nfunction Carousel({\n opts,\n plugins,\n orientation = \"horizontal\",\n setApi,\n className,\n children,\n ...props\n}: CarouselProps & React.ComponentProps<\"div\">) {\n const [carouselRef, emblaApi] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"vertical\" ? \"y\" : \"x\",\n },\n plugins,\n );\n\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n emblaApi?.scrollPrev();\n }, [emblaApi]);\n\n const scrollNext = React.useCallback(() => {\n emblaApi?.scrollNext();\n }, [emblaApi]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!emblaApi) return;\n onSelect(emblaApi);\n emblaApi.on(\"reInit\", onSelect);\n emblaApi.on(\"select\", onSelect);\n return () => {\n emblaApi.off(\"reInit\", onSelect);\n emblaApi.off(\"select\", onSelect);\n };\n }, [emblaApi, onSelect]);\n\n React.useEffect(() => {\n if (!emblaApi || !setApi) return;\n setApi(emblaApi);\n }, [emblaApi, setApi]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: emblaApi,\n opts,\n orientation,\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n className={cn(\"flex\", orientation === \"vertical\" ? \"-mt-4 flex-col\" : \"-ml-4\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"vertical\" ? \"pt-4\" : \"pl-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-9 w-9 rounded-full\",\n orientation === \"vertical\"\n ? \"-top-12 left-1/2 -translate-x-1/2 rotate-90\"\n : \"-left-12 top-1/2 -translate-y-1/2\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"size-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-9 w-9 rounded-full\",\n orientation === \"vertical\"\n ? \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\"\n : \"-right-12 top-1/2 -translate-y-1/2\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"size-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { cn } from \"../lib/utils\";\nimport { tokens } from \"../tokens/tokens\";\n\nexport const CHART_COLORS = {\n primary: tokens.semantic.light.primary,\n secondary: tokens.semantic.light.success,\n tertiary: tokens.semantic.light.warning,\n muted: tokens.semantic.light.mutedForeground,\n subtle: tokens.semantic.light.border,\n dark: tokens.semantic.light.foreground,\n};\n\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n );\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\ntype ChartContainerProps = React.ComponentProps<\"div\"> & {\n config?: ChartConfig;\n height?: number;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>[\"children\"];\n};\n\nfunction ChartContainer({\n id,\n className,\n children,\n config = {},\n height,\n style,\n ...props\n}: ChartContainerProps) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [canRenderChart, setCanRenderChart] = React.useState(false);\n const initialDimension = React.useMemo(\n () => ({ width: 800, height: typeof height === \"number\" ? height : 450 }),\n [height],\n );\n const resolvedStyle =\n height === undefined ? style : ({ ...style, height } as React.CSSProperties);\n\n React.useEffect(() => {\n const element = containerRef.current;\n\n if (!element) {\n return;\n }\n\n const updateCanRenderChart = () => {\n const rect = element.getBoundingClientRect();\n setCanRenderChart(rect.width > 0 && rect.height > 0);\n };\n\n updateCanRenderChart();\n\n if (typeof ResizeObserver === \"undefined\") {\n setCanRenderChart(true);\n return;\n }\n\n const observer = new ResizeObserver(updateCanRenderChart);\n observer.observe(element);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n ref={containerRef}\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs\",\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground\",\n \"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50\",\n \"[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border\",\n \"[&_.recharts-dot[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-layer]:outline-hidden\",\n \"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-radial-bar-background-sector]:fill-muted\",\n \"[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted\",\n \"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-sector]:outline-hidden\",\n \"[&_.recharts-sector[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-surface]:outline-hidden\",\n className,\n )}\n style={resolvedStyle}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {canRenderChart ? (\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n minWidth={0}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n ) : null}\n </div>\n </ChartContext.Provider>\n );\n}\nChartContainer.displayName = \"ChartContainer\";\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, itemConfig]) => itemConfig.theme || itemConfig.color,\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join(\"\\n\")}\n}\n`,\n )\n .join(\"\\n\"),\n }}\n />\n );\n};\n\ntype ChartTooltipContentProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"children\" | \"content\"\n> & {\n active?: boolean;\n payload?: Array<Record<string, any>>;\n indicator?: \"line\" | \"dot\" | \"dashed\";\n hideLabel?: boolean;\n hideIndicator?: boolean;\n label?: React.ReactNode;\n labelFormatter?: (\n value: React.ReactNode,\n payload: Array<Record<string, any>>,\n ) => React.ReactNode;\n labelClassName?: string;\n formatter?: (\n value: unknown,\n name: unknown,\n item: Record<string, any>,\n index: number,\n payload: unknown,\n ) => React.ReactNode;\n color?: string;\n nameKey?: string;\n labelKey?: string;\n};\n\ntype ChartTooltipProps =\n | React.ComponentProps<typeof RechartsPrimitive.Tooltip>\n | ChartTooltipContentProps;\n\nfunction ChartTooltip(props: ChartTooltipProps) {\n const hasDirectTooltipPayload = \"active\" in props || \"payload\" in props;\n if (hasDirectTooltipPayload) {\n return <ChartTooltipContent {...(props as ChartTooltipContentProps)} />;\n }\n return (\n <RechartsPrimitive.Tooltip\n {...(props as React.ComponentProps<typeof RechartsPrimitive.Tooltip>)}\n />\n );\n}\nChartTooltip.displayName = \"ChartTooltip\";\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: ChartTooltipContentProps) {\n const chartContext = React.useContext(ChartContext);\n const config = chartContext?.config ?? {};\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item: Record<string, any>, index: number) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const itemPayload = item.payload as Record<string, unknown> | undefined;\n const indicatorColor =\n color ||\n (typeof itemPayload?.fill === \"string\" ? itemPayload.fill : undefined) ||\n item.color;\n\n return (\n <div\n key={`${item.dataKey || item.name || index}`}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\",\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n },\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\",\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value !== undefined && item.value !== null && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : item.value}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\nChartTooltipContent.displayName = \"ChartTooltipContent\";\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\ntype ChartLegendPayloadItem = {\n color?: string;\n dataKey?: string | number;\n value?: string | number;\n};\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> & {\n hideIcon?: boolean;\n nameKey?: string;\n payload?: ChartLegendPayloadItem[];\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n}) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className,\n )}\n >\n {payload.map((item: ChartLegendPayloadItem) => {\n const key = `${nameKey || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={`${item.value}`}\n className=\"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\nChartLegendContent.displayName = \"ChartLegendContent\";\n\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string;\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n\nexport {\n BarChart,\n Bar,\n LineChart,\n Line,\n AreaChart,\n Area,\n PieChart,\n Pie,\n Cell,\n CartesianGrid,\n XAxis,\n YAxis,\n Tooltip as RechartsTooltip,\n Legend,\n type TooltipProps as RechartsTooltipProps,\n} from \"recharts\";\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useShape } from \"../lib/shape-context\";\n\n// ─── Lazy pdfjs loader ────────────────────────────────────────────────────\n// Imports pdfjs-dist on first PDF, caches the module, and points the worker\n// at the matching CDN build. Consumers don't need bundler-side worker config.\ntype PdfjsModule = typeof import(\"pdfjs-dist\");\nlet pdfjsPromise: Promise<PdfjsModule> | null = null;\n\nasync function loadPdfjs(): Promise<PdfjsModule> {\n if (!pdfjsPromise) {\n pdfjsPromise = import(\"pdfjs-dist\").then((mod) => {\n if (!mod.GlobalWorkerOptions.workerSrc) {\n mod.GlobalWorkerOptions.workerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${mod.version}/build/pdf.worker.min.mjs`;\n }\n return mod;\n });\n }\n return pdfjsPromise;\n}\n\nasync function renderPdfFirstPage(file: File, targetWidth: number): Promise<string> {\n const pdfjs = await loadPdfjs();\n const buffer = await file.arrayBuffer();\n const pdf = await pdfjs.getDocument({ data: buffer }).promise;\n const page = await pdf.getPage(1);\n const baseViewport = page.getViewport({ scale: 1 });\n const scale = (targetWidth * 2) / baseViewport.width; // 2× for retina\n const viewport = page.getViewport({ scale });\n const canvas = document.createElement(\"canvas\");\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n await page.render({ canvas, viewport }).promise;\n return canvas.toDataURL(\"image/png\");\n}\n\n// ─── File thumbnail ───────────────────────────────────────────────────────\n// Read-only square preview of a File. Images use object-cover via\n// `URL.createObjectURL`; PDFs render the first page via pdfjs; while either is\n// resolving a spinner is shown. Self-contained (border + surface + sizing) so\n// it can be reused both inside the composer's preview row and to render\n// already-sent attachments in a chat transcript.\ninterface FileThumbnailProps {\n file?: File;\n name?: string;\n type?: string;\n /** Side length of the square thumbnail in pixels. */\n size?: number | string;\n className?: string;\n}\n\nfunction FileThumbnail({ file, name, type, size = 48, className }: FileThumbnailProps) {\n const shape = useShape();\n const numericSize = typeof size === \"number\" ? size : 48;\n\n if (!file) {\n return (\n <div className={cn(\"flex items-center gap-3 rounded-lg border border-border p-2\", className)}>\n <div\n className={cn(\n \"flex shrink-0 items-center justify-center bg-accent text-[11px] text-muted-foreground\",\n shape.item,\n )}\n style={{ width: numericSize, height: numericSize }}\n >\n {type ?? \"File\"}\n </div>\n <div className=\"min-w-0\">\n <div className=\"truncate text-[13px] text-foreground\">{name ?? \"Untitled file\"}</div>\n <div className=\"text-[12px] text-muted-foreground\">\n {typeof size === \"string\" ? size : (type ?? \"File\")}\n </div>\n </div>\n </div>\n );\n }\n\n const isImage = file.type.startsWith(\"image/\");\n const isPdf = file.type === \"application/pdf\";\n\n // Create blob URL inside an effect (NOT useMemo) so the cleanup-revoke\n // and the URL-creation stay in sync. In React 18 StrictMode dev, a\n // useMemo-created URL gets revoked by the simulated effect-cleanup but\n // useMemo doesn't re-run on the simulated re-mount (no re-render happens),\n // leaving the DOM with a stale, revoked `blob:` URL — broken image.\n // Putting both in the same effect means the simulated re-mount creates a\n // fresh URL and updates state. The one-frame \"before URL\" state is\n // covered by the bg-accent (no fallback icon shown for images), so the\n // transition is visually clean.\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n useEffect(() => {\n if (!isImage) return;\n const url = URL.createObjectURL(file);\n setImageUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [isImage, file]);\n\n // PDFs need async rendering — loading flash is unavoidable for the first\n // ~100–300ms while pdfjs loads. Falls back to the generic icon on error.\n const [pdfUrl, setPdfUrl] = useState<string | null>(null);\n useEffect(() => {\n if (!isPdf) return;\n let cancelled = false;\n renderPdfFirstPage(file, numericSize)\n .then((url) => {\n if (!cancelled) setPdfUrl(url);\n })\n .catch(() => {\n /* fall through to spinner */\n });\n return () => {\n cancelled = true;\n };\n }, [file, isPdf, numericSize]);\n\n const previewUrl = imageUrl ?? pdfUrl;\n\n return (\n <div\n className={cn(\n \"relative shrink-0 overflow-hidden bg-accent border border-border\",\n shape.bg,\n className,\n )}\n style={{ width: numericSize, height: numericSize }}\n >\n {previewUrl ? (\n // eslint-disable-next-line @next/next/no-img-element\n <img\n src={previewUrl}\n alt={file.name}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n ) : (\n // Circular spinner while we wait for the preview to be ready.\n // Used for both images (brief URL-creation gap) and PDFs (longer\n // pdfjs render). The thin ring is mostly subtle (border-border)\n // with one quadrant accented (border-t-muted-foreground) so the\n // `animate-spin` rotation reads as a moving arc.\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div\n className=\"w-6 h-6 rounded-full border-2 border-border border-t-muted-foreground animate-spin\"\n aria-label=\"Loading preview\"\n role=\"status\"\n />\n </div>\n )}\n </div>\n );\n}\n\nexport { FileThumbnail, loadPdfjs, renderPdfFirstPage };\nexport type { FileThumbnailProps };\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { useShape } from \"../lib/shape-context\";\nimport { FileThumbnail } from \"./file-thumbnail\";\n\ninterface ChatMessageProps extends Omit<HTMLMotionProps<\"div\">, \"children\"> {\n /** Who sent the message. Drives alignment and bubble colour:\n * `user` → right-aligned accent bubble, `assistant` → left-aligned plain text. */\n from: \"user\" | \"assistant\";\n /** Optional attachments rendered as square thumbnails above the bubble. */\n files?: File[];\n /** Side length of each attachment thumbnail in pixels. Defaults to 64. */\n thumbnailSize?: number;\n /** Timestamp shown in the hover-revealed meta row, before the actions.\n * User-message only — ignored on assistant replies. Caller pre-formats it\n * (e.g. `\"Wednesday 6:08 PM\"`). */\n time?: ReactNode;\n /** Icon-only action buttons shown in the hover-revealed meta row (e.g. copy,\n * edit, regenerate). Rendered next to the timestamp. */\n actions?: ReactNode;\n /** Message body. When omitted the text bubble is dropped (attachment-only message). */\n children?: ReactNode;\n}\n\n// ─── ChatMessage ──────────────────────────────────────────────────────────\n// A single transcript entry with baked-in entrance + layout motion. Pairs with\n// InputMessage's onSend: render one per sent/received message. `layout=\"position\"`\n// lets earlier messages slide up smoothly when a new one is appended.\nconst ChatMessage = forwardRef<HTMLDivElement, ChatMessageProps>(\n ({ from, files, thumbnailSize = 64, time, actions, children, className, ...props }, ref) => {\n const shape = useShape();\n const isUser = from === \"user\";\n // Timestamps are a user-message affordance; assistant replies show actions only.\n const showTime = isUser && time != null;\n\n return (\n <motion.div\n ref={ref}\n layout=\"position\"\n initial={{ opacity: 0, y: 8, scale: 0.96 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n transition={spring.moderate}\n style={{ transformOrigin: isUser ? \"bottom right\" : \"bottom left\" }}\n className={cn(\n \"group flex max-w-[80%] flex-col gap-1.5\",\n isUser ? \"items-end self-end\" : \"items-start self-start\",\n className,\n )}\n {...props}\n >\n {files && files.length > 0 && (\n <div className={cn(\"flex flex-wrap gap-1.5\", isUser ? \"justify-end\" : \"justify-start\")}>\n {files.map((file, i) => (\n <FileThumbnail\n key={`${file.name}-${file.size}-${file.lastModified}-${i}`}\n file={file}\n size={thumbnailSize}\n />\n ))}\n </div>\n )}\n {children != null && children !== \"\" && (\n <div\n className={cn(\n \"py-2 text-[14px] whitespace-pre-wrap break-words\",\n // User keeps the bubble chrome (rounded fill + horizontal padding);\n // the assistant reply is flush-left plain text with no background.\n isUser\n ? cn(\n shape.bg,\n // `text-pretty` is reserved for settled user bubbles. On the\n // assistant reply it's left off on purpose: `text-wrap: pretty`\n // re-balances the last lines on every content change, so a\n // word-by-word stream visibly reflows earlier words to new\n // lines. Default (normal) wrapping appends left-to-right and\n // stays put as the text grows.\n \"px-3.5 text-pretty bg-[color-mix(in_oklab,var(--accent),var(--background)_45%)] text-accent-foreground\",\n )\n : \"text-foreground\",\n )}\n >\n {children}\n </div>\n )}\n {(showTime || actions != null) && (\n // Meta row: timestamp + icon-only actions. Always rendered (so it\n // reserves its height and the gap between bubbles never shifts) but\n // hidden until the message is hovered or an action is focused.\n // The timestamp is a user-message affordance only — assistant replies\n // show their actions alone. User rows read date → icons left-to-right.\n <div\n className={cn(\n \"flex items-center gap-2 px-1 text-[12px] leading-none text-muted-foreground select-none\",\n \"opacity-0 pointer-events-none transition-opacity duration-150\",\n \"group-hover:opacity-100 group-hover:pointer-events-auto\",\n \"group-focus-within:opacity-100 group-focus-within:pointer-events-auto\",\n )}\n >\n {showTime && <span className=\"tabular-nums\">{time}</span>}\n {actions != null && <span className=\"flex items-center gap-0.5\">{actions}</span>}\n </div>\n )}\n </motion.div>\n );\n },\n);\n\nChatMessage.displayName = \"ChatMessage\";\n\nexport { ChatMessage };\nexport type { ChatMessageProps };\nexport default ChatMessage;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Checkbox } from \"radix-ui\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { focusRingClasses, motionClasses, pressClasses } from \"../lib/interaction\";\n\nconst CheckboxRoot = React.forwardRef<\n React.ComponentRef<typeof Checkbox.Root>,\n React.ComponentPropsWithoutRef<typeof Checkbox.Root>\n>(({ className, ...props }, ref) => (\n <Checkbox.Root\n ref={ref}\n className={cn(\n \"peer relative size-4 shrink-0 rounded border border-border bg-card\",\n motionClasses,\n pressClasses,\n \"after:absolute after:left-1/2 after:top-1/2 after:size-10 after:-translate-x-1/2 after:-translate-y-1/2\",\n focusRingClasses,\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:bg-brand-primary data-[state=checked]:border-brand-primary\",\n \"data-[state=indeterminate]:bg-brand-primary data-[state=indeterminate]:border-brand-primary\",\n className,\n )}\n {...props}\n >\n <Checkbox.Indicator className=\"flex items-center justify-center text-background data-[state=checked]:animate-in data-[state=checked]:zoom-in-75\">\n {props.checked === \"indeterminate\" ? (\n <Minus size={11} strokeWidth={3} />\n ) : (\n <Check size={11} strokeWidth={3} />\n )}\n </Checkbox.Indicator>\n </Checkbox.Root>\n));\nCheckboxRoot.displayName = \"Checkbox\";\n\nexport { CheckboxRoot as Checkbox };\n","\"use client\";\n\nimport {\n Children,\n useRef,\n useState,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n isValidElement,\n cloneElement,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { useMergeSplitBlocks, SelectionBackgrounds } from \"../hooks/use-merge-split\";\nimport { useShape } from \"../lib/shape-context\";\n\ninterface CheckboxGroupContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null);\n\nfunction useCheckboxGroup() {\n const ctx = useContext(CheckboxGroupContext);\n if (!ctx) throw new Error(\"useCheckboxGroup must be used within a CheckboxGroup\");\n return ctx;\n}\n\ninterface CheckboxGroupProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n checkedIndices?: Set<number>;\n options?: Array<{ value: string; label: string; disabled?: boolean }>;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nconst CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n ({ children, checkedIndices, options, value = [], onValueChange, className, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const groupIdCounter = useRef(0);\n const prevGroupMap = useRef(new Map<number, number>());\n\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef);\n\n useEffect(() => {\n measureItems();\n }, [measureItems, children]);\n\n // Group contiguous checked indices into runs with stable IDs\n const runs: { start: number; end: number }[] = [];\n const optionCheckedIndices = new Set(\n options\n ?.map((option, index) => (value.includes(option.value) ? index : -1))\n .filter((index) => index >= 0) ?? [],\n );\n const resolvedCheckedIndices = checkedIndices ?? optionCheckedIndices;\n const sortedChecked = [...resolvedCheckedIndices].sort((a, b) => a - b);\n for (const idx of sortedChecked) {\n const last = runs[runs.length - 1];\n if (last && idx === last.end + 1) {\n last.end = idx;\n } else {\n runs.push({ start: idx, end: idx });\n }\n }\n\n // Assign stable IDs: reuse previous ID if any member overlaps\n const usedIds = new Set<number>();\n const newGroupMap = new Map<number, number>();\n const checkedGroups = runs.map((run) => {\n let stableId: number | null = null;\n for (let i = run.start; i <= run.end; i++) {\n const prevId = prevGroupMap.current.get(i);\n if (prevId !== undefined && !usedIds.has(prevId)) {\n stableId = prevId;\n break;\n }\n }\n const id = stableId ?? ++groupIdCounter.current;\n usedIds.add(id);\n for (let i = run.start; i <= run.end; i++) {\n newGroupMap.set(i, id);\n }\n return { ...run, id };\n });\n prevGroupMap.current = newGroupMap;\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n const isHoveringOther = activeIndex !== null && !resolvedCheckedIndices.has(activeIndex);\n const shape = useShape();\n\n // Selected backgrounds, with the merge/split boundary animation when one\n // unchecked row bridges or splits two checked runs.\n const blocks = useMergeSplitBlocks(checkedGroups, itemRects, shape.mergedRadius);\n const renderedChildren =\n options?.map((option, index) => (\n <CheckboxItem\n key={option.value}\n index={index}\n label={option.label}\n checked={value.includes(option.value)}\n onToggle={() => {\n if (option.disabled) return;\n const next = value.includes(option.value)\n ? value.filter((item) => item !== option.value)\n : [...value, option.value];\n onValueChange?.(next);\n }}\n aria-disabled={option.disabled || undefined}\n />\n )) ??\n Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childProps = child.props as { index?: number };\n if (childProps.index !== undefined) return child;\n return cloneElement(child, { index } as Record<string, unknown>);\n });\n\n return (\n <CheckboxGroupContext.Provider value={{ registerItem, activeIndex }}>\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setActiveIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n // Don't clear hover when focus moves to another item within the group\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n setActiveIndex(null);\n }}\n onKeyDown={(e) => {\n // Scope to row wrappers only. The inner checkbox primitive also\n // carries role=\"checkbox\", so a bare [role=\"checkbox\"] selector\n // matches twice per row and arrows skip onto the hidden control.\n const items = Array.from(\n containerRef.current?.querySelectorAll(\"[data-proximity-index]\") ?? [],\n ) as HTMLElement[];\n const currentIdx = items.indexOf(e.target as HTMLElement);\n if (currentIdx === -1) return;\n\n if ([\"ArrowDown\", \"ArrowUp\"].includes(e.key)) {\n e.preventDefault();\n const next =\n e.key === \"ArrowDown\"\n ? (currentIdx + 1) % items.length\n : (currentIdx - 1 + items.length) % items.length;\n items[next].focus();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n }}\n role=\"group\"\n className={cn(\"relative flex flex-col w-72 max-w-full select-none\", className)}\n {...props}\n >\n {/* Selected backgrounds (merged for contiguous checked items).\n A run is normally one block; mid merge/split it is drawn as two\n abutting halves — see useMergeSplitBlocks. */}\n <SelectionBackgrounds blocks={blocks} dimmed={isHoveringOther} />\n\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className={`absolute ${shape.bg} bg-hover pointer-events-none`}\n initial={{\n opacity: 0,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={`absolute ${shape.focusRing} pointer-events-none z-20 border border-[#6B97FF]`}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {renderedChildren}\n </div>\n </CheckboxGroupContext.Provider>\n );\n },\n);\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\ninterface CheckboxItemProps extends HTMLAttributes<HTMLDivElement> {\n label: string;\n index: number;\n checked: boolean;\n onToggle: () => void;\n}\n\nconst CheckboxItem = forwardRef<HTMLDivElement, CheckboxItemProps>(\n ({ label, index, checked, onToggle, className, ...props }, ref) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const hasMounted = useRef(false);\n const { registerItem, activeIndex } = useCheckboxGroup();\n\n useEffect(() => {\n registerItem(index, internalRef.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n const isActive = activeIndex === index;\n const skipAnimation = !hasMounted.current;\n const shape = useShape();\n\n return (\n <div\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-proximity-index={index}\n tabIndex={0}\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={label}\n onClick={onToggle}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onToggle();\n }\n }}\n className={cn(\n `relative z-10 flex items-center gap-2.5 ${shape.item} px-3 py-1.5 cursor-pointer outline-none`,\n className,\n )}\n {...props}\n >\n {/* Checkbox — Radix primitive for accessibility */}\n <CheckboxPrimitive.Root\n checked={checked}\n onCheckedChange={() => onToggle()}\n tabIndex={-1}\n aria-hidden\n className=\"relative w-[15px] h-[15px] shrink-0 appearance-none bg-transparent p-0 border-0 outline-none cursor-pointer\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Border */}\n <div\n className={cn(\n \"absolute inset-0 rounded-[5px] border-solid transition-all duration-80\",\n checked\n ? \"border-[1.5px] border-transparent\"\n : isActive\n ? \"border-[1.5px] border-neutral-400 dark:border-neutral-500\"\n : \"border-[1.5px] border-border\",\n )}\n />\n {/* Check mark */}\n <AnimatePresence>\n {checked && (\n <CheckboxPrimitive.Indicator forceMount asChild>\n <motion.svg\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-foreground\"\n initial={{ opacity: 1 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 1 }}\n >\n <motion.path\n d=\"M6 12L10 16L18 8\"\n initial={{\n pathLength: skipAnimation ? 1 : 0,\n }}\n animate={{\n pathLength: 1,\n transition: {\n duration: 0.08,\n ease: \"easeOut\",\n },\n }}\n exit={{\n pathLength: 0,\n transition: {\n duration: 0.04,\n ease: \"easeIn\",\n },\n }}\n />\n </motion.svg>\n </CheckboxPrimitive.Indicator>\n )}\n </AnimatePresence>\n </CheckboxPrimitive.Root>\n\n {/* Label */}\n <span className=\"inline-grid text-[13px]\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n checked || isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: checked ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label}\n </span>\n </span>\n </div>\n );\n },\n);\n\nCheckboxItem.displayName = \"CheckboxItem\";\n\nexport { CheckboxGroup, CheckboxItem };\nexport default CheckboxGroup;\n","\"use client\";\n\nimport { Collapsible } from \"radix-ui\";\n\nconst CollapsibleRoot = Collapsible.Root;\nconst CollapsibleTrigger = Collapsible.Trigger;\nconst CollapsibleContent = Collapsible.Content;\n\nexport { CollapsibleRoot as Collapsible, CollapsibleTrigger, CollapsibleContent };\n","\"use client\";\n\nimport { createContext, useContext, type ReactNode } from \"react\";\n\nconst SurfaceContext = createContext<number>(1);\n\nexport function useSurface(): number {\n return useContext(SurfaceContext);\n}\n\nexport function SurfaceProvider({ value, children }: { value: number; children: ReactNode }) {\n return (\n <SurfaceContext.Provider value={Math.max(1, Math.min(8, value))}>\n {children}\n </SurfaceContext.Provider>\n );\n}\n","/**\n * Static lookup tables for surface tokens.\n *\n * Tailwind v4's static scanner only generates utility classes for literal\n * strings it sees in source. Template-literal class names like\n * `bg-surface-${level}` are invisible to the scanner, so the matching\n * utility never gets generated and the background renders transparent.\n *\n * Use these maps when picking a surface level at runtime:\n *\n * <div className={surfaceClasses(level)} />\n *\n * Each entry below contains the literal class name, which is enough for\n * Tailwind to detect and emit the utility.\n */\n\nexport const SURFACE_BG: Record<number, string> = {\n 1: \"bg-surface-1\",\n 2: \"bg-surface-2\",\n 3: \"bg-surface-3\",\n 4: \"bg-surface-4\",\n 5: \"bg-surface-5\",\n 6: \"bg-surface-6\",\n 7: \"bg-surface-7\",\n 8: \"bg-surface-8\",\n};\n\nexport const SURFACE_SHADOW: Record<number, string> = {\n 1: \"shadow-surface-1\",\n 2: \"shadow-surface-2\",\n 3: \"shadow-surface-3\",\n 4: \"shadow-surface-4\",\n 5: \"shadow-surface-5\",\n 6: \"shadow-surface-6\",\n 7: \"shadow-surface-7\",\n 8: \"shadow-surface-8\",\n};\n\nexport function surfaceClasses(bgLevel: number, shadowLevel: number = bgLevel): string {\n const bg = Math.max(1, Math.min(8, bgLevel));\n const shadow = Math.max(1, Math.min(8, shadowLevel));\n return `${SURFACE_BG[bg]} ${SURFACE_SHADOW[shadow]}`;\n}\n","\"use client\";\n\nimport {\n forwardRef,\n useRef,\n useState,\n useEffect,\n useLayoutEffect,\n useCallback,\n useMemo,\n type CSSProperties,\n type HTMLAttributes,\n} from \"react\";\nimport {\n motion,\n useMotionValue,\n useTransform,\n animate,\n AnimatePresence,\n type MotionValue,\n} from \"framer-motion\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype SliderValue = number | [number, number];\ntype ValuePosition = \"left\" | \"right\" | \"top\" | \"bottom\" | \"tooltip\";\n\ninterface SliderProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n value?: SliderValue | number[];\n defaultValue?: number[];\n onChange?: (value: SliderValue) => void;\n onValueChange?: (value: number[]) => void;\n min?: number;\n max?: number;\n step?: number;\n showSteps?: boolean;\n showValue?: boolean;\n valuePosition?: ValuePosition;\n formatValue?: (v: number) => string;\n label?: string;\n disabled?: boolean;\n trackClassName?: string;\n trackStyle?: CSSProperties;\n fillClassName?: string;\n fillStyle?: CSSProperties;\n hideFill?: boolean;\n thumbColor?: string;\n thumbBorderColor?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst THUMB_SIZE = 20;\nconst THUMB_SIZE_REST = 16;\nconst TRACK_BG_HEIGHT = 18;\nconst DOT_SIZE = 4;\nconst PIP_SIZE = 5;\n// Inset track BG so its rounded-end centers align with thumb centers at min/max\nconst TRACK_INSET = (THUMB_SIZE - TRACK_BG_HEIGHT) / 2;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction valueToPixel(v: number, min: number, max: number, trackWidth: number): number {\n if (max === min) return 0;\n const usable = trackWidth - THUMB_SIZE;\n return ((v - min) / (max - min)) * usable;\n}\n\nfunction pixelToValue(\n px: number,\n min: number,\n max: number,\n step: number,\n trackWidth: number,\n): number {\n const usable = trackWidth - THUMB_SIZE;\n if (usable <= 0) return min;\n const raw = (px / usable) * (max - min) + min;\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.max(min, Math.min(max, snapped));\n}\n\nfunction toRadixValue(value: SliderValue): number[] {\n return Array.isArray(value) ? value : [value];\n}\n\n// ---------------------------------------------------------------------------\n// ValueDisplay (internal)\n// ---------------------------------------------------------------------------\n\ninterface ValueDisplayProps {\n values: number[];\n editingIndex: number | null;\n onStartEdit: (index: number) => void;\n onCommitEdit: (index: number, v: number) => void;\n onCancelEdit: () => void;\n min: number;\n max: number;\n step: number;\n formatValue: (v: number) => string;\n label?: string;\n isRange: boolean;\n isInteracting: boolean;\n}\n\nfunction ValueDisplay({\n values,\n editingIndex,\n onStartEdit,\n onCommitEdit,\n onCancelEdit,\n min,\n max,\n step,\n formatValue,\n label,\n isRange,\n isInteracting,\n}: ValueDisplayProps) {\n const shape = useShape();\n const [inputValue, setInputValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (editingIndex !== null) {\n setInputValue(String(values[editingIndex]));\n requestAnimationFrame(() => inputRef.current?.select());\n }\n }, [editingIndex]);\n\n const commitEdit = useCallback(\n (index: number) => {\n const parsed = parseFloat(inputValue);\n if (!isNaN(parsed)) {\n const clamped = Math.max(min, Math.min(max, parsed));\n const snapped = Math.round((clamped - min) / step) * step + min;\n onCommitEdit(index, snapped);\n } else {\n onCancelEdit();\n }\n },\n [inputValue, min, max, step, onCommitEdit, onCancelEdit],\n );\n\n const renderValue = (index: number) => {\n if (editingIndex === index) {\n return (\n <span className=\"inline-grid text-[13px]\">\n {/* Ghost for layout stability — widest possible value */}\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.medium }}\n aria-hidden=\"true\"\n >\n {label ? `${label}: ` : \"\"}\n {formatValue(max)}\n </span>\n <span className=\"col-start-1 row-start-1 flex items-center gap-1\">\n {label && <span className=\"text-muted-foreground\">{label}:</span>}\n <input\n ref={inputRef}\n type=\"number\"\n value={inputValue}\n min={min}\n max={max}\n step={step}\n onChange={(e) => setInputValue(e.target.value)}\n onBlur={() => commitEdit(index)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commitEdit(index);\n if (e.key === \"Escape\") onCancelEdit();\n }}\n aria-label={`Edit slider value${isRange ? (index === 0 ? \" (start)\" : \" (end)\") : \"\"}`}\n className={cn(\n \"w-[5ch] bg-transparent text-foreground outline-none border-b border-border text-center\",\n shape.input,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n />\n </span>\n </span>\n );\n }\n\n return (\n <span className=\"cursor-text select-none\" onClick={() => onStartEdit(index)}>\n {formatValue(values[index])}\n </span>\n );\n };\n\n const widestValue = isRange\n ? `${label ? `${label}: ` : \"\"}${formatValue(max)} — ${formatValue(max)}`\n : `${label ? `${label}: ` : \"\"}${formatValue(max)}`;\n\n return (\n <span\n className={cn(\n \"inline-grid shrink-0 text-[13px] leading-none text-muted-foreground transition-[font-variation-settings] duration-100\",\n \"tabular-nums\",\n )}\n style={{\n fontVariationSettings: isInteracting ? fontWeights.medium : fontWeights.normal,\n }}\n >\n {/* Invisible ghost — reserves width of widest possible value */}\n <span\n className=\"col-start-1 row-start-1 invisible whitespace-nowrap\"\n style={{ fontVariationSettings: fontWeights.medium }}\n aria-hidden=\"true\"\n >\n {widestValue}\n </span>\n <span className=\"col-start-1 row-start-1 whitespace-nowrap\">\n {label && editingIndex === null && <span className=\"text-muted-foreground\">{label}: </span>}\n {isRange ? (\n <>\n <span className=\"sr-only\">\n {values[0]} - {values[1]}\n </span>\n {renderValue(0)}\n <span className=\"mx-1 text-muted-foreground/50\" aria-hidden=\"true\">\n -\n </span>\n {renderValue(1)}\n </>\n ) : (\n renderValue(0)\n )}\n </span>\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TooltipValue (internal)\n// ---------------------------------------------------------------------------\n\ninterface TooltipValueProps {\n value: number;\n formatValue: (v: number) => string;\n motionX: MotionValue<number>;\n}\n\nfunction TooltipValue({ value, formatValue, motionX }: TooltipValueProps) {\n const shape = useShape();\n const tooltipX = useTransform(motionX, (x) => x + THUMB_SIZE / 2);\n return (\n <motion.div\n className=\"absolute -translate-x-1/2 pointer-events-none z-20\"\n style={{\n x: tooltipX,\n top: -16,\n }}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 4, transition: spring.fast.exit }}\n transition={spring.fast}\n >\n <span\n className={cn(\n \"text-[12px] text-background tabular-nums whitespace-nowrap bg-foreground px-2 py-1\",\n shape.bg,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {formatValue(value)}\n </span>\n </motion.div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Slider\n// ---------------------------------------------------------------------------\n\nconst Slider = forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n showSteps = false,\n showValue = true,\n valuePosition = \"left\",\n formatValue = String,\n label,\n disabled = false,\n trackClassName,\n trackStyle,\n fillClassName,\n fillStyle,\n hideFill = false,\n thumbColor,\n thumbBorderColor,\n className,\n ...props\n },\n ref,\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = useState<SliderValue>(() => {\n const initial = defaultValue ?? [min];\n return initial.length > 1\n ? ([initial[0] ?? min, initial[1] ?? max] as [number, number])\n : (initial[0] ?? min);\n });\n const resolvedValue =\n value === undefined\n ? uncontrolledValue\n : Array.isArray(value)\n ? value.length > 1\n ? ([value[0] ?? min, value[1] ?? max] as [number, number])\n : (value[0] ?? min)\n : value;\n const emitResolvedValue = useCallback(\n (nextValue: SliderValue) => {\n if (value === undefined) setUncontrolledValue(nextValue);\n onChange?.(nextValue);\n onValueChange?.(toRadixValue(nextValue));\n },\n [value, onChange, onValueChange],\n );\n const isRange = Array.isArray(resolvedValue);\n const values = toRadixValue(resolvedValue);\n const shape = useShape();\n\n // --- Refs ---\n const trackRef = useRef<HTMLDivElement>(null);\n const trackWidthRef = useRef(0);\n const dragging = useRef(false);\n const activeDragThumb = useRef<number>(0);\n const valuesRef = useRef(values);\n const minRef = useRef(min);\n const maxRef = useRef(max);\n valuesRef.current = values;\n minRef.current = min;\n maxRef.current = max;\n\n // --- State ---\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const [editingIndex, setEditingIndex] = useState<number | null>(null);\n const [hoverPreview, setHoverPreview] = useState<{\n left: number;\n width: number;\n snappedValue: number;\n cursorX: number;\n } | null>(null);\n const [focusedThumb, setFocusedThumb] = useState<number | null>(null);\n const [showHoverTooltip, setShowHoverTooltip] = useState(false);\n const hoverDelayRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Show hover tooltip after 100ms delay\n useEffect(() => {\n if (isHovered) {\n hoverDelayRef.current = setTimeout(() => setShowHoverTooltip(true), 100);\n } else {\n if (hoverDelayRef.current) clearTimeout(hoverDelayRef.current);\n setShowHoverTooltip(false);\n }\n return () => {\n if (hoverDelayRef.current) clearTimeout(hoverDelayRef.current);\n };\n }, [isHovered]);\n\n // --- Motion values ---\n const motionX0 = useMotionValue(0);\n const motionX1 = useMotionValue(0);\n\n // --- Derived motion values for fill ---\n const fillLeft = useTransform(motionX0, (x) =>\n isRange ? x + THUMB_SIZE / 2 - TRACK_INSET : 0,\n );\n const fillWidthSingle = useTransform(motionX0, (x) => x + THUMB_SIZE / 2 - TRACK_INSET);\n const fillWidthRange = useTransform(\n [motionX0, motionX1] as MotionValue<number>[],\n ([x0, x1]) => (x1 as number) - (x0 as number),\n );\n const fillWidth = isRange ? fillWidthRange : fillWidthSingle;\n\n // --- Step dots mask (hides dots on filled side, like SliderComfortable pips) ---\n const stepDotsMaskSingle = useTransform(motionX0, (x) => {\n const edge = x + THUMB_SIZE / 2;\n return `linear-gradient(to right, transparent ${edge}px, black ${edge + 2}px)`;\n });\n const stepDotsMaskRange = useTransform(\n [motionX0, motionX1] as MotionValue<number>[],\n ([x0, x1]) => {\n const left = (x0 as number) + THUMB_SIZE / 2;\n const right = (x1 as number) + THUMB_SIZE / 2;\n return `linear-gradient(to right, black ${left - 2}px, transparent ${left}px, transparent ${right}px, black ${right + 2}px)`;\n },\n );\n const stepDotsMask = isRange ? stepDotsMaskRange : stepDotsMaskSingle;\n\n // --- Hover preview computation ---\n const computeHoverPreview = useCallback(\n (cursorX: number, trackWidth: number) => {\n // cursorX and trackWidth are in layout space (offsetWidth-relative),\n // unaffected by ancestor CSS transforms. THUMB_SIZE / TRACK_INSET are\n // also layout-space, so the math below is consistent end-to-end.\n const usable = trackWidth - THUMB_SIZE;\n const rawPx = cursorX - THUMB_SIZE / 2;\n const clampedPx = Math.max(0, Math.min(usable, rawPx));\n const rawVal = usable > 0 ? (clampedPx / usable) * (max - min) + min : min;\n const snappedVal = Math.max(\n min,\n Math.min(max, Math.round((rawVal - min) / step) * step + min),\n );\n const snappedPercent = max === min ? 0 : (snappedVal - min) / (max - min);\n const snappedX = THUMB_SIZE / 2 + snappedPercent * usable;\n\n // Find nearest thumb center\n const c0 = motionX0.get() + THUMB_SIZE / 2;\n const c1 = motionX1.get() + THUMB_SIZE / 2;\n const nearestIdx = isRange\n ? Math.abs(snappedX - c0) <= Math.abs(snappedX - c1)\n ? 0\n : 1\n : 0;\n const nearest = nearestIdx === 0 ? c0 : c1;\n\n // Extend hover bar to track edges at extremes so there's no gap\n const edgeX = snappedVal === min ? 0 : snappedVal === max ? trackWidth : snappedX;\n const left = Math.min(nearest, edgeX);\n const width = Math.abs(edgeX - nearest);\n setHoverPreview({ left, width, snappedValue: snappedVal, cursorX: snappedX });\n },\n [min, max, step, isRange, motionX0, motionX1],\n );\n\n // --- Initial sync (before paint) ---\n const initialSyncDone = useRef(false);\n const [ready, setReady] = useState(false);\n useLayoutEffect(() => {\n const el = trackRef.current;\n if (!el || initialSyncDone.current) return;\n const w = el.offsetWidth;\n trackWidthRef.current = w;\n const px0 = valueToPixel(values[0], min, max, w);\n motionX0.set(px0);\n if (isRange && values[1] !== undefined) {\n const px1 = valueToPixel(values[1], min, max, w);\n motionX1.set(px1);\n }\n initialSyncDone.current = true;\n setReady(true);\n }, []);\n\n // --- Track width measurement (resize only) ---\n useEffect(() => {\n const el = trackRef.current;\n if (!el) return;\n const ro = new ResizeObserver(([entry]) => {\n const w = entry.contentRect.width;\n trackWidthRef.current = w;\n if (!dragging.current && initialSyncDone.current) {\n const v = valuesRef.current;\n const mn = minRef.current;\n const mx = maxRef.current;\n const px0 = valueToPixel(v[0], mn, mx, w);\n animate(motionX0, px0, spring.moderate);\n if (isRange && v[1] !== undefined) {\n const px1 = valueToPixel(v[1], mn, mx, w);\n animate(motionX1, px1, spring.moderate);\n }\n }\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [isRange, motionX0, motionX1]);\n\n // --- Sync motion values on value change (keyboard, programmatic) ---\n useEffect(() => {\n if (!initialSyncDone.current) return;\n if (dragging.current) return;\n const tw = trackWidthRef.current;\n if (tw <= 0) return;\n const px0 = valueToPixel(values[0], min, max, tw);\n animate(motionX0, px0, spring.moderate);\n if (isRange && values[1] !== undefined) {\n const px1 = valueToPixel(values[1], min, max, tw);\n animate(motionX1, px1, spring.moderate);\n }\n }, [values, min, max, isRange, motionX0, motionX1]);\n\n // --- Range crossing prevention ---\n const clampForRange = useCallback(\n (px: number, thumbIndex: number): number => {\n if (!isRange) return px;\n if (thumbIndex === 0) {\n return Math.min(px, motionX1.get() - THUMB_SIZE * 0.5);\n } else {\n return Math.max(px, motionX0.get() + THUMB_SIZE * 0.5);\n }\n },\n [isRange, motionX0, motionX1],\n );\n\n // --- Emit value change ---\n const emitChange = useCallback(\n (thumbIndex: number, newValue: number) => {\n if (isRange) {\n const newValues: [number, number] = [...(values as [number, number])];\n newValues[thumbIndex] = newValue;\n emitResolvedValue(newValues);\n } else {\n emitResolvedValue(newValue);\n }\n },\n [isRange, values, emitResolvedValue],\n );\n\n // --- Pointer handlers on track ---\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation(); // Prevent Radix from also handling the drag\n\n const trackEl = trackRef.current;\n if (!trackEl) return;\n const trackRect = trackEl.getBoundingClientRect();\n const layoutWidth = trackEl.offsetWidth;\n if (layoutWidth <= 0 || trackRect.width <= 0) return;\n // Normalize cursor to layout space so it matches motionX (which is\n // rendered as a CSS-pixel transform), even under ancestor CSS scale.\n const scale = trackRect.width / layoutWidth;\n const localX = (e.clientX - trackRect.left) / scale - THUMB_SIZE / 2;\n const clamped = Math.max(0, Math.min(layoutWidth - THUMB_SIZE, localX));\n\n // Determine which thumb to drag\n if (isRange) {\n const dist0 = Math.abs(clamped - motionX0.get());\n const dist1 = Math.abs(clamped - motionX1.get());\n activeDragThumb.current = dist0 <= dist1 ? 0 : 1;\n } else {\n activeDragThumb.current = 0;\n }\n\n dragging.current = true;\n setIsPressed(true);\n\n const motionX = activeDragThumb.current === 0 ? motionX0 : motionX1;\n\n // Snap to step grid immediately\n const snappedValue = pixelToValue(clamped, min, max, step, layoutWidth);\n const snappedPx = valueToPixel(snappedValue, min, max, layoutWidth);\n\n // Clamp for range crossing\n const finalPx = clampForRange(snappedPx, activeDragThumb.current);\n // Spring-animate thumb to clicked position\n animate(motionX, finalPx, spring.moderate);\n\n // Update value\n const finalValue = pixelToValue(finalPx, min, max, step, layoutWidth);\n emitChange(activeDragThumb.current, finalValue);\n\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [disabled, isRange, min, max, step, motionX0, motionX1, clampForRange, emitChange],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!dragging.current) return;\n e.stopPropagation();\n const trackEl = trackRef.current;\n if (!trackEl) return;\n const trackRect = trackEl.getBoundingClientRect();\n const layoutWidth = trackEl.offsetWidth;\n if (layoutWidth <= 0 || trackRect.width <= 0) return;\n const scale = trackRect.width / layoutWidth;\n const localX = (e.clientX - trackRect.left) / scale - THUMB_SIZE / 2;\n const clamped = Math.max(0, Math.min(layoutWidth - THUMB_SIZE, localX));\n\n const motionX = activeDragThumb.current === 0 ? motionX0 : motionX1;\n\n // Snap to step grid during drag\n const snappedValue = pixelToValue(clamped, min, max, step, layoutWidth);\n const snappedPx = valueToPixel(snappedValue, min, max, layoutWidth);\n const finalPx = clampForRange(snappedPx, activeDragThumb.current);\n motionX.set(finalPx);\n\n const finalValue = pixelToValue(finalPx, min, max, step, layoutWidth);\n emitChange(activeDragThumb.current, finalValue);\n },\n [min, max, step, motionX0, motionX1, clampForRange, emitChange],\n );\n\n const handlePointerUp = useCallback(() => {\n if (!dragging.current) return;\n dragging.current = false;\n setIsPressed(false);\n setHoverPreview(null);\n\n // Spring settle to final quantized position\n const tw = trackWidthRef.current;\n const motionX = activeDragThumb.current === 0 ? motionX0 : motionX1;\n const currentPx = motionX.get();\n const snapped = pixelToValue(currentPx, min, max, step, tw);\n const snappedPx = valueToPixel(snapped, min, max, tw);\n animate(motionX, snappedPx, spring.moderate);\n }, [min, max, step, motionX0, motionX1]);\n\n // --- Radix keyboard handler ---\n const handleRadixChange = useCallback(\n (newValues: number[]) => {\n if (dragging.current) return;\n if (isRange) {\n emitResolvedValue(newValues as [number, number]);\n } else {\n emitResolvedValue(newValues[0] ?? min);\n }\n },\n [isRange, emitResolvedValue, min],\n );\n\n // --- Click-to-edit handlers ---\n const handleStartEdit = useCallback((index: number) => {\n setEditingIndex(index);\n }, []);\n\n const handleCommitEdit = useCallback(\n (index: number, v: number) => {\n emitChange(index, v);\n setEditingIndex(null);\n },\n [emitChange],\n );\n\n const handleCancelEdit = useCallback(() => {\n setEditingIndex(null);\n }, []);\n\n // --- Step dots ---\n const stepDots = useMemo(\n () =>\n showSteps\n ? Array.from({ length: Math.round((max - min) / step) + 1 }, (_, i) => {\n const v = min + i * step;\n const percent = (v - min) / (max - min);\n return { value: v, percent };\n })\n : [],\n [showSteps, min, max, step],\n );\n\n // --- Interaction state for tooltip ---\n const isInteracting = isHovered || isPressed;\n\n // --- Value display component ---\n const valueDisplay = showValue && valuePosition !== \"tooltip\" && (\n <ValueDisplay\n values={values}\n editingIndex={editingIndex}\n onStartEdit={handleStartEdit}\n onCommitEdit={handleCommitEdit}\n onCancelEdit={handleCancelEdit}\n min={min}\n max={max}\n step={step}\n formatValue={formatValue}\n {...(label !== undefined ? { label } : {})}\n isRange={isRange}\n isInteracting={isInteracting}\n />\n );\n\n // --- Render visual thumb (not Radix — purely visual) ---\n const renderVisualThumb = (index: number) => {\n const motionX = index === 0 ? motionX0 : motionX1;\n return (\n <motion.span\n key={`visual-thumb-${index}`}\n className=\"flex items-center justify-center pointer-events-none\"\n style={{\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n marginTop: -THUMB_SIZE / 2,\n x: motionX,\n position: \"absolute\",\n top: \"50%\",\n left: 0,\n zIndex: 10,\n }}\n initial={false}\n >\n <motion.span\n className=\"block rounded-full\"\n initial={false}\n animate={{\n width: THUMB_SIZE_REST,\n height: THUMB_SIZE_REST,\n }}\n transition={spring.fast}\n style={{\n backgroundColor: thumbColor ?? \"white\",\n boxShadow: \"0 1px 2px rgba(0,0,0,0.1)\",\n border: thumbBorderColor ? `1px solid ${thumbBorderColor}` : undefined,\n }}\n />\n {/* Focus ring */}\n <motion.span\n className=\"absolute rounded-full border border-[#6B97FF] pointer-events-none\"\n initial={false}\n animate={{\n opacity: focusedThumb === index ? 1 : 0,\n width: THUMB_SIZE + 4,\n height: THUMB_SIZE + 4,\n }}\n transition={spring.fast}\n />\n </motion.span>\n );\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-0 w-full select-none touch-none overflow-visible\",\n valuePosition === \"left\" || valuePosition === \"right\"\n ? \"flex-row items-center gap-2 mb-2\"\n : \"flex-col\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n {...props}\n >\n {/* Top / Left value */}\n {(valuePosition === \"top\" || valuePosition === \"left\") && valueDisplay}\n\n {/* Track area */}\n <div\n className=\"relative flex-1 overflow-visible\"\n style={{\n height:\n valuePosition === \"left\" || valuePosition === \"right\"\n ? THUMB_SIZE + 16\n : THUMB_SIZE + (valuePosition === \"tooltip\" ? 16 : 0),\n paddingTop: valuePosition === \"tooltip\" ? 16 : 0,\n }}\n onPointerEnter={() => setIsHovered(true)}\n onPointerLeave={() => {\n setIsHovered(false);\n setHoverPreview(null);\n }}\n onMouseMove={(e) => {\n if (dragging.current) return;\n const trackEl = trackRef.current;\n if (!trackEl) return;\n const trackRect = trackEl.getBoundingClientRect();\n const layoutWidth = trackEl.offsetWidth;\n if (layoutWidth <= 0 || trackRect.width <= 0) return;\n // Normalize to layout space so the formula's THUMB_SIZE / TRACK_INSET\n // constants (layout px) match the cursor's coordinate space, even\n // when an ancestor applies a CSS scale transform (e.g. /demo).\n const scale = trackRect.width / layoutWidth;\n const layoutX = (e.clientX - trackRect.left) / scale;\n const clamped = Math.max(0, Math.min(layoutWidth, layoutX));\n computeHoverPreview(clamped, layoutWidth);\n }}\n >\n {/* Tooltip values */}\n {showValue && valuePosition === \"tooltip\" && (\n <AnimatePresence>\n {isInteracting && (\n <TooltipValue\n key=\"tooltip-0\"\n value={values[0]}\n formatValue={formatValue}\n motionX={motionX0}\n />\n )}\n {isInteracting && isRange && values[1] !== undefined && (\n <TooltipValue\n key=\"tooltip-1\"\n value={values[1]}\n formatValue={formatValue}\n motionX={motionX1}\n />\n )}\n </AnimatePresence>\n )}\n\n {/* Radix Slider — invisible, provides ARIA + keyboard nav */}\n <SliderPrimitive.Root\n value={values}\n onValueChange={handleRadixChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={label}\n className=\"absolute inset-0 opacity-0 pointer-events-none\"\n style={{ height: THUMB_SIZE }}\n >\n <SliderPrimitive.Track className=\"w-full h-full\">\n <SliderPrimitive.Range />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className=\"block outline-none\"\n style={{ width: THUMB_SIZE, height: THUMB_SIZE }}\n onFocus={(e) => {\n if (e.currentTarget.matches(\":focus-visible\")) setFocusedThumb(0);\n }}\n onBlur={() => setFocusedThumb((prev) => (prev === 0 ? null : prev))}\n />\n {isRange && (\n <SliderPrimitive.Thumb\n className=\"block outline-none\"\n style={{ width: THUMB_SIZE, height: THUMB_SIZE }}\n onFocus={(e) => {\n if (e.currentTarget.matches(\":focus-visible\")) setFocusedThumb(1);\n }}\n onBlur={() => setFocusedThumb((prev) => (prev === 1 ? null : prev))}\n />\n )}\n </SliderPrimitive.Root>\n\n {/* Visual track with pointer handlers */}\n <div\n ref={trackRef}\n className=\"relative w-full cursor-ew-resize py-2\"\n style={{ height: THUMB_SIZE + 16, opacity: ready ? 1 : 0 }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n >\n {/* Extended hit area — 8px beyond each edge */}\n <div\n className=\"absolute cursor-ew-resize\"\n style={{ left: -8, right: -8, top: 0, bottom: 0 }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n />\n {/* Hover value tooltip */}\n <AnimatePresence>\n {hoverPreview && showHoverTooltip && !isPressed && valuePosition !== \"tooltip\" && (\n <motion.div\n key=\"hover-tooltip\"\n className=\"absolute -translate-x-1/2 pointer-events-none z-20\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 4, transition: spring.fast.exit }}\n transition={spring.fast}\n style={{\n left: hoverPreview.cursorX,\n top: -20,\n }}\n >\n <span\n className={cn(\n \"text-[12px] text-background tabular-nums whitespace-nowrap bg-foreground px-2 py-1\",\n shape.bg,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {formatValue(hoverPreview.snappedValue)}\n </span>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Track background */}\n <motion.div\n className={cn(\n \"absolute border border-border overflow-hidden rounded-full\",\n trackClassName,\n )}\n initial={false}\n animate={{\n height: TRACK_BG_HEIGHT,\n top: 8 + (THUMB_SIZE - TRACK_BG_HEIGHT) / 2,\n }}\n transition={spring.fast}\n style={\n {\n left: TRACK_INSET,\n right: TRACK_INSET,\n backgroundColor: \"transparent\",\n ...trackStyle,\n } as any\n }\n >\n {/* Filled range */}\n {!hideFill && (\n <motion.div\n className={cn(\"absolute h-full bg-selected/50 dark:bg-accent/40\", fillClassName)}\n style={\n {\n left: fillLeft,\n width: fillWidth,\n ...fillStyle,\n } as any\n }\n />\n )}\n\n {/* Hover preview */}\n <motion.div\n className=\"absolute h-full pointer-events-none z-[2]\"\n initial={false}\n animate={{\n opacity: hoverPreview && !isPressed ? 1 : 0,\n }}\n transition={{\n opacity: { duration: 0.15 },\n }}\n style={{\n left: hoverPreview ? hoverPreview.left - TRACK_INSET : 0,\n width: hoverPreview ? hoverPreview.width : 0,\n borderRadius:\n hoverPreview && hoverPreview.cursorX > hoverPreview.left\n ? \"0 9999px 9999px 0\"\n : \"9999px 0 0 9999px\",\n backgroundColor: \"color-mix(in srgb, var(--color-accent) 40%, transparent)\",\n }}\n />\n </motion.div>\n\n {/* Step dots — masked so filled side is hidden */}\n {stepDots.length > 0 && (\n <motion.div\n className=\"absolute left-0 right-0 pointer-events-none\"\n style={{\n top: 8 + (THUMB_SIZE - TRACK_BG_HEIGHT) / 2,\n height: TRACK_BG_HEIGHT,\n WebkitMaskImage: stepDotsMask,\n maskImage: stepDotsMask,\n }}\n >\n {stepDots.map(({ value: v, percent }) => (\n <div\n key={v}\n className=\"absolute pointer-events-none flex items-center justify-center\"\n style={{\n left: `calc(${THUMB_SIZE / 2}px + ${percent} * (100% - ${THUMB_SIZE}px))`,\n top: \"50%\",\n width: 0,\n height: 0,\n }}\n >\n <motion.div\n className=\"rounded-full flex-shrink-0\"\n initial={false}\n animate={{\n width: isHovered ? DOT_SIZE * 1.25 : DOT_SIZE,\n height: isHovered ? DOT_SIZE * 1.25 : DOT_SIZE,\n }}\n transition={spring.moderate}\n style={{\n backgroundColor: \"var(--muted-foreground)\",\n opacity: 0.3,\n }}\n />\n </div>\n ))}\n </motion.div>\n )}\n\n {/* Visual thumbs */}\n {renderVisualThumb(0)}\n {isRange && renderVisualThumb(1)}\n </div>\n </div>\n\n {/* Bottom / Right value */}\n {(valuePosition === \"bottom\" || valuePosition === \"right\") && valueDisplay}\n </div>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n\n// ---------------------------------------------------------------------------\n// SliderComfortable\n// ---------------------------------------------------------------------------\n\ninterface SliderComfortableProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n | \"onChange\"\n | \"defaultValue\"\n | \"onDrag\"\n | \"onDragStart\"\n | \"onDragEnd\"\n | \"onDragOver\"\n | \"onAnimationStart\"\n> {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n variant?: \"pips\" | \"scrubber\";\n label?: string;\n formatValue?: (v: number) => string;\n disabled?: boolean;\n}\n\nconst SliderComfortable = forwardRef<HTMLDivElement, SliderComfortableProps>(\n (\n {\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n variant = \"pips\",\n label,\n formatValue = String,\n disabled = false,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n const handleDragging = useRef(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [hoverPreview, setHoverPreview] = useState<{\n left: number;\n width: number;\n snappedValue: number;\n cursorX: number;\n } | null>(null);\n const [showHoverTooltip, setShowHoverTooltip] = useState(false);\n const hoverDelayRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shape = useShape();\n\n // Show hover tooltip after 100ms delay\n useEffect(() => {\n if (isHovered) {\n hoverDelayRef.current = setTimeout(() => setShowHoverTooltip(true), 100);\n } else {\n if (hoverDelayRef.current) clearTimeout(hoverDelayRef.current);\n setShowHoverTooltip(false);\n }\n return () => {\n if (hoverDelayRef.current) clearTimeout(hoverDelayRef.current);\n };\n }, [isHovered]);\n\n const mergedRef = useCallback(\n (el: HTMLDivElement | null) => {\n containerRef.current = el;\n if (typeof ref === \"function\") (ref as React.RefCallback<HTMLDivElement>)(el);\n else if (ref) (ref as React.RefObject<HTMLDivElement | null>).current = el;\n },\n [ref],\n );\n\n const pipSteps = useMemo(\n () => Array.from({ length: Math.round((max - min) / step) + 1 }, (_, i) => min + i * step),\n [min, max, step],\n );\n const pipCount = pipSteps.length;\n\n // Fill motion value\n const fillPercent = useMotionValue(\n max === min ? 0 : Math.max(0, Math.min(1, (value - min) / (max - min))),\n );\n // Small offset when value is at min so the handle line stays visible\n const zeroTarget = variant === \"pips\" ? 8 : 17;\n const zeroOffset = useMotionValue(value === min ? zeroTarget : 0);\n\n const fillWidthStyle = useTransform(fillPercent, (p) => `${p * 100}%`);\n const handleLeftStyle = useTransform(\n [fillPercent, zeroOffset] as MotionValue<number>[],\n ([p, zo]) => `calc(${(p as number) * 100}% - 8px + ${zo as number}px)`,\n );\n const handleLineLeftStyle = useTransform(\n [fillPercent, zeroOffset] as MotionValue<number>[],\n ([p, zo]) => `calc(${(p as number) * 100}% - 9px + ${zo as number}px)`,\n );\n // Pips-specific: offset by px-3 (12px) padding so fill edge aligns with active pip center\n const pipsFillWidthStyle = useTransform(\n [fillPercent, zeroOffset] as MotionValue<number>[],\n ([p, zo]) =>\n `calc(${(p as number) * 100}% + ${20 - 20 * (p as number) - (zo as number) * 2.5}px)`,\n );\n const pipsHandleLineLeftStyle = useTransform(\n fillPercent,\n (p) => `calc(${p * 100}% + ${11 - 24 * p}px)`,\n );\n const pipsMaskStyle = useTransform(\n [fillPercent, zeroOffset] as MotionValue<number>[],\n ([p, zo]) => {\n const offset = 20 - 20 * (p as number) - (zo as number) * 2.5;\n return `linear-gradient(to right, transparent calc(${(p as number) * 100}% + ${offset}px), black calc(${(p as number) * 100}% + ${offset + 2}px))`;\n },\n );\n\n // --- Hover preview computation ---\n const computeHoverPreview = useCallback(\n (clientX: number) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n // Use clientWidth (padding box) — CSS % and absolute left/width are relative to it\n const w = el.clientWidth;\n if (w <= 0 || rect.width <= 0) return;\n // Normalize cursor to layout space so it matches `w` (layout, padding\n // box). offsetWidth is the layout border-box; the difference vs `w` is\n // the horizontal border contribution split across both sides.\n const scale = rect.width / el.offsetWidth;\n const borderLeftLayout = (el.offsetWidth - w) / 2;\n const visualX = clientX - rect.left;\n const layoutX = visualX / scale - borderLeftLayout;\n const clamped = Math.max(0, Math.min(w, layoutX));\n\n // Snap to nearest step value\n let snappedVal: number;\n if (variant === \"pips\") {\n if (pipCount <= 1) return;\n const index = Math.max(\n 0,\n Math.min(pipCount - 1, Math.round((clamped / w) * (pipCount - 1))),\n );\n snappedVal = pipSteps[index];\n } else {\n const raw = min + (clamped / w) * (max - min);\n snappedVal = Math.max(min, Math.min(max, Math.round((raw - min) / step) * step + min));\n }\n const snappedPercent = max === min ? 0 : (snappedVal - min) / (max - min);\n const snappedX = snappedPercent * w;\n\n // Current handle position — for pips, match the visual fill edge offset\n const currentPercent = fillPercent.get();\n let handleX: number;\n if (variant === \"pips\") {\n const zo = zeroOffset.get();\n handleX = currentPercent * w + (20 - 20 * currentPercent - zo * 2.5);\n } else {\n handleX = currentPercent * w;\n }\n\n // Extend hover bar to container edges at extremes so there's no gap\n const edgeX = snappedVal === min ? 0 : snappedVal === max ? w : snappedX;\n const left = Math.min(handleX, edgeX);\n const width = Math.abs(edgeX - handleX);\n setHoverPreview({ left, width, snappedValue: snappedVal, cursorX: snappedX });\n },\n [variant, pipSteps, pipCount, min, max, step, fillPercent, zeroOffset],\n );\n\n // Sync fill on programmatic value change\n useEffect(() => {\n if (dragging.current || handleDragging.current) return;\n const percent = max === min ? 0 : Math.max(0, Math.min(1, (value - min) / (max - min)));\n animate(fillPercent, percent, spring.fast);\n animate(zeroOffset, value === min ? zeroTarget : 0, spring.fast);\n }, [value, min, max, variant, fillPercent, zeroOffset, zeroTarget]);\n\n const getValueFromX = useCallback(\n (clientX: number) => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return min;\n const x = clientX - rect.left;\n const clamped = Math.max(0, Math.min(rect.width, x));\n if (variant === \"pips\") {\n if (pipCount <= 1) return min;\n const index = Math.max(\n 0,\n Math.min(pipCount - 1, Math.round((clamped / rect.width) * (pipCount - 1))),\n );\n return pipSteps[index];\n } else {\n const raw = min + (clamped / rect.width) * (max - min);\n const snapped = Math.round((raw - min) / step) * step + min;\n return Math.max(min, Math.min(max, snapped));\n }\n },\n [variant, pipSteps, pipCount, min, max, step],\n );\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n e.preventDefault();\n dragging.current = true;\n setIsPressed(true);\n const newVal = getValueFromX(e.clientX);\n onChange(newVal);\n const newPercent = Math.max(0, Math.min(1, (newVal - min) / (max - min)));\n animate(fillPercent, newPercent, spring.fast);\n animate(zeroOffset, newVal === min ? zeroTarget : 0, spring.fast);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [disabled, getValueFromX, onChange, fillPercent, zeroOffset, zeroTarget, min, max],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!dragging.current) return;\n const newVal = getValueFromX(e.clientX);\n onChange(newVal);\n const newPercent = Math.max(0, Math.min(1, (newVal - min) / (max - min)));\n if (variant === \"scrubber\") {\n fillPercent.set(newPercent);\n } else {\n animate(fillPercent, newPercent, spring.fast);\n }\n animate(zeroOffset, newVal === min ? zeroTarget : 0, spring.fast);\n },\n [getValueFromX, onChange, variant, fillPercent, zeroOffset, zeroTarget, min, max],\n );\n\n const handlePointerUp = useCallback(() => {\n dragging.current = false;\n setIsPressed(false);\n setHoverPreview(null);\n }, []);\n\n // Resize handle drag handlers (direct cursor position)\n const handleResizePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n handleDragging.current = true;\n setIsPressed(true);\n const newVal = getValueFromX(e.clientX);\n onChange(newVal);\n fillPercent.set(Math.max(0, Math.min(1, (newVal - min) / (max - min))));\n animate(zeroOffset, newVal === min ? zeroTarget : 0, spring.fast);\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [disabled, getValueFromX, onChange, fillPercent, zeroOffset, zeroTarget, min, max],\n );\n\n const handleResizePointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!handleDragging.current) return;\n const newVal = getValueFromX(e.clientX);\n onChange(newVal);\n fillPercent.set(Math.max(0, Math.min(1, (newVal - min) / (max - min))));\n animate(zeroOffset, newVal === min ? zeroTarget : 0, spring.fast);\n },\n [getValueFromX, onChange, fillPercent, zeroOffset, zeroTarget, min, max],\n );\n\n const handleResizePointerUp = useCallback(() => {\n handleDragging.current = false;\n setIsPressed(false);\n setHoverPreview(null);\n }, []);\n\n const handleRadixChange = useCallback(\n (newValues: number[]) => {\n onChange(newValues[0]);\n },\n [onChange],\n );\n\n const isActive = isHovered || isFocused;\n\n return (\n <div\n className=\"relative w-full touch-none\"\n onPointerEnter={() => {\n if (!disabled) setIsHovered(true);\n }}\n onPointerLeave={() => {\n if (!disabled) {\n setIsHovered(false);\n setHoverPreview(null);\n }\n }}\n onMouseMove={(e) => {\n if (disabled || dragging.current || handleDragging.current) return;\n computeHoverPreview(e.clientX);\n }}\n >\n {/* Extended hit area — 8px beyond each edge */}\n <div\n className=\"absolute cursor-ew-resize\"\n style={{ left: -8, right: -8, top: 0, bottom: 0 }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n />\n {/* Hover value tooltip — outside overflow-hidden container */}\n <AnimatePresence>\n {hoverPreview && showHoverTooltip && !isPressed && (\n <motion.div\n key=\"hover-tooltip\"\n className=\"absolute -translate-x-1/2 pointer-events-none z-20\"\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 4, transition: spring.fast.exit }}\n transition={spring.fast}\n style={{\n left: hoverPreview.cursorX,\n top: -30,\n }}\n >\n <span\n className={cn(\n \"text-[12px] text-background tabular-nums whitespace-nowrap bg-foreground px-2 py-1\",\n shape.bg,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {formatValue(hoverPreview.snappedValue)}\n </span>\n </motion.div>\n )}\n </AnimatePresence>\n\n <motion.div\n ref={mergedRef}\n className={cn(\n \"relative w-full h-8 select-none touch-none border border-border overflow-hidden outline-offset-2\",\n variant === \"scrubber\"\n ? \"flex items-center gap-3 px-4 cursor-ew-resize\"\n : \"cursor-ew-resize\",\n shape.bg,\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n initial={false}\n animate={{\n outline: isFocused ? \"1px solid #6B97FF\" : \"1px solid transparent\",\n }}\n transition={spring.fast}\n style={style as any}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n {...props}\n >\n {/* Invisible Radix for keyboard nav + a11y */}\n <SliderPrimitive.Root\n value={[value]}\n onValueChange={handleRadixChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n className=\"absolute inset-0 opacity-0 pointer-events-none [&_*]:pointer-events-none\"\n >\n <SliderPrimitive.Track className=\"w-full h-full\">\n <SliderPrimitive.Range />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className=\"block outline-none\"\n onFocus={(e) => {\n if (e.currentTarget.matches(\":focus-visible\")) setIsFocused(true);\n }}\n onBlur={() => setIsFocused(false)}\n />\n </SliderPrimitive.Root>\n\n {/* Hover preview */}\n <motion.div\n className=\"absolute inset-y-0 pointer-events-none z-[3]\"\n initial={false}\n animate={{\n opacity: hoverPreview && !isPressed ? 1 : 0,\n }}\n transition={{ opacity: { duration: 0.15 } }}\n style={{\n left: hoverPreview ? hoverPreview.left : 0,\n width: hoverPreview ? hoverPreview.width : 0,\n backgroundColor: \"color-mix(in srgb, var(--color-accent) 40%, transparent)\",\n }}\n />\n\n {/* Pips: dots layer — z-[1] */}\n {variant === \"pips\" && (\n <motion.div\n className=\"absolute inset-0 flex justify-between items-center px-3 pointer-events-none z-[1]\"\n style={{ WebkitMaskImage: pipsMaskStyle, maskImage: pipsMaskStyle }}\n >\n {pipSteps.map((pipValue) => {\n const isActivePip = pipValue === value;\n return (\n <div\n key={pipValue}\n className=\"relative flex items-center justify-center\"\n style={{ width: PIP_SIZE, height: PIP_SIZE }}\n >\n <motion.div\n className=\"rounded-full\"\n initial={false}\n animate={{\n backgroundColor: isActivePip\n ? \"var(--foreground)\"\n : \"var(--muted-foreground)\",\n opacity: isActivePip ? 1 : 0.3,\n }}\n transition={spring.fast}\n style={{ width: PIP_SIZE, height: PIP_SIZE }}\n />\n </div>\n );\n })}\n </motion.div>\n )}\n\n {/* Pips: label + value BG layer — z-[2] (occludes dots behind text) */}\n {variant === \"pips\" && (\n <div\n className=\"absolute inset-0 flex items-center px-2 z-[2] pointer-events-none\"\n aria-hidden\n >\n {label && (\n <span className=\"text-[13px] px-2 bg-background text-transparent select-none\">\n {\"\\u00a0\"}\n </span>\n )}\n <span\n className=\"text-[13px] tabular-nums ml-auto px-2 bg-background text-transparent select-none\"\n style={{ minWidth: `${String(formatValue(max)).length}ch` }}\n >\n {\"\\u00a0\"}\n </span>\n </div>\n )}\n\n {/* Pips: fill — z-[3] */}\n {variant === \"pips\" && (\n <motion.div\n className=\"absolute left-0 top-0 bottom-0 pointer-events-none z-[3]\"\n style={{\n width: pipsFillWidthStyle,\n backgroundColor: \"var(--active)\",\n }}\n />\n )}\n\n {/* Pips: handle line — z-[3] */}\n {variant === \"pips\" && (\n <motion.div\n className=\"absolute rounded-full pointer-events-none z-[3]\"\n initial={false}\n animate={{\n top: isActive ? 7 : 8,\n bottom: isActive ? 7 : 8,\n backgroundColor: isFocused\n ? \"var(--foreground)\"\n : isHovered\n ? \"color-mix(in srgb, var(--foreground) 50%, transparent)\"\n : \"color-mix(in srgb, var(--foreground) 25%, transparent)\",\n }}\n transition={spring.fast}\n style={{\n left: pipsHandleLineLeftStyle,\n width: 2,\n }}\n />\n )}\n\n {/* Pips: label + value text layer — z-[4] */}\n {variant === \"pips\" && (\n <div className=\"absolute inset-0 flex items-center px-2 z-[4] pointer-events-none\">\n {label && (\n <motion.span\n className=\"text-[13px] px-2\"\n initial={false}\n animate={{ color: isActive ? \"var(--foreground)\" : \"var(--muted-foreground)\" }}\n transition={spring.fast}\n >\n {label}\n </motion.span>\n )}\n <motion.span\n className=\"text-[13px] tabular-nums ml-auto px-2\"\n initial={false}\n animate={{ color: isActive ? \"var(--foreground)\" : \"var(--muted-foreground)\" }}\n transition={spring.fast}\n style={{ minWidth: `${String(formatValue(max)).length}ch`, textAlign: \"right\" }}\n >\n {formatValue(value)}\n </motion.span>\n </div>\n )}\n\n {/* Scrubber: fill */}\n {variant === \"scrubber\" && (\n <motion.div\n className=\"absolute left-0 top-0 bottom-0 pointer-events-none\"\n style={{\n width: fillWidthStyle,\n backgroundColor: \"var(--active)\",\n }}\n />\n )}\n\n {/* Scrubber: handle line */}\n {variant === \"scrubber\" && (\n <motion.div\n className=\"absolute rounded-full pointer-events-none z-10\"\n initial={false}\n animate={{\n top: isActive ? 7 : 8,\n bottom: isActive ? 7 : 8,\n backgroundColor: isFocused\n ? \"var(--foreground)\"\n : isHovered\n ? \"color-mix(in srgb, var(--foreground) 50%, transparent)\"\n : \"color-mix(in srgb, var(--foreground) 25%, transparent)\",\n }}\n transition={spring.fast}\n style={{\n left: handleLineLeftStyle,\n width: 2,\n }}\n />\n )}\n\n {/* Scrubber: label */}\n {variant === \"scrubber\" && label && (\n <motion.span\n className=\"text-[13px] shrink-0 z-10\"\n initial={false}\n animate={{ color: isActive ? \"var(--foreground)\" : \"var(--muted-foreground)\" }}\n transition={spring.fast}\n >\n {label}\n </motion.span>\n )}\n\n {/* Scrubber: flex-1 spacer + value */}\n {variant === \"scrubber\" && (\n <>\n <div className=\"flex-1\" />\n <motion.span\n className=\"text-[13px] shrink-0 tabular-nums text-right z-10\"\n initial={false}\n animate={{ color: isActive ? \"var(--foreground)\" : \"var(--muted-foreground)\" }}\n transition={spring.fast}\n style={{ minWidth: `${String(formatValue(max)).length}ch` }}\n >\n {formatValue(value)}\n </motion.span>\n </>\n )}\n\n {/* Resize handle (scrubber only) */}\n {variant === \"scrubber\" && (\n <motion.div\n className=\"absolute top-0 bottom-0 w-2 cursor-ew-resize z-20\"\n style={{ left: handleLeftStyle }}\n onPointerDown={handleResizePointerDown}\n onPointerMove={handleResizePointerMove}\n onPointerUp={handleResizePointerUp}\n />\n )}\n </motion.div>\n </div>\n );\n },\n);\n\nSliderComfortable.displayName = \"SliderComfortable\";\n\nconst SliderControl = Slider;\n\nexport { Slider, SliderControl, SliderComfortable };\nexport type { SliderProps, SliderValue, ValuePosition, SliderComfortableProps };\n","\"use client\";\n\nimport { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { useSurface, SurfaceProvider } from \"./surface-context\";\nimport { surfaceClasses } from \"./surface-classes\";\n\ninterface ElevatedProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Steps above the current substrate.\n *\n * The component's own surface level becomes `min(substrate + offset, 8)`\n * and is re-provided to descendants via SurfaceProvider, so further\n * nesting walks up the ladder automatically.\n *\n * Conventional offsets:\n * 2 — dropdown / popover / select menu\n * 4 — dialog / modal\n */\n offset: number;\n /**\n * Override for the shadow level. Defaults to the computed surface level.\n *\n * Pass a fixed value when the component should keep a constant shadow\n * weight regardless of how deeply it's nested — e.g. a dropdown always\n * reads `shadow-surface-3` whether it opens on the page or inside a\n * dialog, even though its background tracks the substrate.\n */\n shadowLevel?: number;\n children?: ReactNode;\n}\n\nconst Elevated = forwardRef<HTMLDivElement, ElevatedProps>(\n ({ offset, shadowLevel, className, children, ...props }, ref) => {\n const substrate = useSurface();\n const level = Math.min(substrate + offset, 8);\n return (\n <SurfaceProvider value={level}>\n <div\n ref={ref}\n className={cn(surfaceClasses(level, shadowLevel ?? level), className)}\n {...props}\n >\n {children}\n </div>\n </SurfaceProvider>\n );\n },\n);\nElevated.displayName = \"Elevated\";\n\nexport { Elevated };\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { shapeMap } from \"../lib/shape-context\";\nimport { Elevated } from \"../lib/elevated\";\n\n// Dropdown opts out of the global pill/rounded shape context — popover surfaces\n// look cleaner with the smaller \"rounded\" radii regardless of how the rest of\n// the UI is shaped (the heavy pill bubbling distorts perceived padding at this\n// scale and produces the corner-shadow asymmetry).\nconst shape = shapeMap.rounded;\n\ninterface DropdownContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n checkedIndex?: number;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nexport function useDropdown() {\n const ctx = useContext(DropdownContext);\n return ctx ?? { registerItem: () => undefined, activeIndex: null };\n}\n\ninterface DropdownProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n checkedIndex?: number;\n}\n\nconst Dropdown = forwardRef<HTMLDivElement, DropdownProps>(\n ({ children, checkedIndex, className, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef);\n\n useEffect(() => {\n measureItems();\n }, [measureItems, children]);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n const checkedRect = checkedIndex != null ? itemRects[checkedIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n const isHoveringOther = activeIndex !== null && activeIndex !== checkedIndex;\n\n return (\n <DropdownContext.Provider\n value={\n checkedIndex === undefined\n ? { registerItem, activeIndex }\n : { registerItem, activeIndex, checkedIndex }\n }\n >\n <Elevated\n offset={2}\n shadowLevel={3}\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setActiveIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n setActiveIndex(null);\n }}\n onKeyDown={(e) => {\n const items = Array.from(\n containerRef.current?.querySelectorAll('[role=\"menuitemradio\"]') ?? [],\n ) as HTMLElement[];\n const currentIdx = items.indexOf(e.target as HTMLElement);\n if (currentIdx === -1) return;\n\n if ([\"ArrowDown\", \"ArrowUp\", \"ArrowRight\", \"ArrowLeft\"].includes(e.key)) {\n e.preventDefault();\n const next = [\"ArrowDown\", \"ArrowRight\"].includes(e.key)\n ? (currentIdx + 1) % items.length\n : (currentIdx - 1 + items.length) % items.length;\n items[next].focus();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n }}\n role=\"menu\"\n className={cn(\n `relative flex flex-col gap-0.5 w-72 max-w-full ${shape.container} p-1 select-none`,\n className,\n )}\n {...props}\n >\n {/* Selected background */}\n <AnimatePresence>\n {checkedRect && (\n <motion.div\n className={`absolute ${shape.bg} bg-active pointer-events-none`}\n initial={false}\n animate={{\n top: checkedRect.top,\n left: checkedRect.left,\n width: checkedRect.width,\n height: checkedRect.height,\n opacity: isHoveringOther ? 0.8 : 1,\n }}\n exit={{ opacity: 0, transition: spring.moderate.exit }}\n transition={{\n ...spring.moderate,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className={`absolute ${shape.bg} bg-hover pointer-events-none`}\n initial={{\n opacity: 0,\n top: checkedRect?.top ?? activeRect.top,\n left: checkedRect?.left ?? activeRect.left,\n width: checkedRect?.width ?? activeRect.width,\n height: checkedRect?.height ?? activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={`absolute ${shape.focusRing} pointer-events-none z-20 border border-[#6B97FF]`}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {children}\n </Elevated>\n </DropdownContext.Provider>\n );\n },\n);\n\nDropdown.displayName = \"Dropdown\";\n\n// ---------------------------------------------------------------------------\n// DropdownLabel\n// ---------------------------------------------------------------------------\n\nconst DropdownLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-[11px] text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\n\nDropdownLabel.displayName = \"DropdownLabel\";\n\n// ---------------------------------------------------------------------------\n// DropdownSeparator\n// ---------------------------------------------------------------------------\n\nconst DropdownSeparator = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn(\"my-1 -mx-1 h-px bg-border/60\", className)}\n {...props}\n />\n ),\n);\n\nDropdownSeparator.displayName = \"DropdownSeparator\";\n\nexport { Dropdown, DropdownLabel, DropdownSeparator };\nexport default Dropdown;\n","\"use client\";\n\nimport { createContext, useContext, useEffect, useState, type ReactNode } from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\n\n// ---------------------------------------------------------------------------\n// Portal container context\n// ---------------------------------------------------------------------------\n\nconst TooltipPortalContainerContext = createContext<HTMLElement | null>(null);\n\nfunction TooltipPortalContainer({\n value,\n children,\n}: {\n value: HTMLElement | null;\n children: ReactNode;\n}) {\n return (\n <TooltipPortalContainerContext.Provider value={value}>\n {children}\n </TooltipPortalContainerContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\ninterface TooltipProps {\n content?: ReactNode;\n children: ReactNode;\n side?: TooltipSide;\n sideOffset?: number;\n delayDuration?: number;\n className?: string;\n open?: boolean | undefined;\n /** When true, forces the tooltip open. When false, forces it closed. When undefined, uses default hover/focus behavior. */\n forceOpen?: boolean | undefined;\n /** Called when the tooltip's internal open state changes (before forceOpen is applied). */\n onOpenChange?: (open: boolean) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Animation helpers\n// ---------------------------------------------------------------------------\n\nfunction getSlideOffset(side: TooltipSide) {\n switch (side) {\n case \"top\":\n return { y: 4 };\n case \"bottom\":\n return { y: -4 };\n case \"left\":\n return { x: 4 };\n case \"right\":\n return { x: -4 };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip\n// ---------------------------------------------------------------------------\n\nfunction Tooltip({\n content,\n children,\n side = \"top\",\n sideOffset = 8,\n delayDuration = 200,\n className,\n open: openProp,\n forceOpen,\n onOpenChange: onOpenChangeProp,\n}: TooltipProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n if (content === undefined) {\n return (\n <TooltipPrimitive.Root\n {...(openProp !== undefined ? { open: openProp } : {})}\n {...(onOpenChangeProp ? { onOpenChange: onOpenChangeProp } : {})}\n >\n {children}\n </TooltipPrimitive.Root>\n );\n }\n const open = forceOpen ?? openProp ?? internalOpen;\n const [mounted, setMounted] = useState(false);\n const shape = useShape();\n const portalContainer = useContext(TooltipPortalContainerContext);\n\n useEffect(() => {\n if (open) setMounted(true);\n }, [open]);\n\n const handleExitComplete = () => {\n if (!open) setMounted(false);\n };\n\n const slideOffset = getSlideOffset(side);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root\n open={open}\n onOpenChange={(v) => {\n setInternalOpen(v);\n onOpenChangeProp?.(v);\n }}\n >\n <TooltipPrimitive.Trigger asChild>\n {children as React.ReactElement}\n </TooltipPrimitive.Trigger>\n {mounted && (\n <TooltipPrimitive.Portal forceMount container={portalContainer ?? undefined}>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={sideOffset}\n forceMount\n className=\"z-50\"\n >\n <motion.div\n className={cn(\n \"bg-foreground text-background text-[12px] px-2 py-1\",\n shape.bg,\n className,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n initial={{ opacity: 0, ...slideOffset }}\n animate={{\n opacity: open ? 1 : 0,\n x: 0,\n y: 0,\n }}\n transition={open ? spring.fast : spring.fast.exit}\n onAnimationComplete={handleExitComplete}\n >\n {content}\n </motion.div>\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )}\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst TooltipRoot = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipContent = TooltipPrimitive.Content;\n\nexport {\n Tooltip,\n TooltipPortalContainer,\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipContent,\n};\nexport type { TooltipProps, TooltipSide };\n","\"use client\";\n\nimport {\n createContext,\n forwardRef,\n useContext,\n useRef,\n useState,\n useEffect,\n useCallback,\n useMemo,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useSurface, SurfaceProvider } from \"../lib/surface-context\";\nimport { surfaceClasses } from \"../lib/surface-classes\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { Slider } from \"./slider\";\nimport { Dropdown, useDropdown } from \"./dropdown\";\nimport { Tooltip } from \"./tooltip\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype ColorFormat = \"hex\" | \"rgb\" | \"hsl\" | \"oklch\";\n\n// Allows consumers (e.g. the /demo carousel) to portal popups inside a\n// CSS-scaled ancestor so menu/popover layers visually scale with the picker.\nconst ColorPickerPortalContainerContext = createContext<HTMLElement | null>(null);\n\nfunction ColorPickerPortalContainer({\n value,\n children,\n}: {\n value: HTMLElement | null;\n children: ReactNode;\n}) {\n return (\n <ColorPickerPortalContainerContext.Provider value={value}>\n {children}\n </ColorPickerPortalContainerContext.Provider>\n );\n}\n\ninterface ParsedColor {\n // HSV (canonical, 0..360 / 0..1 / 0..1)\n h: number;\n s: number;\n v: number;\n a: number;\n // sRGB 0..255\n r: number;\n g: number;\n b: number;\n // Formatted strings\n hex: string;\n rgb: string;\n hsl: string;\n oklch: string;\n}\n\ninterface ColorPickerProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\"\n> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string, parsed: ParsedColor) => void;\n ariaLabel?: string;\n format?: ColorFormat;\n defaultFormat?: ColorFormat;\n onFormatChange?: (format: ColorFormat) => void;\n swatches?: string[];\n presets?: string[];\n hideEyedropper?: boolean;\n disabled?: boolean;\n /** Controls the format dropdown's open state. When provided, the dropdown\n * is fully controlled and ignores user toggles. */\n formatOpen?: boolean;\n /** Initial open state for the format dropdown (uncontrolled). */\n defaultFormatOpen?: boolean;\n}\n\ninterface ColorPickerPopoverProps extends ColorPickerProps {\n triggerLabel?: string;\n triggerLabelPosition?: \"left\" | \"right\";\n triggerShowValue?: boolean;\n triggerShowRemove?: boolean;\n onTriggerRemove?: () => void;\n triggerClassName?: string;\n /** Controls the popover's open state. When provided, the popover is fully\n * controlled and ignores trigger clicks. */\n open?: boolean;\n /** Initial open state for the popover (uncontrolled). */\n defaultOpen?: boolean;\n /** Called when the open state would change (fires even when controlled). */\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface ColorSwatchProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"color\"> {\n color: string;\n size?: number;\n selected?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Color math (no deps)\n// ---------------------------------------------------------------------------\n\nfunction clamp01(n: number) {\n return Math.max(0, Math.min(1, n));\n}\n\nfunction clamp255(n: number) {\n return Math.max(0, Math.min(255, n));\n}\n\nfunction hsvToRgb(h: number, s: number, v: number): { r: number; g: number; b: number } {\n const c = v * s;\n const hh = (((h % 360) + 360) % 360) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r = 0,\n g = 0,\n b = 0;\n if (hh < 1) {\n r = c;\n g = x;\n b = 0;\n } else if (hh < 2) {\n r = x;\n g = c;\n b = 0;\n } else if (hh < 3) {\n r = 0;\n g = c;\n b = x;\n } else if (hh < 4) {\n r = 0;\n g = x;\n b = c;\n } else if (hh < 5) {\n r = x;\n g = 0;\n b = c;\n } else {\n r = c;\n g = 0;\n b = x;\n }\n const m = v - c;\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };\n}\n\nfunction rgbToHsv(r: number, g: number, b: number): { h: number; s: number; v: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const v = max;\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n let h = 0;\n if (d > 0) {\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n return { h, s, v };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number): { h: number; s: number; l: number } {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n const d = max - min;\n let h = 0,\n s = 0;\n if (d > 0) {\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n return { h, s, l };\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hh = (((h % 360) + 360) % 360) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r = 0,\n g = 0,\n b = 0;\n if (hh < 1) {\n r = c;\n g = x;\n } else if (hh < 2) {\n r = x;\n g = c;\n } else if (hh < 3) {\n g = c;\n b = x;\n } else if (hh < 4) {\n g = x;\n b = c;\n } else if (hh < 5) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n const m = l - c / 2;\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };\n}\n\nfunction srgbToLinear(c: number): number {\n c = c / 255;\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\nfunction linearToSrgb(c: number): number {\n const v = c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;\n return clamp01(v) * 255;\n}\n\nfunction linearRgbToOklab(r: number, g: number, b: number): { L: number; a: number; b: number } {\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n}\n\nfunction oklabToLinearRgb(L: number, a: number, b: number): { r: number; g: number; b: number } {\n const l_ = L + 0.3963377774 * a + 0.2158037573 * b;\n const m_ = L - 0.1055613458 * a - 0.0638541728 * b;\n const s_ = L - 0.0894841775 * a - 1.291485548 * b;\n const l = l_ * l_ * l_;\n const m = m_ * m_ * m_;\n const s = s_ * s_ * s_;\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n };\n}\n\nfunction rgbToOklch(r: number, g: number, b: number): { L: number; C: number; H: number } {\n const lr = srgbToLinear(r);\n const lg = srgbToLinear(g);\n const lb = srgbToLinear(b);\n const lab = linearRgbToOklab(lr, lg, lb);\n const C = Math.sqrt(lab.a * lab.a + lab.b * lab.b);\n let H = (Math.atan2(lab.b, lab.a) * 180) / Math.PI;\n if (H < 0) H += 360;\n return { L: lab.L, C, H };\n}\n\nfunction oklchToRgb(L: number, C: number, H: number): { r: number; g: number; b: number } {\n const a = C * Math.cos((H * Math.PI) / 180);\n const b = C * Math.sin((H * Math.PI) / 180);\n const lin = oklabToLinearRgb(L, a, b);\n // Clamp to sRGB silently (option a from plan)\n return {\n r: clamp255(linearToSrgb(lin.r)),\n g: clamp255(linearToSrgb(lin.g)),\n b: clamp255(linearToSrgb(lin.b)),\n };\n}\n\nfunction to2hex(n: number): string {\n return Math.round(clamp255(n)).toString(16).padStart(2, \"0\");\n}\n\nfunction rgbToHexStr(r: number, g: number, b: number, a: number): string {\n if (a >= 1) return `#${to2hex(r)}${to2hex(g)}${to2hex(b)}`;\n return `#${to2hex(r)}${to2hex(g)}${to2hex(b)}${to2hex(a * 255)}`;\n}\n\nfunction expandShortHex(h: string): string {\n if (h.length === 3)\n return h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n if (h.length === 4)\n return h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n return h;\n}\n\nfunction parseHex(input: string): { r: number; g: number; b: number; a: number } | null {\n const m = input.trim().match(/^#?([0-9a-fA-F]{3,8})$/);\n if (!m) return null;\n let h = m[1];\n if (h.length === 3 || h.length === 4) h = expandShortHex(h);\n if (h.length === 6) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: 1,\n };\n }\n if (h.length === 8) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: parseInt(h.slice(6, 8), 16) / 255,\n };\n }\n return null;\n}\n\nfunction parseColor(input: string): { r: number; g: number; b: number; a: number } | null {\n const s = input.trim();\n if (!s) return null;\n if (s.startsWith(\"#\") || /^[0-9a-fA-F]{3,8}$/.test(s)) {\n return parseHex(s);\n }\n const rgbM = s.match(/^rgba?\\(\\s*([^)]+)\\)$/i);\n if (rgbM) {\n const parts = rgbM[1].split(/[\\s,/]+/).filter(Boolean);\n if (parts.length < 3) return null;\n const r = parseFloat(parts[0]);\n const g = parseFloat(parts[1]);\n const b = parseFloat(parts[2]);\n let a = 1;\n if (parts[3] !== undefined) {\n a = parts[3].endsWith(\"%\") ? parseFloat(parts[3]) / 100 : parseFloat(parts[3]);\n }\n if ([r, g, b, a].some(Number.isNaN)) return null;\n return { r: clamp255(r), g: clamp255(g), b: clamp255(b), a: clamp01(a) };\n }\n const hslM = s.match(/^hsla?\\(\\s*([^)]+)\\)$/i);\n if (hslM) {\n const parts = hslM[1].split(/[\\s,/]+/).filter(Boolean);\n if (parts.length < 3) return null;\n const h = parseFloat(parts[0]);\n const sat = parts[1].endsWith(\"%\") ? parseFloat(parts[1]) / 100 : parseFloat(parts[1]);\n const l = parts[2].endsWith(\"%\") ? parseFloat(parts[2]) / 100 : parseFloat(parts[2]);\n let a = 1;\n if (parts[3] !== undefined) {\n a = parts[3].endsWith(\"%\") ? parseFloat(parts[3]) / 100 : parseFloat(parts[3]);\n }\n if ([h, sat, l, a].some(Number.isNaN)) return null;\n const rgb = hslToRgb(h, clamp01(sat), clamp01(l));\n return { r: clamp255(rgb.r), g: clamp255(rgb.g), b: clamp255(rgb.b), a: clamp01(a) };\n }\n const oklchM = s.match(/^oklch\\(\\s*([^)]+)\\)$/i);\n if (oklchM) {\n const parts = oklchM[1].split(/[\\s,/]+/).filter(Boolean);\n if (parts.length < 3) return null;\n const L = parts[0].endsWith(\"%\") ? parseFloat(parts[0]) / 100 : parseFloat(parts[0]);\n const C = parseFloat(parts[1]);\n const H = parseFloat(parts[2]);\n let a = 1;\n if (parts[3] !== undefined) {\n a = parts[3].endsWith(\"%\") ? parseFloat(parts[3]) / 100 : parseFloat(parts[3]);\n }\n if ([L, C, H, a].some(Number.isNaN)) return null;\n const rgb = oklchToRgb(clamp01(L), Math.max(0, C), H);\n return { r: clamp255(rgb.r), g: clamp255(rgb.g), b: clamp255(rgb.b), a: clamp01(a) };\n }\n return null;\n}\n\nfunction buildParsed(h: number, s: number, v: number, a: number): ParsedColor {\n const { r, g, b } = hsvToRgb(h, s, v);\n const hsl = rgbToHsl(r, g, b);\n const oklch = rgbToOklch(r, g, b);\n const hex = rgbToHexStr(r, g, b, a);\n const rgbStr =\n a >= 1\n ? `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})`\n : `rgba(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}, ${Number(a.toFixed(3))})`;\n const hslStr =\n a >= 1\n ? `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%)`\n : `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${Number(a.toFixed(3))})`;\n const oklchStr =\n a >= 1\n ? `oklch(${(oklch.L * 100).toFixed(1)}% ${oklch.C.toFixed(3)} ${oklch.H.toFixed(1)})`\n : `oklch(${(oklch.L * 100).toFixed(1)}% ${oklch.C.toFixed(3)} ${oklch.H.toFixed(1)} / ${Number(a.toFixed(3))})`;\n return {\n h,\n s,\n v,\n a,\n r: Math.round(r),\n g: Math.round(g),\n b: Math.round(b),\n hex,\n rgb: rgbStr,\n hsl: hslStr,\n oklch: oklchStr,\n };\n}\n\nfunction formatValueByFormat(parsed: ParsedColor, fmt: ColorFormat): string {\n switch (fmt) {\n case \"hex\":\n return parsed.hex;\n case \"rgb\":\n return parsed.rgb;\n case \"hsl\":\n return parsed.hsl;\n case \"oklch\":\n return parsed.oklch;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst PANEL_WIDTH = 280;\nconst SQUARE_HEIGHT = 156;\nconst CHECKER_BG: CSSProperties = {\n backgroundImage:\n \"conic-gradient(var(--checker-a) 0 25%, var(--checker-b) 0 50%, var(--checker-a) 0 75%, var(--checker-b) 0)\",\n backgroundSize: \"8px 8px\",\n};\n\n// ---------------------------------------------------------------------------\n// SaturationSquare\n// ---------------------------------------------------------------------------\n\ninterface SaturationSquareProps {\n h: number;\n s: number;\n v: number;\n onChange: (s: number, v: number) => void;\n}\n\nfunction SaturationSquare({ h, s, v, onChange }: SaturationSquareProps) {\n const ref = useRef<HTMLDivElement>(null);\n const dragging = useRef(false);\n const hasMoved = useRef(false);\n const [focused, setFocused] = useState(false);\n const [hovered, setHovered] = useState(false);\n const [cursorPos, setCursorPos] = useState<{ x: number; y: number } | null>(null);\n const shape = useShape();\n\n const updateFromPointer = useCallback(\n (clientX: number, clientY: number) => {\n const rect = ref.current?.getBoundingClientRect();\n if (!rect) return;\n const x = clamp01((clientX - rect.left) / rect.width);\n const y = clamp01((clientY - rect.top) / rect.height);\n onChange(x, 1 - y);\n },\n [onChange],\n );\n\n const updateCursorPos = useCallback((clientX: number, clientY: number) => {\n const rect = ref.current?.getBoundingClientRect();\n if (!rect) return;\n setCursorPos({\n x: clamp01((clientX - rect.left) / rect.width) * 100,\n y: clamp01((clientY - rect.top) / rect.height) * 100,\n });\n }, []);\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n e.preventDefault();\n dragging.current = true;\n hasMoved.current = false;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n updateFromPointer(e.clientX, e.clientY);\n },\n [updateFromPointer],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n updateCursorPos(e.clientX, e.clientY);\n if (!dragging.current) return;\n hasMoved.current = true;\n updateFromPointer(e.clientX, e.clientY);\n },\n [updateFromPointer, updateCursorPos],\n );\n\n const onPointerUp = useCallback(() => {\n dragging.current = false;\n hasMoved.current = false;\n }, []);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const step = e.shiftKey ? 0.1 : 0.01;\n let nextS = s,\n nextV = v,\n handled = true;\n if (e.key === \"ArrowLeft\") nextS = clamp01(s - step);\n else if (e.key === \"ArrowRight\") nextS = clamp01(s + step);\n else if (e.key === \"ArrowUp\") nextV = clamp01(v + step);\n else if (e.key === \"ArrowDown\") nextV = clamp01(v - step);\n else handled = false;\n if (handled) {\n e.preventDefault();\n onChange(nextS, nextV);\n }\n },\n [onChange, s, v],\n );\n\n const { r, g, b } = hsvToRgb(h, s, v);\n const thumbColor = `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})`;\n\n return (\n <div\n ref={ref}\n role=\"application\"\n aria-label=\"Saturation and brightness\"\n tabIndex={0}\n onFocus={(e) => {\n if (e.currentTarget.matches(\":focus-visible\")) setFocused(true);\n }}\n onBlur={() => setFocused(false)}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => {\n setHovered(false);\n setCursorPos(null);\n }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onKeyDown={onKeyDown}\n className={cn(\"relative w-full select-none touch-none cursor-none outline-none\", shape.bg)}\n style={{\n height: SQUARE_HEIGHT,\n boxShadow: focused ? \"0 0 0 2px #6B97FF\" : undefined,\n }}\n >\n <div\n className={cn(\n \"absolute inset-0 overflow-hidden\",\n shape.bg === \"rounded-[20px]\" ? \"rounded-2xl\" : shape.bg,\n )}\n style={{\n background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(${h}, 100%, 50%))`,\n }}\n />\n <motion.div\n className=\"absolute pointer-events-none rounded-full\"\n initial={false}\n animate={{\n left: `${s * 100}%`,\n top: `${(1 - v) * 100}%`,\n width: 18,\n height: 18,\n }}\n transition={{ duration: 0 }}\n style={{\n transform: \"translate(-50%, -50%)\",\n border: \"1px solid white\",\n boxShadow: \"0 0 0 1px rgba(0,0,0,1)\",\n backgroundColor: thumbColor,\n }}\n />\n {hovered && !dragging.current && cursorPos && (\n <div\n className=\"absolute pointer-events-none rounded-full\"\n style={{\n left: `${cursorPos.x}%`,\n top: `${cursorPos.y}%`,\n width: 18,\n height: 18,\n transform: \"translate(-50%, -50%)\",\n border: \"2px solid rgba(255, 255, 255, 0.55)\",\n boxShadow: \"0 0 0 1px rgba(0, 0, 0, 0.2)\",\n }}\n />\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// HueSlider\n// ---------------------------------------------------------------------------\n\nfunction HueSlider({ h, onChange }: { h: number; onChange: (h: number) => void }) {\n const hueColor = `hsl(${h}, 100%, 50%)`;\n return (\n <Slider\n value={h}\n onChange={(v) => onChange(typeof v === \"number\" ? v : v[0])}\n min={0}\n max={360}\n step={1}\n showValue={false}\n hideFill\n thumbColor={hueColor}\n thumbBorderColor=\"rgba(255,255,255,0.9)\"\n trackStyle={{\n background:\n \"linear-gradient(to right, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))\",\n borderColor: \"transparent\",\n }}\n aria-label=\"Hue\"\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// AlphaSlider\n// ---------------------------------------------------------------------------\n\nfunction AlphaSlider({\n a,\n solidColor,\n solidR,\n solidG,\n solidB,\n onChange,\n}: {\n a: number;\n solidColor: string;\n solidR: number;\n solidG: number;\n solidB: number;\n onChange: (a: number) => void;\n}) {\n // Use color-aware transparent stop (same hue, alpha 0) so the gradient stays\n // chromatically consistent and reaches fully opaque at 100% with no edge gap.\n const transparentColor = `rgba(${solidR}, ${solidG}, ${solidB}, 0)`;\n return (\n <Slider\n value={Math.round(a * 100)}\n onChange={(v) => onChange((typeof v === \"number\" ? v : v[0]) / 100)}\n min={0}\n max={100}\n step={1}\n showValue={false}\n hideFill\n thumbColor={solidColor}\n thumbBorderColor=\"rgba(255,255,255,0.9)\"\n trackStyle={{\n backgroundImage: `linear-gradient(to right, ${transparentColor} 0%, ${solidColor} 98%), conic-gradient(var(--checker-a) 0 25%, var(--checker-b) 0 50%, var(--checker-a) 0 75%, var(--checker-b) 0)`,\n backgroundSize: \"100% 100%, 8px 8px\",\n borderWidth: 0,\n }}\n aria-label=\"Alpha\"\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// FormatDropdown (custom, lightweight)\n// ---------------------------------------------------------------------------\n\nconst FORMAT_LABELS: Record<ColorFormat, string> = {\n hex: \"HEX\",\n rgb: \"RGB\",\n hsl: \"HSL\",\n oklch: \"OKLCH\",\n};\n\nfunction FormatItem({\n index,\n label,\n checked,\n onSelect,\n}: {\n index: number;\n label: string;\n checked: boolean;\n onSelect: () => void;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { registerItem, activeIndex, checkedIndex } = useDropdown();\n const shape = useShape();\n\n useEffect(() => {\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n const isActive = activeIndex === index;\n\n return (\n <div\n ref={ref}\n data-proximity-index={index}\n role=\"menuitemradio\"\n aria-checked={checked}\n aria-label={label}\n tabIndex={index === (checkedIndex ?? 0) ? 0 : -1}\n onClick={onSelect}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onSelect();\n }\n }}\n className={cn(\n `relative z-10 flex items-center px-3 py-2 text-[13px] cursor-pointer outline-none`,\n shape.item,\n )}\n >\n <span className=\"inline-grid\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isActive || checked ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: checked ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label}\n </span>\n </span>\n </div>\n );\n}\n\nfunction FormatDropdown({\n value,\n onChange,\n open: openProp,\n defaultOpen = false,\n}: {\n value: ColorFormat;\n onChange: (f: ColorFormat) => void;\n open?: boolean;\n defaultOpen?: boolean;\n}) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n const setOpen: (next: boolean | ((prev: boolean) => boolean)) => void = (next) => {\n if (isControlled) return;\n setInternalOpen(next);\n };\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const shape = useShape();\n const portalContainer = useContext(ColorPickerPortalContainerContext);\n const [pos, setPos] = useState<\n | { mode: \"fixed\"; top: number; left: number; width: number }\n | { mode: \"absolute\"; top: number; left: number; width: number }\n | null\n >(null);\n\n useEffect(() => {\n if (!open || !triggerRef.current) {\n setPos(null);\n return;\n }\n const triggerRect = triggerRef.current.getBoundingClientRect();\n if (portalContainer) {\n const cRect = portalContainer.getBoundingClientRect();\n const cWidth = portalContainer.offsetWidth;\n const scale = cWidth > 0 ? cRect.width / cWidth : 1;\n // Convert viewport coords into the portal container's pre-scale frame so\n // an ancestor CSS scale visually scales the menu alongside the trigger.\n setPos({\n mode: \"absolute\",\n top: (triggerRect.bottom - cRect.top) / scale + 6,\n left: (triggerRect.left - cRect.left) / scale,\n width: triggerRect.width / scale,\n });\n } else {\n setPos({\n mode: \"fixed\",\n top: triggerRect.bottom + 6,\n left: triggerRect.left,\n width: triggerRect.width,\n });\n }\n }, [open, portalContainer]);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (\n !panelRef.current?.contains(e.target as Node) &&\n !triggerRef.current?.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onClick);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n const formats = [\"hex\", \"rgb\", \"hsl\", \"oklch\"] as const;\n const checkedIdx = formats.indexOf(value);\n const ChevronDownIcon = useIcon(\"chevron-down\");\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\n \"flex items-center justify-between gap-2 h-9 px-3 text-[13px] bg-transparent hover:bg-hover hover:text-foreground transition-colors duration-80 outline-none focus-visible:ring-1 focus-visible:ring-[#6B97FF] cursor-pointer\",\n open ? \"bg-active text-foreground\" : \"text-muted-foreground active:bg-active\",\n shape.input,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n <span>{FORMAT_LABELS[value]}</span>\n <ChevronDownIcon\n size={14}\n strokeWidth={1.5}\n className={cn(\n \"text-muted-foreground transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n {open &&\n pos &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n style={{\n position: pos.mode,\n top: pos.top,\n left: pos.left,\n zIndex: 60,\n }}\n >\n <motion.div\n ref={panelRef}\n initial={{ opacity: 0, y: -4, scaleY: 0.96 }}\n animate={{ opacity: 1, y: 0, scaleY: 1 }}\n transition={spring.fast}\n style={{ transformOrigin: \"top center\", minWidth: pos.width }}\n >\n <Dropdown checkedIndex={checkedIdx} className=\"!w-auto min-w-full\">\n {formats.map((fmt, i) => (\n <FormatItem\n key={fmt}\n index={i}\n label={FORMAT_LABELS[fmt]}\n checked={value === fmt}\n onSelect={() => {\n onChange(fmt);\n setOpen(false);\n }}\n />\n ))}\n </Dropdown>\n </motion.div>\n </div>,\n portalContainer ?? document.body,\n )}\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ColorInput (a single styled text input, used for hex)\n// ---------------------------------------------------------------------------\n\ninterface ColorInputProps {\n value: string;\n onCommit: (next: string) => void;\n ariaLabel: string;\n width?: string;\n className?: string;\n inputClassName?: string;\n align?: \"left\" | \"center\" | \"right\";\n prefix?: ReactNode;\n inputMode?: \"numeric\" | \"decimal\" | \"text\";\n nudgeStep?: number;\n nudgeShiftStep?: number;\n hasPercent?: boolean;\n decimals?: number;\n scrubbable?: boolean;\n min?: number;\n max?: number;\n /** When true with min and max, wrap (modulo) instead of clamping. Used for angular values like hue. */\n wrap?: boolean;\n}\n\nconst ColorInput = forwardRef<HTMLInputElement, ColorInputProps>(\n (\n {\n value,\n onCommit,\n ariaLabel,\n width,\n className,\n inputClassName,\n align = \"left\",\n prefix,\n inputMode = \"text\",\n nudgeStep,\n nudgeShiftStep,\n hasPercent = false,\n decimals,\n scrubbable = false,\n min,\n max,\n wrap = false,\n },\n ref,\n ) => {\n const [draft, setDraft] = useState(value);\n const [editing, setEditing] = useState(false);\n const interactingRef = useRef(false);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrubRef = useRef<{\n startX: number;\n startValue: number;\n scrubbing: boolean;\n pointerId: number;\n } | null>(null);\n const shape = useShape();\n\n useEffect(() => {\n if (!interactingRef.current) setDraft(value);\n }, [value]);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n },\n [ref],\n );\n\n const formatNumber = (n: number) =>\n decimals != null ? n.toFixed(decimals) : String(Math.round(n));\n\n const commitNumber = (n: number) => {\n let bounded = n;\n if (wrap && min != null && max != null) {\n const range = max - min;\n bounded = ((((bounded - min) % range) + range) % range) + min;\n } else {\n if (min != null) bounded = Math.max(min, bounded);\n if (max != null) bounded = Math.min(max, bounded);\n }\n const formatted = formatNumber(bounded);\n const withSuffix = hasPercent ? `${formatted}%` : formatted;\n setDraft(withSuffix);\n onCommit(withSuffix);\n };\n\n const nudge = (direction: 1 | -1, shift: boolean) => {\n const baseStep = shift ? (nudgeShiftStep ?? 10) : (nudgeStep ?? 1);\n const cur = parseFloat(draft.replace(\"%\", \"\"));\n if (Number.isNaN(cur)) return;\n commitNumber(cur + direction * baseStep);\n };\n\n const onWrapperPointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n if (!scrubbable || editing) return;\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n const cur = parseFloat(draft.replace(\"%\", \"\"));\n if (Number.isNaN(cur)) return;\n scrubRef.current = {\n startX: e.clientX,\n startValue: cur,\n scrubbing: false,\n pointerId: e.pointerId,\n };\n // Block focus while we wait to see if this is a click or a drag\n e.preventDefault();\n wrapperRef.current?.setPointerCapture(e.pointerId);\n };\n\n const onWrapperPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {\n const state = scrubRef.current;\n if (!state) return;\n const dx = e.clientX - state.startX;\n if (!state.scrubbing && Math.abs(dx) > 3) {\n state.scrubbing = true;\n interactingRef.current = true;\n }\n if (state.scrubbing) {\n const baseStep = e.shiftKey ? (nudgeShiftStep ?? 10) : (nudgeStep ?? 1);\n commitNumber(state.startValue + dx * baseStep);\n }\n };\n\n const onWrapperPointerUp = (e: React.PointerEvent<HTMLDivElement>) => {\n const state = scrubRef.current;\n if (!state) return;\n scrubRef.current = null;\n try {\n wrapperRef.current?.releasePointerCapture(e.pointerId);\n } catch {}\n if (state.scrubbing) {\n interactingRef.current = false;\n // Sync draft back to the (possibly clamped) value from parent\n setDraft(value);\n return;\n }\n // Click without drag → enter edit mode and focus the input\n setEditing(true);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n });\n };\n\n return (\n <div\n ref={wrapperRef}\n onPointerDown={onWrapperPointerDown}\n onPointerMove={onWrapperPointerMove}\n onPointerUp={onWrapperPointerUp}\n onPointerCancel={onWrapperPointerUp}\n className={cn(\n \"flex items-center h-9 px-2 bg-transparent hover:bg-hover active:bg-active transition-colors duration-80 focus-within:ring-1 focus-within:ring-[#6B97FF] select-none\",\n shape.input,\n scrubbable && !editing && \"cursor-ew-resize\",\n className,\n )}\n style={{ width }}\n >\n {prefix && (\n <span className=\"text-[12px] text-muted-foreground mr-1 select-none\">{prefix}</span>\n )}\n <input\n ref={setInputRef}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onFocus={(e) => {\n interactingRef.current = true;\n setEditing(true);\n e.currentTarget.select();\n }}\n onBlur={() => {\n interactingRef.current = false;\n setEditing(false);\n if (draft !== value) {\n const numeric = parseFloat(draft.replace(\"%\", \"\"));\n if (!Number.isNaN(numeric) && (min != null || max != null)) {\n commitNumber(numeric);\n } else {\n onCommit(draft);\n }\n } else setDraft(value);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n (e.currentTarget as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n setDraft(value);\n (e.currentTarget as HTMLInputElement).blur();\n } else if (\n (nudgeStep != null || nudgeShiftStep != null) &&\n (e.key === \"ArrowUp\" || e.key === \"ArrowDown\")\n ) {\n e.preventDefault();\n nudge(e.key === \"ArrowUp\" ? 1 : -1, e.shiftKey);\n }\n }}\n inputMode={inputMode}\n aria-label={ariaLabel}\n className={cn(\n \"flex-1 min-w-0 bg-transparent text-foreground text-[13px] outline-none tabular-nums\",\n align === \"center\" && \"text-center\",\n align === \"right\" && \"text-right\",\n scrubbable && !editing && \"pointer-events-none\",\n inputClassName,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n />\n </div>\n );\n },\n);\n\nColorInput.displayName = \"ColorInput\";\n\n// ---------------------------------------------------------------------------\n// EyeDropperButton\n// ---------------------------------------------------------------------------\n\ninterface EyeDropperGlobal {\n open(): Promise<{ sRGBHex: string }>;\n}\n\nfunction EyeDropperButton({ onPick }: { onPick: (hex: string) => void }) {\n const [supported, setSupported] = useState(false);\n const shape = useShape();\n const PipetteIcon = useIcon(\"pipette\");\n\n useEffect(() => {\n setSupported(typeof window !== \"undefined\" && \"EyeDropper\" in window);\n }, []);\n\n if (!supported) return null;\n\n const handleClick = async () => {\n try {\n const Ctor = (window as unknown as { EyeDropper: new () => EyeDropperGlobal }).EyeDropper;\n const eye = new Ctor();\n const result = await eye.open();\n onPick(result.sRGBHex);\n } catch {\n // user cancelled\n }\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n aria-label=\"Pick color from screen\"\n className={cn(\n \"flex items-center justify-center h-9 px-3 text-muted-foreground bg-transparent hover:bg-hover hover:text-foreground active:bg-active transition-colors duration-80 outline-none focus-visible:ring-1 focus-visible:ring-[#6B97FF] cursor-pointer\",\n shape.input,\n )}\n >\n <PipetteIcon size={16} strokeWidth={1.5} />\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ColorTile (small colored square — checker behind alpha)\n// ---------------------------------------------------------------------------\n\ninterface ColorTileProps {\n color: string;\n size?: number;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction ColorTile({ color, size = 24, className, style }: ColorTileProps) {\n const shape = useShape();\n return (\n <span\n className={cn(\"inline-block relative shrink-0 overflow-hidden\", shape.bg, className)}\n style={{\n width: size,\n height: size,\n ...CHECKER_BG,\n boxShadow: \"inset 0 0 0 1px rgba(127,127,127,0.25)\",\n ...style,\n }}\n >\n <span className=\"absolute inset-0\" style={{ backgroundColor: color }} />\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ColorSwatch (clickable strip swatch)\n// ---------------------------------------------------------------------------\n\nconst ColorSwatch = forwardRef<HTMLButtonElement, ColorSwatchProps>(\n ({ color, size = 28, selected, className, onMouseEnter, onMouseLeave, ...props }, ref) => {\n const shape = useShape();\n const [hovered, setHovered] = useState(false);\n const ring = selected\n ? \"inset 0 0 0 1px rgba(127,127,127,0.25), 0 0 0 2px var(--background), 0 0 0 4px #6B97FF\"\n : hovered\n ? \"inset 0 0 0 1px rgba(127,127,127,0.25), 0 0 0 2px var(--background), 0 0 0 4px rgba(127,127,127,0.4)\"\n : \"inset 0 0 0 1px rgba(127,127,127,0.25)\";\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={`Select color ${color}`}\n className={cn(\n \"relative shrink-0 overflow-hidden cursor-pointer outline-none transition-shadow duration-100\",\n shape.bg,\n className,\n )}\n style={{\n width: size,\n height: size,\n ...CHECKER_BG,\n boxShadow: ring,\n }}\n onMouseEnter={(e) => {\n setHovered(true);\n onMouseEnter?.(e);\n }}\n onMouseLeave={(e) => {\n setHovered(false);\n onMouseLeave?.(e);\n }}\n {...props}\n >\n <span className=\"absolute inset-0\" style={{ backgroundColor: color }} />\n </button>\n );\n },\n);\n\nColorSwatch.displayName = \"ColorSwatch\";\n\n// ---------------------------------------------------------------------------\n// SwatchStrip\n// ---------------------------------------------------------------------------\n\nfunction SwatchStrip({\n swatches,\n current,\n onPick,\n}: {\n swatches: string[];\n current: string;\n onPick: (color: string) => void;\n}) {\n const normalizedCurrent = useMemo(() => {\n const p = parseColor(current);\n return p ? rgbToHexStr(p.r, p.g, p.b, p.a).toLowerCase() : \"\";\n }, [current]);\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n {swatches.map((sw, i) => {\n const parsed = parseColor(sw);\n const normalized = parsed\n ? rgbToHexStr(parsed.r, parsed.g, parsed.b, parsed.a).toLowerCase()\n : sw.toLowerCase();\n const isSelected = normalized === normalizedCurrent;\n return (\n <ColorSwatch\n key={`${sw}-${i}`}\n color={sw}\n size={28}\n selected={isSelected}\n onClick={() => onPick(sw)}\n />\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ColorPicker (panel)\n// ---------------------------------------------------------------------------\n\nconst ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n value,\n defaultValue = \"#6B97FF\",\n onChange,\n onValueChange,\n ariaLabel,\n format,\n defaultFormat = \"hex\",\n onFormatChange,\n swatches,\n presets,\n hideEyedropper,\n formatOpen,\n defaultFormatOpen,\n className,\n ...props\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n const currentRawValue = isControlled ? (value as string) : internalValue;\n\n const isFormatControlled = format !== undefined;\n const [internalFormat, setInternalFormat] = useState<ColorFormat>(defaultFormat);\n const currentFormat = isFormatControlled ? (format as ColorFormat) : internalFormat;\n\n // Internal HSV state (canonical). H is preserved across S=0 / V=0 transitions.\n const initialParsed = useMemo(() => {\n const p = parseColor(currentRawValue);\n if (!p) return { h: 0, s: 1, v: 1, a: 1 };\n const hsv = rgbToHsv(p.r, p.g, p.b);\n return { h: hsv.s === 0 ? 0 : hsv.h, s: hsv.s, v: hsv.v, a: p.a };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const [hsv, setHsv] = useState(initialParsed);\n\n // Sticky OKLCH hue: preserves the user's stated OKLCH H across the lossy\n // RGB round-trip (so the displayed H doesn't drift after release) and\n // across achromatic colors (where RGB-derived H would collapse to 0).\n // Cleared whenever the color changes through a non-OKLCH-internal channel.\n const oklchHueRef = useRef<number | null>(null);\n\n // External value sync — when controlled value changes from outside, sync HSV\n const lastEmittedRef = useRef<string>(\"\");\n useEffect(() => {\n if (!isControlled) return;\n const emitted = lastEmittedRef.current;\n const cur = value as string;\n if (cur === emitted) return;\n const p = parseColor(cur);\n if (!p) return;\n oklchHueRef.current = null;\n const newHsv = rgbToHsv(p.r, p.g, p.b);\n setHsv((prev) => ({\n h: newHsv.s === 0 ? prev.h : newHsv.h,\n s: newHsv.s,\n v: newHsv.v,\n a: p.a,\n }));\n }, [value, isControlled]);\n\n const parsed = useMemo(() => buildParsed(hsv.h, hsv.s, hsv.v, hsv.a), [hsv]);\n\n const updateHsv = useCallback(\n (next: { h?: number; s?: number; v?: number; a?: number }) => {\n const merged = { ...hsv, ...next };\n setHsv(merged);\n const p = buildParsed(merged.h, merged.s, merged.v, merged.a);\n const formatted = formatValueByFormat(p, currentFormat);\n lastEmittedRef.current = formatted;\n if (!isControlled) setInternalValue(formatted);\n onChange?.(formatted);\n onValueChange?.(formatted, p);\n },\n [hsv, currentFormat, isControlled, onChange, onValueChange],\n );\n\n const handleFormatChange = useCallback(\n (f: ColorFormat) => {\n if (!isFormatControlled) setInternalFormat(f);\n onFormatChange?.(f);\n // Re-emit value in new format\n const formatted = formatValueByFormat(parsed, f);\n lastEmittedRef.current = formatted;\n if (!isControlled) setInternalValue(formatted);\n onChange?.(formatted);\n onValueChange?.(formatted, parsed);\n },\n [isFormatControlled, isControlled, onFormatChange, onChange, onValueChange, parsed],\n );\n\n const handleHexCommit = useCallback(\n (input: string) => {\n const p = parseColor(input);\n if (!p) return;\n oklchHueRef.current = null;\n const newHsv = rgbToHsv(p.r, p.g, p.b);\n const merged = {\n h: newHsv.s === 0 ? hsv.h : newHsv.h,\n s: newHsv.s,\n v: newHsv.v,\n a: p.a,\n };\n setHsv(merged);\n const next = buildParsed(merged.h, merged.s, merged.v, merged.a);\n const formatted = formatValueByFormat(next, currentFormat);\n lastEmittedRef.current = formatted;\n if (!isControlled) setInternalValue(formatted);\n onChange?.(formatted);\n onValueChange?.(formatted, next);\n },\n [hsv.h, currentFormat, isControlled, onChange, onValueChange],\n );\n\n const handleSwatchPick = useCallback(\n (sw: string) => {\n handleHexCommit(sw);\n },\n [handleHexCommit],\n );\n\n const handleEyedrop = useCallback(\n (hex: string) => {\n handleHexCommit(hex);\n },\n [handleHexCommit],\n );\n\n const solidHueRgb = useMemo(() => hsvToRgb(hsv.h, hsv.s, hsv.v), [hsv.h, hsv.s, hsv.v]);\n const solidR = Math.round(solidHueRgb.r);\n const solidG = Math.round(solidHueRgb.g);\n const solidB = Math.round(solidHueRgb.b);\n const solidColorString = `rgb(${solidR}, ${solidG}, ${solidB})`;\n const shape = useShape();\n const substrate = useSurface();\n // The picker panel uses bg-card (surface-3) by default; when wrapped in\n // ColorPickerPopover the className override pushes it higher. Either way,\n // announce the panel's effective level so descendants (FormatDropdown,\n // etc.) elevate above it instead of colliding at the same surface.\n const pickerLevel = Math.max(substrate, 3);\n\n return (\n <SurfaceProvider value={pickerLevel}>\n <div\n ref={ref}\n aria-label={ariaLabel}\n className={cn(\n \"flex flex-col gap-2 p-3\",\n surfaceClasses(pickerLevel, 1),\n shape.container,\n className,\n )}\n style={{ width: PANEL_WIDTH }}\n {...props}\n >\n <SaturationSquare\n h={hsv.h}\n s={hsv.s}\n v={hsv.v}\n onChange={(s, v) => updateHsv({ s, v })}\n />\n\n <div className=\"flex flex-col [&>*]:mb-0 [&>*+*]:-mt-px\">\n <HueSlider\n h={hsv.h}\n onChange={(h) => {\n oklchHueRef.current = null;\n updateHsv({ h });\n }}\n />\n <AlphaSlider\n a={hsv.a}\n solidColor={solidColorString}\n solidR={solidR}\n solidG={solidG}\n solidB={solidB}\n onChange={(a) => updateHsv({ a })}\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-2\">\n <FormatDropdown\n value={currentFormat}\n onChange={handleFormatChange}\n {...(formatOpen !== undefined ? { open: formatOpen } : {})}\n {...(defaultFormatOpen !== undefined ? { defaultOpen: defaultFormatOpen } : {})}\n />\n {!hideEyedropper && <EyeDropperButton onPick={handleEyedrop} />}\n </div>\n\n <ColorInputsRow\n parsed={parsed}\n format={currentFormat}\n oklchHue={oklchHueRef.current}\n onChannelChange={(channel, value) => {\n const p = { ...parsed };\n switch (channel) {\n case \"hex\":\n handleHexCommit(value as string);\n return;\n case \"r\":\n case \"g\":\n case \"b\": {\n oklchHueRef.current = null;\n const r = channel === \"r\" ? Number(value) : p.r;\n const g = channel === \"g\" ? Number(value) : p.g;\n const b = channel === \"b\" ? Number(value) : p.b;\n const hsvVal = rgbToHsv(r, g, b);\n updateHsv({\n h: hsvVal.s === 0 ? hsv.h : hsvVal.h,\n s: hsvVal.s,\n v: hsvVal.v,\n });\n return;\n }\n case \"hSL\":\n case \"sSL\":\n case \"lSL\": {\n if (channel === \"hSL\") oklchHueRef.current = null;\n const hsl = rgbToHsl(p.r, p.g, p.b);\n const h2 = channel === \"hSL\" ? Number(value) : hsl.h;\n const s2 = channel === \"sSL\" ? Number(value) / 100 : hsl.s;\n const l2 = channel === \"lSL\" ? Number(value) / 100 : hsl.l;\n const rgb = hslToRgb(h2, clamp01(s2), clamp01(l2));\n const hsvVal = rgbToHsv(rgb.r, rgb.g, rgb.b);\n updateHsv({\n h: hsvVal.s === 0 ? h2 : hsvVal.h,\n s: hsvVal.s,\n v: hsvVal.v,\n });\n return;\n }\n case \"L\":\n case \"C\":\n case \"H\": {\n const cur = rgbToOklch(p.r, p.g, p.b);\n // For L/C edits, anchor on the user's last stated H so we\n // don't drift along with chroma changes.\n const baseH = oklchHueRef.current ?? cur.H;\n const L = channel === \"L\" ? Number(value) / 100 : cur.L;\n const C = channel === \"C\" ? Number(value) : cur.C;\n const H = channel === \"H\" ? Number(value) : baseH;\n oklchHueRef.current = H;\n const rgb = oklchToRgb(clamp01(L), Math.max(0, C), H);\n const hsvVal = rgbToHsv(rgb.r, rgb.g, rgb.b);\n updateHsv({\n h: hsvVal.s === 0 ? hsv.h : hsvVal.h,\n s: hsvVal.s,\n v: hsvVal.v,\n });\n return;\n }\n case \"alphaPercent\": {\n const a = clamp01(Number(value) / 100);\n updateHsv({ a });\n return;\n }\n }\n }}\n />\n\n {(swatches ?? presets) && (swatches ?? presets)!.length > 0 && (\n <SwatchStrip\n swatches={(swatches ?? presets)!}\n current={parsed.hex}\n onPick={handleSwatchPick}\n />\n )}\n </div>\n </SurfaceProvider>\n );\n },\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\n// ---------------------------------------------------------------------------\n// ColorInputsRow — adapts inputs to format\n// ---------------------------------------------------------------------------\n\ntype ChannelKey =\n | \"hex\"\n | \"r\"\n | \"g\"\n | \"b\"\n | \"hSL\"\n | \"sSL\"\n | \"lSL\"\n | \"L\"\n | \"C\"\n | \"H\"\n | \"alphaPercent\";\n\nfunction ColorInputsRow({\n parsed,\n format,\n oklchHue,\n onChannelChange,\n}: {\n parsed: ParsedColor;\n format: ColorFormat;\n /** Sticky OKLCH hue override for display (preserves user's stated H across round-trip drift). */\n oklchHue?: number | null;\n onChannelChange: (key: ChannelKey, value: string) => void;\n}) {\n const alphaPct = Math.round(parsed.a * 100);\n\n if (format === \"hex\") {\n const hexNoHash = parsed.hex.replace(/^#/, \"\").toUpperCase();\n return (\n <div className=\"grid grid-cols-2 gap-2\">\n <ChannelTooltip label=\"Hex\">\n <ColorInput\n value={hexNoHash}\n onCommit={(next) => onChannelChange(\"hex\", next.startsWith(\"#\") ? next : `#${next}`)}\n ariaLabel=\"Hex value\"\n prefix=\"#\"\n />\n </ChannelTooltip>\n <AlphaInput value={alphaPct} onCommit={(n) => onChannelChange(\"alphaPercent\", String(n))} />\n </div>\n );\n }\n\n if (format === \"rgb\") {\n return (\n <div className=\"grid grid-cols-4 gap-1\">\n <ChannelTooltip label=\"Red\">\n <ColorInput\n value={String(parsed.r)}\n onCommit={(n) => onChannelChange(\"r\", n)}\n ariaLabel=\"Red\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={255}\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Green\">\n <ColorInput\n value={String(parsed.g)}\n onCommit={(n) => onChannelChange(\"g\", n)}\n ariaLabel=\"Green\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={255}\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Blue\">\n <ColorInput\n value={String(parsed.b)}\n onCommit={(n) => onChannelChange(\"b\", n)}\n ariaLabel=\"Blue\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={255}\n />\n </ChannelTooltip>\n <AlphaInput value={alphaPct} onCommit={(n) => onChannelChange(\"alphaPercent\", String(n))} />\n </div>\n );\n }\n\n if (format === \"hsl\") {\n const hsl = rgbToHsl(parsed.r, parsed.g, parsed.b);\n return (\n <div className=\"grid grid-cols-4 gap-1\">\n <ChannelTooltip label=\"Hue\">\n <ColorInput\n value={String(Math.round(hsl.h))}\n onCommit={(n) => onChannelChange(\"hSL\", n)}\n ariaLabel=\"Hue\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={360}\n wrap\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Saturation\">\n <ColorInput\n value={String(Math.round(hsl.s * 100))}\n onCommit={(n) => onChannelChange(\"sSL\", n)}\n ariaLabel=\"Saturation\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={100}\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Lightness\">\n <ColorInput\n value={String(Math.round(hsl.l * 100))}\n onCommit={(n) => onChannelChange(\"lSL\", n)}\n ariaLabel=\"Lightness\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={100}\n />\n </ChannelTooltip>\n <AlphaInput value={alphaPct} onCommit={(n) => onChannelChange(\"alphaPercent\", String(n))} />\n </div>\n );\n }\n\n // oklch\n const oklch = rgbToOklch(parsed.r, parsed.g, parsed.b);\n const displayH = oklchHue ?? oklch.H;\n return (\n <div className=\"grid grid-cols-4 gap-1\">\n <ChannelTooltip label=\"Lightness\">\n <ColorInput\n value={(oklch.L * 100).toFixed(0)}\n onCommit={(n) => onChannelChange(\"L\", n)}\n ariaLabel=\"Lightness\"\n align=\"center\"\n inputMode=\"decimal\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={100}\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Chroma\">\n <ColorInput\n value={oklch.C.toFixed(2)}\n onCommit={(n) => onChannelChange(\"C\", n)}\n ariaLabel=\"Chroma\"\n align=\"center\"\n inputMode=\"decimal\"\n nudgeStep={0.01}\n nudgeShiftStep={0.1}\n decimals={2}\n scrubbable\n min={0}\n max={0.4}\n />\n </ChannelTooltip>\n <ChannelTooltip label=\"Hue\">\n <ColorInput\n value={displayH.toFixed(0)}\n onCommit={(n) => onChannelChange(\"H\", n)}\n ariaLabel=\"Hue\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n scrubbable\n min={0}\n max={360}\n wrap\n />\n </ChannelTooltip>\n <AlphaInput value={alphaPct} onCommit={(n) => onChannelChange(\"alphaPercent\", String(n))} />\n </div>\n );\n}\n\nfunction ChannelTooltip({ label, children }: { label: string; children: ReactNode }) {\n return (\n <Tooltip content={label} delayDuration={300}>\n <div>{children}</div>\n </Tooltip>\n );\n}\n\nfunction AlphaInput({ value, onCommit }: { value: number; onCommit: (n: number) => void }) {\n return (\n <ChannelTooltip label=\"Alpha\">\n <ColorInput\n value={`${value}%`}\n onCommit={(input) => {\n const n = parseFloat(input.replace(\"%\", \"\"));\n if (Number.isNaN(n)) return;\n onCommit(Math.max(0, Math.min(100, Math.round(n))));\n }}\n ariaLabel=\"Alpha\"\n align=\"center\"\n inputMode=\"numeric\"\n nudgeStep={1}\n nudgeShiftStep={10}\n hasPercent\n scrubbable\n min={0}\n max={100}\n />\n </ChannelTooltip>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ColorPickerPopover (trigger button + portal panel)\n// ---------------------------------------------------------------------------\n\nconst ColorPickerPopover = forwardRef<HTMLDivElement, ColorPickerPopoverProps>(\n (\n {\n triggerLabel,\n triggerLabelPosition = \"left\",\n triggerShowValue = true,\n triggerShowRemove = false,\n onTriggerRemove,\n triggerClassName,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n ...pickerProps\n },\n ref,\n ) => {\n const isOpenControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isOpenControlled ? openProp : internalOpen;\n const setOpen: (next: boolean | ((prev: boolean) => boolean)) => void = (next) => {\n const resolved = typeof next === \"function\" ? next(open) : next;\n if (!isOpenControlled) setInternalOpen(resolved);\n onOpenChange?.(resolved);\n };\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelEl, setPanelEl] = useState<HTMLDivElement | null>(null);\n const [rect, setRect] = useState<DOMRect | null>(null);\n const shape = useShape();\n const substrate = useSurface();\n const level = Math.min(substrate + 2, 8);\n\n const isControlled = pickerProps.value !== undefined;\n const [internalValue, setInternalValue] = useState(\n pickerProps.value ?? pickerProps.defaultValue ?? \"#6B97FF\",\n );\n const currentValue = isControlled ? (pickerProps.value as string) : internalValue;\n\n const onValueChange = useCallback(\n (v: string, parsed: ParsedColor) => {\n if (!isControlled) setInternalValue(v);\n pickerProps.onValueChange?.(v, parsed);\n },\n [isControlled, pickerProps],\n );\n\n useEffect(() => {\n if (!open || !triggerRef.current) {\n setRect(null);\n return;\n }\n const update = () => {\n if (triggerRef.current) {\n setRect(triggerRef.current.getBoundingClientRect());\n }\n };\n update();\n window.addEventListener(\"scroll\", update, { passive: true, capture: true });\n window.addEventListener(\"resize\", update);\n return () => {\n window.removeEventListener(\"scroll\", update, { capture: true } as EventListenerOptions);\n window.removeEventListener(\"resize\", update);\n };\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (\n !panelRef.current?.contains(e.target as Node) &&\n !triggerRef.current?.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onClick);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n const XIcon = useIcon(\"x\");\n const parsed = useMemo(() => parseColor(currentValue), [currentValue]);\n const swatchColor = parsed ? rgbToHexStr(parsed.r, parsed.g, parsed.b, parsed.a) : currentValue;\n const valueLabel = parsed\n ? rgbToHexStr(parsed.r, parsed.g, parsed.b, 1).replace(/^#/, \"\").toUpperCase()\n : currentValue;\n\n return (\n <div ref={ref} className=\"inline-flex\">\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n \"flex items-center gap-2 h-9 px-2 border border-border bg-transparent hover:bg-hover transition-colors duration-80 outline-none focus-visible:ring-1 focus-visible:ring-[#6B97FF] cursor-pointer\",\n shape.input,\n triggerClassName,\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {triggerLabel && triggerLabelPosition === \"left\" && (\n <span className=\"text-[13px] text-muted-foreground px-1 select-none\">\n {triggerLabel}\n </span>\n )}\n <ColorTile color={swatchColor} size={20} />\n {triggerShowValue && (\n <span className=\"text-[13px] text-foreground tabular-nums\">{valueLabel}</span>\n )}\n {triggerLabel && triggerLabelPosition === \"right\" && (\n <span className=\"text-[13px] text-muted-foreground px-1 select-none\">\n {triggerLabel}\n </span>\n )}\n {triggerShowRemove && (\n <span\n role=\"button\"\n aria-label=\"Remove color\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n onTriggerRemove?.();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onTriggerRemove?.();\n }\n }}\n className=\"ml-1 text-muted-foreground hover:text-foreground cursor-pointer flex items-center\"\n >\n <XIcon size={14} strokeWidth={1.5} />\n </span>\n )}\n </button>\n {open &&\n rect &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n style={{\n position: \"fixed\",\n top: rect.bottom + 6,\n left: rect.left,\n zIndex: 50,\n }}\n >\n <AnimatePresence>\n <motion.div\n ref={(node) => {\n (panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n setPanelEl(node);\n }}\n initial={{ opacity: 0, y: -4, scaleY: 0.96 }}\n animate={{ opacity: 1, y: 0, scaleY: 1 }}\n exit={{ opacity: 0, y: -4, scaleY: 0.96 }}\n transition={spring.moderate}\n style={{ transformOrigin: \"top left\" }}\n >\n <ColorPickerPortalContainer value={panelEl}>\n <SurfaceProvider value={level}>\n <ColorPicker\n {...pickerProps}\n value={currentValue}\n onValueChange={onValueChange}\n className={cn(surfaceClasses(level, 3), pickerProps.className)}\n />\n </SurfaceProvider>\n </ColorPickerPortalContainer>\n </motion.div>\n </AnimatePresence>\n </div>,\n document.body,\n )}\n </div>\n );\n },\n);\n\nColorPickerPopover.displayName = \"ColorPickerPopover\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n ColorPicker,\n ColorPickerPopover,\n ColorPickerPortalContainer,\n ColorSwatch,\n ColorTile,\n parseColor,\n buildParsed,\n};\n\nexport type {\n ColorPickerProps,\n ColorPickerPopoverProps,\n ColorSwatchProps,\n ColorFormat,\n ParsedColor,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { motionClasses } from \"../lib/interaction\";\nimport { ColorPicker } from \"./color-picker\";\n\ninterface ColorInputProps {\n value: string;\n onChange: (next: string) => void;\n /** Show an opacity slider (0–100). Pass `opacity` and `onOpacityChange`. */\n opacity?: number;\n onOpacityChange?: (next: number) => void;\n className?: string;\n disabled?: boolean;\n presets?: string[];\n}\n\n/**\n * Compact, inline color input designed for designer property panels.\n * Combines a swatch trigger (ColorPicker), a hex input, and an optional opacity field.\n */\nfunction ColorInput({\n value,\n onChange,\n opacity,\n onOpacityChange,\n className,\n disabled,\n presets,\n}: ColorInputProps) {\n const [hex, setHex] = React.useState(value);\n\n React.useEffect(() => {\n setHex(value);\n }, [value]);\n\n const commitHex = (next: string) => {\n if (/^#([0-9a-fA-F]{3}){1,2}$/.test(next)) onChange(next);\n else setHex(value);\n };\n\n return (\n <div\n className={cn(\n \"inline-flex h-8 items-stretch gap-0 rounded-md border border-border bg-card overflow-hidden\",\n \"shadow-natural focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary\",\n motionClasses,\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <ColorPicker\n value={value}\n onChange={onChange}\n {...(presets !== undefined && { presets })}\n {...(disabled !== undefined && { disabled })}\n className=\"h-full w-8 border-0 rounded-none focus-visible:ring-0\"\n />\n <input\n type=\"text\"\n value={hex.replace(/^#/, \"\")}\n onChange={(e) => setHex(\"#\" + e.target.value.replace(/^#/, \"\"))}\n onBlur={(e) => commitHex(\"#\" + e.target.value.replace(/^#/, \"\"))}\n onKeyDown={(e) => {\n if (e.key === \"Enter\")\n commitHex(\"#\" + (e.target as HTMLInputElement).value.replace(/^#/, \"\"));\n }}\n spellCheck={false}\n className=\"w-[5.5rem] caption text-foreground px-2 bg-transparent border-l border-border focus:outline-none uppercase\"\n />\n {typeof opacity === \"number\" && onOpacityChange && (\n <div className=\"relative flex items-center border-l border-border\">\n <input\n type=\"number\"\n min={0}\n max={100}\n value={Math.round(opacity)}\n onChange={(e) => onOpacityChange(Number(e.target.value))}\n className=\"w-12 caption text-foreground px-2 bg-transparent focus:outline-none text-right [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\"\n />\n <span aria-hidden className=\"caption-xs text-muted-foreground pr-2\">\n %\n </span>\n </div>\n )}\n </div>\n );\n}\n\nColorInput.displayName = \"ColorInput\";\n\nexport { ColorInput };\nexport type { ColorInputProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n statusColor?: string;\n avatar?: string;\n}\n\ninterface ComboboxProps {\n options: ComboboxOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n}\n\nfunction Combobox({\n options,\n value,\n onValueChange,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No results found.\",\n className,\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n const [query, setQuery] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(-1);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listboxId = React.useId();\n\n const selectedOption = options.find((o) => o.value === value);\n\n const filtered =\n query === \"\"\n ? options\n : options.filter(\n (o) =>\n o.label.toLowerCase().includes(query.toLowerCase()) ||\n o.description?.toLowerCase().includes(query.toLowerCase()),\n );\n\n // Reset active index when the filtered list changes\n React.useEffect(() => {\n setActiveIndex(-1);\n }, [filtered.length, open]);\n\n // Close on outside click\n React.useEffect(() => {\n function onMouseDown(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n setQuery(\"\");\n }\n }\n document.addEventListener(\"mousedown\", onMouseDown);\n return () => document.removeEventListener(\"mousedown\", onMouseDown);\n }, []);\n\n function closeDropdown() {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(-1);\n }\n\n function selectOption(opt: ComboboxOption) {\n onValueChange?.(opt.value);\n closeDropdown();\n }\n\n function handleInputKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"Escape\") {\n closeDropdown();\n return;\n }\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n return;\n }\n const target = activeIndex >= 0 ? filtered[activeIndex] : filtered[0];\n if (target) selectOption(target);\n } else if (e.key === \"Tab\") {\n closeDropdown();\n }\n }\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger */}\n <div className=\"relative flex items-center\">\n {selectedOption?.avatar && !open && (\n <div className=\"pointer-events-none absolute left-2.5 flex size-5 items-center justify-center rounded-full bg-muted caption-xs font-semibold text-muted-foreground shrink-0\">\n {selectedOption.avatar}\n </div>\n )}\n {selectedOption?.statusColor && !open && (\n <div\n className=\"pointer-events-none absolute left-3 size-2 rounded-full shrink-0\"\n style={{ backgroundColor: selectedOption.statusColor }}\n />\n )}\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined\n }\n aria-autocomplete=\"list\"\n className={cn(\n \"flex h-10 w-full rounded-lg border border-border bg-card pr-10 body text-foreground\",\n \"placeholder:text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:border-border\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n selectedOption?.avatar && !open\n ? \"pl-8\"\n : selectedOption?.statusColor && !open\n ? \"pl-7\"\n : \"pl-3\",\n )}\n placeholder={open ? searchPlaceholder : (selectedOption?.label ?? placeholder)}\n value={open ? query : (selectedOption?.label ?? \"\")}\n onChange={(e) => {\n setQuery(e.target.value);\n if (!open) setOpen(true);\n }}\n onFocus={() => {\n setOpen(true);\n setQuery(\"\");\n }}\n onKeyDown={handleInputKeyDown}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? \"Close\" : \"Open\"}\n className=\"absolute inset-y-0 right-0 flex w-10 items-center justify-center text-muted-foreground hover:text-muted-foreground transition-colors\"\n onClick={() => {\n if (open) {\n closeDropdown();\n } else {\n setOpen(true);\n inputRef.current?.focus();\n }\n }}\n >\n <ChevronsUpDown size={14} />\n </button>\n </div>\n\n {/* Dropdown */}\n {open && (\n <>\n <button\n type=\"button\"\n aria-label=\"Close options\"\n className=\"fixed inset-0 z-40 hidden bg-black/30 backdrop-blur-sm max-sm:block\"\n onClick={closeDropdown}\n />\n <div\n className={cn(\n \"absolute z-50 mt-1 w-full overflow-hidden rounded-lg border border-border bg-card shadow-elevated\",\n \"max-sm:fixed max-sm:inset-x-3 max-sm:bottom-3 max-sm:[bottom:max(0.75rem,env(safe-area-inset-bottom))] max-sm:top-auto max-sm:mt-0 max-sm:w-auto\",\n \"max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:p-2 max-sm:pt-5\",\n \"max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-2 max-sm:before:h-1 max-sm:before:w-9 max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35\",\n )}\n >\n <ul\n id={listboxId}\n role=\"listbox\"\n className=\"max-h-60 overflow-auto py-1 max-sm:max-h-[calc(min(70dvh,28rem)-3rem)]\"\n >\n {filtered.length === 0 ? (\n <li className=\"px-3 py-2 body text-muted-foreground\">{emptyText}</li>\n ) : (\n filtered.map((option, idx) => {\n const isSelected = option.value === value;\n const isActive = idx === activeIndex;\n return (\n <li\n key={option.value}\n id={`${listboxId}-option-${idx}`}\n role=\"option\"\n aria-selected={isSelected}\n className={cn(\n \"flex min-h-10 cursor-pointer select-none items-center gap-2.5 px-3 py-2 body transition-colors\",\n isSelected\n ? \"bg-brand-primary text-background\"\n : isActive\n ? \"bg-muted text-foreground\"\n : \"text-foreground hover:bg-muted\",\n )}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setActiveIndex(idx)}\n onClick={() => selectOption(option)}\n >\n {/* Avatar */}\n {option.avatar && (\n <div\n className={cn(\n \"flex size-6 shrink-0 items-center justify-center rounded-full caption-xs font-semibold\",\n isSelected\n ? \"bg-card/20 text-background\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n {option.avatar}\n </div>\n )}\n {/* Status dot */}\n {option.statusColor && !option.avatar && (\n <div\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: option.statusColor }}\n />\n )}\n <div className=\"min-w-0 flex-1\">\n <p className={cn(\"truncate\", isSelected && \"font-semibold\")}>\n {option.label}\n </p>\n {option.description && (\n <p\n className={cn(\n \"caption truncate\",\n isSelected ? \"text-background/70\" : \"text-muted-foreground\",\n )}\n >\n {option.description}\n </p>\n )}\n </div>\n {isSelected && <Check size={14} className=\"shrink-0\" />}\n </li>\n );\n })\n )}\n </ul>\n </div>\n </>\n )}\n </div>\n );\n}\n\nCombobox.displayName = \"Combobox\";\n\nexport { Combobox };\n","\"use client\";\n\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n} from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { spring } from \"../lib/springs\";\nimport { useShape } from \"../lib/shape-context\";\nimport { SurfaceProvider, useSurface } from \"../lib/surface-context\";\nimport { surfaceClasses } from \"../lib/surface-classes\";\nimport { Button } from \"./button\";\n\nconst DIALOG_OFFSET = 4;\n\nconst DialogOpenContext = createContext(false);\n\nfunction Dialog({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: DialogPrimitive.DialogProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = controlledOpen ?? uncontrolledOpen;\n const handleOpenChange = onOpenChange ?? setUncontrolledOpen;\n\n return (\n <DialogOpenContext.Provider value={open}>\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange} {...props}>\n {children}\n </DialogPrimitive.Root>\n </DialogOpenContext.Provider>\n );\n}\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\n\ninterface DialogContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n size?: \"sm\" | \"lg\";\n /** Portal target. When set, the overlay and panel render inside this element\n * (positioned `absolute`) instead of covering the viewport (`fixed`). Pair\n * with a `position: relative; overflow: hidden` container — and usually\n * `<Dialog modal={false}>` — to scope a dialog to a bounded region, e.g. a\n * docs preview. Defaults to the document body / full-viewport behaviour. */\n container?: HTMLElement | null;\n}\n\nconst DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, size = \"sm\", container, ...props }, ref) => {\n const XIcon = useIcon(\"x\");\n const open = useContext(DialogOpenContext);\n const shape = useShape();\n const substrate = useSurface();\n const dialogLevel = Math.min(substrate + DIALOG_OFFSET, 8);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n if (open) setMounted(true);\n }, [open]);\n\n const handleExitComplete = () => {\n if (!open) setMounted(false);\n };\n\n if (!mounted) return null;\n\n return (\n <DialogPrimitive.Portal forceMount container={container ?? undefined}>\n <DialogPrimitive.Overlay asChild forceMount>\n <motion.div\n className={cn(\n container ? \"absolute\" : \"fixed\",\n \"inset-0 z-50 bg-black/40 dark:bg-black/80\",\n )}\n initial={{ opacity: 0 }}\n animate={{ opacity: open ? 1 : 0 }}\n transition={open ? spring.slow : spring.slow.exit}\n />\n </DialogPrimitive.Overlay>\n <DialogPrimitive.Content ref={ref} asChild forceMount {...props}>\n <motion.div\n className={cn(\n container ? \"absolute\" : \"fixed\",\n \"left-1/2 top-1/2 z-50 w-[calc(100%-2rem)]\",\n surfaceClasses(dialogLevel),\n \"p-6 focus:outline-none\",\n \"rounded-t-2xl max-sm:pb-[calc(1.5rem+env(safe-area-inset-bottom))] data-[state=open]:slide-in-from-bottom sm:data-[state=open]:zoom-in-95\",\n size === \"sm\" && \"max-w-[400px]\",\n size === \"lg\" && \"max-w-[540px]\",\n shape.container,\n \"rounded-t-2xl\",\n className,\n )}\n initial={{ opacity: 0, scale: 0.97, x: \"-50%\", y: \"-50%\" }}\n animate={{\n opacity: open ? 1 : 0,\n scale: open ? 1 : 0.97,\n x: \"-50%\",\n y: \"-50%\",\n }}\n transition={open ? spring.slow : spring.slow.exit}\n onAnimationComplete={handleExitComplete}\n >\n <SurfaceProvider value={dialogLevel}>\n {children}\n <DialogPrimitive.Close asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"absolute right-3 top-3\">\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n </SurfaceProvider>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\nfunction DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-4\", className)} {...props} />;\n}\n\nfunction DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex justify-end gap-2 mt-6\", className)} {...props} />;\n}\n\nconst DialogTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"text-[16px] text-foreground leading-tight\", className)}\n style={{ fontVariationSettings: \"'wght' 700\" }}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-[13px] text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Search, ArrowRight } from \"lucide-react\";\nimport { Dialog, DialogContent } from \"./dialog\";\n\nexport interface CommandPaletteItem {\n id?: string | number;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n category?: string;\n href?: string;\n onSelect?: () => void;\n}\n\ninterface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandPaletteItem[];\n placeholder?: string;\n emptyText?: string;\n}\n\nfunction CommandPalette({\n open,\n onClose,\n items,\n placeholder = \"Search...\",\n emptyText = \"No results found.\",\n}: CommandPaletteProps) {\n const [query, setQuery] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Focus input when opened\n React.useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 50);\n setQuery(\"\");\n }\n }, [open]);\n\n const filtered =\n query === \"\"\n ? items\n : items.filter(\n (item) =>\n item.label.toLowerCase().includes(query.toLowerCase()) ||\n item.description?.toLowerCase().includes(query.toLowerCase()) ||\n item.category?.toLowerCase().includes(query.toLowerCase()),\n );\n\n // Group by category\n const grouped = filtered.reduce<Record<string, CommandPaletteItem[]>>((acc, item) => {\n const cat = item.category ?? \"\";\n if (!acc[cat]) acc[cat] = [];\n acc[cat].push(item);\n return acc;\n }, {});\n\n const categories = Object.keys(grouped);\n\n function handleSelect(item: CommandPaletteItem) {\n if (item.href) {\n window.location.href = item.href;\n } else {\n item.onSelect?.();\n }\n onClose();\n }\n\n return (\n <Dialog open={open} onOpenChange={(v) => !v && onClose()}>\n <DialogContent className=\"gap-0 overflow-hidden p-0 sm:max-w-xl\">\n {/* Search input */}\n <div className=\"flex items-center gap-3 border-b border-border px-4\">\n <Search size={16} className=\"shrink-0 text-muted-foreground\" />\n <input\n ref={inputRef}\n type=\"text\"\n className=\"h-12 flex-1 bg-transparent body text-foreground placeholder:text-muted-foreground focus:outline-none\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onClose();\n if (e.key === \"Enter\" && filtered.length > 0) handleSelect(filtered[0]);\n }}\n />\n <kbd className=\"hidden items-center gap-0.5 sm:flex\">\n <span className=\"caption-xs font-medium text-muted-foreground rounded border border-border px-1.5 py-0.5\">\n esc\n </span>\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"max-h-80 overflow-y-auto\">\n {filtered.length === 0 ? (\n <p className=\"px-4 py-8 text-center body text-muted-foreground\">{emptyText}</p>\n ) : (\n <ul role=\"list\" className=\"py-2\">\n {categories.map((cat) => (\n <li key={cat}>\n {cat && <p className=\"label px-4 py-2 text-muted-foreground\">{cat}</p>}\n {grouped[cat].map((item, i) => (\n <button\n key={item.id ?? i}\n type=\"button\"\n className=\"flex min-h-10 w-full items-center gap-3 px-4 py-2.5 body text-left transition-colors hover:bg-muted focus-visible:bg-muted focus-visible:outline-none\"\n onClick={() => handleSelect(item)}\n >\n {item.icon && (\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg border border-border bg-card text-muted-foreground\">\n {item.icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-medium text-foreground truncate\">{item.label}</p>\n {item.description && (\n <p className=\"caption text-muted-foreground truncate\">\n {item.description}\n </p>\n )}\n </div>\n <ArrowRight size={13} className=\"shrink-0 text-muted-foreground\" />\n </button>\n ))}\n </li>\n ))}\n </ul>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\nCommandPalette.displayName = \"CommandPalette\";\n\nexport { CommandPalette };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Search } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\ninterface CommandContextValue {\n query: string;\n setQuery: React.Dispatch<React.SetStateAction<string>>;\n onSelect?: (value: string) => void;\n reportVisible: (id: string, visible: boolean) => void;\n}\n\nconst CommandCtx = React.createContext<CommandContextValue>({\n query: \"\",\n setQuery: () => {},\n reportVisible: () => {},\n});\n\nconst CommandVisibleCtx = React.createContext(0);\n\ninterface CommandProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n onSelect?: (value: string) => void;\n}\n\nfunction Command({ className, children, onSelect, ...props }: CommandProps) {\n const [query, setQuery] = React.useState(\"\");\n const visibleIds = React.useRef(new Set<string>());\n const [visibleCount, setVisibleCount] = React.useState(0);\n\n const reportVisible = React.useCallback((id: string, visible: boolean) => {\n const had = visibleIds.current.has(id);\n if (visible && !had) {\n visibleIds.current.add(id);\n setVisibleCount(visibleIds.current.size);\n } else if (!visible && had) {\n visibleIds.current.delete(id);\n setVisibleCount(visibleIds.current.size);\n }\n }, []);\n\n return (\n <CommandCtx.Provider\n value={{ query, setQuery, ...(onSelect !== undefined && { onSelect }), reportVisible }}\n >\n <CommandVisibleCtx.Provider value={visibleCount}>\n <div\n className={cn(\n \"flex flex-col overflow-hidden rounded-xl border border-border bg-card\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CommandVisibleCtx.Provider>\n </CommandCtx.Provider>\n );\n}\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\">\n>(({ className, ...props }, ref) => {\n const { query, setQuery } = React.useContext(CommandCtx);\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Search size={14} className=\"shrink-0 text-muted-foreground\" />\n <input\n ref={ref}\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n className={cn(\n \"flex h-10 w-full bg-transparent body text-foreground\",\n \"placeholder:text-muted-foreground focus:outline-none\",\n className,\n )}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const listRef = React.useRef<HTMLDivElement | null>(null);\n\n const combinedRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n listRef.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n },\n [ref],\n );\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (![\"ArrowDown\", \"ArrowUp\"].includes(e.key)) return;\n e.preventDefault();\n const el = listRef.current;\n if (!el) return;\n const items = Array.from(\n el.querySelectorAll<HTMLElement>(\"[data-cmd-item]:not([aria-disabled='true'])\"),\n );\n if (!items.length) return;\n const focused = el.querySelector<HTMLElement>(\"[data-cmd-item]:focus\");\n const idx = focused ? items.indexOf(focused) : -1;\n const next =\n e.key === \"ArrowDown\"\n ? items[Math.min(idx + 1, items.length - 1)]\n : items[Math.max(idx - 1, 0)];\n next?.focus();\n };\n\n return (\n <div\n ref={combinedRef}\n role=\"listbox\"\n onKeyDown={handleKeyDown}\n className={cn(\"max-h-[300px] overflow-y-auto py-1\", className)}\n {...props}\n />\n );\n },\n);\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children = \"No results found.\", ...props }, ref) => {\n const visibleCount = React.useContext(CommandVisibleCtx);\n if (visibleCount > 0) return null;\n return (\n <div\n ref={ref}\n className={cn(\"py-6 text-center caption text-muted-foreground\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCommandEmpty.displayName = \"CommandEmpty\";\n\ninterface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: string;\n}\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ className, heading, children, ...props }, ref) => (\n <div ref={ref} role=\"group\" className={cn(\"py-1\", className)} {...props}>\n {heading && <p className=\"px-3 pb-1 pt-0.5 label text-muted-foreground\">{heading}</p>}\n {children}\n </div>\n ),\n);\nCommandGroup.displayName = \"CommandGroup\";\n\ninterface CommandItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n value?: string;\n keywords?: string[];\n disabled?: boolean;\n onSelect?: (value: string) => void;\n}\n\nconst CommandItem = React.forwardRef<HTMLDivElement, CommandItemProps>(\n ({ className, value = \"\", keywords, disabled, onSelect, children, ...props }, ref) => {\n const { query, onSelect: ctxOnSelect, reportVisible } = React.useContext(CommandCtx);\n const id = React.useId();\n\n const searchText = (keywords ?? [value]).join(\" \").toLowerCase();\n const isVisible = !query || searchText.includes(query.toLowerCase());\n\n React.useLayoutEffect(() => {\n reportVisible(id, isVisible && !disabled);\n return () => reportVisible(id, false);\n }, [id, isVisible, disabled, reportVisible]);\n\n if (!isVisible) return null;\n\n const handleSelect = () => {\n if (disabled) return;\n onSelect?.(value);\n ctxOnSelect?.(value);\n };\n\n return (\n <div\n ref={ref}\n role=\"option\"\n aria-selected={false}\n aria-disabled={disabled || undefined}\n data-cmd-item\n tabIndex={disabled ? undefined : 0}\n className={cn(\n \"relative mx-1 flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"hover:bg-muted hover:text-foreground\",\n \"focus:bg-muted focus:text-foreground\",\n disabled && \"pointer-events-none opacity-40\",\n className,\n )}\n onClick={handleSelect}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSelect();\n }\n }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCommandItem.displayName = \"CommandItem\";\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"my-1 h-px bg-muted\", className)} {...props} />\n ),\n);\nCommandSeparator.displayName = \"CommandSeparator\";\n\nfunction CommandShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn(\"ml-auto caption text-muted-foreground tracking-widest font-medium\", className)}\n {...props}\n />\n );\n}\nCommandShortcut.displayName = \"CommandShortcut\";\n\ninterface CommandDialogProps extends React.ComponentProps<typeof Dialog> {\n title?: string;\n description?: string;\n className?: string;\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog {...props}>\n <DialogContent className={cn(\"gap-0 overflow-hidden p-0 sm:max-w-xl\", className)}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command className=\"rounded-none border-0 shadow-none\">{children}</Command>\n </DialogContent>\n </Dialog>\n );\n}\nCommandDialog.displayName = \"CommandDialog\";\n\nCommand.displayName = \"Command\";\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandSeparator,\n CommandShortcut,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ContextMenu } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst ContextMenuRoot = ContextMenu.Root;\nconst ContextMenuTrigger = ContextMenu.Trigger;\nconst ContextMenuGroup = ContextMenu.Group;\nconst ContextMenuPortal = ContextMenu.Portal;\nconst ContextMenuSub = ContextMenu.Sub;\nconst ContextMenuRadioGroup = ContextMenu.RadioGroup;\n\nconst ContextMenuContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Content>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <ContextMenu.Portal>\n <ContextMenu.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-xl border border-border bg-card p-1 text-card-foreground shadow-elevated outline-none\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </ContextMenu.Portal>\n </>\n));\nContextMenuContent.displayName = \"ContextMenuContent\";\n\nconst ContextMenuItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(({ className, inset, destructive, ...props }, ref) => (\n <ContextMenu.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body outline-none transition-colors\",\n destructive\n ? \"text-destructive focus:bg-destructive/10 focus:text-destructive\"\n : \"text-muted-foreground focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = \"ContextMenuItem\";\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenu.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenu.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </ContextMenu.ItemIndicator>\n </span>\n {children}\n </ContextMenu.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = \"ContextMenuCheckboxItem\";\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenu.RadioItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenu.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </ContextMenu.ItemIndicator>\n </span>\n {children}\n </ContextMenu.RadioItem>\n));\nContextMenuRadioItem.displayName = \"ContextMenuRadioItem\";\n\nconst ContextMenuLabel = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenu.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nContextMenuLabel.displayName = \"ContextMenuLabel\";\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenu.Separator\n ref={ref}\n className={cn(\"mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenu.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </ContextMenu.SubTrigger>\n));\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof ContextMenu.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenu.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <ContextMenu.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-xl border border-border bg-card p-1 text-card-foreground shadow-elevated outline-none\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nContextMenuSubContent.displayName = \"ContextMenuSubContent\";\n\nfunction ContextMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\";\n\nexport {\n ContextMenuRoot as ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuRadioGroup,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuSub,\n ContextMenuSubTrigger,\n ContextMenuSubContent,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n};\n","\"use client\";\n\nimport {\n useRef,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n type TdHTMLAttributes,\n type ThHTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\n\n// ── Context ──────────────────────────────────────────────\n\ninterface TableContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n}\n\nconst TableContext = createContext<TableContextValue | null>(null);\n\n// ── Table ────────────────────────────────────────────────\n\ninterface TableProps extends HTMLAttributes<HTMLTableElement> {\n children: ReactNode;\n containerClassName?: string;\n}\n\nconst Table = forwardRef<HTMLTableElement, TableProps>(\n ({ children, className, containerClassName, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { activeIndex, itemRects, sessionRef, handlers, registerItem, measureItems } =\n useProximityHover(containerRef);\n\n useEffect(() => {\n measureItems();\n }, [measureItems, children]);\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n\n return (\n <TableContext.Provider value={{ registerItem, activeIndex }}>\n <div\n ref={containerRef}\n className={cn(\"relative\", containerClassName)}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n >\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className=\"absolute bg-hover pointer-events-none\"\n initial={{\n opacity: 0,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n <table\n ref={ref}\n className={cn(\"w-full text-[13px] border-collapse\", className)}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n );\n },\n);\n\nTable.displayName = \"Table\";\n\n// ── TableHeader ──────────────────────────────────────────\n\nconst TableHeader = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <thead ref={ref} className={cn(\"\", className)} {...props} />,\n);\n\nTableHeader.displayName = \"TableHeader\";\n\n// ── TableBody ────────────────────────────────────────────\n\nconst TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <tbody ref={ref} className={cn(\"\", className)} {...props} />,\n);\n\nTableBody.displayName = \"TableBody\";\n\n// ── TableRow ─────────────────────────────────────────────\n\ninterface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n index?: number;\n}\n\nconst TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ index, className, style, ...props }, ref) => {\n const internalRef = useRef<HTMLTableRowElement>(null);\n const ctx = useContext(TableContext);\n\n useEffect(() => {\n if (index === undefined || !ctx) return;\n ctx.registerItem(index, internalRef.current);\n return () => ctx.registerItem(index, null);\n }, [index, ctx]);\n\n const isBodyRow = index !== undefined;\n const activeIdx = ctx?.activeIndex ?? null;\n const hideBorder =\n activeIdx !== null &&\n ((isBodyRow && (index === activeIdx || index === activeIdx - 1)) ||\n (!isBodyRow && activeIdx === 0));\n\n return (\n <tr\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLTableRowElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLTableRowElement | null>).current = node;\n }}\n data-proximity-index={index}\n className={cn(\n \"group/row relative z-10 border-b transition-[border-color] duration-80\",\n hideBorder ? \"border-transparent\" : \"border-accent/40\",\n isBodyRow && activeIdx === index && \"is-active\",\n className,\n )}\n style={{\n ...style,\n fontVariationSettings: isBodyRow ? fontWeights.normal : fontWeights.semibold,\n }}\n {...props}\n />\n );\n },\n);\n\nTableRow.displayName = \"TableRow\";\n\n// ── TableHead ────────────────────────────────────────────\n\nconst TableHead = forwardRef<HTMLTableCellElement, ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"px-3 py-2 text-left text-foreground\", className)} {...props} />\n ),\n);\n\nTableHead.displayName = \"TableHead\";\n\n// ── TableCell ────────────────────────────────────────────\n\nconst TableCell = forwardRef<HTMLTableCellElement, TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-3 py-2 text-muted-foreground transition-colors duration-80 group-[.is-active]/row:text-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\n\nTableCell.displayName = \"TableCell\";\n\nconst TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <tfoot ref={ref} className={cn(\"\", className)} {...props} />,\n);\n\nTableFooter.displayName = \"TableFooter\";\n\nconst TableCaption = forwardRef<HTMLTableCaptionElement, HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-[13px] text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\n\nTableCaption.displayName = \"TableCaption\";\n\n// ── Exports ──────────────────────────────────────────────\n\nexport { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { controlSurfaceClasses, focusRingClasses, motionClasses } from \"../lib/interaction\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"flex h-10 w-full rounded-md px-3 py-1\",\n \"body text-foreground placeholder:text-muted-foreground\",\n controlSurfaceClasses,\n motionClasses,\n focusRingClasses,\n \"focus-visible:border-brand-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n flexRender,\n type ColumnDef,\n type SortingState,\n type ColumnFiltersState,\n} from \"@tanstack/react-table\";\nimport { ChevronUp, ChevronDown, ChevronsUpDown } from \"lucide-react\";\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { cn } from \"../lib/utils\";\n\ninterface DataTableProps<TData> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[];\n data: TData[];\n searchKey?: string;\n searchPlaceholder?: string;\n pageSize?: number;\n showPagination?: boolean;\n}\n\nfunction DataTable<TData>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Search...\",\n pageSize = 10,\n showPagination = true,\n}: DataTableProps<TData>) {\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n state: { sorting, columnFilters },\n initialState: { pagination: { pageSize } },\n });\n\n return (\n <div className=\"flex flex-col gap-4\">\n {searchKey && (\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(e) => table.getColumn(searchKey)?.setFilterValue(e.target.value)}\n className=\"max-w-sm\"\n />\n )}\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n aria-sort={\n header.column.getCanSort()\n ? header.column.getIsSorted() === \"asc\"\n ? \"ascending\"\n : header.column.getIsSorted() === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined\n }\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <button\n className={cn(\n \"flex min-h-10 items-center gap-1 transition-colors hover:text-muted-foreground\",\n header.column.getIsSorted() && \"text-foreground\",\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getIsSorted() === \"asc\" ? (\n <ChevronUp size={12} className=\"text-brand-primary\" />\n ) : header.column.getIsSorted() === \"desc\" ? (\n <ChevronDown size={12} className=\"text-brand-primary\" />\n ) : (\n <ChevronsUpDown size={12} className=\"text-muted-foreground\" />\n )}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n {showPagination && (\n <div className=\"flex items-center justify-between\">\n <p className=\"caption tabular-nums text-muted-foreground\">\n {table.getFilteredRowModel().rows.length} result\n {table.getFilteredRowModel().rows.length !== 1 ? \"s\" : \"\"}\n </p>\n <div className=\"flex items-center gap-2\">\n <span className=\"caption tabular-nums text-muted-foreground\">\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n Previous\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n Next\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport { DataTable };\nexport { createColumnHelper } from \"@tanstack/react-table\";\nexport type { ColumnDef };\n","\"use client\";\n\nimport { useEffect, useState, type CSSProperties, type RefObject } from \"react\";\nimport { useSurface } from \"./surface-context\";\n\n// ---------------------------------------------------------------------------\n// Scroll-edge primitives\n//\n// useScrollEdges tracks which edges of a scroll container have more content\n// beyond them; ScrollEdgeCue renders the affordance for one edge — a\n// surface-colour gradient fading the content out toward the edge, with a\n// small chevron hinting at the scroll direction. Together they give any\n// scrolling surface the same \"there's more\" cue the Select menu uses.\n// ---------------------------------------------------------------------------\n\nexport interface ScrollEdges {\n top: boolean;\n bottom: boolean;\n left: boolean;\n right: boolean;\n}\n\nconst NO_EDGES: ScrollEdges = {\n top: false,\n bottom: false,\n left: false,\n right: false,\n};\n\nexport interface UseScrollEdgesOptions {\n /** Attach/detach tracking. While false all edges read false. Callers whose\n * scroller mounts late (portals) must fold that into `enabled` so the\n * hook re-attaches once the element exists. Defaults to `true`. */\n enabled?: boolean;\n /** Which axes to measure. Defaults to `\"vertical\"`. */\n axis?: \"vertical\" | \"horizontal\" | \"both\";\n}\n\nexport function useScrollEdges(\n ref: RefObject<HTMLElement | null>,\n { enabled = true, axis = \"vertical\" }: UseScrollEdgesOptions = {},\n): ScrollEdges {\n const [edges, setEdges] = useState<ScrollEdges>(NO_EDGES);\n\n useEffect(() => {\n if (!enabled) {\n setEdges(NO_EDGES);\n return;\n }\n const el = ref.current;\n if (!el) return;\n\n const update = () => {\n const next = { ...NO_EDGES };\n if (axis !== \"horizontal\") {\n const { scrollTop, scrollHeight, clientHeight } = el;\n const overflowing = scrollHeight - clientHeight > 1;\n next.top = overflowing && scrollTop > 1;\n next.bottom = overflowing && scrollTop + clientHeight < scrollHeight - 1;\n }\n if (axis !== \"vertical\") {\n const { scrollLeft, scrollWidth, clientWidth } = el;\n const overflowing = scrollWidth - clientWidth > 1;\n next.left = overflowing && scrollLeft > 1;\n next.right = overflowing && scrollLeft + clientWidth < scrollWidth - 1;\n }\n // Bail out on no-op updates so observer churn doesn't re-render.\n setEdges((prev) =>\n prev.top === next.top &&\n prev.bottom === next.bottom &&\n prev.left === next.left &&\n prev.right === next.right\n ? prev\n : next,\n );\n };\n\n update();\n // Recompute once layout settles after enter animations.\n const raf = requestAnimationFrame(update);\n el.addEventListener(\"scroll\", update, { passive: true });\n const ro = new ResizeObserver(update);\n ro.observe(el);\n // Async content (items loading in, streamed text) changes scrollHeight\n // without resizing the container itself. Coalesce to one update per\n // frame: update() reads layout, and doing that synchronously after\n // every mutation forces a reflow per insertion in streaming content.\n let moRaf = 0;\n const scheduleUpdate = () => {\n if (moRaf) return;\n moRaf = requestAnimationFrame(() => {\n moRaf = 0;\n update();\n });\n };\n const mo = new MutationObserver(scheduleUpdate);\n mo.observe(el, { childList: true, subtree: true, characterData: true });\n return () => {\n cancelAnimationFrame(raf);\n if (moRaf) cancelAnimationFrame(moRaf);\n el.removeEventListener(\"scroll\", update);\n ro.disconnect();\n mo.disconnect();\n };\n }, [ref, enabled, axis]);\n\n return edges;\n}\n\n// ---------------------------------------------------------------------------\n// ScrollEdgeCue\n// ---------------------------------------------------------------------------\n\nconst CHEVRON_PATHS: Record<string, string> = {\n top: \"M6 15l6-6 6 6\",\n bottom: \"M6 9l6 6 6-6\",\n left: \"M15 6l-6 6 6 6\",\n right: \"M9 6l6 6-6 6\",\n};\n\n// Band size presets along the scroll axis. The chevron stays 16px in both.\nconst CUE_SIZES = { tight: 32, comfortable: 60 } as const;\n\nexport type ScrollEdgeCueSize = keyof typeof CUE_SIZES;\n\nexport interface ScrollEdgeCueProps {\n edge: \"top\" | \"bottom\" | \"left\" | \"right\";\n visible: boolean;\n /** `\"sticky\"` renders a zero-size sticky element placed inside the scroller\n * itself (before/after the scrolling content); `\"absolute\"` renders a plain\n * positioned band for an `absolute inset-0 pointer-events-none` overlay\n * sitting over the viewport. Defaults to `\"sticky\"`. */\n mode?: \"sticky\" | \"absolute\";\n /** Surface ladder level the gradient fades toward. Defaults to the level\n * provided by the nearest SurfaceProvider/Elevated — override only when\n * the scroller sits on a background outside the ladder. */\n surfaceLevel?: number;\n /** Band size along the scroll axis: `\"tight\"` (32px) or `\"comfortable\"`\n * (60px). The chevron is 16px in either. Defaults to `\"comfortable\"`. */\n size?: ScrollEdgeCueSize;\n /** Sticky-mode bleed in px so the band covers the scroller's padding\n * (e.g. 4 for `p-1`, 16 for `p-4`). Defaults to 4. */\n inset?: number;\n /** Show the directional chevron in the band. The gradient fade always\n * renders; set to `false` for a fade-only cue. Defaults to `true`. */\n chevron?: boolean;\n}\n\nexport function ScrollEdgeCue({\n edge,\n visible,\n mode = \"sticky\",\n surfaceLevel,\n size = \"comfortable\",\n inset = 4,\n chevron = true,\n}: ScrollEdgeCueProps) {\n const contextLevel = useSurface();\n // Clamp to the ladder (1–8), mirroring SurfaceProvider — an out-of-range\n // override would interpolate an invalid var and silently kill the gradient.\n const level = Math.max(1, Math.min(8, surfaceLevel ?? contextLevel));\n const surface = `var(--surface-${level})`;\n const vertical = edge === \"top\" || edge === \"bottom\";\n const sizePx = CUE_SIZES[size];\n // Gradient direction where 100% == the hard outer edge.\n const dir = `to ${edge}`;\n\n const band = (\n <div\n style={\n {\n position: \"absolute\",\n opacity: visible ? 1 : 0,\n // Exit slightly faster than enter, per the animation guidelines.\n transition: `opacity ${visible ? 160 : 120}ms ease`,\n ...(mode === \"sticky\"\n ? vertical\n ? { left: -inset, right: -inset, [edge]: -inset, height: sizePx }\n : { top: -inset, bottom: -inset, [edge]: -inset, width: sizePx }\n : vertical\n ? { left: 0, right: 0, [edge]: 0, height: sizePx }\n : { top: 0, bottom: 0, [edge]: 0, width: sizePx }),\n } as CSSProperties\n }\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(${dir}, transparent 0%, color-mix(in srgb, ${surface} 75%, transparent) 65%, ${surface} 100%)`,\n }}\n />\n {chevron && (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-muted-foreground\"\n style={\n {\n position: \"absolute\",\n ...(vertical\n ? { left: \"50%\", transform: \"translateX(-50%)\" }\n : { top: \"50%\", transform: \"translateY(-50%)\" }),\n [edge]: 8,\n } as CSSProperties\n }\n >\n <path d={CHEVRON_PATHS[edge]} />\n </svg>\n )}\n </div>\n );\n\n if (mode === \"absolute\") {\n return <div aria-hidden>{band}</div>;\n }\n\n // Sticky: a zero-size sticky anchor so the cue adds no layout extent.\n return (\n <div\n aria-hidden\n style={\n {\n position: \"sticky\",\n [edge]: 0,\n ...(vertical ? { height: 0 } : { width: 0 }),\n zIndex: 30,\n pointerEvents: \"none\",\n } as CSSProperties\n }\n >\n {band}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n forwardRef,\n useRef,\n useEffect,\n useState,\n useCallback,\n createContext,\n useContext,\n Children,\n cloneElement,\n isValidElement,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useScrollEdges, ScrollEdgeCue } from \"../lib/scroll-fade\";\nimport { Elevated } from \"../lib/elevated\";\n\n// ---------------------------------------------------------------------------\n// Select context\n// ---------------------------------------------------------------------------\n\ninterface SelectContextValue {\n value: string;\n onChange: (value: string) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n disabled: boolean;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n labelMap: React.MutableRefObject<Map<string, string>>;\n}\n\nconst SelectContext = createContext<SelectContextValue | null>(null);\n\nfunction useSelectContext() {\n const ctx = useContext(SelectContext);\n if (!ctx) throw new Error(\"Select compound components must be inside <Select>\");\n return ctx;\n}\n\n// Content context for proximity hover\ninterface SelectContentContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n checkedIndex?: number;\n}\n\nconst SelectContentContext = createContext<SelectContentContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Select (root)\n// ---------------------------------------------------------------------------\n\ninterface SelectProps {\n children: ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n}\n\nfunction Select({\n children,\n value,\n defaultValue,\n onValueChange,\n disabled = false,\n name,\n required,\n}: SelectProps) {\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const [open, setOpen] = useState(false);\n const currentValue = value !== undefined ? value : internalValue;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const labelMap = useRef(new Map<string, string>());\n\n const onChange = useCallback(\n (v: string) => {\n if (value === undefined) setInternalValue(v);\n onValueChange?.(v);\n setOpen(false);\n requestAnimationFrame(() => triggerRef.current?.focus());\n },\n [value, onValueChange],\n );\n\n return (\n <SelectContext.Provider\n value={{\n value: currentValue,\n onChange,\n open,\n setOpen,\n disabled,\n triggerRef,\n labelMap,\n }}\n >\n {children}\n {name && <input type=\"hidden\" name={name} value={currentValue} required={required} />}\n </SelectContext.Provider>\n );\n}\n\nSelect.displayName = \"Select\";\n\n// ---------------------------------------------------------------------------\n// SelectTrigger\n// ---------------------------------------------------------------------------\n\nconst triggerVariants = cva(\n [\n \"group inline-flex items-center justify-between gap-2 outline-none cursor-pointer\",\n \"text-[13px] h-9 px-3 min-w-[160px]\",\n \"transition-all duration-80\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF]\",\n ],\n {\n variants: {\n variant: {\n bordered: \"border border-border bg-transparent text-foreground hover:bg-hover\",\n borderless: \"border border-transparent bg-transparent text-foreground hover:bg-hover\",\n },\n },\n defaultVariants: {\n variant: \"bordered\",\n },\n },\n);\n\ninterface SelectTriggerProps\n extends HTMLAttributes<HTMLButtonElement>, VariantProps<typeof triggerVariants> {\n icon?: IconComponent;\n placeholder?: string;\n error?: string;\n}\n\nconst SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, variant, icon: Icon, placeholder = \"Select…\", error, children, ...props }, ref) => {\n const { value, open, setOpen, disabled, triggerRef, labelMap } = useSelectContext();\n const shape = useShape();\n const label = value ? (labelMap.current.get(value) ?? value) : undefined;\n\n return (\n <div className=\"flex flex-col gap-1\">\n <button\n ref={(node) => {\n (triggerRef as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n }}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n onClick={() => setOpen(!open)}\n onKeyDown={(e) => {\n if (\n !open &&\n (e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n aria-invalid={!!error || undefined}\n className={cn(\n triggerVariants({ variant }),\n shape.input,\n error && \"border-destructive/50 hover:border-destructive/50\",\n className,\n )}\n {...props}\n >\n <span className=\"flex items-center gap-2 min-w-0 flex-1\">\n {Icon && (\n <Icon\n size={16}\n strokeWidth={1.5}\n className=\"shrink-0 text-muted-foreground transition-[color,stroke-width] duration-80 group-hover:text-foreground group-hover:stroke-[2]\"\n />\n )}\n {children ?? (\n <span className=\"min-w-0 flex-1 text-left truncate\">\n {label ?? <span className=\"text-muted-foreground\">{placeholder}</span>}\n </span>\n )}\n </span>\n\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0 text-muted-foreground transition-colors duration-80 group-hover:text-foreground\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </button>\n {error && <span className=\"text-[12px] text-destructive pl-3\">{error}</span>}\n </div>\n );\n },\n);\n\nSelectTrigger.displayName = \"SelectTrigger\";\n\n// ---------------------------------------------------------------------------\n// SelectContent\n// ---------------------------------------------------------------------------\n\ninterface SelectContentProps {\n className?: string;\n children: ReactNode;\n /** Show a fade + chevron cue at the scroll edges when the list overflows its\n * max-height, signalling there's more to scroll. Auto-activates on overflow;\n * set to `false` to disable. Defaults to `true`. */\n scrollFade?: boolean;\n}\n\nconst SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(\n ({ className, children, scrollFade = true }, ref) => {\n const { open, setOpen, value, triggerRef } = useSelectContext();\n const shape = useShape();\n const containerRef = useRef<HTMLDivElement>(null);\n const [triggerRect, setTriggerRect] = useState<DOMRect | null>(null);\n\n // Scroll-edge cues show only when there's more content above/below the\n // visible area. `triggerRect !== null` gates attachment until the portal\n // (and thus containerRef.current) has mounted.\n const edges = useScrollEdges(containerRef, {\n enabled: open && scrollFade && triggerRect !== null,\n });\n\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [checkedIndex, setCheckedIndex] = useState<number | undefined>(undefined);\n\n // Capture trigger rect synchronously when opening\n useEffect(() => {\n if (open && triggerRef.current) {\n setTriggerRect(triggerRef.current.getBoundingClientRect());\n }\n }, [open, triggerRef]);\n\n // Measure items + detect checked AFTER the portal has mounted\n // triggerRect being set means the portal will render on the next commit\n useEffect(() => {\n if (!open || !triggerRect) return;\n // Double rAF: first waits for React commit, second for layout\n let outer: number;\n let inner: number;\n outer = requestAnimationFrame(() => {\n inner = requestAnimationFrame(() => {\n measureItems();\n const container = containerRef.current;\n if (container) {\n const items = Array.from(\n container.querySelectorAll(\"[data-proximity-index]\"),\n ) as HTMLElement[];\n const idx = items.findIndex((el) => el.getAttribute(\"data-value\") === value);\n if (idx !== -1) setCheckedIndex(idx);\n else setCheckedIndex(undefined);\n\n // Focus the container so keyboard events work;\n // don't focus an item directly to avoid showing a focus ring\n containerRef.current?.focus({ preventScroll: true });\n }\n });\n });\n return () => {\n cancelAnimationFrame(outer);\n cancelAnimationFrame(inner);\n };\n }, [open, triggerRect, measureItems, value]);\n\n // Close on escape\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [open, setOpen, triggerRef]);\n\n // Close on click outside\n useEffect(() => {\n if (!open) return;\n const onPointer = (e: MouseEvent) => {\n if (\n !containerRef.current?.contains(e.target as Node) &&\n !triggerRef.current?.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onPointer);\n return () => document.removeEventListener(\"mousedown\", onPointer);\n }, [open, setOpen, triggerRef]);\n\n // Close on scroll (instead of locking body scroll, which causes layout shift)\n useEffect(() => {\n if (!open) return;\n const onScroll = () => setOpen(false);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, [open, setOpen]);\n\n // Keyboard nav inside content\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const items = Array.from(\n containerRef.current?.querySelectorAll('[role=\"option\"]:not([data-disabled])') ?? [],\n ) as HTMLElement[];\n const currentIdx = items.indexOf(e.target as HTMLElement);\n\n if ([\"ArrowDown\", \"ArrowUp\", \"ArrowRight\", \"ArrowLeft\"].includes(e.key)) {\n e.preventDefault();\n if (currentIdx === -1) {\n // No item focused yet — focus checked or first item\n const checked =\n value !== \"\" ? items.find((item) => item.getAttribute(\"data-value\") === value) : null;\n (checked ?? items[0])?.focus();\n } else {\n const next = [\"ArrowDown\", \"ArrowRight\"].includes(e.key)\n ? (currentIdx + 1) % items.length\n : (currentIdx - 1 + items.length) % items.length;\n items[next]?.focus();\n }\n } else if (e.key === \"Home\") {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n },\n [value],\n );\n\n const indexedChildren = Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childProps = child.props as { index?: number };\n if (childProps.index !== undefined) return child;\n return cloneElement(child, { index } as Record<string, unknown>);\n });\n\n // Render hidden when closed so items can register labels\n if (!open) {\n return (\n <div hidden aria-hidden=\"true\">\n {indexedChildren}\n </div>\n );\n }\n\n if (!triggerRect) return null;\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n const checkedRect = checkedIndex != null ? itemRects[checkedIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n const isHoveringOther = activeIndex !== null && activeIndex !== checkedIndex;\n\n return createPortal(\n <SelectContentContext.Provider\n value={\n checkedIndex === undefined\n ? { registerItem, activeIndex }\n : { registerItem, activeIndex, checkedIndex }\n }\n >\n <div\n style={{\n position: \"fixed\",\n top: triggerRect.bottom + 6,\n left: triggerRect.left,\n minWidth: triggerRect.width,\n zIndex: 50,\n }}\n >\n <motion.div\n initial={{ opacity: 0, y: -4, scaleY: 0.96 }}\n animate={{ opacity: 1, y: 0, scaleY: 1 }}\n transition={spring.fast}\n style={{ transformOrigin: \"top center\" }}\n >\n <Elevated\n offset={2}\n shadowLevel={3}\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n role=\"listbox\"\n data-hilum-mobile-sheet=\"true\"\n tabIndex={-1}\n onMouseEnter={() => {\n handlers.onMouseEnter();\n setFocusedIndex(null);\n }}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setActiveIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n setActiveIndex(null);\n }}\n onKeyDown={handleKeyDown}\n className={cn(\n `relative flex flex-col gap-0.5 max-h-[300px] overflow-y-auto ${shape.container} p-1 select-none outline-none max-sm:!fixed max-sm:rounded-2xl max-sm:data-[state=open]:slide-in-from-bottom`,\n className,\n )}\n >\n {/* Selected background */}\n <AnimatePresence>\n {checkedRect && (\n <motion.div\n className={`absolute ${shape.bg} bg-active pointer-events-none`}\n initial={false}\n animate={{\n top: checkedRect.top,\n left: checkedRect.left,\n width: checkedRect.width,\n height: checkedRect.height,\n opacity: isHoveringOther ? 0.8 : 1,\n }}\n exit={{ opacity: 0, transition: spring.moderate.exit }}\n transition={{\n ...spring.moderate,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className={`absolute ${shape.bg} bg-hover pointer-events-none`}\n initial={{\n opacity: 0,\n top: checkedRect?.top ?? activeRect.top,\n left: checkedRect?.left ?? activeRect.left,\n width: checkedRect?.width ?? activeRect.width,\n height: checkedRect?.height ?? activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={`absolute ${shape.focusRing} pointer-events-none z-20 border border-[#6B97FF]`}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Cues read the elevated surface level from Elevated's provider,\n so the gradient matches the menu background at any depth. */}\n {scrollFade && <ScrollEdgeCue edge=\"top\" visible={edges.top} />}\n\n {indexedChildren}\n\n {scrollFade && <ScrollEdgeCue edge=\"bottom\" visible={edges.bottom} />}\n </Elevated>\n </motion.div>\n </div>\n </SelectContentContext.Provider>,\n document.body,\n );\n },\n);\n\nSelectContent.displayName = \"SelectContent\";\n\n// ---------------------------------------------------------------------------\n// SelectItem\n// ---------------------------------------------------------------------------\n\ninterface SelectItemProps extends HTMLAttributes<HTMLDivElement> {\n icon?: IconComponent;\n index?: number;\n value: string;\n disabled?: boolean;\n}\n\nconst SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n ({ className, children, icon: Icon, value, index = 0, disabled = false, ...props }, ref) => {\n const selectCtx = useSelectContext();\n const contentCtx = useContext(SelectContentContext);\n const internalRef = useRef<HTMLDivElement>(null);\n const shape = useShape();\n const hasMounted = useRef(false);\n\n useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n // Register label with root context\n useEffect(() => {\n if (typeof children === \"string\") {\n selectCtx.labelMap.current.set(value, children);\n }\n }, [value, children, selectCtx.labelMap]);\n\n // Register with proximity hover (only when content context exists = open)\n useEffect(() => {\n contentCtx?.registerItem(index, internalRef.current);\n return () => contentCtx?.registerItem(index, null);\n }, [index, contentCtx]);\n\n const isActive = contentCtx?.activeIndex === index;\n const isChecked = selectCtx.value === value;\n const skipAnimation = !hasMounted.current;\n\n return (\n <div\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-proximity-index={index}\n data-value={value}\n data-disabled={disabled || undefined}\n role=\"option\"\n aria-selected={isChecked}\n aria-label={typeof children === \"string\" ? children : undefined}\n tabIndex={isChecked ? 0 : index === (contentCtx?.checkedIndex ?? 0) ? 0 : -1}\n onClick={() => {\n if (!disabled) selectCtx.onChange(value);\n }}\n onKeyDown={(e) => {\n if ((e.key === \"Enter\" || e.key === \" \") && !disabled) {\n e.preventDefault();\n selectCtx.onChange(value);\n }\n }}\n className={cn(\n `relative z-10 flex items-center gap-2 ${shape.item} px-2 py-2 text-[13px] cursor-pointer outline-none select-none`,\n \"transition-[color] duration-80\",\n isActive || isChecked ? \"text-foreground\" : \"text-muted-foreground\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n {...props}\n >\n {Icon && (\n <Icon\n size={16}\n strokeWidth={isActive || isChecked ? 2 : 1.5}\n className=\"shrink-0 transition-[color,stroke-width] duration-80\"\n />\n )}\n\n <span className=\"flex-1 min-w-0 truncate\">{children}</span>\n\n <AnimatePresence>\n {isChecked && (\n <motion.svg\n key=\"check\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0 text-foreground\"\n initial={{ opacity: 1 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 1 }}\n >\n <motion.path\n d=\"M4 12L9 17L20 6\"\n initial={{ pathLength: skipAnimation ? 1 : 0 }}\n animate={{\n pathLength: 1,\n transition: { duration: 0.08, ease: \"easeOut\" },\n }}\n exit={{\n pathLength: 0,\n transition: { duration: 0.04, ease: \"easeIn\" },\n }}\n />\n </motion.svg>\n )}\n </AnimatePresence>\n </div>\n );\n },\n);\n\nSelectItem.displayName = \"SelectItem\";\n\n// ---------------------------------------------------------------------------\n// SelectGroup + SelectLabel + SelectSeparator\n// ---------------------------------------------------------------------------\n\nfunction SelectGroup({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div role=\"group\" className={className} {...props}>\n {children}\n </div>\n );\n}\n\nSelectGroup.displayName = \"SelectGroup\";\n\nconst SelectLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-[11px] text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\n\nSelectLabel.displayName = \"SelectLabel\";\n\nconst SelectSeparator = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn(\"my-1 -mx-1 h-px bg-border/60\", className)}\n {...props}\n />\n ),\n);\n\nSelectSeparator.displayName = \"SelectSeparator\";\n\nfunction SelectValue({ placeholder }: { placeholder?: string }) {\n const { value, labelMap } = useSelectContext();\n const label = value ? (labelMap.current.get(value) ?? value) : undefined;\n return (\n <span className=\"min-w-0 flex-1 text-left truncate\">\n {label ?? <span className=\"text-muted-foreground\">{placeholder}</span>}\n </span>\n );\n}\n\nSelectValue.displayName = \"SelectValue\";\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n Select,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n SelectGroup,\n SelectLabel,\n SelectSeparator,\n triggerVariants,\n};\n\nexport type { SelectProps, SelectTriggerProps, SelectContentProps, SelectItemProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Download, Loader2, MoreHorizontal, Upload } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { ButtonGroup, ButtonGroupItem } from \"./button-group\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\";\nimport { cn } from \"../lib/utils\";\n\ninterface DataTransferScopeOption {\n value: string;\n label: string;\n}\n\ninterface DataTransferAction {\n label: string;\n shortLabel?: string;\n ariaLabel?: string;\n icon?: React.ReactNode;\n loading?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n}\n\ninterface DataTransferControlsProps {\n scopeValue?: string;\n onScopeChange?: (value: string) => void;\n scopeOptions?: DataTransferScopeOption[];\n scopePlaceholder?: string;\n actions: DataTransferAction[];\n compact?: boolean;\n compactLabel?: string;\n className?: string;\n selectClassName?: string;\n actionGroupClassName?: string;\n}\n\nfunction normalizeIcon(icon: React.ReactNode, fallback: React.ReactNode, loading?: boolean) {\n if (loading) return <Loader2 className=\"size-4 animate-spin\" aria-hidden=\"true\" />;\n return icon ?? fallback;\n}\n\nfunction DataTransferControls({\n scopeValue,\n onScopeChange,\n scopeOptions = [],\n scopePlaceholder = \"Scope\",\n actions,\n compact = false,\n compactLabel = \"Import and export actions\",\n className,\n selectClassName,\n actionGroupClassName,\n}: DataTransferControlsProps) {\n const hasScope = scopeOptions.length > 0 && scopeValue !== undefined && onScopeChange;\n\n const renderScopeSelect = () => {\n if (!hasScope) return null;\n\n return (\n <Select value={scopeValue} onValueChange={onScopeChange}>\n <SelectTrigger\n aria-label={scopePlaceholder}\n className={cn(\"min-h-10 w-full max-w-full bg-background sm:w-[180px]\", selectClassName)}\n >\n <SelectValue placeholder={scopePlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {scopeOptions.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 defaultActionIcon = (index: number) =>\n index === 0 ? (\n <Upload className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Download className=\"size-4\" aria-hidden=\"true\" />\n );\n\n return (\n <div\n className={cn(\n compact\n ? \"grid w-full min-w-0 grid-cols-[minmax(0,1fr)_auto] gap-2\"\n : \"grid w-full min-w-0 gap-2 sm:flex sm:w-auto sm:flex-wrap sm:items-center\",\n className,\n )}\n >\n {renderScopeSelect()}\n\n {compact ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"size-9\"\n aria-label={compactLabel}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n {actions.map((action, index) => {\n const disabled = Boolean(action.disabled || action.loading);\n\n return (\n <DropdownMenuItem\n key={`${action.label}-${index}`}\n disabled={disabled}\n onClick={action.onSelect}\n >\n {normalizeIcon(action.icon, defaultActionIcon(index), action.loading)}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n <ButtonGroup className={cn(\"grid w-full grid-cols-3 sm:inline-flex sm:w-auto\", actionGroupClassName)}>\n {actions.map((action, index) => (\n <ButtonGroupItem\n key={`${action.label}-${index}`}\n className=\"min-h-10 justify-center px-3 disabled:pointer-events-none disabled:opacity-50\"\n onClick={action.onSelect}\n disabled={action.disabled || action.loading}\n aria-label={action.ariaLabel ?? action.label}\n >\n {normalizeIcon(action.icon, defaultActionIcon(index), action.loading)}\n {action.shortLabel ?? action.label}\n </ButtonGroupItem>\n ))}\n </ButtonGroup>\n )}\n </div>\n );\n}\n\nDataTransferControls.displayName = \"DataTransferControls\";\n\nexport { DataTransferControls };\nexport type { DataTransferAction, DataTransferControlsProps, DataTransferScopeOption };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { motionClasses } from \"../lib/interaction\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst PopoverRoot = Popover.Root;\nconst PopoverTrigger = Popover.Trigger;\nconst PopoverClose = Popover.Close;\n\nconst PopoverContent = React.forwardRef<\n React.ComponentRef<typeof Popover.Content>,\n React.ComponentPropsWithoutRef<typeof Popover.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Popover.Portal>\n <Popover.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"relative z-50 w-72 rounded-xl border border-border bg-card p-4 shadow-elevated outline-none\",\n motionClasses,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-4 max-sm:pb-4 max-sm:pt-6\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </Popover.Portal>\n </>\n));\nPopoverContent.displayName = \"PopoverContent\";\n\nexport { PopoverRoot as Popover, PopoverTrigger, PopoverContent, PopoverClose };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { Calendar } from \"./calendar\";\nimport { Button } from \"./button\";\nimport { cn } from \"../lib/utils\";\n\nconst formatDate = (date: Date) =>\n date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n });\n\ninterface DatePickerProps {\n value?: Date | undefined;\n onChange?: (date: Date | undefined) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction DatePicker({\n value,\n onChange,\n placeholder = \"Pick a date\",\n disabled,\n className,\n}: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"w-[240px] justify-start gap-2 text-left font-normal\",\n !value && \"text-muted-foreground\",\n className,\n )}\n disabled={disabled}\n >\n <CalendarIcon size={14} className=\"text-muted-foreground shrink-0\" />\n {value ? formatDate(value) : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0 shadow-elevated\" align=\"start\">\n <Calendar\n mode=\"single\"\n {...(value !== undefined && { selected: value })}\n {...(onChange !== undefined && { onSelect: onChange })}\n autoFocus\n />\n </PopoverContent>\n </Popover>\n );\n}\nDatePicker.displayName = \"DatePicker\";\n\nexport { DatePicker, formatDate };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface DescriptionItem {\n term: string;\n details: React.ReactNode;\n action?: React.ReactNode;\n}\n\ninterface DescriptionListProps {\n title?: string;\n description?: string;\n items: DescriptionItem[];\n columns?: 1 | 2;\n striped?: boolean;\n className?: string;\n}\n\nfunction DescriptionList({\n title,\n description,\n items,\n columns = 1,\n striped = false,\n className,\n}: DescriptionListProps) {\n return (\n <div className={className}>\n {(title || description) && (\n <div className=\"mb-4\">\n {title && <p className=\"body font-semibold text-balance text-foreground\">{title}</p>}\n {description && (\n <p className=\"mt-1 caption text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n )}\n\n <dl className={cn(\"border-t border-border\", columns === 2 && \"sm:grid sm:grid-cols-2\")}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn(\n \"py-3.5\",\n columns === 1\n ? \"grid grid-cols-3 gap-4 items-baseline\"\n : \"flex flex-col gap-1 border-b border-border\",\n columns === 1 && i !== items.length - 1 && \"border-b border-border\",\n striped && i % 2 === 0 && \"bg-muted -mx-4 px-4 rounded\",\n )}\n >\n <dt className=\"caption font-semibold text-muted-foreground uppercase tracking-wide\">\n {item.term}\n </dt>\n <dd className={cn(\"body text-foreground\", columns === 1 ? \"col-span-2\" : \"\")}>\n {item.action ? (\n <div className=\"flex items-center justify-between gap-4\">\n <span>{item.details}</span>\n {item.action}\n </div>\n ) : (\n item.details\n )}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\nDescriptionList.displayName = \"DescriptionList\";\n\nexport { DescriptionList };\nexport type { DescriptionItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"vaul\";\nimport { cn } from \"../lib/utils\";\n\nconst DrawerRoot = DrawerPrimitive.Root;\nconst DrawerTrigger = DrawerPrimitive.Trigger;\nconst DrawerPortal = DrawerPrimitive.Portal;\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-foreground/40 backdrop-blur-[1px]\", className)}\n {...props}\n />\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\nconst DrawerContent = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-2xl border border-border bg-card\",\n className,\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-1 w-12 rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = \"DrawerContent\";\n\nconst DrawerHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"grid gap-1 px-6 py-4 text-center sm:text-left\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mt-auto flex flex-col gap-2 px-6 pb-6\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\"subheading text-foreground\", className)}\n {...props}\n />\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n React.ComponentRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"body text-muted-foreground\", className)}\n {...props}\n />\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport {\n DrawerRoot as Drawer,\n DrawerTrigger,\n DrawerPortal,\n DrawerClose,\n DrawerOverlay,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface EmptyStateProps {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: {\n label: string;\n href?: string;\n onClick?: () => void;\n };\n className?: string;\n}\n\nfunction EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(\"flex flex-col items-center gap-4 px-6 py-14 text-center\", className)}>\n {icon && (\n <div className=\"flex size-9 items-center justify-center rounded-md bg-brand-secondary/20 text-muted-foreground\">\n {icon}\n </div>\n )}\n <div className=\"flex flex-col gap-1.5\">\n <p className=\"body text-balance font-semibold text-foreground\">{title}</p>\n {description && (\n <p className=\"body max-w-xs text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n {action &&\n (action.href ? (\n <Button size=\"sm\" asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ))}\n </div>\n );\n}\n\nEmptyState.displayName = \"EmptyState\";\n\nexport { EmptyState };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Label as LabelPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"body font-medium leading-none text-muted-foreground\",\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n\nexport { Label };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Label } from \"./label\";\n\ninterface FieldProps {\n label: string;\n htmlFor?: string;\n hint?: string;\n error?: string;\n required?: boolean;\n cornerHint?: string;\n className?: string;\n children: React.ReactNode;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction Field({\n label,\n htmlFor,\n hint,\n error,\n required,\n cornerHint,\n className,\n children,\n ref,\n}: FieldProps) {\n // Predictable ID for the description/error paragraph so consumers can wire\n // aria-describedby on the child input: aria-describedby={`${id}-description`}\n const descriptionId = htmlFor ? `${htmlFor}-description` : undefined;\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label htmlFor={htmlFor} aria-required={required}>\n {label}\n {required && (\n <span className=\"ml-0.5 text-destructive\" aria-hidden=\"true\">\n *\n </span>\n )}\n </Label>\n {cornerHint && <span className=\"caption text-muted-foreground\">{cornerHint}</span>}\n </div>\n {children}\n {error ? (\n <p id={descriptionId} role=\"alert\" className=\"caption text-destructive\">\n {error}\n </p>\n ) : hint ? (\n <p id={descriptionId} className=\"caption text-muted-foreground\">\n {hint}\n </p>\n ) : null}\n </div>\n );\n}\nField.displayName = \"Field\";\n\nexport { Field };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst spinnerVariants = cva(\n \"inline-block animate-spin rounded-full border-2 border-current border-t-transparent\",\n {\n variants: {\n size: {\n xs: \"size-3\",\n sm: \"size-4\",\n default: \"size-5\",\n lg: \"size-6\",\n xl: \"size-8\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n\ninterface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof spinnerVariants> {}\n\nfunction Spinner({ className, size, ...props }: SpinnerProps) {\n return (\n <span\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nexport { Spinner, spinnerVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { File as FileIcon, Upload } from \"lucide-react\";\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"../lib/utils\";\n\ntype FileDropzoneSelectedFile = Pick<File, \"name\" | \"size\">;\n\ninterface FileDropzoneProps extends Omit<\n React.HTMLAttributes<HTMLLabelElement>,\n \"children\" | \"onChange\" | \"onDrop\" | \"onDragOver\" | \"onDragLeave\"\n> {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n loading?: boolean;\n loadingText?: React.ReactNode;\n label?: React.ReactNode;\n activeLabel?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n selectedFiles?: readonly FileDropzoneSelectedFile[] | null;\n inputRef?: React.Ref<HTMLInputElement>;\n inputClassName?: string;\n inputName?: string;\n onFilesSelected?: (files: File[]) => void;\n}\n\nfunction formatFileSize(bytes: number) {\n if (!Number.isFinite(bytes) || bytes <= 0) return \"0 B\";\n\n const units = [\"B\", \"KB\", \"MB\", \"GB\"];\n const unitIndex = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);\n const value = bytes / Math.pow(1024, unitIndex);\n\n return `${value.toFixed(value >= 10 || unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`;\n}\n\nfunction getFileSummary(files: readonly FileDropzoneSelectedFile[]) {\n if (files.length === 0) return null;\n if (files.length === 1) return `${files[0].name} (${formatFileSize(files[0].size)})`;\n const totalSize = files.reduce((sum, file) => sum + file.size, 0);\n return `${files.length} files selected (${formatFileSize(totalSize)})`;\n}\n\nfunction FileDropzone({\n accept,\n multiple,\n disabled,\n loading,\n loadingText = \"Uploading...\",\n label = \"Drag files here or click to upload\",\n activeLabel = \"Drop files to upload\",\n description,\n icon,\n selectedFiles,\n inputRef,\n inputClassName,\n inputName,\n onFilesSelected,\n className,\n id,\n tabIndex,\n onKeyDown,\n onClick,\n ...props\n}: FileDropzoneProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const inputId = React.useId();\n const resolvedId = id ?? inputId;\n const fileSummary = getFileSummary(selectedFiles ?? []);\n const isUnavailable = Boolean(disabled || loading);\n\n const emitFiles = React.useCallback(\n (fileList: FileList | null) => {\n if (!fileList || isUnavailable) return;\n onFilesSelected?.(Array.from(fileList));\n },\n [isUnavailable, onFilesSelected],\n );\n\n return (\n <label\n htmlFor={resolvedId}\n role=\"button\"\n tabIndex={isUnavailable ? -1 : (tabIndex ?? 0)}\n aria-disabled={isUnavailable || undefined}\n data-dragging={isDragging ? \"true\" : \"false\"}\n className={cn(\n \"group flex min-h-36 cursor-pointer flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card p-6 text-center shadow-natural\",\n \"transition-[background-color,border-color,box-shadow,scale] duration-150\",\n \"hover:border-brand-primary/50 hover:bg-muted/40 active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"data-[dragging=true]:border-brand-primary data-[dragging=true]:bg-brand-secondary/25\",\n isUnavailable && \"pointer-events-none cursor-not-allowed opacity-60 active:scale-100\",\n className,\n )}\n onDragOver={(event) => {\n event.preventDefault();\n if (!isUnavailable) setIsDragging(true);\n }}\n onDragLeave={(event) => {\n event.preventDefault();\n setIsDragging(false);\n }}\n onDrop={(event) => {\n event.preventDefault();\n setIsDragging(false);\n emitFiles(event.dataTransfer.files);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || isUnavailable) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n document.getElementById(resolvedId)?.click();\n }\n }}\n onClick={(event) => {\n if (isUnavailable) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n }}\n {...props}\n >\n <input\n ref={inputRef}\n id={resolvedId}\n name={inputName}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={isUnavailable}\n className={cn(\"sr-only\", inputClassName)}\n onChange={(event) => emitFiles(event.currentTarget.files)}\n />\n <span\n className={cn(\n \"mb-3 flex size-12 items-center justify-center rounded-xl bg-muted text-muted-foreground\",\n \"transition-[background-color,color,scale] duration-150 group-hover:bg-brand-secondary/35 group-hover:text-foreground\",\n \"group-data-[dragging=true]:bg-brand-secondary group-data-[dragging=true]:text-foreground\",\n )}\n aria-hidden=\"true\"\n >\n {loading ? <Spinner size=\"sm\" /> : (icon ?? <Upload className=\"size-5\" />)}\n </span>\n <span className=\"body-sm font-medium text-foreground text-balance\">\n {loading ? loadingText : isDragging ? activeLabel : fileSummary ? fileSummary : label}\n </span>\n {description && (\n <span className=\"caption mt-1 max-w-md text-pretty text-muted-foreground\">\n {description}\n </span>\n )}\n {fileSummary && !loading && (\n <span className=\"caption mt-2 inline-flex min-h-7 max-w-full items-center gap-1 rounded-full bg-muted px-2.5 text-muted-foreground\">\n <FileIcon className=\"size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate\">{multiple ? \"Ready to upload\" : \"Selected\"}</span>\n </span>\n )}\n </label>\n );\n}\n\nFileDropzone.displayName = \"FileDropzone\";\n\nexport { FileDropzone, formatFileSize };\nexport type { FileDropzoneProps, FileDropzoneSelectedFile };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n/* ------------------------------------------------------------------ */\n/* Generic grid container */\n/* ------------------------------------------------------------------ */\n\ninterface GridListProps {\n children: React.ReactNode;\n columns?: 2 | 3 | 4;\n gap?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst colMap = {\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-4\",\n};\n\nconst gapMap = {\n sm: \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n};\n\nfunction GridList({ children, columns = 3, gap = \"md\", className }: GridListProps) {\n return (\n <ul role=\"list\" className={cn(\"grid\", colMap[columns], gapMap[gap], className)}>\n {children}\n </ul>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Simple card item */\n/* ------------------------------------------------------------------ */\n\ninterface GridListCardProps {\n title: string;\n description?: string;\n meta?: string;\n href?: string;\n accent?: React.ReactNode;\n trailing?: React.ReactNode;\n className?: string;\n}\n\nfunction GridListCard({\n title,\n description,\n meta,\n href,\n accent,\n trailing,\n className,\n}: GridListCardProps) {\n const inner = (\n <div\n className={cn(\n \"flex h-full flex-col gap-1 rounded-xl border border-border bg-card p-4 shadow-natural transition-shadow\",\n href && \"hover:shadow-elevated\",\n className,\n )}\n >\n {accent && <div className=\"mb-2\">{accent}</div>}\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && <p className=\"caption text-muted-foreground text-pretty\">{description}</p>}\n {(meta || trailing) && (\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {meta && <span className=\"caption text-muted-foreground\">{meta}</span>}\n {trailing && <span className=\"caption text-muted-foreground\">{trailing}</span>}\n </div>\n )}\n </div>\n );\n\n return (\n <li>\n {href ? (\n <a\n href={href}\n className=\"block h-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl\"\n >\n {inner}\n </a>\n ) : (\n inner\n )}\n </li>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Horizontal accent card (colored left strip + title + meta) */\n/* ------------------------------------------------------------------ */\n\ninterface GridListAccentCardProps {\n title: string;\n meta?: string;\n href?: string;\n accentClass?: string;\n initials?: string;\n trailing?: React.ReactNode;\n className?: string;\n}\n\nfunction GridListAccentCard({\n title,\n meta,\n href,\n accentClass = \"bg-foreground\",\n initials,\n trailing,\n className,\n}: GridListAccentCardProps) {\n const inner = (\n <div\n className={cn(\n \"flex overflow-hidden rounded-xl border border-border bg-card shadow-natural transition-shadow\",\n href && \"hover:shadow-elevated\",\n className,\n )}\n >\n <div\n className={cn(\n \"flex w-14 shrink-0 items-center justify-center body font-semibold text-background\",\n accentClass,\n )}\n >\n {initials}\n </div>\n <div className=\"flex flex-1 items-center justify-between truncate border-l border-border px-4 py-3\">\n <div className=\"min-w-0\">\n <p className=\"body font-semibold text-foreground truncate text-balance\">{title}</p>\n {meta && <p className=\"caption text-muted-foreground\">{meta}</p>}\n </div>\n {trailing && <div className=\"shrink-0 pl-2\">{trailing}</div>}\n </div>\n </div>\n );\n\n return (\n <li>\n {href ? (\n <a\n href={href}\n className=\"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 rounded-xl\"\n >\n {inner}\n </a>\n ) : (\n inner\n )}\n </li>\n );\n}\n\nGridList.displayName = \"GridList\";\nGridListCard.displayName = \"GridListCard\";\nGridListAccentCard.displayName = \"GridListAccentCard\";\n\nexport { GridList, GridListCard, GridListAccentCard };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { CircleHelp } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\ninterface HelpTooltipProps {\n text: string;\n learnMoreUrl?: string;\n learnMoreURL?: string;\n placement?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n contentClassName?: string;\n}\n\nfunction HelpTooltip({\n text,\n learnMoreUrl,\n learnMoreURL,\n placement = \"top\",\n className,\n contentClassName,\n}: HelpTooltipProps) {\n const [open, setOpen] = React.useState(false);\n const rootRef = React.useRef<HTMLSpanElement>(null);\n const url = learnMoreUrl ?? learnMoreURL;\n const body = text.length > 120 ? `${text.slice(0, 117)}...` : text;\n\n React.useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: PointerEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [open]);\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip open={open} onOpenChange={setOpen}>\n <span ref={rootRef} className={cn(\"inline-flex align-middle\", className)}>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"relative ml-1 inline-flex size-5 items-center justify-center rounded-full text-muted-foreground\",\n \"transition-[color,scale] duration-150 hover:text-foreground active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"before:absolute before:-inset-2.5 before:content-['']\",\n )}\n aria-label=\"Help\"\n onClick={(event) => {\n event.preventDefault();\n setOpen((current) => !current);\n }}\n >\n <CircleHelp className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </TooltipTrigger>\n <TooltipContent\n side={placement}\n collisionPadding={12}\n className={cn(\"max-w-xs text-sm\", contentClassName)}\n >\n <p className=\"text-pretty\">{body}</p>\n {url && (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-1 block text-xs font-medium text-brand-primary underline-offset-4 hover:underline\"\n >\n Learn more\n </a>\n )}\n </TooltipContent>\n </span>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nHelpTooltip.displayName = \"HelpTooltip\";\n\nexport { HelpTooltip, type HelpTooltipProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { HoverCard } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { motionClasses } from \"../lib/interaction\";\n\nconst HoverCardRoot = HoverCard.Root;\nconst HoverCardTrigger = HoverCard.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ComponentRef<typeof HoverCard.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCard.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <HoverCard.Portal>\n <HoverCard.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-xl border border-border bg-card p-4 shadow-elevated outline-none\",\n motionClasses,\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=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </HoverCard.Portal>\n));\nHoverCardContent.displayName = \"HoverCardContent\";\n\nexport { HoverCardRoot as HoverCard, HoverCardTrigger, HoverCardContent };\n","\"use client\";\n\nimport { forwardRef, useState, useCallback, useRef, useEffect, type HTMLAttributes } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { spring } from \"../lib/springs\";\nimport { Tooltip } from \"./tooltip\";\n\ntype InputCopyVariant = \"icon\" | \"button\";\ntype InputCopyAlign = \"right\" | \"left\";\n\ninterface InputCopyProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** The value to display and copy to clipboard. */\n value: string;\n /** Optional label displayed above the input. */\n label?: string;\n /** Callback fired after the value is copied. */\n onCopy?: () => void;\n /** Whether the component is disabled. */\n disabled?: boolean;\n /** Display variant: icon-only with tooltip, or button with label. */\n variant?: InputCopyVariant;\n /** Position of the copy action relative to the value. */\n align?: InputCopyAlign;\n}\n\nconst InputCopy = forwardRef<HTMLDivElement, InputCopyProps>(\n (\n { value, label, onCopy, disabled, variant = \"icon\", align = \"right\", className, ...props },\n ref,\n ) => {\n const CopyIcon = useIcon(\"copy\");\n const [copied, setCopied] = useState(false);\n const [copyCount, setCopyCount] = useState(0);\n // \"idle\" = normal tooltip behavior, \"copied\" = force open, \"suppressed\" = force closed\n const [tooltipState, setTooltipState] = useState<\"idle\" | \"copied\" | \"suppressed\">(\"idle\");\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null);\n const tooltipVisibleRef = useRef(false);\n const tooltipWasVisibleRef = useRef(false);\n const shape = useShape();\n\n const handlePointerDown = useCallback(() => {\n // Capture tooltip visibility before Radix closes it on pointer down\n tooltipWasVisibleRef.current = tooltipVisibleRef.current;\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (disabled) return;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setCopyCount((c) => c + 1);\n setTooltipState(tooltipWasVisibleRef.current ? \"copied\" : \"suppressed\");\n onCopy?.();\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n setTooltipState(\"suppressed\");\n }, 2000);\n } catch {\n // Clipboard API not available — silently fail\n }\n }, [value, disabled, onCopy]);\n\n const handleTooltipOpenChange = useCallback((open: boolean) => {\n tooltipVisibleRef.current = open;\n }, []);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const handleMouseEnter = useCallback(() => {\n setTooltipState((prev) => (prev === \"suppressed\" ? \"idle\" : prev));\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setTooltipState((prev) => (prev === \"copied\" ? \"suppressed\" : prev));\n }, []);\n\n const iconSwitch = (\n <AnimatePresence mode=\"wait\" initial={false}>\n {copied ? (\n <motion.span\n key={`check-${copyCount}`}\n initial={{ opacity: 0, scale: 0.6 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={spring.fast}\n className=\"flex items-center justify-center [&_svg]:stroke-[1.5] [&_svg]:transition-[stroke-width] [&_svg]:duration-80 group-hover:[&_svg]:stroke-[2]\"\n >\n <svg\n width={14}\n height={14}\n viewBox=\"2 4 20 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <motion.path\n d=\"M6 12L10 16L18 8\"\n initial={{ pathLength: 0 }}\n animate={{\n pathLength: 1,\n transition: { duration: 0.08, ease: \"easeOut\" },\n }}\n />\n </svg>\n </motion.span>\n ) : (\n <motion.span\n key=\"copy\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={spring.fast}\n className=\"flex items-center justify-center\"\n >\n <CopyIcon\n size={14}\n strokeWidth={1.5}\n className=\"transition-[stroke-width] duration-80 group-hover:stroke-[2]\"\n />\n </motion.span>\n )}\n </AnimatePresence>\n );\n\n const actionElement =\n variant === \"button\" ? (\n <span\n className={cn(\n \"shrink-0 flex items-center gap-1.5 px-1.5 py-2 text-[13px] transition-colors duration-80\",\n \"text-muted-foreground group-hover:text-foreground\",\n )}\n style={{ fontVariationSettings: fontWeights.normal }}\n >\n <AnimatePresence mode=\"wait\" initial={false}>\n {copied ? (\n <motion.span\n key={`check-label-${copyCount}`}\n className=\"flex items-center gap-1.5\"\n initial={{ opacity: 0, scale: 0.6 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={spring.fast}\n >\n <span className=\"flex items-center justify-center\">\n <svg\n width={14}\n height={14}\n viewBox=\"2 4 20 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <motion.path\n d=\"M6 12L10 16L18 8\"\n initial={{ pathLength: 0 }}\n animate={{\n pathLength: 1,\n transition: { duration: 0.08, ease: \"easeOut\" },\n }}\n />\n </svg>\n </span>\n <span className=\"select-none inline-grid text-left\">\n <span className=\"col-start-1 row-start-1 invisible\" aria-hidden=\"true\">\n Copied\n </span>\n <span className=\"col-start-1 row-start-1\">Copied</span>\n </span>\n </motion.span>\n ) : (\n <motion.span\n key=\"copy-label\"\n className=\"flex items-center gap-1.5\"\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.8 }}\n transition={spring.fast}\n >\n <span className=\"flex items-center justify-center\">\n <CopyIcon\n size={14}\n strokeWidth={1.5}\n className=\"transition-[stroke-width] duration-80 group-hover:stroke-[2]\"\n />\n </span>\n <span className=\"select-none inline-grid text-left\">\n <span className=\"col-start-1 row-start-1 invisible\" aria-hidden=\"true\">\n Copied\n </span>\n <span className=\"col-start-1 row-start-1\">Copy</span>\n </span>\n </motion.span>\n )}\n </AnimatePresence>\n </span>\n ) : (\n <span\n className={cn(\n \"shrink-0 px-1.5 py-2 transition-colors duration-80\",\n \"text-muted-foreground group-hover:text-foreground\",\n )}\n >\n {iconSwitch}\n </span>\n );\n\n const valueElement = (\n <span\n className={cn(\n \"flex-1 min-w-0 text-left text-[13px] text-foreground font-mono py-2 select-none truncate\",\n align === \"left\" ? \"pl-1\" : \"pl-0\",\n )}\n style={{ fontVariationSettings: fontWeights.normal }}\n >\n <mark className=\"bg-transparent text-foreground transition-colors duration-80 group-hover:bg-[#6B97FF]/20 group-hover:text-foreground\">\n {value}\n </mark>\n </span>\n );\n\n const buttonContent =\n align === \"left\" ? (\n <>\n {actionElement}\n {valueElement}\n </>\n ) : (\n <>\n {valueElement}\n {actionElement}\n </>\n );\n\n const button = (\n <button\n type=\"button\"\n onPointerDown={handlePointerDown}\n onClick={handleCopy}\n disabled={disabled}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n className={cn(\n \"group flex items-center w-full cursor-pointer outline-none transition-all duration-80\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF]\",\n shape.input,\n )}\n >\n {buttonContent}\n </button>\n );\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-0.5\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {label && (\n <span\n className={cn(\"text-[13px] text-muted-foreground\", align === \"left\" ? \"pl-1\" : \"pl-0\")}\n style={{ fontVariationSettings: fontWeights.normal }}\n >\n {label}\n </span>\n )}\n {variant === \"icon\" ? (\n <Tooltip\n content={tooltipState === \"idle\" ? \"Copy to clipboard\" : \"Copied\"}\n delayDuration={500}\n sideOffset={2}\n forceOpen={\n tooltipState === \"copied\" ? true : tooltipState === \"suppressed\" ? false : undefined\n }\n onOpenChange={handleTooltipOpenChange}\n >\n {button}\n </Tooltip>\n ) : (\n button\n )}\n </div>\n );\n },\n);\n\nInputCopy.displayName = \"InputCopy\";\n\nexport { InputCopy };\nexport type { InputCopyProps };\nexport default InputCopy;\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useCallback,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ChangeEventHandler,\n} from \"react\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { cn } from \"../lib/utils\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\n\ninterface InputGroupContextValue {\n registerItem: (index: number, element: HTMLLabelElement | null) => void;\n activeIndex: number | null;\n}\n\nconst InputGroupContext = createContext<InputGroupContextValue | null>(null);\n\nfunction useInputGroup() {\n const ctx = useContext(InputGroupContext);\n if (!ctx) throw new Error(\"useInputGroup must be used within an InputGroup\");\n return ctx;\n}\n\ninterface InputGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n children?: ReactNode;\n placeholder?: string;\n value?: string;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n leadingAddon?: ReactNode;\n trailingAddon?: ReactNode;\n trailingAction?: ReactNode;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n trailingButton?: ReactNode;\n error?: boolean | string;\n disabled?: boolean;\n wrapperClassName?: string;\n pill?: boolean;\n type?: InputHTMLAttributes<HTMLInputElement>[\"type\"];\n defaultValue?: InputHTMLAttributes<HTMLInputElement>[\"defaultValue\"];\n id?: string;\n}\n\nconst InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(\n (\n {\n children,\n className,\n placeholder,\n value,\n onChange,\n leadingAddon,\n trailingAddon,\n trailingAction,\n leadingIcon,\n trailingIcon,\n trailingButton,\n error,\n disabled,\n wrapperClassName,\n pill,\n type,\n defaultValue,\n id,\n ...props\n },\n ref,\n ) => {\n const itemsRef = useRef(new Map<number, HTMLLabelElement>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n const registerItem = useCallback((index: number, element: HTMLLabelElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n } else {\n itemsRef.current.delete(index);\n }\n }, []);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n const mouseY = e.clientY;\n\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n\n itemsRef.current.forEach((element, index) => {\n const rect = element.getBoundingClientRect();\n const itemCenterY = rect.top + rect.height / 2;\n const distance = Math.abs(mouseY - itemCenterY);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n });\n\n setActiveIndex(closestIndex);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setActiveIndex(null);\n }, []);\n\n const rendersInput =\n placeholder !== undefined ||\n value !== undefined ||\n onChange !== undefined ||\n leadingAddon !== undefined ||\n trailingAddon !== undefined ||\n trailingAction !== undefined ||\n leadingIcon !== undefined ||\n trailingIcon !== undefined ||\n trailingButton !== undefined ||\n error !== undefined;\n\n if (rendersInput) {\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex items-center gap-2 rounded-[var(--radius-input)] border bg-background px-3 py-2 text-[13px] transition-colors\",\n error ? \"border-destructive/50\" : \"border-border\",\n disabled && \"opacity-50\",\n pill && \"rounded-full\",\n wrapperClassName,\n )}\n {...props}\n >\n {leadingAddon && <span className=\"shrink-0 text-muted-foreground\">{leadingAddon}</span>}\n {leadingIcon && <span className=\"shrink-0 text-muted-foreground\">{leadingIcon}</span>}\n <input\n id={id}\n type={type}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n placeholder={placeholder}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n className={cn(\n \"min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n (trailingAction || trailingIcon) && \"pr-16\",\n className,\n )}\n />\n {trailingAddon && <span className=\"shrink-0 text-muted-foreground\">{trailingAddon}</span>}\n {trailingIcon && <span className=\"shrink-0 text-muted-foreground\">{trailingIcon}</span>}\n {trailingButton}\n {trailingAction && (\n <span className=\"absolute right-2 top-1/2 -translate-y-1/2\">{trailingAction}</span>\n )}\n </div>\n );\n }\n\n return (\n <InputGroupContext.Provider value={{ registerItem, activeIndex }}>\n <div\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n className={cn(\"flex flex-col gap-3 w-72 max-w-full\", className)}\n {...props}\n >\n {children}\n </div>\n </InputGroupContext.Provider>\n );\n },\n);\n\nInputGroup.displayName = \"InputGroup\";\n\ninterface InputFieldProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"index\"\n> {\n label: string;\n placeholder?: string;\n icon?: IconComponent;\n index: number;\n value: string;\n onChange: (value: string) => void;\n error?: string;\n disabled?: boolean;\n className?: string;\n}\n\nconst InputField = forwardRef<HTMLLabelElement, InputFieldProps>(\n (\n {\n label,\n placeholder,\n icon: Icon,\n index,\n value,\n onChange,\n error,\n disabled,\n className,\n ...props\n },\n ref,\n ) => {\n const internalRef = useRef<HTMLLabelElement>(null);\n const { registerItem, activeIndex } = useInputGroup();\n const [isFocused, setIsFocused] = useState(false);\n const shape = useShape();\n\n useEffect(() => {\n registerItem(index, internalRef.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n const isActive = activeIndex === index;\n const labelActive = isActive || isFocused;\n\n const errorId = error ? `input-error-${index}` : undefined;\n\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n // Input container classes\n let bgClass: string;\n let ringClass: string;\n\n if (disabled) {\n bgClass = \"bg-transparent\";\n ringClass = \"ring-border\";\n } else if (error) {\n bgClass = isFocused ? \"bg-card\" : isActive ? \"bg-destructive-light/60\" : \"bg-transparent\";\n ringClass = isFocused || isActive ? \"ring-destructive/50\" : \"ring-transparent\";\n } else if (isFocused) {\n bgClass = \"bg-card\";\n ringClass = \"ring-border\";\n } else if (isActive) {\n bgClass = \"bg-muted/50\";\n ringClass = \"ring-border\";\n } else {\n bgClass = \"bg-transparent\";\n ringClass = \"ring-transparent\";\n }\n\n return (\n <label\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLLabelElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLLabelElement | null>).current = node;\n }}\n className={cn(\n \"flex flex-col gap-1 cursor-text\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n {/* Label */}\n <span className=\"inline-grid text-[13px] pl-3\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1\",\n error ? \"text-destructive\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: fontWeights.normal,\n }}\n >\n {label}\n </span>\n </span>\n\n {/* Input container */}\n <div\n className={cn(\n `flex items-center gap-2 ${shape.input} px-3 py-2 ring-1 transition-all duration-80`,\n bgClass,\n ringClass,\n )}\n >\n {Icon && (\n <Icon\n size={16}\n strokeWidth={labelActive ? 2 : 1.5}\n className={cn(\n \"shrink-0 transition-[color,stroke-width] duration-80\",\n labelActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n />\n )}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-describedby={errorId}\n className=\"w-full bg-transparent text-[13px] text-foreground placeholder:text-muted-foreground outline-none font-[inherit]\"\n style={{ fontVariationSettings: fontWeights.normal }}\n {...props}\n />\n </div>\n\n {/* Error message */}\n {error && (\n <span\n id={errorId}\n className=\"text-[12px] text-destructive pl-3\"\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {error}\n </span>\n )}\n </label>\n );\n },\n);\n\nInputField.displayName = \"InputField\";\n\nexport { InputGroup, InputField };\nexport default InputGroup;\n","\"use client\";\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent as ReactDragEvent,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { AnimatePresence, motion, Reorder, useReducedMotion } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { spring } from \"../lib/springs\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useIcon } from \"../lib/icon-context\";\nimport { surfaceClasses } from \"../lib/surface-classes\";\nimport { SurfaceProvider } from \"../lib/surface-context\";\nimport { FileThumbnail } from \"./file-thumbnail\";\nimport { Button } from \"./button\";\nimport { Tooltip } from \"./tooltip\";\n\nconst useIsoLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// Touch devices have no hover, so hover-revealed affordances (like a queued\n// row's × button) would never appear. `(hover: none)` flags those so they can\n// be shown persistently instead. SSR-safe: starts false, resolves on mount.\nfunction useIsTouch() {\n const [isTouch, setIsTouch] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(\"(hover: none)\");\n const update = () => setIsTouch(mq.matches);\n update();\n mq.addEventListener(\"change\", update);\n return () => mq.removeEventListener(\"change\", update);\n }, []);\n return isTouch;\n}\n\nconst DEFAULT_ACCEPT = \"image/png,image/jpeg,application/pdf\";\n\ninterface InputMessageSlotContext {\n /** Opens the native file picker via the hidden `<input type=\"file\">`.\n * Pass `acceptOverride` (e.g. `\"image/*\"`) to scope the picker to a\n * subset of the component's accept types just for this invocation. */\n openFilePicker: (acceptOverride?: string) => void;\n /** Currently-attached files (controlled). */\n files: File[];\n}\n\ntype InputMessageSlot = ReactNode | ((ctx: InputMessageSlotContext) => ReactNode);\n\n/** A message held in the queue while the assistant is responding. Carries the\n * trimmed text plus a snapshot of the files attached when it was queued, so\n * double-click-to-edit can restore both. `id` is a stable key minted on enqueue. */\ninterface QueuedMessage {\n id: string;\n text: string;\n files: File[];\n}\n\ninterface InputMessageProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Controlled textarea value. */\n value: string;\n /** Called with the new value on every textarea change. */\n onValueChange: (value: string) => void;\n /** Fired when the user submits (Enter or the send button) and when a queued\n * message auto-dispatches. Receives the trimmed value, the attached files,\n * and — for auto-dispatched queue items — `meta.queuedId` (the originating\n * QueuedMessage id), so a consumer can e.g. morph the queued item into the\n * sent message via a shared-layout (`layoutId`) transition. */\n onSend?: (value: string, files: File[], meta?: { queuedId?: string }) => void;\n /** Placeholder text shown when the value is empty. */\n placeholder?: string;\n /** Content rendered in the bottom-left action area. Can be a function that\n * receives `{ openFilePicker, files }` to wire an attach button. */\n leftSlot?: InputMessageSlot;\n /** Content rendered in the bottom-right action area, before the built-in\n * send button. Same render-fn shape as leftSlot. */\n rightSlot?: InputMessageSlot;\n /** Disables the textarea, send button, and drag-and-drop. */\n disabled?: boolean;\n /** Minimum visible rows before the textarea grows. */\n minRows?: number;\n /** Maximum visible rows before the textarea starts to scroll. */\n maxRows?: number;\n /** When false, clicking the surrounding container won't refocus the textarea. */\n clickToFocus?: boolean;\n /** Accessible label for the send button. */\n sendLabel?: string;\n /** Controlled list of attached files. When undefined, attachment behavior\n * is disabled (no drag-drop, no file input). */\n files?: File[];\n /** Called when files are added (drag-drop or picker) or removed. */\n onFilesChange?: (files: File[]) => void;\n /** Accepted MIME types as a comma-separated string. Defaults to PNG / JPEG / PDF. */\n accept?: string;\n /** Maximum number of files. Extra files are dropped when the limit is exceeded. */\n maxFiles?: number;\n /** Side of each preview tile in pixels. Defaults to 80. */\n filePreviewSize?: number;\n /** Extra props forwarded to the underlying textarea. */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"value\" | \"onChange\" | \"onKeyDown\" | \"disabled\" | \"placeholder\"\n >;\n /** Assistant response state. When `\"streaming\"`, the send button becomes a\n * Stop control (empty draft) or a Queue action (non-empty draft); on the\n * `streaming → idle` edge the next queued message auto-dispatches via `onSend`.\n * Leave undefined to keep the legacy send-immediately behavior. */\n status?: \"idle\" | \"streaming\";\n /** Fired when the Stop control is pressed (streaming, empty draft). The\n * consumer should halt the current response and flip `status` to `\"idle\"`,\n * which immediately dispatches the next queued message. */\n onStop?: () => void;\n /** Controlled queue of pending messages. Requires `status` to be controlled. */\n queue?: QueuedMessage[];\n /** Called when the queue changes (enqueue, edit, delete, reorder, dispatch). */\n onQueueChange?: (queue: QueuedMessage[]) => void;\n /** Render the built-in reorderable queue rows above the textarea. Set to\n * `false` to suppress them and render the queue yourself (e.g. as full-width\n * rows above the composer) — enqueue + auto-dispatch still run. */\n showQueue?: boolean;\n /** Previously-sent messages, oldest first. When the textarea is focused,\n * ArrowUp (caret on the first line) recalls the previous one and walks\n * backward through history; ArrowDown (caret on the last line) walks forward\n * toward the in-progress draft. Editing or sending exits history mode. */\n history?: string[];\n}\n\n// ─── File preview tile ────────────────────────────────────────────────────\n// Composer-row tile: a FileThumbnail wrapped with enter/exit motion and a\n// hover-revealed remove (×) button.\ninterface FilePreviewTileProps {\n file: File;\n onRemove: () => void;\n size: number;\n}\n\nfunction FilePreviewTile({ file, onRemove, size }: FilePreviewTileProps) {\n const XIcon = useIcon(\"x\");\n\n return (\n <motion.div\n // `layout` animates sibling tiles into the gap when one is removed.\n // Enter: spring-fast (0.08s) — the chip category per animation-guidelines.md.\n // Exit: 0.06s linear — \"exits should be slightly faster than enter\",\n // matches CheckboxGroup's hover-bg pattern.\n layout\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.9, transition: spring.fast.exit }}\n transition={spring.fast}\n // `cursor-default` opts out of the parent's `cursor-text` so hovering\n // a preview tile doesn't look like it'll land in the textarea.\n className=\"relative shrink-0 cursor-default group/tile\"\n >\n <FileThumbnail file={file} size={size} />\n <Tooltip content=\"Remove\" side=\"top\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n aria-label={`Remove ${file.name}`}\n // Force the light-mode palette (dark circle + white X) regardless\n // of theme — the close badge needs to read as a \"delete affordance\"\n // over arbitrary image/PDF content, so it sits at a fixed contrast\n // instead of flipping with the surrounding surface.\n className=\"absolute top-1 right-1 w-5 h-5 rounded-full bg-neutral-900 text-white opacity-0 group-hover/tile:opacity-100 transition-opacity duration-80 flex items-center justify-center cursor-pointer outline-none focus-visible:opacity-100 focus-visible:ring-1 focus-visible:ring-[#6B97FF]\"\n >\n <XIcon size={12} strokeWidth={2.5} />\n </button>\n </Tooltip>\n </motion.div>\n );\n}\n\n// ─── Queued message row ───────────────────────────────────────────────────\n// A pending message in the queue: a recessed, draggable row that reads as\n// \"staged, not live\". Double-click (or Enter/F2) edits it back into the\n// composer; the hover-revealed × (or Delete) removes it; drag — or Alt+↑/↓ —\n// reorders. Top of the list is next to dispatch.\ninterface QueuedRowProps {\n item: QueuedMessage;\n index: number;\n total: number;\n reduceMotion: boolean;\n isTouch: boolean;\n onEdit: (item: QueuedMessage) => void;\n onRemove: (item: QueuedMessage) => void;\n onMove: (item: QueuedMessage, dir: -1 | 1) => void;\n}\n\nfunction QueuedRow({\n item,\n index,\n total,\n reduceMotion,\n isTouch,\n onEdit,\n onRemove,\n onMove,\n}: QueuedRowProps) {\n const XIcon = useIcon(\"x\");\n const ImageIcon = useIcon(\"image\");\n const fileCount = item.files.length;\n const label = item.text || `${fileCount} attachment${fileCount === 1 ? \"\" : \"s\"}`;\n\n return (\n <Reorder.Item\n value={item}\n layout\n // Enter: spring-fast chip category. Exit slightly faster (0.06s linear),\n // per animation-guidelines.md. Reduced-motion drops the scale.\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={\n reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97, transition: spring.fast.exit }\n }\n transition={spring.fast}\n aria-label={`Queued message ${index + 1} of ${total}: ${label}`}\n tabIndex={0}\n onDoubleClick={() => onEdit(item)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \"F2\") {\n e.preventDefault();\n onEdit(item);\n } else if (e.key === \"Delete\" || e.key === \"Backspace\") {\n e.preventDefault();\n onRemove(item);\n } else if (e.altKey && (e.key === \"ArrowUp\" || e.key === \"ArrowDown\")) {\n e.preventDefault();\n onMove(item, e.key === \"ArrowUp\" ? -1 : 1);\n }\n }}\n className={cn(\n \"group/qrow flex items-center gap-2 rounded-lg bg-muted px-2.5 py-1.5\",\n \"text-[13px] text-foreground/85 select-none outline-none\",\n \"cursor-grab active:cursor-grabbing\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF]\",\n )}\n style={{ fontVariationSettings: fontWeights.normal }}\n >\n {fileCount > 0 && (\n <span className=\"flex shrink-0 items-center gap-0.5 text-muted-foreground\">\n <ImageIcon size={13} />\n {item.text && <span className=\"tabular-nums\">{fileCount}</span>}\n </span>\n )}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n <Tooltip content=\"Remove\" side=\"top\">\n <button\n type=\"button\"\n // Stop the pointer-down from starting a Reorder drag, and the click\n // from bubbling to the row's double-click/edit handler.\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(item);\n }}\n aria-label={`Remove queued message: ${label}`}\n className={cn(\n \"shrink-0 flex h-5 w-5 items-center justify-center rounded-full\",\n \"text-muted-foreground hover:text-foreground hover:bg-hover\",\n // Hover devices reveal × on row-hover; touch has no hover, so keep\n // it persistently visible there.\n isTouch\n ? \"opacity-100\"\n : \"opacity-0 group-hover/qrow:opacity-100 focus-visible:opacity-100\",\n \"transition-opacity duration-80 cursor-pointer outline-none\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF]\",\n )}\n >\n <XIcon size={13} strokeWidth={2.5} />\n </button>\n </Tooltip>\n </Reorder.Item>\n );\n}\n\n// ─── InputMessage ─────────────────────────────────────────────────────────\n\nconst InputMessage = forwardRef<HTMLDivElement, InputMessageProps>(\n (\n {\n value,\n onValueChange,\n onSend,\n placeholder = \"Ask me anything…\",\n leftSlot,\n rightSlot,\n disabled,\n minRows = 1,\n maxRows = 8,\n clickToFocus = true,\n sendLabel = \"Send\",\n files,\n onFilesChange,\n accept = DEFAULT_ACCEPT,\n maxFiles,\n filePreviewSize = 80,\n textareaProps,\n status,\n onStop,\n queue,\n onQueueChange,\n showQueue = true,\n history = [],\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const shape = useShape();\n const ArrowUpIcon = useIcon(\"arrow-up\");\n const reduceMotion = useReducedMotion() ?? false;\n const isTouch = useIsTouch();\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [focusVisible, setFocusVisible] = useState(false);\n const [dragOver, setDragOver] = useState(false);\n const [hovered, setHovered] = useState(false);\n\n const filesArr = useMemo(() => files ?? [], [files]);\n const supportsFiles = onFilesChange !== undefined;\n\n // Queue is active only when both the status is controlled and a change\n // handler is wired — same opt-in shape as `supportsFiles`.\n const queueArr = useMemo(() => queue ?? [], [queue]);\n // Always-current view of the queue, so enqueue/edit/remove/move read the\n // latest value even if a handler closure is stale (e.g. two submits land\n // before the controlled `queue` prop round-trips back).\n const queueRef = useRef(queueArr);\n queueRef.current = queueArr;\n const supportsQueue = status !== undefined && onQueueChange !== undefined;\n const streaming = status === \"streaming\";\n const [liveMsg, setLiveMsg] = useState(\"\");\n\n // Sent-message history navigation (readline-style). `historyIndex` is null\n // when not browsing; `draftBeforeHistory` stashes the in-progress text so\n // ArrowDown past the newest entry restores it.\n const [historyIndex, setHistoryIndex] = useState<number | null>(null);\n const draftBeforeHistory = useRef(\"\");\n\n useIsoLayoutEffect(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n const computed = getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight);\n const measuredLineHeight = Number.isNaN(lineHeight) ? 20 : lineHeight;\n const min = measuredLineHeight * minRows;\n const max = measuredLineHeight * maxRows;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [value, minRows, maxRows]);\n\n const trimmed = value.trim();\n const canSend = !disabled && (trimmed.length > 0 || filesArr.length > 0);\n\n // Edge = the box-shadow's 1px ring, recoloured in place per state so the\n // stroke gains contrast without ever appearing to thicken (no second\n // border band layered beside it). The drop (`0 1px 1px`) is kept so the\n // composer holds its lift across states. Applied inline (not via a Tailwind\n // `shadow-*` utility, which mangles multi-layer arbitrary values) with the\n // precedence drag > focus > hover; when none are active, the className's\n // `shadow-surface-2` supplies the resting edge.\n const EDGE_DROP = \"0 1px 1px -0.5px var(--shadow-color)\";\n const edgeShadow = dragOver\n ? `0 0 0 1px #6B97FF, ${EDGE_DROP}`\n : focusVisible\n ? `0 0 0 1px color-mix(in oklab, var(--foreground) 20%, transparent), ${EDGE_DROP}`\n : hovered && clickToFocus && !disabled\n ? `0 0 0 1px var(--border), ${EDGE_DROP}`\n : undefined;\n\n const handleSend = useCallback(() => {\n if (!canSend) return;\n setHistoryIndex(null);\n // While the assistant is streaming, a submit enqueues instead of sending:\n // snapshot the draft (text + currently-attached files) into a queue item,\n // then clear the composer and keep focus.\n if (streaming && supportsQueue) {\n const item: QueuedMessage = {\n id: crypto.randomUUID(),\n text: trimmed,\n files: filesArr,\n };\n onQueueChange?.([...queueRef.current, item]);\n onValueChange(\"\");\n if (supportsFiles) onFilesChange?.([]);\n requestAnimationFrame(() => textareaRef.current?.focus());\n return;\n }\n onSend?.(trimmed, filesArr);\n }, [\n canSend,\n streaming,\n supportsQueue,\n onSend,\n trimmed,\n filesArr,\n onQueueChange,\n onValueChange,\n supportsFiles,\n onFilesChange,\n ]);\n\n const handleStop = useCallback(() => onStop?.(), [onStop]);\n\n // Auto-dispatch: on the streaming → idle edge (whether the response\n // finished on its own or the user pressed Stop), fire the head of the\n // queue and drop it. The consumer is expected to set status back to\n // \"streaming\" inside onSend, which re-arms this for the next item.\n const prevStatusRef = useRef(status);\n useEffect(() => {\n const prev = prevStatusRef.current;\n prevStatusRef.current = status;\n if (!supportsQueue) return;\n if (prev === \"streaming\" && status === \"idle\" && queueArr.length > 0) {\n const [next, ...rest] = queueArr;\n onQueueChange?.(rest);\n onSend?.(next.text, next.files, { queuedId: next.id });\n setLiveMsg(`Message sent.${rest.length ? ` ${rest.length} still queued.` : \"\"}`);\n }\n }, [status, supportsQueue, queueArr, onQueueChange, onSend]);\n\n // ── Queue item actions ────────────────────────────────────────────\n const editQueued = useCallback(\n (item: QueuedMessage) => {\n if (!supportsQueue) return;\n // Silent replace: pull the item out of the queue into the composer,\n // overwriting any current draft. Re-sending re-queues it to the end.\n setHistoryIndex(null);\n onValueChange(item.text);\n if (supportsFiles) {\n onFilesChange?.(maxFiles != null ? item.files.slice(0, maxFiles) : item.files);\n }\n onQueueChange?.(queueRef.current.filter((q) => q.id !== item.id));\n requestAnimationFrame(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.focus();\n el.setSelectionRange(el.value.length, el.value.length);\n });\n },\n [supportsQueue, supportsFiles, onValueChange, onFilesChange, maxFiles, onQueueChange],\n );\n\n const removeQueued = useCallback(\n (item: QueuedMessage) => onQueueChange?.(queueRef.current.filter((q) => q.id !== item.id)),\n [onQueueChange],\n );\n\n const moveQueued = useCallback(\n (item: QueuedMessage, dir: -1 | 1) => {\n const cur = queueRef.current;\n const i = cur.findIndex((q) => q.id === item.id);\n const j = i + dir;\n if (i < 0 || j < 0 || j >= cur.length) return;\n const next = [...cur];\n [next[i], next[j]] = [next[j], next[i]];\n onQueueChange?.(next);\n },\n [onQueueChange],\n );\n\n // Send button morph: Stop (streaming + empty draft) → Queue (streaming +\n // draft) → Send (idle). Send and Queue share the arrow-up glyph; only the\n // Stop⇄arrow swap animates.\n const buttonMode: \"send\" | \"queue\" | \"stop\" = !streaming\n ? \"send\"\n : canSend && supportsQueue\n ? \"queue\"\n : onStop\n ? \"stop\"\n : \"send\";\n const buttonLabel =\n buttonMode === \"stop\" ? \"Stop\" : buttonMode === \"queue\" ? \"Queue message\" : sendLabel;\n\n const setCaretEnd = useCallback(() => {\n requestAnimationFrame(() => {\n const el = textareaRef.current;\n if (el) el.setSelectionRange(el.value.length, el.value.length);\n });\n }, []);\n\n const handleKeyDown = useCallback(\n (e: ReactKeyboardEvent<HTMLTextAreaElement>) => {\n if (e.nativeEvent.isComposing) return;\n\n // Readline-style history. Only plain ArrowUp/ArrowDown navigate (no\n // modifiers), and only when the caret is on the first/last line so\n // multi-line editing still works normally.\n if (\n history.length > 0 &&\n (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") &&\n !e.shiftKey &&\n !e.altKey &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n const el = e.currentTarget;\n const caret = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? caret;\n if (e.key === \"ArrowUp\" && !value.slice(0, caret).includes(\"\\n\")) {\n const start = historyIndex == null ? history.length : historyIndex;\n if (start > 0) {\n e.preventDefault();\n if (historyIndex == null) draftBeforeHistory.current = value;\n const ni = start - 1;\n setHistoryIndex(ni);\n onValueChange(history[ni]);\n setCaretEnd();\n }\n return;\n }\n if (e.key === \"ArrowDown\" && historyIndex != null && !value.slice(end).includes(\"\\n\")) {\n e.preventDefault();\n const ni = historyIndex + 1;\n if (ni >= history.length) {\n setHistoryIndex(null);\n onValueChange(draftBeforeHistory.current);\n } else {\n setHistoryIndex(ni);\n onValueChange(history[ni]);\n }\n setCaretEnd();\n return;\n }\n }\n\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n },\n [history, value, historyIndex, onValueChange, setCaretEnd, handleSend],\n );\n\n const handleContainerMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!clickToFocus || disabled) return;\n const target = e.target as HTMLElement;\n if (target === textareaRef.current) return;\n if (\n target.closest(\n 'button, a, input, select, textarea, [contenteditable], [role=\"button\"], [data-im-queue]',\n )\n ) {\n return;\n }\n e.preventDefault();\n textareaRef.current?.focus();\n },\n [clickToFocus, disabled],\n );\n\n // ── File helpers ──────────────────────────────────────────────────\n const acceptTokens = useMemo(\n () =>\n accept\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n [accept],\n );\n\n const matchesAccept = useCallback(\n (file: File) =>\n acceptTokens.some((token) => {\n if (token.endsWith(\"/*\")) return file.type.startsWith(token.slice(0, -1));\n if (token.startsWith(\".\")) return file.name.toLowerCase().endsWith(token.toLowerCase());\n return file.type === token;\n }),\n [acceptTokens],\n );\n\n const addFiles = useCallback(\n (incoming: File[]) => {\n if (!onFilesChange) return;\n // Identity key for dedup: name + size + lastModified is unique enough\n // to catch \"user dropped the same file twice\" without false positives\n // on legitimately distinct files (different bytes ⇒ different size).\n const fingerprint = (f: File) => `${f.name}-${f.size}-${f.lastModified}`;\n const existing = new Set(filesArr.map(fingerprint));\n const accepted: File[] = [];\n for (const f of incoming) {\n if (!matchesAccept(f)) continue;\n const fp = fingerprint(f);\n if (existing.has(fp)) continue;\n existing.add(fp);\n accepted.push(f);\n }\n if (!accepted.length) return;\n const next = [...filesArr, ...accepted];\n onFilesChange(maxFiles != null ? next.slice(0, maxFiles) : next);\n },\n [onFilesChange, filesArr, matchesAccept, maxFiles],\n );\n\n const removeFile = useCallback(\n (idx: number) => {\n if (!onFilesChange) return;\n onFilesChange(filesArr.filter((_, i) => i !== idx));\n },\n [onFilesChange, filesArr],\n );\n\n const openFilePicker = useCallback(\n (overrideAccept?: string) => {\n const el = fileInputRef.current;\n if (!el) return;\n // Temporarily narrow `accept` for this invocation (e.g. \"image/*\").\n // Reset after the click so subsequent native invocations still honor\n // the component-level accept.\n if (overrideAccept) {\n el.accept = overrideAccept;\n el.click();\n // Restore on next tick — the picker dialog reads `accept` synchronously.\n queueMicrotask(() => {\n if (fileInputRef.current) fileInputRef.current.accept = accept;\n });\n return;\n }\n el.click();\n },\n [accept],\n );\n\n // ── Slot rendering ────────────────────────────────────────────────\n const slotCtx = useMemo<InputMessageSlotContext>(\n () => ({ openFilePicker, files: filesArr }),\n [openFilePicker, filesArr],\n );\n const leftContent = typeof leftSlot === \"function\" ? leftSlot(slotCtx) : leftSlot;\n const rightContent = typeof rightSlot === \"function\" ? rightSlot(slotCtx) : rightSlot;\n\n // ── Drag-and-drop ────────────────────────────────────────────────\n const handleDragOver = useCallback(\n (e: ReactDragEvent<HTMLDivElement>) => {\n if (!supportsFiles || disabled) return;\n // Only treat as a file drag — text/HTML drags shouldn't trigger.\n if (!Array.from(e.dataTransfer.types).includes(\"Files\")) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"copy\";\n setDragOver(true);\n },\n [supportsFiles, disabled],\n );\n\n const handleDragLeave = useCallback((e: ReactDragEvent<HTMLDivElement>) => {\n const wrapper = e.currentTarget;\n const next = e.relatedTarget as Node | null;\n if (next && wrapper.contains(next)) return;\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: ReactDragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n if (!supportsFiles || disabled) return;\n addFiles(Array.from(e.dataTransfer.files));\n },\n [supportsFiles, disabled, addFiles],\n );\n\n const handleFileInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files) return;\n addFiles(Array.from(e.target.files));\n e.target.value = \"\"; // Allow re-selecting the same file.\n },\n [addFiles],\n );\n\n return (\n <div\n ref={ref}\n onMouseDown={handleContainerMouseDown}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={cn(\n // The edge is the box-shadow's hairline ring (from surface-2), not a\n // border. State changes recolor that same 1px ring in place rather\n // than layering a second colored border beside it — so hover / focus\n // bump *contrast* without ever appearing to thicken the stroke.\n \"flex flex-col gap-1 p-2 transition-[box-shadow,color] duration-80\",\n surfaceClasses(2, 2),\n shape.container,\n clickToFocus && !disabled && \"cursor-text\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n style={edgeShadow ? { boxShadow: edgeShadow, ...style } : style}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n {...props}\n >\n <SurfaceProvider value={2}>\n {supportsFiles && (\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n multiple={maxFiles == null || maxFiles > 1}\n className=\"hidden\"\n onChange={handleFileInputChange}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n )}\n\n {/* Attached files preview row — sits above the textarea.\n The outer motion.div animates the row's height (collapsing the\n whole component height) when files appear / disappear.\n The inner `mode=\"popLayout\"` AnimatePresence pulls a removing\n tile out of layout flow so siblings can slide into the gap\n without fighting its exit anim. Keys are purely file-identity\n (no index) so removing the first file doesn't re-key — and\n remount — every surviving sibling. */}\n <AnimatePresence initial={false}>\n {filesArr.length > 0 && (\n <motion.div\n key=\"preview-row\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ ...spring.moderate, bounce: 0 }}\n className=\"overflow-hidden\"\n >\n <div className=\"flex flex-wrap gap-2 pb-1\">\n <AnimatePresence initial={false} mode=\"popLayout\">\n {filesArr.map((file, i) => (\n <FilePreviewTile\n key={`${file.name}-${file.size}-${file.lastModified}`}\n file={file}\n onRemove={() => removeFile(i)}\n size={filePreviewSize}\n />\n ))}\n </AnimatePresence>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Queued messages — reorderable rows above the textarea. The outer\n motion.div collapses the region height when the queue empties;\n the Reorder.Group handles drag-reorder (top = next to dispatch)\n and AnimatePresence handles per-row enter/exit. */}\n {supportsQueue && showQueue && (\n <AnimatePresence initial={false}>\n {queueArr.length > 0 && (\n <motion.div\n key=\"queue-row\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ ...spring.moderate, bounce: 0 }}\n className=\"overflow-hidden\"\n >\n <Reorder.Group\n axis=\"y\"\n values={queueArr}\n onReorder={(next) => onQueueChange?.(next)}\n data-im-queue\n className=\"flex flex-col gap-1 pb-1\"\n >\n <AnimatePresence initial={false}>\n {queueArr.map((item, i) => (\n <QueuedRow\n key={item.id}\n item={item}\n index={i}\n total={queueArr.length}\n reduceMotion={reduceMotion}\n isTouch={isTouch}\n onEdit={editQueued}\n onRemove={removeQueued}\n onMove={moveQueued}\n />\n ))}\n </AnimatePresence>\n </Reorder.Group>\n </motion.div>\n )}\n </AnimatePresence>\n )}\n\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => {\n // Real typing exits history mode (recall sets the value\n // programmatically, which doesn't fire onChange).\n setHistoryIndex(null);\n onValueChange(e.target.value);\n }}\n onKeyDown={handleKeyDown}\n onFocus={(e) => {\n if (e.target.matches(\":focus-visible\")) setFocusVisible(true);\n }}\n onBlur={() => setFocusVisible(false)}\n placeholder={dragOver && supportsFiles ? \"Drop files here to add to chat\" : placeholder}\n disabled={disabled}\n rows={minRows}\n aria-label={textareaProps?.[\"aria-label\"] ?? \"Message\"}\n className={cn(\n \"w-full resize-none bg-transparent outline-none\",\n \"text-[14px] leading-5 text-foreground placeholder:text-muted-foreground\",\n \"px-2 py-2\",\n )}\n style={{ fontVariationSettings: fontWeights.normal }}\n {...textareaProps}\n />\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 min-w-0\">{leftContent}</div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n {rightContent}\n <Button\n type=\"button\"\n variant=\"primary\"\n size=\"icon-sm\"\n onClick={buttonMode === \"stop\" ? handleStop : handleSend}\n disabled={buttonMode === \"stop\" ? disabled : !canSend}\n aria-label={buttonLabel}\n >\n <AnimatePresence mode=\"wait\" initial={false}>\n <motion.span\n key={buttonMode === \"stop\" ? \"stop\" : \"arrow\"}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.6 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={\n reduceMotion\n ? { opacity: 0 }\n : { opacity: 0, scale: 0.6, transition: spring.fast.exit }\n }\n transition={spring.fast}\n className=\"flex items-center justify-center leading-none\"\n >\n {buttonMode === \"stop\" ? (\n <span className=\"h-3 w-3 rounded-[3px] bg-current\" />\n ) : (\n // Override icon-sm's small 14px svg — the send glyph reads\n // better a touch larger. `size` matches the attribute to\n // the CSS so the svg box stays centered.\n <ArrowUpIcon size={19} className=\"block !h-[19px] !w-[19px]\" />\n )}\n </motion.span>\n </AnimatePresence>\n </Button>\n </div>\n </div>\n {/* Politely announces auto-dispatch of queued messages. */}\n <span className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {liveMsg}\n </span>\n </SurfaceProvider>\n </div>\n );\n },\n);\n\nInputMessage.displayName = \"InputMessage\";\n\nexport { InputMessage };\nexport type { InputMessageProps, InputMessageSlotContext, QueuedMessage };\nexport default InputMessage;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface InputNumberProps extends Omit<\n React.ComponentProps<\"input\">,\n \"type\" | \"value\" | \"onChange\"\n> {\n value: number | null;\n onChange: (next: number) => void;\n min?: number | undefined;\n max?: number | undefined;\n step?: number | undefined;\n /** Suffix shown after the number (e.g. \"px\", \"mm\", \"°\", \"%\"). */\n unit?: string | undefined;\n /** Number of decimals to display. Default: 0. */\n precision?: number | undefined;\n /** Text shown when value is null. Useful for mixed multi-selection values. */\n mixedLabel?: string | undefined;\n /** Calls onChange while typing instead of waiting for blur/Enter. */\n commitOnChange?: boolean | undefined;\n /** Hides the up/down stepper buttons. */\n hideSteppers?: boolean | undefined;\n}\n\n/**\n * Numeric input with up/down steppers, unit suffix, and arrow-key step (Shift = 10×).\n * Designed for designer property panels — see PHASE_0_AUDIT.md §P0.2.\n */\nconst InputNumber = React.forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value,\n onChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n unit,\n precision = 0,\n mixedLabel = \"Mixed\",\n commitOnChange = false,\n hideSteppers = false,\n className,\n disabled,\n onBlur,\n onFocus,\n onKeyDown,\n ...rest\n },\n ref,\n ) => {\n const formatValue = React.useCallback(\n (next: number | null) => (next === null ? mixedLabel : next.toFixed(precision)),\n [mixedLabel, precision],\n );\n\n const [text, setText] = React.useState<string>(formatValue(value));\n\n React.useEffect(() => {\n setText(formatValue(value));\n }, [formatValue, value]);\n\n const clamp = React.useCallback((n: number) => Math.min(max, Math.max(min, n)), [min, max]);\n\n const parseAndClamp = React.useCallback((raw: string) => {\n const n = parseFloat(raw);\n if (Number.isFinite(n)) {\n return clamp(n);\n }\n return null;\n }, [clamp]);\n\n const commit = (raw: string) => {\n const next = parseAndClamp(raw);\n if (next === null) {\n setText(formatValue(value));\n return;\n }\n onChange(next);\n setText(next.toFixed(precision));\n };\n\n const bump = (delta: number) => {\n const next = clamp((value ?? 0) + delta);\n onChange(next);\n setText(next.toFixed(precision));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n bump(step * (e.shiftKey ? 10 : 1));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n bump(-step * (e.shiftKey ? 10 : 1));\n } else if (e.key === \"Enter\") {\n commit((e.target as HTMLInputElement).value);\n }\n };\n\n return (\n <div\n className={cn(\n \"inline-flex h-8 items-stretch rounded-md border border-border bg-card overflow-hidden\",\n \"focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n spellCheck={false}\n value={text}\n onChange={(e) => {\n setText(e.target.value);\n if (commitOnChange) {\n const next = parseAndClamp(e.target.value);\n if (next !== null) {\n onChange(next);\n }\n }\n }}\n onFocus={(e) => {\n if (value === null) {\n setText(\"\");\n }\n onFocus?.(e);\n }}\n onBlur={(e) => {\n commit(e.target.value);\n onBlur?.(e);\n }}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"w-full caption text-foreground px-2 bg-transparent focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none text-right\"\n {...rest}\n />\n {unit && (\n <span\n aria-hidden\n className=\"caption-xs text-muted-foreground self-center pr-1.5 select-none\"\n >\n {unit}\n </span>\n )}\n {!hideSteppers && (\n <div className=\"flex flex-col border-l border-border\">\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => bump(step)}\n aria-label=\"Increment\"\n className=\"flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground\"\n >\n <svg viewBox=\"0 0 8 5\" width=\"8\" height=\"5\" fill=\"currentColor\">\n <path d=\"M0 5 L4 0 L8 5 Z\" />\n </svg>\n </button>\n <div className=\"border-t border-border\" />\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => bump(-step)}\n aria-label=\"Decrement\"\n className=\"flex-1 px-1 hover:bg-muted active:bg-muted transition-colors text-muted-foreground\"\n >\n <svg viewBox=\"0 0 8 5\" width=\"8\" height=\"5\" fill=\"currentColor\">\n <path d=\"M0 0 L4 5 L8 0 Z\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n );\n },\n);\nInputNumber.displayName = \"InputNumber\";\n\nexport { InputNumber };\nexport type { InputNumberProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { Minus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst InputOTP = React.forwardRef<\n React.ComponentRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\"flex items-center gap-2 has-disabled:opacity-50\", containerClassName)}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n));\nInputOTP.displayName = \"InputOTP\";\n\nconst InputOTPGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center\", className)} {...props} />\n ),\n);\nInputOTPGroup.displayName = \"InputOTPGroup\";\n\nconst InputOTPSlot = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex h-12 w-11 items-center justify-center\",\n \"border-y border-r border-border body font-medium text-foreground\",\n \"first:rounded-l-xl first:border-l last:rounded-r-xl\",\n \"transition-[border-color,box-shadow]\",\n isActive && \"z-10 ring-2 ring-brand-primary/40 border-brand-primary\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-5 w-px animate-caret-blink bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n );\n});\nInputOTPSlot.displayName = \"InputOTPSlot\";\n\nconst InputOTPSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus size={14} className=\"text-muted-foreground\" />\n </div>\n ),\n);\nInputOTPSeparator.displayName = \"InputOTPSeparator\";\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst Kbd = React.forwardRef<HTMLElement, React.ComponentProps<\"kbd\">>(\n ({ className, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono caption-xs font-medium text-muted-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\nKbd.displayName = \"Kbd\";\n\nexport { Kbd };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { File, Image } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface MediaAssetCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: React.ReactNode;\n src?: string | null;\n alt?: string;\n meta?: React.ReactNode;\n details?: React.ReactNode;\n actions?: React.ReactNode;\n selected?: boolean;\n mediaType?: \"image\" | \"file\" | \"video\" | \"unknown\";\n orientation?: \"responsive\" | \"grid\" | \"list\";\n onSelect?: () => void;\n}\n\nfunction MediaAssetCard({\n name,\n src,\n alt = \"\",\n meta,\n details,\n actions,\n selected,\n mediaType = src ? \"image\" : \"file\",\n orientation = \"responsive\",\n onSelect,\n className,\n onClick,\n ...props\n}: MediaAssetCardProps) {\n const isInteractive = Boolean(onSelect || onClick);\n const Wrapper = isInteractive ? \"button\" : \"div\";\n const isList = orientation === \"list\";\n const isGrid = orientation === \"grid\";\n const showImage = Boolean(src && mediaType === \"image\");\n\n const fallbackIcon =\n mediaType === \"image\" ? (\n <Image className=\"size-6 text-muted-foreground\" aria-hidden=\"true\" />\n ) : (\n <File className=\"size-6 text-muted-foreground\" aria-hidden=\"true\" />\n );\n\n return (\n <div\n className={cn(\n \"group min-w-0\",\n isGrid && \"overflow-hidden rounded-xl border border-border bg-card shadow-natural\",\n isList && \"flex gap-3 border-b border-border py-3 last:border-b-0\",\n orientation === \"responsive\" &&\n \"flex gap-3 border-b border-border py-3 last:border-b-0 sm:block sm:overflow-hidden sm:rounded-xl sm:border sm:bg-card sm:py-0 sm:shadow-natural\",\n selected && \"ring-2 ring-brand-primary/35\",\n className,\n )}\n data-slot=\"media-asset-card\"\n data-selected={selected ? \"true\" : \"false\"}\n {...props}\n >\n <Wrapper\n type={Wrapper === \"button\" ? \"button\" : undefined}\n className={cn(\n \"relative flex shrink-0 items-center justify-center overflow-hidden bg-muted text-left\",\n \"transition-[background-color,box-shadow,scale] duration-150\",\n isInteractive &&\n \"cursor-pointer active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n isList && \"size-16 rounded-lg\",\n isGrid && \"aspect-square w-full\",\n orientation === \"responsive\" &&\n \"size-16 rounded-lg sm:aspect-square sm:size-auto sm:w-full sm:rounded-none\",\n )}\n onClick={(event) => {\n onClick?.(event as React.MouseEvent<HTMLDivElement>);\n if (!event.defaultPrevented) onSelect?.();\n }}\n aria-label={isInteractive && typeof name === \"string\" ? name : undefined}\n >\n {showImage ? (\n <img\n src={src ?? undefined}\n alt={alt}\n className=\"size-full object-cover shadow-[inset_0_0_0_1px_rgba(0,0,0,0.1)] dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1)]\"\n />\n ) : (\n fallbackIcon\n )}\n </Wrapper>\n\n <div\n className={cn(\n \"min-w-0 flex-1\",\n isGrid && \"p-3\",\n isList && \"py-0.5\",\n orientation === \"responsive\" && \"py-0.5 sm:p-3\",\n )}\n >\n <div className=\"flex min-w-0 items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"line-clamp-2 break-words text-sm font-medium leading-5 text-foreground sm:truncate\">\n {name}\n </p>\n {meta && <p className=\"caption mt-0.5 truncate text-muted-foreground\">{meta}</p>}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n {details && <div className=\"caption mt-2 text-pretty text-muted-foreground\">{details}</div>}\n </div>\n </div>\n );\n}\n\nMediaAssetCard.displayName = \"MediaAssetCard\";\n\nexport { MediaAssetCard };\nexport type { MediaAssetCardProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface MediaObjectProps {\n media: React.ReactNode;\n children: React.ReactNode;\n mediaPosition?: \"left\" | \"right\";\n align?: \"top\" | \"center\" | \"bottom\";\n gap?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst alignMap = {\n top: \"items-start\",\n center: \"items-center\",\n bottom: \"items-end\",\n};\n\nconst gapMap = {\n sm: \"gap-3\",\n md: \"gap-4\",\n lg: \"gap-6\",\n};\n\nfunction MediaObject({\n media,\n children,\n mediaPosition = \"left\",\n align = \"top\",\n gap = \"md\",\n className,\n}: MediaObjectProps) {\n return (\n <div\n className={cn(\n \"flex\",\n mediaPosition === \"right\" && \"flex-row-reverse\",\n alignMap[align],\n gapMap[gap],\n className,\n )}\n >\n <div className=\"shrink-0\">{media}</div>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n );\n}\n\nMediaObject.displayName = \"MediaObject\";\n\nexport { MediaObject };\n","\"use client\";\n\nimport {\n useRef,\n useEffect,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useDropdown } from \"./dropdown\";\nimport { cn } from \"../lib/utils\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { shapeMap } from \"../lib/shape-context\";\n\n// MenuItem is only used inside Dropdown, which opts out of the global pill\n// shape — see dropdown.tsx for the rationale.\nconst shape = shapeMap.rounded;\n\ninterface MenuItemProps extends HTMLAttributes<HTMLDivElement> {\n /** Optional leading icon. When omitted, the row renders text-only with no\n * reserved icon column. */\n icon?: IconComponent | ReactNode;\n label?: string;\n index?: number;\n checked?: boolean;\n onSelect?: () => void;\n trailing?: ReactNode;\n}\n\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n (\n { icon: Icon, label, index = 0, checked, onSelect, trailing, className, children, ...props },\n ref,\n ) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const hasMounted = useRef(false);\n const { registerItem, activeIndex, checkedIndex } = useDropdown();\n\n useEffect(() => {\n registerItem(index, internalRef.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n const isActive = activeIndex === index;\n const skipAnimation = !hasMounted.current;\n\n return (\n <div\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-proximity-index={index}\n tabIndex={index === (checkedIndex ?? 0) ? 0 : -1}\n role=\"menuitemradio\"\n aria-checked={!!checked}\n aria-label={label ?? (typeof children === \"string\" ? children : undefined)}\n onClick={onSelect}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onSelect?.();\n }\n }}\n className={cn(\n `relative z-10 flex items-center gap-2 ${shape.item} px-2 py-2 cursor-pointer outline-none`,\n className,\n )}\n {...props}\n >\n {Icon && typeof Icon === \"function\" && (\n <span className=\"inline-grid\">\n <span className=\"col-start-1 row-start-1 invisible\">\n <Icon size={16} strokeWidth={2} />\n </span>\n <Icon\n size={16}\n strokeWidth={isActive || checked ? 2 : 1.5}\n className={cn(\n \"col-start-1 row-start-1 transition-[color,stroke-width] duration-80\",\n isActive || checked ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n />\n </span>\n )}\n {Icon && isValidElement(Icon) && <span className=\"text-muted-foreground\">{Icon}</span>}\n <span className=\"inline-grid flex-1 text-[13px]\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label ?? children}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isActive || checked ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: checked ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label ?? children}\n </span>\n </span>\n {trailing && <span className=\"text-[12px] text-muted-foreground\">{trailing}</span>}\n <AnimatePresence>\n {checked && (\n <motion.svg\n key=\"check\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-foreground shrink-0\"\n initial={{ opacity: 1 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 1 }}\n >\n <motion.path\n d=\"M4 12L9 17L20 6\"\n initial={{ pathLength: skipAnimation ? 1 : 0 }}\n animate={{\n pathLength: 1,\n transition: { duration: 0.08, ease: \"easeOut\" },\n }}\n exit={{\n pathLength: 0,\n transition: { duration: 0.04, ease: \"easeIn\" },\n }}\n />\n </motion.svg>\n )}\n </AnimatePresence>\n </div>\n );\n },\n);\n\nMenuItem.displayName = \"MenuItem\";\n\nexport { MenuItem };\nexport default MenuItem;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menubar } from \"radix-ui\";\nimport { Check, ChevronRight, Circle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport {\n mobilePopperSheetMotionClassName,\n mobilePopperSheetPositionClassName,\n mobilePopperSheetStyle,\n mobilePopperSheetSurfaceClassName,\n} from \"../lib/mobile-popper-sheet\";\n\nconst MenubarRoot = React.forwardRef<\n React.ComponentRef<typeof Menubar.Root>,\n React.ComponentPropsWithoutRef<typeof Menubar.Root>\n>(({ className, ...props }, ref) => (\n <Menubar.Root\n ref={ref}\n className={cn(\n \"flex min-h-10 items-center gap-0.5 rounded-lg border border-border bg-card px-1\",\n className,\n )}\n {...props}\n />\n));\nMenubarRoot.displayName = \"Menubar\";\n\nconst MenubarMenu = Menubar.Menu;\n\nconst MenubarGroup = Menubar.Group;\n\nconst MenubarSub = Menubar.Sub;\n\nconst MenubarRadioGroup = Menubar.RadioGroup;\n\nconst MenubarTrigger = React.forwardRef<\n React.ComponentRef<typeof Menubar.Trigger>,\n React.ComponentPropsWithoutRef<typeof Menubar.Trigger>\n>(({ className, ...props }, ref) => (\n <Menubar.Trigger\n ref={ref}\n className={cn(\n \"flex min-h-8 cursor-default items-center rounded-md px-3 py-1 body font-medium text-muted-foreground select-none outline-none\",\n \"hover:bg-muted\",\n \"data-[state=open]:bg-muted data-[state=open]:text-foreground\",\n \"focus:bg-muted\",\n className,\n )}\n {...props}\n />\n));\nMenubarTrigger.displayName = \"MenubarTrigger\";\n\nconst MenubarContent = React.forwardRef<\n React.ComponentRef<typeof Menubar.Content>,\n React.ComponentPropsWithoutRef<typeof Menubar.Content>\n>(({ className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Menubar.Portal>\n <Menubar.Content\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] bg-card rounded-xl shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </Menubar.Portal>\n </>\n));\nMenubarContent.displayName = \"MenubarContent\";\n\nconst MenubarItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.Item>,\n React.ComponentPropsWithoutRef<typeof Menubar.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Menubar.Item\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nMenubarItem.displayName = \"MenubarItem\";\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof Menubar.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <Menubar.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <Menubar.ItemIndicator>\n <Check size={13} className=\"text-foreground\" />\n </Menubar.ItemIndicator>\n </span>\n {children}\n </Menubar.CheckboxItem>\n));\nMenubarCheckboxItem.displayName = \"MenubarCheckboxItem\";\n\nconst MenubarRadioItem = React.forwardRef<\n React.ComponentRef<typeof Menubar.RadioItem>,\n React.ComponentPropsWithoutRef<typeof Menubar.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <Menubar.RadioItem\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md py-2 pl-8 pr-2.5\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <Menubar.ItemIndicator>\n <Circle size={8} className=\"fill-foreground text-foreground\" />\n </Menubar.ItemIndicator>\n </span>\n {children}\n </Menubar.RadioItem>\n));\nMenubarRadioItem.displayName = \"MenubarRadioItem\";\n\nconst MenubarLabel = React.forwardRef<\n React.ComponentRef<typeof Menubar.Label>,\n React.ComponentPropsWithoutRef<typeof Menubar.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Menubar.Label\n ref={ref}\n className={cn(\"px-2.5 py-1 label text-muted-foreground\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nMenubarLabel.displayName = \"MenubarLabel\";\n\nconst MenubarSeparator = React.forwardRef<\n React.ComponentRef<typeof Menubar.Separator>,\n React.ComponentPropsWithoutRef<typeof Menubar.Separator>\n>(({ className, ...props }, ref) => (\n <Menubar.Separator ref={ref} className={cn(\"mx-1 my-1 h-px bg-muted\", className)} {...props} />\n));\nMenubarSeparator.displayName = \"MenubarSeparator\";\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ComponentRef<typeof Menubar.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof Menubar.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <Menubar.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2\",\n \"body text-muted-foreground outline-none transition-colors\",\n \"focus:bg-muted focus:text-foreground data-[state=open]:bg-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight size={14} className=\"ml-auto text-muted-foreground\" />\n </Menubar.SubTrigger>\n));\nMenubarSubTrigger.displayName = \"MenubarSubTrigger\";\n\nconst MenubarSubContent = React.forwardRef<\n React.ComponentRef<typeof Menubar.SubContent>,\n React.ComponentPropsWithoutRef<typeof Menubar.SubContent>\n>(({ className, ...props }, ref) => (\n <>\n <style>{mobilePopperSheetStyle}</style>\n <Menubar.SubContent\n ref={ref}\n data-hilum-mobile-sheet=\"true\"\n className={cn(\n \"z-50 min-w-[8rem] bg-card rounded-xl border border-border shadow-natural p-1\",\n mobilePopperSheetPositionClassName,\n mobilePopperSheetSurfaceClassName,\n \"max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5\",\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 mobilePopperSheetMotionClassName,\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n className,\n )}\n {...props}\n />\n </>\n));\nMenubarSubContent.displayName = \"MenubarSubContent\";\n\nfunction MenubarShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn(\"ml-auto caption text-muted-foreground\", className)} {...props} />;\n}\nMenubarShortcut.displayName = \"MenubarShortcut\";\n\nexport {\n MenubarRoot as Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarLabel,\n MenubarSeparator,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n MenubarShortcut,\n MenubarGroup,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Dialog } from \"radix-ui\";\nimport { X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { focusRingClasses, motionClasses, pressClasses } from \"../lib/interaction\";\n\nconst SheetRoot = Dialog.Root;\nconst SheetTrigger = Dialog.Trigger;\nconst SheetClose = Dialog.Close;\n\nconst SheetOverlay = React.forwardRef<\n React.ComponentRef<typeof Dialog.Overlay>,\n React.ComponentPropsWithoutRef<typeof Dialog.Overlay>\n>(({ className, ...props }, ref) => (\n <Dialog.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/30 backdrop-blur-sm\",\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]:duration-100 data-[state=open]:duration-150\",\n className,\n )}\n {...props}\n />\n));\nSheetOverlay.displayName = \"SheetOverlay\";\n\nconst sheetContentVariants = cva(\n [\n \"fixed z-50 border-border bg-card p-6 shadow-elevated\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"transition-transform ease-in-out duration-300\",\n ],\n {\n variants: {\n side: {\n right:\n \"right-0 top-0 h-full w-full max-w-sm border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n left: \"left-0 top-0 h-full w-full max-w-sm border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n top: \"top-0 inset-x-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"bottom-0 inset-x-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n);\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof Dialog.Content>,\n VariantProps<typeof sheetContentVariants> {}\n\nconst SheetContent = React.forwardRef<React.ComponentRef<typeof Dialog.Content>, SheetContentProps>(\n ({ className, children, side = \"right\", ...props }, ref) => (\n <Dialog.Portal>\n <SheetOverlay />\n <Dialog.Content\n ref={ref}\n className={cn(sheetContentVariants({ side }), className)}\n {...props}\n >\n {children}\n <Dialog.Close\n className={cn(\n \"absolute right-3 top-3 flex size-9 items-center justify-center rounded-md text-muted-foreground opacity-70 hover:bg-muted hover:text-foreground hover:opacity-100\",\n motionClasses,\n pressClasses,\n focusRingClasses,\n )}\n >\n <X size={16} />\n <span className=\"sr-only\">Close</span>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Portal>\n ),\n);\nSheetContent.displayName = \"SheetContent\";\n\nfunction SheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex flex-col gap-1.5 mb-4\", className)} {...props} />;\n}\nSheetHeader.displayName = \"SheetHeader\";\n\nfunction SheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex items-center justify-end gap-2 mt-6\", className)} {...props} />;\n}\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ComponentRef<typeof Dialog.Title>,\n React.ComponentPropsWithoutRef<typeof Dialog.Title>\n>(({ className, ...props }, ref) => (\n <Dialog.Title\n ref={ref}\n className={cn(\"body-lg font-semibold text-balance text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = \"SheetTitle\";\n\nconst SheetDescription = React.forwardRef<\n React.ComponentRef<typeof Dialog.Description>,\n React.ComponentPropsWithoutRef<typeof Dialog.Description>\n>(({ className, ...props }, ref) => (\n <Dialog.Description\n ref={ref}\n className={cn(\"body text-pretty text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = \"SheetDescription\";\n\nexport {\n SheetRoot as Sheet,\n SheetTrigger,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetClose,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menu } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"./sheet\";\n\ninterface MobileDrawerProps extends React.ComponentProps<typeof Sheet> {\n title: React.ReactNode;\n description?: React.ReactNode;\n triggerLabel?: string;\n children: React.ReactNode;\n}\n\nfunction MobileDrawer({\n title,\n description,\n triggerLabel = \"Open menu\",\n children,\n ...props\n}: MobileDrawerProps) {\n return (\n <Sheet {...props}>\n <SheetTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" aria-label={triggerLabel}>\n <Menu />\n </Button>\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[min(22rem,calc(100vw-2rem))] p-4\">\n <SheetHeader>\n <SheetTitle>{title}</SheetTitle>\n {description && <SheetDescription>{description}</SheetDescription>}\n </SheetHeader>\n {children}\n </SheetContent>\n </Sheet>\n );\n}\n\nMobileDrawer.displayName = \"MobileDrawer\";\n\nexport { MobileDrawer };\nexport type { MobileDrawerProps };\n","import * as React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst NativeSelect = React.forwardRef<\n HTMLSelectElement,\n React.SelectHTMLAttributes<HTMLSelectElement>\n>(({ className, children, ...props }, ref) => (\n <div className=\"relative\">\n <select\n ref={ref}\n className={cn(\n \"peer h-10 w-full appearance-none rounded-lg border border-border bg-card pl-3 pr-8\",\n \"body text-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring/30 focus:border-border\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/20\",\n className,\n )}\n {...props}\n >\n {children}\n </select>\n <ChevronDown\n size={14}\n className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground peer-disabled:opacity-50\"\n />\n </div>\n));\nNativeSelect.displayName = \"NativeSelect\";\n\nconst NativeSelectOption = React.forwardRef<\n HTMLOptionElement,\n React.OptionHTMLAttributes<HTMLOptionElement>\n>((props, ref) => <option ref={ref} {...props} />);\nNativeSelectOption.displayName = \"NativeSelectOption\";\n\nconst NativeSelectOptGroup = React.forwardRef<\n HTMLOptGroupElement,\n React.OptgroupHTMLAttributes<HTMLOptGroupElement>\n>((props, ref) => <optgroup ref={ref} {...props} />);\nNativeSelectOptGroup.displayName = \"NativeSelectOptGroup\";\n\nexport { NativeSelect, NativeSelectOption, NativeSelectOptGroup };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n focusRingClasses,\n iconStrokeClasses,\n pressClasses,\n springMotionClasses,\n} from \"../lib/interaction\";\n\ninterface NavItemProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n icon?: React.ReactNode;\n active?: boolean;\n trailing?: React.ReactNode;\n}\n\nconst NavItem = React.forwardRef<HTMLAnchorElement, NavItemProps>(\n ({ icon, active, trailing, className, children, ...props }, ref) => (\n <a\n ref={ref}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"group flex min-h-10 items-center gap-2 rounded-xl px-3 body font-medium\",\n active\n ? \"bg-brand-secondary/35 text-foreground\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n springMotionClasses,\n pressClasses,\n focusRingClasses,\n iconStrokeClasses,\n className,\n )}\n {...props}\n >\n {icon && <span className=\"flex size-4 shrink-0 items-center justify-center\">{icon}</span>}\n <span className=\"min-w-0 flex-1 truncate\">{children}</span>\n {trailing && <span className=\"shrink-0 text-muted-foreground\">{trailing}</span>}\n </a>\n ),\n);\nNavItem.displayName = \"NavItem\";\n\nexport { NavItem };\nexport type { NavItemProps };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useProximityIndex } from \"../lib/interaction\";\nimport { NavItem } from \"./nav-item\";\n\nexport interface NavMenuItem {\n href: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n active?: boolean;\n trailing?: React.ReactNode;\n}\n\ninterface NavMenuProps extends React.HTMLAttributes<HTMLElement> {\n items: NavMenuItem[];\n}\n\nfunction NavMenu({ items, className, ...props }: NavMenuProps) {\n const proximity = useProximityIndex<HTMLElement>(\"y\");\n\n return (\n <nav\n ref={proximity.containerRef}\n className={cn(\"grid gap-1\", className)}\n {...proximity.handlers}\n {...props}\n >\n {items.map((item, index) => (\n <NavItem\n key={item.href}\n ref={(node) => proximity.registerItem(index, node)}\n href={item.href}\n icon={item.icon}\n active={item.active || proximity.activeIndex === index}\n trailing={item.trailing}\n >\n {item.label}\n </NavItem>\n ))}\n </nav>\n );\n}\n\nNavMenu.displayName = \"NavMenu\";\n\nexport { NavMenu };\nexport type { NavMenuProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { NavigationMenu } from \"radix-ui\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nconst NavigationMenuRoot = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenu.Root\n ref={ref}\n className={cn(\"relative z-10 flex max-w-max flex-1 items-center justify-center\", className)}\n {...props}\n >\n {children}\n </NavigationMenu.Root>\n));\nNavigationMenuRoot.displayName = \"NavigationMenu\";\n\nconst NavigationMenuList = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.List\n ref={ref}\n className={cn(\"group flex flex-1 list-none items-center justify-center gap-1\", className)}\n {...props}\n />\n));\nNavigationMenuList.displayName = \"NavigationMenuList\";\n\nconst NavigationMenuItem = NavigationMenu.Item;\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenu.Trigger\n ref={ref}\n className={cn(\n \"group inline-flex h-10 w-max items-center justify-center gap-1 rounded-md px-3 py-2\",\n \"body font-medium text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[active]:bg-muted data-[state=open]:bg-muted\",\n \"outline-none transition-colors\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n size={12}\n className=\"transition-transform duration-200 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenu.Trigger>\n));\nNavigationMenuTrigger.displayName = \"NavigationMenuTrigger\";\n\nconst NavigationMenuContent = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Content\n ref={ref}\n className={cn(\n \"left-0 top-0 w-full\",\n \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out\",\n \"data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out\",\n \"data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52\",\n \"data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52\",\n \"md:absolute md:w-auto\",\n className,\n )}\n {...props}\n />\n));\nNavigationMenuContent.displayName = \"NavigationMenuContent\";\n\nconst NavigationMenuLink = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Link>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Link>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Link\n ref={ref}\n className={cn(\n \"block min-h-10 select-none rounded-md px-3 py-2 body text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"outline-none transition-colors\",\n className,\n )}\n {...props}\n />\n));\nNavigationMenuLink.displayName = \"NavigationMenuLink\";\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Viewport>\n>(({ className, ...props }, ref) => (\n <div className=\"absolute left-0 top-full flex justify-center\">\n <NavigationMenu.Viewport\n ref={ref}\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-xl border border-border bg-card shadow-elevated\",\n \"md:w-[var(--radix-navigation-menu-viewport-width)]\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90\",\n className,\n )}\n {...props}\n />\n </div>\n));\nNavigationMenuViewport.displayName = \"NavigationMenuViewport\";\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ComponentRef<typeof NavigationMenu.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenu.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenu.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n \"data-[state=visible]:animate-in data-[state=hidden]:animate-out\",\n \"data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className,\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-muted shadow-elevated\" />\n </NavigationMenu.Indicator>\n));\nNavigationMenuIndicator.displayName = \"NavigationMenuIndicator\";\n\nfunction navigationMenuTriggerStyle() {\n return cn(\n \"group inline-flex h-10 w-max items-center justify-center gap-1 rounded-md px-3 py-2\",\n \"body font-medium text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[active]:bg-muted data-[state=open]:bg-muted\",\n \"outline-none transition-colors\",\n );\n}\n\nexport {\n NavigationMenuRoot as NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuTrigger,\n NavigationMenuContent,\n NavigationMenuLink,\n NavigationMenuViewport,\n NavigationMenuIndicator,\n navigationMenuTriggerStyle,\n};\n","import * as React from \"react\";\nimport { X, CheckCircle, AlertCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface NotificationAction {\n label: string;\n onClick?: () => void;\n variant?: \"default\" | \"ghost\";\n}\n\ninterface NotificationProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n variant?: \"default\" | \"success\" | \"error\" | \"warning\" | \"info\";\n actions?: NotificationAction[];\n onClose?: () => void;\n className?: string;\n}\n\nconst variantConfig = {\n default: { icon: null, iconClass: \"text-muted-foreground\" },\n success: {\n icon: CheckCircle,\n iconClass: \"bg-brand-secondary/25 text-muted-foreground rounded-full p-1\",\n },\n error: { icon: AlertCircle, iconClass: \"text-destructive\" },\n warning: {\n icon: AlertTriangle,\n iconClass: \"bg-brand-secondary/80 text-muted-foreground rounded-full p-1\",\n },\n info: { icon: Info, iconClass: \"text-muted-foreground\" },\n};\n\nfunction Notification({\n title,\n description,\n icon,\n variant = \"default\",\n actions,\n onClose,\n className,\n}: NotificationProps) {\n const config = variantConfig[variant];\n const DefaultIcon = config.icon;\n\n const resolvedIcon = icon ?? (DefaultIcon ? <DefaultIcon size={20} /> : null);\n\n return (\n <div\n className={cn(\n \"pointer-events-auto w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-elevated\",\n className,\n )}\n >\n <div className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n {resolvedIcon && (\n <div className={cn(\"shrink-0 mt-0.5\", config.iconClass)}>{resolvedIcon}</div>\n )}\n\n {/* Body */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"body font-semibold text-foreground text-balance\">{title}</p>\n {description && (\n <p className=\"mt-0.5 body text-muted-foreground text-pretty\">{description}</p>\n )}\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <div className=\"mt-3 flex gap-3\">\n {actions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={action.onClick}\n className={cn(\n \"min-h-10 body font-semibold transition-colors\",\n action.variant === \"ghost\"\n ? \"text-muted-foreground hover:text-muted-foreground\"\n : \"text-foreground hover:text-muted-foreground\",\n )}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Close */}\n {onClose && (\n <div className=\"shrink-0\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex size-9 items-center justify-center rounded-md text-muted-foreground transition-[color,scale] hover:text-muted-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30\"\n >\n <span className=\"sr-only\">Close</span>\n <X size={16} />\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nNotification.displayName = \"Notification\";\n\nexport { Notification };\n","import * as React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Badge } from \"./badge\";\n\ninterface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ninterface PageHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\";\n primary?: boolean;\n}\n\ninterface PageHeadingMeta {\n icon?: React.ReactNode;\n text: string;\n}\n\ninterface PageHeadingProps {\n title: string;\n description?: string;\n breadcrumbs?: BreadcrumbItem[];\n actions?: PageHeadingAction[];\n meta?: PageHeadingMeta[];\n badge?: string | { label: string; variant?: \"default\" | \"secondary\" | \"outline\" | \"destructive\" };\n className?: string;\n}\n\nfunction PageHeading({\n title,\n description,\n breadcrumbs,\n actions,\n meta,\n badge,\n className,\n}: PageHeadingProps) {\n return (\n <div className={cn(\"border-b border-border pb-6\", className)}>\n {/* Breadcrumbs */}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <nav className=\"mb-3 flex items-center gap-1.5\" aria-label=\"Breadcrumb\">\n {breadcrumbs.map((crumb, i) => (\n <React.Fragment key={i}>\n {i > 0 && <ChevronRight size={12} className=\"text-muted-foreground shrink-0\" />}\n {crumb.href ? (\n <a\n href={crumb.href}\n className=\"caption text-muted-foreground hover:text-muted-foreground transition-colors\"\n >\n {crumb.label}\n </a>\n ) : (\n <span className=\"caption font-semibold text-muted-foreground\">{crumb.label}</span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n\n {/* Title row */}\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"display text-balance text-foreground truncate\">{title}</h1>\n {badge &&\n (typeof badge === \"string\" ? (\n <Badge variant=\"secondary\">{badge}</Badge>\n ) : (\n <Badge variant={badge.variant ?? \"secondary\"}>{badge.label}</Badge>\n ))}\n </div>\n {description && (\n <p className=\"mt-1.5 body max-w-2xl text-pretty text-muted-foreground\">{description}</p>\n )}\n\n {/* Meta */}\n {meta && meta.length > 0 && (\n <div className=\"mt-3 flex flex-wrap items-center gap-4\">\n {meta.map((m, i) => (\n <div key={i} className=\"flex items-center gap-1.5 caption text-muted-foreground\">\n {m.icon && <span className=\"text-muted-foreground\">{m.icon}</span>}\n <span>{m.text}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions.map((action, i) =>\n action.href ? (\n <Button\n key={i}\n size=\"sm\"\n variant={action.primary ? \"default\" : (action.variant ?? \"outline\")}\n asChild\n >\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.primary ? \"default\" : (action.variant ?? \"outline\")}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport { PageHeading };\n","import * as React from \"react\";\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button\";\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n);\nPagination.displayName = \"Pagination\";\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn(\"flex flex-row items-center gap-1\", className)} {...props} />\n ),\n);\nPaginationContent.displayName = \"PaginationContent\";\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => <li ref={ref} className={cn(\"\", className)} {...props} />,\n);\nPaginationItem.displayName = \"PaginationItem\";\n\ntype PaginationLinkProps = React.ComponentProps<\"a\"> & { isActive?: boolean };\n\nconst PaginationLink = ({ className, isActive, ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({ variant: isActive ? \"default\" : \"ghost\", size: \"icon\" }),\n \"size-9 rounded-md body\",\n className,\n )}\n {...props}\n />\n);\nPaginationLink.displayName = \"PaginationLink\";\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(\"gap-1 px-3 w-auto\", className)}\n {...props}\n >\n <ChevronLeft size={14} />\n <span className=\"body\">Prev</span>\n </PaginationLink>\n);\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(\"gap-1 px-3 w-auto\", className)}\n {...props}\n >\n <span className=\"body\">Next</span>\n <ChevronRight size={14} />\n </PaginationLink>\n);\nPaginationNext.displayName = \"PaginationNext\";\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex size-9 items-center justify-center text-muted-foreground\", className)}\n {...props}\n >\n <MoreHorizontal size={14} />\n </span>\n);\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n};\n","import * as React from \"react\";\nimport { Progress } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst ProgressRoot = React.forwardRef<\n React.ComponentRef<typeof Progress.Root>,\n React.ComponentPropsWithoutRef<typeof Progress.Root>\n>(({ className, value, ...props }, ref) => (\n <Progress.Root\n ref={ref}\n className={cn(\"relative h-2 w-full overflow-hidden rounded-full bg-muted\", className)}\n value={value}\n {...props}\n >\n <Progress.Indicator\n className=\"h-full w-full flex-1 bg-brand-primary transition-transform\"\n style={{ transform: `translateX(-${100 - (value ?? 0)}%)` }}\n />\n </Progress.Root>\n));\nProgressRoot.displayName = \"Progress\";\n\nexport { ProgressRoot as Progress };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface PropertyRowProps extends React.ComponentProps<\"div\"> {\n /** Optional label rendered on the left. Pass a string or any React node (icon + label, etc.). */\n label?: React.ReactNode;\n /** Label layout. Default: \"stacked\". */\n layout?: \"stacked\" | \"inline\";\n /** Width of the label column when layout=\"inline\". Default: 96px. */\n labelWidth?: number | string;\n /** Aligns label vertically with controls when layout=\"inline\". Default: \"center\". */\n labelAlign?: \"start\" | \"center\";\n}\n\n/**\n * Property row used inside designer inspector panels:\n * label above controls by default, with an inline option for dense rows.\n * Different from <Field>, which is a vertical form field with hint/error.\n *\n * <PropertyRow label=\"Opacity\">\n * <Slider />\n * <InputNumber />\n * </PropertyRow>\n */\nfunction PropertyRow({\n label,\n layout = \"stacked\",\n labelWidth = 96,\n labelAlign = \"center\",\n className,\n children,\n ...rest\n}: PropertyRowProps) {\n const inline = layout === \"inline\";\n\n return (\n <div\n className={cn(\n \"flex w-full min-w-0 py-1\",\n inline\n ? cn(\"gap-3\", labelAlign === \"center\" ? \"items-center\" : \"items-start\")\n : \"flex-col items-stretch gap-1.5\",\n className,\n )}\n {...rest}\n >\n {label !== undefined && (\n <div\n className={cn(\n \"caption select-none text-muted-foreground\",\n inline ? \"shrink-0\" : \"w-full\",\n )}\n style={\n inline\n ? { width: typeof labelWidth === \"number\" ? `${labelWidth}px` : labelWidth }\n : undefined\n }\n >\n {label}\n </div>\n )}\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">{children}</div>\n </div>\n );\n}\n\nPropertyRow.displayName = \"PropertyRow\";\n\nexport { PropertyRow };\nexport type { PropertyRowProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface RadioCardOption {\n value: string;\n label: string;\n description?: string;\n meta?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface RadioCardsProps {\n options: RadioCardOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nfunction RadioCards({ options, value, onValueChange, columns = 3, className }: RadioCardsProps) {\n const colMap = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-3\",\n 4: \"grid-cols-2 sm:grid-cols-4\",\n };\n\n return (\n <div className={cn(\"grid gap-3\", colMap[columns], className)}>\n {options.map((option) => {\n const isSelected = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n disabled={option.disabled}\n onClick={() => !option.disabled && onValueChange?.(option.value)}\n className={cn(\n \"relative flex cursor-pointer flex-col gap-1 rounded-xl border p-4 text-left transition-[background-color,border-color,box-shadow,opacity,scale]\",\n \"active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n isSelected\n ? \"border-brand-primary bg-card shadow-natural\"\n : \"border-border bg-card hover:border-border\",\n )}\n >\n {/* Selected ring overlay */}\n {isSelected && (\n <span\n className=\"pointer-events-none absolute inset-0 rounded-xl ring-2 ring-brand-primary\"\n aria-hidden=\"true\"\n />\n )}\n\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n {option.icon && <div className=\"mb-2 text-muted-foreground\">{option.icon}</div>}\n <p\n className={cn(\n \"body font-semibold text-pretty\",\n isSelected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.label}\n </p>\n {option.description && (\n <p className=\"mt-0.5 caption text-pretty text-muted-foreground\">\n {option.description}\n </p>\n )}\n </div>\n <div\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors\",\n isSelected ? \"border-brand-primary bg-brand-primary\" : \"border-border bg-card\",\n )}\n >\n {isSelected && <Check size={10} className=\"text-background\" strokeWidth={3} />}\n </div>\n </div>\n\n {option.meta && (\n <p\n className={cn(\n \"caption font-semibold mt-2\",\n isSelected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.meta}\n </p>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n\nRadioCards.displayName = \"RadioCards\";\n\nexport { RadioCards };\n","\"use client\";\n\nimport {\n Children,\n useRef,\n useState,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n isValidElement,\n cloneElement,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\nimport { useShape } from \"../lib/shape-context\";\n\ninterface RadioGroupContextValue {\n registerItem: (index: number, element: HTMLElement | null) => void;\n activeIndex: number | null;\n selectedIndex: number | null;\n selectedValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nfunction useRadioGroupContext() {\n const ctx = useContext(RadioGroupContext);\n if (!ctx) throw new Error(\"useRadioGroup must be used within a RadioGroup\");\n return ctx;\n}\n\ninterface RadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n children: ReactNode;\n selectedIndex?: number;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n ({ children, selectedIndex, value, defaultValue, onValueChange, className, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const currentValue = value ?? uncontrolledValue;\n const childValues = Children.toArray(children)\n .filter(isValidElement)\n .map((child) => (child.props as { value?: string }).value);\n const {\n activeIndex,\n setActiveIndex,\n itemRects,\n sessionRef,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef);\n\n useEffect(() => {\n measureItems();\n }, [measureItems, children]);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const resolvedSelectedIndex =\n currentValue !== undefined\n ? childValues.findIndex((childValue) => childValue === currentValue)\n : (selectedIndex ?? -1);\n\n const activeRect = activeIndex !== null ? itemRects[activeIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n const selectedRect = resolvedSelectedIndex >= 0 ? itemRects[resolvedSelectedIndex] : null;\n const isHoveringOther = activeIndex !== null && activeIndex !== resolvedSelectedIndex;\n const shape = useShape();\n\n const indexedChildren = Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n return cloneElement(child, { index } as Record<string, unknown>);\n });\n\n const handleValueChange = (nextValue: string) => {\n if (value === undefined) setUncontrolledValue(nextValue);\n onValueChange?.(nextValue);\n };\n\n const content = (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseEnter={handlers.onMouseEnter}\n onMouseMove={handlers.onMouseMove}\n onMouseLeave={handlers.onMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setActiveIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n setActiveIndex(null);\n }}\n onKeyDown={(e) => {\n const items = Array.from(\n containerRef.current?.querySelectorAll('[role=\"radio\"]') ?? [],\n ) as HTMLElement[];\n const currentIdx = items.indexOf(e.target as HTMLElement);\n if (currentIdx === -1) return;\n\n if ([\"ArrowDown\", \"ArrowUp\", \"ArrowRight\", \"ArrowLeft\"].includes(e.key)) {\n e.preventDefault();\n const next = [\"ArrowDown\", \"ArrowRight\"].includes(e.key)\n ? (currentIdx + 1) % items.length\n : (currentIdx - 1 + items.length) % items.length;\n items[next].focus();\n items[next].click();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n items[0]?.focus();\n items[0]?.click();\n } else if (e.key === \"End\") {\n e.preventDefault();\n items[items.length - 1]?.focus();\n items[items.length - 1]?.click();\n }\n }}\n role=\"radiogroup\"\n className={cn(\"relative flex flex-col w-72 max-w-full select-none\", className)}\n {...props}\n >\n {/* Selected background */}\n {selectedRect && (\n <motion.div\n className={`absolute ${shape.bg} bg-active pointer-events-none`}\n initial={false}\n animate={{\n top: selectedRect.top,\n left: selectedRect.left,\n width: selectedRect.width,\n height: selectedRect.height,\n opacity: isHoveringOther ? 0.8 : 1,\n }}\n transition={{\n ...spring.moderate,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n\n {/* Hover background */}\n <AnimatePresence>\n {activeRect && (\n <motion.div\n key={sessionRef.current}\n className={`absolute ${shape.bg} bg-hover pointer-events-none`}\n initial={{\n opacity: 0,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n animate={{\n opacity: 1,\n top: activeRect.top,\n left: activeRect.left,\n width: activeRect.width,\n height: activeRect.height,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={`absolute ${shape.focusRing} pointer-events-none z-20 border border-[#6B97FF]`}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {indexedChildren}\n </div>\n );\n\n // If Radix value/onValueChange provided, wrap with Radix RadioGroup\n if (currentValue !== undefined) {\n return (\n <RadioGroupContext.Provider\n value={{\n registerItem,\n activeIndex,\n selectedIndex: resolvedSelectedIndex >= 0 ? resolvedSelectedIndex : null,\n selectedValue: currentValue,\n onValueChange: handleValueChange,\n }}\n >\n <RadioGroupPrimitive.Root value={currentValue} onValueChange={handleValueChange} asChild>\n {content}\n </RadioGroupPrimitive.Root>\n </RadioGroupContext.Provider>\n );\n }\n\n return (\n <RadioGroupContext.Provider\n value={{\n registerItem,\n activeIndex,\n selectedIndex: selectedIndex ?? null,\n }}\n >\n {content}\n </RadioGroupContext.Provider>\n );\n },\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n\ninterface RadioItemProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n index?: number;\n selected?: boolean;\n onSelect?: () => void;\n value?: string;\n}\n\nconst RadioItem = forwardRef<HTMLDivElement, RadioItemProps>(\n ({ label, index = 0, selected, onSelect, value, className, children, ...props }, ref) => {\n const internalRef = useRef<HTMLDivElement>(null);\n const hasMounted = useRef(false);\n const { registerItem, activeIndex, selectedIndex, selectedValue, onValueChange } =\n useRadioGroupContext();\n\n useEffect(() => {\n registerItem(index, internalRef.current);\n return () => registerItem(index, null);\n }, [index, registerItem]);\n\n useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n const isActive = activeIndex === index;\n const skipAnimation = !hasMounted.current;\n const shape = useShape();\n const isSelected =\n value !== undefined && selectedValue !== undefined\n ? selectedValue === value\n : (selected ?? selectedIndex === index);\n\n const handleSelect = () => {\n if (value !== undefined) {\n onValueChange?.(value);\n }\n onSelect?.();\n };\n\n return (\n <div\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n data-proximity-index={index}\n tabIndex={isSelected ? 0 : -1}\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={label ?? (typeof children === \"string\" ? children : value)}\n onClick={handleSelect}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n handleSelect();\n }\n }}\n className={cn(\n `relative z-10 flex items-center gap-2.5 ${shape.item} px-3 py-1.5 cursor-pointer outline-none`,\n className,\n )}\n {...props}\n >\n {/* Radio circle */}\n <div className=\"relative w-[15px] h-[15px] shrink-0\">\n {/* Border */}\n <div\n className={cn(\n \"absolute inset-0 rounded-full border-solid transition-all duration-80\",\n isSelected\n ? \"border-[1.5px] border-transparent\"\n : isActive\n ? \"border-[1.5px] border-neutral-400 dark:border-neutral-500\"\n : \"border-[1.5px] border-border\",\n )}\n />\n {/* Dot */}\n <AnimatePresence>\n {isSelected && (\n <motion.div\n className=\"absolute inset-0 flex items-center justify-center\"\n initial={{\n opacity: skipAnimation ? 1 : 0,\n scale: skipAnimation ? 1 : 0.3,\n }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.3, transition: { duration: 0.04 } }}\n transition={spring.fast}\n >\n <div className=\"w-[8px] h-[8px] rounded-full bg-foreground\" />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Label */}\n <span className=\"inline-grid text-[13px]\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label ?? children ?? value}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isSelected || isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: isSelected ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label ?? children ?? value}\n </span>\n </span>\n\n {/* Hidden Radix radio input for accessibility */}\n {value !== undefined && (\n <RadioGroupPrimitive.Item value={value} className=\"sr-only\" tabIndex={-1} aria-hidden />\n )}\n </div>\n );\n },\n);\n\nRadioItem.displayName = \"RadioItem\";\n\nconst RadioGroupItem = RadioItem;\n\nexport { RadioGroup, RadioItem, RadioGroupItem };\nexport default RadioGroup;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Group, Panel, Separator } from \"react-resizable-panels\";\nimport type { GroupProps, SeparatorProps } from \"react-resizable-panels\";\nimport { GripVertical } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\n// react-resizable-panels v4 uses `orientation` and `elementRef` instead of\n// the older `direction` prop + React.forwardRef pattern.\n\ntype ResizablePanelGroupProps = Omit<GroupProps, \"orientation\"> & {\n /** Alias for `orientation` — matches the common shadcn/ui API. */\n direction?: \"horizontal\" | \"vertical\";\n orientation?: \"horizontal\" | \"vertical\";\n};\n\nfunction ResizablePanelGroup({\n className,\n direction,\n orientation,\n ...props\n}: ResizablePanelGroupProps) {\n const resolvedOrientation = orientation ?? direction ?? \"horizontal\";\n return (\n <Group\n orientation={resolvedOrientation}\n className={cn(\n \"flex h-full w-full\",\n resolvedOrientation === \"vertical\" && \"flex-col\",\n className,\n )}\n {...props}\n />\n );\n}\nResizablePanelGroup.displayName = \"ResizablePanelGroup\";\n\nconst ResizablePanel = Panel;\n\ntype ResizableHandleProps = SeparatorProps & {\n withHandle?: boolean;\n};\n\nfunction ResizableHandle({ className, withHandle = true, ...props }: ResizableHandleProps) {\n return (\n <Separator\n className={cn(\n \"relative flex shrink-0 items-center justify-center bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-brand-primary/50\",\n // Horizontal (default): vertical bar\n \"[&:not([aria-orientation=vertical])]:h-full [&:not([aria-orientation=vertical])]:w-px\",\n // Vertical: horizontal bar\n \"[aria-orientation=vertical]:h-px [aria-orientation=vertical]:w-full\",\n // Wider hit target via pseudo-element\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2\",\n \"[aria-orientation=vertical]:after:left-0 [aria-orientation=vertical]:after:h-1 [aria-orientation=vertical]:after:w-full [aria-orientation=vertical]:after:translate-x-0 [aria-orientation=vertical]:after:-translate-y-1/2\",\n // Active drag state\n \"active:bg-brand-primary/30\",\n className,\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-5 w-3 items-center justify-center rounded-sm border border-border bg-card shadow-natural\">\n <GripVertical size={10} className=\"text-muted-foreground\" />\n </div>\n )}\n </Separator>\n );\n}\nResizableHandle.displayName = \"ResizableHandle\";\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Separator as SeparatorPrimitive } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-muted\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n\nexport { Separator };\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n AlignLeft,\n Bold,\n FileText,\n Heading1,\n Heading2,\n Heading3,\n Image,\n Italic,\n Link,\n List,\n ListOrdered,\n Minus,\n Strikethrough,\n Underline,\n XCircle,\n} from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport { cn } from \"../lib/utils\";\n\ntype RichTextImageUrlHandler = () => string | null | undefined | Promise<string | null | undefined>;\n\ninterface RichTextEditorProps {\n value: string;\n onChange: (html: string) => void;\n placeholder?: string;\n minHeight?: string | number;\n id?: string;\n \"aria-label\"?: string;\n className?: string;\n editorClassName?: string;\n toolbarClassName?: string;\n onRequestImageUrl?: RichTextImageUrlHandler;\n}\n\ninterface ToolbarButtonConfig {\n icon: React.ComponentType<{ className?: string }>;\n command: string;\n title: string;\n value?: string;\n}\n\nfunction wrapSelectionInline(tag: string, attrs?: Record<string, string>) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n const wrapper = document.createElement(tag);\n\n Object.entries(attrs ?? {}).forEach(([key, value]) => {\n wrapper.setAttribute(key, value);\n });\n\n wrapper.appendChild(range.extractContents());\n range.insertNode(wrapper);\n\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(wrapper);\n selection.addRange(nextRange);\n}\n\nfunction formatBlock(tag: string) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n let block = range.startContainer as HTMLElement;\n\n if (block.nodeType === Node.TEXT_NODE) block = block.parentElement as HTMLElement;\n while (block && block.isContentEditable !== true) {\n const parent = block.parentElement;\n if (!parent || parent.getAttribute(\"contenteditable\") === \"true\") break;\n block = parent;\n }\n\n const nextBlock = document.createElement(tag);\n if (block && block.getAttribute(\"contenteditable\") !== \"true\") {\n nextBlock.innerHTML = block.innerHTML;\n block.replaceWith(nextBlock);\n } else {\n nextBlock.appendChild(range.extractContents());\n range.insertNode(nextBlock);\n }\n\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(nextBlock);\n selection.addRange(nextRange);\n}\n\nfunction insertList(ordered: boolean) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n const fragment = range.extractContents();\n const list = document.createElement(ordered ? \"ol\" : \"ul\");\n const children = Array.from(fragment.childNodes);\n\n if (children.length === 0) {\n const item = document.createElement(\"li\");\n item.innerHTML = \"\\u200B\";\n list.appendChild(item);\n } else {\n children.forEach((child) => {\n const item = document.createElement(\"li\");\n item.appendChild(child);\n list.appendChild(item);\n });\n }\n\n range.insertNode(list);\n selection.removeAllRanges();\n const nextRange = document.createRange();\n nextRange.selectNodeContents(list);\n selection.addRange(nextRange);\n}\n\nfunction insertElement(element: HTMLElement) {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0) return;\n\n const range = selection.getRangeAt(0);\n range.deleteContents();\n range.insertNode(element);\n\n const nextRange = document.createRange();\n nextRange.setStartAfter(element);\n nextRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(nextRange);\n}\n\nfunction removeFormat() {\n const selection = window.getSelection();\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) return;\n\n const range = selection.getRangeAt(0);\n const fragment = range.extractContents();\n const cleaned = document.createDocumentFragment();\n\n Array.from(fragment.childNodes).forEach((child) => {\n cleaned.appendChild(document.createTextNode(child.textContent ?? \"\"));\n });\n\n range.insertNode(cleaned);\n}\n\nfunction RichTextEditor({\n value,\n onChange,\n placeholder = \"Start writing...\",\n minHeight = \"200px\",\n id,\n \"aria-label\": ariaLabel,\n className,\n editorClassName,\n toolbarClassName,\n onRequestImageUrl,\n}: RichTextEditorProps) {\n const editorRef = React.useRef<HTMLDivElement>(null);\n const savedRangeRef = React.useRef<Range | null>(null);\n const [showLinkInput, setShowLinkInput] = React.useState(false);\n const [linkUrl, setLinkUrl] = React.useState(\"\");\n\n React.useEffect(() => {\n const editor = editorRef.current;\n if (!editor || document.activeElement === editor || editor.innerHTML === value) return;\n editor.innerHTML = value;\n }, [value]);\n\n const emitChange = React.useCallback(() => {\n if (editorRef.current) onChange(editorRef.current.innerHTML);\n }, [onChange]);\n\n const saveSelection = React.useCallback(() => {\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n savedRangeRef.current = selection.getRangeAt(0).cloneRange();\n }\n }, []);\n\n const restoreSelection = React.useCallback(() => {\n const range = savedRangeRef.current;\n const selection = window.getSelection();\n if (!range || !selection) return;\n selection.removeAllRanges();\n selection.addRange(range);\n savedRangeRef.current = null;\n }, []);\n\n const runCommand = React.useCallback(\n (command: string, commandValue?: string) => {\n editorRef.current?.focus();\n\n switch (command) {\n case \"bold\":\n wrapSelectionInline(\"strong\");\n break;\n case \"italic\":\n wrapSelectionInline(\"em\");\n break;\n case \"underline\":\n wrapSelectionInline(\"u\");\n break;\n case \"strikeThrough\":\n wrapSelectionInline(\"s\");\n break;\n case \"formatBlock\":\n if (commandValue) formatBlock(commandValue);\n break;\n case \"insertUnorderedList\":\n insertList(false);\n break;\n case \"insertOrderedList\":\n insertList(true);\n break;\n case \"insertHorizontalRule\":\n insertElement(document.createElement(\"hr\"));\n break;\n case \"removeFormat\":\n removeFormat();\n break;\n default:\n break;\n }\n\n emitChange();\n },\n [emitChange],\n );\n\n const insertLink = React.useCallback(() => {\n const url = linkUrl.trim();\n if (!url) return;\n\n restoreSelection();\n wrapSelectionInline(\"a\", { href: url });\n editorRef.current?.focus();\n setLinkUrl(\"\");\n setShowLinkInput(false);\n emitChange();\n }, [emitChange, linkUrl, restoreSelection]);\n\n const insertImage = React.useCallback(async () => {\n const url =\n (await onRequestImageUrl?.()) ??\n (typeof window !== \"undefined\" ? window.prompt(\"Image URL:\") : null);\n\n if (!url) return;\n\n const image = document.createElement(\"img\");\n image.src = url;\n image.alt = \"\";\n editorRef.current?.focus();\n insertElement(image);\n emitChange();\n }, [emitChange, onRequestImageUrl]);\n\n const toolbarGroups: ToolbarButtonConfig[][] = [\n [\n { icon: Bold, command: \"bold\", title: \"Bold (Ctrl+B)\" },\n { icon: Italic, command: \"italic\", title: \"Italic (Ctrl+I)\" },\n { icon: Underline, command: \"underline\", title: \"Underline (Ctrl+U)\" },\n { icon: Strikethrough, command: \"strikeThrough\", title: \"Strikethrough\" },\n ],\n [\n { icon: Heading1, command: \"formatBlock\", title: \"Heading 1\", value: \"h1\" },\n { icon: Heading2, command: \"formatBlock\", title: \"Heading 2\", value: \"h2\" },\n { icon: Heading3, command: \"formatBlock\", title: \"Heading 3\", value: \"h3\" },\n ],\n [\n { icon: List, command: \"insertUnorderedList\", title: \"Bullet list\" },\n { icon: ListOrdered, command: \"insertOrderedList\", title: \"Numbered list\" },\n { icon: AlignLeft, command: \"formatBlock\", title: \"Blockquote\", value: \"blockquote\" },\n { icon: FileText, command: \"formatBlock\", title: \"Code block\", value: \"pre\" },\n ],\n ];\n\n const renderToolbarButton = ({\n icon: Icon,\n command,\n title,\n value: commandValue,\n }: ToolbarButtonConfig) => (\n <Button\n key={`${command}-${title}`}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title={title}\n aria-label={title}\n onMouseDown={(event) => {\n event.preventDefault();\n runCommand(command, commandValue);\n }}\n >\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n );\n\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-xl border border-border bg-card shadow-natural\",\n \"focus-within:border-brand-primary/50 focus-within:ring-2 focus-within:ring-brand-primary/25\",\n className,\n )}\n data-slot=\"rich-text-editor\"\n >\n <div\n className={cn(\n \"flex min-w-0 flex-wrap items-center gap-1 border-b border-border bg-muted/40 p-1.5\",\n toolbarClassName,\n )}\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n >\n {toolbarGroups.map((group, index) => (\n <React.Fragment key={`toolbar-group-${index}`}>\n {index > 0 && <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />}\n {group.map(renderToolbarButton)}\n </React.Fragment>\n ))}\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title=\"Insert link\"\n aria-label=\"Insert link\"\n onMouseDown={(event) => {\n event.preventDefault();\n saveSelection();\n setShowLinkInput((current) => !current);\n }}\n >\n <Link className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-9 text-muted-foreground hover:text-foreground\"\n title=\"Insert image\"\n aria-label=\"Insert image\"\n onMouseDown={(event) => {\n event.preventDefault();\n void insertImage();\n }}\n >\n <Image className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n {renderToolbarButton({\n icon: Minus,\n command: \"insertHorizontalRule\",\n title: \"Horizontal rule\",\n })}\n {renderToolbarButton({\n icon: XCircle,\n command: \"removeFormat\",\n title: \"Clear formatting\",\n })}\n </div>\n\n {showLinkInput && (\n <div className=\"flex min-w-0 flex-col gap-2 border-b border-border bg-muted/60 p-2 sm:flex-row\">\n <Input\n type=\"url\"\n value={linkUrl}\n onChange={(event) => setLinkUrl(event.target.value)}\n placeholder=\"https://...\"\n className=\"h-10 flex-1 bg-background\"\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n insertLink();\n }\n }}\n autoFocus\n aria-label=\"Link URL\"\n />\n <div className=\"grid grid-cols-2 gap-2 sm:flex sm:shrink-0\">\n <Button type=\"button\" size=\"sm\" className=\"h-10\" onClick={insertLink}>\n Insert\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-10\"\n onClick={() => setShowLinkInput(false)}\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n\n <div\n ref={editorRef}\n id={id}\n contentEditable\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel ?? \"Content editor\"}\n className={cn(\n \"rich-text-editor-content min-w-0 px-4 py-3 text-sm leading-6 text-foreground outline-none\",\n \"empty:before:pointer-events-none empty:before:text-muted-foreground empty:before:content-[attr(data-placeholder)]\",\n editorClassName,\n )}\n style={{ minHeight }}\n dangerouslySetInnerHTML={{ __html: value }}\n onInput={emitChange}\n onBlur={emitChange}\n data-placeholder={placeholder}\n suppressContentEditableWarning\n />\n\n <style>{`\n .rich-text-editor-content h1 { font-size: 1.5rem; font-weight: 700; line-height: 1.2; margin: 0.75rem 0 0.5rem; text-wrap: balance; }\n .rich-text-editor-content h2 { font-size: 1.25rem; font-weight: 650; line-height: 1.25; margin: 0.75rem 0 0.5rem; text-wrap: balance; }\n .rich-text-editor-content h3 { font-size: 1.1rem; font-weight: 650; line-height: 1.3; margin: 0.5rem 0 0.25rem; text-wrap: balance; }\n .rich-text-editor-content blockquote { border-left: 3px solid var(--border); color: var(--muted-foreground); margin: 0.75rem 0; padding-left: 1rem; text-wrap: pretty; }\n .rich-text-editor-content pre { background: var(--muted); border-radius: 0.5rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.85rem; margin: 0.75rem 0; overflow-x: auto; padding: 0.75rem; }\n .rich-text-editor-content a { color: var(--brand-primary); text-decoration: underline; text-underline-offset: 3px; }\n .rich-text-editor-content img { border-radius: 0.5rem; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1); height: auto; margin: 0.5rem 0; max-width: 100%; }\n .dark .rich-text-editor-content img { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1); }\n .rich-text-editor-content hr { border: none; border-top: 1px solid var(--border); margin: 1rem 0; }\n .rich-text-editor-content ul, .rich-text-editor-content ol { margin: 0.5rem 0; padding-left: 1.5rem; }\n .rich-text-editor-content li { margin: 0.25rem 0; }\n `}</style>\n </div>\n );\n}\n\nRichTextEditor.displayName = \"RichTextEditor\";\n\nexport { RichTextEditor };\nexport type { RichTextEditorProps, RichTextImageUrlHandler };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ScrollArea } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { motionClasses } from \"../lib/interaction\";\n\nconst ScrollAreaRoot = React.forwardRef<\n React.ComponentRef<typeof ScrollArea.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollArea.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollArea.Root ref={ref} className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollArea.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollArea.Viewport>\n <ScrollAreaScrollbar orientation=\"vertical\" />\n <ScrollAreaScrollbar orientation=\"horizontal\" />\n <ScrollArea.Corner />\n </ScrollArea.Root>\n));\nScrollAreaRoot.displayName = \"ScrollArea\";\n\nconst ScrollAreaScrollbar = React.forwardRef<\n React.ComponentRef<typeof ScrollArea.Scrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollArea.Scrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none\",\n motionClasses,\n orientation === \"vertical\" && \"h-full w-2 border-l border-l-transparent p-px\",\n orientation === \"horizontal\" && \"h-2 flex-col border-t border-t-transparent p-px\",\n className,\n )}\n {...props}\n >\n <ScrollArea.Thumb\n className={cn(\n \"relative flex-1 rounded-full bg-muted hover:bg-muted-foreground/30\",\n motionClasses,\n )}\n />\n </ScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = \"ScrollAreaScrollbar\";\n\nexport { ScrollAreaRoot as ScrollArea };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\n\ninterface SectionHeadingAction {\n label: string;\n href?: string;\n onClick?: () => void;\n variant?: \"default\" | \"outline\" | \"ghost\";\n}\n\ninterface SectionHeadingProps {\n title: string;\n description?: string;\n actions?: SectionHeadingAction[];\n border?: boolean;\n className?: string;\n}\n\nfunction SectionHeading({\n title,\n description,\n actions,\n border = true,\n className,\n}: SectionHeadingProps) {\n return (\n <div\n className={cn(\n \"flex flex-col gap-1 pb-4 sm:flex-row sm:items-start sm:justify-between\",\n border && \"border-b border-border\",\n className,\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"heading text-balance text-foreground truncate\">{title}</h2>\n {description && (\n <p className=\"mt-1 body text-pretty text-muted-foreground\">{description}</p>\n )}\n </div>\n\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2 pt-1\">\n {actions.map((action, i) =>\n action.href ? (\n <Button key={i} size=\"sm\" variant={action.variant ?? \"default\"} asChild>\n <a href={action.href}>{action.label}</a>\n </Button>\n ) : (\n <Button\n key={i}\n size=\"sm\"\n variant={action.variant ?? \"default\"}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { SectionHeading };\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\ninterface StackedListProps {\n children: React.ReactNode;\n divided?: boolean;\n bordered?: boolean;\n className?: string;\n}\n\nfunction StackedList({ children, divided = true, bordered = true, className }: StackedListProps) {\n return (\n <ul\n role=\"list\"\n className={cn(\n \"overflow-hidden rounded-xl bg-card\",\n bordered && \"border border-border shadow-natural\",\n divided && \"divide-y divide-border\",\n className,\n )}\n >\n {children}\n </ul>\n );\n}\n\ninterface StackedListItemProps {\n children: React.ReactNode;\n href?: string;\n onClick?: () => void;\n className?: string;\n}\n\nfunction StackedListItem({ children, href, onClick, className }: StackedListItemProps) {\n const inner = <div className={cn(\"px-4 py-3.5\", className)}>{children}</div>;\n\n if (href) {\n return (\n <li>\n <a href={href} className=\"block hover:bg-muted transition-colors\">\n {inner}\n </a>\n </li>\n );\n }\n\n if (onClick) {\n return (\n <li>\n <button\n type=\"button\"\n className=\"w-full text-left hover:bg-muted transition-colors\"\n onClick={onClick}\n >\n {inner}\n </button>\n </li>\n );\n }\n\n return <li>{inner}</li>;\n}\n\nexport { StackedList, StackedListItem };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ArrowDown, ArrowUp, ChevronsUpDown, Filter, Search } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { EmptyState } from \"./empty-state\";\nimport { InputGroup } from \"./input-group\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"./pagination\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\";\nimport { StackedList, StackedListItem } from \"./stacked-list\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\";\nimport { cn } from \"../lib/utils\";\n\ninterface SearchableTableFilterOption {\n value: string;\n label: string;\n}\n\ninterface SearchableTableColumn<T = unknown> {\n key: string;\n label: string;\n render?: (item: T) => React.ReactNode;\n sortable?: boolean;\n sortAccessor?: (item: T) => string | number | Date | null | undefined;\n className?: string;\n}\n\ninterface SearchableTableProps<T extends { id: string | number }> {\n data: T[];\n columns: SearchableTableColumn<T>[];\n searchPlaceholder?: string;\n searchTerm: string;\n onSearchChange: (value: string) => void;\n filters?: Record<\n string,\n {\n value: string;\n onChange: (value: string) => void;\n options: SearchableTableFilterOption[];\n placeholder: string;\n }\n >;\n emptyState?: {\n icon?: React.ReactNode;\n title: string;\n description: string;\n action?: {\n label: string;\n href?: string;\n onClick?: () => void;\n };\n };\n actions?: (item: T) => React.ReactNode;\n mobileCard?: (item: T) => React.ReactNode;\n tableClassName?: string;\n pagination?: {\n pageSize?: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n };\n}\n\nfunction appendSearchableValue(value: unknown, parts: string[], depth = 0) {\n if (value == null || depth > 2) return;\n\n if (value instanceof Date) {\n parts.push(value.toISOString());\n return;\n }\n\n if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) {\n parts.push(String(value));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => appendSearchableValue(entry, parts, depth + 1));\n return;\n }\n\n if (typeof value === \"object\") {\n Object.values(value as Record<string, unknown>).forEach((entry) =>\n appendSearchableValue(entry, parts, depth + 1),\n );\n }\n}\n\nfunction getSearchableText(item: unknown) {\n const parts: string[] = [];\n appendSearchableValue(item, parts);\n return parts.join(\" \").toLowerCase();\n}\n\nfunction normalizeEmptyStateIcon(icon: React.ReactNode) {\n return icon ? <span className=\"flex [&_svg]:size-5\">{icon}</span> : undefined;\n}\n\nfunction SearchableTable<T extends { id: string | number }>({\n data,\n columns,\n searchPlaceholder = \"Search...\",\n searchTerm,\n onSearchChange,\n filters = {},\n emptyState,\n actions,\n mobileCard,\n tableClassName,\n pagination,\n}: SearchableTableProps<T>) {\n const [sort, setSort] = React.useState<{ key: string; direction: \"asc\" | \"desc\" } | null>(null);\n const rows = React.useMemo(() => (Array.isArray(data) ? data : []), [data]);\n const normalizedSearchTerm = searchTerm.trim().toLowerCase();\n\n const filteredRows = React.useMemo(() => {\n if (!normalizedSearchTerm) return rows;\n return rows.filter((item) => getSearchableText(item).includes(normalizedSearchTerm));\n }, [normalizedSearchTerm, rows]);\n\n const sortedData = React.useMemo(() => {\n if (!sort) return filteredRows;\n\n const column = columns.find((candidate) => candidate.key === sort.key);\n if (!column || (!column.sortable && !column.sortAccessor)) return filteredRows;\n\n const directionMultiplier = sort.direction === \"asc\" ? 1 : -1;\n const getSortValue = (item: T) =>\n column.sortAccessor?.(item) ?? (item as Record<string, unknown>)[column.key];\n\n return [...filteredRows].sort((left, right) => {\n const leftValue = getSortValue(left);\n const rightValue = getSortValue(right);\n\n if (leftValue == null && rightValue == null) return 0;\n if (leftValue == null) return 1;\n if (rightValue == null) return -1;\n\n const leftComparable = leftValue instanceof Date ? leftValue.getTime() : leftValue;\n const rightComparable = rightValue instanceof Date ? rightValue.getTime() : rightValue;\n\n if (typeof leftComparable === \"number\" && typeof rightComparable === \"number\") {\n return (leftComparable - rightComparable) * directionMultiplier;\n }\n\n return (\n String(leftComparable).localeCompare(String(rightComparable), undefined, {\n numeric: true,\n sensitivity: \"base\",\n }) * directionMultiplier\n );\n });\n }, [columns, filteredRows, sort]);\n\n const pageSize = pagination?.pageSize ?? 10;\n const currentPage = pagination?.currentPage ?? 1;\n const totalPages = Math.max(1, Math.ceil(sortedData.length / pageSize));\n const startIndex = (currentPage - 1) * pageSize;\n const displayData = pagination ? sortedData.slice(startIndex, startIndex + pageSize) : sortedData;\n\n const toggleSort = (column: SearchableTableColumn<T>) => {\n if (!column.sortable && !column.sortAccessor) return;\n\n setSort((current) =>\n current?.key === column.key\n ? { key: column.key, direction: current.direction === \"asc\" ? \"desc\" : \"asc\" }\n : { key: column.key, direction: \"asc\" },\n );\n };\n\n const renderEmptyState = (className?: string) => (\n <EmptyState\n title={emptyState?.title ?? \"No results found\"}\n description={emptyState?.description ?? \"Try changing the search or filters.\"}\n {...(className ? { className } : {})}\n {...(emptyState?.icon ? { icon: normalizeEmptyStateIcon(emptyState.icon) } : {})}\n {...(emptyState?.action ? { action: emptyState.action } : {})}\n />\n );\n\n const renderPagination = () => {\n if (!pagination || totalPages <= 1) return null;\n\n const pages: Array<number | \"ellipsis-start\" | \"ellipsis-end\"> = [];\n const showEllipsis = totalPages > 7;\n\n if (showEllipsis) {\n pages.push(1);\n if (currentPage > 4) pages.push(\"ellipsis-start\");\n\n for (let page = Math.max(2, currentPage - 1); page <= Math.min(totalPages - 1, currentPage + 1); page++) {\n pages.push(page);\n }\n\n if (currentPage < totalPages - 3) pages.push(\"ellipsis-end\");\n pages.push(totalPages);\n } else {\n for (let page = 1; page <= totalPages; page++) pages.push(page);\n }\n\n return (\n <div className=\"mt-6 flex justify-center\">\n <Pagination>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n onClick={() => pagination.onPageChange(Math.max(1, currentPage - 1))}\n className={currentPage === 1 ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"}\n />\n </PaginationItem>\n {pages.map((page, index) => (\n <PaginationItem key={`${page}-${index}`}>\n {page === \"ellipsis-start\" || page === \"ellipsis-end\" ? (\n <PaginationEllipsis />\n ) : (\n <PaginationLink\n onClick={() => pagination.onPageChange(page)}\n isActive={currentPage === page}\n className=\"cursor-pointer\"\n >\n {page}\n </PaginationLink>\n )}\n </PaginationItem>\n ))}\n <PaginationItem>\n <PaginationNext\n onClick={() => pagination.onPageChange(Math.min(totalPages, currentPage + 1))}\n className={\n currentPage === totalPages ? \"pointer-events-none opacity-50\" : \"cursor-pointer\"\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n </div>\n );\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"md:rounded-lg md:border md:border-border md:bg-muted/30 md:p-3\">\n <div className=\"flex flex-col gap-2.5 md:flex-row md:flex-wrap md:items-center md:justify-start md:gap-3\">\n <InputGroup\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(event) => onSearchChange(event.target.value)}\n leadingIcon={<Search className=\"size-4\" />}\n wrapperClassName=\"w-full min-w-0 md:min-w-[280px] md:max-w-[520px] md:flex-1 md:basis-[340px]\"\n className=\"h-9 bg-background\"\n />\n <div className=\"flex w-full min-w-0 flex-col gap-2 sm:flex-row sm:flex-wrap md:w-auto md:justify-end\">\n {Object.entries(filters).map(([key, filter]) => (\n <Select key={key} value={filter.value} onValueChange={filter.onChange}>\n <SelectTrigger className=\"h-9 w-full bg-background sm:w-[180px]\">\n <Filter className=\"mr-2 size-4\" />\n <SelectValue placeholder={filter.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {filter.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ))}\n </div>\n </div>\n </div>\n\n <StackedList bordered={false} className=\"rounded-none bg-transparent md:hidden\">\n {displayData.length === 0\n ? renderEmptyState(\"px-0 py-9\")\n : displayData.map((item) => {\n if (mobileCard) {\n return (\n <StackedListItem key={item.id} className=\"px-0 py-0\">\n {mobileCard(item)}\n </StackedListItem>\n );\n }\n\n const primaryColumn = columns.find((column) => column.label.trim()) ?? columns[0];\n const secondaryColumns = columns\n .filter((column) => column.key !== primaryColumn?.key && column.label)\n .slice(0, 5);\n\n return (\n <StackedListItem key={item.id} className=\"px-0 py-2.5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {primaryColumn && (\n <div className=\"min-w-0 text-sm font-semibold text-foreground [&_*]:min-w-0\">\n {primaryColumn.render\n ? primaryColumn.render(item)\n : (item as Record<string, React.ReactNode>)[primaryColumn.key]}\n </div>\n )}\n </div>\n {actions && <div className=\"shrink-0\">{actions(item)}</div>}\n </div>\n {secondaryColumns.length > 0 && (\n <dl className=\"mt-2 divide-y divide-border/70 border-y border-border/70 text-xs\">\n {secondaryColumns.map((column) => (\n <div\n key={column.key}\n className=\"grid min-w-0 grid-cols-[6.25rem_minmax(0,1fr)] gap-2 py-1.5\"\n >\n <dt className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {column.label}\n </dt>\n <dd className=\"min-w-0 break-words text-foreground\">\n {column.render\n ? column.render(item)\n : (item as Record<string, React.ReactNode>)[column.key]}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </StackedListItem>\n );\n })}\n </StackedList>\n\n {displayData.length === 0 ? (\n <div className=\"hidden min-h-[18rem] items-center justify-center border-t border-border/60 md:flex\">\n {renderEmptyState(\"px-6 py-12\")}\n </div>\n ) : (\n <Table containerClassName=\"hidden overflow-x-auto md:block\" className={cn(\"min-w-full\", tableClassName)}>\n <TableHeader>\n <TableRow className=\"relative border-b-0 bg-muted/80 transition-colors hover:bg-muted/80\">\n {columns.map((column) => {\n const isSortable = Boolean(column.sortable || column.sortAccessor);\n const isSorted = sort?.key === column.key;\n const SortIcon = !isSorted ? ChevronsUpDown : sort.direction === \"asc\" ? ArrowUp : ArrowDown;\n\n return (\n <TableHead\n key={column.key}\n className={cn(\n \"cursor-default select-none whitespace-nowrap px-4 py-3 text-xs font-medium text-muted-foreground transition-colors\",\n column.className,\n )}\n aria-sort={\n isSortable\n ? isSorted\n ? sort.direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined\n }\n >\n {isSortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 h-auto px-2 py-1 text-xs font-medium\"\n onClick={() => toggleSort(column)}\n aria-label={`Sort by ${column.label}`}\n >\n <span>{column.label}</span>\n <SortIcon className=\"size-3.5\" />\n </Button>\n ) : (\n column.label\n )}\n </TableHead>\n );\n })}\n {actions && (\n <TableHead className=\"w-32 cursor-default select-none whitespace-nowrap px-4 py-3 text-xs font-medium text-muted-foreground\">\n Actions\n </TableHead>\n )}\n </TableRow>\n </TableHeader>\n <TableBody>\n {displayData.map((item, index) => (\n <TableRow key={item.id} className={cn(index === 0 && \"border-t-0\")}>\n {columns.map((column) => (\n <TableCell key={column.key} className={cn(\"py-3\", column.className)}>\n {column.render\n ? column.render(item)\n : (item as Record<string, React.ReactNode>)[column.key]}\n </TableCell>\n ))}\n {actions && <TableCell className=\"w-32 whitespace-nowrap py-3\">{actions(item)}</TableCell>}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n\n {renderPagination()}\n </div>\n );\n}\n\nexport { SearchableTable };\nexport type { SearchableTableColumn, SearchableTableFilterOption, SearchableTableProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { PanelLeft } from \"lucide-react\";\nimport { Slot } from \"radix-ui\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Separator } from \"./separator\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"./sheet\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar:state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3.5rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\nconst MOBILE_BREAKPOINT = 768;\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mediaQuery = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => setIsMobile(mediaQuery.matches);\n\n onChange();\n mediaQuery.addEventListener(\"change\", onChange);\n return () => mediaQuery.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n}\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n openMobile: boolean;\n setOpenMobile: React.Dispatch<React.SetStateAction<boolean>>;\n isMobile: boolean;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nfunction useSidebar() {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) throw new Error(\"useSidebar must be used inside SidebarProvider\");\n return ctx;\n}\n\nfunction useOptionalSidebar() {\n return React.useContext(SidebarContext);\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarProvider */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarProviderProps extends React.ComponentProps<\"div\"> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [_open, _setOpen] = React.useState(defaultOpen);\n\n const open = openProp !== undefined ? openProp : _open;\n\n const setOpen = React.useCallback(\n (value: React.SetStateAction<boolean>) => {\n const nextOpen = typeof value === \"function\" ? value(open) : value;\n if (onOpenChange) {\n onOpenChange(nextOpen);\n } else {\n _setOpen(nextOpen);\n }\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${nextOpen}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [onOpenChange, open],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile((currentOpen) => !currentOpen);\n return;\n }\n\n setOpen((currentOpen) => !currentOpen);\n }, [isMobile, setOpen]);\n\n React.useEffect(() => {\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n openMobile,\n setOpenMobile,\n isMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, openMobile, setOpenMobile, isMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-sidebar=\"provider\"\n data-state={state}\n className={cn(\"group/sidebar-wrapper flex min-h-svh w-full\", className)}\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-mobile\": SIDEBAR_WIDTH_MOBILE,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Sidebar */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarProps extends React.ComponentProps<\"div\"> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"icon\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { state, isMobile, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <aside\n data-side={side}\n data-variant={variant}\n data-collapsible=\"none\"\n className={cn(\n \"flex flex-col h-svh bg-card border-r border-border w-(--sidebar-width)\",\n side === \"right\" && \"border-r-0 border-l\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n className={cn(\n \"w-(--sidebar-width-mobile) max-w-[85dvw] bg-card p-0 text-foreground [&>button]:hidden\",\n className,\n )}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n if (collapsible === \"offcanvas\") {\n return (\n <aside\n data-state={state}\n data-side={side}\n data-variant={variant}\n data-collapsible=\"offcanvas\"\n className={cn(\n \"group peer flex flex-col h-svh bg-card border-r border-border\",\n \"transition-[width,transform] duration-200 ease-linear\",\n \"data-[state=expanded]:w-(--sidebar-width) data-[state=collapsed]:w-0 data-[state=collapsed]:-translate-x-full\",\n side === \"right\" && \"border-r-0 border-l data-[state=collapsed]:translate-x-full\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n // collapsible === \"icon\" (default)\n return (\n <aside\n data-state={state}\n data-side={side}\n data-variant={variant}\n data-collapsible=\"icon\"\n className={cn(\n \"group peer hidden md:flex flex-col h-svh bg-card border-r border-border\",\n \"transition-[width] duration-200 ease-linear overflow-hidden\",\n \"data-[state=expanded]:w-(--sidebar-width) data-[state=collapsed]:w-(--sidebar-width-icon)\",\n side === \"right\" && \"border-r-0 border-l\",\n variant === \"floating\" && \"m-2 h-[calc(100svh-1rem)] rounded-xl border shadow-natural\",\n variant === \"inset\" && \"border-r-0\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarTrigger */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={className}\n onClick={(e) => {\n onClick?.(e);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeft size={16} />\n <span className=\"sr-only\">Toggle sidebar</span>\n </Button>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarRail */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n aria-label=\"Toggle sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 cursor-col-resize transition-[left,right,width] ease-linear\",\n \"after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]\",\n \"hover:after:bg-brand-primary/30\",\n \"group-data-[side=left]:-right-4 group-data-[side=right]:left-0\",\n \"sm:flex\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarInset */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-sidebar=\"inset\"\n className={cn(\"relative flex min-h-svh flex-1 flex-col overflow-hidden bg-background\", className)}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Structure components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-3 border-b border-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"content\"\n className={cn(\"flex min-h-0 flex-1 flex-col gap-2 overflow-auto p-3\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-3 border-t border-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-sidebar=\"separator\"\n className={cn(\"mx-2 my-1 bg-muted\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Group components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\";\n\n return (\n <Comp\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 label text-muted-foreground\",\n \"outline-none ring-ring transition-[margin,opacity] duration-200 ease-linear\",\n \"group-data-[state=collapsed]/sidebar-wrapper:opacity-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:h-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:m-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:p-0\",\n \"group-data-[state=collapsed]/sidebar-wrapper:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-sidebar=\"group-content\" className={cn(\"w-full text-sm\", className)} {...props} />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute right-2 top-2 flex size-8 items-center justify-center\",\n \"rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Menu components */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li data-sidebar=\"menu-item\" className={cn(\"group/menu-item relative\", className)} {...props} />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuButton */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarMenuButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string;\n size?: \"default\" | \"sm\" | \"lg\";\n}\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n tooltip,\n size = \"default\",\n className,\n children,\n ...props\n}: SidebarMenuButtonProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"button\";\n\n const button = (\n <Comp\n data-sidebar=\"menu-button\"\n data-active={isActive}\n data-size={size}\n className={cn(\n // Base\n \"peer/menu-button flex min-h-8 w-full items-center gap-2 overflow-hidden rounded-md px-2 py-1.5 body-sm text-left\",\n \"outline-none ring-ring\",\n \"transition-[width,height,padding] duration-150\",\n \"hover:bg-muted hover:text-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"active:bg-muted\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&>svg]:size-4 [&>svg]:shrink-0\",\n // Size variants\n size === \"sm\" && \"h-7 text-xs\",\n size === \"lg\" && \"h-10\",\n // Active state\n isActive && [\n \"bg-brand-primary/10 text-brand-primary\",\n \"hover:bg-brand-primary/15 hover:text-brand-primary\",\n ],\n // Collapsed state\n \"group-data-[state=collapsed]/sidebar-wrapper:justify-center\",\n \"group-data-[state=collapsed]/sidebar-wrapper:size-9\",\n \"group-data-[state=collapsed]/sidebar-wrapper:p-0\",\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n\n if (!tooltip) {\n return button;\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n className={cn(\n // Only visible when collapsed\n \"hidden group-data-[state=collapsed]/sidebar-wrapper:block\",\n )}\n >\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuAction */\n/* ------------------------------------------------------------------ */\n\ninterface SidebarMenuActionProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n showOnHover?: boolean;\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: SidebarMenuActionProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"button\";\n\n return (\n <Comp\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute right-1 top-1/2 flex size-8 -translate-y-1/2 items-center justify-center\",\n \"rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n showOnHover && [\n \"opacity-0 transition-opacity\",\n \"group-hover/menu-item:opacity-100\",\n \"peer-data-[active=true]/menu-button:opacity-100\",\n ],\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuBadge */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-sidebar=\"menu-badge\"\n className={cn(\n \"absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-full\",\n \"caption font-medium bg-muted text-muted-foreground px-1\",\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* SidebarMenuSkeleton */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & { showIcon?: boolean }) {\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && <div className=\"size-4 shrink-0 rounded-md bg-muted animate-pulse\" />}\n <div\n className=\"h-4 max-w-(--skeleton-width) flex-1 rounded-md bg-muted animate-pulse\"\n style={{ \"--skeleton-width\": width } as React.CSSProperties}\n />\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Sub menu */\n/* ------------------------------------------------------------------ */\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 flex-col gap-1 border-l border-border pl-3\",\n \"group-data-[state=collapsed]/sidebar-wrapper:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\ninterface SidebarMenuSubButtonProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n isActive?: boolean;\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n isActive = false,\n className,\n ...props\n}: SidebarMenuSubButtonProps) {\n const Comp = asChild ? (Slot.Root as React.ElementType) : \"a\";\n\n return (\n <Comp\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={cn(\n \"flex min-h-8 min-w-0 items-center gap-2 overflow-hidden rounded-md px-2\",\n \"body text-muted-foreground outline-none\",\n \"transition-colors duration-150\",\n \"hover:text-foreground hover:bg-muted\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&>svg]:size-3.5 [&>svg]:shrink-0\",\n isActive && \"text-brand-primary hover:text-brand-primary\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Exports */\n/* ------------------------------------------------------------------ */\n\nexport {\n SidebarProvider,\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n SIDEBAR_COOKIE_MAX_AGE,\n SIDEBAR_COOKIE_NAME,\n SIDEBAR_KEYBOARD_SHORTCUT,\n SIDEBAR_WIDTH,\n SIDEBAR_WIDTH_ICON,\n SIDEBAR_WIDTH_MOBILE,\n useOptionalSidebar,\n useSidebar,\n};\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Toaster as SonnerToaster } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof SonnerToaster>;\n\nfunction Toaster({ ...props }: ToasterProps) {\n return (\n <SonnerToaster\n theme=\"light\"\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast font-sans text-sm group-[.toaster]:bg-card group-[.toaster]:text-foreground group-[.toaster]:border group-[.toaster]:border-border group-[.toaster]:shadow-elevated group-[.toaster]:rounded-xl\",\n description: \"group-[.toast]:text-muted-foreground group-[.toast]:text-xs\",\n actionButton:\n \"group-[.toast]:bg-brand-primary group-[.toast]:text-background group-[.toast]:rounded-md group-[.toast]:text-xs group-[.toast]:font-medium\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:rounded-md group-[.toast]:text-xs group-[.toast]:font-medium\",\n success: \"group-[.toaster]:border-brand-secondary/40 group-[.toaster]:text-foreground\",\n error:\n \"group-[.toaster]:bg-destructive/10 group-[.toaster]:text-destructive group-[.toaster]:border-destructive/20\",\n warning:\n \"group-[.toaster]:bg-warning group-[.toaster]:text-warning-foreground group-[.toaster]:border-warning/40\",\n info: \"group-[.toaster]:border-border\",\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster };\n","import * as React from \"react\";\nimport { TrendingUp, TrendingDown, Minus, Plus } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\ninterface StatCardProps {\n label?: string;\n title?: string;\n value?: string | number;\n trend?: {\n value: string;\n direction: \"up\" | \"down\" | \"neutral\";\n };\n icon?: React.ReactNode;\n children?: React.ReactNode;\n actionButtons?: React.ReactNode;\n className?: string;\n containerClassName?: string;\n titleClassName?: string;\n valueClassName?: string;\n}\n\ninterface StatCardGridProps {\n children: React.ReactNode;\n maxSlots?: number;\n onAddCard?: () => void;\n className?: string;\n showEmptySlots?: boolean;\n}\n\ninterface StatCardSlotProps {\n onAddCard?: () => void;\n className?: string;\n label?: string;\n}\n\nfunction StatCard({\n label,\n title,\n value,\n trend,\n icon,\n children,\n actionButtons,\n className,\n containerClassName,\n titleClassName,\n valueClassName,\n}: StatCardProps) {\n const displayLabel = title ?? label;\n const trendColor = {\n up: \"text-muted-foreground bg-brand-secondary/30 rounded-full px-2 py-0.5 w-fit\",\n down: \"text-destructive\",\n neutral: \"text-muted-foreground\",\n };\n\n const TrendIcon = {\n up: TrendingUp,\n down: TrendingDown,\n neutral: Minus,\n };\n\n return (\n <div\n className={cn(\n \"min-w-0 rounded-xl border border-border bg-card p-4 shadow-natural sm:p-5\",\n containerClassName,\n className,\n )}\n data-slot=\"stat-card\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n {displayLabel && (\n <p className={cn(\"label min-w-0 text-muted-foreground\", titleClassName)}>\n {displayLabel}\n </p>\n )}\n {icon && (\n <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground\">\n {icon}\n </div>\n )}\n {actionButtons && <div className=\"flex shrink-0 items-center gap-2\">{actionButtons}</div>}\n </div>\n {value !== undefined ? (\n <p className={cn(\"heading-xl mt-2 tabular-nums text-foreground\", valueClassName)}>\n {value}\n </p>\n ) : children ? (\n <div className=\"mt-2\">{children}</div>\n ) : null}\n {trend &&\n (() => {\n const Icon = TrendIcon[trend.direction];\n return (\n <div className={cn(\"mt-2 flex items-center gap-1\", trendColor[trend.direction])}>\n <Icon size={12} />\n <span className=\"caption tabular-nums font-medium\">{trend.value}</span>\n </div>\n );\n })()}\n </div>\n );\n}\n\nStatCard.displayName = \"StatCard\";\n\nfunction StatCardSlot({ onAddCard, className, label = \"Add card\" }: StatCardSlotProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"flex min-h-28 w-full min-w-0 items-center justify-center rounded-xl border border-dashed border-border bg-card p-4 text-muted-foreground shadow-natural\",\n \"transition-[background-color,border-color,color,scale] duration-150 hover:border-ground-300 hover:bg-muted hover:text-foreground active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30\",\n className,\n )}\n onClick={onAddCard}\n >\n <span className=\"flex flex-col items-center gap-1.5\">\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n <span className=\"caption font-medium\">{label}</span>\n </span>\n </button>\n );\n}\n\nStatCardSlot.displayName = \"StatCardSlot\";\n\nfunction StatCardGrid({\n children,\n maxSlots = 6,\n onAddCard,\n className,\n showEmptySlots = false,\n}: StatCardGridProps) {\n const childrenArray = React.Children.toArray(children);\n const emptySlots = showEmptySlots ? Math.max(0, maxSlots - childrenArray.length) : 0;\n\n return (\n <div\n className={cn(\n \"grid min-w-0 grid-cols-2 items-stretch gap-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6\",\n className,\n )}\n data-slot=\"stat-card-grid\"\n >\n {childrenArray.map((child, index) => (\n <div key={`filled-${index}`} className=\"min-w-0\">\n {child}\n </div>\n ))}\n {Array.from({ length: emptySlots }, (_, index) => (\n <div key={`empty-${index}`} className=\"min-w-0\">\n <StatCardSlot {...(onAddCard ? { onAddCard } : {})} />\n </div>\n ))}\n </div>\n );\n}\n\nStatCardGrid.displayName = \"StatCardGrid\";\n\nexport {\n StatCard,\n StatCardGrid,\n StatCardSlot,\n type StatCardProps,\n type StatCardGridProps,\n type StatCardSlotProps,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Badge } from \"./badge\";\nimport { cn } from \"../lib/utils\";\n\ntype StatusBadgeVariant = NonNullable<React.ComponentProps<typeof Badge>[\"variant\"]>;\ntype StatusBadgeIcon = React.ComponentType<{ className?: string }>;\n\ninterface StatusBadgeProps extends Omit<\n React.ComponentProps<typeof Badge>,\n \"children\" | \"variant\"\n> {\n status?: string | null;\n label?: React.ReactNode;\n variant?: StatusBadgeVariant;\n variantMap?: Record<string, StatusBadgeVariant>;\n labelMap?: Record<string, React.ReactNode>;\n icon?: StatusBadgeIcon;\n iconMap?: Record<string, StatusBadgeIcon>;\n iconClassName?: string;\n showDot?: boolean;\n dotClassName?: string;\n}\n\nconst DEFAULT_STATUS_VARIANT: Record<string, StatusBadgeVariant> = {\n active: \"success\",\n approved: \"success\",\n complete: \"success\",\n completed: \"success\",\n confirmed: \"success\",\n delivered: \"success\",\n enabled: \"success\",\n healthy: \"success\",\n optimized: \"success\",\n paid: \"success\",\n published: \"success\",\n resolved: \"success\",\n translated: \"success\",\n verified: \"success\",\n\n degraded: \"warning\",\n flagged: \"warning\",\n held_for_review: \"warning\",\n pending: \"warning\",\n processing: \"warning\",\n retrying: \"warning\",\n scheduled: \"warning\",\n trial: \"warning\",\n warning: \"warning\",\n\n archived: \"secondary\",\n disabled: \"secondary\",\n draft: \"secondary\",\n inactive: \"secondary\",\n missing: \"secondary\",\n neutral: \"secondary\",\n skipped: \"secondary\",\n\n blocked: \"destructive\",\n cancelled: \"destructive\",\n critical: \"destructive\",\n dead_letter: \"destructive\",\n deleted: \"destructive\",\n error: \"destructive\",\n failed: \"destructive\",\n rejected: \"destructive\",\n suspended: \"destructive\",\n unpaid: \"destructive\",\n outdated: \"destructive\",\n};\n\nconst DEFAULT_DOT_CLASS: Record<StatusBadgeVariant, string> = {\n default: \"bg-background\",\n solid: \"bg-background\",\n dot: \"bg-muted-foreground\",\n secondary: \"bg-muted-foreground\",\n outline: \"bg-muted-foreground\",\n brand: \"bg-background\",\n success: \"bg-emerald-500\",\n warning: \"bg-amber-500\",\n destructive: \"bg-destructive\",\n};\n\nfunction normalizeStatus(status?: string | null) {\n return String(status ?? \"unknown\")\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\");\n}\n\nfunction statusLabel(status?: string | null) {\n const normalized = normalizeStatus(status);\n if (normalized === \"unknown\") return \"Unknown\";\n\n return normalized\n .split(\"_\")\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction statusBadgeVariantFor(\n status?: string | null,\n variantMap?: Record<string, StatusBadgeVariant>,\n) {\n const normalized = normalizeStatus(status);\n return variantMap?.[normalized] ?? DEFAULT_STATUS_VARIANT[normalized] ?? \"outline\";\n}\n\nfunction StatusBadge({\n status,\n label,\n variant,\n variantMap,\n labelMap,\n icon,\n iconMap,\n iconClassName,\n showDot = false,\n dotClassName,\n className,\n ...props\n}: StatusBadgeProps) {\n const normalized = normalizeStatus(status);\n const resolvedVariant = variant ?? statusBadgeVariantFor(normalized, variantMap);\n const resolvedLabel = label ?? labelMap?.[normalized] ?? statusLabel(normalized);\n const Icon = icon ?? iconMap?.[normalized];\n\n return (\n <Badge\n variant={resolvedVariant}\n className={cn(\"max-w-full whitespace-nowrap\", (showDot || Icon) && \"pl-2\", className)}\n {...props}\n >\n {showDot && (\n <span\n className={cn(\n \"size-1.5 shrink-0 rounded-full\",\n DEFAULT_DOT_CLASS[resolvedVariant],\n dotClassName,\n )}\n aria-hidden=\"true\"\n />\n )}\n {Icon && <Icon className={cn(\"size-3 shrink-0\", iconClassName)} aria-hidden=\"true\" />}\n <span className=\"min-w-0 truncate\">{resolvedLabel}</span>\n </Badge>\n );\n}\n\nStatusBadge.displayName = \"StatusBadge\";\n\nexport { StatusBadge, statusBadgeVariantFor, statusLabel };\nexport type { StatusBadgeProps, StatusBadgeVariant };\n","import * as React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\nexport type StepStatus = \"complete\" | \"current\" | \"upcoming\";\n\nexport interface Step {\n id?: string | number;\n name: string;\n description?: string;\n status: StepStatus;\n href?: string;\n}\n\ninterface StepsProps {\n steps: Step[];\n variant?: \"circles\" | \"bullets\" | \"progress\";\n className?: string;\n}\n\n/* ---------- Circles variant ---------- */\nfunction CirclesSteps({ steps, className }: { steps: Step[]; className?: string }) {\n return (\n <nav aria-label=\"Progress\" className={className}>\n <ol role=\"list\" className=\"flex items-center\">\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n return (\n <li key={step.id ?? i} className={cn(\"relative\", !isLast && \"flex-1\")}>\n {/* Connector line */}\n {!isLast && (\n <div className=\"absolute left-9 right-0 top-[18px] h-0.5\" aria-hidden=\"true\">\n <div\n className={cn(\n \"h-full\",\n step.status === \"complete\" ? \"bg-brand-primary\" : \"bg-muted\",\n )}\n />\n </div>\n )}\n\n <a\n href={step.href ?? \"#\"}\n onClick={!step.href ? (e) => e.preventDefault() : undefined}\n className=\"group relative flex flex-col items-center gap-2\"\n >\n {/* Circle */}\n <span\n className={cn(\n \"relative z-10 flex h-9 w-9 items-center justify-center rounded-full transition-colors\",\n step.status === \"complete\" &&\n \"bg-brand-primary group-hover:bg-brand-primary/80\",\n step.status === \"current\" && \"border-2 border-brand-primary bg-card\",\n step.status === \"upcoming\" &&\n \"border-2 border-border bg-card group-hover:border-border\",\n )}\n >\n {step.status === \"complete\" ? (\n <Check size={14} className=\"text-background\" strokeWidth={2.5} />\n ) : step.status === \"current\" ? (\n <span className=\"size-3 rounded-full bg-brand-primary\" />\n ) : (\n <span className=\"size-3 rounded-full bg-transparent group-hover:bg-muted\" />\n )}\n </span>\n\n {/* Labels */}\n <span className=\"flex flex-col items-center\">\n <span\n className={cn(\n \"caption font-semibold\",\n step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\",\n )}\n >\n {step.name}\n </span>\n {step.description && (\n <span className=\"caption text-pretty text-muted-foreground\">\n {step.description}\n </span>\n )}\n </span>\n </a>\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n\n/* ---------- Bullets variant ---------- */\nfunction BulletsSteps({ steps, className }: { steps: Step[]; className?: string }) {\n const currentIdx = steps.findIndex((s) => s.status === \"current\");\n\n return (\n <nav className={cn(\"flex items-center gap-4\", className)} aria-label=\"Progress\">\n <p className=\"body font-medium tabular-nums text-muted-foreground\">\n Step {currentIdx + 1} of {steps.length}\n </p>\n <ol role=\"list\" className=\"flex items-center gap-2\">\n {steps.map((step, i) => (\n <li key={step.id ?? i}>\n <a\n href={step.href ?? \"#\"}\n onClick={!step.href ? (e) => e.preventDefault() : undefined}\n className=\"relative flex h-9 w-9 items-center justify-center\"\n >\n {step.status === \"complete\" ? (\n <span\n className=\"block size-2.5 rounded-full bg-brand-primary transition-colors hover:bg-brand-primary/80\"\n aria-label={`${step.name}: completed`}\n />\n ) : step.status === \"current\" ? (\n <span\n className=\"relative flex size-4 items-center justify-center\"\n aria-current=\"step\"\n aria-label={`${step.name}: current step`}\n >\n <span className=\"absolute size-4 rounded-full bg-brand-primary/20\" />\n <span className=\"relative size-2.5 rounded-full bg-brand-primary\" />\n </span>\n ) : (\n <span\n className=\"block size-2.5 rounded-full bg-muted transition-colors hover:bg-muted\"\n aria-label={`${step.name}: upcoming`}\n />\n )}\n </a>\n </li>\n ))}\n </ol>\n </nav>\n );\n}\n\n/* ---------- Progress bar variant ---------- */\nfunction ProgressSteps({ steps, className }: { steps: Step[]; className?: string }) {\n const completeCount = steps.filter((s) => s.status === \"complete\").length;\n const currentIdx = steps.findIndex((s) => s.status === \"current\");\n const progress = ((completeCount + (currentIdx >= 0 ? 0.5 : 0)) / steps.length) * 100;\n\n return (\n <div className={cn(\"w-full\", className)}>\n {/* Bar */}\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-brand-primary transition-[width] duration-500\"\n style={{ width: `${progress}%` }}\n />\n </div>\n {/* Labels */}\n <div className=\"mt-4 grid\" style={{ gridTemplateColumns: `repeat(${steps.length}, 1fr)` }}>\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n return (\n <div\n key={step.id ?? i}\n className={cn(\n \"caption font-medium text-pretty\",\n i === 0 ? \"text-left\" : isLast ? \"text-right\" : \"text-center\",\n step.status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\",\n )}\n >\n {step.name}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n/* ---------- Main component ---------- */\nfunction Steps({ steps, variant = \"circles\", className }: StepsProps) {\n const classNameProp = className !== undefined ? { className } : {};\n if (variant === \"bullets\") return <BulletsSteps steps={steps} {...classNameProp} />;\n if (variant === \"progress\") return <ProgressSteps steps={steps} {...classNameProp} />;\n return <CirclesSteps steps={steps} {...classNameProp} />;\n}\n\nSteps.displayName = \"Steps\";\n\nexport { Steps };\n","\"use client\";\n\nimport { forwardRef, useRef, useState, useEffect, useCallback, type HTMLAttributes } from \"react\";\nimport { motion, useMotionValue, animate, type Transition } from \"framer-motion\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\n\ninterface SwitchProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onToggle\"> {\n label?: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n onToggle?: (checked: boolean) => void;\n disabled?: boolean;\n thumbTransition?: Transition;\n}\n\nconst TRACK_WIDTH = 34;\nconst TRACK_HEIGHT = 20;\nconst THUMB_SIZE = 16;\nconst THUMB_OFFSET = 2;\nconst THUMB_TRAVEL = TRACK_WIDTH - THUMB_SIZE - THUMB_OFFSET * 2;\nconst PILL_EXTEND = 2;\nconst PRESS_EXTEND = 4;\nconst PRESS_SHRINK = 4;\nconst DRAG_DEAD_ZONE = 2;\n\nconst Switch = forwardRef<HTMLDivElement, SwitchProps>(\n (\n {\n label,\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n onToggle,\n disabled = false,\n thumbTransition,\n className,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked);\n const checked = checkedProp ?? uncontrolledChecked;\n const hasMounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [pressed, setPressed] = useState(false);\n\n // Drag refs (not state to avoid re-renders during drag)\n const dragging = useRef(false);\n const didDrag = useRef(false);\n const pointerStart = useRef<{\n clientX: number;\n originX: number;\n } | null>(null);\n\n // Motion value for thumb x-axis\n const motionX = useMotionValue(checked ? THUMB_OFFSET + THUMB_TRAVEL : THUMB_OFFSET);\n\n useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n // Compute thumb shape\n const thumbWidth = pressed\n ? THUMB_SIZE + PRESS_EXTEND\n : hovered\n ? THUMB_SIZE + PILL_EXTEND\n : THUMB_SIZE;\n const thumbHeight = pressed ? THUMB_SIZE - PRESS_SHRINK : THUMB_SIZE;\n const thumbY = pressed ? THUMB_OFFSET + PRESS_SHRINK / 2 : THUMB_OFFSET;\n const extraWidth = thumbWidth - THUMB_SIZE;\n const thumbX = checked ? THUMB_OFFSET + THUMB_TRAVEL - extraWidth : THUMB_OFFSET;\n\n const setChecked = useCallback(\n (nextChecked: boolean) => {\n if (checkedProp === undefined) setUncontrolledChecked(nextChecked);\n onCheckedChange?.(nextChecked);\n onToggle?.(nextChecked);\n },\n [checkedProp, onCheckedChange, onToggle],\n );\n\n // Sync motionX when thumbX changes (hover/press/checked) and not dragging\n useEffect(() => {\n if (dragging.current) return;\n if (!hasMounted.current) {\n motionX.set(thumbX);\n } else {\n animate(motionX, thumbX, thumbTransition ?? spring.moderate);\n }\n }, [thumbX, motionX, thumbTransition]);\n\n // --- Pointer handlers ---\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n setPressed(true);\n dragging.current = false;\n didDrag.current = false;\n pointerStart.current = {\n clientX: e.clientX,\n originX: motionX.get(),\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [disabled, motionX],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!pointerStart.current) return;\n const delta = e.clientX - pointerStart.current.clientX;\n\n if (!dragging.current) {\n if (Math.abs(delta) < DRAG_DEAD_ZONE) return;\n dragging.current = true;\n }\n\n const dragMin = THUMB_OFFSET;\n const pressedThumbWidth = THUMB_SIZE + PRESS_EXTEND;\n const dragMax = TRACK_WIDTH - THUMB_OFFSET - pressedThumbWidth;\n const rawX = pointerStart.current.originX + delta;\n motionX.set(Math.max(dragMin, Math.min(dragMax, rawX)));\n },\n [motionX],\n );\n\n const handlePointerUp = useCallback(() => {\n if (!pointerStart.current) return;\n setPressed(false);\n\n if (dragging.current) {\n didDrag.current = true;\n dragging.current = false;\n\n const currentX = motionX.get();\n const dragMin = THUMB_OFFSET;\n const pressedThumbWidth = THUMB_SIZE + PRESS_EXTEND;\n const dragMax = TRACK_WIDTH - THUMB_OFFSET - pressedThumbWidth;\n const midpoint = (dragMin + dragMax) / 2;\n\n const shouldBeOn = currentX > midpoint;\n\n if (shouldBeOn !== checked) {\n setChecked(shouldBeOn);\n } else {\n // Snap back to current resting position (un-pressed)\n const snapTarget = checked ? THUMB_OFFSET + THUMB_TRAVEL : THUMB_OFFSET;\n animate(motionX, snapTarget, thumbTransition ?? spring.moderate);\n }\n\n requestAnimationFrame(() => {\n didDrag.current = false;\n });\n }\n\n pointerStart.current = null;\n }, [checked, setChecked, motionX, thumbTransition]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative z-10 flex items-center gap-2.5 px-3 py-2 cursor-pointer select-none touch-none\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n onPointerEnter={(e) => {\n if (e.pointerType === \"mouse\") setHovered(true);\n }}\n onPointerLeave={() => setHovered(false)}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onClick={() => {\n if (disabled || didDrag.current) return;\n setChecked(!checked);\n }}\n {...props}\n >\n {/* Switch */}\n <SwitchPrimitive.Root\n checked={checked}\n aria-label={ariaLabel ?? label}\n onCheckedChange={(nextChecked) => {\n if (didDrag.current) return;\n setChecked(nextChecked);\n }}\n disabled={disabled}\n tabIndex={0}\n className={cn(\n \"relative shrink-0 rounded-full outline-none cursor-pointer\",\n \"transition-colors duration-80\",\n \"focus-visible:ring-1 focus-visible:ring-[#6B97FF] focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n style={{\n width: TRACK_WIDTH,\n height: TRACK_HEIGHT,\n backgroundColor: checked\n ? hovered\n ? \"#5C89F2\"\n : \"#6B97FF\"\n : hovered\n ? \"color-mix(in oklab, var(--accent), rgb(var(--overlay)) 10%)\"\n : \"var(--accent)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <SwitchPrimitive.Thumb asChild>\n <motion.span\n className=\"absolute top-0 left-0 block rounded-full bg-white shadow-sm\"\n initial={false}\n style={{ x: motionX }}\n animate={{\n y: thumbY,\n width: thumbWidth,\n height: thumbHeight,\n }}\n transition={\n hasMounted.current ? (thumbTransition ?? spring.moderate) : { duration: 0 }\n }\n />\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n\n {/* Label */}\n {label && (\n <span\n className={cn(\n \"text-[13px] transition-[color] duration-80\",\n checked ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\nexport type { SwitchProps };\n","\"use client\";\n\nimport {\n useRef,\n useState,\n useCallback,\n useEffect,\n useLayoutEffect,\n createContext,\n useContext,\n forwardRef,\n Children,\n cloneElement,\n isValidElement,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useSurface } from \"../lib/surface-context\";\nimport { surfaceClasses } from \"../lib/surface-classes\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\n\n/* ─────────────────────── Contexts ─────────────────────── */\n\ninterface TabsValueOrderContextValue {\n valueOrder: string[];\n setValueOrder: (order: string[]) => void;\n selectedValue: string | undefined;\n}\n\nconst TabsValueOrderContext = createContext<TabsValueOrderContextValue | null>(null);\n\ninterface TabsListContextValue {\n registerTab: (index: number, value: string, el: HTMLElement | null) => void;\n hoveredIndex: number | null;\n selectedValue: string | undefined;\n /** Optimistically set selectedIdx so the indicator moves immediately on click. */\n setOptimisticIdx: (index: number) => void;\n}\n\nconst TabsListContext = createContext<TabsListContextValue | null>(null);\n\nfunction useTabsList() {\n const ctx = useContext(TabsListContext);\n if (!ctx) throw new Error(\"TabItem must be used within a TabsList\");\n return ctx;\n}\n\n/* ─────────────────────── Tabs (Root) ─────────────────────── */\n\ninterface TabsProps extends Omit<\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root>,\n \"onValueChange\" | \"onSelect\"\n> {\n /** Controlled value (takes precedence over selectedIndex). */\n value?: string;\n /** Called when the active tab changes. */\n onValueChange?: (value: string) => void;\n /** Index-based controlled alternative. */\n selectedIndex?: number;\n /** Called with the new index when the active tab changes. */\n onSelect?: (index: number) => void;\n}\n\nconst Tabs = forwardRef<HTMLDivElement, TabsProps>(\n ({ value, onValueChange, selectedIndex, onSelect, defaultValue, children, ...props }, ref) => {\n const [valueOrder, setValueOrder] = useState<string[]>([]);\n const [uncontrolledValue, setUncontrolledValue] = useState<string | undefined>(defaultValue);\n const updateValueOrder = useCallback((order: string[]) => {\n setValueOrder((current) => {\n if (\n current.length === order.length &&\n current.every((value, index) => value === order[index])\n ) {\n return current;\n }\n return order;\n });\n }, []);\n\n // Resolve value: explicit value > selectedIndex lookup > defaultValue\n const resolvedValue =\n value ?? (selectedIndex != null ? valueOrder[selectedIndex] : uncontrolledValue);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (value === undefined && selectedIndex == null) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n if (onSelect) {\n const idx = valueOrder.indexOf(newValue);\n if (idx !== -1) onSelect(idx);\n }\n },\n [onValueChange, onSelect, valueOrder],\n );\n\n return (\n <TabsValueOrderContext.Provider\n value={{\n valueOrder,\n setValueOrder: updateValueOrder,\n selectedValue: resolvedValue,\n }}\n >\n <TabsPrimitive.Root\n ref={ref}\n onValueChange={handleValueChange}\n {...(resolvedValue !== undefined ? { value: resolvedValue } : {})}\n {...(resolvedValue == null && defaultValue !== undefined ? { defaultValue } : {})}\n activationMode=\"automatic\"\n {...props}\n >\n {children}\n </TabsPrimitive.Root>\n </TabsValueOrderContext.Provider>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n\n/* ─────────────────────── TabsList ─────────────────────── */\n\ntype TabsListProps = ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\n\nconst TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ children, className, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const isMouseInside = useRef(false);\n const shape = useShape();\n const substrate = useSurface();\n // Active pill lifts 3 levels above substrate (1 above the muted track + 2 for pop).\n // On the page (substrate 1) this lands on surface 4 — matches the original design.\n // Inside a dialog (substrate 5) it lifts to surface 8 instead of staying at 4.\n const indicatorLevel = Math.min(substrate + 3, 8);\n const valueOrderCtx = useContext(TabsValueOrderContext);\n const [optimisticIdx, setOptimisticIdx] = useState<number | null>(null);\n\n // Derive value order from children synchronously\n const values = Children.toArray(children)\n .filter(isValidElement)\n .map((child) => (child.props as { value?: string }).value)\n .filter((v): v is string => typeof v === \"string\");\n const valueOrderKey = values.join(\",\");\n const setValueOrder = valueOrderCtx?.setValueOrder;\n\n // Report value order up to Tabs root\n useLayoutEffect(() => {\n setValueOrder?.(values);\n }, [setValueOrder, valueOrderKey]);\n\n // Proximity hover\n const {\n activeIndex: hoveredIndex,\n setActiveIndex: setHoveredIndex,\n itemRects,\n handlers,\n registerItem,\n measureItems,\n } = useProximityHover(containerRef, { axis: \"x\" });\n\n // Register items: bridge from (index, value, el) → registerItem(index, el)\n const registerTab = useCallback(\n (index: number, _value: string, el: HTMLElement | null) => {\n registerItem(index, el);\n },\n [registerItem],\n );\n\n // Measure on children change\n useEffect(() => {\n measureItems();\n }, [measureItems, children]);\n\n // Remeasure on resize\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const ro = new ResizeObserver(() => measureItems());\n ro.observe(el);\n return () => ro.disconnect();\n }, [measureItems]);\n\n // Track mouse inside\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n isMouseInside.current = true;\n handlers.onMouseMove(e);\n },\n [handlers],\n );\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n handlers.onMouseLeave();\n }, [handlers]);\n\n // Focus ring\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const selectedValue = valueOrderCtx?.selectedValue;\n const selectedIdx = selectedValue !== undefined ? values.indexOf(selectedValue) : -1;\n\n useEffect(() => {\n setOptimisticIdx(selectedIdx >= 0 ? selectedIdx : null);\n }, [selectedIdx]);\n\n const activeSelectedIdx = optimisticIdx;\n const selectedRect = activeSelectedIdx !== null ? itemRects[activeSelectedIdx] : null;\n const hoverRect = hoveredIndex !== null ? itemRects[hoveredIndex] : null;\n const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;\n const isHoveringSelected = hoveredIndex === activeSelectedIdx;\n const isHovering = hoveredIndex !== null && !isHoveringSelected;\n\n // Auto-assign _index to children\n const indexedChildren = Children.map(children, (child, i) => {\n if (isValidElement(child)) {\n return cloneElement(child, { _index: i } as Record<string, unknown>);\n }\n return child;\n });\n\n return (\n <TabsListContext.Provider\n value={{\n registerTab,\n hoveredIndex,\n selectedValue,\n setOptimisticIdx,\n }}\n >\n <TabsPrimitive.List\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onFocus={(e) => {\n const trigger = (e.target as HTMLElement).closest('[role=\"tab\"]');\n if (!trigger) return;\n const indexAttr = trigger.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setHoveredIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n if (isMouseInside.current) return;\n setHoveredIndex(null);\n }}\n className={cn(\n \"relative inline-flex items-center gap-0.5 p-1 select-none bg-muted\",\n shape.container,\n className,\n )}\n {...props}\n >\n {/* Active segment indicator */}\n {selectedRect && (\n <motion.div\n className={cn(\n \"absolute pointer-events-none\",\n surfaceClasses(indicatorLevel),\n shape.bg,\n )}\n initial={false}\n animate={{\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: isHovering ? 0.85 : 1,\n }}\n transition={{\n ...spring.moderate,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n\n {/* Hover indicator */}\n <AnimatePresence>\n {hoverRect && !isHoveringSelected && selectedRect && (\n <motion.div\n className={cn(\"absolute pointer-events-none bg-hover\", shape.bg)}\n initial={{\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: 0,\n }}\n animate={{\n left: hoverRect.left,\n width: hoverRect.width,\n top: hoverRect.top,\n height: hoverRect.height,\n opacity: 0.4,\n }}\n exit={\n !isMouseInside.current && selectedRect\n ? {\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: 0,\n transition: {\n ...spring.moderate,\n opacity: { duration: 0.06 },\n },\n }\n : { opacity: 0, transition: spring.fast.exit }\n }\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={cn(\n \"absolute pointer-events-none z-20 border border-[#6B97FF]\",\n shape.focusRing,\n )}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {indexedChildren}\n </TabsPrimitive.List>\n </TabsListContext.Provider>\n );\n },\n);\n\nTabsList.displayName = \"TabsList\";\n\n/* ─────────────────────── TabItem ─────────────────────── */\n\ninterface TabItemProps extends ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> {\n /** Unique value for this tab. */\n value: string;\n /** Optional leading icon. */\n icon?: IconComponent;\n /** Text label. */\n label?: string;\n /** @internal Auto-assigned by TabsList. */\n _index?: number;\n}\n\nconst TabItem = forwardRef<HTMLButtonElement, TabItemProps>(\n ({ value, icon: Icon, label, children, _index = 0, className, ...props }, ref) => {\n const internalRef = useRef<HTMLButtonElement>(null);\n const { registerTab, hoveredIndex, selectedValue, setOptimisticIdx } = useTabsList();\n\n useEffect(() => {\n registerTab(_index, value, internalRef.current);\n return () => registerTab(_index, value, null);\n }, [_index, value, registerTab]);\n\n const isSelected = selectedValue === value;\n const isActive = hoveredIndex === _index || isSelected;\n\n return (\n <TabsPrimitive.Trigger\n onClick={() => setOptimisticIdx(_index)}\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n }}\n value={value}\n data-proximity-index={_index}\n className={cn(\n \"relative z-10 flex items-center gap-2 px-3 py-1.5 cursor-pointer bg-transparent border-none outline-none\",\n className,\n )}\n {...props}\n >\n {Icon && (\n <Icon\n size={16}\n strokeWidth={isActive ? 2 : 1.5}\n className={cn(\n \"transition-[color,stroke-width] duration-80\",\n isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n />\n )}\n <span className=\"inline-grid text-[13px] whitespace-nowrap\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label ?? children}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: isSelected ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label ?? children}\n </span>\n </span>\n </TabsPrimitive.Trigger>\n );\n },\n);\n\nTabItem.displayName = \"TabItem\";\n\n/* ─────────────────────── TabPanel ─────────────────────── */\n\ninterface TabPanelProps extends ComponentPropsWithoutRef<typeof TabsPrimitive.Content> {\n /** Must match a TabItem value. */\n value: string;\n}\n\nconst TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(({ className, ...props }, ref) => {\n return <TabsPrimitive.Content ref={ref} className={cn(\"outline-none\", className)} {...props} />;\n});\n\nTabPanel.displayName = \"TabPanel\";\n\n/* ─────────────────────── Exports ─────────────────────── */\n\nconst TabsTrigger = TabItem;\nconst TabsContent = TabPanel;\n\nexport { Tabs, TabsList, TabItem, TabPanel, TabsTrigger, TabsContent };\nexport type { TabsProps, TabsListProps, TabItemProps, TabPanelProps };\n","\"use client\";\n\nimport {\n useId,\n useRef,\n useState,\n useCallback,\n useEffect,\n createContext,\n useContext,\n forwardRef,\n type ReactNode,\n type HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { IconComponent } from \"../lib/icon-context\";\nimport { cn } from \"../lib/utils\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { useProximityHover } from \"../hooks/use-proximity-hover\";\n\ninterface TabsSubtleContextValue {\n registerTab: (index: number, element: HTMLElement | null) => void;\n hoveredIndex: number | null;\n selectedIndex: number;\n onSelect: (index: number) => void;\n idPrefix: string;\n activeLabel: boolean;\n}\n\nconst TabsSubtleContext = createContext<TabsSubtleContextValue | null>(null);\n\nfunction useTabsSubtle() {\n const ctx = useContext(TabsSubtleContext);\n if (!ctx) throw new Error(\"useTabsSubtle must be used within a TabsSubtle\");\n return ctx;\n}\n\ninterface TabsSubtleProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n children: ReactNode;\n selectedIndex: number;\n onSelect: (index: number) => void;\n idPrefix?: string;\n /** When true, only the selected tab shows its text label. Requires icons on tabs. */\n activeLabel?: boolean;\n}\n\nconst TabsSubtle = forwardRef<HTMLDivElement, TabsSubtleProps>(\n (\n {\n children,\n selectedIndex,\n onSelect,\n idPrefix: idPrefixProp,\n activeLabel = false,\n className,\n ...props\n },\n ref,\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const isMouseInside = useRef(false);\n const generatedId = useId();\n const shape = useShape();\n const idPrefix = idPrefixProp || generatedId;\n\n const {\n activeIndex: hoveredIndex,\n setActiveIndex: setHoveredIndex,\n itemRects: tabRects,\n handlers,\n registerItem,\n measureItems: measureTabs,\n } = useProximityHover(containerRef, { axis: \"x\" });\n\n // Track tab elements locally so we can observe their individual resizes\n const tabElementsRef = useRef(new Map<number, HTMLElement>());\n const registerTab = useCallback(\n (index: number, element: HTMLElement | null) => {\n registerItem(index, element);\n if (element) {\n tabElementsRef.current.set(index, element);\n } else {\n tabElementsRef.current.delete(index);\n }\n },\n [registerItem],\n );\n\n useEffect(() => {\n measureTabs();\n }, [measureTabs, children]);\n\n // Observe individual tab buttons for resize (label expand/collapse in activeLabel mode)\n useEffect(() => {\n const elements = tabElementsRef.current;\n if (elements.size === 0) return;\n const ro = new ResizeObserver(() => measureTabs());\n elements.forEach((el) => ro.observe(el));\n return () => ro.disconnect();\n }, [measureTabs, children]);\n\n // Wrap handlers to track isMouseInside\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n isMouseInside.current = true;\n handlers.onMouseMove(e);\n },\n [handlers],\n );\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n handlers.onMouseLeave();\n }, [handlers]);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const selectedRect = tabRects[selectedIndex];\n const hoverRect = hoveredIndex !== null ? tabRects[hoveredIndex] : null;\n const focusRect = focusedIndex !== null ? tabRects[focusedIndex] : null;\n const isHoveringSelected = hoveredIndex === selectedIndex;\n const isHovering = hoveredIndex !== null && !isHoveringSelected;\n\n return (\n <TabsSubtleContext.Provider\n value={{ registerTab, hoveredIndex, selectedIndex, onSelect, idPrefix, activeLabel }}\n >\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onFocus={(e) => {\n const indexAttr = (e.target as HTMLElement)\n .closest(\"[data-proximity-index]\")\n ?.getAttribute(\"data-proximity-index\");\n if (indexAttr != null) {\n const idx = Number(indexAttr);\n setHoveredIndex(idx);\n setFocusedIndex((e.target as HTMLElement).matches(\":focus-visible\") ? idx : null);\n }\n }}\n onBlur={(e) => {\n if (containerRef.current?.contains(e.relatedTarget as Node)) return;\n setFocusedIndex(null);\n if (isMouseInside.current) return;\n setHoveredIndex(null);\n }}\n onKeyDown={(e) => {\n const items = Array.from(\n containerRef.current?.querySelectorAll('[role=\"tab\"]') ?? [],\n ) as HTMLElement[];\n const currentIdx = items.indexOf(e.target as HTMLElement);\n if (currentIdx === -1) return;\n\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(e.key)) {\n e.preventDefault();\n const next = [\"ArrowRight\", \"ArrowDown\"].includes(e.key)\n ? (currentIdx + 1) % items.length\n : (currentIdx - 1 + items.length) % items.length;\n items[next].focus();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n }}\n className={cn(\n \"relative flex items-center gap-0.5 select-none overflow-x-auto max-w-full scrollbar-hide -my-1 py-1\",\n className,\n )}\n role=\"tablist\"\n {...props}\n >\n {/* Selected pill */}\n {selectedRect && (\n <motion.div\n className={cn(\"absolute bg-active pointer-events-none\", shape.bg)}\n initial={false}\n animate={{\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: isHovering ? 0.8 : 1,\n }}\n transition={{\n ...spring.moderate,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n\n {/* Hover pill */}\n <AnimatePresence>\n {hoverRect && !isHoveringSelected && selectedRect && (\n <motion.div\n className={cn(\"absolute bg-active pointer-events-none\", shape.bg)}\n initial={{\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: 0,\n }}\n animate={{\n left: hoverRect.left,\n width: hoverRect.width,\n top: hoverRect.top,\n height: hoverRect.height,\n opacity: 0.4,\n }}\n exit={\n !isMouseInside.current && selectedRect\n ? {\n left: selectedRect.left,\n width: selectedRect.width,\n top: selectedRect.top,\n height: selectedRect.height,\n opacity: 0,\n transition: { ...spring.moderate, opacity: { duration: 0.06 } },\n }\n : { opacity: 0, transition: spring.fast.exit }\n }\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {/* Focus ring */}\n <AnimatePresence>\n {focusRect && (\n <motion.div\n className={cn(\n \"absolute pointer-events-none z-20 border border-[#6B97FF]\",\n shape.focusRing,\n )}\n initial={false}\n animate={{\n left: focusRect.left - 2,\n top: focusRect.top - 2,\n width: focusRect.width + 4,\n height: focusRect.height + 4,\n }}\n exit={{ opacity: 0, transition: spring.fast.exit }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.08 },\n }}\n />\n )}\n </AnimatePresence>\n\n {children}\n </div>\n </TabsSubtleContext.Provider>\n );\n },\n);\n\nTabsSubtle.displayName = \"TabsSubtle\";\n\ninterface TabsSubtleItemProps extends HTMLAttributes<HTMLButtonElement> {\n icon?: IconComponent;\n label: string;\n index: number;\n}\n\nconst TabsSubtleItem = forwardRef<HTMLButtonElement, TabsSubtleItemProps>(\n ({ icon: Icon, label, index, className, ...props }, ref) => {\n const internalRef = useRef<HTMLButtonElement>(null);\n const shape = useShape();\n const { registerTab, hoveredIndex, selectedIndex, onSelect, idPrefix, activeLabel } =\n useTabsSubtle();\n\n useEffect(() => {\n registerTab(index, internalRef.current);\n return () => registerTab(index, null);\n }, [index, registerTab]);\n\n const isSelected = selectedIndex === index;\n const isActive = hoveredIndex === index || isSelected;\n const collapseLabel = activeLabel && !!Icon;\n const showLabel = !collapseLabel || isSelected;\n\n const labelContent = (\n <span className=\"inline-grid text-[13px] whitespace-nowrap\">\n <span\n className=\"col-start-1 row-start-1 invisible\"\n style={{ fontVariationSettings: fontWeights.semibold }}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n <span\n className={cn(\n \"col-start-1 row-start-1 transition-[color,font-variation-settings] duration-80\",\n isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n style={{\n fontVariationSettings: isSelected ? fontWeights.semibold : fontWeights.normal,\n }}\n >\n {label}\n </span>\n </span>\n );\n\n return (\n <button\n ref={(node) => {\n (internalRef as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n }}\n data-proximity-index={index}\n id={`${idPrefix}-tab-${index}`}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`${idPrefix}-panel-${index}`}\n aria-label={collapseLabel && !showLabel ? label : undefined}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => onSelect(index)}\n className={cn(\n \"relative z-10 flex items-center px-3 py-2 cursor-pointer bg-transparent border-none outline-none\",\n collapseLabel ? \"h-8\" : \"gap-2\",\n shape.bg,\n className,\n )}\n {...props}\n >\n {Icon && (\n <Icon\n size={16}\n strokeWidth={isActive ? 2 : 1.5}\n className={cn(\n \"shrink-0 transition-[color,stroke-width] duration-80\",\n isActive ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n />\n )}\n {collapseLabel ? (\n <AnimatePresence initial={false}>\n {showLabel && (\n <motion.span\n key=\"label\"\n className=\"overflow-hidden\"\n initial={{ width: 0, opacity: 0, marginLeft: 0 }}\n animate={{ width: \"auto\", opacity: 1, marginLeft: 8 }}\n exit={{ width: 0, opacity: 0, marginLeft: 0 }}\n transition={{\n ...spring.fast,\n opacity: { duration: 0.06 },\n }}\n >\n {labelContent}\n </motion.span>\n )}\n </AnimatePresence>\n ) : (\n labelContent\n )}\n </button>\n );\n },\n);\n\nTabsSubtleItem.displayName = \"TabsSubtleItem\";\n\ninterface TabsSubtlePanelProps extends HTMLAttributes<HTMLDivElement> {\n index: number;\n selectedIndex: number;\n idPrefix: string;\n children: ReactNode;\n}\n\nconst TabsSubtlePanel = forwardRef<HTMLDivElement, TabsSubtlePanelProps>(\n ({ index, selectedIndex, idPrefix, children, className, ...props }, ref) => {\n const isSelected = selectedIndex === index;\n\n return (\n <div\n ref={ref}\n id={`${idPrefix}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`${idPrefix}-tab-${index}`}\n hidden={!isSelected}\n tabIndex={-1}\n className={cn(\"outline-none\", className)}\n {...props}\n >\n {isSelected && children}\n </div>\n );\n },\n);\n\nTabsSubtlePanel.displayName = \"TabsSubtlePanel\";\n\nexport { TabsSubtle, TabsSubtleItem, TabsSubtlePanel };\nexport default TabsSubtle;\n","import * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { controlSurfaceClasses, focusRingClasses, motionClasses } from \"../lib/interaction\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex min-h-[80px] w-full rounded-md px-3 py-2\",\n \"body text-foreground placeholder:text-muted-foreground\",\n \"resize-none\",\n controlSurfaceClasses,\n motionClasses,\n focusRingClasses,\n \"focus-visible:border-brand-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","\"use client\";\n\nimport { forwardRef, useState, useEffect, type HTMLAttributes } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { fontWeights } from \"../lib/font-weight\";\n\nconst circleA =\n \"M 12 8 C 14.21 8 16 9.79 16 12 C 16 14.21 14.21 16 12 16 C 9.79 16 8 14.21 8 12 C 8 9.79 9.79 8 12 8 Z\";\n\nconst infinity =\n \"M 12 12 C 14 8.5 19 8.5 19 12 C 19 15.5 14 15.5 12 12 C 10 8.5 5 8.5 5 12 C 5 15.5 10 15.5 12 12 Z\";\n\nconst circleB =\n \"M 12 16 C 14.21 16 16 14.21 16 12 C 16 9.79 14.21 8 12 8 C 9.79 8 8 9.79 8 12 C 8 14.21 9.79 16 12 16 Z\";\n\nconst words = [\"Thinking\", \"Moonwalking\", \"Planning\", \"Refining\"];\n\ninterface ThinkingIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n /** Show the morphing circle⇄infinity glyph before the label. Set to `false`\n * for a text-only indicator (e.g. inline before a streamed reply). */\n showIcon?: boolean;\n}\n\nconst ThinkingIndicator = forwardRef<HTMLDivElement, ThinkingIndicatorProps>(\n ({ className, label, showIcon = true, ...props }, ref) => {\n const [index, setIndex] = useState(0);\n const currentLabel = label ?? words[index];\n\n useEffect(() => {\n const interval = setInterval(() => {\n setIndex((i) => (i + 1) % words.length);\n }, 4000);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={currentLabel}\n className={cn(\"flex items-center gap-2 px-3 py-2\", className)}\n {...props}\n >\n {showIcon && (\n <motion.svg\n aria-hidden\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-muted-foreground shrink-0\"\n >\n <motion.path\n animate={{\n d: [circleA, infinity, circleB, infinity, circleA],\n }}\n transition={{\n d: {\n duration: 6,\n ease: \"easeInOut\",\n repeat: Infinity,\n times: [0, 0.25, 0.5, 0.75, 1.0],\n },\n }}\n />\n </motion.svg>\n )}\n <span\n className=\"inline-grid text-[13px] overflow-hidden\"\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n <span className=\"col-start-1 row-start-1 invisible shimmer-text\" aria-hidden=\"true\">\n {\"\\u00a0\"}\n </span>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.span\n key={currentLabel}\n className=\"col-start-1 row-start-1 shimmer-text\"\n initial={{ y: \"80%\", opacity: 0 }}\n animate={{ y: 0, opacity: 1, transition: { duration: 0.24, ease: [0.4, 0, 0.2, 1] } }}\n exit={{\n y: \"-80%\",\n opacity: 0,\n transition: { duration: 0.16, ease: [0.4, 0, 0.2, 1] },\n }}\n >\n {currentLabel}\n </motion.span>\n </AnimatePresence>\n </span>\n </div>\n );\n },\n);\n\nThinkingIndicator.displayName = \"ThinkingIndicator\";\n\nexport { ThinkingIndicator };\nexport type { ThinkingIndicatorProps };\nexport default ThinkingIndicator;\n","\"use client\";\n\nimport { useRef, forwardRef, type ReactNode, type HTMLAttributes } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../lib/utils\";\nimport { useIcon } from \"../lib/icon-context\";\nimport type { IconName } from \"../lib/icon-context\";\nimport { spring } from \"../lib/springs\";\nimport { fontWeights } from \"../lib/font-weight\";\nimport { useShape } from \"../lib/shape-context\";\nimport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from \"./accordion\";\nimport { Badge } from \"./badge\";\nimport type { BadgeColor } from \"./badge\";\n\n// ─── ThinkingSteps (root) ───────────────────────────────────────────────────\n\ninterface ThinkingStepsProps extends HTMLAttributes<HTMLDivElement> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n steps?: Array<{\n label: string;\n status?: ThinkingStepStatus | \"current\";\n description?: string;\n }>;\n}\n\nconst ThinkingSteps = forwardRef<HTMLDivElement, ThinkingStepsProps>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n (\n {\n defaultOpen = true,\n open,\n onOpenChange,\n children,\n steps,\n className,\n defaultValue: _,\n ...props\n },\n ref,\n ) => {\n const controlled = open !== undefined;\n const content =\n children ??\n (steps ? (\n <>\n <ThinkingStepsHeader>Thinking</ThinkingStepsHeader>\n <ThinkingStepsContent>\n {steps.map((step, index) => (\n <ThinkingStep\n key={`${step.label}-${index}`}\n label={step.label}\n {...(step.description !== undefined ? { description: step.description } : {})}\n {...(step.status !== undefined\n ? { status: step.status === \"current\" ? \"active\" : step.status }\n : {})}\n index={index}\n isLast={index === steps.length - 1}\n />\n ))}\n </ThinkingStepsContent>\n </>\n ) : null);\n return (\n <Accordion\n ref={ref}\n type=\"single\"\n collapsible\n {...(controlled\n ? { value: open ? \"thinking\" : \"\" }\n : { defaultValue: defaultOpen ? \"thinking\" : \"\" })}\n {...(onOpenChange\n ? { onValueChange: (v: string | string[]) => onOpenChange(v === \"thinking\") }\n : {})}\n className={cn(\"w-80 max-w-full\", className)}\n {...props}\n >\n {/* Hide standalone accordion expanded bg */}\n <AccordionItem value=\"thinking\" className=\"[&>.absolute]:hidden\">\n {content}\n </AccordionItem>\n </Accordion>\n );\n },\n);\nThinkingSteps.displayName = \"ThinkingSteps\";\n\n// ─── ThinkingStepsHeader ────────────────────────────────────────────────────\n\ninterface ThinkingStepsHeaderProps extends HTMLAttributes<HTMLButtonElement> {\n children?: ReactNode;\n}\n\nconst ThinkingStepsHeader = forwardRef<HTMLButtonElement, ThinkingStepsHeaderProps>(\n ({ children = \"Thinking\", className, ...props }, ref) => {\n return (\n <div className=\"w-fit\">\n <AccordionTrigger\n ref={ref}\n className={cn(\"[&>span:first-child]:flex-none w-auto\", className)}\n {...props}\n >\n {children}\n </AccordionTrigger>\n </div>\n );\n },\n);\nThinkingStepsHeader.displayName = \"ThinkingStepsHeader\";\n\n// ─── ThinkingStepsContent ───────────────────────────────────────────────────\n\ninterface ThinkingStepsContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst ThinkingStepsContent = forwardRef<HTMLDivElement, ThinkingStepsContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <AccordionContent>\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {children}\n </div>\n </AccordionContent>\n );\n },\n);\nThinkingStepsContent.displayName = \"ThinkingStepsContent\";\n\n// ─── ThinkingStep ───────────────────────────────────────────────────────────\n\ntype ThinkingStepStatus = \"complete\" | \"active\" | \"pending\";\n\ninterface ThinkingStepProps {\n icon?: IconName;\n showIcon?: boolean;\n label: string;\n description?: string;\n status?: ThinkingStepStatus;\n index: number;\n delay?: number;\n isLast?: boolean;\n children?: ReactNode;\n className?: string;\n}\n\nfunction ThinkingStep({\n icon = \"dot\",\n showIcon = true,\n label,\n description,\n status = \"complete\",\n index,\n delay = 0,\n isLast = false,\n children,\n className,\n}: ThinkingStepProps) {\n const Icon = useIcon(icon);\n const shape = useShape();\n\n if (status === \"pending\") return null;\n\n const isActive = status === \"active\";\n\n return (\n /* Outer: animates height to create space smoothly */\n <motion.div\n className={cn(\"relative z-10 overflow-hidden\", className)}\n initial={{ height: 0 }}\n animate={{ height: \"auto\" }}\n transition={spring.slow}\n >\n {/* Inner: fades content in after space starts opening */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.24, delay: 0.08, ease: \"easeOut\" }}\n >\n {/* Content row — this is the proximity hover target */}\n <div className={cn(\"flex gap-2.5 px-2 py-1.5\", shape.item)}>\n {/* Icon column with continuous connector line */}\n <div className=\"flex flex-col items-center shrink-0 w-[14px]\">\n <div className=\"pt-0.5\">\n {showIcon ? (\n <Icon size={14} strokeWidth={1.5} className=\"text-muted-foreground\" />\n ) : (\n <div className=\"w-[14px] h-[14px] flex items-center justify-center\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-muted-foreground/60\" />\n </div>\n )}\n </div>\n {/* Line stretches from icon to bottom of this step */}\n {!isLast && <div className=\"flex-1 w-px bg-border/60 mt-1\" />}\n </div>\n\n {/* Text content */}\n <div className=\"flex-1 flex flex-col gap-1 min-w-0\">\n <span\n className={cn(\n \"text-[13px] leading-tight text-foreground\",\n isActive && \"shimmer-text\",\n )}\n style={{ fontVariationSettings: fontWeights.medium }}\n >\n {label}\n </span>\n {description && (\n <span className=\"text-[13px] text-muted-foreground leading-snug\">{description}</span>\n )}\n {children}\n </div>\n </div>\n </motion.div>\n </motion.div>\n );\n}\n\n// ─── ThinkingStepDetails (nested accordion) ────────────────────────────────\n\ninterface ThinkingStepDetailsProps {\n summary: string;\n details?: string[];\n defaultOpen?: boolean;\n children?: ReactNode;\n className?: string;\n}\n\nfunction ThinkingStepDetails({\n summary,\n details,\n defaultOpen = false,\n children,\n className,\n}: ThinkingStepDetailsProps) {\n const shape = useShape();\n\n return (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultOpen ? \"details\" : \"\"}\n className={cn(\"mt-1 -ml-3\", className)}\n >\n <AccordionItem value=\"details\" className=\"[&>.absolute]:hidden\">\n <div className=\"w-fit\">\n <AccordionTrigger\n className={cn(\"[&>span:first-child]:flex-none w-auto py-1 px-3 gap-1.5\", shape.item)}\n >\n {summary}\n </AccordionTrigger>\n </div>\n <AccordionContent>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {details?.map((item, i) => (\n <span key={i} className=\"text-[12px] text-muted-foreground leading-snug\">\n {item}\n </span>\n ))}\n {children}\n </div>\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n );\n}\n\n// ─── ThinkingStepSources ────────────────────────────────────────────────────\n\ninterface ThinkingStepSourcesProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nconst ThinkingStepSources = forwardRef<HTMLDivElement, ThinkingStepSourcesProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"flex flex-wrap gap-1.5 mt-1\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nThinkingStepSources.displayName = \"ThinkingStepSources\";\n\n// ─── ThinkingStepSource ─────────────────────────────────────────────────────\n\ninterface ThinkingStepSourceProps {\n color?: BadgeColor;\n delay?: number;\n children: ReactNode;\n className?: string;\n}\n\nfunction ThinkingStepSource({\n color = \"gray\",\n delay = 0,\n children,\n className,\n}: ThinkingStepSourceProps) {\n return (\n <motion.span\n initial={{ opacity: 0, scale: 0.85, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, scale: 1, filter: \"blur(0px)\" }}\n transition={{\n ...spring.moderate,\n delay,\n filter: { duration: 0.12, delay },\n }}\n >\n <Badge variant=\"solid\" size=\"sm\" color={color} className={className}>\n {children}\n </Badge>\n </motion.span>\n );\n}\nThinkingStepSource.displayName = \"ThinkingStepSource\";\n\n// ─── ThinkingStepImage ──────────────────────────────────────────────────────\n\ninterface ThinkingStepImageProps {\n src: string;\n alt?: string;\n caption?: string;\n delay?: number;\n className?: string;\n}\n\nfunction ThinkingStepImage({\n src,\n alt = \"\",\n caption,\n delay = 0,\n className,\n}: ThinkingStepImageProps) {\n const shape = useShape();\n return (\n <motion.div\n className={cn(\"mt-1.5\", className)}\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n transition={{\n opacity: { duration: 0.2, delay, ease: \"easeOut\" },\n filter: { duration: 0.15, delay },\n }}\n >\n <img\n src={src}\n alt={alt}\n className={cn(\"w-full max-w-[200px] object-cover\", shape.container)}\n />\n {caption && <span className=\"text-[11px] text-muted-foreground mt-1 block\">{caption}</span>}\n </motion.div>\n );\n}\nThinkingStepImage.displayName = \"ThinkingStepImage\";\n\n// ─── Exports ────────────────────────────────────────────────────────────────\n\nexport {\n ThinkingSteps,\n ThinkingStepsHeader,\n ThinkingStepsContent,\n ThinkingStep,\n ThinkingStepDetails,\n ThinkingStepSources,\n ThinkingStepSource,\n ThinkingStepImage,\n};\n\nexport type {\n ThinkingStepsProps,\n ThinkingStepsHeaderProps,\n ThinkingStepsContentProps,\n ThinkingStepProps,\n ThinkingStepDetailsProps,\n ThinkingStepSourcesProps,\n ThinkingStepSourceProps,\n ThinkingStepImageProps,\n ThinkingStepStatus,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"./card\";\nimport { CardHeading } from \"./card-heading\";\n\ninterface TitledCardProps {\n title?: string;\n subtitle?: string;\n children?: React.ReactNode;\n actionButtons?: React.ReactNode;\n icon?: React.ComponentType<{ className?: string }>;\n className?: string;\n contentClassName?: string;\n containerClassName?: string;\n titleClassName?: string;\n}\n\nfunction TitledCard({\n title,\n subtitle,\n children,\n actionButtons,\n icon: Icon,\n className,\n contentClassName,\n containerClassName,\n titleClassName,\n}: TitledCardProps) {\n const hasHeader = Boolean(title || subtitle || actionButtons);\n const canUseCardHeading = Boolean(title) && !actionButtons && !titleClassName;\n\n return (\n <Card\n className={cn(\n \"min-w-0 overflow-hidden border border-border bg-card shadow-natural\",\n \"max-sm:rounded-none max-sm:border-0 max-sm:bg-transparent max-sm:shadow-none\",\n containerClassName,\n className,\n )}\n data-slot=\"titled-card\"\n >\n {canUseCardHeading ? (\n <CardHeading\n title={title!}\n {...(subtitle ? { description: subtitle } : {})}\n className=\"max-sm:border-b-0 max-sm:px-0 max-sm:pb-3\"\n >\n {Icon && <Icon className=\"size-5 shrink-0 text-muted-foreground\" />}\n </CardHeading>\n ) : hasHeader ? (\n <CardHeader className=\"flex flex-col gap-3 border-b border-border p-4 max-sm:border-b-0 max-sm:px-0 max-sm:pb-3 sm:flex-row sm:items-start sm:justify-between sm:p-5\">\n <div className=\"min-w-0 flex-1\">\n {title && (\n <CardTitle\n className={cn(\n \"flex min-w-0 items-center gap-2 text-base leading-tight sm:text-lg\",\n titleClassName,\n )}\n >\n {Icon && <Icon className=\"size-5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 truncate\">{title}</span>\n </CardTitle>\n )}\n {subtitle && (\n <CardDescription className=\"mt-1 max-w-3xl text-sm leading-5\">\n {subtitle}\n </CardDescription>\n )}\n </div>\n {actionButtons && (\n <div className=\"flex w-full min-w-0 flex-wrap items-center gap-2 sm:w-auto sm:justify-end\">\n {actionButtons}\n </div>\n )}\n </CardHeader>\n ) : null}\n {children && (\n <CardContent\n className={cn(\n hasHeader ? \"p-4 sm:p-5\" : \"p-0 sm:p-5\",\n \"min-w-0 max-sm:px-0\",\n contentClassName,\n )}\n >\n {children}\n </CardContent>\n )}\n </Card>\n );\n}\n\nTitledCard.displayName = \"TitledCard\";\n\nexport { TitledCard, type TitledCardProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Toggle } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\n\nconst toggleVariants = cva(\n [\n \"inline-flex shrink-0 items-center justify-center gap-2\",\n \"body font-medium whitespace-nowrap rounded-md\",\n \"transition-[background-color,border-color,box-shadow,color,opacity,scale] duration-150 outline-none active:scale-[0.96]\",\n \"focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ],\n {\n variants: {\n variant: {\n default: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-muted data-[state=on]:text-foreground\",\n ],\n outline: [\n \"border border-border bg-card text-muted-foreground shadow-natural\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-muted data-[state=on]:text-foreground data-[state=on]:border-border\",\n ],\n brand: [\n \"bg-transparent text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground\",\n \"data-[state=on]:bg-brand-primary data-[state=on]:text-background\",\n ],\n },\n size: {\n sm: \"h-8 gap-1.5 px-3\",\n default: \"h-10 px-3\",\n lg: \"h-11 px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-11\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\ninterface ToggleProps\n extends React.ComponentPropsWithoutRef<typeof Toggle.Root>, VariantProps<typeof toggleVariants> {}\n\nconst ToggleRoot = React.forwardRef<React.ComponentRef<typeof Toggle.Root>, ToggleProps>(\n ({ className, variant, size, ...props }, ref) => (\n <Toggle.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size }), className)}\n {...props}\n />\n ),\n);\nToggleRoot.displayName = \"Toggle\";\n\nexport { ToggleRoot as Toggle, toggleVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ToggleGroup } from \"radix-ui\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/utils\";\nimport { toggleVariants } from \"./toggle\";\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: \"default\",\n variant: \"default\",\n});\n\nconst ToggleGroupRoot = React.forwardRef<\n React.ComponentRef<typeof ToggleGroup.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroup.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroup.Root\n ref={ref}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroup.Root>\n));\nToggleGroupRoot.displayName = \"ToggleGroup\";\n\nconst ToggleGroupItem = React.forwardRef<\n React.ComponentRef<typeof ToggleGroup.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroup.Item> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroup.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: variant ?? context.variant,\n size: size ?? context.size,\n }),\n className,\n )}\n {...props}\n />\n );\n});\nToggleGroupItem.displayName = \"ToggleGroupItem\";\n\nexport { ToggleGroupRoot as ToggleGroup, ToggleGroupItem };\n","import * as React from \"react\";\nimport { ArrowRight } from \"lucide-react\";\nimport { Callout } from \"./callout\";\nimport { Switch } from \"./switch\";\nimport { cn } from \"../lib/utils\";\n\nfunction normalizeUrlHandle(value: string): string {\n return String(value || \"\")\n .trim()\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction urlResourcePath(prefix: string, handle: string): string {\n const cleanPrefix = normalizeUrlHandle(prefix);\n const cleanHandle = normalizeUrlHandle(handle);\n if (!cleanPrefix || !cleanHandle) return \"\";\n return `/${cleanPrefix}/${cleanHandle}`;\n}\n\nfunction hasUrlHandleChanged(originalHandle?: string, nextHandle?: string): boolean {\n const original = normalizeUrlHandle(originalHandle || \"\");\n const next = normalizeUrlHandle(nextHandle || \"\");\n return Boolean(original && next && original !== next);\n}\n\ninterface UrlRedirectPromptProps {\n originalHandle?: string;\n nextHandle?: string;\n pathPrefix: string;\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n switchLabel?: string;\n className?: string;\n}\n\nfunction UrlRedirectPrompt({\n originalHandle,\n nextHandle,\n pathPrefix,\n checked,\n onCheckedChange,\n title = \"Create URL redirect\",\n description,\n switchLabel = \"Create URL redirect\",\n className,\n}: UrlRedirectPromptProps) {\n if (!hasUrlHandleChanged(originalHandle, nextHandle)) return null;\n\n const fromPath = urlResourcePath(pathPrefix, originalHandle || \"\");\n const toPath = urlResourcePath(pathPrefix, nextHandle || \"\");\n const calloutProps = className ? { className } : {};\n\n return (\n <Callout\n tone=\"warning\"\n compact\n icon={<ArrowRight aria-hidden=\"true\" />}\n title={title}\n actions={\n <Switch checked={checked} onCheckedChange={onCheckedChange} aria-label={switchLabel} />\n }\n {...calloutProps}\n >\n {description || (\n <p className=\"body-sm text-pretty text-muted-foreground\">\n Preserve search rankings and old links by redirecting{\" \"}\n <span className=\"font-mono text-foreground\">{fromPath}</span> to{\" \"}\n <span className=\"font-mono text-foreground\">{toPath}</span>.\n </p>\n )}\n </Callout>\n );\n}\n\nUrlRedirectPrompt.displayName = \"UrlRedirectPrompt\";\n\nexport {\n UrlRedirectPrompt,\n hasUrlHandleChanged,\n normalizeUrlHandle,\n urlResourcePath,\n};\nexport type { UrlRedirectPromptProps };\n"]}