@assure-one/design-system 0.14.0 → 0.16.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.
- package/dist/index.d.ts +220 -21
- package/dist/index.js +1103 -188
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/reference.ts","../src/tokens/system.ts","../src/lib/cn.ts","../src/primitives/icons.tsx","../src/primitives/accordion.tsx","../src/primitives/alert-dialog.tsx","../src/primitives/alert.tsx","../src/primitives/aspect-ratio.tsx","../src/primitives/avatar.tsx","../src/primitives/badge.tsx","../src/primitives/blockquote.tsx","../src/primitives/brand-icons.tsx","../src/primitives/breadcrumb.tsx","../src/primitives/button.tsx","../src/primitives/calendar.tsx","../src/primitives/card.tsx","../src/primitives/checkbox.tsx","../src/primitives/select.tsx","../src/primitives/client-select.tsx","../src/primitives/collapsible.tsx","../src/primitives/coming-soon.tsx","../src/primitives/dialog.tsx","../src/primitives/command-palette.tsx","../src/primitives/confirm-action-button.tsx","../src/primitives/context-menu.tsx","../src/primitives/copy-button.tsx","../src/primitives/date-utils.ts","../src/primitives/popover.tsx","../src/primitives/date-picker.tsx","../src/primitives/date-range-picker.tsx","../src/primitives/dismissible-chip.tsx","../src/primitives/dropdown-menu.tsx","../src/primitives/empty-state.tsx","../src/primitives/file-upload.tsx","../src/primitives/form-message.tsx","../src/primitives/form-section.tsx","../src/primitives/hover-card.tsx","../src/primitives/input.tsx","../src/primitives/keyboard-shortcuts-dialog.tsx","../src/primitives/label.tsx","../src/primitives/link-button.tsx","../src/primitives/skeleton.tsx","../src/primitives/loading-rows.tsx","../src/primitives/logo.tsx","../src/primitives/multi-filter-pill.tsx","../src/primitives/multi-select-field.tsx","../src/primitives/otp-input.tsx","../src/primitives/pagination.tsx","../src/lib/phone.ts","../src/primitives/phone-input.tsx","../src/primitives/priority-icon.tsx","../src/primitives/progress-bar.tsx","../src/primitives/progress-ring.tsx","../src/primitives/radio-group.tsx","../src/primitives/scroll-area.tsx","../src/hooks/use-debounce.ts","../src/primitives/search-input.tsx","../src/primitives/search-select.tsx","../src/primitives/section-header.tsx","../src/primitives/section.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/side-drawer.tsx","../src/primitives/slider.tsx","../src/primitives/star-rating.tsx","../src/primitives/stat.tsx","../src/primitives/status-icon.tsx","../src/primitives/stepper.tsx","../src/primitives/submit-button.tsx","../src/primitives/switch.tsx","../src/primitives/table.tsx","../src/primitives/tabs.tsx","../src/primitives/team-member-select.tsx","../src/primitives/textarea.tsx","../src/primitives/toast.tsx","../src/primitives/toggle-group.tsx","../src/primitives/tooltip.tsx","../src/primitives/visually-hidden.tsx","../src/composites/shell.tsx","../src/composites/sidebar.tsx","../src/composites/sidebar-brand-switcher.tsx","../src/composites/app-header.tsx","../src/composites/page-header.tsx","../src/composites/metadata-grid.tsx","../src/composites/kpi-card.tsx","../src/composites/data-table.tsx","../src/composites/detail.tsx","../src/composites/activity-list.tsx","../src/composites/kanban.tsx","../src/composites/message-bubble.tsx","../src/composites/message-composer.tsx","../src/composites/notification-panel.tsx","../src/composites/toolbar.tsx","../src/composites/intent-actions.tsx","../src/composites/intent-atoms.tsx"],"names":["React","Accordion","jsx","AccordionItem","AccordionTrigger","jsxs","AccordionContent","React2","forwardRef","Alert","AlertTitle","AlertDescription","React3","AspectRatio","cva","React4","Avatar","Badge","Blockquote","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","Button","React5","Icon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","CardAction","React6","Checkbox","React7","React9","Collapsible","CollapsibleTrigger","CollapsibleContent","ComingSoon","React10","React11","DialogPrimitive2","CommandPrimitive","React12","React13","CopyButton","useState","useCallback","React14","useEffect","DatePicker","iso","useId","DateRangePicker","useMemo","useRef","useImperativeHandle","DayPicker","React15","DismissibleChip","React16","EmptyState","Fragment","FormSection","React17","Input","kbdClass","React18","Label","React19","LinkButton","Skeleton","SkeletonText","SkeletonCircle","LoadingRows","Link","Image","React21","OTPInputRoot","Pagination","PhoneInput","ProgressBar","ProgressRing","RadioGroup","React23","RadioGroupItem","React24","ScrollArea","ScrollBar","React25","SearchInput","React26","Section","SectionHead","Separator","React27","React28","SheetPrimitive","DialogPrimitive3","React30","Slider","StarRating","Stat","Stepper","SubmitButton","React31","Switch","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","React32","Tabs","TabsList","TabsTrigger","TabsContent","React33","Textarea","createContext","React34","ToggleGroup","ToggleGroupItem","React35","VisuallyHidden","Shell","Main","Content","Sidebar","SidebarTrigger","SidebarPinButton","SidebarBrand","SidebarBrandText","SidebarSection","SidebarLink","Slot","SidebarLinkLabel","SidebarLinkAction","SidebarLinkBadge","SidebarLinkGroup","SidebarFooter","SidebarUser","React37","SidebarBrandSwitcher","AppHeader","AppHeaderBreadcrumb","AppHeaderTitle","AppHeaderSearch","AppHeaderActions","PageHeader","PageHeaderSpec","PageHeaderSep","MetadataGrid","KpiCard","DataTable","DataTableToolbar","DataTableSearch","DataTableSpacer","DataTableResultsCount","DataTableHead","DataTableBody","DataTableRow","DataTableHeader","DataTableCell","DataTableCellName","DataTableCellMono","DataTableCellId","DataTableCellDue","DataTableCheckbox","DataTablePagination","DetailGrid","DetailSpine","DetailSpineHeader","DetailSpineSection","DetailSpineStats","DetailMain","ActivityList","ActivityItem","ActivityEventItem","Kanban","KanbanColumn","KanbanCard","MessageBubble","MessageBubbleTombstone","MessageBubbleAction","MessageComposer","NotificationPanel","NotificationPanelHeader","NotificationFilter","NotificationList","NotificationItem","Toolbar","FilterChip","PrimaryAction","SecondaryAction","DangerAction","IconAction","LinkAction","Numeric","MutedSpec","Eyebrow","KbdHint"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Reference tokens — raw palette.\n *\n * Programmatic access for theme switching, Figma sync, design tools, etc.\n * Components should NOT consume these directly; use system tokens (./system.ts)\n * or the CSS variables in ./tokens.css.\n */\n\nexport const colors = {\n /* Surfaces */\n bg: \"#FDFDFC\",\n bg2: \"#F7F7F5\",\n bg3: \"#F0F0ED\",\n surface: \"#FFFFFF\",\n surface2: \"#FAFAF8\",\n\n /* Foreground */\n fg: \"#0A0A0A\",\n fg2: \"#38383B\",\n fg3: \"#6B6B70\",\n fg4: \"#9A9AA0\",\n fg5: \"#C4C4C8\",\n\n /* Rules */\n rule: \"#EAEAE6\",\n ruleSoft: \"#F0F0EC\",\n ruleStrong: \"#DADAD4\",\n\n /* Accent (cyan) */\n accent: \"#0066FF\",\n accent2: \"#0052CC\",\n accentTint: \"#E8F0FF\",\n accentHover: \"#005BE6\",\n accentActive: \"#004FCC\",\n\n /* Pro (purple) */\n proBg: \"#F4F1FF\",\n proBgHover: \"#EEE9FF\",\n proBgActive: \"#E4DDFF\",\n proFg: \"#6C42F8\",\n proHover: \"#5E35F2\",\n proActive: \"#5127E8\",\n proDisabled: \"#B7A7F3\",\n proLine: \"#7B5BD8\",\n\n /* Disabled */\n fgDisabled: \"#A7A7AC\",\n bgDisabled: \"#F3F3F1\",\n\n /* Status */\n successFg: \"#1F7A3D\",\n successBg: \"#EAF6EE\",\n successLine: \"#C5E5CF\",\n warningFg: \"#B45F0A\",\n warningBg: \"#FFF3E5\",\n warningLine: \"#F5D5A8\",\n dangerFg: \"#C43838\",\n dangerBg: \"#FBEAEA\",\n dangerLine: \"#ECC5C5\",\n\n /* On-brand */\n fgOnAccent: \"#FFFFFF\",\n fgOnPro: \"#FFFFFF\",\n} as const;\n\nexport const typography = {\n family: {\n display: '\"Geist\", \"Inter\", -apple-system, system-ui, sans-serif',\n body: '\"Inter\", -apple-system, system-ui, sans-serif',\n mono: '\"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace',\n },\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n /* Universal entrance ease — applies to every motion primitive */\n ease: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n} as const;\n\nexport const radii = {\n btn: \"7px\",\n input: \"7px\",\n pill: \"5px\",\n card: \"12px\",\n icon: \"4px\",\n full: \"9999px\",\n} as const;\n\nexport const shadows = {\n quiet: \"0 1px 2px rgba(10,10,10,0.03)\",\n card: \"0 12px 28px -16px rgba(10,10,10,0.18), 0 1px 2px rgba(10,10,10,0.04)\",\n pop: \"0 30px 80px -30px rgba(10,10,10,0.18), 0 8px 24px -8px rgba(10,10,10,0.06)\",\n focusRing: \"0 0 0 2px rgba(0, 102, 255, 0.18)\",\n} as const;\n\nexport const overlays = {\n hover: \"rgba(10, 10, 10, 0.03)\",\n active: \"rgba(10, 10, 10, 0.05)\",\n} as const;\n\nexport const layout = {\n shellSidebarWidth: \"256px\",\n shellHeaderHeight: \"56px\",\n contentPad: \"32px\",\n} as const;\n\n/**\n * Spacing — 4px base scale. Components mostly use arbitrary values;\n * this scale is exposed for programmatic access (e.g. design-tool sync).\n */\nexport const spacing = {\n unit: \"4px\",\n 4: \"4px\",\n 8: \"8px\",\n 12: \"12px\",\n 16: \"16px\",\n 20: \"20px\",\n 24: \"24px\",\n 28: \"28px\",\n 32: \"32px\",\n 36: \"36px\",\n 40: \"40px\",\n 64: \"64px\",\n 80: \"80px\",\n 180: \"180px\",\n} as const;\n\n/**\n * Surface palette — the four canonical layers. Mirrors --color-bg / -2 /\n * --color-surface / --color-surface-2.\n */\nexport const surfaces = {\n bg: \"#FDFDFC\",\n bg2: \"#F7F7F5\",\n surface: \"#FFFFFF\",\n surface2: \"#FAFAF8\",\n} as const;\n\nexport const motion = {\n ease: {\n outQuart: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n out: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n in: \"cubic-bezier(0.7, 0, 0.84, 0)\",\n inOut: \"cubic-bezier(0.65, 0, 0.35, 1)\",\n },\n duration: {\n instant: \"100ms\",\n fast: \"150ms\",\n normal: \"250ms\",\n slow: \"400ms\",\n },\n} as const;\n\nexport const reference = {\n colors,\n typography,\n radii,\n shadows,\n overlays,\n layout,\n motion,\n spacing,\n surfaces,\n} as const;\n\nexport type ReferenceTokens = typeof reference;\nexport type ColorName = keyof typeof colors;\n","/**\n * System tokens — suite semantic mappings as CSS variable references.\n *\n * Use these from JS (e.g. inline styles, Storybook decorators, motion configs)\n * when you can't use a Tailwind utility class. Component CSS should prefer the\n * generated utilities (`bg-bg`, `text-fg-2`, `border-rule`, `bg-pro-fg`, etc.)\n * which Tailwind 4 emits from `--color-*` tokens declared in ./tokens.css.\n *\n * Themes (.dark) re-map the underlying CSS variables; these references stay valid.\n */\n\nexport const systemTokens = {\n color: {\n /* Surfaces */\n bg: \"var(--color-bg)\",\n bg2: \"var(--color-bg-2)\",\n bg3: \"var(--color-bg-3)\",\n surface: \"var(--color-surface)\",\n surface2: \"var(--color-surface-2)\",\n\n /* Foreground */\n fg: \"var(--color-fg)\",\n fg2: \"var(--color-fg-2)\",\n fg3: \"var(--color-fg-3)\",\n fg4: \"var(--color-fg-4)\",\n fg5: \"var(--color-fg-5)\",\n\n /* Rules */\n rule: \"var(--color-rule)\",\n ruleSoft: \"var(--color-rule-soft)\",\n ruleStrong: \"var(--color-rule-strong)\",\n\n /* Accent (cyan) */\n accent: \"var(--color-accent)\",\n accent2: \"var(--color-accent-2)\",\n accentTint: \"var(--color-accent-tint)\",\n accentHover: \"var(--color-accent-hover)\",\n accentActive: \"var(--color-accent-active)\",\n accentRing: \"var(--color-accent-ring)\",\n\n /* Pro (purple) */\n proBg: \"var(--color-pro-bg)\",\n proBgHover: \"var(--color-pro-bg-hover)\",\n proBgActive: \"var(--color-pro-bg-active)\",\n proFg: \"var(--color-pro-fg)\",\n proHover: \"var(--color-pro-hover)\",\n proActive: \"var(--color-pro-active)\",\n proDisabled: \"var(--color-pro-disabled)\",\n proLine: \"var(--color-pro-line)\",\n proRing: \"var(--color-pro-ring)\",\n\n /* On-brand */\n fgOnAccent: \"var(--color-fg-on-accent)\",\n fgOnPro: \"var(--color-fg-on-pro)\",\n\n /* Disabled */\n fgDisabled: \"var(--color-fg-disabled)\",\n bgDisabled: \"var(--color-bg-disabled)\",\n\n /* Overlays */\n overlayHover: \"var(--color-overlay-hover)\",\n overlayActive: \"var(--color-overlay-active)\",\n\n /* Status */\n successFg: \"var(--color-success-fg)\",\n successBg: \"var(--color-success-bg)\",\n successLine: \"var(--color-success-line)\",\n warningFg: \"var(--color-warning-fg)\",\n warningBg: \"var(--color-warning-bg)\",\n warningLine: \"var(--color-warning-line)\",\n dangerFg: \"var(--color-danger-fg)\",\n dangerBg: \"var(--color-danger-bg)\",\n dangerLine: \"var(--color-danger-line)\",\n },\n\n shadow: {\n quiet: \"var(--shadow-quiet)\",\n card: \"var(--shadow-card)\",\n pop: \"var(--shadow-pop)\",\n focusRing: \"var(--shadow-focus-ring)\",\n },\n\n radius: {\n btn: \"var(--radius-btn)\",\n input: \"var(--radius-input)\",\n pill: \"var(--radius-pill)\",\n card: \"var(--radius-card)\",\n icon: \"var(--radius-icon)\",\n full: \"var(--radius-full)\",\n },\n\n type: {\n family: {\n display: \"var(--font-display)\",\n body: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n weight: {\n regular: \"var(--font-weight-regular)\",\n medium: \"var(--font-weight-medium)\",\n semibold: \"var(--font-weight-semibold)\",\n bold: \"var(--font-weight-bold)\",\n },\n },\n\n motion: {\n ease: {\n outQuart: \"var(--ease-out-quart)\",\n out: \"var(--ease-out)\",\n in: \"var(--ease-in)\",\n inOut: \"var(--ease-in-out)\",\n },\n duration: {\n instant: \"var(--duration-instant)\",\n fast: \"var(--duration-fast)\",\n normal: \"var(--duration-normal)\",\n slow: \"var(--duration-slow)\",\n },\n },\n\n layout: {\n shellSidebarWidth: \"var(--shell-sidebar-w)\",\n shellSidebarRailWidth: \"var(--shell-sidebar-w-rail)\",\n shellHeaderHeight: \"var(--shell-header-h)\",\n contentPad: \"var(--content-pad)\",\n },\n\n z: {\n base: \"var(--z-base)\",\n dropdown: \"var(--z-dropdown)\",\n sticky: \"var(--z-sticky)\",\n overlay: \"var(--z-overlay)\",\n modal: \"var(--z-modal)\",\n toast: \"var(--z-toast)\",\n tooltip: \"var(--z-tooltip)\",\n },\n} as const;\n\nexport type SystemTokens = typeof systemTokens;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../lib/cn\";\n\ninterface IconProps extends React.SVGAttributes<SVGElement> {\n size?: number;\n}\n\nfunction Icon({\n size = 24,\n className,\n children,\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {children}\n </svg>\n );\n}\n\nexport function DocumentIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n fill=\"currentColor\"\n opacity=\"0.2\"\n />\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M8 13h8M8 17h8M8 9h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowRightIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 12h14M12 5l7 7-7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function StarIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2l2.09 6.26L20.18 9l-5 4.36L16.82 20 12 16.77 7.18 20l1.64-6.64-5-4.36 6.09-.74L12 2z\"\n fill=\"currentColor\"\n />\n </Icon>\n );\n}\n\nexport function SparkleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2l2.09 6.26L20.18 9l-5 4.36L16.82 20 12 16.77 7.18 20l1.64-6.64-5-4.36 6.09-.74L12 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChatBubbleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2v10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LightningIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UsersIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FileTextIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M16 13H8M16 17H8M10 9H8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ShieldIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MenuIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12h18M3 6h18M3 18h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CloseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function CheckIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 6L9 17l-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutDashboardIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"9\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"12\" width=\"7\" height=\"9\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"16\" width=\"7\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function BuildingIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 22V4a2 2 0 012-2h8a2 2 0 012 2v18M2 22h20M10 6h4M10 10h4M10 14h4M10 18h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MapPinIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 1116 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"10\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function FileReturnIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M9 15l3-3 3 3M12 12v6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ClipboardCheckIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M9 14l2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderOpenIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2l-2.5-7a2 2 0 00-2-1.5H5.5A2 2 0 003.5 10L2 17a2 2 0 002 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ReceiptIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M4 2v20l3-2 3 2 3-2 3 2 3-2 3 2V2l-3 2-3-2-3 2-3-2-3 2-3-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M8 10h8M8 14h4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function CalendarIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 2v4M8 2v4M3 10h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BarChartIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 20V10M18 20V4M6 20v-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SettingsIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PanelLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9 3v18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function PanelLeftCloseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9 3v18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M15 9l-3 3 3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SunIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TeamIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 21v-2a4 4 0 00-4-4H10a4 4 0 00-4 4v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"7\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M22 11h-4M20 9v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function MoonIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PaletteIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"13.5\" cy=\"6.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"17.5\" cy=\"10.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"8.5\" cy=\"7.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"6.5\" cy=\"12.5\" r=\"1.5\" fill=\"currentColor\" />\n <path\n d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.93 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.04-.23-.29-.38-.63-.38-1.04 0-.83.67-1.5 1.5-1.5H16c3.31 0 6-2.69 6-6 0-5.5-4.5-9.92-10-9.92z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MailIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M22 7l-10 6L2 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function GlobeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BellIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 8A6 6 0 106 8c0 7-3 9-3 9h18s-3-2-3-9zM13.73 21a2 2 0 01-3.46 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function WorkflowIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"15\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"9\" y=\"15\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 9v3a3 3 0 003 3h6a3 3 0 003-3V9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path d=\"M12 12v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function LinkIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function KeyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 11-7.778 7.778 5.5 5.5 0 017.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SearchIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M21 21l-4.35-4.35\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function LogOutIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TagIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12.586 2.586A2 2 0 0011.172 2H4a2 2 0 00-2 2v7.172a2 2 0 00.586 1.414l8.704 8.704a2.426 2.426 0 003.42 0l6.58-6.58a2.426 2.426 0 000-3.42z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </Icon>\n );\n}\n\nexport function SendIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14.536 21.686a.5.5 0 00.937-.024l6.5-19a.496.496 0 00-.635-.635l-19 6.5a.5.5 0 00-.024.937l7.93 3.18a2 2 0 011.112 1.11z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M21.854 2.147l-10.94 10.939\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TrashIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 6h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Link2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 17H7A5 5 0 017 7h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 7h2a5 5 0 110 10h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"8\"\n x2=\"16\"\n y1=\"12\"\n y2=\"12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m18 15-6-6-6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m6 9 6 6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PlusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 5v14M5 12h14\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UserCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 20.662V19a2 2 0 012-2h6a2 2 0 012 2v1.662\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PencilIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PhoneIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderClosedIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 20a2 2 0 002-2V8a2 2 0 00-2-2h-7.9a2 2 0 01-1.69-.9L9.6 3.9A2 2 0 007.93 3H4a2 2 0 00-2 2v13a2 2 0 002 2h16z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UploadIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function DownloadIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MoreHorizontalIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </Icon>\n );\n}\n\nexport function ChevronRightIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m9 18 6-6-6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m15 18-6-6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FileIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function RotateCcwIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12a9 9 0 109-9 9.75 9.75 0 00-6.74 2.74L3 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3 3v5h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function EyeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7S2 12 2 12z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function ClockIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 6v6h4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutListIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M14 4h7M14 9h7M14 15h7M14 20h7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutGridIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function LockIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 11V7a5 5 0 0110 0v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderPlusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 20a2 2 0 002-2V8a2 2 0 00-2-2h-7.9a2 2 0 01-1.69-.9L9.6 3.9A2 2 0 007.93 3H4a2 2 0 00-2 2v13a2 2 0 002 2h16z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 10v6M9 13h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MoveIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 9l-3 3 3 3M9 5l3-3 3 3M15 19l-3 3-3-3M19 9l3 3-3 3M2 12h20M12 2v20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LockKeyholeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n <rect x=\"3\" y=\"10\" width=\"18\" height=\"12\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 10V7a5 5 0 0110 0v3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PaperclipIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function AtSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 8v5a3 3 0 006 0v-1a10 10 0 10-4 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ZoomInIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M21 21l-4.35-4.35M11 8v6M8 11h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ZoomOutIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M21 21l-4.35-4.35M8 11h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function XIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function MessageCircleWarningIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 8v4M12 16h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FlagIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1zM4 22v-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LockOpenIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect\n width=\"18\"\n height=\"11\"\n x=\"3\"\n y=\"11\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M7 11V7a5 5 0 0 1 9.9-1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MessageCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PenSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 3a2.83 2.83 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CopyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n />\n <path\n d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n />\n </Icon>\n );\n}\n\nexport function MonitorIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M8 21h8M12 17v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SmartphoneIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 18h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function AlertTriangleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"12\"\n y1=\"9\"\n x2=\"12\"\n y2=\"13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"12\"\n y1=\"17\"\n x2=\"12.01\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowRightSmallIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 12h14M12 5l7 7-7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CreditCardIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 10h18\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path d=\"M7 15h3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\n/* ─── Icons added in 0.3.0 — single-source migration off lucide-react ────\n * Visual fidelity preserved by porting lucide-react's SVG paths into the\n * catalog's shared `<Icon>` wrapper (24×24 viewBox + currentColor +\n * strokeWidth=1.5 baseline). Names keep the lucide convention with the\n * catalog's `Icon` suffix appended so they compose with the rest of the\n * catalog (e.g. lucide `<Check />` → catalog `<CheckIcon />`).\n * ────────────────────────────────────────────────────────────────────── */\n\nexport function AlertCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 8v4M12 16h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 5v14M19 12l-7 7-7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 19V5M5 12l7-7 7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BriefcaseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Building2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 22V4a2 2 0 012-2h8a2 2 0 012 2v18Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 12H4a2 2 0 00-2 2v6a2 2 0 002 2h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 9h2a2 2 0 012 2v9a2 2 0 01-2 2h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 6h4M10 10h4M10 14h4M10 18h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CheckCircle2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"m9 12 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronsUpDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m7 15 5 5 5-5M7 9l5-5 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function CircleDotIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </Icon>\n );\n}\n\nexport function CommandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 3a3 3 0 00-3 3v12a3 3 0 003 3 3 3 0 003-3 3 3 0 00-3-3H6a3 3 0 00-3 3 3 3 0 003 3 3 3 0 003-3V6a3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3h12a3 3 0 003-3 3 3 0 00-3-3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CornerDownLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m9 10-5 5 5 5M20 4v7a4 4 0 01-4 4H4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function EyeOffIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9.88 9.88a3 3 0 104.24 4.24M10.73 5.08A10.43 10.43 0 0112 5c7 0 10 7 10 7a13.16 13.16 0 01-1.67 2.68M6.61 6.61A13.526 13.526 0 002 12s3 7 10 7a9.74 9.74 0 005.39-1.61M2 2l20 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function HomeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m3 9 9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 22V12h6v10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function InboxIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M22 12h-6l-2 3h-4l-2-3H2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.45 5.11 2 12v6a2 2 0 002 2h16a2 2 0 002-2v-6l-3.45-6.89A2 2 0 0016.76 4H7.24a2 2 0 00-1.79 1.11Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListChecksIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m3 17 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"m3 7 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13 6h8M13 12h8M13 18h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MinusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M5 12h14\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function SlashIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M22 2 2 22\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function SparklesIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m12 3-1.91 5.79a2 2 0 01-1.3 1.3L3 12l5.79 1.91a2 2 0 011.3 1.3L12 21l1.91-5.79a2 2 0 011.3-1.3L21 12l-5.79-1.91a2 2 0 01-1.3-1.3L12 3Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5 3v4M3 5h4M19 17v4M17 19h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Trash2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path\n d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"10\"\n y1=\"11\"\n x2=\"10\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"14\"\n y1=\"11\"\n x2=\"14\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UserIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"7\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Round 10 additions — 17 net-additive exports\n * grouped by tier. Same 24-grid / currentColor / stroke-1.5 baseline as\n * the rest of the catalog. Brand icons (Google, Microsoft) are the only\n * exception: multi-color paths with explicit fills, contract documented\n * on each export.\n * ─────────────────────────────────────────────────────────────────────── */\n\n// Tier A — rich-text editor toolbar (Bold uses the canonical stroke-2 lucide\n// path because the lobes need the heavier weight to read at editor-bar size).\n\nexport function BoldIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6zM6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ItalicIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 4h-9M14 20H5M15 4L9 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UnderlineIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3M4 21h16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function StrikethroughIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M16 4H9a3 3 0 000 6h6a3 3 0 010 6H8M4 12h16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListOrderedIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10 6h11M10 12h11M10 18h11\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4 6h1v4M3 10h3M6 18H3l3-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier B — semantic gaps (Info, HelpCircle, DollarSign, Reply). InfoIcon\n// is intentionally the inverse-glyph sibling of AlertCircleIcon: same\n// circle, dot up + line down (lowercase \"i\") vs. line up + dot down\n// (exclamation). Consumers had been conflating the two.\n\nexport function InfoIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 16v-4M12 8h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function HelpCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3M12 17h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function DollarSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2v20M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ReplyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 17l-5-5 5-5M4 12h12a4 4 0 010 8h-1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier C — view-switcher trio. WorkflowIcon already in catalog;\n// LayoutGridIcon / LayoutListIcon kept untouched per ask.\n\nexport function KanbanIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"10\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"17\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function TableIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9h18M3 15h18M9 3v18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier D — misc. SortAsc ask intentionally NOT added: same glyph as the\n// existing ArrowUpIcon (M12 19V5 M5 12l7-7 7 7 ≡ M12 5v14 M5 12l7-7 7 7).\n// Consumer rotates ArrowUpIcon 180° for descending — same as the original\n// SortAsc plan would have required.\n\nexport function HistoryIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8M3 3v5h5M12 7v5l4 2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SaveIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 21H5a2 2 0 01-2-2V5a2 2 0 012-2h11l5 5v11a2 2 0 01-2 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 21v-8H7v8M7 3v5h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n/**\n * LoaderIcon — animated spinner. Render with `className=\"animate-spin\"`\n * (or `motion-safe:animate-spin` if you want to respect `prefers-reduced-\n * motion`; the catalog doesn't gate this itself because the spinner IS\n * the indicator for many flows).\n *\n * Visual contract: a dim full-circle ring + a brighter quarter-arc on top.\n * When rotated, the bright arc creates the \"leading edge\" of the spinner.\n */\nexport function LoaderIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity={0.25}\n />\n <path\n d=\"M4 12a8 8 0 018-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier E — brand icons (multi-color, brand-locked). These DO NOT respond\n// to `currentColor` or `color-*` token classes — that's by design. Use\n// only inside OAuth buttons, integration chips, and provider-list UIs.\n// All other \"icon\" usages should stay in the semantic catalog above.\n// Suffixed `BrandIcon` to make the different contract obvious at the\n// call site.\n\n/**\n * GoogleBrandIcon — Google four-color \"G\" mark. Brand-locked colors,\n * does NOT respond to currentColor. Use only in provider-list UIs\n * (OAuth buttons, integration chips). Standard 24-grid.\n */\nexport function GoogleBrandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fill=\"#4285F4\"\n d=\"M22 12.27c0-.71-.06-1.4-.18-2.07H12v3.93h5.59a4.78 4.78 0 01-2.07 3.14v2.6h3.34c1.95-1.8 3.08-4.45 3.08-7.6z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 22.5c2.81 0 5.16-.93 6.88-2.52l-3.34-2.6c-.93.62-2.11.99-3.54.99-2.72 0-5.03-1.84-5.86-4.31H2.69v2.69A10.5 10.5 0 0012 22.5z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M6.14 14.06A6.3 6.3 0 015.8 12c0-.71.12-1.4.34-2.06V7.25H2.69A10.5 10.5 0 001.5 12c0 1.7.41 3.3 1.19 4.75l3.45-2.69z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.63c1.53 0 2.91.53 4 1.56l3-3C17.16 2.47 14.8 1.5 12 1.5A10.5 10.5 0 002.69 7.25l3.45 2.69C7 7.47 9.28 5.63 12 5.63z\"\n />\n </Icon>\n );\n}\n\n/**\n * MicrosoftBrandIcon — Microsoft four-square mark in red / green / blue /\n * yellow. Brand-locked colors, does NOT respond to currentColor. Use\n * inside Microsoft OAuth signin buttons, Outlook / Office integration\n * chips, and similar provider-list UIs. Standard 24-grid (10×10 squares\n * with 2u gaps).\n */\nexport function MicrosoftBrandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill=\"#F25022\" />\n <rect x=\"13\" y=\"1\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <rect x=\"1\" y=\"13\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <rect x=\"13\" y=\"13\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </Icon>\n );\n}\n\n/**\n * FilterIcon — funnel mark used for filter popover triggers across list\n * pages (clients, workflow, billing, organizers…). Renders the same\n * lucide-style polygon at any size; pair with a corner notification dot\n * to surface active filter count.\n */\nexport function FilterIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 4h18l-7 8v6l-4 2v-8L3 4z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Solid status icons — filled glyphs with knockout symbols (the symbol is a\n * hole, so whatever sits behind shows through). Built for status chips and\n * toasts where a thin outline reads as weak at small sizes. The four severities\n * carry distinct *shapes* (circle-check / circle-x / triangle / circle-i) so\n * meaning survives without colour (WCAG 1.4.1).\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport function CheckCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 0 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"\n />\n </Icon>\n );\n}\n\nexport function XCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M12 2.25C6.615 2.25 2.25 6.615 2.25 12s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 0 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z\"\n />\n </Icon>\n );\n}\n\nexport function AlertTriangleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n />\n </Icon>\n );\n}\n\nexport function InfoCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.342l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.341l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n />\n </Icon>\n );\n}\n\n// Trend arrows for KPI deltas — diagonal line + corner arrowhead. Pair with\n// a sign-coloured chip (success / danger) on KpiCard's `delta`.\nexport function TrendingUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 17l6.5-6.5 5 5L22 7M16 7h6v6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TrendingDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 7l6.5 6.5 5-5L22 17M16 17h6v-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronDownIcon } from \"./icons\";\n/* -------------------------------------------------------------------------- */\n/* Accordion root */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\n\nexport const Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionProps\n>(function Accordion({ className, ...props }, ref) {\n return (\n <AccordionPrimitive.Root\n ref={ref}\n className={cn(\"divide-rule divide-y\", className)}\n {...props}\n />\n );\n});\nAccordion.displayName = AccordionPrimitive.Root.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionItem */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\n\nexport const AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemProps\n>(function AccordionItem({ className, ...props }, ref) {\n return <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />;\n});\nAccordionItem.displayName = AccordionPrimitive.Item.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionTrigger */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\n\nexport const AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerProps\n>(function AccordionTrigger({ children, className, ...props }, ref) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group text-fg flex flex-1 items-center justify-between gap-4 py-4 text-left text-sm font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg-2\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&[data-state=open]>svg]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n className=\"text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\"\n aria-hidden=\"true\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n});\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionContent */\n/* Uses Radix's --radix-accordion-content-height CSS var for smooth open/close */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n\nexport const AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentProps\n>(function AccordionContent({ children, className, ...props }, ref) {\n return (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n \"text-fg-2 overflow-hidden text-sm\",\n \"data-[state=closed]:animate-[accordion-up_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"data-[state=open]:animate-[accordion-down_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"motion-reduce:animate-none\",\n )}\n {...props}\n >\n <div className={cn(\"pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n});\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * AlertDialog — Radix UI alert-dialog primitive. Modified\n *\n * Public API preserved (every export exists with at least the same\n * call-site shape as the prior hand-rolled implementation):\n * AlertDialog, AlertDialogTrigger, AlertDialogContent,\n * AlertDialogHeader, AlertDialogTitle, AlertDialogDescription,\n * AlertDialogFooter, AlertDialogAction, AlertDialogCancel\n *\n * NEW (additive): AlertDialogPortal, AlertDialogOverlay are exported\n * for advanced composition (matches shadcn convention).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full max-w-lg\",\n \"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto\",\n \"rounded-card border-rule bg-surface shadow-pop border p-6\",\n \"font-body text-fg\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:-translate-y-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mb-4 flex flex-col gap-1.5\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-fg-3 text-sm\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(\n \"rounded-btn inline-flex h-10 items-center justify-center px-4 text-sm font-medium whitespace-nowrap\",\n \"bg-destructive text-destructive-foreground transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-destructive/90\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, children, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n \"rounded-btn border-rule-strong bg-surface inline-flex h-10 items-center justify-center border px-4 text-sm font-medium whitespace-nowrap\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n >\n {children ?? \"Cancel\"}\n </AlertDialogPrimitive.Cancel>\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Alert — inline banner. Variants align with the three Assure status families\n * (success, warning, danger) plus a cyan-accent `info` (per spec §3 — three\n * statuses, not five).\n */\nexport const alertVariants = cva(\n cn(\n \"flex items-center gap-3 rounded-card border p-4\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ),\n {\n variants: {\n variant: {\n info: \"bg-accent-tint border-[color:var(--color-accent-tint)] text-accent-2 [&_svg]:text-accent-2\",\n success: \"bg-success-bg border-success-line text-success-fg [&_svg]:text-success-fg\",\n warning: \"bg-warning-bg border-warning-line text-warning-fg [&_svg]:text-warning-fg\",\n destructive: \"bg-danger-bg border-danger-line text-danger-fg [&_svg]:text-danger-fg\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n },\n);\n\nconst variantIcons = {\n info: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 7v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M5.5 8l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M7.13 2.5a1 1 0 011.74 0l5.5 9.5A1 1 0 0113.5 13.5h-11a1 1 0 01-.87-1.5l5.5-9.5z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path d=\"M8 6v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n ),\n destructive: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n ),\n} as const;\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { variant = \"info\", children, className, ...props },\n ref,\n) {\n const v = variant ?? \"info\";\n return (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant: v }), className)} {...props}>\n <span className=\"shrink-0\">{variantIcons[v]}</span>\n <div className=\"flex-1\">{children}</div>\n </div>\n );\n});\n\nAlert.displayName = \"Alert\";\n\nexport const AlertTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n function AlertTitle({ className, children, ...props }, ref) {\n return (\n <h4 ref={ref} className={cn(\"text-sm leading-tight font-semibold\", className)} {...props}>\n {children}\n </h4>\n );\n },\n);\n\nAlertTitle.displayName = \"AlertTitle\";\n\nexport const AlertDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(function AlertDescription({ className, ...props }, ref) {\n return <p ref={ref} className={cn(\"text-sm opacity-90\", className)} {...props} />;\n});\n\nAlertDescription.displayName = \"AlertDescription\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\";\n\nimport { cn } from \"../lib/cn\";\n\ninterface AspectRatioProps extends React.ComponentPropsWithoutRef<\n typeof AspectRatioPrimitive.Root\n> {\n ratio?: number;\n children: React.ReactNode;\n}\n\nexport const AspectRatio = React.forwardRef<\n React.ElementRef<typeof AspectRatioPrimitive.Root>,\n AspectRatioProps\n>(function AspectRatio({ className, ratio = 16 / 9, ...props }, ref) {\n return (\n <AspectRatioPrimitive.Root\n ref={ref}\n ratio={ratio}\n className={cn(\"overflow-hidden\", className)}\n {...props}\n />\n );\n});\nAspectRatio.displayName = AspectRatioPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Sizing + status */\n/* */\n/* Per spec §5.22: */\n/* - `initials` (default): bg-bg-3 + text-fg-2, 500 medium, no border. */\n/* Use for client/contact/anonymous initials — the most common case. */\n/* - `branded`: bg-pro-bg + text-pro-fg + D8CFFF rule. Reserved for firm */\n/* members (the logged-in user, team-member assignment cells). */\n/* - `image`: the variant is irrelevant when `src` is provided; the image */\n/* covers the fallback. */\n/* -------------------------------------------------------------------------- */\n\nconst avatarVariants = cva(\n cn(\n \"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full\",\n \"font-mono font-medium\",\n ),\n {\n variants: {\n size: {\n xs: \"size-5 text-[9px]\",\n sm: \"size-7 text-[10px]\",\n md: \"size-9 text-[11px]\",\n lg: \"size-12 text-sm\",\n xl: \"size-16 text-base\",\n },\n variant: {\n initials: \"bg-bg-3 text-fg-2\",\n branded: \"border border-[#D8CFFF] bg-pro-bg text-pro-fg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"initials\",\n },\n },\n);\n\ntype AvatarSize = NonNullable<VariantProps<typeof avatarVariants>[\"size\"]>;\n\nconst statusStyles = {\n online: \"bg-success-fg\",\n away: \"bg-warning-fg\",\n busy: \"bg-danger-fg\",\n offline: \"bg-fg-4\",\n} as const;\n\nconst statusDotSizes: Record<AvatarSize, string> = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n};\n\n/* -------------------------------------------------------------------------- */\n/* Initials helper */\n/* -------------------------------------------------------------------------- */\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n}\n\n/* -------------------------------------------------------------------------- */\n/* Avatar */\n/* Wraps Radix Root/Image/Fallback. Preserves the legacy contract: */\n/* - `src` -> renders Radix Image */\n/* - `name` -> initials fallback (auto-computed) */\n/* - `alt` -> image alt (defaults to name) */\n/* - `size` -> xs|sm|md|lg|xl */\n/* - `status` -> online|away|busy|offline (renders a corner dot) */\n/* -------------------------------------------------------------------------- */\n\ninterface AvatarProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, \"children\">,\n VariantProps<typeof avatarVariants> {\n src?: string | null;\n alt?: string;\n name?: string;\n status?: keyof typeof statusStyles;\n}\n\nexport const Avatar = React.forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n function Avatar(\n { src, alt, name, size = \"md\", variant = \"initials\", status, className, ...props },\n ref,\n ) {\n const initials = name ? getInitials(name) : \"?\";\n const resolvedSize: AvatarSize = size ?? \"md\";\n\n return (\n <span className=\"relative inline-flex\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(avatarVariants({ size: resolvedSize, variant }), className)}\n {...props}\n >\n {src ? (\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? name ?? \"Avatar\"}\n className=\"aspect-square size-full object-cover\"\n />\n ) : null}\n <AvatarPrimitive.Fallback\n delayMs={src ? 200 : 0}\n className=\"flex size-full items-center justify-center\"\n aria-label={name || \"Unknown user\"}\n >\n {initials}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {status && (\n <span\n className={cn(\n \"ring-bg absolute right-0 bottom-0 block rounded-full ring-2\",\n statusDotSizes[resolvedSize],\n statusStyles[status],\n )}\n aria-label={status}\n />\n )}\n </span>\n );\n },\n);\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Badge — status atom. Pill-family variants. Default variant is the\n * neutral pill.\n */\nexport const badgeVariants = cva(\n cn(\n \"inline-flex items-center gap-1 rounded-pill border font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ),\n {\n variants: {\n variant: {\n default: \"bg-pro-fg text-fg-on-pro border-transparent\",\n secondary: \"bg-bg-2 text-fg-3 border-rule\",\n destructive: \"bg-danger-bg text-danger-fg border-danger-line\",\n success: \"bg-success-bg text-success-fg border-success-line\",\n warning: \"bg-warning-bg text-warning-fg border-warning-line\",\n info: \"bg-accent-tint text-accent-2 border-[color:var(--color-accent-tint)]\",\n outline: \"border-rule bg-transparent text-fg-2\",\n },\n size: {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-0.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"sm\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {\n dot?: boolean;\n icon?: React.ReactNode;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant, size, dot, icon, children, className, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && <span className=\"size-1.5 rounded-full bg-current\" aria-hidden=\"true\" />}\n {icon && (\n <span className=\"inline-flex size-3.5 shrink-0\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </span>\n );\n});\n\nBadge.displayName = \"Badge\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Blockquote — semantic quote with optional attribution. Uses `font-display`\n * (Geist) at a comfortable reading scale; smart quotes are wrapped automatically.\n */\n\ninterface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {\n author?: string;\n role?: string;\n}\n\nexport const Blockquote = forwardRef<HTMLQuoteElement, BlockquoteProps>(function Blockquote(\n { children, author, role: authorRole, className, ...props },\n ref,\n) {\n return (\n <figure>\n <blockquote\n ref={ref}\n className={cn(\n \"font-display text-fg text-xl leading-relaxed tracking-[-0.022em] md:text-2xl\",\n className,\n )}\n {...props}\n >\n <p>“{children}”</p>\n </blockquote>\n {author && (\n <figcaption className=\"mt-4\">\n <cite className=\"text-fg text-sm font-semibold not-italic\">{author}</cite>\n {authorRole && <span className=\"text-fg-3 block text-sm\">{authorRole}</span>}\n </figcaption>\n )}\n </figure>\n );\n});\n\nBlockquote.displayName = \"Blockquote\";\n","import { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Assure Suite brand glyphs\n *\n * Per-product mark icons for the Assure suite. Same silhouette (an \"A\"\n * shape with a small accent square) across all four — only the accent\n * fill changes, so a row of product tiles reads as a coherent family.\n *\n * Why these live separately from `icons.tsx`:\n * - intrinsic colors (the accent fill is part of the brand, not a\n * `currentColor`-driven theme tint), and\n * - a non-square viewBox (`0 0 136 137`) lifted directly from the\n * Pro source artwork to preserve sub-pixel proportions.\n *\n * Sized via `size` (square px on the wire). Default 24 matches every\n * other DS primitive and the `SidebarBrandSwitcher` row tile.\n *\n * The black-ish base color `#070707` is intentional brand tone — kept\n * stable across all variants. Per-product accents pull from the\n * `--color-brand-{slug}` tokens so the same hex is reusable elsewhere\n * (chips, banners, dashboards) and dark mode tracks automatically:\n * Pro var(--color-brand-pro) (purple — Pro's existing brand)\n * Audit var(--color-brand-audit) (blue)\n * Books var(--color-brand-books) (green)\n * Tax var(--color-brand-tax) (amber)\n *\n * Consumer wiring example:\n * <SidebarBrandSwitcher\n * brand={<AssureAuditBrandIcon size={28} />}\n * items={[\n * { id: \"pro\", glyph: <AssureProBrandIcon />, ... },\n * ...\n * ]}\n * />\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst BRAND_BASE_FILL = \"#070707\";\nconst BRAND_BASE_PATH =\n \"M43.8298 23.829C46.9635 23.7428 50.7456 23.9675 54.0114 23.9437L91.3493 23.8048C97.6806 23.7927 101.727 24.9883 106.302 29.5107C107.671 30.864 108.443 32.0751 109.418 33.7063C112.332 38.5806 112.037 42.6442 112.003 48.0679L112.02 56.4922C108.427 57.4911 101.053 57.2229 96.9953 57.2944C87.0232 57.47 76.9072 57.2055 66.9345 57.4014C66.7192 66.474 66.9079 75.8103 66.8438 84.9327C66.7469 92.0668 67.2878 101.738 66.6431 108.599C60.7359 108.871 54.5467 108.479 48.6135 108.641C40.5834 108.86 34.2651 108.559 28.1575 102.692C20.618 95.4486 21.8015 86.9701 21.8025 77.474L21.8166 59.8481L21.8312 49.597C21.8372 47.075 21.7515 43.5009 22.2502 41.142C22.9069 38.0359 25.4258 33.4304 27.6724 31.1548C32.4002 26.3658 37.1772 24.0905 43.8298 23.829Z\";\nconst BRAND_ACCENT_PATH =\n \"M83.7555 72.8376C85.3789 72.6548 90.5991 72.7708 92.4304 72.7692L100.779 72.7802C102.529 72.7903 104.546 72.7296 106.26 73.0259C108.43 73.422 111.61 75.5699 111.737 77.9539C112.107 84.8649 111.986 91.8555 111.974 98.7715C111.969 101.35 111.928 103.109 110.232 105.149C108.61 107.101 107.07 108.323 104.518 108.621C99.7602 108.503 95.0005 108.467 90.2413 108.513C87.5612 108.531 84.6034 108.799 81.9937 108.434C78.4024 107.933 76.1145 105.214 76.0317 101.618C75.9281 97.1186 75.8903 92.669 75.9646 88.174C76.0209 84.7695 75.8279 81.2851 76.3134 77.921C76.3993 77.3266 77.1785 76.1903 77.6286 75.7193C79.6145 73.6412 80.9496 73.0158 83.7555 72.8376Z\";\n\nexport interface BrandIconProps extends React.SVGAttributes<SVGElement> {\n size?: number;\n}\n\nfunction BrandIcon({\n size = 24,\n accent,\n title,\n className,\n ...props\n}: BrandIconProps & { accent: string; title: string }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 136 137\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"shrink-0\", className)}\n role=\"img\"\n aria-label={title}\n {...props}\n >\n <path d={BRAND_BASE_PATH} fill={BRAND_BASE_FILL} />\n <path d={BRAND_ACCENT_PATH} fill={accent} />\n </svg>\n );\n}\n\nexport function AssureProBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-pro)\" title=\"Assure Pro\" {...props} />;\n}\n\nexport function AssureAuditBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-audit)\" title=\"Assure Audit\" {...props} />;\n}\n\nexport function AssureBooksBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-books)\" title=\"Assure Books\" {...props} />;\n}\n\nexport function AssureTaxBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-tax)\" title=\"Assure Tax\" {...props} />;\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronRightIcon } from \"./icons\";\n/**\n * Breadcrumb — semantic navigation primitive. Uses the catalog `ChevronRightIcon` as the\n * default separator. Current page (BreadcrumbPage) leans on Pro purple to\n * mirror the active-state language used elsewhere in the firm app.\n *\n * Public API preserved: Breadcrumb / BreadcrumbList / BreadcrumbItem /\n * BreadcrumbLink / BreadcrumbPage / BreadcrumbSeparator.\n */\n\nexport type BreadcrumbProps = React.HTMLAttributes<HTMLElement>;\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n { className, ...props },\n ref,\n) {\n return <nav ref={ref} aria-label=\"Breadcrumb\" className={cn(className)} {...props} />;\n});\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport type BreadcrumbListProps = React.HTMLAttributes<HTMLOListElement>;\n\nexport const BreadcrumbList = forwardRef<HTMLOListElement, BreadcrumbListProps>(\n function BreadcrumbList({ className, ...props }, ref) {\n return (\n <ol\n ref={ref}\n className={cn(\"text-fg-3 flex flex-wrap items-center gap-1.5 text-sm\", className)}\n {...props}\n />\n );\n },\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport type BreadcrumbItemProps = React.HTMLAttributes<HTMLLIElement>;\n\nexport const BreadcrumbItem = forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n function BreadcrumbItem({ className, ...props }, ref) {\n return (\n <li ref={ref} className={cn(\"inline-flex items-center gap-1.5\", className)} {...props} />\n );\n },\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport type BreadcrumbLinkProps = React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const BreadcrumbLink = forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n function BreadcrumbLink({ className, children, ...props }, ref) {\n return (\n <a\n ref={ref}\n className={cn(\n \"text-fg-3 inline-flex items-center gap-1\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"rounded-icon focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n },\n);\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nexport type BreadcrumbPageProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbPage = forwardRef<HTMLSpanElement, BreadcrumbPageProps>(\n function BreadcrumbPage({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n aria-current=\"page\"\n role=\"link\"\n aria-disabled=\"true\"\n className={cn(\"text-fg font-medium\", className)}\n {...props}\n />\n );\n },\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nexport type BreadcrumbSeparatorProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbSeparator = forwardRef<HTMLSpanElement, BreadcrumbSeparatorProps>(\n function BreadcrumbSeparator({ children, className, ...props }, ref) {\n return (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-fg-5 inline-flex items-center [&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRightIcon strokeWidth={1.75} />}\n </span>\n );\n },\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Button — action atom.\n *\n * Variants:\n * - primary → bg-pro-fg (suite accent)\n * - secondary → ghost surface bg-bg-2\n * - destructive → bg-danger-fg\n * - success → bg-success-fg\n * - ghost → transparent, hover:bg-bg-2\n * - outline → bordered surface\n * - link → text-accent (cyan) with underline-on-hover\n * - accent → bg-accent (cyan CTA)\n * - dashed → full-bleed \"+ Add another\" CTA, transparent fill + dashed border\n *\n * Control text scale (shared across the button-family control primitives\n * Button / MultiFilterPill / FilterChip): sm = 13px, md = 14px, lg = 16px.\n * `sm` is the dense tier used in toolbars; `md` is the default. (SearchInput\n * keeps its own one-step-denser inputSize scale, 12/13/14.)\n * Use `asChild` to render as a different element (e.g. an anchor / next/link).\n */\nexport const buttonVariants = cva(\n cn(\n \"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"motion-reduce:transition-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n ),\n {\n variants: {\n variant: {\n primary: \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active\",\n secondary: \"bg-bg-2 text-fg-2 border border-rule hover:bg-bg-3 hover:border-rule-strong\",\n destructive: \"bg-danger-fg text-white hover:bg-danger-fg/90 active:bg-danger-fg/80\",\n success: \"bg-success-fg text-white hover:bg-success-fg/90 active:bg-success-fg/80\",\n ghost: \"bg-transparent text-fg-2 hover:bg-bg-2 hover:text-fg\",\n outline: \"border border-rule-strong bg-bg text-fg-2 hover:bg-bg-2 hover:border-fg-4\",\n link: \"bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto\",\n accent: \"bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active\",\n dashed:\n \"border-2 border-dashed border-rule bg-transparent text-fg-3 hover:border-fg-4 hover:bg-bg-2 hover:text-fg\",\n },\n size: {\n sm: \"h-8 px-3 text-[13px] gap-1.5\",\n md: \"h-10 px-4 text-sm gap-2\",\n lg: \"h-12 px-6 text-base gap-2\",\n // Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).\n // `icon-xs` / `icon-sm` are for dense in-row action stacks where\n // `size=\"icon\"` (40×40) would visually crowd the row.\n \"icon-xs\": \"size-6 [&_svg]:size-3.5\",\n \"icon-sm\": \"size-7 [&_svg]:size-4\",\n icon: \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n /** Render as the child element via Radix `Slot` (shadcn pattern). */\n asChild?: boolean;\n loading?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nconst Spinner = () => (\n <svg className=\"size-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n className=\"opacity-25\"\n />\n <path\n d=\"M4 12a8 8 0 018-8\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n className=\"opacity-75\"\n />\n </svg>\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant,\n size,\n asChild = false,\n loading,\n iconLeft,\n iconRight,\n disabled,\n children,\n className,\n ...props\n },\n ref,\n) {\n const Comp = asChild ? Slot : \"button\";\n\n // Slot collapses into a single child, so when asChild we render only children.\n if (asChild) {\n return (\n <Comp ref={ref} className={cn(buttonVariants({ variant, size }), className)} {...props}>\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n disabled={disabled || loading}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {loading ? (\n <Spinner />\n ) : (\n iconLeft && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconLeft}\n </span>\n )\n )}\n {children}\n {iconRight && !loading && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconRight}\n </span>\n )}\n </Comp>\n );\n});\n\nButton.displayName = \"Button\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker, type DayPickerProps } from \"react-day-picker\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Calendar — react-day-picker. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * <Calendar selected onSelect highlights minDate maxDate />\n *\n * Prop semantics intentionally unchanged:\n * - `selected` accepts `Date | null` (legacy null-instead-of-undefined).\n * - `onSelect` is invoked with a non-null `Date` (legacy never emitted null).\n * - `highlights` translates to react-day-picker `modifiers`.\n *\n * NEW (additive): consumers may pass any DayPickerProps (mode, disabled,\n * fromDate, toDate, etc.) by typing the component as DayPicker. This file\n * intentionally narrows the public contract; richer usage should compose\n * DayPicker directly.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type CalendarHighlightColor = \"primary\" | \"success\" | \"warning\" | \"destructive\";\n\nexport interface CalendarHighlight {\n date: Date;\n color?: CalendarHighlightColor;\n}\n\nexport interface CalendarProps extends Omit<\n DayPickerProps,\n \"mode\" | \"selected\" | \"onSelect\" | \"modifiers\" | \"modifiersClassNames\"\n> {\n selected?: Date | null;\n onSelect?: (date: Date) => void;\n highlights?: CalendarHighlight[];\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n}\n\nconst HIGHLIGHT_COLORS: Record<CalendarHighlightColor, string> = {\n primary: \"after:bg-pro-fg\",\n success: \"after:bg-success-fg\",\n warning: \"after:bg-warning-fg\",\n destructive: \"after:bg-danger-fg\",\n};\n\nconst DOT_BASE =\n \"after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full\";\n\nexport function Calendar({\n selected,\n onSelect,\n highlights = [],\n minDate,\n maxDate,\n className,\n classNames,\n ...props\n}: CalendarProps) {\n /**\n * Bucket highlight dates by color so we can hand each color its own\n * `modifier` + `modifierClassName` pair (rdp doesn't allow per-day\n * className via the modifiers prop directly).\n */\n const { modifiers, modifiersClassNames } = React.useMemo(() => {\n const buckets: Partial<Record<CalendarHighlightColor, Date[]>> = {};\n for (const h of highlights) {\n const key = h.color ?? \"primary\";\n (buckets[key] ??= []).push(h.date);\n }\n\n const mods: Record<string, Date[]> = {};\n const modClasses: Record<string, string> = {};\n for (const [color, dates] of Object.entries(buckets) as [CalendarHighlightColor, Date[]][]) {\n const key = `assure-highlight-${color}`;\n mods[key] = dates;\n modClasses[key] = cn(\"relative\", DOT_BASE, HIGHLIGHT_COLORS[color]);\n }\n return { modifiers: mods, modifiersClassNames: modClasses };\n }, [highlights]);\n\n // Translate the legacy min/max props into rdp's `disabled` matcher form.\n const disabledMatcher = React.useMemo(() => {\n if (!minDate && !maxDate) return undefined;\n if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];\n if (minDate) return { before: minDate };\n return { after: maxDate as Date };\n }, [minDate, maxDate]);\n\n return (\n <DayPicker\n mode=\"single\"\n selected={selected ?? undefined}\n onSelect={(d) => {\n if (d) onSelect?.(d);\n }}\n disabled={disabledMatcher}\n modifiers={modifiers}\n modifiersClassNames={modifiersClassNames}\n showOutsideDays\n components={{\n Chevron: ({ orientation, className: chevClass }) => {\n const Icon = orientation === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return <Icon className={cn(\"text-fg-3 size-4\", chevClass)} aria-hidden=\"true\" />;\n },\n }}\n className={cn(\"font-body text-fg select-none\", className)}\n classNames={{\n root: \"p-3 min-w-[280px]\",\n months: \"flex flex-col gap-4\",\n month: \"space-y-3\",\n month_caption:\n \"flex h-8 items-center justify-center font-display text-[13px] font-medium text-fg\",\n caption_label: \"tabular-nums\",\n nav: \"flex items-center justify-between absolute left-3 right-3 top-3\",\n button_previous:\n \"inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n button_next:\n \"inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1\",\n weeks: \"\",\n week: \"flex w-full mt-1\",\n day: \"flex-1 text-center relative p-0\",\n day_button: cn(\n \"inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n ),\n today: \"[&_button]:font-semibold [&_button]:text-accent\",\n selected:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover [&_button]:focus-visible:bg-pro-fg\",\n outside: \"[&_button]:text-fg-5\",\n disabled: \"[&_button]:text-fg-disabled\",\n hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n","import { forwardRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Card — surface container. 12px radius, 1px rule border, surface bg.\n * Three variants:\n *\n * default — settled card on the page (current behavior, unchanged)\n * interactive — clickable card; hover darkens the border\n * flat — borderless / shadowless transparent surface, for nesting\n * inside Dialog/Sheet/Card without double-border\n */\n\nexport const cardVariants = cva(\"rounded-card border border-rule bg-surface text-fg shadow-quiet\", {\n variants: {\n variant: {\n default: \"\",\n interactive:\n \"cursor-pointer transition-[border-color] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none\",\n flat: \"border-0 bg-transparent shadow-none\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardVariants {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, variant, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(cardVariants({ variant }), className)} {...props} />;\n});\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid auto-cols-fr grid-cols-[1fr_auto] items-start gap-1.5 p-6 [.border-b]:pb-4\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n function CardTitle({ className, children, ...props }, ref) {\n return (\n <h3\n ref={ref}\n className={cn(\"text-fg text-base leading-tight font-medium\", className)}\n {...props}\n >\n {children}\n </h3>\n );\n },\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(function CardDescription({ className, ...props }, ref) {\n return <p ref={ref} className={cn(\"text-fg-3 text-sm\", className)} {...props} />;\n});\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardContent({ className, ...props }, ref) {\n return <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />;\n },\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule flex items-center gap-2 border-t p-6\", className)}\n {...props}\n />\n );\n },\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport const CardAction = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardAction({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"col-start-2 row-start-1 self-center\", className)} {...props} />\n );\n },\n);\nCardAction.displayName = \"CardAction\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, MinusIcon } from \"./icons\";\ninterface CheckboxProps extends Omit<\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n \"checked\" | \"defaultChecked\"\n> {\n /** Optional inline label rendered to the right of the box */\n label?: string;\n /** Tri-state support: true | false | \"indeterminate\" */\n checked?: boolean | \"indeterminate\";\n defaultChecked?: boolean | \"indeterminate\";\n /** Convenience: render with indeterminate state. Mirrors legacy prop. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(function Checkbox(\n { label, indeterminate, checked, defaultChecked, className, id: providedId, ...props },\n ref,\n) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n // Resolve tri-state from either explicit `checked` or legacy `indeterminate`.\n const resolvedChecked: CheckboxPrimitive.CheckboxProps[\"checked\"] = indeterminate\n ? \"indeterminate\"\n : checked;\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={id}\n checked={resolvedChecked}\n defaultChecked={defaultChecked}\n className={cn(\n \"peer border-rule-strong bg-surface text-fg-on-pro flex size-4 shrink-0 items-center justify-center rounded-[4px] border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"hover:border-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[state=checked]:border-pro-fg data-[state=checked]:bg-pro-fg\",\n \"data-[state=indeterminate]:border-pro-fg data-[state=indeterminate]:bg-pro-fg\",\n \"disabled:bg-bg-disabled disabled:border-rule disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n {resolvedChecked === \"indeterminate\" ? (\n <MinusIcon className=\"size-3\" strokeWidth={3} aria-hidden=\"true\" />\n ) : (\n <CheckIcon className=\"size-3\" strokeWidth={3} aria-hidden=\"true\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Select — Radix UI select primitive. Modified\n *\n * Public API preserved (the convenience wrapper):\n * <Select options={...} value placeholder onValueChange searchable />\n * - the original `Select` accepted `options: SelectOption[]`. Consumers\n * across firm + portal use that shape and we keep it.\n *\n * NEW (additive, shadcn parity) — composable lower-level slots so callers\n * can build their own trees:\n * SelectTrigger, SelectValue, SelectContent, SelectItem, SelectLabel,\n * SelectSeparator, SelectGroup, SelectScrollUpButton, SelectScrollDownButton\n *\n * Note: The legacy `Select` rendered Radix-incompatible custom slots (it\n * accepted `children` as raw JSX wrapping `<SelectTrigger />` /\n * `<SelectContent />` with no props). The new `Select` keeps the\n * options-driven path; for full composition use `SelectRoot` + the\n * lower-level slots directly.\n *\n * `searchable` prop: not natively supported by Radix Select. We accept the\n * prop to preserve the API but NO-OP it (warns in dev). Migrate searchable\n * UX to <SearchSelect /> (cmdk-based combobox).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst SelectRoot = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"rounded-input border-rule-strong bg-surface font-body text-fg flex h-9 w-full items-center justify-between gap-2 border px-3 py-2 text-[13px]\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:text-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"data-[placeholder]:text-fg-4\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n \"[&>span]:line-clamp-1 [&>span]:text-left\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon\n className=\"text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] data-[state=open]:rotate-180 motion-reduce:transition-none\"\n aria-hidden=\"true\"\n />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"text-fg-3 flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" aria-hidden=\"true\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"text-fg-3 flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" aria-hidden=\"true\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop relative z-[var(--z-dropdown)] max-h-(--radix-select-content-available-height) min-w-[8rem] overflow-hidden border\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n \"motion-reduce:transition-none\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n className,\n )}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-[13px] outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[state=checked]:bg-pro-bg data-[state=checked]:text-pro-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"bg-rule -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\n/* ─── Convenience wrapper ───────────────────────────────────────────── */\n\n/**\n * SelectOption shape — preserved verbatim from the legacy Select:\n * { value, label, disabled?, labelSuffix? }\n */\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n labelSuffix?: React.ReactNode;\n}\n\nexport interface SelectProps {\n /** Option list. Required to preserve legacy API. */\n options: SelectOption[];\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n /** Accepted for back-compat. NO-OP — see file header for migration. */\n searchable?: boolean;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n className?: string;\n /** Forwarded to the trigger. */\n triggerClassName?: string;\n /** Forwarded to the content. */\n contentClassName?: string;\n /** aria-invalid + danger styling on trigger. */\n \"aria-invalid\"?: boolean;\n /** aria-label fallback when there is no visible label. */\n \"aria-label\"?: string;\n}\n\n/**\n * Convenience `Select` — preserved options-driven API.\n *\n * For full composition, import the lower-level slots:\n * <SelectRoot>\n * <SelectTrigger><SelectValue /></SelectTrigger>\n * <SelectContent>\n * <SelectGroup>\n * <SelectLabel>Label</SelectLabel>\n * <SelectItem value=\"…\">…</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n * </SelectRoot>\n */\nfunction Select({\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder = \"Select...\",\n searchable,\n disabled,\n name,\n required,\n className,\n triggerClassName,\n contentClassName,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n}: SelectProps) {\n if (process.env.NODE_ENV !== \"production\" && searchable) {\n console.warn(\n \"[Select] `searchable` is not supported by Radix Select. Use <SearchSelect /> for filterable selection.\",\n );\n }\n\n return (\n <SelectRoot\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n disabled={disabled}\n name={name}\n required={required}\n >\n <SelectTrigger\n aria-invalid={ariaInvalid || undefined}\n aria-label={ariaLabel}\n className={cn(triggerClassName, className)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent className={contentClassName}>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {/* flex+line-clamp can't share an element (`display: flex` vs.\n `display: -webkit-box`), so layout lives on the outer span\n and word-boundary clamp lives on the inner label span. */}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"line-clamp-1\">{opt.label}</span>\n {opt.labelSuffix}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n );\n}\nSelect.displayName = \"Select\";\n\nexport {\n Select,\n SelectRoot,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { SelectContent, SelectItem, SelectRoot, SelectTrigger, SelectValue } from \"./select\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * ClientSelect — single-client picker, built on the new Radix-based\n * `Select` primitive.\n *\n * Public API preserved verbatim:\n * <ClientSelect\n * clients value onChange\n * name error className placeholder\n * />\n *\n * Behavioural notes:\n * - `value` is `string | null`; we map null → empty SelectValue (Radix\n * requires non-empty `value` strings on items, so the cleared state\n * is represented by no selection at all).\n * - The hidden `<input name=…>` is preserved so the component still\n * submits inside form posts; it carries `value ?? \"\"`.\n * - Each option shows `label` and an optional secondary `email` line.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type ClientSelectOption = {\n id: string;\n label: string;\n email?: string;\n};\n\ninterface ClientSelectProps {\n clients: ClientSelectOption[];\n value: string | null;\n onChange: (clientId: string | null) => void;\n name?: string;\n error?: string;\n className?: string;\n placeholder?: string;\n}\n\nexport function ClientSelect({\n clients,\n value,\n onChange,\n name = \"client_id\",\n error,\n className,\n placeholder = \"Select a client...\",\n}: ClientSelectProps) {\n // Radix Select uses controlled `value: string | undefined` (no null,\n // and no \"\" allowed on items). Bridge null ↔ undefined.\n const radixValue = value ?? undefined;\n const selected = value ? clients.find((c) => c.id === value) : undefined;\n\n const handleChange = (next: string) => {\n onChange(next === \"\" ? null : next);\n };\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n {/* Hidden field — preserved so existing form posts keep working. */}\n <input type=\"hidden\" name={name} value={value ?? \"\"} />\n\n <SelectRoot value={radixValue} onValueChange={handleChange}>\n <SelectTrigger aria-invalid={!!error || undefined} aria-label={placeholder}>\n {/* Override Radix's default `ItemText` mirroring. Each option below\n renders a two-line `label + email` block; without this override\n Radix portals the entire block into the trigger, breaking the\n fixed-height pill on narrow widths (name wraps, email overflows\n below the border). Trigger shows label only; the dropdown row\n keeps the email for context. */}\n <SelectValue placeholder={placeholder}>{selected?.label ?? \"\"}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {clients.length === 0 ? (\n <div className=\"text-fg-3 px-3 py-6 text-center text-xs\">No clients yet</div>\n ) : (\n clients.map((c) => (\n <SelectItem key={c.id} value={c.id}>\n {/* line-clamp-1 on each line so long client names + engagement\n labels clip at a word boundary instead of mid-word — e.g.\n \"2025 Business Tax Organizer — …\" rather than \"… Coasta…\". */}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-fg line-clamp-1 text-[13px] font-medium\">{c.label}</span>\n {c.email && <span className=\"text-fg-3 line-clamp-1 text-xs\">{c.email}</span>}\n </span>\n </SelectItem>\n ))\n )}\n </SelectContent>\n </SelectRoot>\n\n {error && (\n <p role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nClientSelect.displayName = \"ClientSelect\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Collapsible */\n/* Thin wrapper over Radix's @radix-ui/react-collapsible primitives. */\n/* -------------------------------------------------------------------------- */\n\ntype CollapsibleProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>;\n\nexport const Collapsible = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Root>,\n CollapsibleProps\n>(function Collapsible({ className, ...props }, ref) {\n return <CollapsiblePrimitive.Root ref={ref} className={cn(className)} {...props} />;\n});\nCollapsible.displayName = CollapsiblePrimitive.Root.displayName;\n\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>;\n\nexport const CollapsibleTrigger = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Trigger>,\n CollapsibleTriggerProps\n>(function CollapsibleTrigger({ className, ...props }, ref) {\n return (\n <CollapsiblePrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n />\n );\n});\nCollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName;\n\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>;\n\nexport const CollapsibleContent = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Content>,\n CollapsibleContentProps\n>(function CollapsibleContent({ className, ...props }, ref) {\n return (\n <CollapsiblePrimitive.Content\n ref={ref}\n className={cn(\n \"overflow-hidden\",\n \"data-[state=closed]:animate-[collapsible-up_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"data-[state=open]:animate-[collapsible-down_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"motion-reduce:animate-none\",\n className,\n )}\n {...props}\n />\n );\n});\nCollapsibleContent.displayName = CollapsiblePrimitive.Content.displayName;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon } from \"./icons\";\n/**\n * ComingSoon — placeholder pattern for unreleased modules. Pro-tinted icon\n * halo, dashed Assure border, \"In Development\" pill.\n *\n * Public API preserved: `icon`, `title`, `description`, `features`.\n */\nexport interface ComingSoonProps extends React.HTMLAttributes<HTMLDivElement> {\n icon: React.ReactNode;\n title: string;\n description: string;\n features: string[];\n}\n\nexport const ComingSoon = forwardRef<HTMLDivElement, ComingSoonProps>(function ComingSoon(\n { icon, title, description, features, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center justify-center px-6 py-16\", className)}\n {...props}\n >\n <div\n className={cn(\n \"rounded-card border-rule-strong w-full max-w-lg border border-dashed\",\n \"bg-surface shadow-quiet p-10 text-center\",\n )}\n >\n {/* Eyebrow */}\n <div className=\"text-pro-fg mb-5 font-mono text-[11px] font-normal tracking-[0.14em] uppercase\">\n Coming soon\n </div>\n\n {/* Pro-tinted icon halo */}\n <div\n className={cn(\n \"mx-auto mb-4 flex size-12 items-center justify-center\",\n \"rounded-icon bg-pro-bg text-pro-fg [&>svg]:size-6\",\n )}\n >\n {icon}\n </div>\n\n <h1 className=\"font-display text-fg text-xl font-medium tracking-[-0.022em]\">{title}</h1>\n <p className=\"text-fg-3 mt-1.5 text-sm\">{description}</p>\n\n <ul className=\"mt-6 space-y-2 text-left\">\n {features.map((feature) => (\n <li key={feature} className=\"text-fg-2 flex items-center gap-2 text-sm\">\n <CheckIcon\n className=\"text-success-fg size-3.5 shrink-0\"\n strokeWidth={2.5}\n aria-hidden=\"true\"\n />\n {feature}\n </li>\n ))}\n </ul>\n\n <div className=\"mt-6\">\n <span\n className={cn(\n \"rounded-pill inline-flex items-center border px-2.5 py-0.5\",\n \"text-xs font-medium\",\n \"bg-pro-bg text-pro-fg border-[color:var(--color-pro-bg-active)]\",\n )}\n >\n In Development\n </span>\n </div>\n </div>\n </div>\n );\n});\n\nComingSoon.displayName = \"ComingSoon\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Dialog — Radix UI overlay primitive. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle,\n * DialogDescription, DialogFooter, DialogClose\n *\n * NEW (additive): DialogPortal, DialogOverlay are also exported for\n * advanced composition (matches shadcn convention).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst dialogSizeStyles = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n full: \"max-w-[calc(100vw-2rem)]\",\n} as const;\n\ninterface DialogContentProps extends React.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Content\n> {\n size?: keyof typeof dialogSizeStyles;\n /**\n * If false, the built-in close button is hidden. Default: true.\n * Use `<DialogClose>` inside content to render your own close UI.\n */\n showCloseButton?: boolean;\n}\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(({ size = \"md\", showCloseButton = true, className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full\",\n \"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto\",\n \"rounded-card border-rule bg-surface shadow-pop border p-6\",\n \"font-body text-fg\",\n // motion: scale + fade keyed off data-state\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:-translate-y-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n dialogSizeStyles[size],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 inline-flex size-7 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:pointer-events-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\n/* ─── DialogClose ────────────────────────────────────────────────────────\n * Backwards-compat note: the prior implementation rendered an absolute-\n * positioned close button by default and styled it as such. The new\n * DialogContent renders that close affordance built-in. The DialogClose\n * primitive is now a transparent wrapper around `Radix.Close`, used as a\n * dismiss action inside DialogFooter etc. (e.g. <DialogClose><Button …/></>).\n * ───────────────────────────────────────────────────────────────────── */\nconst DialogClose = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Close>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Close ref={ref} className={cn(className)} {...props} />\n));\nDialogClose.displayName = \"DialogClose\";\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mb-4 flex flex-col gap-1.5 pr-8\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-fg-3 text-sm\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\n\nimport { cn } from \"../lib/cn\";\nimport { Dialog, DialogPortal, DialogOverlay } from \"./dialog\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { SearchIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * CommandPalette — `cmdk` rendered inside the Dialog primitive. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * CommandPalette({ items, open, onOpenChange, placeholder })\n * export type { CommandItem }\n *\n * Behavior preserved:\n * - Cmd/Ctrl+K toggles open (when uncontrolled, or always)\n * - Up/Down/Enter/Escape navigation (provided by `cmdk`)\n * - Filter against label, description, group, and keywords\n * - Grouped item rendering with sticky group headings\n * - Optional per-item shortcut + icon\n * - Dismiss-on-select\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface CommandItem {\n id: string;\n label: string;\n description?: string;\n group?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n onSelect: () => void;\n keywords?: string[];\n}\n\ninterface CommandPaletteProps {\n items: CommandItem[];\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n}\n\nexport type { CommandItem };\n\n/* ── Kbd token ─────────────────────────────────────────────────────── */\nconst kbdClass = cn(\n \"inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]\",\n \"font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon\",\n \"[border-bottom-width:1.5px]\",\n);\n\n/* ── Group items, preserving insertion order ────────────────────────── */\nfunction groupItems(items: CommandItem[]): Array<[string, CommandItem[]]> {\n const groups = new Map<string, CommandItem[]>();\n for (const item of items) {\n const key = item.group ?? \"\";\n const existing = groups.get(key);\n if (existing) existing.push(item);\n else groups.set(key, [item]);\n }\n return Array.from(groups.entries());\n}\n\nexport function CommandPalette({\n items,\n open: controlledOpen,\n onOpenChange,\n placeholder = \"Type a command or search...\",\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n // Cmd/Ctrl + K toggles the palette globally.\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n setOpen(!open);\n }\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, setOpen]);\n\n const grouped = groupItems(items);\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n aria-label=\"Command palette\"\n className={cn(\n \"fixed top-[20vh] left-1/2 z-[var(--z-modal)] w-full max-w-xl -translate-x-1/2\",\n \"rounded-card border-rule bg-surface shadow-pop overflow-hidden border\",\n \"font-body text-fg\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">Command palette</DialogPrimitive.Title>\n <DialogPrimitive.Description className=\"sr-only\">\n Search and run commands\n </DialogPrimitive.Description>\n <CommandPrimitive\n label=\"Command palette\"\n className={cn(\n \"flex flex-col\",\n // Hide a group's heading when the group has no visible children\n \"[&_[cmdk-group]:not([hidden])_~_[cmdk-group]]:border-t-0\",\n )}\n >\n {/* ── Search input ──────────────────────────────────── */}\n <div className=\"border-rule relative border-b\">\n <SearchIcon\n className=\"text-fg-3 pointer-events-none absolute top-1/2 left-4 size-4 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n placeholder={placeholder}\n className={cn(\n \"text-fg w-full border-none bg-transparent py-3.5 pr-4 pl-11 text-sm\",\n \"placeholder:text-fg-3 outline-none\",\n \"focus:ring-0 focus:outline-none focus-visible:ring-0\",\n )}\n />\n </div>\n\n {/* ── Results ───────────────────────────────────────── */}\n <CommandPrimitive.List\n className={cn(\n \"scrollbar-thin max-h-[380px] overflow-y-auto py-1\",\n \"[&_[cmdk-group-heading]]:px-4 [&_[cmdk-group-heading]]:py-1.5\",\n \"[&_[cmdk-group-heading]]:font-mono [&_[cmdk-group-heading]]:text-[11px]\",\n \"[&_[cmdk-group-heading]]:tracking-[0.14em] [&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:text-fg-3\",\n )}\n >\n <CommandPrimitive.Empty className=\"text-fg-3 py-8 text-center text-sm\">\n No results found.\n </CommandPrimitive.Empty>\n\n {grouped.map(([group, groupItemsList]) => (\n <CommandPrimitive.Group\n key={group || \"_ungrouped\"}\n heading={group || undefined}\n className=\"py-1\"\n >\n {groupItemsList.map((item) => (\n <CommandPrimitive.Item\n key={item.id}\n value={`${item.id} ${item.label} ${item.description ?? \"\"} ${item.group ?? \"\"} ${(item.keywords ?? []).join(\" \")}`}\n keywords={item.keywords}\n onSelect={() => {\n item.onSelect();\n setOpen(false);\n }}\n className={cn(\n \"rounded-btn mx-1.5 flex cursor-pointer items-center gap-3 px-3 py-2\",\n \"text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none motion-reduce:transition-none\",\n \"data-[selected=true]:bg-overlay-hover\",\n \"aria-selected:bg-overlay-hover\",\n )}\n >\n {item.icon && (\n <div\n className={cn(\n \"rounded-icon flex size-8 shrink-0 items-center justify-center\",\n item.group === \"Create\" ? \"bg-pro-bg text-pro-fg\" : \"bg-bg-2 text-fg-3\",\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-fg text-sm font-medium\">{item.label}</div>\n {item.description && (\n <div className=\"text-fg-3 line-clamp-1 text-xs\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && (\n <kbd className={cn(kbdClass, \"hidden shrink-0 sm:inline-flex\")}>\n {item.shortcut}\n </kbd>\n )}\n </CommandPrimitive.Item>\n ))}\n </CommandPrimitive.Group>\n ))}\n </CommandPrimitive.List>\n\n {/* ── Footer keyboard hints ─────────────────────────── */}\n <div className=\"border-rule bg-bg-2/40 text-fg-3 flex flex-wrap items-center gap-4 border-t px-4 py-2.5\">\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>↑↓</kbd>\n Navigate\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>↵</kbd>\n Select\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>esc</kbd>\n Close\n </span>\n </div>\n </CommandPrimitive>\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"./alert-dialog\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * ConfirmActionButton — drop-in confirmation gate around any trigger.\n *\n * Composes AlertDialog + a caller-supplied trigger to retire native\n * window.confirm() and the ad-hoc \"useState + dialog + handler\" boilerplate\n * that recurs around destructive actions. Pressure-tested against 8\n * unrelated consumer sites before absorption.\n *\n * The async onConfirm + internal pending state keeps both Action and\n * Cancel disabled mid-await — preventing the double-fire bug where a\n * user clicks Confirm, sees no immediate feedback, and clicks again.\n *\n * <ConfirmActionButton\n * trigger={<Button variant=\"destructive\">Cancel invoice</Button>}\n * title=\"Cancel this invoice?\"\n * description=\"This cannot be undone. The invoice will be marked cancelled.\"\n * confirmLabel=\"Cancel invoice\"\n * cancelLabel=\"Keep invoice\"\n * onConfirm={handleCancel}\n * />\n *\n * If onConfirm throws, the dialog stays open so the consumer can surface\n * the error (e.g. via Toast). The dialog also refuses to close via ESC,\n * overlay click, or Cancel while a confirmation is in flight.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface ConfirmActionButtonProps {\n /** Element rendered as the dialog trigger via `<AlertDialogTrigger asChild>`. */\n trigger: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n /** Awaited; dialog closes after resolve, stays open on reject. */\n onConfirm: () => void | Promise<void>;\n /** When true (default) the Action button uses the destructive palette;\n * when false it uses the Pro primary palette (bg-pro-fg). */\n destructive?: boolean;\n /** Forwarded to AlertDialogContent for one-off layout overrides. */\n contentClassName?: string;\n}\n\nexport function ConfirmActionButton({\n trigger,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n destructive = true,\n contentClassName,\n}: ConfirmActionButtonProps) {\n const [open, setOpen] = React.useState(false);\n const [pending, setPending] = React.useState(false);\n\n const handleConfirm = async (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setPending(true);\n try {\n await onConfirm();\n setOpen(false);\n } finally {\n setPending(false);\n }\n };\n\n return (\n <AlertDialog\n open={open}\n onOpenChange={(next) => {\n if (pending) return;\n setOpen(next);\n }}\n >\n <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>\n <AlertDialogContent className={contentClassName}>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n {description && <AlertDialogDescription>{description}</AlertDialogDescription>}\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={pending}>{cancelLabel}</AlertDialogCancel>\n <AlertDialogAction\n disabled={pending}\n onClick={handleConfirm}\n className={cn(\n !destructive &&\n \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active\",\n )}\n >\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * ContextMenu — Radix UI context-menu primitive. Modified\n *\n * Public API preserved:\n * ContextMenu, ContextMenuTrigger, ContextMenuContent,\n * ContextMenuItem (with `destructive` prop), ContextMenuSeparator\n *\n * NEW (additive, shadcn parity):\n * ContextMenuLabel, ContextMenuGroup, ContextMenuPortal,\n * ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent,\n * ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem,\n * ContextMenuShortcut\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst ContextMenu = ContextMenuPrimitive.Root;\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nconst ContextMenuGroup = ContextMenuPrimitive.Group;\nconst ContextMenuPortal = ContextMenuPrimitive.Portal;\nconst ContextMenuSub = ContextMenuPrimitive.Sub;\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[state=open]:bg-bg-2 data-[state=open]:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"text-fg-3 ml-auto size-4\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.SubTrigger>\n));\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n // Portal the sub-content to the body. The parent Content keeps a persistent\n // `scale-100` transform (its open-state animation), which makes it the\n // containing block for `position: fixed` descendants — and its\n // `overflow-hidden` would then clip this Popper-positioned flyout to nothing.\n // Portaling escapes both the transformed ancestor and the clip.\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;\n\ninterface ContextMenuItemProps extends React.ComponentPropsWithoutRef<\n typeof ContextMenuPrimitive.Item\n> {\n destructive?: boolean;\n inset?: boolean;\n}\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n ContextMenuItemProps\n>(({ className, destructive, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n destructive && \"text-danger-fg focus:bg-danger-bg focus:text-danger-fg\",\n className,\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n));\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"bg-rule -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;\n\nconst ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"text-fg-4 ml-auto font-mono text-[11px] tracking-wider\", className)}\n {...props}\n />\n);\nContextMenuShortcut.displayName = \"ContextMenuShortcut\";\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n","\"use client\";\n\nimport { forwardRef, useCallback, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, CopyIcon } from \"./icons\";\ninterface CopyButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n feedbackDuration?: number;\n}\n\n/**\n * CopyButton — single-click clipboard copy with check-mark feedback.\n * Renders the lucide `Copy` icon by default; pass `children` to override.\n */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n { value, feedbackDuration = 2000, className, children, ...props },\n ref,\n) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), feedbackDuration);\n }, [value, feedbackDuration]);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n \"rounded-icon text-fg-3 inline-flex items-center justify-center p-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"motion-reduce:transition-none\",\n className,\n )}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n {...props}\n >\n {copied ? (\n <CheckIcon size={16} aria-hidden=\"true\" />\n ) : (\n (children ?? <CopyIcon size={16} aria-hidden=\"true\" />)\n )}\n </button>\n );\n});\n\nCopyButton.displayName = \"CopyButton\";\n","import { format, parse, isValid } from \"date-fns\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Shared date helpers + placeholder constants used by DatePicker and\n * DateRangePicker. Kept narrow on purpose — anything richer (date math,\n * locale formatting, business-week logic) belongs in the consumer, not\n * the design system.\n * ─────────────────────────────────────────────────────────────────────── */\n\n/** Default placeholder for day-mode inputs (`MM/DD/YYYY`). */\nexport const DATE_DISPLAY_PLACEHOLDER = \"MM/DD/YYYY\";\n\n/** Default placeholder for year-mode inputs (`YYYY`). */\nexport const YEAR_DISPLAY_PLACEHOLDER = \"YYYY\";\n\nconst ISO_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst DISPLAY_RE = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\n\n/** ISO `YYYY-MM-DD` → display `MM/DD/YYYY`. Returns `\"\"` for empty/invalid. */\nexport function isoToDisplay(iso: string | undefined | null): string {\n if (!iso) return \"\";\n const m = ISO_RE.exec(iso);\n if (!m) return \"\";\n return `${m[2]}/${m[3]}/${m[1]}`;\n}\n\n/** Display `MM/DD/YYYY` → ISO `YYYY-MM-DD`. Returns `\"\"` for invalid. */\nexport function displayToIso(display: string): string {\n const m = DISPLAY_RE.exec(display);\n if (!m) return \"\";\n const [, mm, dd, yyyy] = m;\n const parsed = parse(`${mm}/${dd}/${yyyy}`, \"MM/dd/yyyy\", new Date());\n if (!isValid(parsed)) return \"\";\n if (\n parsed.getFullYear() !== Number(yyyy) ||\n parsed.getMonth() + 1 !== Number(mm) ||\n parsed.getDate() !== Number(dd)\n ) {\n return \"\";\n }\n return `${yyyy}-${mm}-${dd}`;\n}\n\n/** Apply the `MM/DD/YYYY` mask while the user types. */\nexport function applyMask(input: string): string {\n const digits = input.replace(/\\D/g, \"\").slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\n/** ISO `YYYY-MM-DD` → JS Date (in local timezone). Returns `undefined` for invalid. */\nexport function isoToDate(iso: string): Date | undefined {\n if (!iso) return undefined;\n const parsed = parse(iso, \"yyyy-MM-dd\", new Date());\n return isValid(parsed) ? parsed : undefined;\n}\n\n/** JS Date → ISO `YYYY-MM-DD`. */\nexport function dateToIso(d: Date): string {\n return format(d, \"yyyy-MM-dd\");\n}\n\n/** ISO `YYYY-MM-DD` → year part `YYYY`. Returns `\"\"` if no leading year. */\nexport function isoToYear(iso: string | undefined | null): string {\n if (!iso) return \"\";\n const m = /^(\\d{4})/.exec(iso);\n return m ? m[1] : \"\";\n}\n\n/** Year `YYYY` → ISO `YYYY-01-01`. Returns `\"\"` if not 4 digits. */\nexport function yearToIso(year: string): string {\n return /^\\d{4}$/.test(year) ? `${year}-01-01` : \"\";\n}\n\n/** Apply the `YYYY` mask while the user types. */\nexport function applyYearMask(input: string): string {\n return input.replace(/\\D/g, \"\").slice(0, 4);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Popover — Radix UI popover primitive. Modified\n *\n * Public API preserved:\n * Popover, PopoverTrigger, PopoverContent\n *\n * NEW (additive): PopoverAnchor, PopoverPortal, PopoverClose are\n * exported for advanced composition.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nconst PopoverPortal = PopoverPrimitive.Portal;\nconst PopoverClose = PopoverPrimitive.Close;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", side = \"bottom\", sideOffset = 8, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-72 border p-4 outline-none\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverPortal, PopoverClose, PopoverContent };\n","\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Calendar } from \"./calendar\";\nimport {\n applyMask,\n applyYearMask,\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n displayToIso,\n isoToDate,\n isoToDisplay,\n isoToYear,\n YEAR_DISPLAY_PLACEHOLDER,\n yearToIso,\n} from \"./date-utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * DatePicker — Popover + Calendar + masked text input.\n *\n * Public API preserved EXACTLY:\n * - `value` / `defaultValue` are ISO `YYYY-MM-DD` strings (what 988 firm +\n * 174 portal call sites pass today).\n * - The displayed value in the trigger input is `MM/DD/YYYY`.\n * - `onChange` is invoked with a synthetic event of shape\n * `{ target: { name?: string; value: string } }` where `value` is the\n * ISO string. Call sites depend on this synthetic shape — do NOT change.\n * - `min` / `max` are ISO strings — gate the calendar grid.\n * - A hidden `<input name>` mirrors the ISO value for native form posts.\n * - `forwardRef<HTMLInputElement>` points to the visible text input.\n *\n * NEW (additive): `picker?: \"day\" | \"year\"` (default `\"day\"`).\n * - `\"year\"` swaps the calendar popover for a 12-cell year grid.\n * - The visible text input shows `YYYY` and accepts 4 digits.\n * - `value` / `onChange` still travel as ISO `YYYY-MM-DD` (the year mode\n * normalises to Jan 1 of the chosen year — e.g. picking 2025 emits\n * `\"2025-01-01\"`) so downstream date math is unchanged.\n * - `min` / `max` still gate selection by their YEAR component.\n *\n * Re-exports the legacy ISO/display helpers + the placeholder constant.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface DatePickerProps {\n value?: string;\n defaultValue?: string;\n onChange?: (event: { target: { name?: string; value: string } }) => void;\n name?: string;\n id?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n className?: string;\n min?: string;\n max?: string;\n \"aria-label\"?: string;\n /**\n * Picker mode. `\"day\"` (default) opens the full month calendar. `\"year\"`\n * opens a year-only grid and stores the picked year as `YYYY-01-01` in\n * the ISO value (so the onChange contract stays a `YYYY-MM-DD` string).\n */\n picker?: \"day\" | \"year\";\n /**\n * Custom label formatter for year-mode cells AND the trigger input. Only\n * read when `picker=\"year\"`. Receives the numeric year and returns the\n * string to display. Use this for fiscal-year labels (e.g. `(y) => `${y}-${String(y+1).slice(-2)}``\n * for a \"2024-25\" rendering). The underlying `value`/`onChange` ISO\n * contract stays `YYYY-01-01` regardless of label format — only the\n * visible text changes.\n */\n formatLabel?: (year: number) => string;\n /**\n * Calendar glyph position inside the input. Default `\"right\"`. When\n * `\"left\"`, the icon sits on the left edge and the popover aligns to\n * start so the calendar opens beneath the visible glyph.\n */\n iconPosition?: \"left\" | \"right\";\n}\n\n// Re-export the date helpers so existing consumers (e.g.\n// `import { isoToDisplay, DATE_DISPLAY_PLACEHOLDER } from \"./date-picker\"`)\n// keep working. Implementations live in `./date-utils` so DatePicker and\n// DateRangePicker can share them without duplication.\nexport {\n applyMask,\n applyYearMask,\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n displayToIso,\n isoToDate,\n isoToDisplay,\n isoToYear,\n YEAR_DISPLAY_PLACEHOLDER,\n yearToIso,\n} from \"./date-utils\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * YearGrid — internal year picker rendered inside DatePicker's popover when\n * `picker=\"year\"`. 12-year window centered on the selected year (or current\n * year), with prev/next chevrons to page through decades. Mirrors Calendar's\n * shell — same nav row, same selected-cell tokens (`bg-pro-fg` /\n * `text-fg-on-pro`), same disabled treatment.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface YearGridProps {\n selected?: number;\n onSelect: (year: number) => void;\n minYear?: number;\n maxYear?: number;\n /** Optional consumer-provided label formatter (e.g. fiscal-year \"2024-25\"). */\n formatLabel?: (year: number) => string;\n /**\n * When true, focus the selected year (or today's year if none selected)\n * on mount. Mirrors the day-Calendar's autoFocus behaviour so keyboard\n * Tab/Enter activation works the moment the popover opens. The roving-\n * tabindex / arrow-key navigation of a true `role=\"grid\"` isn't wired\n * here — Tab moves between cells in DOM order, which is good enough for\n * a 12-cell window.\n */\n autoFocus?: boolean;\n}\n\nfunction YearGrid({ selected, onSelect, minYear, maxYear, formatLabel, autoFocus }: YearGridProps) {\n const today = new Date().getFullYear();\n const anchor = selected ?? today;\n // Page of 12 years, with the anchor year on the third row (so the user\n // sees ~5 future + 6 past around the current pick). Year % 12 keeps page\n // boundaries stable.\n const [startYear, setStartYear] = useState(() => anchor - (anchor % 12));\n\n const years = Array.from({ length: 12 }, (_, i) => startYear + i);\n const canGoPrev = !minYear || startYear > minYear;\n const canGoNext = !maxYear || startYear + 11 < maxYear;\n\n // Focus target: the selected year if it's on the current page, else the\n // current year if it's on the current page, else the first cell.\n const focusYear = selected && years.includes(selected)\n ? selected\n : years.includes(today)\n ? today\n : years[0];\n const focusRef = useRef<HTMLButtonElement | null>(null);\n useEffect(() => {\n if (autoFocus) {\n const raf = requestAnimationFrame(() => focusRef.current?.focus());\n return () => cancelAnimationFrame(raf);\n }\n }, [autoFocus]);\n\n return (\n <div className=\"font-body text-fg min-w-[280px] p-3 select-none\">\n <div className=\"relative mb-3 flex h-8 items-center justify-center\">\n <button\n type=\"button\"\n onClick={() => setStartYear((y) => y - 12)}\n disabled={!canGoPrev}\n aria-label=\"Previous decade\"\n className={cn(\n \"rounded-input text-fg-3 absolute left-0 inline-flex size-7 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n )}\n >\n <ChevronLeftIcon className=\"text-fg-3 size-4\" aria-hidden=\"true\" />\n </button>\n <span className=\"font-display text-fg text-[13px] font-medium tabular-nums\">\n {startYear} – {startYear + 11}\n </span>\n <button\n type=\"button\"\n onClick={() => setStartYear((y) => y + 12)}\n disabled={!canGoNext}\n aria-label=\"Next decade\"\n className={cn(\n \"rounded-input text-fg-3 absolute right-0 inline-flex size-7 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n )}\n >\n <ChevronRightIcon className=\"text-fg-3 size-4\" aria-hidden=\"true\" />\n </button>\n </div>\n {/* role=\"group\" + aria-pressed on cells — NOT role=\"grid\".\n A true `grid` requires nested `row` → `gridcell` structure plus\n roving-tabindex + arrow-key handlers, none of which apply to a\n flat 12-button picker. Using `group` keeps the axe addon clean\n while preserving the selection semantics consumers need. */}\n <div role=\"group\" aria-label=\"Pick a year\" className=\"grid grid-cols-3 gap-1.5\">\n {years.map((year) => {\n const isSelected = year === selected;\n const isToday = year === today;\n const isFocusTarget = year === focusYear;\n const isDisabled = (minYear !== undefined && year < minYear) || (maxYear !== undefined && year > maxYear);\n return (\n <button\n key={year}\n ref={isFocusTarget ? focusRef : undefined}\n type=\"button\"\n onClick={() => !isDisabled && onSelect(year)}\n disabled={isDisabled}\n aria-pressed={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n className={cn(\n \"rounded-input font-mono text-[13px] tabular-nums\",\n \"inline-flex h-10 items-center justify-center\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n isToday && !isSelected && \"text-accent font-semibold\",\n isSelected && \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover focus-visible:bg-pro-fg\",\n )}\n >\n {formatLabel ? formatLabel(year) : year}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n name,\n id: providedId,\n label,\n error,\n disabled,\n required,\n autoFocus,\n placeholder,\n className,\n min,\n max,\n \"aria-label\": ariaLabel,\n picker = \"day\",\n formatLabel,\n iconPosition = \"right\",\n },\n ref,\n) {\n const isYearMode = picker === \"year\";\n // When the consumer formats year labels (e.g. fiscal years \"2024-25\"), the\n // input becomes read-only — we can't reliably parse arbitrary label\n // strings back to a year. Otherwise (plain \"2024\" labels) typing works.\n const hasCustomYearLabel = isYearMode && !!formatLabel;\n const effectivePlaceholder =\n placeholder ?? (isYearMode ? YEAR_DISPLAY_PLACEHOLDER : DATE_DISPLAY_PLACEHOLDER);\n // Picker-specific helpers — `display` is what the user types/sees in the\n // input; `iso` is what travels via onChange. Day mode: MM/DD/YYYY <-> YYYY-MM-DD.\n // Year mode: YYYY <-> YYYY-01-01.\n const toDisplayFromIso = isYearMode\n ? (iso: string | undefined | null) => {\n const y = isoToYear(iso);\n if (!y) return \"\";\n return formatLabel ? formatLabel(Number(y)) : y;\n }\n : isoToDisplay;\n const toIsoFromDisplay = isYearMode ? yearToIso : displayToIso;\n const maskInput = isYearMode ? applyYearMask : applyMask;\n\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const isControlled = value !== undefined;\n\n const [internalIso, setInternalIso] = useState<string>(\n isControlled ? (value ?? \"\") : (defaultValue ?? \"\"),\n );\n const [display, setDisplay] = useState<string>(() =>\n toDisplayFromIso(isControlled ? value : defaultValue),\n );\n const [open, setOpen] = useState(false);\n\n // React-to-controlled-prop changes without a sync useEffect.\n const [lastPropValue, setLastPropValue] = useState<string | undefined>(value);\n if (isControlled && value !== lastPropValue) {\n setLastPropValue(value);\n const nextIso = value ?? \"\";\n setInternalIso(nextIso);\n if (toIsoFromDisplay(display) !== nextIso) {\n setDisplay(toDisplayFromIso(nextIso));\n }\n }\n\n const iso = isControlled ? (value ?? \"\") : internalIso;\n\n const textRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(ref, () => textRef.current as HTMLInputElement);\n\n const emit = useCallback(\n (nextIso: string) => {\n onChange?.({ target: { name, value: nextIso } });\n },\n [name, onChange],\n );\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskInput(e.target.value);\n setDisplay(masked);\n const nextIso = toIsoFromDisplay(masked);\n if (nextIso !== iso) {\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n } else if (!nextIso && iso) {\n if (!isControlled) setInternalIso(\"\");\n emit(\"\");\n }\n },\n [iso, isControlled, emit, maskInput, toIsoFromDisplay],\n );\n\n const handleCalendarSelect = useCallback(\n (d: Date) => {\n const nextIso = dateToIso(d);\n setDisplay(isoToDisplay(nextIso));\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n setOpen(false);\n // Restore focus to the text field for keyboard continuity.\n requestAnimationFrame(() => textRef.current?.focus());\n },\n [isControlled, emit],\n );\n\n const handleYearSelect = useCallback(\n (year: number) => {\n const nextIso = yearToIso(String(year));\n setDisplay(formatLabel ? formatLabel(year) : String(year));\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n setOpen(false);\n requestAnimationFrame(() => textRef.current?.focus());\n },\n [isControlled, emit, formatLabel],\n );\n\n const minDate = isoToDate(min ?? \"\");\n const maxDate = isoToDate(max ?? \"\");\n const selectedDate = isoToDate(iso);\n const selectedYear = isYearMode ? Number(isoToYear(iso)) || undefined : undefined;\n const minYear = min ? Number(isoToYear(min)) : undefined;\n const maxYear = max ? Number(isoToYear(max)) : undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={textRef}\n id={id}\n type=\"text\"\n inputMode={hasCustomYearLabel ? undefined : \"numeric\"}\n autoComplete=\"off\"\n value={display}\n onChange={handleTextChange}\n placeholder={effectivePlaceholder}\n disabled={disabled}\n required={required}\n // formatLabel year-mode: the visible string may not be parseable\n // (e.g. \"2024-25\"), so prevent typing and route all picks through\n // the popover grid. Click anywhere on the input still opens it.\n readOnly={hasCustomYearLabel}\n onClick={hasCustomYearLabel && !disabled ? () => setOpen(true) : undefined}\n // Forwarding consumer-supplied autoFocus on a date input is intentional\n // (e.g. inline edit cells, return-from-modal flows). Decision lives at the call site.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={ariaLabel}\n className={cn(\n \"rounded-input bg-surface text-fg flex h-9 w-full border font-mono text-[13px] tabular-nums\",\n \"border-rule-strong py-2\",\n iconPosition === \"left\" ? \"pl-10 pr-3\" : \"pl-3 pr-10\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:font-body placeholder:text-fg-4\",\n \"focus-visible:border-accent focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n hasCustomYearLabel && \"cursor-pointer\",\n )}\n />\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n tabIndex={-1}\n aria-label=\"Open calendar\"\n className={cn(\n \"text-fg-3 absolute inset-y-0 flex w-10 cursor-pointer items-center justify-center\",\n iconPosition === \"left\" ? \"left-0 rounded-l-input\" : \"right-0 rounded-r-input\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n )}\n >\n <CalendarIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={iconPosition === \"left\" ? \"start\" : \"end\"}\n sideOffset={6}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {isYearMode ? (\n <YearGrid\n selected={selectedYear}\n onSelect={handleYearSelect}\n minYear={minYear}\n maxYear={maxYear}\n formatLabel={formatLabel}\n // Mirror the day-Calendar's autoFocus so Tab/Enter and the\n // selected-cell focus ring work the moment the popover\n // opens. PopoverContent's onOpenAutoFocus is prevented so\n // focus would otherwise stay on the trigger.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n />\n ) : (\n <Calendar\n selected={selectedDate ?? null}\n onSelect={handleCalendarSelect}\n minDate={minDate}\n maxDate={maxDate}\n defaultMonth={selectedDate ?? minDate ?? undefined}\n // Anchor keyboard focus on a day cell so ←/→/↑/↓ navigate the\n // grid the moment the popover opens. Without this the popover\n // suppresses Radix's auto-focus (so the input keeps focus) and\n // arrow keys do nothing until the user clicks a day.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n />\n )}\n </PopoverContent>\n </Popover>\n {name && <input type=\"hidden\" name={name} value={iso} />}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n});\n\nDatePicker.displayName = \"DatePicker\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useId, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\n\nimport { cn } from \"../lib/cn\";\nimport {\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n isoToDate,\n isoToDisplay,\n} from \"./date-utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * DateRangePicker — single read-only input + Popover + range Calendar.\n *\n * Sibling of `DatePicker`, but for a `{ from, to }` pair. Renders as ONE\n * input-shaped trigger displaying \"MM/DD/YYYY – MM/DD/YYYY\" (or a\n * placeholder). Clicking the trigger opens a two-month side-by-side\n * range calendar; the user picks both edges in the calendar — typing is\n * not supported in this primitive (use `DatePicker` x2 if you need typed\n * input on each edge).\n *\n * Public API:\n * - `value` — `{ from?: string; to?: string }` controlled value\n * (ISO `YYYY-MM-DD` on each side, both optional).\n * - `defaultValue` — initial uncontrolled value.\n * - `onChange` — fired whenever either edge changes. Receives the\n * full `{ from, to }` (each may be empty string).\n * - `name` — hidden inputs `<name>_from` + `<name>_to` mirror\n * the ISO values for native form posts.\n * - `min` / `max` — ISO strings; gate selection at both edges.\n * - `iconPosition` — `\"left\" | \"right\"` (default `\"right\"`). Places the\n * calendar glyph at either edge of the trigger.\n * - `label`, `error`, `disabled`, `required`, `placeholder`, `className`,\n * `aria-label` — same shape as DatePicker.\n * - `forwardRef<HTMLButtonElement>` points to the trigger button.\n *\n * Behaviour:\n * - Trigger is read-only; clicking anywhere on it opens the popover.\n * - Picking dates in the calendar always emits `{ from, to }` together,\n * even when the user is still mid-range (`to` may be empty).\n * - Popover closes once both edges are picked. Single-edge picks keep\n * it open so the user can finish without re-clicking the trigger.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface DateRangeValue {\n from?: string;\n to?: string;\n}\n\ninterface DateRangePickerProps {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (value: DateRangeValue) => void;\n name?: string;\n id?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n /** Shown when both edges are empty. Defaults to \"Select date range\". */\n placeholder?: string;\n className?: string;\n min?: string;\n max?: string;\n /** Calendar glyph position inside the trigger. Default `\"right\"`. */\n iconPosition?: \"left\" | \"right\";\n \"aria-label\"?: string;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n defaultValue,\n onChange,\n name,\n id: providedId,\n label,\n error,\n disabled,\n required,\n placeholder = \"Select date range\",\n className,\n min,\n max,\n iconPosition = \"right\",\n \"aria-label\": ariaLabel,\n },\n ref,\n ) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const isControlled = value !== undefined;\n\n const [internalValue, setInternalValue] = useState<DateRangeValue>(\n isControlled ? (value ?? {}) : (defaultValue ?? {}),\n );\n const [open, setOpen] = useState(false);\n\n // React-to-controlled-prop changes without a sync useEffect.\n const [lastFromProp, setLastFromProp] = useState<string | undefined>(value?.from);\n const [lastToProp, setLastToProp] = useState<string | undefined>(value?.to);\n if (isControlled && value?.from !== lastFromProp) {\n setLastFromProp(value?.from);\n setInternalValue((prev) => ({ ...prev, from: value?.from ?? \"\" }));\n }\n if (isControlled && value?.to !== lastToProp) {\n setLastToProp(value?.to);\n setInternalValue((prev) => ({ ...prev, to: value?.to ?? \"\" }));\n }\n\n const current: DateRangeValue = useMemo(\n () => (isControlled ? (value ?? {}) : internalValue),\n [isControlled, value, internalValue],\n );\n\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement);\n\n // Mid-range draft. react-day-picker `mode=\"range\"` reads `selected` as\n // the authoritative range — if we feed back `{ from: Date, to: undefined }`\n // after the user's first click, RDP thinks the next click STARTS a fresh\n // range (and clobbers `from`). Keeping the in-progress state local lets\n // RDP own the \"what was clicked first\" logic until both edges are picked.\n const [draftRange, setDraftRange] = useState<{ from?: Date; to?: Date } | undefined>();\n\n const emit = useCallback(\n (next: DateRangeValue) => {\n onChange?.({ from: next.from ?? \"\", to: next.to ?? \"\" });\n },\n [onChange],\n );\n\n const handleCalendarSelect = useCallback(\n (range: { from?: Date; to?: Date } | undefined) => {\n // Always store what RDP just told us so the calendar reflects the\n // user's progress on the next render.\n setDraftRange(range);\n\n const fromIso = range?.from ? dateToIso(range.from) : \"\";\n const toIso = range?.to ? dateToIso(range.to) : \"\";\n\n // react-day-picker treats a single click in `mode=\"range\"` as a\n // degenerate range where `from === to`. That's just the user\n // picking their FIRST edge — keep the popover open so they can\n // pick the closing edge. Commit + close only when both edges\n // are picked AND they're DIFFERENT dates.\n if (fromIso && toIso && fromIso !== toIso) {\n const next: DateRangeValue = { from: fromIso, to: toIso };\n if (!isControlled) setInternalValue(next);\n emit(next);\n setDraftRange(undefined);\n setOpen(false);\n }\n },\n [isControlled, emit],\n );\n\n // When the popover closes (esc, click-outside, etc.) drop the draft so\n // the next open starts fresh from the committed value.\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next);\n if (!next) setDraftRange(undefined);\n }, []);\n\n const minDate = isoToDate(min ?? \"\");\n const maxDate = isoToDate(max ?? \"\");\n const committedRange = {\n from: isoToDate(current.from ?? \"\"),\n to: isoToDate(current.to ?? \"\"),\n };\n // Show the draft while mid-range; otherwise show the committed range.\n const selectedRange = draftRange ?? committedRange;\n const disabledMatcher = (() => {\n if (!minDate && !maxDate) return undefined;\n if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];\n if (minDate) return { before: minDate };\n return { after: maxDate as Date };\n })();\n\n const fromDisplay = isoToDisplay(current.from);\n const toDisplay = isoToDisplay(current.to);\n const hasValue = !!(fromDisplay || toDisplay);\n // Compose the display string. When only one edge is filled, show it\n // alongside the placeholder mask for the empty side so the field\n // visibly hints at \"still need to pick the other end.\"\n const displayText = hasValue\n ? `${fromDisplay || DATE_DISPLAY_PLACEHOLDER} – ${toDisplay || DATE_DISPLAY_PLACEHOLDER}`\n : \"\";\n\n const iconNode = (\n <CalendarIcon\n className={cn(\"size-4 shrink-0\", disabled ? \"text-fg-disabled\" : \"text-fg-3\")}\n aria-hidden=\"true\"\n />\n );\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <Popover open={open && !disabled} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n disabled={disabled}\n data-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={ariaLabel ?? label ?? \"Date range\"}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n \"rounded-input bg-surface flex h-9 w-full cursor-pointer items-center border font-mono text-[13px] tabular-nums\",\n \"border-rule-strong px-3 py-2 gap-2\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:border-accent focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-bg-disabled\",\n \"data-[invalid=true]:border-danger-line data-[invalid=true]:focus-visible:border-danger-fg\",\n \"data-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n )}\n >\n {iconPosition === \"left\" && iconNode}\n <span\n className={cn(\n \"font-mono flex-1 truncate text-left\",\n hasValue ? \"text-fg\" : \"font-body text-fg-4\",\n )}\n >\n {displayText || placeholder}\n </span>\n {iconPosition === \"right\" && iconNode}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={iconPosition === \"right\" ? \"end\" : \"start\"}\n sideOffset={6}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DayPicker\n mode=\"range\"\n numberOfMonths={2}\n // `navLayout=\"around\"` renders prev/next chevrons INSIDE each\n // month's caption row (one on each side of the title) instead\n // of as a single calendar-wide nav bar. Without this RDP puts\n // a sibling <nav> at the calendar root with absolute positioning\n // hooks our classNames can't reach properly, leading to a click\n // dead-zone across the caption.\n navLayout=\"around\"\n // RDP's DateRange requires `from: Date`. When the user hasn't\n // picked anything yet (both edges undefined), pass undefined\n // so RDP renders the calendar in its empty state.\n selected={selectedRange.from ? { from: selectedRange.from, to: selectedRange.to } : undefined}\n onSelect={handleCalendarSelect}\n disabled={disabledMatcher}\n showOutsideDays\n // Anchor keyboard focus on a day cell so ←/→/↑/↓ navigate the\n // grid the moment the popover opens. Without this the popover\n // suppresses Radix's auto-focus (so the trigger keeps focus)\n // and arrow keys do nothing until the user clicks a day. The\n // popover only opens on explicit user action, so this is the\n // documented exception to the no-autofocus rule.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n defaultMonth={selectedRange.from ?? minDate ?? undefined}\n components={{\n Chevron: ({ orientation, className: chevClass }) => {\n const Icon = orientation === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return <Icon className={cn(\"text-fg-3 size-4\", chevClass)} aria-hidden=\"true\" />;\n },\n }}\n className=\"font-body text-fg select-none\"\n classNames={{\n root: \"p-3\",\n months: \"flex flex-col gap-6 sm:flex-row sm:gap-4\",\n month: \"relative space-y-3 w-[16rem] flex-none\",\n // With navLayout=\"around\", the chevron buttons live inside\n // the caption row, one on each side of the month title.\n // The caption row distributes them via space-between so\n // each chevron stays in its natural inline flow — no\n // absolute positioning gymnastics.\n month_caption:\n \"flex h-7 items-center justify-center font-display text-[13px] font-medium text-fg\",\n caption_label: \"tabular-nums\",\n nav: \"contents\",\n // navLayout=\"around\" renders Prev as a sibling BEFORE the\n // left month's caption, and Next as a sibling AFTER the\n // right month's caption. Absolute-position each so they\n // sit at their own month's top corners without disturbing\n // the centered caption row.\n button_previous:\n \"absolute left-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n button_next:\n \"absolute right-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1\",\n weeks: \"\",\n week: \"flex w-full mt-1\",\n day: \"flex-1 text-center relative p-0\",\n day_button: cn(\n \"inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n ),\n today: \"[&_button]:font-semibold [&_button]:text-accent\",\n range_start:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover rounded-l-input\",\n range_end:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover rounded-r-input\",\n range_middle:\n \"[&_button]:bg-pro-bg [&_button]:text-pro-fg [&_button]:hover:bg-pro-bg-hover [&_button]:rounded-none\",\n outside: \"[&_button]:text-fg-5\",\n disabled: \"[&_button]:text-fg-disabled\",\n hidden: \"invisible\",\n }}\n />\n </PopoverContent>\n </Popover>\n {name && (\n <>\n <input type=\"hidden\" name={`${name}_from`} value={current.from ?? \"\"} />\n <input type=\"hidden\" name={`${name}_to`} value={current.to ?? \"\"} />\n </>\n )}\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\nimport { XIcon } from \"./icons\";\n\nconst chipVariants = cva(\n cn(\n \"inline-flex items-center gap-1 rounded-full px-2.5 py-1\",\n \"text-[12px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n ),\n {\n variants: {\n variant: {\n primary: \"bg-primary/10 text-primary hover:bg-primary/15\",\n neutral: \"bg-muted text-fg-2 hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n },\n);\n\ninterface DismissibleChipProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\" | \"children\">,\n VariantProps<typeof chipVariants> {\n label: React.ReactNode;\n onDismiss: () => void;\n}\n\nexport const DismissibleChip = React.forwardRef<\n HTMLButtonElement,\n DismissibleChipProps\n>(function DismissibleChip(\n { label, onDismiss, variant, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onDismiss}\n aria-label={\n typeof label === \"string\" ? `Remove ${label} filter` : \"Remove filter\"\n }\n className={cn(chipVariants({ variant }), className)}\n {...props}\n >\n <span>{label}</span>\n <XIcon size={12} aria-hidden=\"true\" />\n </button>\n );\n});\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * DropdownMenu — Radix UI dropdown-menu primitive. Modified\n *\n * Public API preserved:\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem (with `destructive` prop), DropdownMenuSeparator,\n * DropdownMenuLabel, DropdownMenuGroup\n *\n * NEW (additive, shadcn parity):\n * DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubTrigger,\n * DropdownMenuSubContent, DropdownMenuCheckboxItem,\n * DropdownMenuRadioGroup, DropdownMenuRadioItem,\n * DropdownMenuShortcut\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[state=open]:bg-bg-2 data-[state=open]:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"text-fg-3 ml-auto size-4\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n // Portal the sub-content to the body. The parent Content keeps a persistent\n // `scale-100` transform (its open-state animation), which makes it the\n // containing block for `position: fixed` descendants — and its\n // `overflow-hidden` would then clip this Popper-positioned flyout to nothing.\n // Portaling escapes both the transformed ancestor and the clip.\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 6, align = \"start\", ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\ninterface DropdownMenuItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Item\n> {\n /** Render as a destructive (danger) action. */\n destructive?: boolean;\n /** Increase left padding to align with checkbox/radio items. */\n inset?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuItemProps\n>(({ className, destructive, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n destructive && \"text-danger-fg focus:bg-danger-bg focus:text-danger-fg\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"bg-rule -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"text-fg-4 ml-auto font-mono text-[11px] tracking-wider\", className)}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * EmptyState — display headline (Geist), fg-3 description, neutral icon halo on bg-2.\n *\n * Public API preserved: `icon`, `title`, `description`, `action`.\n */\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center justify-center px-6 py-12 text-center\", className)}\n {...props}\n >\n {icon && (\n <div\n className={cn(\n \"mb-4 flex size-12 items-center justify-center rounded-full\",\n \"bg-bg-2 text-fg-4 [&>svg]:size-6\",\n )}\n >\n {icon}\n </div>\n )}\n <h3 className=\"font-display text-fg text-base font-medium tracking-[-0.02em]\">{title}</h3>\n {description && <p className=\"text-fg-3 mt-1 max-w-sm text-sm\">{description}</p>}\n {action && <div className=\"mt-5\">{action}</div>}\n </div>\n );\n});\n\nEmptyState.displayName = \"EmptyState\";\n","\"use client\";\n\nimport { useCallback, useId, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { UploadIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * FileUpload — custom drag-drop + file picker.\n *\n * Public API preserved:\n * <FileUpload accept maxSize multiple onFilesSelected disabled className />\n *\n * Tokenized style:\n * - dashed `border-rule-strong` drop zone, rounded-card\n * - hover/drag-over uses suite accent (bg-pro-bg / border-pro-line / text-pro-fg)\n * - catalog `UploadIcon`\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface FileUploadProps extends React.HTMLAttributes<HTMLDivElement> {\n accept?: string;\n maxSize?: number;\n multiple?: boolean;\n onFilesSelected?: (files: File[]) => void;\n disabled?: boolean;\n}\n\nexport function FileUpload({\n accept,\n maxSize,\n multiple,\n onFilesSelected,\n disabled,\n className,\n children,\n ...props\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const [isDragOver, setIsDragOver] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const validateFiles = useCallback(\n (files: File[]): File[] => {\n setError(null);\n const acceptTypes = accept ? accept.split(\",\").map((t) => t.trim()) : null;\n\n const valid = files.filter((file) => {\n if (acceptTypes) {\n const ext = `.${file.name.split(\".\").pop()?.toLowerCase()}`;\n const matchesType = acceptTypes.some(\n (type) =>\n type === ext ||\n type === file.type ||\n (type.endsWith(\"/*\") && file.type.startsWith(type.replace(\"/*\", \"/\"))),\n );\n if (!matchesType) {\n setError(`File type not accepted: ${file.name}`);\n return false;\n }\n }\n if (maxSize && file.size > maxSize) {\n setError(`File too large: ${file.name} (max ${formatBytes(maxSize)})`);\n return false;\n }\n return true;\n });\n\n return valid;\n },\n [accept, maxSize],\n );\n\n function handleFiles(fileList: FileList) {\n const files = Array.from(fileList);\n const valid = validateFiles(multiple ? files : files.slice(0, 1));\n if (valid.length > 0) onFilesSelected?.(valid);\n }\n\n function handleDrop(e: React.DragEvent) {\n e.preventDefault();\n setIsDragOver(false);\n if (disabled) return;\n handleFiles(e.dataTransfer.files);\n }\n\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <label\n htmlFor={inputId}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setIsDragOver(true);\n }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={handleDrop}\n className={cn(\n \"flex flex-col items-center justify-center gap-2\",\n \"rounded-card border-rule-strong bg-surface border border-dashed\",\n \"font-body p-8 text-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n // Hover (when not disabled)\n !disabled && \"hover:border-pro-line hover:bg-pro-bg/40\",\n // Drag-over → Pro purple highlight\n isDragOver && \"border-pro-line bg-pro-bg\",\n disabled && \"border-rule bg-bg-disabled text-fg-disabled cursor-not-allowed\",\n !disabled && \"cursor-pointer\",\n )}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={(e) => {\n if (e.target.files) handleFiles(e.target.files);\n // Reset value so the same file can be re-selected\n e.target.value = \"\";\n }}\n className=\"fixed -top-[9999px] -left-[9999px] opacity-0\"\n disabled={disabled}\n tabIndex={-1}\n />\n {children ?? (\n <>\n <div\n className={cn(\n \"rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n isDragOver ? \"bg-pro-fg text-fg-on-pro\" : \"bg-pro-bg text-pro-fg\",\n )}\n aria-hidden=\"true\"\n >\n <UploadIcon className=\"size-5\" />\n </div>\n <div className=\"text-fg-3 text-sm\">\n <span className=\"text-fg font-medium\">Click to upload</span> or drag and drop\n </div>\n {accept && <p className=\"text-fg-4 font-mono text-[10.5px]\">Accepted: {accept}</p>}\n {maxSize && (\n <p className=\"text-fg-4 font-mono text-[10.5px]\">Max size: {formatBytes(maxSize)}</p>\n )}\n </>\n )}\n </label>\n {error && (\n <p role=\"alert\" className=\"text-danger-fg mt-2 text-sm\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n","import { cn } from \"../lib/cn\";\n\nimport { AlertCircleIcon, CheckCircle2Icon } from \"./icons\";\ninterface FormErrorProps extends React.HTMLAttributes<HTMLParagraphElement> {\n children: React.ReactNode;\n}\n\n/**\n * Inline form error — paired below an input to communicate validation failure.\n * Uses architectural --color-danger-fg token.\n */\nexport function FormError({ children, className, ...props }: FormErrorProps) {\n return (\n <p\n role=\"alert\"\n className={cn(\"text-danger-fg flex items-center gap-1.5 text-xs leading-tight\", className)}\n {...props}\n >\n <AlertCircleIcon className=\"size-3.5 shrink-0\" strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </p>\n );\n}\n\ninterface FormSuccessProps extends React.HTMLAttributes<HTMLParagraphElement> {\n children: React.ReactNode;\n}\n\n/**\n * Inline form success — paired below an input to confirm a saved value.\n * Uses architectural --color-success-fg token.\n */\nexport function FormSuccess({ children, className, ...props }: FormSuccessProps) {\n return (\n <p\n role=\"status\"\n className={cn(\"text-success-fg flex items-center gap-1.5 text-xs leading-tight\", className)}\n {...props}\n >\n <CheckCircle2Icon className=\"size-3.5 shrink-0\" strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </p>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * FormSection — a single grouped block inside a settings/profile form.\n *\n * Renders a real `<fieldset>` + `<legend>` so assistive tech announces the\n * group, and gives consumers a consistent place to hang a title, helper\n * description, and (optionally) an action button on the trailing edge of\n * the heading row.\n *\n * Use inside a parent `<form>` — repeat one `<FormSection>` per logical\n * group (Contact, Address, Notifications, etc.). Slot whatever fields you\n * want into `children`; FormSection does not impose a grid.\n *\n * For marketing-style centered section heads, prefer `<SectionHeader>`.\n * For lower-level title+description blocks that aren't part of a form,\n * use `<SectionHead>` from `./section`.\n */\ninterface FormSectionProps\n extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, \"title\"> {\n /** The section heading (renders as `<legend>` text). */\n title: React.ReactNode;\n /** Optional helper text shown directly under the title. */\n description?: React.ReactNode;\n /** Optional trailing slot for an action button or status. */\n action?: React.ReactNode;\n /** Space between the heading block and the fields. Default `mt-4`. */\n headSpacing?: string;\n}\n\nexport const FormSection = forwardRef<HTMLFieldSetElement, FormSectionProps>(function FormSection(\n { title, description, action, headSpacing = \"mt-4\", className, children, ...props },\n ref,\n) {\n return (\n <fieldset ref={ref} className={cn(\"min-w-0\", className)} {...props}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <legend className=\"text-fg text-sm font-semibold\">{title}</legend>\n {description && (\n <p className=\"text-fg-3 mt-0.5 text-xs leading-relaxed\">{description}</p>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div className={headSpacing}>{children}</div>\n </fieldset>\n );\n});\nFormSection.displayName = \"FormSection\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * HoverCard — Radix UI hover-card primitive. Modified\n *\n * Public API preserved:\n * HoverCard, HoverCardTrigger, HoverCardContent\n *\n * NEW (additive): HoverCardPortal is exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst HoverCard = HoverCardPrimitive.Root;\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\nconst HoverCardPortal = HoverCardPrimitive.Portal;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", side = \"bottom\", sideOffset = 8, ...props }, ref) => (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-64 border p-4 outline-none\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardPortal, HoverCardContent };\n","\"use client\";\n\nimport { forwardRef, useId, useState } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { EyeIcon, EyeOffIcon } from \"./icons\";\n/**\n * Input variants. Mirrors the raw HTML `<input>` styled per the suite tokens\n * (rule-strong border, surface bg, accent focus ring).\n */\nconst inputVariants = cva(\n [\n \"flex w-full rounded-input border bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n ],\n {\n variants: {\n variant: {\n default: \"border-rule-strong\",\n ghost: \"border-transparent bg-transparent focus-visible:bg-surface\",\n },\n inputSize: {\n sm: \"h-8 px-2.5 py-1 text-xs\",\n md: \"h-9 px-3 py-2 text-[13px]\",\n lg: \"h-11 px-3.5 py-2.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n },\n);\n\nexport type InputVariants = VariantProps<typeof inputVariants>;\n\ninterface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, InputVariants {\n label?: string;\n error?: string;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n label,\n error,\n prefixIcon,\n suffixIcon,\n variant,\n inputSize,\n type = \"text\",\n className,\n id: providedId,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const [showPassword, setShowPassword] = useState(false);\n const isPassword = type === \"password\";\n const inputType = isPassword && showPassword ? \"text\" : type;\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {prefixIcon && (\n <span\n className=\"text-fg-4 pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 [&>svg]:size-4\"\n aria-hidden=\"true\"\n >\n {prefixIcon}\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type={inputType}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n className={cn(\n inputVariants({ variant, inputSize }),\n prefixIcon && \"pl-9\",\n (suffixIcon || isPassword) && \"pr-9\",\n className,\n )}\n {...props}\n />\n {isPassword && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((prev) => !prev)}\n className=\"text-fg-4 hover:text-fg absolute top-1/2 right-2.5 -translate-y-1/2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none motion-reduce:transition-none\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n tabIndex={-1}\n >\n {showPassword ? (\n <EyeOffIcon className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <EyeIcon className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n {suffixIcon && !isPassword && (\n <span\n className=\"text-fg-4 pointer-events-none absolute top-1/2 right-3 -translate-y-1/2 [&>svg]:size-4\"\n aria-hidden=\"true\"\n >\n {suffixIcon}\n </span>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n});\n\nInput.displayName = \"Input\";\n\nexport { inputVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"./dialog\";\n\nimport { CommandIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * KeyboardShortcutsDialog — `?` toggled help dialog.\n *\n * Consumers pass `sections` describing their app's shortcuts. The package\n * ships no app-specific content — only a universal \"General\" section is\n * shown when `sections` is omitted. Mount once near the app root.\n *\n * Built on the `Dialog` primitive (Radix UI). Renders a clean 2-column\n * grid of shortcuts using `<kbd>` styled via the suite tokens.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface KeyboardShortcut {\n keys: readonly string[];\n description: string;\n}\n\nexport interface KeyboardShortcutSection {\n title: string;\n icon?: React.ReactNode;\n shortcuts: readonly KeyboardShortcut[];\n /** When true, this section spans 2 rows in the 2-column grid layout. */\n wide?: boolean;\n}\n\nexport interface KeyboardShortcutsDialogProps {\n /**\n * App-specific sections to display above the universal General section.\n * Omit for portal/utility apps that only need the universal keys.\n */\n sections?: readonly KeyboardShortcutSection[];\n /**\n * Key that toggles the dialog. Default `\"?\"`. Pass `null` to disable the\n * built-in hotkey listener — useful when an app wants to own the global\n * keydown handling.\n */\n hotkey?: string | null;\n}\n\nconst GENERAL_SECTION: KeyboardShortcutSection = {\n title: \"General\",\n icon: <CommandIcon className=\"size-3\" />,\n shortcuts: [\n { keys: [\"⌘\", \"K\"], description: \"Command palette\" },\n { keys: [\"/\"], description: \"Focus search\" },\n { keys: [\"?\"], description: \"Keyboard shortcuts\" },\n { keys: [\"Esc\"], description: \"Close / go back\" },\n ],\n};\n\n/* ── Kbd token ─────────────────────────────────────────────────────── */\nconst kbdClass = cn(\n \"inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]\",\n \"font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon\",\n \"[border-bottom-width:1.5px]\",\n);\n\nexport function KeyboardShortcutsDialog({\n sections,\n hotkey = \"?\",\n}: KeyboardShortcutsDialogProps = {}) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n if (hotkey === null) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n const target = e.target as HTMLElement | null;\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement ||\n target?.isContentEditable\n ) {\n return;\n }\n\n if (e.key === hotkey && !e.metaKey && !e.ctrlKey && !e.altKey) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [hotkey]);\n\n const allSections: readonly KeyboardShortcutSection[] = sections\n ? [...sections, GENERAL_SECTION]\n : [GENERAL_SECTION];\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent size=\"md\" className=\"p-0\">\n <DialogHeader className=\"border-rule mb-0 border-b px-5 py-4 pr-12\">\n <DialogTitle className=\"text-sm font-semibold\">Keyboard Shortcuts</DialogTitle>\n </DialogHeader>\n\n <div className=\"scrollbar-thin max-h-[60vh] overflow-y-auto px-5 py-4\">\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-5\">\n {allSections.map((section) => (\n <div key={section.title} className={cn(section.wide && \"row-span-2\")}>\n <h3\n className={cn(\n \"mb-2.5 inline-flex items-center gap-1.5\",\n \"text-fg-3 font-mono text-[11px] tracking-[0.14em] uppercase\",\n )}\n >\n {section.icon}\n {section.title}\n </h3>\n <div className=\"space-y-1.5\">\n {section.shortcuts.map((shortcut) => (\n <div\n key={shortcut.description}\n className=\"flex items-center justify-between gap-3 py-1\"\n >\n <span className=\"text-fg text-sm\">{shortcut.description}</span>\n <div className=\"flex shrink-0 items-center gap-1\">\n {shortcut.keys.map((key, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"text-fg-4 mx-0.5 text-[11px]\">then</span>}\n <kbd className={kbdClass}>{key}</kbd>\n </React.Fragment>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"border-rule bg-bg-2/40 border-t px-5 py-3\">\n <p className=\"text-fg-3 text-[11px]\">\n Press <kbd className={kbdClass}>{hotkey ?? \"?\"}</kbd> anytime to toggle this dialog\n </p>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst labelVariants = cva(\n \"text-[13px] font-medium leading-none text-fg select-none peer-disabled:cursor-not-allowed peer-disabled:text-fg-disabled has-[+input:disabled]:text-fg-disabled\",\n);\n\ninterface LabelProps\n extends\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,\n VariantProps<typeof labelVariants> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<React.ElementRef<typeof LabelPrimitive.Root>, LabelProps>(\n function Label({ children, required, className, ...props }, ref) {\n return (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props}>\n {children}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </LabelPrimitive.Root>\n );\n },\n);\n\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { labelVariants };\n","import Link from \"next/link\";\nimport { forwardRef } from \"react\";\n\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"../lib/cn\";\n\ntype ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"destructive\"\n | \"success\"\n | \"ghost\"\n | \"outline\"\n | \"link\"\n | \"accent\"\n | \"dashed\";\n\ntype ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface LinkButtonProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n href: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n /**\n * Render a native `<a>` instead of `next/link`. Use for:\n * - cross-origin URLs (e.g. https://other-app.example/sign-in)\n * - same-origin `/api/*` route handlers that 302-redirect off-app\n * (next/link tries to client-route, which doesn't follow the 302)\n * - mailto: / tel: schemes\n *\n * When `target=\"_blank\"` is also set and no explicit `rel` was passed,\n * `rel=\"noopener noreferrer\"` is applied automatically.\n */\n external?: boolean;\n}\n\n/**\n * LinkButton — visually identical to `<Button>` but renders a link.\n * Shares `buttonVariants` so styling stays in lock-step.\n *\n * - Default: renders `next/link` (client-routed internal navigation).\n * - `external`: renders a native `<a>` so the browser handles the request\n * end-to-end. Required for cross-origin URLs and same-origin `/api/*`\n * handlers that 302 off-app.\n */\nexport const LinkButton = forwardRef<HTMLAnchorElement, LinkButtonProps>(function LinkButton(\n {\n href,\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n children,\n className,\n external,\n target,\n rel,\n ...props\n },\n ref,\n) {\n const classes = cn(buttonVariants({ variant, size }), className);\n\n const content = (\n <>\n {iconLeft && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconLeft}\n </span>\n )}\n {children}\n {iconRight && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconRight}\n </span>\n )}\n </>\n );\n\n if (external) {\n const safeRel = rel ?? (target === \"_blank\" ? \"noopener noreferrer\" : undefined);\n return (\n <a\n ref={ref}\n href={href}\n className={classes}\n target={target}\n rel={safeRel}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <Link ref={ref} href={href} className={classes} target={target} rel={rel} {...props}>\n {content}\n </Link>\n );\n});\n\nLinkButton.displayName = \"LinkButton\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Skeleton — animated placeholder. The `.skeleton` global class supplies\n * the shimmer animation (defined in tokens.css). All three primitives are\n * `aria-hidden` because they're decorative loading affordances.\n */\n\ninterface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"skeleton bg-bg-3 rounded-icon animate-pulse\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n});\nSkeleton.displayName = \"Skeleton\";\n\ninterface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n lines?: number;\n}\n\nexport const SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(function SkeletonText(\n { lines = 3, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"space-y-2\", className)} aria-hidden=\"true\" {...props}>\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n className={cn(\n \"skeleton bg-bg-3 rounded-icon h-4 animate-pulse\",\n i === lines - 1 && \"w-3/4\",\n )}\n />\n ))}\n </div>\n );\n});\nSkeletonText.displayName = \"SkeletonText\";\n\ninterface SkeletonCircleProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nexport const SkeletonCircle = forwardRef<HTMLDivElement, SkeletonCircleProps>(\n function SkeletonCircle({ size = 40, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"skeleton bg-bg-3 animate-pulse rounded-full\", className)}\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n {...props}\n />\n );\n },\n);\nSkeletonCircle.displayName = \"SkeletonCircle\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * LoadingRows — N repeating skeleton bars stacked vertically.\n *\n * Replaces the recurring `Array.from({length:N}).map((_, i) => <Skeleton/>)`\n * snippet that surfaces in inboxes, document lists, settings tables, and\n * any other list-shaped loading state. The primitive owns the `aria-busy`\n * + `aria-label` semantics so each consumer doesn't reinvent them.\n *\n * For richer per-row composition (avatar + two text lines, table cells,\n * card grids) keep using `<Skeleton>` / `<SkeletonCircle>` / `<SkeletonText>`\n * directly inside your own list renderer. `LoadingRows` is the *uniform*\n * row case.\n */\ninterface LoadingRowsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** How many skeleton rows to render. */\n count?: number;\n /** Height of each row. Accepts any Tailwind height utility (`h-14`, `h-3.5`). Default `h-14`. */\n rowHeight?: string;\n /** Vertical gap between rows. Default `gap-2`. */\n gap?: string;\n /** Override the row Skeleton className (radius, width, etc). */\n rowClassName?: string;\n /** Accessible label announced to screen readers. */\n label?: string;\n}\n\nexport const LoadingRows = forwardRef<HTMLDivElement, LoadingRowsProps>(function LoadingRows(\n {\n count = 3,\n rowHeight = \"h-14\",\n gap = \"gap-2\",\n rowClassName,\n label = \"Loading\",\n className,\n ...props\n },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={label}\n className={cn(\"flex flex-col\", gap, className)}\n {...props}\n >\n {Array.from({ length: count }).map((_, i) => (\n <Skeleton key={i} className={cn(rowHeight, \"w-full\", rowClassName)} />\n ))}\n </div>\n );\n});\nLoadingRows.displayName = \"LoadingRows\";\n","import Image from \"next/image\";\nimport Link from \"next/link\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Logo — Assure suite wordmark. Renders \"Assure\" in `fg` plus an optional\n * product suffix in `pro-fg` (e.g., \"Pro\", \"Tax\"), set in Geist (font-display).\n *\n * The product suffix is configurable so the same component serves every\n * Assure product. The default preserves the original \"Assure Pro\" output —\n * existing consumers do not need to change anything.\n *\n * Public API:\n * - `size`, `href`, `showText`, `inverted` (visual)\n * - `productName` (the suffix text; `null` renders just \"Assure\")\n * - `className`, `iconClassName`, `textClassName` (style overrides)\n */\n\nconst sizeStyles = {\n sm: { icon: 20, text: \"text-sm\", gap: \"gap-2\" },\n md: { icon: 24, text: \"text-[17px]\", gap: \"gap-2.5\" },\n lg: { icon: 32, text: \"text-xl\", gap: \"gap-3\" },\n} as const;\n\ninterface LogoProps {\n size?: keyof typeof sizeStyles;\n href?: string;\n showText?: boolean;\n className?: string;\n iconClassName?: string;\n textClassName?: string;\n /** Product suffix rendered after \"Assure\". Pass `null` to render just \"Assure\". Defaults to \"Pro\" for backwards compatibility. */\n productName?: string | null;\n /** When true, render on dark/brand surfaces (white \"Assure\" + lighter suffix). */\n inverted?: boolean;\n}\n\nexport function Logo({\n size = \"md\",\n href = \"/\",\n showText = true,\n className,\n iconClassName,\n textClassName,\n productName = \"Pro\",\n inverted = false,\n}: LogoProps) {\n const s = sizeStyles[size];\n const ariaLabel = productName ? `Assure ${productName}` : \"Assure\";\n\n return (\n <Link\n href={href}\n className={cn(\"inline-flex items-center\", s.gap, className)}\n aria-label={ariaLabel}\n >\n <Image\n src=\"/brand/mark.svg\"\n alt=\"\"\n width={s.icon}\n height={s.icon}\n priority\n className={cn(\"flex-shrink-0\", iconClassName)}\n />\n {showText && (\n <span\n className={cn(\n \"font-display font-semibold tracking-[-0.025em]\",\n s.text,\n inverted ? \"text-white\" : \"text-fg\",\n textClassName,\n )}\n >\n <span>Assure</span>\n {productName && (\n <>\n {\" \"}\n <span className=\"text-pro-fg font-medium\">{productName}</span>\n </>\n )}\n </span>\n )}\n </Link>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CheckIcon, ChevronDownIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * MultiFilterPill — toolbar filter chip with multi-select dropdown.\n *\n * Matches the `.toolbar .filter-chip` mockup pattern used on the Clients\n * list. Inactive: neutral surface. Active (1+ selected): pro-purple tint\n * with a clear (X) affordance and a count or single-label.\n *\n * Public API preserved:\n * <MultiFilterPill\n * label icon\n * selected (Set<string>)\n * options ({ key, label, dot? }[])\n * onToggle onClear\n * />\n *\n * Implementation: Radix Popover (already refactored) with custom\n * checkbox-style menu items for multi-select. Closing the popover does\n * not auto-clear; that behaviour stays the caller's choice.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface MultiFilterPillProps {\n label: string;\n icon?: React.ReactNode;\n selected: Set<string>;\n options: { key: string; label: string; dot?: string }[];\n onToggle: (key: string) => void;\n onClear: () => void;\n /**\n * Control size shared with Button / FilterChip: sm = h-8 / 13px, md = h-9 /\n * 14px, lg = h-10 / 16px. Defaults to the dense `sm` tier since filter pills\n * are toolbar controls — a pill then sits at the same 32px height and 13px\n * text as a Button sm / FilterChip sm in the same row.\n */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst TRIGGER_SIZE: Record<NonNullable<MultiFilterPillProps[\"size\"]>, string> = {\n sm: \"h-8 gap-1.5 px-2.5 text-[13px]\",\n md: \"h-9 gap-2 px-3 text-sm\",\n lg: \"h-10 gap-2 px-3.5 text-base\",\n};\n\nexport function MultiFilterPill({\n label,\n icon,\n selected,\n options,\n onToggle,\n onClear,\n size = \"sm\",\n}: MultiFilterPillProps) {\n const active = selected.size > 0;\n const displayLabel = active\n ? selected.size === 1\n ? (options.find((o) => o.key === [...selected][0])?.label ?? label)\n : `${label} · ${selected.size}`\n : label;\n\n return (\n <Popover>\n <PopoverTrigger\n className={cn(\n \"rounded-pill font-body inline-flex items-center border font-medium\",\n TRIGGER_SIZE[size],\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n active\n ? \"border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover\"\n : \"border-rule bg-surface text-fg-2 hover:border-rule-strong hover:bg-bg-2 hover:text-fg\",\n )}\n >\n {icon && (\n <span className=\"[&>svg]:size-3.5\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className=\"line-clamp-1\">{displayLabel}</span>\n {active ? (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onClear();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onClear();\n }\n }}\n className={cn(\n \"ml-0.5 inline-flex size-4 items-center justify-center rounded-full\",\n \"text-pro-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-pro-bg-active\",\n \"focus-visible:bg-pro-bg-active focus-visible:outline-none\",\n )}\n aria-label={`Clear ${label} filter`}\n >\n <XIcon className=\"size-3\" aria-hidden=\"true\" />\n </span>\n ) : (\n <ChevronDownIcon className=\"text-fg-4 size-3 shrink-0\" aria-hidden=\"true\" />\n )}\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n className=\"w-auto max-w-[280px] min-w-[180px] p-1\"\n >\n <ul\n className=\"scrollbar-thin max-h-[280px] overflow-y-auto\"\n role=\"listbox\"\n aria-multiselectable\n >\n {options.map((opt) => {\n const isSelected = selected.has(opt.key);\n return (\n <li key={opt.key} role=\"presentation\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onToggle(opt.key)}\n className={cn(\n \"rounded-pill flex w-full cursor-default items-center gap-2 px-2 py-1.5 text-[13px] outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:bg-bg-2 focus-visible:text-fg\",\n )}\n >\n <span\n className={cn(\n \"flex size-4 shrink-0 items-center justify-center rounded-[3px] border transition-colors duration-[var(--duration-fast)] motion-reduce:transition-none\",\n isSelected\n ? \"border-pro-fg bg-pro-fg text-fg-on-pro\"\n : \"border-rule-strong bg-surface\",\n )}\n aria-hidden=\"true\"\n >\n {isSelected && <CheckIcon className=\"size-3\" />}\n </span>\n {opt.dot && (\n <span\n className={cn(\"size-2 shrink-0 rounded-full\", opt.dot)}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"line-clamp-1\">{opt.label}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {active && (\n <>\n <div className=\"bg-rule -mx-1 my-1 h-px\" aria-hidden=\"true\" />\n <button\n type=\"button\"\n onClick={onClear}\n className={cn(\n \"rounded-pill flex w-full items-center justify-center px-2 py-1.5 text-[12px] outline-none\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:bg-bg-2 focus-visible:text-fg\",\n )}\n >\n Clear selection\n </button>\n </>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nMultiFilterPill.displayName = \"MultiFilterPill\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * MultiSelectField — comma-separated multi-toggle pill group.\n *\n * A row of pill buttons; clicking one toggles its membership in the\n * selection set. Selection is encoded as a single comma-separated string\n * (matches the legacy contract used by FormData submissions).\n *\n * Public API preserved:\n * <MultiSelectField label options value onChange className />\n *\n * Style: pill chips — `rounded-pill`, accent fill when selected,\n * neutral surface with `border-rule-strong` when unselected.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface MultiSelectFieldProps {\n label: string;\n options: string[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n /** Visual size; default \"md\" matches the form-row default. */\n size?: \"sm\" | \"md\";\n /** Optional id, used to associate the visible label with the group. */\n id?: string;\n}\n\nexport function MultiSelectField({\n label,\n options,\n value,\n onChange,\n className,\n size = \"md\",\n id,\n}: MultiSelectFieldProps) {\n const selected = React.useMemo(\n () => new Set(value ? value.split(\",\").filter(Boolean) : []),\n [value],\n );\n\n const toggle = (option: string) => {\n const next = new Set(selected);\n if (next.has(option)) {\n next.delete(option);\n } else {\n next.add(option);\n }\n onChange(Array.from(next).join(\",\"));\n };\n\n const generatedId = React.useId();\n const groupId = id ?? generatedId;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div\n id={`${groupId}-label`}\n className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\"\n >\n {label}\n </div>\n <div role=\"group\" aria-labelledby={`${groupId}-label`} className=\"flex flex-wrap gap-1.5\">\n {options.map((option) => {\n const isSelected = selected.has(option);\n return (\n <button\n key={option}\n type=\"button\"\n onClick={() => toggle(option)}\n aria-pressed={isSelected}\n className={cn(\n \"rounded-pill font-body inline-flex items-center border font-medium\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n size === \"sm\" ? \"px-2.5 py-0.5 text-xs\" : \"px-3 py-1 text-xs\",\n isSelected\n ? \"border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover\"\n : \"border-rule-strong bg-surface text-fg-2 hover:bg-bg-2 hover:text-fg\",\n )}\n >\n {option}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nMultiSelectField.displayName = \"MultiSelectField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OTPInput as OTPInputRoot, REGEXP_ONLY_DIGITS } from \"input-otp\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * OTPInput — `input-otp` library. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * <OTPInput name length error autoFocus defaultValue />\n *\n * Behavior preserved:\n * - Numeric-only entry (REGEXP_ONLY_DIGITS).\n * - The underlying form input carries `name` so native form posts continue\n * to receive a single concatenated value (matching legacy hidden-input).\n * - `defaultValue` seeds the field for uncontrolled usage.\n * - `error` toggles invalid styling + renders a centered error message.\n *\n * NEW (additive): consumers may pass `value` / `onChange` for controlled\n * usage; `onComplete` for auto-submit on full entry.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface OTPInputProps {\n name: string;\n length?: number;\n error?: string;\n autoFocus?: boolean;\n className?: string;\n defaultValue?: string;\n /** Optional controlled value (additive). */\n value?: string;\n /** Optional controlled onChange (additive). */\n onChange?: (value: string) => void;\n /** Optional callback fired when all slots are filled (additive). */\n onComplete?: (value: string) => void;\n /** Optional id for the underlying input (additive). */\n id?: string;\n /** Optional disabled flag (additive). */\n disabled?: boolean;\n}\n\nexport function OTPInput({\n name,\n length = 6,\n error,\n autoFocus = false,\n className,\n defaultValue,\n value,\n onChange,\n onComplete,\n id,\n disabled,\n}: OTPInputProps) {\n const errorId = id ? `${id}-error` : undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\n <OTPInputRoot\n name={name}\n id={id}\n maxLength={length}\n pattern={REGEXP_ONLY_DIGITS}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n // OTP inputs are typically the focus target of the screen they appear on\n // (e.g. step-up auth, post-redirect verification). Consumer opts in via prop.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n defaultValue={defaultValue}\n value={value}\n onChange={onChange}\n onComplete={onComplete}\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n containerClassName={cn(\n \"flex items-center justify-center gap-2.5\",\n // §5.17: disabled tints slot bg + border + text via token cascade,\n // not opacity (which destroys contrast on character readouts).\n \"has-[:disabled]:cursor-not-allowed\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:bg-bg-disabled\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:border-rule\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:text-fg-disabled\",\n )}\n render={({ slots }) => (\n <div className=\"flex items-center gap-2.5\" role=\"group\" aria-label=\"One-time password\">\n {slots.map((slot, idx) => (\n <OTPSlot key={idx} {...slot} hasError={!!error} />\n ))}\n </div>\n )}\n />\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg text-center text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nOTPInput.displayName = \"OTPInput\";\n\ninterface OTPSlotProps {\n isActive: boolean;\n char: string | null;\n hasFakeCaret: boolean;\n hasError: boolean;\n}\n\nfunction OTPSlot({ isActive, char, hasFakeCaret, hasError }: OTPSlotProps) {\n return (\n <div\n className={cn(\n \"relative flex h-12 w-10 items-center justify-center\",\n \"rounded-input bg-surface text-fg border font-mono text-lg tabular-nums\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"sm:h-14 sm:w-12 sm:text-xl\",\n \"border-rule-strong\",\n isActive && \"border-accent z-10 [box-shadow:var(--shadow-focus-ring)]\",\n hasError && \"border-danger-line\",\n hasError && isActive && \"border-danger-fg [box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n )}\n aria-hidden=\"true\"\n >\n {char}\n {hasFakeCaret && !char && (\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n aria-hidden=\"true\"\n >\n <div className=\"bg-fg h-5 w-px opacity-80 motion-safe:animate-pulse\" />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from \"./icons\";\n/**\n * Pagination — custom (no Radix equivalent).\n * Tokenized: tabular-nums numerals, mono context label, cyan accent for the\n * current page, `border-rule` divider boundaries.\n *\n * Public API:\n * currentPage, totalPages, onPageChange, siblingCount, totalItems, pageSize.\n */\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n /** Total item count — enables \"Showing X–Y of Z\" label */\n totalItems?: number;\n /** Items per page — used with totalItems for range display */\n pageSize?: number;\n}\n\nfunction getPageNumbers(current: number, total: number, siblings: number): (number | \"ellipsis\")[] {\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalSlots = siblings * 2 + 5;\n if (total <= totalSlots) return range(1, total);\n\n const leftSibling = Math.max(current - siblings, 2);\n const rightSibling = Math.min(current + siblings, total - 1);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < total - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + 2 * siblings);\n return [...leftRange, \"ellipsis\", total];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(total - (2 + 2 * siblings), total);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n return [1, \"ellipsis\", ...range(leftSibling, rightSibling), \"ellipsis\", total];\n}\n\nconst NAV_BUTTON = cn(\n \"inline-flex size-7 items-center justify-center rounded-btn text-fg-3\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n);\n\nconst PAGE_BUTTON_BASE = cn(\n \"inline-flex h-7 min-w-7 items-center justify-center rounded-btn px-2\",\n \"text-xs font-medium tabular-nums\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n);\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n totalItems,\n pageSize,\n className,\n ...props\n },\n ref,\n) {\n if (totalPages <= 1) return null;\n\n const pages = getPageNumbers(currentPage, totalPages, siblingCount);\n\n // Range label: \"1–10 of 47\" or fallback to \"Page 1 of 5\"\n let contextLabel: string;\n if (totalItems != null && pageSize != null) {\n const start = (currentPage - 1) * pageSize + 1;\n const end = Math.min(currentPage * pageSize, totalItems);\n contextLabel = `${start}–${end} of ${totalItems}`;\n } else {\n contextLabel = `Page ${currentPage} of ${totalPages}`;\n }\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(\"flex items-center justify-between gap-4\", className)}\n {...props}\n >\n {/* Context label — mono, tabular-nums, fg-4 */}\n <span className=\"text-fg-4 shrink-0 font-mono text-[11px] tracking-[0.02em] tabular-nums\">\n {contextLabel}\n </span>\n\n {/* Page controls */}\n <div className=\"flex items-center gap-0.5\">\n {/* Previous */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={NAV_BUTTON}\n aria-label=\"Previous page\"\n >\n <ChevronLeftIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n\n {/* Page numbers */}\n {pages.map((page, i) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${i}`}\n className=\"text-fg-5 flex h-7 w-5 items-center justify-center select-none\"\n aria-hidden=\"true\"\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => onPageChange(page)}\n aria-current={page === currentPage ? \"page\" : undefined}\n className={cn(\n PAGE_BUTTON_BASE,\n page === currentPage\n ? \"bg-accent-tint text-accent-2 border border-[color:var(--color-accent-tint)]\"\n : \"text-fg-3 hover:bg-bg-2 hover:text-fg\",\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* Next */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={NAV_BUTTON}\n aria-label=\"Next page\"\n >\n <ChevronRightIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n </nav>\n );\n});\n\nPagination.displayName = \"Pagination\";\n","export function stripToDigits(input: string): string {\n return input.replace(/\\D/g, \"\").slice(0, 10);\n}\n\nexport function formatPhoneDisplay(raw: string): string {\n const digits = stripToDigits(raw);\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n","\"use client\";\n\nimport { forwardRef, useCallback, useRef, useState } from \"react\";\n\nimport { Input } from \"./input\";\nimport { stripToDigits, formatPhoneDisplay } from \"../lib/phone\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * PhoneInput — wraps the new <Input> primitive with US phone formatting.\n *\n * Public API preserved EXACTLY:\n * - Extends Input, minus `type` (forced to \"tel\") and the `value` /\n * `onChange` / `defaultValue` overrides documented below.\n * - `value` / `defaultValue` are RAW digits (e.g. \"5551234567\").\n * - The displayed value in the field is formatted \"(555) 123-4567\".\n * - In controlled mode `onChange` fires with a synthetic event whose\n * `target.value` is the raw digit string. Call sites depend on this.\n * - In uncontrolled mode a hidden `<input name>` mirrors the raw digits\n * so native form posts still work.\n *\n * NEW (additive): forwardRef<HTMLInputElement>, label/error/prefix/suffix,\n * size variants, etc. flow through Input.\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype InputProps = React.ComponentProps<typeof Input>;\n\ninterface PhoneInputProps extends Omit<InputProps, \"type\" | \"onChange\" | \"value\" | \"defaultValue\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const PhoneInput = forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n { value, defaultValue, onChange, name, ...props },\n ref,\n) {\n const isControlled = value !== undefined;\n const [internalDigits, setInternalDigits] = useState(() => stripToDigits(defaultValue ?? \"\"));\n\n const hiddenRef = useRef<HTMLInputElement>(null);\n\n const digits = isControlled ? stripToDigits(value) : internalDigits;\n const displayValue = formatPhoneDisplay(digits);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = stripToDigits(e.target.value);\n\n if (isControlled && onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: raw },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n } else {\n setInternalDigits(raw);\n if (hiddenRef.current) {\n hiddenRef.current.value = raw;\n }\n }\n },\n [isControlled, onChange],\n );\n\n return (\n <>\n <Input\n {...props}\n ref={ref}\n type=\"tel\"\n name={isControlled ? name : undefined}\n value={displayValue}\n onChange={handleChange}\n inputMode=\"tel\"\n autoComplete={props.autoComplete ?? \"tel-national\"}\n />\n {!isControlled && name && (\n <input type=\"hidden\" ref={hiddenRef} name={name} defaultValue={digits} />\n )}\n </>\n );\n});\n\nPhoneInput.displayName = \"PhoneInput\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * PriorityIcon — priority glyph for the fixed none/low/medium/high/urgent scale.\n *\n * Bar COUNT carries the level (1/2/3 rising bars); color reinforces it on an\n * escalating cool→warm ramp via `--color-priority-*` tokens (blue → violet →\n * amber → red), so the glyph reads the same in light and dark. `none` is three\n * muted dashes; `urgent` is a filled danger-red square with a white exclamation.\n * Inactive bars drop to 25% opacity of the same hue.\n */\n\nexport type Priority = \"none\" | \"low\" | \"medium\" | \"high\" | \"urgent\";\n\nexport interface PriorityIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"color\"> {\n priority: Priority;\n size?: number;\n}\n\nconst BARS = [\n { x: 1.5, y: 9, height: 5 }, // bar 1 (shortest)\n { x: 6.5, y: 5, height: 9 }, // bar 2\n { x: 11.5, y: 1, height: 13 }, // bar 3 (tallest)\n] as const;\n\nconst ACTIVE_BAR_COUNT: Record<Exclude<Priority, \"none\" | \"urgent\">, number> = {\n low: 1,\n medium: 2,\n high: 3,\n};\n\nconst PRIORITY_COLOR: Record<Exclude<Priority, \"none\">, string> = {\n low: \"var(--color-priority-low)\",\n medium: \"var(--color-priority-medium)\",\n high: \"var(--color-priority-high)\",\n urgent: \"var(--color-priority-urgent)\",\n};\n\nexport function PriorityIcon({ priority, size = 16, className, ...props }: PriorityIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {priority === \"none\" && (\n <g className=\"text-fg-3\" fill=\"currentColor\">\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n <rect x=\"2\" y=\"7.2\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n <rect x=\"2\" y=\"10.4\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n </g>\n )}\n\n {(priority === \"low\" || priority === \"medium\" || priority === \"high\") &&\n BARS.map((bar, i) => (\n <rect\n key={i}\n x={bar.x}\n y={bar.y}\n width=\"3\"\n height={bar.height}\n rx=\"1\"\n fill={PRIORITY_COLOR[priority]}\n fillOpacity={i < ACTIVE_BAR_COUNT[priority] ? 1 : 0.25}\n />\n ))}\n\n {priority === \"urgent\" && (\n <>\n <rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" rx=\"3\" fill=\"var(--color-priority-urgent)\" />\n <rect x=\"7.25\" y=\"3.75\" width=\"1.5\" height=\"5\" rx=\"0.75\" fill=\"#fff\" />\n <circle cx=\"8\" cy=\"11.25\" r=\"1\" fill=\"#fff\" />\n </>\n )}\n </svg>\n );\n}\n","\"use client\";\n\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ProgressBar — Radix-driven determinate (or indeterminate) progress meter.\n * Track sits on `bg-3`; fills follow the status palette. Variants are an\n * explicit cva enum; if `variant` is omitted, it auto-resolves from value:\n * <50% → default (Pro purple)\n * ≥50% → warning\n * ≥80% → success\n *\n * Public API preserved: `value`, `max`, `label`, `showPercentage`, `variant`.\n * Pass `value={null}` (or omit when in-doubt) to render Radix's indeterminate\n * state — but for back-compat we still accept `value: number`.\n */\nexport const progressBarVariants = cva(\n \"h-full rounded-full transition-[width,background-color] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)]\",\n {\n variants: {\n variant: {\n default: \"bg-pro-fg\",\n success: \"bg-success-fg\",\n warning: \"bg-warning-fg\",\n destructive: \"bg-danger-fg\",\n info: \"bg-accent\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\nexport interface ProgressBarProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, \"value\">,\n VariantProps<typeof progressBarVariants> {\n /** 0..max. Set to `null` for an indeterminate track. */\n value: number | null;\n max?: number;\n label?: string;\n showPercentage?: boolean;\n}\n\nexport const ProgressBar = forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressBarProps\n>(function ProgressBar(\n { value, max = 100, label, showPercentage, variant, className, ...props },\n ref,\n) {\n const isIndeterminate = value == null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n const resolvedVariant =\n variant ??\n (!isIndeterminate && percentage >= 80\n ? \"success\"\n : !isIndeterminate && percentage >= 50\n ? \"warning\"\n : \"default\");\n\n return (\n <div className={cn(\"w-full\", className)}>\n {(label || showPercentage) && (\n <div className=\"mb-1.5 flex items-center justify-between text-sm\">\n {label && <span className=\"text-fg-2 font-medium\">{label}</span>}\n {showPercentage && !isIndeterminate && (\n <span className=\"text-fg-3 font-mono text-xs tabular-nums\">\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n value={isIndeterminate ? null : value}\n max={max}\n aria-label={label ?? \"Progress\"}\n className=\"bg-bg-3 relative h-2 w-full overflow-hidden rounded-full\"\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n progressBarVariants({ variant: resolvedVariant }),\n isIndeterminate &&\n \"absolute inset-y-0 left-0 w-1/3 animate-[progress-indeterminate_1.4s_var(--ease-out-quart)_infinite]\",\n )}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </ProgressPrimitive.Root>\n {/* Indeterminate keyframes (scoped, no token leakage). */}\n {isIndeterminate && (\n <style>{`\n @keyframes progress-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}</style>\n )}\n </div>\n );\n});\n\nProgressBar.displayName = \"ProgressBar\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ProgressRing — custom SVG ring meter (no Radix equivalent).\n * Track is `bg-3`, the indicator picks up the active variant. Variants and\n * value-driven auto-resolve mirror ProgressBar so consumers can mix freely.\n *\n * Public API preserved: `value`, `max`, `size`, `strokeWidth`, `label`, `sublabel`.\n */\n\nexport const progressRingVariants = cva(\n \"transition-[stroke-dashoffset,stroke] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)]\",\n {\n variants: {\n variant: {\n default: \"text-pro-fg\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n destructive: \"text-danger-fg\",\n info: \"text-accent\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\nexport interface ProgressRingProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof progressRingVariants> {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n label?: string;\n sublabel?: string;\n}\n\nexport const ProgressRing = forwardRef<HTMLDivElement, ProgressRingProps>(function ProgressRing(\n { value, max = 100, size = 80, strokeWidth = 6, label, sublabel, variant, className, ...props },\n ref,\n) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const resolvedVariant =\n variant ?? (percentage >= 80 ? \"success\" : percentage >= 50 ? \"warning\" : \"default\");\n\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex flex-col items-center gap-1\", className)}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? \"Progress\"}\n {...props}\n >\n <div className=\"relative inline-flex\" style={{ width: size, height: size }}>\n <svg width={size} height={size} className=\"-rotate-90\" aria-hidden=\"true\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n className=\"text-bg-3\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n className={progressRingVariants({ variant: resolvedVariant })}\n />\n </svg>\n {label && !sublabel && (\n <span className=\"text-fg pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-xs font-medium tabular-nums\">\n {label}\n </span>\n )}\n </div>\n {label && sublabel && (\n <span className=\"text-fg font-mono text-sm font-medium tabular-nums\">{label}</span>\n )}\n {sublabel && <span className=\"text-fg-3 text-xs\">{sublabel}</span>}\n </div>\n );\n});\n\nProgressRing.displayName = \"ProgressRing\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CircleIcon } from \"./icons\";\n/**\n * RadioGroup — Radix-backed radio control. Modified\n * Public API: <RadioGroup value defaultValue onValueChange name>\n * with <RadioGroupItem value label />.\n */\n\ntype RadioGroupProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;\n\nexport const RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn(\"grid gap-2\", className)} {...props} />;\n});\n\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\ninterface RadioGroupItemProps extends React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n> {\n /** Optional inline label rendered to the right of the radio */\n label?: string;\n}\n\nexport const RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(function RadioGroupItem({ className, label, id: providedId, ...props }, ref) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n const root = (\n <RadioGroupPrimitive.Item\n ref={ref}\n id={id}\n className={cn(\n \"peer border-rule-strong bg-surface text-pro-fg aspect-square size-4 shrink-0 rounded-full border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"hover:border-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[state=checked]:border-pro-fg\",\n \"disabled:bg-bg-disabled disabled:border-rule disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <CircleIcon className=\"fill-pro-fg text-pro-fg size-2\" aria-hidden=\"true\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n\n if (!label) return root;\n\n return (\n <div className=\"flex items-center gap-2\">\n {root}\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n </div>\n );\n});\n\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* ScrollArea */\n/* Wraps Radix ScrollArea + a styled scrollbar matched to the suite tokens */\n/* -------------------------------------------------------------------------- */\n\ninterface ScrollAreaProps extends React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> {\n children: React.ReactNode;\n}\n\nexport const ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n ScrollAreaProps\n>(function ScrollArea({ className, children, ...props }, ref) {\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n});\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\ntype ScrollBarProps = React.ComponentPropsWithoutRef<\n typeof ScrollAreaPrimitive.ScrollAreaScrollbar\n>;\n\nexport const ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ScrollBarProps\n>(function ScrollBar({ className, orientation = \"vertical\", ...props }, ref) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] select-none motion-reduce:transition-none\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n className={cn(\n \"bg-rule-strong relative flex-1 rounded-full\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-fg-4\",\n )}\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n});\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\nimport { useDebounce } from \"../hooks/use-debounce\";\n\nimport { SearchIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SearchInput — raw <input type=\"search\"> with a leading catalog `SearchIcon`\n * and a trailing clear (X) button.\n *\n * Public API preserved:\n * <SearchInput value onValueChange onSearch debounceMs />\n *\n * `inputSize` (\"sm\" | \"md\" | \"lg\"). `sm` is the dense control tier (h-8 +\n * 13px) that lines up pixel-for-pixel with Button sm / MultiFilterPill sm /\n * FilterChip sm in a toolbar row — use it for in-toolbar search. `md`\n * (default) is h-9 + 13px: same text, a touch roomier, for standalone search\n * fields. `lg` is h-11 + 14px. (md/lg keep their own one-step-denser text\n * ladder vs the button family; only the `sm` tier is fully harmonized.)\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst searchInputVariants = cva(\n [\n \"flex w-full rounded-input border border-rule-strong bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n // Hide the native search-cancel button — we render our own clear button.\n \"[&::-webkit-search-cancel-button]:appearance-none\",\n \"[&::-webkit-search-decoration]:appearance-none\",\n ],\n {\n variants: {\n inputSize: {\n // `sm` is the dense control tier: h-8 + 13px, so a search box lines up\n // pixel-for-pixel (height AND text) with Button / MultiFilterPill /\n // FilterChip at their `sm` tier in a toolbar row.\n sm: \"h-8 pl-8 pr-8 text-[13px]\",\n md: \"h-9 pl-9 pr-9 text-[13px]\",\n lg: \"h-11 pl-10 pr-10 text-sm\",\n },\n },\n defaultVariants: {\n inputSize: \"md\",\n },\n },\n);\n\nexport type SearchInputVariants = VariantProps<typeof searchInputVariants>;\n\ninterface SearchInputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\" | \"size\">,\n SearchInputVariants {\n value: string;\n onValueChange: (value: string) => void;\n onSearch?: (value: string) => void;\n debounceMs?: number;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n value,\n onValueChange,\n onSearch,\n debounceMs = 300,\n inputSize,\n className,\n placeholder = \"Search...\",\n disabled,\n ...props\n },\n ref,\n ) {\n const debouncedValue = useDebounce(value, debounceMs);\n const isFirstRender = React.useRef(true);\n\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n onSearch?.(debouncedValue);\n }, [debouncedValue, onSearch]);\n\n const sz = inputSize ?? \"md\";\n const iconLeftClass = sz === \"sm\" ? \"left-2.5\" : sz === \"lg\" ? \"left-3\" : \"left-3\";\n const iconRightClass = sz === \"sm\" ? \"right-2\" : sz === \"lg\" ? \"right-3\" : \"right-2.5\";\n const iconSizeClass = sz === \"sm\" ? \"size-3.5\" : \"size-4\";\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n <SearchIcon\n className={cn(\n \"text-fg-4 pointer-events-none absolute top-1/2 -translate-y-1/2\",\n iconLeftClass,\n iconSizeClass,\n )}\n aria-hidden=\"true\"\n />\n <input\n ref={ref}\n type=\"search\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(searchInputVariants({ inputSize }))}\n {...props}\n />\n {value && !disabled && (\n <button\n type=\"button\"\n onClick={() => onValueChange(\"\")}\n className={cn(\n \"rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n iconRightClass,\n )}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <XIcon className={iconSizeClass} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n\nexport { searchInputVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"./popover\";\n\nimport { CheckIcon, ChevronDownIcon, PlusIcon, SearchIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SearchSelect — multi-select combobox with optional create-on-the-fly.\n *\n * Implementation: cmdk (`Command`, `Command.Input`, `Command.List`,\n * `Command.Empty`, `Command.Item`) wrapped inside a Radix Popover so the\n * options surface escapes its container and matches the `shadow-pop` elevation.\n *\n * Two ways to drive it:\n * - Multi (default): `selected: SearchSelectOption[]` + `onSelect`/`onRemove`.\n * Chips render above the input. Multiple picks accumulate.\n * - Single (sugar): `value: string` (the picked option's `id`, or empty)\n * + `onValueChange: (id: string) => void`. The field collapses to show\n * the picked value with an X-to-clear control once a choice is made;\n * `closeOnSelect` is implied. Equivalent under the hood to:\n * selected={value ? [options.find(o => o.id === value)!] : []}\n * onSelect={o => onValueChange(o.id)}\n * onRemove={() => onValueChange(\"\")}\n * closeOnSelect\n * but without the per-call-site array wrapping + dual-handler ritual.\n *\n * Behaviour preserved:\n * - Already-selected options are filtered out of the dropdown list.\n * - When `onCreate` is provided AND the trimmed query has no exact match,\n * a \"Create '<q>'\" affordance appears below the filtered list.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SearchSelectOption {\n id: string;\n label: string;\n /**\n * Optional section name. When any option carries a `group`, the dropdown\n * renders quiet sentence-case section labels, preserving the order in which\n * groups first appear in `options`. Omit on every option to keep the flat\n * (single-list) rendering.\n */\n group?: string;\n /**\n * Optional CSS color (hex or token) rendered as a small leading dot — handy\n * for category accents (e.g. one hue per service line). Treated as data, so\n * the consumer owns the palette.\n */\n color?: string;\n /**\n * Optional leading icon node. When present the row becomes a rich two-line\n * row with the icon in a circular tile. Pair with `iconClassName` for the\n * tile tint. Takes precedence over `color`.\n */\n icon?: React.ReactNode;\n /**\n * Tailwind classes for the icon tile (background + text), e.g.\n * \"bg-info/10 text-info\". Consumer owns the palette.\n */\n iconClassName?: string;\n /**\n * Optional secondary line shown muted beneath the label (e.g. an email or\n * reference). Promotes the row to the two-line rich layout.\n */\n description?: string;\n}\n\ninterface SearchSelectProps {\n options: SearchSelectOption[];\n /**\n * Multi-mode controlled selection. Required unless using the single-mode\n * `value`/`onValueChange` sugar (in which case omit both `selected` and\n * `onSelect`/`onRemove`).\n */\n selected?: SearchSelectOption[];\n onSelect?: (option: SearchSelectOption) => void;\n onRemove?: (option: SearchSelectOption) => void;\n /**\n * Single-mode controlled value: the picked option's `id` (or empty string\n * when nothing is selected). When set, the component renders as a\n * single-pick combobox and `closeOnSelect` is forced on. Mutually\n * exclusive with `selected` — provide one OR the other, not both.\n */\n value?: string;\n /**\n * Single-mode change handler. Called with the picked option's `id` on\n * select, or with an empty string when the user clears the selection.\n */\n onValueChange?: (value: string) => void;\n onCreate?: (name: string) => void;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n /**\n * When true (and options carry `group`), renders a row of exclusive filter\n * chips (\"All\" + each non-pinned group) that scope the list to one category.\n */\n groupFilter?: boolean;\n /**\n * Group names pinned to the top of the list. Pinned groups are excluded from\n * the filter chips and only shown when the \"All\" chip is active — the\n * standard \"favorites/suggested on top\" treatment.\n */\n pinnedGroups?: string[];\n /**\n * Close the dropdown after a selection. Off by default (multi-select keeps\n * the list open to pick more); turn on when used as a single-select.\n */\n closeOnSelect?: boolean;\n /**\n * Append a count to each group heading (e.g. \"Individuals · 5\"). Only has an\n * effect when options carry `group`.\n */\n showGroupCounts?: boolean;\n /**\n * Persistent footer action pinned below the list, distinct from the\n * query-based `onCreate` affordance. Always visible while open — use for a\n * full \"Create new client\" entry point. `createNewLabel` sets its label.\n */\n onCreateNew?: () => void;\n createNewLabel?: string;\n}\n\nexport function SearchSelect({\n options,\n selected: selectedProp,\n onSelect: onSelectProp,\n onRemove: onRemoveProp,\n value,\n onValueChange,\n onCreate,\n placeholder = \"Search...\",\n className,\n disabled = false,\n groupFilter = false,\n pinnedGroups,\n closeOnSelect: closeOnSelectProp = false,\n showGroupCounts = false,\n onCreateNew,\n createNewLabel = \"Create new\",\n}: SearchSelectProps) {\n // Single-mode sugar — when `value` is provided (even as \"\"), derive the\n // multi-mode shape internally so the rest of the render code stays single\n // pathed. `closeOnSelect` is implied for single mode.\n const isSingleMode = value !== undefined || onValueChange !== undefined;\n const singleSelectedOption = React.useMemo(\n () => (isSingleMode && value ? (options.find((o) => o.id === value) ?? null) : null),\n [isSingleMode, value, options],\n );\n const selected = React.useMemo<SearchSelectOption[]>(\n () =>\n isSingleMode\n ? (singleSelectedOption ? [singleSelectedOption] : [])\n : (selectedProp ?? []),\n [isSingleMode, singleSelectedOption, selectedProp],\n );\n const onSelect = React.useCallback(\n (option: SearchSelectOption) => {\n if (isSingleMode) {\n onValueChange?.(option.id);\n } else {\n onSelectProp?.(option);\n }\n },\n [isSingleMode, onValueChange, onSelectProp],\n );\n const onRemove = React.useCallback(\n (option: SearchSelectOption) => {\n if (isSingleMode) {\n onValueChange?.(\"\");\n } else {\n onRemoveProp?.(option);\n }\n },\n [isSingleMode, onValueChange, onRemoveProp],\n );\n const closeOnSelect = isSingleMode || closeOnSelectProp;\n\n const [search, setSearch] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n const [activeChip, setActiveChip] = React.useState<string | null>(null);\n\n const selectedIds = React.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);\n\n const filtered = React.useMemo(\n () => options.filter((opt) => !selectedIds.has(opt.id)),\n [options, selectedIds],\n );\n\n // Bucket options by `group`, preserving first-seen order. When no option\n // carries a group, this collapses to a single headingless bucket and the\n // rendering matches the original flat list.\n const groups = React.useMemo(() => {\n const order: (string | undefined)[] = [];\n const byGroup = new Map<string | undefined, SearchSelectOption[]>();\n for (const opt of filtered) {\n if (!byGroup.has(opt.group)) {\n byGroup.set(opt.group, []);\n order.push(opt.group);\n }\n byGroup.get(opt.group)!.push(opt);\n }\n return order.map((g) => [g, byGroup.get(g)!] as const);\n }, [filtered]);\n\n const hasGroups = React.useMemo(() => groups.some(([g]) => g != null), [groups]);\n\n const pinnedSet = React.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);\n\n // Filter chips: \"All\" + each non-pinned group, in first-seen order.\n const chips = React.useMemo(() => {\n if (!groupFilter || !hasGroups) return [];\n return groups\n .map(([g]) => g)\n .filter((g): g is string => g != null && !pinnedSet.has(g));\n }, [groupFilter, hasGroups, groups, pinnedSet]);\n\n // Which groups render: when a chip is active, only that group (heading\n // suppressed since the chip names the scope); otherwise every group, with\n // pinned ones kept on top via their natural first-seen order.\n const visibleGroups = React.useMemo(() => {\n if (chips.length > 0 && activeChip) {\n return groups.filter(([g]) => g === activeChip);\n }\n return groups;\n }, [groups, chips.length, activeChip]);\n\n const trimmedSearch = search.trim();\n const hasExactMatch = React.useMemo(\n () => options.some((opt) => opt.label.toLowerCase() === trimmedSearch.toLowerCase()),\n [options, trimmedSearch],\n );\n const showCreate = !!onCreate && trimmedSearch.length > 0 && !hasExactMatch;\n\n const handleSelect = React.useCallback(\n (option: SearchSelectOption) => {\n onSelect(option);\n setSearch(\"\");\n if (closeOnSelect) setOpen(false);\n },\n [onSelect, closeOnSelect],\n );\n\n const handleCreate = React.useCallback(() => {\n if (onCreate && trimmedSearch) {\n onCreate(trimmedSearch);\n setSearch(\"\");\n setOpen(false);\n }\n }, [onCreate, trimmedSearch]);\n\n // Single-select (closeOnSelect): once a choice is made and the popover is\n // closed, the field collapses to show that value in place of the search\n // input — the standard one-pick combobox resting state. Clicking reopens.\n const inputRef = React.useRef<HTMLInputElement>(null);\n const singleValue = closeOnSelect ? (selected[0] ?? null) : null;\n const showValue = singleValue !== null && !open;\n\n // Move focus into the freshly mounted search input when a single-select\n // field reopens, so the user can type immediately.\n React.useEffect(() => {\n if (open && closeOnSelect) {\n const raf = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(raf);\n }\n }, [open, closeOnSelect]);\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n {/* Selected chips (multi-select only — single-select shows its value in\n the field instead). */}\n {!closeOnSelect && selected.length > 0 && (\n <div className=\"mb-2 flex flex-wrap gap-1.5\">\n {selected.map((item) => (\n <span\n key={item.id}\n className={cn(\n \"rounded-pill border-rule inline-flex items-center gap-1 border px-2 py-0.5 text-[12px]\",\n \"bg-bg-2 font-body text-fg-2\",\n )}\n >\n {item.label}\n <button\n type=\"button\"\n onClick={() => onRemove(item)}\n disabled={disabled}\n className={cn(\n \"text-fg-3 ml-0.5 rounded-full p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label={`Remove ${item.label}`}\n >\n <XIcon className=\"size-3\" aria-hidden=\"true\" />\n </button>\n </span>\n ))}\n </div>\n )}\n\n <Popover open={open && !disabled} onOpenChange={setOpen}>\n <CommandPrimitive\n shouldFilter\n className=\"overflow-visible bg-transparent\"\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setOpen(false);\n }\n }}\n >\n <PopoverAnchor asChild>\n <div\n className={cn(\n \"rounded-input border-rule-strong bg-surface relative flex h-9 w-full items-center border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-within:border-accent focus-within:[box-shadow:var(--shadow-focus-ring)]\",\n showValue && \"hover:bg-bg-2 gap-2 pr-2 pl-3\",\n disabled && \"bg-bg-disabled cursor-not-allowed\",\n )}\n >\n {showValue && singleValue ? (\n <>\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(true)}\n disabled={disabled}\n className=\"flex h-full flex-1 items-center gap-2 text-left outline-none disabled:cursor-not-allowed\"\n >\n {singleValue.icon && (\n <span\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full [&_svg]:size-3\",\n singleValue.iconClassName,\n )}\n aria-hidden=\"true\"\n >\n {singleValue.icon}\n </span>\n )}\n <span className=\"text-fg flex-1 truncate text-[13px]\">\n {singleValue.label}\n {singleValue.description && (\n <span className=\"text-fg-4\"> · {singleValue.description}</span>\n )}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => onRemove(singleValue)}\n disabled={disabled}\n className={cn(\n \"text-fg-3 shrink-0 rounded-full p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label={`Clear ${singleValue.label}`}\n >\n <XIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(true)}\n disabled={disabled}\n aria-label={`Change ${singleValue.label}`}\n className={cn(\n \"text-fg-4 shrink-0 rounded-full p-0.5 outline-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n )}\n >\n <ChevronDownIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </>\n ) : (\n <>\n <SearchIcon\n className=\"text-fg-4 pointer-events-none absolute left-3 size-4\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n ref={inputRef}\n value={search}\n onValueChange={(v) => {\n setSearch(v);\n if (!disabled) setOpen(true);\n }}\n onFocus={() => {\n if (!disabled) setOpen(true);\n }}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n \"font-body text-fg flex-1 bg-transparent py-2 pr-3 pl-9 text-[13px] outline-none\",\n \"placeholder:text-fg-4\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed\",\n )}\n />\n </>\n )}\n </div>\n </PopoverAnchor>\n\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n // Always open below the field rather than flipping above when the\n // anchor sits low (jarring inside a dialog). `maxHeight` lets the\n // surface shrink to the space below and scroll internally instead.\n avoidCollisions={false}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"[cmdk-input]\")) e.preventDefault();\n }}\n // Width is set inline (not via a class) so it always matches the\n // anchor field: the base PopoverContent ships `w-72`, and\n // tailwind-merge v2 doesn't recognize the v4 `w-(--var)` syntax to\n // strip it, so a class-based override loses to the fixed 288px.\n style={{\n width: \"var(--radix-popover-trigger-width)\",\n maxHeight: \"var(--radix-popover-content-available-height)\",\n }}\n className={cn(\"p-0\", \"flex flex-col\", \"min-w-[12rem] overflow-hidden\")}\n >\n {/* Nested scroll-lock so the list scrolls when the popover is open\n inside a Radix Dialog (whose react-remove-scroll otherwise blocks\n wheel/touch on this portaled-to-body surface). Becomes the top\n lock while open; pops off on close. `contents` adds no box. */}\n <RemoveScroll removeScrollBar={false} className=\"contents\">\n {chips.length > 0 && (\n <div className=\"border-rule flex flex-wrap gap-1 border-b p-1.5\">\n {[null, ...chips].map((chip) => {\n const active = activeChip === chip;\n return (\n <button\n key={chip ?? \"__all\"}\n type=\"button\"\n onClick={() => setActiveChip(chip)}\n className={cn(\n \"rounded-pill px-2.5 py-0.5 text-[12px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n active\n ? \"bg-pro-fg text-fg-on-pro\"\n : \"border-rule text-fg-2 hover:bg-bg-2 border bg-transparent\",\n )}\n >\n {chip ?? \"All\"}\n </button>\n );\n })}\n </div>\n )}\n <CommandPrimitive.List\n className={cn(\n // No top padding: a sticky group heading pins at top-0, so any\n // top padding would leave a strip above it where the previous\n // group's last item peeks through. Top spacing comes from the\n // heading's own pt-2 instead.\n \"scrollbar-thin min-h-0 flex-1 max-h-[min(20rem,60vh)] overflow-y-auto px-1 pb-1\",\n // Quiet sentence-case section labels (only shown when grouped)\n \"[&_[cmdk-group-heading]]:bg-surface [&_[cmdk-group-heading]]:sticky [&_[cmdk-group-heading]]:top-0 [&_[cmdk-group-heading]]:z-10\",\n \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:pt-2 [&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-medium\",\n \"[&_[cmdk-group-heading]]:text-fg-3\",\n )}\n >\n {filtered.length === 0 && !showCreate && (\n <CommandPrimitive.Empty className=\"text-fg-3 px-3 py-2 text-xs\">\n {search ? \"No results found.\" : \"No options available.\"}\n </CommandPrimitive.Empty>\n )}\n\n {visibleGroups.map(([group, groupOptions]) => {\n // A chip already names the scope, so suppress the redundant heading.\n const baseHeading = activeChip ? undefined : group || undefined;\n // Counts only while browsing the full list — cmdk filters rows\n // internally during a search, so a static group total would\n // disagree with the visible row count.\n const heading =\n baseHeading && showGroupCounts && !trimmedSearch\n ? `${baseHeading} · ${groupOptions.length}`\n : baseHeading;\n return (\n <CommandPrimitive.Group key={group ?? \"__ungrouped\"} heading={heading}>\n {groupOptions.map((option) => {\n const isRich = !!option.icon || !!option.description;\n return (\n <CommandPrimitive.Item\n key={option.id}\n // Include option.id so cmdk gives each option a unique\n // identity. Two options sharing a label (e.g. two\n // clients named \"Ishan Singh\") would otherwise collide\n // and cmdk would highlight/activate them together.\n // Label + group stay in the value so the default\n // substring search keeps matching on them.\n value={hasGroups && group ? `${option.label} ${group} ${option.id}` : `${option.label} ${option.id}`}\n onSelect={() => handleSelect(option)}\n className={cn(\n \"flex cursor-default items-center outline-none select-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n isRich\n ? \"rounded-md text-fg gap-2.5 px-2 py-1.5\"\n : \"rounded-pill text-fg-2 gap-2 px-2 py-1.5 text-[13px]\",\n \"data-[selected=true]:bg-bg-2 data-[selected=true]:text-fg\",\n )}\n >\n {isRich ? (\n <>\n {option.icon && (\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-full [&_svg]:size-3.5\",\n option.iconClassName,\n )}\n aria-hidden=\"true\"\n >\n {option.icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[13px] font-medium\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"text-fg-4 block truncate text-[11px]\">\n {option.description}\n </span>\n )}\n </span>\n </>\n ) : (\n <>\n {option.color ? (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: option.color }}\n aria-hidden=\"true\"\n />\n ) : (\n <CheckIcon\n className=\"size-4 shrink-0 text-transparent\"\n aria-hidden=\"true\"\n />\n )}\n <span className=\"line-clamp-1\">{option.label}</span>\n </>\n )}\n </CommandPrimitive.Item>\n );\n })}\n </CommandPrimitive.Group>\n );\n })}\n\n {showCreate && (\n <>\n {filtered.length > 0 && (\n <div className=\"bg-rule -mx-1 my-1 h-px\" aria-hidden=\"true\" />\n )}\n <CommandPrimitive.Item\n value={`__create_${trimmedSearch}`}\n onSelect={handleCreate}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-[13px] outline-none select-none\",\n \"text-pro-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"data-[selected=true]:bg-pro-bg\",\n )}\n >\n <PlusIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span className=\"line-clamp-1\">Create “{trimmedSearch}”</span>\n </CommandPrimitive.Item>\n </>\n )}\n </CommandPrimitive.List>\n\n {onCreateNew && (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n onCreateNew();\n setOpen(false);\n }}\n className={cn(\n \"border-rule text-pro-fg flex w-full shrink-0 items-center gap-2 border-t px-3 py-2.5 text-[13px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-pro-bg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n >\n <PlusIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {createNewLabel}\n </button>\n )}\n </RemoveScroll>\n </PopoverContent>\n </CommandPrimitive>\n </Popover>\n </div>\n );\n}\n\nSearchSelect.displayName = \"SearchSelect\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * SectionHeader — title + description block for marketing-style sections.\n * Uses Geist (`font-display`) with the spec's `-0.022em` letterspacing.\n */\n\ninterface SectionHeaderProps {\n title: string;\n description?: string;\n align?: \"left\" | \"center\";\n className?: string;\n}\n\nexport function SectionHeader({\n title,\n description,\n align = \"center\",\n className,\n}: SectionHeaderProps) {\n return (\n <div\n className={cn(\n \"mb-16\",\n align === \"center\" && \"mx-auto max-w-2xl text-center\",\n align === \"left\" && \"max-w-lg\",\n className,\n )}\n >\n <h2\n className={cn(\n \"font-display text-fg mb-4 text-3xl font-medium tracking-[-0.028em] md:text-4xl\",\n )}\n >\n {title}\n </h2>\n {description && <p className=\"text-fg-3 text-lg leading-relaxed\">{description}</p>}\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Section — max-width centered wrapper for marketing/section content.\n * The `--content-pad` token (32px) is the canonical app-content gutter,\n * but Section keeps its 24px (`px-6`) gutter for narrower marketing pages.\n */\n\nconst maxWidthStyles = {\n sm: \"max-w-3xl\",\n md: \"max-w-4xl\",\n lg: \"max-w-5xl\",\n xl: \"max-w-6xl\",\n} as const;\n\ninterface SectionProps extends React.HTMLAttributes<HTMLElement> {\n maxWidth?: keyof typeof maxWidthStyles;\n as?: \"section\" | \"div\";\n}\n\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n { maxWidth = \"xl\", as: Tag = \"section\", children, className, ...props },\n ref,\n) {\n // Cast ref to any: TS can't narrow forwardRef across a polymorphic Tag.\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement> as never}\n className={cn(\"px-6 py-24\", className)}\n {...props}\n >\n <div className={cn(\"mx-auto\", maxWidthStyles[maxWidth])}>{children}</div>\n </Tag>\n );\n});\n\nSection.displayName = \"Section\";\n\ninterface SectionHeadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n eyebrow?: React.ReactNode;\n title?: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport const SectionHead = forwardRef<HTMLDivElement, SectionHeadProps>(function SectionHead(\n { eyebrow, title, meta, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule-soft mb-3 flex items-end justify-between gap-3 border-b pb-2\",\n className,\n )}\n {...props}\n >\n <div className=\"min-w-0 space-y-1\">\n {eyebrow && (\n <div className=\"text-fg-4 font-mono [font-feature-settings:'tnum'_1,'lnum'_1,'ss01'_1] text-[10.5px] font-medium tracking-[0.14em] uppercase\">\n {eyebrow}\n </div>\n )}\n {title && (\n <h3 className=\"font-display text-fg text-sm leading-tight font-medium\">{title}</h3>\n )}\n {children}\n </div>\n {meta && <div className=\"text-fg-3 shrink-0 text-xs\">{meta}</div>}\n </div>\n );\n});\n\nSectionHead.displayName = \"SectionHead\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../lib/cn\";\n\ntype SeparatorProps = React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>;\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(function Separator({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-rule shrink-0\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Sheet — slide-in panel on top of @radix-ui/react-dialog (shadcn pattern).\n *\n * Public API preserved:\n * Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader,\n * SheetTitle, SheetDescription, SheetFooter\n *\n * `side` lives on SheetContent (in shadcn it's a content-level prop). For\n * backwards compatibility with the prior implementation, the `Sheet` root\n * also accepts `side` and forwards it to SheetContent via context.\n *\n * NEW (additive): SheetPortal, SheetOverlay are also exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\n\ninterface SheetSideContextValue {\n side?: Side;\n}\nconst SheetSideContext = React.createContext<SheetSideContextValue>({});\n\ninterface SheetProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Root> {\n /**\n * Default side for SheetContent if it doesn't specify its own.\n * Backwards-compat shim — prefer `<SheetContent side=\"…\" />`.\n */\n side?: Side;\n}\n\nconst Sheet = ({ side, children, ...props }: SheetProps) => (\n <SheetPrimitive.Root {...props}>\n <SheetSideContext value={{ side }}>{children}</SheetSideContext>\n </SheetPrimitive.Root>\n);\nSheet.displayName = \"Sheet\";\n\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n cn(\n \"fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop\",\n \"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n ),\n {\n variants: {\n side: {\n top: cn(\n \"inset-x-0 top-0 border-b border-rule\",\n \"data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0\",\n ),\n bottom: cn(\n \"inset-x-0 bottom-0 border-t border-rule max-h-[85vh]\",\n \"data-[state=closed]:translate-y-full data-[state=open]:translate-y-0\",\n ),\n left: cn(\n \"inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule\",\n \"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0\",\n ),\n right: cn(\n \"inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule\",\n \"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0\",\n ),\n },\n },\n defaultVariants: { side: \"right\" },\n },\n);\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {\n /** If false, the built-in close button is hidden. Default: true. */\n showCloseButton?: boolean;\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side, className, children, showCloseButton = true, ...props }, ref) => {\n const ctx = React.use(SheetSideContext);\n const resolvedSide: Side = side ?? ctx.side ?? \"right\";\n\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side: resolvedSide }), className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 inline-flex size-7 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:pointer-events-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n});\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-1.5 p-6 pr-12 pb-0\", className)} {...props} />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn(\"text-fg-3 text-sm\", className)} {...props} />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetPortal,\n SheetOverlay,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SideDrawer — slide-in panel on top of @radix-ui/react-dialog.\n *\n * Public API preserved:\n * <SideDrawer open onClose width? side?>{children}</SideDrawer>\n * SideDrawer.Header({ title, subtitle, onClose, className })\n * SideDrawer.Body({ children, className })\n * SideDrawer.Footer({ children, className })\n *\n * Width presets: \"sm\" (420px) | \"md\" (640px) | \"lg\" (50vw, default)\n * Sides: \"right\" (default) | \"left\"\n *\n * Animation uses tw-animate-css `slide-in-from-{side}` keyed on\n * `data-[state=open|closed]` for parity with the Sheet primitive.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst sideDrawerVariants = cva(\n cn(\n \"fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop\",\n \"font-body\",\n \"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n ),\n {\n variants: {\n side: {\n right: cn(\n \"right-0 border-l border-rule\",\n \"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0\",\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-right\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right\",\n ),\n left: cn(\n \"left-0 border-r border-rule\",\n \"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0\",\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-left\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left\",\n ),\n },\n width: {\n sm: \"w-[420px] max-md:w-[95vw]\",\n md: \"w-[640px] max-lg:w-[80vw] max-md:w-[95vw]\",\n lg: \"w-[50vw] max-lg:w-[80vw] max-md:w-[95vw]\",\n },\n },\n defaultVariants: { side: \"right\", width: \"lg\" },\n },\n);\n\ninterface SideDrawerProps extends VariantProps<typeof sideDrawerVariants> {\n open: boolean;\n onClose: () => void;\n width?: \"sm\" | \"md\" | \"lg\";\n side?: \"right\" | \"left\";\n children: React.ReactNode;\n}\n\nexport function SideDrawer({\n open,\n onClose,\n width = \"lg\",\n side = \"right\",\n children,\n}: SideDrawerProps) {\n return (\n <DialogPrimitive.Root\n open={open}\n onOpenChange={(v) => {\n if (!v) onClose();\n }}\n >\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n )}\n />\n <DialogPrimitive.Content\n className={cn(sideDrawerVariants({ side, width }))}\n // Radix Dialog requires a Title for a11y. Sub-components may\n // render their own visible title, so we provide an SR-only\n // fallback that is always present and harmless.\n aria-describedby={undefined}\n >\n <DialogPrimitive.Title className=\"sr-only\">Side drawer</DialogPrimitive.Title>\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/* ─── Header ────────────────────────────────────────────────── */\n\ninterface SideDrawerHeaderProps {\n title: string;\n subtitle?: string;\n onClose?: () => void;\n className?: string;\n}\n\nfunction SideDrawerHeader({ title, subtitle, onClose, className }: SideDrawerHeaderProps) {\n return (\n <div className={cn(\"border-rule bg-surface shrink-0 border-b px-6 py-4\", className)}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <h2 className=\"font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight\">\n {title}\n </h2>\n {subtitle && <p className=\"text-fg-3 mt-1 text-sm\">{subtitle}</p>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/* ─── Body ──────────────────────────────────────────────────── */\n\ninterface SideDrawerBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SideDrawerBody({ children, className }: SideDrawerBodyProps) {\n return (\n <div className={cn(\"scrollbar-thin flex-1 overflow-y-auto px-6 py-4\", className)}>\n {children}\n </div>\n );\n}\n\n/* ─── Footer ────────────────────────────────────────────────── */\n\ninterface SideDrawerFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SideDrawerFooter({ children, className }: SideDrawerFooterProps) {\n return (\n <div\n className={cn(\n \"border-rule bg-surface shrink-0 border-t px-6 py-4\",\n \"flex items-center justify-end gap-3\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\n/* ─── Attach sub-components ─────────────────────────────────── */\n\nSideDrawer.Header = SideDrawerHeader;\nSideDrawer.Body = SideDrawerBody;\nSideDrawer.Footer = SideDrawerFooter;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"../lib/cn\";\n\ninterface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {\n /** Optional inline label rendered above the track */\n label?: string;\n /** When true, renders the current value to the right of the label */\n showValue?: boolean;\n}\n\nexport const Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n function Slider(\n {\n className,\n label,\n showValue,\n id: providedId,\n min = 0,\n max = 100,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n // Resolve a representative single value for the optional readout\n const displayValue = (() => {\n const v = value ?? defaultValue;\n if (Array.isArray(v)) return v.join(\" – \");\n if (typeof v === \"number\") return v;\n return min;\n })();\n\n return (\n <div className=\"w-full\">\n {(label || showValue) && (\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n {label ? (\n <label htmlFor={id} className=\"text-fg text-[13px] leading-none font-medium\">\n {label}\n </label>\n ) : (\n <span />\n )}\n {showValue && <span className=\"text-fg-3 font-mono text-[12px]\">{displayValue}</span>}\n </div>\n )}\n <SliderPrimitive.Root\n ref={ref}\n id={id}\n min={min}\n max={max}\n value={value}\n defaultValue={defaultValue}\n className={cn(\n \"relative flex w-full touch-none items-center select-none\",\n \"data-[disabled]:cursor-not-allowed\",\n className,\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-bg-3 data-[disabled]:bg-bg-disabled relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-pro-fg data-[disabled]:bg-fg-disabled absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={cn(\n \"border-pro-fg bg-surface shadow-quiet block size-4 rounded-full border\",\n \"transition-[box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:scale-105\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed\",\n \"data-[disabled]:border-fg-disabled data-[disabled]:bg-bg-disabled\",\n )}\n aria-label={label}\n />\n </SliderPrimitive.Root>\n </div>\n );\n },\n);\n\nSlider.displayName = SliderPrimitive.Root.displayName;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { StarIcon } from \"./icons\";\n/**\n * StarRating — display-only rating atom built on lucide `Star`. Supports\n * fractional ratings (half-star fill via clip path) and a sized cva variant.\n *\n * Public API preserved: `rating`, `max`, `size`, `className`. The original\n * accepted `size` as a number; that still works (overrides the variant). The\n * new optional `sizeVariant` reads via cva (`sm` / `md` / `lg`).\n */\n\nexport const starRatingVariants = cva(\"flex items-center gap-0.5\", {\n variants: {\n sizeVariant: {\n sm: \"[&_svg]:size-3.5\",\n md: \"[&_svg]:size-4\",\n lg: \"[&_svg]:size-5\",\n },\n },\n defaultVariants: { sizeVariant: \"md\" },\n});\n\nexport interface StarRatingProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"role\">,\n VariantProps<typeof starRatingVariants> {\n rating: number;\n max?: number;\n /** Pixel size override; if set, takes precedence over `sizeVariant`. */\n size?: number;\n}\n\nexport const StarRating = forwardRef<HTMLDivElement, StarRatingProps>(function StarRating(\n { rating, max = 5, size, sizeVariant, className, ...props },\n ref,\n) {\n const stars = Array.from({ length: max });\n const sizeStyle = size ? { width: size, height: size } : undefined;\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={`${rating} out of ${max} stars`}\n className={cn(starRatingVariants({ sizeVariant }), className)}\n {...props}\n >\n {stars.map((_, i) => {\n // Fractional fill calc: 0..1 per star\n const fill = Math.max(0, Math.min(1, rating - i));\n const isFull = fill >= 1;\n const isEmpty = fill === 0;\n const isHalf = !isFull && !isEmpty;\n\n return (\n <span key={i} className=\"relative inline-flex shrink-0\" style={sizeStyle}>\n {/* Track star (empty) */}\n <StarIcon\n className=\"text-fg-5\"\n style={sizeStyle}\n strokeWidth={1.5}\n aria-hidden=\"true\"\n />\n {/* Fill overlay */}\n {!isEmpty && (\n <span\n className=\"text-warning-fg pointer-events-none absolute inset-0 overflow-hidden\"\n style={{\n width: isFull ? \"100%\" : `${fill * 100}%`,\n }}\n aria-hidden=\"true\"\n >\n <StarIcon\n fill=\"currentColor\"\n className=\"text-warning-fg\"\n style={sizeStyle}\n strokeWidth={1.5}\n aria-hidden=\"true\"\n />\n </span>\n )}\n {/* Mark half stars for screen-readers via data attr (no a11y impact). */}\n {isHalf && (\n <span data-half-star className=\"sr-only\">\n half\n </span>\n )}\n </span>\n );\n })}\n </div>\n );\n});\n\nStarRating.displayName = \"StarRating\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Stat — paired numeric display + caption (the StatNum primitive).\n * Numerals are set in `font-display` (Geist) at a fluid clamp size with\n * `font-variant-numeric: tabular-nums` for vertical alignment.\n */\n\ninterface StatProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n label: string;\n}\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(function Stat(\n { value, label, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1\", className)} {...props}>\n <span\n className={cn(\n \"font-display text-fg block leading-none font-medium tracking-[-0.035em]\",\n \"text-[clamp(28px,3.4vw,38px)]\",\n )}\n style={{ fontVariantNumeric: \"tabular-nums\" }}\n >\n {value}\n </span>\n <span className=\"text-fg-3 text-sm\">{label}</span>\n </div>\n );\n});\n\nStat.displayName = \"Stat\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * StatusIcon — progress-aware state circle for arbitrary pipeline stages.\n *\n * Pass a discrete `state`, or drive it from `progress` (0..1) alone:\n * 0 -> unstarted, 1 -> completed, anything between -> a `started` ring with a\n * pie wedge filled clockwise from 12 o'clock. `color` tints the ring + fill\n * (defaults to `currentColor`) so a card can paint per-stage colors; `backlog`\n * and `canceled` fall back to a muted token when no color is given.\n */\n\nexport type StatusState = \"backlog\" | \"unstarted\" | \"started\" | \"completed\" | \"canceled\";\n\nexport interface StatusIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"color\"> {\n state?: StatusState;\n progress?: number;\n color?: string;\n size?: number;\n}\n\nconst CENTER = 8;\nconst RING_RADIUS = 6;\nconst STROKE_WIDTH = 2;\nconst PIE_RADIUS = 3;\nconst MUTED = \"var(--color-fg-3)\";\n\nfunction resolveState(state: StatusState | undefined, progress: number | undefined): StatusState {\n if (state) return state;\n if (progress === undefined || !Number.isFinite(progress)) return \"unstarted\";\n if (progress <= 0) return \"unstarted\";\n if (progress >= 1) return \"completed\";\n return \"started\";\n}\n\n/** Filled sector path from 12 o'clock, clockwise, covering `fraction` of the circle. */\nfunction wedgePath(fraction: number): string {\n const f = Math.min(1, Math.max(0, fraction));\n const angle = f * 2 * Math.PI;\n const endX = CENTER + PIE_RADIUS * Math.sin(angle);\n const endY = CENTER - PIE_RADIUS * Math.cos(angle);\n const largeArc = f > 0.5 ? 1 : 0;\n return `M ${CENTER} ${CENTER} L ${CENTER} ${CENTER - PIE_RADIUS} A ${PIE_RADIUS} ${PIE_RADIUS} 0 ${largeArc} 1 ${endX} ${endY} Z`;\n}\n\nexport function StatusIcon({\n state,\n progress,\n color,\n size = 16,\n className,\n ...props\n}: StatusIconProps) {\n const resolved = resolveState(state, progress);\n const tint = color ?? \"currentColor\";\n const mutedTint = color ?? MUTED;\n const fraction = progress !== undefined && Number.isFinite(progress) ? progress : 0.5;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {resolved === \"backlog\" && (\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={mutedTint}\n strokeWidth={STROKE_WIDTH}\n strokeDasharray=\"1.5 1.5\"\n />\n )}\n\n {resolved === \"unstarted\" && (\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={tint}\n strokeWidth={STROKE_WIDTH}\n />\n )}\n\n {resolved === \"started\" && (\n <>\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={tint}\n strokeWidth={STROKE_WIDTH}\n />\n {fraction >= 1 ? (\n <circle cx={CENTER} cy={CENTER} r={PIE_RADIUS} fill={tint} />\n ) : fraction > 0 ? (\n <path d={wedgePath(fraction)} fill={tint} />\n ) : null}\n </>\n )}\n\n {resolved === \"completed\" && (\n <>\n <circle cx={CENTER} cy={CENTER} r={RING_RADIUS + STROKE_WIDTH / 2} fill={tint} />\n <path\n d=\"M5 8.2 7 10.2 11 5.8\"\n fill=\"none\"\n stroke=\"#fff\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n )}\n\n {resolved === \"canceled\" && (\n <>\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={mutedTint}\n strokeWidth={STROKE_WIDTH}\n />\n <path\n d=\"M5.75 5.75 10.25 10.25 M10.25 5.75 5.75 10.25\"\n stroke={mutedTint}\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon } from \"./icons\";\n/**\n * Stepper — custom progress indicator. No Radix equivalent.\n * Active step uses Pro purple; completed steps use the success palette;\n * connector lines pick up the same status. Supports horizontal (default)\n * and vertical orientation.\n *\n * Public API preserved: `steps`, `currentStep`, plus the new optional\n * `orientation` prop for vertical layouts.\n */\nexport interface Step {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: Step[];\n currentStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(function Stepper(\n { steps, currentStep, orientation = \"horizontal\", className, ...props },\n ref,\n) {\n const isVertical = orientation === \"vertical\";\n\n return (\n <div\n ref={ref}\n className={cn(isVertical ? \"flex flex-col gap-1\" : \"flex items-start gap-2\", className)}\n aria-label=\"Progress\"\n {...props}\n >\n {steps.map((step, index) => {\n const isCompleted = index < currentStep;\n const isActive = index === currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <div\n key={step.label}\n className={cn(\n isVertical ? \"flex gap-3\" : \"flex items-start gap-2\",\n !isLast && isVertical && \"pb-2\",\n )}\n >\n {/* Marker + connector column (vertical) / inline (horizontal) */}\n <div\n className={cn(isVertical ? \"flex flex-col items-center\" : \"flex items-center gap-2\")}\n >\n <div\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-full border text-xs font-medium tabular-nums\",\n \"transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n isCompleted && \"bg-success-bg text-success-fg border-success-line\",\n isActive && \"bg-pro-fg text-fg-on-pro border-pro-fg shadow-quiet\",\n !isCompleted && !isActive && \"bg-surface text-fg-4 border-rule\",\n )}\n aria-current={isActive ? \"step\" : undefined}\n >\n {isCompleted ? (\n <CheckIcon className=\"size-3.5\" strokeWidth={2.5} aria-hidden=\"true\" />\n ) : (\n index + 1\n )}\n </div>\n\n {/* Vertical connector */}\n {isVertical && !isLast && (\n <div\n className={cn(\n \"mt-1 min-h-4 w-px flex-1\",\n isCompleted ? \"bg-success-line\" : \"bg-rule\",\n )}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Horizontal label inline beside marker */}\n {!isVertical && (\n <div className=\"flex flex-col\">\n <span\n className={cn(\n \"text-sm leading-tight font-medium\",\n isActive ? \"text-fg\" : isCompleted ? \"text-fg-2\" : \"text-fg-4\",\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-fg-4 mt-0.5 text-xs leading-tight\">\n {step.description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Vertical label column */}\n {isVertical && (\n <div className=\"flex flex-col pb-1\">\n <span\n className={cn(\n \"text-sm leading-tight font-medium\",\n isActive ? \"text-fg\" : isCompleted ? \"text-fg-2\" : \"text-fg-4\",\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-fg-4 mt-0.5 text-xs leading-tight\">{step.description}</span>\n )}\n </div>\n )}\n\n {/* Horizontal connector */}\n {!isVertical && !isLast && (\n <div\n className={cn(\n \"mx-2 mt-3.5 h-px w-8 shrink-0 sm:w-12\",\n isCompleted ? \"bg-success-line\" : \"bg-rule\",\n )}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n })}\n </div>\n );\n});\n\nStepper.displayName = \"Stepper\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { useFormStatus } from \"react-dom\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { cn } from \"../lib/cn\";\n\ninterface SubmitButtonProps extends Omit<ButtonProps, \"type\" | \"loading\"> {\n pendingText?: string;\n children: React.ReactNode;\n}\n\n/**\n * SubmitButton — react-dom `useFormStatus`-aware Button.\n * Auto-disables and shows `pendingText` (or spinner) while the form is pending.\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(function SubmitButton(\n { pendingText, children, className, ...props },\n ref,\n) {\n const { pending } = useFormStatus();\n\n return (\n <Button\n ref={ref}\n type=\"submit\"\n loading={pending}\n disabled={pending}\n className={cn(\"w-full\", className)}\n {...props}\n >\n {pending && pendingText ? pendingText : children}\n </Button>\n );\n});\n\nSubmitButton.displayName = \"SubmitButton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst switchVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed\",\n \"data-[state=checked]:bg-pro-fg data-[state=unchecked]:bg-bg-3\",\n // §5.17: disabled is signalled via the disabled token swap on the\n // track itself; the thumb borrows fg-disabled. No opacity.\n \"data-[disabled]:data-[state=checked]:bg-fg-disabled\",\n \"data-[disabled]:data-[state=unchecked]:bg-bg-disabled\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst switchThumbVariants = cva(\n [\n \"pointer-events-none block rounded-full bg-surface shadow-quiet ring-0\",\n \"transition-transform duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ],\n {\n variants: {\n size: {\n sm: \"size-3.5 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-[18px] data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\ninterface SwitchProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, \"size\">,\n VariantProps<typeof switchVariants> {\n label?: string;\n}\n\nexport const Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n function Switch({ label, size, className, id: providedId, ...props }, ref) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n const root = (\n <SwitchPrimitive.Root\n ref={ref}\n id={id}\n className={cn(switchVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitive.Root>\n );\n\n if (!label) return root;\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n {root}\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n </div>\n );\n },\n);\n\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Table — semantic data-table primitives:\n * - mono uppercase headers (10px, 0.12em tracking) on `bg-surface-2`\n * - 1px `border-rule` under header, `border-rule-soft` between rows\n * - 13px body cells in `text-fg-2`, hover row gets `bg-bg-2`\n *\n * Public API: Table / TableHeader / TableBody / TableRow /\n * TableHead / TableCell / TableCaption. `wrapperClassName` wraps\n * the responsive overflow container.\n */\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Class for the wrapping `div` that handles overflow. */\n wrapperClassName?: string;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { className, wrapperClassName, ...props },\n ref,\n) {\n return (\n <div\n className={cn(\n \"rounded-card border-rule bg-surface w-full overflow-x-auto border\",\n wrapperClassName,\n )}\n >\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom border-collapse text-sm\", className)}\n {...props}\n />\n </div>\n );\n});\nTable.displayName = \"Table\";\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <thead ref={ref} className={cn(\"[&_tr]:border-rule [&_tr]:border-b\", className)} {...props} />\n );\n },\n);\nTableHeader.displayName = \"TableHeader\";\n\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, ...props },\n ref,\n) {\n return <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n});\nTableBody.displayName = \"TableBody\";\n\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn(\n \"border-rule bg-surface-2 border-t font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nTableFooter.displayName = \"TableFooter\";\n\nexport type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { className, ...props },\n ref,\n) {\n return (\n <tr\n ref={ref}\n className={cn(\n \"border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n // G15 compound: selected wins over hover; selected+hover uses the\n // Pro hover tint (not bg-bg-2, which would fight the selection).\n \"data-[state=selected]:bg-pro-bg data-[state=selected]:hover:bg-pro-bg-hover\",\n \"[&:not([data-state=selected])]:hover:bg-bg-2\",\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = \"TableRow\";\n\nexport type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement>;\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { className, ...props },\n ref,\n) {\n return (\n <th\n ref={ref}\n className={cn(\n // .data-table th — mono, 10px, uppercase, tight tracking 0.12em\n \"h-9 px-3.5 py-2 text-left align-middle whitespace-nowrap\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 bg-surface-2\",\n \"border-rule border-b\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = \"TableHead\";\n\nexport type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, ...props },\n ref,\n) {\n return (\n <td\n ref={ref}\n className={cn(\n // .data-table td — 13px, fg-2, soft 1px row divider, tabular nums\n \"text-fg-2 px-3.5 py-2.5 align-middle text-[13px] tabular-nums\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n});\nTableCell.displayName = \"TableCell\";\n\nexport type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n function TableCaption({ className, ...props }, ref) {\n return <caption ref={ref} className={cn(\"text-fg-3 mt-3 text-sm\", className)} {...props} />;\n },\n);\nTableCaption.displayName = \"TableCaption\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Tabs root */\n/* -------------------------------------------------------------------------- */\n\ntype TabsProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;\n\nexport const Tabs = React.forwardRef<React.ElementRef<typeof TabsPrimitive.Root>, TabsProps>(\n function Tabs({ className, ...props }, ref) {\n return <TabsPrimitive.Root ref={ref} className={cn(className)} {...props} />;\n },\n);\nTabs.displayName = TabsPrimitive.Root.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* Per spec §5 / 04-client-detail.html: a flush row sitting on a 1px rule. */\n/* -------------------------------------------------------------------------- */\n\ntype TabsListProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\n\nexport const TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(function TabsList({ className, ...props }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\"border-rule inline-flex items-center gap-0 border-b\", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger — pill | underline (default underline, matches mockup) */\n/* -------------------------------------------------------------------------- */\n\nconst triggerVariants = cva(\n cn(\n \"inline-flex items-center justify-center gap-2 text-[13px] font-medium\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n \"hover:text-fg\",\n ),\n {\n variants: {\n variant: {\n // §5.16: tab current = 2px accent underline + bold foreground text.\n // The cyan rule carries the brand statement (tabs are interaction,\n // so cyan; Pro purple is reserved for selection state on\n // list/dropdown surfaces). The active LABEL stays in `text-fg` for\n // legibility — accent on text was too low-contrast against the page\n // background, especially in dark mode.\n underline: cn(\n \"rounded-none bg-transparent px-3.5 py-2.5\",\n \"border-b-2 border-transparent -mb-px\",\n \"data-[state=active]:border-accent data-[state=active]:text-fg data-[state=active]:font-semibold\",\n ),\n pill: cn(\n \"rounded-pill px-3 py-1.5\",\n \"data-[state=active]:bg-pro-bg data-[state=active]:text-pro-fg\",\n ),\n },\n },\n defaultVariants: {\n variant: \"underline\",\n },\n },\n);\n\ninterface TabsTriggerProps\n extends\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof triggerVariants> {}\n\nexport const TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(function TabsTrigger({ className, variant, ...props }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(triggerVariants({ variant }), className)}\n {...props}\n />\n );\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsContent */\n/* -------------------------------------------------------------------------- */\n\ntype TabsContentProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;\n\nexport const TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n TabsContentProps\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-3 focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n className,\n )}\n {...props}\n />\n );\n});\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { Select, type SelectOption } from \"./select\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * TeamMemberSelect — assignee picker, built on the new Radix-based\n * `Select` primitive.\n *\n * Public API preserved verbatim:\n * <TeamMemberSelect\n * teamMembers currentUserId\n * value onValueChange\n * includeUnassigned placeholder\n * />\n *\n * Behaviour:\n * - Sort: current user first (when `currentUserId` matches), then\n * alphabetical on `fullName`.\n * - Current user is annotated with a small \"Me\" badge as the\n * `labelSuffix` of its option.\n * - When `includeUnassigned` is true (default), prepends a sentinel\n * `__unassigned__` option labelled \"Unassigned\". Note: legacy code\n * used `value: \"\"` for this, but Radix Select forbids empty-string\n * item values. We map \"\" ↔ \"__unassigned__\" transparently so the\n * consumer-facing contract (`value: \"\"` ⇔ unassigned) is preserved.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst UNASSIGNED_VALUE = \"__unassigned__\";\n\ninterface TeamMember {\n id: string;\n fullName: string;\n}\n\ninterface TeamMemberSelectProps {\n teamMembers: TeamMember[];\n currentUserId?: string | null;\n value: string;\n onValueChange: (value: string) => void;\n includeUnassigned?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nexport function TeamMemberSelect({\n teamMembers,\n currentUserId,\n value,\n onValueChange,\n includeUnassigned = true,\n placeholder = \"Select team member...\",\n className,\n}: TeamMemberSelectProps) {\n const options = React.useMemo<SelectOption[]>(() => {\n const meBadge = (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className=\"px-1.5 py-0 font-mono text-[10px] tracking-wider uppercase\"\n >\n Me\n </Badge>\n );\n\n // Sort: current user first, then alphabetical\n const sorted = [...teamMembers].sort((a, b) => {\n if (currentUserId) {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n }\n return a.fullName.localeCompare(b.fullName);\n });\n\n const memberOptions: SelectOption[] = sorted.map((m) => ({\n value: m.id,\n label: m.fullName,\n labelSuffix: m.id === currentUserId ? meBadge : undefined,\n }));\n\n if (includeUnassigned) {\n return [{ value: UNASSIGNED_VALUE, label: \"Unassigned\" }, ...memberOptions];\n }\n\n return memberOptions;\n }, [teamMembers, currentUserId, includeUnassigned]);\n\n // Map \"\" (legacy unassigned) ↔ sentinel for Radix.\n const innerValue = value === \"\" ? UNASSIGNED_VALUE : value;\n const handleChange = (next: string) => {\n onValueChange(next === UNASSIGNED_VALUE ? \"\" : next);\n };\n\n return (\n <Select\n options={options}\n value={innerValue}\n onValueChange={handleChange}\n placeholder={placeholder}\n className={className}\n />\n );\n}\n\nTeamMemberSelect.displayName = \"TeamMemberSelect\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst textareaVariants = cva(\n [\n \"flex w-full rounded-input border bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n ],\n {\n variants: {\n variant: {\n default: \"border-rule-strong\",\n ghost: \"border-transparent bg-transparent focus-visible:bg-surface\",\n },\n inputSize: {\n sm: \"min-h-16 px-2.5 py-1.5 text-xs\",\n md: \"min-h-20 px-3 py-2 text-[13px]\",\n lg: \"min-h-24 px-3.5 py-2.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n },\n);\n\nexport type TextareaVariants = VariantProps<typeof textareaVariants>;\n\ninterface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">, TextareaVariants {\n label?: string;\n error?: string;\n showCount?: boolean;\n autoResize?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n label,\n error,\n showCount,\n autoResize,\n variant,\n inputSize,\n maxLength,\n value,\n defaultValue,\n className,\n id: providedId,\n onChange,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const internalRef = useRef<HTMLTextAreaElement | null>(null);\n\n const setRefs = useCallback(\n (node: HTMLTextAreaElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const adjustHeight = useCallback(() => {\n if (!autoResize || !internalRef.current) return;\n const el = internalRef.current;\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n }, [autoResize]);\n\n useEffect(() => {\n adjustHeight();\n }, [value, adjustHeight]);\n\n const currentLength =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n </label>\n )}\n <textarea\n ref={setRefs}\n id={id}\n value={value}\n defaultValue={defaultValue}\n maxLength={maxLength}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n onChange={(e) => {\n onChange?.(e);\n adjustHeight();\n }}\n className={cn(\n textareaVariants({ variant, inputSize }),\n autoResize && \"resize-none overflow-hidden\",\n className,\n )}\n {...props}\n />\n {(error || (showCount && maxLength)) && (\n <div className=\"mt-1.5 flex items-center justify-between gap-2\">\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg text-xs\">\n {error}\n </p>\n ) : (\n <span />\n )}\n {showCount && maxLength && (\n <span className=\"text-fg-4 ml-auto font-mono text-[11px]\">\n {currentLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n\nTextarea.displayName = \"Textarea\";\n\nexport { textareaVariants };\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport {\n AlertTriangleSolidIcon,\n CheckCircleSolidIcon,\n InfoCircleSolidIcon,\n XCircleSolidIcon,\n XIcon,\n} from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Toast — custom (no Radix). Consumer contract:\n * useToast() → { toast, dismiss }\n *\n * Public API:\n * - `ToastProvider` mounts the toast region.\n * - `useToast()` returns `{ toast, dismiss }`.\n * • `toast({ title, description?, variant?, duration?, action? })`\n * • `dismiss(id?)` — dismiss a specific toast, or all when no id given.\n *\n * Visual model: a neutral surface card with a filled, variant-colored icon\n * chip on the leading edge — the colour lives in the chip, not the card\n * background, so toasts stay legible and on-brand regardless of variant.\n *\n * Variant → tinted chip + solid status glyph (distinct shapes per severity):\n * default → pro / InfoCircleSolidIcon\n * success → success / CheckCircleSolidIcon\n * destructive→ danger / XCircleSolidIcon\n * warning → warning / AlertTriangleSolidIcon\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype ToastVariant = \"default\" | \"success\" | \"destructive\" | \"warning\";\n\ninterface ToastAction {\n label: string;\n onClick: () => void;\n}\n\ninterface Toast {\n id: string;\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number;\n action?: ToastAction;\n}\n\ninterface ToastContextValue {\n toast: (options: Omit<Toast, \"id\">) => string;\n dismiss: (id?: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within <ToastProvider>\");\n return ctx;\n}\n\nlet toastCount = 0;\n\ninterface ToastProviderProps {\n children: React.ReactNode;\n}\n\nexport function ToastProvider({ children }: ToastProviderProps) {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const addToast = useCallback((options: Omit<Toast, \"id\">) => {\n const id = `toast-${++toastCount}`;\n setToasts((prev) => [...prev, { id, ...options }]);\n return id;\n }, []);\n\n const dismiss = useCallback((id?: string) => {\n if (id === undefined) {\n setToasts([]);\n return;\n }\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const value = useMemo<ToastContextValue>(\n () => ({ toast: addToast, dismiss }),\n [addToast, dismiss],\n );\n\n return (\n <ToastContext value={value}>\n {children}\n <div\n className=\"pointer-events-none fixed top-4 right-4 z-[var(--z-toast)] flex flex-col gap-2\"\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} toast={t} onDismiss={removeToast} />\n ))}\n </div>\n </ToastContext>\n );\n}\n\nconst variantConfig: Record<\n ToastVariant,\n { chip: string; icon: string; bar: string; Icon: typeof CheckCircleSolidIcon }\n> = {\n default: { chip: \"bg-pro-bg\", icon: \"text-pro-fg\", bar: \"bg-pro-fg\", Icon: InfoCircleSolidIcon },\n success: {\n chip: \"bg-success-bg\",\n icon: \"text-success-fg\",\n bar: \"bg-success-fg\",\n Icon: CheckCircleSolidIcon,\n },\n destructive: {\n chip: \"bg-danger-bg\",\n icon: \"text-danger-fg\",\n bar: \"bg-danger-fg\",\n Icon: XCircleSolidIcon,\n },\n warning: {\n chip: \"bg-warning-bg\",\n icon: \"text-warning-fg\",\n bar: \"bg-warning-fg\",\n Icon: AlertTriangleSolidIcon,\n },\n};\n\ninterface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n}\n\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const [exiting, setExiting] = useState(false);\n const [filled, setFilled] = useState(false);\n\n const duration = toast.duration ?? 5000;\n const showProgress = duration > 0; // 0 = sticky toast, no countdown\n\n const close = useCallback(() => {\n setExiting(true);\n // Match exit animation duration (--duration-fast, 150ms) so the toast\n // unmounts immediately after it visually leaves the screen.\n setTimeout(() => onDismiss(toast.id), 150);\n }, [toast.id, onDismiss]);\n\n useEffect(() => {\n if (!showProgress) return;\n timerRef.current = setTimeout(close, duration);\n return () => clearTimeout(timerRef.current);\n }, [showProgress, duration, close]);\n\n // Run the progress bar from 0 → 100% across the toast's lifetime. Flip the\n // width on the next frame so the CSS width transition actually animates.\n useEffect(() => {\n if (!showProgress) return;\n const raf = requestAnimationFrame(() => setFilled(true));\n return () => cancelAnimationFrame(raf);\n }, [showProgress]);\n\n const { chip, icon, bar, Icon } = variantConfig[toast.variant ?? \"default\"];\n\n return (\n <div\n role=\"status\"\n data-state={exiting ? \"closed\" : \"open\"}\n className={cn(\n \"bg-surface border-rule text-fg rounded-card shadow-card pointer-events-auto relative w-80 overflow-hidden border p-4\",\n \"font-body\",\n // Unified data-state animation (spec §5.27) — same model as Dialog/Tooltip:\n // open → fade+slide in over --duration-overlay (200ms), ease-out-quart\n // close → fade+slide out over --duration-fast (150ms), ease-in\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-right-8 data-[state=open]:fade-in-0\",\n \"data-[state=open]:duration-[var(--duration-overlay)] data-[state=open]:ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-8 data-[state=closed]:fade-out-0\",\n \"data-[state=closed]:duration-[var(--duration-fast)] data-[state=closed]:ease-[var(--ease-in)]\",\n \"motion-reduce:animate-none\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-[9px]\",\n chip,\n icon,\n )}\n aria-hidden=\"true\"\n >\n <Icon className=\"size-5\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-fg text-sm leading-tight font-semibold\">{toast.title}</p>\n {toast.description && (\n <p className=\"text-fg-3 mt-0.5 text-sm leading-snug\">{toast.description}</p>\n )}\n {toast.action && (\n <button\n type=\"button\"\n onClick={() => {\n toast.action?.onClick();\n close();\n }}\n className={cn(\n \"text-pro-fg mt-2 text-sm font-semibold\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] rounded-sm focus-visible:outline-none\",\n )}\n >\n {toast.action.label}\n </button>\n )}\n </div>\n <button\n type=\"button\"\n onClick={close}\n className={cn(\n \"text-fg-4 hover:text-fg-2 rounded-icon -mr-1 inline-flex size-5 shrink-0 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label=\"Dismiss\"\n >\n <XIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n {showProgress && (\n <div className=\"bg-rule absolute inset-x-0 bottom-0 h-1\" aria-hidden=\"true\">\n <div\n className={cn(\n \"h-full transition-[width] ease-linear motion-reduce:transition-none\",\n bar,\n )}\n style={{ width: filled ? \"100%\" : \"0%\", transitionDuration: `${duration}ms` }}\n />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* ToggleGroup */\n/* Wraps Radix ToggleGroup; preserves single|multiple + default|outline. */\n/* -------------------------------------------------------------------------- */\n\nconst itemVariants = cva(\n cn(\n \"inline-flex items-center justify-center rounded-pill px-3 py-1.5 text-[13px] font-medium\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"data-[state=on]:bg-pro-bg data-[state=on]:text-pro-fg\",\n ),\n {\n variants: {\n variant: {\n default: \"\",\n outline: \"border border-rule-strong bg-surface\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ntype ToggleGroupContextValue = VariantProps<typeof itemVariants>;\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n variant: \"default\",\n});\n\ntype ToggleGroupRootProps = React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof itemVariants>;\n\nexport const ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n ToggleGroupRootProps\n>(function ToggleGroup({ className, variant, children, ...props }, ref) {\n return (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...(props as React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root>)}\n >\n <ToggleGroupContext.Provider value={{ variant }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n});\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;\n\ninterface ToggleGroupItemProps\n extends\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item>,\n VariantProps<typeof itemVariants> {}\n\nexport const ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n ToggleGroupItemProps\n>(function ToggleGroupItem({ className, variant, ...props }, ref) {\n const ctx = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(itemVariants({ variant: variant ?? ctx.variant }), className)}\n {...props}\n />\n );\n});\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Tooltip — Radix UI tooltip primitive. Modified\n *\n * The root `Tooltip` wraps `TooltipPrimitive.Provider` once per instance\n * so single-use tooltips work without app-level provider scaffolding.\n * Apps that render many tooltips should still mount a single\n * `<TooltipProvider>` at the app root for shared `delayDuration` /\n * `skipDelayDuration` semantics.\n *\n * Public API preserved:\n * Tooltip (with `delayMs` prop), TooltipTrigger, TooltipContent\n *\n * NEW (additive): TooltipProvider, TooltipPortal are exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipPortal = TooltipPrimitive.Portal;\n\ninterface TooltipProps extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root> {\n /**\n * Backwards-compat alias for Radix's `delayDuration`. Kept so existing\n * call sites that passed `delayMs={…}` keep working unchanged.\n */\n delayMs?: number;\n /**\n * Optional delayDuration applied to the implicit Provider. Forwarded\n * here when no surrounding `<TooltipProvider>` is present.\n */\n delayDuration?: number;\n}\n\nconst Tooltip = ({ delayMs, delayDuration, children, ...props }: TooltipProps) => {\n const resolvedDelay = delayDuration ?? delayMs ?? 300;\n return (\n <TooltipPrimitive.Provider delayDuration={resolvedDelay}>\n <TooltipPrimitive.Root delayDuration={resolvedDelay} {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\nTooltip.displayName = \"Tooltip\";\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-input border-rule-strong bg-surface z-[var(--z-tooltip)] max-w-xs border px-2.5 py-1.5\",\n \"font-body text-fg shadow-pop text-xs leading-tight\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=delayed-open]:scale-100 data-[state=delayed-open]:opacity-100\",\n \"data-[state=instant-open]:scale-100 data-[state=instant-open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipProvider, TooltipTrigger, TooltipPortal, TooltipContent };\n","import * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { forwardRef } from \"react\";\n\n/**\n * VisuallyHidden — hides content from sighted users while keeping it\n * available to assistive tech. Backed by `@radix-ui/react-visually-hidden`\n * (the canonical implementation; survives strict-mode + portals).\n */\n\ninterface VisuallyHiddenProps extends React.ComponentPropsWithoutRef<\n typeof VisuallyHiddenPrimitive.Root\n> {\n children: React.ReactNode;\n}\n\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n function VisuallyHidden({ children, ...props }, ref) {\n return (\n <VisuallyHiddenPrimitive.Root ref={ref} {...props}>\n {children}\n </VisuallyHiddenPrimitive.Root>\n );\n },\n);\n\nVisuallyHidden.displayName = \"VisuallyHidden\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type ShellProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Shell = forwardRef<HTMLDivElement, ShellProps>(function Shell(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(\"bg-bg flex h-dvh w-full\", className)} {...props} />;\n});\nShell.displayName = \"Shell\";\n\nexport type MainProps = React.HTMLAttributes<HTMLElement>;\n\nexport const Main = forwardRef<HTMLElement, MainProps>(function Main({ className, ...props }, ref) {\n return (\n <main\n ref={ref}\n className={cn(\"flex min-w-0 flex-1 flex-col overflow-hidden\", className)}\n {...props}\n />\n );\n});\nMain.displayName = \"Main\";\n\nexport interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Override the bottom padding only — the rest of the content area keeps\n * `--content-pad` so the header alignment stays intact. Use this on\n * long-scroll pages (Kanban, document trees, large tables) that want\n * extra breathing room beneath the last row.\n *\n * Accepts any CSS length (e.g. `\"64px\"`, `\"4rem\"`). Omit to inherit\n * the symmetric default.\n */\n padBottom?: string;\n}\n\nexport const Content = forwardRef<HTMLDivElement, ContentProps>(function Content(\n { padBottom, className, style, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex-1 overflow-y-auto p-[var(--content-pad)]\", className)}\n style={padBottom ? { paddingBottom: padBottom, ...style } : style}\n {...props}\n />\n );\n});\nContent.displayName = \"Content\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { Avatar } from \"../primitives/avatar\";\nimport { Collapsible, CollapsibleContent } from \"../primitives/collapsible\";\nimport { ChevronDownIcon, PanelLeftCloseIcon, PanelLeftIcon } from \"../primitives/icons\";\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * State model\n *\n * `expanded` — full 256px column, labels visible. The legacy behavior;\n * still the default for any consumer that doesn't opt in.\n * `rail` — 64px icon column, labels hidden. The user's *pinned*\n * intent to reclaim canvas width.\n *\n * Peek is *transient* and not part of the user intent — when in `rail`,\n * hovering the column momentarily widens it back to expanded as a\n * floating overlay so the user can read labels without losing their\n * pinned preference. Peek lives inside the <Sidebar> as local state.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarState = \"expanded\" | \"rail\";\n\ninterface SidebarContextValue {\n state: SidebarState;\n setState: (next: SidebarState) => void;\n toggle: () => void;\n collapsible: boolean;\n /**\n * Refcount of \"hold the column visually expanded\" requests from external\n * consumers (dropdowns, popovers, command palettes). Read by <Sidebar> to\n * trigger overlay rendering without mutating the persistent `state`.\n * See `useSidebarPeekLock` for the canonical consumer API.\n */\n peekLockCount: number;\n /**\n * Increment the peek-lock refcount. Returns an idempotent release function\n * that decrements once when called and is safe to call twice. Prefer the\n * `useSidebarPeekLock` hook over calling this directly — it handles the\n * acquire/release lifecycle via useEffect cleanup.\n */\n acquirePeekLock: () => () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n// Sentinel so atoms can render outside a provider without crashing —\n// keeps the legacy \"drop a <Sidebar> into a <Shell>\" path working\n// untouched.\nconst NOOP_CONTEXT: SidebarContextValue = {\n state: \"expanded\",\n setState: () => {},\n toggle: () => {},\n collapsible: false,\n peekLockCount: 0,\n acquirePeekLock: () => () => {},\n};\n\nexport function useSidebarState(): SidebarContextValue {\n return React.useContext(SidebarContext) ?? NOOP_CONTEXT;\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Provider\n *\n * Wraps the app shell. Owns the user's pinned intent. Controlled\n * (`state` + `onStateChange`) and uncontrolled (`defaultState`) modes\n * both supported, following the Radix pattern.\n *\n * `storageKey` opts into localStorage persistence. The stored value is\n * applied *post-mount* via `useEffect`, never in the initial render — so\n * SSR markup and the client's first render produce identical trees and\n * React's `useId` counter doesn't drift for downstream Radix primitives.\n * The trade-off is a one-frame flash from `defaultState` to the stored\n * state when a user has previously pinned a non-default. Consumers that\n * cannot tolerate the flash should persist via a cookie they read in a\n * server component and pass through `defaultState`.\n *\n * `shortcut` defaults to `Mod+\\` — same chord as VS Code, GitHub, Linear.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarProviderProps {\n children?: React.ReactNode;\n state?: SidebarState;\n defaultState?: SidebarState;\n onStateChange?: (next: SidebarState) => void;\n /** Persist the user's intent across reloads under this localStorage key. */\n storageKey?: string;\n /** Global toggle shortcut. Pass `null` to disable. Defaults to `Mod+\\`. */\n shortcut?: string | null;\n}\n\nconst DEFAULT_SHORTCUT = \"Mod+\\\\\";\n\nfunction readStorage(key: string | undefined): SidebarState | null {\n if (!key || typeof window === \"undefined\") return null;\n try {\n const v = window.localStorage.getItem(key);\n return v === \"rail\" || v === \"expanded\" ? v : null;\n } catch {\n return null;\n }\n}\n\nexport function SidebarProvider({\n children,\n state: controlled,\n defaultState = \"expanded\",\n onStateChange,\n storageKey,\n shortcut = DEFAULT_SHORTCUT,\n}: SidebarProviderProps) {\n // Initial state must be identical on SSR and the client's first render.\n // Reading localStorage here would diverge the two and shift React's\n // `useId` counter for every Radix primitive downstream — the bug that\n // broke `aria-controls` wiring in dropdowns nested inside the app shell.\n // The post-mount effect below applies the stored value on the second\n // render. The one-frame flash is the documented trade-off.\n const [uncontrolled, setUncontrolled] = React.useState<SidebarState>(\n controlled ?? defaultState,\n );\n\n React.useEffect(() => {\n if (controlled !== undefined) return;\n const stored = readStorage(storageKey);\n if (stored && stored !== uncontrolled) setUncontrolled(stored);\n // Apply stored value once after hydration. Subsequent writes are\n // owned by `setState` below and persisted there.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const state = controlled ?? uncontrolled;\n\n const setState = React.useCallback(\n (next: SidebarState) => {\n if (controlled === undefined) setUncontrolled(next);\n onStateChange?.(next);\n if (storageKey && typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(storageKey, next);\n } catch {\n /* quota / private-mode — ignore, runtime state still works */\n }\n }\n },\n [controlled, onStateChange, storageKey],\n );\n\n const toggle = React.useCallback(() => {\n setState(state === \"expanded\" ? \"rail\" : \"expanded\");\n }, [state, setState]);\n\n // Peek-lock refcount. External consumers (dropdowns, popovers) acquire a\n // lock to hold the column visually expanded as an overlay while their UI\n // is open, without touching the user's persisted `state`. Refcounted so\n // multiple peer consumers compose: e.g. a popover inside a dropdown still\n // holds the column open after the dropdown closes, until the popover\n // releases too. The pinned intent stays the user's, transient visibility\n // stays the consumer's.\n const [peekLockCount, setPeekLockCount] = React.useState(0);\n\n const acquirePeekLock = React.useCallback(() => {\n setPeekLockCount((n) => n + 1);\n // The release closure is idempotent: a consumer that holds the lock\n // through React strict-mode double-effects, or a defensive double-call,\n // must not double-decrement. The `released` flag guards against that;\n // `Math.max(0, n - 1)` is a belt-and-braces floor so accounting bugs\n // can never drag the count negative and leave a permanent overlay.\n let released = false;\n return () => {\n if (released) return;\n released = true;\n setPeekLockCount((n) => Math.max(0, n - 1));\n };\n }, []);\n\n React.useEffect(() => {\n if (!shortcut) return;\n const parts = shortcut.split(\"+\");\n const key = parts.pop() ?? \"\";\n const wantMod = parts.includes(\"Mod\");\n const wantShift = parts.includes(\"Shift\");\n const wantAlt = parts.includes(\"Alt\");\n function onKey(e: KeyboardEvent) {\n const isMac =\n typeof navigator !== \"undefined\" && /Mac|iPhone|iPad/.test(navigator.platform);\n const mod = isMac ? e.metaKey : e.ctrlKey;\n if (e.key.toLowerCase() !== key.toLowerCase()) return;\n if (wantMod !== mod) return;\n if (wantShift !== e.shiftKey) return;\n if (wantAlt !== e.altKey) return;\n e.preventDefault();\n toggle();\n }\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [shortcut, toggle]);\n\n const value: SidebarContextValue = React.useMemo(\n () => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),\n [state, setState, toggle, peekLockCount, acquirePeekLock],\n );\n\n return <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>;\n}\nSidebarProvider.displayName = \"SidebarProvider\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Sidebar root\n *\n * Visual contract:\n * - Width is driven by inline style (either the expanded or rail\n * token). Setting it inline means the flex Shell layout reflows\n * with no coordination needed in <Main>.\n * - Drives child styling via three data-attributes:\n * data-state=\"expanded\"|\"rail\" → user intent\n * data-peek=\"true\"|undefined → transient hover state\n * data-labels=\"show\"|\"hide\" → derived; \"hide\" only when\n * rail AND not peeking. Atoms\n * read this single attribute\n * rather than computing the\n * combination themselves.\n * - Carries `group/sidebar` so descendants can target the parent\n * via `group-data-[labels=hide]/sidebar:…` etc.\n *\n * Peek behavior: when state=\"rail\", hovering the column waits\n * PEEK_ENTER_DELAY_MS (forgives mouse-passthrough) then expands the\n * column to its full width as `position: fixed` overlay. Leaving waits\n * PEEK_LEAVE_DELAY_MS (forgives overshoot toward an item).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst PEEK_ENTER_DELAY_MS = 100;\nconst PEEK_LEAVE_DELAY_MS = 200;\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Opt into the rail / hover-peek behavior. When false (default), the\n * sidebar always renders expanded — the legacy behavior. When true,\n * the sidebar reads pinned state from <SidebarProvider>; if no\n * provider is mounted it still renders expanded, so dropping\n * `collapsible` alone is a no-op.\n */\n collapsible?: boolean;\n}\n\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n { className, collapsible = false, onMouseEnter, onMouseLeave, style, ...props },\n ref,\n) {\n const ctx = React.useContext(SidebarContext);\n const state: SidebarState = collapsible && ctx ? ctx.state : \"expanded\";\n const peekLockCount = collapsible && ctx ? ctx.peekLockCount : 0;\n const [peek, setPeek] = React.useState(false);\n const enterTimer = React.useRef<number | null>(null);\n const leaveTimer = React.useRef<number | null>(null);\n\n const clearTimers = React.useCallback(() => {\n if (enterTimer.current != null) {\n window.clearTimeout(enterTimer.current);\n enterTimer.current = null;\n }\n if (leaveTimer.current != null) {\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = null;\n }\n }, []);\n\n React.useEffect(() => () => clearTimers(), [clearTimers]);\n\n // The moment a user re-pins to expanded, drop any pending peek state\n // so we never end up in \"expanded + peek=true\" (visually identical\n // but with the wrong shadow/position).\n React.useEffect(() => {\n if (state === \"expanded\") {\n clearTimers();\n setPeek(false);\n }\n }, [state, clearTimers]);\n\n const handleEnter = (e: React.MouseEvent<HTMLElement>) => {\n onMouseEnter?.(e);\n if (!collapsible || state !== \"rail\") return;\n if (leaveTimer.current != null) {\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = null;\n }\n if (peek) return;\n enterTimer.current = window.setTimeout(() => setPeek(true), PEEK_ENTER_DELAY_MS);\n };\n\n const handleLeave = (e: React.MouseEvent<HTMLElement>) => {\n onMouseLeave?.(e);\n if (!collapsible) return;\n if (enterTimer.current != null) {\n window.clearTimeout(enterTimer.current);\n enterTimer.current = null;\n }\n if (!peek) return;\n leaveTimer.current = window.setTimeout(() => setPeek(false), PEEK_LEAVE_DELAY_MS);\n };\n\n // Overlay = transient expansion (hover OR programmatic lock). Rendered as\n // `position: fixed` so the canvas does not reflow. Pinned (`state ===\n // \"expanded\"`) renders in-flow instead — the user has committed to the\n // width, so the canvas should adapt to it.\n const overlay = state === \"rail\" && (peek || peekLockCount > 0);\n const labelsHidden = state === \"rail\" && !peek && peekLockCount === 0;\n const effectiveWidth = labelsHidden ? \"var(--shell-sidebar-w-rail)\" : \"var(--shell-sidebar-w)\";\n\n return (\n // Hover-peek is *enhancement only*: the canonical way to toggle the\n // sidebar is <SidebarTrigger> (button) or the Mod+\\ shortcut, both\n // fully keyboard- and screen-reader-accessible. The mouse handlers\n // here exist to widen the column on pointer hover, which has no\n // keyboard analogue and intentionally so.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <aside\n ref={ref}\n data-state={state}\n // `data-peek` retained for hover-specifically (back-compat for any\n // external CSS hooks that target it). Overlay rendering — including\n // programmatic peek-lock from `useSidebarPeekLock` — is driven by\n // `data-overlay`. Plan: drop `data-peek` in the next minor.\n data-peek={peek ? \"true\" : undefined}\n data-overlay={overlay ? \"true\" : undefined}\n data-labels={labelsHidden ? \"hide\" : \"show\"}\n data-collapsible={collapsible ? \"true\" : undefined}\n // `state` and `peek` initialize identically on SSR and the client's\n // first render (see <SidebarProvider>) — all data-attributes here\n // match across the hydration boundary, so no suppression is needed.\n // Any future divergence is a real bug and should fail loud.\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n style={{ width: effectiveWidth, ...style }}\n className={cn(\n \"group/sidebar scrollbar-thin flex h-dvh shrink-0 flex-col overflow-y-auto\",\n \"border-rule bg-bg-2 border-r px-3 pt-4 pb-4\",\n // 220ms feels right for a ~192px width sweep — slower than the\n // 150ms `--duration-fast` (which reads as a snap on this size of\n // movement) but well short of `--duration-slow` (which feels\n // sluggish). `will-change` hints the compositor so the column\n // doesn't repaint every frame mid-transition.\n \"transition-[width,box-shadow] duration-[220ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"[will-change:width]\",\n // Overlay (hover-peek OR programmatic peek-lock): float above the\n // canvas without reflowing layout. Driven by `data-overlay` so a\n // single rule handles both transient sources.\n \"data-[overlay=true]:fixed data-[overlay=true]:top-0 data-[overlay=true]:left-0\",\n \"data-[overlay=true]:z-[var(--z-overlay)] data-[overlay=true]:shadow-pop\",\n // Padding is held constant across states so icons keep their\n // horizontal anchor when the column widens — peek expands the\n // labels rightward rather than shifting the icons leftward.\n className,\n )}\n {...props}\n />\n );\n});\nSidebar.displayName = \"Sidebar\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Trigger\n *\n * Toggle button. Designed to live in either the brand row (inside\n * <Sidebar>) or an app header (outside <Sidebar>, but inside the\n * provider tree). Renders `null` when no provider is mounted so apps\n * can drop it in without conditionals.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n expandLabel?: string;\n collapseLabel?: string;\n}\n\nexport const SidebarTrigger = React.forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n function SidebarTrigger(\n {\n className,\n expandLabel = \"Expand sidebar\",\n collapseLabel = \"Collapse sidebar\",\n onClick,\n ...props\n },\n ref,\n ) {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) return null;\n const { state, toggle } = ctx;\n const label = state === \"expanded\" ? collapseLabel : expandLabel;\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n aria-expanded={state === \"expanded\"}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) toggle();\n }}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-3 hover:bg-bg-3 hover:text-fg\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&_svg]:size-4\",\n className,\n )}\n {...props}\n >\n {state === \"expanded\" ? <PanelLeftCloseIcon /> : <PanelLeftIcon />}\n </button>\n );\n },\n);\nSidebarTrigger.displayName = \"SidebarTrigger\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * useSidebarPeekLock\n *\n * Hold the sidebar column visually expanded while `active` is true. In rail\n * mode this renders the column as a `position: fixed` overlay (the same\n * overlay used for hover-peek) so the canvas does not reflow. Releases\n * automatically when `active` flips false or the consumer unmounts.\n *\n * Use for menus, popovers, or command palettes anchored to elements inside\n * the brand row. Do NOT use to express \"I want this pinned\" — that is the\n * user's intent, surfaced via <SidebarPinButton> or Mod+\\. Mutating `state`\n * for transient UI couples persistence to current visuals and races the\n * canonical writers.\n *\n * Refcounted: multiple peer consumers may hold a lock simultaneously\n * without stomping each other; the column collapses only when every lock\n * has released.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport function useSidebarPeekLock(active: boolean): void {\n const ctx = React.useContext(SidebarContext);\n React.useEffect(() => {\n if (!active || !ctx) return;\n const release = ctx.acquirePeekLock();\n return release;\n }, [active, ctx]);\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * SidebarPinButton\n *\n * Pin/unpin affordance. Reads `state` only — never `peek` or `peekLockCount`.\n * That single rule prevents the label from lying when the column is\n * transiently overlay-expanded by a dropdown or hover: aria-label and the\n * click effect both reflect the user's persisted intent, not what the\n * column currently happens to look like.\n *\n * Renders null when no provider is mounted or when collapsible is false,\n * mirroring <SidebarTrigger>'s drop-in safety.\n *\n * Coexists with <SidebarTrigger>. Pick one per product based on voice:\n * pin/unpin (this) for products where the user mental model is \"this stays\n * where I left it,\" collapse/expand (SidebarTrigger) for products where the\n * action language is more about visibility than commitment.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarPinButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** aria-label when state=\"rail\" (default: \"Pin sidebar\"). */\n pinLabel?: string;\n /** aria-label when state=\"expanded\" (default: \"Unpin sidebar\"). */\n unpinLabel?: string;\n}\n\nexport const SidebarPinButton = React.forwardRef<HTMLButtonElement, SidebarPinButtonProps>(\n function SidebarPinButton(\n {\n pinLabel = \"Pin sidebar\",\n unpinLabel = \"Unpin sidebar\",\n className,\n onClick,\n ...props\n },\n ref,\n ) {\n const ctx = React.useContext(SidebarContext);\n // No-op outside a provider OR when the sidebar is not collapsible —\n // pin has no meaning when the column never collapses.\n if (!ctx || !ctx.collapsible) return null;\n const { state, setState } = ctx;\n const isPinned = state === \"expanded\";\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={isPinned ? unpinLabel : pinLabel}\n aria-pressed={isPinned}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setState(isPinned ? \"rail\" : \"expanded\");\n }}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-4 hover:bg-bg-3 hover:text-fg aria-pressed:text-fg\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n // Hidden when labels are hidden (rail-no-peek-no-lock). Visible\n // in every overlay state so users can pin during hover or while\n // a dropdown holds the column open.\n \"group-data-[labels=hide]/sidebar:hidden\",\n className,\n )}\n {...props}\n >\n <PinGlyph size={14} filled={isPinned} className=\"rotate-45\" />\n </button>\n );\n },\n);\nSidebarPinButton.displayName = \"SidebarPinButton\";\n\n// Inline thumbtack glyph. Lives next to the button — the only consumer for\n// now. Promote to the icons module if a second consumer needs it.\nfunction PinGlyph({\n size = 16,\n filled = false,\n className,\n}: {\n size?: number;\n filled?: boolean;\n className?: string;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M12 17v5\" />\n <path\n d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\"\n fill={filled ? \"currentColor\" : \"none\"}\n />\n </svg>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Brand\n *\n * Plain flex row. Children that should disappear in rail (e.g. the\n * wordmark text) should be wrapped in <SidebarBrandText>;\n * a bare logo glyph passed as a sibling stays put.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarBrandProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SidebarBrand = React.forwardRef<HTMLDivElement, SidebarBrandProps>(\n function SidebarBrand({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarBrand.displayName = \"SidebarBrand\";\n\n/**\n * Text portion of the brand row. Hides itself when the sidebar\n * collapses to a rail. Use to wrap product names / wordmarks so the\n * logo glyph alone remains visible at 64px.\n */\nexport type SidebarBrandTextProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarBrandText = React.forwardRef<HTMLSpanElement, SidebarBrandTextProps>(\n function SidebarBrandText({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n aria-hidden=\"false\"\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a\n // word boundary instead of mid-word when the rail is narrow.\n \"min-w-0 line-clamp-1\",\n // Smooth fade + width collapse on rail. Keeps the wordmark\n // legible up to the moment the column reaches rail width, then\n // fully drops out (visibility:hidden cuts hit-testing).\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-[160px] opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarBrandText.displayName = \"SidebarBrandText\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Section\n *\n * Label hides in rail (the section keeps its vertical rhythm via the\n * existing `mb-4`, so grouping reads even without the text). Stays in\n * the DOM as `aria-label` on the group when collapsed — screen readers\n * announce the group regardless of visual state.\n *\n * Also: provides an *exclusive-open scope* to descendant <SidebarLinkGroup>s.\n * When a group's body row is clicked it claims exclusivity within its\n * containing section; siblings collapse. Chevron clicks bypass this and\n * toggle in place. See `SidebarLinkGroup` for the rule.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface SidebarGroupScopeValue {\n exclusiveId: string | null;\n setExclusive: (id: string) => void;\n}\n\nconst SidebarGroupScopeContext = React.createContext<SidebarGroupScopeValue | null>(null);\n\nexport interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode;\n /**\n * Label color tone. Encodes the *meaning* of the section's\n * priority in the scan path:\n * - `\"pro\"` (default) — Pro-purple, for primary day-to-day work.\n * - `\"muted\"` — `text-fg-3`, for system-level or settings groups\n * that should sit lower in the visual hierarchy.\n *\n * Mirrors the `tone` API on `<SidebarLinkBadge>`.\n */\n tone?: \"pro\" | \"muted\";\n}\n\nexport const SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n function SidebarSection({ label, tone = \"pro\", className, children, ...props }, ref) {\n const ariaLabel =\n typeof label === \"string\" ? label : typeof label === \"number\" ? String(label) : undefined;\n\n const [exclusiveId, setExclusiveIdState] = React.useState<string | null>(null);\n const setExclusive = React.useCallback(\n (id: string) => setExclusiveIdState(id),\n [],\n );\n const scope = React.useMemo<SidebarGroupScopeValue>(\n () => ({ exclusiveId, setExclusive }),\n [exclusiveId, setExclusive],\n );\n\n return (\n <SidebarGroupScopeContext.Provider value={scope}>\n <div\n ref={ref}\n role={ariaLabel ? \"group\" : undefined}\n aria-label={ariaLabel}\n className={cn(\n \"mb-4\",\n // In rail, the visible section labels disappear and the only\n // grouping cue is a thin rule. No extra mb/pb — the border\n // itself separates groups, so inter-section spacing matches\n // intra-section spacing and the rail stays dense.\n \"group-data-[labels=hide]/sidebar:mb-0 group-data-[labels=hide]/sidebar:border-b group-data-[labels=hide]/sidebar:border-rule group-data-[labels=hide]/sidebar:pb-0 group-data-[labels=hide]/sidebar:last:border-b-0\",\n className,\n )}\n {...props}\n >\n {label != null && (\n <div\n className={cn(\n \"mb-1 flex items-center justify-between px-2.5 py-1\",\n \"transition-opacity duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"opacity-100\",\n \"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0\",\n )}\n >\n <span\n className={cn(\n \"font-mono text-[11px] tracking-[0.14em] uppercase\",\n tone === \"muted\" ? \"text-fg-3\" : \"text-pro-fg\",\n )}\n >\n {label}\n </span>\n </div>\n )}\n {children}\n </div>\n </SidebarGroupScopeContext.Provider>\n );\n },\n);\nSidebarSection.displayName = \"SidebarSection\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Link\n *\n * In rail (no peek):\n * - Icon centers (justify-center, no gap consumption)\n * - Label, badge, and any other text children are hidden\n *\n * The active rail indicator already anchors to `before:left-0` of the\n * link itself, so it stays visually correct without changes.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Required when rendered as `<a>`; ignored when `asChild` is true. */\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n /**\n * Render via Radix `<Slot>` so the consumer can wrap a router-aware\n * component (e.g. Next.js `<Link>`, React Router `<NavLink>`) that\n * owns `href` and prefetch behavior. Without this, sidebar clicks\n * bypass client-side routing and trigger full page loads.\n */\n asChild?: boolean;\n}\n\nexport const SidebarLink = React.forwardRef<HTMLAnchorElement, SidebarLinkProps>(\n function SidebarLink(\n { href, icon, active = false, asChild, className, children, ...props },\n ref,\n ) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n {...(asChild ? {} : { href })}\n data-active={active ? \"true\" : undefined}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"group/link relative mb-px flex items-center gap-2.5 rounded-md px-2.5 py-1.5\",\n \"text-fg-2 text-[13px] font-normal no-underline\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[active=true]:bg-pro-bg data-[active=true]:text-pro-fg data-[active=true]:font-medium\",\n // In rail, the icon itself carries the active state rather\n // than just the rule bar — color is more legible than a 2px\n // vertical mark at the column's left edge when labels are\n // hidden. The full-opacity icon override (`opacity-100`)\n // counters the default `[&_svg]:opacity-85` so the active\n // icon doesn't read as \"still inactive but darker\".\n \"group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-pro-fg group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100\",\n // Active rail: 2px wide, 16px tall, anchored to the link's\n // own left edge — no parent-padding dependency. Continues\n // working unchanged when the aside narrows to a rail.\n \"data-[active=true]:before:absolute data-[active=true]:before:content-['']\",\n \"data-[active=true]:before:top-1/2 data-[active=true]:before:left-0\",\n \"data-[active=true]:before:h-4 data-[active=true]:before:w-[2px] data-[active=true]:before:-translate-y-1/2\",\n \"data-[active=true]:before:bg-pro-fg data-[active=true]:before:rounded-r-full\",\n // Padding/gap stay constant so the icon stays under the cursor\n // when the column widens during peek. The label simply collapses\n // to width 0 via <SidebarLinkLabel>.\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:opacity-85\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {icon}\n <span\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {children}\n </span>\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarLink.displayName = \"SidebarLink\";\n\n/**\n * Label slot for `<SidebarLink asChild>` consumers.\n *\n * The default (non-`asChild`) `SidebarLink` already hides its label in rail\n * mode. When consumers opt into `asChild` to wrap a router-aware element,\n * the design system can't reach inside to apply that rule — so consumers\n * compose this atom around their label text. Removes the leaky requirement\n * that every consumer re-stamp `group-data-[labels=hide]/sidebar:hidden`\n * on their inner spans.\n */\nexport type SidebarLinkLabelProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarLinkLabel = React.forwardRef<HTMLSpanElement, SidebarLinkLabelProps>(\n function SidebarLinkLabel({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n // Fade + collapse instead of hard display:none so a single\n // 180ms opacity tween covers all labels in lockstep with the\n // 220ms aside-width transition — no snap on the last frame.\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarLinkLabel.displayName = \"SidebarLinkLabel\";\n\n/**\n * Optional trailing action inside a `<SidebarLink asChild>` (e.g. an\n * expand/collapse chevron for a nested section). Hides in rail because the\n * action is not meaningful when labels themselves are hidden.\n */\nexport type SidebarLinkActionProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarLinkAction = React.forwardRef<HTMLSpanElement, SidebarLinkActionProps>(\n function SidebarLinkAction({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n \"transition-opacity duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"opacity-100\",\n \"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarLinkAction.displayName = \"SidebarLinkAction\";\n\nexport const sidebarLinkBadgeVariants = cva(\n \"ml-auto inline-flex shrink-0 items-center justify-center font-mono tabular-nums group-data-[labels=hide]/sidebar:hidden\",\n {\n variants: {\n tone: {\n default: \"text-[10.5px] text-fg-4 group-data-[active=true]/link:text-pro-fg\",\n danger: \"rounded-pill bg-danger-bg px-1.5 py-0.5 text-[10.5px] text-danger-fg\",\n warning: \"rounded-pill bg-warning-bg px-1.5 py-0.5 text-[10.5px] text-warning-fg\",\n neutral: \"rounded-pill bg-bg-3 px-1.5 py-0.5 text-[10.5px] text-fg-2\",\n },\n },\n defaultVariants: { tone: \"default\" },\n },\n);\n\nexport type SidebarLinkBadgeVariants = VariantProps<typeof sidebarLinkBadgeVariants>;\n\nexport interface SidebarLinkBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n SidebarLinkBadgeVariants {}\n\nexport const SidebarLinkBadge = React.forwardRef<HTMLSpanElement, SidebarLinkBadgeProps>(\n function SidebarLinkBadge({ tone, className, ...props }, ref) {\n return (\n <span ref={ref} className={cn(sidebarLinkBadgeVariants({ tone }), className)} {...props} />\n );\n },\n);\nSidebarLinkBadge.displayName = \"SidebarLinkBadge\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * LinkGroup\n *\n * Expandable nav row with split-click semantics:\n * - Body click (icon + label area): \"I'm activating this section.\"\n * Fires `onActivate` (and follows `href` if no consumer prevents\n * default), opens this group, and *closes any other open group in\n * the same SidebarSection*. The accordion behavior matches user\n * mental model: \"I want to focus on this branch.\"\n * - Chevron click: \"Just let me peek at this.\" Toggles open/closed\n * on this group only — siblings are untouched. Lets users keep\n * two branches open side-by-side for cross-reference work.\n *\n * Exclusive coordination lives in the enclosing `<SidebarSection>` via\n * a small registry context. Outside a section, exclusive becomes a\n * no-op and groups behave as pure independent disclosures.\n *\n * Routing: the body renders as an `<a href>`. For client-side routing\n * frameworks that hijack anchor clicks (Next.js Link, React Router),\n * the standard pattern works as-is. A future `asChild` flag can opt\n * the body into Radix `Slot` for direct router-component wrapping.\n *\n * In rail mode the chevron and the collapsible content hide; the body\n * row collapses to icon-only and a body click still navigates without\n * trying to expand the (hidden) tree.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarLinkGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n /**\n * Stable id used for exclusive-mode coordination. Defaults to a\n * generated React id, which is stable across renders within a\n * single tree.\n */\n id?: string;\n icon?: React.ReactNode;\n label: React.ReactNode;\n /** Body href — the body row renders as `<a href>`. */\n href?: string;\n /** Highlights the body row. Independent of the open state. */\n active?: boolean;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Called when the body row is clicked, before the open state is\n * updated and before the section's exclusive lock is claimed. Call\n * `e.preventDefault()` to opt out of both. Use for navigation that\n * needs to run *before* the accordion behavior (rare).\n */\n onActivate?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n children?: React.ReactNode;\n}\n\nexport const SidebarLinkGroup = React.forwardRef<HTMLDivElement, SidebarLinkGroupProps>(\n function SidebarLinkGroup(\n {\n id: idProp,\n icon,\n label,\n href,\n active = false,\n defaultOpen = false,\n open: controlled,\n onOpenChange,\n onActivate,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const reactId = React.useId();\n const id = idProp ?? reactId;\n const scope = React.useContext(SidebarGroupScopeContext);\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = controlled ?? uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (controlled === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [controlled, onOpenChange],\n );\n\n // When another group in the same section claims exclusivity, close.\n // We watch `exclusiveId` rather than reading it in handlers so a\n // group that's already open closes promptly when a sibling activates.\n React.useEffect(() => {\n if (scope?.exclusiveId && scope.exclusiveId !== id && open) {\n setOpen(false);\n }\n }, [scope?.exclusiveId, id, open, setOpen]);\n\n const handleBodyClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onActivate?.(e);\n if (e.defaultPrevented) return;\n scope?.setExclusive(id);\n setOpen(true);\n };\n\n const handleChevronClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n // Stop propagation so the body row doesn't also activate.\n e.preventDefault();\n e.stopPropagation();\n setOpen(!open);\n };\n\n const contentId = `${id}-content`;\n\n const bodyClassName = cn(\n \"group/link relative flex flex-1 items-center gap-2.5 rounded-md px-2.5 py-1.5\",\n \"text-fg-2 text-[13px] font-normal no-underline\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[active=true]:bg-pro-bg data-[active=true]:text-pro-fg data-[active=true]:font-medium\",\n // In rail, color carries active state since the chevron is hidden.\n \"group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-pro-fg group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100\",\n // Active rail mark — anchored to body row's left edge.\n \"data-[active=true]:before:absolute data-[active=true]:before:content-['']\",\n \"data-[active=true]:before:top-1/2 data-[active=true]:before:left-0\",\n \"data-[active=true]:before:h-4 data-[active=true]:before:w-[2px] data-[active=true]:before:-translate-y-1/2\",\n \"data-[active=true]:before:bg-pro-fg data-[active=true]:before:rounded-r-full\",\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:opacity-85\",\n );\n\n const labelSpan = (\n <span\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {label}\n </span>\n );\n\n return (\n <div ref={ref} className={cn(\"mb-px\", className)} {...props}>\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"flex items-stretch\">\n <a\n href={href}\n data-active={active ? \"true\" : undefined}\n aria-current={active ? \"page\" : undefined}\n onClick={handleBodyClick}\n className={bodyClassName}\n >\n {icon}\n {labelSpan}\n </a>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n aria-label={open ? \"Collapse section\" : \"Expand section\"}\n onClick={handleChevronClick}\n className={cn(\n \"ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-4 hover:bg-bg-3 hover:text-fg-2\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:transition-transform [&_svg]:duration-[var(--duration-fast)] [&_svg]:ease-[var(--ease-out-quart)] motion-reduce:[&_svg]:transition-none\",\n // Hide in rail — content tree is hidden too, so the\n // affordance has nothing to control.\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n >\n <ChevronDownIcon className={open ? \"\" : \"-rotate-90\"} />\n </button>\n </div>\n <CollapsibleContent\n id={contentId}\n className={cn(\n // Indent column + connecting rule. Children render as\n // standard <SidebarLink>s and keep their own active-rail\n // indicator, which lands flush at the indented column's\n // left edge.\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n >\n <div className=\"border-rule mt-px ml-[18px] border-l pl-2\">{children}</div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n );\n },\n);\nSidebarLinkGroup.displayName = \"SidebarLinkGroup\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Footer\n *\n * Stays at the bottom via `mt-auto`. In rail, centers content (avatar\n * only — see <SidebarUser>).\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n function SidebarFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule mt-auto flex items-center gap-2.5 border-t px-2 pt-2.5 pb-1\",\n \"text-fg-3 text-xs\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarFooter.displayName = \"SidebarFooter\";\n\nexport interface SidebarUserProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n subtitle?: React.ReactNode;\n avatarSrc?: string | null;\n}\n\nexport const SidebarUser = React.forwardRef<HTMLDivElement, SidebarUserProps>(function SidebarUser(\n { name, subtitle, avatarSrc, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 items-center gap-2.5\", className)} {...props}>\n <Avatar size=\"sm\" variant=\"branded\" name={name} src={avatarSrc ?? undefined} />\n <div\n className={cn(\n \"min-w-0 leading-tight\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {/* line-clamp-1 (not `truncate`) so long firm names / role lines clip\n at a word boundary instead of mid-word — e.g. \"Pinecrest Tax\n Advisors · …\" rather than \"Pinecrest Tax Advisors · Ow…\". */}\n <div className=\"text-fg line-clamp-1 text-[13px] font-medium\">{name}</div>\n {subtitle != null && (\n <div className=\"text-fg-4 line-clamp-1 font-mono text-[10.5px]\">{subtitle}</div>\n )}\n </div>\n </div>\n );\n});\nSidebarUser.displayName = \"SidebarUser\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { ChevronDownIcon } from \"../primitives/icons\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { SidebarBrandText, useSidebarPeekLock } from \"./sidebar\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * SidebarBrandSwitcher\n *\n * Brand-row dropdown for switching between sibling products / workspaces\n * (Notion / Linear pattern). The whole brand row is the trigger: a\n * consumer-supplied glyph + wordmark + chevron. Collapses to icon-only\n * in rail mode via the standard `data-[labels=hide]/sidebar` group.\n *\n * Named for its slot: it sits where <SidebarBrand> would, alongside\n * <SidebarBrandText> and <SidebarPinButton> in the brand-row family. The\n * Sidebar prefix groups it with its neighbors in autocomplete and signals\n * the coupling — this composite reads sidebar state (peek-lock, rail)\n * and is not designed to be mounted outside the sidebar shell.\n *\n * **Replaces <SidebarBrand>, do not nest inside it.** The switcher renders\n * its own brand row with the same `px-2.5 pt-1 pb-4 gap-2` geometry, so the\n * brand glyph aligns with link icons below. Wrapping in <SidebarBrand>\n * doubles the padding and shifts the glyph right of the icon column.\n *\n * <Sidebar collapsible>\n * <SidebarBrandSwitcher\n * brand={<img src=\"/brand/mark.svg\" alt=\"\" width={24} height={24} />}\n * label={<>Assure <span className=\"text-pro-fg font-medium\">Pro</span></>}\n * current={items[0]}\n * items={items}\n * onLaunch={launch}\n * trailing={<SidebarPinButton className=\"ml-0.5\" />}\n * />\n * <SidebarSection label=\"MAIN\" tone=\"muted\">…</SidebarSection>\n * </Sidebar>\n *\n * Token discipline: this composite owns layout, motion, and the row\n * affordances, but never owns *product brand colors*. The accent swatch\n * for each item is supplied by the consumer via `tone` (a Tailwind class\n * string or a fully-rendered glyph), keeping vendor-specific hex out of\n * the DS.\n *\n * Framework neutrality: the brand image is a consumer slot. The DS does\n * not import `next/image` or any framework primitive — pass whatever\n * element your stack uses.\n *\n * Sidebar coordination: while the menu is open we acquire a peek-lock\n * via `useSidebarPeekLock` so the column stays visually expanded as an\n * overlay if the user has pinned it to rail. The user's pinned intent\n * is never mutated — that remains the job of <SidebarPinButton>.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarBrandSwitcherItem {\n /** Stable id used as React key and for `data-item` on each row. */\n id: string;\n /** Primary display name, e.g. \"Assure Audit\". */\n name: string;\n /** Sub-line under the name, e.g. \"Audit fieldwork\". */\n tagline?: string;\n /**\n * Short label rendered inside the default tile glyph (first character\n * is used, à la \"A\" for \"Audit\"). Ignored when `glyph` is supplied.\n */\n short?: string;\n /**\n * Accent for the default tile background. A Tailwind class string\n * (e.g. `\"bg-[#5b3bc4]\"`) — the consumer owns brand color values, the\n * DS just composes them. Ignored when `glyph` is supplied.\n */\n tone?: string;\n /**\n * Pre-rendered tile glyph. When provided, replaces the default\n * \"first letter on `tone` swatch\" tile entirely. Use for items that\n * have a real mark instead of a letter.\n */\n glyph?: React.ReactNode;\n /**\n * False marks the item as not-yet-available; rendered disabled with\n * a \"Soon\" badge by default (override via `unavailableBadge`).\n */\n available?: boolean;\n /** Pass-through onto the row's `data-item` for analytics / e2e hooks. */\n dataAttr?: string;\n}\n\nexport interface SidebarBrandSwitcherProps {\n /**\n * Brand glyph rendered at the left edge of the trigger (e.g. an\n * `<img>` of the product mark). Consumer-supplied so the DS does\n * not bind to a framework-specific image element.\n */\n brand?: React.ReactNode;\n /** Wordmark / label rendered next to the brand glyph in the trigger. */\n label: React.ReactNode;\n /**\n * The currently-active item. Pinned at the top of the menu and\n * excluded from the \"Switch to\" list automatically.\n */\n current: SidebarBrandSwitcherItem;\n /**\n * Full item list including `current`. Order is preserved in the\n * \"Switch to\" section; the current entry is filtered out.\n */\n items: SidebarBrandSwitcherItem[];\n /**\n * Called when a non-current, available item is selected. Receives the\n * full item so consumers can route, open a new window, or trigger an\n * SSO handoff — the DS holds no opinion on what \"switch\" means.\n */\n onLaunch?: (item: SidebarBrandSwitcherItem) => void | Promise<void>;\n /** Label above the current row. Defaults to \"Currently using\". */\n currentSectionLabel?: React.ReactNode;\n /** Label above the others list. Defaults to \"Switch to\". */\n switchSectionLabel?: React.ReactNode;\n /** Label at the very top of the menu. Defaults to \"Suite\". */\n menuLabel?: React.ReactNode;\n /** Badge text next to the current item. Defaults to \"Current\". */\n currentBadge?: React.ReactNode;\n /** Badge text on unavailable items. Defaults to \"Soon\". */\n unavailableBadge?: React.ReactNode;\n /** Accessible label on the trigger button. Defaults to \"Switch product\". */\n triggerLabel?: string;\n /** Extra classes applied to the outer brand-row wrapper. */\n className?: string;\n /** Extra classes applied to the trigger button. */\n triggerClassName?: string;\n /** Extra classes applied to the dropdown content panel. */\n contentClassName?: string;\n /**\n * Slot rendered to the right of the trigger inside the brand row.\n * Typical use: drop a `<SidebarPinButton/>` here.\n */\n trailing?: React.ReactNode;\n}\n\nexport const SidebarBrandSwitcher = React.forwardRef<HTMLDivElement, SidebarBrandSwitcherProps>(\n function SidebarBrandSwitcher(\n {\n brand,\n label,\n current,\n items,\n onLaunch,\n currentSectionLabel = \"Currently using\",\n switchSectionLabel = \"Switch to\",\n menuLabel = \"Suite\",\n currentBadge = \"Current\",\n unavailableBadge = \"Soon\",\n triggerLabel = \"Switch product\",\n className,\n triggerClassName,\n contentClassName,\n trailing,\n },\n ref,\n ) {\n const [open, setOpen] = React.useState(false);\n useSidebarPeekLock(open);\n\n const others = items.filter((p) => p.id !== current.id);\n\n return (\n // Geometry mirrors <SidebarBrand>: `px-2.5 pt-1 pb-4 gap-2`. This is\n // deliberate — the switcher replaces SidebarBrand, so the brand\n // glyph must land at the same column x-position that direct children\n // of <SidebarBrand> sit at, which in turn matches the 10px left\n // padding of <SidebarLink> icons below.\n <div\n ref={ref}\n className={cn(\"flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4\", className)}\n >\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger\n aria-label={triggerLabel}\n className={cn(\n // Negative left margin pulls the trigger's hover-bg toward\n // the column edge while the inner padding holds the brand\n // glyph at the same x-position as direct <SidebarBrand>\n // children — same hover affordance, no glyph drift.\n \"group/brand-trigger -ml-2 flex min-w-0 flex-1 items-center gap-2 rounded-md py-1.5 pr-1.5 pl-2\",\n \"text-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-3 data-[state=open]:bg-bg-3\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n triggerClassName,\n )}\n >\n {brand}\n <SidebarBrandText className=\"font-display text-fg text-[17px] font-semibold tracking-tight\">\n {label}\n </SidebarBrandText>\n <ChevronDownIcon\n className={cn(\n \"ml-auto size-3.5 shrink-0 text-fg-4\",\n \"transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"group-data-[state=open]/brand-trigger:rotate-180\",\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent\n side=\"right\"\n align=\"start\"\n sideOffset={12}\n className={cn(\"w-72 p-1\", contentClassName)}\n >\n <DropdownMenuLabel className=\"px-2 pt-1 pb-1.5\">{menuLabel}</DropdownMenuLabel>\n <SidebarBrandSwitcherSectionLabel>\n {currentSectionLabel}\n </SidebarBrandSwitcherSectionLabel>\n <SidebarBrandSwitcherCurrentRow item={current} badge={currentBadge} />\n <DropdownMenuSeparator className=\"my-1.5\" />\n <SidebarBrandSwitcherSectionLabel>\n {switchSectionLabel}\n </SidebarBrandSwitcherSectionLabel>\n {others.map((p) => (\n <SidebarBrandSwitcherOtherRow\n key={p.id}\n item={p}\n onLaunch={onLaunch}\n unavailableBadge={unavailableBadge}\n />\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n {trailing}\n </div>\n );\n },\n);\nSidebarBrandSwitcher.displayName = \"SidebarBrandSwitcher\";\n\nfunction SidebarBrandSwitcherSectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"px-2 pt-1 pb-0.5 text-[10px] tracking-wider uppercase text-fg-4\">\n {children}\n </div>\n );\n}\n\ninterface SidebarBrandSwitcherTileProps {\n item: SidebarBrandSwitcherItem;\n}\n\nexport function SidebarBrandSwitcherTile({ item }: SidebarBrandSwitcherTileProps) {\n if (item.glyph) return <>{item.glyph}</>;\n const initial = (item.short ?? item.name).charAt(0).toUpperCase();\n return (\n <span\n aria-hidden\n className={cn(\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md\",\n \"text-[11px] font-semibold text-white\",\n item.tone,\n )}\n >\n {initial}\n </span>\n );\n}\n\nfunction SidebarBrandSwitcherCurrentRow({\n item,\n badge,\n}: {\n item: SidebarBrandSwitcherItem;\n badge: React.ReactNode;\n}) {\n return (\n <div className=\"mx-0 flex cursor-default items-center gap-2.5 rounded-md bg-bg-2 px-2 py-1.5\">\n <SidebarBrandSwitcherTile item={item} />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-fg text-[13px] font-medium\">{item.name}</span>\n {item.tagline && <span className=\"text-fg-3 text-[11px]\">{item.tagline}</span>}\n </div>\n {badge && (\n <span className=\"rounded-sm px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-pro-fg ring-1 ring-pro-fg/30\">\n {badge}\n </span>\n )}\n </div>\n );\n}\n\nfunction SidebarBrandSwitcherOtherRow({\n item,\n onLaunch,\n unavailableBadge,\n}: {\n item: SidebarBrandSwitcherItem;\n onLaunch?: (item: SidebarBrandSwitcherItem) => void | Promise<void>;\n unavailableBadge: React.ReactNode;\n}) {\n const reachable = item.available !== false;\n const [launching, setLaunching] = React.useState(false);\n\n const handleSelect = async () => {\n if (!reachable || launching || !onLaunch) return;\n setLaunching(true);\n try {\n await onLaunch(item);\n } finally {\n setLaunching(false);\n }\n };\n\n return (\n <DropdownMenuItem\n disabled={!reachable}\n onSelect={(e) => {\n if (!reachable) {\n e.preventDefault();\n return;\n }\n void handleSelect();\n }}\n data-item={item.dataAttr ?? item.id}\n className=\"flex items-center gap-2.5 rounded-md px-2 py-1.5\"\n >\n <SidebarBrandSwitcherTile item={item} />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-fg text-[13px] font-medium\">{item.name}</span>\n {item.tagline && <span className=\"text-fg-3 text-[11px]\">{item.tagline}</span>}\n </div>\n {!reachable && unavailableBadge && (\n <span className=\"rounded-sm bg-bg-3 px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-fg-4\">\n {unavailableBadge}\n </span>\n )}\n {reachable && launching && (\n <span className=\"rounded-sm bg-bg-3 px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-fg-4\">\n Opening…\n </span>\n )}\n </DropdownMenuItem>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { SearchIcon } from \"../primitives/icons\";\n/**\n * AppHeader — sticky 56px-tall top bar mounted inside `<Main>`, above\n * `<Content>`.\n *\n * Children flow horizontally:\n * breadcrumb → title → flex-1 spacer → search → actions\n *\n * Sub-components are layout slots; the consumer composes them in any order\n * and the AppHeaderSearch's `flex-1` collapses any remaining space.\n */\n\nexport type AppHeaderProps = React.HTMLAttributes<HTMLElement>;\n\nexport const AppHeader = forwardRef<HTMLElement, AppHeaderProps>(function AppHeader(\n { className, ...props },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n // Sticky bar at the top of <Main>. Padding tracks --content-pad so\n // the header's left edge aligns with content padding underneath\n // (breadcrumb/title vs page H1/table left edge match).\n \"border-rule bg-bg/95 sticky top-0 z-[var(--z-sticky)] flex h-[var(--shell-header-h)] items-center gap-3 border-b px-[var(--content-pad)] backdrop-blur\",\n className,\n )}\n {...props}\n />\n );\n});\nAppHeader.displayName = \"AppHeader\";\n\nexport type AppHeaderBreadcrumbProps = React.HTMLAttributes<HTMLElement>;\n\nexport const AppHeaderBreadcrumb = forwardRef<HTMLElement, AppHeaderBreadcrumbProps>(\n function AppHeaderBreadcrumb({ className, ...props }, ref) {\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(\"text-fg-3 flex items-center gap-1.5 text-sm\", className)}\n {...props}\n />\n );\n },\n);\nAppHeaderBreadcrumb.displayName = \"AppHeaderBreadcrumb\";\n\nexport type AppHeaderTitleProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * App-shell title rendered inside the sticky header.\n *\n * Intentionally a `<span>` rather than `<h1>`: the page below the chrome\n * owns its own document heading (`<h1>` in the page body). The header is\n * navigational chrome; making it the page's `<h1>` would couple every page\n * heading to the chrome wrapper and confuse screen-reader heading nav.\n */\nexport const AppHeaderTitle = forwardRef<HTMLSpanElement, AppHeaderTitleProps>(\n function AppHeaderTitle({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"font-display text-fg text-sm font-medium\", className)}\n {...props}\n />\n );\n },\n);\nAppHeaderTitle.displayName = \"AppHeaderTitle\";\n\nexport interface AppHeaderSearchProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Placeholder text rendered inside the search trigger. */\n placeholder?: string;\n /** Keyboard shortcut hint shown on the right. Defaults to ⌘K. */\n shortcut?: React.ReactNode;\n}\n\nexport const AppHeaderSearch = forwardRef<HTMLButtonElement, AppHeaderSearchProps>(\n function AppHeaderSearch({ placeholder = \"Search…\", shortcut = \"⌘K\", className, ...props }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n // Search-input-shaped trigger — ports `.header-search-trigger`\n \"rounded-input border-rule bg-bg-2 text-fg-4 ml-auto flex h-8 max-w-[360px] flex-1 items-center gap-2.5 border px-2.5 text-xs\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:border-rule-strong hover:bg-bg-3\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n >\n <SearchIcon className=\"size-[13px] shrink-0\" strokeWidth={1.8} aria-hidden=\"true\" />\n <span className=\"line-clamp-1 text-left\">{placeholder}</span>\n {shortcut !== null && shortcut !== undefined && shortcut !== \"\" && (\n <kbd\n className={cn(\n \"rounded-icon border-rule bg-bg ml-auto inline-flex h-[18px] min-w-[18px] items-center justify-center border px-[5px]\",\n \"text-fg-3 [border-bottom-width:1.5px] font-mono text-[10.5px]\",\n )}\n >\n {shortcut}\n </kbd>\n )}\n </button>\n );\n },\n);\nAppHeaderSearch.displayName = \"AppHeaderSearch\";\n\nexport type AppHeaderActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const AppHeaderActions = forwardRef<HTMLDivElement, AppHeaderActionsProps>(\n function AppHeaderActions({ className, ...props }, ref) {\n return <div ref={ref} className={cn(\"flex items-center gap-1.5\", className)} {...props} />;\n },\n);\nAppHeaderActions.displayName = \"AppHeaderActions\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * PageHeader — top-of-page title block: eyebrow → headline + actions row → description → meta row.\n * Absorbs the trailing-edge `actions` slot pattern that consumer files\n * frequently reinvent via `flex items-center justify-between`.\n *\n * `title` is a string. If a consumer needs richer markup in the headline\n * they should compose around PageHeader rather than via this prop.\n *\n * Layout rules:\n * - `eyebrow` sits above the title with a 6px gap.\n * - `actions` sits to the trailing edge of the title row. On viewports\n * below `sm`, the actions wrap underneath; consumers can override via\n * className.\n * - `description` is a fg-3 subtitle line under the title.\n * - `meta` is the existing pills/spec/separator slot, still rendered\n * below the description.\n */\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n /** Slot above the title — usually `<Eyebrow numeric>`. */\n eyebrow?: React.ReactNode;\n /** Page title text. */\n title: string;\n /** Subtitle line under the title (e.g. one-sentence purpose statement). */\n description?: React.ReactNode;\n /** Trailing-edge slot for actions (Button, ButtonGroup, etc.). */\n actions?: React.ReactNode;\n /** Slot below the description for pills, specs, separators. */\n meta?: React.ReactNode;\n}\n\nexport const PageHeader = forwardRef<HTMLElement, PageHeaderProps>(function PageHeader(\n { eyebrow, title, description, actions, meta, className, ...props },\n ref,\n) {\n return (\n <header ref={ref} className={cn(\"mb-7\", className)} {...props}>\n {eyebrow && <div className=\"mb-1.5\">{eyebrow}</div>}\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <h1 className=\"font-display text-fg text-[26px] leading-tight tracking-tight\">\n {title}\n </h1>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n {description && (\n <p className=\"text-fg-3 mt-2 max-w-2xl text-sm leading-relaxed\">{description}</p>\n )}\n {meta && <div className=\"text-fg-3 mt-2 flex flex-wrap items-center gap-2 text-sm\">{meta}</div>}\n </header>\n );\n});\nPageHeader.displayName = \"PageHeader\";\n\nexport type PageHeaderSpecProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * PageHeaderSpec — small `.spec`-style span (Geist Mono w/ tnum/lnum/ss01).\n * Used inside the `meta` slot for numeric facts (\"4 due today\",\n * \"EIN ·· 12-3456789\").\n */\nexport const PageHeaderSpec = forwardRef<HTMLSpanElement, PageHeaderSpecProps>(\n function PageHeaderSpec({ className, style, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"font-spec text-fg-3 text-xs\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nPageHeaderSpec.displayName = \"PageHeaderSpec\";\n\nexport type PageHeaderSepProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** PageHeaderSep — the `·` dot separator used between meta items. */\nexport const PageHeaderSep = forwardRef<HTMLSpanElement, PageHeaderSepProps>(function PageHeaderSep(\n { children, className, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n role=\"presentation\"\n className={cn(\"text-fg-4\", className)}\n {...props}\n >\n {children ?? \"·\"}\n </span>\n );\n});\nPageHeaderSep.displayName = \"PageHeaderSep\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * MetadataGrid + DataItem — label / value pair grid.\n *\n * Used inside detail surfaces (Client > Overview, Engagement > Header,\n * Invoice > Summary) where the page needs to lay out a list of facts:\n *\n * EIN 12-3456789\n * Joined Aug 2022\n * Primary contact Liz Chen <liz@acme.test>\n * Tier Annual\n *\n * Replaces the recurring `<div className=\"grid grid-cols-2 gap-x-6 gap-y-3\">`\n * + per-row `<div>label</div><div>value</div>` shape.\n *\n * `MetadataGrid` provides the grid; `DataItem` owns the label/value\n * typography. Both compose: a `DataItem` can take `span={2}` to occupy\n * a full row in a 2-column grid.\n */\n\ninterface MetadataGridProps extends React.HTMLAttributes<HTMLDListElement> {\n /** Number of columns. Default 2. Use 1 for narrow surfaces (mobile cards). */\n columns?: 1 | 2 | 3 | 4;\n /** Horizontal gap between cells. Default `gap-x-6`. */\n gapX?: string;\n /** Vertical gap between rows. Default `gap-y-3`. */\n gapY?: string;\n}\n\nconst columnsToGridCols: Record<NonNullable<MetadataGridProps[\"columns\"]>, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n};\n\nexport const MetadataGrid = forwardRef<HTMLDListElement, MetadataGridProps>(function MetadataGrid(\n { columns = 2, gapX = \"gap-x-6\", gapY = \"gap-y-3\", className, children, ...props },\n ref,\n) {\n return (\n <dl\n ref={ref}\n className={cn(\"grid\", columnsToGridCols[columns], gapX, gapY, className)}\n {...props}\n >\n {children}\n </dl>\n );\n});\nMetadataGrid.displayName = \"MetadataGrid\";\n\ninterface DataItemProps {\n /** Label rendered as `<dt>`. Should be a noun phrase, sentence case. */\n label: React.ReactNode;\n /** Value rendered as `<dd>`. */\n value: React.ReactNode;\n /** Span this many grid columns. Useful for long string values inside a 2-col grid. */\n span?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst spanToColSpan: Record<NonNullable<DataItemProps[\"span\"]>, string> = {\n 1: \"col-span-1\",\n 2: \"col-span-2\",\n 3: \"col-span-3\",\n 4: \"col-span-4\",\n};\n\nexport function DataItem({ label, value, span = 1, className }: DataItemProps) {\n return (\n <div className={cn(\"min-w-0\", spanToColSpan[span], className)}>\n <dt className=\"text-fg-4 text-[11px] font-medium uppercase tracking-wider\">{label}</dt>\n <dd className=\"text-fg mt-0.5 break-words text-sm\">{value}</dd>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"../primitives/card\";\nimport { MinusIcon, TrendingDownIcon, TrendingUpIcon } from \"../primitives/icons\";\n\n/**\n * KpiCard — single-stat tile: label + value + optional tone, trend, hint.\n *\n * Replaces the three different KPI / stat-card shapes that recur across\n * the dashboard, billing, and attention-queue surfaces:\n *\n * ┌──────────────────────┐\n * │ 🔵 Clients │\n * │ 247 ▲ 12% │\n * │ vs last month │\n * │ ╱╲╱╲ sparkline │\n * └──────────────────────┘\n *\n * - `value` is the big-typography figure (count, currency).\n * - `label` is the small caption.\n * - `tone` colors the icon tile / value via semantic tokens (info,\n * success, warning, destructive, accent, muted). Default `muted`.\n * - `icon` slot accepts any node; rendered inside a rounded tile.\n * - `delta` renders a trend chip (arrow + change). `direction` drives the\n * arrow; `sentiment` drives the colour and defaults from direction\n * (up → positive, down → negative, flat → neutral). Pass `sentiment`\n * explicitly for inverted metrics where \"up\" is bad (e.g. past-due ↑).\n * - `trend` (number[]) draws a filled sparkline across the card bottom,\n * tinted by the delta sentiment (or tone when there's no delta).\n * - `hint` is an optional `text-fg-4` line (\"+18 this month\", \"6 invoices\").\n * - `action` is an optional trailing slot for a button or link.\n *\n * Renders as a `<Card>`. Wrap in a `<Link>` from the consumer side if\n * the tile should navigate.\n */\n\ntype KpiTone = \"info\" | \"success\" | \"warning\" | \"destructive\" | \"accent\" | \"muted\";\n\ntype DeltaDirection = \"up\" | \"down\" | \"flat\";\ntype DeltaSentiment = \"positive\" | \"negative\" | \"neutral\";\n\ninterface KpiDelta {\n /** The change to display, e.g. `\"12%\"`, `\"+18\"`, `\"-$4.2k\"`. */\n value: React.ReactNode;\n /** Arrow glyph: `up` ↗, `down` ↘, `flat` —. */\n direction: DeltaDirection;\n /**\n * Colour family. Defaults from `direction` (up → positive, down →\n * negative, flat → neutral). Set explicitly for inverted metrics where\n * a rise is bad (e.g. `direction: \"up\"`, `sentiment: \"negative\"`).\n */\n sentiment?: DeltaSentiment;\n /** Optional context line under the value, e.g. `\"vs last month\"`. */\n label?: React.ReactNode;\n}\n\ninterface KpiCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Small caption under the value. */\n label: React.ReactNode;\n /** Main figure — count, currency, percentage. Renders as a 2xl bold. */\n value: React.ReactNode;\n /** Optional leading icon, rendered inside a colored tile. */\n icon?: React.ReactNode;\n /** Color family for the icon tile + (optional) the value. Default `muted`. */\n tone?: KpiTone;\n /** Optional trend chip (arrow + change) shown beside the value. */\n delta?: KpiDelta;\n /** Optional sparkline data drawn across the card bottom. */\n trend?: number[];\n /** Optional subline below the value (e.g. `\"+18 this month\"`). */\n hint?: React.ReactNode;\n /** Optional trailing-edge slot for a button or link. */\n action?: React.ReactNode;\n /** When `true`, the value text picks up the tone color. Default `false` (value stays fg). */\n toneValue?: boolean;\n}\n\nconst toneToTile: Record<KpiTone, string> = {\n info: \"bg-info/10 text-info\",\n success: \"bg-success-fg/10 text-success-fg\",\n warning: \"bg-warning-fg/10 text-warning-fg\",\n destructive: \"bg-danger-fg/10 text-danger-fg\",\n accent: \"bg-accent/10 text-accent\",\n muted: \"bg-bg-3 text-fg-3\",\n};\n\nconst toneToValue: Record<KpiTone, string> = {\n info: \"text-info\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n destructive: \"text-danger-fg\",\n accent: \"text-accent\",\n muted: \"text-fg\",\n};\n\nconst sentimentChip: Record<DeltaSentiment, string> = {\n positive: \"bg-success-bg text-success-fg\",\n negative: \"bg-danger-bg text-danger-fg\",\n neutral: \"bg-bg-3 text-fg-3\",\n};\n\nconst sentimentText: Record<DeltaSentiment, string> = {\n positive: \"text-success-fg\",\n negative: \"text-danger-fg\",\n neutral: \"text-fg-3\",\n};\n\nconst directionToSentiment: Record<DeltaDirection, DeltaSentiment> = {\n up: \"positive\",\n down: \"negative\",\n flat: \"neutral\",\n};\n\nconst directionToIcon: Record<DeltaDirection, typeof TrendingUpIcon> = {\n up: TrendingUpIcon,\n down: TrendingDownIcon,\n flat: MinusIcon,\n};\n\nconst directionToSrLabel: Record<DeltaDirection, string> = {\n up: \"Up\",\n down: \"Down\",\n flat: \"No change\",\n};\n\n/**\n * Sparkline — minimal filled trend line. Stretches to fill its column via\n * `preserveAspectRatio=\"none\"`; the stroke stays crisp through\n * `vectorEffect=\"non-scaling-stroke\"`. Inherits colour from `currentColor`.\n */\nfunction Sparkline({ data, className }: { data: number[]; className?: string }) {\n if (data.length < 2) return null;\n\n const w = 100;\n const h = 28;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const coords = data.map((d, i) => {\n const x = (i / (data.length - 1)) * w;\n const y = h - ((d - min) / range) * (h - 2) - 1; // 1px breathing room top/bottom\n return [x, y] as const;\n });\n\n const line = coords.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(\" \");\n const area = `0,${h} ${line} ${w},${h}`;\n\n return (\n <svg\n viewBox={`0 0 ${w} ${h}`}\n preserveAspectRatio=\"none\"\n className={cn(\"h-7 w-full\", className)}\n aria-hidden=\"true\"\n >\n <polygon points={area} fill=\"currentColor\" className=\"opacity-10\" />\n <polyline\n points={line}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n}\n\nexport const KpiCard = forwardRef<HTMLDivElement, KpiCardProps>(function KpiCard(\n { label, value, icon, tone = \"muted\", delta, trend, hint, action, toneValue, className, ...props },\n ref,\n) {\n const deltaSentiment = delta ? (delta.sentiment ?? directionToSentiment[delta.direction]) : null;\n const DeltaIcon = delta ? directionToIcon[delta.direction] : null;\n const sparkColor = deltaSentiment ? sentimentText[deltaSentiment] : toneToValue[tone];\n\n return (\n <Card ref={ref} className={cn(\"p-4\", className)} {...props}>\n <div className=\"flex items-start gap-3\">\n {icon && (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg]:size-5\",\n toneToTile[tone],\n )}\n >\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-baseline gap-x-2 gap-y-1\">\n <p\n className={cn(\n \"text-2xl font-bold tracking-tight tabular-nums\",\n toneValue ? toneToValue[tone] : \"text-fg\",\n )}\n >\n {value}\n </p>\n {delta && DeltaIcon && deltaSentiment && (\n <span\n className={cn(\n \"inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[11px] font-semibold tabular-nums\",\n sentimentChip[deltaSentiment],\n )}\n >\n <DeltaIcon className=\"size-3\" />\n <span className=\"sr-only\">{directionToSrLabel[delta.direction]} </span>\n {delta.value}\n </span>\n )}\n </div>\n <p className=\"text-fg-3 text-xs\">{label}</p>\n {delta?.label && <p className=\"text-fg-4 mt-0.5 text-[11px]\">{delta.label}</p>}\n {hint && <p className=\"text-fg-4 mt-0.5 text-[11px]\">{hint}</p>}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n {trend && trend.length > 1 && (\n <Sparkline data={trend} className={cn(\"mt-3\", sparkColor)} />\n )}\n </Card>\n );\n});\nKpiCard.displayName = \"KpiCard\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { Input } from \"../primitives/input\";\nimport { Pagination } from \"../primitives/pagination\";\n\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n ChevronsUpDownIcon,\n SearchIcon,\n} from \"../primitives/icons\";\n/* ============================================================\n DataTable — composite chrome around the Table primitive.\n\n Composes the existing `Table` styling but re-exports under\n `DataTable*` names so consumers can adopt by simple rename.\n ============================================================ */\n\n/* ── Frame ────────────────────────────────────────────────── */\n\nexport interface DataTableProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, renders the table card with a flat top edge so it\n * visually attaches to a `<DataTableToolbar>` above it. */\n withToolbar?: boolean;\n}\n\n/**\n * DataTable — outer wrapper. Children are typically:\n * <DataTableToolbar /> + <table> + <DataTablePagination />.\n *\n * The `<table>` is hand-written by the consumer; this wrapper renders\n * the surface card chrome on its descendant `<table>` element via a\n * Tailwind arbitrary-variant selector. When `withToolbar` is set, the\n * top corners flatten so the table visually joins the toolbar above.\n *\n * Children render in document order — toolbar (if any) then `<table>`\n * then pagination — with the table card and the pagination not sharing\n * a background.\n */\nexport const DataTable = forwardRef<HTMLDivElement, DataTableProps>(function DataTable(\n { withToolbar, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n // Surface card chrome on the descendant `<table>`.\n \"[&_table]:bg-surface [&_table]:w-full [&_table]:border-collapse\",\n \"[&_table]:border-rule [&_table]:border\",\n withToolbar ? \"[&_table]:rounded-b-card [&_table]:border-t-0\" : \"[&_table]:rounded-card\",\n // Clip cell backgrounds at the rounded corners.\n \"[&_table]:overflow-hidden\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n});\nDataTable.displayName = \"DataTable\";\n\n/* ── Toolbar ──────────────────────────────────────────────── */\n\nexport type DataTableToolbarProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * DataTableToolbar — top row above the table. Renders the same surface\n * card as `<table>`, but with rounded corners only on top so the table\n * below visually attaches to it.\n */\nexport const DataTableToolbar = forwardRef<HTMLDivElement, DataTableToolbarProps>(\n function DataTableToolbar({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-2 px-3 py-2.5\",\n \"rounded-t-card border-rule bg-surface border\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableToolbar.displayName = \"DataTableToolbar\";\n\nexport interface DataTableSearchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** Override the default placeholder. */\n placeholder?: string;\n}\n\n/**\n * DataTableSearch — small search input slot inside the toolbar. Wraps\n * the `Input` primitive at `inputSize=\"sm\"` with a leading search icon.\n */\nexport const DataTableSearch = forwardRef<HTMLInputElement, DataTableSearchProps>(\n function DataTableSearch({ placeholder = \"Search…\", className, ...props }, ref) {\n return (\n <Input\n ref={ref}\n type=\"search\"\n inputSize=\"sm\"\n placeholder={placeholder}\n prefixIcon={<SearchIcon aria-hidden=\"true\" />}\n className={cn(\"w-[280px]\", className)}\n {...props}\n />\n );\n },\n);\nDataTableSearch.displayName = \"DataTableSearch\";\n\nexport type DataTableSpacerProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** DataTableSpacer — `flex-1` spacer for arranging toolbar items. */\nexport const DataTableSpacer = forwardRef<HTMLSpanElement, DataTableSpacerProps>(\n function DataTableSpacer({ className, ...props }, ref) {\n return <span ref={ref} aria-hidden=\"true\" className={cn(\"flex-1\", className)} {...props} />;\n },\n);\nDataTableSpacer.displayName = \"DataTableSpacer\";\n\nexport interface DataTableResultsCountProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n \"children\"\n> {\n current: number;\n total: number;\n}\n\n/**\n * DataTableResultsCount — small \"12 of 247\" indicator. Mono + tabular.\n */\nexport const DataTableResultsCount = forwardRef<HTMLSpanElement, DataTableResultsCountProps>(\n function DataTableResultsCount({ current, total, className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"text-fg-4 mr-1 font-mono text-[11px] tabular-nums\", className)}\n {...props}\n >\n {current.toLocaleString()} of {total.toLocaleString()}\n </span>\n );\n },\n);\nDataTableResultsCount.displayName = \"DataTableResultsCount\";\n\n/* ── Table sections ───────────────────────────────────────── */\n\n/**\n * DataTableHead — wraps `<thead>`. Renders the surface-2 header row\n * with the rule-bottom divider (`.data-table th` styling lives on the\n * `DataTableHeader` cells themselves).\n */\nexport type DataTableHeadProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const DataTableHead = forwardRef<HTMLTableSectionElement, DataTableHeadProps>(\n function DataTableHead({ className, ...props }, ref) {\n return (\n <thead ref={ref} className={cn(\"[&_tr]:border-rule [&_tr]:border-b\", className)} {...props} />\n );\n },\n);\nDataTableHead.displayName = \"DataTableHead\";\n\nexport type DataTableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\n/** DataTableBody — wraps `<tbody>`. Last row drops its bottom border. */\nexport const DataTableBody = forwardRef<HTMLTableSectionElement, DataTableBodyProps>(\n function DataTableBody({ className, ...props }, ref) {\n return <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n },\n);\nDataTableBody.displayName = \"DataTableBody\";\n\nexport interface DataTableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n /** Pro-tinted highlight for the current selection. */\n selected?: boolean;\n}\n\n/**\n * DataTableRow — `<tr>` with hover styling. `selected` switches the\n * row to the Pro-bg highlight (matches `data-[state=selected]` on the\n * Table primitive).\n */\nexport const DataTableRow = forwardRef<HTMLTableRowElement, DataTableRowProps>(\n function DataTableRow({ selected, className, ...props }, ref) {\n return (\n <tr\n ref={ref}\n data-state={selected ? \"selected\" : undefined}\n className={cn(\n \"border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n // Selected hover stays in the Pro tint (G15) — when both states fire,\n // hover:bg-bg-2 was previously winning and dropping the row out of\n // the selected tint, which read as the row deselecting on hover.\n selected ? \"bg-pro-bg hover:bg-pro-bg-hover\" : \"hover:bg-bg-2\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableRow.displayName = \"DataTableRow\";\n\n/* ── Header cell ──────────────────────────────────────────── */\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface DataTableHeaderProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n /** When true, the cell becomes a clickable button that toggles sort\n * state and renders a chevron indicator. */\n sortable?: boolean;\n /** Initial sort direction when the header mounts in a sorted state. */\n defaultSort?: SortDirection;\n /** Optional controlled sort state. When provided, `onSortChange` should\n * also be wired up — the header becomes fully controlled. */\n sort?: SortDirection | null;\n /** Fires whenever the user clicks a sortable header. */\n onSortChange?: (sort: SortDirection | null) => void;\n}\n\n/**\n * DataTableHeader — `<th>` cell. Mono uppercase label with optional\n * sort indicator. Sort cycle when uncontrolled:\n * unsorted → asc → desc → unsorted (3-state).\n * `defaultSort` seeds the initial state. Pass `sort` + `onSortChange`\n * for fully-controlled usage when an upstream store owns the sort.\n */\nexport const DataTableHeader = forwardRef<HTMLTableCellElement, DataTableHeaderProps>(\n function DataTableHeader(\n {\n sortable = false,\n defaultSort,\n sort: controlledSort,\n onSortChange,\n children,\n className,\n ...props\n },\n ref,\n ) {\n const [uncontrolledSort, setUncontrolledSort] = useState<SortDirection | null>(\n defaultSort ?? null,\n );\n const isControlled = controlledSort !== undefined;\n const currentSort = isControlled ? controlledSort : uncontrolledSort;\n\n const handleClick = useCallback(() => {\n if (!sortable) return;\n const next: SortDirection | null =\n currentSort === null ? \"asc\" : currentSort === \"asc\" ? \"desc\" : null;\n if (!isControlled) setUncontrolledSort(next);\n onSortChange?.(next);\n }, [sortable, currentSort, isControlled, onSortChange]);\n\n const indicator = sortable ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"text-fg-5 ml-1 inline-flex shrink-0 items-center justify-center\",\n currentSort && \"text-fg-3\",\n )}\n >\n {currentSort === \"asc\" ? (\n <ChevronUpIcon className=\"size-3\" strokeWidth={2.2} />\n ) : currentSort === \"desc\" ? (\n <ChevronDownIcon className=\"size-3\" strokeWidth={2.2} />\n ) : (\n <ChevronsUpDownIcon className=\"size-3\" strokeWidth={2} />\n )}\n </span>\n ) : null;\n\n const ariaSort: React.AriaAttributes[\"aria-sort\"] = sortable\n ? currentSort === \"asc\"\n ? \"ascending\"\n : currentSort === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined;\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n aria-sort={ariaSort}\n className={cn(\n \"h-9 px-3.5 py-2 text-left align-middle whitespace-nowrap\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 bg-surface-2\",\n \"border-rule border-b\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg-2\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n >\n {children}\n {indicator}\n </button>\n ) : (\n children\n )}\n </th>\n );\n },\n);\nDataTableHeader.displayName = \"DataTableHeader\";\n\n/* ── Body cells ───────────────────────────────────────────── */\n\nconst cellBase = \"px-3.5 py-2.5 align-middle\";\n\nexport type DataTableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;\n\n/** DataTableCell — default cell, 13px / fg-2. */\nexport const DataTableCell = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCell({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(\n cellBase,\n \"text-fg-2 text-[13px]\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableCell.displayName = \"DataTableCell\";\n\n/**\n * DataTableCellName — primary identifier of the row. Display font,\n * fg color, medium weight.\n */\nexport const DataTableCellName = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellName({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-display text-fg text-[13px] font-medium\", className)}\n {...props}\n />\n );\n },\n);\nDataTableCellName.displayName = \"DataTableCellName\";\n\n/**\n * DataTableCellMono — currency / IDs / numerics. Geist Mono with\n * tabular numerals and tight tracking.\n */\nexport const DataTableCellMono = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellMono({ className, style, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-spec text-fg-2 text-[12.5px]\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nDataTableCellMono.displayName = \"DataTableCellMono\";\n\n/**\n * DataTableCellId — muted mono ID (EIN, UUID, \"5h ago\"). Matches\n * `.cell-mono.cell-id` from the spec.\n */\nexport const DataTableCellId = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellId({ className, style, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-spec text-fg-4 text-xs\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nDataTableCellId.displayName = \"DataTableCellId\";\n\n/* ── Due-date cell ────────────────────────────────────────── */\n\nconst MS_PER_DAY = 86_400_000;\nconst DUE_NEAR_THRESHOLD_DAYS = 14;\n\nconst dueDateFormatter = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n});\n\nexport interface DataTableCellDueProps extends Omit<\n React.TdHTMLAttributes<HTMLTableCellElement>,\n \"children\"\n> {\n /** Date this row is due. */\n value: Date;\n /** Optional override for the displayed label (defaults to the\n * formatted date). */\n children?: ReactNode;\n}\n\n/**\n * DataTableCellDue — accepts a Date and auto-colors:\n * diff < 0 → text-danger-fg (overdue)\n * diff < 14d → text-warning-fg (due-near)\n * otherwise → text-fg-3 (default)\n *\n * The 14-day threshold and day-rounding (`Math.floor`) match the\n * `.cell-due-near` / `.cell-due-overdue` CSS classes in the mockup.\n */\nexport const DataTableCellDue = forwardRef<HTMLTableCellElement, DataTableCellDueProps>(\n function DataTableCellDue({ value, children, className, style, ...props }, ref) {\n const days = Math.floor((value.getTime() - Date.now()) / MS_PER_DAY);\n const tone =\n days < 0\n ? \"text-danger-fg font-medium\"\n : days < DUE_NEAR_THRESHOLD_DAYS\n ? \"text-warning-fg font-medium\"\n : \"text-fg-3\";\n\n const ariaState = days < 0 ? \"overdue\" : days < DUE_NEAR_THRESHOLD_DAYS ? \"near\" : \"future\";\n\n return (\n <td\n ref={ref}\n data-due-state={ariaState}\n className={cn(cellBase, \"font-spec text-[12.5px]\", tone, className)}\n style={style}\n {...props}\n >\n {children ?? dueDateFormatter.format(value)}\n </td>\n );\n },\n);\nDataTableCellDue.displayName = \"DataTableCellDue\";\n\n/* ── Checkbox cell ────────────────────────────────────────── */\n\nexport interface DataTableCheckboxProps extends Omit<\n React.TdHTMLAttributes<HTMLTableCellElement>,\n \"onChange\" | \"defaultChecked\"\n> {\n /** Forwarded to the inner `Checkbox` primitive. */\n checked?: boolean | \"indeterminate\";\n defaultChecked?: boolean | \"indeterminate\";\n onCheckedChange?: (checked: boolean | \"indeterminate\") => void;\n /** Accessible label for the checkbox (e.g. \"Select row Acme Corp.\"). */\n ariaLabel?: string;\n disabled?: boolean;\n /** Render the cell as `<th>` (for the select-all header) instead of `<td>`. */\n asHeader?: boolean;\n}\n\n/**\n * DataTableCheckbox — `<td>` containing the row-selection checkbox.\n * Tightened to a 32px column with no right padding to match\n * `.row-checkbox` in the spec.\n */\nexport const DataTableCheckbox = forwardRef<HTMLTableCellElement, DataTableCheckboxProps>(\n function DataTableCheckbox(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n ariaLabel,\n disabled,\n asHeader,\n className,\n ...props\n },\n ref,\n ) {\n const Cell = (asHeader ? \"th\" : \"td\") as \"td\";\n return (\n <Cell\n ref={ref}\n className={cn(\n \"w-8 px-3.5 py-2.5 pr-0 align-middle\",\n asHeader && \"bg-surface-2 border-rule h-9 border-b\",\n className,\n )}\n {...props}\n >\n <Checkbox\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n aria-label={ariaLabel}\n />\n </Cell>\n );\n },\n);\nDataTableCheckbox.displayName = \"DataTableCheckbox\";\n\n/* ── Pagination ───────────────────────────────────────────── */\n\nexport interface DataTablePaginationProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"onChange\"\n> {\n /** 1-indexed current page. */\n current: number;\n /** Total number of items across all pages. */\n total: number;\n /** Items per page. Default 25. */\n pageSize?: number;\n onPageChange?: (page: number) => void;\n siblingCount?: number;\n}\n\n/**\n * DataTablePagination — full pagination strip. Wraps the existing\n * `Pagination` primitive: derives `pageCount` from `total / pageSize`\n * and forwards the page label (\"1–25 of 327\"). Page size defaults to\n * 25 (the consumer contract did not specify; this matches the most\n * common firm-app table page size).\n */\nexport const DataTablePagination = forwardRef<HTMLElement, DataTablePaginationProps>(\n function DataTablePagination(\n { current, total, pageSize = 25, onPageChange, siblingCount, className, ...props },\n ref,\n ) {\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n return (\n <Pagination\n ref={ref}\n currentPage={current}\n totalPages={totalPages}\n onPageChange={onPageChange ?? (() => {})}\n siblingCount={siblingCount}\n totalItems={total}\n pageSize={pageSize}\n className={cn(\"mt-4\", className)}\n {...props}\n />\n );\n },\n);\nDataTablePagination.displayName = \"DataTablePagination\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\n\n/**\n * Detail layout composites — two-column layout: a sticky left rail (the\n * \"spine\", 320px) holding identity + key facts, and a scrollable main\n * column for tabs, sections, tables, and activity feeds.\n */\n\n/* -------------------------------------------------------------------------- */\n/* DetailGrid — outermost 2-column container */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailGridProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const DetailGrid = forwardRef<HTMLDivElement, DetailGridProps>(function DetailGrid(\n { className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid grid-cols-1 items-start gap-6 lg:grid-cols-[320px_1fr] lg:gap-9\",\n className,\n )}\n {...props}\n />\n );\n});\nDetailGrid.displayName = \"DetailGrid\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpine — left rail card */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailSpineProps = React.HTMLAttributes<HTMLElement>;\n\nexport const DetailSpine = forwardRef<HTMLElement, DetailSpineProps>(function DetailSpine(\n { className, ...props },\n ref,\n) {\n return (\n <aside\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface shadow-quiet border p-[18px]\",\n \"space-y-4\",\n \"lg:sticky lg:top-[calc(var(--shell-header-h)+24px)] lg:self-start\",\n className,\n )}\n {...props}\n />\n );\n});\nDetailSpine.displayName = \"DetailSpine\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineHeader — avatar + name + subtitle */\n/* -------------------------------------------------------------------------- */\n\nexport interface DetailSpineHeaderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"title\"\n> {\n /** Image src or initials/name string passed through to <Avatar>. */\n avatar: string;\n /** Display name / entity title. */\n title: string;\n /** Smaller line under the title — entity type, classification, etc. */\n subtitle: string;\n}\n\nexport const DetailSpineHeader = forwardRef<HTMLDivElement, DetailSpineHeaderProps>(\n function DetailSpineHeader({ avatar, title, subtitle, className, ...props }, ref) {\n const isImageSrc = /^(https?:|data:|\\/)/i.test(avatar);\n\n return (\n <div ref={ref} className={cn(\"flex items-center gap-3\", className)} {...props}>\n <Avatar\n size=\"lg\"\n src={isImageSrc ? avatar : undefined}\n name={isImageSrc ? title : avatar}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-display text-fg line-clamp-1 text-base leading-tight font-medium\">\n {title}\n </div>\n <div className=\"font-spec text-fg-4 text-[11px]\">{subtitle}</div>\n </div>\n </div>\n );\n },\n);\nDetailSpineHeader.displayName = \"DetailSpineHeader\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineSection — eyebrow-labeled sub-block inside the spine */\n/* -------------------------------------------------------------------------- */\n\nexport interface DetailSpineSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Small caps label rendered above the section content. */\n eyebrow: string;\n}\n\nexport const DetailSpineSection = forwardRef<HTMLDivElement, DetailSpineSectionProps>(\n function DetailSpineSection({ eyebrow, children, className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"border-rule-soft border-t pt-3\", className)} {...props}>\n <div className=\"text-fg-4 mb-2 font-mono text-[10.5px] font-medium tracking-[0.14em] uppercase\">\n {eyebrow}\n </div>\n {children}\n </div>\n );\n },\n);\nDetailSpineSection.displayName = \"DetailSpineSection\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineStats — 2-col grid container for <Stat> primitives */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailSpineStatsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const DetailSpineStats = forwardRef<HTMLDivElement, DetailSpineStatsProps>(\n function DetailSpineStats({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"grid grid-cols-2 gap-x-3 gap-y-3.5\", className)} {...props} />\n );\n },\n);\nDetailSpineStats.displayName = \"DetailSpineStats\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailMain — right side, scrollable page content */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailMainProps = React.HTMLAttributes<HTMLElement>;\n\nexport const DetailMain = forwardRef<HTMLElement, DetailMainProps>(function DetailMain(\n { className, ...props },\n ref,\n) {\n return <section ref={ref} className={cn(\"min-w-0 flex-1 space-y-6\", className)} {...props} />;\n});\nDetailMain.displayName = \"DetailMain\";\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ActivityList — vertical feed of activity rows.\n *\n * Two row variants ship from this file:\n *\n * <ActivityList>\n * {/* \"Anna filed 1120S — 2h ago\" — actor-led, used for audit feeds *}\n * <ActivityItem dot=\"success\" actor=\"Anna\" text=\"filed\" target=\"1120S\" time=\"2h ago\" />\n *\n * {/* \"Stage advanced to Review — by Anna · 3m ago\" — title-led, used\n * for in-thread event rows where the title carries the verb already *}\n * <ActivityEventItem title=\"Stage advanced to Review\" description=\"by Anna\" time=\"3m ago\" />\n * </ActivityList>\n *\n * Picking the right one: actor-led when the actor is the news (\"who did\n * this thing\"), title-led when the event itself is the news (\"what\n * changed; the actor is parenthetical\").\n */\n\nexport type ActivityListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport const ActivityList = forwardRef<HTMLUListElement, ActivityListProps>(function ActivityList(\n { className, children, ...props },\n ref,\n) {\n return (\n <ul ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {children}\n </ul>\n );\n});\nActivityList.displayName = \"ActivityList\";\n\nexport type ActivityDotVariant = \"default\" | \"success\" | \"warn\" | \"accent\";\n\nconst dotClass: Record<ActivityDotVariant, string> = {\n default: \"bg-fg-4\",\n success: \"bg-success-fg\",\n warn: \"bg-warning-fg\",\n accent: \"bg-accent\",\n};\n\nexport interface ActivityItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n dot?: ActivityDotVariant;\n actor: string;\n text: string;\n target?: string;\n time: string;\n}\n\nexport const ActivityItem = forwardRef<HTMLLIElement, ActivityItemProps>(function ActivityItem(\n { dot = \"default\", actor, text, target, time, className, ...props },\n ref,\n) {\n return (\n <li\n ref={ref}\n className={cn(\n \"border-rule-soft flex items-center gap-2 border-b py-2 text-sm last:border-0\",\n className,\n )}\n {...props}\n >\n <span aria-hidden=\"true\" className={cn(\"size-1.5 shrink-0 rounded-full\", dotClass[dot])} />\n <span className=\"text-fg-2 font-medium\">{actor}</span>\n <span className=\"text-fg-3\">{text}</span>\n {target && <span className=\"text-accent hover:underline\">{target}</span>}\n <span className=\"text-fg-4 ml-auto text-xs tabular-nums\">{time}</span>\n </li>\n );\n});\nActivityItem.displayName = \"ActivityItem\";\n\n/* ─── ActivityEventItem ─────────────────────────────────────────── */\n\nexport interface ActivityEventItemProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\" | \"title\"> {\n dot?: ActivityDotVariant;\n /** Primary event label — carries the verb (\"Stage advanced to Review\"). */\n title: ReactNode;\n /** Optional secondary qualifier (\"by Anna\", \"auto-assigned\", etc.). */\n description?: ReactNode;\n /** Pre-formatted relative time, right-aligned. */\n time: ReactNode;\n /** Inset the row to align with avatar-led message rows above it. */\n inset?: boolean;\n}\n\nexport const ActivityEventItem = forwardRef<HTMLLIElement, ActivityEventItemProps>(\n function ActivityEventItem(\n { dot = \"default\", title, description, time, inset, className, ...props },\n ref,\n ) {\n return (\n <li\n ref={ref}\n className={cn(\n \"text-fg-3 flex items-center gap-2 text-[11px]\",\n inset && \"pl-9\",\n className,\n )}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\"size-1 shrink-0 rounded-full\", dotClass[dot])}\n />\n <span className=\"truncate\">\n <span className=\"text-fg-2 font-medium\">{title}</span>\n {description && (\n <span className=\"text-fg-4 ml-1\">— {description}</span>\n )}\n </span>\n <span className=\"text-fg-4 ml-auto shrink-0 text-[10px] tabular-nums\">{time}</span>\n </li>\n );\n },\n);\nActivityEventItem.displayName = \"ActivityEventItem\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\nimport { Badge } from \"../primitives/badge\";\nimport { CalendarIcon, UserIcon } from \"../primitives/icons\";\n\n/**\n * Kanban — flex container for board columns.\n */\n\nexport type KanbanProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Kanban = forwardRef<HTMLDivElement, KanbanProps>(function Kanban(\n { className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex items-start gap-4 overflow-x-auto\", className)} {...props}>\n {children}\n </div>\n );\n});\nKanban.displayName = \"Kanban\";\n\nexport interface KanbanColumnProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: string;\n count: number;\n}\n\nexport const KanbanColumn = forwardRef<HTMLDivElement, KanbanColumnProps>(function KanbanColumn(\n { title, count, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex max-w-[320px] min-w-[280px] flex-1 flex-col gap-3\", className)}\n {...props}\n >\n <div className=\"text-fg-2 flex items-center justify-between text-sm font-medium\">\n <span>{title}</span>\n <span className=\"bg-bg-2 text-fg-3 rounded-pill px-2 py-0.5 text-xs tabular-nums\">\n {count}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n );\n});\nKanbanColumn.displayName = \"KanbanColumn\";\n\n// Status is encoded by the column the card sits in, so the card itself carries\n// no stage colour (a left rail would just duplicate the column — see the\n// \"avoid redundant signals\" Kanban guidance). Urgency lives on the priority\n// chip and the due-date colour instead.\nconst kanbanCardBase = cn(\n \"bg-surface border border-rule rounded-card shadow-quiet p-3 space-y-2 cursor-grab\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none\",\n);\n\ntype KanbanPriority = \"high\" | \"medium\" | \"low\";\n\nconst priorityConfig: Record<\n KanbanPriority,\n { label: string; variant: React.ComponentProps<typeof Badge>[\"variant\"] }\n> = {\n high: { label: \"High\", variant: \"destructive\" },\n medium: { label: \"Med\", variant: \"warning\" },\n low: { label: \"Low\", variant: \"secondary\" },\n};\n\ntype KanbanDueStatus = \"overdue\" | \"soon\" | \"default\";\n\n// The card never parses dates; the consumer formats `dueDate` and tells us its\n// urgency via `dueStatus`. Overdue reads red, due-soon amber, the rest muted.\nconst dueStatusClass: Record<KanbanDueStatus, string> = {\n overdue: \"text-danger-fg font-semibold\",\n soon: \"text-warning-fg font-semibold\",\n default: \"text-fg-3 font-medium\",\n};\n\nexport interface KanbanCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Category tag, e.g. a return type (\"1040\", \"1120S\"). Rendered as an info chip. */\n label?: string;\n /** Task title. Providing this switches the card to the structured rich layout. */\n title?: string;\n /** Client / entity the task belongs to. */\n client?: string;\n /** Priority — drives the colored priority chip. */\n priority?: KanbanPriority;\n /** Preformatted due date, e.g. \"Apr 15\". */\n dueDate?: string;\n /** Urgency of `dueDate` — colors it red (overdue) or amber (soon). Default muted. */\n dueStatus?: KanbanDueStatus;\n /** Assignee shown as an initials avatar. */\n assignee?: { name: string; src?: string | null };\n}\n\nexport const KanbanCard = forwardRef<HTMLDivElement, KanbanCardProps>(function KanbanCard(\n { className, label, title, client, priority, dueDate, dueStatus, assignee, children, ...props },\n ref,\n) {\n // Rich layout is opt-in: providing `title` switches to the structured card.\n // Without it the card stays a flexible container for arbitrary children.\n const isRich = title !== undefined;\n const pri = priority ? priorityConfig[priority] : null;\n const hasFooter = Boolean(dueDate || assignee);\n\n return (\n <div ref={ref} className={cn(kanbanCardBase, className)} {...props}>\n {isRich ? (\n <div>\n {(label || pri) && (\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n {label ? (\n <Badge variant=\"info\" size=\"sm\">\n {label}\n </Badge>\n ) : (\n <span />\n )}\n {pri && (\n <Badge variant={pri.variant} size=\"sm\">\n {pri.label}\n </Badge>\n )}\n </div>\n )}\n <p className=\"text-fg text-[13px] leading-snug font-semibold\">{title}</p>\n {client && (\n <p className=\"text-fg-3 mt-1 flex items-center gap-1.5 text-xs\">\n <UserIcon className=\"size-3 shrink-0\" aria-hidden=\"true\" />\n <span className=\"truncate\">{client}</span>\n </p>\n )}\n {hasFooter && (\n <div className=\"border-rule-soft mt-3 flex items-center justify-between border-t pt-2.5\">\n {dueDate ? (\n <span\n className={cn(\n \"flex items-center gap-1 text-xs\",\n dueStatusClass[dueStatus ?? \"default\"],\n )}\n >\n <CalendarIcon className=\"size-3 shrink-0\" aria-hidden=\"true\" />\n {dueDate}\n </span>\n ) : (\n <span />\n )}\n {assignee && (\n <Avatar size=\"xs\" name={assignee.name} src={assignee.src} title={assignee.name} />\n )}\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </div>\n );\n});\nKanbanCard.displayName = \"KanbanCard\";\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * MessageBubble — presentational comment row for a chat / discussion thread.\n *\n * Visual anatomy:\n *\n * [Avatar] [Name (you)] [3m ago] [hover actions]\n * ┌──────────────────────────────────────┐\n * │ message body slot │\n * └──────────────────────────────────────┘\n *\n * The component is presentational only — it owns layout, hover-reveal of\n * actions, and the bubble chrome. The author avatar, sanitization of HTML\n * content, and any \"(you)\" suffix logic stay with the consumer.\n *\n * <MessageBubble\n * avatar={<Avatar name=\"Anna\" size=\"sm\" />}\n * name={<>Anna {isOwn && <span className=\"…\">(you)</span>}</>}\n * timestamp=\"3m ago\"\n * actions={canDelete && <MessageBubbleAction onClick={…}>Delete</MessageBubbleAction>}\n * >\n * <div dangerouslySetInnerHTML={{ __html: sanitized }} />\n * </MessageBubble>\n *\n * For soft-deleted rows, use `<MessageBubble.Tombstone>` — same vertical\n * rhythm, quieter chrome, no bubble body.\n */\n\nexport interface MessageBubbleProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n /** Author avatar — pass an `<Avatar size=\"sm\" />` from the package. */\n avatar?: ReactNode;\n /** Author display name. Pass a node so callers can append \"(you)\" affixes\n * or other inline decorations. */\n name: ReactNode;\n /** Pre-formatted relative time string (e.g. \"3m ago\"). The bubble renders\n * it with `tabular-nums` so the column doesn't jitter as time advances. */\n timestamp: ReactNode;\n /** Optional right-aligned action affordance. Revealed on row hover and on\n * keyboard focus — pass `<MessageBubbleAction>` for the canonical look,\n * or any node if you need a menu. */\n actions?: ReactNode;\n /** Message body — typically a `<div dangerouslySetInnerHTML={...} />` of\n * pre-sanitized HTML, but plain ReactNode works too. */\n children: ReactNode;\n}\n\nexport const MessageBubble = forwardRef<HTMLLIElement, MessageBubbleProps>(function MessageBubble(\n { avatar, name, timestamp, actions, children, className, ...props },\n ref,\n) {\n return (\n <li ref={ref} className={cn(\"group/bubble flex gap-2.5\", className)} {...props}>\n {avatar}\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-0.5 flex items-baseline gap-2\">\n <span className=\"text-fg truncate text-xs font-semibold\">{name}</span>\n <span className=\"text-fg-4 text-[10px] tabular-nums\">{timestamp}</span>\n {actions && (\n <span\n className={cn(\n \"ml-auto opacity-0 transition-opacity\",\n \"group-hover/bubble:opacity-100 group-focus-within/bubble:opacity-100\",\n )}\n >\n {actions}\n </span>\n )}\n </div>\n <div className=\"bg-bg-2 text-fg break-words rounded-lg px-2.5 py-1.5 text-sm leading-relaxed\">\n {children}\n </div>\n </div>\n </li>\n );\n}) as MessageBubbleComponent;\nMessageBubble.displayName = \"MessageBubble\";\n\n/* ─── Tombstone variant ─────────────────────────────────────────── */\n\nexport interface MessageBubbleTombstoneProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n /** Leading icon — pass a 12px `<Trash2Icon />` or any glyph that signals\n * \"removed\". The DS deliberately doesn't hard-code the trash icon so\n * surfaces with different tombstone vocabularies (archived, redacted,\n * withdrawn) can reuse this shell. */\n icon?: ReactNode;\n /** Tombstone message — typically a sentence assembled by the consumer\n * with the right grammar (\"Anna deleted her comment\" vs. \"Anna's comment\n * was deleted by Lead\"). Italics + muted color come from the shell. */\n children: ReactNode;\n /** Pre-formatted relative time (e.g. \"3m ago\"). */\n timestamp?: ReactNode;\n}\n\nexport const MessageBubbleTombstone = forwardRef<HTMLLIElement, MessageBubbleTombstoneProps>(\n function MessageBubbleTombstone({ icon, children, timestamp, className, ...props }, ref) {\n return (\n <li\n ref={ref}\n className={cn(\n \"text-fg-3 flex items-center gap-2.5 pl-1 text-[11px] italic\",\n className,\n )}\n {...props}\n >\n {icon && <span className=\"shrink-0 opacity-70 [&>svg]:size-3\">{icon}</span>}\n <span className=\"truncate\">\n {children}\n {timestamp && (\n <>\n {\" · \"}\n <span className=\"tabular-nums\">{timestamp}</span>\n </>\n )}\n </span>\n </li>\n );\n },\n);\nMessageBubbleTombstone.displayName = \"MessageBubble.Tombstone\";\n\n/* ─── Action affordance ─────────────────────────────────────────── */\n\nexport interface MessageBubbleActionProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Render with the destructive color (e.g. \"Delete\"). */\n destructive?: boolean;\n}\n\nexport const MessageBubbleAction = forwardRef<HTMLButtonElement, MessageBubbleActionProps>(\n function MessageBubbleAction({ destructive, className, type = \"button\", ...props }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"text-fg-4 text-[10px] focus-visible:outline-none\",\n destructive ? \"hover:text-danger-fg\" : \"hover:text-fg\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nMessageBubbleAction.displayName = \"MessageBubble.Action\";\n\n/* ─── Compound exports ──────────────────────────────────────────── */\n\ntype MessageBubbleComponent = React.ForwardRefExoticComponent<\n MessageBubbleProps & React.RefAttributes<HTMLLIElement>\n> & {\n Tombstone: typeof MessageBubbleTombstone;\n Action: typeof MessageBubbleAction;\n};\n\n(MessageBubble as MessageBubbleComponent).Tombstone = MessageBubbleTombstone;\n(MessageBubble as MessageBubbleComponent).Action = MessageBubbleAction;\n","\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"../primitives/button\";\nimport { SendIcon } from \"../primitives/icons\";\n\n/**\n * MessageComposer — single-component chat input for thread surfaces.\n *\n * The polish-correct way to render a message composer in the Assure suite:\n * one card chrome, an optional quick-reply chip strip on top, an editor\n * slot in the middle, and a footer row with a built-in Send button.\n *\n * Replaces the compound `<ThreadComposer.Accessory|Input|Footer>` pattern,\n * which exposed too many slots to the consumer AND silently shipped broken\n * CSS in v0.13.0 — its arbitrary-variant chrome reset\n * (`[&>*]:!rounded-none …`) didn't compile into `dist/styles.css`, so any\n * editor child that painted its own card (e.g. a `MentionInput` with\n * `rounded-xl border bg-input-background`) sat fully visible inside the\n * ThreadComposer's identical chrome — two stacked cards, the exact\n * \"fragmented chatbox\" failure mode this primitive exists to prevent.\n *\n * Usage:\n *\n * <MessageComposer\n * chips={[{ id, label, body }, …]}\n * onChipPick={(c) => editor.insertHTML(c.body)}\n * onSubmit={submit}\n * submitting={submitting}\n * loading={loading}\n * startSlot={<Switch …>Show activity</Switch>}\n * >\n * <MentionInput … /> // ← or any editor: textarea, contenteditable, etc.\n * </MessageComposer>\n *\n * The editor goes as `children`. DS owns CHROME; the consumer owns the\n * editor implementation (Tiptap+mention in firm app, plain textarea in\n * client portal). Direct-child chrome — rounded card, border, bg, shadow —\n * is reset automatically by static rules on `[data-slot=\"message-composer-editor\"] > *`\n * in the shipped CSS, so consumers don't neutralise anything class-by-class.\n *\n * Send is INTERNALISED. The composer owns the Send button (`primary` size\n * `sm`) and wires it to `onSubmit`. Consumers don't render a separate\n * Send — that's the \"single component\" contract this primitive fulfils.\n *\n * Disabled / loading: pass `disabled` or `loading` on the root and the\n * whole card greys to 60% opacity with pointer events blocked,\n * `aria-disabled` is set, and `data-state=\"disabled\"` is emitted for\n * analytics / CSS targeting.\n *\n * @since 0.14.0\n */\n\nexport interface QuickReplyChip {\n id: string;\n label: string;\n body: string;\n}\n\nexport interface MessageComposerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSubmit\"> {\n /** Quick-reply chips above the editor. Auto-hides when empty/undefined. */\n chips?: QuickReplyChip[];\n /** Called when a chip is picked. Receives the full chip object. */\n onChipPick?: (chip: QuickReplyChip) => void;\n /** Render skeleton chips while templates fetch — keeps the strip from\n * popping in once data arrives. */\n chipsLoading?: boolean;\n\n /** Send action — wired to the built-in Send button. */\n onSubmit?: () => void;\n /** Send button label. Default: `\"Send\"`. */\n submitLabel?: string;\n /** Send button label while `submitting`. Default: `\"Sending…\"`. */\n submittingLabel?: string;\n /** Show `submittingLabel` and disable the Send button. */\n submitting?: boolean;\n /** Additional gating on the Send button (e.g. empty editor). */\n submitDisabled?: boolean;\n\n /** Disables the whole composer (60% opacity, blocked pointer events,\n * `aria-disabled`). Use while a fetch is in flight or the surface is\n * in a transitioning state. */\n disabled?: boolean;\n /** Alias for `disabled` — semantic for \"still fetching, not yet ready\n * to edit\". The two combine: composer is disabled if EITHER is true. */\n loading?: boolean;\n\n /** Left-of-Send slot in the footer — toggles, format buttons, presence\n * indicators, multi-action toolbars (channel dropdown + template picker\n * + attachments + AI sparkle). The communications variant fills this\n * with its full action toolbar; the rail variant typically leaves it\n * empty. */\n startSlot?: ReactNode;\n\n /** Optional region rendered ABOVE the chip strip and editor. Use for\n * recipient fields (email To/CC/BCC), subject lines, AI draft banners,\n * SMS phone selectors — anything the editor body responds to but isn't\n * a chip. The communications variant uses this for the recipient stack;\n * the rail variant leaves it empty.\n *\n * Header rows typically end with a hairline divider (`border-b border-rule`)\n * to separate them from each other and from the editor. The composer\n * doesn't impose this — pass your own divider styling. */\n header?: ReactNode;\n\n /** Optional region rendered BETWEEN the editor and the footer. Use for\n * SMS character counters, attachment chips, inline metadata. Different\n * from `startSlot` (footer-left) because this lives ABOVE the footer\n * row — it stays visible while the Send button anchors to the footer's\n * right edge. */\n belowEditor?: ReactNode;\n\n /** The editor — Tiptap mention input, plain textarea, contenteditable,\n * etc. Pass `showSubmitHint={false}` on any editor that surfaces its own\n * ⌘↩ hint to avoid the affordance reading duplicated alongside the\n * composer's Send button. */\n children: ReactNode;\n}\n\nexport const MessageComposer = forwardRef<HTMLDivElement, MessageComposerProps>(\n function MessageComposer(\n {\n chips,\n onChipPick,\n chipsLoading = false,\n onSubmit,\n submitLabel = \"Send\",\n submittingLabel = \"Sending…\",\n submitting = false,\n submitDisabled = false,\n disabled = false,\n loading = false,\n startSlot,\n header,\n belowEditor,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const isDisabled = disabled || loading;\n const isSubmitDisabled = isDisabled || submitting || submitDisabled;\n const showChipsRegion = chipsLoading || (chips && chips.length > 0);\n\n /* Chip-strip overflow detection — drives a mask-image fade on the\n * appropriate edge so off-screen chips read as scrollable.\n * Single recompute on resize + scroll, deps on chips.length so we\n * re-observe when the strip's content changes. */\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [overflow, setOverflow] = useState<\"none\" | \"right\" | \"left\" | \"both\">(\"none\");\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el || !showChipsRegion) return;\n const compute = () => {\n const canL = el.scrollLeft > 1;\n const canR = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setOverflow(canL && canR ? \"both\" : canR ? \"right\" : canL ? \"left\" : \"none\");\n };\n compute();\n const ro = new ResizeObserver(compute);\n ro.observe(el);\n el.addEventListener(\"scroll\", compute, { passive: true });\n return () => {\n ro.disconnect();\n el.removeEventListener(\"scroll\", compute);\n };\n }, [chips?.length, showChipsRegion]);\n\n const maskImage =\n overflow === \"right\"\n ? \"linear-gradient(to right, black 0%, black calc(100% - 24px), transparent 100%)\"\n : overflow === \"left\"\n ? \"linear-gradient(to right, transparent 0%, black 24px, black 100%)\"\n : overflow === \"both\"\n ? \"linear-gradient(to right, transparent 0%, black 24px, black calc(100% - 24px), transparent 100%)\"\n : \"none\";\n\n return (\n <div\n ref={ref}\n data-slot=\"message-composer\"\n data-state={isDisabled ? \"disabled\" : \"idle\"}\n aria-disabled={isDisabled || undefined}\n className={cn(\n \"relative flex flex-col\",\n \"border-rule bg-input-background rounded-xl border\",\n \"transition-shadow duration-150\",\n \"focus-within:border-accent-ring focus-within:bg-surface focus-within:shadow-sm\",\n isDisabled && \"pointer-events-none opacity-60\",\n className,\n )}\n {...props}\n >\n {header && (\n <div data-slot=\"message-composer-header\" className=\"shrink-0\">\n {header}\n </div>\n )}\n {showChipsRegion && (\n <div className=\"flex shrink-0 items-center px-2.5 pt-2 pb-1.5\">\n <div\n ref={scrollerRef}\n data-slot=\"message-composer-chips\"\n className=\"flex w-full gap-1.5 overflow-x-auto\"\n style={{ maskImage, WebkitMaskImage: maskImage }}\n >\n {chipsLoading\n ? Array.from({ length: 3 }).map((_, i) => (\n <div\n key={i}\n aria-hidden=\"true\"\n className=\"bg-bg-3 h-6 w-20 shrink-0 animate-pulse rounded-full\"\n />\n ))\n : chips!.map((chip) => (\n <button\n key={chip.id}\n type=\"button\"\n onClick={() => onChipPick?.(chip)}\n title={chip.label}\n className={cn(\n \"inline-flex h-6 shrink-0 items-center rounded-full px-2.5\",\n \"text-[11px] font-medium text-fg-2\",\n \"bg-bg-2 transition-colors hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n )}\n >\n {chip.label}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div data-slot=\"message-composer-editor\" className=\"min-h-0 flex-1\">\n {children}\n </div>\n\n {belowEditor && (\n <div data-slot=\"message-composer-below-editor\" className=\"shrink-0\">\n {belowEditor}\n </div>\n )}\n\n <div\n data-slot=\"message-composer-footer\"\n className=\"flex shrink-0 items-center justify-between gap-2 px-2 pb-1.5 pt-1\"\n >\n <div className=\"flex min-w-0 items-center gap-2\">{startSlot}</div>\n <Button\n size=\"sm\"\n disabled={isSubmitDisabled}\n onClick={onSubmit}\n className=\"gap-1.5\"\n >\n <SendIcon size={14} aria-hidden=\"true\" />\n {submitting ? submittingLabel : submitLabel}\n </Button>\n </div>\n </div>\n );\n },\n);\nMessageComposer.displayName = \"MessageComposer\";\n","import { forwardRef, Fragment } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\nimport { SettingsIcon } from \"../primitives/icons\";\n\n/**\n * NotificationPanel — presentational in-app notification list (the bell\n * dropdown body). Avatar-led: people-driven rows (mentions, messages) show\n * the sender's avatar, system rows show a neutral type icon. Icons are\n * neutral on purpose — colour is spent only on the unread signal.\n *\n * This is the visual layer only. The app owns data, realtime (SSE),\n * pagination, and navigation, and composes these pieces:\n *\n * <NotificationPanel>\n * <NotificationPanelHeader unreadCount={3} onMarkAllRead={...} onSettings={...} />\n * <NotificationFilter value={filter} onValueChange={setFilter} actions={<TypeDropdown />} />\n * <NotificationList>\n * {items.map((n) => (\n * <NotificationItem\n * key={n.id}\n * title={n.title}\n * body={n.body}\n * typeLabel={n.typeLabel}\n * client={n.client}\n * time={n.time}\n * sender={n.sender} // omit for system rows\n * icon={<DocumentIcon />} // used when there's no sender\n * unread={!n.isRead}\n * onClick={() => open(n)}\n * />\n * ))}\n * </NotificationList>\n * </NotificationPanel>\n *\n * Empty / loading states are the consumer's call (use `EmptyState` and\n * `Skeleton` from the package).\n */\n\n/* ─── Panel shell ─────────────────────────────────────────────── */\n\nexport type NotificationPanelProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const NotificationPanel = forwardRef<HTMLDivElement, NotificationPanelProps>(\n function NotificationPanel({ className, children, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"bg-surface text-fg flex w-full flex-col\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nNotificationPanel.displayName = \"NotificationPanel\";\n\n/* ─── Header ──────────────────────────────────────────────────── */\n\nexport interface NotificationPanelHeaderProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n /** Unread count — drives the pill and whether \"Mark all read\" shows. */\n unreadCount?: number;\n onMarkAllRead?: () => void;\n onSettings?: () => void;\n}\n\nexport const NotificationPanelHeader = forwardRef<HTMLDivElement, NotificationPanelHeaderProps>(\n function NotificationPanelHeader(\n { title = \"Notifications\", unreadCount = 0, onMarkAllRead, onSettings, className, ...props },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule flex items-center justify-between border-b px-4 py-3\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-fg text-sm font-semibold\">{title}</h3>\n {unreadCount > 0 && (\n <span className=\"bg-accent/10 text-accent rounded-pill px-1.5 py-0.5 text-[11px] font-semibold tabular-nums\">\n {unreadCount > 99 ? \"99+\" : unreadCount}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onMarkAllRead && unreadCount > 0 && (\n <button\n type=\"button\"\n onClick={onMarkAllRead}\n className=\"text-fg-3 hover:text-fg text-xs font-medium\"\n >\n Mark all read\n </button>\n )}\n {onSettings && (\n <button\n type=\"button\"\n onClick={onSettings}\n aria-label=\"Notification settings\"\n className=\"text-fg-3 hover:text-fg hover:bg-bg-2 rounded-md p-1 [&_svg]:size-[15px]\"\n >\n <SettingsIcon />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nNotificationPanelHeader.displayName = \"NotificationPanelHeader\";\n\n/* ─── Filter (All / Unread segmented) ─────────────────────────── */\n\nexport type NotificationFilterValue = \"all\" | \"unread\";\n\nexport interface NotificationFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n value: NotificationFilterValue;\n onValueChange: (value: NotificationFilterValue) => void;\n /** Right-aligned slot, e.g. a type-filter dropdown trigger. */\n actions?: React.ReactNode;\n}\n\nconst FILTER_OPTIONS: NotificationFilterValue[] = [\"all\", \"unread\"];\n\nexport const NotificationFilter = forwardRef<HTMLDivElement, NotificationFilterProps>(\n function NotificationFilter({ value, onValueChange, actions, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule flex items-center justify-between gap-2 border-b px-3 py-2\",\n className,\n )}\n {...props}\n >\n <div className=\"bg-bg-2 inline-flex rounded-lg p-0.5 text-xs font-medium\">\n {FILTER_OPTIONS.map((option) => (\n <button\n key={option}\n type=\"button\"\n onClick={() => onValueChange(option)}\n aria-pressed={value === option}\n className={cn(\n \"rounded-md px-2.5 py-1 capitalize transition-colors\",\n \"focus-visible:ring-accent outline-none focus-visible:ring-2\",\n value === option\n ? \"bg-surface text-fg shadow-quiet ring-rule-soft ring-1\"\n : \"text-fg-3 hover:text-fg\",\n )}\n >\n {option}\n </button>\n ))}\n </div>\n {actions}\n </div>\n );\n },\n);\nNotificationFilter.displayName = \"NotificationFilter\";\n\n/* ─── List ────────────────────────────────────────────────────── */\n\nexport type NotificationListProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const NotificationList = forwardRef<HTMLDivElement, NotificationListProps>(\n function NotificationList({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"divide-rule-soft max-h-[460px] divide-y overflow-y-auto\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nNotificationList.displayName = \"NotificationList\";\n\n/* ─── Item (row) ──────────────────────────────────────────────── */\n\nexport interface NotificationItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"title\"> {\n /**\n * Primary headline — one scannable line (feed the human sentence here, e.g.\n * \"Sara uploaded W-2.pdf\", not a generic type label). Clamps to 2 lines,\n * then ellipsis.\n */\n title: React.ReactNode;\n /** Muted secondary line (a message snippet, etc.). Single line, truncates. */\n body?: React.ReactNode;\n /** Quiet caption shown on the meta line only when there is no `body`. */\n typeLabel?: React.ReactNode;\n client?: React.ReactNode;\n /** Preformatted relative time, e.g. \"5m\". Top-right, baseline with `title`. */\n time?: React.ReactNode;\n /** People-driven rows: shows the sender avatar instead of the icon tile. */\n sender?: { name: string; src?: string | null };\n /** System rows: icon rendered inside a tile. Ignored when `sender` is set. */\n icon?: React.ReactNode;\n /**\n * Tint the icon tile per type, e.g. \"bg-amber-bg text-amber\". The consumer\n * owns the type-to-colour map. Defaults to a neutral tile.\n */\n iconClassName?: string;\n unread?: boolean;\n}\n\nexport const NotificationItem = forwardRef<HTMLButtonElement, NotificationItemProps>(\n function NotificationItem(\n { title, body, typeLabel, client, time, sender, icon, iconClassName, unread, className, ...props },\n ref,\n ) {\n const meta = body ? [] : [typeLabel, client].filter(Boolean);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex w-full gap-3 px-4 py-2.5 text-left outline-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n unread\n ? \"bg-pro-bg hover:bg-pro-bg-hover focus-visible:bg-pro-bg-hover\"\n : \"hover:bg-bg-2/60 focus-visible:bg-bg-2/60\",\n className,\n )}\n {...props}\n >\n {/* Unread gutter — fixed width so read and unread rows stay aligned. */}\n <span className=\"flex w-1.5 shrink-0 justify-center\" aria-hidden=\"true\">\n {unread && <span className=\"bg-pro-fg mt-[13px] size-1.5 rounded-full\" />}\n </span>\n\n {sender ? (\n <Avatar size=\"sm\" name={sender.name} src={sender.src} className=\"mt-0.5\" />\n ) : (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-lg [&_svg]:size-3.5\",\n iconClassName ?? \"bg-bg-2 text-fg-3\",\n )}\n >\n {icon}\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n {unread && <span className=\"sr-only\">Unread. </span>}\n <div className=\"flex items-baseline gap-2\">\n <p\n className={cn(\n \"line-clamp-2 min-w-0 flex-1 text-[13.5px] leading-snug font-medium\",\n unread ? \"text-fg\" : \"text-fg-2\",\n )}\n >\n {title}\n </p>\n {time && (\n <span className=\"text-fg-4 shrink-0 text-xs whitespace-nowrap tabular-nums\">\n {time}\n </span>\n )}\n </div>\n {body ? (\n <p className=\"text-fg-3 mt-0.5 truncate text-xs\">{body}</p>\n ) : (\n meta.length > 0 && (\n <p className=\"text-fg-4 mt-0.5 truncate text-[11.5px]\">\n {meta.map((part, i) => (\n <Fragment key={i}>\n {i > 0 && <span aria-hidden=\"true\"> · </span>}\n {part}\n </Fragment>\n ))}\n </p>\n )\n )}\n </div>\n </button>\n );\n },\n);\nNotificationItem.displayName = \"NotificationItem\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Toolbar — horizontal row of controls used above lists, dashboards, etc.\n * FilterChip is a simpler atom than `MultiFilterPill` — single filter,\n * not multi-select.\n */\n\nexport type ToolbarProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(\n { className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n});\nToolbar.displayName = \"Toolbar\";\n\nexport const filterChipVariants = cva(\n cn(\n \"inline-flex items-center gap-1.5 rounded-pill font-medium border\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled disabled:border-rule\",\n ),\n {\n variants: {\n active: {\n true: \"bg-pro-bg text-pro-fg border-pro-fg/30 hover:bg-pro-bg-hover\",\n false: \"bg-bg-2 text-fg-2 border-rule hover:bg-bg-3\",\n },\n // Control text scale shared with Button / MultiFilterPill: sm = 13px,\n // md = 14px, lg = 16px. Defaults to the dense `sm` tier (toolbar control).\n size: {\n sm: \"h-8 px-3 text-[13px]\",\n md: \"h-9 px-3.5 text-sm\",\n lg: \"h-10 px-4 text-base\",\n },\n },\n defaultVariants: {\n active: false,\n size: \"sm\",\n },\n },\n);\n\nexport interface FilterChipProps\n extends\n Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n keyof VariantProps<typeof filterChipVariants>\n >,\n VariantProps<typeof filterChipVariants> {\n count?: number;\n}\n\nexport const FilterChip = forwardRef<HTMLButtonElement, FilterChipProps>(function FilterChip(\n { active = false, size, count, className, children, type, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type ?? \"button\"}\n aria-pressed={active ?? false}\n className={cn(filterChipVariants({ active, size }), className)}\n {...props}\n >\n {children}\n {typeof count === \"number\" && (\n <span className=\"font-mono text-[10.5px] tabular-nums\">{count}</span>\n )}\n </button>\n );\n});\nFilterChip.displayName = \"FilterChip\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { Button, type ButtonProps } from \"../primitives/button\";\nimport { LinkButton } from \"../primitives/link-button\";\nimport { cn } from \"../lib/cn\";\n\nimport { ArrowRightIcon } from \"../primitives/icons\";\n/**\n * Intent-named action wrappers (Phase 4).\n *\n * Thin wrappers over Button / LinkButton. Bake in the right variant + size\n * so the correct call is shorter than the raw call.\n *\n * Note: `Button` has no `variant=\"icon\"`. `IconAction` uses `variant=\"ghost\"`\n * + `size=\"icon\"` (the existing icon size token).\n */\n\ntype LinkButtonProps = React.ComponentProps<typeof LinkButton>;\n\nexport interface PrimaryActionProps extends Omit<ButtonProps, \"variant\" | \"size\"> {\n arrow?: boolean;\n}\n\nexport const PrimaryAction = forwardRef<HTMLButtonElement, PrimaryActionProps>(\n function PrimaryAction({ arrow, iconRight, children, className, ...props }, ref) {\n return (\n <Button\n ref={ref}\n variant=\"accent\"\n size=\"sm\"\n iconRight={arrow ? <ArrowRightIcon className=\"size-4\" /> : iconRight}\n className={cn(className)}\n {...props}\n >\n {children}\n </Button>\n );\n },\n);\nPrimaryAction.displayName = \"PrimaryAction\";\n\nexport type SecondaryActionProps = Omit<ButtonProps, \"variant\" | \"size\">;\n\nexport const SecondaryAction = forwardRef<HTMLButtonElement, SecondaryActionProps>(\n function SecondaryAction({ className, children, ...props }, ref) {\n return (\n <Button ref={ref} variant=\"ghost\" size=\"sm\" className={cn(className)} {...props}>\n {children}\n </Button>\n );\n },\n);\nSecondaryAction.displayName = \"SecondaryAction\";\n\nexport interface DangerActionProps extends Omit<ButtonProps, \"variant\" | \"size\" | \"onClick\"> {\n /** Required — explicit name forces the consumer to acknowledge intent. */\n onConfirm: () => void;\n}\n\nexport const DangerAction = forwardRef<HTMLButtonElement, DangerActionProps>(function DangerAction(\n { onConfirm, className, children, ...props },\n ref,\n) {\n return (\n <Button\n ref={ref}\n variant=\"destructive\"\n size=\"sm\"\n onClick={onConfirm}\n className={cn(className)}\n {...props}\n >\n {children}\n </Button>\n );\n});\nDangerAction.displayName = \"DangerAction\";\n\nexport interface IconActionProps extends Omit<ButtonProps, \"variant\" | \"size\"> {\n /** Required — icon-only buttons must announce themselves to assistive tech. */\n \"aria-label\": string;\n}\n\nexport const IconAction = forwardRef<HTMLButtonElement, IconActionProps>(function IconAction(\n { className, children, ...props },\n ref,\n) {\n return (\n <Button ref={ref} variant=\"ghost\" size=\"icon\" className={cn(className)} {...props}>\n {children}\n </Button>\n );\n});\nIconAction.displayName = \"IconAction\";\n\nexport interface LinkActionProps extends Omit<LinkButtonProps, \"variant\" | \"size\"> {\n arrow?: boolean;\n}\n\nexport const LinkAction = forwardRef<HTMLAnchorElement, LinkActionProps>(function LinkAction(\n { arrow, iconRight, children, className, ...props },\n ref,\n) {\n return (\n <LinkButton\n ref={ref}\n variant=\"ghost\"\n size=\"sm\"\n iconRight={arrow ? <ArrowRightIcon className=\"size-4\" /> : iconRight}\n className={cn(className)}\n {...props}\n >\n {children}\n </LinkButton>\n );\n});\nLinkAction.displayName = \"LinkAction\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Intent-named atom wrappers (Phase 4).\n *\n * Thin <span>/<div>/<kbd> wrappers that bake in the right typography +\n * color tokens. Compose with the addressable utility classes in tokens.css\n * (`.tabular`, `.font-spec`, `.eyebrow`, `.eyebrow-num`).\n */\n\nexport type NumericProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const Numeric = forwardRef<HTMLSpanElement, NumericProps>(function Numeric(\n { className, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(\"tabular font-mono\", className)} {...props}>\n {children}\n </span>\n );\n});\nNumeric.displayName = \"Numeric\";\n\nexport type MutedSpecProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const MutedSpec = forwardRef<HTMLSpanElement, MutedSpecProps>(function MutedSpec(\n { className, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(\"font-spec text-fg-3\", className)} {...props}>\n {children}\n </span>\n );\n});\nMutedSpec.displayName = \"MutedSpec\";\n\nexport interface EyebrowProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, switches to spec font + Pro purple (the `01 — Today` pattern). */\n numeric?: boolean;\n}\n\nexport const Eyebrow = forwardRef<HTMLDivElement, EyebrowProps>(function Eyebrow(\n { numeric, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(numeric ? \"eyebrow-num\" : \"eyebrow\", className)} {...props}>\n {children}\n </div>\n );\n});\nEyebrow.displayName = \"Eyebrow\";\n\nexport type KbdHintProps = React.HTMLAttributes<HTMLElement>;\n\nexport const KbdHint = forwardRef<HTMLElement, KbdHintProps>(function KbdHint(\n { className, children, ...props },\n ref,\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n \"rounded-icon inline-flex h-5 min-w-5 items-center justify-center px-1.5\",\n \"border-rule bg-bg-2 text-fg-3 border font-mono text-[10.5px]\",\n className,\n )}\n {...props}\n >\n {children}\n </kbd>\n );\n});\nKbdHint.displayName = \"KbdHint\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tokens/reference.ts","../src/tokens/system.ts","../src/lib/cn.ts","../src/primitives/icons.tsx","../src/primitives/accordion.tsx","../src/primitives/alert-dialog.tsx","../src/primitives/alert.tsx","../src/primitives/aspect-ratio.tsx","../src/primitives/avatar.tsx","../src/primitives/badge.tsx","../src/primitives/blockquote.tsx","../src/primitives/brand-icons.tsx","../src/primitives/breadcrumb.tsx","../src/primitives/spinner.tsx","../src/primitives/button.tsx","../src/primitives/calendar.tsx","../src/primitives/card.tsx","../src/primitives/checkbox.tsx","../src/primitives/select.tsx","../src/primitives/client-select.tsx","../src/primitives/collapsible.tsx","../src/primitives/coming-soon.tsx","../src/primitives/dialog.tsx","../src/primitives/command-palette.tsx","../src/primitives/confirm-action-button.tsx","../src/primitives/context-menu.tsx","../src/primitives/copy-button.tsx","../src/primitives/date-utils.ts","../src/primitives/popover.tsx","../src/primitives/date-picker.tsx","../src/primitives/date-range-picker.tsx","../src/primitives/dismissible-chip.tsx","../src/primitives/dropdown-menu.tsx","../src/primitives/empty-state.tsx","../src/primitives/file-upload.tsx","../src/primitives/form-message.tsx","../src/primitives/form-section.tsx","../src/primitives/hover-card.tsx","../src/primitives/input.tsx","../src/primitives/keyboard-shortcuts-dialog.tsx","../src/primitives/label.tsx","../src/primitives/link-button.tsx","../src/primitives/skeleton.tsx","../src/primitives/loading-rows.tsx","../src/primitives/logo.tsx","../src/primitives/multi-filter-pill.tsx","../src/primitives/multi-select-field.tsx","../src/primitives/otp-input.tsx","../src/primitives/pagination.tsx","../src/lib/phone.ts","../src/primitives/phone-input.tsx","../src/primitives/priority-icon.tsx","../src/primitives/progress-bar.tsx","../src/primitives/progress-ring.tsx","../src/primitives/radio-group.tsx","../src/primitives/scroll-area.tsx","../src/hooks/use-debounce.ts","../src/primitives/search-input.tsx","../src/primitives/search-select.tsx","../src/primitives/section-header.tsx","../src/primitives/section.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/side-drawer.tsx","../src/primitives/slider.tsx","../src/primitives/star-rating.tsx","../src/primitives/stat.tsx","../src/primitives/status-icon.tsx","../src/primitives/stepper.tsx","../src/primitives/submit-button.tsx","../src/primitives/switch.tsx","../src/primitives/table.tsx","../src/primitives/tabs.tsx","../src/primitives/team-member-select.tsx","../src/primitives/textarea.tsx","../src/primitives/toast.tsx","../src/primitives/toggle-group.tsx","../src/primitives/tooltip.tsx","../src/primitives/visually-hidden.tsx","../src/composites/shell.tsx","../src/composites/sidebar.tsx","../src/composites/sidebar-brand-switcher.tsx","../src/composites/app-header.tsx","../src/composites/page-header.tsx","../src/composites/metadata-grid.tsx","../src/composites/kpi-card.tsx","../src/composites/data-table.tsx","../src/composites/detail.tsx","../src/composites/activity-list.tsx","../src/composites/kanban.tsx","../src/composites/message-bubble.tsx","../src/composites/message-composer.tsx","../src/composites/notification-panel.tsx","../src/composites/time-logger.tsx","../src/composites/toolbar.tsx","../src/composites/bulk-action-bar.tsx","../src/composites/intent-actions.tsx","../src/composites/intent-atoms.tsx"],"names":["React","Accordion","jsx","AccordionItem","AccordionTrigger","jsxs","AccordionContent","React2","forwardRef","Alert","AlertTitle","AlertDescription","React3","AspectRatio","cva","React4","Avatar","Badge","Blockquote","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","Spinner","Button","React5","Icon","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","CardAction","React6","Checkbox","React7","React9","Collapsible","CollapsibleTrigger","CollapsibleContent","ComingSoon","React10","React11","DialogPrimitive2","CommandPrimitive","React12","React13","CopyButton","useState","useCallback","React14","useEffect","DatePicker","iso","useId","DateRangePicker","useMemo","useRef","useImperativeHandle","DayPicker","React15","DismissibleChip","React16","EmptyState","Fragment","FormSection","React17","Input","kbdClass","React18","Label","React19","LinkButton","Skeleton","SkeletonText","SkeletonCircle","LoadingRows","Link","Image","React21","OTPInputRoot","Pagination","PhoneInput","ProgressBar","ProgressRing","RadioGroup","React23","RadioGroupItem","React24","ScrollArea","ScrollBar","React25","SearchInput","React26","Section","SectionHead","Separator","React27","React28","SheetPrimitive","DialogPrimitive3","React30","Slider","StarRating","Stat","Stepper","SubmitButton","React31","Switch","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","React32","Tabs","TabsList","TabsTrigger","TabsContent","React33","Textarea","createContext","React34","ToggleGroup","ToggleGroupItem","React35","VisuallyHidden","Shell","Main","Content","Sidebar","SidebarTrigger","SidebarPinButton","SidebarBrand","SidebarBrandText","SidebarSection","SidebarLink","Slot","SidebarLinkLabel","SidebarLinkAction","SidebarLinkBadge","SidebarLinkGroup","SidebarFooter","SidebarUser","React37","SidebarBrandSwitcher","AppHeader","AppHeaderBreadcrumb","AppHeaderTitle","AppHeaderSearch","AppHeaderActions","PageHeader","PageHeaderSpec","PageHeaderSep","MetadataGrid","KpiCard","SelectableKpiCard","DataTable","DataTableToolbar","DataTableSearch","DataTableSpacer","DataTableResultsCount","DataTableHead","DataTableBody","DataTableRow","DataTableHeader","DataTableCell","DataTableCellName","DataTableCellMono","DataTableCellId","DataTableCellDue","DataTableCheckbox","DataTablePagination","DetailGrid","DetailSpine","DetailSpineHeader","DetailSpineSection","DetailSpineStats","DetailMain","ActivityList","ActivityItem","ActivityEventItem","Kanban","KanbanColumn","KanbanCard","MessageBubble","MessageBubbleTombstone","MessageBubbleAction","MessageComposer","NotificationPanel","NotificationPanelHeader","NotificationFilter","NotificationList","NotificationItem","NotificationPanelFooter","TimeLogger","TimeLoggerHeader","TimeLoggerContextRow","TimeLoggerTimer","TimeLoggerField","TimeLoggerNotes","TimeLoggerBillable","TimeLoggerActions","TimeLoggerEntryList","TimeLoggerEntry","TimeLoggerFooter","Toolbar","FilterChip","React39","BulkActionBarAction","PrimaryAction","SecondaryAction","DangerAction","IconAction","LinkAction","Numeric","MutedSpec","Eyebrow","KbdHint"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Reference tokens — raw palette.\n *\n * Programmatic access for theme switching, Figma sync, design tools, etc.\n * Components should NOT consume these directly; use system tokens (./system.ts)\n * or the CSS variables in ./tokens.css.\n */\n\nexport const colors = {\n /* Surfaces */\n bg: \"#FDFDFC\",\n bg2: \"#F7F7F5\",\n bg3: \"#F0F0ED\",\n surface: \"#FFFFFF\",\n surface2: \"#FAFAF8\",\n\n /* Foreground */\n fg: \"#0A0A0A\",\n fg2: \"#38383B\",\n fg3: \"#6B6B70\",\n fg4: \"#9A9AA0\",\n fg5: \"#C4C4C8\",\n\n /* Rules */\n rule: \"#EAEAE6\",\n ruleSoft: \"#F0F0EC\",\n ruleStrong: \"#DADAD4\",\n\n /* Accent (cyan) */\n accent: \"#0066FF\",\n accent2: \"#0052CC\",\n accentTint: \"#E8F0FF\",\n accentHover: \"#005BE6\",\n accentActive: \"#004FCC\",\n\n /* Pro (purple) */\n proBg: \"#F4F1FF\",\n proBgHover: \"#EEE9FF\",\n proBgActive: \"#E4DDFF\",\n proFg: \"#6C42F8\",\n proHover: \"#5E35F2\",\n proActive: \"#5127E8\",\n proDisabled: \"#B7A7F3\",\n proLine: \"#7B5BD8\",\n\n /* Disabled */\n fgDisabled: \"#A7A7AC\",\n bgDisabled: \"#F3F3F1\",\n\n /* Status */\n successFg: \"#1F7A3D\",\n successBg: \"#EAF6EE\",\n successLine: \"#C5E5CF\",\n warningFg: \"#B45F0A\",\n warningBg: \"#FFF3E5\",\n warningLine: \"#F5D5A8\",\n dangerFg: \"#C43838\",\n dangerBg: \"#FBEAEA\",\n dangerLine: \"#ECC5C5\",\n\n /* On-brand */\n fgOnAccent: \"#FFFFFF\",\n fgOnPro: \"#FFFFFF\",\n} as const;\n\nexport const typography = {\n family: {\n display: '\"Geist\", \"Inter\", -apple-system, system-ui, sans-serif',\n body: '\"Inter\", -apple-system, system-ui, sans-serif',\n mono: '\"Geist Mono\", \"JetBrains Mono\", ui-monospace, monospace',\n },\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n /* Universal entrance ease — applies to every motion primitive */\n ease: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n} as const;\n\nexport const radii = {\n btn: \"7px\",\n input: \"7px\",\n pill: \"5px\",\n card: \"12px\",\n icon: \"4px\",\n full: \"9999px\",\n} as const;\n\nexport const shadows = {\n quiet: \"0 1px 2px rgba(10,10,10,0.03)\",\n card: \"0 12px 28px -16px rgba(10,10,10,0.18), 0 1px 2px rgba(10,10,10,0.04)\",\n pop: \"0 30px 80px -30px rgba(10,10,10,0.18), 0 8px 24px -8px rgba(10,10,10,0.06)\",\n focusRing: \"0 0 0 2px rgba(0, 102, 255, 0.18)\",\n} as const;\n\nexport const overlays = {\n hover: \"rgba(10, 10, 10, 0.03)\",\n active: \"rgba(10, 10, 10, 0.05)\",\n} as const;\n\nexport const layout = {\n shellSidebarWidth: \"256px\",\n shellHeaderHeight: \"56px\",\n contentPad: \"32px\",\n} as const;\n\n/**\n * Spacing — 4px base scale. Components mostly use arbitrary values;\n * this scale is exposed for programmatic access (e.g. design-tool sync).\n */\nexport const spacing = {\n unit: \"4px\",\n 4: \"4px\",\n 8: \"8px\",\n 12: \"12px\",\n 16: \"16px\",\n 20: \"20px\",\n 24: \"24px\",\n 28: \"28px\",\n 32: \"32px\",\n 36: \"36px\",\n 40: \"40px\",\n 64: \"64px\",\n 80: \"80px\",\n 180: \"180px\",\n} as const;\n\n/**\n * Surface palette — the four canonical layers. Mirrors --color-bg / -2 /\n * --color-surface / --color-surface-2.\n */\nexport const surfaces = {\n bg: \"#FDFDFC\",\n bg2: \"#F7F7F5\",\n surface: \"#FFFFFF\",\n surface2: \"#FAFAF8\",\n} as const;\n\nexport const motion = {\n ease: {\n outQuart: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n out: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n in: \"cubic-bezier(0.7, 0, 0.84, 0)\",\n inOut: \"cubic-bezier(0.65, 0, 0.35, 1)\",\n },\n duration: {\n instant: \"100ms\",\n fast: \"150ms\",\n normal: \"250ms\",\n slow: \"400ms\",\n },\n} as const;\n\nexport const reference = {\n colors,\n typography,\n radii,\n shadows,\n overlays,\n layout,\n motion,\n spacing,\n surfaces,\n} as const;\n\nexport type ReferenceTokens = typeof reference;\nexport type ColorName = keyof typeof colors;\n","/**\n * System tokens — suite semantic mappings as CSS variable references.\n *\n * Use these from JS (e.g. inline styles, Storybook decorators, motion configs)\n * when you can't use a Tailwind utility class. Component CSS should prefer the\n * generated utilities (`bg-bg`, `text-fg-2`, `border-rule`, `bg-pro-fg`, etc.)\n * which Tailwind 4 emits from `--color-*` tokens declared in ./tokens.css.\n *\n * Themes (.dark) re-map the underlying CSS variables; these references stay valid.\n */\n\nexport const systemTokens = {\n color: {\n /* Surfaces */\n bg: \"var(--color-bg)\",\n bg2: \"var(--color-bg-2)\",\n bg3: \"var(--color-bg-3)\",\n surface: \"var(--color-surface)\",\n surface2: \"var(--color-surface-2)\",\n\n /* Foreground */\n fg: \"var(--color-fg)\",\n fg2: \"var(--color-fg-2)\",\n fg3: \"var(--color-fg-3)\",\n fg4: \"var(--color-fg-4)\",\n fg5: \"var(--color-fg-5)\",\n\n /* Rules */\n rule: \"var(--color-rule)\",\n ruleSoft: \"var(--color-rule-soft)\",\n ruleStrong: \"var(--color-rule-strong)\",\n\n /* Accent (cyan) */\n accent: \"var(--color-accent)\",\n accent2: \"var(--color-accent-2)\",\n accentTint: \"var(--color-accent-tint)\",\n accentHover: \"var(--color-accent-hover)\",\n accentActive: \"var(--color-accent-active)\",\n accentRing: \"var(--color-accent-ring)\",\n\n /* Pro (purple) */\n proBg: \"var(--color-pro-bg)\",\n proBgHover: \"var(--color-pro-bg-hover)\",\n proBgActive: \"var(--color-pro-bg-active)\",\n proFg: \"var(--color-pro-fg)\",\n proHover: \"var(--color-pro-hover)\",\n proActive: \"var(--color-pro-active)\",\n proDisabled: \"var(--color-pro-disabled)\",\n proLine: \"var(--color-pro-line)\",\n proRing: \"var(--color-pro-ring)\",\n\n /* On-brand */\n fgOnAccent: \"var(--color-fg-on-accent)\",\n fgOnPro: \"var(--color-fg-on-pro)\",\n\n /* Disabled */\n fgDisabled: \"var(--color-fg-disabled)\",\n bgDisabled: \"var(--color-bg-disabled)\",\n\n /* Overlays */\n overlayHover: \"var(--color-overlay-hover)\",\n overlayActive: \"var(--color-overlay-active)\",\n\n /* Status */\n successFg: \"var(--color-success-fg)\",\n successBg: \"var(--color-success-bg)\",\n successLine: \"var(--color-success-line)\",\n warningFg: \"var(--color-warning-fg)\",\n warningBg: \"var(--color-warning-bg)\",\n warningLine: \"var(--color-warning-line)\",\n dangerFg: \"var(--color-danger-fg)\",\n dangerBg: \"var(--color-danger-bg)\",\n dangerLine: \"var(--color-danger-line)\",\n },\n\n shadow: {\n quiet: \"var(--shadow-quiet)\",\n card: \"var(--shadow-card)\",\n pop: \"var(--shadow-pop)\",\n focusRing: \"var(--shadow-focus-ring)\",\n },\n\n radius: {\n btn: \"var(--radius-btn)\",\n input: \"var(--radius-input)\",\n pill: \"var(--radius-pill)\",\n card: \"var(--radius-card)\",\n icon: \"var(--radius-icon)\",\n full: \"var(--radius-full)\",\n },\n\n type: {\n family: {\n display: \"var(--font-display)\",\n body: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n weight: {\n regular: \"var(--font-weight-regular)\",\n medium: \"var(--font-weight-medium)\",\n semibold: \"var(--font-weight-semibold)\",\n bold: \"var(--font-weight-bold)\",\n },\n },\n\n motion: {\n ease: {\n outQuart: \"var(--ease-out-quart)\",\n out: \"var(--ease-out)\",\n in: \"var(--ease-in)\",\n inOut: \"var(--ease-in-out)\",\n },\n duration: {\n instant: \"var(--duration-instant)\",\n fast: \"var(--duration-fast)\",\n normal: \"var(--duration-normal)\",\n slow: \"var(--duration-slow)\",\n },\n },\n\n layout: {\n shellSidebarWidth: \"var(--shell-sidebar-w)\",\n shellSidebarRailWidth: \"var(--shell-sidebar-w-rail)\",\n shellHeaderHeight: \"var(--shell-header-h)\",\n contentPad: \"var(--content-pad)\",\n },\n\n z: {\n base: \"var(--z-base)\",\n dropdown: \"var(--z-dropdown)\",\n sticky: \"var(--z-sticky)\",\n overlay: \"var(--z-overlay)\",\n modal: \"var(--z-modal)\",\n toast: \"var(--z-toast)\",\n tooltip: \"var(--z-tooltip)\",\n },\n} as const;\n\nexport type SystemTokens = typeof systemTokens;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../lib/cn\";\n\ninterface IconProps extends React.SVGAttributes<SVGElement> {\n size?: number;\n}\n\nfunction Icon({\n size = 24,\n className,\n children,\n ...props\n}: IconProps & { children: React.ReactNode }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {children}\n </svg>\n );\n}\n\nexport function DocumentIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n fill=\"currentColor\"\n opacity=\"0.2\"\n />\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M8 13h8M8 17h8M8 9h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowRightIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 12h14M12 5l7 7-7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function StarIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2l2.09 6.26L20.18 9l-5 4.36L16.82 20 12 16.77 7.18 20l1.64-6.64-5-4.36 6.09-.74L12 2z\"\n fill=\"currentColor\"\n />\n </Icon>\n );\n}\n\nexport function SparkleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2l2.09 6.26L20.18 9l-5 4.36L16.82 20 12 16.77 7.18 20l1.64-6.64-5-4.36 6.09-.74L12 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChatBubbleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2v10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LightningIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UsersIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FileTextIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M16 13H8M16 17H8M10 9H8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ShieldIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MenuIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12h18M3 6h18M3 18h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CloseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function CheckIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 6L9 17l-5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutDashboardIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"9\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"12\" width=\"7\" height=\"9\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"16\" width=\"7\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function BuildingIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 22V4a2 2 0 012-2h8a2 2 0 012 2v18M2 22h20M10 6h4M10 10h4M10 14h4M10 18h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MapPinIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 1116 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"10\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function FileReturnIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6M9 15l3-3 3 3M12 12v6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ClipboardCheckIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect x=\"9\" y=\"2\" width=\"6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M9 14l2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderOpenIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2l-2.5-7a2 2 0 00-2-1.5H5.5A2 2 0 003.5 10L2 17a2 2 0 002 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ReceiptIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M4 2v20l3-2 3 2 3-2 3 2 3-2 3 2V2l-3 2-3-2-3 2-3-2-3 2-3-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M8 10h8M8 14h4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function CalendarIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 2v4M8 2v4M3 10h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BarChartIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 20V10M18 20V4M6 20v-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SettingsIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PanelLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9 3v18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function PanelLeftCloseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9 3v18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M15 9l-3 3 3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SunIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TeamIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 21v-2a4 4 0 00-4-4H10a4 4 0 00-4 4v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"7\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M22 11h-4M20 9v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function MoonIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PaletteIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"13.5\" cy=\"6.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"17.5\" cy=\"10.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"8.5\" cy=\"7.5\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"6.5\" cy=\"12.5\" r=\"1.5\" fill=\"currentColor\" />\n <path\n d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.93 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.04-.23-.29-.38-.63-.38-1.04 0-.83.67-1.5 1.5-1.5H16c3.31 0 6-2.69 6-6 0-5.5-4.5-9.92-10-9.92z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MailIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M22 7l-10 6L2 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function GlobeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BellIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 8A6 6 0 106 8c0 7-3 9-3 9h18s-3-2-3-9zM13.73 21a2 2 0 01-3.46 0\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function WorkflowIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"15\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"9\" y=\"15\" width=\"6\" height=\"6\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 9v3a3 3 0 003 3h6a3 3 0 003-3V9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path d=\"M12 12v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function LinkIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function KeyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 11-7.778 7.778 5.5 5.5 0 017.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SearchIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M21 21l-4.35-4.35\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function LogOutIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4M16 17l5-5-5-5M21 12H9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TagIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12.586 2.586A2 2 0 0011.172 2H4a2 2 0 00-2 2v7.172a2 2 0 00.586 1.414l8.704 8.704a2.426 2.426 0 003.42 0l6.58-6.58a2.426 2.426 0 000-3.42z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </Icon>\n );\n}\n\nexport function SendIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14.536 21.686a.5.5 0 00.937-.024l6.5-19a.496.496 0 00-.635-.635l-19 6.5a.5.5 0 00-.024.937l7.93 3.18a2 2 0 011.112 1.11z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M21.854 2.147l-10.94 10.939\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TrashIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 6h18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Link2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 17H7A5 5 0 017 7h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M15 7h2a5 5 0 110 10h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"8\"\n x2=\"16\"\n y1=\"12\"\n y2=\"12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m18 15-6-6-6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m6 9 6 6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PlusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 5v14M5 12h14\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UserCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 20.662V19a2 2 0 012-2h6a2 2 0 012 2v1.662\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PencilIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 3a2.828 2.828 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PhoneIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderClosedIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 20a2 2 0 002-2V8a2 2 0 00-2-2h-7.9a2 2 0 01-1.69-.9L9.6 3.9A2 2 0 007.93 3H4a2 2 0 00-2 2v13a2 2 0 002 2h16z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UploadIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M17 8l-5-5-5 5M12 3v12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function DownloadIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MoreHorizontalIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </Icon>\n );\n}\n\nexport function ChevronRightIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m9 18 6-6-6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m15 18-6-6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FileIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function RotateCcwIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12a9 9 0 109-9 9.75 9.75 0 00-6.74 2.74L3 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3 3v5h5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function EyeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7S2 12 2 12z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function ClockIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 6v6h4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutListIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M14 4h7M14 9h7M14 15h7M14 20h7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LayoutGridIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function LockIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 11V7a5 5 0 0110 0v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FolderPlusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 20a2 2 0 002-2V8a2 2 0 00-2-2h-7.9a2 2 0 01-1.69-.9L9.6 3.9A2 2 0 007.93 3H4a2 2 0 00-2 2v13a2 2 0 002 2h16z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 10v6M9 13h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MoveIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 9l-3 3 3 3M9 5l3-3 3 3M15 19l-3 3-3-3M19 9l3 3-3 3M2 12h20M12 2v20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LockKeyholeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\" />\n <rect x=\"3\" y=\"10\" width=\"18\" height=\"12\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M7 10V7a5 5 0 0110 0v3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PaperclipIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M21.44 11.05l-9.19 9.19a6 6 0 01-8.49-8.49l9.19-9.19a4 4 0 015.66 5.66l-9.2 9.19a2 2 0 01-2.83-2.83l8.49-8.48\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function AtSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 8v5a3 3 0 006 0v-1a10 10 0 10-4 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ZoomInIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M21 21l-4.35-4.35M11 8v6M8 11h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ZoomOutIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M21 21l-4.35-4.35M8 11h6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function XIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function MessageCircleWarningIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12 8v4M12 16h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function FlagIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1zM4 22v-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function LockOpenIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect\n width=\"18\"\n height=\"11\"\n x=\"3\"\n y=\"11\"\n rx=\"2\"\n ry=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M7 11V7a5 5 0 0 1 9.9-1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MessageCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PenSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M17 3a2.83 2.83 0 114 4L7.5 20.5 2 22l1.5-5.5L17 3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CopyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect\n x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n />\n <path\n d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n />\n </Icon>\n );\n}\n\nexport function MonitorIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M8 21h8M12 17v4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SmartphoneIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 18h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function AlertTriangleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"12\"\n y1=\"9\"\n x2=\"12\"\n y2=\"13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"12\"\n y1=\"17\"\n x2=\"12.01\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowRightSmallIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M5 12h14M12 5l7 7-7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 12H5M12 19l-7-7 7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CreditCardIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 10h18\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path d=\"M7 15h3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\n/* ─── Icons added in 0.3.0 — single-source migration off lucide-react ────\n * Visual fidelity preserved by porting lucide-react's SVG paths into the\n * catalog's shared `<Icon>` wrapper (24×24 viewBox + currentColor +\n * strokeWidth=1.5 baseline). Names keep the lucide convention with the\n * catalog's `Icon` suffix appended so they compose with the rest of the\n * catalog (e.g. lucide `<Check />` → catalog `<CheckIcon />`).\n * ────────────────────────────────────────────────────────────────────── */\n\nexport function AlertCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 8v4M12 16h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 5v14M19 12l-7 7-7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ArrowUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 19V5M5 12l7-7 7 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function BriefcaseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Building2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 22V4a2 2 0 012-2h8a2 2 0 012 2v18Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 12H4a2 2 0 00-2 2v6a2 2 0 002 2h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M18 9h2a2 2 0 012 2v9a2 2 0 01-2 2h-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 6h4M10 10h4M10 14h4M10 18h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CheckCircle2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"m9 12 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ChevronsUpDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m7 15 5 5 5-5M7 9l5-5 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function CircleDotIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n </Icon>\n );\n}\n\nexport function CommandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M18 3a3 3 0 00-3 3v12a3 3 0 003 3 3 3 0 003-3 3 3 0 00-3-3H6a3 3 0 00-3 3 3 3 0 003 3 3 3 0 003-3V6a3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3h12a3 3 0 003-3 3 3 0 00-3-3z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function CornerDownLeftIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m9 10-5 5 5 5M20 4v7a4 4 0 01-4 4H4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function EyeOffIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9.88 9.88a3 3 0 104.24 4.24M10.73 5.08A10.43 10.43 0 0112 5c7 0 10 7 10 7a13.16 13.16 0 01-1.67 2.68M6.61 6.61A13.526 13.526 0 002 12s3 7 10 7a9.74 9.74 0 005.39-1.61M2 2l20 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function HomeIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m3 9 9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9 22V12h6v10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function InboxIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M22 12h-6l-2 3h-4l-2-3H2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.45 5.11 2 12v6a2 2 0 002 2h16a2 2 0 002-2v-6l-3.45-6.89A2 2 0 0016.76 4H7.24a2 2 0 00-1.79 1.11Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListChecksIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m3 17 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"m3 7 2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13 6h8M13 12h8M13 18h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function MinusIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M5 12h14\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function SlashIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M22 2 2 22\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </Icon>\n );\n}\n\nexport function SparklesIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"m12 3-1.91 5.79a2 2 0 01-1.3 1.3L3 12l5.79 1.91a2 2 0 011.3 1.3L12 21l1.91-5.79a2 2 0 011.3-1.3L21 12l-5.79-1.91a2 2 0 01-1.3-1.3L12 3Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5 3v4M3 5h4M19 17v4M17 19h4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function Trash2Icon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path d=\"M3 6h18\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <path\n d=\"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <line\n x1=\"10\"\n y1=\"11\"\n x2=\"10\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"14\"\n y1=\"11\"\n x2=\"14\"\n y2=\"17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UserIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"12\" cy=\"7\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Round 10 additions — 17 net-additive exports\n * grouped by tier. Same 24-grid / currentColor / stroke-1.5 baseline as\n * the rest of the catalog. Brand icons (Google, Microsoft) are the only\n * exception: multi-color paths with explicit fills, contract documented\n * on each export.\n * ─────────────────────────────────────────────────────────────────────── */\n\n// Tier A — rich-text editor toolbar (Bold uses the canonical stroke-2 lucide\n// path because the lobes need the heavier weight to read at editor-bar size).\n\nexport function BoldIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6zM6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ItalicIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 4h-9M14 20H5M15 4L9 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function UnderlineIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3M4 21h16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function StrikethroughIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M16 4H9a3 3 0 000 6h6a3 3 0 010 6H8M4 12h16\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ListOrderedIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M10 6h11M10 12h11M10 18h11\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4 6h1v4M3 10h3M6 18H3l3-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier B — semantic gaps (Info, HelpCircle, DollarSign, Reply). InfoIcon\n// is intentionally the inverse-glyph sibling of AlertCircleIcon: same\n// circle, dot up + line down (lowercase \"i\") vs. line up + dot down\n// (exclamation). Consumers had been conflating the two.\n\nexport function InfoIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M12 16v-4M12 8h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function HelpCircleIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3M12 17h.01\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function DollarSignIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M12 2v20M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function ReplyIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M9 17l-5-5 5-5M4 12h12a4 4 0 010 8h-1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier C — view-switcher trio. WorkflowIcon already in catalog;\n// LayoutGridIcon / LayoutListIcon kept untouched per ask.\n\nexport function KanbanIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"10\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"17\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </Icon>\n );\n}\n\nexport function TableIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M3 9h18M3 15h18M9 3v18\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier D — misc. SortAsc ask intentionally NOT added: same glyph as the\n// existing ArrowUpIcon (M12 19V5 M5 12l7-7 7 7 ≡ M12 5v14 M5 12l7-7 7 7).\n// Consumer rotates ArrowUpIcon 180° for descending — same as the original\n// SortAsc plan would have required.\n\nexport function HistoryIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8M3 3v5h5M12 7v5l4 2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function SaveIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M19 21H5a2 2 0 01-2-2V5a2 2 0 012-2h11l5 5v11a2 2 0 01-2 2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M17 21v-8H7v8M7 3v5h8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n/**\n * LoaderIcon — animated spinner. Render with `className=\"animate-spin\"`\n * (or `motion-safe:animate-spin` if you want to respect `prefers-reduced-\n * motion`; the catalog doesn't gate this itself because the spinner IS\n * the indicator for many flows).\n *\n * Visual contract: a dim full-circle ring + a brighter quarter-arc on top.\n * When rotated, the bright arc creates the \"leading edge\" of the spinner.\n */\nexport function LoaderIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity={0.25}\n />\n <path\n d=\"M4 12a8 8 0 018-8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Tier E — brand icons (multi-color, brand-locked). These DO NOT respond\n// to `currentColor` or `color-*` token classes — that's by design. Use\n// only inside OAuth buttons, integration chips, and provider-list UIs.\n// All other \"icon\" usages should stay in the semantic catalog above.\n// Suffixed `BrandIcon` to make the different contract obvious at the\n// call site.\n\n/**\n * GoogleBrandIcon — Google four-color \"G\" mark. Brand-locked colors,\n * does NOT respond to currentColor. Use only in provider-list UIs\n * (OAuth buttons, integration chips). Standard 24-grid.\n */\nexport function GoogleBrandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fill=\"#4285F4\"\n d=\"M22 12.27c0-.71-.06-1.4-.18-2.07H12v3.93h5.59a4.78 4.78 0 01-2.07 3.14v2.6h3.34c1.95-1.8 3.08-4.45 3.08-7.6z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 22.5c2.81 0 5.16-.93 6.88-2.52l-3.34-2.6c-.93.62-2.11.99-3.54.99-2.72 0-5.03-1.84-5.86-4.31H2.69v2.69A10.5 10.5 0 0012 22.5z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M6.14 14.06A6.3 6.3 0 015.8 12c0-.71.12-1.4.34-2.06V7.25H2.69A10.5 10.5 0 001.5 12c0 1.7.41 3.3 1.19 4.75l3.45-2.69z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.63c1.53 0 2.91.53 4 1.56l3-3C17.16 2.47 14.8 1.5 12 1.5A10.5 10.5 0 002.69 7.25l3.45 2.69C7 7.47 9.28 5.63 12 5.63z\"\n />\n </Icon>\n );\n}\n\n/**\n * MicrosoftBrandIcon — Microsoft four-square mark in red / green / blue /\n * yellow. Brand-locked colors, does NOT respond to currentColor. Use\n * inside Microsoft OAuth signin buttons, Outlook / Office integration\n * chips, and similar provider-list UIs. Standard 24-grid (10×10 squares\n * with 2u gaps).\n */\nexport function MicrosoftBrandIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill=\"#F25022\" />\n <rect x=\"13\" y=\"1\" width=\"10\" height=\"10\" fill=\"#7FBA00\" />\n <rect x=\"1\" y=\"13\" width=\"10\" height=\"10\" fill=\"#00A4EF\" />\n <rect x=\"13\" y=\"13\" width=\"10\" height=\"10\" fill=\"#FFB900\" />\n </Icon>\n );\n}\n\n/**\n * FilterIcon — funnel mark used for filter popover triggers across list\n * pages (clients, workflow, billing, organizers…). Renders the same\n * lucide-style polygon at any size; pair with a corner notification dot\n * to surface active filter count.\n */\nexport function FilterIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M3 4h18l-7 8v6l-4 2v-8L3 4z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Solid status icons — filled glyphs with knockout symbols (the symbol is a\n * hole, so whatever sits behind shows through). Built for status chips and\n * toasts where a thin outline reads as weak at small sizes. The four severities\n * carry distinct *shapes* (circle-check / circle-x / triangle / circle-i) so\n * meaning survives without colour (WCAG 1.4.1).\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport function CheckCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 0 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z\"\n />\n </Icon>\n );\n}\n\nexport function XCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M12 2.25C6.615 2.25 2.25 6.615 2.25 12s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 0 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z\"\n />\n </Icon>\n );\n}\n\nexport function AlertTriangleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003ZM12 8.25a.75.75 0 0 1 .75.75v3.75a.75.75 0 0 1-1.5 0V9a.75.75 0 0 1 .75-.75Zm0 8.25a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n />\n </Icon>\n );\n}\n\nexport function InfoCircleSolidIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n fill=\"currentColor\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.342l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.341l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z\"\n />\n </Icon>\n );\n}\n\n// Trend arrows for KPI deltas — diagonal line + corner arrowhead. Pair with\n// a sign-coloured chip (success / danger) on KpiCard's `delta`.\nexport function TrendingUpIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 17l6.5-6.5 5 5L22 7M16 7h6v6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function TrendingDownIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M2 7l6.5 6.5 5-5L22 17M16 17h6v-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\n// Media transport — filled glyphs (paired in timer/stopwatch controls).\n// Filled rather than stroked so they stay legible inside small round buttons.\nexport function PlayIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <path\n d=\"M8 5.14v13.72a1 1 0 001.54.84l10.78-6.86a1 1 0 000-1.68L9.54 4.3A1 1 0 008 5.14z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n </Icon>\n );\n}\n\nexport function PauseIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"7\" y=\"5\" width=\"3.5\" height=\"14\" rx=\"1\" fill=\"currentColor\" />\n <rect x=\"13.5\" y=\"5\" width=\"3.5\" height=\"14\" rx=\"1\" fill=\"currentColor\" />\n </Icon>\n );\n}\n\nexport function StopIcon({ size = 24, ...props }: IconProps) {\n return (\n <Icon size={size} {...props}>\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" fill=\"currentColor\" />\n </Icon>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronDownIcon } from \"./icons\";\n/* -------------------------------------------------------------------------- */\n/* Accordion root */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\n\nexport const Accordion = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Root>,\n AccordionProps\n>(function Accordion({ className, ...props }, ref) {\n return (\n <AccordionPrimitive.Root\n ref={ref}\n className={cn(\"divide-rule divide-y\", className)}\n {...props}\n />\n );\n});\nAccordion.displayName = AccordionPrimitive.Root.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionItem */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\n\nexport const AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n AccordionItemProps\n>(function AccordionItem({ className, ...props }, ref) {\n return <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />;\n});\nAccordionItem.displayName = AccordionPrimitive.Item.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionTrigger */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\n\nexport const AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerProps\n>(function AccordionTrigger({ children, className, ...props }, ref) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group text-fg flex flex-1 items-center justify-between gap-4 py-4 text-left text-sm font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg-2\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&[data-state=open]>svg]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n className=\"text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\"\n aria-hidden=\"true\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n});\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* AccordionContent */\n/* Uses Radix's --radix-accordion-content-height CSS var for smooth open/close */\n/* -------------------------------------------------------------------------- */\n\ntype AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n\nexport const AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n AccordionContentProps\n>(function AccordionContent({ children, className, ...props }, ref) {\n return (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n \"text-fg-2 overflow-hidden text-sm\",\n \"data-[state=closed]:animate-[accordion-up_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"data-[state=open]:animate-[accordion-down_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"motion-reduce:animate-none\",\n )}\n {...props}\n >\n <div className={cn(\"pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n});\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * AlertDialog — Radix UI alert-dialog primitive. Modified\n *\n * Public API preserved (every export exists with at least the same\n * call-site shape as the prior hand-rolled implementation):\n * AlertDialog, AlertDialogTrigger, AlertDialogContent,\n * AlertDialogHeader, AlertDialogTitle, AlertDialogDescription,\n * AlertDialogFooter, AlertDialogAction, AlertDialogCancel\n *\n * NEW (additive): AlertDialogPortal, AlertDialogOverlay are exported\n * for advanced composition (matches shadcn convention).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full max-w-lg\",\n \"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto\",\n \"rounded-card border-rule bg-surface shadow-pop border p-6\",\n \"font-body text-fg\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:-translate-y-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mb-4 flex flex-col gap-1.5\", className)} {...props} />\n);\nAlertDialogHeader.displayName = \"AlertDialogHeader\";\n\nconst AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nAlertDialogFooter.displayName = \"AlertDialogFooter\";\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-fg-3 text-sm\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(\n \"rounded-btn inline-flex h-10 items-center justify-center px-4 text-sm font-medium whitespace-nowrap\",\n \"bg-destructive text-destructive-foreground transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-destructive/90\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, children, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n \"rounded-btn border-rule-strong bg-surface inline-flex h-10 items-center justify-center border px-4 text-sm font-medium whitespace-nowrap\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n >\n {children ?? \"Cancel\"}\n </AlertDialogPrimitive.Cancel>\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Alert — inline banner. Variants align with the three Assure status families\n * (success, warning, danger) plus a cyan-accent `info` (per spec §3 — three\n * statuses, not five).\n */\nexport const alertVariants = cva(\n cn(\n \"flex items-center gap-3 rounded-card border p-4\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ),\n {\n variants: {\n variant: {\n info: \"bg-accent-tint border-[color:var(--color-accent-tint)] text-accent-2 [&_svg]:text-accent-2\",\n success: \"bg-success-bg border-success-line text-success-fg [&_svg]:text-success-fg\",\n warning: \"bg-warning-bg border-warning-line text-warning-fg [&_svg]:text-warning-fg\",\n destructive: \"bg-danger-bg border-danger-line text-danger-fg [&_svg]:text-danger-fg\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n },\n);\n\nconst variantIcons = {\n info: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 7v4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M5.5 8l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M7.13 2.5a1 1 0 011.74 0l5.5 9.5A1 1 0 0113.5 13.5h-11a1 1 0 01-.87-1.5l5.5-9.5z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path d=\"M8 6v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n ),\n destructive: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n ),\n} as const;\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { variant = \"info\", children, className, ...props },\n ref,\n) {\n const v = variant ?? \"info\";\n return (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant: v }), className)} {...props}>\n <span className=\"shrink-0\">{variantIcons[v]}</span>\n <div className=\"flex-1\">{children}</div>\n </div>\n );\n});\n\nAlert.displayName = \"Alert\";\n\nexport const AlertTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n function AlertTitle({ className, children, ...props }, ref) {\n return (\n <h4 ref={ref} className={cn(\"text-sm leading-tight font-semibold\", className)} {...props}>\n {children}\n </h4>\n );\n },\n);\n\nAlertTitle.displayName = \"AlertTitle\";\n\nexport const AlertDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(function AlertDescription({ className, ...props }, ref) {\n return <p ref={ref} className={cn(\"text-sm\", className)} {...props} />;\n});\n\nAlertDescription.displayName = \"AlertDescription\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\";\n\nimport { cn } from \"../lib/cn\";\n\ninterface AspectRatioProps extends React.ComponentPropsWithoutRef<\n typeof AspectRatioPrimitive.Root\n> {\n ratio?: number;\n children: React.ReactNode;\n}\n\nexport const AspectRatio = React.forwardRef<\n React.ElementRef<typeof AspectRatioPrimitive.Root>,\n AspectRatioProps\n>(function AspectRatio({ className, ratio = 16 / 9, ...props }, ref) {\n return (\n <AspectRatioPrimitive.Root\n ref={ref}\n ratio={ratio}\n className={cn(\"overflow-hidden\", className)}\n {...props}\n />\n );\n});\nAspectRatio.displayName = AspectRatioPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Sizing + status */\n/* */\n/* Per spec §5.22: */\n/* - `initials` (default): bg-bg-3 + text-fg-2, 500 medium, no border. */\n/* Use for client/contact/anonymous initials — the most common case. */\n/* - `branded`: bg-pro-bg + text-pro-fg + D8CFFF rule. Reserved for firm */\n/* members (the logged-in user, team-member assignment cells). */\n/* - `image`: the variant is irrelevant when `src` is provided; the image */\n/* covers the fallback. */\n/* -------------------------------------------------------------------------- */\n\nconst avatarVariants = cva(\n cn(\n \"relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full\",\n \"font-mono font-medium\",\n ),\n {\n variants: {\n size: {\n xs: \"size-5 text-[9px]\",\n sm: \"size-7 text-[10px]\",\n md: \"size-9 text-[11px]\",\n lg: \"size-12 text-sm\",\n xl: \"size-16 text-base\",\n },\n variant: {\n initials: \"bg-bg-3 text-fg-2\",\n branded: \"border border-[#D8CFFF] bg-pro-bg text-pro-fg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"initials\",\n },\n },\n);\n\ntype AvatarSize = NonNullable<VariantProps<typeof avatarVariants>[\"size\"]>;\n\nconst statusStyles = {\n online: \"bg-success-fg\",\n away: \"bg-warning-fg\",\n busy: \"bg-danger-fg\",\n offline: \"bg-fg-4\",\n} as const;\n\nconst statusDotSizes: Record<AvatarSize, string> = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n};\n\n/* -------------------------------------------------------------------------- */\n/* Initials helper */\n/* -------------------------------------------------------------------------- */\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .map((part) => part[0])\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n}\n\n/* -------------------------------------------------------------------------- */\n/* Avatar */\n/* Wraps Radix Root/Image/Fallback. Preserves the legacy contract: */\n/* - `src` -> renders Radix Image */\n/* - `name` -> initials fallback (auto-computed) */\n/* - `alt` -> image alt (defaults to name) */\n/* - `size` -> xs|sm|md|lg|xl */\n/* - `status` -> online|away|busy|offline (renders a corner dot) */\n/* -------------------------------------------------------------------------- */\n\ninterface AvatarProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, \"children\">,\n VariantProps<typeof avatarVariants> {\n src?: string | null;\n alt?: string;\n name?: string;\n status?: keyof typeof statusStyles;\n}\n\nexport const Avatar = React.forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n function Avatar(\n { src, alt, name, size = \"md\", variant = \"initials\", status, className, ...props },\n ref,\n ) {\n const initials = name ? getInitials(name) : \"?\";\n const resolvedSize: AvatarSize = size ?? \"md\";\n\n return (\n <span className=\"relative inline-flex\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(avatarVariants({ size: resolvedSize, variant }), className)}\n {...props}\n >\n {src ? (\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? name ?? \"Avatar\"}\n className=\"aspect-square size-full object-cover\"\n />\n ) : null}\n <AvatarPrimitive.Fallback\n delayMs={src ? 200 : 0}\n className=\"flex size-full items-center justify-center\"\n aria-label={name || \"Unknown user\"}\n >\n {initials}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {status && (\n <span\n className={cn(\n \"ring-bg absolute right-0 bottom-0 block rounded-full ring-2\",\n statusDotSizes[resolvedSize],\n statusStyles[status],\n )}\n role=\"img\"\n aria-label={`${status} status`}\n />\n )}\n </span>\n );\n },\n);\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Badge — status atom. Pill-family variants. Default variant is the\n * neutral pill.\n */\nexport const badgeVariants = cva(\n cn(\n \"inline-flex items-center gap-1 rounded-pill border font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ),\n {\n variants: {\n variant: {\n default: \"bg-pro-fg text-fg-on-pro border-transparent\",\n secondary: \"bg-bg-2 text-fg-3 border-rule\",\n destructive: \"bg-danger-bg text-danger-fg border-danger-line\",\n success: \"bg-success-bg text-success-fg border-success-line\",\n warning: \"bg-warning-bg text-warning-fg border-warning-line\",\n info: \"bg-accent-tint text-accent-2 border-[color:var(--color-accent-tint)]\",\n outline: \"border-rule bg-transparent text-fg-2\",\n },\n size: {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-0.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"sm\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {\n dot?: boolean;\n icon?: React.ReactNode;\n}\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant, size, dot, icon, children, className, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props}>\n {dot && <span className=\"size-1.5 rounded-full bg-current\" aria-hidden=\"true\" />}\n {icon && (\n <span className=\"inline-flex size-3.5 shrink-0\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {children}\n </span>\n );\n});\n\nBadge.displayName = \"Badge\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Blockquote — semantic quote with optional attribution. Uses `font-display`\n * (Geist) at a comfortable reading scale; smart quotes are wrapped automatically.\n */\n\ninterface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {\n author?: string;\n role?: string;\n}\n\nexport const Blockquote = forwardRef<HTMLQuoteElement, BlockquoteProps>(function Blockquote(\n { children, author, role: authorRole, className, ...props },\n ref,\n) {\n return (\n <figure>\n <blockquote\n ref={ref}\n className={cn(\n \"font-display text-fg text-xl leading-relaxed tracking-[-0.022em] md:text-2xl\",\n className,\n )}\n {...props}\n >\n <p>“{children}”</p>\n </blockquote>\n {author && (\n <figcaption className=\"mt-4\">\n <cite className=\"text-fg text-sm font-semibold not-italic\">{author}</cite>\n {authorRole && <span className=\"text-fg-3 block text-sm\">{authorRole}</span>}\n </figcaption>\n )}\n </figure>\n );\n});\n\nBlockquote.displayName = \"Blockquote\";\n","import { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Assure Suite brand glyphs\n *\n * Per-product mark icons for the Assure suite. Same silhouette (an \"A\"\n * shape with a small accent square) across all four — only the accent\n * fill changes, so a row of product tiles reads as a coherent family.\n *\n * Why these live separately from `icons.tsx`:\n * - intrinsic colors (the accent fill is part of the brand, not a\n * `currentColor`-driven theme tint), and\n * - a non-square viewBox (`0 0 136 137`) lifted directly from the\n * Pro source artwork to preserve sub-pixel proportions.\n *\n * Sized via `size` (square px on the wire). Default 24 matches every\n * other DS primitive and the `SidebarBrandSwitcher` row tile.\n *\n * The black-ish base color `#070707` is intentional brand tone — kept\n * stable across all variants. Per-product accents pull from the\n * `--color-brand-{slug}` tokens so the same hex is reusable elsewhere\n * (chips, banners, dashboards) and dark mode tracks automatically:\n * Pro var(--color-brand-pro) (purple — Pro's existing brand)\n * Audit var(--color-brand-audit) (blue)\n * Books var(--color-brand-books) (green)\n * Tax var(--color-brand-tax) (amber)\n *\n * Consumer wiring example:\n * <SidebarBrandSwitcher\n * brand={<AssureAuditBrandIcon size={28} />}\n * items={[\n * { id: \"pro\", glyph: <AssureProBrandIcon />, ... },\n * ...\n * ]}\n * />\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst BRAND_BASE_FILL = \"#070707\";\nconst BRAND_BASE_PATH =\n \"M43.8298 23.829C46.9635 23.7428 50.7456 23.9675 54.0114 23.9437L91.3493 23.8048C97.6806 23.7927 101.727 24.9883 106.302 29.5107C107.671 30.864 108.443 32.0751 109.418 33.7063C112.332 38.5806 112.037 42.6442 112.003 48.0679L112.02 56.4922C108.427 57.4911 101.053 57.2229 96.9953 57.2944C87.0232 57.47 76.9072 57.2055 66.9345 57.4014C66.7192 66.474 66.9079 75.8103 66.8438 84.9327C66.7469 92.0668 67.2878 101.738 66.6431 108.599C60.7359 108.871 54.5467 108.479 48.6135 108.641C40.5834 108.86 34.2651 108.559 28.1575 102.692C20.618 95.4486 21.8015 86.9701 21.8025 77.474L21.8166 59.8481L21.8312 49.597C21.8372 47.075 21.7515 43.5009 22.2502 41.142C22.9069 38.0359 25.4258 33.4304 27.6724 31.1548C32.4002 26.3658 37.1772 24.0905 43.8298 23.829Z\";\nconst BRAND_ACCENT_PATH =\n \"M83.7555 72.8376C85.3789 72.6548 90.5991 72.7708 92.4304 72.7692L100.779 72.7802C102.529 72.7903 104.546 72.7296 106.26 73.0259C108.43 73.422 111.61 75.5699 111.737 77.9539C112.107 84.8649 111.986 91.8555 111.974 98.7715C111.969 101.35 111.928 103.109 110.232 105.149C108.61 107.101 107.07 108.323 104.518 108.621C99.7602 108.503 95.0005 108.467 90.2413 108.513C87.5612 108.531 84.6034 108.799 81.9937 108.434C78.4024 107.933 76.1145 105.214 76.0317 101.618C75.9281 97.1186 75.8903 92.669 75.9646 88.174C76.0209 84.7695 75.8279 81.2851 76.3134 77.921C76.3993 77.3266 77.1785 76.1903 77.6286 75.7193C79.6145 73.6412 80.9496 73.0158 83.7555 72.8376Z\";\n\nexport interface BrandIconProps extends React.SVGAttributes<SVGElement> {\n size?: number;\n}\n\nfunction BrandIcon({\n size = 24,\n accent,\n title,\n className,\n ...props\n}: BrandIconProps & { accent: string; title: string }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 136 137\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"shrink-0\", className)}\n role=\"img\"\n aria-label={title}\n {...props}\n >\n <path d={BRAND_BASE_PATH} fill={BRAND_BASE_FILL} />\n <path d={BRAND_ACCENT_PATH} fill={accent} />\n </svg>\n );\n}\n\nexport function AssureProBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-pro)\" title=\"Assure Pro\" {...props} />;\n}\n\nexport function AssureAuditBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-audit)\" title=\"Assure Audit\" {...props} />;\n}\n\nexport function AssureBooksBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-books)\" title=\"Assure Books\" {...props} />;\n}\n\nexport function AssureTaxBrandIcon({ size = 24, ...props }: BrandIconProps) {\n return <BrandIcon size={size} accent=\"var(--color-brand-tax)\" title=\"Assure Tax\" {...props} />;\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronRightIcon } from \"./icons\";\n/**\n * Breadcrumb — semantic navigation primitive. Uses the catalog `ChevronRightIcon` as the\n * default separator. Current page (BreadcrumbPage) leans on Pro purple to\n * mirror the active-state language used elsewhere in the firm app.\n *\n * Public API preserved: Breadcrumb / BreadcrumbList / BreadcrumbItem /\n * BreadcrumbLink / BreadcrumbPage / BreadcrumbSeparator.\n */\n\nexport type BreadcrumbProps = React.HTMLAttributes<HTMLElement>;\n\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n { className, ...props },\n ref,\n) {\n return <nav ref={ref} aria-label=\"Breadcrumb\" className={cn(className)} {...props} />;\n});\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport type BreadcrumbListProps = React.HTMLAttributes<HTMLOListElement>;\n\nexport const BreadcrumbList = forwardRef<HTMLOListElement, BreadcrumbListProps>(\n function BreadcrumbList({ className, ...props }, ref) {\n return (\n <ol\n ref={ref}\n className={cn(\"text-fg-3 flex flex-wrap items-center gap-1.5 text-sm\", className)}\n {...props}\n />\n );\n },\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport type BreadcrumbItemProps = React.HTMLAttributes<HTMLLIElement>;\n\nexport const BreadcrumbItem = forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n function BreadcrumbItem({ className, ...props }, ref) {\n return (\n <li ref={ref} className={cn(\"inline-flex items-center gap-1.5\", className)} {...props} />\n );\n },\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport type BreadcrumbLinkProps = React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const BreadcrumbLink = forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n function BreadcrumbLink({ className, children, ...props }, ref) {\n return (\n <a\n ref={ref}\n className={cn(\n \"text-fg-3 inline-flex items-center gap-1\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"rounded-icon focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n },\n);\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nexport type BreadcrumbPageProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbPage = forwardRef<HTMLSpanElement, BreadcrumbPageProps>(\n function BreadcrumbPage({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n aria-current=\"page\"\n role=\"link\"\n aria-disabled=\"true\"\n className={cn(\"text-fg font-medium\", className)}\n {...props}\n />\n );\n },\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nexport type BreadcrumbSeparatorProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const BreadcrumbSeparator = forwardRef<HTMLSpanElement, BreadcrumbSeparatorProps>(\n function BreadcrumbSeparator({ children, className, ...props }, ref) {\n return (\n <span\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"text-fg-5 inline-flex items-center [&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRightIcon strokeWidth={1.75} />}\n </span>\n );\n },\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n","import { forwardRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { LoaderIcon } from \"./icons\";\n\nexport const spinnerVariants = cva(\n \"inline-flex shrink-0 items-center justify-center [&_svg]:motion-reduce:animate-none\",\n {\n variants: {\n size: {\n xs: \"[&_svg]:size-3\",\n sm: \"[&_svg]:size-4\",\n md: \"[&_svg]:size-5\",\n lg: \"[&_svg]:size-6\",\n },\n tone: {\n current: \"text-current\",\n muted: \"text-fg-3\",\n accent: \"text-accent\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n destructive: \"text-danger-fg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"current\",\n },\n },\n);\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof spinnerVariants> {\n /**\n * Accessible status text. Omit when adjacent visible copy already names the\n * loading state, such as inside a button labelled \"Saving\".\n */\n label?: string;\n}\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(function Spinner(\n { size, tone, label, className, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n role={label ? \"status\" : undefined}\n aria-live={label ? \"polite\" : undefined}\n className={cn(spinnerVariants({ size, tone }), className)}\n {...props}\n >\n <LoaderIcon className=\"animate-spin\" aria-hidden=\"true\" />\n {label && <span className=\"sr-only\">{label}</span>}\n </span>\n );\n});\nSpinner.displayName = \"Spinner\";\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { Spinner } from \"./spinner\";\n\n/**\n * Button — action atom.\n *\n * Variants:\n * - primary → bg-pro-fg (suite accent)\n * - secondary → ghost surface bg-bg-2\n * - destructive → bg-danger-fg\n * - success → bg-success-fg\n * - ghost → transparent, hover:bg-bg-2\n * - outline → bordered surface\n * - link → text-accent (cyan) with underline-on-hover\n * - accent → bg-accent (cyan CTA)\n * - dashed → full-bleed \"+ Add another\" CTA, transparent fill + dashed border\n *\n * Control text scale (shared across the button-family control primitives\n * Button / MultiFilterPill / FilterChip): sm = 13px, md = 14px, lg = 16px.\n * `sm` is the dense tier used in toolbars; `md` is the default. (SearchInput\n * keeps its own one-step-denser inputSize scale, 12/13/14.)\n * Use `asChild` to render as a different element (e.g. an anchor / next/link).\n */\nexport const buttonVariants = cva(\n cn(\n \"inline-flex items-center justify-center rounded-btn font-medium whitespace-nowrap\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"motion-reduce:transition-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n ),\n {\n variants: {\n variant: {\n primary: \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active\",\n secondary:\n \"bg-control-secondary-bg text-control-fg border border-control-border hover:bg-control-active-bg hover:border-control-border-strong\",\n destructive: \"bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active\",\n success:\n \"bg-success-fg text-fg-on-success hover:bg-success-fg-hover active:bg-success-fg-active\",\n ghost: \"bg-control-bg text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg\",\n outline:\n \"border border-control-border-strong bg-control-bg text-control-fg hover:bg-control-hover-bg hover:border-control-border-hover\",\n link: \"bg-transparent text-accent underline-offset-4 hover:underline p-0 h-auto\",\n accent: \"bg-accent text-fg-on-accent hover:bg-accent-hover active:bg-accent-active\",\n dashed:\n \"border-2 border-dashed border-control-border bg-control-bg text-control-muted-fg hover:border-control-border-hover hover:bg-control-hover-bg hover:text-control-hover-fg\",\n },\n size: {\n sm: \"h-8 px-3 text-[13px] gap-1.5\",\n md: \"h-10 px-4 text-sm gap-2\",\n lg: \"h-12 px-6 text-base gap-2\",\n // Icon-only sizes. Hit target ≥ 24px (WCAG 2.5.5 floor).\n // `icon-xs` / `icon-sm` are for dense in-row action stacks where\n // `size=\"icon\"` (40×40) would visually crowd the row.\n \"icon-xs\": \"size-6 [&_svg]:size-3.5\",\n \"icon-sm\": \"size-7 [&_svg]:size-4\",\n icon: \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n /** Render as the child element via Radix `Slot` (shadcn pattern). */\n asChild?: boolean;\n loading?: boolean;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant,\n size,\n asChild = false,\n loading,\n iconLeft,\n iconRight,\n disabled,\n children,\n className,\n ...props\n },\n ref,\n) {\n const Comp = asChild ? Slot : \"button\";\n\n // Slot collapses into a single child, so when asChild we render only children.\n if (asChild) {\n return (\n <Comp ref={ref} className={cn(buttonVariants({ variant, size }), className)} {...props}>\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n disabled={disabled || loading}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {loading ? (\n <Spinner size=\"sm\" />\n ) : (\n iconLeft && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconLeft}\n </span>\n )\n )}\n {children}\n {iconRight && !loading && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconRight}\n </span>\n )}\n </Comp>\n );\n});\n\nButton.displayName = \"Button\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { DayPicker, type DayPickerProps } from \"react-day-picker\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Calendar — react-day-picker. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * <Calendar selected onSelect highlights minDate maxDate />\n *\n * Prop semantics intentionally unchanged:\n * - `selected` accepts `Date | null` (legacy null-instead-of-undefined).\n * - `onSelect` is invoked with a non-null `Date` (legacy never emitted null).\n * - `highlights` translates to react-day-picker `modifiers`.\n *\n * NEW (additive): consumers may pass any DayPickerProps (mode, disabled,\n * fromDate, toDate, etc.) by typing the component as DayPicker. This file\n * intentionally narrows the public contract; richer usage should compose\n * DayPicker directly.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type CalendarHighlightColor = \"primary\" | \"success\" | \"warning\" | \"destructive\";\n\nexport interface CalendarHighlight {\n date: Date;\n color?: CalendarHighlightColor;\n}\n\nexport interface CalendarProps extends Omit<\n DayPickerProps,\n \"mode\" | \"selected\" | \"onSelect\" | \"modifiers\" | \"modifiersClassNames\"\n> {\n selected?: Date | null;\n onSelect?: (date: Date) => void;\n highlights?: CalendarHighlight[];\n minDate?: Date;\n maxDate?: Date;\n className?: string;\n}\n\nconst HIGHLIGHT_COLORS: Record<CalendarHighlightColor, string> = {\n primary: \"after:bg-pro-fg\",\n success: \"after:bg-success-fg\",\n warning: \"after:bg-warning-fg\",\n destructive: \"after:bg-danger-fg\",\n};\n\nconst DOT_BASE =\n \"after:content-[''] after:absolute after:bottom-1 after:left-1/2 after:size-1 after:-translate-x-1/2 after:rounded-full\";\n\nexport function Calendar({\n selected,\n onSelect,\n highlights = [],\n minDate,\n maxDate,\n className,\n classNames,\n ...props\n}: CalendarProps) {\n /**\n * Bucket highlight dates by color so we can hand each color its own\n * `modifier` + `modifierClassName` pair (rdp doesn't allow per-day\n * className via the modifiers prop directly).\n */\n const { modifiers, modifiersClassNames } = React.useMemo(() => {\n const buckets: Partial<Record<CalendarHighlightColor, Date[]>> = {};\n for (const h of highlights) {\n const key = h.color ?? \"primary\";\n (buckets[key] ??= []).push(h.date);\n }\n\n const mods: Record<string, Date[]> = {};\n const modClasses: Record<string, string> = {};\n for (const [color, dates] of Object.entries(buckets) as [CalendarHighlightColor, Date[]][]) {\n const key = `assure-highlight-${color}`;\n mods[key] = dates;\n modClasses[key] = cn(\"relative\", DOT_BASE, HIGHLIGHT_COLORS[color]);\n }\n return { modifiers: mods, modifiersClassNames: modClasses };\n }, [highlights]);\n\n // Translate the legacy min/max props into rdp's `disabled` matcher form.\n const disabledMatcher = React.useMemo(() => {\n if (!minDate && !maxDate) return undefined;\n if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];\n if (minDate) return { before: minDate };\n return { after: maxDate as Date };\n }, [minDate, maxDate]);\n\n return (\n <DayPicker\n mode=\"single\"\n selected={selected ?? undefined}\n onSelect={(d) => {\n if (d) onSelect?.(d);\n }}\n disabled={disabledMatcher}\n modifiers={modifiers}\n modifiersClassNames={modifiersClassNames}\n showOutsideDays\n components={{\n Chevron: ({ orientation, className: chevClass }) => {\n const Icon = orientation === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return <Icon className={cn(\"text-fg-3 size-4\", chevClass)} aria-hidden=\"true\" />;\n },\n }}\n className={cn(\"font-body text-fg select-none\", className)}\n classNames={{\n root: \"p-3 min-w-[280px]\",\n months: \"flex flex-col gap-4\",\n month: \"space-y-3\",\n month_caption:\n \"flex h-8 items-center justify-center font-display text-[13px] font-medium text-fg\",\n caption_label: \"tabular-nums\",\n nav: \"flex items-center justify-between absolute left-3 right-3 top-3\",\n button_previous:\n \"inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n button_next:\n \"inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1\",\n weeks: \"\",\n week: \"flex w-full mt-1\",\n day: \"flex-1 text-center relative p-0\",\n day_button: cn(\n \"inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n ),\n today: \"[&_button]:font-semibold [&_button]:text-accent\",\n selected:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover [&_button]:focus-visible:bg-pro-fg\",\n outside: \"[&_button]:text-fg-4\",\n disabled: \"[&_button]:text-fg-disabled\",\n hidden: \"invisible\",\n ...classNames,\n }}\n {...props}\n />\n );\n}\n\nCalendar.displayName = \"Calendar\";\n","import { forwardRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Card — surface container. 12px radius, 1px rule border, surface bg.\n * Three variants:\n *\n * default — settled card on the page (current behavior, unchanged)\n * interactive — clickable card; hover darkens the border\n * flat — borderless / shadowless transparent surface, for nesting\n * inside Dialog/Sheet/Card without double-border\n */\n\nexport const cardVariants = cva(\"rounded-card border border-rule bg-surface text-fg shadow-quiet\", {\n variants: {\n variant: {\n default: \"\",\n interactive:\n \"cursor-pointer transition-[border-color] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none\",\n flat: \"border-0 bg-transparent shadow-none\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, CardVariants {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, variant, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(cardVariants({ variant }), className)} {...props} />;\n});\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid auto-cols-fr grid-cols-[1fr_auto] items-start gap-1.5 p-6 [.border-b]:pb-4\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n function CardTitle({ className, children, ...props }, ref) {\n return (\n <h3\n ref={ref}\n className={cn(\"text-fg text-base leading-tight font-medium\", className)}\n {...props}\n >\n {children}\n </h3>\n );\n },\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(function CardDescription({ className, ...props }, ref) {\n return <p ref={ref} className={cn(\"text-fg-3 text-sm\", className)} {...props} />;\n});\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardContent({ className, ...props }, ref) {\n return <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />;\n },\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule flex items-center gap-2 border-t p-6\", className)}\n {...props}\n />\n );\n },\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport const CardAction = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardAction({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"col-start-2 row-start-1 self-center\", className)} {...props} />\n );\n },\n);\nCardAction.displayName = \"CardAction\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, MinusIcon } from \"./icons\";\ninterface CheckboxProps extends Omit<\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n \"checked\" | \"defaultChecked\"\n> {\n /** Optional inline label rendered to the right of the box */\n label?: string;\n /** Tri-state support: true | false | \"indeterminate\" */\n checked?: boolean | \"indeterminate\";\n defaultChecked?: boolean | \"indeterminate\";\n /** Convenience: render with indeterminate state. Mirrors legacy prop. */\n indeterminate?: boolean;\n}\n\nexport const Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(function Checkbox(\n { label, indeterminate, checked, defaultChecked, className, id: providedId, ...props },\n ref,\n) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n // Resolve tri-state from either explicit `checked` or legacy `indeterminate`.\n const resolvedChecked: CheckboxPrimitive.CheckboxProps[\"checked\"] = indeterminate\n ? \"indeterminate\"\n : checked;\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={id}\n checked={resolvedChecked}\n defaultChecked={defaultChecked}\n className={cn(\n \"peer border-rule-strong bg-surface text-fg-on-pro flex size-4 shrink-0 items-center justify-center rounded-[4px] border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"hover:border-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[state=checked]:border-pro-fg data-[state=checked]:bg-pro-fg\",\n \"data-[state=indeterminate]:border-pro-fg data-[state=indeterminate]:bg-pro-fg\",\n \"disabled:bg-bg-disabled disabled:border-rule disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n {resolvedChecked === \"indeterminate\" ? (\n <MinusIcon className=\"size-3\" strokeWidth={3} aria-hidden=\"true\" />\n ) : (\n <CheckIcon className=\"size-3\" strokeWidth={3} aria-hidden=\"true\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Select — Radix UI select primitive. Modified\n *\n * Public API preserved (the convenience wrapper):\n * <Select options={...} value placeholder onValueChange searchable />\n * - the original `Select` accepted `options: SelectOption[]`. Consumers\n * across firm + portal use that shape and we keep it.\n *\n * NEW (additive, shadcn parity) — composable lower-level slots so callers\n * can build their own trees:\n * SelectTrigger, SelectValue, SelectContent, SelectItem, SelectLabel,\n * SelectSeparator, SelectGroup, SelectScrollUpButton, SelectScrollDownButton\n *\n * Note: The legacy `Select` rendered Radix-incompatible custom slots (it\n * accepted `children` as raw JSX wrapping `<SelectTrigger />` /\n * `<SelectContent />` with no props). The new `Select` keeps the\n * options-driven path; for full composition use `SelectRoot` + the\n * lower-level slots directly.\n *\n * `searchable` prop: not natively supported by Radix Select. We accept the\n * prop to preserve the API but NO-OP it (warns in dev). Migrate searchable\n * UX to <SearchSelect /> (cmdk-based combobox).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst SelectRoot = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"rounded-input border-rule-strong bg-surface font-body text-fg flex h-9 w-full items-center justify-between gap-2 border px-3 py-2 text-[13px]\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:text-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"data-[placeholder]:text-fg-4\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n \"[&>span]:line-clamp-1 [&>span]:text-left\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon\n className=\"text-fg-3 size-4 shrink-0 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] data-[state=open]:rotate-180 motion-reduce:transition-none\"\n aria-hidden=\"true\"\n />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"text-fg-3 flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" aria-hidden=\"true\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"text-fg-3 flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" aria-hidden=\"true\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop relative z-[var(--z-dropdown)] max-h-(--radix-select-content-available-height) min-w-[8rem] overflow-hidden border\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n \"motion-reduce:transition-none\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n className,\n )}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex w-full cursor-default items-center gap-2 py-1.5 pr-8 pl-2 text-[13px] outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[state=checked]:bg-pro-bg data-[state=checked]:text-pro-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"bg-rule -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\n/* ─── Convenience wrapper ───────────────────────────────────────────── */\n\n/**\n * SelectOption shape — preserved verbatim from the legacy Select:\n * { value, label, disabled?, labelSuffix? }\n */\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n labelSuffix?: React.ReactNode;\n}\n\nexport interface SelectProps {\n /** Option list. Required to preserve legacy API. */\n options: SelectOption[];\n /** Controlled value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n /** Accepted for back-compat. NO-OP — see file header for migration. */\n searchable?: boolean;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n className?: string;\n /** Forwarded to the trigger. */\n triggerClassName?: string;\n /** Forwarded to the content. */\n contentClassName?: string;\n /** aria-invalid + danger styling on trigger. */\n \"aria-invalid\"?: boolean;\n /** aria-label fallback when there is no visible label. */\n \"aria-label\"?: string;\n}\n\n/**\n * Convenience `Select` — preserved options-driven API.\n *\n * For full composition, import the lower-level slots:\n * <SelectRoot>\n * <SelectTrigger><SelectValue /></SelectTrigger>\n * <SelectContent>\n * <SelectGroup>\n * <SelectLabel>Label</SelectLabel>\n * <SelectItem value=\"…\">…</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n * </SelectRoot>\n */\nfunction Select({\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder = \"Select...\",\n searchable,\n disabled,\n name,\n required,\n className,\n triggerClassName,\n contentClassName,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n}: SelectProps) {\n if (process.env.NODE_ENV !== \"production\" && searchable) {\n console.warn(\n \"[Select] `searchable` is not supported by Radix Select. Use <SearchSelect /> for filterable selection.\",\n );\n }\n\n return (\n <SelectRoot\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n disabled={disabled}\n name={name}\n required={required}\n >\n <SelectTrigger\n aria-invalid={ariaInvalid || undefined}\n aria-label={ariaLabel ?? placeholder}\n className={cn(triggerClassName, className)}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent className={contentClassName}>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {/* flex+line-clamp can't share an element (`display: flex` vs.\n `display: -webkit-box`), so layout lives on the outer span\n and word-boundary clamp lives on the inner label span. */}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"line-clamp-1\">{opt.label}</span>\n {opt.labelSuffix}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n );\n}\nSelect.displayName = \"Select\";\n\nexport {\n Select,\n SelectRoot,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { SelectContent, SelectItem, SelectRoot, SelectTrigger, SelectValue } from \"./select\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * ClientSelect — single-client picker, built on the new Radix-based\n * `Select` primitive.\n *\n * Public API preserved verbatim:\n * <ClientSelect\n * clients value onChange\n * name error className placeholder\n * />\n *\n * Behavioural notes:\n * - `value` is `string | null`; we map null → empty SelectValue (Radix\n * requires non-empty `value` strings on items, so the cleared state\n * is represented by no selection at all).\n * - The hidden `<input name=…>` is preserved so the component still\n * submits inside form posts; it carries `value ?? \"\"`.\n * - Each option shows `label` and an optional secondary `email` line.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type ClientSelectOption = {\n id: string;\n label: string;\n email?: string;\n};\n\ninterface ClientSelectProps {\n clients: ClientSelectOption[];\n value: string | null;\n onChange: (clientId: string | null) => void;\n name?: string;\n error?: string;\n className?: string;\n placeholder?: string;\n}\n\nexport function ClientSelect({\n clients,\n value,\n onChange,\n name = \"client_id\",\n error,\n className,\n placeholder = \"Select a client...\",\n}: ClientSelectProps) {\n // Radix Select uses controlled `value: string | undefined` (no null,\n // and no \"\" allowed on items). Bridge null ↔ undefined.\n const radixValue = value ?? undefined;\n const selected = value ? clients.find((c) => c.id === value) : undefined;\n\n const handleChange = (next: string) => {\n onChange(next === \"\" ? null : next);\n };\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n {/* Hidden field — preserved so existing form posts keep working. */}\n <input type=\"hidden\" name={name} value={value ?? \"\"} />\n\n <SelectRoot value={radixValue} onValueChange={handleChange}>\n <SelectTrigger aria-invalid={!!error || undefined} aria-label={placeholder}>\n {/* Override Radix's default `ItemText` mirroring. Each option below\n renders a two-line `label + email` block; without this override\n Radix portals the entire block into the trigger, breaking the\n fixed-height pill on narrow widths (name wraps, email overflows\n below the border). Trigger shows label only; the dropdown row\n keeps the email for context. */}\n <SelectValue placeholder={placeholder}>{selected?.label ?? \"\"}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {clients.length === 0 ? (\n <div className=\"text-fg-3 px-3 py-6 text-center text-xs\">No clients yet</div>\n ) : (\n clients.map((c) => (\n <SelectItem key={c.id} value={c.id}>\n {/* line-clamp-1 on each line so long client names + engagement\n labels clip at a word boundary instead of mid-word — e.g.\n \"2025 Business Tax Organizer — …\" rather than \"… Coasta…\". */}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-fg line-clamp-1 text-[13px] font-medium\">{c.label}</span>\n {c.email && <span className=\"text-fg-3 line-clamp-1 text-xs\">{c.email}</span>}\n </span>\n </SelectItem>\n ))\n )}\n </SelectContent>\n </SelectRoot>\n\n {error && (\n <p role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nClientSelect.displayName = \"ClientSelect\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Collapsible */\n/* Thin wrapper over Radix's @radix-ui/react-collapsible primitives. */\n/* -------------------------------------------------------------------------- */\n\ntype CollapsibleProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>;\n\nexport const Collapsible = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Root>,\n CollapsibleProps\n>(function Collapsible({ className, ...props }, ref) {\n return <CollapsiblePrimitive.Root ref={ref} className={cn(className)} {...props} />;\n});\nCollapsible.displayName = CollapsiblePrimitive.Root.displayName;\n\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>;\n\nexport const CollapsibleTrigger = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Trigger>,\n CollapsibleTriggerProps\n>(function CollapsibleTrigger({ className, ...props }, ref) {\n return (\n <CollapsiblePrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex w-full items-center\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n />\n );\n});\nCollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName;\n\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>;\n\nexport const CollapsibleContent = React.forwardRef<\n React.ElementRef<typeof CollapsiblePrimitive.Content>,\n CollapsibleContentProps\n>(function CollapsibleContent({ className, ...props }, ref) {\n return (\n <CollapsiblePrimitive.Content\n ref={ref}\n className={cn(\n \"overflow-hidden\",\n \"data-[state=closed]:animate-[collapsible-up_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"data-[state=open]:animate-[collapsible-down_var(--duration-overlay)_var(--ease-out-quart)]\",\n \"motion-reduce:animate-none\",\n className,\n )}\n {...props}\n />\n );\n});\nCollapsibleContent.displayName = CollapsiblePrimitive.Content.displayName;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon } from \"./icons\";\n/**\n * ComingSoon — placeholder pattern for unreleased modules. Pro-tinted icon\n * halo, dashed Assure border, \"In Development\" pill.\n *\n * Public API preserved: `icon`, `title`, `description`, `features`.\n */\nexport interface ComingSoonProps extends React.HTMLAttributes<HTMLDivElement> {\n icon: React.ReactNode;\n title: string;\n description: string;\n features: string[];\n}\n\nexport const ComingSoon = forwardRef<HTMLDivElement, ComingSoonProps>(function ComingSoon(\n { icon, title, description, features, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center justify-center px-6 py-16\", className)}\n {...props}\n >\n <div\n className={cn(\n \"rounded-card border-rule-strong w-full max-w-lg border border-dashed\",\n \"bg-surface shadow-quiet p-10 text-center\",\n )}\n >\n {/* Eyebrow */}\n <div className=\"text-pro-fg mb-5 font-mono text-[11px] font-normal tracking-[0.14em] uppercase\">\n Coming soon\n </div>\n\n {/* Pro-tinted icon halo */}\n <div\n className={cn(\n \"mx-auto mb-4 flex size-12 items-center justify-center\",\n \"rounded-icon bg-pro-bg text-pro-fg [&>svg]:size-6\",\n )}\n >\n {icon}\n </div>\n\n <h1 className=\"font-display text-fg text-xl font-medium tracking-[-0.022em]\">{title}</h1>\n <p className=\"text-fg-3 mt-1.5 text-sm\">{description}</p>\n\n <ul className=\"mt-6 space-y-2 text-left\">\n {features.map((feature) => (\n <li key={feature} className=\"text-fg-2 flex items-center gap-2 text-sm\">\n <CheckIcon\n className=\"text-success-fg size-3.5 shrink-0\"\n strokeWidth={2.5}\n aria-hidden=\"true\"\n />\n {feature}\n </li>\n ))}\n </ul>\n\n <div className=\"mt-6\">\n <span\n className={cn(\n \"rounded-pill inline-flex items-center border px-2.5 py-0.5\",\n \"text-xs font-medium\",\n \"bg-pro-bg text-pro-fg border-[color:var(--color-pro-bg-active)]\",\n )}\n >\n In Development\n </span>\n </div>\n </div>\n </div>\n );\n});\n\nComingSoon.displayName = \"ComingSoon\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Dialog — Radix UI overlay primitive. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle,\n * DialogDescription, DialogFooter, DialogClose\n *\n * NEW (additive): DialogPortal, DialogOverlay are also exported for\n * advanced composition (matches shadcn convention).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst dialogSizeStyles = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n full: \"max-w-[calc(100vw-2rem)]\",\n} as const;\n\ninterface DialogContentProps extends React.ComponentPropsWithoutRef<\n typeof DialogPrimitive.Content\n> {\n size?: keyof typeof dialogSizeStyles;\n /**\n * If false, the built-in close button is hidden. Default: true.\n * Use `<DialogClose>` inside content to render your own close UI.\n */\n showCloseButton?: boolean;\n}\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(({ size = \"md\", showCloseButton = true, className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed top-1/2 left-1/2 z-[var(--z-modal)] w-full\",\n \"scrollbar-thin max-h-[calc(100vh-6rem)] overflow-y-auto\",\n \"rounded-card border-rule bg-surface shadow-pop border p-6\",\n \"font-body text-fg\",\n // motion: scale + fade keyed off data-state\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:-translate-y-[48%] data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:-translate-y-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n dialogSizeStyles[size],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 inline-flex size-7 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:pointer-events-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\n/* ─── DialogClose ────────────────────────────────────────────────────────\n * Backwards-compat note: the prior implementation rendered an absolute-\n * positioned close button by default and styled it as such. The new\n * DialogContent renders that close affordance built-in. The DialogClose\n * primitive is now a transparent wrapper around `Radix.Close`, used as a\n * dismiss action inside DialogFooter etc. (e.g. <DialogClose><Button …/></>).\n * ───────────────────────────────────────────────────────────────────── */\nconst DialogClose = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Close>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Close ref={ref} className={cn(className)} {...props} />\n));\nDialogClose.displayName = \"DialogClose\";\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"mb-4 flex flex-col gap-1.5 pr-8\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-fg-3 text-sm\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\n\nimport { cn } from \"../lib/cn\";\nimport { Dialog, DialogPortal, DialogOverlay } from \"./dialog\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\n\nimport { SearchIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * CommandPalette — `cmdk` rendered inside the Dialog primitive. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * CommandPalette({ items, open, onOpenChange, placeholder })\n * export type { CommandItem }\n *\n * Behavior preserved:\n * - Cmd/Ctrl+K toggles open (when uncontrolled, or always)\n * - Up/Down/Enter/Escape navigation (provided by `cmdk`)\n * - Filter against label, description, group, and keywords\n * - Grouped item rendering with sticky group headings\n * - Optional per-item shortcut + icon\n * - Dismiss-on-select\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface CommandItem {\n id: string;\n label: string;\n description?: string;\n group?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n onSelect: () => void;\n keywords?: string[];\n}\n\ninterface CommandPaletteProps {\n items: CommandItem[];\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n}\n\nexport type { CommandItem };\n\n/* ── Kbd token ─────────────────────────────────────────────────────── */\nconst kbdClass = cn(\n \"inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]\",\n \"font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon\",\n \"[border-bottom-width:1.5px]\",\n);\n\n/* ── Group items, preserving insertion order ────────────────────────── */\nfunction groupItems(items: CommandItem[]): Array<[string, CommandItem[]]> {\n const groups = new Map<string, CommandItem[]>();\n for (const item of items) {\n const key = item.group ?? \"\";\n const existing = groups.get(key);\n if (existing) existing.push(item);\n else groups.set(key, [item]);\n }\n return Array.from(groups.entries());\n}\n\nexport function CommandPalette({\n items,\n open: controlledOpen,\n onOpenChange,\n placeholder = \"Type a command or search...\",\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n // Cmd/Ctrl + K toggles the palette globally.\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n setOpen(!open);\n }\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, setOpen]);\n\n const grouped = groupItems(items);\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n aria-label=\"Command palette\"\n className={cn(\n \"fixed top-[20vh] left-1/2 z-[var(--z-modal)] w-full max-w-xl -translate-x-1/2\",\n \"rounded-card border-rule bg-surface shadow-pop overflow-hidden border\",\n \"font-body text-fg\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:-translate-x-1/2 data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:-translate-x-1/2 data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">Command palette</DialogPrimitive.Title>\n <DialogPrimitive.Description className=\"sr-only\">\n Search and run commands\n </DialogPrimitive.Description>\n <CommandPrimitive\n label=\"Command palette\"\n className={cn(\n \"flex flex-col\",\n // Hide a group's heading when the group has no visible children\n \"[&_[cmdk-group]:not([hidden])_~_[cmdk-group]]:border-t-0\",\n )}\n >\n {/* ── Search input ──────────────────────────────────── */}\n <div className=\"border-rule relative border-b\">\n <SearchIcon\n className=\"text-fg-3 pointer-events-none absolute top-1/2 left-4 size-4 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n placeholder={placeholder}\n className={cn(\n \"text-fg w-full border-none bg-transparent py-3.5 pr-4 pl-11 text-sm\",\n \"placeholder:text-fg-3 outline-none\",\n \"focus:ring-0 focus:outline-none focus-visible:ring-0\",\n )}\n />\n </div>\n\n {/* ── Results ───────────────────────────────────────── */}\n <CommandPrimitive.List\n className={cn(\n \"scrollbar-thin max-h-[380px] overflow-y-auto py-1\",\n \"[&_[cmdk-group-heading]]:px-4 [&_[cmdk-group-heading]]:py-1.5\",\n \"[&_[cmdk-group-heading]]:font-mono [&_[cmdk-group-heading]]:text-[11px]\",\n \"[&_[cmdk-group-heading]]:tracking-[0.14em] [&_[cmdk-group-heading]]:uppercase\",\n \"[&_[cmdk-group-heading]]:text-fg-3\",\n )}\n >\n <CommandPrimitive.Empty className=\"text-fg-3 py-8 text-center text-sm\">\n No results found.\n </CommandPrimitive.Empty>\n\n {grouped.map(([group, groupItemsList]) => (\n <CommandPrimitive.Group\n key={group || \"_ungrouped\"}\n heading={group || undefined}\n className=\"py-1\"\n >\n {groupItemsList.map((item) => (\n <CommandPrimitive.Item\n key={item.id}\n value={`${item.id} ${item.label} ${item.description ?? \"\"} ${item.group ?? \"\"} ${(item.keywords ?? []).join(\" \")}`}\n keywords={item.keywords}\n onSelect={() => {\n item.onSelect();\n setOpen(false);\n }}\n className={cn(\n \"rounded-btn mx-1.5 flex cursor-pointer items-center gap-3 px-3 py-2\",\n \"text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none motion-reduce:transition-none\",\n \"data-[selected=true]:bg-overlay-hover\",\n \"aria-selected:bg-overlay-hover\",\n )}\n >\n {item.icon && (\n <div\n className={cn(\n \"rounded-icon flex size-8 shrink-0 items-center justify-center\",\n item.group === \"Create\" ? \"bg-pro-bg text-pro-fg\" : \"bg-bg-2 text-fg-3\",\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-fg text-sm font-medium\">{item.label}</div>\n {item.description && (\n <div className=\"text-fg-3 line-clamp-1 text-xs\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && (\n <kbd className={cn(kbdClass, \"hidden shrink-0 sm:inline-flex\")}>\n {item.shortcut}\n </kbd>\n )}\n </CommandPrimitive.Item>\n ))}\n </CommandPrimitive.Group>\n ))}\n </CommandPrimitive.List>\n\n {/* ── Footer keyboard hints ─────────────────────────── */}\n <div className=\"border-rule bg-bg-2/40 text-fg-3 flex flex-wrap items-center gap-4 border-t px-4 py-2.5\">\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>↑↓</kbd>\n Navigate\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>↵</kbd>\n Select\n </span>\n <span className=\"flex items-center gap-1.5\">\n <kbd className={kbdClass}>esc</kbd>\n Close\n </span>\n </div>\n </CommandPrimitive>\n </DialogPrimitive.Content>\n </DialogPortal>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"./alert-dialog\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * ConfirmActionButton — drop-in confirmation gate around any trigger.\n *\n * Composes AlertDialog + a caller-supplied trigger to retire native\n * window.confirm() and the ad-hoc \"useState + dialog + handler\" boilerplate\n * that recurs around destructive actions. Pressure-tested against 8\n * unrelated consumer sites before absorption.\n *\n * The async onConfirm + internal pending state keeps both Action and\n * Cancel disabled mid-await — preventing the double-fire bug where a\n * user clicks Confirm, sees no immediate feedback, and clicks again.\n *\n * <ConfirmActionButton\n * trigger={<Button variant=\"destructive\">Cancel invoice</Button>}\n * title=\"Cancel this invoice?\"\n * description=\"This cannot be undone. The invoice will be marked cancelled.\"\n * confirmLabel=\"Cancel invoice\"\n * cancelLabel=\"Keep invoice\"\n * onConfirm={handleCancel}\n * />\n *\n * If onConfirm throws, the dialog stays open so the consumer can surface\n * the error (e.g. via Toast). The dialog also refuses to close via ESC,\n * overlay click, or Cancel while a confirmation is in flight.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface ConfirmActionButtonProps {\n /** Element rendered as the dialog trigger via `<AlertDialogTrigger asChild>`. */\n trigger: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n /** Awaited; dialog closes after resolve, stays open on reject. */\n onConfirm: () => void | Promise<void>;\n /** When true (default) the Action button uses the destructive palette;\n * when false it uses the Pro primary palette (bg-pro-fg). */\n destructive?: boolean;\n /** Forwarded to AlertDialogContent for one-off layout overrides. */\n contentClassName?: string;\n /** Controlled open state for menu-hoisted or externally triggered dialogs. */\n open?: boolean;\n /** Initial open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Called when the dialog requests an open-state change. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function ConfirmActionButton({\n trigger,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n destructive = true,\n contentClassName,\n open,\n defaultOpen = false,\n onOpenChange,\n}: ConfirmActionButtonProps) {\n const isControlled = open !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const resolvedOpen = isControlled ? open : uncontrolledOpen;\n const [pending, setPending] = React.useState(false);\n\n const setDialogOpen = React.useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [isControlled, onOpenChange],\n );\n\n const handleConfirm = async (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setPending(true);\n try {\n await onConfirm();\n setDialogOpen(false);\n } finally {\n setPending(false);\n }\n };\n\n return (\n <AlertDialog\n open={resolvedOpen}\n onOpenChange={(next) => {\n if (pending) return;\n setDialogOpen(next);\n }}\n >\n <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>\n <AlertDialogContent className={contentClassName}>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n {description && <AlertDialogDescription>{description}</AlertDialogDescription>}\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={pending}>{cancelLabel}</AlertDialogCancel>\n <AlertDialogAction\n disabled={pending}\n onClick={handleConfirm}\n className={cn(\n !destructive &&\n \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover active:bg-pro-active\",\n )}\n >\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * ContextMenu — Radix UI context-menu primitive. Modified\n *\n * Public API preserved:\n * ContextMenu, ContextMenuTrigger, ContextMenuContent,\n * ContextMenuItem (with `destructive` prop), ContextMenuSeparator\n *\n * NEW (additive, shadcn parity):\n * ContextMenuLabel, ContextMenuGroup, ContextMenuPortal,\n * ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent,\n * ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem,\n * ContextMenuShortcut\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst ContextMenu = ContextMenuPrimitive.Root;\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nconst ContextMenuGroup = ContextMenuPrimitive.Group;\nconst ContextMenuPortal = ContextMenuPrimitive.Portal;\nconst ContextMenuSub = ContextMenuPrimitive.Sub;\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[state=open]:bg-bg-2 data-[state=open]:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"text-fg-3 ml-auto size-4\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.SubTrigger>\n));\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n // Portal the sub-content to the body. The parent Content keeps a persistent\n // `scale-100` transform (its open-state animation), which makes it the\n // containing block for `position: fixed` descendants — and its\n // `overflow-hidden` would then clip this Popper-positioned flyout to nothing.\n // Portaling escapes both the transformed ancestor and the clip.\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n));\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;\n\ninterface ContextMenuItemProps extends React.ComponentPropsWithoutRef<\n typeof ContextMenuPrimitive.Item\n> {\n destructive?: boolean;\n inset?: boolean;\n}\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n ContextMenuItemProps\n>(({ className, destructive, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n destructive && \"text-danger-fg focus:bg-danger-bg focus:text-danger-fg\",\n className,\n )}\n {...props}\n />\n));\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n));\nContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-bg-2 focus:text-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" aria-hidden=\"true\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n));\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"text-fg-3 px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"bg-rule -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;\n\nconst ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"text-fg-4 ml-auto font-mono text-[11px] tracking-wider\", className)}\n {...props}\n />\n);\nContextMenuShortcut.displayName = \"ContextMenuShortcut\";\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n","\"use client\";\n\nimport { forwardRef, useCallback, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, CopyIcon } from \"./icons\";\ninterface CopyButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n feedbackDuration?: number;\n}\n\n/**\n * CopyButton — single-click clipboard copy with check-mark feedback.\n * Renders the lucide `Copy` icon by default; pass `children` to override.\n */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n { value, feedbackDuration = 2000, className, children, ...props },\n ref,\n) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), feedbackDuration);\n }, [value, feedbackDuration]);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n \"rounded-icon text-fg-3 inline-flex items-center justify-center p-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"motion-reduce:transition-none\",\n className,\n )}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n {...props}\n >\n {copied ? (\n <CheckIcon size={16} aria-hidden=\"true\" />\n ) : (\n (children ?? <CopyIcon size={16} aria-hidden=\"true\" />)\n )}\n </button>\n );\n});\n\nCopyButton.displayName = \"CopyButton\";\n","import { format, parse, isValid } from \"date-fns\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Shared date helpers + placeholder constants used by DatePicker and\n * DateRangePicker. Kept narrow on purpose — anything richer (date math,\n * locale formatting, business-week logic) belongs in the consumer, not\n * the design system.\n * ─────────────────────────────────────────────────────────────────────── */\n\n/** Default placeholder for day-mode inputs (`MM/DD/YYYY`). */\nexport const DATE_DISPLAY_PLACEHOLDER = \"MM/DD/YYYY\";\n\n/** Default placeholder for year-mode inputs (`YYYY`). */\nexport const YEAR_DISPLAY_PLACEHOLDER = \"YYYY\";\n\nconst ISO_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst DISPLAY_RE = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\n\n/** ISO `YYYY-MM-DD` → display `MM/DD/YYYY`. Returns `\"\"` for empty/invalid. */\nexport function isoToDisplay(iso: string | undefined | null): string {\n if (!iso) return \"\";\n const m = ISO_RE.exec(iso);\n if (!m) return \"\";\n return `${m[2]}/${m[3]}/${m[1]}`;\n}\n\n/** Display `MM/DD/YYYY` → ISO `YYYY-MM-DD`. Returns `\"\"` for invalid. */\nexport function displayToIso(display: string): string {\n const m = DISPLAY_RE.exec(display);\n if (!m) return \"\";\n const [, mm, dd, yyyy] = m;\n const parsed = parse(`${mm}/${dd}/${yyyy}`, \"MM/dd/yyyy\", new Date());\n if (!isValid(parsed)) return \"\";\n if (\n parsed.getFullYear() !== Number(yyyy) ||\n parsed.getMonth() + 1 !== Number(mm) ||\n parsed.getDate() !== Number(dd)\n ) {\n return \"\";\n }\n return `${yyyy}-${mm}-${dd}`;\n}\n\n/** Apply the `MM/DD/YYYY` mask while the user types. */\nexport function applyMask(input: string): string {\n const digits = input.replace(/\\D/g, \"\").slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\n/** ISO `YYYY-MM-DD` → JS Date (in local timezone). Returns `undefined` for invalid. */\nexport function isoToDate(iso: string): Date | undefined {\n if (!iso) return undefined;\n const parsed = parse(iso, \"yyyy-MM-dd\", new Date());\n return isValid(parsed) ? parsed : undefined;\n}\n\n/** JS Date → ISO `YYYY-MM-DD`. */\nexport function dateToIso(d: Date): string {\n return format(d, \"yyyy-MM-dd\");\n}\n\n/** ISO `YYYY-MM-DD` → year part `YYYY`. Returns `\"\"` if no leading year. */\nexport function isoToYear(iso: string | undefined | null): string {\n if (!iso) return \"\";\n const m = /^(\\d{4})/.exec(iso);\n return m ? m[1] : \"\";\n}\n\n/** Year `YYYY` → ISO `YYYY-01-01`. Returns `\"\"` if not 4 digits. */\nexport function yearToIso(year: string): string {\n return /^\\d{4}$/.test(year) ? `${year}-01-01` : \"\";\n}\n\n/** Apply the `YYYY` mask while the user types. */\nexport function applyYearMask(input: string): string {\n return input.replace(/\\D/g, \"\").slice(0, 4);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Popover — Radix UI popover primitive. Modified\n *\n * Public API preserved:\n * Popover, PopoverTrigger, PopoverContent\n *\n * NEW (additive): PopoverAnchor, PopoverPortal, PopoverClose are\n * exported for advanced composition.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nconst PopoverPortal = PopoverPrimitive.Portal;\nconst PopoverClose = PopoverPrimitive.Close;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", side = \"bottom\", sideOffset = 8, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-72 border p-4 outline-none\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverAnchor, PopoverPortal, PopoverClose, PopoverContent };\n","\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Calendar } from \"./calendar\";\nimport {\n applyMask,\n applyYearMask,\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n displayToIso,\n isoToDate,\n isoToDisplay,\n isoToYear,\n YEAR_DISPLAY_PLACEHOLDER,\n yearToIso,\n} from \"./date-utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * DatePicker — Popover + Calendar + masked text input.\n *\n * Public API preserved EXACTLY:\n * - `value` / `defaultValue` are ISO `YYYY-MM-DD` strings (what 988 firm +\n * 174 portal call sites pass today).\n * - The displayed value in the trigger input is `MM/DD/YYYY`.\n * - `onChange` is invoked with a synthetic event of shape\n * `{ target: { name?: string; value: string } }` where `value` is the\n * ISO string. Call sites depend on this synthetic shape — do NOT change.\n * - `min` / `max` are ISO strings — gate the calendar grid.\n * - A hidden `<input name>` mirrors the ISO value for native form posts.\n * - `forwardRef<HTMLInputElement>` points to the visible text input.\n *\n * NEW (additive): `picker?: \"day\" | \"year\"` (default `\"day\"`).\n * - `\"year\"` swaps the calendar popover for a 12-cell year grid.\n * - The visible text input shows `YYYY` and accepts 4 digits.\n * - `value` / `onChange` still travel as ISO `YYYY-MM-DD` (the year mode\n * normalises to Jan 1 of the chosen year — e.g. picking 2025 emits\n * `\"2025-01-01\"`) so downstream date math is unchanged.\n * - `min` / `max` still gate selection by their YEAR component.\n *\n * Re-exports the legacy ISO/display helpers + the placeholder constant.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface DatePickerProps {\n value?: string;\n defaultValue?: string;\n onChange?: (event: { target: { name?: string; value: string } }) => void;\n name?: string;\n id?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n className?: string;\n min?: string;\n max?: string;\n \"aria-label\"?: string;\n /**\n * Picker mode. `\"day\"` (default) opens the full month calendar. `\"year\"`\n * opens a year-only grid and stores the picked year as `YYYY-01-01` in\n * the ISO value (so the onChange contract stays a `YYYY-MM-DD` string).\n */\n picker?: \"day\" | \"year\";\n /**\n * Custom label formatter for year-mode cells AND the trigger input. Only\n * read when `picker=\"year\"`. Receives the numeric year and returns the\n * string to display. Use this for fiscal-year labels (e.g. `(y) => `${y}-${String(y+1).slice(-2)}``\n * for a \"2024-25\" rendering). The underlying `value`/`onChange` ISO\n * contract stays `YYYY-01-01` regardless of label format — only the\n * visible text changes.\n */\n formatLabel?: (year: number) => string;\n /**\n * Calendar glyph position inside the input. Default `\"right\"`. When\n * `\"left\"`, the icon sits on the left edge and the popover aligns to\n * start so the calendar opens beneath the visible glyph.\n */\n iconPosition?: \"left\" | \"right\";\n}\n\n// Re-export the date helpers so existing consumers (e.g.\n// `import { isoToDisplay, DATE_DISPLAY_PLACEHOLDER } from \"./date-picker\"`)\n// keep working. Implementations live in `./date-utils` so DatePicker and\n// DateRangePicker can share them without duplication.\nexport {\n applyMask,\n applyYearMask,\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n displayToIso,\n isoToDate,\n isoToDisplay,\n isoToYear,\n YEAR_DISPLAY_PLACEHOLDER,\n yearToIso,\n} from \"./date-utils\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * YearGrid — internal year picker rendered inside DatePicker's popover when\n * `picker=\"year\"`. 12-year window centered on the selected year (or current\n * year), with prev/next chevrons to page through decades. Mirrors Calendar's\n * shell — same nav row, same selected-cell tokens (`bg-pro-fg` /\n * `text-fg-on-pro`), same disabled treatment.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface YearGridProps {\n selected?: number;\n onSelect: (year: number) => void;\n minYear?: number;\n maxYear?: number;\n /** Optional consumer-provided label formatter (e.g. fiscal-year \"2024-25\"). */\n formatLabel?: (year: number) => string;\n /**\n * When true, focus the selected year (or today's year if none selected)\n * on mount. Mirrors the day-Calendar's autoFocus behaviour so keyboard\n * Tab/Enter activation works the moment the popover opens. The roving-\n * tabindex / arrow-key navigation of a true `role=\"grid\"` isn't wired\n * here — Tab moves between cells in DOM order, which is good enough for\n * a 12-cell window.\n */\n autoFocus?: boolean;\n}\n\nfunction YearGrid({ selected, onSelect, minYear, maxYear, formatLabel, autoFocus }: YearGridProps) {\n const today = new Date().getFullYear();\n const anchor = selected ?? today;\n // Page of 12 years, with the anchor year on the third row (so the user\n // sees ~5 future + 6 past around the current pick). Year % 12 keeps page\n // boundaries stable.\n const [startYear, setStartYear] = useState(() => anchor - (anchor % 12));\n\n const years = Array.from({ length: 12 }, (_, i) => startYear + i);\n const canGoPrev = !minYear || startYear > minYear;\n const canGoNext = !maxYear || startYear + 11 < maxYear;\n\n // Focus target: the selected year if it's on the current page, else the\n // current year if it's on the current page, else the first cell.\n const focusYear = selected && years.includes(selected)\n ? selected\n : years.includes(today)\n ? today\n : years[0];\n const focusRef = useRef<HTMLButtonElement | null>(null);\n useEffect(() => {\n if (autoFocus) {\n const raf = requestAnimationFrame(() => focusRef.current?.focus());\n return () => cancelAnimationFrame(raf);\n }\n }, [autoFocus]);\n\n return (\n <div className=\"font-body text-fg min-w-[280px] p-3 select-none\">\n <div className=\"relative mb-3 flex h-8 items-center justify-center\">\n <button\n type=\"button\"\n onClick={() => setStartYear((y) => y - 12)}\n disabled={!canGoPrev}\n aria-label=\"Previous decade\"\n className={cn(\n \"rounded-input text-fg-3 absolute left-0 inline-flex size-7 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n )}\n >\n <ChevronLeftIcon className=\"text-fg-3 size-4\" aria-hidden=\"true\" />\n </button>\n <span className=\"font-display text-fg text-[13px] font-medium tabular-nums\">\n {startYear} – {startYear + 11}\n </span>\n <button\n type=\"button\"\n onClick={() => setStartYear((y) => y + 12)}\n disabled={!canGoNext}\n aria-label=\"Next decade\"\n className={cn(\n \"rounded-input text-fg-3 absolute right-0 inline-flex size-7 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n )}\n >\n <ChevronRightIcon className=\"text-fg-3 size-4\" aria-hidden=\"true\" />\n </button>\n </div>\n {/* role=\"group\" + aria-pressed on cells — NOT role=\"grid\".\n A true `grid` requires nested `row` → `gridcell` structure plus\n roving-tabindex + arrow-key handlers, none of which apply to a\n flat 12-button picker. Using `group` keeps the axe addon clean\n while preserving the selection semantics consumers need. */}\n <div role=\"group\" aria-label=\"Pick a year\" className=\"grid grid-cols-3 gap-1.5\">\n {years.map((year) => {\n const isSelected = year === selected;\n const isToday = year === today;\n const isFocusTarget = year === focusYear;\n const isDisabled = (minYear !== undefined && year < minYear) || (maxYear !== undefined && year > maxYear);\n return (\n <button\n key={year}\n ref={isFocusTarget ? focusRef : undefined}\n type=\"button\"\n onClick={() => !isDisabled && onSelect(year)}\n disabled={isDisabled}\n aria-pressed={isSelected}\n aria-current={isToday ? \"date\" : undefined}\n className={cn(\n \"rounded-input font-mono text-[13px] tabular-nums\",\n \"inline-flex h-10 items-center justify-center\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:text-fg-disabled disabled:pointer-events-none disabled:cursor-not-allowed\",\n isToday && !isSelected && \"text-accent font-semibold\",\n isSelected && \"bg-pro-fg text-fg-on-pro hover:bg-pro-hover focus-visible:bg-pro-fg\",\n )}\n >\n {formatLabel ? formatLabel(year) : year}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n name,\n id: providedId,\n label,\n error,\n disabled,\n required,\n autoFocus,\n placeholder,\n className,\n min,\n max,\n \"aria-label\": ariaLabel,\n picker = \"day\",\n formatLabel,\n iconPosition = \"right\",\n },\n ref,\n) {\n const isYearMode = picker === \"year\";\n // When the consumer formats year labels (e.g. fiscal years \"2024-25\"), the\n // input becomes read-only — we can't reliably parse arbitrary label\n // strings back to a year. Otherwise (plain \"2024\" labels) typing works.\n const hasCustomYearLabel = isYearMode && !!formatLabel;\n const effectivePlaceholder =\n placeholder ?? (isYearMode ? YEAR_DISPLAY_PLACEHOLDER : DATE_DISPLAY_PLACEHOLDER);\n // Picker-specific helpers — `display` is what the user types/sees in the\n // input; `iso` is what travels via onChange. Day mode: MM/DD/YYYY <-> YYYY-MM-DD.\n // Year mode: YYYY <-> YYYY-01-01.\n const toDisplayFromIso = isYearMode\n ? (iso: string | undefined | null) => {\n const y = isoToYear(iso);\n if (!y) return \"\";\n return formatLabel ? formatLabel(Number(y)) : y;\n }\n : isoToDisplay;\n const toIsoFromDisplay = isYearMode ? yearToIso : displayToIso;\n const maskInput = isYearMode ? applyYearMask : applyMask;\n\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const isControlled = value !== undefined;\n\n const [internalIso, setInternalIso] = useState<string>(\n isControlled ? (value ?? \"\") : (defaultValue ?? \"\"),\n );\n const [display, setDisplay] = useState<string>(() =>\n toDisplayFromIso(isControlled ? value : defaultValue),\n );\n const [open, setOpen] = useState(false);\n\n // React-to-controlled-prop changes without a sync useEffect.\n const [lastPropValue, setLastPropValue] = useState<string | undefined>(value);\n if (isControlled && value !== lastPropValue) {\n setLastPropValue(value);\n const nextIso = value ?? \"\";\n setInternalIso(nextIso);\n if (toIsoFromDisplay(display) !== nextIso) {\n setDisplay(toDisplayFromIso(nextIso));\n }\n }\n\n const iso = isControlled ? (value ?? \"\") : internalIso;\n\n const textRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(ref, () => textRef.current as HTMLInputElement);\n\n const emit = useCallback(\n (nextIso: string) => {\n onChange?.({ target: { name, value: nextIso } });\n },\n [name, onChange],\n );\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskInput(e.target.value);\n setDisplay(masked);\n const nextIso = toIsoFromDisplay(masked);\n if (nextIso !== iso) {\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n } else if (!nextIso && iso) {\n if (!isControlled) setInternalIso(\"\");\n emit(\"\");\n }\n },\n [iso, isControlled, emit, maskInput, toIsoFromDisplay],\n );\n\n const handleCalendarSelect = useCallback(\n (d: Date) => {\n const nextIso = dateToIso(d);\n setDisplay(isoToDisplay(nextIso));\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n setOpen(false);\n // Restore focus to the text field for keyboard continuity.\n requestAnimationFrame(() => textRef.current?.focus());\n },\n [isControlled, emit],\n );\n\n const handleYearSelect = useCallback(\n (year: number) => {\n const nextIso = yearToIso(String(year));\n setDisplay(formatLabel ? formatLabel(year) : String(year));\n if (!isControlled) setInternalIso(nextIso);\n emit(nextIso);\n setOpen(false);\n requestAnimationFrame(() => textRef.current?.focus());\n },\n [isControlled, emit, formatLabel],\n );\n\n const minDate = isoToDate(min ?? \"\");\n const maxDate = isoToDate(max ?? \"\");\n const selectedDate = isoToDate(iso);\n const selectedYear = isYearMode ? Number(isoToYear(iso)) || undefined : undefined;\n const minYear = min ? Number(isoToYear(min)) : undefined;\n const maxYear = max ? Number(isoToYear(max)) : undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={textRef}\n id={id}\n type=\"text\"\n inputMode={hasCustomYearLabel ? undefined : \"numeric\"}\n autoComplete=\"off\"\n value={display}\n onChange={handleTextChange}\n placeholder={effectivePlaceholder}\n disabled={disabled}\n required={required}\n // formatLabel year-mode: the visible string may not be parseable\n // (e.g. \"2024-25\"), so prevent typing and route all picks through\n // the popover grid. Click anywhere on the input still opens it.\n readOnly={hasCustomYearLabel}\n onClick={hasCustomYearLabel && !disabled ? () => setOpen(true) : undefined}\n // Forwarding consumer-supplied autoFocus on a date input is intentional\n // (e.g. inline edit cells, return-from-modal flows). Decision lives at the call site.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={ariaLabel}\n className={cn(\n \"rounded-input bg-surface text-fg flex h-9 w-full border font-mono text-[13px] tabular-nums\",\n \"border-rule-strong py-2\",\n iconPosition === \"left\" ? \"pl-10 pr-3\" : \"pl-3 pr-10\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:font-body placeholder:text-fg-4\",\n \"focus-visible:border-accent focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n hasCustomYearLabel && \"cursor-pointer\",\n )}\n />\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n tabIndex={-1}\n aria-label=\"Open calendar\"\n className={cn(\n \"text-fg-3 absolute inset-y-0 flex w-10 cursor-pointer items-center justify-center\",\n iconPosition === \"left\" ? \"left-0 rounded-l-input\" : \"right-0 rounded-r-input\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n )}\n >\n <CalendarIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={iconPosition === \"left\" ? \"start\" : \"end\"}\n sideOffset={6}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {isYearMode ? (\n <YearGrid\n selected={selectedYear}\n onSelect={handleYearSelect}\n minYear={minYear}\n maxYear={maxYear}\n formatLabel={formatLabel}\n // Mirror the day-Calendar's autoFocus so Tab/Enter and the\n // selected-cell focus ring work the moment the popover\n // opens. PopoverContent's onOpenAutoFocus is prevented so\n // focus would otherwise stay on the trigger.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n />\n ) : (\n <Calendar\n selected={selectedDate ?? null}\n onSelect={handleCalendarSelect}\n minDate={minDate}\n maxDate={maxDate}\n defaultMonth={selectedDate ?? minDate ?? undefined}\n // Anchor keyboard focus on a day cell so ←/→/↑/↓ navigate the\n // grid the moment the popover opens. Without this the popover\n // suppresses Radix's auto-focus (so the input keeps focus) and\n // arrow keys do nothing until the user clicks a day.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n />\n )}\n </PopoverContent>\n </Popover>\n {name && <input type=\"hidden\" name={name} value={iso} />}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n});\n\nDatePicker.displayName = \"DatePicker\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useId, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\n\nimport { cn } from \"../lib/cn\";\nimport {\n DATE_DISPLAY_PLACEHOLDER,\n dateToIso,\n isoToDate,\n isoToDisplay,\n} from \"./date-utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from \"./icons\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * DateRangePicker — single read-only input + Popover + range Calendar.\n *\n * Sibling of `DatePicker`, but for a `{ from, to }` pair. Renders as ONE\n * input-shaped trigger displaying \"MM/DD/YYYY – MM/DD/YYYY\" (or a\n * placeholder). Clicking the trigger opens a two-month side-by-side\n * range calendar; the user picks both edges in the calendar — typing is\n * not supported in this primitive (use `DatePicker` x2 if you need typed\n * input on each edge).\n *\n * Public API:\n * - `value` — `{ from?: string; to?: string }` controlled value\n * (ISO `YYYY-MM-DD` on each side, both optional).\n * - `defaultValue` — initial uncontrolled value.\n * - `onChange` — fired whenever either edge changes. Receives the\n * full `{ from, to }` (each may be empty string).\n * - `name` — hidden inputs `<name>_from` + `<name>_to` mirror\n * the ISO values for native form posts.\n * - `min` / `max` — ISO strings; gate selection at both edges.\n * - `iconPosition` — `\"left\" | \"right\"` (default `\"right\"`). Places the\n * calendar glyph at either edge of the trigger.\n * - `label`, `error`, `disabled`, `required`, `placeholder`, `className`,\n * `aria-label` — same shape as DatePicker.\n * - `forwardRef<HTMLButtonElement>` points to the trigger button.\n *\n * Behaviour:\n * - Trigger is read-only; clicking anywhere on it opens the popover.\n * - Picking dates in the calendar always emits `{ from, to }` together,\n * even when the user is still mid-range (`to` may be empty).\n * - Popover closes once both edges are picked. Single-edge picks keep\n * it open so the user can finish without re-clicking the trigger.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface DateRangeValue {\n from?: string;\n to?: string;\n}\n\ninterface DateRangePickerProps {\n value?: DateRangeValue;\n defaultValue?: DateRangeValue;\n onChange?: (value: DateRangeValue) => void;\n name?: string;\n id?: string;\n label?: string;\n error?: string;\n disabled?: boolean;\n required?: boolean;\n /** Shown when both edges are empty. Defaults to \"Select date range\". */\n placeholder?: string;\n className?: string;\n min?: string;\n max?: string;\n /** Calendar glyph position inside the trigger. Default `\"right\"`. */\n iconPosition?: \"left\" | \"right\";\n \"aria-label\"?: string;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n defaultValue,\n onChange,\n name,\n id: providedId,\n label,\n error,\n disabled,\n required,\n placeholder = \"Select date range\",\n className,\n min,\n max,\n iconPosition = \"right\",\n \"aria-label\": ariaLabel,\n },\n ref,\n ) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const isControlled = value !== undefined;\n\n const [internalValue, setInternalValue] = useState<DateRangeValue>(\n isControlled ? (value ?? {}) : (defaultValue ?? {}),\n );\n const [open, setOpen] = useState(false);\n\n // React-to-controlled-prop changes without a sync useEffect.\n const [lastFromProp, setLastFromProp] = useState<string | undefined>(value?.from);\n const [lastToProp, setLastToProp] = useState<string | undefined>(value?.to);\n if (isControlled && value?.from !== lastFromProp) {\n setLastFromProp(value?.from);\n setInternalValue((prev) => ({ ...prev, from: value?.from ?? \"\" }));\n }\n if (isControlled && value?.to !== lastToProp) {\n setLastToProp(value?.to);\n setInternalValue((prev) => ({ ...prev, to: value?.to ?? \"\" }));\n }\n\n const current: DateRangeValue = useMemo(\n () => (isControlled ? (value ?? {}) : internalValue),\n [isControlled, value, internalValue],\n );\n\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement);\n\n // Mid-range draft. react-day-picker `mode=\"range\"` reads `selected` as\n // the authoritative range — if we feed back `{ from: Date, to: undefined }`\n // after the user's first click, RDP thinks the next click STARTS a fresh\n // range (and clobbers `from`). Keeping the in-progress state local lets\n // RDP own the \"what was clicked first\" logic until both edges are picked.\n const [draftRange, setDraftRange] = useState<{ from?: Date; to?: Date } | undefined>();\n\n const emit = useCallback(\n (next: DateRangeValue) => {\n onChange?.({ from: next.from ?? \"\", to: next.to ?? \"\" });\n },\n [onChange],\n );\n\n const handleCalendarSelect = useCallback(\n (range: { from?: Date; to?: Date } | undefined) => {\n // Always store what RDP just told us so the calendar reflects the\n // user's progress on the next render.\n setDraftRange(range);\n\n const fromIso = range?.from ? dateToIso(range.from) : \"\";\n const toIso = range?.to ? dateToIso(range.to) : \"\";\n\n // react-day-picker treats a single click in `mode=\"range\"` as a\n // degenerate range where `from === to`. That's just the user\n // picking their FIRST edge — keep the popover open so they can\n // pick the closing edge. Commit + close only when both edges\n // are picked AND they're DIFFERENT dates.\n if (fromIso && toIso && fromIso !== toIso) {\n const next: DateRangeValue = { from: fromIso, to: toIso };\n if (!isControlled) setInternalValue(next);\n emit(next);\n setDraftRange(undefined);\n setOpen(false);\n }\n },\n [isControlled, emit],\n );\n\n // When the popover closes (esc, click-outside, etc.) drop the draft so\n // the next open starts fresh from the committed value.\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next);\n if (!next) setDraftRange(undefined);\n }, []);\n\n const minDate = isoToDate(min ?? \"\");\n const maxDate = isoToDate(max ?? \"\");\n const committedRange = {\n from: isoToDate(current.from ?? \"\"),\n to: isoToDate(current.to ?? \"\"),\n };\n // Show the draft while mid-range; otherwise show the committed range.\n const selectedRange = draftRange ?? committedRange;\n const disabledMatcher = (() => {\n if (!minDate && !maxDate) return undefined;\n if (minDate && maxDate) return [{ before: minDate }, { after: maxDate }];\n if (minDate) return { before: minDate };\n return { after: maxDate as Date };\n })();\n\n const fromDisplay = isoToDisplay(current.from);\n const toDisplay = isoToDisplay(current.to);\n const hasValue = !!(fromDisplay || toDisplay);\n // Compose the display string. When only one edge is filled, show it\n // alongside the placeholder mask for the empty side so the field\n // visibly hints at \"still need to pick the other end.\"\n const displayText = hasValue\n ? `${fromDisplay || DATE_DISPLAY_PLACEHOLDER} – ${toDisplay || DATE_DISPLAY_PLACEHOLDER}`\n : \"\";\n\n const iconNode = (\n <CalendarIcon\n className={cn(\"size-4 shrink-0\", disabled ? \"text-fg-disabled\" : \"text-fg-3\")}\n aria-hidden=\"true\"\n />\n );\n\n return (\n <div className={cn(\"w-full\", className)}>\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <Popover open={open && !disabled} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n disabled={disabled}\n data-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={ariaLabel ?? label ?? \"Date range\"}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n \"rounded-input bg-surface flex h-9 w-full cursor-pointer items-center border font-mono text-[13px] tabular-nums\",\n \"border-rule-strong px-3 py-2 gap-2\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:border-accent focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-bg-disabled\",\n \"data-[invalid=true]:border-danger-line data-[invalid=true]:focus-visible:border-danger-fg\",\n \"data-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n )}\n >\n {iconPosition === \"left\" && iconNode}\n <span\n className={cn(\n \"font-mono flex-1 truncate text-left\",\n hasValue ? \"text-fg\" : \"font-body text-fg-4\",\n )}\n >\n {displayText || placeholder}\n </span>\n {iconPosition === \"right\" && iconNode}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={iconPosition === \"right\" ? \"end\" : \"start\"}\n sideOffset={6}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <DayPicker\n mode=\"range\"\n numberOfMonths={2}\n // `navLayout=\"around\"` renders prev/next chevrons INSIDE each\n // month's caption row (one on each side of the title) instead\n // of as a single calendar-wide nav bar. Without this RDP puts\n // a sibling <nav> at the calendar root with absolute positioning\n // hooks our classNames can't reach properly, leading to a click\n // dead-zone across the caption.\n navLayout=\"around\"\n // RDP's DateRange requires `from: Date`. When the user hasn't\n // picked anything yet (both edges undefined), pass undefined\n // so RDP renders the calendar in its empty state.\n selected={selectedRange.from ? { from: selectedRange.from, to: selectedRange.to } : undefined}\n onSelect={handleCalendarSelect}\n disabled={disabledMatcher}\n showOutsideDays\n // Anchor keyboard focus on a day cell so ←/→/↑/↓ navigate the\n // grid the moment the popover opens. Without this the popover\n // suppresses Radix's auto-focus (so the trigger keeps focus)\n // and arrow keys do nothing until the user clicks a day. The\n // popover only opens on explicit user action, so this is the\n // documented exception to the no-autofocus rule.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n defaultMonth={selectedRange.from ?? minDate ?? undefined}\n components={{\n Chevron: ({ orientation, className: chevClass }) => {\n const Icon = orientation === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return <Icon className={cn(\"text-fg-3 size-4\", chevClass)} aria-hidden=\"true\" />;\n },\n }}\n className=\"font-body text-fg select-none\"\n classNames={{\n root: \"p-3\",\n months: \"flex flex-col gap-6 sm:flex-row sm:gap-4\",\n month: \"relative space-y-3 w-[16rem] flex-none\",\n // With navLayout=\"around\", the chevron buttons live inside\n // the caption row, one on each side of the month title.\n // The caption row distributes them via space-between so\n // each chevron stays in its natural inline flow — no\n // absolute positioning gymnastics.\n month_caption:\n \"flex h-7 items-center justify-center font-display text-[13px] font-medium text-fg\",\n caption_label: \"tabular-nums\",\n nav: \"contents\",\n // navLayout=\"around\" renders Prev as a sibling BEFORE the\n // left month's caption, and Next as a sibling AFTER the\n // right month's caption. Absolute-position each so they\n // sit at their own month's top corners without disturbing\n // the centered caption row.\n button_previous:\n \"absolute left-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n button_next:\n \"absolute right-0 top-0 z-10 inline-flex size-7 items-center justify-center rounded-input text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none hover:bg-bg-2 hover:text-fg focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] disabled:cursor-not-allowed disabled:text-fg-disabled disabled:pointer-events-none\",\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"flex-1 text-center text-[11px] font-medium uppercase tracking-wide text-fg-4 pb-1\",\n weeks: \"\",\n week: \"flex w-full mt-1\",\n day: \"flex-1 text-center relative p-0\",\n day_button: cn(\n \"inline-flex size-8 w-full items-center justify-center rounded-input font-mono tabular-nums text-[13px] text-fg\",\n \"transition-colors duration-[var(--duration-instant)] motion-reduce:transition-none\",\n \"hover:bg-bg-2\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n ),\n today: \"[&_button]:font-semibold [&_button]:text-accent\",\n range_start:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover rounded-l-input\",\n range_end:\n \"[&_button]:bg-pro-fg [&_button]:text-fg-on-pro [&_button]:hover:bg-pro-hover rounded-r-input\",\n range_middle:\n \"[&_button]:bg-pro-bg [&_button]:text-pro-fg [&_button]:hover:bg-pro-bg-hover [&_button]:rounded-none\",\n outside: \"[&_button]:text-fg-5\",\n disabled: \"[&_button]:text-fg-disabled\",\n hidden: \"invisible\",\n }}\n />\n </PopoverContent>\n </Popover>\n {name && (\n <>\n <input type=\"hidden\" name={`${name}_from`} value={current.from ?? \"\"} />\n <input type=\"hidden\" name={`${name}_to`} value={current.to ?? \"\"} />\n </>\n )}\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\nimport { XIcon } from \"./icons\";\n\nconst chipVariants = cva(\n cn(\n \"inline-flex items-center gap-1 rounded-full px-2.5 py-1\",\n \"text-[12px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n ),\n {\n variants: {\n variant: {\n primary: \"bg-primary/10 text-primary hover:bg-primary/15\",\n neutral: \"bg-muted text-fg-2 hover:bg-muted/80\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n },\n);\n\ninterface DismissibleChipProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\" | \"children\">,\n VariantProps<typeof chipVariants> {\n label: React.ReactNode;\n onDismiss: () => void;\n}\n\nexport const DismissibleChip = React.forwardRef<\n HTMLButtonElement,\n DismissibleChipProps\n>(function DismissibleChip(\n { label, onDismiss, variant, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onDismiss}\n aria-label={\n typeof label === \"string\" ? `Remove ${label} filter` : \"Remove filter\"\n }\n className={cn(chipVariants({ variant }), className)}\n {...props}\n >\n <span>{label}</span>\n <XIcon size={12} aria-hidden=\"true\" />\n </button>\n );\n});\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * DropdownMenu — Radix UI dropdown-menu primitive. Modified\n *\n * Public API preserved:\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem (with `destructive` prop), DropdownMenuSeparator,\n * DropdownMenuLabel, DropdownMenuGroup\n *\n * NEW (additive, shadcn parity):\n * DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubTrigger,\n * DropdownMenuSubContent, DropdownMenuCheckboxItem,\n * DropdownMenuRadioGroup, DropdownMenuRadioItem,\n * DropdownMenuShortcut\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg\",\n \"data-[state=open]:bg-menu-item-hover-bg data-[state=open]:text-menu-item-hover-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"text-fg-3 ml-auto size-4\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n // Portal the sub-content to the body. The parent Content keeps a persistent\n // `scale-100` transform (its open-state animation), which makes it the\n // containing block for `position: fixed` descendants — and its\n // `overflow-hidden` would then clip this Popper-positioned flyout to nothing.\n // Portaling escapes both the transformed ancestor and the clip.\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"rounded-card border-menu-border bg-menu-bg text-menu-fg shadow-pop z-[var(--z-dropdown)] min-w-[8rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 6, align = \"start\", ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n \"rounded-card border-menu-border bg-menu-bg text-menu-fg shadow-pop z-[var(--z-dropdown)] min-w-[10rem] overflow-hidden border p-1\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\ninterface DropdownMenuItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Item\n> {\n /** Render as a destructive (danger) action. */\n destructive?: boolean;\n /** Increase left padding to align with checkbox/radio items. */\n inset?: boolean;\n}\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuItemProps\n>(({ className, destructive, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 px-2 py-1.5 text-sm outline-none select-none\",\n \"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n destructive &&\n \"text-menu-item-destructive-fg focus:bg-menu-item-destructive-hover-bg focus:text-menu-item-destructive-hover-fg\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"rounded-pill relative flex cursor-default items-center gap-2 py-1.5 pr-2 pl-8 text-sm outline-none select-none\",\n \"text-menu-item-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus:bg-menu-item-hover-bg focus:text-menu-item-hover-fg\",\n \"data-[disabled]:text-fg-disabled data-[disabled]:pointer-events-none\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" aria-hidden=\"true\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"text-menu-label-fg px-2 py-1.5 font-mono text-[11px] tracking-wider uppercase\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"bg-menu-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"text-menu-shortcut-fg ml-auto font-mono text-[11px] tracking-wider\", className)}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * EmptyState — display headline (Geist), fg-3 description, neutral icon halo on bg-2.\n *\n * Public API preserved: `icon`, `title`, `description`, `action`.\n */\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center justify-center px-6 py-12 text-center\", className)}\n {...props}\n >\n {icon && (\n <div\n className={cn(\n \"mb-4 flex size-12 items-center justify-center rounded-full\",\n \"bg-bg-2 text-fg-4 [&>svg]:size-6\",\n )}\n >\n {icon}\n </div>\n )}\n <h3 className=\"font-display text-fg text-base font-medium tracking-[-0.02em]\">{title}</h3>\n {description && <p className=\"text-fg-3 mt-1 max-w-sm text-sm\">{description}</p>}\n {action && <div className=\"mt-5\">{action}</div>}\n </div>\n );\n});\n\nEmptyState.displayName = \"EmptyState\";\n","\"use client\";\n\nimport { useCallback, useId, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { UploadIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * FileUpload — custom drag-drop + file picker.\n *\n * Public API preserved:\n * <FileUpload accept maxSize multiple onFilesSelected disabled className />\n *\n * Tokenized style:\n * - dashed `border-rule-strong` drop zone, rounded-card\n * - hover/drag-over uses suite accent (bg-pro-bg / border-pro-line / text-pro-fg)\n * - catalog `UploadIcon`\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface FileUploadProps extends React.HTMLAttributes<HTMLDivElement> {\n accept?: string;\n maxSize?: number;\n multiple?: boolean;\n onFilesSelected?: (files: File[]) => void;\n disabled?: boolean;\n}\n\nexport function FileUpload({\n accept,\n maxSize,\n multiple,\n onFilesSelected,\n disabled,\n className,\n children,\n ...props\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const [isDragOver, setIsDragOver] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const validateFiles = useCallback(\n (files: File[]): File[] => {\n setError(null);\n const acceptTypes = accept ? accept.split(\",\").map((t) => t.trim()) : null;\n\n const valid = files.filter((file) => {\n if (acceptTypes) {\n const ext = `.${file.name.split(\".\").pop()?.toLowerCase()}`;\n const matchesType = acceptTypes.some(\n (type) =>\n type === ext ||\n type === file.type ||\n (type.endsWith(\"/*\") && file.type.startsWith(type.replace(\"/*\", \"/\"))),\n );\n if (!matchesType) {\n setError(`File type not accepted: ${file.name}`);\n return false;\n }\n }\n if (maxSize && file.size > maxSize) {\n setError(`File too large: ${file.name} (max ${formatBytes(maxSize)})`);\n return false;\n }\n return true;\n });\n\n return valid;\n },\n [accept, maxSize],\n );\n\n function handleFiles(fileList: FileList) {\n const files = Array.from(fileList);\n const valid = validateFiles(multiple ? files : files.slice(0, 1));\n if (valid.length > 0) onFilesSelected?.(valid);\n }\n\n function handleDrop(e: React.DragEvent) {\n e.preventDefault();\n setIsDragOver(false);\n if (disabled) return;\n handleFiles(e.dataTransfer.files);\n }\n\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <label\n htmlFor={inputId}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setIsDragOver(true);\n }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={handleDrop}\n className={cn(\n \"flex flex-col items-center justify-center gap-2\",\n \"rounded-card border-rule-strong bg-surface border border-dashed\",\n \"font-body p-8 text-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n // Hover (when not disabled)\n !disabled && \"hover:border-pro-line hover:bg-pro-bg/40\",\n // Drag-over → Pro purple highlight\n isDragOver && \"border-pro-line bg-pro-bg\",\n disabled && \"border-rule bg-bg-disabled text-fg-disabled cursor-not-allowed\",\n !disabled && \"cursor-pointer\",\n )}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={(e) => {\n if (e.target.files) handleFiles(e.target.files);\n // Reset value so the same file can be re-selected\n e.target.value = \"\";\n }}\n className=\"fixed -top-[9999px] -left-[9999px] opacity-0\"\n disabled={disabled}\n tabIndex={-1}\n />\n {children ?? (\n <>\n <div\n className={cn(\n \"rounded-icon flex size-10 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n isDragOver ? \"bg-pro-fg text-fg-on-pro\" : \"bg-pro-bg text-pro-fg\",\n )}\n aria-hidden=\"true\"\n >\n <UploadIcon className=\"size-5\" />\n </div>\n <div className=\"text-fg-3 text-sm\">\n <span className=\"text-fg font-medium\">Click to upload</span> or drag and drop\n </div>\n {accept && <p className=\"text-fg-4 font-mono text-[10.5px]\">Accepted: {accept}</p>}\n {maxSize && (\n <p className=\"text-fg-4 font-mono text-[10.5px]\">Max size: {formatBytes(maxSize)}</p>\n )}\n </>\n )}\n </label>\n {error && (\n <p role=\"alert\" className=\"text-danger-fg mt-2 text-sm\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n","import { cn } from \"../lib/cn\";\n\nimport { AlertCircleIcon, CheckCircle2Icon } from \"./icons\";\ninterface FormErrorProps extends React.HTMLAttributes<HTMLParagraphElement> {\n children: React.ReactNode;\n}\n\n/**\n * Inline form error — paired below an input to communicate validation failure.\n * Uses architectural --color-danger-fg token.\n */\nexport function FormError({ children, className, ...props }: FormErrorProps) {\n return (\n <p\n role=\"alert\"\n className={cn(\"text-danger-fg flex items-center gap-1.5 text-xs leading-tight\", className)}\n {...props}\n >\n <AlertCircleIcon className=\"size-3.5 shrink-0\" strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </p>\n );\n}\n\ninterface FormSuccessProps extends React.HTMLAttributes<HTMLParagraphElement> {\n children: React.ReactNode;\n}\n\n/**\n * Inline form success — paired below an input to confirm a saved value.\n * Uses architectural --color-success-fg token.\n */\nexport function FormSuccess({ children, className, ...props }: FormSuccessProps) {\n return (\n <p\n role=\"status\"\n className={cn(\"text-success-fg flex items-center gap-1.5 text-xs leading-tight\", className)}\n {...props}\n >\n <CheckCircle2Icon className=\"size-3.5 shrink-0\" strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </p>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * FormSection — a single grouped block inside a settings/profile form.\n *\n * Renders a real `<fieldset>` + `<legend>` so assistive tech announces the\n * group, and gives consumers a consistent place to hang a title, helper\n * description, and (optionally) an action button on the trailing edge of\n * the heading row.\n *\n * Use inside a parent `<form>` — repeat one `<FormSection>` per logical\n * group (Contact, Address, Notifications, etc.). Slot whatever fields you\n * want into `children`; FormSection does not impose a grid.\n *\n * For marketing-style centered section heads, prefer `<SectionHeader>`.\n * For lower-level title+description blocks that aren't part of a form,\n * use `<SectionHead>` from `./section`.\n */\ninterface FormSectionProps\n extends Omit<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, \"title\"> {\n /** The section heading (renders as `<legend>` text). */\n title: React.ReactNode;\n /** Optional helper text shown directly under the title. */\n description?: React.ReactNode;\n /** Optional trailing slot for an action button or status. */\n action?: React.ReactNode;\n /** Space between the heading block and the fields. Default `mt-4`. */\n headSpacing?: string;\n}\n\nexport const FormSection = forwardRef<HTMLFieldSetElement, FormSectionProps>(function FormSection(\n { title, description, action, headSpacing = \"mt-4\", className, children, ...props },\n ref,\n) {\n return (\n <fieldset ref={ref} className={cn(\"min-w-0\", className)} {...props}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <legend className=\"text-fg text-sm font-semibold\">{title}</legend>\n {description && (\n <p className=\"text-fg-3 mt-0.5 text-xs leading-relaxed\">{description}</p>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div className={headSpacing}>{children}</div>\n </fieldset>\n );\n});\nFormSection.displayName = \"FormSection\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * HoverCard — Radix UI hover-card primitive. Modified\n *\n * Public API preserved:\n * HoverCard, HoverCardTrigger, HoverCardContent\n *\n * NEW (additive): HoverCardPortal is exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst HoverCard = HoverCardPrimitive.Root;\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\nconst HoverCardPortal = HoverCardPrimitive.Portal;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", side = \"bottom\", sideOffset = 8, ...props }, ref) => (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-card border-rule bg-surface text-fg shadow-pop z-[var(--z-dropdown)] w-64 border p-4 outline-none\",\n \"transition-[opacity,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=open]:scale-100 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardPortal, HoverCardContent };\n","\"use client\";\n\nimport { forwardRef, useId, useState } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { EyeIcon, EyeOffIcon } from \"./icons\";\n/**\n * Input variants. Mirrors the raw HTML `<input>` styled per the suite tokens\n * (rule-strong border, surface bg, accent focus ring).\n */\nconst inputVariants = cva(\n [\n \"flex w-full rounded-input border bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n ],\n {\n variants: {\n variant: {\n default: \"border-rule-strong\",\n ghost: \"border-transparent bg-transparent focus-visible:bg-surface\",\n },\n inputSize: {\n sm: \"h-8 px-2.5 py-1 text-xs\",\n md: \"h-9 px-3 py-2 text-[13px]\",\n lg: \"h-11 px-3.5 py-2.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n },\n);\n\nexport type InputVariants = VariantProps<typeof inputVariants>;\n\ninterface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, InputVariants {\n label?: string;\n error?: string;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n label,\n error,\n prefixIcon,\n suffixIcon,\n variant,\n inputSize,\n type = \"text\",\n className,\n id: providedId,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const [showPassword, setShowPassword] = useState(false);\n const isPassword = type === \"password\";\n const inputType = isPassword && showPassword ? \"text\" : type;\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n </label>\n )}\n <div className=\"relative\">\n {prefixIcon && (\n <span\n className=\"text-fg-4 pointer-events-none absolute top-1/2 left-3 -translate-y-1/2 [&>svg]:size-4\"\n aria-hidden=\"true\"\n >\n {prefixIcon}\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type={inputType}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n className={cn(\n inputVariants({ variant, inputSize }),\n prefixIcon && \"pl-9\",\n (suffixIcon || isPassword) && \"pr-9\",\n className,\n )}\n {...props}\n />\n {isPassword && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((prev) => !prev)}\n className=\"text-fg-4 hover:text-fg absolute top-1/2 right-2.5 -translate-y-1/2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none motion-reduce:transition-none\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n tabIndex={-1}\n >\n {showPassword ? (\n <EyeOffIcon className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <EyeIcon className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n {suffixIcon && !isPassword && (\n <span\n className=\"text-fg-4 pointer-events-none absolute top-1/2 right-3 -translate-y-1/2 [&>svg]:size-4\"\n aria-hidden=\"true\"\n >\n {suffixIcon}\n </span>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg mt-1.5 text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n});\n\nInput.displayName = \"Input\";\n\nexport { inputVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"./dialog\";\n\nimport { CommandIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * KeyboardShortcutsDialog — `?` toggled help dialog.\n *\n * Consumers pass `sections` describing their app's shortcuts. The package\n * ships no app-specific content — only a universal \"General\" section is\n * shown when `sections` is omitted. Mount once near the app root.\n *\n * Built on the `Dialog` primitive (Radix UI). Renders a clean 2-column\n * grid of shortcuts using `<kbd>` styled via the suite tokens.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface KeyboardShortcut {\n keys: readonly string[];\n description: string;\n}\n\nexport interface KeyboardShortcutSection {\n title: string;\n icon?: React.ReactNode;\n shortcuts: readonly KeyboardShortcut[];\n /** When true, this section spans 2 rows in the 2-column grid layout. */\n wide?: boolean;\n}\n\nexport interface KeyboardShortcutsDialogProps {\n /**\n * App-specific sections to display above the universal General section.\n * Omit for portal/utility apps that only need the universal keys.\n */\n sections?: readonly KeyboardShortcutSection[];\n /**\n * Key that toggles the dialog. Default `\"?\"`. Pass `null` to disable the\n * built-in hotkey listener — useful when an app wants to own the global\n * keydown handling.\n */\n hotkey?: string | null;\n}\n\nconst GENERAL_SECTION: KeyboardShortcutSection = {\n title: \"General\",\n icon: <CommandIcon className=\"size-3\" />,\n shortcuts: [\n { keys: [\"⌘\", \"K\"], description: \"Command palette\" },\n { keys: [\"/\"], description: \"Focus search\" },\n { keys: [\"?\"], description: \"Keyboard shortcuts\" },\n { keys: [\"Esc\"], description: \"Close / go back\" },\n ],\n};\n\n/* ── Kbd token ─────────────────────────────────────────────────────── */\nconst kbdClass = cn(\n \"inline-flex items-center justify-center min-w-[18px] h-[18px] px-[5px]\",\n \"font-mono text-[10.5px] text-fg-3 bg-bg-2 border border-rule rounded-icon\",\n \"[border-bottom-width:1.5px]\",\n);\n\nexport function KeyboardShortcutsDialog({\n sections,\n hotkey = \"?\",\n}: KeyboardShortcutsDialogProps = {}) {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n if (hotkey === null) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n const target = e.target as HTMLElement | null;\n if (\n target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement ||\n target?.isContentEditable\n ) {\n return;\n }\n\n if (e.key === hotkey && !e.metaKey && !e.ctrlKey && !e.altKey) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n }\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [hotkey]);\n\n const allSections: readonly KeyboardShortcutSection[] = sections\n ? [...sections, GENERAL_SECTION]\n : [GENERAL_SECTION];\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent size=\"md\" className=\"p-0\">\n <DialogHeader className=\"border-rule mb-0 border-b px-5 py-4 pr-12\">\n <DialogTitle className=\"text-sm font-semibold\">Keyboard Shortcuts</DialogTitle>\n </DialogHeader>\n\n <div className=\"scrollbar-thin max-h-[60vh] overflow-y-auto px-5 py-4\">\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-5\">\n {allSections.map((section) => (\n <div key={section.title} className={cn(section.wide && \"row-span-2\")}>\n <h3\n className={cn(\n \"mb-2.5 inline-flex items-center gap-1.5\",\n \"text-fg-3 font-mono text-[11px] tracking-[0.14em] uppercase\",\n )}\n >\n {section.icon}\n {section.title}\n </h3>\n <div className=\"space-y-1.5\">\n {section.shortcuts.map((shortcut) => (\n <div\n key={shortcut.description}\n className=\"flex items-center justify-between gap-3 py-1\"\n >\n <span className=\"text-fg text-sm\">{shortcut.description}</span>\n <div className=\"flex shrink-0 items-center gap-1\">\n {shortcut.keys.map((key, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"text-fg-4 mx-0.5 text-[11px]\">then</span>}\n <kbd className={kbdClass}>{key}</kbd>\n </React.Fragment>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"border-rule bg-bg-2/40 border-t px-5 py-3\">\n <p className=\"text-fg-3 text-[11px]\">\n Press <kbd className={kbdClass}>{hotkey ?? \"?\"}</kbd> anytime to toggle this dialog\n </p>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst labelVariants = cva(\n \"text-[13px] font-medium leading-none text-fg select-none peer-disabled:cursor-not-allowed peer-disabled:text-fg-disabled has-[+input:disabled]:text-fg-disabled\",\n);\n\ninterface LabelProps\n extends\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>,\n VariantProps<typeof labelVariants> {\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<React.ElementRef<typeof LabelPrimitive.Root>, LabelProps>(\n function Label({ children, required, className, ...props }, ref) {\n return (\n <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props}>\n {children}\n {required && (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n )}\n </LabelPrimitive.Root>\n );\n },\n);\n\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { labelVariants };\n","import Link from \"next/link\";\nimport { forwardRef } from \"react\";\n\nimport { buttonVariants } from \"./button\";\nimport { cn } from \"../lib/cn\";\n\ntype ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"destructive\"\n | \"success\"\n | \"ghost\"\n | \"outline\"\n | \"link\"\n | \"accent\"\n | \"dashed\";\n\ntype ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface LinkButtonProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n href: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n /**\n * Render a native `<a>` instead of `next/link`. Use for:\n * - cross-origin URLs (e.g. https://other-app.example/sign-in)\n * - same-origin `/api/*` route handlers that 302-redirect off-app\n * (next/link tries to client-route, which doesn't follow the 302)\n * - mailto: / tel: schemes\n *\n * When `target=\"_blank\"` is also set and no explicit `rel` was passed,\n * `rel=\"noopener noreferrer\"` is applied automatically.\n */\n external?: boolean;\n}\n\n/**\n * LinkButton — visually identical to `<Button>` but renders a link.\n * Shares `buttonVariants` so styling stays in lock-step.\n *\n * - Default: renders `next/link` (client-routed internal navigation).\n * - `external`: renders a native `<a>` so the browser handles the request\n * end-to-end. Required for cross-origin URLs and same-origin `/api/*`\n * handlers that 302 off-app.\n */\nexport const LinkButton = forwardRef<HTMLAnchorElement, LinkButtonProps>(function LinkButton(\n {\n href,\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n children,\n className,\n external,\n target,\n rel,\n ...props\n },\n ref,\n) {\n const classes = cn(buttonVariants({ variant, size }), className);\n\n const content = (\n <>\n {iconLeft && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconLeft}\n </span>\n )}\n {children}\n {iconRight && (\n <span className=\"inline-flex shrink-0\" aria-hidden=\"true\">\n {iconRight}\n </span>\n )}\n </>\n );\n\n if (external) {\n const safeRel = rel ?? (target === \"_blank\" ? \"noopener noreferrer\" : undefined);\n return (\n <a\n ref={ref}\n href={href}\n className={classes}\n target={target}\n rel={safeRel}\n {...props}\n >\n {content}\n </a>\n );\n }\n\n return (\n <Link ref={ref} href={href} className={classes} target={target} rel={rel} {...props}>\n {content}\n </Link>\n );\n});\n\nLinkButton.displayName = \"LinkButton\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Skeleton — animated placeholder. The `.skeleton` global class supplies\n * the shimmer animation (defined in tokens.css). All three primitives are\n * `aria-hidden` because they're decorative loading affordances.\n */\n\ninterface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"skeleton bg-bg-3 rounded-icon animate-pulse\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n});\nSkeleton.displayName = \"Skeleton\";\n\ninterface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n lines?: number;\n}\n\nexport const SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(function SkeletonText(\n { lines = 3, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"space-y-2\", className)} aria-hidden=\"true\" {...props}>\n {Array.from({ length: lines }).map((_, i) => (\n <div\n key={i}\n className={cn(\n \"skeleton bg-bg-3 rounded-icon h-4 animate-pulse\",\n i === lines - 1 && \"w-3/4\",\n )}\n />\n ))}\n </div>\n );\n});\nSkeletonText.displayName = \"SkeletonText\";\n\ninterface SkeletonCircleProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nexport const SkeletonCircle = forwardRef<HTMLDivElement, SkeletonCircleProps>(\n function SkeletonCircle({ size = 40, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"skeleton bg-bg-3 animate-pulse rounded-full\", className)}\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n {...props}\n />\n );\n },\n);\nSkeletonCircle.displayName = \"SkeletonCircle\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * LoadingRows — N repeating skeleton bars stacked vertically.\n *\n * Replaces the recurring `Array.from({length:N}).map((_, i) => <Skeleton/>)`\n * snippet that surfaces in inboxes, document lists, settings tables, and\n * any other list-shaped loading state. The primitive owns the `aria-busy`\n * + `aria-label` semantics so each consumer doesn't reinvent them.\n *\n * For richer per-row composition (avatar + two text lines, table cells,\n * card grids) keep using `<Skeleton>` / `<SkeletonCircle>` / `<SkeletonText>`\n * directly inside your own list renderer. `LoadingRows` is the *uniform*\n * row case.\n */\ninterface LoadingRowsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** How many skeleton rows to render. */\n count?: number;\n /** Height of each row. Accepts any Tailwind height utility (`h-14`, `h-3.5`). Default `h-14`. */\n rowHeight?: string;\n /** Vertical gap between rows. Default `gap-2`. */\n gap?: string;\n /** Override the row Skeleton className (radius, width, etc). */\n rowClassName?: string;\n /** Accessible label announced to screen readers. */\n label?: string;\n}\n\nexport const LoadingRows = forwardRef<HTMLDivElement, LoadingRowsProps>(function LoadingRows(\n {\n count = 3,\n rowHeight = \"h-14\",\n gap = \"gap-2\",\n rowClassName,\n label = \"Loading\",\n className,\n ...props\n },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={label}\n className={cn(\"flex flex-col\", gap, className)}\n {...props}\n >\n {Array.from({ length: count }).map((_, i) => (\n <Skeleton key={i} className={cn(rowHeight, \"w-full\", rowClassName)} />\n ))}\n </div>\n );\n});\nLoadingRows.displayName = \"LoadingRows\";\n","import Image from \"next/image\";\nimport Link from \"next/link\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Logo — Assure suite wordmark. Renders \"Assure\" in `fg` plus an optional\n * product suffix in `pro-fg` (e.g., \"Pro\", \"Tax\"), set in Geist (font-display).\n *\n * The product suffix is configurable so the same component serves every\n * Assure product. The default preserves the original \"Assure Pro\" output —\n * existing consumers do not need to change anything.\n *\n * Public API:\n * - `size`, `href`, `showText`, `inverted` (visual)\n * - `productName` (the suffix text; `null` renders just \"Assure\")\n * - `className`, `iconClassName`, `textClassName` (style overrides)\n */\n\nconst sizeStyles = {\n sm: { icon: 20, text: \"text-sm\", gap: \"gap-2\" },\n md: { icon: 24, text: \"text-[17px]\", gap: \"gap-2.5\" },\n lg: { icon: 32, text: \"text-xl\", gap: \"gap-3\" },\n} as const;\n\ninterface LogoProps {\n size?: keyof typeof sizeStyles;\n href?: string;\n showText?: boolean;\n className?: string;\n iconClassName?: string;\n textClassName?: string;\n /** Product suffix rendered after \"Assure\". Pass `null` to render just \"Assure\". Defaults to \"Pro\" for backwards compatibility. */\n productName?: string | null;\n /** When true, render on dark/brand surfaces (white \"Assure\" + lighter suffix). */\n inverted?: boolean;\n}\n\nexport function Logo({\n size = \"md\",\n href = \"/\",\n showText = true,\n className,\n iconClassName,\n textClassName,\n productName = \"Pro\",\n inverted = false,\n}: LogoProps) {\n const s = sizeStyles[size];\n const ariaLabel = productName ? `Assure ${productName}` : \"Assure\";\n\n return (\n <Link\n href={href}\n className={cn(\"inline-flex items-center\", s.gap, className)}\n aria-label={ariaLabel}\n >\n <Image\n src=\"/brand/mark.svg\"\n alt=\"\"\n width={s.icon}\n height={s.icon}\n priority\n className={cn(\"flex-shrink-0\", iconClassName)}\n />\n {showText && (\n <span\n className={cn(\n \"font-display font-semibold tracking-[-0.025em]\",\n s.text,\n inverted ? \"text-white\" : \"text-fg\",\n textClassName,\n )}\n >\n <span>Assure</span>\n {productName && (\n <>\n {\" \"}\n <span className={cn(\"font-medium\", inverted ? \"text-[#d8cfff]\" : \"text-pro-fg\")}>\n {productName}\n </span>\n </>\n )}\n </span>\n )}\n </Link>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nimport { CheckIcon, ChevronDownIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * MultiFilterPill — toolbar filter chip with multi-select dropdown.\n *\n * Matches the `.toolbar .filter-chip` mockup pattern used on the Clients\n * list. Inactive: neutral surface. Active (1+ selected): pro-purple tint\n * with a clear (X) affordance and a count or single-label.\n *\n * Public API preserved:\n * <MultiFilterPill\n * label icon\n * selected (Set<string>)\n * options ({ key, label, dot? }[])\n * onToggle onClear\n * />\n *\n * Implementation: Radix Popover (already refactored) with custom\n * checkbox-style menu items for multi-select. Closing the popover does\n * not auto-clear; that behaviour stays the caller's choice.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface MultiFilterPillProps {\n label: string;\n icon?: React.ReactNode;\n selected: Set<string>;\n options: { key: string; label: string; dot?: string }[];\n onToggle: (key: string) => void;\n onClear: () => void;\n /**\n * Control size shared with Button / FilterChip: sm = h-8 / 13px, md = h-9 /\n * 14px, lg = h-10 / 16px. Defaults to the dense `sm` tier since filter pills\n * are toolbar controls — a pill then sits at the same 32px height and 13px\n * text as a Button sm / FilterChip sm in the same row.\n */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst TRIGGER_SIZE: Record<NonNullable<MultiFilterPillProps[\"size\"]>, string> = {\n sm: \"h-8 gap-1.5 px-2.5 text-[13px]\",\n md: \"h-9 gap-2 px-3 text-sm\",\n lg: \"h-10 gap-2 px-3.5 text-base\",\n};\n\nexport function MultiFilterPill({\n label,\n icon,\n selected,\n options,\n onToggle,\n onClear,\n size = \"sm\",\n}: MultiFilterPillProps) {\n const active = selected.size > 0;\n const displayLabel = active\n ? selected.size === 1\n ? (options.find((o) => o.key === [...selected][0])?.label ?? label)\n : `${label} · ${selected.size}`\n : label;\n\n return (\n <Popover>\n {active ? (\n <div\n className={cn(\n \"rounded-pill font-body inline-flex items-center border font-medium\",\n TRIGGER_SIZE[size],\n \"border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n )}\n >\n <PopoverTrigger\n className={cn(\n \"inline-flex min-w-0 flex-1 items-center gap-1.5 rounded-pill outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n )}\n >\n {icon && (\n <span className=\"[&>svg]:size-3.5\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className=\"line-clamp-1\">{displayLabel}</span>\n </PopoverTrigger>\n <button\n type=\"button\"\n onClick={onClear}\n className={cn(\n \"ml-0.5 inline-flex size-4 items-center justify-center rounded-full\",\n \"text-pro-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-pro-bg-active\",\n \"focus-visible:bg-pro-bg-active focus-visible:outline-none\",\n )}\n aria-label={`Clear ${label} filter`}\n >\n <XIcon className=\"size-3\" aria-hidden=\"true\" />\n </button>\n </div>\n ) : (\n <PopoverTrigger\n className={cn(\n \"rounded-pill font-body inline-flex items-center border font-medium\",\n TRIGGER_SIZE[size],\n \"border-rule bg-surface text-fg-2 hover:border-rule-strong hover:bg-bg-2 hover:text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n >\n {icon && (\n <span className=\"[&>svg]:size-3.5\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className=\"line-clamp-1\">{displayLabel}</span>\n <ChevronDownIcon className=\"text-fg-4 size-3 shrink-0\" aria-hidden=\"true\" />\n </PopoverTrigger>\n )}\n\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n className=\"w-auto max-w-[280px] min-w-[180px] p-1\"\n >\n <ul\n className=\"scrollbar-thin max-h-[280px] overflow-y-auto\"\n role=\"listbox\"\n aria-multiselectable\n >\n {options.map((opt) => {\n const isSelected = selected.has(opt.key);\n return (\n <li key={opt.key} role=\"presentation\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onToggle(opt.key)}\n className={cn(\n \"rounded-pill flex w-full cursor-default items-center gap-2 px-2 py-1.5 text-[13px] outline-none select-none\",\n \"text-fg-2 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:bg-bg-2 focus-visible:text-fg\",\n )}\n >\n <span\n className={cn(\n \"flex size-4 shrink-0 items-center justify-center rounded-[3px] border transition-colors duration-[var(--duration-fast)] motion-reduce:transition-none\",\n isSelected\n ? \"border-pro-fg bg-pro-fg text-fg-on-pro\"\n : \"border-rule-strong bg-surface\",\n )}\n aria-hidden=\"true\"\n >\n {isSelected && <CheckIcon className=\"size-3\" />}\n </span>\n {opt.dot && (\n <span\n className={cn(\"size-2 shrink-0 rounded-full\", opt.dot)}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"line-clamp-1\">{opt.label}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {active && (\n <>\n <div className=\"bg-rule -mx-1 my-1 h-px\" aria-hidden=\"true\" />\n <button\n type=\"button\"\n onClick={onClear}\n className={cn(\n \"rounded-pill flex w-full items-center justify-center px-2 py-1.5 text-[12px] outline-none\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:bg-bg-2 focus-visible:text-fg\",\n )}\n >\n Clear selection\n </button>\n </>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nMultiFilterPill.displayName = \"MultiFilterPill\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * MultiSelectField — comma-separated multi-toggle pill group.\n *\n * A row of pill buttons; clicking one toggles its membership in the\n * selection set. Selection is encoded as a single comma-separated string\n * (matches the legacy contract used by FormData submissions).\n *\n * Public API preserved:\n * <MultiSelectField label options value onChange className />\n *\n * Style: pill chips — `rounded-pill`, accent fill when selected,\n * neutral surface with `border-rule-strong` when unselected.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface MultiSelectFieldProps {\n label: string;\n options: string[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n /** Visual size; default \"md\" matches the form-row default. */\n size?: \"sm\" | \"md\";\n /** Optional id, used to associate the visible label with the group. */\n id?: string;\n}\n\nexport function MultiSelectField({\n label,\n options,\n value,\n onChange,\n className,\n size = \"md\",\n id,\n}: MultiSelectFieldProps) {\n const selected = React.useMemo(\n () => new Set(value ? value.split(\",\").filter(Boolean) : []),\n [value],\n );\n\n const toggle = (option: string) => {\n const next = new Set(selected);\n if (next.has(option)) {\n next.delete(option);\n } else {\n next.add(option);\n }\n onChange(Array.from(next).join(\",\"));\n };\n\n const generatedId = React.useId();\n const groupId = id ?? generatedId;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div\n id={`${groupId}-label`}\n className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\"\n >\n {label}\n </div>\n <div role=\"group\" aria-labelledby={`${groupId}-label`} className=\"flex flex-wrap gap-1.5\">\n {options.map((option) => {\n const isSelected = selected.has(option);\n return (\n <button\n key={option}\n type=\"button\"\n onClick={() => toggle(option)}\n aria-pressed={isSelected}\n className={cn(\n \"rounded-pill font-body inline-flex items-center border font-medium\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n size === \"sm\" ? \"px-2.5 py-0.5 text-xs\" : \"px-3 py-1 text-xs\",\n isSelected\n ? \"border-pro-line bg-pro-bg text-pro-fg hover:bg-pro-bg-hover\"\n : \"border-rule-strong bg-surface text-fg-2 hover:bg-bg-2 hover:text-fg\",\n )}\n >\n {option}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nMultiSelectField.displayName = \"MultiSelectField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { OTPInput as OTPInputRoot, REGEXP_ONLY_DIGITS } from \"input-otp\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * OTPInput — `input-otp` library. Modified\n *\n * Public API preserved from the prior hand-rolled implementation:\n * <OTPInput name length error autoFocus defaultValue />\n *\n * Behavior preserved:\n * - Numeric-only entry (REGEXP_ONLY_DIGITS).\n * - The underlying form input carries `name` so native form posts continue\n * to receive a single concatenated value (matching legacy hidden-input).\n * - `defaultValue` seeds the field for uncontrolled usage.\n * - `error` toggles invalid styling + renders a centered error message.\n *\n * NEW (additive): consumers may pass `value` / `onChange` for controlled\n * usage; `onComplete` for auto-submit on full entry.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface OTPInputProps {\n name: string;\n length?: number;\n error?: string;\n autoFocus?: boolean;\n className?: string;\n defaultValue?: string;\n /** Optional controlled value (additive). */\n value?: string;\n /** Optional controlled onChange (additive). */\n onChange?: (value: string) => void;\n /** Optional callback fired when all slots are filled (additive). */\n onComplete?: (value: string) => void;\n /** Optional id for the underlying input (additive). */\n id?: string;\n /** Optional disabled flag (additive). */\n disabled?: boolean;\n /** Accessible label for the underlying one-time-code input. */\n \"aria-label\"?: string;\n}\n\nexport function OTPInput({\n name,\n length = 6,\n error,\n autoFocus = false,\n className,\n defaultValue,\n value,\n onChange,\n onComplete,\n id,\n disabled,\n \"aria-label\": ariaLabel,\n}: OTPInputProps) {\n const errorId = id ? `${id}-error` : undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\n <OTPInputRoot\n name={name}\n id={id}\n maxLength={length}\n pattern={REGEXP_ONLY_DIGITS}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n // OTP inputs are typically the focus target of the screen they appear on\n // (e.g. step-up auth, post-redirect verification). Consumer opts in via prop.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n defaultValue={defaultValue}\n value={value}\n onChange={onChange}\n onComplete={onComplete}\n disabled={disabled}\n aria-label={ariaLabel ?? \"One-time password\"}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n containerClassName={cn(\n \"flex items-center justify-center gap-2.5\",\n // §5.17: disabled tints slot bg + border + text via token cascade,\n // not opacity (which destroys contrast on character readouts).\n \"has-[:disabled]:cursor-not-allowed\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:bg-bg-disabled\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:border-rule\",\n \"has-[:disabled]:[&_[aria-hidden=true]]:text-fg-disabled\",\n )}\n render={({ slots }) => (\n <div className=\"flex items-center gap-2.5\" role=\"group\" aria-label=\"One-time password\">\n {slots.map((slot, idx) => (\n <OTPSlot key={idx} {...slot} hasError={!!error} />\n ))}\n </div>\n )}\n />\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg text-center text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nOTPInput.displayName = \"OTPInput\";\n\ninterface OTPSlotProps {\n isActive: boolean;\n char: string | null;\n hasFakeCaret: boolean;\n hasError: boolean;\n}\n\nfunction OTPSlot({ isActive, char, hasFakeCaret, hasError }: OTPSlotProps) {\n return (\n <div\n className={cn(\n \"relative flex h-12 w-10 items-center justify-center\",\n \"rounded-input bg-surface text-fg border font-mono text-lg tabular-nums\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"sm:h-14 sm:w-12 sm:text-xl\",\n \"border-rule-strong\",\n isActive && \"border-accent z-10 [box-shadow:var(--shadow-focus-ring)]\",\n hasError && \"border-danger-line\",\n hasError && isActive && \"border-danger-fg [box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n )}\n aria-hidden=\"true\"\n >\n {char}\n {hasFakeCaret && !char && (\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n aria-hidden=\"true\"\n >\n <div className=\"bg-fg h-5 w-px opacity-80 motion-safe:animate-pulse\" />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from \"./icons\";\n/**\n * Pagination — custom (no Radix equivalent).\n * Tokenized: tabular-nums numerals, mono context label, cyan accent for the\n * current page, `border-rule` divider boundaries.\n *\n * Public API:\n * currentPage, totalPages, onPageChange, siblingCount, totalItems, pageSize.\n */\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n /** Total item count — enables \"Showing X–Y of Z\" label */\n totalItems?: number;\n /** Items per page — used with totalItems for range display */\n pageSize?: number;\n}\n\nfunction getPageNumbers(current: number, total: number, siblings: number): (number | \"ellipsis\")[] {\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalSlots = siblings * 2 + 5;\n if (total <= totalSlots) return range(1, total);\n\n const leftSibling = Math.max(current - siblings, 2);\n const rightSibling = Math.min(current + siblings, total - 1);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < total - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + 2 * siblings);\n return [...leftRange, \"ellipsis\", total];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(total - (2 + 2 * siblings), total);\n return [1, \"ellipsis\", ...rightRange];\n }\n\n return [1, \"ellipsis\", ...range(leftSibling, rightSibling), \"ellipsis\", total];\n}\n\nconst NAV_BUTTON = cn(\n \"inline-flex size-7 items-center justify-center rounded-btn text-fg-3\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n);\n\nconst PAGE_BUTTON_BASE = cn(\n \"inline-flex h-7 min-w-7 items-center justify-center rounded-btn px-2\",\n \"text-xs font-medium tabular-nums\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n);\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n totalItems,\n pageSize,\n className,\n ...props\n },\n ref,\n) {\n if (totalPages <= 1) return null;\n\n const pages = getPageNumbers(currentPage, totalPages, siblingCount);\n\n // Range label: \"1–10 of 47\" or fallback to \"Page 1 of 5\"\n let contextLabel: string;\n if (totalItems != null && pageSize != null) {\n const start = (currentPage - 1) * pageSize + 1;\n const end = Math.min(currentPage * pageSize, totalItems);\n contextLabel = `${start}–${end} of ${totalItems}`;\n } else {\n contextLabel = `Page ${currentPage} of ${totalPages}`;\n }\n\n return (\n <nav\n ref={ref}\n aria-label={`Pagination, page ${currentPage} of ${totalPages}`}\n className={cn(\"flex items-center justify-between gap-4\", className)}\n {...props}\n >\n {/* Context label — mono, tabular-nums, fg-4 */}\n <span className=\"text-fg-4 shrink-0 font-mono text-[11px] tracking-[0.02em] tabular-nums\">\n {contextLabel}\n </span>\n\n {/* Page controls */}\n <div className=\"flex items-center gap-0.5\">\n {/* Previous */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={NAV_BUTTON}\n aria-label=\"Previous page\"\n >\n <ChevronLeftIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n\n {/* Page numbers */}\n {pages.map((page, i) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${i}`}\n className=\"text-fg-5 flex h-7 w-5 items-center justify-center select-none\"\n aria-hidden=\"true\"\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => onPageChange(page)}\n aria-current={page === currentPage ? \"page\" : undefined}\n className={cn(\n PAGE_BUTTON_BASE,\n page === currentPage\n ? \"bg-accent-tint text-accent-2 border border-[color:var(--color-accent-tint)]\"\n : \"text-fg-3 hover:bg-bg-2 hover:text-fg\",\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* Next */}\n <button\n type=\"button\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={NAV_BUTTON}\n aria-label=\"Next page\"\n >\n <ChevronRightIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n </nav>\n );\n});\n\nPagination.displayName = \"Pagination\";\n","export function stripToDigits(input: string): string {\n return input.replace(/\\D/g, \"\").slice(0, 10);\n}\n\nexport function formatPhoneDisplay(raw: string): string {\n const digits = stripToDigits(raw);\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n","\"use client\";\n\nimport { forwardRef, useCallback, useRef, useState } from \"react\";\n\nimport { Input } from \"./input\";\nimport { stripToDigits, formatPhoneDisplay } from \"../lib/phone\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * PhoneInput — wraps the new <Input> primitive with US phone formatting.\n *\n * Public API preserved EXACTLY:\n * - Extends Input, minus `type` (forced to \"tel\") and the `value` /\n * `onChange` / `defaultValue` overrides documented below.\n * - `value` / `defaultValue` are RAW digits (e.g. \"5551234567\").\n * - The displayed value in the field is formatted \"(555) 123-4567\".\n * - In controlled mode `onChange` fires with a synthetic event whose\n * `target.value` is the raw digit string. Call sites depend on this.\n * - In uncontrolled mode a hidden `<input name>` mirrors the raw digits\n * so native form posts still work.\n *\n * NEW (additive): forwardRef<HTMLInputElement>, label/error/prefix/suffix,\n * size variants, etc. flow through Input.\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype InputProps = React.ComponentProps<typeof Input>;\n\ninterface PhoneInputProps extends Omit<InputProps, \"type\" | \"onChange\" | \"value\" | \"defaultValue\"> {\n value?: string;\n defaultValue?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const PhoneInput = forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n { value, defaultValue, onChange, name, ...props },\n ref,\n) {\n const isControlled = value !== undefined;\n const [internalDigits, setInternalDigits] = useState(() => stripToDigits(defaultValue ?? \"\"));\n\n const hiddenRef = useRef<HTMLInputElement>(null);\n\n const digits = isControlled ? stripToDigits(value) : internalDigits;\n const displayValue = formatPhoneDisplay(digits);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = stripToDigits(e.target.value);\n\n if (isControlled && onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: raw },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n } else {\n setInternalDigits(raw);\n if (hiddenRef.current) {\n hiddenRef.current.value = raw;\n }\n }\n },\n [isControlled, onChange],\n );\n\n return (\n <>\n <Input\n {...props}\n ref={ref}\n type=\"tel\"\n name={isControlled ? name : undefined}\n value={displayValue}\n onChange={handleChange}\n inputMode=\"tel\"\n autoComplete={props.autoComplete ?? \"tel-national\"}\n />\n {!isControlled && name && (\n <input type=\"hidden\" ref={hiddenRef} name={name} defaultValue={digits} />\n )}\n </>\n );\n});\n\nPhoneInput.displayName = \"PhoneInput\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * PriorityIcon — priority glyph for the fixed none/low/medium/high/urgent scale.\n *\n * Bar COUNT carries the level (1/2/3 rising bars); color reinforces it on an\n * escalating cool→warm ramp via `--color-priority-*` tokens (blue → violet →\n * amber → red), so the glyph reads the same in light and dark. `none` is three\n * muted dashes; `urgent` is a filled danger-red square with a white exclamation.\n * Inactive bars drop to 25% opacity of the same hue.\n */\n\nexport type Priority = \"none\" | \"low\" | \"medium\" | \"high\" | \"urgent\";\n\nexport interface PriorityIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"color\"> {\n priority: Priority;\n size?: number;\n}\n\nconst BARS = [\n { x: 1.5, y: 9, height: 5 }, // bar 1 (shortest)\n { x: 6.5, y: 5, height: 9 }, // bar 2\n { x: 11.5, y: 1, height: 13 }, // bar 3 (tallest)\n] as const;\n\nconst ACTIVE_BAR_COUNT: Record<Exclude<Priority, \"none\" | \"urgent\">, number> = {\n low: 1,\n medium: 2,\n high: 3,\n};\n\nconst PRIORITY_COLOR: Record<Exclude<Priority, \"none\">, string> = {\n low: \"var(--color-priority-low)\",\n medium: \"var(--color-priority-medium)\",\n high: \"var(--color-priority-high)\",\n urgent: \"var(--color-priority-urgent)\",\n};\n\nexport function PriorityIcon({ priority, size = 16, className, ...props }: PriorityIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {priority === \"none\" && (\n <g className=\"text-fg-3\" fill=\"currentColor\">\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n <rect x=\"2\" y=\"7.2\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n <rect x=\"2\" y=\"10.4\" width=\"12\" height=\"1.6\" rx=\"0.8\" opacity=\"0.9\" />\n </g>\n )}\n\n {(priority === \"low\" || priority === \"medium\" || priority === \"high\") &&\n BARS.map((bar, i) => (\n <rect\n key={i}\n x={bar.x}\n y={bar.y}\n width=\"3\"\n height={bar.height}\n rx=\"1\"\n fill={PRIORITY_COLOR[priority]}\n fillOpacity={i < ACTIVE_BAR_COUNT[priority] ? 1 : 0.25}\n />\n ))}\n\n {priority === \"urgent\" && (\n <>\n <rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" rx=\"3\" fill=\"var(--color-priority-urgent)\" />\n <rect x=\"7.25\" y=\"3.75\" width=\"1.5\" height=\"5\" rx=\"0.75\" fill=\"#fff\" />\n <circle cx=\"8\" cy=\"11.25\" r=\"1\" fill=\"#fff\" />\n </>\n )}\n </svg>\n );\n}\n","\"use client\";\n\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ProgressBar — Radix-driven determinate (or indeterminate) progress meter.\n * Track sits on `bg-3`; fills follow the status palette. Variants are an\n * explicit cva enum; if `variant` is omitted, it auto-resolves from value:\n * <50% → default (Pro purple)\n * ≥50% → warning\n * ≥80% → success\n *\n * Public API preserved: `value`, `max`, `label`, `showPercentage`, `variant`.\n * Pass `value={null}` (or omit when in-doubt) to render Radix's indeterminate\n * state — but for back-compat we still accept `value: number`.\n */\nexport const progressBarVariants = cva(\n \"h-full rounded-full transition-[width,background-color] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)]\",\n {\n variants: {\n variant: {\n default: \"bg-pro-fg\",\n success: \"bg-success-fg\",\n warning: \"bg-warning-fg\",\n destructive: \"bg-danger-fg\",\n info: \"bg-accent\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\nexport interface ProgressBarProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, \"value\">,\n VariantProps<typeof progressBarVariants> {\n /** 0..max. Set to `null` for an indeterminate track. */\n value: number | null;\n max?: number;\n label?: string;\n showPercentage?: boolean;\n}\n\nexport const ProgressBar = forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressBarProps\n>(function ProgressBar(\n { value, max = 100, label, showPercentage, variant, className, ...props },\n ref,\n) {\n const isIndeterminate = value == null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, (value / max) * 100));\n\n const resolvedVariant =\n variant ??\n (!isIndeterminate && percentage >= 80\n ? \"success\"\n : !isIndeterminate && percentage >= 50\n ? \"warning\"\n : \"default\");\n\n return (\n <div className={cn(\"w-full\", className)}>\n {(label || showPercentage) && (\n <div className=\"mb-1.5 flex items-center justify-between text-sm\">\n {label && <span className=\"text-fg-2 font-medium\">{label}</span>}\n {showPercentage && !isIndeterminate && (\n <span className=\"text-fg-3 font-mono text-xs tabular-nums\">\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n value={isIndeterminate ? null : value}\n max={max}\n aria-label={label ?? \"Progress\"}\n className=\"bg-bg-3 relative h-2 w-full overflow-hidden rounded-full\"\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n progressBarVariants({ variant: resolvedVariant }),\n isIndeterminate &&\n \"absolute inset-y-0 left-0 w-1/3 animate-[progress-indeterminate_1.4s_var(--ease-out-quart)_infinite]\",\n )}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </ProgressPrimitive.Root>\n {/* Indeterminate keyframes (scoped, no token leakage). */}\n {isIndeterminate && (\n <style>{`\n @keyframes progress-indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}</style>\n )}\n </div>\n );\n});\n\nProgressBar.displayName = \"ProgressBar\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ProgressRing — custom SVG ring meter (no Radix equivalent).\n * Track is `bg-3`, the indicator picks up the active variant. Variants and\n * value-driven auto-resolve mirror ProgressBar so consumers can mix freely.\n *\n * Public API preserved: `value`, `max`, `size`, `strokeWidth`, `label`, `sublabel`.\n */\n\nexport const progressRingVariants = cva(\n \"transition-[stroke-dashoffset,stroke] duration-[var(--duration-slow)] ease-[var(--ease-out-quart)]\",\n {\n variants: {\n variant: {\n default: \"text-pro-fg\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n destructive: \"text-danger-fg\",\n info: \"text-accent\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\nexport interface ProgressRingProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof progressRingVariants> {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n label?: string;\n sublabel?: string;\n}\n\nexport const ProgressRing = forwardRef<HTMLDivElement, ProgressRingProps>(function ProgressRing(\n { value, max = 100, size = 80, strokeWidth = 6, label, sublabel, variant, className, ...props },\n ref,\n) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const resolvedVariant =\n variant ?? (percentage >= 80 ? \"success\" : percentage >= 50 ? \"warning\" : \"default\");\n\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex flex-col items-center gap-1\", className)}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? \"Progress\"}\n {...props}\n >\n <div className=\"relative inline-flex\" style={{ width: size, height: size }}>\n <svg width={size} height={size} className=\"-rotate-90\" aria-hidden=\"true\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n className=\"text-bg-3\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n className={progressRingVariants({ variant: resolvedVariant })}\n />\n </svg>\n {label && !sublabel && (\n <span className=\"text-fg pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-xs font-medium tabular-nums\">\n {label}\n </span>\n )}\n </div>\n {label && sublabel && (\n <span className=\"text-fg font-mono text-sm font-medium tabular-nums\">{label}</span>\n )}\n {sublabel && <span className=\"text-fg-3 text-xs\">{sublabel}</span>}\n </div>\n );\n});\n\nProgressRing.displayName = \"ProgressRing\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CircleIcon } from \"./icons\";\n/**\n * RadioGroup — Radix-backed radio control. Modified\n * Public API: <RadioGroup value defaultValue onValueChange name>\n * with <RadioGroupItem value label />.\n */\n\ntype RadioGroupProps = React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>;\n\nexport const RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn(\"grid gap-2\", className)} {...props} />;\n});\n\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\ninterface RadioGroupItemProps extends React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n> {\n /** Optional inline label rendered to the right of the radio */\n label?: string;\n}\n\nexport const RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(function RadioGroupItem({ className, label, id: providedId, ...props }, ref) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n const root = (\n <RadioGroupPrimitive.Item\n ref={ref}\n id={id}\n className={cn(\n \"peer border-rule-strong bg-surface text-pro-fg aspect-square size-4 shrink-0 rounded-full border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"hover:border-fg-4\",\n \"focus-visible:border-accent focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[state=checked]:border-pro-fg\",\n \"disabled:bg-bg-disabled disabled:border-rule disabled:cursor-not-allowed\",\n \"aria-[invalid=true]:border-danger-line\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <CircleIcon className=\"fill-pro-fg text-pro-fg size-2\" aria-hidden=\"true\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n\n if (!label) return root;\n\n return (\n <div className=\"flex items-center gap-2\">\n {root}\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n </div>\n );\n});\n\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* ScrollArea */\n/* Wraps Radix ScrollArea + a styled scrollbar matched to the suite tokens */\n/* -------------------------------------------------------------------------- */\n\ninterface ScrollAreaProps extends React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> {\n children: React.ReactNode;\n}\n\nexport const ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n ScrollAreaProps\n>(function ScrollArea({ className, children, ...props }, ref) {\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n tabIndex={0}\n className=\"h-full w-full rounded-[inherit] focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n});\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\ntype ScrollBarProps = React.ComponentPropsWithoutRef<\n typeof ScrollAreaPrimitive.ScrollAreaScrollbar\n>;\n\nexport const ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ScrollBarProps\n>(function ScrollBar({ className, orientation = \"vertical\", ...props }, ref) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] select-none motion-reduce:transition-none\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n className={cn(\n \"bg-rule-strong relative flex-1 rounded-full\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-fg-4\",\n )}\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n});\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\nimport { useDebounce } from \"../hooks/use-debounce\";\n\nimport { SearchIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SearchInput — raw <input type=\"search\"> with a leading catalog `SearchIcon`\n * and a trailing clear (X) button.\n *\n * Public API preserved:\n * <SearchInput value onValueChange onSearch debounceMs />\n *\n * `inputSize` (\"sm\" | \"md\" | \"lg\"). `sm` is the dense control tier (h-8 +\n * 13px) that lines up pixel-for-pixel with Button sm / MultiFilterPill sm /\n * FilterChip sm in a toolbar row — use it for in-toolbar search. `md`\n * (default) is h-9 + 13px: same text, a touch roomier, for standalone search\n * fields. `lg` is h-11 + 14px. (md/lg keep their own one-step-denser text\n * ladder vs the button family; only the `sm` tier is fully harmonized.)\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst searchInputVariants = cva(\n [\n \"flex w-full rounded-input border border-rule-strong bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n // Hide the native search-cancel button — we render our own clear button.\n \"[&::-webkit-search-cancel-button]:appearance-none\",\n \"[&::-webkit-search-decoration]:appearance-none\",\n ],\n {\n variants: {\n inputSize: {\n // `sm` is the dense control tier: h-8 + 13px, so a search box lines up\n // pixel-for-pixel (height AND text) with Button / MultiFilterPill /\n // FilterChip at their `sm` tier in a toolbar row.\n sm: \"h-8 pl-8 pr-8 text-[13px]\",\n md: \"h-9 pl-9 pr-9 text-[13px]\",\n lg: \"h-11 pl-10 pr-10 text-sm\",\n },\n },\n defaultVariants: {\n inputSize: \"md\",\n },\n },\n);\n\nexport type SearchInputVariants = VariantProps<typeof searchInputVariants>;\n\ninterface SearchInputProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"onChange\" | \"size\">,\n SearchInputVariants {\n value: string;\n onValueChange: (value: string) => void;\n onSearch?: (value: string) => void;\n debounceMs?: number;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n value,\n onValueChange,\n onSearch,\n debounceMs = 300,\n inputSize,\n className,\n placeholder = \"Search...\",\n disabled,\n ...props\n },\n ref,\n ) {\n const debouncedValue = useDebounce(value, debounceMs);\n const isFirstRender = React.useRef(true);\n\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n onSearch?.(debouncedValue);\n }, [debouncedValue, onSearch]);\n\n const sz = inputSize ?? \"md\";\n const iconLeftClass = sz === \"sm\" ? \"left-2.5\" : sz === \"lg\" ? \"left-3\" : \"left-3\";\n const iconRightClass = sz === \"sm\" ? \"right-2\" : sz === \"lg\" ? \"right-3\" : \"right-2.5\";\n const iconSizeClass = sz === \"sm\" ? \"size-3.5\" : \"size-4\";\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n <SearchIcon\n className={cn(\n \"text-fg-4 pointer-events-none absolute top-1/2 -translate-y-1/2\",\n iconLeftClass,\n iconSizeClass,\n )}\n aria-hidden=\"true\"\n />\n <input\n ref={ref}\n type=\"search\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(searchInputVariants({ inputSize }))}\n {...props}\n />\n {value && !disabled && (\n <button\n type=\"button\"\n onClick={() => onValueChange(\"\")}\n className={cn(\n \"rounded-pill text-fg-4 absolute top-1/2 -translate-y-1/2 p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n iconRightClass,\n )}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <XIcon className={iconSizeClass} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n\nexport { searchInputVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { RemoveScroll } from \"react-remove-scroll\";\n\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"./popover\";\n\nimport { CheckIcon, ChevronDownIcon, PlusIcon, SearchIcon, XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SearchSelect — multi-select combobox with optional create-on-the-fly.\n *\n * Implementation: cmdk (`Command`, `Command.Input`, `Command.List`,\n * `Command.Empty`, `Command.Item`) wrapped inside a Radix Popover so the\n * options surface escapes its container and matches the `shadow-pop` elevation.\n *\n * Two ways to drive it:\n * - Multi (default): `selected: SearchSelectOption[]` + `onSelect`/`onRemove`.\n * Chips render above the input. Multiple picks accumulate.\n * - Single (sugar): `value: string` (the picked option's `id`, or empty)\n * + `onValueChange: (id: string) => void`. The field collapses to show\n * the picked value with an X-to-clear control once a choice is made;\n * `closeOnSelect` is implied. Equivalent under the hood to:\n * selected={value ? [options.find(o => o.id === value)!] : []}\n * onSelect={o => onValueChange(o.id)}\n * onRemove={() => onValueChange(\"\")}\n * closeOnSelect\n * but without the per-call-site array wrapping + dual-handler ritual.\n *\n * Behaviour preserved:\n * - Already-selected options are filtered out of the dropdown list.\n * - When `onCreate` is provided AND the trimmed query has no exact match,\n * a \"Create '<q>'\" affordance appears below the filtered list.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SearchSelectOption {\n id: string;\n label: string;\n /**\n * Optional section name. When any option carries a `group`, the dropdown\n * renders quiet sentence-case section labels, preserving the order in which\n * groups first appear in `options`. Omit on every option to keep the flat\n * (single-list) rendering.\n */\n group?: string;\n /**\n * Optional CSS color (hex or token) rendered as a small leading dot — handy\n * for category accents (e.g. one hue per service line). Treated as data, so\n * the consumer owns the palette.\n */\n color?: string;\n /**\n * Optional leading icon node. When present the row becomes a rich two-line\n * row with the icon in a circular tile. Pair with `iconClassName` for the\n * tile tint. Takes precedence over `color`.\n */\n icon?: React.ReactNode;\n /**\n * Tailwind classes for the icon tile (background + text), e.g.\n * \"bg-info/10 text-info\". Consumer owns the palette.\n */\n iconClassName?: string;\n /**\n * Optional secondary line shown muted beneath the label (e.g. an email or\n * reference). Promotes the row to the two-line rich layout.\n */\n description?: string;\n}\n\ninterface SearchSelectProps {\n options: SearchSelectOption[];\n /**\n * Multi-mode controlled selection. Required unless using the single-mode\n * `value`/`onValueChange` sugar (in which case omit both `selected` and\n * `onSelect`/`onRemove`).\n */\n selected?: SearchSelectOption[];\n onSelect?: (option: SearchSelectOption) => void;\n onRemove?: (option: SearchSelectOption) => void;\n /**\n * Single-mode controlled value: the picked option's `id` (or empty string\n * when nothing is selected). When set, the component renders as a\n * single-pick combobox and `closeOnSelect` is forced on. Mutually\n * exclusive with `selected` — provide one OR the other, not both.\n */\n value?: string;\n /**\n * Single-mode change handler. Called with the picked option's `id` on\n * select, or with an empty string when the user clears the selection.\n */\n onValueChange?: (value: string) => void;\n onCreate?: (name: string) => void;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n /**\n * When true (and options carry `group`), renders a row of exclusive filter\n * chips (\"All\" + each non-pinned group) that scope the list to one category.\n */\n groupFilter?: boolean;\n /**\n * Group names pinned to the top of the list. Pinned groups are excluded from\n * the filter chips and only shown when the \"All\" chip is active — the\n * standard \"favorites/suggested on top\" treatment.\n */\n pinnedGroups?: string[];\n /**\n * Close the dropdown after a selection. Off by default (multi-select keeps\n * the list open to pick more); turn on when used as a single-select.\n */\n closeOnSelect?: boolean;\n /**\n * Append a count to each group heading (e.g. \"Individuals · 5\"). Only has an\n * effect when options carry `group`.\n */\n showGroupCounts?: boolean;\n /**\n * Persistent footer action pinned below the list, distinct from the\n * query-based `onCreate` affordance. Always visible while open — use for a\n * full \"Create new client\" entry point. `createNewLabel` sets its label.\n */\n onCreateNew?: () => void;\n createNewLabel?: string;\n}\n\nexport function SearchSelect({\n options,\n selected: selectedProp,\n onSelect: onSelectProp,\n onRemove: onRemoveProp,\n value,\n onValueChange,\n onCreate,\n placeholder = \"Search...\",\n className,\n disabled = false,\n groupFilter = false,\n pinnedGroups,\n closeOnSelect: closeOnSelectProp = false,\n showGroupCounts = false,\n onCreateNew,\n createNewLabel = \"Create new\",\n}: SearchSelectProps) {\n // Single-mode sugar — when `value` is provided (even as \"\"), derive the\n // multi-mode shape internally so the rest of the render code stays single\n // pathed. `closeOnSelect` is implied for single mode.\n const isSingleMode = value !== undefined || onValueChange !== undefined;\n const singleSelectedOption = React.useMemo(\n () => (isSingleMode && value ? (options.find((o) => o.id === value) ?? null) : null),\n [isSingleMode, value, options],\n );\n const selected = React.useMemo<SearchSelectOption[]>(\n () =>\n isSingleMode\n ? (singleSelectedOption ? [singleSelectedOption] : [])\n : (selectedProp ?? []),\n [isSingleMode, singleSelectedOption, selectedProp],\n );\n const onSelect = React.useCallback(\n (option: SearchSelectOption) => {\n if (isSingleMode) {\n onValueChange?.(option.id);\n } else {\n onSelectProp?.(option);\n }\n },\n [isSingleMode, onValueChange, onSelectProp],\n );\n const onRemove = React.useCallback(\n (option: SearchSelectOption) => {\n if (isSingleMode) {\n onValueChange?.(\"\");\n } else {\n onRemoveProp?.(option);\n }\n },\n [isSingleMode, onValueChange, onRemoveProp],\n );\n const closeOnSelect = isSingleMode || closeOnSelectProp;\n\n const [search, setSearch] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n const [activeChip, setActiveChip] = React.useState<string | null>(null);\n\n const selectedIds = React.useMemo(() => new Set(selected.map((s) => s.id)), [selected]);\n\n const filtered = React.useMemo(\n () => options.filter((opt) => !selectedIds.has(opt.id)),\n [options, selectedIds],\n );\n\n // Bucket options by `group`, preserving first-seen order. When no option\n // carries a group, this collapses to a single headingless bucket and the\n // rendering matches the original flat list.\n const groups = React.useMemo(() => {\n const order: (string | undefined)[] = [];\n const byGroup = new Map<string | undefined, SearchSelectOption[]>();\n for (const opt of filtered) {\n if (!byGroup.has(opt.group)) {\n byGroup.set(opt.group, []);\n order.push(opt.group);\n }\n byGroup.get(opt.group)!.push(opt);\n }\n return order.map((g) => [g, byGroup.get(g)!] as const);\n }, [filtered]);\n\n const hasGroups = React.useMemo(() => groups.some(([g]) => g != null), [groups]);\n\n const pinnedSet = React.useMemo(() => new Set(pinnedGroups ?? []), [pinnedGroups]);\n\n // Filter chips: \"All\" + each non-pinned group, in first-seen order.\n const chips = React.useMemo(() => {\n if (!groupFilter || !hasGroups) return [];\n return groups\n .map(([g]) => g)\n .filter((g): g is string => g != null && !pinnedSet.has(g));\n }, [groupFilter, hasGroups, groups, pinnedSet]);\n\n // Which groups render: when a chip is active, only that group (heading\n // suppressed since the chip names the scope); otherwise every group, with\n // pinned ones kept on top via their natural first-seen order.\n const visibleGroups = React.useMemo(() => {\n if (chips.length > 0 && activeChip) {\n return groups.filter(([g]) => g === activeChip);\n }\n return groups;\n }, [groups, chips.length, activeChip]);\n\n const trimmedSearch = search.trim();\n const hasExactMatch = React.useMemo(\n () => options.some((opt) => opt.label.toLowerCase() === trimmedSearch.toLowerCase()),\n [options, trimmedSearch],\n );\n const showCreate = !!onCreate && trimmedSearch.length > 0 && !hasExactMatch;\n\n const handleSelect = React.useCallback(\n (option: SearchSelectOption) => {\n onSelect(option);\n setSearch(\"\");\n if (closeOnSelect) setOpen(false);\n },\n [onSelect, closeOnSelect],\n );\n\n const handleCreate = React.useCallback(() => {\n if (onCreate && trimmedSearch) {\n onCreate(trimmedSearch);\n setSearch(\"\");\n setOpen(false);\n }\n }, [onCreate, trimmedSearch]);\n\n // Single-select (closeOnSelect): once a choice is made and the popover is\n // closed, the field collapses to show that value in place of the search\n // input — the standard one-pick combobox resting state. Clicking reopens.\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listboxId = React.useId();\n const setInputRef = React.useCallback((node: HTMLInputElement | null) => {\n inputRef.current = node;\n node?.removeAttribute(\"aria-labelledby\");\n node?.setAttribute(\"aria-controls\", listboxId);\n node?.removeAttribute(\"aria-activedescendant\");\n }, [listboxId]);\n const singleValue = closeOnSelect ? (selected[0] ?? null) : null;\n const showValue = singleValue !== null && !open;\n const popoverOpen = open && !disabled;\n\n React.useEffect(() => {\n inputRef.current?.removeAttribute(\"aria-labelledby\");\n inputRef.current?.setAttribute(\"aria-controls\", listboxId);\n inputRef.current?.removeAttribute(\"aria-activedescendant\");\n });\n\n // Move focus into the freshly mounted search input when a single-select\n // field reopens, so the user can type immediately.\n React.useEffect(() => {\n if (open && closeOnSelect) {\n const raf = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(raf);\n }\n }, [open, closeOnSelect]);\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n {/* Selected chips (multi-select only — single-select shows its value in\n the field instead). */}\n {!closeOnSelect && selected.length > 0 && (\n <div className=\"mb-2 flex flex-wrap gap-1.5\">\n {selected.map((item) => (\n <span\n key={item.id}\n className={cn(\n \"rounded-pill border-rule inline-flex items-center gap-1 border px-2 py-0.5 text-[12px]\",\n \"bg-bg-2 font-body text-fg-2\",\n )}\n >\n {item.label}\n <button\n type=\"button\"\n onClick={() => onRemove(item)}\n disabled={disabled}\n className={cn(\n \"text-fg-3 ml-0.5 rounded-full p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label={`Remove ${item.label}`}\n >\n <XIcon className=\"size-3\" aria-hidden=\"true\" />\n </button>\n </span>\n ))}\n </div>\n )}\n\n {!popoverOpen && <div id={listboxId} role=\"listbox\" hidden />}\n <Popover open={popoverOpen} onOpenChange={setOpen}>\n <CommandPrimitive\n shouldFilter\n label={placeholder}\n className=\"overflow-visible bg-transparent\"\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setOpen(false);\n }\n }}\n >\n <PopoverAnchor asChild>\n <div\n className={cn(\n \"rounded-input border-rule-strong bg-surface relative flex h-9 w-full items-center border\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-within:border-accent focus-within:[box-shadow:var(--shadow-focus-ring)]\",\n showValue && \"hover:bg-bg-2 gap-2 pr-2 pl-3\",\n disabled && \"bg-bg-disabled cursor-not-allowed\",\n )}\n >\n {showValue && singleValue ? (\n <>\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(true)}\n disabled={disabled}\n className=\"flex h-full flex-1 items-center gap-2 text-left outline-none disabled:cursor-not-allowed\"\n >\n {singleValue.icon && (\n <span\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-full [&_svg]:size-3\",\n singleValue.iconClassName,\n )}\n aria-hidden=\"true\"\n >\n {singleValue.icon}\n </span>\n )}\n <span className=\"text-fg flex-1 truncate text-[13px]\">\n {singleValue.label}\n {singleValue.description && (\n <span className=\"text-fg-4\"> · {singleValue.description}</span>\n )}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => onRemove(singleValue)}\n disabled={disabled}\n className={cn(\n \"text-fg-3 shrink-0 rounded-full p-0.5\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label={`Clear ${singleValue.label}`}\n >\n <XIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(true)}\n disabled={disabled}\n aria-label={`Change ${singleValue.label}`}\n className={cn(\n \"text-fg-4 shrink-0 rounded-full p-0.5 outline-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:text-fg\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n )}\n >\n <ChevronDownIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </>\n ) : (\n <>\n <SearchIcon\n className=\"text-fg-4 pointer-events-none absolute left-3 size-4\"\n aria-hidden=\"true\"\n />\n <CommandPrimitive.Input\n ref={setInputRef}\n value={search}\n onValueChange={(v) => {\n setSearch(v);\n if (!disabled) setOpen(true);\n }}\n onFocus={() => {\n if (!disabled) setOpen(true);\n }}\n placeholder={placeholder}\n aria-label={placeholder}\n aria-controls={listboxId}\n disabled={disabled}\n className={cn(\n \"font-body text-fg flex-1 bg-transparent py-2 pr-3 pl-9 text-[13px] outline-none\",\n \"placeholder:text-fg-4\",\n \"disabled:text-fg-disabled disabled:cursor-not-allowed\",\n )}\n />\n </>\n )}\n </div>\n </PopoverAnchor>\n\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n // Always open below the field rather than flipping above when the\n // anchor sits low (jarring inside a dialog). `maxHeight` lets the\n // surface shrink to the space below and scroll internally instead.\n avoidCollisions={false}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"[cmdk-input]\")) e.preventDefault();\n }}\n // Width is set inline (not via a class) so it always matches the\n // anchor field: the base PopoverContent ships `w-72`, and\n // tailwind-merge v2 doesn't recognize the v4 `w-(--var)` syntax to\n // strip it, so a class-based override loses to the fixed 288px.\n style={{\n width: \"var(--radix-popover-trigger-width)\",\n maxHeight: \"var(--radix-popover-content-available-height)\",\n }}\n className={cn(\"p-0\", \"flex flex-col\", \"min-w-[12rem] overflow-hidden\")}\n >\n {/* Nested scroll-lock so the list scrolls when the popover is open\n inside a Radix Dialog (whose react-remove-scroll otherwise blocks\n wheel/touch on this portaled-to-body surface). Becomes the top\n lock while open; pops off on close. `contents` adds no box. */}\n <RemoveScroll removeScrollBar={false} className=\"contents\">\n {chips.length > 0 && (\n <div className=\"border-rule flex flex-wrap gap-1 border-b p-1.5\">\n {[null, ...chips].map((chip) => {\n const active = activeChip === chip;\n return (\n <button\n key={chip ?? \"__all\"}\n type=\"button\"\n onClick={() => setActiveChip(chip)}\n className={cn(\n \"rounded-pill px-2.5 py-0.5 text-[12px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n active\n ? \"bg-pro-fg text-fg-on-pro\"\n : \"border-rule text-fg-2 hover:bg-bg-2 border bg-transparent\",\n )}\n >\n {chip ?? \"All\"}\n </button>\n );\n })}\n </div>\n )}\n <CommandPrimitive.List\n id={listboxId}\n className={cn(\n // No top padding: a sticky group heading pins at top-0, so any\n // top padding would leave a strip above it where the previous\n // group's last item peeks through. Top spacing comes from the\n // heading's own pt-2 instead.\n \"scrollbar-thin min-h-0 flex-1 max-h-[min(20rem,60vh)] overflow-y-auto px-1 pb-1\",\n // Quiet sentence-case section labels (only shown when grouped)\n \"[&_[cmdk-group-heading]]:bg-surface [&_[cmdk-group-heading]]:sticky [&_[cmdk-group-heading]]:top-0 [&_[cmdk-group-heading]]:z-10\",\n \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:pt-2 [&_[cmdk-group-heading]]:pb-1\",\n \"[&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:font-medium\",\n \"[&_[cmdk-group-heading]]:text-fg-3\",\n )}\n >\n {filtered.length === 0 && !showCreate && (\n <CommandPrimitive.Empty className=\"text-fg-3 px-3 py-2 text-xs\">\n {search ? \"No results found.\" : \"No options available.\"}\n </CommandPrimitive.Empty>\n )}\n\n {visibleGroups.map(([group, groupOptions]) => {\n // A chip already names the scope, so suppress the redundant heading.\n const baseHeading = activeChip ? undefined : group || undefined;\n // Counts only while browsing the full list — cmdk filters rows\n // internally during a search, so a static group total would\n // disagree with the visible row count.\n const heading =\n baseHeading && showGroupCounts && !trimmedSearch\n ? `${baseHeading} · ${groupOptions.length}`\n : baseHeading;\n return (\n <CommandPrimitive.Group key={group ?? \"__ungrouped\"} heading={heading}>\n {groupOptions.map((option) => {\n const isRich = !!option.icon || !!option.description;\n return (\n <CommandPrimitive.Item\n key={option.id}\n // Include option.id so cmdk gives each option a unique\n // identity. Two options sharing a label (e.g. two\n // clients named \"Ishan Singh\") would otherwise collide\n // and cmdk would highlight/activate them together.\n // Label + group stay in the value so the default\n // substring search keeps matching on them.\n value={hasGroups && group ? `${option.label} ${group} ${option.id}` : `${option.label} ${option.id}`}\n onSelect={() => handleSelect(option)}\n className={cn(\n \"flex cursor-default items-center outline-none select-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n isRich\n ? \"rounded-md text-fg gap-2.5 px-2 py-1.5\"\n : \"rounded-pill text-fg-2 gap-2 px-2 py-1.5 text-[13px]\",\n \"data-[selected=true]:bg-bg-2 data-[selected=true]:text-fg\",\n )}\n >\n {isRich ? (\n <>\n {option.icon && (\n <span\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-full [&_svg]:size-3.5\",\n option.iconClassName,\n )}\n aria-hidden=\"true\"\n >\n {option.icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[13px] font-medium\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"text-fg-4 block truncate text-[11px]\">\n {option.description}\n </span>\n )}\n </span>\n </>\n ) : (\n <>\n {option.color ? (\n <span\n className=\"size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: option.color }}\n aria-hidden=\"true\"\n />\n ) : (\n <CheckIcon\n className=\"size-4 shrink-0 text-transparent\"\n aria-hidden=\"true\"\n />\n )}\n <span className=\"line-clamp-1\">{option.label}</span>\n </>\n )}\n </CommandPrimitive.Item>\n );\n })}\n </CommandPrimitive.Group>\n );\n })}\n\n {showCreate && (\n <>\n {filtered.length > 0 && (\n <div className=\"bg-rule -mx-1 my-1 h-px\" aria-hidden=\"true\" />\n )}\n <CommandPrimitive.Item\n value={`__create_${trimmedSearch}`}\n onSelect={handleCreate}\n className={cn(\n \"rounded-pill flex cursor-default items-center gap-2 px-2 py-1.5 text-[13px] outline-none select-none\",\n \"text-pro-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"data-[selected=true]:bg-pro-bg\",\n )}\n >\n <PlusIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span className=\"line-clamp-1\">Create “{trimmedSearch}”</span>\n </CommandPrimitive.Item>\n </>\n )}\n </CommandPrimitive.List>\n\n {onCreateNew && (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n onCreateNew();\n setOpen(false);\n }}\n className={cn(\n \"border-rule text-pro-fg flex w-full shrink-0 items-center gap-2 border-t px-3 py-2.5 text-[13px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-pro-bg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n >\n <PlusIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n {createNewLabel}\n </button>\n )}\n </RemoveScroll>\n </PopoverContent>\n </CommandPrimitive>\n </Popover>\n </div>\n );\n}\n\nSearchSelect.displayName = \"SearchSelect\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * SectionHeader — title + description block for marketing-style sections.\n * Uses Geist (`font-display`) with the spec's `-0.022em` letterspacing.\n */\n\ninterface SectionHeaderProps {\n title: string;\n description?: string;\n align?: \"left\" | \"center\";\n className?: string;\n}\n\nexport function SectionHeader({\n title,\n description,\n align = \"center\",\n className,\n}: SectionHeaderProps) {\n return (\n <div\n className={cn(\n \"mb-16\",\n align === \"center\" && \"mx-auto max-w-2xl text-center\",\n align === \"left\" && \"max-w-lg\",\n className,\n )}\n >\n <h2\n className={cn(\n \"font-display text-fg mb-4 text-3xl font-medium tracking-[-0.028em] md:text-4xl\",\n )}\n >\n {title}\n </h2>\n {description && <p className=\"text-fg-3 text-lg leading-relaxed\">{description}</p>}\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Section — max-width centered wrapper for marketing/section content.\n * The `--content-pad` token (32px) is the canonical app-content gutter,\n * but Section keeps its 24px (`px-6`) gutter for narrower marketing pages.\n */\n\nconst maxWidthStyles = {\n sm: \"max-w-3xl\",\n md: \"max-w-4xl\",\n lg: \"max-w-5xl\",\n xl: \"max-w-6xl\",\n} as const;\n\ninterface SectionProps extends React.HTMLAttributes<HTMLElement> {\n maxWidth?: keyof typeof maxWidthStyles;\n as?: \"section\" | \"div\";\n}\n\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n { maxWidth = \"xl\", as: Tag = \"section\", children, className, ...props },\n ref,\n) {\n // Cast ref to any: TS can't narrow forwardRef across a polymorphic Tag.\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement> as never}\n className={cn(\"px-6 py-24\", className)}\n {...props}\n >\n <div className={cn(\"mx-auto\", maxWidthStyles[maxWidth])}>{children}</div>\n </Tag>\n );\n});\n\nSection.displayName = \"Section\";\n\ninterface SectionHeadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n eyebrow?: React.ReactNode;\n title?: React.ReactNode;\n meta?: React.ReactNode;\n}\n\nexport const SectionHead = forwardRef<HTMLDivElement, SectionHeadProps>(function SectionHead(\n { eyebrow, title, meta, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule-soft mb-3 flex items-end justify-between gap-3 border-b pb-2\",\n className,\n )}\n {...props}\n >\n <div className=\"min-w-0 space-y-1\">\n {eyebrow && (\n <div className=\"text-fg-4 font-mono [font-feature-settings:'tnum'_1,'lnum'_1,'ss01'_1] text-[10.5px] font-medium tracking-[0.14em] uppercase\">\n {eyebrow}\n </div>\n )}\n {title && (\n <h3 className=\"font-display text-fg text-sm leading-tight font-medium\">{title}</h3>\n )}\n {children}\n </div>\n {meta && <div className=\"text-fg-3 shrink-0 text-xs\">{meta}</div>}\n </div>\n );\n});\n\nSectionHead.displayName = \"SectionHead\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"../lib/cn\";\n\ntype SeparatorProps = React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>;\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(function Separator({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-rule shrink-0\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Sheet — slide-in panel on top of @radix-ui/react-dialog (shadcn pattern).\n *\n * Public API preserved:\n * Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader,\n * SheetTitle, SheetDescription, SheetFooter\n *\n * `side` lives on SheetContent (in shadcn it's a content-level prop). For\n * backwards compatibility with the prior implementation, the `Sheet` root\n * also accepts `side` and forwards it to SheetContent via context.\n *\n * NEW (additive): SheetPortal, SheetOverlay are also exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype SheetWidth = \"default\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\ninterface SheetSideContextValue {\n side?: Side;\n}\nconst SheetSideContext = React.createContext<SheetSideContextValue>({});\n\ninterface SheetProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Root> {\n /**\n * Default side for SheetContent if it doesn't specify its own.\n * Backwards-compat shim — prefer `<SheetContent side=\"…\" />`.\n */\n side?: Side;\n}\n\nconst Sheet = ({ side, children, ...props }: SheetProps) => (\n <SheetPrimitive.Root {...props}>\n <SheetSideContext value={{ side }}>{children}</SheetSideContext>\n </SheetPrimitive.Root>\n);\nSheet.displayName = \"Sheet\";\n\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n ref={ref}\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n cn(\n \"fixed z-[var(--z-modal)] flex flex-col gap-4 bg-surface text-fg shadow-pop\",\n \"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n ),\n {\n variants: {\n side: {\n top: cn(\n \"inset-x-0 top-0 border-b border-rule\",\n \"data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0\",\n ),\n bottom: cn(\n \"inset-x-0 bottom-0 border-t border-rule max-h-[85vh]\",\n \"data-[state=closed]:translate-y-full data-[state=open]:translate-y-0\",\n ),\n left: cn(\n \"inset-y-0 left-0 h-full w-3/4 max-w-sm border-r border-rule\",\n \"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0\",\n ),\n right: cn(\n \"inset-y-0 right-0 h-full w-3/4 max-w-sm border-l border-rule\",\n \"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0\",\n ),\n },\n },\n defaultVariants: { side: \"right\" },\n },\n);\n\nconst sheetWidthClasses: Record<Exclude<SheetWidth, \"default\">, string> = {\n sm: \"w-[95vw] max-w-[95vw] sm:w-[420px]\",\n md: \"w-[95vw] max-w-[95vw] sm:w-[520px]\",\n lg: \"w-[95vw] max-w-[95vw] sm:w-[640px]\",\n xl: \"w-[95vw] max-w-[95vw] sm:w-[760px]\",\n full: \"w-full max-w-none\",\n};\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {\n /** If false, the built-in close button is hidden. Default: true. */\n showCloseButton?: boolean;\n /**\n * Width preset for left/right sheets. Omit for the historical default\n * (`w-3/4 max-w-sm`). Top/bottom sheets ignore this prop.\n */\n width?: SheetWidth;\n /**\n * Custom CSS width for left/right sheets, e.g. `\"520px\"` or\n * `\"min(95vw, 720px)\"`. Prefer `width` presets unless a product surface\n * has a proven one-off contract.\n */\n customWidth?: string;\n}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(\n (\n { side, width = \"default\", customWidth, className, children, showCloseButton = true, style, ...props },\n ref,\n ) => {\n const ctx = React.use(SheetSideContext);\n const resolvedSide: Side = side ?? ctx.side ?? \"right\";\n const supportsWidth = resolvedSide === \"left\" || resolvedSide === \"right\";\n const widthClass = supportsWidth && width !== \"default\" ? sheetWidthClasses[width] : null;\n const widthStyle =\n supportsWidth && customWidth ? { width: customWidth, maxWidth: \"95vw\", ...style } : style;\n\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side: resolvedSide }), widthClass, className)}\n style={widthStyle}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 inline-flex size-7 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"disabled:pointer-events-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n },\n);\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-1.5 p-6 pr-12 pb-0\", className)} {...props} />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"border-rule mt-auto flex flex-col-reverse gap-2 border-t p-6 sm:flex-row sm:items-center sm:justify-end\",\n className,\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-fg text-base leading-tight font-medium tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn(\"text-fg-3 text-sm\", className)} {...props} />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetPortal,\n SheetOverlay,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { XIcon } from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * SideDrawer — slide-in panel on top of @radix-ui/react-dialog.\n *\n * Public API preserved:\n * <SideDrawer open onClose width? side?>{children}</SideDrawer>\n * SideDrawer.Header({ title, subtitle, onClose, className })\n * SideDrawer.Body({ children, className })\n * SideDrawer.Footer({ children, className })\n *\n * Width presets: \"sm\" (420px) | \"md\" (640px) | \"lg\" (50vw, default)\n * Sides: \"right\" (default) | \"left\"\n *\n * Animation uses tw-animate-css `slide-in-from-{side}` keyed on\n * `data-[state=open|closed]` for parity with the Sheet primitive.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst sideDrawerVariants = cva(\n cn(\n \"fixed inset-y-0 z-[var(--z-modal)] flex h-full flex-col bg-surface text-fg shadow-pop\",\n \"font-body\",\n \"transition ease-in-out duration-[var(--duration-normal)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n ),\n {\n variants: {\n side: {\n right: cn(\n \"right-0 border-l border-rule\",\n \"data-[state=closed]:translate-x-full data-[state=open]:translate-x-0\",\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-right\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right\",\n ),\n left: cn(\n \"left-0 border-r border-rule\",\n \"data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0\",\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-left\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-left\",\n ),\n },\n width: {\n sm: \"w-[420px] max-md:w-[95vw]\",\n md: \"w-[640px] max-lg:w-[80vw] max-md:w-[95vw]\",\n lg: \"w-[50vw] max-lg:w-[80vw] max-md:w-[95vw]\",\n },\n },\n defaultVariants: { side: \"right\", width: \"lg\" },\n },\n);\n\ninterface SideDrawerProps extends VariantProps<typeof sideDrawerVariants> {\n open: boolean;\n onClose: () => void;\n width?: \"sm\" | \"md\" | \"lg\";\n side?: \"right\" | \"left\";\n children: React.ReactNode;\n}\n\nexport function SideDrawer({\n open,\n onClose,\n width = \"lg\",\n side = \"right\",\n children,\n}: SideDrawerProps) {\n return (\n <DialogPrimitive.Root\n open={open}\n onOpenChange={(v) => {\n if (!v) onClose();\n }}\n >\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"bg-overlay fixed inset-0 z-[var(--z-overlay)] backdrop-blur-[4px]\",\n \"transition-opacity duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:opacity-0 data-[state=open]:opacity-100\",\n \"motion-reduce:transition-none\",\n )}\n />\n <DialogPrimitive.Content\n className={cn(sideDrawerVariants({ side, width }))}\n // Radix Dialog requires a Title for a11y. Sub-components may\n // render their own visible title, so we provide an SR-only\n // fallback that is always present and harmless.\n aria-describedby={undefined}\n >\n <DialogPrimitive.Title className=\"sr-only\">Side drawer</DialogPrimitive.Title>\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/* ─── Header ────────────────────────────────────────────────── */\n\ninterface SideDrawerHeaderProps {\n title: string;\n subtitle?: string;\n onClose?: () => void;\n className?: string;\n}\n\nfunction SideDrawerHeader({ title, subtitle, onClose, className }: SideDrawerHeaderProps) {\n return (\n <div className={cn(\"border-rule bg-surface shrink-0 border-b px-6 py-4\", className)}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <h2 className=\"font-display text-fg line-clamp-1 text-base leading-tight font-medium tracking-tight\">\n {title}\n </h2>\n {subtitle && <p className=\"text-fg-3 mt-1 text-sm\">{subtitle}</p>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center\",\n \"rounded-icon text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-overlay-hover hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label=\"Close\"\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/* ─── Body ──────────────────────────────────────────────────── */\n\ninterface SideDrawerBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SideDrawerBody({ children, className }: SideDrawerBodyProps) {\n return (\n <div className={cn(\"scrollbar-thin flex-1 overflow-y-auto px-6 py-4\", className)}>\n {children}\n </div>\n );\n}\n\n/* ─── Footer ────────────────────────────────────────────────── */\n\ninterface SideDrawerFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SideDrawerFooter({ children, className }: SideDrawerFooterProps) {\n return (\n <div\n className={cn(\n \"border-rule bg-surface shrink-0 border-t px-6 py-4\",\n \"flex items-center justify-end gap-3\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n\n/* ─── Attach sub-components ─────────────────────────────────── */\n\nSideDrawer.Header = SideDrawerHeader;\nSideDrawer.Body = SideDrawerBody;\nSideDrawer.Footer = SideDrawerFooter;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"../lib/cn\";\n\ninterface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {\n /** Optional inline label rendered above the track */\n label?: string;\n /** When true, renders the current value to the right of the label */\n showValue?: boolean;\n}\n\nexport const Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n function Slider(\n {\n className,\n label,\n showValue,\n id: providedId,\n min = 0,\n max = 100,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n // Resolve a representative single value for the optional readout\n const displayValue = (() => {\n const v = value ?? defaultValue;\n if (Array.isArray(v)) return v.join(\" – \");\n if (typeof v === \"number\") return v;\n return min;\n })();\n const accessibleName = props[\"aria-label\"] ?? label ?? \"Slider value\";\n\n return (\n <div className=\"w-full\">\n {(label || showValue) && (\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n {label ? (\n <label htmlFor={id} className=\"text-fg text-[13px] leading-none font-medium\">\n {label}\n </label>\n ) : (\n <span />\n )}\n {showValue && <span className=\"text-fg-3 font-mono text-[12px]\">{displayValue}</span>}\n </div>\n )}\n <SliderPrimitive.Root\n ref={ref}\n id={id}\n min={min}\n max={max}\n value={value}\n defaultValue={defaultValue}\n className={cn(\n \"relative flex w-full touch-none items-center select-none\",\n \"data-[disabled]:cursor-not-allowed\",\n className,\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"bg-bg-3 data-[disabled]:bg-bg-disabled relative h-1.5 w-full grow overflow-hidden rounded-full\">\n <SliderPrimitive.Range className=\"bg-pro-fg data-[disabled]:bg-fg-disabled absolute h-full\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={cn(\n \"border-pro-fg bg-surface shadow-quiet block size-4 rounded-full border\",\n \"transition-[box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:scale-105\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed\",\n \"data-[disabled]:border-fg-disabled data-[disabled]:bg-bg-disabled\",\n )}\n aria-label={accessibleName}\n />\n </SliderPrimitive.Root>\n </div>\n );\n },\n);\n\nSlider.displayName = SliderPrimitive.Root.displayName;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { StarIcon } from \"./icons\";\n/**\n * StarRating — display-only rating atom built on lucide `Star`. Supports\n * fractional ratings (half-star fill via clip path) and a sized cva variant.\n *\n * Public API preserved: `rating`, `max`, `size`, `className`. The original\n * accepted `size` as a number; that still works (overrides the variant). The\n * new optional `sizeVariant` reads via cva (`sm` / `md` / `lg`).\n */\n\nexport const starRatingVariants = cva(\"flex items-center gap-0.5\", {\n variants: {\n sizeVariant: {\n sm: \"[&_svg]:size-3.5\",\n md: \"[&_svg]:size-4\",\n lg: \"[&_svg]:size-5\",\n },\n },\n defaultVariants: { sizeVariant: \"md\" },\n});\n\nexport interface StarRatingProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"role\">,\n VariantProps<typeof starRatingVariants> {\n rating: number;\n max?: number;\n /** Pixel size override; if set, takes precedence over `sizeVariant`. */\n size?: number;\n}\n\nexport const StarRating = forwardRef<HTMLDivElement, StarRatingProps>(function StarRating(\n { rating, max = 5, size, sizeVariant, className, ...props },\n ref,\n) {\n const stars = Array.from({ length: max });\n const sizeStyle = size ? { width: size, height: size } : undefined;\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={`${rating} out of ${max} stars`}\n className={cn(starRatingVariants({ sizeVariant }), className)}\n {...props}\n >\n {stars.map((_, i) => {\n // Fractional fill calc: 0..1 per star\n const fill = Math.max(0, Math.min(1, rating - i));\n const isFull = fill >= 1;\n const isEmpty = fill === 0;\n const isHalf = !isFull && !isEmpty;\n\n return (\n <span key={i} className=\"relative inline-flex shrink-0\" style={sizeStyle}>\n {/* Track star (empty) */}\n <StarIcon\n className=\"text-fg-5\"\n style={sizeStyle}\n strokeWidth={1.5}\n aria-hidden=\"true\"\n />\n {/* Fill overlay */}\n {!isEmpty && (\n <span\n className=\"text-warning-fg pointer-events-none absolute inset-0 overflow-hidden\"\n style={{\n width: isFull ? \"100%\" : `${fill * 100}%`,\n }}\n aria-hidden=\"true\"\n >\n <StarIcon\n fill=\"currentColor\"\n className=\"text-warning-fg\"\n style={sizeStyle}\n strokeWidth={1.5}\n aria-hidden=\"true\"\n />\n </span>\n )}\n {/* Mark half stars for screen-readers via data attr (no a11y impact). */}\n {isHalf && (\n <span data-half-star className=\"sr-only\">\n half\n </span>\n )}\n </span>\n );\n })}\n </div>\n );\n});\n\nStarRating.displayName = \"StarRating\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Stat — paired numeric display + caption (the StatNum primitive).\n * Numerals are set in `font-display` (Geist) at a fluid clamp size with\n * `font-variant-numeric: tabular-nums` for vertical alignment.\n */\n\ninterface StatProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n label: string;\n}\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(function Stat(\n { value, label, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1\", className)} {...props}>\n <span\n className={cn(\n \"font-display text-fg block leading-none font-medium tracking-[-0.035em]\",\n \"text-[clamp(28px,3.4vw,38px)]\",\n )}\n style={{ fontVariantNumeric: \"tabular-nums\" }}\n >\n {value}\n </span>\n <span className=\"text-fg-3 text-sm\">{label}</span>\n </div>\n );\n});\n\nStat.displayName = \"Stat\";\n","import { cn } from \"../lib/cn\";\n\n/**\n * StatusIcon — progress-aware state circle for arbitrary pipeline stages.\n *\n * Pass a discrete `state`, or drive it from `progress` (0..1) alone:\n * 0 -> unstarted, 1 -> completed, anything between -> a `started` ring with a\n * pie wedge filled clockwise from 12 o'clock. `color` tints the ring + fill\n * (defaults to `currentColor`) so a card can paint per-stage colors; `backlog`\n * and `canceled` fall back to a muted token when no color is given.\n */\n\nexport type StatusState = \"backlog\" | \"unstarted\" | \"started\" | \"completed\" | \"canceled\";\n\nexport interface StatusIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, \"color\"> {\n state?: StatusState;\n progress?: number;\n color?: string;\n size?: number;\n}\n\nconst CENTER = 8;\nconst RING_RADIUS = 6;\nconst STROKE_WIDTH = 2;\nconst PIE_RADIUS = 3;\nconst MUTED = \"var(--color-fg-3)\";\n\nfunction resolveState(state: StatusState | undefined, progress: number | undefined): StatusState {\n if (state) return state;\n if (progress === undefined || !Number.isFinite(progress)) return \"unstarted\";\n if (progress <= 0) return \"unstarted\";\n if (progress >= 1) return \"completed\";\n return \"started\";\n}\n\n/** Filled sector path from 12 o'clock, clockwise, covering `fraction` of the circle. */\nfunction wedgePath(fraction: number): string {\n const f = Math.min(1, Math.max(0, fraction));\n const angle = f * 2 * Math.PI;\n const endX = CENTER + PIE_RADIUS * Math.sin(angle);\n const endY = CENTER - PIE_RADIUS * Math.cos(angle);\n const largeArc = f > 0.5 ? 1 : 0;\n return `M ${CENTER} ${CENTER} L ${CENTER} ${CENTER - PIE_RADIUS} A ${PIE_RADIUS} ${PIE_RADIUS} 0 ${largeArc} 1 ${endX} ${endY} Z`;\n}\n\nexport function StatusIcon({\n state,\n progress,\n color,\n size = 16,\n className,\n ...props\n}: StatusIconProps) {\n const resolved = resolveState(state, progress);\n const tint = color ?? \"currentColor\";\n const mutedTint = color ?? MUTED;\n const fraction = progress !== undefined && Number.isFinite(progress) ? progress : 0.5;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\"shrink-0\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {resolved === \"backlog\" && (\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={mutedTint}\n strokeWidth={STROKE_WIDTH}\n strokeDasharray=\"1.5 1.5\"\n />\n )}\n\n {resolved === \"unstarted\" && (\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={tint}\n strokeWidth={STROKE_WIDTH}\n />\n )}\n\n {resolved === \"started\" && (\n <>\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={tint}\n strokeWidth={STROKE_WIDTH}\n />\n {fraction >= 1 ? (\n <circle cx={CENTER} cy={CENTER} r={PIE_RADIUS} fill={tint} />\n ) : fraction > 0 ? (\n <path d={wedgePath(fraction)} fill={tint} />\n ) : null}\n </>\n )}\n\n {resolved === \"completed\" && (\n <>\n <circle cx={CENTER} cy={CENTER} r={RING_RADIUS + STROKE_WIDTH / 2} fill={tint} />\n <path\n d=\"M5 8.2 7 10.2 11 5.8\"\n fill=\"none\"\n stroke=\"#fff\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </>\n )}\n\n {resolved === \"canceled\" && (\n <>\n <circle\n cx={CENTER}\n cy={CENTER}\n r={RING_RADIUS}\n fill=\"none\"\n stroke={mutedTint}\n strokeWidth={STROKE_WIDTH}\n />\n <path\n d=\"M5.75 5.75 10.25 10.25 M10.25 5.75 5.75 10.25\"\n stroke={mutedTint}\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </>\n )}\n </svg>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { CheckIcon } from \"./icons\";\n/**\n * Stepper — custom progress indicator. No Radix equivalent.\n * Active step uses Pro purple; completed steps use the success palette;\n * connector lines pick up the same status. Supports horizontal (default)\n * and vertical orientation.\n *\n * Public API preserved: `steps`, `currentStep`, plus the new optional\n * `orientation` prop for vertical layouts.\n */\nexport interface Step {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: Step[];\n currentStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(function Stepper(\n { steps, currentStep, orientation = \"horizontal\", className, ...props },\n ref,\n) {\n const isVertical = orientation === \"vertical\";\n\n return (\n <div\n ref={ref}\n className={cn(isVertical ? \"flex flex-col gap-1\" : \"flex items-start gap-2\", className)}\n aria-label=\"Progress\"\n {...props}\n >\n {steps.map((step, index) => {\n const isCompleted = index < currentStep;\n const isActive = index === currentStep;\n const isLast = index === steps.length - 1;\n\n return (\n <div\n key={step.label}\n className={cn(\n isVertical ? \"flex gap-3\" : \"flex items-start gap-2\",\n !isLast && isVertical && \"pb-2\",\n )}\n >\n {/* Marker + connector column (vertical) / inline (horizontal) */}\n <div\n className={cn(isVertical ? \"flex flex-col items-center\" : \"flex items-center gap-2\")}\n >\n <div\n className={cn(\n \"flex size-7 shrink-0 items-center justify-center rounded-full border text-xs font-medium tabular-nums\",\n \"transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n isCompleted && \"bg-success-bg text-success-fg border-success-line\",\n isActive && \"bg-pro-fg text-fg-on-pro border-pro-fg shadow-quiet\",\n !isCompleted && !isActive && \"bg-surface text-fg-4 border-rule\",\n )}\n aria-current={isActive ? \"step\" : undefined}\n >\n {isCompleted ? (\n <CheckIcon className=\"size-3.5\" strokeWidth={2.5} aria-hidden=\"true\" />\n ) : (\n index + 1\n )}\n </div>\n\n {/* Vertical connector */}\n {isVertical && !isLast && (\n <div\n className={cn(\n \"mt-1 min-h-4 w-px flex-1\",\n isCompleted ? \"bg-success-line\" : \"bg-rule\",\n )}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Horizontal label inline beside marker */}\n {!isVertical && (\n <div className=\"flex flex-col\">\n <span\n className={cn(\n \"text-sm leading-tight font-medium\",\n isActive ? \"text-fg\" : isCompleted ? \"text-fg-2\" : \"text-fg-4\",\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-fg-4 mt-0.5 text-xs leading-tight\">\n {step.description}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Vertical label column */}\n {isVertical && (\n <div className=\"flex flex-col pb-1\">\n <span\n className={cn(\n \"text-sm leading-tight font-medium\",\n isActive ? \"text-fg\" : isCompleted ? \"text-fg-2\" : \"text-fg-4\",\n )}\n >\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-fg-4 mt-0.5 text-xs leading-tight\">{step.description}</span>\n )}\n </div>\n )}\n\n {/* Horizontal connector */}\n {!isVertical && !isLast && (\n <div\n className={cn(\n \"mx-2 mt-3.5 h-px w-8 shrink-0 sm:w-12\",\n isCompleted ? \"bg-success-line\" : \"bg-rule\",\n )}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n })}\n </div>\n );\n});\n\nStepper.displayName = \"Stepper\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { useFormStatus } from \"react-dom\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { cn } from \"../lib/cn\";\n\ninterface SubmitButtonProps extends Omit<ButtonProps, \"type\" | \"loading\"> {\n pendingText?: string;\n children: React.ReactNode;\n}\n\n/**\n * SubmitButton — react-dom `useFormStatus`-aware Button.\n * Auto-disables and shows `pendingText` (or spinner) while the form is pending.\n */\nexport const SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>(function SubmitButton(\n { pendingText, children, className, ...props },\n ref,\n) {\n const { pending } = useFormStatus();\n\n return (\n <Button\n ref={ref}\n type=\"submit\"\n loading={pending}\n disabled={pending}\n className={cn(\"w-full\", className)}\n {...props}\n >\n {pending && pendingText ? pendingText : children}\n </Button>\n );\n});\n\nSubmitButton.displayName = \"SubmitButton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst switchVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-colors duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed\",\n \"data-[state=checked]:bg-pro-fg data-[state=unchecked]:bg-bg-3\",\n // §5.17: disabled is signalled via the disabled token swap on the\n // track itself; the thumb borrows fg-disabled. No opacity.\n \"data-[disabled]:data-[state=checked]:bg-fg-disabled\",\n \"data-[disabled]:data-[state=unchecked]:bg-bg-disabled\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst switchThumbVariants = cva(\n [\n \"pointer-events-none block rounded-full bg-surface shadow-quiet ring-0\",\n \"transition-transform duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n ],\n {\n variants: {\n size: {\n sm: \"size-3.5 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-[18px] data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-0.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\ninterface SwitchProps\n extends\n Omit<React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, \"size\">,\n VariantProps<typeof switchVariants> {\n label?: string;\n}\n\nexport const Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n function Switch({ label, size, className, id: providedId, ...props }, ref) {\n const generatedId = React.useId();\n const id = providedId ?? generatedId;\n\n const root = (\n <SwitchPrimitive.Root\n ref={ref}\n id={id}\n className={cn(switchVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb className={cn(switchThumbVariants({ size }))} />\n </SwitchPrimitive.Root>\n );\n\n if (!label) return root;\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n {root}\n <label\n htmlFor={id}\n className=\"text-fg peer-disabled:text-fg-disabled cursor-pointer text-[13px] leading-none select-none peer-disabled:cursor-not-allowed\"\n >\n {label}\n </label>\n </div>\n );\n },\n);\n\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Table — semantic data-table primitives:\n * - mono uppercase headers (10px, 0.12em tracking) on `bg-surface-2`\n * - 1px `border-rule` under header, `border-rule-soft` between rows\n * - 13px body cells in `text-fg-2`, hover row gets `bg-bg-2`\n *\n * Public API: Table / TableHeader / TableBody / TableRow /\n * TableHead / TableCell / TableCaption. `wrapperClassName` wraps\n * the responsive overflow container.\n */\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Class for the wrapping `div` that handles overflow. */\n wrapperClassName?: string;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { className, wrapperClassName, ...props },\n ref,\n) {\n return (\n <div\n className={cn(\n \"rounded-card border-rule bg-surface w-full overflow-x-auto border\",\n wrapperClassName,\n )}\n >\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom border-collapse text-sm\", className)}\n {...props}\n />\n </div>\n );\n});\nTable.displayName = \"Table\";\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <thead ref={ref} className={cn(\"[&_tr]:border-rule [&_tr]:border-b\", className)} {...props} />\n );\n },\n);\nTableHeader.displayName = \"TableHeader\";\n\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, ...props },\n ref,\n) {\n return <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n});\nTableBody.displayName = \"TableBody\";\n\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn(\n \"border-rule bg-surface-2 border-t font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nTableFooter.displayName = \"TableFooter\";\n\nexport type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { className, ...props },\n ref,\n) {\n return (\n <tr\n ref={ref}\n className={cn(\n \"border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n // G15 compound: selected wins over hover; selected+hover uses the\n // Pro hover tint (not bg-bg-2, which would fight the selection).\n \"data-[state=selected]:bg-pro-bg data-[state=selected]:hover:bg-pro-bg-hover\",\n \"[&:not([data-state=selected])]:hover:bg-bg-2\",\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = \"TableRow\";\n\nexport type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement>;\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { className, ...props },\n ref,\n) {\n return (\n <th\n ref={ref}\n className={cn(\n // .data-table th — mono, 10px, uppercase, tight tracking 0.12em\n \"h-9 px-3.5 py-2 text-left align-middle whitespace-nowrap\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 bg-surface-2\",\n \"border-rule border-b\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = \"TableHead\";\n\nexport type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, ...props },\n ref,\n) {\n return (\n <td\n ref={ref}\n className={cn(\n // .data-table td — 13px, fg-2, soft 1px row divider, tabular nums\n \"text-fg-2 px-3.5 py-2.5 align-middle text-[13px] tabular-nums\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n});\nTableCell.displayName = \"TableCell\";\n\nexport type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n function TableCaption({ className, ...props }, ref) {\n return <caption ref={ref} className={cn(\"text-fg-3 mt-3 text-sm\", className)} {...props} />;\n },\n);\nTableCaption.displayName = \"TableCaption\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* Tabs root */\n/* -------------------------------------------------------------------------- */\n\ntype TabsProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;\n\nexport const Tabs = React.forwardRef<React.ElementRef<typeof TabsPrimitive.Root>, TabsProps>(\n function Tabs({ className, ...props }, ref) {\n return <TabsPrimitive.Root ref={ref} className={cn(className)} {...props} />;\n },\n);\nTabs.displayName = TabsPrimitive.Root.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsList */\n/* Per spec §5 / 04-client-detail.html: a flush row sitting on a 1px rule. */\n/* -------------------------------------------------------------------------- */\n\ntype TabsListProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\n\nexport const TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(function TabsList({ className, ...props }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\"border-rule inline-flex items-center gap-0 border-b\", className)}\n {...props}\n />\n );\n});\nTabsList.displayName = TabsPrimitive.List.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsTrigger — pill | underline (default underline, matches mockup) */\n/* -------------------------------------------------------------------------- */\n\nconst triggerVariants = cva(\n cn(\n \"inline-flex items-center justify-center gap-2 text-[13px] font-medium\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-fg-disabled\",\n \"hover:text-fg\",\n ),\n {\n variants: {\n variant: {\n // §5.16: tab current = 2px accent underline + bold foreground text.\n // The cyan rule carries the brand statement (tabs are interaction,\n // so cyan; Pro purple is reserved for selection state on\n // list/dropdown surfaces). The active LABEL stays in `text-fg` for\n // legibility — accent on text was too low-contrast against the page\n // background, especially in dark mode.\n underline: cn(\n \"rounded-none bg-transparent px-3.5 py-2.5\",\n \"border-b-2 border-transparent -mb-px\",\n \"data-[state=active]:border-accent data-[state=active]:text-fg data-[state=active]:font-semibold\",\n ),\n pill: cn(\n \"rounded-pill px-3 py-1.5\",\n \"data-[state=active]:bg-pro-bg data-[state=active]:text-pro-fg\",\n ),\n },\n },\n defaultVariants: {\n variant: \"underline\",\n },\n },\n);\n\ninterface TabsTriggerProps\n extends\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof triggerVariants> {}\n\nexport const TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(function TabsTrigger({ className, variant, ...props }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(triggerVariants({ variant }), className)}\n {...props}\n />\n );\n});\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\n/* -------------------------------------------------------------------------- */\n/* TabsContent */\n/* -------------------------------------------------------------------------- */\n\ntype TabsContentProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;\n\nexport const TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n TabsContentProps\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-3 focus-visible:outline-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n className,\n )}\n {...props}\n />\n );\n});\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { Select, type SelectOption } from \"./select\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * TeamMemberSelect — assignee picker, built on the new Radix-based\n * `Select` primitive.\n *\n * Public API preserved verbatim:\n * <TeamMemberSelect\n * teamMembers currentUserId\n * value onValueChange\n * includeUnassigned placeholder\n * />\n *\n * Behaviour:\n * - Sort: current user first (when `currentUserId` matches), then\n * alphabetical on `fullName`.\n * - Current user is annotated with a small \"Me\" badge as the\n * `labelSuffix` of its option.\n * - When `includeUnassigned` is true (default), prepends a sentinel\n * `__unassigned__` option labelled \"Unassigned\". Note: legacy code\n * used `value: \"\"` for this, but Radix Select forbids empty-string\n * item values. We map \"\" ↔ \"__unassigned__\" transparently so the\n * consumer-facing contract (`value: \"\"` ⇔ unassigned) is preserved.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst UNASSIGNED_VALUE = \"__unassigned__\";\n\ninterface TeamMember {\n id: string;\n fullName: string;\n}\n\ninterface TeamMemberSelectProps {\n teamMembers: TeamMember[];\n currentUserId?: string | null;\n value: string;\n onValueChange: (value: string) => void;\n includeUnassigned?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nexport function TeamMemberSelect({\n teamMembers,\n currentUserId,\n value,\n onValueChange,\n includeUnassigned = true,\n placeholder = \"Select team member...\",\n className,\n}: TeamMemberSelectProps) {\n const options = React.useMemo<SelectOption[]>(() => {\n const meBadge = (\n <Badge\n variant=\"secondary\"\n size=\"sm\"\n className=\"px-1.5 py-0 font-mono text-[10px] tracking-wider uppercase\"\n >\n Me\n </Badge>\n );\n\n // Sort: current user first, then alphabetical\n const sorted = [...teamMembers].sort((a, b) => {\n if (currentUserId) {\n if (a.id === currentUserId) return -1;\n if (b.id === currentUserId) return 1;\n }\n return a.fullName.localeCompare(b.fullName);\n });\n\n const memberOptions: SelectOption[] = sorted.map((m) => ({\n value: m.id,\n label: m.fullName,\n labelSuffix: m.id === currentUserId ? meBadge : undefined,\n }));\n\n if (includeUnassigned) {\n return [{ value: UNASSIGNED_VALUE, label: \"Unassigned\" }, ...memberOptions];\n }\n\n return memberOptions;\n }, [teamMembers, currentUserId, includeUnassigned]);\n\n // Map \"\" (legacy unassigned) ↔ sentinel for Radix.\n const innerValue = value === \"\" ? UNASSIGNED_VALUE : value;\n const handleChange = (next: string) => {\n onValueChange(next === UNASSIGNED_VALUE ? \"\" : next);\n };\n\n return (\n <Select\n options={options}\n value={innerValue}\n onValueChange={handleChange}\n placeholder={placeholder}\n className={className}\n />\n );\n}\n\nTeamMemberSelect.displayName = \"TeamMemberSelect\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst textareaVariants = cva(\n [\n \"flex w-full rounded-input border bg-surface font-body text-fg\",\n \"transition-[color,background-color,border-color,box-shadow] duration-[var(--duration-fast)]\",\n \"placeholder:text-fg-4\",\n \"focus-visible:outline-none focus-visible:border-accent\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"aria-[invalid=true]:border-danger-line aria-[invalid=true]:focus-visible:border-danger-fg\",\n \"aria-[invalid=true]:focus-visible:[box-shadow:0_0_0_2px_var(--color-danger-bg)]\",\n ],\n {\n variants: {\n variant: {\n default: \"border-rule-strong\",\n ghost: \"border-transparent bg-transparent focus-visible:bg-surface\",\n },\n inputSize: {\n sm: \"min-h-16 px-2.5 py-1.5 text-xs\",\n md: \"min-h-20 px-3 py-2 text-[13px]\",\n lg: \"min-h-24 px-3.5 py-2.5 text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"md\",\n },\n },\n);\n\nexport type TextareaVariants = VariantProps<typeof textareaVariants>;\n\ninterface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">, TextareaVariants {\n label?: string;\n error?: string;\n showCount?: boolean;\n autoResize?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n label,\n error,\n showCount,\n autoResize,\n variant,\n inputSize,\n maxLength,\n value,\n defaultValue,\n className,\n id: providedId,\n onChange,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const errorId = `${id}-error`;\n const internalRef = useRef<HTMLTextAreaElement | null>(null);\n\n const setRefs = useCallback(\n (node: HTMLTextAreaElement | null) => {\n internalRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const adjustHeight = useCallback(() => {\n if (!autoResize || !internalRef.current) return;\n const el = internalRef.current;\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n }, [autoResize]);\n\n useEffect(() => {\n adjustHeight();\n }, [value, adjustHeight]);\n\n const currentLength =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={id} className=\"text-fg mb-1.5 block text-[13px] leading-none font-medium\">\n {label}\n </label>\n )}\n <textarea\n ref={setRefs}\n id={id}\n value={value}\n defaultValue={defaultValue}\n maxLength={maxLength}\n aria-invalid={!!error || undefined}\n aria-describedby={error ? errorId : undefined}\n onChange={(e) => {\n onChange?.(e);\n adjustHeight();\n }}\n className={cn(\n textareaVariants({ variant, inputSize }),\n autoResize && \"resize-none overflow-hidden\",\n className,\n )}\n {...props}\n />\n {(error || (showCount && maxLength)) && (\n <div className=\"mt-1.5 flex items-center justify-between gap-2\">\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-danger-fg text-xs\">\n {error}\n </p>\n ) : (\n <span />\n )}\n {showCount && maxLength && (\n <span className=\"text-fg-4 ml-auto font-mono text-[11px]\">\n {currentLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n\nTextarea.displayName = \"Textarea\";\n\nexport { textareaVariants };\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport {\n AlertTriangleSolidIcon,\n CheckCircleSolidIcon,\n InfoCircleSolidIcon,\n XCircleSolidIcon,\n XIcon,\n} from \"./icons\";\n/* ───────────────────────────────────────────────────────────────────────\n * Toast — custom (no Radix). Consumer contract:\n * useToast() → { toast, dismiss }\n *\n * Public API:\n * - `ToastProvider` mounts the toast region.\n * - `useToast()` returns `{ toast, dismiss }`.\n * • `toast({ title, description?, variant?, duration?, action? })`\n * • `dismiss(id?)` — dismiss a specific toast, or all when no id given.\n *\n * Visual model: a neutral surface card with a filled, variant-colored icon\n * chip on the leading edge — the colour lives in the chip, not the card\n * background, so toasts stay legible and on-brand regardless of variant.\n *\n * Variant → tinted chip + solid status glyph (distinct shapes per severity):\n * default → pro / InfoCircleSolidIcon\n * success → success / CheckCircleSolidIcon\n * destructive→ danger / XCircleSolidIcon\n * warning → warning / AlertTriangleSolidIcon\n * ─────────────────────────────────────────────────────────────────────── */\n\ntype ToastVariant = \"default\" | \"success\" | \"destructive\" | \"warning\";\n\ninterface ToastAction {\n label: string;\n onClick: () => void;\n}\n\ninterface Toast {\n id: string;\n title: string;\n description?: string;\n variant?: ToastVariant;\n duration?: number;\n action?: ToastAction;\n}\n\ninterface ToastContextValue {\n toast: (options: Omit<Toast, \"id\">) => string;\n dismiss: (id?: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast() {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within <ToastProvider>\");\n return ctx;\n}\n\nlet toastCount = 0;\n\ninterface ToastProviderProps {\n children: React.ReactNode;\n}\n\nexport function ToastProvider({ children }: ToastProviderProps) {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const addToast = useCallback((options: Omit<Toast, \"id\">) => {\n const id = `toast-${++toastCount}`;\n setToasts((prev) => [...prev, { id, ...options }]);\n return id;\n }, []);\n\n const dismiss = useCallback((id?: string) => {\n if (id === undefined) {\n setToasts([]);\n return;\n }\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const value = useMemo<ToastContextValue>(\n () => ({ toast: addToast, dismiss }),\n [addToast, dismiss],\n );\n\n return (\n <ToastContext value={value}>\n {children}\n <div\n className=\"pointer-events-none fixed top-4 right-4 z-[var(--z-toast)] flex flex-col gap-2\"\n role=\"region\"\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} toast={t} onDismiss={removeToast} />\n ))}\n </div>\n </ToastContext>\n );\n}\n\nconst variantConfig: Record<\n ToastVariant,\n { chip: string; icon: string; bar: string; Icon: typeof CheckCircleSolidIcon }\n> = {\n default: { chip: \"bg-pro-bg\", icon: \"text-pro-fg\", bar: \"bg-pro-fg\", Icon: InfoCircleSolidIcon },\n success: {\n chip: \"bg-success-bg\",\n icon: \"text-success-fg\",\n bar: \"bg-success-fg\",\n Icon: CheckCircleSolidIcon,\n },\n destructive: {\n chip: \"bg-danger-bg\",\n icon: \"text-danger-fg\",\n bar: \"bg-danger-fg\",\n Icon: XCircleSolidIcon,\n },\n warning: {\n chip: \"bg-warning-bg\",\n icon: \"text-warning-fg\",\n bar: \"bg-warning-fg\",\n Icon: AlertTriangleSolidIcon,\n },\n};\n\ninterface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n}\n\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const [exiting, setExiting] = useState(false);\n const [filled, setFilled] = useState(false);\n\n const duration = toast.duration ?? 5000;\n const showProgress = duration > 0; // 0 = sticky toast, no countdown\n\n const close = useCallback(() => {\n setExiting(true);\n // Match exit animation duration (--duration-fast, 150ms) so the toast\n // unmounts immediately after it visually leaves the screen.\n setTimeout(() => onDismiss(toast.id), 150);\n }, [toast.id, onDismiss]);\n\n useEffect(() => {\n if (!showProgress) return;\n timerRef.current = setTimeout(close, duration);\n return () => clearTimeout(timerRef.current);\n }, [showProgress, duration, close]);\n\n // Run the progress bar from 0 → 100% across the toast's lifetime. Flip the\n // width on the next frame so the CSS width transition actually animates.\n useEffect(() => {\n if (!showProgress) return;\n const raf = requestAnimationFrame(() => setFilled(true));\n return () => cancelAnimationFrame(raf);\n }, [showProgress]);\n\n const { chip, icon, bar, Icon } = variantConfig[toast.variant ?? \"default\"];\n\n return (\n <div\n role=\"status\"\n data-state={exiting ? \"closed\" : \"open\"}\n className={cn(\n \"bg-surface border-rule text-fg rounded-card shadow-card pointer-events-auto relative w-80 overflow-hidden border p-4\",\n \"font-body\",\n // Unified data-state animation (spec §5.27) — same model as Dialog/Tooltip:\n // open → fade+slide in over --duration-overlay (200ms), ease-out-quart\n // close → fade+slide out over --duration-fast (150ms), ease-in\n \"data-[state=open]:animate-in data-[state=open]:slide-in-from-right-8 data-[state=open]:fade-in-0\",\n \"data-[state=open]:duration-[var(--duration-overlay)] data-[state=open]:ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right-8 data-[state=closed]:fade-out-0\",\n \"data-[state=closed]:duration-[var(--duration-fast)] data-[state=closed]:ease-[var(--ease-in)]\",\n \"motion-reduce:animate-none\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-[9px]\",\n chip,\n icon,\n )}\n aria-hidden=\"true\"\n >\n <Icon className=\"size-5\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-fg text-sm leading-tight font-semibold\">{toast.title}</p>\n {toast.description && (\n <p className=\"text-fg-3 mt-0.5 text-sm leading-snug\">{toast.description}</p>\n )}\n {toast.action && (\n <button\n type=\"button\"\n onClick={() => {\n toast.action?.onClick();\n close();\n }}\n className={cn(\n \"text-pro-fg mt-2 text-sm font-semibold\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:underline motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] rounded-sm focus-visible:outline-none\",\n )}\n >\n {toast.action.label}\n </button>\n )}\n </div>\n <button\n type=\"button\"\n onClick={close}\n className={cn(\n \"text-fg-4 hover:text-fg-2 rounded-icon -mr-1 inline-flex size-5 shrink-0 items-center justify-center\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n aria-label=\"Dismiss\"\n >\n <XIcon className=\"size-3.5\" aria-hidden=\"true\" />\n </button>\n </div>\n {showProgress && (\n <div className=\"bg-rule absolute inset-x-0 bottom-0 h-1\" aria-hidden=\"true\">\n <div\n className={cn(\n \"h-full transition-[width] ease-linear motion-reduce:transition-none\",\n bar,\n )}\n style={{ width: filled ? \"100%\" : \"0%\", transitionDuration: `${duration}ms` }}\n />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\n/* -------------------------------------------------------------------------- */\n/* ToggleGroup */\n/* Wraps Radix ToggleGroup; preserves single|multiple + default|outline. */\n/* -------------------------------------------------------------------------- */\n\nconst itemVariants = cva(\n cn(\n \"inline-flex items-center justify-center rounded-pill px-3 py-1.5 text-[13px] font-medium\",\n \"text-fg-3 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-2 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled\",\n \"data-[state=on]:bg-pro-bg data-[state=on]:text-pro-fg\",\n ),\n {\n variants: {\n variant: {\n default: \"\",\n outline: \"border border-rule-strong bg-surface\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ntype ToggleGroupContextValue = VariantProps<typeof itemVariants>;\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n variant: \"default\",\n});\n\ntype ToggleGroupRootProps = React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof itemVariants>;\n\nexport const ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n ToggleGroupRootProps\n>(function ToggleGroup({ className, variant, children, ...props }, ref) {\n return (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...(props as React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root>)}\n >\n <ToggleGroupContext.Provider value={{ variant }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n});\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;\n\ninterface ToggleGroupItemProps\n extends\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item>,\n VariantProps<typeof itemVariants> {}\n\nexport const ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n ToggleGroupItemProps\n>(function ToggleGroupItem({ className, variant, ...props }, ref) {\n const ctx = React.useContext(ToggleGroupContext);\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(itemVariants({ variant: variant ?? ctx.variant }), className)}\n {...props}\n />\n );\n});\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Tooltip — Radix UI tooltip primitive. Modified\n *\n * The root `Tooltip` wraps `TooltipPrimitive.Provider` once per instance\n * so single-use tooltips work without app-level provider scaffolding.\n * Apps that render many tooltips should still mount a single\n * `<TooltipProvider>` at the app root for shared `delayDuration` /\n * `skipDelayDuration` semantics.\n *\n * Public API preserved:\n * Tooltip (with `delayMs` prop), TooltipTrigger, TooltipContent\n *\n * NEW (additive): TooltipProvider, TooltipPortal are exported.\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\nconst TooltipPortal = TooltipPrimitive.Portal;\n\ninterface TooltipProps extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root> {\n /**\n * Backwards-compat alias for Radix's `delayDuration`. Kept so existing\n * call sites that passed `delayMs={…}` keep working unchanged.\n */\n delayMs?: number;\n /**\n * Optional delayDuration applied to the implicit Provider. Forwarded\n * here when no surrounding `<TooltipProvider>` is present.\n */\n delayDuration?: number;\n}\n\nconst Tooltip = ({ delayMs, delayDuration, children, ...props }: TooltipProps) => {\n const resolvedDelay = delayDuration ?? delayMs ?? 300;\n return (\n <TooltipPrimitive.Provider delayDuration={resolvedDelay}>\n <TooltipPrimitive.Root delayDuration={resolvedDelay} {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\nTooltip.displayName = \"Tooltip\";\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"rounded-input border-rule-strong bg-surface z-[var(--z-tooltip)] max-w-xs border px-2.5 py-1.5\",\n \"font-body text-fg shadow-pop text-xs leading-tight\",\n \"transition-[opacity,transform] duration-[var(--duration-overlay)] ease-[var(--ease-out-quart)]\",\n \"data-[state=closed]:scale-95 data-[state=closed]:opacity-0\",\n \"data-[state=delayed-open]:scale-100 data-[state=delayed-open]:opacity-100\",\n \"data-[state=instant-open]:scale-100 data-[state=instant-open]:opacity-100\",\n \"motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipProvider, TooltipTrigger, TooltipPortal, TooltipContent };\n","import * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { forwardRef } from \"react\";\n\n/**\n * VisuallyHidden — hides content from sighted users while keeping it\n * available to assistive tech. Backed by `@radix-ui/react-visually-hidden`\n * (the canonical implementation; survives strict-mode + portals).\n */\n\ninterface VisuallyHiddenProps extends React.ComponentPropsWithoutRef<\n typeof VisuallyHiddenPrimitive.Root\n> {\n children: React.ReactNode;\n}\n\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n function VisuallyHidden({ children, ...props }, ref) {\n return (\n <VisuallyHiddenPrimitive.Root ref={ref} {...props}>\n {children}\n </VisuallyHiddenPrimitive.Root>\n );\n },\n);\n\nVisuallyHidden.displayName = \"VisuallyHidden\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nexport type ShellProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Shell = forwardRef<HTMLDivElement, ShellProps>(function Shell(\n { className, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(\"bg-bg flex h-dvh w-full\", className)} {...props} />;\n});\nShell.displayName = \"Shell\";\n\nexport type MainProps = React.HTMLAttributes<HTMLElement>;\n\nexport const Main = forwardRef<HTMLElement, MainProps>(function Main({ className, ...props }, ref) {\n return (\n <main\n ref={ref}\n className={cn(\"flex min-w-0 flex-1 flex-col overflow-hidden\", className)}\n {...props}\n />\n );\n});\nMain.displayName = \"Main\";\n\nexport interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Override the top padding only. Use this when an app shell has its own\n * sticky header rhythm and needs a denser first row without reaching for\n * important-class overrides.\n *\n * Accepts any CSS length (e.g. `\"12px\"`, `\"1rem\"`). Omit to inherit\n * the symmetric default.\n */\n padTop?: string;\n /**\n * Override the bottom padding only — the rest of the content area keeps\n * `--content-pad` so the header alignment stays intact. Use this on\n * long-scroll pages (Kanban, document trees, large tables) that want\n * extra breathing room beneath the last row.\n *\n * Accepts any CSS length (e.g. `\"64px\"`, `\"4rem\"`). Omit to inherit\n * the symmetric default.\n */\n padBottom?: string;\n}\n\nexport const Content = forwardRef<HTMLDivElement, ContentProps>(function Content(\n { padTop, padBottom, className, style, ...props },\n ref,\n) {\n const paddingStyle =\n padTop || padBottom\n ? {\n ...(padTop ? { paddingTop: padTop } : null),\n ...(padBottom ? { paddingBottom: padBottom } : null),\n ...style,\n }\n : style;\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label=\"Page content\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- Keyboard focus is required for scrollable regions in Safari.\n tabIndex={0}\n className={cn(\"flex-1 overflow-y-auto p-[var(--content-pad)]\", className)}\n style={paddingStyle}\n {...props}\n />\n );\n});\nContent.displayName = \"Content\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { Avatar } from \"../primitives/avatar\";\nimport { Collapsible, CollapsibleContent } from \"../primitives/collapsible\";\nimport { ChevronDownIcon, PanelLeftCloseIcon, PanelLeftIcon } from \"../primitives/icons\";\nimport { cn } from \"../lib/cn\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * State model\n *\n * `expanded` — full 256px column, labels visible. The legacy behavior;\n * still the default for any consumer that doesn't opt in.\n * `rail` — 64px icon column, labels hidden. The user's *pinned*\n * intent to reclaim canvas width.\n *\n * Peek is *transient* and not part of the user intent — when in `rail`,\n * hovering the column momentarily widens it back to expanded as a\n * floating overlay so the user can read labels without losing their\n * pinned preference. Peek lives inside the <Sidebar> as local state.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarState = \"expanded\" | \"rail\";\n\ninterface SidebarContextValue {\n state: SidebarState;\n setState: (next: SidebarState) => void;\n toggle: () => void;\n collapsible: boolean;\n /**\n * Refcount of \"hold the column visually expanded\" requests from external\n * consumers (dropdowns, popovers, command palettes). Read by <Sidebar> to\n * trigger overlay rendering without mutating the persistent `state`.\n * See `useSidebarPeekLock` for the canonical consumer API.\n */\n peekLockCount: number;\n /**\n * Increment the peek-lock refcount. Returns an idempotent release function\n * that decrements once when called and is safe to call twice. Prefer the\n * `useSidebarPeekLock` hook over calling this directly — it handles the\n * acquire/release lifecycle via useEffect cleanup.\n */\n acquirePeekLock: () => () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n// Sentinel so atoms can render outside a provider without crashing —\n// keeps the legacy \"drop a <Sidebar> into a <Shell>\" path working\n// untouched.\nconst NOOP_CONTEXT: SidebarContextValue = {\n state: \"expanded\",\n setState: () => {},\n toggle: () => {},\n collapsible: false,\n peekLockCount: 0,\n acquirePeekLock: () => () => {},\n};\n\nexport function useSidebarState(): SidebarContextValue {\n return React.useContext(SidebarContext) ?? NOOP_CONTEXT;\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Provider\n *\n * Wraps the app shell. Owns the user's pinned intent. Controlled\n * (`state` + `onStateChange`) and uncontrolled (`defaultState`) modes\n * both supported, following the Radix pattern.\n *\n * `storageKey` opts into localStorage persistence. The stored value is\n * applied *post-mount* via `useEffect`, never in the initial render — so\n * SSR markup and the client's first render produce identical trees and\n * React's `useId` counter doesn't drift for downstream Radix primitives.\n * The trade-off is a one-frame flash from `defaultState` to the stored\n * state when a user has previously pinned a non-default. Consumers that\n * cannot tolerate the flash should persist via a cookie they read in a\n * server component and pass through `defaultState`.\n *\n * `shortcut` defaults to `Mod+\\` — same chord as VS Code, GitHub, Linear.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarProviderProps {\n children?: React.ReactNode;\n state?: SidebarState;\n defaultState?: SidebarState;\n onStateChange?: (next: SidebarState) => void;\n /** Persist the user's intent across reloads under this localStorage key. */\n storageKey?: string;\n /** Global toggle shortcut. Pass `null` to disable. Defaults to `Mod+\\`. */\n shortcut?: string | null;\n}\n\nconst DEFAULT_SHORTCUT = \"Mod+\\\\\";\n\nfunction readStorage(key: string | undefined): SidebarState | null {\n if (!key || typeof window === \"undefined\") return null;\n try {\n const v = window.localStorage.getItem(key);\n return v === \"rail\" || v === \"expanded\" ? v : null;\n } catch {\n return null;\n }\n}\n\nexport function SidebarProvider({\n children,\n state: controlled,\n defaultState = \"expanded\",\n onStateChange,\n storageKey,\n shortcut = DEFAULT_SHORTCUT,\n}: SidebarProviderProps) {\n // Initial state must be identical on SSR and the client's first render.\n // Reading localStorage here would diverge the two and shift React's\n // `useId` counter for every Radix primitive downstream — the bug that\n // broke `aria-controls` wiring in dropdowns nested inside the app shell.\n // The post-mount effect below applies the stored value on the second\n // render. The one-frame flash is the documented trade-off.\n const [uncontrolled, setUncontrolled] = React.useState<SidebarState>(\n controlled ?? defaultState,\n );\n\n React.useEffect(() => {\n if (controlled !== undefined) return;\n const stored = readStorage(storageKey);\n if (stored && stored !== uncontrolled) setUncontrolled(stored);\n // Apply stored value once after hydration. Subsequent writes are\n // owned by `setState` below and persisted there.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const state = controlled ?? uncontrolled;\n\n const setState = React.useCallback(\n (next: SidebarState) => {\n if (controlled === undefined) setUncontrolled(next);\n onStateChange?.(next);\n if (storageKey && typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(storageKey, next);\n } catch {\n /* quota / private-mode — ignore, runtime state still works */\n }\n }\n },\n [controlled, onStateChange, storageKey],\n );\n\n const toggle = React.useCallback(() => {\n setState(state === \"expanded\" ? \"rail\" : \"expanded\");\n }, [state, setState]);\n\n // Peek-lock refcount. External consumers (dropdowns, popovers) acquire a\n // lock to hold the column visually expanded as an overlay while their UI\n // is open, without touching the user's persisted `state`. Refcounted so\n // multiple peer consumers compose: e.g. a popover inside a dropdown still\n // holds the column open after the dropdown closes, until the popover\n // releases too. The pinned intent stays the user's, transient visibility\n // stays the consumer's.\n const [peekLockCount, setPeekLockCount] = React.useState(0);\n\n const acquirePeekLock = React.useCallback(() => {\n setPeekLockCount((n) => n + 1);\n // The release closure is idempotent: a consumer that holds the lock\n // through React strict-mode double-effects, or a defensive double-call,\n // must not double-decrement. The `released` flag guards against that;\n // `Math.max(0, n - 1)` is a belt-and-braces floor so accounting bugs\n // can never drag the count negative and leave a permanent overlay.\n let released = false;\n return () => {\n if (released) return;\n released = true;\n setPeekLockCount((n) => Math.max(0, n - 1));\n };\n }, []);\n\n React.useEffect(() => {\n if (!shortcut) return;\n const parts = shortcut.split(\"+\");\n const key = parts.pop() ?? \"\";\n const wantMod = parts.includes(\"Mod\");\n const wantShift = parts.includes(\"Shift\");\n const wantAlt = parts.includes(\"Alt\");\n function onKey(e: KeyboardEvent) {\n const isMac =\n typeof navigator !== \"undefined\" && /Mac|iPhone|iPad/.test(navigator.platform);\n const mod = isMac ? e.metaKey : e.ctrlKey;\n if (e.key.toLowerCase() !== key.toLowerCase()) return;\n if (wantMod !== mod) return;\n if (wantShift !== e.shiftKey) return;\n if (wantAlt !== e.altKey) return;\n e.preventDefault();\n toggle();\n }\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [shortcut, toggle]);\n\n const value: SidebarContextValue = React.useMemo(\n () => ({ state, setState, toggle, collapsible: true, peekLockCount, acquirePeekLock }),\n [state, setState, toggle, peekLockCount, acquirePeekLock],\n );\n\n return <SidebarContext.Provider value={value}>{children}</SidebarContext.Provider>;\n}\nSidebarProvider.displayName = \"SidebarProvider\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Sidebar root\n *\n * Visual contract:\n * - Width is driven by inline style (either the expanded or rail\n * token). Setting it inline means the flex Shell layout reflows\n * with no coordination needed in <Main>.\n * - Drives child styling via three data-attributes:\n * data-state=\"expanded\"|\"rail\" → user intent\n * data-peek=\"true\"|undefined → transient hover state\n * data-labels=\"show\"|\"hide\" → derived; \"hide\" only when\n * rail AND not peeking. Atoms\n * read this single attribute\n * rather than computing the\n * combination themselves.\n * - Carries `group/sidebar` so descendants can target the parent\n * via `group-data-[labels=hide]/sidebar:…` etc.\n *\n * Peek behavior: when state=\"rail\", hovering the column waits\n * PEEK_ENTER_DELAY_MS (forgives mouse-passthrough) then expands the\n * column to its full width as `position: fixed` overlay. Leaving waits\n * PEEK_LEAVE_DELAY_MS (forgives overshoot toward an item).\n * ─────────────────────────────────────────────────────────────────────── */\n\nconst PEEK_ENTER_DELAY_MS = 100;\nconst PEEK_LEAVE_DELAY_MS = 200;\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Opt into the rail / hover-peek behavior. When false (default), the\n * sidebar always renders expanded — the legacy behavior. When true,\n * the sidebar reads pinned state from <SidebarProvider>; if no\n * provider is mounted it still renders expanded, so dropping\n * `collapsible` alone is a no-op.\n */\n collapsible?: boolean;\n}\n\nexport const Sidebar = React.forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n { className, collapsible = false, onMouseEnter, onMouseLeave, style, ...props },\n ref,\n) {\n const ctx = React.useContext(SidebarContext);\n const state: SidebarState = collapsible && ctx ? ctx.state : \"expanded\";\n const peekLockCount = collapsible && ctx ? ctx.peekLockCount : 0;\n const [peek, setPeek] = React.useState(false);\n const enterTimer = React.useRef<number | null>(null);\n const leaveTimer = React.useRef<number | null>(null);\n\n const clearTimers = React.useCallback(() => {\n if (enterTimer.current != null) {\n window.clearTimeout(enterTimer.current);\n enterTimer.current = null;\n }\n if (leaveTimer.current != null) {\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = null;\n }\n }, []);\n\n React.useEffect(() => () => clearTimers(), [clearTimers]);\n\n // The moment a user re-pins to expanded, drop any pending peek state\n // so we never end up in \"expanded + peek=true\" (visually identical\n // but with the wrong shadow/position).\n React.useEffect(() => {\n if (state === \"expanded\") {\n clearTimers();\n setPeek(false);\n }\n }, [state, clearTimers]);\n\n const handleEnter = (e: React.MouseEvent<HTMLElement>) => {\n onMouseEnter?.(e);\n if (!collapsible || state !== \"rail\") return;\n if (leaveTimer.current != null) {\n window.clearTimeout(leaveTimer.current);\n leaveTimer.current = null;\n }\n if (peek) return;\n enterTimer.current = window.setTimeout(() => setPeek(true), PEEK_ENTER_DELAY_MS);\n };\n\n const handleLeave = (e: React.MouseEvent<HTMLElement>) => {\n onMouseLeave?.(e);\n if (!collapsible) return;\n if (enterTimer.current != null) {\n window.clearTimeout(enterTimer.current);\n enterTimer.current = null;\n }\n if (!peek) return;\n leaveTimer.current = window.setTimeout(() => setPeek(false), PEEK_LEAVE_DELAY_MS);\n };\n\n // Overlay = transient expansion (hover OR programmatic lock). Rendered as\n // `position: fixed` so the canvas does not reflow. Pinned (`state ===\n // \"expanded\"`) renders in-flow instead — the user has committed to the\n // width, so the canvas should adapt to it.\n const overlay = state === \"rail\" && (peek || peekLockCount > 0);\n const labelsHidden = state === \"rail\" && !peek && peekLockCount === 0;\n const effectiveWidth = labelsHidden ? \"var(--shell-sidebar-w-rail)\" : \"var(--shell-sidebar-w)\";\n\n return (\n // Hover-peek is *enhancement only*: the canonical way to toggle the\n // sidebar is <SidebarTrigger> (button) or the Mod+\\ shortcut, both\n // fully keyboard- and screen-reader-accessible. The mouse handlers\n // here exist to widen the column on pointer hover, which has no\n // keyboard analogue and intentionally so.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <aside\n ref={ref}\n data-state={state}\n // `data-peek` retained for hover-specifically (back-compat for any\n // external CSS hooks that target it). Overlay rendering — including\n // programmatic peek-lock from `useSidebarPeekLock` — is driven by\n // `data-overlay`. Plan: drop `data-peek` in the next minor.\n data-peek={peek ? \"true\" : undefined}\n data-overlay={overlay ? \"true\" : undefined}\n data-labels={labelsHidden ? \"hide\" : \"show\"}\n data-collapsible={collapsible ? \"true\" : undefined}\n // `state` and `peek` initialize identically on SSR and the client's\n // first render (see <SidebarProvider>) — all data-attributes here\n // match across the hydration boundary, so no suppression is needed.\n // Any future divergence is a real bug and should fail loud.\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n style={{ width: effectiveWidth, ...style }}\n className={cn(\n \"group/sidebar scrollbar-thin flex h-dvh shrink-0 flex-col overflow-y-auto\",\n \"border-rule bg-bg-2 border-r px-3 pt-4 pb-4\",\n // 220ms feels right for a ~192px width sweep — slower than the\n // 150ms `--duration-fast` (which reads as a snap on this size of\n // movement) but well short of `--duration-slow` (which feels\n // sluggish). `will-change` hints the compositor so the column\n // doesn't repaint every frame mid-transition.\n \"transition-[width,box-shadow] duration-[220ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"[will-change:width]\",\n // Overlay (hover-peek OR programmatic peek-lock): float above the\n // canvas without reflowing layout. Driven by `data-overlay` so a\n // single rule handles both transient sources.\n \"data-[overlay=true]:fixed data-[overlay=true]:top-0 data-[overlay=true]:left-0\",\n \"data-[overlay=true]:z-[var(--z-overlay)] data-[overlay=true]:shadow-pop\",\n // Padding is held constant across states so icons keep their\n // horizontal anchor when the column widens — peek expands the\n // labels rightward rather than shifting the icons leftward.\n className,\n )}\n {...props}\n />\n );\n});\nSidebar.displayName = \"Sidebar\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Trigger\n *\n * Toggle button. Designed to live in either the brand row (inside\n * <Sidebar>) or an app header (outside <Sidebar>, but inside the\n * provider tree). Renders `null` when no provider is mounted so apps\n * can drop it in without conditionals.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n expandLabel?: string;\n collapseLabel?: string;\n}\n\nexport const SidebarTrigger = React.forwardRef<HTMLButtonElement, SidebarTriggerProps>(\n function SidebarTrigger(\n {\n className,\n expandLabel = \"Expand sidebar\",\n collapseLabel = \"Collapse sidebar\",\n onClick,\n ...props\n },\n ref,\n ) {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) return null;\n const { state, toggle } = ctx;\n const label = state === \"expanded\" ? collapseLabel : expandLabel;\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n aria-expanded={state === \"expanded\"}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) toggle();\n }}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-3 hover:bg-bg-3 hover:text-fg\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&_svg]:size-4\",\n className,\n )}\n {...props}\n >\n {state === \"expanded\" ? <PanelLeftCloseIcon /> : <PanelLeftIcon />}\n </button>\n );\n },\n);\nSidebarTrigger.displayName = \"SidebarTrigger\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * useSidebarPeekLock\n *\n * Hold the sidebar column visually expanded while `active` is true. In rail\n * mode this renders the column as a `position: fixed` overlay (the same\n * overlay used for hover-peek) so the canvas does not reflow. Releases\n * automatically when `active` flips false or the consumer unmounts.\n *\n * Use for menus, popovers, or command palettes anchored to elements inside\n * the brand row. Do NOT use to express \"I want this pinned\" — that is the\n * user's intent, surfaced via <SidebarPinButton> or Mod+\\. Mutating `state`\n * for transient UI couples persistence to current visuals and races the\n * canonical writers.\n *\n * Refcounted: multiple peer consumers may hold a lock simultaneously\n * without stomping each other; the column collapses only when every lock\n * has released.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport function useSidebarPeekLock(active: boolean): void {\n const ctx = React.useContext(SidebarContext);\n React.useEffect(() => {\n if (!active || !ctx) return;\n const release = ctx.acquirePeekLock();\n return release;\n }, [active, ctx]);\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * SidebarPinButton\n *\n * Pin/unpin affordance. Reads `state` only — never `peek` or `peekLockCount`.\n * That single rule prevents the label from lying when the column is\n * transiently overlay-expanded by a dropdown or hover: aria-label and the\n * click effect both reflect the user's persisted intent, not what the\n * column currently happens to look like.\n *\n * Renders null when no provider is mounted or when collapsible is false,\n * mirroring <SidebarTrigger>'s drop-in safety.\n *\n * Coexists with <SidebarTrigger>. Pick one per product based on voice:\n * pin/unpin (this) for products where the user mental model is \"this stays\n * where I left it,\" collapse/expand (SidebarTrigger) for products where the\n * action language is more about visibility than commitment.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarPinButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** aria-label when state=\"rail\" (default: \"Pin sidebar\"). */\n pinLabel?: string;\n /** aria-label when state=\"expanded\" (default: \"Unpin sidebar\"). */\n unpinLabel?: string;\n}\n\nexport const SidebarPinButton = React.forwardRef<HTMLButtonElement, SidebarPinButtonProps>(\n function SidebarPinButton(\n {\n pinLabel = \"Pin sidebar\",\n unpinLabel = \"Unpin sidebar\",\n className,\n onClick,\n ...props\n },\n ref,\n ) {\n const ctx = React.useContext(SidebarContext);\n // No-op outside a provider OR when the sidebar is not collapsible —\n // pin has no meaning when the column never collapses.\n if (!ctx || !ctx.collapsible) return null;\n const { state, setState } = ctx;\n const isPinned = state === \"expanded\";\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={isPinned ? unpinLabel : pinLabel}\n aria-pressed={isPinned}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setState(isPinned ? \"rail\" : \"expanded\");\n }}\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-4 hover:bg-bg-3 hover:text-fg aria-pressed:text-fg\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n // Hidden when labels are hidden (rail-no-peek-no-lock). Visible\n // in every overlay state so users can pin during hover or while\n // a dropdown holds the column open.\n \"group-data-[labels=hide]/sidebar:hidden\",\n className,\n )}\n {...props}\n >\n <PinGlyph size={14} filled={isPinned} className=\"rotate-45\" />\n </button>\n );\n },\n);\nSidebarPinButton.displayName = \"SidebarPinButton\";\n\n// Inline thumbtack glyph. Lives next to the button — the only consumer for\n// now. Promote to the icons module if a second consumer needs it.\nfunction PinGlyph({\n size = 16,\n filled = false,\n className,\n}: {\n size?: number;\n filled?: boolean;\n className?: string;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M12 17v5\" />\n <path\n d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z\"\n fill={filled ? \"currentColor\" : \"none\"}\n />\n </svg>\n );\n}\n\n/* ───────────────────────────────────────────────────────────────────────\n * Brand\n *\n * Plain flex row. Children that should disappear in rail (e.g. the\n * wordmark text) should be wrapped in <SidebarBrandText>;\n * a bare logo glyph passed as a sibling stays put.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarBrandProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SidebarBrand = React.forwardRef<HTMLDivElement, SidebarBrandProps>(\n function SidebarBrand({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarBrand.displayName = \"SidebarBrand\";\n\n/**\n * Text portion of the brand row. Hides itself when the sidebar\n * collapses to a rail. Use to wrap product names / wordmarks so the\n * logo glyph alone remains visible at 64px.\n */\nexport type SidebarBrandTextProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarBrandText = React.forwardRef<HTMLSpanElement, SidebarBrandTextProps>(\n function SidebarBrandText({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n aria-hidden=\"false\"\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word wordmarks clip at a\n // word boundary instead of mid-word when the rail is narrow.\n \"min-w-0 line-clamp-1\",\n // Smooth fade + width collapse on rail. Keeps the wordmark\n // legible up to the moment the column reaches rail width, then\n // fully drops out (visibility:hidden cuts hit-testing).\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-[160px] opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarBrandText.displayName = \"SidebarBrandText\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Section\n *\n * Label hides in rail (the section keeps its vertical rhythm via the\n * existing `mb-4`, so grouping reads even without the text). Stays in\n * the DOM as `aria-label` on the group when collapsed — screen readers\n * announce the group regardless of visual state.\n *\n * Also: provides an *exclusive-open scope* to descendant <SidebarLinkGroup>s.\n * When a group's body row is clicked it claims exclusivity within its\n * containing section; siblings collapse. Chevron clicks bypass this and\n * toggle in place. See `SidebarLinkGroup` for the rule.\n * ─────────────────────────────────────────────────────────────────────── */\n\ninterface SidebarGroupScopeValue {\n exclusiveId: string | null;\n setExclusive: (id: string) => void;\n}\n\nconst SidebarGroupScopeContext = React.createContext<SidebarGroupScopeValue | null>(null);\n\nexport interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: React.ReactNode;\n /**\n * Label color tone. Encodes the *meaning* of the section's\n * priority in the scan path:\n * - `\"pro\"` (default) — Pro-purple, for primary day-to-day work.\n * - `\"muted\"` — `text-fg-3`, for system-level or settings groups\n * that should sit lower in the visual hierarchy.\n *\n * Mirrors the `tone` API on `<SidebarLinkBadge>`.\n */\n tone?: \"pro\" | \"muted\";\n}\n\nexport const SidebarSection = React.forwardRef<HTMLDivElement, SidebarSectionProps>(\n function SidebarSection({ label, tone = \"pro\", className, children, ...props }, ref) {\n const ariaLabel =\n typeof label === \"string\" ? label : typeof label === \"number\" ? String(label) : undefined;\n\n const [exclusiveId, setExclusiveIdState] = React.useState<string | null>(null);\n const setExclusive = React.useCallback(\n (id: string) => setExclusiveIdState(id),\n [],\n );\n const scope = React.useMemo<SidebarGroupScopeValue>(\n () => ({ exclusiveId, setExclusive }),\n [exclusiveId, setExclusive],\n );\n\n return (\n <SidebarGroupScopeContext.Provider value={scope}>\n <div\n ref={ref}\n role={ariaLabel ? \"group\" : undefined}\n aria-label={ariaLabel}\n className={cn(\n \"mb-4\",\n // In rail, the visible section labels disappear and the only\n // grouping cue is a thin rule. No extra mb/pb — the border\n // itself separates groups, so inter-section spacing matches\n // intra-section spacing and the rail stays dense.\n \"group-data-[labels=hide]/sidebar:mb-0 group-data-[labels=hide]/sidebar:border-b group-data-[labels=hide]/sidebar:border-rule group-data-[labels=hide]/sidebar:pb-0 group-data-[labels=hide]/sidebar:last:border-b-0\",\n className,\n )}\n {...props}\n >\n {label != null && (\n <div\n className={cn(\n \"mb-1 flex items-center justify-between px-2.5 py-1\",\n \"transition-opacity duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"opacity-100\",\n \"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0\",\n )}\n >\n <span\n className={cn(\n \"font-mono text-[11px] tracking-[0.14em] uppercase\",\n tone === \"muted\" ? \"text-fg-3\" : \"text-pro-fg\",\n )}\n >\n {label}\n </span>\n </div>\n )}\n {children}\n </div>\n </SidebarGroupScopeContext.Provider>\n );\n },\n);\nSidebarSection.displayName = \"SidebarSection\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Link\n *\n * In rail (no peek):\n * - Icon centers (justify-center, no gap consumption)\n * - Label, badge, and any other text children are hidden\n *\n * The active rail indicator already anchors to `before:left-0` of the\n * link itself, so it stays visually correct without changes.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Required when rendered as `<a>`; ignored when `asChild` is true. */\n href?: string;\n icon?: React.ReactNode;\n active?: boolean;\n /**\n * Render via Radix `<Slot>` so the consumer can wrap a router-aware\n * component (e.g. Next.js `<Link>`, React Router `<NavLink>`) that\n * owns `href` and prefetch behavior. Without this, sidebar clicks\n * bypass client-side routing and trigger full page loads.\n */\n asChild?: boolean;\n}\n\nfunction getTextContent(node: React.ReactNode): string {\n if (node == null || typeof node === \"boolean\") return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(getTextContent).filter(Boolean).join(\" \");\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n return getTextContent(node.props.children);\n }\n return \"\";\n}\n\nexport const SidebarLink = React.forwardRef<HTMLAnchorElement, SidebarLinkProps>(\n function SidebarLink(\n { href, icon, active = false, asChild, className, children, \"aria-label\": ariaLabel, ...props },\n ref,\n ) {\n const Comp = asChild ? Slot : \"a\";\n const accessibleLabel = ariaLabel ?? (asChild ? undefined : getTextContent(children) || undefined);\n return (\n <Comp\n ref={ref}\n {...(asChild ? {} : { href })}\n data-active={active ? \"true\" : undefined}\n aria-current={active ? \"page\" : undefined}\n aria-label={accessibleLabel}\n className={cn(\n \"group/link relative mb-px flex items-center gap-2.5 rounded-md px-2.5 py-1.5\",\n \"text-fg-2 text-[13px] font-normal no-underline\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[active=true]:bg-pro-bg data-[active=true]:text-pro-fg data-[active=true]:font-medium\",\n // In rail, the icon itself carries the active state rather\n // than just the rule bar — color is more legible than a 2px\n // vertical mark at the column's left edge when labels are\n // hidden. The full-opacity icon override (`opacity-100`)\n // counters the default `[&_svg]:opacity-85` so the active\n // icon doesn't read as \"still inactive but darker\".\n \"group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-pro-fg group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100\",\n // Active rail: 2px wide, 16px tall, anchored to the link's\n // own left edge — no parent-padding dependency. Continues\n // working unchanged when the aside narrows to a rail.\n \"data-[active=true]:before:absolute data-[active=true]:before:content-['']\",\n \"data-[active=true]:before:top-1/2 data-[active=true]:before:left-0\",\n \"data-[active=true]:before:h-4 data-[active=true]:before:w-[2px] data-[active=true]:before:-translate-y-1/2\",\n \"data-[active=true]:before:bg-pro-fg data-[active=true]:before:rounded-r-full\",\n // Padding/gap stay constant so the icon stays under the cursor\n // when the column widens during peek. The label simply collapses\n // to width 0 via <SidebarLinkLabel>.\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:opacity-85\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {icon}\n <span\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {children}\n </span>\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarLink.displayName = \"SidebarLink\";\n\n/**\n * Label slot for `<SidebarLink asChild>` consumers.\n *\n * The default (non-`asChild`) `SidebarLink` already hides its label in rail\n * mode. When consumers opt into `asChild` to wrap a router-aware element,\n * the design system can't reach inside to apply that rule — so consumers\n * compose this atom around their label text. Removes the leaky requirement\n * that every consumer re-stamp `group-data-[labels=hide]/sidebar:hidden`\n * on their inner spans.\n */\nexport type SidebarLinkLabelProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarLinkLabel = React.forwardRef<HTMLSpanElement, SidebarLinkLabelProps>(\n function SidebarLinkLabel({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n // Fade + collapse instead of hard display:none so a single\n // 180ms opacity tween covers all labels in lockstep with the\n // 220ms aside-width transition — no snap on the last frame.\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarLinkLabel.displayName = \"SidebarLinkLabel\";\n\n/**\n * Optional trailing action inside a `<SidebarLink asChild>` (e.g. an\n * expand/collapse chevron for a nested section). Hides in rail because the\n * action is not meaningful when labels themselves are hidden.\n */\nexport type SidebarLinkActionProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const SidebarLinkAction = React.forwardRef<HTMLSpanElement, SidebarLinkActionProps>(\n function SidebarLinkAction({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n \"transition-opacity duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"opacity-100\",\n \"group-data-[labels=hide]/sidebar:invisible group-data-[labels=hide]/sidebar:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarLinkAction.displayName = \"SidebarLinkAction\";\n\nexport const sidebarLinkBadgeVariants = cva(\n \"ml-auto inline-flex shrink-0 items-center justify-center font-mono tabular-nums group-data-[labels=hide]/sidebar:hidden\",\n {\n variants: {\n tone: {\n default: \"text-[10.5px] text-fg-4 group-data-[active=true]/link:text-pro-fg\",\n danger: \"rounded-pill bg-danger-bg px-1.5 py-0.5 text-[10.5px] text-danger-fg\",\n warning: \"rounded-pill bg-warning-bg px-1.5 py-0.5 text-[10.5px] text-warning-fg\",\n neutral: \"rounded-pill bg-bg-3 px-1.5 py-0.5 text-[10.5px] text-fg-2\",\n },\n },\n defaultVariants: { tone: \"default\" },\n },\n);\n\nexport type SidebarLinkBadgeVariants = VariantProps<typeof sidebarLinkBadgeVariants>;\n\nexport interface SidebarLinkBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n SidebarLinkBadgeVariants {}\n\nexport const SidebarLinkBadge = React.forwardRef<HTMLSpanElement, SidebarLinkBadgeProps>(\n function SidebarLinkBadge({ tone, className, ...props }, ref) {\n return (\n <span ref={ref} className={cn(sidebarLinkBadgeVariants({ tone }), className)} {...props} />\n );\n },\n);\nSidebarLinkBadge.displayName = \"SidebarLinkBadge\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * LinkGroup\n *\n * Expandable nav row with split-click semantics:\n * - Body click (icon + label area): \"I'm activating this section.\"\n * Fires `onActivate` (and follows `href` if no consumer prevents\n * default), opens this group, and *closes any other open group in\n * the same SidebarSection*. The accordion behavior matches user\n * mental model: \"I want to focus on this branch.\"\n * - Chevron click: \"Just let me peek at this.\" Toggles open/closed\n * on this group only — siblings are untouched. Lets users keep\n * two branches open side-by-side for cross-reference work.\n *\n * Exclusive coordination lives in the enclosing `<SidebarSection>` via\n * a small registry context. Outside a section, exclusive becomes a\n * no-op and groups behave as pure independent disclosures.\n *\n * Routing: the body renders as an `<a href>`. For client-side routing\n * frameworks that hijack anchor clicks (Next.js Link, React Router),\n * the standard pattern works as-is. A future `asChild` flag can opt\n * the body into Radix `Slot` for direct router-component wrapping.\n *\n * In rail mode the chevron and the collapsible content hide; the body\n * row collapses to icon-only and a body click still navigates without\n * trying to expand the (hidden) tree.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarLinkGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n /**\n * Stable id used for exclusive-mode coordination. Defaults to a\n * generated React id, which is stable across renders within a\n * single tree.\n */\n id?: string;\n icon?: React.ReactNode;\n label: React.ReactNode;\n /** Body href — the body row renders as `<a href>`. */\n href?: string;\n /** Highlights the body row. Independent of the open state. */\n active?: boolean;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Called when the body row is clicked, before the open state is\n * updated and before the section's exclusive lock is claimed. Call\n * `e.preventDefault()` to opt out of both. Use for navigation that\n * needs to run *before* the accordion behavior (rare).\n */\n onActivate?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n children?: React.ReactNode;\n}\n\nexport const SidebarLinkGroup = React.forwardRef<HTMLDivElement, SidebarLinkGroupProps>(\n function SidebarLinkGroup(\n {\n id: idProp,\n icon,\n label,\n href,\n active = false,\n defaultOpen = false,\n open: controlled,\n onOpenChange,\n onActivate,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const reactId = React.useId();\n const id = idProp ?? reactId;\n const scope = React.useContext(SidebarGroupScopeContext);\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = controlled ?? uncontrolledOpen;\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (controlled === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [controlled, onOpenChange],\n );\n\n // When another group in the same section claims exclusivity, close.\n // We watch `exclusiveId` rather than reading it in handlers so a\n // group that's already open closes promptly when a sibling activates.\n React.useEffect(() => {\n if (scope?.exclusiveId && scope.exclusiveId !== id && open) {\n setOpen(false);\n }\n }, [scope?.exclusiveId, id, open, setOpen]);\n\n const handleBodyClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n onActivate?.(e);\n if (e.defaultPrevented) return;\n scope?.setExclusive(id);\n setOpen(true);\n };\n\n const handleChevronClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n // Stop propagation so the body row doesn't also activate.\n e.preventDefault();\n e.stopPropagation();\n setOpen(!open);\n };\n\n const contentId = `${id}-content`;\n\n const bodyClassName = cn(\n \"group/link relative flex flex-1 items-center gap-2.5 rounded-md px-2.5 py-1.5\",\n \"text-fg-2 text-[13px] font-normal no-underline\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"data-[active=true]:bg-pro-bg data-[active=true]:text-pro-fg data-[active=true]:font-medium\",\n // In rail, color carries active state since the chevron is hidden.\n \"group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:text-pro-fg group-data-[labels=hide]/sidebar:data-[active=true]:[&_svg]:opacity-100\",\n // Active rail mark — anchored to body row's left edge.\n \"data-[active=true]:before:absolute data-[active=true]:before:content-['']\",\n \"data-[active=true]:before:top-1/2 data-[active=true]:before:left-0\",\n \"data-[active=true]:before:h-4 data-[active=true]:before:w-[2px] data-[active=true]:before:-translate-y-1/2\",\n \"data-[active=true]:before:bg-pro-fg data-[active=true]:before:rounded-r-full\",\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:opacity-85\",\n );\n\n const labelSpan = (\n <span\n className={cn(\n // line-clamp-1 (not `truncate`) so multi-word labels clip at a\n // word boundary; collapses cleanly with the rail-mode max-width\n // animation since both rules only constrain visible content.\n \"min-w-0 flex-1 line-clamp-1\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {label}\n </span>\n );\n\n return (\n <div ref={ref} className={cn(\"mb-px\", className)} {...props}>\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"flex items-stretch\">\n <a\n href={href}\n data-active={active ? \"true\" : undefined}\n aria-current={active ? \"page\" : undefined}\n aria-label={getTextContent(label) || undefined}\n onClick={handleBodyClick}\n className={bodyClassName}\n >\n {icon}\n {labelSpan}\n </a>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n aria-label={open ? \"Collapse section\" : \"Expand section\"}\n onClick={handleChevronClick}\n className={cn(\n \"ml-px inline-flex size-7 shrink-0 items-center justify-center rounded-md\",\n \"text-fg-4 hover:bg-bg-3 hover:text-fg-2\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n \"[&_svg]:size-3.5 [&_svg]:shrink-0 [&_svg]:transition-transform [&_svg]:duration-[var(--duration-fast)] [&_svg]:ease-[var(--ease-out-quart)] motion-reduce:[&_svg]:transition-none\",\n // Hide in rail — content tree is hidden too, so the\n // affordance has nothing to control.\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n >\n <ChevronDownIcon className={open ? \"\" : \"-rotate-90\"} />\n </button>\n </div>\n <CollapsibleContent\n id={contentId}\n className={cn(\n // Indent column + connecting rule. Children render as\n // standard <SidebarLink>s and keep their own active-rail\n // indicator, which lands flush at the indented column's\n // left edge.\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n >\n <div className=\"border-rule mt-px ml-[18px] border-l pl-2\">{children}</div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n );\n },\n);\nSidebarLinkGroup.displayName = \"SidebarLinkGroup\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * Footer\n *\n * Stays at the bottom via `mt-auto`. In rail, centers content (avatar\n * only — see <SidebarUser>).\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport type SidebarFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n function SidebarFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule mt-auto flex items-center gap-2.5 border-t px-2 pt-2.5 pb-1\",\n \"text-fg-3 text-xs\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nSidebarFooter.displayName = \"SidebarFooter\";\n\nexport interface SidebarUserProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n subtitle?: React.ReactNode;\n avatarSrc?: string | null;\n}\n\nexport const SidebarUser = React.forwardRef<HTMLDivElement, SidebarUserProps>(function SidebarUser(\n { name, subtitle, avatarSrc, className, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 items-center gap-2.5\", className)} {...props}>\n <Avatar size=\"sm\" variant=\"branded\" name={name} src={avatarSrc ?? undefined} />\n <div\n className={cn(\n \"min-w-0 leading-tight\",\n \"transition-[opacity,max-width] duration-[180ms] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"max-w-full opacity-100\",\n \"group-data-[labels=hide]/sidebar:max-w-0 group-data-[labels=hide]/sidebar:opacity-0 group-data-[labels=hide]/sidebar:invisible\",\n )}\n >\n {/* line-clamp-1 (not `truncate`) so long firm names / role lines clip\n at a word boundary instead of mid-word — e.g. \"Pinecrest Tax\n Advisors · …\" rather than \"Pinecrest Tax Advisors · Ow…\". */}\n <div className=\"text-fg line-clamp-1 text-[13px] font-medium\">{name}</div>\n {subtitle != null && (\n <div className=\"text-fg-4 line-clamp-1 font-mono text-[10.5px]\">{subtitle}</div>\n )}\n </div>\n </div>\n );\n});\nSidebarUser.displayName = \"SidebarUser\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { ChevronDownIcon } from \"../primitives/icons\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { SidebarBrandText, useSidebarPeekLock } from \"./sidebar\";\n\n/* ───────────────────────────────────────────────────────────────────────\n * SidebarBrandSwitcher\n *\n * Brand-row dropdown for switching between sibling products / workspaces\n * (Notion / Linear pattern). The whole brand row is the trigger: a\n * consumer-supplied glyph + wordmark + chevron. Collapses to icon-only\n * in rail mode via the standard `data-[labels=hide]/sidebar` group.\n *\n * Named for its slot: it sits where <SidebarBrand> would, alongside\n * <SidebarBrandText> and <SidebarPinButton> in the brand-row family. The\n * Sidebar prefix groups it with its neighbors in autocomplete and signals\n * the coupling — this composite reads sidebar state (peek-lock, rail)\n * and is not designed to be mounted outside the sidebar shell.\n *\n * **Replaces <SidebarBrand>, do not nest inside it.** The switcher renders\n * its own brand row with the same `px-2.5 pt-1 pb-4 gap-2` geometry, so the\n * brand glyph aligns with link icons below. Wrapping in <SidebarBrand>\n * doubles the padding and shifts the glyph right of the icon column.\n *\n * <Sidebar collapsible>\n * <SidebarBrandSwitcher\n * brand={<img src=\"/brand/mark.svg\" alt=\"\" width={24} height={24} />}\n * label={<>Assure <span className=\"text-pro-fg font-medium\">Pro</span></>}\n * current={items[0]}\n * items={items}\n * onLaunch={launch}\n * trailing={<SidebarPinButton className=\"ml-0.5\" />}\n * />\n * <SidebarSection label=\"MAIN\" tone=\"muted\">…</SidebarSection>\n * </Sidebar>\n *\n * Token discipline: this composite owns layout, motion, and the row\n * affordances, but never owns *product brand colors*. The accent swatch\n * for each item is supplied by the consumer via `tone` (a Tailwind class\n * string or a fully-rendered glyph), keeping vendor-specific hex out of\n * the DS.\n *\n * Framework neutrality: the brand image is a consumer slot. The DS does\n * not import `next/image` or any framework primitive — pass whatever\n * element your stack uses.\n *\n * Sidebar coordination: while the menu is open we acquire a peek-lock\n * via `useSidebarPeekLock` so the column stays visually expanded as an\n * overlay if the user has pinned it to rail. The user's pinned intent\n * is never mutated — that remains the job of <SidebarPinButton>.\n * ─────────────────────────────────────────────────────────────────────── */\n\nexport interface SidebarBrandSwitcherItem {\n /** Stable id used as React key and for `data-item` on each row. */\n id: string;\n /** Primary display name, e.g. \"Assure Audit\". */\n name: string;\n /** Sub-line under the name, e.g. \"Audit fieldwork\". */\n tagline?: string;\n /**\n * Short label rendered inside the default tile glyph (first character\n * is used, à la \"A\" for \"Audit\"). Ignored when `glyph` is supplied.\n */\n short?: string;\n /**\n * Accent for the default tile background. A Tailwind class string\n * (e.g. `\"bg-[#5b3bc4]\"`) — the consumer owns brand color values, the\n * DS just composes them. Ignored when `glyph` is supplied.\n */\n tone?: string;\n /**\n * Pre-rendered tile glyph. When provided, replaces the default\n * \"first letter on `tone` swatch\" tile entirely. Use for items that\n * have a real mark instead of a letter.\n */\n glyph?: React.ReactNode;\n /**\n * False marks the item as not-yet-available; rendered disabled with\n * a \"Soon\" badge by default (override via `unavailableBadge`).\n */\n available?: boolean;\n /** Pass-through onto the row's `data-item` for analytics / e2e hooks. */\n dataAttr?: string;\n}\n\nexport interface SidebarBrandSwitcherProps {\n /**\n * Brand glyph rendered at the left edge of the trigger (e.g. an\n * `<img>` of the product mark). Consumer-supplied so the DS does\n * not bind to a framework-specific image element.\n */\n brand?: React.ReactNode;\n /** Wordmark / label rendered next to the brand glyph in the trigger. */\n label: React.ReactNode;\n /**\n * The currently-active item. Pinned at the top of the menu and\n * excluded from the \"Switch to\" list automatically.\n */\n current: SidebarBrandSwitcherItem;\n /**\n * Full item list including `current`. Order is preserved in the\n * \"Switch to\" section; the current entry is filtered out.\n */\n items: SidebarBrandSwitcherItem[];\n /**\n * Called when a non-current, available item is selected. Receives the\n * full item so consumers can route, open a new window, or trigger an\n * SSO handoff — the DS holds no opinion on what \"switch\" means.\n */\n onLaunch?: (item: SidebarBrandSwitcherItem) => void | Promise<void>;\n /** Label above the current row. Defaults to \"Currently using\". */\n currentSectionLabel?: React.ReactNode;\n /** Label above the others list. Defaults to \"Switch to\". */\n switchSectionLabel?: React.ReactNode;\n /** Label at the very top of the menu. Defaults to \"Suite\". */\n menuLabel?: React.ReactNode;\n /** Badge text next to the current item. Defaults to \"Current\". */\n currentBadge?: React.ReactNode;\n /** Badge text on unavailable items. Defaults to \"Soon\". */\n unavailableBadge?: React.ReactNode;\n /** Accessible label on the trigger button. Defaults to \"Switch product\". */\n triggerLabel?: string;\n /** Extra classes applied to the outer brand-row wrapper. */\n className?: string;\n /** Extra classes applied to the trigger button. */\n triggerClassName?: string;\n /** Extra classes applied to the dropdown content panel. */\n contentClassName?: string;\n /**\n * Slot rendered to the right of the trigger inside the brand row.\n * Typical use: drop a `<SidebarPinButton/>` here.\n */\n trailing?: React.ReactNode;\n}\n\nexport const SidebarBrandSwitcher = React.forwardRef<HTMLDivElement, SidebarBrandSwitcherProps>(\n function SidebarBrandSwitcher(\n {\n brand,\n label,\n current,\n items,\n onLaunch,\n currentSectionLabel = \"Currently using\",\n switchSectionLabel = \"Switch to\",\n menuLabel = \"Suite\",\n currentBadge = \"Current\",\n unavailableBadge = \"Soon\",\n triggerLabel = \"Switch product\",\n className,\n triggerClassName,\n contentClassName,\n trailing,\n },\n ref,\n ) {\n const [open, setOpen] = React.useState(false);\n useSidebarPeekLock(open);\n\n const others = items.filter((p) => p.id !== current.id);\n\n return (\n // Geometry mirrors <SidebarBrand>: `px-2.5 pt-1 pb-4 gap-2`. This is\n // deliberate — the switcher replaces SidebarBrand, so the brand\n // glyph must land at the same column x-position that direct children\n // of <SidebarBrand> sit at, which in turn matches the 10px left\n // padding of <SidebarLink> icons below.\n <div\n ref={ref}\n className={cn(\"flex min-w-0 items-center gap-2 px-2.5 pt-1 pb-4\", className)}\n >\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger\n aria-label={triggerLabel}\n className={cn(\n // Negative left margin pulls the trigger's hover-bg toward\n // the column edge while the inner padding holds the brand\n // glyph at the same x-position as direct <SidebarBrand>\n // children — same hover affordance, no glyph drift.\n \"group/brand-trigger -ml-2 flex min-w-0 flex-1 items-center gap-2 rounded-md py-1.5 pr-1.5 pl-2\",\n \"text-fg transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:bg-bg-3 data-[state=open]:bg-bg-3\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n triggerClassName,\n )}\n >\n {brand}\n <SidebarBrandText className=\"font-display text-fg text-[17px] font-semibold tracking-tight\">\n {label}\n </SidebarBrandText>\n <ChevronDownIcon\n className={cn(\n \"ml-auto size-3.5 shrink-0 text-fg-4\",\n \"transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"group-data-[state=open]/brand-trigger:rotate-180\",\n \"group-data-[labels=hide]/sidebar:hidden\",\n )}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent\n side=\"right\"\n align=\"start\"\n sideOffset={12}\n className={cn(\"w-72 p-1\", contentClassName)}\n >\n <DropdownMenuLabel className=\"px-2 pt-1 pb-1.5\">{menuLabel}</DropdownMenuLabel>\n <SidebarBrandSwitcherSectionLabel>\n {currentSectionLabel}\n </SidebarBrandSwitcherSectionLabel>\n <SidebarBrandSwitcherCurrentRow item={current} badge={currentBadge} />\n <DropdownMenuSeparator className=\"my-1.5\" />\n <SidebarBrandSwitcherSectionLabel>\n {switchSectionLabel}\n </SidebarBrandSwitcherSectionLabel>\n {others.map((p) => (\n <SidebarBrandSwitcherOtherRow\n key={p.id}\n item={p}\n onLaunch={onLaunch}\n unavailableBadge={unavailableBadge}\n />\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n {trailing}\n </div>\n );\n },\n);\nSidebarBrandSwitcher.displayName = \"SidebarBrandSwitcher\";\n\nfunction SidebarBrandSwitcherSectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"px-2 pt-1 pb-0.5 text-[10px] tracking-wider uppercase text-fg-4\">\n {children}\n </div>\n );\n}\n\ninterface SidebarBrandSwitcherTileProps {\n item: SidebarBrandSwitcherItem;\n}\n\nexport function SidebarBrandSwitcherTile({ item }: SidebarBrandSwitcherTileProps) {\n if (item.glyph) return <>{item.glyph}</>;\n const initial = (item.short ?? item.name).charAt(0).toUpperCase();\n return (\n <span\n aria-hidden\n className={cn(\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-md\",\n \"text-[11px] font-semibold text-white\",\n item.tone,\n )}\n >\n {initial}\n </span>\n );\n}\n\nfunction SidebarBrandSwitcherCurrentRow({\n item,\n badge,\n}: {\n item: SidebarBrandSwitcherItem;\n badge: React.ReactNode;\n}) {\n return (\n <div className=\"mx-0 flex cursor-default items-center gap-2.5 rounded-md bg-bg-2 px-2 py-1.5\">\n <SidebarBrandSwitcherTile item={item} />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-fg text-[13px] font-medium\">{item.name}</span>\n {item.tagline && <span className=\"text-fg-3 text-[11px]\">{item.tagline}</span>}\n </div>\n {badge && (\n <span className=\"rounded-sm px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-pro-fg ring-1 ring-pro-fg/30\">\n {badge}\n </span>\n )}\n </div>\n );\n}\n\nfunction SidebarBrandSwitcherOtherRow({\n item,\n onLaunch,\n unavailableBadge,\n}: {\n item: SidebarBrandSwitcherItem;\n onLaunch?: (item: SidebarBrandSwitcherItem) => void | Promise<void>;\n unavailableBadge: React.ReactNode;\n}) {\n const reachable = item.available !== false;\n const [launching, setLaunching] = React.useState(false);\n\n const handleSelect = async () => {\n if (!reachable || launching || !onLaunch) return;\n setLaunching(true);\n try {\n await onLaunch(item);\n } finally {\n setLaunching(false);\n }\n };\n\n return (\n <DropdownMenuItem\n disabled={!reachable}\n onSelect={(e) => {\n if (!reachable) {\n e.preventDefault();\n return;\n }\n void handleSelect();\n }}\n data-item={item.dataAttr ?? item.id}\n className=\"flex items-center gap-2.5 rounded-md px-2 py-1.5\"\n >\n <SidebarBrandSwitcherTile item={item} />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"text-fg text-[13px] font-medium\">{item.name}</span>\n {item.tagline && <span className=\"text-fg-3 text-[11px]\">{item.tagline}</span>}\n </div>\n {!reachable && unavailableBadge && (\n <span className=\"rounded-sm bg-bg-3 px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-fg-4\">\n {unavailableBadge}\n </span>\n )}\n {reachable && launching && (\n <span className=\"rounded-sm bg-bg-3 px-1.5 py-0.5 text-[10px] font-medium tracking-wider uppercase text-fg-4\">\n Opening…\n </span>\n )}\n </DropdownMenuItem>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { SearchIcon } from \"../primitives/icons\";\n/**\n * AppHeader — sticky 56px-tall top bar mounted inside `<Main>`, above\n * `<Content>`.\n *\n * Children flow horizontally:\n * breadcrumb → title → flex-1 spacer → search → actions\n *\n * Sub-components are layout slots; the consumer composes them in any order\n * and the AppHeaderSearch's `flex-1` collapses any remaining space.\n */\n\nexport type AppHeaderProps = React.HTMLAttributes<HTMLElement>;\n\nexport const AppHeader = forwardRef<HTMLElement, AppHeaderProps>(function AppHeader(\n { className, ...props },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n // Sticky bar at the top of <Main>. Padding tracks --content-pad so\n // the header's left edge aligns with content padding underneath\n // (breadcrumb/title vs page H1/table left edge match).\n \"border-rule bg-bg/95 sticky top-0 z-[var(--z-sticky)] flex h-[var(--shell-header-h)] items-center gap-3 border-b px-[var(--content-pad)] backdrop-blur\",\n className,\n )}\n {...props}\n />\n );\n});\nAppHeader.displayName = \"AppHeader\";\n\nexport type AppHeaderBreadcrumbProps = React.HTMLAttributes<HTMLElement>;\n\nexport const AppHeaderBreadcrumb = forwardRef<HTMLElement, AppHeaderBreadcrumbProps>(\n function AppHeaderBreadcrumb({ className, ...props }, ref) {\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(\"text-fg-3 flex items-center gap-1.5 text-sm\", className)}\n {...props}\n />\n );\n },\n);\nAppHeaderBreadcrumb.displayName = \"AppHeaderBreadcrumb\";\n\nexport type AppHeaderTitleProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * App-shell title rendered inside the sticky header.\n *\n * Intentionally a `<span>` rather than `<h1>`: the page below the chrome\n * owns its own document heading (`<h1>` in the page body). The header is\n * navigational chrome; making it the page's `<h1>` would couple every page\n * heading to the chrome wrapper and confuse screen-reader heading nav.\n */\nexport const AppHeaderTitle = forwardRef<HTMLSpanElement, AppHeaderTitleProps>(\n function AppHeaderTitle({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"font-display text-fg text-sm font-medium\", className)}\n {...props}\n />\n );\n },\n);\nAppHeaderTitle.displayName = \"AppHeaderTitle\";\n\nexport interface AppHeaderSearchProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Placeholder text rendered inside the search trigger. */\n placeholder?: string;\n /** Keyboard shortcut hint shown on the right. Defaults to ⌘K. */\n shortcut?: React.ReactNode;\n}\n\nexport const AppHeaderSearch = forwardRef<HTMLButtonElement, AppHeaderSearchProps>(\n function AppHeaderSearch({ placeholder = \"Search…\", shortcut = \"⌘K\", className, ...props }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n // Search-input-shaped trigger — ports `.header-search-trigger`\n \"rounded-input border-rule bg-bg-2 text-fg-4 ml-auto flex h-8 max-w-[360px] flex-1 items-center gap-2.5 border px-2.5 text-xs\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:border-rule-strong hover:bg-bg-3\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n >\n <SearchIcon className=\"size-[13px] shrink-0\" strokeWidth={1.8} aria-hidden=\"true\" />\n <span className=\"line-clamp-1 text-left\">{placeholder}</span>\n {shortcut !== null && shortcut !== undefined && shortcut !== \"\" && (\n <kbd\n className={cn(\n \"rounded-icon border-rule bg-bg ml-auto inline-flex h-[18px] min-w-[18px] items-center justify-center border px-[5px]\",\n \"text-fg-3 [border-bottom-width:1.5px] font-mono text-[10.5px]\",\n )}\n >\n {shortcut}\n </kbd>\n )}\n </button>\n );\n },\n);\nAppHeaderSearch.displayName = \"AppHeaderSearch\";\n\nexport type AppHeaderActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const AppHeaderActions = forwardRef<HTMLDivElement, AppHeaderActionsProps>(\n function AppHeaderActions({ className, ...props }, ref) {\n return <div ref={ref} className={cn(\"flex items-center gap-1.5\", className)} {...props} />;\n },\n);\nAppHeaderActions.displayName = \"AppHeaderActions\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * PageHeader — top-of-page title block: eyebrow → headline + actions row → description → meta row.\n * Absorbs the trailing-edge `actions` slot pattern that consumer files\n * frequently reinvent via `flex items-center justify-between`.\n *\n * `title` is a string. If a consumer needs richer markup in the headline\n * they should compose around PageHeader rather than via this prop.\n *\n * Layout rules:\n * - `eyebrow` sits above the title with a 6px gap.\n * - `actions` sits to the trailing edge of the title row. On viewports\n * below `sm`, the actions wrap underneath; consumers can override via\n * className.\n * - `description` is a fg-3 subtitle line under the title.\n * - `meta` is the existing pills/spec/separator slot, still rendered\n * below the description.\n */\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, \"title\"> {\n /** Slot above the title — usually `<Eyebrow numeric>`. */\n eyebrow?: React.ReactNode;\n /** Page title text. */\n title: string;\n /** Subtitle line under the title (e.g. one-sentence purpose statement). */\n description?: React.ReactNode;\n /** Trailing-edge slot for actions (Button, ButtonGroup, etc.). */\n actions?: React.ReactNode;\n /** Slot below the description for pills, specs, separators. */\n meta?: React.ReactNode;\n}\n\nexport const PageHeader = forwardRef<HTMLElement, PageHeaderProps>(function PageHeader(\n { eyebrow, title, description, actions, meta, className, ...props },\n ref,\n) {\n return (\n <header ref={ref} className={cn(\"mb-7\", className)} {...props}>\n {eyebrow && <div className=\"mb-1.5\">{eyebrow}</div>}\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <h1 className=\"font-display text-fg text-[26px] leading-tight tracking-tight\">\n {title}\n </h1>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n {description && (\n <p className=\"text-fg-3 mt-2 max-w-2xl text-sm leading-relaxed\">{description}</p>\n )}\n {meta && <div className=\"text-fg-3 mt-2 flex flex-wrap items-center gap-2 text-sm\">{meta}</div>}\n </header>\n );\n});\nPageHeader.displayName = \"PageHeader\";\n\nexport type PageHeaderSpecProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/**\n * PageHeaderSpec — small `.spec`-style span (Geist Mono w/ tnum/lnum/ss01).\n * Used inside the `meta` slot for numeric facts (\"4 due today\",\n * \"EIN ·· 12-3456789\").\n */\nexport const PageHeaderSpec = forwardRef<HTMLSpanElement, PageHeaderSpecProps>(\n function PageHeaderSpec({ className, style, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"font-spec text-fg-3 text-xs\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nPageHeaderSpec.displayName = \"PageHeaderSpec\";\n\nexport type PageHeaderSepProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** PageHeaderSep — the `·` dot separator used between meta items. */\nexport const PageHeaderSep = forwardRef<HTMLSpanElement, PageHeaderSepProps>(function PageHeaderSep(\n { children, className, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n role=\"presentation\"\n className={cn(\"text-fg-4\", className)}\n {...props}\n >\n {children ?? \"·\"}\n </span>\n );\n});\nPageHeaderSep.displayName = \"PageHeaderSep\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * MetadataGrid + DataItem — label / value pair grid.\n *\n * Used inside detail surfaces (Client > Overview, Engagement > Header,\n * Invoice > Summary) where the page needs to lay out a list of facts:\n *\n * EIN 12-3456789\n * Joined Aug 2022\n * Primary contact Liz Chen <liz@acme.test>\n * Tier Annual\n *\n * Replaces the recurring `<div className=\"grid grid-cols-2 gap-x-6 gap-y-3\">`\n * + per-row `<div>label</div><div>value</div>` shape.\n *\n * `MetadataGrid` provides the grid; `DataItem` owns the label/value\n * typography. Both compose: a `DataItem` can take `span={2}` to occupy\n * a full row in a 2-column grid.\n */\n\ninterface MetadataGridProps extends React.HTMLAttributes<HTMLDListElement> {\n /** Number of columns. Default 2. Use 1 for narrow surfaces (mobile cards). */\n columns?: 1 | 2 | 3 | 4;\n /** Horizontal gap between cells. Default `gap-x-6`. */\n gapX?: string;\n /** Vertical gap between rows. Default `gap-y-3`. */\n gapY?: string;\n}\n\nconst columnsToGridCols: Record<NonNullable<MetadataGridProps[\"columns\"]>, string> = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n};\n\nexport const MetadataGrid = forwardRef<HTMLDListElement, MetadataGridProps>(function MetadataGrid(\n { columns = 2, gapX = \"gap-x-6\", gapY = \"gap-y-3\", className, children, ...props },\n ref,\n) {\n return (\n <dl\n ref={ref}\n className={cn(\"grid\", columnsToGridCols[columns], gapX, gapY, className)}\n {...props}\n >\n {children}\n </dl>\n );\n});\nMetadataGrid.displayName = \"MetadataGrid\";\n\ninterface DataItemProps {\n /** Label rendered as `<dt>`. Should be a noun phrase, sentence case. */\n label: React.ReactNode;\n /** Value rendered as `<dd>`. */\n value: React.ReactNode;\n /** Span this many grid columns. Useful for long string values inside a 2-col grid. */\n span?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst spanToColSpan: Record<NonNullable<DataItemProps[\"span\"]>, string> = {\n 1: \"col-span-1\",\n 2: \"col-span-2\",\n 3: \"col-span-3\",\n 4: \"col-span-4\",\n};\n\nexport function DataItem({ label, value, span = 1, className }: DataItemProps) {\n return (\n <div className={cn(\"min-w-0\", spanToColSpan[span], className)}>\n <dt className=\"text-fg-4 text-[11px] font-medium uppercase tracking-wider\">{label}</dt>\n <dd className=\"text-fg mt-0.5 break-words text-sm\">{value}</dd>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Card, cardVariants } from \"../primitives/card\";\nimport { MinusIcon, TrendingDownIcon, TrendingUpIcon } from \"../primitives/icons\";\n\n/**\n * KpiCard — single-stat tile: label + value + optional tone, trend, hint.\n *\n * Replaces the three different KPI / stat-card shapes that recur across\n * the dashboard, billing, and attention-queue surfaces:\n *\n * ┌──────────────────────┐\n * │ 🔵 Clients │\n * │ 247 ▲ 12% │\n * │ vs last month │\n * │ ╱╲╱╲ sparkline │\n * └──────────────────────┘\n *\n * - `value` is the big-typography figure (count, currency).\n * - `label` is the small caption.\n * - `tone` colors the icon tile / value via semantic tokens (info,\n * success, warning, destructive, accent, muted). Default `muted`.\n * - `icon` slot accepts any node; rendered inside a rounded tile.\n * - `delta` renders a trend chip (arrow + change). `direction` drives the\n * arrow; `sentiment` drives the colour and defaults from direction\n * (up → positive, down → negative, flat → neutral). Pass `sentiment`\n * explicitly for inverted metrics where \"up\" is bad (e.g. past-due ↑).\n * - `trend` (number[]) draws a filled sparkline across the card bottom,\n * tinted by the delta sentiment (or tone when there's no delta).\n * - `hint` is an optional `text-fg-3` line (\"+18 this month\", \"6 invoices\").\n * - `action` is an optional trailing slot for a button or link.\n *\n * Renders as a `<Card>`. Wrap in a `<Link>` from the consumer side if\n * the tile should navigate.\n */\n\ntype KpiTone = \"info\" | \"success\" | \"warning\" | \"destructive\" | \"accent\" | \"muted\";\n\ntype DeltaDirection = \"up\" | \"down\" | \"flat\";\ntype DeltaSentiment = \"positive\" | \"negative\" | \"neutral\";\n\nexport interface KpiDelta {\n /** The change to display, e.g. `\"12%\"`, `\"+18\"`, `\"-$4.2k\"`. */\n value: React.ReactNode;\n /** Arrow glyph: `up` ↗, `down` ↘, `flat` —. */\n direction: DeltaDirection;\n /**\n * Colour family. Defaults from `direction` (up → positive, down →\n * negative, flat → neutral). Set explicitly for inverted metrics where\n * a rise is bad (e.g. `direction: \"up\"`, `sentiment: \"negative\"`).\n */\n sentiment?: DeltaSentiment;\n /** Optional context line under the value, e.g. `\"vs last month\"`. */\n label?: React.ReactNode;\n}\n\nexport interface KpiCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Small caption under the value. */\n label: React.ReactNode;\n /** Main figure — count, currency, percentage. Renders as a 2xl bold. */\n value: React.ReactNode;\n /** Optional leading icon, rendered inside a colored tile. */\n icon?: React.ReactNode;\n /** Color family for the icon tile + (optional) the value. Default `muted`. */\n tone?: KpiTone;\n /** Optional trend chip (arrow + change) shown beside the value. */\n delta?: KpiDelta;\n /** Optional sparkline data drawn across the card bottom. */\n trend?: number[];\n /** Optional subline below the value (e.g. `\"+18 this month\"`). */\n hint?: React.ReactNode;\n /** Optional trailing-edge slot for a button or link. */\n action?: React.ReactNode;\n /** When `true`, the value text picks up the tone color. Default `false` (value stays fg). */\n toneValue?: boolean;\n}\n\nexport interface SelectableKpiCardProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"title\" | \"value\">,\n Pick<\n KpiCardProps,\n \"label\" | \"value\" | \"icon\" | \"tone\" | \"delta\" | \"trend\" | \"hint\" | \"action\" | \"toneValue\"\n > {\n selected?: boolean;\n}\n\nconst toneToTile: Record<KpiTone, string> = {\n info: \"bg-info/10 text-info\",\n success: \"bg-success-fg/10 text-success-fg\",\n warning: \"bg-warning-fg/10 text-warning-fg\",\n destructive: \"bg-danger-fg/10 text-danger-fg\",\n accent: \"bg-accent/10 text-accent\",\n muted: \"bg-bg-3 text-fg-3\",\n};\n\nconst toneToValue: Record<KpiTone, string> = {\n info: \"text-info\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n destructive: \"text-danger-fg\",\n accent: \"text-accent\",\n muted: \"text-fg\",\n};\n\nconst sentimentChip: Record<DeltaSentiment, string> = {\n positive: \"bg-success-bg text-success-fg\",\n negative: \"bg-danger-bg text-danger-fg\",\n neutral: \"bg-bg-3 text-fg-3\",\n};\n\nconst sentimentText: Record<DeltaSentiment, string> = {\n positive: \"text-success-fg\",\n negative: \"text-danger-fg\",\n neutral: \"text-fg-3\",\n};\n\nconst directionToSentiment: Record<DeltaDirection, DeltaSentiment> = {\n up: \"positive\",\n down: \"negative\",\n flat: \"neutral\",\n};\n\nconst directionToIcon: Record<DeltaDirection, typeof TrendingUpIcon> = {\n up: TrendingUpIcon,\n down: TrendingDownIcon,\n flat: MinusIcon,\n};\n\nconst directionToSrLabel: Record<DeltaDirection, string> = {\n up: \"Up\",\n down: \"Down\",\n flat: \"No change\",\n};\n\n/**\n * Sparkline — minimal filled trend line. Stretches to fill its column via\n * `preserveAspectRatio=\"none\"`; the stroke stays crisp through\n * `vectorEffect=\"non-scaling-stroke\"`. Inherits colour from `currentColor`.\n */\nfunction Sparkline({ data, className }: { data: number[]; className?: string }) {\n if (data.length < 2) return null;\n\n const w = 100;\n const h = 28;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const coords = data.map((d, i) => {\n const x = (i / (data.length - 1)) * w;\n const y = h - ((d - min) / range) * (h - 2) - 1; // 1px breathing room top/bottom\n return [x, y] as const;\n });\n\n const line = coords.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(\" \");\n const area = `0,${h} ${line} ${w},${h}`;\n\n return (\n <svg\n viewBox={`0 0 ${w} ${h}`}\n preserveAspectRatio=\"none\"\n className={cn(\"h-7 w-full\", className)}\n aria-hidden=\"true\"\n >\n <polygon points={area} fill=\"currentColor\" className=\"opacity-10\" />\n <polyline\n points={line}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n}\n\nfunction KpiCardBody({\n label,\n value,\n icon,\n tone = \"muted\",\n delta,\n trend,\n hint,\n action,\n toneValue,\n}: Pick<\n KpiCardProps,\n \"label\" | \"value\" | \"icon\" | \"tone\" | \"delta\" | \"trend\" | \"hint\" | \"action\" | \"toneValue\"\n>) {\n const deltaSentiment = delta ? (delta.sentiment ?? directionToSentiment[delta.direction]) : null;\n const DeltaIcon = delta ? directionToIcon[delta.direction] : null;\n const sparkColor = deltaSentiment ? sentimentText[deltaSentiment] : toneToValue[tone];\n\n return (\n <>\n <div className=\"flex items-start gap-3\">\n {icon && (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg]:size-5\",\n toneToTile[tone],\n )}\n >\n {icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-baseline gap-x-2 gap-y-1\">\n <p\n className={cn(\n \"text-2xl font-bold tracking-tight tabular-nums\",\n toneValue ? toneToValue[tone] : \"text-fg\",\n )}\n >\n {value}\n </p>\n {delta && DeltaIcon && deltaSentiment && (\n <span\n className={cn(\n \"inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[11px] font-semibold tabular-nums\",\n sentimentChip[deltaSentiment],\n )}\n >\n <DeltaIcon className=\"size-3\" />\n <span className=\"sr-only\">{directionToSrLabel[delta.direction]} </span>\n {delta.value}\n </span>\n )}\n </div>\n <p className=\"text-fg-3 text-xs\">{label}</p>\n {delta?.label && <p className=\"text-fg-3 mt-0.5 text-[11px]\">{delta.label}</p>}\n {hint && <p className=\"text-fg-3 mt-0.5 text-[11px]\">{hint}</p>}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n {trend && trend.length > 1 && (\n <Sparkline data={trend} className={cn(\"mt-3\", sparkColor)} />\n )}\n </>\n );\n}\n\nexport const KpiCard = forwardRef<HTMLDivElement, KpiCardProps>(function KpiCard(\n { label, value, icon, tone = \"muted\", delta, trend, hint, action, toneValue, className, ...props },\n ref,\n) {\n return (\n <Card ref={ref} className={cn(\"p-4\", className)} {...props}>\n <KpiCardBody\n label={label}\n value={value}\n icon={icon}\n tone={tone}\n delta={delta}\n trend={trend}\n hint={hint}\n action={action}\n toneValue={toneValue}\n />\n </Card>\n );\n});\nKpiCard.displayName = \"KpiCard\";\n\nexport const SelectableKpiCard = forwardRef<HTMLButtonElement, SelectableKpiCardProps>(\n function SelectableKpiCard(\n {\n label,\n value,\n icon,\n tone = \"muted\",\n delta,\n trend,\n hint,\n action,\n toneValue,\n selected = false,\n className,\n type,\n ...props\n },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type={type ?? \"button\"}\n aria-pressed={selected}\n data-selected={selected ? \"true\" : \"false\"}\n className={cn(\n cardVariants({ variant: \"interactive\" }),\n \"block w-full p-4 text-left\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:bg-bg-disabled disabled:text-fg-disabled disabled:shadow-none\",\n selected && \"border-pro-fg/40 bg-pro-bg hover:bg-pro-bg-hover ring-1 ring-pro-fg/30\",\n className,\n )}\n {...props}\n >\n <KpiCardBody\n label={label}\n value={value}\n icon={icon}\n tone={tone}\n delta={delta}\n trend={trend}\n hint={hint}\n action={action}\n toneValue={toneValue}\n />\n </button>\n );\n },\n);\nSelectableKpiCard.displayName = \"SelectableKpiCard\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { Input } from \"../primitives/input\";\nimport { Pagination } from \"../primitives/pagination\";\n\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n ChevronsUpDownIcon,\n SearchIcon,\n} from \"../primitives/icons\";\n/* ============================================================\n DataTable — composite chrome around the Table primitive.\n\n Composes the existing `Table` styling but re-exports under\n `DataTable*` names so consumers can adopt by simple rename.\n ============================================================ */\n\n/* ── Frame ────────────────────────────────────────────────── */\n\nexport interface DataTableProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, renders the table card with a flat top edge so it\n * visually attaches to a `<DataTableToolbar>` above it. */\n withToolbar?: boolean;\n}\n\n/**\n * DataTable — outer wrapper. Children are typically:\n * <DataTableToolbar /> + <table> + <DataTablePagination />.\n *\n * The `<table>` is hand-written by the consumer; this wrapper renders\n * the surface card chrome on its descendant `<table>` element via a\n * Tailwind arbitrary-variant selector. When `withToolbar` is set, the\n * top corners flatten so the table visually joins the toolbar above.\n *\n * Children render in document order — toolbar (if any) then `<table>`\n * then pagination — with the table card and the pagination not sharing\n * a background.\n */\nexport const DataTable = forwardRef<HTMLDivElement, DataTableProps>(function DataTable(\n { withToolbar, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n // Surface card chrome on the descendant `<table>`.\n \"[&_table]:bg-surface [&_table]:w-full [&_table]:border-collapse\",\n \"[&_table]:border-rule [&_table]:border\",\n withToolbar ? \"[&_table]:rounded-b-card [&_table]:border-t-0\" : \"[&_table]:rounded-card\",\n // Clip cell backgrounds at the rounded corners.\n \"[&_table]:overflow-hidden\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n});\nDataTable.displayName = \"DataTable\";\n\n/* ── Toolbar ──────────────────────────────────────────────── */\n\nexport type DataTableToolbarProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * DataTableToolbar — top row above the table. Renders the same surface\n * card as `<table>`, but with rounded corners only on top so the table\n * below visually attaches to it.\n */\nexport const DataTableToolbar = forwardRef<HTMLDivElement, DataTableToolbarProps>(\n function DataTableToolbar({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-2 px-3 py-2.5\",\n \"rounded-t-card border-rule bg-surface border\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableToolbar.displayName = \"DataTableToolbar\";\n\nexport interface DataTableSearchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** Override the default placeholder. */\n placeholder?: string;\n}\n\n/**\n * DataTableSearch — small search input slot inside the toolbar. Wraps\n * the `Input` primitive at `inputSize=\"sm\"` with a leading search icon.\n */\nexport const DataTableSearch = forwardRef<HTMLInputElement, DataTableSearchProps>(\n function DataTableSearch({ placeholder = \"Search…\", className, ...props }, ref) {\n return (\n <Input\n ref={ref}\n type=\"search\"\n inputSize=\"sm\"\n placeholder={placeholder}\n prefixIcon={<SearchIcon aria-hidden=\"true\" />}\n className={cn(\"w-[280px]\", className)}\n {...props}\n />\n );\n },\n);\nDataTableSearch.displayName = \"DataTableSearch\";\n\nexport type DataTableSpacerProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** DataTableSpacer — `flex-1` spacer for arranging toolbar items. */\nexport const DataTableSpacer = forwardRef<HTMLSpanElement, DataTableSpacerProps>(\n function DataTableSpacer({ className, ...props }, ref) {\n return <span ref={ref} aria-hidden=\"true\" className={cn(\"flex-1\", className)} {...props} />;\n },\n);\nDataTableSpacer.displayName = \"DataTableSpacer\";\n\nexport interface DataTableResultsCountProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n \"children\"\n> {\n current: number;\n total: number;\n}\n\n/**\n * DataTableResultsCount — small \"12 of 247\" indicator. Mono + tabular.\n */\nexport const DataTableResultsCount = forwardRef<HTMLSpanElement, DataTableResultsCountProps>(\n function DataTableResultsCount({ current, total, className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\"text-fg-4 mr-1 font-mono text-[11px] tabular-nums\", className)}\n {...props}\n >\n {current.toLocaleString()} of {total.toLocaleString()}\n </span>\n );\n },\n);\nDataTableResultsCount.displayName = \"DataTableResultsCount\";\n\n/* ── Table sections ───────────────────────────────────────── */\n\n/**\n * DataTableHead — wraps `<thead>`. Renders the surface-2 header row\n * with the rule-bottom divider (`.data-table th` styling lives on the\n * `DataTableHeader` cells themselves).\n */\nexport type DataTableHeadProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport const DataTableHead = forwardRef<HTMLTableSectionElement, DataTableHeadProps>(\n function DataTableHead({ className, ...props }, ref) {\n return (\n <thead ref={ref} className={cn(\"[&_tr]:border-rule [&_tr]:border-b\", className)} {...props} />\n );\n },\n);\nDataTableHead.displayName = \"DataTableHead\";\n\nexport type DataTableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\n/** DataTableBody — wraps `<tbody>`. Last row drops its bottom border. */\nexport const DataTableBody = forwardRef<HTMLTableSectionElement, DataTableBodyProps>(\n function DataTableBody({ className, ...props }, ref) {\n return <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n },\n);\nDataTableBody.displayName = \"DataTableBody\";\n\nexport interface DataTableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n /** Pro-tinted highlight for the current selection. */\n selected?: boolean;\n}\n\n/**\n * DataTableRow — `<tr>` with hover styling. `selected` switches the\n * row to the Pro-bg highlight (matches `data-[state=selected]` on the\n * Table primitive).\n */\nexport const DataTableRow = forwardRef<HTMLTableRowElement, DataTableRowProps>(\n function DataTableRow({ selected, className, ...props }, ref) {\n return (\n <tr\n ref={ref}\n data-state={selected ? \"selected\" : undefined}\n className={cn(\n \"border-rule-soft border-b transition-colors duration-[var(--duration-instant)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n // Selected hover stays in the Pro tint (G15) — when both states fire,\n // hover:bg-bg-2 was previously winning and dropping the row out of\n // the selected tint, which read as the row deselecting on hover.\n selected ? \"bg-pro-bg hover:bg-pro-bg-hover\" : \"hover:bg-bg-2\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableRow.displayName = \"DataTableRow\";\n\n/* ── Header cell ──────────────────────────────────────────── */\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface DataTableHeaderProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n /** When true, the cell becomes a clickable button that toggles sort\n * state and renders a chevron indicator. */\n sortable?: boolean;\n /** Initial sort direction when the header mounts in a sorted state. */\n defaultSort?: SortDirection;\n /** Optional controlled sort state. When provided, `onSortChange` should\n * also be wired up — the header becomes fully controlled. */\n sort?: SortDirection | null;\n /** Fires whenever the user clicks a sortable header. */\n onSortChange?: (sort: SortDirection | null) => void;\n}\n\n/**\n * DataTableHeader — `<th>` cell. Mono uppercase label with optional\n * sort indicator. Sort cycle when uncontrolled:\n * unsorted → asc → desc → unsorted (3-state).\n * `defaultSort` seeds the initial state. Pass `sort` + `onSortChange`\n * for fully-controlled usage when an upstream store owns the sort.\n */\nexport const DataTableHeader = forwardRef<HTMLTableCellElement, DataTableHeaderProps>(\n function DataTableHeader(\n {\n sortable = false,\n defaultSort,\n sort: controlledSort,\n onSortChange,\n children,\n className,\n ...props\n },\n ref,\n ) {\n const [uncontrolledSort, setUncontrolledSort] = useState<SortDirection | null>(\n defaultSort ?? null,\n );\n const isControlled = controlledSort !== undefined;\n const currentSort = isControlled ? controlledSort : uncontrolledSort;\n\n const handleClick = useCallback(() => {\n if (!sortable) return;\n const next: SortDirection | null =\n currentSort === null ? \"asc\" : currentSort === \"asc\" ? \"desc\" : null;\n if (!isControlled) setUncontrolledSort(next);\n onSortChange?.(next);\n }, [sortable, currentSort, isControlled, onSortChange]);\n\n const indicator = sortable ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"text-fg-5 ml-1 inline-flex shrink-0 items-center justify-center\",\n currentSort && \"text-fg-3\",\n )}\n >\n {currentSort === \"asc\" ? (\n <ChevronUpIcon className=\"size-3\" strokeWidth={2.2} />\n ) : currentSort === \"desc\" ? (\n <ChevronDownIcon className=\"size-3\" strokeWidth={2.2} />\n ) : (\n <ChevronsUpDownIcon className=\"size-3\" strokeWidth={2} />\n )}\n </span>\n ) : null;\n\n const ariaSort: React.AriaAttributes[\"aria-sort\"] = sortable\n ? currentSort === \"asc\"\n ? \"ascending\"\n : currentSort === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined;\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n aria-sort={ariaSort}\n className={cn(\n \"h-9 px-3.5 py-2 text-left align-middle whitespace-nowrap\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 bg-surface-2\",\n \"border-rule border-b\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"-mx-1 -my-1 inline-flex items-center gap-1 rounded-[4px] px-1 py-1\",\n \"font-mono text-[10px] font-medium tracking-[0.12em] uppercase\",\n \"text-fg-4 transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"hover:text-fg-2\",\n \"focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n )}\n >\n {children}\n {indicator}\n </button>\n ) : (\n children\n )}\n </th>\n );\n },\n);\nDataTableHeader.displayName = \"DataTableHeader\";\n\n/* ── Body cells ───────────────────────────────────────────── */\n\nconst cellBase = \"px-3.5 py-2.5 align-middle\";\n\nexport type DataTableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;\n\n/** DataTableCell — default cell, 13px / fg-2. */\nexport const DataTableCell = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCell({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(\n cellBase,\n \"text-fg-2 text-[13px]\",\n \"[&:has([role=checkbox])]:pr-0\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nDataTableCell.displayName = \"DataTableCell\";\n\n/**\n * DataTableCellName — primary identifier of the row. Display font,\n * fg color, medium weight.\n */\nexport const DataTableCellName = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellName({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-display text-fg text-[13px] font-medium\", className)}\n {...props}\n />\n );\n },\n);\nDataTableCellName.displayName = \"DataTableCellName\";\n\n/**\n * DataTableCellMono — currency / IDs / numerics. Geist Mono with\n * tabular numerals and tight tracking.\n */\nexport const DataTableCellMono = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellMono({ className, style, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-spec text-fg-2 text-[12.5px]\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nDataTableCellMono.displayName = \"DataTableCellMono\";\n\n/**\n * DataTableCellId — muted mono ID (EIN, UUID, \"5h ago\"). Matches\n * `.cell-mono.cell-id` from the spec.\n */\nexport const DataTableCellId = forwardRef<HTMLTableCellElement, DataTableCellProps>(\n function DataTableCellId({ className, style, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn(cellBase, \"font-spec text-fg-4 text-xs\", className)}\n style={style}\n {...props}\n />\n );\n },\n);\nDataTableCellId.displayName = \"DataTableCellId\";\n\n/* ── Due-date cell ────────────────────────────────────────── */\n\nconst MS_PER_DAY = 86_400_000;\nconst DUE_NEAR_THRESHOLD_DAYS = 14;\n\nconst dueDateFormatter = new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n});\n\nexport interface DataTableCellDueProps extends Omit<\n React.TdHTMLAttributes<HTMLTableCellElement>,\n \"children\"\n> {\n /** Date this row is due. */\n value: Date;\n /** Optional override for the displayed label (defaults to the\n * formatted date). */\n children?: ReactNode;\n}\n\n/**\n * DataTableCellDue — accepts a Date and auto-colors:\n * diff < 0 → text-danger-fg (overdue)\n * diff < 14d → text-warning-fg (due-near)\n * otherwise → text-fg-3 (default)\n *\n * The 14-day threshold and day-rounding (`Math.floor`) match the\n * `.cell-due-near` / `.cell-due-overdue` CSS classes in the mockup.\n */\nexport const DataTableCellDue = forwardRef<HTMLTableCellElement, DataTableCellDueProps>(\n function DataTableCellDue({ value, children, className, style, ...props }, ref) {\n const days = Math.floor((value.getTime() - Date.now()) / MS_PER_DAY);\n const tone =\n days < 0\n ? \"text-danger-fg font-medium\"\n : days < DUE_NEAR_THRESHOLD_DAYS\n ? \"text-warning-fg font-medium\"\n : \"text-fg-3\";\n\n const ariaState = days < 0 ? \"overdue\" : days < DUE_NEAR_THRESHOLD_DAYS ? \"near\" : \"future\";\n\n return (\n <td\n ref={ref}\n data-due-state={ariaState}\n className={cn(cellBase, \"font-spec text-[12.5px]\", tone, className)}\n style={style}\n {...props}\n >\n {children ?? dueDateFormatter.format(value)}\n </td>\n );\n },\n);\nDataTableCellDue.displayName = \"DataTableCellDue\";\n\n/* ── Checkbox cell ────────────────────────────────────────── */\n\nexport interface DataTableCheckboxProps extends Omit<\n React.TdHTMLAttributes<HTMLTableCellElement>,\n \"onChange\" | \"defaultChecked\"\n> {\n /** Forwarded to the inner `Checkbox` primitive. */\n checked?: boolean | \"indeterminate\";\n defaultChecked?: boolean | \"indeterminate\";\n onCheckedChange?: (checked: boolean | \"indeterminate\") => void;\n /** Accessible label for the checkbox (e.g. \"Select row Acme Corp.\"). */\n ariaLabel?: string;\n disabled?: boolean;\n /** Render the cell as `<th>` (for the select-all header) instead of `<td>`. */\n asHeader?: boolean;\n}\n\n/**\n * DataTableCheckbox — `<td>` containing the row-selection checkbox.\n * Tightened to a 32px column with no right padding to match\n * `.row-checkbox` in the spec.\n */\nexport const DataTableCheckbox = forwardRef<HTMLTableCellElement, DataTableCheckboxProps>(\n function DataTableCheckbox(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n ariaLabel,\n disabled,\n asHeader,\n className,\n ...props\n },\n ref,\n ) {\n const Cell = (asHeader ? \"th\" : \"td\") as \"td\";\n return (\n <Cell\n ref={ref}\n className={cn(\n \"w-8 px-3.5 py-2.5 pr-0 align-middle\",\n asHeader && \"bg-surface-2 border-rule h-9 border-b\",\n className,\n )}\n {...props}\n >\n <Checkbox\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={onCheckedChange}\n disabled={disabled}\n aria-label={ariaLabel}\n />\n </Cell>\n );\n },\n);\nDataTableCheckbox.displayName = \"DataTableCheckbox\";\n\n/* ── Pagination ───────────────────────────────────────────── */\n\nexport interface DataTablePaginationProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"onChange\"\n> {\n /** 1-indexed current page. */\n current: number;\n /** Total number of items across all pages. */\n total: number;\n /** Items per page. Default 25. */\n pageSize?: number;\n onPageChange?: (page: number) => void;\n siblingCount?: number;\n}\n\n/**\n * DataTablePagination — full pagination strip. Wraps the existing\n * `Pagination` primitive: derives `pageCount` from `total / pageSize`\n * and forwards the page label (\"1–25 of 327\"). Page size defaults to\n * 25 (the consumer contract did not specify; this matches the most\n * common firm-app table page size).\n */\nexport const DataTablePagination = forwardRef<HTMLElement, DataTablePaginationProps>(\n function DataTablePagination(\n { current, total, pageSize = 25, onPageChange, siblingCount, className, ...props },\n ref,\n ) {\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n return (\n <Pagination\n ref={ref}\n currentPage={current}\n totalPages={totalPages}\n onPageChange={onPageChange ?? (() => {})}\n siblingCount={siblingCount}\n totalItems={total}\n pageSize={pageSize}\n className={cn(\"mt-4\", className)}\n {...props}\n />\n );\n },\n);\nDataTablePagination.displayName = \"DataTablePagination\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\n\n/**\n * Detail layout composites — two-column layout: a sticky left rail (the\n * \"spine\", 320px) holding identity + key facts, and a scrollable main\n * column for tabs, sections, tables, and activity feeds.\n */\n\n/* -------------------------------------------------------------------------- */\n/* DetailGrid — outermost 2-column container */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailGridProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const DetailGrid = forwardRef<HTMLDivElement, DetailGridProps>(function DetailGrid(\n { className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid grid-cols-1 items-start gap-6 lg:grid-cols-[320px_1fr] lg:gap-9\",\n className,\n )}\n {...props}\n />\n );\n});\nDetailGrid.displayName = \"DetailGrid\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpine — left rail card */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailSpineProps = React.HTMLAttributes<HTMLElement>;\n\nexport const DetailSpine = forwardRef<HTMLElement, DetailSpineProps>(function DetailSpine(\n { className, ...props },\n ref,\n) {\n return (\n <aside\n ref={ref}\n className={cn(\n \"rounded-card border-rule bg-surface shadow-quiet border p-[18px]\",\n \"space-y-4\",\n \"lg:sticky lg:top-[calc(var(--shell-header-h)+24px)] lg:self-start\",\n className,\n )}\n {...props}\n />\n );\n});\nDetailSpine.displayName = \"DetailSpine\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineHeader — avatar + name + subtitle */\n/* -------------------------------------------------------------------------- */\n\nexport interface DetailSpineHeaderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"title\"\n> {\n /** Image src or initials/name string passed through to <Avatar>. */\n avatar: string;\n /** Display name / entity title. */\n title: string;\n /** Smaller line under the title — entity type, classification, etc. */\n subtitle: string;\n}\n\nexport const DetailSpineHeader = forwardRef<HTMLDivElement, DetailSpineHeaderProps>(\n function DetailSpineHeader({ avatar, title, subtitle, className, ...props }, ref) {\n const isImageSrc = /^(https?:|data:|\\/)/i.test(avatar);\n\n return (\n <div ref={ref} className={cn(\"flex items-center gap-3\", className)} {...props}>\n <Avatar\n size=\"lg\"\n src={isImageSrc ? avatar : undefined}\n name={isImageSrc ? title : avatar}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-display text-fg line-clamp-1 text-base leading-tight font-medium\">\n {title}\n </div>\n <div className=\"font-spec text-fg-4 text-[11px]\">{subtitle}</div>\n </div>\n </div>\n );\n },\n);\nDetailSpineHeader.displayName = \"DetailSpineHeader\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineSection — eyebrow-labeled sub-block inside the spine */\n/* -------------------------------------------------------------------------- */\n\nexport interface DetailSpineSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Small caps label rendered above the section content. */\n eyebrow: string;\n}\n\nexport const DetailSpineSection = forwardRef<HTMLDivElement, DetailSpineSectionProps>(\n function DetailSpineSection({ eyebrow, children, className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"border-rule-soft border-t pt-3\", className)} {...props}>\n <div className=\"text-fg-4 mb-2 font-mono text-[10.5px] font-medium tracking-[0.14em] uppercase\">\n {eyebrow}\n </div>\n {children}\n </div>\n );\n },\n);\nDetailSpineSection.displayName = \"DetailSpineSection\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailSpineStats — 2-col grid container for <Stat> primitives */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailSpineStatsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const DetailSpineStats = forwardRef<HTMLDivElement, DetailSpineStatsProps>(\n function DetailSpineStats({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"grid grid-cols-2 gap-x-3 gap-y-3.5\", className)} {...props} />\n );\n },\n);\nDetailSpineStats.displayName = \"DetailSpineStats\";\n\n/* -------------------------------------------------------------------------- */\n/* DetailMain — right side, scrollable page content */\n/* -------------------------------------------------------------------------- */\n\nexport type DetailMainProps = React.HTMLAttributes<HTMLElement>;\n\nexport const DetailMain = forwardRef<HTMLElement, DetailMainProps>(function DetailMain(\n { className, ...props },\n ref,\n) {\n return <section ref={ref} className={cn(\"min-w-0 flex-1 space-y-6\", className)} {...props} />;\n});\nDetailMain.displayName = \"DetailMain\";\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * ActivityList — vertical feed of activity rows.\n *\n * Two row variants ship from this file:\n *\n * <ActivityList>\n * {/* \"Anna filed 1120S — 2h ago\" — actor-led, used for audit feeds *}\n * <ActivityItem dot=\"success\" actor=\"Anna\" text=\"filed\" target=\"1120S\" time=\"2h ago\" />\n *\n * {/* \"Stage advanced to Review — by Anna · 3m ago\" — title-led, used\n * for in-thread event rows where the title carries the verb already *}\n * <ActivityEventItem title=\"Stage advanced to Review\" description=\"by Anna\" time=\"3m ago\" />\n * </ActivityList>\n *\n * Picking the right one: actor-led when the actor is the news (\"who did\n * this thing\"), title-led when the event itself is the news (\"what\n * changed; the actor is parenthetical\").\n */\n\nexport type ActivityListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport const ActivityList = forwardRef<HTMLUListElement, ActivityListProps>(function ActivityList(\n { className, children, ...props },\n ref,\n) {\n return (\n <ul ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n {children}\n </ul>\n );\n});\nActivityList.displayName = \"ActivityList\";\n\nexport type ActivityDotVariant = \"default\" | \"success\" | \"warn\" | \"accent\";\n\nconst dotClass: Record<ActivityDotVariant, string> = {\n default: \"bg-fg-4\",\n success: \"bg-success-fg\",\n warn: \"bg-warning-fg\",\n accent: \"bg-accent\",\n};\n\nexport interface ActivityItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n dot?: ActivityDotVariant;\n actor: string;\n text: string;\n target?: string;\n time: string;\n}\n\nexport const ActivityItem = forwardRef<HTMLLIElement, ActivityItemProps>(function ActivityItem(\n { dot = \"default\", actor, text, target, time, className, ...props },\n ref,\n) {\n return (\n <li\n ref={ref}\n className={cn(\n \"border-rule-soft flex items-center gap-2 border-b py-2 text-sm last:border-0\",\n className,\n )}\n {...props}\n >\n <span aria-hidden=\"true\" className={cn(\"size-1.5 shrink-0 rounded-full\", dotClass[dot])} />\n <span className=\"text-fg-2 font-medium\">{actor}</span>\n <span className=\"text-fg-3\">{text}</span>\n {target && <span className=\"text-accent hover:underline\">{target}</span>}\n <span className=\"text-fg-4 ml-auto text-xs tabular-nums\">{time}</span>\n </li>\n );\n});\nActivityItem.displayName = \"ActivityItem\";\n\n/* ─── ActivityEventItem ─────────────────────────────────────────── */\n\nexport interface ActivityEventItemProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\" | \"title\"> {\n dot?: ActivityDotVariant;\n /** Primary event label — carries the verb (\"Stage advanced to Review\"). */\n title: ReactNode;\n /** Optional secondary qualifier (\"by Anna\", \"auto-assigned\", etc.). */\n description?: ReactNode;\n /** Pre-formatted relative time, right-aligned. */\n time: ReactNode;\n /** Inset the row to align with avatar-led message rows above it. */\n inset?: boolean;\n}\n\nexport const ActivityEventItem = forwardRef<HTMLLIElement, ActivityEventItemProps>(\n function ActivityEventItem(\n { dot = \"default\", title, description, time, inset, className, ...props },\n ref,\n ) {\n return (\n <li\n ref={ref}\n className={cn(\n \"text-fg-3 flex items-center gap-2 text-[11px]\",\n inset && \"pl-9\",\n className,\n )}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\"size-1 shrink-0 rounded-full\", dotClass[dot])}\n />\n <span className=\"truncate\">\n <span className=\"text-fg-2 font-medium\">{title}</span>\n {description && (\n <span className=\"text-fg-4 ml-1\">— {description}</span>\n )}\n </span>\n <span className=\"text-fg-4 ml-auto shrink-0 text-[10px] tabular-nums\">{time}</span>\n </li>\n );\n },\n);\nActivityEventItem.displayName = \"ActivityEventItem\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\nimport { Badge } from \"../primitives/badge\";\nimport { CalendarIcon, UserIcon } from \"../primitives/icons\";\n\n/**\n * Kanban — flex container for board columns.\n */\n\nexport type KanbanProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Kanban = forwardRef<HTMLDivElement, KanbanProps>(function Kanban(\n { className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"region\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- Keyboard focus is required for scrollable regions in Safari.\n tabIndex={0}\n aria-label=\"Kanban board\"\n className={cn(\n \"flex items-start gap-4 overflow-x-auto focus-visible:[box-shadow:var(--shadow-focus-ring)] focus-visible:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n});\nKanban.displayName = \"Kanban\";\n\nexport interface KanbanColumnProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: string;\n count: number;\n}\n\nexport const KanbanColumn = forwardRef<HTMLDivElement, KanbanColumnProps>(function KanbanColumn(\n { title, count, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"flex max-w-[320px] min-w-[280px] flex-1 flex-col gap-3\", className)}\n {...props}\n >\n <div className=\"text-fg-2 flex items-center justify-between text-sm font-medium\">\n <span>{title}</span>\n <span className=\"bg-bg-2 text-fg-3 rounded-pill px-2 py-0.5 text-xs tabular-nums\">\n {count}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n );\n});\nKanbanColumn.displayName = \"KanbanColumn\";\n\n// Status is encoded by the column the card sits in, so the card itself carries\n// no stage colour (a left rail would just duplicate the column — see the\n// \"avoid redundant signals\" Kanban guidance). Urgency lives on the priority\n// chip and the due-date colour instead.\nconst kanbanCardBase = cn(\n \"bg-surface border border-rule rounded-card shadow-quiet p-3 space-y-2 cursor-grab\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] hover:border-rule-strong motion-reduce:transition-none\",\n);\n\ntype KanbanPriority = \"high\" | \"medium\" | \"low\";\n\nconst priorityConfig: Record<\n KanbanPriority,\n { label: string; variant: React.ComponentProps<typeof Badge>[\"variant\"] }\n> = {\n high: { label: \"High\", variant: \"destructive\" },\n medium: { label: \"Med\", variant: \"warning\" },\n low: { label: \"Low\", variant: \"secondary\" },\n};\n\ntype KanbanDueStatus = \"overdue\" | \"soon\" | \"default\";\n\n// The card never parses dates; the consumer formats `dueDate` and tells us its\n// urgency via `dueStatus`. Overdue reads red, due-soon amber, the rest muted.\nconst dueStatusClass: Record<KanbanDueStatus, string> = {\n overdue: \"text-danger-fg font-semibold\",\n soon: \"text-warning-fg font-semibold\",\n default: \"text-fg-3 font-medium\",\n};\n\nexport interface KanbanCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Category tag, e.g. a return type (\"1040\", \"1120S\"). Rendered as an info chip. */\n label?: string;\n /** Task title. Providing this switches the card to the structured rich layout. */\n title?: string;\n /** Client / entity the task belongs to. */\n client?: string;\n /** Priority — drives the colored priority chip. */\n priority?: KanbanPriority;\n /** Preformatted due date, e.g. \"Apr 15\". */\n dueDate?: string;\n /** Urgency of `dueDate` — colors it red (overdue) or amber (soon). Default muted. */\n dueStatus?: KanbanDueStatus;\n /** Assignee shown as an initials avatar. */\n assignee?: { name: string; src?: string | null };\n}\n\nexport const KanbanCard = forwardRef<HTMLDivElement, KanbanCardProps>(function KanbanCard(\n { className, label, title, client, priority, dueDate, dueStatus, assignee, children, ...props },\n ref,\n) {\n // Rich layout is opt-in: providing `title` switches to the structured card.\n // Without it the card stays a flexible container for arbitrary children.\n const isRich = title !== undefined;\n const pri = priority ? priorityConfig[priority] : null;\n const hasFooter = Boolean(dueDate || assignee);\n\n return (\n <div ref={ref} className={cn(kanbanCardBase, className)} {...props}>\n {isRich ? (\n <div>\n {(label || pri) && (\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n {label ? (\n <Badge variant=\"info\" size=\"sm\">\n {label}\n </Badge>\n ) : (\n <span />\n )}\n {pri && (\n <Badge variant={pri.variant} size=\"sm\">\n {pri.label}\n </Badge>\n )}\n </div>\n )}\n <p className=\"text-fg text-[13px] leading-snug font-semibold\">{title}</p>\n {client && (\n <p className=\"text-fg-3 mt-1 flex items-center gap-1.5 text-xs\">\n <UserIcon className=\"size-3 shrink-0\" aria-hidden=\"true\" />\n <span className=\"truncate\">{client}</span>\n </p>\n )}\n {hasFooter && (\n <div className=\"border-rule-soft mt-3 flex items-center justify-between border-t pt-2.5\">\n {dueDate ? (\n <span\n className={cn(\n \"flex items-center gap-1 text-xs\",\n dueStatusClass[dueStatus ?? \"default\"],\n )}\n >\n <CalendarIcon className=\"size-3 shrink-0\" aria-hidden=\"true\" />\n {dueDate}\n </span>\n ) : (\n <span />\n )}\n {assignee && (\n <Avatar size=\"xs\" name={assignee.name} src={assignee.src} title={assignee.name} />\n )}\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </div>\n );\n});\nKanbanCard.displayName = \"KanbanCard\";\n","import { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * MessageBubble — presentational comment row for a chat / discussion thread.\n *\n * Visual anatomy:\n *\n * [Avatar] [Name (you)] [3m ago] [hover actions]\n * ┌──────────────────────────────────────┐\n * │ message body slot │\n * └──────────────────────────────────────┘\n *\n * The component is presentational only — it owns layout, hover-reveal of\n * actions, and the bubble chrome. The author avatar, sanitization of HTML\n * content, and any \"(you)\" suffix logic stay with the consumer.\n *\n * <MessageBubble\n * avatar={<Avatar name=\"Anna\" size=\"sm\" />}\n * name={<>Anna {isOwn && <span className=\"…\">(you)</span>}</>}\n * timestamp=\"3m ago\"\n * actions={canDelete && <MessageBubbleAction onClick={…}>Delete</MessageBubbleAction>}\n * >\n * <div dangerouslySetInnerHTML={{ __html: sanitized }} />\n * </MessageBubble>\n *\n * For soft-deleted rows, use `<MessageBubble.Tombstone>` — same vertical\n * rhythm, quieter chrome, no bubble body.\n */\n\nexport interface MessageBubbleProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n /** Author avatar — pass an `<Avatar size=\"sm\" />` from the package. */\n avatar?: ReactNode;\n /** Author display name. Pass a node so callers can append \"(you)\" affixes\n * or other inline decorations. */\n name: ReactNode;\n /** Pre-formatted relative time string (e.g. \"3m ago\"). The bubble renders\n * it with `tabular-nums` so the column doesn't jitter as time advances. */\n timestamp: ReactNode;\n /** Optional right-aligned action affordance. Revealed on row hover and on\n * keyboard focus — pass `<MessageBubbleAction>` for the canonical look,\n * or any node if you need a menu. */\n actions?: ReactNode;\n /** Message body — typically a `<div dangerouslySetInnerHTML={...} />` of\n * pre-sanitized HTML, but plain ReactNode works too. */\n children: ReactNode;\n}\n\nexport const MessageBubble = forwardRef<HTMLLIElement, MessageBubbleProps>(function MessageBubble(\n { avatar, name, timestamp, actions, children, className, ...props },\n ref,\n) {\n return (\n <li ref={ref} className={cn(\"group/bubble flex gap-2.5\", className)} {...props}>\n {avatar}\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-0.5 flex items-baseline gap-2\">\n <span className=\"text-fg truncate text-xs font-semibold\">{name}</span>\n <span className=\"text-fg-4 text-[10px] tabular-nums\">{timestamp}</span>\n {actions && (\n <span\n className={cn(\n \"ml-auto opacity-0 transition-opacity\",\n \"group-hover/bubble:opacity-100 group-focus-within/bubble:opacity-100\",\n )}\n >\n {actions}\n </span>\n )}\n </div>\n <div className=\"bg-bg-2 text-fg break-words rounded-lg px-2.5 py-1.5 text-sm leading-relaxed\">\n {children}\n </div>\n </div>\n </li>\n );\n}) as MessageBubbleComponent;\nMessageBubble.displayName = \"MessageBubble\";\n\n/* ─── Tombstone variant ─────────────────────────────────────────── */\n\nexport interface MessageBubbleTombstoneProps\n extends Omit<React.LiHTMLAttributes<HTMLLIElement>, \"children\"> {\n /** Leading icon — pass a 12px `<Trash2Icon />` or any glyph that signals\n * \"removed\". The DS deliberately doesn't hard-code the trash icon so\n * surfaces with different tombstone vocabularies (archived, redacted,\n * withdrawn) can reuse this shell. */\n icon?: ReactNode;\n /** Tombstone message — typically a sentence assembled by the consumer\n * with the right grammar (\"Anna deleted her comment\" vs. \"Anna's comment\n * was deleted by Lead\"). Italics + muted color come from the shell. */\n children: ReactNode;\n /** Pre-formatted relative time (e.g. \"3m ago\"). */\n timestamp?: ReactNode;\n}\n\nexport const MessageBubbleTombstone = forwardRef<HTMLLIElement, MessageBubbleTombstoneProps>(\n function MessageBubbleTombstone({ icon, children, timestamp, className, ...props }, ref) {\n return (\n <li\n ref={ref}\n className={cn(\n \"text-fg-3 flex items-center gap-2.5 pl-1 text-[11px] italic\",\n className,\n )}\n {...props}\n >\n {icon && <span className=\"shrink-0 opacity-70 [&>svg]:size-3\">{icon}</span>}\n <span className=\"truncate\">\n {children}\n {timestamp && (\n <>\n {\" · \"}\n <span className=\"tabular-nums\">{timestamp}</span>\n </>\n )}\n </span>\n </li>\n );\n },\n);\nMessageBubbleTombstone.displayName = \"MessageBubble.Tombstone\";\n\n/* ─── Action affordance ─────────────────────────────────────────── */\n\nexport interface MessageBubbleActionProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Render with the destructive color (e.g. \"Delete\"). */\n destructive?: boolean;\n}\n\nexport const MessageBubbleAction = forwardRef<HTMLButtonElement, MessageBubbleActionProps>(\n function MessageBubbleAction({ destructive, className, type = \"button\", ...props }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"text-fg-4 text-[10px] focus-visible:outline-none\",\n destructive ? \"hover:text-danger-fg\" : \"hover:text-fg\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nMessageBubbleAction.displayName = \"MessageBubble.Action\";\n\n/* ─── Compound exports ──────────────────────────────────────────── */\n\ntype MessageBubbleComponent = React.ForwardRefExoticComponent<\n MessageBubbleProps & React.RefAttributes<HTMLLIElement>\n> & {\n Tombstone: typeof MessageBubbleTombstone;\n Action: typeof MessageBubbleAction;\n};\n\n(MessageBubble as MessageBubbleComponent).Tombstone = MessageBubbleTombstone;\n(MessageBubble as MessageBubbleComponent).Action = MessageBubbleAction;\n","\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"../primitives/button\";\nimport { SendIcon } from \"../primitives/icons\";\n\n/**\n * MessageComposer — single-component chat input for thread surfaces.\n *\n * The polish-correct way to render a message composer in the Assure suite:\n * one card chrome, an optional quick-reply chip strip on top, an editor\n * slot in the middle, and a footer row with a built-in Send button.\n *\n * Replaces the compound `<ThreadComposer.Accessory|Input|Footer>` pattern,\n * which exposed too many slots to the consumer AND silently shipped broken\n * CSS in v0.13.0 — its arbitrary-variant chrome reset\n * (`[&>*]:!rounded-none …`) didn't compile into `dist/styles.css`, so any\n * editor child that painted its own card (e.g. a `MentionInput` with\n * `rounded-xl border bg-input-background`) sat fully visible inside the\n * ThreadComposer's identical chrome — two stacked cards, the exact\n * \"fragmented chatbox\" failure mode this primitive exists to prevent.\n *\n * Usage:\n *\n * <MessageComposer\n * chips={[{ id, label, body }, …]}\n * onChipPick={(c) => editor.insertHTML(c.body)}\n * onSubmit={submit}\n * submitting={submitting}\n * loading={loading}\n * startSlot={<Switch …>Show activity</Switch>}\n * >\n * <MentionInput … /> // ← or any editor: textarea, contenteditable, etc.\n * </MessageComposer>\n *\n * The editor goes as `children`. DS owns CHROME; the consumer owns the\n * editor implementation (Tiptap+mention in firm app, plain textarea in\n * client portal). Direct-child chrome — rounded card, border, bg, shadow —\n * is reset automatically by static rules on `[data-slot=\"message-composer-editor\"] > *`\n * in the shipped CSS, so consumers don't neutralise anything class-by-class.\n *\n * Send is INTERNALISED. The composer owns the Send button (`primary` size\n * `sm`) and wires it to `onSubmit`. Consumers don't render a separate\n * Send — that's the \"single component\" contract this primitive fulfils.\n *\n * Disabled / loading: pass `disabled` or `loading` on the root and the\n * whole card greys to 60% opacity with pointer events blocked,\n * `aria-disabled` is set, and `data-state=\"disabled\"` is emitted for\n * analytics / CSS targeting.\n *\n * @since 0.14.0\n */\n\nexport interface QuickReplyChip {\n id: string;\n label: string;\n body: string;\n}\n\nexport interface MessageComposerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSubmit\"> {\n /** Quick-reply chips above the editor. Auto-hides when empty/undefined. */\n chips?: QuickReplyChip[];\n /** Called when a chip is picked. Receives the full chip object. */\n onChipPick?: (chip: QuickReplyChip) => void;\n /** Render skeleton chips while templates fetch — keeps the strip from\n * popping in once data arrives. */\n chipsLoading?: boolean;\n\n /** Send action — wired to the built-in Send button. */\n onSubmit?: () => void;\n /** Send button label. Default: `\"Send\"`. */\n submitLabel?: string;\n /** Send button label while `submitting`. Default: `\"Sending…\"`. */\n submittingLabel?: string;\n /** Show `submittingLabel` and disable the Send button. */\n submitting?: boolean;\n /** Additional gating on the Send button (e.g. empty editor). */\n submitDisabled?: boolean;\n\n /** Disables the whole composer (60% opacity, blocked pointer events,\n * `aria-disabled`). Use while a fetch is in flight or the surface is\n * in a transitioning state. */\n disabled?: boolean;\n /** Alias for `disabled` — semantic for \"still fetching, not yet ready\n * to edit\". The two combine: composer is disabled if EITHER is true. */\n loading?: boolean;\n\n /** Left-of-Send slot in the footer — toggles, format buttons, presence\n * indicators, multi-action toolbars (channel dropdown + template picker\n * + attachments + AI sparkle). The communications variant fills this\n * with its full action toolbar; the rail variant typically leaves it\n * empty. */\n startSlot?: ReactNode;\n\n /** Optional region rendered ABOVE the chip strip and editor. Use for\n * recipient fields (email To/CC/BCC), subject lines, AI draft banners,\n * SMS phone selectors — anything the editor body responds to but isn't\n * a chip. The communications variant uses this for the recipient stack;\n * the rail variant leaves it empty.\n *\n * Header rows typically end with a hairline divider (`border-b border-rule`)\n * to separate them from each other and from the editor. The composer\n * doesn't impose this — pass your own divider styling. */\n header?: ReactNode;\n\n /** Optional region rendered BETWEEN the editor and the footer. Use for\n * SMS character counters, attachment chips, inline metadata. Different\n * from `startSlot` (footer-left) because this lives ABOVE the footer\n * row — it stays visible while the Send button anchors to the footer's\n * right edge. */\n belowEditor?: ReactNode;\n\n /** The editor — Tiptap mention input, plain textarea, contenteditable,\n * etc. Pass `showSubmitHint={false}` on any editor that surfaces its own\n * ⌘↩ hint to avoid the affordance reading duplicated alongside the\n * composer's Send button. */\n children: ReactNode;\n}\n\nexport const MessageComposer = forwardRef<HTMLDivElement, MessageComposerProps>(\n function MessageComposer(\n {\n chips,\n onChipPick,\n chipsLoading = false,\n onSubmit,\n submitLabel = \"Send\",\n submittingLabel = \"Sending…\",\n submitting = false,\n submitDisabled = false,\n disabled = false,\n loading = false,\n startSlot,\n header,\n belowEditor,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const isDisabled = disabled || loading;\n const isSubmitDisabled = isDisabled || submitting || submitDisabled;\n const showChipsRegion = chipsLoading || (chips && chips.length > 0);\n\n /* Chip-strip overflow detection — drives a mask-image fade on the\n * appropriate edge so off-screen chips read as scrollable.\n * Single recompute on resize + scroll, deps on chips.length so we\n * re-observe when the strip's content changes. */\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [overflow, setOverflow] = useState<\"none\" | \"right\" | \"left\" | \"both\">(\"none\");\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el || !showChipsRegion) return;\n const compute = () => {\n const canL = el.scrollLeft > 1;\n const canR = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setOverflow(canL && canR ? \"both\" : canR ? \"right\" : canL ? \"left\" : \"none\");\n };\n compute();\n const ro = new ResizeObserver(compute);\n ro.observe(el);\n el.addEventListener(\"scroll\", compute, { passive: true });\n return () => {\n ro.disconnect();\n el.removeEventListener(\"scroll\", compute);\n };\n }, [chips?.length, showChipsRegion]);\n\n const maskImage =\n overflow === \"right\"\n ? \"linear-gradient(to right, black 0%, black calc(100% - 24px), transparent 100%)\"\n : overflow === \"left\"\n ? \"linear-gradient(to right, transparent 0%, black 24px, black 100%)\"\n : overflow === \"both\"\n ? \"linear-gradient(to right, transparent 0%, black 24px, black calc(100% - 24px), transparent 100%)\"\n : \"none\";\n\n return (\n <div\n ref={ref}\n data-slot=\"message-composer\"\n data-state={isDisabled ? \"disabled\" : \"idle\"}\n aria-disabled={isDisabled || undefined}\n className={cn(\n \"relative flex flex-col\",\n \"border-rule bg-input-background rounded-xl border\",\n \"transition-shadow duration-150\",\n \"focus-within:border-accent-ring focus-within:bg-surface focus-within:shadow-sm\",\n isDisabled && \"pointer-events-none opacity-60\",\n className,\n )}\n {...props}\n >\n {header && (\n <div data-slot=\"message-composer-header\" className=\"shrink-0\">\n {header}\n </div>\n )}\n {showChipsRegion && (\n <div className=\"flex shrink-0 items-center px-2.5 pt-2 pb-1.5\">\n <div\n ref={scrollerRef}\n data-slot=\"message-composer-chips\"\n className=\"flex w-full gap-1.5 overflow-x-auto\"\n style={{ maskImage, WebkitMaskImage: maskImage }}\n >\n {chipsLoading\n ? Array.from({ length: 3 }).map((_, i) => (\n <div\n key={i}\n aria-hidden=\"true\"\n className=\"bg-bg-3 h-6 w-20 shrink-0 animate-pulse rounded-full\"\n />\n ))\n : chips!.map((chip) => (\n <button\n key={chip.id}\n type=\"button\"\n onClick={() => onChipPick?.(chip)}\n title={chip.label}\n className={cn(\n \"inline-flex h-6 shrink-0 items-center rounded-full px-2.5\",\n \"text-[11px] font-medium text-fg-2\",\n \"bg-bg-2 transition-colors hover:bg-bg-3 hover:text-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n )}\n >\n {chip.label}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div data-slot=\"message-composer-editor\" className=\"min-h-0 flex-1\">\n {children}\n </div>\n\n {belowEditor && (\n <div data-slot=\"message-composer-below-editor\" className=\"shrink-0\">\n {belowEditor}\n </div>\n )}\n\n <div\n data-slot=\"message-composer-footer\"\n className=\"flex shrink-0 items-center justify-between gap-2 px-2 pb-1.5 pt-1\"\n >\n <div className=\"flex min-w-0 items-center gap-2\">{startSlot}</div>\n <Button\n size=\"sm\"\n disabled={isSubmitDisabled}\n onClick={onSubmit}\n className=\"gap-1.5\"\n >\n <SendIcon size={14} aria-hidden=\"true\" />\n {submitting ? submittingLabel : submitLabel}\n </Button>\n </div>\n </div>\n );\n },\n);\nMessageComposer.displayName = \"MessageComposer\";\n","import { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar } from \"../primitives/avatar\";\nimport { Badge } from \"../primitives/badge\";\nimport { SettingsIcon } from \"../primitives/icons\";\n\n/**\n * NotificationPanel — presentational in-app notification list (the bell\n * dropdown body). Identity-led: people-driven rows (mentions, messages) show\n * the sender's avatar, system rows show a tinted type tile. Colour on the tile\n * carries the notification type; the unread signal is a purple dot beside the\n * headline plus a faint purple row tint.\n *\n * This is the visual layer only. The app owns data, realtime (SSE),\n * pagination, and navigation, and composes these pieces:\n *\n * <NotificationPanel>\n * <NotificationPanelHeader onMarkAllRead={...} />\n * <NotificationFilter\n * value={filter}\n * onValueChange={setFilter}\n * counts={{ all: 9, unread: 3 }}\n * actions={<TypeDropdown />}\n * />\n * <NotificationList>\n * {items.map((n) => (\n * <NotificationItem\n * key={n.id}\n * title={n.title}\n * body={n.body}\n * client={n.client}\n * time={n.time}\n * sender={n.sender} // omit for system rows\n * icon={<DocumentIcon />} // used when there's no sender\n * iconClassName=\"bg-success-bg text-success-fg\"\n * unread={!n.isRead}\n * onClick={() => open(n)}\n * />\n * ))}\n * </NotificationList>\n * <NotificationPanelFooter onClick={...} />\n * </NotificationPanel>\n *\n * Empty / loading states are the consumer's call (use `EmptyState` and\n * `Skeleton` from the package).\n */\n\n/* ─── Panel shell ─────────────────────────────────────────────── */\n\nexport type NotificationPanelProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const NotificationPanel = forwardRef<HTMLDivElement, NotificationPanelProps>(\n function NotificationPanel({ className, children, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"bg-surface text-fg flex w-full flex-col\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nNotificationPanel.displayName = \"NotificationPanel\";\n\n/* ─── Header ──────────────────────────────────────────────────── */\n\nexport interface NotificationPanelHeaderProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n /** When > 0, shows a small unread pill next to the title. Counts also live on\n * the filter tabs, so leave unset to keep the header clean. */\n unreadCount?: number;\n onMarkAllRead?: () => void;\n onSettings?: () => void;\n}\n\nexport const NotificationPanelHeader = forwardRef<HTMLDivElement, NotificationPanelHeaderProps>(\n function NotificationPanelHeader(\n { title = \"Notifications\", unreadCount = 0, onMarkAllRead, onSettings, className, ...props },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule flex items-center justify-between border-b px-4 py-3\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-fg text-[15px] font-semibold\">{title}</h3>\n {unreadCount > 0 && (\n <span className=\"bg-pro-bg text-pro-fg rounded-pill px-1.5 py-0.5 text-[11px] font-semibold tabular-nums\">\n {unreadCount > 99 ? \"99+\" : unreadCount}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n {onMarkAllRead && (\n <button\n type=\"button\"\n onClick={onMarkAllRead}\n className=\"text-pro-fg rounded-md px-1.5 py-1 text-sm font-medium hover:bg-[color:var(--color-pro-bg)] focus-visible:ring-accent outline-none focus-visible:ring-2\"\n >\n Mark all read\n </button>\n )}\n {onSettings && (\n <button\n type=\"button\"\n onClick={onSettings}\n aria-label=\"Notification settings\"\n className=\"text-fg-3 hover:text-fg hover:bg-bg-2 rounded-md p-1 [&_svg]:size-[15px]\"\n >\n <SettingsIcon />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nNotificationPanelHeader.displayName = \"NotificationPanelHeader\";\n\n/* ─── Filter (All / Unread segmented) ─────────────────────────── */\n\nexport type NotificationFilterValue = \"all\" | \"unread\";\n\nexport interface NotificationFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n value: NotificationFilterValue;\n onValueChange: (value: NotificationFilterValue) => void;\n /** Optional per-tab counts, e.g. `{ all: 9, unread: 3 }`. Each present count\n * renders a small badge inside its tab. Omit to hide the badges. */\n counts?: Partial<Record<NotificationFilterValue, number>>;\n /** Right-aligned slot, e.g. a type-filter dropdown trigger. */\n actions?: React.ReactNode;\n}\n\nconst FILTER_OPTIONS: NotificationFilterValue[] = [\"all\", \"unread\"];\n\nexport const NotificationFilter = forwardRef<HTMLDivElement, NotificationFilterProps>(\n function NotificationFilter({ value, onValueChange, counts, actions, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule flex items-center justify-between gap-2 border-b px-3 py-2\",\n className,\n )}\n {...props}\n >\n <div className=\"inline-flex items-center gap-1 text-sm font-medium\">\n {FILTER_OPTIONS.map((option) => {\n const selected = value === option;\n const count = counts?.[option];\n return (\n <button\n key={option}\n type=\"button\"\n onClick={() => onValueChange(option)}\n aria-pressed={selected}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1 capitalize transition-colors\",\n \"focus-visible:ring-accent outline-none focus-visible:ring-2\",\n selected\n ? \"bg-surface text-pro-fg ring-1 ring-[color:var(--color-pro-line)]\"\n : \"text-fg-3 hover:text-fg\",\n )}\n >\n {option}\n {count != null && (\n <span\n className={cn(\n \"rounded-md px-1.5 py-px text-[11px] font-semibold tabular-nums\",\n selected ? \"bg-pro-bg text-pro-fg\" : \"bg-bg-2 text-fg-4\",\n )}\n >\n {count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n {actions}\n </div>\n );\n },\n);\nNotificationFilter.displayName = \"NotificationFilter\";\n\n/* ─── List ────────────────────────────────────────────────────── */\n\nexport type NotificationListProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const NotificationList = forwardRef<HTMLDivElement, NotificationListProps>(\n function NotificationList({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"divide-rule-soft max-h-[460px] divide-y overflow-y-auto\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nNotificationList.displayName = \"NotificationList\";\n\n/* ─── Item (row) ──────────────────────────────────────────────── */\n\nexport interface NotificationItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"title\"> {\n /** Primary headline — one scannable line (e.g. \"Document uploaded\"). Truncates. */\n title: React.ReactNode;\n /** Muted secondary line — the detail (e.g. \"W-2 batch uploaded\"). Truncates. */\n body?: React.ReactNode;\n /** Quiet caption shown before the client chip on the meta line. */\n typeLabel?: React.ReactNode;\n /** Client / account name — rendered as an outline chip on the meta line. */\n client?: React.ReactNode;\n /** Preformatted relative time, e.g. \"8m ago\". Sits on the meta line. */\n time?: React.ReactNode;\n /** People-driven rows: shows the sender avatar instead of the icon tile. */\n sender?: { name: string; src?: string | null };\n /** System rows: icon rendered inside a tile. Ignored when `sender` is set. */\n icon?: React.ReactNode;\n /**\n * Tint the icon tile per type, e.g. \"bg-warning-bg text-warning-fg\". The\n * consumer owns the type-to-colour map. Defaults to a neutral tile.\n */\n iconClassName?: string;\n unread?: boolean;\n}\n\nexport const NotificationItem = forwardRef<HTMLButtonElement, NotificationItemProps>(\n function NotificationItem(\n { title, body, typeLabel, client, time, sender, icon, iconClassName, unread, className, ...props },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex w-full gap-3 px-4 py-3 text-left outline-none\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n unread\n ? \"bg-pro-bg hover:bg-pro-bg-hover focus-visible:bg-pro-bg-hover\"\n : \"hover:bg-bg-2/60 focus-visible:bg-bg-2/60\",\n className,\n )}\n {...props}\n >\n {sender ? (\n <Avatar size=\"md\" name={sender.name} src={sender.src} className=\"mt-0.5\" />\n ) : (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-xl [&_svg]:size-4\",\n iconClassName ?? \"bg-bg-2 text-fg-3\",\n )}\n >\n {icon}\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n {unread && <span className=\"sr-only\">Unread. </span>}\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <p\n className={cn(\n \"min-w-0 truncate text-[13.5px] leading-snug font-semibold\",\n unread ? \"text-fg\" : \"text-fg-2\",\n )}\n >\n {title}\n </p>\n {unread && (\n <span aria-hidden=\"true\" className=\"bg-pro-fg size-1.5 shrink-0 rounded-full\" />\n )}\n </div>\n\n {body && <p className=\"text-fg-3 mt-0.5 truncate text-xs\">{body}</p>}\n\n {(typeLabel || client || time) && (\n <div className=\"mt-1.5 flex items-center gap-2\">\n {typeLabel && <span className=\"text-fg-4 text-[11px]\">{typeLabel}</span>}\n {client && (\n <Badge\n variant=\"outline\"\n className=\"rounded-md px-1.5 py-0.5 text-[11px] font-medium\"\n >\n {client}\n </Badge>\n )}\n {time && (\n <span className=\"text-fg-4 text-xs whitespace-nowrap tabular-nums\">{time}</span>\n )}\n </div>\n )}\n </div>\n </button>\n );\n },\n);\nNotificationItem.displayName = \"NotificationItem\";\n\n/* ─── Footer ──────────────────────────────────────────────────── */\n\nexport type NotificationPanelFooterProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const NotificationPanelFooter = forwardRef<HTMLButtonElement, NotificationPanelFooterProps>(\n function NotificationPanelFooter(\n { className, children = \"View all notifications\", ...props },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"border-rule text-fg hover:bg-bg-2 w-full border-t px-4 py-3 text-center text-sm font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\",\n \"focus-visible:ring-accent outline-none focus-visible:ring-2\",\n className,\n )}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\nNotificationPanelFooter.displayName = \"NotificationPanelFooter\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"../primitives/button\";\nimport {\n CheckIcon,\n ChevronRightIcon,\n ClockIcon,\n FileTextIcon,\n PauseIcon,\n PlayIcon,\n SettingsIcon,\n StopIcon,\n Trash2Icon,\n} from \"../primitives/icons\";\nimport { Popover, PopoverClose, PopoverContent, PopoverTrigger } from \"../primitives/popover\";\nimport { Switch } from \"../primitives/switch\";\n\n/**\n * TimeLogger — compact, no-scroll time-entry panel for the firm app.\n *\n * Presentational compound (the app owns data + state); compose only the rows\n * a given surface needs, so the same panel covers a quick timer popover and a\n * full billable time entry:\n *\n * ┌─ Track Time ──────────────── 2h 10m / 8h ─┐ Header (goal + seam)\n * │ ◳ Northwind Ledger · 1120-S (IS) ⌄ │ ContextRow (client + member)\n * │ 0:42:17 ⏸ ■ │ Timer (input ⇄ live clock)\n * │ ○ 1120-S · Review trial balance → │ Field (task)\n * │ ▦ Fri, May 29 · 4:54–5:30 pm CET → │ Field (date / range)\n * │ ≡ Reviewed Q1 adjusting entries │ Notes (plain text)\n * │ ◉ Billable ⚙ $541.67 Cancel Save │ Actions (billable + buttons)\n * ├───────────────────────────────────────────┤\n * │ Fri, May 29 2h 10m │ EntryList (day + total)\n * │ ◉ 1120-S review 36m ▶ 🗑 │ Entry (resume / delete)\n * │ My Timesheet Dashboard │ Footer (nav)\n * └───────────────────────────────────────────┘\n *\n * The live `H:MM:SS` clock is driven by {@link useStopwatch} (SSR-safe). The\n * panel supplies no surface chrome of its own — wrap it in a fixed-width frame\n * or a `Popover` (which already provides border/radius/shadow), exactly like\n * `NotificationPanel`.\n *\n * const sw = useStopwatch();\n * <TimeLogger>\n * <TimeLoggerHeader loggedMinutes={130} goalMinutes={480} />\n * <TimeLoggerTimer\n * phase={sw.phase}\n * elapsedMs={sw.elapsedMs}\n * value={draft}\n * onValueChange={setDraft}\n * onStart={() => sw.start(parseDuration(draft) != null ? parseDuration(draft)! * 1000 : 0)}\n * onPause={sw.pause}\n * onResume={sw.resume}\n * onStop={sw.stop}\n * />\n * <TimeLoggerActions>\n * <TimeLoggerBillable className=\"mr-auto\" billable={billable} onBillableChange={setBillable} />\n * <Button variant=\"ghost\" onClick={sw.reset}>Cancel</Button>\n * <Button>Save</Button>\n * </TimeLoggerActions>\n * </TimeLogger>\n */\n\n/* ────────────────────────────────────────────────────────────────────────\n * Time helpers — exported so consumers format the same way the panel does.\n * ──────────────────────────────────────────────────────────────────────── */\n\nconst padded = (n: number) => String(n).padStart(2, \"0\");\n\n/** Running-clock format from milliseconds → `H:MM:SS`. */\nexport function formatClock(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000));\n return `${Math.floor(total / 3600)}:${padded(Math.floor((total % 3600) / 60))}:${padded(total % 60)}`;\n}\n\n/** Compact duration from seconds → `Xh Ym` (e.g. `2h 10m`, `45m`, `3h`). */\nexport function formatDuration(totalSeconds: number): string {\n const minutes = Math.round(totalSeconds / 60);\n const h = Math.floor(minutes / 60);\n const m = minutes % 60;\n if (h && m) return `${h}h ${m}m`;\n if (h) return `${h}h`;\n return `${m}m`;\n}\n\n/** Parse human input (`3h 20m`, `1:30`, `45m`, bare `90` → minutes) → seconds, or `null`. */\nexport function parseDuration(input: string): number | null {\n const text = input.trim().toLowerCase();\n if (!text) return null;\n const clock = text.match(/^(\\d{1,2}):(\\d{2})$/);\n if (clock) return (Number(clock[1]) * 60 + Number(clock[2])) * 60;\n let seconds = 0;\n let matched = false;\n const unit = /(\\d+(?:\\.\\d+)?)\\s*(h|hr|hrs|hour|hours|m|min|mins|minute|minutes|s|sec|secs)/g;\n let part: RegExpExecArray | null;\n while ((part = unit.exec(text)) !== null) {\n matched = true;\n const value = parseFloat(part[1]);\n if (part[2].startsWith(\"h\")) seconds += value * 3600;\n else if (part[2].startsWith(\"m\")) seconds += value * 60;\n else seconds += value;\n }\n if (!matched && /^\\d+$/.test(text)) return Number(text) * 60;\n return matched ? Math.round(seconds) : null;\n}\n\n/** Currency format used by the billing rows; falls back to `$0.00` for bad ISO codes. */\nexport function formatCurrency(amount: number, currency = \"USD\"): string {\n try {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency }).format(amount);\n } catch {\n return `$${amount.toFixed(2)}`;\n }\n}\n\n/* ────────────────────────────────────────────────────────────────────────\n * useStopwatch — drift-free timing engine for the panel.\n * Elapsed is recomputed from wall-clock timestamps on each tick, so the\n * readout never accumulates interval drift. SSR-safe: no window/storage\n * access, and the first client render matches the server (idle / 0ms).\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport type TimeLoggerPhase = \"idle\" | \"running\" | \"paused\" | \"stopped\";\n\nexport interface UseStopwatchReturn {\n phase: TimeLoggerPhase;\n elapsedMs: number;\n isRunning: boolean;\n /** Begin running, optionally seeded with an offset (e.g. a parsed manual entry). */\n start: (fromMs?: number) => void;\n pause: () => void;\n resume: () => void;\n /** Freeze and mark complete; elapsed is preserved for saving. */\n stop: () => void;\n /** Return to idle at zero. */\n reset: () => void;\n}\n\n// 250ms keeps a H:MM:SS readout visually live without sub-second busywork.\nconst TICK_MS = 250;\n\nexport function useStopwatch(): UseStopwatchReturn {\n const [phase, setPhaseState] = useState<TimeLoggerPhase>(\"idle\");\n const [elapsedMs, setElapsedMs] = useState(0);\n // accumulatedRef holds completed run-time; startedAtRef is the wall clock at\n // the last start/resume. phaseRef mirrors phase so callbacks read it\n // synchronously without re-running impure logic inside a state updater.\n const accumulatedRef = useRef(0);\n const startedAtRef = useRef(0);\n const phaseRef = useRef<TimeLoggerPhase>(\"idle\");\n\n const setPhase = useCallback((next: TimeLoggerPhase) => {\n phaseRef.current = next;\n setPhaseState(next);\n }, []);\n\n useEffect(() => {\n if (phase !== \"running\") return;\n const id = setInterval(() => {\n setElapsedMs(accumulatedRef.current + (Date.now() - startedAtRef.current));\n }, TICK_MS);\n return () => clearInterval(id);\n }, [phase]);\n\n const start = useCallback(\n (fromMs = 0) => {\n accumulatedRef.current = fromMs;\n startedAtRef.current = Date.now();\n setElapsedMs(fromMs);\n setPhase(\"running\");\n },\n [setPhase],\n );\n\n const pause = useCallback(() => {\n if (phaseRef.current !== \"running\") return;\n accumulatedRef.current += Date.now() - startedAtRef.current;\n setElapsedMs(accumulatedRef.current);\n setPhase(\"paused\");\n }, [setPhase]);\n\n const resume = useCallback(() => {\n if (phaseRef.current !== \"paused\") return;\n startedAtRef.current = Date.now();\n setPhase(\"running\");\n }, [setPhase]);\n\n const stop = useCallback(() => {\n if (phaseRef.current === \"idle\") return;\n if (phaseRef.current === \"running\") {\n accumulatedRef.current += Date.now() - startedAtRef.current;\n setElapsedMs(accumulatedRef.current);\n }\n setPhase(\"stopped\");\n }, [setPhase]);\n\n const reset = useCallback(() => {\n accumulatedRef.current = 0;\n startedAtRef.current = 0;\n setElapsedMs(0);\n setPhase(\"idle\");\n }, [setPhase]);\n\n return { phase, elapsedMs, isRunning: phase === \"running\", start, pause, resume, stop, reset };\n}\n\n/* ────────────────────────────────────────────────────────────────────────\n * Root\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport type TimeLoggerProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const TimeLogger = forwardRef<HTMLDivElement, TimeLoggerProps>(function TimeLogger(\n { className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"bg-surface text-fg-2 flex w-full flex-col\", className)}\n {...props}\n >\n {children}\n </div>\n );\n});\nTimeLogger.displayName = \"TimeLogger\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Header — title + daily goal + progress seam\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n icon?: React.ReactNode;\n /** Minutes logged today. With `goalMinutes`, renders the `Xh / Yh` figure + seam. */\n loggedMinutes?: number;\n /** Daily goal in minutes. Omit to hide the goal figure and the progress seam. */\n goalMinutes?: number;\n}\n\nexport const TimeLoggerHeader = forwardRef<HTMLDivElement, TimeLoggerHeaderProps>(\n function TimeLoggerHeader(\n { title = \"Track Time\", icon, loggedMinutes = 0, goalMinutes, className, ...props },\n ref,\n ) {\n const hasGoal = goalMinutes != null;\n const pct = hasGoal && goalMinutes > 0 ? Math.min(100, (loggedMinutes / goalMinutes) * 100) : 0;\n\n return (\n <div ref={ref} className={cn(\"flex flex-col\", className)} {...props}>\n <div className=\"flex items-center justify-between px-4 py-3\">\n <div className=\"text-fg flex items-center gap-2 text-base font-semibold [&_svg]:size-[18px]\">\n <span className=\"text-pro-fg\" aria-hidden=\"true\">\n {icon ?? <ClockIcon />}\n </span>\n {title}\n </div>\n {hasGoal && (\n <div className=\"text-fg-3 font-mono text-[13px] tabular-nums\">\n <b className=\"text-fg font-medium\">{formatDuration(loggedMinutes * 60)}</b> /{\" \"}\n {formatDuration(goalMinutes * 60)}\n </div>\n )}\n </div>\n {/* A 3px flush seam, not a labelled ProgressBar meter — different role,\n so it stays a token-styled one-off rather than the meter primitive. */}\n {hasGoal && (\n <div\n className=\"bg-bg-3 relative h-[3px] w-full\"\n role=\"progressbar\"\n aria-label=\"Daily goal progress\"\n aria-valuemin={0}\n aria-valuemax={goalMinutes}\n aria-valuenow={Math.min(loggedMinutes, goalMinutes)}\n >\n <div\n className=\"bg-pro-fg h-full rounded-r-full transition-[width] duration-[var(--duration-normal)] ease-[var(--ease-out-quart)] motion-reduce:transition-none\"\n style={{ width: `${pct}%` }}\n />\n </div>\n )}\n </div>\n );\n },\n);\nTimeLoggerHeader.displayName = \"TimeLoggerHeader\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Context row — client / engagement (left) + assignee (right)\n * Two semantic targets: the left selector is a button; the right `member`\n * slot is the consumer's own control (Avatar + menu, TeamMemberSelect, …),\n * so the two intents never nest inside one click target.\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerContextRowProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"title\"\n> {\n client: React.ReactNode;\n engagement?: React.ReactNode;\n /** Leading slot, e.g. an `<Avatar variant=\"branded\" />`. */\n avatar?: React.ReactNode;\n onClientSelect?: () => void;\n /** Right-aligned slot — an assignee avatar + menu, or a `<TeamMemberSelect>`. */\n member?: React.ReactNode;\n}\n\nexport const TimeLoggerContextRow = forwardRef<HTMLDivElement, TimeLoggerContextRowProps>(\n function TimeLoggerContextRow(\n { client, engagement, avatar, onClientSelect, member, className, ...props },\n ref,\n ) {\n const text = (\n <span className=\"min-w-0\">\n <span className=\"text-fg block truncate text-sm font-medium\">{client}</span>\n {engagement && <span className=\"text-fg-3 block truncate text-xs\">{engagement}</span>}\n </span>\n );\n\n return (\n <div\n ref={ref}\n className={cn(\"border-rule-soft flex items-center gap-2.5 border-t px-4 py-2.5\", className)}\n {...props}\n >\n {onClientSelect ? (\n <button\n type=\"button\"\n onClick={onClientSelect}\n className=\"rounded-btn hover:bg-surface-2 focus-visible:bg-surface-2 -m-1 flex min-w-0 flex-1 items-center gap-2.5 p-1 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none\"\n >\n {avatar}\n {text}\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-center gap-2.5\">\n {avatar}\n {text}\n </div>\n )}\n {member && <div className=\"shrink-0\">{member}</div>}\n </div>\n );\n },\n);\nTimeLoggerContextRow.displayName = \"TimeLoggerContextRow\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Timer — manual-entry input that flips to a live read-only clock once running\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerTimerProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n phase: TimeLoggerPhase;\n elapsedMs: number;\n /** Manual-entry text, shown only while idle. Controlled. */\n value?: string;\n onValueChange?: (value: string) => void;\n placeholder?: string;\n onStart?: () => void;\n onPause?: () => void;\n onResume?: () => void;\n onStop?: () => void;\n}\n\nexport const TimeLoggerTimer = forwardRef<HTMLDivElement, TimeLoggerTimerProps>(\n function TimeLoggerTimer(\n {\n phase,\n elapsedMs,\n value,\n onValueChange,\n placeholder = \"Enter time (ex: 3h 20m) or start timer\",\n onStart,\n onPause,\n onResume,\n onStop,\n className,\n ...props\n },\n ref,\n ) {\n const showClock = phase !== \"idle\";\n const canStop = phase === \"running\" || phase === \"paused\";\n\n return (\n <div\n ref={ref}\n className={cn(\"border-rule-soft flex items-center gap-2 border-t px-4 py-2.5\", className)}\n {...props}\n >\n <input\n className={cn(\n \"text-fg placeholder:text-fg-4 min-w-0 flex-1 border-0 bg-transparent outline-none\",\n showClock\n ? \"font-mono text-[22px] font-medium tracking-tight tabular-nums\"\n : \"text-[15px]\",\n )}\n value={showClock ? formatClock(elapsedMs) : (value ?? \"\")}\n onChange={(event) => onValueChange?.(event.target.value)}\n placeholder={placeholder}\n readOnly={showClock}\n aria-label=\"Tracked time\"\n />\n\n {/* Pause / Resume — left of the primary control */}\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon\"\n className=\"rounded-full\"\n aria-label={phase === \"paused\" ? \"Resume timer\" : \"Pause timer\"}\n disabled={phase === \"idle\" || phase === \"stopped\"}\n onClick={phase === \"paused\" ? onResume : onPause}\n >\n {phase === \"paused\" ? <PlayIcon /> : <PauseIcon />}\n </Button>\n\n {/* Start / Stop */}\n {canStop ? (\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"icon\"\n className=\"rounded-full\"\n aria-label=\"Stop timer\"\n onClick={onStop}\n >\n <StopIcon />\n </Button>\n ) : (\n <Button\n type=\"button\"\n variant=\"primary\"\n size=\"icon\"\n className=\"rounded-full\"\n aria-label=\"Start timer\"\n onClick={onStart}\n >\n <PlayIcon />\n </Button>\n )}\n </div>\n );\n },\n);\nTimeLoggerTimer.displayName = \"TimeLoggerTimer\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Field — generic icon + value row (task, date/range, or any custom field).\n * Renders as a button when `onSelect` is given, otherwise a static div.\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerFieldProps extends Omit<React.HTMLAttributes<HTMLElement>, \"onSelect\"> {\n icon?: React.ReactNode;\n /** Small caption above the value. */\n label?: React.ReactNode;\n onSelect?: () => void;\n /** Trailing node; defaults to a chevron when interactive. Pass `null` to suppress. */\n trailing?: React.ReactNode;\n /** Render the value in the muted placeholder colour. */\n muted?: boolean;\n}\n\nexport const TimeLoggerField = forwardRef<HTMLElement, TimeLoggerFieldProps>(\n function TimeLoggerField(\n { icon, label, onSelect, trailing, muted, className, children, ...props },\n ref,\n ) {\n const interactive = Boolean(onSelect);\n const inner = (\n <>\n {icon && (\n <span\n className=\"text-fg-4 flex size-[17px] shrink-0 items-center justify-center [&_svg]:size-[17px]\"\n aria-hidden=\"true\"\n >\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n {label && <span className=\"text-fg-3 block text-[11px] leading-tight\">{label}</span>}\n <span className={cn(\"block truncate\", muted ? \"text-fg-3\" : \"text-fg-2\")}>\n {children}\n </span>\n </span>\n {trailing !== undefined ? (\n trailing\n ) : interactive ? (\n <ChevronRightIcon className=\"text-fg-4 size-4 shrink-0\" />\n ) : null}\n </>\n );\n\n const classes = cn(\n \"border-rule-soft flex w-full items-center gap-3 border-t px-4 py-2.5 text-left\",\n interactive &&\n \"hover:bg-surface-2 focus-visible:bg-surface-2 cursor-pointer transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none motion-reduce:transition-none\",\n className,\n );\n\n if (interactive) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={onSelect}\n className={classes}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {inner}\n </button>\n );\n }\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={classes} {...props}>\n {inner}\n </div>\n );\n },\n);\nTimeLoggerField.displayName = \"TimeLoggerField\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Notes — plain-text entry row\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerNotesProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"onChange\"\n> {\n value?: string;\n onValueChange?: (value: string) => void;\n icon?: React.ReactNode;\n}\n\nexport const TimeLoggerNotes = forwardRef<HTMLInputElement, TimeLoggerNotesProps>(\n function TimeLoggerNotes(\n { value, onValueChange, icon, placeholder = \"Add notes\", className, ...props },\n ref,\n ) {\n return (\n <div className=\"border-rule-soft flex items-center gap-3 border-t px-4 py-2.5\">\n <span\n className=\"text-fg-4 flex size-[17px] shrink-0 items-center justify-center [&_svg]:size-[17px]\"\n aria-hidden=\"true\"\n >\n {icon ?? <FileTextIcon />}\n </span>\n <input\n ref={ref}\n type=\"text\"\n value={value ?? \"\"}\n onChange={(event) => onValueChange?.(event.target.value)}\n placeholder={placeholder}\n aria-label=\"Notes\"\n className={cn(\n \"text-fg placeholder:text-fg-4 min-w-0 flex-1 border-0 bg-transparent text-sm outline-none\",\n className,\n )}\n {...props}\n />\n </div>\n );\n },\n);\nTimeLoggerNotes.displayName = \"TimeLoggerNotes\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Billable — toggle + pricing-tier settings pop-view + amount readout\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerTier {\n id: string;\n name: React.ReactNode;\n /** Hourly rate in the panel currency; shown in the tier menu's right column. */\n rate: number;\n}\n\nexport interface TimeLoggerBillableProps extends React.HTMLAttributes<HTMLDivElement> {\n billable: boolean;\n onBillableChange?: (billable: boolean) => void;\n /** Defaults to \"Billable\" / \"Non-billable\" derived from `billable`. */\n label?: React.ReactNode;\n /** Pricing tiers shown in the settings pop-view. Omit to hide the gear. */\n tiers?: TimeLoggerTier[];\n tierId?: string;\n onTierChange?: (id: string) => void;\n /** ISO currency for tier-rate formatting. Default `\"USD\"`. */\n currency?: string;\n /** Computed amount readout (rate × time). Pass a formatted node, or omit. */\n amount?: React.ReactNode;\n}\n\nexport const TimeLoggerBillable = forwardRef<HTMLDivElement, TimeLoggerBillableProps>(\n function TimeLoggerBillable(\n {\n billable,\n onBillableChange,\n label,\n tiers,\n tierId,\n onTierChange,\n currency = \"USD\",\n amount,\n className,\n ...props\n },\n ref,\n ) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 items-center gap-2.5\", className)} {...props}>\n <Switch\n size=\"sm\"\n checked={billable}\n onCheckedChange={onBillableChange}\n aria-label=\"Billable\"\n />\n <span className=\"text-fg-3 text-[13px] whitespace-nowrap\">\n {label ?? (billable ? \"Billable\" : \"Non-billable\")}\n </span>\n\n {tiers && tiers.length > 0 && (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Billing settings\"\n className=\"text-fg-4 hover:text-fg-2 hover:bg-bg-2 rounded-btn flex size-6 items-center justify-center transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none [&_svg]:size-4\"\n >\n <SettingsIcon />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" side=\"top\" className=\"w-56 p-1.5\">\n <p className=\"text-fg-3 px-2 pt-1 pb-1.5 font-mono text-[10px] tracking-wider uppercase\">\n Pricing tier · {currency}\n </p>\n {tiers.map((tier) => {\n const selected = tier.id === tierId;\n return (\n <PopoverClose asChild key={tier.id}>\n <button\n type=\"button\"\n onClick={() => onTierChange?.(tier.id)}\n className=\"hover:bg-surface-2 flex w-full items-center gap-2 rounded-md px-2 py-2 text-left transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)] outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)] motion-reduce:transition-none\"\n >\n <span\n className={cn(\n \"flex-1 truncate text-[13px]\",\n selected ? \"text-pro-fg font-medium\" : \"text-fg\",\n )}\n >\n {tier.name}\n </span>\n <span className=\"text-fg-3 font-mono text-[12.5px] tabular-nums\">\n {formatCurrency(tier.rate, currency)}/hr\n </span>\n <CheckIcon\n className={cn(\n \"text-pro-fg size-4 shrink-0\",\n selected ? \"opacity-100\" : \"opacity-0\",\n )}\n />\n </button>\n </PopoverClose>\n );\n })}\n </PopoverContent>\n </Popover>\n )}\n\n {amount != null && (\n <span className=\"text-fg-2 font-mono text-[12.5px] font-medium tabular-nums\">\n {amount}\n </span>\n )}\n </div>\n );\n },\n);\nTimeLoggerBillable.displayName = \"TimeLoggerBillable\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Actions — bottom bar; consumer drops the billable cluster + Save/Cancel here\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport type TimeLoggerActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const TimeLoggerActions = forwardRef<HTMLDivElement, TimeLoggerActionsProps>(\n function TimeLoggerActions({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n \"border-rule bg-surface-2 flex items-center gap-2 border-t px-4 py-2.5\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nTimeLoggerActions.displayName = \"TimeLoggerActions\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Entry list + entry rows\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport interface TimeLoggerEntryListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Day group caption, e.g. \"Fri, May 29\". */\n dayLabel?: React.ReactNode;\n /** Right-aligned day subtotal, e.g. \"2h 10m\". */\n total?: React.ReactNode;\n}\n\nexport const TimeLoggerEntryList = forwardRef<HTMLDivElement, TimeLoggerEntryListProps>(\n function TimeLoggerEntryList({ dayLabel, total, className, children, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"border-bg-2 border-t-[7px]\", className)} {...props}>\n {(dayLabel || total) && (\n <div className=\"flex items-center justify-between px-4 pt-2.5 pb-1 text-xs\">\n {dayLabel && <span className=\"text-fg-3 font-medium\">{dayLabel}</span>}\n {total && <span className=\"text-fg-2 font-mono tabular-nums\">{total}</span>}\n </div>\n )}\n {children}\n </div>\n );\n },\n);\nTimeLoggerEntryList.displayName = \"TimeLoggerEntryList\";\n\nexport interface TimeLoggerEntryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: React.ReactNode;\n /** Secondary line — time range, billable amount, etc. */\n meta?: React.ReactNode;\n duration: React.ReactNode;\n onResume?: () => void;\n onDelete?: () => void;\n}\n\nexport const TimeLoggerEntry = forwardRef<HTMLDivElement, TimeLoggerEntryProps>(\n function TimeLoggerEntry(\n { title, meta, duration, onResume, onDelete, className, ...props },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule-soft flex items-center gap-3 border-t px-4 py-2\", className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"border-pro-fg size-[15px] shrink-0 rounded-full border-[1.5px] shadow-[inset_0_0_0_3px_var(--color-pro-fg)]\"\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-fg truncate text-[13px]\">{title}</p>\n {meta && <p className=\"text-fg-3 truncate text-[11.5px]\">{meta}</p>}\n </div>\n <span className=\"text-fg-2 font-mono text-[13px] tabular-nums\">{duration}</span>\n {onResume && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"text-fg-3 hover:text-pro-fg hover:bg-pro-bg rounded-full\"\n aria-label=\"Resume entry\"\n onClick={onResume}\n >\n <PlayIcon />\n </Button>\n )}\n {onDelete && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"text-fg-3 hover:text-danger-fg hover:bg-danger-bg rounded-full\"\n aria-label=\"Delete entry\"\n onClick={onDelete}\n >\n <Trash2Icon />\n </Button>\n )}\n </div>\n );\n },\n);\nTimeLoggerEntry.displayName = \"TimeLoggerEntry\";\n\n/* ────────────────────────────────────────────────────────────────────────\n * Footer — equal-width nav row (My Timesheet / Dashboard, etc.)\n * ──────────────────────────────────────────────────────────────────────── */\n\nexport type TimeLoggerFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const TimeLoggerFooter = forwardRef<HTMLDivElement, TimeLoggerFooterProps>(\n function TimeLoggerFooter({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"border-rule flex gap-2 border-t px-4 py-2.5 [&>*]:flex-1\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nTimeLoggerFooter.displayName = \"TimeLoggerFooter\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Toolbar — horizontal row of controls used above lists, dashboards, etc.\n * FilterChip is a simpler atom than `MultiFilterPill` — single filter,\n * not multi-select.\n */\n\nexport type ToolbarProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(\n { className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n});\nToolbar.displayName = \"Toolbar\";\n\nexport const filterChipVariants = cva(\n cn(\n \"inline-flex items-center gap-1.5 rounded-pill font-medium border\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"motion-reduce:transition-none\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-bg-disabled disabled:text-fg-disabled disabled:border-rule\",\n ),\n {\n variants: {\n active: {\n true: \"bg-pro-bg text-pro-fg border-pro-fg/30 hover:bg-pro-bg-hover\",\n false: \"bg-bg-2 text-fg-2 border-rule hover:bg-bg-3\",\n },\n // Control text scale shared with Button / MultiFilterPill: sm = 13px,\n // md = 14px, lg = 16px. Defaults to the dense `sm` tier (toolbar control).\n size: {\n sm: \"h-8 px-3 text-[13px]\",\n md: \"h-9 px-3.5 text-sm\",\n lg: \"h-10 px-4 text-base\",\n },\n },\n defaultVariants: {\n active: false,\n size: \"sm\",\n },\n },\n);\n\nexport interface FilterChipProps\n extends\n Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n keyof VariantProps<typeof filterChipVariants>\n >,\n VariantProps<typeof filterChipVariants> {\n count?: number;\n}\n\nexport const FilterChip = forwardRef<HTMLButtonElement, FilterChipProps>(function FilterChip(\n { active = false, size, count, className, children, type, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type ?? \"button\"}\n aria-pressed={active ?? false}\n className={cn(filterChipVariants({ active, size }), className)}\n {...props}\n >\n {children}\n {typeof count === \"number\" && (\n <span className=\"font-mono text-[10.5px] tabular-nums\">{count}</span>\n )}\n </button>\n );\n});\nFilterChip.displayName = \"FilterChip\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\n\nimport { cn } from \"../lib/cn\";\n\nimport { Button } from \"../primitives/button\";\nimport { XIcon } from \"../primitives/icons\";\n\nexport type BulkActionBarVariant = \"sidebar-anchored\" | \"page-floating\" | \"table-inline\";\ntype BulkActionTone = \"surface\" | \"inverse\";\n\ninterface BulkActionBarContextValue {\n tone: BulkActionTone;\n}\n\nconst BulkActionBarContext = React.createContext<BulkActionBarContextValue>({ tone: \"surface\" });\n\nexport interface BulkActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: BulkActionBarVariant;\n selectedCount: number;\n /** Overrides the default \"{N} selected\" label. */\n label?: string;\n /** Action controls supplied by the consumer. */\n children: React.ReactNode;\n onClear: () => void;\n clearLabel?: string;\n clearDisabled?: boolean;\n /** Optional content rendered beneath the bar, useful for inline warnings. */\n footer?: React.ReactNode;\n}\n\nexport interface BulkActionBarActionProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean;\n destructive?: boolean;\n}\n\nfunction actionClasses(tone: BulkActionTone, destructive: boolean | undefined) {\n const base = cn(\n \"inline-flex h-8 items-center gap-1.5 rounded-btn px-3 text-[13px] font-medium\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:opacity-45\",\n \"motion-reduce:transition-none\",\n \"[&_svg]:size-4 [&_svg]:shrink-0\",\n );\n\n if (tone === \"inverse\") {\n return cn(\n base,\n \"data-[state=open]:bg-selection-floating-active-bg\",\n destructive\n ? \"bg-danger-fg text-fg-on-danger hover:bg-danger-fg-hover active:bg-danger-fg-active\"\n : \"text-selection-floating-muted-fg hover:bg-selection-floating-hover-bg hover:text-selection-floating-fg\",\n );\n }\n\n return cn(\n base,\n \"data-[state=open]:bg-control-active-bg\",\n destructive\n ? \"text-control-destructive-fg hover:bg-control-destructive-hover-bg\"\n : \"text-control-fg hover:bg-control-hover-bg hover:text-control-hover-fg\",\n );\n}\n\nexport const BulkActionBarAction = React.forwardRef<\n HTMLButtonElement,\n BulkActionBarActionProps\n>(function BulkActionBarAction(\n { asChild = false, destructive, className, type, ...props },\n ref,\n) {\n const { tone } = React.use(BulkActionBarContext);\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : (type ?? \"button\")}\n className={cn(actionClasses(tone, destructive), className)}\n {...props}\n />\n );\n});\nBulkActionBarAction.displayName = \"BulkActionBarAction\";\n\nexport function BulkActionBarSeparator({ className }: { className?: string }) {\n const { tone } = React.use(BulkActionBarContext);\n\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"h-4 w-px shrink-0\",\n tone === \"inverse\" ? \"bg-selection-floating-rule\" : \"bg-control-border\",\n className,\n )}\n />\n );\n}\n\nfunction BulkActionBarClear({\n variant,\n clearLabel,\n clearDisabled,\n onClear,\n}: Pick<BulkActionBarProps, \"clearLabel\" | \"clearDisabled\" | \"onClear\"> & {\n variant: BulkActionBarVariant;\n}) {\n if (variant === \"page-floating\") {\n return (\n <button\n type=\"button\"\n onClick={onClear}\n disabled={clearDisabled}\n className={cn(\n \"text-selection-floating-muted-fg ml-1 inline-flex size-7 items-center justify-center rounded-icon\",\n \"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out-quart)]\",\n \"hover:bg-selection-floating-hover-bg hover:text-selection-floating-fg\",\n \"focus-visible:outline-none focus-visible:[box-shadow:var(--shadow-focus-ring)]\",\n \"disabled:pointer-events-none disabled:opacity-45 motion-reduce:transition-none\",\n )}\n aria-label={clearLabel}\n >\n <XIcon className=\"size-4\" aria-hidden=\"true\" />\n </button>\n );\n }\n\n return (\n <Button variant=\"ghost\" size=\"sm\" onClick={onClear} disabled={clearDisabled}>\n {clearLabel}\n </Button>\n );\n}\n\nexport function BulkActionBar({\n variant = \"table-inline\",\n selectedCount,\n label,\n children,\n onClear,\n clearLabel = \"Clear selection\",\n clearDisabled,\n footer,\n className,\n ...props\n}: BulkActionBarProps) {\n if (selectedCount === 0) return null;\n\n const labelText = label ?? `${selectedCount} selected`;\n const tone: BulkActionTone = variant === \"page-floating\" ? \"inverse\" : \"surface\";\n const content = (\n <BulkActionBarContext value={{ tone }}>\n <span className=\"text-sm font-medium tabular-nums\">{labelText}</span>\n <BulkActionBarSeparator />\n <div className=\"flex flex-wrap items-center gap-1\">{children}</div>\n <div className=\"min-w-2 flex-1\" />\n <BulkActionBarClear\n variant={variant}\n clearLabel={clearLabel}\n clearDisabled={clearDisabled}\n onClear={onClear}\n />\n </BulkActionBarContext>\n );\n\n if (variant === \"sidebar-anchored\") {\n return (\n <div\n className={cn(\n \"fixed right-6 bottom-6 left-[calc(var(--shell-sidebar-w)+1.5rem)] z-[var(--z-sticky)]\",\n className,\n )}\n {...props}\n >\n <div className=\"border-rule bg-surface text-fg flex items-center gap-3 rounded-card border px-6 py-3 shadow-card\">\n {content}\n </div>\n {footer}\n </div>\n );\n }\n\n if (variant === \"page-floating\") {\n return (\n <div\n className={cn(\n \"fixed bottom-4 left-1/2 z-[var(--z-sticky)] -translate-x-1/2\",\n className,\n )}\n {...props}\n >\n <div className=\"bg-selection-floating-bg text-selection-floating-fg flex items-center gap-2 rounded-card px-3.5 py-1.5 shadow-pop\">\n {content}\n </div>\n {footer}\n </div>\n );\n }\n\n return (\n <div className={cn(\"sticky bottom-4 z-[var(--z-sticky)] mt-3\", className)} {...props}>\n <div className=\"border-rule bg-surface mx-auto flex max-w-3xl flex-wrap items-center gap-3 rounded-full border px-4 py-2 shadow-card\">\n {content}\n </div>\n {footer}\n </div>\n );\n}\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { Button, type ButtonProps } from \"../primitives/button\";\nimport { LinkButton } from \"../primitives/link-button\";\nimport { cn } from \"../lib/cn\";\n\nimport { ArrowRightIcon } from \"../primitives/icons\";\n/**\n * Intent-named action wrappers (Phase 4).\n *\n * Thin wrappers over Button / LinkButton. Bake in the right variant + size\n * so the correct call is shorter than the raw call.\n *\n * Note: `Button` has no `variant=\"icon\"`. `IconAction` uses `variant=\"ghost\"`\n * + `size=\"icon\"` (the existing icon size token).\n */\n\ntype LinkButtonProps = React.ComponentProps<typeof LinkButton>;\n\nexport interface PrimaryActionProps extends Omit<ButtonProps, \"variant\" | \"size\"> {\n arrow?: boolean;\n}\n\nexport const PrimaryAction = forwardRef<HTMLButtonElement, PrimaryActionProps>(\n function PrimaryAction({ arrow, iconRight, children, className, ...props }, ref) {\n return (\n <Button\n ref={ref}\n variant=\"accent\"\n size=\"sm\"\n iconRight={arrow ? <ArrowRightIcon className=\"size-4\" /> : iconRight}\n className={cn(className)}\n {...props}\n >\n {children}\n </Button>\n );\n },\n);\nPrimaryAction.displayName = \"PrimaryAction\";\n\nexport type SecondaryActionProps = Omit<ButtonProps, \"variant\" | \"size\">;\n\nexport const SecondaryAction = forwardRef<HTMLButtonElement, SecondaryActionProps>(\n function SecondaryAction({ className, children, ...props }, ref) {\n return (\n <Button ref={ref} variant=\"ghost\" size=\"sm\" className={cn(className)} {...props}>\n {children}\n </Button>\n );\n },\n);\nSecondaryAction.displayName = \"SecondaryAction\";\n\nexport interface DangerActionProps extends Omit<ButtonProps, \"variant\" | \"size\" | \"onClick\"> {\n /** Required — explicit name forces the consumer to acknowledge intent. */\n onConfirm: () => void;\n}\n\nexport const DangerAction = forwardRef<HTMLButtonElement, DangerActionProps>(function DangerAction(\n { onConfirm, className, children, ...props },\n ref,\n) {\n return (\n <Button\n ref={ref}\n variant=\"destructive\"\n size=\"sm\"\n onClick={onConfirm}\n className={cn(className)}\n {...props}\n >\n {children}\n </Button>\n );\n});\nDangerAction.displayName = \"DangerAction\";\n\nexport interface IconActionProps extends Omit<ButtonProps, \"variant\" | \"size\"> {\n /** Required — icon-only buttons must announce themselves to assistive tech. */\n \"aria-label\": string;\n}\n\nexport const IconAction = forwardRef<HTMLButtonElement, IconActionProps>(function IconAction(\n { className, children, ...props },\n ref,\n) {\n return (\n <Button ref={ref} variant=\"ghost\" size=\"icon\" className={cn(className)} {...props}>\n {children}\n </Button>\n );\n});\nIconAction.displayName = \"IconAction\";\n\nexport interface LinkActionProps extends Omit<LinkButtonProps, \"variant\" | \"size\"> {\n arrow?: boolean;\n}\n\nexport const LinkAction = forwardRef<HTMLAnchorElement, LinkActionProps>(function LinkAction(\n { arrow, iconRight, children, className, ...props },\n ref,\n) {\n return (\n <LinkButton\n ref={ref}\n variant=\"ghost\"\n size=\"sm\"\n iconRight={arrow ? <ArrowRightIcon className=\"size-4\" /> : iconRight}\n className={cn(className)}\n {...props}\n >\n {children}\n </LinkButton>\n );\n});\nLinkAction.displayName = \"LinkAction\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { cn } from \"../lib/cn\";\n\n/**\n * Intent-named atom wrappers (Phase 4).\n *\n * Thin <span>/<div>/<kbd> wrappers that bake in the right typography +\n * color tokens. Compose with the addressable utility classes in tokens.css\n * (`.tabular`, `.font-spec`, `.eyebrow`, `.eyebrow-num`).\n */\n\nexport type NumericProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const Numeric = forwardRef<HTMLSpanElement, NumericProps>(function Numeric(\n { className, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(\"tabular font-mono\", className)} {...props}>\n {children}\n </span>\n );\n});\nNumeric.displayName = \"Numeric\";\n\nexport type MutedSpecProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const MutedSpec = forwardRef<HTMLSpanElement, MutedSpecProps>(function MutedSpec(\n { className, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(\"font-spec text-fg-3\", className)} {...props}>\n {children}\n </span>\n );\n});\nMutedSpec.displayName = \"MutedSpec\";\n\nexport interface EyebrowProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, switches to spec font + Pro purple (the `01 — Today` pattern). */\n numeric?: boolean;\n}\n\nexport const Eyebrow = forwardRef<HTMLDivElement, EyebrowProps>(function Eyebrow(\n { numeric, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn(numeric ? \"eyebrow-num\" : \"eyebrow\", className)} {...props}>\n {children}\n </div>\n );\n});\nEyebrow.displayName = \"Eyebrow\";\n\nexport type KbdHintProps = React.HTMLAttributes<HTMLElement>;\n\nexport const KbdHint = forwardRef<HTMLElement, KbdHintProps>(function KbdHint(\n { className, children, ...props },\n ref,\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n \"rounded-icon inline-flex h-5 min-w-5 items-center justify-center px-1.5\",\n \"border-rule bg-bg-2 text-fg-3 border font-mono text-[10.5px]\",\n className,\n )}\n {...props}\n >\n {children}\n </kbd>\n );\n});\nKbdHint.displayName = \"KbdHint\";\n"]}
|