@dynamic-labs-sdk/droplet 1.14.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/components/ui/accordion/accordion.stories.d.ts +19 -0
  2. package/dist/components/ui/accordion/accordion.stories.d.ts.map +1 -0
  3. package/dist/components/ui/alert/alert.d.ts +41 -0
  4. package/dist/components/ui/alert/alert.d.ts.map +1 -0
  5. package/dist/components/ui/alert/alert.stories.d.ts +26 -0
  6. package/dist/components/ui/alert/alert.stories.d.ts.map +1 -0
  7. package/dist/components/ui/alert/index.d.ts +3 -0
  8. package/dist/components/ui/alert/index.d.ts.map +1 -0
  9. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +4 -1
  10. package/dist/components/ui/alert-dialog/alert-dialog.d.ts.map +1 -1
  11. package/dist/components/ui/badge/badge.d.ts +11 -1
  12. package/dist/components/ui/badge/badge.d.ts.map +1 -1
  13. package/dist/components/ui/badge/badge.stories.d.ts +3 -3
  14. package/dist/components/ui/badge/badge.stories.d.ts.map +1 -1
  15. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +73 -0
  16. package/dist/components/ui/breadcrumb/breadcrumb.d.ts.map +1 -0
  17. package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts +19 -0
  18. package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts.map +1 -0
  19. package/dist/components/ui/breadcrumb/index.d.ts +3 -0
  20. package/dist/components/ui/breadcrumb/index.d.ts.map +1 -0
  21. package/dist/components/ui/button/button.d.ts +7 -3
  22. package/dist/components/ui/button/button.d.ts.map +1 -1
  23. package/dist/components/ui/button/button.stories.d.ts +6 -3
  24. package/dist/components/ui/button/button.stories.d.ts.map +1 -1
  25. package/dist/components/ui/card/card.d.ts +14 -3
  26. package/dist/components/ui/card/card.d.ts.map +1 -1
  27. package/dist/components/ui/card/card.stories.d.ts +8 -2
  28. package/dist/components/ui/card/card.stories.d.ts.map +1 -1
  29. package/dist/components/ui/check-icon/check-icon.stories.d.ts +26 -0
  30. package/dist/components/ui/check-icon/check-icon.stories.d.ts.map +1 -0
  31. package/dist/components/ui/checkbox/checkbox.stories.d.ts.map +1 -1
  32. package/dist/components/ui/collapsible/collapsible.d.ts +1 -1
  33. package/dist/components/ui/collapsible/collapsible.d.ts.map +1 -1
  34. package/dist/components/ui/collapsible/collapsible.stories.d.ts +1 -0
  35. package/dist/components/ui/collapsible/collapsible.stories.d.ts.map +1 -1
  36. package/dist/components/ui/combobox/combobox.d.ts +49 -0
  37. package/dist/components/ui/combobox/combobox.d.ts.map +1 -0
  38. package/dist/components/ui/combobox/combobox.stories.d.ts +24 -0
  39. package/dist/components/ui/combobox/combobox.stories.d.ts.map +1 -0
  40. package/dist/components/ui/combobox/index.d.ts +3 -0
  41. package/dist/components/ui/combobox/index.d.ts.map +1 -0
  42. package/dist/components/ui/command/command.d.ts.map +1 -1
  43. package/dist/components/ui/command/command.stories.d.ts +31 -0
  44. package/dist/components/ui/command/command.stories.d.ts.map +1 -0
  45. package/dist/components/ui/dialog/dialog.d.ts +5 -1
  46. package/dist/components/ui/dialog/dialog.d.ts.map +1 -1
  47. package/dist/components/ui/dialog/dialog.stories.d.ts.map +1 -1
  48. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  49. package/dist/components/ui/field/field.d.ts +60 -0
  50. package/dist/components/ui/field/field.d.ts.map +1 -0
  51. package/dist/components/ui/field/field.stories.d.ts +40 -0
  52. package/dist/components/ui/field/field.stories.d.ts.map +1 -0
  53. package/dist/components/ui/field/index.d.ts +3 -0
  54. package/dist/components/ui/field/index.d.ts.map +1 -0
  55. package/dist/components/ui/flush-card-detach/flush-card-detach.stories.d.ts.map +1 -1
  56. package/dist/components/ui/flush-card-stack/flush-card-stack.d.ts +57 -0
  57. package/dist/components/ui/flush-card-stack/flush-card-stack.d.ts.map +1 -0
  58. package/dist/components/ui/flush-card-stack/flush-card-stack.stories.d.ts +24 -0
  59. package/dist/components/ui/flush-card-stack/flush-card-stack.stories.d.ts.map +1 -0
  60. package/dist/components/ui/icon/icon.stories.d.ts +510 -0
  61. package/dist/components/ui/icon/icon.stories.d.ts.map +1 -0
  62. package/dist/components/ui/input/input.d.ts.map +1 -1
  63. package/dist/components/ui/kbd/kbd.d.ts +1 -1
  64. package/dist/components/ui/kbd/kbd.stories.d.ts +15 -0
  65. package/dist/components/ui/kbd/kbd.stories.d.ts.map +1 -0
  66. package/dist/components/ui/pagination/index.d.ts +3 -0
  67. package/dist/components/ui/pagination/index.d.ts.map +1 -0
  68. package/dist/components/ui/pagination/pagination.d.ts +82 -0
  69. package/dist/components/ui/pagination/pagination.d.ts.map +1 -0
  70. package/dist/components/ui/pagination/pagination.stories.d.ts +16 -0
  71. package/dist/components/ui/pagination/pagination.stories.d.ts.map +1 -0
  72. package/dist/components/ui/popover/popover.d.ts +1 -1
  73. package/dist/components/ui/popover/popover.d.ts.map +1 -1
  74. package/dist/components/ui/progress/progress.d.ts +7 -4
  75. package/dist/components/ui/progress/progress.d.ts.map +1 -1
  76. package/dist/components/ui/progress/progress.stories.d.ts +4 -1
  77. package/dist/components/ui/progress/progress.stories.d.ts.map +1 -1
  78. package/dist/components/ui/radio-group/index.d.ts +1 -1
  79. package/dist/components/ui/radio-group/index.d.ts.map +1 -1
  80. package/dist/components/ui/radio-group/radio-group.d.ts +45 -2
  81. package/dist/components/ui/radio-group/radio-group.d.ts.map +1 -1
  82. package/dist/components/ui/radio-group/radio-group.stories.d.ts +19 -0
  83. package/dist/components/ui/radio-group/radio-group.stories.d.ts.map +1 -1
  84. package/dist/components/ui/scroll-area/scroll-area.stories.d.ts +15 -0
  85. package/dist/components/ui/scroll-area/scroll-area.stories.d.ts.map +1 -0
  86. package/dist/components/ui/search-input/search-input.stories.d.ts +27 -0
  87. package/dist/components/ui/search-input/search-input.stories.d.ts.map +1 -0
  88. package/dist/components/ui/select/select.d.ts.map +1 -1
  89. package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
  90. package/dist/components/ui/skeleton/skeleton.d.ts.map +1 -1
  91. package/dist/components/ui/skeleton/skeleton.stories.d.ts +1 -1
  92. package/dist/components/ui/slider/index.d.ts +3 -0
  93. package/dist/components/ui/slider/index.d.ts.map +1 -0
  94. package/dist/components/ui/slider/slider.d.ts +28 -0
  95. package/dist/components/ui/slider/slider.d.ts.map +1 -0
  96. package/dist/components/ui/slider/slider.stories.d.ts +40 -0
  97. package/dist/components/ui/slider/slider.stories.d.ts.map +1 -0
  98. package/dist/components/ui/sonner/sonner.stories.d.ts +10 -0
  99. package/dist/components/ui/sonner/sonner.stories.d.ts.map +1 -0
  100. package/dist/components/ui/spinner/spinner.d.ts +13 -2
  101. package/dist/components/ui/spinner/spinner.d.ts.map +1 -1
  102. package/dist/components/ui/spinner/spinner.stories.d.ts +1 -3
  103. package/dist/components/ui/spinner/spinner.stories.d.ts.map +1 -1
  104. package/dist/components/ui/stepper/index.d.ts +3 -0
  105. package/dist/components/ui/stepper/index.d.ts.map +1 -0
  106. package/dist/components/ui/stepper/stepper.d.ts +36 -0
  107. package/dist/components/ui/stepper/stepper.d.ts.map +1 -0
  108. package/dist/components/ui/stepper/stepper.stories.d.ts +21 -0
  109. package/dist/components/ui/stepper/stepper.stories.d.ts.map +1 -0
  110. package/dist/components/ui/switch/switch.d.ts.map +1 -1
  111. package/dist/components/ui/table/table.d.ts +1 -1
  112. package/dist/components/ui/table/table.d.ts.map +1 -1
  113. package/dist/components/ui/toggle-group/index.d.ts +3 -0
  114. package/dist/components/ui/toggle-group/index.d.ts.map +1 -0
  115. package/dist/components/ui/toggle-group/toggle-group.d.ts +62 -0
  116. package/dist/components/ui/toggle-group/toggle-group.d.ts.map +1 -0
  117. package/dist/components/ui/toggle-group/toggle-group.stories.d.ts +20 -0
  118. package/dist/components/ui/toggle-group/toggle-group.stories.d.ts.map +1 -0
  119. package/dist/components/ui/tray/renderTrayLayout.d.ts +37 -0
  120. package/dist/components/ui/tray/renderTrayLayout.d.ts.map +1 -0
  121. package/dist/components/ui/tray/resolveTrayLayout.d.ts +35 -0
  122. package/dist/components/ui/tray/resolveTrayLayout.d.ts.map +1 -0
  123. package/dist/components/ui/well/well-reveal.stories.d.ts +27 -0
  124. package/dist/components/ui/well/well-reveal.stories.d.ts.map +1 -0
  125. package/dist/components/ui/well/well.d.ts +2 -2
  126. package/dist/components/ui/well/well.d.ts.map +1 -1
  127. package/dist/components/ui/well/well.stories.d.ts +2 -2
  128. package/dist/index.cjs +1320 -306
  129. package/dist/index.cjs.map +1 -1
  130. package/dist/index.d.ts +18 -2
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.esm.js +1292 -312
  133. package/dist/index.esm.js.map +1 -1
  134. package/dist/migration.cjs +1 -1
  135. package/dist/migration.esm.js +1 -1
  136. package/dist/{toggle-row-B7XCm0Z-.cjs → toggle-row-BafR1dY7.cjs} +93 -12
  137. package/dist/toggle-row-BafR1dY7.cjs.map +1 -0
  138. package/dist/{toggle-row-C-B8HtY0.esm.js → toggle-row-h0h1m_hc.esm.js} +88 -13
  139. package/dist/toggle-row-h0h1m_hc.esm.js.map +1 -0
  140. package/package.json +1 -1
  141. package/src/styles/globals.css +68 -23
  142. package/dist/toggle-row-B7XCm0Z-.cjs.map +0 -1
  143. package/dist/toggle-row-C-B8HtY0.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["spring","AnimatePresence","motion","HugeiconsIcon","InformationCircleIcon","CheckmarkCircle02Icon","Button","AccordionPrimitive","cn","HugeiconsIcon","ArrowRight01Icon","Root","Trigger","Portal","Overlay","cn","Content","Title","Description","Button","Action","Cancel","AvatarPrimitive","cn","Slot","cn","cn","CheckboxPrimitive","cn","CollapsiblePrimitive","cn","Root","Trigger","Portal","Close","Overlay","cn","Content","HugeiconsIcon","Cancel01Icon","Button","Title","Description","cn","motion","CommandPrimitive","cn","Root","Trigger","Group","Sub","Portal","Content","cn","Item","CheckboxItem","ItemIndicator","CheckIcon","RadioGroup","RadioItem","CircleIcon","Label","Separator","SubTrigger","ChevronRightIcon","SubContent","HugeiconsIcon","cn","PopoverPrimitive","cn","cn","RadioGroupPrimitive","cn","ScrollAreaPrimitive","cn","cn","HugeiconsIcon","Search01Icon","Root","Group","Value","Trigger","cn","Icon","HugeiconsIcon","ArrowDown01Icon","Portal","Content","Viewport","Label","Item","ItemIndicator","Tick01Icon","ItemText","Separator","ScrollUpButton","ArrowUp01Icon","ScrollDownButton","cn","HugeiconsIcon","Root","cn","SheetPrimitive","cn","HugeiconsIcon","Cancel01Icon","cn","Sonner","HugeiconsIcon","Cancel01Icon","InformationCircleIcon","CheckmarkCircle02Icon","Alert01Icon","cn","cn","TabsPrimitive","cn","cn","Provider","Root","Trigger","Portal","Content","cn","cn","aliases: Record<string, string>","cn","spring","ariaLabel: string | undefined","Button","cn","AnimatePresence","motion","HugeiconsIcon","Tick01Icon","Copy01Icon","cn","cn","HugeiconsIcon","Alert01Icon","Button","cn","Input","Button","HugeiconsIcon","Add01Icon","Cancel01Icon","Icon","cn","spring","cn","HugeiconsIcon","InformationCircleIcon","motion","Cancel01Icon","cn","trendColor: Record<Trend, string>","Icon","cn","Button","Link","HugeiconsIcon","WebhookIcon","motion","cn","cn","statusConfig: Record<StatusType, { dot: boolean, label: string; variant: 'success' | 'inactive' | 'danger' | 'warning' | 'brand' | 'process'; }>","cn","Switch","cn","ToggleCard: FC<ToggleCardProps>","AccordionContent","AccordionRoot","AccordionItem","AccordionHeader","AccordionTrigger","motion","LINE_VARIANTS: Variants","cn","motion","LINE_VARIANTS","DEFAULT_TRANSITION: Transition","motion","DEFAULT_TRANSITION","motion","motion","SPRING_TRANSITION: Transition","cn","AnimatePresence","motion","DOLLAR_MAIN_VARIANTS: Variants","DOLLAR_SECONDARY_VARIANTS: Variants","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","DEFAULT_TRANSITION","PATH_VARIANTS","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","SVG_VARIANTS: Variants","SVG_TRANSITION: Transition","motion","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","DEFAULT_TRANSITION","PATH_VARIANTS","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","motion","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","LINE_VARIANTS: Variants","motion","PATH_VARIANTS: Variants","motion"],"sources":["../src/components/unsaved-changes-bar/unsaved-changes-bar.tsx","../src/components/ui/accordion/accordion.tsx","../src/components/ui/alert-dialog/alert-dialog.tsx","../src/components/ui/avatar/avatar.tsx","../src/components/ui/badge/badge.tsx","../src/components/ui/card/card.tsx","../src/components/ui/check-icon/check-icon.tsx","../src/components/ui/checkbox/checkbox.tsx","../src/components/ui/collapsible/collapsible.tsx","../src/components/ui/dialog/dialog.tsx","../src/components/icons/animated-icon/animated-icon.tsx","../src/components/icons/search/search.tsx","../src/components/ui/command/command.tsx","../src/components/ui/dropdown-menu/dropdown-menu.tsx","../src/components/icon-config/icon-config.tsx","../src/components/ui/icon/icon.tsx","../src/components/ui/kbd/kbd.tsx","../src/components/ui/popover/popover.tsx","../src/components/ui/progress/progress.tsx","../src/components/ui/radio-group/radio-group.tsx","../src/components/ui/scroll-area/scroll-area.tsx","../src/components/ui/search-input/search-input.tsx","../src/components/ui/select/select.tsx","../src/components/ui/selectable-card/selectable-card.tsx","../src/components/ui/separator/separator.tsx","../src/components/ui/sheet/sheet.tsx","../src/components/ui/skeleton/skeleton.tsx","../src/components/ui/sonner/sonner.tsx","../src/components/ui/spinner/spinner.tsx","../src/components/ui/table/table.tsx","../src/components/ui/tabs/tabs.tsx","../src/components/ui/textarea/textarea.tsx","../src/components/ui/tooltip/tooltip.tsx","../src/components/ui/well/well.tsx","../src/components/asset-icon/asset-icon.tsx","../src/components/copy-button/copy-button.tsx","../src/components/code-block/code-block.tsx","../src/components/danger-zone/danger-zone.tsx","../src/components/domain-list/domain-list.tsx","../src/components/empty-state/empty-state.tsx","../src/components/info-banner/info-banner.tsx","../src/components/loading-skeleton/loading-skeleton.tsx","../src/components/metric-card/metric-card.tsx","../src/components/ask-ai-sheet/ask-ai-sheet.tsx","../src/components/page-actions/page-actions.tsx","../src/components/product-page-layout/product-page-layout.tsx","../src/components/settings-section/settings-section.tsx","../src/components/status-badge/status-badge.tsx","../src/components/toggle-card/toggle-card.tsx","../src/components/icons/arrow-up-right/arrow-up-right.tsx","../src/components/icons/chart-bar-increasing/chart-bar-increasing.tsx","../src/components/icons/chevron-down/chevron-down.tsx","../src/components/icons/chevron-right/chevron-right.tsx","../src/components/icons/copy/copy.tsx","../src/components/icons/copy-check/copy-check.tsx","../src/components/icons/dollar-sign/dollar-sign.tsx","../src/components/icons/download/download.tsx","../src/components/icons/fingerprint/fingerprint.tsx","../src/components/icons/home/home.tsx","../src/components/icons/key/key.tsx","../src/components/icons/layout-panel-top/layout-panel-top.tsx","../src/components/icons/link/link.tsx","../src/components/icons/mcp-tools/mcp-tools.tsx","../src/components/icons/moon/moon.tsx","../src/components/icons/panel-left-close/panel-left-close.tsx","../src/components/icons/panel-left-open/panel-left-open.tsx","../src/components/icons/plus/plus.tsx","../src/components/icons/refresh-cw/refresh-cw.tsx","../src/components/icons/settings/settings.tsx","../src/components/icons/shield-check/shield-check.tsx","../src/components/icons/sun/sun.tsx","../src/components/icons/terminal/terminal.tsx","../src/components/icons/users/users.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { CheckmarkCircle02Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\n\nimport { Button } from '../ui/button'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nconst BLUR_STEPS = 6\nconst BLUR_STRENGTH = 32\n\n// Stable identity keys for the fixed-length blur stack — Sonar flags\n// index-derived keys, and these are computed once at module load.\nconst BLUR_STEP_IDS = Array.from({ length: BLUR_STEPS }, () => crypto.randomUUID())\n\nconst ProgressiveBlur = () => {\n const factor = 0.5\n const base = Math.pow(BLUR_STRENGTH / factor, 1 / (BLUR_STEPS - 1))\n\n const getBlur = (i: number) => factor * Math.pow(base, BLUR_STEPS - i - 1)\n\n return (\n <div\n className='fixed -bottom-10 left-1/2 -translate-x-1/2 pointer-events-none z-40'\n style={{ height: '160px', width: '900px' }}\n >\n {BLUR_STEP_IDS.map((id, i) => {\n const blur = getBlur(i)\n const spread = 20 + ((BLUR_STEPS - i) / BLUR_STEPS) * 30\n const mask = `radial-gradient(ellipse ${spread}% ${spread}% at 50% 60%, rgba(0,0,0,1), rgba(0,0,0,0))`\n return (\n <div\n key={id}\n className='absolute inset-0'\n style={{\n backdropFilter: `blur(${blur}px)`,\n mask,\n WebkitBackdropFilter: `blur(${blur}px)`,\n WebkitMask: mask,\n }}\n />\n )\n })}\n <div\n className='absolute inset-0'\n style={{\n background: 'radial-gradient(ellipse 40% 50% at 50% 60%, var(--background), transparent)',\n }}\n />\n </div>\n )\n}\n\ntype BarState = 'unsaved' | 'saved'\n\nconst popTransition = { ...spring, duration: 0.25 }\n\nconst StatusIcon = ({ state }: { state: BarState }) => {\n return (\n <div className='relative size-[18px] shrink-0'>\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.div\n key={state}\n initial={{ filter: 'blur(4px)', opacity: 0, scale: 0.25 }}\n animate={{ filter: 'blur(0px)', opacity: 1, scale: 1 }}\n exit={{ filter: 'blur(4px)', opacity: 0, scale: 0.25 }}\n transition={popTransition}\n className='absolute inset-0 will-change-[opacity,transform,filter]'\n >\n {state === 'unsaved' && <span className='text-zinc-400 dark:text-zinc-400'><HugeiconsIcon icon={InformationCircleIcon} size={18} /></span>}\n {state === 'saved' && <span className='text-emerald-400 dark:text-emerald-600'><HugeiconsIcon icon={CheckmarkCircle02Icon} size={18} /></span>}\n </motion.div>\n </AnimatePresence>\n </div>\n )\n}\n\nconst StatusText = ({ state }: { state: BarState }) => {\n const text = state === 'unsaved' ? 'Unsaved changes' : 'Changes saved'\n\n return (\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={text}\n initial={{ filter: 'blur(4px)', opacity: 0, scale: 0.95 }}\n animate={{ filter: 'blur(0px)', opacity: 1, scale: 1 }}\n exit={{ filter: 'blur(4px)', opacity: 0, scale: 0.95 }}\n transition={popTransition}\n className='text-[13px] font-medium text-white dark:text-zinc-800 whitespace-nowrap will-change-[opacity,transform,filter]'\n >\n {text}\n </motion.span>\n </AnimatePresence>\n )\n}\n\nexport interface UnsavedChangesBarProps {\n hasChanges: boolean\n onReset: () => void,\n onSave: () => void,\n /**\n * When true, hide the bar even if there are unsaved changes.\n * Use when a config modal (auto-opened from a toggle) owns its own Save button —\n * keeps save affordance in one place. See feedback_save_pattern_auto_modal.md.\n */\n suppressed?: boolean\n}\n\nexport const UnsavedChangesBar = ({ hasChanges, onSave, onReset, suppressed = false }: UnsavedChangesBarProps) => {\n const prefersReduced = useReducedMotion()\n const [barState, setBarState] = useState<BarState>('unsaved')\n const [visible, setVisible] = useState(false)\n const shouldRender = visible && !suppressed\n\n const dismissTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleSave = () => {\n onSave()\n setBarState('saved')\n dismissTimer.current = setTimeout(() => {\n setVisible(false)\n setBarState('unsaved')\n }, 1800)\n }\n\n useEffect(() => {\n if (hasChanges) {\n // If reappearing while dismiss is pending, cancel the dismiss\n if (dismissTimer.current) {\n clearTimeout(dismissTimer.current)\n dismissTimer.current = null\n }\n setVisible(true)\n setBarState('unsaved')\n } else if (!dismissTimer.current) {\n // Only hide immediately if we're not in a post-save dismiss flow\n setVisible(false)\n }\n }, [hasChanges])\n\n return (\n <>\n <AnimatePresence>\n {shouldRender && (\n <motion.div\n key='blur'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={spring}\n >\n <ProgressiveBlur />\n </motion.div>\n )}\n </AnimatePresence>\n <div className='fixed bottom-10 left-1/2 -translate-x-1/2 z-50'>\n <AnimatePresence>\n {shouldRender && (\n <motion.div\n initial={prefersReduced ? { opacity: 0 } : { opacity: 0, scale: 0.95, y: 20 }}\n animate={prefersReduced ? { opacity: 1 } : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReduced ? { opacity: 0 } : { opacity: 0, scale: 0.95, y: 20 }}\n transition={spring}\n style={{ willChange: 'opacity, transform' }}\n className='flex items-center gap-1.5 rounded-xl bg-zinc-900 dark:bg-[oklch(0.940_0.008_231)] shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_24px_-4px_rgba(0,0,0,0.25),0_20px_50px_-8px_rgba(0,0,0,0.20)] dark:shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_20px_-4px_rgba(0,0,0,0.10),0_20px_50px_-8px_rgba(0,0,0,0.08)] pl-3 pr-1.5 py-1.5'\n >\n <StatusIcon state={barState} />\n <StatusText state={barState} />\n\n <motion.div\n animate={{ opacity: barState === 'unsaved' ? 1 : 0 }}\n transition={popTransition}\n className='flex items-center gap-1.5 ml-0.5'\n style={{ pointerEvents: barState === 'unsaved' ? 'auto' : 'none' }}\n >\n <Button\n variant='ghost'\n size='sm'\n className='rounded-md text-zinc-400 hover:text-white hover:bg-white/10 dark:text-zinc-500 dark:hover:text-zinc-800 dark:hover:bg-black/[0.06] shrink-0 touch-manipulation'\n onClick={onReset}\n >\n Reset\n </Button>\n <Button\n size='sm'\n className='rounded-md shrink-0 touch-manipulation'\n onClick={handleSave}\n >\n Save changes\n </Button>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </>\n )\n}\n\n// localStorage-backed store — survives page refresh and browser restart\nconst sessionStore = {\n // eslint-disable-next-line custom-rules/require-single-object-param\n get(key: string): { savedValues: unknown, values: unknown; } | undefined {\n if (globalThis.window === undefined) return undefined\n try {\n const stored = localStorage.getItem(`dashboard-${key}`)\n return stored ? JSON.parse(stored) : undefined\n } catch { return undefined }\n },\n // eslint-disable-next-line custom-rules/require-single-object-param\n set(key: string, value: { savedValues: unknown, values: unknown; }) {\n if (globalThis.window === undefined) return\n try {\n localStorage.setItem(`dashboard-${key}`, JSON.stringify(value))\n } catch { /* quota exceeded, ignore */ }\n },\n}\n\n// Hook to track changes\n// Pass a unique `key` to persist values across client-side navigation.\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const useUnsavedChanges = <T extends Record<string, unknown>>(initialValues: T, storeKey?: string) => {\n const cached = storeKey ? sessionStore.get(storeKey) as { savedValues: T, values: T; } | undefined : undefined\n\n const [values, setValues] = useState<T>(cached?.values ?? initialValues)\n const [savedValues, setSavedValues] = useState<T>(cached?.savedValues ?? initialValues)\n\n // Sync to session store on every change\n useEffect(() => {\n if (storeKey) {\n sessionStore.set(storeKey, { savedValues, values })\n }\n }, [storeKey, values, savedValues])\n\n const hasChanges = useMemo(() => {\n return JSON.stringify(values) !== JSON.stringify(savedValues)\n }, [values, savedValues])\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const updateValue = <K extends keyof T>(key: K, value: T[K]) => {\n setValues(prev => ({ ...prev, [key]: value }))\n }\n\n const save = () => {\n setSavedValues(values)\n }\n\n const reset = () => {\n setValues(savedValues)\n }\n\n const commit = (partial?: Partial<T>): T => {\n const next = partial ? { ...values, ...partial } : values\n setValues(next)\n setSavedValues(next)\n return next\n }\n\n return {\n commit,\n hasChanges,\n reset,\n save,\n setValues,\n updateValue,\n values,\n }\n}\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { ArrowRight01Icon } from '@hugeicons/core-free-icons'\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { cn } from '../../../lib/utils'\n\nconst Accordion = ({\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Root>) => (\n <AccordionPrimitive.Root data-slot='accordion' {...props} />\n)\n\nconst AccordionItem = ({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) => {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('border-b border-[var(--border-divider)] last:border-b-0', className)}\n {...props}\n />\n )\n}\n\nconst AccordionTrigger = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) => {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md px-1 py-4 text-left text-sm font-medium touch-manipulation transition-[color,background-color,opacity] duration-150 ease-out outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 cursor-pointer',\n className\n )}\n {...props}\n >\n {children}\n <HugeiconsIcon icon={ArrowRight01Icon} size={16} className=\"text-muted-foreground/60 pointer-events-none shrink-0 transition-transform duration-200 [*[data-state=open]>&]:rotate-90\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nconst AccordionContent = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) => {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down motion-reduce:animate-none overflow-hidden text-sm'\n {...props}\n >\n <div className={cn('px-1 pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n Action,\n Cancel,\n Content,\n Description,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n} from '@radix-ui/react-alert-dialog';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../button';\n\nconst AlertDialog = Root;\nconst AlertDialogTrigger = Trigger;\nconst AlertDialogPortal = Portal;\n\nconst AlertDialogOverlay = ({ className, ...props }: ComponentProps<typeof Overlay>) => (\n <Overlay\n data-slot='alert-dialog-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogContent = ({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof Content> & { size?: 'default' | 'sm' }) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <Content\n data-slot='alert-dialog-content'\n data-size={size}\n className={cn(\n 'bg-muted overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-none duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n </AlertDialogPortal>\n);\n\nconst AlertDialogHeader = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 px-5 py-4 border-b bg-card text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogFooter = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-footer'\n className={cn('grid grid-cols-2 gap-2 px-5 py-4 bg-muted', className)}\n {...props}\n />\n);\n\nconst AlertDialogTitle = ({ className, ...props }: ComponentProps<typeof Title>) => (\n <Title\n data-slot='alert-dialog-title'\n className={cn(\n 'text-lg font-semibold text-balance sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogDescription = ({ className, ...props }: ComponentProps<typeof Description>) => (\n <Description\n data-slot='alert-dialog-description'\n className={cn('text-muted-foreground text-sm text-pretty', className)}\n {...props}\n />\n);\n\nconst AlertDialogMedia = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogAction = ({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: ComponentProps<typeof Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) => (\n <Button variant={variant} size={size} asChild>\n <Action data-slot='alert-dialog-action' className={cn(className)} {...props} />\n </Button>\n);\n\nconst AlertDialogCancel = ({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: ComponentProps<typeof Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) => (\n <Button variant={variant} size={size} asChild>\n <Cancel data-slot='alert-dialog-cancel' className={cn(className)} {...props} />\n </Button>\n);\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../../../lib/utils'\n\nconst Avatar = ({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg'\n}) => {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarImage = ({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Image>) => {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full outline-1 -outline-offset-1 outline-black/10', className)}\n {...props}\n />\n )\n}\n\nconst AvatarFallback = ({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) => {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarBadge = ({ className, ...props }: ComponentProps<'span'>) => {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarGroup = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n '*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarGroupCount = ({\n className,\n ...props\n}: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import { type ComponentProps } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../lib/utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-[5px] border border-transparent px-1.5 py-0.5 text-xs font-medium tabular-nums w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 [&>svg]:[stroke-width:2.5] gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow,background-color] duration-150 overflow-hidden',\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n brand:\n 'bg-[var(--brand-light)] text-[var(--brand-accented)] dark:text-[oklch(0.650_0.085_256)] border-[var(--brand-default)]/20 dark:border-[oklch(0.450_0.070_256)]/30 [a&]:hover:bg-[var(--brand-light)]/80',\n danger:\n 'bg-[var(--danger-light)] text-[var(--text-danger)] border-[var(--border-danger)]/20 [a&]:hover:bg-[var(--danger-light)]/80',\n dashed:\n 'border-dashed border-[var(--border-default)] text-muted-foreground bg-transparent',\n 'dashed-brand':\n 'border-dashed border-[var(--brand-default)] text-[var(--brand-accented)] bg-transparent',\n default: 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n ghost: '[a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n 'gradient-brand':\n 'bg-gradient-to-r from-[var(--brand-default)] to-[var(--process-default)] text-white border-transparent',\n 'gradient-premium':\n 'bg-gradient-to-r from-amber-500 to-orange-400 text-white border-transparent',\n inactive:\n 'bg-[var(--inactive-light)] text-muted-foreground border-[var(--border-inactive)]/40 [a&]:hover:bg-[var(--inactive-light)]/80',\n link: 'text-primary underline-offset-4 [a&]:hover:underline',\n outline:\n 'border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n process:\n 'bg-[var(--process-light)] text-[var(--text-process)] border-[var(--border-process)]/20 [a&]:hover:bg-[var(--process-light)]/80',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n success:\n 'bg-[var(--success-light)] text-[var(--text-success)] border-[var(--border-success)]/20 [a&]:hover:bg-[var(--success-light)]/80',\n warning:\n 'bg-[var(--warning-light)] text-[var(--text-warning)] border-[var(--border-warning)]/20 [a&]:hover:bg-[var(--warning-light)]/80',\n },\n },\n },\n);\n\nconst Badge = ({\n className,\n variant = 'default',\n asChild = false,\n ...props\n}: ComponentProps<'span'> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nconst Card = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card'\n className={cn(\n 'bg-card text-card-foreground flex flex-col rounded-[16px] border-0 shadow-[var(--shadow-card)] overflow-hidden has-data-[slot=card-footer]:bg-muted/50',\n className,\n )}\n {...props}\n />\n);\n\nconst CardHeader = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-header'\n className={cn(\n '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-5 py-4 border-b bg-card has-data-[slot=card-action]:grid-cols-[1fr_auto]',\n className,\n )}\n {...props}\n />\n);\n\nconst CardTitle = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-title'\n className={cn('text-sm leading-none font-semibold text-balance', className)}\n {...props}\n />\n);\n\nconst CardDescription = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-description'\n className={cn('text-muted-foreground text-[13px] text-pretty', className)}\n {...props}\n />\n);\n\nconst CardAction = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-action'\n className={cn(\n 'col-start-2 row-span-2 row-start-1 self-center justify-self-end',\n className,\n )}\n {...props}\n />\n);\n\nconst CardContent = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-content'\n className={cn('px-5 py-3.5 bg-card', className)}\n {...props}\n />\n);\n\nconst CardFooter = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-footer'\n className={cn('flex items-center px-5 py-4 bg-muted/50', className)}\n {...props}\n />\n);\n\nexport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n};\n","import { type SVGProps } from 'react';\n\nconst CheckIcon = ({\n size = 14,\n strokeWidth = 3,\n className,\n ...props\n}: {\n size?: number;\n strokeWidth?: number;\n} & Omit<SVGProps<SVGSVGElement>, 'strokeWidth'>) => (\n <svg\n aria-hidden='true'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n style={{ height: size, width: size }}\n className={className}\n {...props}\n >\n <path d='M4 12L9 17L20 6' pathLength={1} strokeWidth={strokeWidth} />\n </svg>\n);\n\nexport { CheckIcon };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { cn } from '../../../lib/utils'\n\nconst Checkbox = ({\n className,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) => {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n className={cn(\n \"group peer dark:bg-input/30 data-[state=checked]:bg-[var(--action)] data-[state=checked]:text-white dark:data-[state=checked]:bg-[var(--action)] data-[state=indeterminate]:bg-[var(--action)] data-[state=indeterminate]:text-white relative size-4 shrink-0 touch-manipulation rounded-[4px] border-0 shadow-[0_0_0_1px_rgba(31,41,55,0.20),0_1px_2px_0_rgba(0,0,0,0.06),0_0_1px_0_rgba(0,0,0,0.02)] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.15),0_1px_2px_0_rgba(0,0,0,0.20),0_0_1px_0_rgba(0,0,0,0.06)] data-[state=checked]:shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_rgba(255,255,255,0.15)_inset,0px_2px_3px_0px_rgba(31,41,55,0.30),0px_1px_1px_0px_rgba(0,0,0,0.28)] dark:data-[state=checked]:shadow-[0px_1px_1px_0px_rgba(255,255,255,0.10)_inset,0px_2px_3px_0px_rgba(0,0,0,0.50),0px_1px_1px_0px_rgba(0,0,0,0.30)] data-[state=indeterminate]:shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_rgba(255,255,255,0.15)_inset,0px_2px_3px_0px_rgba(31,41,55,0.30),0px_1px_1px_0px_rgba(0,0,0,0.28)] dark:data-[state=indeterminate]:shadow-[0px_1px_1px_0px_rgba(255,255,255,0.10)_inset,0px_2px_3px_0px_rgba(0,0,0,0.50),0px_1px_1px_0px_rgba(0,0,0,0.30)] transition-[color,box-shadow,background-color] duration-200 ease outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer before:absolute before:-inset-[12px] before:content-['']\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='relative grid place-content-center text-current size-full'\n forceMount\n >\n {/* Minus for indeterminate */}\n <svg className='size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 opacity-0 scale-[0.25] blur-[4px] group-data-[state=indeterminate]:opacity-100 group-data-[state=indeterminate]:scale-100 group-data-[state=indeterminate]:blur-none' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeLinecap='round' strokeLinejoin='round'>\n <path d='M5 12L19 12' pathLength={1} strokeWidth={3} />\n </svg>\n {/* Checkmark for checked */}\n <svg className='size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 opacity-0 scale-[0.25] blur-[4px] group-data-[state=checked]:opacity-100 group-data-[state=checked]:scale-100 group-data-[state=checked]:blur-none' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeLinecap='round' strokeLinejoin='round'>\n <path d='M4 12L9 17L20 6' pathLength={1} strokeWidth={3} />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible'\n\nimport { cn } from '../../../lib/utils'\n\nconst Collapsible = ({\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.Root>) => (\n <CollapsiblePrimitive.Root data-slot='collapsible' {...props} />\n)\n\nconst CollapsibleTrigger = ({\n className,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) => {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot='collapsible-trigger'\n className={cn('touch-manipulation', className)}\n {...props}\n />\n )\n}\n\nconst CollapsibleContent = ({\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) => (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot='collapsible-content'\n {...props}\n />\n)\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n Close,\n Content,\n Description,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n} from '@radix-ui/react-dialog';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../button';\n\n/**\n * Modal dialog (popup) overlaying the page.\n *\n * Compose with `DialogTrigger`, `DialogContent`, `DialogHeader`, `DialogTitle`,\n * `DialogDescription`, `DialogBody`, `DialogFooter`, and `DialogClose`.\n */\nconst Dialog = Root;\nconst DialogTrigger = Trigger;\nconst DialogPortal = Portal;\nconst DialogClose = Close;\n\nconst DialogOverlay = ({ className, ...props }: ComponentProps<typeof Overlay>) => (\n <Overlay\n data-slot='dialog-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n);\n\nconst DialogContent = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof Content>) => (\n <DialogPortal data-slot='dialog-portal'>\n <DialogOverlay />\n <Content\n data-slot='dialog-content'\n className={cn(\n 'bg-card overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-none duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in outline-none sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n </Content>\n </DialogPortal>\n);\n\nconst DialogHeader = ({\n className,\n showCloseButton = true,\n children,\n ...props\n}: ComponentProps<'div'> & { showCloseButton?: boolean }) => (\n <div\n data-slot='dialog-header'\n className={cn(\n 'relative flex flex-col gap-1.5 px-5 pt-4 pb-4 border-b bg-card sm:text-left',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <Close\n data-slot='dialog-close'\n className='absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden cursor-pointer touch-manipulation before:absolute before:-inset-[6px] before:content-[\"\"]'\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n <span className='sr-only'>Close</span>\n </Close>\n )}\n </div>\n);\n\nconst DialogBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='dialog-body'\n className={cn('px-5 py-5 bg-card', className)}\n {...props}\n />\n);\n\nconst DialogFooter = ({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & { showCloseButton?: boolean }) => (\n <div\n data-slot='dialog-footer'\n className={cn('grid grid-cols-2 gap-2 px-5 py-4 bg-muted', className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <Close asChild>\n <Button variant='outline'>Close</Button>\n </Close>\n )}\n </div>\n);\n\nconst DialogTitle = ({ className, ...props }: ComponentProps<typeof Title>) => (\n <Title\n data-slot='dialog-title'\n className={cn('text-lg leading-none font-semibold text-balance', className)}\n {...props}\n />\n);\n\nconst DialogDescription = ({\n className,\n ...props\n}: ComponentProps<typeof Description>) => (\n <Description\n data-slot='dialog-description'\n className={cn('text-muted-foreground text-sm text-pretty', className)}\n {...props}\n />\n);\n\nexport {\n Dialog,\n DialogBody,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\n/**\n * Base wrapper for animated icons. Handles ref (startAnimation/stopAnimation),\n * mouse enter/leave animation, and the outer div. Use via render prop:\n *\n * <AnimatedIcon ref={ref} size={28} {...props}>\n * {(controls, size) => (\n * <svg height={size} ...> or <motion.svg animate={controls} ...>...</motion.svg>\n * )}\n * </AnimatedIcon>\n *\n * Icons with custom handle logic (e.g. triggerCopied, custom startAnimation)\n * keep their own useImperativeHandle and do not use this base.\n */\n\nimport type { HTMLAttributes, MouseEvent, ReactNode } from 'react';\nimport { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport { useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface AnimatedIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface AnimatedIconProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n children: (\n controls: ReturnType<typeof useAnimation>,\n size: number,\n ) => ReactNode;\n size?: number;\n}\n\nconst AnimatedIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n (\n { children, className, onMouseEnter, onMouseLeave, size = 28, ...props },\n ref,\n ) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n };\n });\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n controls.start('animate').catch(() => undefined);\n }\n },\n [controls, onMouseEnter],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('normal').catch(() => undefined);\n }\n },\n [controls, onMouseLeave],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn('inline-flex items-center justify-center', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children(controls, size)}\n </div>\n );\n },\n);\n\nAnimatedIcon.displayName = 'AnimatedIcon';\n\nexport { AnimatedIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SearchIconHandle = AnimatedIconHandle;\n\ntype SearchIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SearchIcon = forwardRef<SearchIconHandle, SearchIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{\n bounce: 0.3,\n duration: 1,\n }}\n variants={{\n animate: {\n x: [0, 0, -3, 0],\n y: [0, -4, 0, 0],\n },\n normal: { x: 0, y: 0 },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <circle cx='11' cy='11' r='8' />\n <path d='m21 21-4.3-4.3' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nSearchIcon.displayName = 'SearchIcon';\n\nexport { SearchIcon };\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../dialog';\nimport { SearchIcon } from '../../icons/search';\n\nconst Command = ({ className, ...props }: ComponentProps<typeof CommandPrimitive>) => (\n <CommandPrimitive\n data-slot='command'\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className,\n )}\n {...props}\n />\n);\n\nconst CommandDialog = ({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n ...props\n}: ComponentProps<typeof Dialog> & {\n className?: string;\n description?: string;\n title?: string;\n}) => (\n <Dialog {...props}>\n <DialogHeader className='sr-only'>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)}>\n <Command className='[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5'>\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n);\n\nconst CommandInput = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Input>) => (\n <div data-slot='command-input-wrapper' className='flex h-9 items-center gap-2 border-b px-3'>\n <SearchIcon className='size-4 shrink-0 opacity-50' />\n <CommandPrimitive.Input\n data-slot='command-input'\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n);\n\nconst CommandList = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.List>) => (\n <CommandPrimitive.List\n data-slot='command-list'\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n);\n\nconst CommandEmpty = ({ ...props }: ComponentProps<typeof CommandPrimitive.Empty>) => (\n <CommandPrimitive.Empty\n data-slot='command-empty'\n className='py-6 text-center text-sm'\n {...props}\n />\n);\n\nconst CommandGroup = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Group>) => (\n <CommandPrimitive.Group\n data-slot='command-group'\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n);\n\nconst CommandSeparator = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Separator>) => (\n <CommandPrimitive.Separator\n data-slot='command-separator'\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n);\n\nconst CommandItem = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Item>) => (\n <CommandPrimitive.Item\n data-slot='command-item'\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n);\n\nconst CommandShortcut = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n data-slot='command-shortcut'\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n);\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n};\n","'use client';\n\nimport type {\n ComponentPropsWithoutRef,\n ComponentRef,\n HTMLAttributes} from 'react';\nimport {\n forwardRef\n} from 'react';\nimport {\n CheckboxItem,\n Content,\n Group,\n Item,\n ItemIndicator,\n Label,\n Portal,\n RadioGroup,\n RadioItem,\n Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n Trigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '../../../lib/utils';\n\nconst DropdownMenu = Root;\n\nconst DropdownMenuTrigger = Trigger;\n\nconst DropdownMenuGroup = Group;\n\nconst DropdownMenuSub = Sub;\n\nconst DropdownMenuContent = forwardRef<\n ComponentRef<typeof Content>,\n ComponentPropsWithoutRef<typeof Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <Portal>\n <Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n </Portal>\n));\nDropdownMenuContent.displayName = Content.displayName;\n\nconst DropdownMenuItem = forwardRef<\n ComponentRef<typeof Item>,\n ComponentPropsWithoutRef<typeof Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = Item.displayName;\n\nconst DropdownMenuCheckboxItem = forwardRef<\n ComponentRef<typeof CheckboxItem>,\n ComponentPropsWithoutRef<typeof CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className='absolute left-2 flex size-3.5 items-center justify-center'>\n <ItemIndicator>\n <CheckIcon className='size-4' />\n </ItemIndicator>\n </span>\n {children}\n </CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = CheckboxItem.displayName;\n\nconst DropdownMenuRadioGroup = RadioGroup;\n\nconst DropdownMenuRadioItem = forwardRef<\n ComponentRef<typeof RadioItem>,\n ComponentPropsWithoutRef<typeof RadioItem>\n>(({ className, children, ...props }, ref) => (\n <RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <span className='absolute left-2 flex size-3.5 items-center justify-center'>\n <ItemIndicator>\n <CircleIcon className='size-2 fill-current' />\n </ItemIndicator>\n </span>\n {children}\n </RadioItem>\n));\nDropdownMenuRadioItem.displayName = RadioItem.displayName;\n\nconst DropdownMenuLabel = forwardRef<\n ComponentRef<typeof Label>,\n ComponentPropsWithoutRef<typeof Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-medium',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = Label.displayName;\n\nconst DropdownMenuSeparator = forwardRef<\n ComponentRef<typeof Separator>,\n ComponentPropsWithoutRef<typeof Separator>\n>(({ className, ...props }, ref) => (\n <Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground',\n className,\n )}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nconst DropdownMenuSubTrigger = forwardRef<\n ComponentRef<typeof SubTrigger>,\n ComponentPropsWithoutRef<typeof SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className='ml-auto size-4' />\n </SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = SubTrigger.displayName;\n\nconst DropdownMenuSubContent = forwardRef<\n ComponentRef<typeof SubContent>,\n ComponentPropsWithoutRef<typeof SubContent>\n>(({ className, ...props }, ref) => (\n <SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = SubContent.displayName;\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","'use client'\n\nimport { type ReactNode, createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\n\ninterface IconConfig {\n // undefined = icon's built-in default\n setStrokeWidth: (v: number | undefined) => void, \n strokeWidth: number | undefined\n}\n\nconst IconConfigContext = createContext<IconConfig>({\n setStrokeWidth: () => {},\n strokeWidth: undefined,\n})\n\nexport const IconConfigProvider = ({ children }: { children: ReactNode }) => {\n const [strokeWidth, setStrokeWidth] = useState<number | undefined>(() => {\n if (globalThis.window === undefined) return undefined\n const stored = localStorage.getItem('icon-stroke-width')\n if (stored === 'default') return undefined\n const n = Number.parseFloat(stored ?? '')\n return Number.isNaN(n) ? undefined : n\n })\n\n // Sync to CSS variable so all HugeiconsIcon instances respond (not just <Icon> wrapper)\n useEffect(() => {\n document.documentElement.style.setProperty('--icon-stroke-width', String(strokeWidth ?? 1.75))\n }, [strokeWidth])\n\n const applyStrokeWidth = useCallback((v: number | undefined) => {\n setStrokeWidth(v)\n localStorage.setItem('icon-stroke-width', v === undefined ? 'default' : String(v))\n }, [])\n\n // Memoize the context value so consumers don't re-render on every parent render.\n const value = useMemo(\n () => ({ setStrokeWidth: applyStrokeWidth, strokeWidth }),\n [applyStrokeWidth, strokeWidth],\n )\n\n return (\n <IconConfigContext.Provider value={value}>\n {children}\n </IconConfigContext.Provider>\n )\n}\n\nexport const useIconConfig = () => useContext(IconConfigContext)\n","'use client'\n\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport type { HugeiconsIconProps } from '@hugeicons/react'\n\nimport { useIconConfig } from '../../icon-config'\n\n/** Drop-in replacement for HugeiconsIcon — reads global strokeWidth from IconConfigContext */\nexport const Icon = (props: HugeiconsIconProps) => {\n const { strokeWidth } = useIconConfig()\n return <HugeiconsIcon strokeWidth={strokeWidth ?? 1.75} {...props} />\n}\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Kbd = ({ className, ...props }: ComponentProps<'kbd'>) => {\n return (\n <kbd\n data-slot='kbd'\n className={cn(\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none\",\n \"[&_svg:not([class*='size-'])]:size-3\",\n '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',\n className\n )}\n {...props}\n />\n )\n}\n\nconst KbdGroup = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <kbd\n data-slot='kbd-group'\n className={cn('inline-flex items-center gap-1', className)}\n {...props}\n />\n )\n}\n\nexport { Kbd, KbdGroup }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cn } from '../../../lib/utils'\n\nconst Popover = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Root>) => (\n <PopoverPrimitive.Root data-slot='popover' {...props} />\n)\n\nconst PopoverTrigger = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Trigger>) => (\n <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />\n)\n\nconst PopoverContent = ({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content>) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-xl border-0 p-4 shadow-[var(--shadow-elevated)] outline-hidden will-change-[opacity,transform] motion-reduce:animate-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nconst PopoverAnchor = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Anchor>) => (\n <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />\n)\n\nconst PopoverHeader = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n )\n}\n\nconst PopoverTitle = ({ className, ...props }: ComponentProps<'h2'>) => {\n return (\n <div\n data-slot='popover-title'\n className={cn('font-medium text-balance', className)}\n {...props}\n />\n )\n}\n\nconst PopoverDescription = ({\n className,\n ...props\n}: ComponentProps<'p'>) => {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nimport { cn } from '../../../lib/utils';\n\nconst progressVariants = cva(\n 'h-full w-full flex-1 transition-transform duration-500 ease-out motion-reduce:transition-none',\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n brand: 'bg-[var(--brand-default)]',\n danger: 'bg-[var(--danger-default)]',\n default: 'bg-primary',\n process: 'bg-[var(--process-default)]',\n success: 'bg-[var(--success-default)]',\n warning: 'bg-[var(--warning-default)]',\n },\n },\n },\n);\n\nexport interface ProgressProps\n extends Omit<ComponentProps<'div'>, 'children'>,\n VariantProps<typeof progressVariants> {\n indeterminate?: boolean;\n value?: number;\n}\n\nconst Progress = ({\n className,\n indeterminate = false,\n value,\n variant,\n ...props\n}: ProgressProps) => (\n <div\n data-slot='progress'\n className={cn('bg-primary/20 relative h-2 w-full overflow-hidden rounded-full', className)}\n {...props}\n >\n {/* Native semantic element drives screen-reader announcements; the styled\n bars below are visual only. */}\n <progress\n aria-label='Progress'\n className='sr-only'\n max={100}\n value={indeterminate ? undefined : (value ?? 0)}\n />\n <div\n data-slot='progress-indicator'\n className={cn(\n progressVariants({ variant }),\n indeterminate && 'animate-progress-indeterminate motion-reduce:animate-none',\n )}\n style={\n indeterminate ? undefined : { transform: `translateX(-${100 - (value ?? 0)}%)` }\n }\n />\n </div>\n);\n\nexport { Progress };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\n\nimport { cn } from '../../../lib/utils'\n\nconst RadioGroup = ({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) => {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid gap-3', className)}\n {...props}\n />\n )\n}\n\nconst RadioGroupItem = ({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) => {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n \"text-[var(--action)] dark:bg-input/30 relative aspect-square size-4 shrink-0 touch-manipulation rounded-full border border-[rgba(31,41,55,0.30)] dark:border-[rgba(255,255,255,0.20)] data-[state=checked]:border-[var(--action)] shadow-[0_1px_2px_rgba(0,0,0,0.06),0_0_1px_rgba(31,41,55,0.08)] dark:shadow-[0_1px_2px_rgba(0,0,0,0.20),0_0_1px_rgba(0,0,0,0.15)] transition-[color,box-shadow,border-color] duration-100 ease-out outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer before:absolute before:-inset-[12px] before:content-['']\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='group/indicator relative flex items-center justify-center'\n forceMount\n >\n <span className=\"bg-[var(--action)] absolute top-1/2 left-1/2 size-2 rounded-full -translate-x-1/2 -translate-y-1/2 transition-[opacity,transform] duration-150 ease-out group-data-[state=unchecked]/indicator:scale-0 group-data-[state=unchecked]/indicator:opacity-0\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '../../../lib/utils'\n\nconst ScrollArea = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof ScrollAreaPrimitive.Root>) => {\n return (\n <ScrollAreaPrimitive.Root\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nconst ScrollBar = ({\n className,\n orientation = 'vertical',\n ...props\n}: ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) => {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot='scroll-area-scrollbar'\n orientation={orientation}\n className={cn(\n 'flex touch-none touch-manipulation p-px transition-[background-color] select-none',\n orientation === 'vertical' &&\n 'h-full w-2.5 border-l border-l-transparent',\n orientation === 'horizontal' &&\n 'h-2.5 flex-col border-t border-t-transparent',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot='scroll-area-thumb'\n className='bg-border relative flex-1 rounded-full'\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Search01Icon } from '@hugeicons/core-free-icons'\n\nimport { Kbd } from '../kbd'\nimport { cn } from '../../../lib/utils'\n\nconst SearchInput = ({\n className,\n placeholder = 'Search...',\n shortcut = '⌘K',\n onClick,\n ...props\n}: ComponentProps<'button'> & {\n placeholder?: string\n shortcut?: string\n}) => {\n return (\n <button\n type='button'\n data-slot='search-input'\n className={cn(\n // Same height/radius as Input, subtle border for muted surfaces\n 'h-8 min-h-11 w-full touch-manipulation rounded-md border border-border bg-background dark:bg-input/30 md:min-h-0',\n 'hover:border-foreground/20',\n 'transition-[color,box-shadow,border-color] duration-100 ease-out',\n 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n 'flex items-center gap-2 px-3',\n 'text-sm text-muted-foreground/60 cursor-pointer',\n className\n )}\n onClick={onClick}\n {...props}\n >\n <HugeiconsIcon icon={Search01Icon} size={14} className='shrink-0 text-muted-foreground' />\n <span className='flex-1 text-left'>{placeholder}</span>\n {shortcut && <Kbd>{shortcut}</Kbd>}\n </button>\n )\n}\n\nexport { SearchInput }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n ArrowDown01Icon,\n ArrowUp01Icon,\n Tick01Icon,\n} from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root,\n ScrollDownButton,\n ScrollUpButton,\n Separator,\n Trigger,\n Value,\n Viewport,\n} from '@radix-ui/react-select';\n\nimport { cn } from '../../../lib/utils';\n\nconst Select = ({ ...props }: ComponentProps<typeof Root>) => (\n <Root data-slot='select' {...props} />\n);\n\nconst SelectGroup = ({ ...props }: ComponentProps<typeof Group>) => (\n <Group data-slot='select-group' {...props} />\n);\n\nconst SelectValue = ({ ...props }: ComponentProps<typeof Value>) => (\n <Value data-slot='select-value' {...props} />\n);\n\nconst SelectTrigger = ({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof Trigger> & {\n size?: 'sm' | 'default';\n}) => (\n <Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"data-[placeholder]:text-muted-foreground/60 [&_svg:not([class*='text-'])]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 flex w-fit touch-manipulation items-center justify-between gap-1.5 rounded-md border-0 bg-transparent px-3 py-2 text-[13px] whitespace-nowrap shadow-[var(--shadow-input)] hover:shadow-[var(--shadow-input-hover)] transition-[color,box-shadow] duration-100 ease-out outline-none focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_rgba(0,114,239,0.15)] aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:text-[13px] data-[size=sm]:px-2.5 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <Icon asChild>\n <HugeiconsIcon icon={ArrowDown01Icon} size={16} className='opacity-50' />\n </Icon>\n </Trigger>\n);\n\nconst SelectContent = ({\n className,\n children,\n position = 'popper',\n align = 'start',\n ...props\n}: ComponentProps<typeof Content>) => (\n <Portal>\n <Content\n data-slot='select-content'\n className={cn(\n \"bg-popover text-popover-foreground will-change-[opacity,transform] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-xl border-0 shadow-[var(--shadow-elevated)]\",\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1',\n )}\n >\n {children}\n </Viewport>\n <SelectScrollDownButton />\n </Content>\n </Portal>\n);\n\nconst SelectLabel = ({\n className,\n ...props\n}: ComponentProps<typeof Label>) => (\n <Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n);\n\nconst SelectItem = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof Item>) => (\n <Item\n data-slot='select-item'\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span\n data-slot='select-item-indicator'\n className='absolute right-2 flex size-3.5 items-center justify-center'\n >\n <ItemIndicator>\n <HugeiconsIcon icon={Tick01Icon} size={16} />\n </ItemIndicator>\n </span>\n <ItemText>{children}</ItemText>\n </Item>\n);\n\nconst SelectSeparator = ({\n className,\n ...props\n}: ComponentProps<typeof Separator>) => (\n <Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n);\n\nconst SelectScrollUpButton = ({\n className,\n ...props\n}: ComponentProps<typeof ScrollUpButton>) => (\n <ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowUp01Icon} size={16} />\n </ScrollUpButton>\n);\n\nconst SelectScrollDownButton = ({\n className,\n ...props\n}: ComponentProps<typeof ScrollDownButton>) => (\n <ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowDown01Icon} size={16} />\n </ScrollDownButton>\n);\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { CheckIcon } from '../check-icon';\nimport { cn } from '../../../lib/utils';\n\ntype IconComponent = Parameters<typeof HugeiconsIcon>[0]['icon'];\n\ninterface SelectableCardProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {\n badge?: ReactNode;\n description: string;\n icon?: IconComponent;\n iconSize?: number;\n label: string;\n selected: boolean;\n}\n\nconst SelectableCard = ({\n badge,\n className,\n description,\n icon,\n iconSize = 20,\n label,\n selected,\n ...props\n}: SelectableCardProps) => (\n <button\n data-slot='selectable-card'\n data-selected={selected}\n className={cn(\n 'group/card relative flex flex-col items-start gap-2.5 p-4 rounded-xl text-left transition-[box-shadow,background-color,scale] duration-150 touch-manipulation active:scale-[0.96] cursor-pointer w-full outline-none focus-visible:shadow-[0_0_0_1.5px_var(--action),0_0_0_4px_oklch(from_var(--action)_l_c_h_/_0.25)]',\n selected\n ? 'bg-[var(--action)]/5 shadow-[0_0_0_1.5px_var(--action)]'\n : 'shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.12)] hover:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20)]',\n className,\n )}\n {...props}\n >\n {icon && (\n <HugeiconsIcon icon={icon} size={iconSize} className='text-[var(--action)]' />\n )}\n <div className='w-full pr-7'>\n <div className='flex items-center gap-2'>\n <p className='text-sm font-medium text-balance'>{label}</p>\n {badge && <span className='shrink-0'>{badge}</span>}\n </div>\n <p className='text-xs text-muted-foreground mt-0.5 text-pretty'>{description}</p>\n </div>\n <div className='absolute top-4 right-4'>\n <div\n className={cn(\n 'relative size-4 shrink-0 rounded-[4px] transition-[color,box-shadow,background-color] duration-200 ease',\n selected\n ? 'bg-[var(--action)] text-white shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_oklch(1_0_0_/_0.07)_inset,0px_2px_3px_0px_oklch(0.278_0.03_256.85_/_0.20),0px_1px_1px_0px_oklch(0_0_0_/_0.24)]'\n : 'shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)] group-hover/card:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.30),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)]',\n )}\n >\n <CheckIcon\n size={14}\n className={cn(\n 'absolute inset-0 m-auto text-current transition-[opacity,transform,filter] duration-200',\n selected\n ? 'opacity-100 scale-100 blur-none'\n : 'opacity-0 scale-[0.25] blur-[4px]',\n )}\n />\n </div>\n </div>\n </button>\n);\n\nexport { SelectableCard };\n","'use client';\n\nimport type { ComponentPropsWithoutRef, ComponentRef} from 'react';\nimport { forwardRef } from 'react';\nimport { Root } from '@radix-ui/react-separator';\n\nimport { cn } from '../../../lib/utils';\n\nconst Separator = forwardRef<\n ComponentRef<typeof Root>,\n ComponentPropsWithoutRef<typeof Root>\n>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref,\n ) => (\n <Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = Root.displayName;\n\nexport { Separator };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Cancel01Icon } from '@hugeicons/core-free-icons'\nimport * as SheetPrimitive from '@radix-ui/react-dialog'\n\nimport { cn } from '../../../lib/utils'\n\nconst Sheet = ({ ...props }: ComponentProps<typeof SheetPrimitive.Root>) => (\n <SheetPrimitive.Root data-slot='sheet' {...props} />\n)\n\nconst SheetTrigger = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Trigger>) => (\n <SheetPrimitive.Trigger data-slot='sheet-trigger' {...props} />\n)\n\nconst SheetClose = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Close>) => (\n <SheetPrimitive.Close data-slot='sheet-close' {...props} />\n)\n\nconst SheetPortal = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Portal>) => (\n <SheetPrimitive.Portal data-slot='sheet-portal' {...props} />\n)\n\nconst SheetOverlay = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Overlay>) => {\n return (\n <SheetPrimitive.Overlay\n data-slot='sheet-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] will-change-[opacity] data-[state=closed]:duration-100 data-[state=open]:duration-150 [animation-timing-function:cubic-bezier(0.16,1,0.3,1)] motion-reduce:animate-none',\n className\n )}\n {...props}\n />\n )\n}\n\nconst SheetContent = ({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n overlayClassName,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Content> & {\n overlayClassName?: string,\n showCloseButton?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) => {\n return (\n <SheetPortal>\n <SheetOverlay className={overlayClassName} />\n <SheetPrimitive.Content\n data-slot='sheet-content'\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 border-0 shadow-[var(--shadow-elevated)] [animation-timing-function:cubic-bezier(0.32,0.72,0,1)] data-[state=closed]:duration-150 data-[state=open]:duration-200 will-change-[opacity,transform] motion-reduce:animate-none',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 sm:max-w-sm rounded-l-xl rounded-r-md',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm rounded-r-xl rounded-l-md',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-md',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-md',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden disabled:pointer-events-none cursor-pointer touch-manipulation before:absolute before:-inset-[6px] before:content-['']\">\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n <span className='sr-only'>Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nconst SheetHeader = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='sheet-header'\n className={cn('flex flex-col gap-1.5 p-4', className)}\n {...props}\n />\n )\n}\n\nconst SheetFooter = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='sheet-footer'\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n )\n}\n\nconst SheetTitle = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Title>) => {\n return (\n <SheetPrimitive.Title\n data-slot='sheet-title'\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nconst SheetDescription = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Description>) => {\n return (\n <SheetPrimitive.Description\n data-slot='sheet-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Skeleton = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='skeleton'\n className={cn(\n 'bg-accent animate-shimmer motion-reduce:animate-none rounded-md bg-[length:200%_100%] bg-gradient-to-r from-accent via-accent/50 to-accent',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\nimport { type CSSProperties } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Alert01Icon, Cancel01Icon, CheckmarkCircle02Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\nimport { useTheme } from 'next-themes'\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className='toaster group'\n icons={{\n error: <HugeiconsIcon icon={Cancel01Icon} size={16} />,\n info: <HugeiconsIcon icon={InformationCircleIcon} size={16} />,\n loading: <svg className='size-4 animate-spin' viewBox='0 0 24 24' fill='none'><circle className='opacity-25' cx='12' cy='12' r='10' stroke='currentColor' strokeWidth='4' /><path className='opacity-75' fill='currentColor' d='M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z' /></svg>,\n success: <HugeiconsIcon icon={CheckmarkCircle02Icon} size={16} />,\n warning: <HugeiconsIcon icon={Alert01Icon} size={16} />,\n }}\n style={\n {\n '--border-radius': 'var(--radius)',\n '--normal-bg': 'var(--popover)',\n '--normal-border': 'var(--border)',\n '--normal-text': 'var(--popover-foreground)',\n } as CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import { cn } from '../../../lib/utils';\n\nconst Spinner = ({ className }: { className?: string }) => (\n <output aria-label='Loading' className='inline-flex'>\n <svg\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className={cn('size-4 animate-spin motion-reduce:animate-none', className)}\n >\n <circle\n className='opacity-25'\n cx='12'\n cy='12'\n r='10'\n stroke='currentColor'\n strokeWidth='4'\n />\n <path\n className='opacity-75'\n fill='currentColor'\n d='M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z'\n />\n </svg>\n </output>\n);\n\nexport { Spinner };\n","'use client'\n\nimport { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Table = ({ className, ...props }: ComponentProps<'table'>) => {\n return (\n <div\n data-slot='table-container'\n className='relative w-full overflow-x-auto'\n >\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n )\n}\n\nconst TableHeader = ({ className, ...props }: ComponentProps<'thead'>) => {\n return (\n <thead\n data-slot='table-header'\n className={cn(\n '[&_tr]:border-b [&_tr]:border-[var(--border-divider)] [&_tr]:hover:bg-transparent bg-[var(--bg-accented)]/50 sticky top-0 z-10',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableBody = ({ className, ...props }: ComponentProps<'tbody'>) => {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n )\n}\n\nconst TableFooter = ({ className, ...props }: ComponentProps<'tfoot'>) => {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn(\n 'bg-muted/50 border-t font-medium [&>tr]:last:border-b-0',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableRow = ({ className, ...props }: ComponentProps<'tr'>) => {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-[var(--overlay-hover)] data-[state=selected]:bg-[var(--overlay-selected)] border-b border-[var(--border-divider)] transition-[background-color] duration-100',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableHead = ({ className, ...props }: ComponentProps<'th'>) => {\n return (\n <th\n data-slot='table-head'\n className={cn(\n 'text-muted-foreground h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableCell = ({ className, ...props }: ComponentProps<'td'>) => {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'px-3 py-2.5 align-middle whitespace-nowrap tabular-nums [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableCaption = ({\n className,\n ...props\n}: ComponentProps<'caption'>) => {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { type VariantProps, cva } from 'class-variance-authority'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cn } from '../../../lib/utils'\n\nconst Tabs = ({\n className,\n orientation = 'horizontal',\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) => {\n return (\n <TabsPrimitive.Root\n data-slot='tabs'\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n 'group/tabs flex gap-2 data-[orientation=horizontal]:flex-col',\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n default: 'bg-muted',\n line: 'gap-1 bg-transparent',\n },\n },\n }\n)\n\nconst TabsList = ({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) => {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nconst TabsTrigger = ({\n className,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) => {\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap touch-manipulation transition-[color,background-color,border-color,box-shadow,opacity] duration-150 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-[opacity] group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst TabsContent = ({\n className,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) => {\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n className={cn('flex-1 outline-none', className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Textarea = ({ className, ...props }: ComponentProps<'textarea'>) => {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'placeholder:text-muted-foreground/60 dark:bg-input/30 flex field-sizing-content min-h-16 w-full touch-manipulation rounded-md border-0 bg-background px-3 py-2 text-base shadow-[var(--shadow-input)] transition-[color,box-shadow] duration-100 ease-out outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'hover:shadow-[var(--shadow-input-hover)]',\n 'focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_rgba(0,114,239,0.15)]',\n 'aria-invalid:shadow-[0_0_0_1px_var(--destructive),0_0_1px_0_var(--destructive)]',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","'use client';\n\nimport {\n Content,\n Portal,\n Provider,\n Root,\n Trigger,\n} from '@radix-ui/react-tooltip';\nimport type { ComponentPropsWithoutRef, ComponentRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nconst TooltipProvider = Provider;\n\nconst Tooltip = Root;\n\nconst TooltipTrigger = Trigger;\n\nconst TooltipContent = forwardRef<\n ComponentRef<typeof Content>,\n ComponentPropsWithoutRef<typeof Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <Portal>\n <Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </Portal>\n));\nTooltipContent.displayName = Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","'use client';\n\nimport { type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nimport { cn } from '../../../lib/utils';\n\nconst wellVariants = cva('rounded-2xl', {\n defaultVariants: {\n gap: 'sm',\n spacing: 'default',\n variant: 'inset',\n },\n variants: {\n gap: {\n default: 'space-y-4',\n lg: 'space-y-5',\n none: '',\n sm: 'space-y-3',\n },\n spacing: {\n default: 'p-4',\n lg: 'p-5',\n none: 'p-0',\n sm: 'p-3',\n },\n variant: {\n default: 'bg-muted/50',\n inset: 'bg-muted/50 border border-border',\n outline: 'border border-border',\n },\n },\n});\n\nconst Well = ({\n className,\n gap,\n spacing,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof wellVariants>) => (\n <div\n data-slot='well'\n data-spacing={spacing ?? 'default'}\n className={cn(wellVariants({ gap, spacing, variant }), className)}\n {...props}\n />\n);\n\nconst WellReveal = ({\n children,\n className,\n open,\n}: {\n children: ReactNode;\n className?: string;\n open: boolean;\n}) => (\n <div\n className='grid transition-[grid-template-rows] duration-[220ms] ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none'\n style={{ gridTemplateRows: open ? '1fr' : '0fr' }}\n aria-hidden={!open}\n >\n <div className='overflow-hidden'>\n <div\n className={cn(\n 'px-0.5 pb-0.5 [&>[data-slot=well]:not([data-spacing=none])]:p-[22px]',\n className,\n )}\n >\n {children}\n </div>\n </div>\n </div>\n);\n\nexport { Well, WellReveal, wellVariants };\n","import { cn } from '../../lib/utils'\n\nconst aliases: Record<string, string> = {\n arbitrum: 'arb',\n 'arbitrum-one': 'arb',\n 'arbitrum-sepolia': 'arb',\n avalanche: 'avax',\n 'base-sepolia': 'base',\n 'binance-smart-chain': 'bnb',\n bitcoin: 'btc',\n 'bitcoin-mainnet': 'btc',\n 'bitcoin-testnet': 'btc',\n bsc: 'bnb',\n cosmos: 'atom',\n 'cosmos-hub': 'atom',\n 'cosmos-testnet': 'atom',\n ethereum: 'eth',\n fantom: 'ftm',\n gnosis: 'gnosis',\n linea: 'linea',\n mantle: 'mantle',\n optimism: 'optimism',\n osmosis: 'osmo',\n polygon: 'matic',\n 'polygon-amoy': 'matic',\n scroll: 'scroll',\n sei: 'sei',\n 'sei-network': 'sei',\n sepolia: 'eth',\n solana: 'sol',\n 'solana-devnet': 'sol',\n 'solana-mainnet': 'sol',\n starknet: 'generic',\n sui: 'sui',\n zksync: 'zkevm',\n}\n\nexport interface AssetIconProps {\n className?: string,\n size?: number\n symbol: string,\n}\n\nexport const AssetIcon = ({ symbol, size = 32, className }: AssetIconProps) => {\n const resolved = aliases[symbol.toLowerCase()] ?? symbol.toLowerCase()\n return (\n <img\n src={`/assets/${resolved}.svg`}\n alt={symbol}\n width={size}\n height={size}\n className={cn('object-contain', className)}\n onError={(e) => {\n const target = e.currentTarget\n if (!target.src.endsWith('/assets/generic.svg')) {\n target.src = '/assets/generic.svg'\n }\n }}\n />\n )\n}\n","'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Copy01Icon, Tick01Icon } from '@hugeicons/core-free-icons'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\n\nimport { Button } from '../ui/button'\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nexport interface CopyButtonProps {\n className?: string,\n label?: string\n size?: 'default' | 'sm' | 'xs' | 'icon' | 'icon-xs' | 'icon-sm',\n value: string,\n variant?: 'default' | 'outline' | 'ghost' | 'secondary'\n}\n\nexport const CopyButton = ({\n value,\n label,\n variant = 'outline',\n size = 'icon-xs',\n className,\n}: CopyButtonProps) => {\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const shouldReduceMotion = useReducedMotion()\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => setCopied(false), 2000)\n }\n\n let ariaLabel: string | undefined\n if (!label) {\n ariaLabel = copied ? 'Copied' : 'Copy to clipboard'\n }\n\n return (\n <Button\n variant={variant}\n size={size}\n onClick={handleCopy}\n aria-label={ariaLabel}\n className={cn(\n 'transition-[color,background-color,box-shadow] duration-150',\n copied && 'text-[var(--text-success)]',\n className\n )}\n >\n <AnimatePresence mode='wait' initial={false}>\n {copied ? (\n <motion.span\n key='check'\n initial={shouldReduceMotion ? false : { opacity: 0, scale: 0.25 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0, scale: 0.25 }}\n transition={spring}\n className='flex items-center gap-1.5'\n >\n <HugeiconsIcon icon={Tick01Icon} size={14} />\n {label && <span>Copied</span>}\n </motion.span>\n ) : (\n <motion.span\n key='copy'\n initial={shouldReduceMotion ? false : { opacity: 0, scale: 0.25 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0, scale: 0.25 }}\n transition={spring}\n className='flex items-center gap-1.5'\n >\n <HugeiconsIcon icon={Copy01Icon} size={14} />\n {label && <span>{label}</span>}\n </motion.span>\n )}\n </AnimatePresence>\n </Button>\n )\n}\n","'use client'\n\nimport { forwardRef, useMemo, useRef, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\n\nimport { cn } from '../../lib/utils'\nimport { CopyButton } from '../copy-button'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\ntype CodeBlockVariant = 'dark' | 'light'\n\ninterface CodeBlockProps {\n className?: string,\n code: string,\n language?: string\n showLineNumbers?: boolean\n showTerminalPrompt?: boolean\n showWindowChrome?: boolean,\n title?: string,\n variant?: CodeBlockVariant\n}\n\nconst variantStyles = {\n dark: {\n chromeDot: 'bg-[var(--border-hover)]',\n code: 'text-[var(--foreground)]',\n copyBtn: 'text-[var(--text-disabled)] hover:text-[var(--foreground)] hover:bg-white/[0.06]',\n header: 'border-white/[0.05] bg-[var(--bg-default)]',\n headerText: 'text-[var(--muted-foreground)]',\n lineNumber: 'text-[var(--text-disabled)]',\n prompt: 'text-[var(--muted-foreground)]',\n tabActive: 'bg-white/[0.08] text-[var(--foreground)]',\n tabInactive: 'text-[var(--text-disabled)] hover:text-[var(--foreground)]',\n wrapper: 'bg-[var(--card)] text-[var(--foreground)] shadow-[0_0_0_1px_var(--border)]',\n },\n light: {\n chromeDot: 'bg-muted-foreground/15',\n code: 'text-foreground',\n copyBtn: 'text-muted-foreground/60 hover:text-foreground hover:bg-black/[0.04]',\n header: 'border-border/60 bg-[var(--muted)]/40',\n headerText: 'text-muted-foreground',\n lineNumber: 'text-muted-foreground/30',\n prompt: 'text-muted-foreground/40',\n tabActive: 'bg-background text-foreground shadow-[0_1px_2px_rgba(0,0,0,0.05)]',\n tabInactive: 'text-muted-foreground hover:text-foreground',\n wrapper: 'bg-white text-foreground shadow-[var(--shadow-card)]',\n },\n}\n\nconst CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n title,\n language: _language,\n showLineNumbers = false,\n showTerminalPrompt = false,\n variant = 'dark',\n showWindowChrome = false,\n className,\n },\n ref\n ) => {\n const lines = code.split('\\n')\n const s = variantStyles[variant]\n\n return (\n <div\n ref={ref}\n className={cn('rounded-xl overflow-hidden', s.wrapper, className)}\n >\n {(title || showWindowChrome) && (\n <div\n className={cn(\n 'flex items-center justify-between border-b px-4 py-2.5',\n s.header\n )}\n >\n <div className='flex items-center gap-3'>\n {showWindowChrome && (\n <div className='flex gap-[6px]' aria-hidden='true'>\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n </div>\n )}\n {title && (\n <span className={cn('text-[13px] font-medium', s.headerText)}>\n {title}\n </span>\n )}\n </div>\n <CopyButton\n value={code}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n )}\n <div className='relative group'>\n {!title && !showWindowChrome && (\n <div className='absolute top-2.5 right-2.5 opacity-0 group-hover:opacity-100 transition-[opacity] duration-150'>\n <CopyButton\n value={code}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n )}\n <pre\n className={cn(\n 'overflow-x-auto px-4 py-3.5 text-[13px] font-mono leading-relaxed',\n !title && !showWindowChrome && 'pr-10',\n variant === 'dark' && 'bg-[var(--background)]'\n )}\n >\n <code>\n {showLineNumbers\n ? lines.map((line, i) => (\n <span key={`L${i}:${line}`} className='table-row'>\n <span\n className={cn(\n 'table-cell pr-4 text-right select-none tabular-nums w-[2ch]',\n s.lineNumber\n )}\n >\n {i + 1}\n </span>\n <span className='table-cell'>\n {showTerminalPrompt && i === 0 && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {line}\n </span>\n {i < lines.length - 1 && '\\n'}\n </span>\n ))\n : (\n <>\n {showTerminalPrompt && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {code}\n </>\n )}\n </code>\n </pre>\n </div>\n </div>\n )\n }\n)\n\nCodeBlock.displayName = 'CodeBlock'\n\ninterface PackageManagerTabsProps {\n className?: string,\n npm: string,\n pnpm?: string\n showTerminalPrompt?: boolean,\n variant?: CodeBlockVariant,\n yarn?: string\n}\n\nconst PackageManagerTabs = ({\n npm,\n yarn,\n pnpm,\n variant = 'dark',\n showTerminalPrompt = true,\n className,\n}: PackageManagerTabsProps) => {\n const tabs = useMemo(\n () => [\n { code: npm, id: 'npm' as const, label: 'npm' },\n ...(yarn ? [{ code: yarn, id: 'yarn' as const, label: 'yarn' }] : []),\n ...(pnpm ? [{ code: pnpm, id: 'pnpm' as const, label: 'pnpm' }] : []),\n ],\n [npm, yarn, pnpm]\n )\n\n const [activeIndex, setActiveIndex] = useState(0)\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n const shouldReduceMotion = useReducedMotion()\n\n const s = variantStyles[variant]\n const activeTab = tabs[activeIndex]\n const activeCode = activeTab?.code || npm\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleKeyDown = (e: React.KeyboardEvent, index: number) => {\n let nextIndex: number\n switch (e.key) {\n case 'ArrowRight':\n nextIndex = (index + 1) % tabs.length\n break\n case 'ArrowLeft':\n nextIndex = (index - 1 + tabs.length) % tabs.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = tabs.length - 1\n break\n default:\n return\n }\n e.preventDefault()\n setActiveIndex(nextIndex)\n tabRefs.current[nextIndex]?.focus()\n }\n\n return (\n <div\n className={cn('rounded-xl overflow-hidden', s.wrapper, className)}\n >\n <div\n className={cn(\n 'flex items-center justify-between border-b px-3 py-2',\n s.header\n )}\n >\n <div\n className='flex gap-0.5 rounded-lg p-0.5'\n role='tablist'\n aria-label='Package manager'\n >\n {tabs.map((tab, i) => (\n <button\n key={tab.id}\n ref={(el) => { tabRefs.current[i] = el }}\n role='tab'\n aria-selected={activeIndex === i}\n aria-controls={`panel-${tab.id}`}\n tabIndex={activeIndex === i ? 0 : -1}\n onClick={() => setActiveIndex(i)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n className={cn(\n 'relative px-3 py-1 rounded-md text-[13px] font-medium transition-[color,background-color,box-shadow] duration-150 touch-manipulation cursor-pointer',\n activeIndex === i ? s.tabActive : s.tabInactive\n )}\n >\n <motion.span\n whileTap={shouldReduceMotion ? undefined : { scale: 0.95 }}\n transition={spring}\n >\n {tab.label}\n </motion.span>\n </button>\n ))}\n </div>\n <CopyButton\n value={activeCode}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n <div\n id={`panel-${activeTab?.id}`}\n role='tabpanel'\n aria-labelledby={activeTab?.id}\n >\n <pre className={cn('overflow-x-auto px-4 py-3.5 text-[13px] font-mono', variant === 'dark' && 'bg-[var(--background)]')}>\n <code>\n {showTerminalPrompt && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {activeCode}\n </code>\n </pre>\n </div>\n </div>\n )\n}\n\nexport { CodeBlock, PackageManagerTabs }\nexport type { CodeBlockProps, PackageManagerTabsProps, CodeBlockVariant }\n","'use client'\n\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Alert01Icon } from '@hugeicons/core-free-icons'\n\nimport { Button } from '../ui/button'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../ui/alert-dialog'\nimport { cn } from '../../lib/utils'\n\nexport interface DangerZoneProps {\n actionLabel: string,\n className?: string,\n confirmDescription?: string,\n confirmTitle?: string\n description: string,\n onConfirm: () => void\n title: string\n}\n\nexport const DangerZone = ({\n title,\n description,\n actionLabel,\n confirmTitle,\n confirmDescription,\n onConfirm,\n className,\n}: DangerZoneProps) => {\n return (\n <div className={cn(\n 'rounded-xl border border-[var(--border-danger)]/30 p-6 shadow-[var(--shadow-card)] bg-card',\n className\n )}>\n <div className='flex items-start gap-3'>\n <div className='flex size-8 shrink-0 items-center justify-center rounded-lg bg-[var(--danger-light)]'>\n <HugeiconsIcon icon={Alert01Icon} size={16} className='text-[var(--text-danger)]' />\n </div>\n <div className='flex-1 min-w-0'>\n <h3 className='text-sm font-semibold text-[var(--text-danger)] text-balance'>{title}</h3>\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{description}</p>\n <div className='mt-4'>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant='destructive'>{actionLabel}</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{confirmTitle || title}</AlertDialogTitle>\n <AlertDialogDescription>\n {confirmDescription || description}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={onConfirm}\n className='bg-destructive text-white hover:bg-destructive/90'\n >\n {actionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Add01Icon, Cancel01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\nimport { cn } from '../../lib/utils';\n\nexport interface DomainListProps {\n className?: string;\n domains: string[];\n onChange: (domains: string[]) => void;\n placeholder?: string;\n validate?: (domain: string) => string | null;\n}\n\nconst DomainList = ({\n className,\n domains,\n onChange,\n placeholder = 'https://example.com',\n validate,\n}: DomainListProps) => {\n const [inputValue, setInputValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const handleAdd = () => {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n\n if (validate) {\n const validationError = validate(trimmed);\n if (validationError) {\n setError(validationError);\n return;\n }\n }\n\n if (domains.includes(trimmed)) {\n setError('Already added');\n return;\n }\n\n onChange([...domains, trimmed]);\n setInputValue('');\n setError(null);\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleRemove = (domain: string) => {\n onChange(domains.filter((d) => d !== domain));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAdd();\n }\n };\n\n return (\n <div className={cn('space-y-3', className)}>\n <div className='flex gap-2'>\n <div className='flex-1'>\n <Input\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setError(null);\n }}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-invalid={!!error}\n />\n {error && (\n <p className='text-xs text-[var(--text-danger)] mt-1'>{error}</p>\n )}\n </div>\n <Button\n variant='outline'\n size='default'\n onClick={handleAdd}\n disabled={!inputValue.trim()}\n type='button'\n >\n <HugeiconsIcon icon={Add01Icon} size={16} />\n Add\n </Button>\n </div>\n {domains.length > 0 && (\n <ul className='space-y-1.5'>\n {domains.map((domain) => (\n <li\n key={domain}\n className='flex items-center justify-between gap-2 rounded-md border bg-[var(--bg-bottom)] px-3 py-2 text-sm'\n >\n <span className='font-mono text-sm truncate'>{domain}</span>\n <button\n type='button'\n onClick={() => handleRemove(domain)}\n className=\"shrink-0 rounded-sm p-0.5 text-muted-foreground hover:text-[var(--text-danger)] transition-[color] duration-150 relative before:absolute before:-inset-[11px] before:content-['']\"\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n};\n\nexport { DomainList };\n","import { type ComponentType, type ReactNode } from 'react'\n\nimport { cn } from '../../lib/utils'\n\nexport interface EmptyStateProps {\n action?: ReactNode,\n className?: string,\n description: string\n icon: ComponentType<{ className?: string; size?: number }>,\n title: string\n}\n\nexport const EmptyState = ({ icon: Icon, title, description, action, className }: EmptyStateProps) => {\n return (\n <div className={cn('flex flex-col items-center justify-center py-16 px-8 text-center', className)}>\n <div className='flex size-12 items-center justify-center rounded-xl bg-muted mb-4'>\n <Icon className='size-6 text-muted-foreground' />\n </div>\n <h3 className='text-sm font-semibold'>{title}</h3>\n <p className='text-sm text-muted-foreground mt-1 max-w-sm'>{description}</p>\n {action && <div className='mt-4'>{action}</div>}\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Cancel01Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\n\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nexport interface InfoBannerProps {\n children: ReactNode\n className?: string,\n dismissible?: boolean,\n onDismiss?: () => void\n}\n\nexport const InfoBanner = ({\n children,\n dismissible = false,\n onDismiss,\n className,\n}: InfoBannerProps) => {\n const [dismissed, setDismissed] = useState(false)\n const shouldReduceMotion = useReducedMotion()\n\n if (dismissed) return null\n\n return (\n <div className={cn(\n 'flex items-center gap-2 rounded-lg border border-border bg-muted/50 px-3 py-2 text-sm text-muted-foreground',\n className\n )}>\n <span className='text-muted-foreground shrink-0'><HugeiconsIcon icon={InformationCircleIcon} size={16} /></span>\n <div className='flex-1 min-w-0 text-pretty'>{children}</div>\n {dismissible && (\n <motion.button\n whileTap={shouldReduceMotion ? undefined : { scale: 0.96 }}\n transition={spring}\n onClick={() => {\n setDismissed(true)\n onDismiss?.()\n }}\n className=\"relative before:absolute before:-inset-[13px] before:content-[''] shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-[opacity] touch-manipulation cursor-pointer\"\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n </motion.button>\n )}\n </div>\n )\n}\n","import { useMemo } from 'react'\n\nimport { Skeleton } from '../ui/skeleton'\nimport { cn } from '../../lib/utils'\n\nconst buildIdList = (length: number): string[] =>\n Array.from({ length }, () => crypto.randomUUID())\n\n/** Full-page skeleton with header and content area */\nexport const PageSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('space-y-6 p-6', className)}>\n <div className='space-y-2'>\n <Skeleton className='h-8 w-48' />\n <Skeleton className='h-4 w-96' />\n </div>\n <div className='grid grid-cols-1 md:grid-cols-3 gap-4'>\n <StatCardSkeleton />\n <StatCardSkeleton />\n <StatCardSkeleton />\n </div>\n <TableSkeleton rows={5} />\n </div>\n )\n}\n\n/** Stat/metric card skeleton */\nexport const StatCardSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('rounded-xl p-5 shadow-[var(--shadow-card)] bg-card', className)}>\n <div className='flex items-center justify-between mb-3'>\n <Skeleton className='h-4 w-24' />\n <Skeleton className='size-8 rounded-lg' />\n </div>\n <Skeleton className='h-8 w-20 mb-1' />\n <Skeleton className='h-4 w-16' />\n </div>\n )\n}\n\n/** Table skeleton with configurable rows */\nexport const TableSkeleton = ({\n rows = 5,\n columns = 4,\n className,\n}: {\n className?: string,\n columns?: number\n rows?: number\n}) => {\n // Stable identity keys so React doesn't remount on re-render. Indices are\n // unsuitable here because the lists are fixed-length but Sonar's S6479 flags\n // index-derived keys.\n const headerIds = useMemo(() => buildIdList(columns), [columns])\n const rowIds = useMemo(() => buildIdList(rows), [rows])\n const colIds = useMemo(() => buildIdList(columns), [columns])\n\n return (\n <div className={cn('rounded-xl border shadow-[var(--shadow-card)] bg-card overflow-hidden', className)}>\n {/* Header */}\n <div className='flex items-center gap-4 px-4 py-3 border-b'>\n {headerIds.map((id) => (\n <Skeleton key={id} className='h-4 flex-1' />\n ))}\n </div>\n {/* Rows */}\n {rowIds.map((rowId) => (\n <div\n key={rowId}\n className='flex items-center gap-4 px-4 py-3 border-b last:border-b-0'\n >\n {colIds.map((colId, colIdx) => (\n <Skeleton\n key={`${rowId}-${colId}`}\n className={cn(\n 'h-4 flex-1',\n colIdx === 0 && 'max-w-32',\n colIdx === columns - 1 && 'max-w-16'\n )}\n />\n ))}\n </div>\n ))}\n </div>\n )\n}\n\n/** Card skeleton */\nexport const CardSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('rounded-xl p-6 shadow-[var(--shadow-card)] bg-card space-y-4', className)}>\n <div className='space-y-2'>\n <Skeleton className='h-5 w-32' />\n <Skeleton className='h-4 w-48' />\n </div>\n <Skeleton className='h-24 w-full' />\n <div className='flex gap-2'>\n <Skeleton className='h-9 w-20' />\n <Skeleton className='h-9 w-20' />\n </div>\n </div>\n )\n}\n","import { type ComponentType } from 'react'\n\nimport { cn } from '../../lib/utils'\nimport { Skeleton } from '../ui/skeleton'\n\ntype Trend = 'up' | 'down' | 'neutral'\n\ntype IconComponent = ComponentType<{ className?: string; size?: number }>\n\ninterface MetricCardBaseProps {\n className?: string,\n icon?: IconComponent\n label: string,\n loading?: boolean\n}\n\nexport interface MetricCardActiveProps extends MetricCardBaseProps {\n inactive?: false\n trend?: Trend,\n trendValue?: string,\n value: string | number\n}\n\nexport interface MetricCardInactiveProps extends MetricCardBaseProps {\n inactive: true\n onSetup: () => void,\n setupDescription?: string,\n setupLabel: string,\n trend?: never,\n trendValue?: never,\n value?: never\n}\n\ntype MetricCardProps = MetricCardActiveProps | MetricCardInactiveProps\n\nconst trendColor: Record<Trend, string> = {\n down: 'text-[var(--text-danger)]',\n neutral: 'text-muted-foreground',\n up: 'text-[var(--text-success)]',\n}\n\nexport const MetricCard = (props: MetricCardProps) => {\n const { label, icon: Icon, loading = false, className } = props\n\n if (loading) {\n return (\n <div className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}>\n <Skeleton className='h-3.5 w-20 mb-2.5' />\n <Skeleton className='h-7 w-24' />\n </div>\n )\n }\n\n if (props.inactive) {\n return (\n <div\n className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}\n >\n <div className='flex items-center gap-1.5'>\n {Icon && <Icon className='size-3.5 text-muted-foreground' />}\n <span className='text-[13px] text-muted-foreground font-medium'>{label}</span>\n </div>\n <div className='text-2xl font-semibold tracking-tight text-muted-foreground/30 tabular-nums mt-1.5'>0</div>\n </div>\n )\n }\n\n return (\n <div className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}>\n <div className='flex items-center gap-1.5'>\n {Icon && <Icon className='size-3.5 text-muted-foreground' />}\n <span className='text-[13px] text-muted-foreground font-medium'>{label}</span>\n </div>\n <div className='flex items-baseline gap-2 mt-1.5'>\n <span className='text-2xl font-semibold tracking-tight tabular-nums'>{props.value}</span>\n {props.trend && props.trendValue && (\n <span className={cn('text-xs font-medium tabular-nums', trendColor[props.trend])}>\n {props.trendValue}\n </span>\n )}\n </div>\n </div>\n )\n}\n","'use client';\n\n/**\n * Placeholder stub for the docs-AI sheet.\n *\n * Renders nothing in droplet — the real sheet lives in the consumer app and\n * subscribes to the `docsPath` to surface contextual AI help. Kept here so\n * `PageActions` can mount it unconditionally without each consumer wiring it.\n */\nexport const AskAISheet = ({ docsPath: _docsPath }: { docsPath?: string }) => {\n return null;\n};\n","import { HugeiconsIcon } from '@hugeicons/react'\nimport { WebhookIcon } from '@hugeicons/core-free-icons'\nimport Link from 'next/link'\n\nimport { Button } from '../ui/button'\nimport { AskAISheet } from '../ask-ai-sheet'\n\nexport const AskAIAction = ({ docsPath }: { docsPath?: string }) => {\n return <AskAISheet docsPath={docsPath} />\n}\n\nexport const WebhooksAction = () => {\n return (\n <Button variant='outline' size='sm' asChild>\n <Link href='/dashboard/developers?tab=webhooks'>\n <HugeiconsIcon icon={WebhookIcon} size={14} />\n Webhooks\n </Link>\n </Button>\n )\n}\n","'use client'\n\nimport { type ReactNode } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\n\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\ninterface Tab {\n description?: string,\n heading?: string,\n id: string,\n label: string\n}\n\nexport interface ProductPageLayoutProps {\n activeTab: string,\n children: ReactNode,\n headerActions?: ReactNode,\n headerContent?: ReactNode,\n onTabChange: (tabId: string) => void,\n sidebarFooter?: ReactNode,\n tabs: Tab[],\n title: string\n}\n\nexport const ProductPageLayout = ({\n title,\n tabs,\n activeTab,\n onTabChange,\n children,\n headerActions,\n headerContent,\n sidebarFooter,\n}: ProductPageLayoutProps) => {\n const activeTabConfig = tabs.find((t) => t.id === activeTab)\n const shouldReduceMotion = useReducedMotion()\n\n return (\n <div className='flex h-full'>\n {/* Sub-nav sidebar */}\n <nav className='w-52 shrink-0 bg-background overflow-y-auto py-4 px-3 flex flex-col'>\n <h2 className='px-3 mb-3 text-sm font-semibold text-balance'>{title}</h2>\n <div className='flex flex-col gap-0.5'>\n {tabs.map((tab) => (\n <motion.button\n key={tab.id}\n whileTap={shouldReduceMotion ? undefined : { scale: 0.96 }}\n transition={spring}\n onClick={() => onTabChange(tab.id)}\n className={cn(\n 'flex items-center rounded-md px-3 py-1.5 text-[13px] font-medium transition-[color,background-color] text-left touch-manipulation',\n activeTab === tab.id\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n >\n {tab.label}\n </motion.button>\n ))}\n </div>\n {sidebarFooter && (\n <div className='mt-auto pt-4'>\n {sidebarFooter}\n </div>\n )}\n </nav>\n\n {/* Content area */}\n <div className='flex-1 overflow-auto'>\n <div className='px-10 py-8 space-y-8'>\n {headerContent ?? (\n <div className='flex items-start justify-between gap-4'>\n <div>\n <h1 className='text-2xl font-semibold text-balance'>{activeTabConfig?.heading ?? activeTabConfig?.label ?? activeTab}</h1>\n {activeTabConfig?.description && (\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{activeTabConfig.description}</p>\n )}\n </div>\n {headerActions && (\n <div className='flex items-center gap-2 shrink-0'>\n {headerActions}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </div>\n )\n}\n","import { type ReactNode } from 'react'\n\nimport { cn } from '../../lib/utils'\n\nexport interface SettingsSectionProps {\n children: ReactNode,\n className?: string,\n description?: string,\n title: string,\n variant?: 'default' | 'danger'\n}\n\nexport const SettingsSection = ({\n title,\n description,\n children,\n variant = 'default',\n className,\n}: SettingsSectionProps) => {\n return (\n <div className={cn(\n 'rounded-xl border p-6 shadow-[var(--shadow-card)] bg-card',\n variant === 'danger' && 'border-[var(--border-danger)]/30',\n className\n )}>\n <div className='mb-4'>\n <h3 className={cn(\n 'text-sm font-semibold text-balance',\n variant === 'danger' && 'text-[var(--text-danger)]'\n )}>\n {title}\n </h3>\n {description && (\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{description}</p>\n )}\n </div>\n <div className='space-y-4'>\n {children}\n </div>\n </div>\n )\n}\n","import { Badge } from '../ui/badge'\nimport { cn } from '../../lib/utils'\n\ntype StatusType = 'active' | 'inactive' | 'blocked' | 'pending' | 'live' | 'sandbox' | 'processing'\n\nconst statusConfig: Record<StatusType, { dot: boolean, label: string; variant: 'success' | 'inactive' | 'danger' | 'warning' | 'brand' | 'process'; }> = {\n active: { dot: true, label: 'Active', variant: 'success' },\n blocked: { dot: true, label: 'Blocked', variant: 'danger' },\n inactive: { dot: true, label: 'Inactive', variant: 'inactive' },\n live: { dot: true, label: 'Live', variant: 'success' },\n pending: { dot: true, label: 'Pending', variant: 'warning' },\n processing: { dot: true, label: 'Processing', variant: 'process' },\n sandbox: { dot: true, label: 'Sandbox', variant: 'warning' },\n}\n\nexport interface StatusBadgeProps {\n className?: string,\n label?: string\n status: StatusType\n}\n\nexport const StatusBadge = ({ status, label, className }: StatusBadgeProps) => {\n const config = statusConfig[status]\n\n return (\n <Badge variant={config.variant} className={cn('gap-1.5', className)}>\n {config.dot && (\n <span className='size-1.5 rounded-full bg-current opacity-70' />\n )}\n {label || config.label}\n </Badge>\n )\n}\n","/**\n * ToggleCard — droplet's rich toggle composite.\n *\n * Rebuilt from Northstar's SingleToggleCard to support the redcoast dashboard\n * migration. ToggleRow (sibling primitive) remains the minimal/canonical\n * single-line toggle; ToggleCard is the multi-feature card variant with:\n * - Accordion expand/collapse for nested children\n * - Pluggable input type: switch (default), radio, or checkbox\n * - Optional left icon\n * - Tags row above the title and a RightSideTags slot on the right\n * - Optional notification dot in the trigger\n * - Optional `actionLink` rendered below content\n * - Optional `customActionIcon` rendered alongside the trigger affordance\n * - Whole-card click handler\n *\n * The API mirrors Northstar SingleToggleCard so a redcoast migration can be a\n * mechanical rename. Where the Northstar API surfaced layout-tuning props\n * (`disableHover`, `dontSeparateContentFromHeader`, `descriptionModificators`,\n * `titleModificators`) the equivalent expression here is via Tailwind classes\n * on `className` or `triggerClassName`.\n *\n * Authored in droplet so a single canonical card is available across teams.\n * Backed by Card + Switch/Checkbox/RadioGroup + Radix Accordion.\n */\nimport {\n type ChangeEvent,\n type FC,\n type ReactElement,\n type ReactNode,\n useId,\n} from 'react';\nimport {\n Content as AccordionContent,\n Header as AccordionHeader,\n Item as AccordionItem,\n Root as AccordionRoot,\n Trigger as AccordionTrigger,\n} from '@radix-ui/react-accordion';\n\nimport { cn } from '../../lib/utils';\nimport { Switch } from '../ui/switch';\nimport { Checkbox } from '../ui/checkbox';\nimport { RadioGroup, RadioGroupItem } from '../ui/radio-group';\n\ntype ToggleCardInputType = 'toggle' | 'radio' | 'checkbox';\n\nexport type ToggleCardInputProps = {\n checked?: boolean;\n disabled?: boolean;\n /** Hide the input control entirely (useful when the row is informational). */\n hidden?: boolean;\n id?: string;\n /** When true, renders a lock badge instead of a switch — signals the value\n * is fixed and cannot be toggled via this UI. Implies disabled. */\n isLocked?: boolean;\n /** Indicates the saved/unsaved state via styling — informational, optional. */\n isSaved?: boolean;\n /** When true, paints the input with the warning accent (informational). */\n isWarning?: boolean;\n name?: string;\n /** Native onChange — receives a synthetic event for parity with HTML inputs. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Controls which control element renders next to the title. */\n type?: ToggleCardInputType;\n};\n\nexport type ToggleCardTag = {\n Tag: ReactElement;\n id: string;\n};\n\nexport type ToggleCardActionLink = {\n onClick: () => void;\n text: string;\n};\n\nexport type ToggleCardCustomActionIcon = {\n Icon: ReactElement;\n className?: string;\n};\n\nexport type ToggleCardProps = {\n /** Optional icon rendered before the title. */\n Icon?: ReactElement;\n /** Tags shown on the RIGHT side of the trigger (e.g. status badges). */\n RightSideTags?: ToggleCardTag[];\n /** Tags shown ABOVE the title (e.g. status pills). */\n Tags?: ToggleCardTag[];\n /** Required key for Radix Accordion item identity. */\n accordionKey: string;\n /** Action button rendered at the bottom of expanded content. */\n actionLink?: ToggleCardActionLink;\n /** Whether the accordion CAN expand. Defaults to true. */\n allowExpand?: boolean;\n /** Children — rendered inside the AccordionContent when expanded. */\n children?: ReactNode;\n /** className applied to the outer Accordion root. */\n className?: string;\n /** Whether the accordion can be collapsed (Radix `collapsible`). */\n collapsible?: boolean;\n /** Replaces the default chevron with a custom icon. */\n customActionIcon?: ToggleCardCustomActionIcon;\n /** Whether the accordion is expanded by default. */\n defaultExpanded?: boolean;\n /** Optional secondary line below the title. */\n description?: string;\n /** Disables the entire card (input + trigger). */\n disabled?: boolean;\n /** Inputs (toggle/radio/checkbox) rendered alongside the title. */\n inputProps?: ToggleCardInputProps;\n /** When true, draws a notification dot on the trigger. */\n notification?: boolean;\n /**\n * Click handler for the whole card surface.\n *\n * @deprecated Currently a no-op: attaching onClick to a wrapper that nests\n * interactive children (AccordionTrigger, Switch / Checkbox / RadioGroup)\n * is an a11y anti-pattern. Kept in the type signature for Northstar\n * mechanical-rename parity. A future iteration may re-introduce this with\n * a dedicated click target (e.g. an overlay button) outside the nested\n * interactives.\n */\n onCardClick?: () => void;\n /** Accordion value-change handler. */\n onValueChange?: (value: string | undefined) => void;\n /** Card title — rendered as the primary label inside the trigger. */\n title?: string;\n /** className applied to the trigger row. */\n triggerClassName?: string;\n /** Test id applied to the accordion trigger element. */\n triggerTestId?: string;\n /** Controlled accordion value. */\n value?: string;\n};\n\nconst inputCommon =\n 'shrink-0 touch-manipulation cursor-pointer disabled:cursor-not-allowed disabled:opacity-50';\n\n// Internal helper — two positional params are clearer here than wrapping in\n// an object. Signature is private to this module.\n// eslint-disable-next-line custom-rules/require-single-object-param\nconst renderInput = (input: ToggleCardInputProps | undefined, id: string) => {\n if (!input || input.hidden) return null;\n // Locked state: render a compact lock badge instead of a switch. Signals to\n // users that the value is fixed by an external constraint (plan tier,\n // global setting, etc.) and cannot be changed via this control.\n if (input.isLocked) {\n return (\n <div\n aria-label='Locked'\n title='Locked'\n className='shrink-0 inline-flex items-center justify-center size-5 rounded-full bg-muted text-muted-foreground mt-0.5'\n >\n <svg\n className='size-3'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n >\n <rect x='3' y='11' width='18' height='11' rx='2' ry='2' />\n <path d='M7 11V7a5 5 0 0110 0v4' />\n </svg>\n </div>\n );\n }\n const type = input.type ?? 'toggle';\n // Internal handler — single boolean is the natural shape for an onChange\n // callback. Wrapping in an object would be ceremony.\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleChange = (next: boolean) => {\n if (!input.onChange) return;\n // Synthesize a minimal ChangeEvent so consumers expecting native event\n // shape keep working.\n input.onChange({\n target: { checked: next, name: input.name ?? '' },\n } as ChangeEvent<HTMLInputElement>);\n };\n if (type === 'toggle') {\n return (\n <Switch\n id={input.id ?? id}\n checked={Boolean(input.checked)}\n disabled={input.disabled}\n onCheckedChange={handleChange}\n className={cn(inputCommon, 'mt-0.5')}\n />\n );\n }\n if (type === 'checkbox') {\n return (\n <Checkbox\n id={input.id ?? id}\n checked={Boolean(input.checked)}\n disabled={input.disabled}\n onCheckedChange={(state) => handleChange(state === true)}\n className={cn(inputCommon, 'mt-1')}\n />\n );\n }\n // radio — wrap in a single-item RadioGroup so semantics are preserved\n return (\n <RadioGroup\n value={input.checked ? input.id ?? id : ''}\n onValueChange={(v) => handleChange(v === (input.id ?? id))}\n disabled={input.disabled}\n className='shrink-0 mt-0.5'\n >\n <RadioGroupItem\n id={input.id ?? id}\n value={input.id ?? id}\n className={inputCommon}\n />\n </RadioGroup>\n );\n};\n\nexport const ToggleCard: FC<ToggleCardProps> = ({\n accordionKey,\n title,\n description,\n // Note: the `Icon` prop is accepted in ToggleCardProps for API parity with\n // Northstar's SingleToggleCard but intentionally not destructured/rendered\n // here (toggle cards do not render a leading icon per droplet design).\n // Drop the prop at the migration sweep when touching each consumer.\n inputProps,\n allowExpand = true,\n defaultExpanded,\n value,\n onValueChange,\n collapsible = true,\n Tags,\n RightSideTags,\n notification,\n actionLink,\n customActionIcon,\n // Intentionally unused — see ToggleCardProps['onCardClick'] JSDoc.\n onCardClick: _onCardClick,\n children,\n disabled,\n triggerTestId,\n className,\n triggerClassName,\n}) => {\n const generatedId = useId();\n const inputId = inputProps?.id ?? generatedId;\n // Parent-with-nested-children mode: the trigger row is the \"section header\"\n // for a group of sub-toggles. Visual hierarchy reads correctly when the\n // header sits on a muted/grey surface and the nested children get the\n // clean white card surface below.\n const isParentMode = !allowExpand && Boolean(children);\n\n // Extracted to keep the main render's cognitive complexity below the\n // Sonar threshold. Content sits inside an AccordionContent when\n // expandable, or directly under the header when not.\n const renderContent = () => {\n const actionLinkButton = actionLink ? (\n <button\n type='button'\n onClick={actionLink.onClick}\n className='mt-3 text-sm font-medium text-(--action) hover:underline underline-offset-4 cursor-pointer'\n >\n {actionLink.text}\n </button>\n ) : null;\n\n if (allowExpand) {\n return (\n <AccordionContent className='border-t border-border-divider px-5 py-4'>\n {children}\n {actionLinkButton}\n </AccordionContent>\n );\n }\n\n // When the accordion can't expand, children still render as nested\n // content below the header. Used for the \"parent + sub-toggles\"\n // pattern. Children sit on the clean card surface (white) so the\n // visual contrast with the grey header above signals the hierarchy.\n if (!children && !actionLink) return null;\n return (\n <div className='border-t border-border-divider bg-card px-5 py-3 space-y-2'>\n {children}\n {actionLinkButton}\n </div>\n );\n };\n\n return (\n <AccordionRoot\n type='single'\n collapsible={collapsible}\n defaultValue={defaultExpanded ? accordionKey : undefined}\n value={value}\n onValueChange={onValueChange}\n data-slot='toggle-card'\n className={cn(\n 'rounded-xl bg-card shadow-card overflow-hidden',\n disabled && 'opacity-60',\n className,\n )}\n >\n <AccordionItem value={accordionKey} className='border-0'>\n <AccordionHeader className='m-0'>\n {/* The wrapper is intentionally non-interactive. `onCardClick` is\n kept in the API for Northstar parity but currently no-ops —\n attaching an onClick here is an a11y anti-pattern because the\n wrapper nests an AccordionTrigger button and the input control\n (switch / checkbox / radio). Adding role='button' + tabIndex\n would either nest two interactives or trigger Sonar's \"use\n <button> instead of role\" rule. Consumers that need\n whole-card-click should wire it to a specific child instead. */}\n <div\n className={cn(\n 'group flex items-start gap-3 px-5 py-4',\n isParentMode && 'bg-bg-bottom',\n triggerClassName,\n )}\n >\n {renderInput(inputProps, inputId)}\n <div className='flex-1 min-w-0'>\n {title && (\n <div className='flex items-baseline gap-1.5 flex-wrap leading-5'>\n <label\n htmlFor={inputId}\n className={cn(\n 'text-sm font-medium select-none leading-5',\n disabled && 'text-muted-foreground',\n )}\n >\n {title}\n {notification && (\n <span\n aria-hidden\n className='inline-block ml-1.5 size-1.5 rounded-full bg-destructive align-middle'\n />\n )}\n </label>\n {Tags && Tags.length > 0 && (\n <>\n {Tags.map((t) => (\n <span key={t.id} className='leading-5'>\n {t.Tag}\n </span>\n ))}\n </>\n )}\n </div>\n )}\n {!title && Tags && Tags.length > 0 && (\n <div className='flex items-baseline gap-1.5 mb-1 leading-5'>\n {Tags.map((t) => (\n <span key={t.id} className='leading-5'>\n {t.Tag}\n </span>\n ))}\n </div>\n )}\n {description && (\n <p className='text-sm text-muted-foreground mt-0.5 text-pretty'>\n {description}\n </p>\n )}\n </div>\n <div className='flex items-center gap-2 shrink-0 self-start'>\n {RightSideTags && RightSideTags.length > 0 && (\n <div className='flex items-center gap-1.5'>\n {RightSideTags.map((t) => (\n <span key={t.id}>{t.Tag}</span>\n ))}\n </div>\n )}\n {allowExpand && (\n <AccordionTrigger\n data-testid={triggerTestId}\n className={cn(\n 'shrink-0 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-[transform,background-color] duration-150 hover:bg-overlay-hover [&[data-state=open]>svg]:rotate-180',\n customActionIcon?.className,\n )}\n disabled={!allowExpand}\n >\n {customActionIcon ? (\n customActionIcon.Icon\n ) : (\n <svg\n className='size-4'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n )}\n </AccordionTrigger>\n )}\n </div>\n </div>\n </AccordionHeader>\n {renderContent()}\n </AccordionItem>\n </AccordionRoot>\n );\n};\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ArrowUpRightIconHandle = AnimatedIconHandle;\n\ntype ArrowUpRightIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst ArrowUpRightIcon = forwardRef<ArrowUpRightIconHandle, ArrowUpRightIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M7 17 17 7'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0], y: [0, -2, 0] }, normal: { x: 0, y: 0 } }}\n />\n <motion.path\n animate={controls}\n d='M7 7h10v10'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0], y: [0, -2, 0] }, normal: { x: 0, y: 0 } }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nArrowUpRightIcon.displayName = 'ArrowUpRightIcon';\n\nexport { ArrowUpRightIcon };\n","'use client';\n\nimport type { HTMLAttributes, MouseEvent } from 'react';\nimport { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion, useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface ChartBarIncreasingIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface ChartBarIncreasingIconProps extends HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nconst LINE_VARIANTS: Variants = {\n hidden: { opacity: 0, pathLength: 0 },\n visible: { opacity: 1, pathLength: 1 },\n};\n\nconst transitionFor = (i: number) => ({\n delay: i * 0.1,\n duration: 0.3,\n});\n\nconst ChartBarIncreasingIcon = forwardRef<\n ChartBarIncreasingIconHandle,\n ChartBarIncreasingIconProps\n>(({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n return {\n startAnimation: async () => {\n await controls.start((i) => ({\n opacity: 0,\n pathLength: 0,\n transition: transitionFor(i),\n }));\n await controls.start((i) => ({\n opacity: 1,\n pathLength: 1,\n transition: transitionFor(i),\n }));\n },\n stopAnimation: () => controls.start('visible'),\n };\n });\n\n const handleMouseEnter = useCallback(\n async (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n await controls.start((i) => ({\n opacity: 0,\n pathLength: 0,\n transition: transitionFor(i),\n }));\n await controls.start((i) => ({\n opacity: 1,\n pathLength: 1,\n transition: transitionFor(i),\n }));\n }\n },\n [controls, onMouseEnter],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('visible').catch(() => undefined);\n }\n },\n [controls, onMouseLeave],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn('inline-flex items-center justify-center', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 3v16a2 2 0 0 0 2 2h16' />\n <motion.path\n animate={controls}\n custom={1}\n d='M7 11h8'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n <motion.path\n animate={controls}\n custom={2}\n d='M7 16h12'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n <motion.path\n animate={controls}\n custom={0}\n d='M7 6h3'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n </svg>\n </div>\n );\n});\n\nChartBarIncreasingIcon.displayName = 'ChartBarIncreasingIcon';\n\nexport { ChartBarIncreasingIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ChevronDownIconHandle = AnimatedIconHandle;\n\ntype ChevronDownIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst ChevronDownIcon = forwardRef<ChevronDownIconHandle, ChevronDownIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='m6 9 6 6 6-6'\n transition={DEFAULT_TRANSITION}\n variants={{\n animate: { y: [0, 2, 0] },\n normal: { y: 0 },\n }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\n\nexport { ChevronDownIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ChevronRightIconHandle = AnimatedIconHandle;\n\ntype ChevronRightIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst ChevronRightIcon = forwardRef<ChevronRightIconHandle, ChevronRightIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='m9 18 6-6-6-6'\n transition={{ duration: 0.5, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0] }, normal: { x: 0 } }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nChevronRightIcon.displayName = 'ChevronRightIcon';\n\nexport { ChevronRightIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type CopyIconHandle = AnimatedIconHandle;\n\ntype CopyIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst springTransition = {\n damping: 17,\n mass: 1,\n stiffness: 160,\n type: 'spring' as const,\n};\n\nconst CopyIcon = forwardRef<CopyIconHandle, CopyIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='14'\n rx='2'\n ry='2'\n transition={springTransition}\n variants={{\n animate: { translateX: -3, translateY: -3 },\n normal: { translateX: 0, translateY: 0 },\n }}\n width='14'\n x='8'\n y='8'\n />\n <motion.path\n animate={controls}\n d='M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2'\n transition={springTransition}\n variants={{\n animate: { x: 3, y: 3 },\n normal: { x: 0, y: 0 },\n }}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nCopyIcon.displayName = 'CopyIcon';\n\nexport { CopyIcon };\n","'use client';\n\nimport type { HTMLAttributes, MouseEvent } from 'react';\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport type { Transition } from 'motion/react';\nimport { AnimatePresence, motion, useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface CopyCheckIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n triggerCopied: () => void;\n}\n\ninterface CopyCheckIconProps extends HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nconst SPRING_TRANSITION: Transition = {\n damping: 17,\n mass: 1,\n stiffness: 160,\n type: 'spring',\n};\n\nconst CopyCheckIcon = forwardRef<CopyCheckIconHandle, CopyCheckIconProps>(\n ({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const triggerCopied = useCallback(() => {\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1500);\n }, []);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n triggerCopied,\n };\n });\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (!copied) {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n controls.start('animate').catch(() => undefined);\n }\n }\n },\n [controls, onMouseEnter, copied],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (!copied) {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('normal').catch(() => undefined);\n }\n }\n },\n [controls, onMouseLeave, copied],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn(\n 'relative inline-flex items-center justify-center',\n className,\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <AnimatePresence mode='wait'>\n {copied ? (\n <motion.svg\n key='check'\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={{ duration: 0.15 }}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n className='text-green-500'\n >\n <motion.path\n d='M20 6 9 17l-5-5'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ delay: 0.1, duration: 0.3 }}\n />\n </motion.svg>\n ) : (\n <motion.div\n key='copy'\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={{ duration: 0.15 }}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='14'\n rx='2'\n ry='2'\n transition={SPRING_TRANSITION}\n variants={{\n animate: { translateX: -3, translateY: -3 },\n normal: { translateX: 0, translateY: 0 },\n }}\n width='14'\n x='8'\n y='8'\n />\n <motion.path\n animate={controls}\n d='M8 4V2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.75a2 2 0 0 0-2-2H16a2 2 0 0 0-2-2h-2z'\n transition={SPRING_TRANSITION}\n variants={{\n animate: { x: 3, y: 3 },\n normal: { x: 0, y: 0 },\n }}\n />\n </svg>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n },\n);\n\nCopyCheckIcon.displayName = 'CopyCheckIcon';\n\nexport { CopyCheckIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type DollarSignIconHandle = AnimatedIconHandle;\n\ntype DollarSignIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DOLLAR_MAIN_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n transition: { duration: 0.6, opacity: { duration: 0.1 } },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n transition: { duration: 0.4, opacity: { duration: 0.1 } },\n },\n};\n\nconst DOLLAR_SECONDARY_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n pathOffset: [1, 0],\n transition: {\n delay: 0.5,\n duration: 0.4,\n opacity: { delay: 0.5, duration: 0.1 },\n },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n pathOffset: 0,\n transition: {\n delay: 0.3,\n duration: 0.3,\n opacity: { delay: 0.3, duration: 0.1 },\n },\n },\n};\n\nconst DollarSignIcon = forwardRef<DollarSignIconHandle, DollarSignIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6'\n initial='normal'\n variants={DOLLAR_MAIN_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M12 22 L12 2'\n initial='normal'\n variants={DOLLAR_SECONDARY_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nDollarSignIcon.displayName = 'DollarSignIcon';\n\nexport { DollarSignIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type DownloadIconHandle = AnimatedIconHandle;\n\ntype DownloadIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DownloadIcon = forwardRef<DownloadIconHandle, DownloadIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M12 15V3'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { y: [0, 2, 0] }, normal: { y: 0 } }}\n />\n <motion.path\n animate={controls}\n d='m8 11 4 4 4-4'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { y: [0, 2, 0] }, normal: { y: 0 } }}\n />\n <path d='M20 21H4' />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nDownloadIcon.displayName = 'DownloadIcon';\n\nexport { DownloadIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type FingerprintIconHandle = AnimatedIconHandle;\n\ntype FingerprintIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n opacity: [0, 0, 1, 1, 1],\n pathLength: [0.1, 0.3, 0.5, 0.7, 0.9, 1],\n transition: { opacity: { duration: 0.5 }, pathLength: { duration: 2 } },\n },\n normal: { opacity: 1, pathLength: 1 },\n};\n\nconst FINGERPRINT_PATHS = [\n { d: 'M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4' },\n { d: 'M14 13.12c0 2.38 0 6.38-1 8.88' },\n { d: 'M17.29 21.02c.12-.6.43-2.3.5-3.02' },\n { d: 'M2 12a10 10 0 0 1 18-6' },\n { d: 'M2 16h.01' },\n { d: 'M21.8 16c.2-2 .131-5.354 0-6' },\n { d: 'M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2' },\n { d: 'M8.65 22c.21-.66.45-1.32.57-2' },\n { d: 'M9 6.8a6 6 0 0 1 9 5.2v2' },\n] as const;\n\nconst FingerprintIcon = forwardRef<FingerprintIconHandle, FingerprintIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n {FINGERPRINT_PATHS.map(({ d }) => (\n <path d={d} key={d} strokeOpacity={0.4} />\n ))}\n {FINGERPRINT_PATHS.map(({ d }) => (\n <motion.path\n animate={controls}\n d={d}\n key={`motion-${d}`}\n variants={PATH_VARIANTS}\n />\n ))}\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nFingerprintIcon.displayName = 'FingerprintIcon';\n\nexport { FingerprintIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type HomeIconHandle = AnimatedIconHandle;\n\ntype HomeIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.6,\n opacity: { duration: 0.2 },\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { opacity: [0, 1], pathLength: [0, 1] },\n normal: { opacity: 1, pathLength: 1 },\n};\n\nconst HomeIcon = forwardRef<HomeIconHandle, HomeIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z' />\n <motion.path\n animate={controls}\n d='M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nHomeIcon.displayName = 'HomeIcon';\n\nexport { HomeIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type KeyIconHandle = AnimatedIconHandle;\n\ntype KeyIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst KeyIcon = forwardRef<KeyIconHandle, KeyIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n initial='normal'\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n style={{ originX: 0.3, originY: 0.7 }}\n variants={{\n animate: {\n rotate: [-3, -33, -25, -28],\n transition: {\n duration: 0.6,\n ease: 'easeInOut',\n times: [0, 0.6, 0.8, 1],\n },\n },\n normal: {\n rotate: 0,\n transition: {\n damping: 14,\n duration: 0.8,\n stiffness: 120,\n type: 'spring',\n },\n },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4' />\n <path d='m21 2-9.6 9.6' />\n <circle cx='7.5' cy='15.5' r='5.5' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nKeyIcon.displayName = 'KeyIcon';\n\nexport { KeyIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type LayoutPanelTopIconHandle = AnimatedIconHandle;\n\ntype LayoutPanelTopIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst LayoutPanelTopIcon = forwardRef<\n LayoutPanelTopIconHandle,\n LayoutPanelTopIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.5, times: [0.2, 1] },\n },\n translateY: [-5, 0],\n },\n normal: { opacity: 1, translateY: 0 },\n }}\n width='18'\n x='3'\n y='3'\n />\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.7, times: [0.5, 1] },\n translateX: { delay: 0.3 },\n },\n translateX: [-10, 0],\n },\n normal: { opacity: 1, translateX: 0 },\n }}\n width='7'\n x='3'\n y='14'\n />\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.8, times: [0.5, 1] },\n translateX: { delay: 0.4 },\n },\n translateX: [10, 0],\n },\n normal: { opacity: 1, translateX: 0 },\n }}\n width='7'\n x='14'\n y='14'\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nLayoutPanelTopIcon.displayName = 'LayoutPanelTopIcon';\n\nexport { LayoutPanelTopIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type LinkIconHandle = AnimatedIconHandle;\n\ntype LinkIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n pathLength: [1, 0.97, 1, 0.97, 1],\n pathOffset: [0, 0.05, 0, 0.05, 0],\n rotate: [0, -5, 0],\n transition: {\n duration: 1,\n ease: 'easeInOut',\n rotate: { duration: 0.5 },\n times: [0, 0.2, 0.4, 0.6, 1],\n },\n },\n normal: { pathLength: 1, pathOffset: 0, rotate: 0 },\n};\n\nconst LinkIcon = forwardRef<LinkIconHandle, LinkIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'\n variants={PATH_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nLinkIcon.displayName = 'LinkIcon';\n\nexport { LinkIcon };\n","import { type SVGProps } from 'react';\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const ClaudeLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <path\n d='M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z'\n fill='#D97757'\n fillRule='nonzero'\n />\n </svg>\n);\n\nexport const CursorLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <rect width='24' height='24' rx='5' fill='#F5F5F5' />\n <path d='M12 4L5 8v8l7 4 7-4V8l-7-4z' fill='#E5E5E5' />\n <path d='M12 4L5 8l7 4 7-4-7-4z' fill='#808080' />\n <path d='M12 12l7-4v8l-7 4v-8z' fill='#666' />\n <path d='M12 12L5 8v8l7 4v-8z' fill='#999' />\n </svg>\n);\n\nexport const VSCodeLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 100 100'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <mask\n id='vsc-mask'\n maskUnits='userSpaceOnUse'\n x='0'\n y='0'\n width='100'\n height='100'\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M70.912 99.317C72.487 99.931 74.283 99.891 75.873 99.126L96.461 89.22C98.624 88.179 100 85.989 100 83.587V16.413C100 14.011 98.624 11.822 96.461 10.781L75.873 0.874C73.786 -0.13 71.345 0.116 69.513 1.447C69.252 1.637 69.003 1.849 68.769 2.083L29.355 38.041L12.187 25.01C10.589 23.797 8.354 23.896 6.869 25.246L1.363 30.255C-0.453 31.906 -0.455 34.763 1.359 36.417L16.247 50L1.359 63.583C-0.455 65.237 -0.453 68.094 1.363 69.745L6.869 74.754C8.354 76.104 10.589 76.204 12.187 74.99L29.355 61.959L68.769 97.917C69.392 98.541 70.125 99.01 70.912 99.317ZM75.015 27.299L45.109 50L75.015 72.701V27.299Z'\n fill='#fff'\n />\n </mask>\n <g mask='url(#vsc-mask)'>\n <path\n d='M96.461 10.796L75.857 0.876C73.472 -0.273 70.622 0.212 68.75 2.083L1.299 63.583C-0.516 65.237 -0.514 68.094 1.303 69.745L6.813 74.754C8.298 76.104 10.535 76.204 12.134 74.99L93.361 13.37C96.086 11.303 100 13.246 100 16.667V16.427C100 14.027 98.625 11.838 96.461 10.796Z'\n fill='#0065A9'\n />\n <path\n d='M96.461 89.204L75.857 99.124C73.472 100.273 70.622 99.788 68.75 97.917L1.299 36.417C-0.516 34.763 -0.514 31.906 1.303 30.255L6.813 25.246C8.298 23.896 10.535 23.796 12.134 25.009L93.361 86.63C96.086 88.697 100 86.754 100 83.333V83.573C100 85.974 98.625 88.162 96.461 89.204Z'\n fill='#007ACC'\n />\n <path\n d='M75.858 99.126C73.472 100.274 70.622 99.788 68.75 97.917C71.056 100.223 75 98.59 75 95.328V4.672C75 1.41 71.056 -0.223 68.75 2.083C70.622 0.211 73.472 -0.274 75.858 0.874L96.459 10.781C98.623 11.822 100 14.011 100 16.413V83.587C100 85.989 98.623 88.179 96.459 89.22L75.858 99.126Z'\n fill='#1F9CF0'\n />\n </g>\n </svg>\n);\n\nexport const OpenAILogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <defs>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='codex-grad'\n x1='12'\n x2='12'\n y1='3'\n y2='21'\n >\n <stop stopColor='#B1A7FF' />\n <stop offset='.5' stopColor='#7A9DFF' />\n <stop offset='1' stopColor='#3941FF' />\n </linearGradient>\n </defs>\n <path\n d='M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z'\n fill='#F0F6FF'\n />\n <path\n d='M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z'\n fill='url(#codex-grad)'\n />\n </svg>\n);\n\nexport const WindsurfLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 1024 1024'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <path\n d='M897.246 286.869H889.819C850.735 286.808 819.017 318.46 819.017 357.539V515.589C819.017 547.15 792.93 572.716 761.882 572.716C743.436 572.716 725.02 563.433 714.093 547.85L552.673 317.304C539.28 298.16 517.486 286.747 493.895 286.747C457.094 286.747 423.976 318.034 423.976 356.657V515.619C423.976 547.181 398.103 572.746 366.842 572.746C348.335 572.746 329.949 563.463 319.021 547.881L138.395 289.882C134.316 284.038 125.154 286.93 125.154 294.052V431.892C125.154 438.862 127.285 445.619 131.272 451.34L309.037 705.2C319.539 720.204 335.033 731.344 352.9 735.392C397.616 745.557 438.77 711.135 438.77 667.278V508.406C438.77 476.845 464.339 451.279 495.904 451.279H495.995C515.02 451.279 532.857 460.562 543.785 476.145L705.235 706.661C718.659 725.835 739.327 737.218 763.983 737.218C801.606 737.218 833.841 705.9 833.841 667.308V508.376C833.841 476.815 859.41 451.249 890.975 451.249H897.276C901.233 451.249 904.43 448.053 904.43 444.097V294.021C904.43 290.065 901.233 286.869 897.276 286.869H897.246Z'\n fill='#0B100F'\n />\n </svg>\n);\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type MoonIconHandle = AnimatedIconHandle;\n\ntype MoonIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SVG_VARIANTS: Variants = {\n animate: { rotate: [0, -10, 10, -5, 5, 0] },\n normal: { rotate: 0 },\n};\n\nconst SVG_TRANSITION: Transition = {\n duration: 1.2,\n ease: 'easeInOut',\n};\n\nconst MoonIcon = forwardRef<MoonIconHandle, MoonIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={SVG_TRANSITION}\n variants={SVG_VARIANTS}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nMoonIcon.displayName = 'MoonIcon';\n\nexport { MoonIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PanelLeftCloseIconHandle = AnimatedIconHandle;\n\ntype PanelLeftCloseIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { x: [0, -1.5, 0] },\n normal: { x: 0 },\n};\n\nconst PanelLeftCloseIcon = forwardRef<\n PanelLeftCloseIconHandle,\n PanelLeftCloseIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m16 15-3-3 3-3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nPanelLeftCloseIcon.displayName = 'PanelLeftCloseIcon';\n\nexport { PanelLeftCloseIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PanelLeftOpenIconHandle = AnimatedIconHandle;\n\ntype PanelLeftOpenIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { x: [0, 1.5, 0] },\n normal: { x: 0 },\n};\n\nconst PanelLeftOpenIcon = forwardRef<\n PanelLeftOpenIconHandle,\n PanelLeftOpenIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m14 9 3 3-3 3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nPanelLeftOpenIcon.displayName = 'PanelLeftOpenIcon';\n\nexport { PanelLeftOpenIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PlusIconHandle = AnimatedIconHandle;\n\ntype PlusIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PlusIcon = forwardRef<PlusIconHandle, PlusIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 15, stiffness: 100, type: 'spring' }}\n variants={{ animate: { rotate: 180 }, normal: { rotate: 0 } }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M5 12h14' />\n <path d='M12 5v14' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nPlusIcon.displayName = 'PlusIcon';\n\nexport { PlusIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type RefreshCWIconHandle = AnimatedIconHandle;\n\ntype RefreshCWIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst RefreshCWIcon = forwardRef<RefreshCWIconHandle, RefreshCWIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 25, stiffness: 250, type: 'spring' }}\n variants={{ animate: { rotate: '50deg' }, normal: { rotate: '0deg' } }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8' />\n <path d='M21 3v5h-5' />\n <path d='M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16' />\n <path d='M8 16H3v5' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nRefreshCWIcon.displayName = 'RefreshCWIcon';\n\nexport { RefreshCWIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SettingsIconHandle = AnimatedIconHandle;\n\ntype SettingsIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SettingsIcon = forwardRef<SettingsIconHandle, SettingsIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 10, stiffness: 50, type: 'spring' }}\n variants={{\n animate: { rotate: 180 },\n normal: { rotate: 0 },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z' />\n <circle cx='12' cy='12' r='3' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nSettingsIcon.displayName = 'SettingsIcon';\n\nexport { SettingsIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ShieldCheckIconHandle = AnimatedIconHandle;\n\ntype ShieldCheckIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n scale: [0.5, 1],\n transition: { duration: 0.4, opacity: { duration: 0.1 } },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n scale: 1,\n transition: { duration: 0.3, opacity: { duration: 0.1 } },\n },\n};\n\nconst ShieldCheckIcon = forwardRef<ShieldCheckIconHandle, ShieldCheckIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z' />\n <motion.path\n animate={controls}\n d='m9 12 2 2 4-4'\n initial='normal'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nShieldCheckIcon.displayName = 'ShieldCheckIcon';\n\nexport { ShieldCheckIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SunIconHandle = AnimatedIconHandle;\n\ntype SunIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: (i: number) => ({\n opacity: [0, 1],\n transition: { delay: i * 0.1, duration: 0.3 },\n }),\n normal: { opacity: 1 },\n};\n\nconst SUN_PATHS = [\n 'M12 2v2',\n 'm19.07 4.93-1.41 1.41',\n 'M20 12h2',\n 'm17.66 17.66 1.41 1.41',\n 'M12 20v2',\n 'm6.34 17.66-1.41 1.41',\n 'M2 12h2',\n 'm4.93 4.93 1.41 1.41',\n];\n\nconst SunIcon = forwardRef<SunIconHandle, SunIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <circle cx='12' cy='12' r='4' />\n {SUN_PATHS.map((d, index) => (\n <motion.path\n animate={controls}\n custom={index + 1}\n d={d}\n key={d}\n variants={PATH_VARIANTS}\n />\n ))}\n </svg>\n )}\n </AnimatedIcon>\n));\n\nSunIcon.displayName = 'SunIcon';\n\nexport { SunIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type TerminalIconHandle = AnimatedIconHandle;\n\ntype TerminalIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst LINE_VARIANTS: Variants = {\n animate: {\n opacity: [1, 0, 1],\n transition: { duration: 0.8, ease: 'linear', repeat: Infinity },\n },\n normal: { opacity: 1 },\n};\n\nconst TerminalIcon = forwardRef<TerminalIconHandle, TerminalIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <polyline points='4 17 10 11 4 5' />\n <motion.line\n animate={controls}\n initial='normal'\n variants={LINE_VARIANTS}\n x1='12'\n x2='20'\n y1='19'\n y2='19'\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nTerminalIcon.displayName = 'TerminalIcon';\n\nexport { TerminalIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type UsersIconHandle = AnimatedIconHandle;\n\ntype UsersIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n transition: { damping: 13, delay: 0.1, stiffness: 200, type: 'spring' },\n translateX: [-6, 0],\n },\n normal: {\n transition: { damping: 13, stiffness: 200, type: 'spring' },\n translateX: 0,\n },\n};\n\nconst UsersIcon = forwardRef<UsersIconHandle, UsersIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' />\n <circle cx='9' cy='7' r='4' />\n <motion.path\n animate={controls}\n d='M22 21v-2a4 4 0 0 0-3-3.87'\n variants={PATH_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M16 3.13a4 4 0 0 1 0 7.75'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nUsersIcon.displayName = 'UsersIcon';\n\nexport { UsersIcon };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["spring","AnimatePresence","motion","HugeiconsIcon","InformationCircleIcon","CheckmarkCircle02Icon","Button","AccordionPrimitive","cn","HugeiconsIcon","ArrowRight01Icon","Children","isValidElement","edge: TrayEdge","trayChild: ReactNode","cn","Root","Trigger","Portal","Overlay","cn","Content","Title","Description","Button","Action","Cancel","AvatarPrimitive","cn","spring","AlertCircleIcon","InformationCircleIcon","CheckmarkCircle02Icon","Alert01Icon","Icon","cn","HugeiconsIcon","motion","Cancel01Icon","Slot","cn","cn","Slot","HugeiconsIcon","ArrowRight01Icon","MoreHorizontalIcon","cn","CheckboxPrimitive","cn","CollapsiblePrimitive","cn","Root","Trigger","Portal","Close","Overlay","cn","Content","HugeiconsIcon","Cancel01Icon","Button","Title","Description","CommandPrimitive","cn","HugeiconsIcon","Search01Icon","PopoverPrimitive","cn","cn","HugeiconsIcon","ArrowDown01Icon","Root","Trigger","Group","Sub","Portal","Content","cn","Item","CheckboxItem","ItemIndicator","CheckIcon","RadioGroup","RadioItem","CircleIcon","Label","Separator","SubTrigger","ChevronRightIcon","SubContent","cn","Children","Fragment","cn","motion","HugeiconsIcon","describedByParts: string[]","Children","cn","Label","cn","cn","RadioGroupPrimitive","cn","Label","cn","buttonVariants","HugeiconsIcon","ArrowLeft01Icon","ArrowRight01Icon","MoreHorizontalIcon","Button","ScrollAreaPrimitive","cn","cn","HugeiconsIcon","Search01Icon","Root","Group","Value","Trigger","cn","Icon","HugeiconsIcon","ArrowDown01Icon","Portal","Content","Viewport","Label","Item","ItemIndicator","Tick01Icon","ItemText","Separator","ScrollUpButton","ArrowUp01Icon","ScrollDownButton","cn","HugeiconsIcon","Root","cn","cn","SheetPrimitive","cn","HugeiconsIcon","Cancel01Icon","cn","Sonner","HugeiconsIcon","Cancel01Icon","InformationCircleIcon","CheckmarkCircle02Icon","Alert01Icon","cn","cn","TabsPrimitive","cn","next: number","contextValue: ToggleGroupContextValue","cn","cn","Provider","Root","Trigger","Portal","Content","cn","aliases: Record<string, string>","cn","spring","ariaLabel: string | undefined","Button","cn","AnimatePresence","motion","HugeiconsIcon","Tick01Icon","Copy01Icon","cn","cn","HugeiconsIcon","Alert01Icon","Button","cn","Input","Button","HugeiconsIcon","Add01Icon","Cancel01Icon","Icon","cn","spring","cn","HugeiconsIcon","InformationCircleIcon","motion","Cancel01Icon","cn","trendColor: Record<Trend, string>","Icon","cn","Button","Link","HugeiconsIcon","WebhookIcon","motion","cn","cn","statusConfig: Record<StatusType, { dot: boolean, label: string; variant: 'success' | 'inactive' | 'danger' | 'warning' | 'brand' | 'process'; }>","cn","Switch","cn","ToggleCard: FC<ToggleCardProps>","AccordionContent","AccordionRoot","AccordionItem","AccordionHeader","AccordionTrigger","cn","motion","LINE_VARIANTS: Variants","cn","motion","LINE_VARIANTS","DEFAULT_TRANSITION: Transition","motion","DEFAULT_TRANSITION","motion","motion","SPRING_TRANSITION: Transition","cn","AnimatePresence","motion","DOLLAR_MAIN_VARIANTS: Variants","DOLLAR_SECONDARY_VARIANTS: Variants","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","DEFAULT_TRANSITION","PATH_VARIANTS","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","SVG_VARIANTS: Variants","SVG_TRANSITION: Transition","motion","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","DEFAULT_TRANSITION","PATH_VARIANTS","DEFAULT_TRANSITION: Transition","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","motion","motion","motion","motion","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","PATH_VARIANTS: Variants","motion","PATH_VARIANTS","LINE_VARIANTS: Variants","motion","PATH_VARIANTS: Variants","motion"],"sources":["../src/components/unsaved-changes-bar/unsaved-changes-bar.tsx","../src/components/ui/accordion/accordion.tsx","../src/components/ui/tray/resolveTrayLayout.tsx","../src/components/ui/tray/renderTrayLayout.tsx","../src/components/ui/alert-dialog/alert-dialog.tsx","../src/components/ui/avatar/avatar.tsx","../src/components/ui/alert/alert.tsx","../src/components/ui/badge/badge.tsx","../src/components/ui/breadcrumb/breadcrumb.tsx","../src/components/ui/card/card.tsx","../src/components/ui/check-icon/check-icon.tsx","../src/components/ui/checkbox/checkbox.tsx","../src/components/ui/collapsible/collapsible.tsx","../src/components/ui/dialog/dialog.tsx","../src/components/ui/command/command.tsx","../src/components/ui/popover/popover.tsx","../src/components/ui/combobox/combobox.tsx","../src/components/ui/dropdown-menu/dropdown-menu.tsx","../src/components/ui/well/well.tsx","../src/components/ui/flush-card-stack/flush-card-stack.tsx","../src/components/icon-config/icon-config.tsx","../src/components/ui/icon/icon.tsx","../src/components/ui/field/field.tsx","../src/components/ui/kbd/kbd.tsx","../src/components/ui/progress/progress.tsx","../src/components/ui/radio-group/radio-group.tsx","../src/components/ui/pagination/pagination.tsx","../src/components/ui/scroll-area/scroll-area.tsx","../src/components/ui/search-input/search-input.tsx","../src/components/ui/select/select.tsx","../src/components/ui/selectable-card/selectable-card.tsx","../src/components/ui/separator/separator.tsx","../src/components/ui/slider/slider.tsx","../src/components/ui/sheet/sheet.tsx","../src/components/ui/skeleton/skeleton.tsx","../src/components/ui/sonner/sonner.tsx","../src/components/ui/stepper/stepper.tsx","../src/components/ui/table/table.tsx","../src/components/ui/tabs/tabs.tsx","../src/components/ui/toggle-group/toggle-group.tsx","../src/components/ui/textarea/textarea.tsx","../src/components/ui/tooltip/tooltip.tsx","../src/components/asset-icon/asset-icon.tsx","../src/components/copy-button/copy-button.tsx","../src/components/code-block/code-block.tsx","../src/components/danger-zone/danger-zone.tsx","../src/components/domain-list/domain-list.tsx","../src/components/empty-state/empty-state.tsx","../src/components/info-banner/info-banner.tsx","../src/components/loading-skeleton/loading-skeleton.tsx","../src/components/metric-card/metric-card.tsx","../src/components/ask-ai-sheet/ask-ai-sheet.tsx","../src/components/page-actions/page-actions.tsx","../src/components/product-page-layout/product-page-layout.tsx","../src/components/settings-section/settings-section.tsx","../src/components/status-badge/status-badge.tsx","../src/components/toggle-card/toggle-card.tsx","../src/components/icons/animated-icon/animated-icon.tsx","../src/components/icons/arrow-up-right/arrow-up-right.tsx","../src/components/icons/chart-bar-increasing/chart-bar-increasing.tsx","../src/components/icons/chevron-down/chevron-down.tsx","../src/components/icons/chevron-right/chevron-right.tsx","../src/components/icons/copy/copy.tsx","../src/components/icons/copy-check/copy-check.tsx","../src/components/icons/dollar-sign/dollar-sign.tsx","../src/components/icons/download/download.tsx","../src/components/icons/fingerprint/fingerprint.tsx","../src/components/icons/home/home.tsx","../src/components/icons/key/key.tsx","../src/components/icons/layout-panel-top/layout-panel-top.tsx","../src/components/icons/link/link.tsx","../src/components/icons/mcp-tools/mcp-tools.tsx","../src/components/icons/moon/moon.tsx","../src/components/icons/panel-left-close/panel-left-close.tsx","../src/components/icons/panel-left-open/panel-left-open.tsx","../src/components/icons/plus/plus.tsx","../src/components/icons/refresh-cw/refresh-cw.tsx","../src/components/icons/search/search.tsx","../src/components/icons/settings/settings.tsx","../src/components/icons/shield-check/shield-check.tsx","../src/components/icons/sun/sun.tsx","../src/components/icons/terminal/terminal.tsx","../src/components/icons/users/users.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { CheckmarkCircle02Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\n\nimport { Button } from '../ui/button'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nconst BLUR_STEPS = 6\nconst BLUR_STRENGTH = 32\n\n// Stable identity keys for the fixed-length blur stack — Sonar flags\n// index-derived keys, and these are computed once at module load.\nconst BLUR_STEP_IDS = Array.from({ length: BLUR_STEPS }, () => crypto.randomUUID())\n\nconst ProgressiveBlur = () => {\n const factor = 0.5\n const base = Math.pow(BLUR_STRENGTH / factor, 1 / (BLUR_STEPS - 1))\n\n const getBlur = (i: number) => factor * Math.pow(base, BLUR_STEPS - i - 1)\n\n return (\n <div\n className='fixed -bottom-10 left-1/2 -translate-x-1/2 pointer-events-none z-40'\n style={{ height: '160px', width: '900px' }}\n >\n {BLUR_STEP_IDS.map((id, i) => {\n const blur = getBlur(i)\n const spread = 20 + ((BLUR_STEPS - i) / BLUR_STEPS) * 30\n const mask = `radial-gradient(ellipse ${spread}% ${spread}% at 50% 60%, rgba(0,0,0,1), rgba(0,0,0,0))`\n return (\n <div\n key={id}\n className='absolute inset-0'\n style={{\n backdropFilter: `blur(${blur}px)`,\n mask,\n WebkitBackdropFilter: `blur(${blur}px)`,\n WebkitMask: mask,\n }}\n />\n )\n })}\n <div\n className='absolute inset-0'\n style={{\n background: 'radial-gradient(ellipse 40% 50% at 50% 60%, var(--background), transparent)',\n }}\n />\n </div>\n )\n}\n\ntype BarState = 'unsaved' | 'saved'\n\nconst popTransition = { ...spring, duration: 0.25 }\n\nconst StatusIcon = ({ state }: { state: BarState }) => {\n return (\n <div className='relative size-[18px] shrink-0'>\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.div\n key={state}\n initial={{ filter: 'blur(4px)', opacity: 0, scale: 0.25 }}\n animate={{ filter: 'blur(0px)', opacity: 1, scale: 1 }}\n exit={{ filter: 'blur(4px)', opacity: 0, scale: 0.25 }}\n transition={popTransition}\n className='absolute inset-0 will-change-[opacity,transform,filter]'\n >\n {state === 'unsaved' && <span className='text-zinc-400 dark:text-zinc-400'><HugeiconsIcon icon={InformationCircleIcon} size={18} /></span>}\n {state === 'saved' && <span className='text-emerald-400 dark:text-emerald-600'><HugeiconsIcon icon={CheckmarkCircle02Icon} size={18} /></span>}\n </motion.div>\n </AnimatePresence>\n </div>\n )\n}\n\nconst StatusText = ({ state }: { state: BarState }) => {\n const text = state === 'unsaved' ? 'Unsaved changes' : 'Changes saved'\n\n return (\n <AnimatePresence mode='popLayout' initial={false}>\n <motion.span\n key={text}\n initial={{ filter: 'blur(4px)', opacity: 0, scale: 0.95 }}\n animate={{ filter: 'blur(0px)', opacity: 1, scale: 1 }}\n exit={{ filter: 'blur(4px)', opacity: 0, scale: 0.95 }}\n transition={popTransition}\n className='text-[13px] font-medium text-white dark:text-zinc-800 whitespace-nowrap will-change-[opacity,transform,filter]'\n >\n {text}\n </motion.span>\n </AnimatePresence>\n )\n}\n\nexport interface UnsavedChangesBarProps {\n hasChanges: boolean\n onReset: () => void,\n onSave: () => void,\n /**\n * When true, hide the bar even if there are unsaved changes.\n * Use when a config modal (auto-opened from a toggle) owns its own Save button —\n * keeps save affordance in one place. See feedback_save_pattern_auto_modal.md.\n */\n suppressed?: boolean\n}\n\nexport const UnsavedChangesBar = ({ hasChanges, onSave, onReset, suppressed = false }: UnsavedChangesBarProps) => {\n const prefersReduced = useReducedMotion()\n const [barState, setBarState] = useState<BarState>('unsaved')\n const [visible, setVisible] = useState(false)\n const shouldRender = visible && !suppressed\n\n const dismissTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleSave = () => {\n onSave()\n setBarState('saved')\n dismissTimer.current = setTimeout(() => {\n setVisible(false)\n setBarState('unsaved')\n }, 1800)\n }\n\n useEffect(() => {\n if (hasChanges) {\n // If reappearing while dismiss is pending, cancel the dismiss\n if (dismissTimer.current) {\n clearTimeout(dismissTimer.current)\n dismissTimer.current = null\n }\n setVisible(true)\n setBarState('unsaved')\n } else if (!dismissTimer.current) {\n // Only hide immediately if we're not in a post-save dismiss flow\n setVisible(false)\n }\n }, [hasChanges])\n\n return (\n <>\n <AnimatePresence>\n {shouldRender && (\n <motion.div\n key='blur'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={spring}\n >\n <ProgressiveBlur />\n </motion.div>\n )}\n </AnimatePresence>\n <div className='fixed bottom-10 left-1/2 -translate-x-1/2 z-50'>\n <AnimatePresence>\n {shouldRender && (\n <motion.div\n initial={prefersReduced ? { opacity: 0 } : { opacity: 0, scale: 0.95, y: 20 }}\n animate={prefersReduced ? { opacity: 1 } : { opacity: 1, scale: 1, y: 0 }}\n exit={prefersReduced ? { opacity: 0 } : { opacity: 0, scale: 0.95, y: 20 }}\n transition={spring}\n style={{ willChange: 'opacity, transform' }}\n className='flex items-center gap-1.5 rounded-xl bg-zinc-900 dark:bg-[oklch(0.940_0.008_231)] shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_24px_-4px_rgba(0,0,0,0.25),0_20px_50px_-8px_rgba(0,0,0,0.20)] dark:shadow-[0_0_0_1px_rgba(0,0,0,0.08),0_8px_20px_-4px_rgba(0,0,0,0.10),0_20px_50px_-8px_rgba(0,0,0,0.08)] pl-3 pr-1.5 py-1.5'\n >\n <StatusIcon state={barState} />\n <StatusText state={barState} />\n\n <motion.div\n animate={{ opacity: barState === 'unsaved' ? 1 : 0 }}\n transition={popTransition}\n className='flex items-center gap-1.5 ml-0.5'\n style={{ pointerEvents: barState === 'unsaved' ? 'auto' : 'none' }}\n >\n <Button\n variant='ghost'\n size='sm'\n className='rounded-md text-zinc-400 hover:text-white hover:bg-white/10 dark:text-zinc-500 dark:hover:text-zinc-800 dark:hover:bg-black/[0.06] shrink-0 touch-manipulation'\n onClick={onReset}\n >\n Reset\n </Button>\n <Button\n size='sm'\n className='rounded-md shrink-0 touch-manipulation'\n onClick={handleSave}\n >\n Save changes\n </Button>\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </>\n )\n}\n\n// localStorage-backed store — survives page refresh and browser restart\nconst sessionStore = {\n // eslint-disable-next-line custom-rules/require-single-object-param\n get(key: string): { savedValues: unknown, values: unknown; } | undefined {\n if (globalThis.window === undefined) return undefined\n try {\n const stored = localStorage.getItem(`dashboard-${key}`)\n return stored ? JSON.parse(stored) : undefined\n } catch { return undefined }\n },\n // eslint-disable-next-line custom-rules/require-single-object-param\n set(key: string, value: { savedValues: unknown, values: unknown; }) {\n if (globalThis.window === undefined) return\n try {\n localStorage.setItem(`dashboard-${key}`, JSON.stringify(value))\n } catch { /* quota exceeded, ignore */ }\n },\n}\n\n// Hook to track changes\n// Pass a unique `key` to persist values across client-side navigation.\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const useUnsavedChanges = <T extends Record<string, unknown>>(initialValues: T, storeKey?: string) => {\n const cached = storeKey ? sessionStore.get(storeKey) as { savedValues: T, values: T; } | undefined : undefined\n\n const [values, setValues] = useState<T>(cached?.values ?? initialValues)\n const [savedValues, setSavedValues] = useState<T>(cached?.savedValues ?? initialValues)\n\n // Sync to session store on every change\n useEffect(() => {\n if (storeKey) {\n sessionStore.set(storeKey, { savedValues, values })\n }\n }, [storeKey, values, savedValues])\n\n const hasChanges = useMemo(() => {\n return JSON.stringify(values) !== JSON.stringify(savedValues)\n }, [values, savedValues])\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const updateValue = <K extends keyof T>(key: K, value: T[K]) => {\n setValues(prev => ({ ...prev, [key]: value }))\n }\n\n const save = () => {\n setSavedValues(values)\n }\n\n const reset = () => {\n setValues(savedValues)\n }\n\n const commit = (partial?: Partial<T>): T => {\n const next = partial ? { ...values, ...partial } : values\n setValues(next)\n setSavedValues(next)\n return next\n }\n\n return {\n commit,\n hasChanges,\n reset,\n save,\n setValues,\n updateValue,\n values,\n }\n}\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { ArrowRight01Icon } from '@hugeicons/core-free-icons'\nimport * as AccordionPrimitive from '@radix-ui/react-accordion'\n\nimport { cn } from '../../../lib/utils'\n\nconst Accordion = ({\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Root>) => (\n <AccordionPrimitive.Root data-slot='accordion' {...props} />\n)\n\nconst AccordionItem = ({\n className,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Item>) => {\n return (\n <AccordionPrimitive.Item\n data-slot='accordion-item'\n className={cn('border-b border-[var(--border-divider)] last:border-b-0', className)}\n {...props}\n />\n )\n}\n\nconst AccordionTrigger = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Trigger>) => {\n return (\n <AccordionPrimitive.Header className='flex'>\n <AccordionPrimitive.Trigger\n data-slot='accordion-trigger'\n className={cn(\n 'focus-visible:ring-ring/50 flex flex-1 items-center justify-between gap-4 rounded-md px-1 py-4 text-left text-sm font-medium touch-manipulation transition-[color,background-color,opacity] duration-150 ease-out motion-reduce:transition-none outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 cursor-pointer',\n className\n )}\n {...props}\n >\n {children}\n <HugeiconsIcon icon={ArrowRight01Icon} size={16} className=\"text-muted-foreground/60 pointer-events-none shrink-0 transition-transform duration-200 ease-out motion-reduce:transition-none [*[data-state=open]>&]:rotate-90\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nconst AccordionContent = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof AccordionPrimitive.Content>) => {\n return (\n <AccordionPrimitive.Content\n data-slot='accordion-content'\n className='data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down motion-reduce:animate-none overflow-hidden text-sm'\n {...props}\n >\n <div className={cn('px-1 pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import {\n Children,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from 'react';\n\n/** Which chrome edge carries the muted tray, or `none` for a flat container. */\nexport type TrayEdge = 'header' | 'footer' | 'none';\n\n/** Consumer-facing override; `auto` applies the footer-priority convention. */\nexport type TrayPreference = 'auto' | TrayEdge;\n\nexport type ResolveTrayLayoutParams = {\n /** The container's children (header / body / footer slots in any order). */\n children: ReactNode;\n /** Identifies the footer slot element. */\n isFooter: (el: ReactElement) => boolean;\n /** Identifies the header slot element (e.g. `(el) => el.type === DialogHeader`). */\n isHeader: (el: ReactElement) => boolean;\n /** Override the auto convention. Defaults to `auto`. */\n tray?: TrayPreference;\n};\n\nexport type ResolvedTrayLayout = {\n /** The resolved tray edge after applying the convention/override. */\n edge: TrayEdge;\n /** Children that belong to the raised white shelf (everything except the tray slot). */\n shelf: ReactNode[];\n /** The slot rendered on the muted tray, or `undefined` when `edge === 'none'`. */\n trayChild: ReactNode;\n};\n\n/**\n * Resolves the droplet \"tray\" layout for a container (Dialog/Card/Sheet/AlertDialog).\n *\n * Convention (footer-priority): a container gets exactly one muted tray — the\n * **footer** when actions are present, otherwise the **header** (e.g. Table/CodeBlock).\n * The non-tray slots form the raised white shelf. Pass an explicit `tray` to override.\n *\n * Returns the partitioned pieces so each container can assemble its own shell +\n * shelf markup with the shared `--tray-*` tokens.\n */\nexport const resolveTrayLayout = ({\n children,\n isHeader,\n isFooter,\n tray = 'auto',\n}: ResolveTrayLayoutParams): ResolvedTrayLayout => {\n const elements = Children.toArray(children).filter(isValidElement) as ReactElement[];\n const header = elements.find(isHeader);\n const footer = elements.find(isFooter);\n\n let edge: TrayEdge;\n\n if (tray === 'auto') {\n if (footer) {\n edge = 'footer';\n } else if (header) {\n edge = 'header';\n } else {\n edge = 'none';\n }\n } else {\n edge = tray;\n }\n\n let trayChild: ReactNode = undefined;\n\n if (edge === 'footer') {\n trayChild = footer;\n } else if (edge === 'header') {\n trayChild = header;\n }\n\n const shelf = Children.toArray(children).filter((child) => {\n if (!isValidElement(child)) return true;\n if (edge === 'footer' && isFooter(child)) return false;\n if (edge === 'header' && isHeader(child)) return false;\n return true;\n });\n\n return { edge, shelf, trayChild };\n};\n","import { type ReactElement, type ReactNode } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport {\n type TrayEdge,\n type TrayPreference,\n resolveTrayLayout,\n} from './resolveTrayLayout';\n\nexport type RenderTrayLayoutParams = {\n /** The container's children (header / body / footer slots in any order). */\n children: ReactNode;\n /** Identifies the footer slot element. */\n isFooter: (el: ReactElement) => boolean;\n /** Identifies the header slot element (e.g. `(el) => el.type === DialogHeader`). */\n isHeader: (el: ReactElement) => boolean;\n /** Extra classes merged onto the white shelf wrapper. */\n shelfClassName?: string;\n /** Override the footer-priority convention. Defaults to `auto`. */\n tray?: TrayPreference;\n};\n\nexport type RenderedTrayLayout = {\n /** The inner JSX (tray slot + wrapped shelf), ready to render inside the shell. */\n content: ReactNode;\n /** The resolved tray edge — spread onto the container root as `data-tray`. */\n edge: TrayEdge;\n /** Layout/surface classes for the container shell — merge onto the container root. */\n shellClassName: string;\n};\n\n/**\n * Builds the shared droplet \"tray\" markup for a container (Dialog/Card/AlertDialog/…).\n *\n * Centralizes BOTH the convention (via {@link resolveTrayLayout}) and the render —\n * the muted shell classes + the raised white shelf wrapper + the tray-slot\n * placement — so every container (and new ones like Table/CodeBlock) shares one\n * implementation and can't drift. Each container keeps its own root element\n * (portal, animations, `shadow-elevated` vs `shadow-card`) and just merges\n * `shellClassName` + renders `content`.\n *\n * Note: this composes the tray treatment; it does **not** make any container\n * depend on `Card`. Containers stay independent primitives sharing a treatment.\n */\nexport const renderTrayLayout = ({\n children,\n isHeader,\n isFooter,\n tray = 'auto',\n shelfClassName,\n}: RenderTrayLayoutParams): RenderedTrayLayout => {\n const { edge, shelf, trayChild } = resolveTrayLayout({\n children,\n isFooter,\n isHeader,\n tray,\n });\n\n // Flat container — no shell, no shelf; render children as-is.\n if (edge === 'none') {\n return { content: children, edge, shellClassName: 'bg-card' };\n }\n\n // Muted shell: insets the shelf on top+sides (footer tray) or bottom+sides\n // (header tray), leaving the tray edge flush.\n const shellClassName = cn(\n 'flex flex-col bg-[var(--tray-chrome)] px-[var(--tray-inset)]',\n edge === 'footer' ? 'pt-[var(--tray-inset)]' : 'pb-[var(--tray-inset)]',\n );\n\n const content = (\n <>\n {edge === 'header' && trayChild}\n <div\n data-slot='tray-shelf'\n className={cn(\n // flex-1 so short content in equal-height grids fills white (no void).\n 'flex flex-1 flex-col overflow-hidden bg-card rounded-[var(--tray-shelf-radius)] shadow-[var(--tray-shelf-shadow)]',\n shelfClassName,\n )}\n >\n {shelf}\n </div>\n {edge === 'footer' && trayChild}\n </>\n );\n\n return { content, edge, shellClassName };\n};\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n Action,\n Cancel,\n Content,\n Description,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n} from '@radix-ui/react-alert-dialog';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../button';\nimport { type TrayPreference } from '../tray/resolveTrayLayout';\nimport { renderTrayLayout } from '../tray/renderTrayLayout';\n\nconst AlertDialog = Root;\nconst AlertDialogTrigger = Trigger;\nconst AlertDialogPortal = Portal;\n\nconst AlertDialogOverlay = ({ className, ...props }: ComponentProps<typeof Overlay>) => (\n <Overlay\n data-slot='alert-dialog-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogContent = ({\n className,\n size = 'default',\n tray = 'auto',\n children,\n ...props\n}: ComponentProps<typeof Content> & {\n size?: 'default' | 'sm';\n /** Tray edge. `auto` = footer-priority (actions → footer tray). */\n tray?: TrayPreference;\n}) => {\n const { edge, shellClassName, content } = renderTrayLayout({\n children,\n isFooter: (el) => el.type === AlertDialogFooter,\n isHeader: (el) => el.type === AlertDialogHeader,\n tray,\n });\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <Content\n data-slot='alert-dialog-content'\n data-size={size}\n data-tray={edge}\n className={cn(\n 'overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 group/alert-dialog-content fixed top-[50%] left-[50%] z-50 w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-[var(--shadow-elevated)] duration-200 data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none',\n shellClassName,\n className,\n )}\n {...props}\n >\n {content}\n </Content>\n </AlertDialogPortal>\n );\n};\n\nconst AlertDialogHeader = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-header'\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 px-5 py-4 bg-card text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogFooter = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-footer'\n className={cn('grid grid-cols-2 gap-2 px-5 py-4 bg-muted', className)}\n {...props}\n />\n);\n\nconst AlertDialogTitle = ({ className, ...props }: ComponentProps<typeof Title>) => (\n <Title\n data-slot='alert-dialog-title'\n className={cn(\n 'text-[17px] font-semibold text-balance sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogDescription = ({ className, ...props }: ComponentProps<typeof Description>) => (\n <Description\n data-slot='alert-dialog-description'\n className={cn('text-muted-foreground text-sm text-pretty', className)}\n {...props}\n />\n);\n\nconst AlertDialogMedia = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='alert-dialog-media'\n className={cn(\n \"bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className,\n )}\n {...props}\n />\n);\n\nconst AlertDialogAction = ({\n className,\n variant = 'destructive',\n size = 'default',\n ...props\n}: ComponentProps<typeof Action> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) => (\n <Button variant={variant} size={size} asChild>\n <Action data-slot='alert-dialog-action' className={cn(className)} {...props} />\n </Button>\n);\n\nconst AlertDialogCancel = ({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: ComponentProps<typeof Cancel> &\n Pick<ComponentProps<typeof Button>, 'variant' | 'size'>) => (\n <Button variant={variant} size={size} asChild>\n <Cancel data-slot='alert-dialog-cancel' className={cn(className)} {...props} />\n </Button>\n);\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../../../lib/utils'\n\nconst Avatar = ({\n className,\n size = 'default',\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg'\n}) => {\n return (\n <AvatarPrimitive.Root\n data-slot='avatar'\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarImage = ({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Image>) => {\n return (\n <AvatarPrimitive.Image\n data-slot='avatar-image'\n className={cn('aspect-square size-full outline-1 -outline-offset-1 outline-black/10', className)}\n {...props}\n />\n )\n}\n\nconst AvatarFallback = ({\n className,\n ...props\n}: ComponentProps<typeof AvatarPrimitive.Fallback>) => {\n return (\n <AvatarPrimitive.Fallback\n data-slot='avatar-fallback'\n className={cn(\n 'bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarBadge = ({ className, ...props }: ComponentProps<'span'>) => {\n return (\n <span\n data-slot='avatar-badge'\n className={cn(\n 'bg-primary text-primary-foreground ring-background absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarGroup = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='avatar-group'\n className={cn(\n '*:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2',\n className\n )}\n {...props}\n />\n )\n}\n\nconst AvatarGroupCount = ({\n className,\n ...props\n}: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='avatar-group-count'\n className={cn(\n 'bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","'use client'\n\nimport { type ComponentProps, type ReactNode, useState } from 'react'\nimport { type VariantProps, cva } from 'class-variance-authority'\nimport { motion, useReducedMotion } from 'motion/react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport {\n Alert01Icon,\n AlertCircleIcon,\n Cancel01Icon,\n CheckmarkCircle02Icon,\n InformationCircleIcon,\n} from '@hugeicons/core-free-icons'\n\nimport { cn } from '../../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nconst alertVariants = cva(\n 'flex gap-3 rounded-xl border px-3.5 py-3 text-sm transition-[color,background-color,border-color] duration-150 motion-reduce:transition-none',\n {\n defaultVariants: {\n variant: 'neutral',\n },\n variants: {\n variant: {\n danger:\n 'bg-[var(--danger-light)] text-[var(--text-danger)] border-[var(--border-danger)]/30',\n info:\n 'bg-[var(--brand-light)] text-[var(--text-link)] border-[var(--border-selected)]/30',\n neutral:\n 'bg-secondary text-secondary-foreground border-[var(--border-default)]',\n success:\n 'bg-[var(--success-light)] text-[var(--text-success)] border-[var(--border-success)]/30',\n warning:\n 'bg-[var(--warning-light)] text-[var(--text-warning)] border-[var(--border-warning)]/30',\n },\n },\n },\n)\n\n/** Maps each semantic variant to its Hugeicons icon. */\nconst variantIcons = {\n danger: AlertCircleIcon,\n info: InformationCircleIcon,\n neutral: InformationCircleIcon,\n success: CheckmarkCircle02Icon,\n warning: Alert01Icon,\n} as const\n\n/** Semantic variant names for the inline Alert component. */\ntype AlertVariant = 'neutral' | 'info' | 'success' | 'warning' | 'danger'\n\n/** Props accepted by the Alert component. */\ntype AlertProps = ComponentProps<'div'> &\n VariantProps<typeof alertVariants> & {\n /** Body content of the alert. */\n children: ReactNode,\n /**\n * When true, a dismiss button is shown. The alert removes itself from the\n * DOM on dismissal (controlled via local state).\n */\n dismissible?: boolean,\n /** Called after the user dismisses the alert. */\n onDismiss?: () => void,\n /** Optional short heading rendered above the body. */\n title?: string\n }\n\n/**\n * An inline semantic callout for contextual feedback.\n *\n * Variants mirror the Badge semantic system: `neutral` (default) | `info` |\n * `success` | `warning` | `danger`. Each variant carries a matching background\n * tint, border, and leading icon drawn from the design-token set.\n *\n * - `danger` and `warning` use `role=\"alert\"` (assertive); others use\n * `role=\"status\"` (polite) to avoid interrupting screen-reader flow.\n * - Use `dismissible` + `onDismiss` for user-closeable callouts.\n *\n * @example\n * <Alert variant=\"warning\" title=\"Quota almost reached\">\n * You have used 90% of your monthly API calls.\n * </Alert>\n */\nconst Alert = ({\n variant = 'neutral',\n title,\n children,\n dismissible = false,\n onDismiss,\n className,\n ...props\n}: AlertProps) => {\n const [dismissed, setDismissed] = useState(false)\n const shouldReduceMotion = useReducedMotion()\n\n if (dismissed) return null\n\n const Icon = variantIcons[variant as AlertVariant]\n\n // danger and warning need assertive role so screen readers announce immediately\n const role =\n variant === 'danger' || variant === 'warning' ? 'alert' : 'status'\n\n return (\n <div\n role={role}\n data-slot='alert'\n data-variant={variant}\n className={cn(alertVariants({ variant }), className)}\n {...props}\n >\n {/* Leading icon — shrinks to a fixed size to stay aligned with the first line of text */}\n <span className='shrink-0 mt-0.5 opacity-80'>\n <HugeiconsIcon icon={Icon} size={16} />\n </span>\n\n <div className='flex-1 min-w-0'>\n {title && (\n <p className='font-medium leading-snug mb-0.5 text-pretty'>{title}</p>\n )}\n <div className='leading-relaxed text-pretty'>{children}</div>\n </div>\n\n {dismissible && (\n <motion.button\n type='button'\n aria-label='Dismiss'\n whileTap={shouldReduceMotion ? undefined : { scale: 0.96 }}\n transition={spring}\n onClick={() => {\n setDismissed(true)\n onDismiss?.()\n }}\n className=\"relative before:absolute before:-inset-[13px] before:content-[''] shrink-0 mt-0.5 rounded-sm p-0.5 opacity-60 hover:opacity-100 transition-[opacity] duration-150 ease-out motion-reduce:transition-none touch-manipulation cursor-pointer\"\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n </motion.button>\n )}\n </div>\n )\n}\n\nexport { Alert }\nexport type { AlertProps, AlertVariant }\n","import { type ComponentProps } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../lib/utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center rounded-[5px] border border-transparent px-1.5 py-0.5 text-xs font-medium tabular-nums w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 [&>svg]:[stroke-width:2.5] gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow,background-color] duration-150 motion-reduce:transition-none overflow-hidden',\n {\n defaultVariants: {\n variant: 'neutral',\n },\n variants: {\n variant: {\n brand:\n 'bg-[var(--brand-light)] text-[var(--brand-accented)] dark:text-[oklch(0.650_0.085_256)] border-[var(--brand-default)]/20 dark:border-[oklch(0.450_0.070_256)]/30 [a&]:hover:bg-[var(--brand-light)]/80',\n danger:\n 'bg-[var(--danger-light)] text-[var(--text-danger)] border-[var(--border-danger)]/20 [a&]:hover:bg-[var(--danger-light)]/80',\n dashed:\n 'border-dashed border-[var(--border-default)] text-muted-foreground bg-transparent',\n 'dashed-brand':\n 'border-dashed border-[var(--brand-default)] text-[var(--brand-accented)] bg-transparent',\n default: 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n ghost: 'hover:bg-accent hover:text-accent-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n 'gradient-brand':\n 'bg-gradient-to-r from-[var(--brand-default)] to-[var(--process-default)] text-white border-transparent',\n 'gradient-premium':\n 'bg-gradient-to-r from-amber-500 to-orange-400 text-white border-transparent',\n inactive:\n 'bg-[var(--inactive-light)] text-muted-foreground border-[var(--border-inactive)]/40 [a&]:hover:bg-[var(--inactive-light)]/80',\n link: 'text-primary underline-offset-4 hover:underline [a&]:hover:underline',\n neutral:\n 'bg-secondary text-secondary-foreground border-border [a&]:hover:bg-secondary/90',\n outline:\n 'border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n process:\n 'bg-[var(--process-light)] text-[var(--text-process)] border-[var(--border-process)]/20 [a&]:hover:bg-[var(--process-light)]/80',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n success:\n 'bg-[var(--success-light)] text-[var(--text-success)] border-[var(--border-success)]/20 [a&]:hover:bg-[var(--success-light)]/80',\n warning:\n 'bg-[var(--warning-light)] text-[var(--text-warning)] border-[var(--border-warning)]/20 [a&]:hover:bg-[var(--warning-light)]/80',\n },\n },\n },\n);\n\n/**\n * A small status/label badge.\n *\n * Semantic variants (preferred): `neutral` (grey — the default), `brand`, `success`,\n * `warning`, `danger`, `process`, `inactive`. Pick the variant by meaning.\n *\n * The shadcn-style variants (`default`, `secondary`, `outline`, `ghost`, `link`,\n * `destructive`, `dashed`, `dashed-brand`, `gradient-brand`, `gradient-premium`) are\n * kept as deprecated aliases for backwards compatibility — prefer the semantic ones.\n */\nconst Badge = ({\n className,\n variant = 'neutral',\n asChild = false,\n ...props\n}: ComponentProps<'span'> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) => {\n const Comp = asChild ? Slot : 'span';\n\n return (\n <Comp\n data-slot='badge'\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport { type ComponentProps, type ReactNode } from 'react';\nimport { ArrowRight01Icon, MoreHorizontalIcon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport { cn } from '../../../lib/utils';\n\n/**\n * Root nav wrapper for a breadcrumb trail.\n * Renders a semantic `<nav>` with `aria-label=\"breadcrumb\"` so assistive\n * technologies identify it as the site breadcrumb landmark.\n */\nconst Breadcrumb = ({ className, ...props }: ComponentProps<'nav'>) => (\n <nav\n data-slot='breadcrumb'\n aria-label='breadcrumb'\n className={cn('', className)}\n {...props}\n />\n);\n\n/**\n * Ordered list that holds `BreadcrumbItem` children.\n * Flex-wraps so long trails reflow gracefully on narrow viewports.\n */\nconst BreadcrumbList = ({ className, ...props }: ComponentProps<'ol'>) => (\n <ol\n data-slot='breadcrumb-list'\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n);\n\n/**\n * A single step in the breadcrumb trail.\n * Renders as an `<li>` with inline-flex layout so icon separators stay\n * vertically centered next to link text.\n */\nconst BreadcrumbItem = ({ className, ...props }: ComponentProps<'li'>) => (\n <li\n data-slot='breadcrumb-item'\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n);\n\ntype BreadcrumbLinkProps = ComponentProps<'a'> & {\n /**\n * When true, the component merges its props onto its direct child element\n * rather than rendering an `<a>` tag itself.\n * Use this to pass a framework router `<Link>` component (e.g. Next.js, React Router).\n */\n asChild?: boolean;\n};\n\n/**\n * A navigable breadcrumb step.\n *\n * Supports `asChild` (Radix Slot) so consumers can swap in a router `<Link>`:\n * ```tsx\n * <BreadcrumbLink asChild>\n * <Link href='/settings'>Settings</Link>\n * </BreadcrumbLink>\n * ```\n *\n * Inherits `text-muted-foreground` from `BreadcrumbList` and upgrades to\n * `text-foreground` on hover with an `ease-out` transition.\n */\nconst BreadcrumbLink = ({\n asChild = false,\n className,\n children,\n ...props\n}: BreadcrumbLinkProps) => {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot='breadcrumb-link'\n className={cn(\n 'transition-colors duration-150 ease-out hover:text-foreground motion-reduce:transition-none',\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n );\n};\n\n/**\n * The current page indicator — the last (non-navigable) step in the trail.\n *\n * Renders as a `<span>` with `aria-current=\"page\"` so screen readers announce\n * it as the current location. Not styled as a link; uses `text-foreground` to\n * visually distinguish it from the ancestor links.\n */\nconst BreadcrumbPage = ({ className, children, ...props }: ComponentProps<'span'>) => (\n <span\n data-slot='breadcrumb-page'\n aria-current='page'\n className={cn('font-normal text-foreground', className)}\n {...props}\n >\n {children}\n </span>\n);\n\ntype BreadcrumbSeparatorProps = ComponentProps<'li'> & {\n /**\n * Custom separator content.\n * Defaults to a `ChevronRight` (`ArrowRight01`) Hugeicon when omitted.\n */\n children?: ReactNode;\n};\n\n/**\n * Visual divider between breadcrumb steps.\n *\n * Hidden from assistive technologies via `aria-hidden`.\n * Accepts custom `children` to replace the default chevron with any icon or character.\n */\nconst BreadcrumbSeparator = ({\n className,\n children,\n ...props\n}: BreadcrumbSeparatorProps) => (\n <li\n data-slot='breadcrumb-separator'\n aria-hidden='true'\n className={cn('[&>svg]:size-3.5', className)}\n {...props}\n >\n {children ?? (\n <HugeiconsIcon\n icon={ArrowRight01Icon}\n size={14}\n className='text-muted-foreground/60'\n aria-hidden='true'\n />\n )}\n </li>\n);\n\n/**\n * Collapsed-steps indicator for long breadcrumb trails.\n *\n * Renders a `MoreHorizontal` icon with a screen-reader-only \"More\" label.\n * Hidden from the accessibility tree via `aria-hidden` — the surrounding\n * visible crumbs provide sufficient context.\n */\nconst BreadcrumbEllipsis = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n data-slot='breadcrumb-ellipsis'\n aria-hidden='true'\n className={cn('flex size-6 items-center justify-center', className)}\n {...props}\n >\n <HugeiconsIcon icon={MoreHorizontalIcon} size={14} aria-hidden='true' />\n <span className='sr-only'>More</span>\n </span>\n);\n\nexport { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator };\nexport type { BreadcrumbLinkProps, BreadcrumbSeparatorProps };\n","import { type ComponentProps } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { type TrayPreference } from '../tray/resolveTrayLayout';\nimport { renderTrayLayout } from '../tray/renderTrayLayout';\n\nconst Card = ({\n className,\n interactive = false,\n selected = false,\n tray = 'none',\n children,\n ...props\n}: ComponentProps<'div'> & {\n /** Hover-elevation + press feedback for clickable cards. */\n interactive?: boolean;\n /** Brand ring for the selected state (e.g. a chosen plan). */\n selected?: boolean;\n /**\n * Tray treatment. `none` (default) = flat card. `auto` = footer-priority\n * convention (footer → footer tray, else header tray). Or force `header`/`footer`.\n */\n tray?: TrayPreference;\n}) => {\n const { edge, shellClassName, content } = renderTrayLayout({\n children,\n isFooter: (el) => el.type === CardFooter,\n isHeader: (el) => el.type === CardHeader,\n tray,\n });\n return (\n <div\n data-slot='card'\n data-selected={selected || undefined}\n data-tray={edge}\n className={cn(\n 'text-card-foreground flex flex-col rounded-[16px] border-0 shadow-[var(--shadow-card)] overflow-hidden',\n shellClassName,\n interactive &&\n 'cursor-pointer transition-[box-shadow,transform] duration-150 ease-out motion-reduce:transition-none hover:shadow-[var(--shadow-elevated)] active:scale-[0.99]',\n selected && 'shadow-[0_0_0_2px_var(--action),var(--shadow-card)]',\n className,\n )}\n {...props}\n >\n {content}\n </div>\n );\n};\n\nconst CardHeader = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-header'\n className={cn(\n '@container/card-header relative flex flex-col gap-0.5 px-4 py-3.5 bg-card border-b border-[var(--border-divider)]',\n className,\n )}\n {...props}\n />\n);\n\nconst CardTitle = ({ className, children, ...props }: ComponentProps<'h3'>) => (\n <h3\n data-slot='card-title'\n className={cn('text-base leading-none font-semibold text-balance', className)}\n {...props}\n >\n {children}\n </h3>\n);\n\nconst CardDescription = ({ className, ...props }: ComponentProps<'p'>) => (\n <p\n data-slot='card-description'\n className={cn('text-muted-foreground text-sm text-pretty', className)}\n {...props}\n />\n);\n\nconst CardAction = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-action'\n className={cn('absolute top-3.5 right-4', className)}\n {...props}\n />\n);\n\nconst CardContent = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-content'\n className={cn('flex-1 px-4 py-3 bg-card', className)}\n {...props}\n />\n);\n\nconst CardFooter = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='card-footer'\n className={cn(\n 'mt-auto flex items-center justify-end gap-2 px-4 py-3.5 border-t border-[var(--border-divider)] bg-muted',\n className,\n )}\n {...props}\n />\n);\n\nexport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n};\n","import { type SVGProps } from 'react';\n\nconst CheckIcon = ({\n size = 14,\n strokeWidth = 3,\n className,\n ...props\n}: {\n size?: number;\n strokeWidth?: number;\n} & Omit<SVGProps<SVGSVGElement>, 'strokeWidth'>) => (\n <svg\n aria-hidden='true'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n style={{ height: size, width: size }}\n className={className}\n {...props}\n >\n <path d='M4 12L9 17L20 6' pathLength={1} strokeWidth={strokeWidth} />\n </svg>\n);\n\nexport { CheckIcon };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\n\nimport { cn } from '../../../lib/utils'\n\nconst Checkbox = ({\n className,\n ...props\n}: ComponentProps<typeof CheckboxPrimitive.Root>) => {\n return (\n <CheckboxPrimitive.Root\n data-slot='checkbox'\n className={cn(\n \"group peer dark:bg-input/30 data-[state=checked]:bg-[var(--action)] data-[state=checked]:text-white dark:data-[state=checked]:bg-[var(--action)] data-[state=indeterminate]:bg-[var(--action)] data-[state=indeterminate]:text-white relative size-4 shrink-0 touch-manipulation rounded-[4px] border-0 shadow-[var(--shadow-control)] dark:shadow-[var(--shadow-control)] hover:data-[state=unchecked]:shadow-[var(--shadow-control-hover)] dark:hover:data-[state=unchecked]:shadow-[var(--shadow-control-hover)] data-[state=checked]:shadow-[var(--shadow-control-checked)] dark:data-[state=checked]:shadow-[var(--shadow-control-checked)] data-[state=indeterminate]:shadow-[var(--shadow-control-checked)] dark:data-[state=indeterminate]:shadow-[var(--shadow-control-checked)] transition-[color,box-shadow,background-color] duration-200 ease-out motion-reduce:transition-none outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer after:absolute after:-inset-[14px] after:content-['']\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot='checkbox-indicator'\n className='relative grid place-content-center text-current size-full'\n forceMount\n >\n {/* Minus for indeterminate */}\n <svg className='size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 motion-reduce:transition-none opacity-0 scale-[0.25] blur-[4px] group-data-[state=indeterminate]:opacity-100 group-data-[state=indeterminate]:scale-100 group-data-[state=indeterminate]:blur-none' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeLinecap='round' strokeLinejoin='round'>\n <path d='M5 12L19 12' pathLength={1} strokeWidth={3} />\n </svg>\n {/* Checkmark for checked */}\n <svg className='size-3.5 absolute inset-0 m-auto transition-[opacity,transform,filter] duration-200 motion-reduce:transition-none opacity-0 scale-[0.25] blur-[4px] group-data-[state=checked]:opacity-100 group-data-[state=checked]:scale-100 group-data-[state=checked]:blur-none' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeLinecap='round' strokeLinejoin='round'>\n <path d='M4 12L9 17L20 6' pathLength={1} strokeWidth={3} />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible'\n\nimport { cn } from '../../../lib/utils'\n\nconst Collapsible = ({\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.Root>) => (\n <CollapsiblePrimitive.Root data-slot='collapsible' {...props} />\n)\n\nconst CollapsibleTrigger = ({\n className,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) => {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot='collapsible-trigger'\n className={cn('touch-manipulation', className)}\n {...props}\n />\n )\n}\n\nconst CollapsibleContent = ({\n className,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) => (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot='collapsible-content'\n className={cn(\n 'overflow-hidden',\n 'data-[state=open]:animate-collapsible-down data-[state=closed]:animate-collapsible-up',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n)\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n Close,\n Content,\n Description,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n} from '@radix-ui/react-dialog';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport { Cancel01Icon } from '@hugeicons/core-free-icons';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../button';\nimport { type TrayPreference } from '../tray/resolveTrayLayout';\nimport { renderTrayLayout } from '../tray/renderTrayLayout';\n\n/**\n * Modal dialog (popup) overlaying the page.\n *\n * Compose with `DialogTrigger`, `DialogContent`, `DialogHeader`, `DialogTitle`,\n * `DialogDescription`, `DialogBody`, `DialogFooter`, and `DialogClose`.\n */\nconst Dialog = Root;\nconst DialogTrigger = Trigger;\nconst DialogPortal = Portal;\nconst DialogClose = Close;\n\nconst DialogOverlay = ({ className, ...props }: ComponentProps<typeof Overlay>) => (\n <Overlay\n data-slot='dialog-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] backdrop-blur-[2px] will-change-[opacity] duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n);\n\nconst DialogContent = ({\n className,\n children,\n tray = 'auto',\n ...props\n}: ComponentProps<typeof Content> & {\n /** Tray edge. `auto` = footer-priority convention; override with `header`/`footer`/`none`. */\n tray?: TrayPreference;\n}) => {\n const { edge, shellClassName, content } = renderTrayLayout({\n children,\n isFooter: (el) => el.type === DialogFooter,\n isHeader: (el) => el.type === DialogHeader,\n tray,\n });\n return (\n <DialogPortal data-slot='dialog-portal'>\n <DialogOverlay />\n <Content\n data-slot='dialog-content'\n data-tray={edge}\n className={cn(\n 'overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-[16px] border-0 shadow-[var(--shadow-elevated)] duration-200 data-[state=open]:ease-out data-[state=closed]:ease-in outline-none sm:max-w-md will-change-[opacity,transform] motion-reduce:animate-none',\n shellClassName,\n className,\n )}\n {...props}\n >\n {content}\n </Content>\n </DialogPortal>\n );\n};\n\nconst DialogHeader = ({\n className,\n showCloseButton = true,\n children,\n ...props\n}: ComponentProps<'div'> & { showCloseButton?: boolean }) => (\n <div\n data-slot='dialog-header'\n className={cn(\n // px 16 / py 16 — symmetric, per the Dialog tuner spec.\n 'relative flex flex-col gap-0.5 px-4 py-4 border-b border-[var(--border-hairline)] bg-card sm:text-left',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <Close\n data-slot='dialog-close'\n className='absolute top-1/2 right-2.5 -translate-y-1/2 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease-out motion-reduce:transition-none hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden cursor-pointer touch-manipulation before:absolute before:-inset-[8px] before:content-[\"\"]'\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n <span className='sr-only'>Close</span>\n </Close>\n )}\n </div>\n);\n\nconst DialogBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot='dialog-body'\n className={cn('px-4 py-[18px] bg-card', className)}\n {...props}\n />\n);\n\nconst DialogFooter = ({\n className,\n showCloseButton = false,\n children,\n ...props\n}: ComponentProps<'div'> & { showCloseButton?: boolean }) => (\n <div\n data-slot='dialog-footer'\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end px-3 py-3.5 border-t border-[var(--border-divider)] bg-muted', className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <Close asChild>\n <Button variant='outline'>Close</Button>\n </Close>\n )}\n </div>\n);\n\nconst DialogTitle = ({ className, ...props }: ComponentProps<typeof Title>) => (\n <Title\n data-slot='dialog-title'\n className={cn('text-[17px] leading-none font-semibold text-balance', className)}\n {...props}\n />\n);\n\nconst DialogDescription = ({\n className,\n ...props\n}: ComponentProps<typeof Description>) => (\n <Description\n data-slot='dialog-description'\n className={cn('text-muted-foreground text-sm text-pretty', className)}\n {...props}\n />\n);\n\nexport {\n Dialog,\n DialogBody,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Search01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { cn } from '../../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../dialog';\n\nconst Command = ({ className, ...props }: ComponentProps<typeof CommandPrimitive>) => (\n <CommandPrimitive\n data-slot='command'\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className,\n )}\n {...props}\n />\n);\n\nconst CommandDialog = ({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n ...props\n}: ComponentProps<typeof Dialog> & {\n className?: string;\n description?: string;\n title?: string;\n}) => (\n <Dialog {...props}>\n <DialogContent className={cn('overflow-hidden p-0', className)}>\n <DialogHeader className='sr-only'>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command className='[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5'>\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n);\n\nconst CommandInput = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Input>) => (\n <div data-slot='command-input-wrapper' className='flex h-9 items-center gap-2 border-b px-3'>\n <HugeiconsIcon\n icon={Search01Icon}\n size={16}\n className='shrink-0 text-muted-foreground/70'\n />\n <CommandPrimitive.Input\n data-slot='command-input'\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n);\n\nconst CommandList = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.List>) => (\n <CommandPrimitive.List\n data-slot='command-list'\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto p-1', className)}\n {...props}\n />\n);\n\nconst CommandEmpty = ({ ...props }: ComponentProps<typeof CommandPrimitive.Empty>) => (\n <CommandPrimitive.Empty\n data-slot='command-empty'\n className='py-6 text-center text-sm'\n {...props}\n />\n);\n\nconst CommandGroup = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Group>) => (\n <CommandPrimitive.Group\n data-slot='command-group'\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n);\n\nconst CommandSeparator = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Separator>) => (\n <CommandPrimitive.Separator\n data-slot='command-separator'\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n);\n\nconst CommandItem = ({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Item>) => (\n <CommandPrimitive.Item\n data-slot='command-item'\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n);\n\nconst CommandShortcut = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n data-slot='command-shortcut'\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n);\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n};\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cn } from '../../../lib/utils'\n\nconst Popover = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Root>) => (\n <PopoverPrimitive.Root data-slot='popover' {...props} />\n)\n\nconst PopoverTrigger = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Trigger>) => (\n <PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />\n)\n\nconst PopoverContent = ({\n className,\n align = 'center',\n sideOffset = 8,\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Content>) => {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot='popover-content'\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-98 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-xl border-0 p-4 shadow-[var(--shadow-elevated)] outline-hidden will-change-[opacity,transform] motion-reduce:animate-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nconst PopoverAnchor = ({\n ...props\n}: ComponentProps<typeof PopoverPrimitive.Anchor>) => (\n <PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />\n)\n\nconst PopoverHeader = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='popover-header'\n className={cn('flex flex-col gap-1 text-sm', className)}\n {...props}\n />\n )\n}\n\nconst PopoverTitle = ({ className, children, ...props }: ComponentProps<'h2'>) => {\n return (\n <h2\n data-slot='popover-title'\n className={cn('font-medium text-balance', className)}\n {...props}\n >\n {children}\n </h2>\n )\n}\n\nconst PopoverDescription = ({\n className,\n ...props\n}: ComponentProps<'p'>) => {\n return (\n <p\n data-slot='popover-description'\n className={cn('text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ArrowDown01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { cn } from '../../../lib/utils';\nimport { CheckIcon } from '../check-icon';\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../command';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\n\n/** A single selectable option rendered inside the Combobox dropdown. */\ntype ComboboxOption = {\n /** The human-readable label shown in the trigger and list. */\n label: string;\n /** The machine-readable value passed to `onValueChange`. */\n value: string;\n};\n\n/** Props for the controlled `Combobox` component. */\ntype ComboboxProps = {\n /** Additional class names forwarded to the trigger button. */\n className?: string;\n /** When true the trigger is rendered in a disabled state and the popover cannot open. */\n disabled?: boolean;\n /** Text shown when the search query matches no options. Defaults to \"No results.\" */\n emptyText?: string;\n /** Called with the newly selected option's value when the user picks an item. */\n onValueChange: (value: string) => void;\n /** The list of options to search and select from. */\n options: ComboboxOption[];\n /** Text shown in the trigger when no option is selected. Defaults to \"Select…\". */\n placeholder?: string;\n /** Placeholder text shown inside the search input. Defaults to \"Search…\". */\n searchPlaceholder?: string;\n /** The currently selected value. Pass `undefined` to show the placeholder. */\n value?: string;\n};\n\n/**\n * Searchable single-select Combobox.\n *\n * Composes `Popover`, `Button`, and `Command` from the droplet design system.\n * The trigger is a full-width `outline` Button with a rotating chevron that\n * signals open/closed state. Selecting an item closes the popover, fires\n * `onValueChange`, and shows a check mark next to the active selection.\n *\n * @example\n * ```tsx\n * const [chain, setChain] = useState('');\n * <Combobox\n * options={[{ value: 'eth', label: 'Ethereum' }, { value: 'sol', label: 'Solana' }]}\n * value={chain}\n * onValueChange={setChain}\n * placeholder=\"Select a chain\"\n * />\n * ```\n */\nconst Combobox = ({\n options,\n value,\n onValueChange,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results.',\n className,\n disabled = false,\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n\n const selectedLabel = options.find((opt) => opt.value === value)?.label;\n\n // eslint-disable-next-line custom-rules/require-single-object-param -- internal cmdk onSelect handler; receives a single string value, not a named-args object\n const handleSelect = (selectedValue: string) => {\n onValueChange(selectedValue);\n setOpen(false);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n {/*\n * Styled to be visually identical to SelectTrigger (a field, not a\n * button) so Combobox and Select read as the same kind of control.\n * `aria-haspopup=\"listbox\"` signals it opens a searchable list.\n */}\n <button\n type='button'\n data-slot='combobox-trigger'\n aria-expanded={open}\n aria-haspopup='listbox'\n disabled={disabled}\n className={cn(\n 'flex h-8 w-full touch-manipulation items-center justify-between gap-1.5 rounded-md border-0 bg-background px-3 text-[13px] whitespace-nowrap dark:bg-input/30',\n 'shadow-[var(--shadow-input)] hover:shadow-[var(--shadow-input-hover)]',\n 'transition-[color,box-shadow] duration-100 ease-out motion-reduce:transition-none',\n 'outline-none focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_var(--ring-halo)]',\n 'cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n >\n <span className={cn('truncate', !selectedLabel && 'text-muted-foreground/60')}>\n {selectedLabel ?? placeholder}\n </span>\n {/* Chevron rotates 180° on open — matches SelectTrigger exactly. */}\n <HugeiconsIcon\n icon={ArrowDown01Icon}\n size={16}\n className={cn(\n 'shrink-0 opacity-50 transition-transform duration-150 ease-out motion-reduce:transition-none',\n open && 'rotate-180',\n )}\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className='w-[var(--radix-popover-trigger-width)] p-0'\n align='start'\n sideOffset={4}\n >\n <Command className='rounded-[inherit]'>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n {options.map((opt) => (\n <CommandItem\n key={opt.value}\n value={opt.value}\n onSelect={handleSelect}\n >\n {/*\n * The check icon occupies a fixed slot so all labels stay\n * horizontally aligned regardless of selection state.\n */}\n <CheckIcon\n className={cn(\n 'shrink-0',\n value === opt.value ? 'opacity-100' : 'opacity-0',\n )}\n />\n {opt.label}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport { Combobox };\nexport type { ComboboxOption, ComboboxProps };\n","'use client';\n\nimport type {\n ComponentPropsWithoutRef,\n ComponentRef,\n HTMLAttributes} from 'react';\nimport {\n forwardRef\n} from 'react';\nimport {\n CheckboxItem,\n Content,\n Group,\n Item,\n ItemIndicator,\n Label,\n Portal,\n RadioGroup,\n RadioItem,\n Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n Trigger,\n} from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '../../../lib/utils';\n\nconst DropdownMenu = Root;\n\nconst DropdownMenuTrigger = Trigger;\n\nconst DropdownMenuGroup = Group;\n\nconst DropdownMenuSub = Sub;\n\nconst DropdownMenuContent = forwardRef<\n ComponentRef<typeof Content>,\n ComponentPropsWithoutRef<typeof Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <Portal>\n <Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-[var(--shadow-elevated)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n </Portal>\n));\nDropdownMenuContent.displayName = Content.displayName;\n\nconst DropdownMenuItem = forwardRef<\n ComponentRef<typeof Item>,\n ComponentPropsWithoutRef<typeof Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\"size-\"])]:size-4',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = Item.displayName;\n\nconst DropdownMenuCheckboxItem = forwardRef<\n ComponentRef<typeof CheckboxItem>,\n ComponentPropsWithoutRef<typeof CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className='absolute left-2 flex size-3.5 items-center justify-center'>\n <ItemIndicator>\n <CheckIcon className='size-3.5' />\n </ItemIndicator>\n </span>\n {children}\n </CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = CheckboxItem.displayName;\n\nconst DropdownMenuRadioGroup = RadioGroup;\n\nconst DropdownMenuRadioItem = forwardRef<\n ComponentRef<typeof RadioItem>,\n ComponentPropsWithoutRef<typeof RadioItem>\n>(({ className, children, ...props }, ref) => (\n <RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50',\n className,\n )}\n {...props}\n >\n <span className='absolute left-2 flex size-3.5 items-center justify-center'>\n <ItemIndicator>\n <CircleIcon className='size-2 fill-current' />\n </ItemIndicator>\n </span>\n {children}\n </RadioItem>\n));\nDropdownMenuRadioItem.displayName = RadioItem.displayName;\n\nconst DropdownMenuLabel = forwardRef<\n ComponentRef<typeof Label>,\n ComponentPropsWithoutRef<typeof Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <Label\n ref={ref}\n data-slot='dropdown-menu-label'\n className={cn(\n 'px-2 py-1.5 text-sm font-medium',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = Label.displayName;\n\nconst DropdownMenuSeparator = forwardRef<\n ComponentRef<typeof Separator>,\n ComponentPropsWithoutRef<typeof Separator>\n>(({ className, ...props }, ref) => (\n <Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: HTMLAttributes<HTMLSpanElement>) => (\n <span\n aria-hidden='true'\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground',\n className,\n )}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nconst DropdownMenuSubTrigger = forwardRef<\n ComponentRef<typeof SubTrigger>,\n ComponentPropsWithoutRef<typeof SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className='ml-auto size-4' />\n </SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = SubTrigger.displayName;\n\nconst DropdownMenuSubContent = forwardRef<\n ComponentRef<typeof SubContent>,\n ComponentPropsWithoutRef<typeof SubContent>\n>(({ className, ...props }, ref) => (\n <SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-32 overflow-hidden rounded-md bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = SubContent.displayName;\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","'use client';\n\nimport { type ComponentProps, type ReactNode } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nimport { cn } from '../../../lib/utils';\n\nconst wellVariants = cva('rounded-xl', {\n defaultVariants: {\n gap: 'sm',\n spacing: 'default',\n variant: 'inset',\n },\n variants: {\n gap: {\n default: 'space-y-4',\n lg: 'space-y-5',\n none: '',\n sm: 'space-y-3',\n },\n spacing: {\n default: 'p-4',\n lg: 'p-5',\n none: 'p-0',\n sm: 'p-3',\n },\n variant: {\n default: 'bg-muted/50',\n inset: 'bg-muted/50 border border-border',\n outline: 'border border-border',\n },\n },\n});\n\nconst Well = ({\n className,\n gap,\n spacing,\n variant,\n ...props\n}: ComponentProps<'div'> & VariantProps<typeof wellVariants>) => (\n <div\n data-slot='well'\n data-spacing={spacing ?? 'default'}\n className={cn(wellVariants({ gap, spacing, variant }), className)}\n {...props}\n />\n);\n\nconst WellReveal = ({\n children,\n className,\n open,\n}: {\n children: ReactNode;\n className?: string;\n open: boolean;\n}) => (\n <div\n className='grid transition-[grid-template-rows] duration-[220ms] ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none'\n style={{ gridTemplateRows: open ? '1fr' : '0fr' }}\n aria-hidden={!open}\n // inert removes the content from the accessibility tree and tab order when collapsed\n inert={!open}\n >\n <div className='overflow-hidden'>\n <div\n className={cn(\n 'px-0.5 pb-0.5 [&>[data-slot=well]:not([data-spacing=none])]:p-[22px]',\n className,\n )}\n >\n {children}\n </div>\n </div>\n </div>\n);\n\nexport { Well, WellReveal, wellVariants };\n","'use client';\n\nimport {\n Children,\n Fragment,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from 'react';\nimport { motion, useReducedMotion } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\nimport { Card } from '../card';\nimport { WellReveal } from '../well';\n\n// The vertical gap (px) that opens at a seam when an item detaches. Kept here so\n// consumers never reproduce the spring/gap math the pattern used to require.\nconst DETACH_GAP_PX = 12;\n\n/**\n * One row of a {@link FlushCardStack}. Purely declarative — the parent stack\n * reads these props to compute every item's fuse/detach geometry and renders the\n * card, so an `Item` used outside a `FlushCardStack` renders nothing.\n */\nexport type FlushCardStackItemProps = {\n /** Optional reveal content (e.g. a `Well`). An item with none never detaches. */\n children?: ReactNode;\n /** Extra classes merged onto this item's card. */\n className?: string;\n /** Always-visible row content (e.g. a `ToggleRow`). */\n header: ReactNode;\n /**\n * Drives BOTH the inline reveal and the detach. When `true` and the item has\n * reveal content (`children`), the item floats free of its neighbours with a\n * spring gap; otherwise the toggle state has no effect on the layout.\n */\n open?: boolean;\n};\n\n/**\n * Declarative item marker for {@link FlushCardStack}. Renders nothing on its own;\n * the stack consumes its props.\n */\nconst FlushCardStackItem = (_props: FlushCardStackItemProps): null => null;\n\n/**\n * Props for {@link FlushCardStack}.\n */\nexport type FlushCardStackProps = {\n /** `FlushCardStack.Item` children. */\n children: ReactNode;\n /** Extra classes merged onto the stack wrapper. */\n className?: string;\n};\n\nconst isStackItem = (\n child: ReactNode,\n): child is ReactElement<FlushCardStackItemProps> =>\n isValidElement(child) && child.type === FlushCardStackItem;\n\nconst hasReveal = (item: ReactElement<FlushCardStackItemProps>): boolean =>\n Boolean(item.props.children);\n\n// An item detaches (floats) only when it has reveal content AND is open. This is\n// the single rule that drives every seam: toggle state alone is never enough.\nconst detaches = (item: ReactElement<FlushCardStackItemProps>): boolean =>\n hasReveal(item) && Boolean(item.props.open);\n\n/**\n * A vertical stack of settings cards that fuse into one block by default and\n * detach with a spring gap when an item's reveal is opened.\n *\n * Composed from {@link Card} + {@link WellReveal} (+ `motion`); it encapsulates\n * the `-mt-px` / `rounded-[16px]` / gap math so consumers pass only per-item\n * `open` + content:\n *\n * ```tsx\n * <FlushCardStack>\n * <FlushCardStack.Item open={emailOn} header={<ToggleRow … />}>\n * <Well gap='sm'>{/* checkbox rows *\\/}</Well>\n * </FlushCardStack.Item>\n * <FlushCardStack.Item header={<ToggleRow … />} />\n * </FlushCardStack>\n * ```\n *\n * Rule: a seam (12px spring gap + facing edges rounding to `rounded-[16px]`)\n * opens between two cards when EITHER side is an open reveal item — so an open\n * middle item floats free on both sides, while an open first/last item produces a\n * single inner split. Items with no reveal, or closed reveals, always fuse.\n */\nconst FlushCardStack = ({ children, className }: FlushCardStackProps) => {\n const prefersReducedMotion = useReducedMotion();\n const items = Children.toArray(children).filter(isStackItem);\n const lastIndex = items.length - 1;\n\n // Reduced motion snaps the gap open/closed instead of springing it.\n const gapTransition = prefersReducedMotion\n ? { duration: 0 }\n : { bounce: 0, duration: 0.4, type: 'spring' as const };\n\n return (\n <div data-slot='flush-card-stack' className={className}>\n {items.map((item, index) => {\n const prev = items[index - 1];\n const next = items[index + 1];\n const isFirst = index === 0;\n const isLast = index === lastIndex;\n\n // A seam opens between two cards when either side is a floating item.\n const splitAbove = !isFirst && (detaches(item) || detaches(prev));\n const splitBelow = !isLast && (detaches(item) || detaches(next));\n\n const roundTop = isFirst || splitAbove;\n const roundBottom = isLast || splitBelow;\n\n // Render a gap below whenever a seam is *possible* here (either neighbour\n // can reveal), so opening animates the gap growing from 0 to 12px.\n const gapPossible = !isLast && (hasReveal(item) || hasReveal(next));\n\n return (\n <Fragment key={item.key ?? index}>\n <Card\n data-detached={detaches(item) || undefined}\n className={cn(\n 'gap-0 py-0 transition-[border-radius] duration-300',\n // Fused top: square the corner and pull up 1px so the shared\n // shadow ring isn't doubled. Post-seam tops stay rounded.\n !roundTop && 'rounded-t-none -mt-px',\n !roundBottom && 'rounded-b-none',\n item.props.className,\n )}\n >\n <div className='px-5 py-4'>{item.props.header}</div>\n {hasReveal(item) && (\n <WellReveal open={Boolean(item.props.open)}>\n {item.props.children}\n </WellReveal>\n )}\n </Card>\n {gapPossible && (\n <motion.div\n aria-hidden\n data-slot='flush-card-gap'\n data-open={splitBelow || undefined}\n initial={false}\n animate={{ height: splitBelow ? DETACH_GAP_PX : 0 }}\n transition={gapTransition}\n />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nFlushCardStack.Item = FlushCardStackItem;\n\nexport { FlushCardStack };\n","'use client'\n\nimport { type ReactNode, createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\n\ninterface IconConfig {\n // undefined = icon's built-in default\n setStrokeWidth: (v: number | undefined) => void, \n strokeWidth: number | undefined\n}\n\nconst IconConfigContext = createContext<IconConfig>({\n setStrokeWidth: () => {},\n strokeWidth: undefined,\n})\n\nexport const IconConfigProvider = ({ children }: { children: ReactNode }) => {\n const [strokeWidth, setStrokeWidth] = useState<number | undefined>(() => {\n if (globalThis.window === undefined) return undefined\n const stored = localStorage.getItem('icon-stroke-width')\n if (stored === 'default') return undefined\n const n = Number.parseFloat(stored ?? '')\n return Number.isNaN(n) ? undefined : n\n })\n\n // Sync to CSS variable so all HugeiconsIcon instances respond (not just <Icon> wrapper)\n useEffect(() => {\n document.documentElement.style.setProperty('--icon-stroke-width', String(strokeWidth ?? 1.75))\n }, [strokeWidth])\n\n const applyStrokeWidth = useCallback((v: number | undefined) => {\n setStrokeWidth(v)\n localStorage.setItem('icon-stroke-width', v === undefined ? 'default' : String(v))\n }, [])\n\n // Memoize the context value so consumers don't re-render on every parent render.\n const value = useMemo(\n () => ({ setStrokeWidth: applyStrokeWidth, strokeWidth }),\n [applyStrokeWidth, strokeWidth],\n )\n\n return (\n <IconConfigContext.Provider value={value}>\n {children}\n </IconConfigContext.Provider>\n )\n}\n\nexport const useIconConfig = () => useContext(IconConfigContext)\n","'use client'\n\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport type { HugeiconsIconProps } from '@hugeicons/react'\n\nimport { useIconConfig } from '../../icon-config'\n\n/** Drop-in replacement for HugeiconsIcon — reads global strokeWidth from IconConfigContext */\nexport const Icon = (props: HugeiconsIconProps) => {\n const { strokeWidth } = useIconConfig()\n return <HugeiconsIcon strokeWidth={strokeWidth ?? 1.75} {...props} />\n}\n","'use client';\n\nimport {\n Children,\n type ReactNode,\n cloneElement,\n isValidElement,\n useId,\n} from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { Label } from '../label';\n\ntype FieldProps = {\n /** The form control(s) to render inside the field wrapper. */\n children: ReactNode;\n /** Extra class names merged onto the outer grid wrapper. */\n className?: string;\n /** Secondary helper text rendered below the control. */\n description?: ReactNode;\n /**\n * Validation error message. When present, renders with `role=\"alert\"` and\n * `text-[var(--text-danger)]`, and injects `aria-invalid` onto a single\n * child element.\n */\n error?: ReactNode;\n /**\n * Override the auto-generated control id. Useful when the consumer already\n * manages a stable id. When omitted, a React-stable id is generated via\n * `useId()` and injected onto the single child element (if applicable).\n */\n htmlFor?: string;\n /** Visible label rendered above the control and linked via `htmlFor`. */\n label?: ReactNode;\n /**\n * When true, appends a red asterisk to the label to signal that the field\n * is required. Does not inject the `required` attribute on the control — set\n * that on the control itself.\n */\n required?: boolean;\n};\n\n/**\n * A generic labeled form-field wrapper.\n *\n * Wires a `<Label>`, an arbitrary form control, an optional description, and\n * an error message together with the correct `id`/`htmlFor`/`aria-describedby`\n * associations so callers don't have to hand-assemble these.\n *\n * When there is exactly one child element, `Field` uses `cloneElement` to\n * inject:\n * - `id` — links the label's `htmlFor` to the control\n * - `aria-describedby` — references the description and/or error paragraph ids\n * - `aria-invalid` — `true` when `error` is present\n *\n * @example\n * ```tsx\n * <Field label=\"Email\" description=\"We'll never share your email.\" required>\n * <Input type=\"email\" />\n * </Field>\n *\n * <Field label=\"Email\" error=\"Enter a valid email address.\">\n * <Input type=\"email\" />\n * </Field>\n * ```\n */\nconst Field = ({\n label,\n description,\n error,\n required,\n htmlFor,\n children,\n className,\n}: FieldProps) => {\n const generatedId = useId();\n const controlId = htmlFor ?? generatedId;\n\n const descriptionId = `${controlId}-description`;\n const errorId = `${controlId}-error`;\n\n // Build the aria-describedby value from whichever supplemental ids exist.\n const describedByParts: string[] = [];\n if (description) describedByParts.push(descriptionId);\n if (error) describedByParts.push(errorId);\n const ariaDescribedBy =\n describedByParts.length > 0 ? describedByParts.join(' ') : undefined;\n\n // Inject accessibility props onto the single child element when possible.\n // We only attempt cloneElement when there is exactly one React element child\n // to avoid ambiguous multi-control scenarios.\n const childArray = Children.toArray(children);\n const singleChild =\n childArray.length === 1 && isValidElement(childArray[0])\n ? childArray[0]\n : null;\n\n const enrichedChild = singleChild\n ? cloneElement(singleChild as React.ReactElement<Record<string, unknown>>, {\n 'aria-describedby':\n (singleChild.props as Record<string, unknown>)['aria-describedby'] ??\n ariaDescribedBy,\n id: (singleChild.props as Record<string, unknown>).id ?? controlId,\n // Only set aria-invalid when there is an error; avoids overwriting an\n // explicit aria-invalid={false} the consumer may have set deliberately.\n ...(error\n ? { 'aria-invalid': true }\n : {}),\n })\n : null;\n\n return (\n <div className={cn('grid gap-1.5', className)}>\n {label && (\n <Label htmlFor={controlId}>\n {label}\n {required && (\n // The asterisk is presentational; the label text already\n // communicates the field is required via `required` on the control.\n <span aria-hidden className='ml-0.5 text-[var(--text-danger)]'>\n *\n </span>\n )}\n </Label>\n )}\n\n {/* Render the enriched single child or the original children as-is. */}\n {enrichedChild ?? children}\n\n {description && (\n <p id={descriptionId} className='text-sm text-muted-foreground'>\n {description}\n </p>\n )}\n\n {error && (\n <p\n id={errorId}\n role='alert'\n className='text-sm text-[var(--text-danger)]'\n >\n {error}\n </p>\n )}\n </div>\n );\n};\n\nField.displayName = 'Field';\n\nexport { Field };\nexport type { FieldProps };\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Kbd = ({ className, ...props }: ComponentProps<'kbd'>) => {\n return (\n <kbd\n data-slot='kbd'\n className={cn(\n \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none\",\n \"[&_svg:not([class*='size-'])]:size-3\",\n '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',\n className\n )}\n {...props}\n />\n )\n}\n\nconst KbdGroup = ({ className, ...props }: ComponentProps<'kbd'>) => {\n return (\n <kbd\n data-slot='kbd-group'\n className={cn('inline-flex items-center gap-1', className)}\n {...props}\n />\n )\n}\n\nexport { Kbd, KbdGroup }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport { type VariantProps, cva } from 'class-variance-authority';\n\nimport { cn } from '../../../lib/utils';\n\nconst progressVariants = cva(\n 'h-full w-full flex-1 transition-transform duration-500 ease-out motion-reduce:transition-none',\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n brand: 'bg-[var(--brand-default)]',\n danger: 'bg-[var(--danger-default)]',\n default: 'bg-primary',\n process: 'bg-[var(--process-default)]',\n success: 'bg-[var(--success-default)]',\n warning: 'bg-[var(--warning-default)]',\n },\n },\n },\n);\n\nexport type ProgressProps = Omit<ComponentProps<'div'>, 'children'> &\n VariantProps<typeof progressVariants> & {\n indeterminate?: boolean;\n value?: number;\n };\n\nconst Progress = ({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className,\n indeterminate = false,\n value,\n variant,\n ...props\n}: ProgressProps & { 'aria-label'?: string; 'aria-labelledby'?: string }) => {\n // Clamp to [0, 100] so out-of-range values never overflow the track.\n const clamped = Math.min(100, Math.max(0, value ?? 0));\n return (\n <div\n data-slot='progress'\n className={cn('bg-primary/20 relative h-2 w-full overflow-hidden rounded-full', className)}\n {...props}\n >\n {/* Native semantic element drives screen-reader announcements; the styled\n bars below are visual only. */}\n <progress\n aria-label={ariaLabel ?? 'Progress'}\n aria-labelledby={ariaLabelledBy}\n className='sr-only'\n max={100}\n value={indeterminate ? undefined : clamped}\n />\n <div\n data-slot='progress-indicator'\n className={cn(\n progressVariants({ variant }),\n indeterminate && 'animate-progress-indeterminate motion-reduce:animate-none',\n )}\n style={\n indeterminate ? undefined : { transform: `translateX(-${100 - clamped}%)` }\n }\n />\n </div>\n );\n};\n\nexport { Progress };\n","'use client'\n\nimport { type ComponentProps, type ReactNode, useId } from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\n\nimport { cn } from '../../../lib/utils'\nimport { Label } from '../label'\n\nconst RadioGroup = ({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Root>) => {\n return (\n <RadioGroupPrimitive.Root\n data-slot='radio-group'\n className={cn('grid gap-3', className)}\n {...props}\n />\n )\n}\n\nconst RadioGroupItem = ({\n className,\n ...props\n}: ComponentProps<typeof RadioGroupPrimitive.Item>) => {\n return (\n <RadioGroupPrimitive.Item\n data-slot='radio-group-item'\n className={cn(\n \"text-[var(--action)] dark:bg-input/30 relative aspect-square size-4 shrink-0 touch-manipulation rounded-full border border-[rgba(31,41,55,0.30)] dark:border-[rgba(255,255,255,0.20)] hover:data-[state=unchecked]:border-[rgba(31,41,55,0.45)] dark:hover:data-[state=unchecked]:border-[rgba(255,255,255,0.35)] data-[state=checked]:border-[var(--action)] shadow-[var(--shadow-radio)] dark:shadow-[var(--shadow-radio)] transition-[color,box-shadow,border-color] duration-100 ease-out motion-reduce:transition-none outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer after:absolute after:-inset-[14px] after:content-['']\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot='radio-group-indicator'\n className='group/indicator relative flex items-center justify-center'\n forceMount\n >\n <span className=\"bg-[var(--action)] absolute top-1/2 left-1/2 size-2 rounded-full -translate-x-1/2 -translate-y-1/2 transition-[opacity,transform] duration-150 ease-out motion-reduce:transition-none group-data-[state=unchecked]/indicator:scale-0 group-data-[state=unchecked]/indicator:opacity-0\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\n/**\n * Alias for `RadioGroupItem` for use in labeled-row patterns.\n *\n * A radio is inherently part of a group — it must always live inside a\n * `RadioGroup`. For a standalone on/off toggle, prefer `Checkbox` or `Switch`.\n * `Radio` is the labeled-usage alias that signals \"I'm pairing this with a\n * `<Label>`\" rather than constructing raw item markup.\n */\nconst Radio = RadioGroupItem\n\ntype RadioFieldProps = {\n /** Extra class names merged onto the outer wrapper element. */\n className?: string,\n /** Optional secondary line rendered below the label. */\n description?: ReactNode,\n /** Whether this field is non-interactive. */\n disabled?: boolean,\n /**\n * Override the generated element `id`. Useful when the parent already\n * manages a stable id. When omitted, a React-stable id is generated.\n */\n id?: string,\n /** Visible label text or element rendered next to the radio button. */\n label: ReactNode,\n /** The value this radio represents within its parent `RadioGroup`. */\n value: string\n}\n\n/**\n * A convenience labeled-radio row for use inside a `RadioGroup`.\n *\n * Renders a `RadioGroupItem` paired with an associated `<Label>` (and an\n * optional description line) so callers don't have to wire up `id`/`htmlFor`\n * by hand. The `id` is stable across renders via `React.useId` unless\n * overridden.\n *\n * @example\n * ```tsx\n * <RadioGroup value={val} onValueChange={setVal}>\n * <RadioField value=\"a\" label=\"Option A\" description=\"First choice\" />\n * <RadioField value=\"b\" label=\"Option B\" />\n * </RadioGroup>\n * ```\n */\nconst RadioField = ({\n value,\n label,\n description,\n disabled,\n id: idProp,\n className,\n}: RadioFieldProps) => {\n const generatedId = useId()\n const id = idProp ?? generatedId\n\n return (\n <div\n className={cn(\n 'flex items-start gap-3',\n disabled && 'opacity-50',\n className,\n )}\n >\n <RadioGroupItem\n value={value}\n id={id}\n disabled={disabled}\n className='mt-0.5'\n />\n <div className='grid gap-0.5'>\n <Label\n htmlFor={id}\n className={cn(\n 'cursor-pointer transition-colors duration-100 ease-out motion-reduce:transition-none',\n disabled && 'cursor-not-allowed',\n )}\n >\n {label}\n </Label>\n {description && (\n <p className='text-sm text-muted-foreground'>{description}</p>\n )}\n </div>\n </div>\n )\n}\n\nexport { RadioGroup, RadioGroupItem, Radio, RadioField }\n","'use client';\n\nimport { type ComponentProps, type ReactNode } from 'react';\nimport { ArrowLeft01Icon, ArrowRight01Icon, MoreHorizontalIcon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button, buttonVariants } from '../button/button';\n\n/**\n * Root nav wrapper for a pagination control set.\n * Renders a semantic `<nav>` with the ARIA `navigation` landmark.\n */\nconst Pagination = ({ className, ...props }: ComponentProps<'nav'>) => (\n <nav\n data-slot='pagination'\n role='navigation'\n aria-label='pagination'\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n);\n\n/**\n * Flex row that holds `PaginationItem` children.\n * Renders as a `<ul>` for correct list semantics inside the nav landmark.\n */\nconst PaginationContent = ({ className, ...props }: ComponentProps<'ul'>) => (\n <ul\n data-slot='pagination-content'\n className={cn('flex flex-row items-center gap-1', className)}\n {...props}\n />\n);\n\n/**\n * A single `<li>` slot inside `PaginationContent`.\n * Acts as a structural wrapper — pair with `PaginationLink`, `PaginationPrevious`, or `PaginationNext`.\n */\nconst PaginationItem = ({ className, ...props }: ComponentProps<'li'>) => (\n <li data-slot='pagination-item' className={cn('', className)} {...props} />\n);\n\ntype PaginationLinkProps = ComponentProps<'a'> & {\n /** When true, renders the link with the `outline` variant and sets `aria-current=\"page\"`. */\n isActive?: boolean;\n};\n\n/**\n * An individual page link.\n * Applies `buttonVariants` — `outline` when active, `ghost` when inactive — so focus rings,\n * `ease-out` transitions, and `motion-reduce` suppression are all inherited from Button's CVA base.\n */\nconst PaginationLink = ({\n className,\n isActive = false,\n children,\n ...props\n}: PaginationLinkProps) => (\n <a\n data-slot='pagination-link'\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n buttonVariants({\n size: 'icon-sm',\n variant: isActive ? 'outline' : 'ghost',\n }),\n className,\n )}\n {...props}\n >\n {children}\n </a>\n);\n\n/**\n * Previous-page control.\n * Disabled when the consumer passes `aria-disabled=\"true\"` or the native `disabled` attribute.\n * Touch target is expanded to 44 px via the pseudo-element already baked into `icon-sm`.\n */\nconst PaginationPrevious = ({\n className,\n children,\n ...props\n}: ComponentProps<'a'>) => (\n <a\n data-slot='pagination-previous'\n aria-label='Go to previous page'\n className={cn(\n // Use `icon-sm` for the icon hit area; pair with an explicit label alongside for context\n buttonVariants({ size: 'icon-sm', variant: 'ghost' }),\n 'gap-1 pl-2.5',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowLeft01Icon} size={14} aria-hidden='true' />\n <span className='sr-only'>{children ?? 'Previous'}</span>\n </a>\n);\n\n/**\n * Next-page control.\n * Touch target is expanded to 44 px via the pseudo-element already baked into `icon-sm`.\n */\nconst PaginationNext = ({\n className,\n children,\n ...props\n}: ComponentProps<'a'>) => (\n <a\n data-slot='pagination-next'\n aria-label='Go to next page'\n className={cn(\n buttonVariants({ size: 'icon-sm', variant: 'ghost' }),\n 'gap-1 pr-2.5',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowRight01Icon} size={14} aria-hidden='true' />\n <span className='sr-only'>{children ?? 'Next'}</span>\n </a>\n);\n\n/**\n * Ellipsis placeholder shown between non-contiguous page ranges.\n * Hidden from assistive technologies via `aria-hidden` — screen readers hear the surrounding page\n * numbers and can infer that pages are omitted.\n */\nconst PaginationEllipsis = ({ className, ...props }: ComponentProps<'span'>) => (\n <span\n data-slot='pagination-ellipsis'\n aria-hidden='true'\n className={cn('flex size-7 items-center justify-center text-muted-foreground', className)}\n {...props}\n >\n <HugeiconsIcon icon={MoreHorizontalIcon} size={14} />\n <span className='sr-only'>More pages</span>\n </span>\n);\n\n// ---------------------------------------------------------------------------\n// CursorPagination — convenience wrapper for cursor-based / infinite lists\n// ---------------------------------------------------------------------------\n\ntype CursorPaginationProps = {\n className?: string;\n /** Whether a next page exists; disables the next button when false. */\n hasNext: boolean;\n /** Whether a previous page exists; disables the previous button when false. */\n hasPrevious: boolean;\n /**\n * Optional content rendered between the two navigation buttons.\n * Commonly used for a \"Page N of M\" or record-range label.\n */\n label?: ReactNode;\n /** Fired when the user requests the next page. */\n onNext: () => void;\n /** Fired when the user requests the previous page. */\n onPrevious: () => void;\n};\n\n/**\n * Pre-assembled cursor-based pagination bar.\n *\n * Renders a Previous button, an optional center label, and a Next button.\n * Each button is disabled automatically when there is no page in that direction.\n * Designed for dashboard tables and lists that use cursor/keyset pagination rather\n * than numbered pages — which is the dominant pattern in the Redcoast design system.\n *\n * @example\n * ```tsx\n * <CursorPagination\n * hasPrevious={!!cursor.before}\n * hasNext={!!cursor.after}\n * onPrevious={loadPrevious}\n * onNext={loadNext}\n * label={`${startIndex}–${endIndex} of ${total}`}\n * />\n * ```\n */\nconst CursorPagination = ({\n hasPrevious,\n hasNext,\n onPrevious,\n onNext,\n label,\n className,\n}: CursorPaginationProps) => (\n <div\n data-slot='cursor-pagination'\n className={cn('flex items-center justify-between gap-2', className)}\n >\n <Button\n variant='ghost'\n size='sm'\n disabled={!hasPrevious}\n onClick={onPrevious}\n aria-label='Go to previous page'\n >\n <HugeiconsIcon icon={ArrowLeft01Icon} size={14} aria-hidden='true' />\n Previous\n </Button>\n\n {label !== undefined && (\n <span className='text-sm text-muted-foreground tabular-nums'>{label}</span>\n )}\n\n <Button\n variant='ghost'\n size='sm'\n disabled={!hasNext}\n onClick={onNext}\n aria-label='Go to next page'\n >\n Next\n <HugeiconsIcon icon={ArrowRight01Icon} size={14} aria-hidden='true' />\n </Button>\n </div>\n);\n\nexport {\n CursorPagination,\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n};\nexport type { CursorPaginationProps, PaginationLinkProps };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '../../../lib/utils'\n\nconst ScrollArea = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof ScrollAreaPrimitive.Root>) => {\n return (\n <ScrollAreaPrimitive.Root\n data-slot='scroll-area'\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot='scroll-area-viewport'\n className='focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] motion-reduce:transition-none outline-none focus-visible:ring-[3px]'\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nconst ScrollBar = ({\n className,\n orientation = 'vertical',\n ...props\n}: ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) => {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot='scroll-area-scrollbar'\n orientation={orientation}\n className={cn(\n 'flex touch-none touch-manipulation p-px transition-[background-color] motion-reduce:transition-none select-none',\n orientation === 'vertical' &&\n 'h-full w-2.5 border-l border-l-transparent',\n orientation === 'horizontal' &&\n 'h-2.5 flex-col border-t border-t-transparent',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot='scroll-area-thumb'\n className='bg-border relative flex-1 rounded-full'\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Search01Icon } from '@hugeicons/core-free-icons'\n\nimport { Kbd } from '../kbd'\nimport { cn } from '../../../lib/utils'\n\nconst SearchInput = ({\n className,\n placeholder = 'Search...',\n shortcut = '⌘K',\n onClick,\n ...props\n}: ComponentProps<'button'> & {\n placeholder?: string\n shortcut?: string\n}) => {\n return (\n <button\n type='button'\n data-slot='search-input'\n className={cn(\n // Matches Input exactly: borderless, shadow-based field + halo focus.\n 'h-8 w-full touch-manipulation rounded-md border-0 bg-background dark:bg-input/30 shadow-[var(--shadow-input)]',\n 'hover:shadow-[var(--shadow-input-hover)]',\n 'transition-[color,box-shadow] duration-100 ease-out motion-reduce:transition-none',\n 'outline-none focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_var(--ring-halo,#0072EF26)]',\n 'flex items-center gap-2 px-2',\n 'text-sm text-muted-foreground/60 cursor-pointer',\n className\n )}\n onClick={onClick}\n {...props}\n >\n <HugeiconsIcon icon={Search01Icon} size={16} className='shrink-0 text-muted-foreground/70' />\n <span className='flex-1 text-left'>{placeholder}</span>\n {shortcut && <Kbd>{shortcut}</Kbd>}\n </button>\n )\n}\n\nexport { SearchInput }\n","'use client';\n\nimport { type ComponentProps } from 'react';\nimport {\n ArrowDown01Icon,\n ArrowUp01Icon,\n Tick01Icon,\n} from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\nimport {\n Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root,\n ScrollDownButton,\n ScrollUpButton,\n Separator,\n Trigger,\n Value,\n Viewport,\n} from '@radix-ui/react-select';\n\nimport { cn } from '../../../lib/utils';\n\nconst Select = ({ ...props }: ComponentProps<typeof Root>) => (\n <Root data-slot='select' {...props} />\n);\n\nconst SelectGroup = ({ ...props }: ComponentProps<typeof Group>) => (\n <Group data-slot='select-group' {...props} />\n);\n\nconst SelectValue = ({ ...props }: ComponentProps<typeof Value>) => (\n <Value data-slot='select-value' {...props} />\n);\n\nconst SelectTrigger = ({\n className,\n size = 'default',\n children,\n ...props\n}: ComponentProps<typeof Trigger> & {\n size?: 'sm' | 'default';\n}) => (\n <Trigger\n data-slot='select-trigger'\n data-size={size}\n className={cn(\n \"data-[placeholder]:text-muted-foreground/60 [&_svg:not([class*='text-'])]:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 flex w-fit touch-manipulation items-center justify-between gap-1.5 rounded-md border-0 bg-transparent px-3 py-2 text-[13px] whitespace-nowrap shadow-[var(--shadow-input)] hover:shadow-[var(--shadow-input-hover)] transition-[color,box-shadow] duration-100 ease-out outline-none focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_var(--ring-halo,#0072EF26)] aria-invalid:shadow-[0_0_0_1px_var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:text-[13px] data-[size=sm]:px-2.5 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[state=open]:[&>svg:last-of-type]:rotate-180\",\n className,\n )}\n {...props}\n >\n {children}\n <Icon asChild>\n <HugeiconsIcon\n icon={ArrowDown01Icon}\n size={16}\n className='opacity-50 transition-transform duration-150 ease-out motion-reduce:transition-none'\n />\n </Icon>\n </Trigger>\n);\n\nconst SelectContent = ({\n className,\n children,\n position = 'popper',\n align = 'start',\n ...props\n}: ComponentProps<typeof Content>) => (\n <Portal>\n <Content\n data-slot='select-content'\n className={cn(\n \"bg-popover text-popover-foreground will-change-[opacity,transform] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:animate-none relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-xl border-0 shadow-[var(--shadow-elevated)]\",\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1',\n )}\n >\n {children}\n </Viewport>\n <SelectScrollDownButton />\n </Content>\n </Portal>\n);\n\nconst SelectLabel = ({\n className,\n ...props\n}: ComponentProps<typeof Label>) => (\n <Label\n data-slot='select-label'\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n);\n\nconst SelectItem = ({\n className,\n children,\n ...props\n}: ComponentProps<typeof Item>) => (\n <Item\n data-slot='select-item'\n className={cn(\n \"data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[state=checked]:font-medium [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span\n data-slot='select-item-indicator'\n className='absolute right-2 flex size-3.5 items-center justify-center'\n >\n <ItemIndicator>\n <HugeiconsIcon icon={Tick01Icon} size={14} />\n </ItemIndicator>\n </span>\n <ItemText>{children}</ItemText>\n </Item>\n);\n\nconst SelectSeparator = ({\n className,\n ...props\n}: ComponentProps<typeof Separator>) => (\n <Separator\n data-slot='select-separator'\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n);\n\nconst SelectScrollUpButton = ({\n className,\n ...props\n}: ComponentProps<typeof ScrollUpButton>) => (\n <ScrollUpButton\n data-slot='select-scroll-up-button'\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowUp01Icon} size={16} aria-hidden={true} />\n </ScrollUpButton>\n);\n\nconst SelectScrollDownButton = ({\n className,\n ...props\n}: ComponentProps<typeof ScrollDownButton>) => (\n <ScrollDownButton\n data-slot='select-scroll-down-button'\n className={cn(\n 'flex cursor-default items-center justify-center py-1',\n className,\n )}\n {...props}\n >\n <HugeiconsIcon icon={ArrowDown01Icon} size={16} aria-hidden={true} />\n </ScrollDownButton>\n);\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { CheckIcon } from '../check-icon';\nimport { cn } from '../../../lib/utils';\n\ntype IconComponent = Parameters<typeof HugeiconsIcon>[0]['icon'];\n\ninterface SelectableCardProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {\n badge?: ReactNode;\n description: string;\n icon?: IconComponent;\n iconSize?: number;\n label: string;\n selected: boolean;\n}\n\nconst SelectableCard = ({\n badge,\n className,\n description,\n icon,\n iconSize = 20,\n label,\n selected,\n ...props\n}: SelectableCardProps) => (\n <button\n data-slot='selectable-card'\n data-selected={selected}\n className={cn(\n 'group/card relative flex flex-col items-start gap-2.5 p-4 rounded-xl text-left transition-[box-shadow,background-color,scale] duration-150 motion-reduce:transition-none touch-manipulation active:scale-[0.96] cursor-pointer w-full outline-none focus-visible:shadow-[0_0_0_1.5px_var(--action),0_0_0_4px_oklch(from_var(--action)_l_c_h_/_0.25)]',\n selected\n ? 'bg-[var(--action)]/5 shadow-[0_0_0_1.5px_var(--action)]'\n : 'shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.12)] hover:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20)]',\n className,\n )}\n {...props}\n >\n {icon && (\n <HugeiconsIcon icon={icon} size={iconSize} className='text-[var(--action)]' />\n )}\n <div className='w-full pr-7'>\n <div className='flex items-center gap-2'>\n <p className='text-sm font-medium text-balance'>{label}</p>\n {badge && <span className='shrink-0'>{badge}</span>}\n </div>\n <p className='text-xs text-muted-foreground mt-0.5 text-pretty'>{description}</p>\n </div>\n <div className='absolute top-4 right-4'>\n <div\n className={cn(\n 'relative size-4 shrink-0 rounded-[4px] transition-[color,box-shadow,background-color] duration-200 ease-out motion-reduce:transition-none',\n selected\n ? 'bg-[var(--action)] text-white shadow-[0_0_0_1px_var(--action),0px_1px_1px_0px_oklch(1_0_0_/_0.07)_inset,0px_2px_3px_0px_oklch(0.278_0.03_256.85_/_0.20),0px_1px_1px_0px_oklch(0_0_0_/_0.24)]'\n : 'shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.20),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)] group-hover/card:shadow-[0_0_0_1px_oklch(0.278_0.03_256.85_/_0.30),0_1px_2px_0_oklch(0_0_0_/_0.06),0_0_1px_0_oklch(0_0_0_/_0.02)]',\n )}\n >\n <CheckIcon\n size={14}\n className={cn(\n 'absolute inset-0 m-auto text-current transition-[opacity,transform,filter] duration-200 motion-reduce:transition-none',\n selected\n ? 'opacity-100 scale-100 blur-none'\n : 'opacity-0 scale-[0.25] blur-[4px]',\n )}\n />\n </div>\n </div>\n </button>\n);\n\nexport { SelectableCard };\n","'use client';\n\nimport type { ComponentPropsWithoutRef, ComponentRef} from 'react';\nimport { forwardRef } from 'react';\nimport { Root } from '@radix-ui/react-separator';\n\nimport { cn } from '../../../lib/utils';\n\nconst Separator = forwardRef<\n ComponentRef<typeof Root>,\n ComponentPropsWithoutRef<typeof Root>\n>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref,\n ) => (\n <Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = Root.displayName;\n\nexport { Separator };\n","'use client';\n\nimport { cn } from '../../../lib/utils';\n\ntype SliderProps = {\n /** Additional class names forwarded to the wrapper element. */\n className?: string;\n /** When true, the slider is non-interactive and visually dimmed. */\n disabled?: boolean;\n /** Maximum value (inclusive). Defaults to 100. */\n max?: number;\n /** Minimum value (inclusive). Defaults to 0. */\n min?: number;\n /** Callback fired when the user moves the slider. */\n onValueChange: (value: number) => void;\n /** Granularity of each step. Defaults to 1. */\n step?: number;\n /** Current value of the slider. */\n value: number;\n};\n\n/**\n * Controlled range slider built on a native `<input type=\"range\">`.\n *\n * Zero-dependency — all styling is done with Tailwind arbitrary variants so\n * no Radix/Headless UI install is needed. The filled portion is rendered via an\n * inline CSS custom property so the gradient stays in sync with the value without\n * any JS animation loop.\n */\nconst Slider = ({\n value,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className,\n}: SliderProps) => {\n // Clamp so the gradient never overflows or goes negative.\n const clamped = Math.min(max, Math.max(min, value));\n\n // Express the filled portion as a percentage for the CSS gradient.\n const range = max - min;\n const fillPercent = range === 0 ? 0 : ((clamped - min) / range) * 100;\n\n return (\n <div\n data-slot='slider'\n className={cn('relative flex w-full touch-manipulation items-center', className)}\n >\n <input\n type='range'\n data-slot='slider-input'\n min={min}\n max={max}\n step={step}\n value={clamped}\n disabled={disabled}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clamped}\n onChange={(e) => onValueChange(Number(e.target.value))}\n className={cn(\n // Reset browser defaults so we can style from scratch.\n 'w-full appearance-none bg-transparent outline-none',\n // Cursor\n 'cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',\n // --- WebKit track ---\n // The track is split into \"filled\" (left of thumb) and \"unfilled\" using a\n // linear-gradient that is driven by the --slider-fill CSS custom property\n // set via the inline style below.\n '[&::-webkit-slider-runnable-track]:h-1.5',\n '[&::-webkit-slider-runnable-track]:w-full',\n '[&::-webkit-slider-runnable-track]:rounded-full',\n '[&::-webkit-slider-runnable-track]:bg-[linear-gradient(to_right,var(--action)_var(--slider-fill,0%),var(--bg-accented)_var(--slider-fill,0%))]',\n '[&::-webkit-slider-runnable-track]:transition-[background-size] [&::-webkit-slider-runnable-track]:duration-150 [&::-webkit-slider-runnable-track]:ease-out',\n '[&::-webkit-slider-runnable-track]:motion-reduce:transition-none',\n // --- WebKit thumb ---\n '[&::-webkit-slider-thumb]:appearance-none',\n '[&::-webkit-slider-thumb]:size-4',\n '[&::-webkit-slider-thumb]:rounded-full',\n '[&::-webkit-slider-thumb]:bg-background',\n '[&::-webkit-slider-thumb]:border',\n '[&::-webkit-slider-thumb]:border-[var(--action)]',\n '[&::-webkit-slider-thumb]:shadow-[var(--shadow-control-thumb)]',\n // Vertically center the thumb on the track (track is 6px tall, thumb is 16px).\n '[&::-webkit-slider-thumb]:-mt-[5px]',\n // Smooth thumb travel\n '[&::-webkit-slider-thumb]:transition-[box-shadow] [&::-webkit-slider-thumb]:duration-150 [&::-webkit-slider-thumb]:ease-out',\n '[&::-webkit-slider-thumb]:motion-reduce:transition-none',\n // Focus-visible ring on the thumb (keyboard users)\n 'focus-visible:[&::-webkit-slider-thumb]:shadow-[0_0_0_3px_var(--ring-halo),var(--shadow-control-thumb)]',\n // --- Firefox track ---\n '[&::-moz-range-track]:h-1.5',\n '[&::-moz-range-track]:w-full',\n '[&::-moz-range-track]:rounded-full',\n '[&::-moz-range-track]:bg-[var(--bg-accented)]',\n // --- Firefox filled portion (uses the native progress pseudo-element) ---\n '[&::-moz-range-progress]:h-1.5',\n '[&::-moz-range-progress]:rounded-full',\n '[&::-moz-range-progress]:bg-[var(--action)]',\n // --- Firefox thumb ---\n '[&::-moz-range-thumb]:size-4',\n '[&::-moz-range-thumb]:rounded-full',\n '[&::-moz-range-thumb]:border',\n '[&::-moz-range-thumb]:border-[var(--action)]',\n '[&::-moz-range-thumb]:bg-background',\n '[&::-moz-range-thumb]:shadow-[var(--shadow-control-thumb)]',\n '[&::-moz-range-thumb]:transition-[box-shadow] [&::-moz-range-thumb]:duration-150 [&::-moz-range-thumb]:ease-out',\n '[&::-moz-range-thumb]:motion-reduce:transition-none',\n 'focus-visible:[&::-moz-range-thumb]:shadow-[0_0_0_3px_var(--ring-halo),var(--shadow-control-thumb)]',\n )}\n // The CSS custom property drives the WebKit gradient split point.\n // This avoids any JS animation loop — the browser re-paints directly.\n style={{ '--slider-fill': `${fillPercent}%` } as React.CSSProperties}\n />\n </div>\n );\n};\n\nexport { Slider };\nexport type { SliderProps };\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Cancel01Icon } from '@hugeicons/core-free-icons'\nimport * as SheetPrimitive from '@radix-ui/react-dialog'\n\nimport { cn } from '../../../lib/utils'\n\nconst Sheet = ({ ...props }: ComponentProps<typeof SheetPrimitive.Root>) => (\n <SheetPrimitive.Root data-slot='sheet' {...props} />\n)\n\nconst SheetTrigger = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Trigger>) => (\n <SheetPrimitive.Trigger data-slot='sheet-trigger' {...props} />\n)\n\nconst SheetClose = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Close>) => (\n <SheetPrimitive.Close data-slot='sheet-close' {...props} />\n)\n\nconst SheetPortal = ({\n ...props\n}: ComponentProps<typeof SheetPrimitive.Portal>) => (\n <SheetPrimitive.Portal data-slot='sheet-portal' {...props} />\n)\n\nconst SheetOverlay = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Overlay>) => {\n return (\n <SheetPrimitive.Overlay\n data-slot='sheet-overlay'\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-[var(--overlay-md)] will-change-[opacity] data-[state=closed]:duration-100 data-[state=open]:duration-150 [animation-timing-function:cubic-bezier(0.16,1,0.3,1)] motion-reduce:animate-none',\n className\n )}\n {...props}\n />\n )\n}\n\nconst SheetContent = ({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n overlayClassName,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Content> & {\n overlayClassName?: string,\n showCloseButton?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n}) => {\n return (\n <SheetPortal>\n <SheetOverlay className={overlayClassName} />\n <SheetPrimitive.Content\n data-slot='sheet-content'\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 border-0 shadow-[var(--shadow-elevated)] [animation-timing-function:cubic-bezier(0.32,0.72,0,1)] data-[state=closed]:duration-150 data-[state=open]:duration-200 will-change-[opacity,transform] motion-reduce:animate-none',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 sm:max-w-sm rounded-l-xl rounded-r-md',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm rounded-r-xl rounded-l-md',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-md',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-md',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground opacity-70 transition-[opacity,background-color] duration-150 ease-out motion-reduce:transition-none hover:opacity-100 hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring/50 focus:outline-hidden disabled:pointer-events-none cursor-pointer touch-manipulation before:absolute before:-inset-2 before:content-['']\">\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n <span className='sr-only'>Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nconst SheetHeader = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='sheet-header'\n className={cn('flex flex-col gap-0.5 px-4 py-3.5 border-b border-[var(--border-divider)]', className)}\n {...props}\n />\n )\n}\n\nconst SheetFooter = ({ className, ...props }: ComponentProps<'div'>) => {\n return (\n <div\n data-slot='sheet-footer'\n className={cn('mt-auto flex flex-col gap-2 px-4 py-3.5 border-t border-[var(--border-divider)] bg-muted', className)}\n {...props}\n />\n )\n}\n\nconst SheetTitle = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Title>) => {\n return (\n <SheetPrimitive.Title\n data-slot='sheet-title'\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n )\n}\n\nconst SheetDescription = ({\n className,\n ...props\n}: ComponentProps<typeof SheetPrimitive.Description>) => {\n return (\n <SheetPrimitive.Description\n data-slot='sheet-description'\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Skeleton = ({ className, ...props }: ComponentProps<'output'>) => {\n return (\n <output\n aria-label='Loading'\n data-slot='skeleton'\n className={cn(\n 'block bg-accent animate-shimmer motion-reduce:animate-none rounded-md bg-[length:200%_100%] bg-gradient-to-r from-accent via-accent/50 to-accent dark:via-accent/70',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\nimport { type CSSProperties } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Alert01Icon, Cancel01Icon, CheckmarkCircle02Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\nimport { useTheme } from 'next-themes'\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className='toaster group'\n icons={{\n error: <HugeiconsIcon icon={Cancel01Icon} size={16} />,\n info: <HugeiconsIcon icon={InformationCircleIcon} size={16} />,\n loading: <svg className='size-4 animate-spin' viewBox='0 0 24 24' fill='none'><circle className='opacity-25' cx='12' cy='12' r='10' stroke='currentColor' strokeWidth='4' /><path className='opacity-75' fill='currentColor' d='M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z' /></svg>,\n success: <HugeiconsIcon icon={CheckmarkCircle02Icon} size={16} />,\n warning: <HugeiconsIcon icon={Alert01Icon} size={16} />,\n }}\n style={\n {\n '--border-radius': 'var(--radius)',\n '--normal-bg': 'var(--popover)',\n '--normal-border': 'var(--border)',\n '--normal-text': 'var(--popover-foreground)',\n } as CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","'use client';\n\nimport { type ComponentProps } from 'react';\n\nimport { cn } from '../../../lib/utils';\nimport { CheckIcon } from '../check-icon/check-icon';\n\ntype StepperStep = {\n /** Optional supporting text rendered below the label. */\n description?: string;\n /** The visible label shown beneath the step indicator. */\n label: string;\n};\n\ntype StepperProps = {\n /** Additional class names forwarded to the root `<ol>`. */\n className?: string;\n /**\n * Zero-based index of the currently active step.\n * Steps with a lower index are treated as COMPLETED; higher as UPCOMING.\n */\n currentStep: number;\n /** Ordered list of steps to render. */\n steps: StepperStep[];\n} & Omit<ComponentProps<'ol'>, 'children'>;\n\n/**\n * Horizontal step indicator that renders an ordered sequence of steps with\n * connector lines between them.\n *\n * - **COMPLETED** (index < currentStep): filled action-coloured circle + white checkmark.\n * - **CURRENT** (index === currentStep): action-coloured border + step number; label is font-medium.\n * - **UPCOMING** (index > currentStep): muted border + step number.\n *\n * Connector lines between adjacent steps are action-coloured when the segment\n * is completed (both endpoints are ≤ currentStep) and divider-coloured otherwise.\n *\n * @example\n * <Stepper steps={[{ label: 'Account' }, { label: 'Details' }, { label: 'Review' }]} currentStep={1} />\n */\nconst Stepper = ({\n steps,\n currentStep,\n className,\n ...props\n}: StepperProps) => (\n <ol\n aria-label='Progress'\n className={cn('flex w-full items-start', className)}\n {...props}\n >\n {steps.map((step, index) => {\n const isCompleted = index < currentStep;\n const isCurrent = index === currentStep;\n // A segment is completed when both the step and the preceding step are done.\n const connectorCompleted = index > 0 && index <= currentStep;\n\n return (\n // Each list item is a flex row: [connector?] [indicator + text]\n <li\n key={step.label}\n className={cn(\n 'flex flex-1 items-start',\n // Remove flex-1 growth on the last step so the final item doesn't push right.\n index === steps.length - 1 && 'flex-none',\n )}\n aria-current={isCurrent ? 'step' : undefined}\n >\n {/* Connector line before this step (absent for the first step) */}\n {index > 0 && (\n <div\n aria-hidden='true'\n className={cn(\n 'mt-3.5 h-px flex-1 transition-colors duration-300 ease-out motion-reduce:transition-none',\n connectorCompleted\n ? 'bg-[var(--action)]'\n : 'bg-[var(--border-divider)]',\n )}\n />\n )}\n\n {/* Step body: indicator circle + label/description */}\n <div className='flex flex-col items-center gap-1.5'>\n {/* Circular indicator */}\n <div\n aria-hidden='true'\n className={cn(\n 'flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold transition-[background-color,border-color,color] duration-300 ease-out motion-reduce:transition-none select-none',\n isCompleted &&\n 'bg-[var(--action)] text-white',\n isCurrent &&\n 'border-2 border-[var(--action)] text-[var(--action)]',\n !isCompleted &&\n !isCurrent &&\n 'border border-[var(--border-default)] text-muted-foreground',\n )}\n >\n {isCompleted ? (\n <CheckIcon size={13} strokeWidth={3} />\n ) : (\n String(index + 1)\n )}\n </div>\n\n {/* Step label */}\n <span\n className={cn(\n 'max-w-[6rem] text-center text-xs leading-tight transition-colors duration-300 ease-out motion-reduce:transition-none',\n isCurrent\n ? 'font-medium text-foreground'\n : 'text-muted-foreground',\n )}\n >\n {step.label}\n </span>\n\n {/* Optional description */}\n {step.description && (\n <span className='max-w-[6rem] text-center text-[10px] leading-tight text-muted-foreground'>\n {step.description}\n </span>\n )}\n </div>\n\n {/* Connector line after this step (absent for the last step) */}\n {index < steps.length - 1 && (\n <div\n aria-hidden='true'\n className={cn(\n 'mt-3.5 h-px flex-1 transition-colors duration-300 ease-out motion-reduce:transition-none',\n // This connector is completed when the next step is already done.\n index + 1 <= currentStep\n ? 'bg-[var(--action)]'\n : 'bg-[var(--border-divider)]',\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\n);\n\nexport { Stepper };\nexport type { StepperProps, StepperStep };\n","'use client'\n\nimport { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Table = ({ className, ...props }: ComponentProps<'table'>) => {\n return (\n <div\n data-slot='table-container'\n className='relative w-full overflow-x-auto'\n >\n <table\n data-slot='table'\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n )\n}\n\nconst TableHeader = ({ className, ...props }: ComponentProps<'thead'>) => {\n return (\n <thead\n data-slot='table-header'\n className={cn(\n '[&_tr]:border-b [&_tr]:border-[var(--border-divider)] [&_tr]:hover:bg-transparent bg-[var(--bg-accented)]/50 sticky top-0 z-20',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableBody = ({ className, ...props }: ComponentProps<'tbody'>) => {\n return (\n <tbody\n data-slot='table-body'\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n )\n}\n\nconst TableFooter = ({ className, ...props }: ComponentProps<'tfoot'>) => {\n return (\n <tfoot\n data-slot='table-footer'\n className={cn(\n 'bg-muted/50 border-t font-medium [&>tr]:last:border-b-0',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableRow = ({ className, ...props }: ComponentProps<'tr'>) => {\n return (\n <tr\n data-slot='table-row'\n className={cn(\n 'hover:bg-[var(--overlay-hover)] data-[state=selected]:bg-[var(--overlay-selected)] border-b border-[var(--border-divider)] transition-[background-color] duration-100',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableHead = ({ className, scope, ...props }: ComponentProps<'th'>) => {\n return (\n <th\n data-slot='table-head'\n scope={scope ?? 'col'}\n className={cn(\n 'text-muted-foreground h-10 px-3 text-left align-middle text-xs font-medium whitespace-nowrap tabular-nums [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableCell = ({ className, ...props }: ComponentProps<'td'>) => {\n return (\n <td\n data-slot='table-cell'\n className={cn(\n 'px-3 py-2.5 align-middle whitespace-nowrap tabular-nums [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n}\n\nconst TableCaption = ({\n className,\n ...props\n}: ComponentProps<'caption'>) => {\n return (\n <caption\n data-slot='table-caption'\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","'use client'\n\nimport { type ComponentProps } from 'react'\nimport { type VariantProps, cva } from 'class-variance-authority'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cn } from '../../../lib/utils'\n\nconst Tabs = ({\n className,\n orientation = 'horizontal',\n ...props\n}: ComponentProps<typeof TabsPrimitive.Root>) => {\n return (\n <TabsPrimitive.Root\n data-slot='tabs'\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n 'group/tabs flex gap-2 data-[orientation=horizontal]:flex-col',\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n default: 'bg-muted',\n line: 'gap-1 bg-transparent',\n },\n },\n }\n)\n\nconst TabsList = ({\n className,\n variant = 'default',\n ...props\n}: ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) => {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nconst TabsTrigger = ({\n className,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Trigger>) => {\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap touch-manipulation transition-[color,background-color,border-color,box-shadow,opacity] duration-150 motion-reduce:transition-none group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-[opacity] after:motion-reduce:transition-none group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst TabsContent = ({\n className,\n ...props\n}: ComponentProps<typeof TabsPrimitive.Content>) => {\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n className={cn('flex-1 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:rounded-md', className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","'use client'\n\nimport {\n type ComponentProps,\n type KeyboardEvent,\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n} from 'react'\n\nimport { cn } from '../../../lib/utils'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype ToggleGroupSingleContext = {\n disabled: boolean,\n groupId: string,\n onValueChange: (value: string) => void\n type: 'single',\n value: string\n}\n\ntype ToggleGroupMultipleContext = {\n disabled: boolean,\n groupId: string,\n onValueChange: (value: string[]) => void\n type: 'multiple',\n value: string[]\n}\n\ntype ToggleGroupContextValue =\n | ToggleGroupSingleContext\n | ToggleGroupMultipleContext\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nconst useToggleGroupContext = (): ToggleGroupContextValue => {\n const ctx = useContext(ToggleGroupContext)\n if (!ctx) {\n // eslint-disable-next-line no-restricted-syntax -- dev-time invariant guard; a \"used outside provider\" check doesn't warrant a domain BaseError class\n throw new Error('ToggleGroupItem must be used inside a ToggleGroup')\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Prop types\n// ---------------------------------------------------------------------------\n\n/** Props for a single-select ToggleGroup. */\ntype ToggleGroupSingleProps = {\n /** Fired when the selected value changes. */\n onValueChange: (value: string) => void,\n type: 'single',\n /** The currently selected value. */\n value: string\n}\n\n/** Props for a multi-select ToggleGroup. */\ntype ToggleGroupMultipleProps = {\n /** Fired when the selected values change. */\n onValueChange: (value: string[]) => void,\n type: 'multiple',\n /** The currently selected values. */\n value: string[]\n}\n\ntype ToggleGroupBaseProps = {\n children?: React.ReactNode,\n className?: string\n /** Disables all items in the group. */\n disabled?: boolean\n}\n\n/** Combined props for ToggleGroup. */\ntype ToggleGroupProps = ToggleGroupBaseProps &\n (ToggleGroupSingleProps | ToggleGroupMultipleProps)\n\n/** Props for ToggleGroupItem. */\ntype ToggleGroupItemProps = ComponentProps<'button'> & {\n /** Overrides the group-level disabled state for this item. */\n disabled?: boolean,\n /** The value this item represents. Must match a value in the parent group. */\n value: string\n}\n\n// ---------------------------------------------------------------------------\n// ToggleGroup\n// ---------------------------------------------------------------------------\n\n/**\n * Segmented control container that manages single or multiple selection.\n * Renders a rounded pill-track styled with the muted background token.\n * Provides context and implements roving keyboard navigation across items.\n *\n * @example\n * // Single selection\n * <ToggleGroup type=\"single\" value={view} onValueChange={setView}>\n * <ToggleGroupItem value=\"day\">Day</ToggleGroupItem>\n * <ToggleGroupItem value=\"week\">Week</ToggleGroupItem>\n * </ToggleGroup>\n *\n * @example\n * // Multiple selection\n * <ToggleGroup type=\"multiple\" value={formats} onValueChange={setFormats}>\n * <ToggleGroupItem value=\"bold\">B</ToggleGroupItem>\n * <ToggleGroupItem value=\"italic\">I</ToggleGroupItem>\n * </ToggleGroup>\n */\nconst ToggleGroup = ({\n type,\n value,\n onValueChange,\n disabled = false,\n className,\n children,\n ...props\n}: ToggleGroupProps) => {\n const groupId = useId()\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Roving keyboard navigation: Arrow keys move focus between enabled buttons.\n const handleKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n const container = containerRef.current\n if (!container) return\n\n const items = Array.from(\n container.querySelectorAll<HTMLButtonElement>(\n 'button[data-slot=\"toggle-group-item\"]:not([disabled])',\n ),\n )\n if (items.length === 0) return\n\n const focused = document.activeElement as HTMLButtonElement\n const idx = items.indexOf(focused)\n\n let next: number\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault()\n next = (idx + 1) % items.length\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault()\n next = (idx - 1 + items.length) % items.length\n } else if (e.key === 'Home') {\n e.preventDefault()\n next = 0\n } else if (e.key === 'End') {\n e.preventDefault()\n next = items.length - 1\n } else {\n return\n }\n\n items[next]?.focus()\n }, [])\n\n const contextValue: ToggleGroupContextValue = useMemo(\n () =>\n type === 'single'\n ? {\n disabled,\n groupId,\n onValueChange: onValueChange as (v: string) => void,\n type: 'single',\n value: value as string,\n }\n : {\n disabled,\n groupId,\n onValueChange: onValueChange as (v: string[]) => void,\n type: 'multiple',\n value: value as string[],\n },\n [disabled, groupId, onValueChange, type, value],\n )\n\n return (\n <ToggleGroupContext.Provider value={contextValue}>\n <div\n ref={containerRef}\n data-slot='toggle-group'\n role={type === 'single' ? 'radiogroup' : 'toolbar'}\n onKeyDown={handleKeyDown}\n className={cn(\n 'inline-flex items-center rounded-lg bg-muted p-[3px] gap-0.5',\n disabled && 'opacity-50 pointer-events-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </ToggleGroupContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ToggleGroupItem\n// ---------------------------------------------------------------------------\n\n/**\n * An individual button within a ToggleGroup.\n * Reads context to determine selection state and fires the appropriate\n * onValueChange callback on click. Mirrors the elevated/pill styling of\n * the active tab trigger (bg-background + shadow) when selected.\n */\nconst ToggleGroupItem = ({\n value,\n disabled,\n className,\n children,\n onClick,\n ...props\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext()\n\n const isDisabled = disabled ?? ctx.disabled\n\n const isActive =\n ctx.type === 'single' ? ctx.value === value : ctx.value.includes(value)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return\n\n if (ctx.type === 'single') {\n // In single mode, clicking the already-active value keeps it selected.\n if (ctx.value !== value) {\n ctx.onValueChange(value)\n }\n } else {\n // In multiple mode, toggle the value in/out of the array.\n const next = ctx.value.includes(value)\n ? ctx.value.filter((v) => v !== value)\n : [...ctx.value, value]\n ctx.onValueChange(next)\n }\n\n onClick?.(e)\n }\n\n // Roving tabIndex: only the active (or first) item is reachable via Tab.\n // For multiple-select there is no single \"active\" item so we use first-in-group\n // logic: the first item keeps tabIndex=0 when nothing is selected.\n const tabIndex = isActive ? 0 : -1\n\n const sharedButtonProps = {\n className: cn(\n // Compact segmented-control height (matches Tabs); the parent track keeps it\n // tappable. Use a taller size variant if a touch-first surface needs 44px.\n 'relative inline-flex h-8 flex-1 items-center justify-center gap-1.5',\n 'rounded-md px-3 text-sm font-medium whitespace-nowrap',\n // Cursor\n 'cursor-pointer',\n // Inactive colour\n 'text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground',\n // Transition — ease-out matches design system, motion-reduce honours OS setting.\n 'transition-[color,background-color,box-shadow] duration-150 ease-out motion-reduce:transition-none',\n // Active (selected) state mirrors tabs trigger active styling.\n 'data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm',\n 'dark:data-[state=on]:bg-input/30 dark:data-[state=on]:text-foreground dark:data-[state=on]:border dark:data-[state=on]:border-input',\n // Focus ring\n 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n // Disabled\n 'disabled:pointer-events-none disabled:opacity-50',\n // SVG children\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n ),\n 'data-slot': 'toggle-group-item' as const,\n 'data-state': isActive ? ('on' as const) : ('off' as const),\n disabled: isDisabled,\n onClick: handleClick,\n \n // tabIndex drives roving focus; keyboard nav updates focus programmatically.\ntabIndex,\n \ntype: 'button' as const,\n }\n\n if (ctx.type === 'single') {\n return (\n <button\n {...sharedButtonProps}\n role='radio'\n aria-checked={isActive}\n // Associate with the radiogroup by name so ATs announce group context.\n name={ctx.groupId}\n {...props}\n >\n {children}\n </button>\n )\n }\n\n return (\n <button\n {...sharedButtonProps}\n aria-pressed={isActive}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\nexport type { ToggleGroupProps, ToggleGroupItemProps }\n","import { type ComponentProps } from 'react'\n\nimport { cn } from '../../../lib/utils'\n\nconst Textarea = ({ className, ...props }: ComponentProps<'textarea'>) => {\n return (\n <textarea\n data-slot='textarea'\n className={cn(\n 'placeholder:text-muted-foreground/60 dark:bg-input/30 flex field-sizing-content min-h-20 w-full touch-manipulation rounded-md border-0 bg-background px-3 py-2 text-base shadow-[var(--shadow-input)] transition-[color,box-shadow] duration-100 ease-out outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'hover:shadow-[var(--shadow-input-hover)]',\n 'focus-visible:shadow-[0_0_0_1px_var(--ring),0_0_0_4px_var(--ring-halo,#0072EF26)]',\n 'aria-invalid:shadow-[0_0_0_1px_var(--destructive),0_0_1px_0_var(--destructive)]',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","'use client';\n\nimport {\n Content,\n Portal,\n Provider,\n Root,\n Trigger,\n} from '@radix-ui/react-tooltip';\nimport type { ComponentPropsWithoutRef, ComponentRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nconst TooltipProvider = Provider;\n\nconst Tooltip = Root;\n\nconst TooltipTrigger = Trigger;\n\nconst TooltipContent = forwardRef<\n ComponentRef<typeof Content>,\n ComponentPropsWithoutRef<typeof Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <Portal>\n <Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 max-w-xs overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground animate-in fade-in-0 zoom-in-95 duration-150 ease-out data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-100 data-[state=closed]:ease-in data-[side=bottom]:slide-in-from-top-2 data-[side=bottom]:origin-top data-[side=left]:slide-in-from-right-2 data-[side=left]:origin-right data-[side=right]:slide-in-from-left-2 data-[side=right]:origin-left data-[side=top]:slide-in-from-bottom-2 data-[side=top]:origin-bottom motion-reduce:animate-none',\n className\n )}\n {...props}\n />\n </Portal>\n));\nTooltipContent.displayName = Content.displayName;\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","import { cn } from '../../lib/utils'\n\nconst aliases: Record<string, string> = {\n arbitrum: 'arb',\n 'arbitrum-one': 'arb',\n 'arbitrum-sepolia': 'arb',\n avalanche: 'avax',\n 'base-sepolia': 'base',\n 'binance-smart-chain': 'bnb',\n bitcoin: 'btc',\n 'bitcoin-mainnet': 'btc',\n 'bitcoin-testnet': 'btc',\n bsc: 'bnb',\n cosmos: 'atom',\n 'cosmos-hub': 'atom',\n 'cosmos-testnet': 'atom',\n ethereum: 'eth',\n fantom: 'ftm',\n gnosis: 'gnosis',\n linea: 'linea',\n mantle: 'mantle',\n optimism: 'optimism',\n osmosis: 'osmo',\n polygon: 'matic',\n 'polygon-amoy': 'matic',\n scroll: 'scroll',\n sei: 'sei',\n 'sei-network': 'sei',\n sepolia: 'eth',\n solana: 'sol',\n 'solana-devnet': 'sol',\n 'solana-mainnet': 'sol',\n starknet: 'generic',\n sui: 'sui',\n zksync: 'zkevm',\n}\n\nexport interface AssetIconProps {\n className?: string,\n size?: number\n symbol: string,\n}\n\nexport const AssetIcon = ({ symbol, size = 32, className }: AssetIconProps) => {\n const resolved = aliases[symbol.toLowerCase()] ?? symbol.toLowerCase()\n return (\n <img\n src={`/assets/${resolved}.svg`}\n alt={symbol}\n width={size}\n height={size}\n className={cn('object-contain', className)}\n onError={(e) => {\n const target = e.currentTarget\n if (!target.src.endsWith('/assets/generic.svg')) {\n target.src = '/assets/generic.svg'\n }\n }}\n />\n )\n}\n","'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Copy01Icon, Tick01Icon } from '@hugeicons/core-free-icons'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\n\nimport { Button } from '../ui/button'\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nexport interface CopyButtonProps {\n className?: string,\n label?: string\n size?: 'default' | 'sm' | 'xs' | 'icon' | 'icon-xs' | 'icon-sm',\n value: string,\n variant?: 'default' | 'outline' | 'ghost' | 'secondary'\n}\n\nexport const CopyButton = ({\n value,\n label,\n variant = 'outline',\n size = 'icon-xs',\n className,\n}: CopyButtonProps) => {\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const shouldReduceMotion = useReducedMotion()\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(value)\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => setCopied(false), 2000)\n }\n\n let ariaLabel: string | undefined\n if (!label) {\n ariaLabel = copied ? 'Copied' : 'Copy to clipboard'\n }\n\n return (\n <Button\n variant={variant}\n size={size}\n onClick={handleCopy}\n aria-label={ariaLabel}\n className={cn(\n 'transition-[color,background-color,box-shadow] duration-150',\n copied && 'text-[var(--text-success)]',\n className\n )}\n >\n <AnimatePresence mode='wait' initial={false}>\n {copied ? (\n <motion.span\n key='check'\n initial={shouldReduceMotion ? false : { opacity: 0, scale: 0.25 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0, scale: 0.25 }}\n transition={spring}\n className='flex items-center gap-1.5'\n >\n <HugeiconsIcon icon={Tick01Icon} size={14} />\n {label && <span>Copied</span>}\n </motion.span>\n ) : (\n <motion.span\n key='copy'\n initial={shouldReduceMotion ? false : { opacity: 0, scale: 0.25 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0, scale: 0.25 }}\n transition={spring}\n className='flex items-center gap-1.5'\n >\n <HugeiconsIcon icon={Copy01Icon} size={14} />\n {label && <span>{label}</span>}\n </motion.span>\n )}\n </AnimatePresence>\n </Button>\n )\n}\n","'use client'\n\nimport { forwardRef, useMemo, useRef, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\n\nimport { cn } from '../../lib/utils'\nimport { CopyButton } from '../copy-button'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\ntype CodeBlockVariant = 'dark' | 'light'\n\ninterface CodeBlockProps {\n className?: string,\n code: string,\n language?: string\n showLineNumbers?: boolean\n showTerminalPrompt?: boolean\n showWindowChrome?: boolean,\n title?: string,\n variant?: CodeBlockVariant\n}\n\nconst variantStyles = {\n dark: {\n chromeDot: 'bg-[var(--border-hover)]',\n code: 'text-[var(--foreground)]',\n copyBtn: 'text-[var(--text-disabled)] hover:text-[var(--foreground)] hover:bg-white/[0.06]',\n header: 'border-white/[0.05] bg-[var(--bg-default)]',\n headerText: 'text-[var(--muted-foreground)]',\n lineNumber: 'text-[var(--text-disabled)]',\n prompt: 'text-[var(--muted-foreground)]',\n tabActive: 'bg-white/[0.08] text-[var(--foreground)]',\n tabInactive: 'text-[var(--text-disabled)] hover:text-[var(--foreground)]',\n wrapper: 'bg-[var(--card)] text-[var(--foreground)] shadow-[0_0_0_1px_var(--border)]',\n },\n light: {\n chromeDot: 'bg-muted-foreground/15',\n code: 'text-foreground',\n copyBtn: 'text-muted-foreground/60 hover:text-foreground hover:bg-black/[0.04]',\n header: 'border-border/60 bg-[var(--muted)]/40',\n headerText: 'text-muted-foreground',\n lineNumber: 'text-muted-foreground/30',\n prompt: 'text-muted-foreground/40',\n tabActive: 'bg-background text-foreground shadow-[0_1px_2px_rgba(0,0,0,0.05)]',\n tabInactive: 'text-muted-foreground hover:text-foreground',\n wrapper: 'bg-white text-foreground shadow-[var(--shadow-card)]',\n },\n}\n\nconst CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n title,\n language: _language,\n showLineNumbers = false,\n showTerminalPrompt = false,\n variant = 'dark',\n showWindowChrome = false,\n className,\n },\n ref\n ) => {\n const lines = code.split('\\n')\n const s = variantStyles[variant]\n\n return (\n <div\n ref={ref}\n className={cn('rounded-xl overflow-hidden', s.wrapper, className)}\n >\n {(title || showWindowChrome) && (\n <div\n className={cn(\n 'flex items-center justify-between border-b px-4 py-2.5',\n s.header\n )}\n >\n <div className='flex items-center gap-3'>\n {showWindowChrome && (\n <div className='flex gap-[6px]' aria-hidden='true'>\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n <div className={cn('size-[9px] rounded-full', s.chromeDot)} />\n </div>\n )}\n {title && (\n <span className={cn('text-[13px] font-medium', s.headerText)}>\n {title}\n </span>\n )}\n </div>\n <CopyButton\n value={code}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n )}\n <div className='relative group'>\n {!title && !showWindowChrome && (\n <div className='absolute top-2.5 right-2.5 opacity-0 group-hover:opacity-100 transition-[opacity] duration-150'>\n <CopyButton\n value={code}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n )}\n <pre\n className={cn(\n 'overflow-x-auto px-4 py-3.5 text-[13px] font-mono leading-relaxed',\n !title && !showWindowChrome && 'pr-10',\n variant === 'dark' && 'bg-[var(--background)]'\n )}\n >\n <code>\n {showLineNumbers\n ? lines.map((line, i) => (\n <span key={`L${i}:${line}`} className='table-row'>\n <span\n className={cn(\n 'table-cell pr-4 text-right select-none tabular-nums w-[2ch]',\n s.lineNumber\n )}\n >\n {i + 1}\n </span>\n <span className='table-cell'>\n {showTerminalPrompt && i === 0 && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {line}\n </span>\n {i < lines.length - 1 && '\\n'}\n </span>\n ))\n : (\n <>\n {showTerminalPrompt && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {code}\n </>\n )}\n </code>\n </pre>\n </div>\n </div>\n )\n }\n)\n\nCodeBlock.displayName = 'CodeBlock'\n\ninterface PackageManagerTabsProps {\n className?: string,\n npm: string,\n pnpm?: string\n showTerminalPrompt?: boolean,\n variant?: CodeBlockVariant,\n yarn?: string\n}\n\nconst PackageManagerTabs = ({\n npm,\n yarn,\n pnpm,\n variant = 'dark',\n showTerminalPrompt = true,\n className,\n}: PackageManagerTabsProps) => {\n const tabs = useMemo(\n () => [\n { code: npm, id: 'npm' as const, label: 'npm' },\n ...(yarn ? [{ code: yarn, id: 'yarn' as const, label: 'yarn' }] : []),\n ...(pnpm ? [{ code: pnpm, id: 'pnpm' as const, label: 'pnpm' }] : []),\n ],\n [npm, yarn, pnpm]\n )\n\n const [activeIndex, setActiveIndex] = useState(0)\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n const shouldReduceMotion = useReducedMotion()\n\n const s = variantStyles[variant]\n const activeTab = tabs[activeIndex]\n const activeCode = activeTab?.code || npm\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleKeyDown = (e: React.KeyboardEvent, index: number) => {\n let nextIndex: number\n switch (e.key) {\n case 'ArrowRight':\n nextIndex = (index + 1) % tabs.length\n break\n case 'ArrowLeft':\n nextIndex = (index - 1 + tabs.length) % tabs.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = tabs.length - 1\n break\n default:\n return\n }\n e.preventDefault()\n setActiveIndex(nextIndex)\n tabRefs.current[nextIndex]?.focus()\n }\n\n return (\n <div\n className={cn('rounded-xl overflow-hidden', s.wrapper, className)}\n >\n <div\n className={cn(\n 'flex items-center justify-between border-b px-3 py-2',\n s.header\n )}\n >\n <div\n className='flex gap-0.5 rounded-lg p-0.5'\n role='tablist'\n aria-label='Package manager'\n >\n {tabs.map((tab, i) => (\n <button\n key={tab.id}\n ref={(el) => { tabRefs.current[i] = el }}\n role='tab'\n aria-selected={activeIndex === i}\n aria-controls={`panel-${tab.id}`}\n tabIndex={activeIndex === i ? 0 : -1}\n onClick={() => setActiveIndex(i)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n className={cn(\n 'relative px-3 py-1 rounded-md text-[13px] font-medium transition-[color,background-color,box-shadow] duration-150 touch-manipulation cursor-pointer',\n activeIndex === i ? s.tabActive : s.tabInactive\n )}\n >\n <motion.span\n whileTap={shouldReduceMotion ? undefined : { scale: 0.95 }}\n transition={spring}\n >\n {tab.label}\n </motion.span>\n </button>\n ))}\n </div>\n <CopyButton\n value={activeCode}\n variant='ghost'\n size='icon-xs'\n className={s.copyBtn}\n />\n </div>\n <div\n id={`panel-${activeTab?.id}`}\n role='tabpanel'\n aria-labelledby={activeTab?.id}\n >\n <pre className={cn('overflow-x-auto px-4 py-3.5 text-[13px] font-mono', variant === 'dark' && 'bg-[var(--background)]')}>\n <code>\n {showTerminalPrompt && (\n <span className={cn('select-none mr-2', s.prompt)}>$</span>\n )}\n {activeCode}\n </code>\n </pre>\n </div>\n </div>\n )\n}\n\nexport { CodeBlock, PackageManagerTabs }\nexport type { CodeBlockProps, PackageManagerTabsProps, CodeBlockVariant }\n","'use client'\n\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Alert01Icon } from '@hugeicons/core-free-icons'\n\nimport { Button } from '../ui/button'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../ui/alert-dialog'\nimport { cn } from '../../lib/utils'\n\nexport interface DangerZoneProps {\n actionLabel: string,\n className?: string,\n confirmDescription?: string,\n confirmTitle?: string\n description: string,\n onConfirm: () => void\n title: string\n}\n\nexport const DangerZone = ({\n title,\n description,\n actionLabel,\n confirmTitle,\n confirmDescription,\n onConfirm,\n className,\n}: DangerZoneProps) => {\n return (\n <div className={cn(\n 'rounded-xl border border-[var(--border-danger)]/30 p-6 shadow-[var(--shadow-card)] bg-card',\n className\n )}>\n <div className='flex items-start gap-3'>\n <div className='flex size-8 shrink-0 items-center justify-center rounded-lg bg-[var(--danger-light)]'>\n <HugeiconsIcon icon={Alert01Icon} size={16} className='text-[var(--text-danger)]' />\n </div>\n <div className='flex-1 min-w-0'>\n <h3 className='text-sm font-semibold text-[var(--text-danger)] text-balance'>{title}</h3>\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{description}</p>\n <div className='mt-4'>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant='destructive'>{actionLabel}</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{confirmTitle || title}</AlertDialogTitle>\n <AlertDialogDescription>\n {confirmDescription || description}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={onConfirm}\n className='bg-destructive text-white hover:bg-destructive/90'\n >\n {actionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Add01Icon, Cancel01Icon } from '@hugeicons/core-free-icons';\nimport { HugeiconsIcon } from '@hugeicons/react';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\nimport { cn } from '../../lib/utils';\n\nexport interface DomainListProps {\n className?: string;\n domains: string[];\n onChange: (domains: string[]) => void;\n placeholder?: string;\n validate?: (domain: string) => string | null;\n}\n\nconst DomainList = ({\n className,\n domains,\n onChange,\n placeholder = 'https://example.com',\n validate,\n}: DomainListProps) => {\n const [inputValue, setInputValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const handleAdd = () => {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n\n if (validate) {\n const validationError = validate(trimmed);\n if (validationError) {\n setError(validationError);\n return;\n }\n }\n\n if (domains.includes(trimmed)) {\n setError('Already added');\n return;\n }\n\n onChange([...domains, trimmed]);\n setInputValue('');\n setError(null);\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleRemove = (domain: string) => {\n onChange(domains.filter((d) => d !== domain));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAdd();\n }\n };\n\n return (\n <div className={cn('space-y-3', className)}>\n <div className='flex gap-2'>\n <div className='flex-1'>\n <Input\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setError(null);\n }}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-invalid={!!error}\n />\n {error && (\n <p className='text-xs text-[var(--text-danger)] mt-1'>{error}</p>\n )}\n </div>\n <Button\n variant='outline'\n size='default'\n onClick={handleAdd}\n disabled={!inputValue.trim()}\n type='button'\n >\n <HugeiconsIcon icon={Add01Icon} size={16} />\n Add\n </Button>\n </div>\n {domains.length > 0 && (\n <ul className='space-y-1.5'>\n {domains.map((domain) => (\n <li\n key={domain}\n className='flex items-center justify-between gap-2 rounded-md border bg-[var(--bg-bottom)] px-3 py-2 text-sm'\n >\n <span className='font-mono text-sm truncate'>{domain}</span>\n <button\n type='button'\n onClick={() => handleRemove(domain)}\n className=\"shrink-0 rounded-sm p-0.5 text-muted-foreground hover:text-[var(--text-danger)] transition-[color] duration-150 relative before:absolute before:-inset-[11px] before:content-['']\"\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n};\n\nexport { DomainList };\n","import { type ComponentType, type ReactNode } from 'react'\n\nimport { cn } from '../../lib/utils'\n\nexport interface EmptyStateProps {\n action?: ReactNode,\n className?: string,\n description: string\n icon: ComponentType<{ className?: string; size?: number }>,\n title: string\n}\n\nexport const EmptyState = ({ icon: Icon, title, description, action, className }: EmptyStateProps) => {\n return (\n <div className={cn('flex flex-col items-center justify-center py-16 px-8 text-center', className)}>\n <div className='flex size-12 items-center justify-center rounded-xl bg-muted mb-4'>\n <Icon className='size-6 text-muted-foreground' />\n </div>\n <h3 className='text-sm font-semibold'>{title}</h3>\n <p className='text-sm text-muted-foreground mt-1 max-w-sm'>{description}</p>\n {action && <div className='mt-4'>{action}</div>}\n </div>\n )\n}\n","'use client'\n\nimport { type ReactNode, useState } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\nimport { HugeiconsIcon } from '@hugeicons/react'\nimport { Cancel01Icon, InformationCircleIcon } from '@hugeicons/core-free-icons'\n\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\nexport interface InfoBannerProps {\n children: ReactNode\n className?: string,\n dismissible?: boolean,\n onDismiss?: () => void\n}\n\nexport const InfoBanner = ({\n children,\n dismissible = false,\n onDismiss,\n className,\n}: InfoBannerProps) => {\n const [dismissed, setDismissed] = useState(false)\n const shouldReduceMotion = useReducedMotion()\n\n if (dismissed) return null\n\n return (\n <div className={cn(\n 'flex items-center gap-2 rounded-lg border border-border bg-muted/50 px-3 py-2 text-sm text-muted-foreground',\n className\n )}>\n <span className='text-muted-foreground shrink-0'><HugeiconsIcon icon={InformationCircleIcon} size={16} /></span>\n <div className='flex-1 min-w-0 text-pretty'>{children}</div>\n {dismissible && (\n <motion.button\n whileTap={shouldReduceMotion ? undefined : { scale: 0.96 }}\n transition={spring}\n onClick={() => {\n setDismissed(true)\n onDismiss?.()\n }}\n className=\"relative before:absolute before:-inset-[13px] before:content-[''] shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-[opacity] touch-manipulation cursor-pointer\"\n >\n <HugeiconsIcon icon={Cancel01Icon} size={14} />\n </motion.button>\n )}\n </div>\n )\n}\n","import { useMemo } from 'react'\n\nimport { Skeleton } from '../ui/skeleton'\nimport { cn } from '../../lib/utils'\n\nconst buildIdList = (length: number): string[] =>\n Array.from({ length }, () => crypto.randomUUID())\n\n/** Full-page skeleton with header and content area */\nexport const PageSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('space-y-6 p-6', className)}>\n <div className='space-y-2'>\n <Skeleton className='h-8 w-48' />\n <Skeleton className='h-4 w-96' />\n </div>\n <div className='grid grid-cols-1 md:grid-cols-3 gap-4'>\n <StatCardSkeleton />\n <StatCardSkeleton />\n <StatCardSkeleton />\n </div>\n <TableSkeleton rows={5} />\n </div>\n )\n}\n\n/** Stat/metric card skeleton */\nexport const StatCardSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('rounded-xl p-5 shadow-[var(--shadow-card)] bg-card', className)}>\n <div className='flex items-center justify-between mb-3'>\n <Skeleton className='h-4 w-24' />\n <Skeleton className='size-8 rounded-lg' />\n </div>\n <Skeleton className='h-8 w-20 mb-1' />\n <Skeleton className='h-4 w-16' />\n </div>\n )\n}\n\n/** Table skeleton with configurable rows */\nexport const TableSkeleton = ({\n rows = 5,\n columns = 4,\n className,\n}: {\n className?: string,\n columns?: number\n rows?: number\n}) => {\n // Stable identity keys so React doesn't remount on re-render. Indices are\n // unsuitable here because the lists are fixed-length but Sonar's S6479 flags\n // index-derived keys.\n const headerIds = useMemo(() => buildIdList(columns), [columns])\n const rowIds = useMemo(() => buildIdList(rows), [rows])\n const colIds = useMemo(() => buildIdList(columns), [columns])\n\n return (\n <div className={cn('rounded-xl border shadow-[var(--shadow-card)] bg-card overflow-hidden', className)}>\n {/* Header */}\n <div className='flex items-center gap-4 px-4 py-3 border-b'>\n {headerIds.map((id) => (\n <Skeleton key={id} className='h-4 flex-1' />\n ))}\n </div>\n {/* Rows */}\n {rowIds.map((rowId) => (\n <div\n key={rowId}\n className='flex items-center gap-4 px-4 py-3 border-b last:border-b-0'\n >\n {colIds.map((colId, colIdx) => (\n <Skeleton\n key={`${rowId}-${colId}`}\n className={cn(\n 'h-4 flex-1',\n colIdx === 0 && 'max-w-32',\n colIdx === columns - 1 && 'max-w-16'\n )}\n />\n ))}\n </div>\n ))}\n </div>\n )\n}\n\n/** Card skeleton */\nexport const CardSkeleton = ({ className }: { className?: string }) => {\n return (\n <div className={cn('rounded-xl p-6 shadow-[var(--shadow-card)] bg-card space-y-4', className)}>\n <div className='space-y-2'>\n <Skeleton className='h-5 w-32' />\n <Skeleton className='h-4 w-48' />\n </div>\n <Skeleton className='h-24 w-full' />\n <div className='flex gap-2'>\n <Skeleton className='h-9 w-20' />\n <Skeleton className='h-9 w-20' />\n </div>\n </div>\n )\n}\n","import { type ComponentType } from 'react'\n\nimport { cn } from '../../lib/utils'\nimport { Skeleton } from '../ui/skeleton'\n\ntype Trend = 'up' | 'down' | 'neutral'\n\ntype IconComponent = ComponentType<{ className?: string; size?: number }>\n\ninterface MetricCardBaseProps {\n className?: string,\n icon?: IconComponent\n label: string,\n loading?: boolean\n}\n\nexport interface MetricCardActiveProps extends MetricCardBaseProps {\n inactive?: false\n trend?: Trend,\n trendValue?: string,\n value: string | number\n}\n\nexport interface MetricCardInactiveProps extends MetricCardBaseProps {\n inactive: true\n onSetup: () => void,\n setupDescription?: string,\n setupLabel: string,\n trend?: never,\n trendValue?: never,\n value?: never\n}\n\ntype MetricCardProps = MetricCardActiveProps | MetricCardInactiveProps\n\nconst trendColor: Record<Trend, string> = {\n down: 'text-[var(--text-danger)]',\n neutral: 'text-muted-foreground',\n up: 'text-[var(--text-success)]',\n}\n\nexport const MetricCard = (props: MetricCardProps) => {\n const { label, icon: Icon, loading = false, className } = props\n\n if (loading) {\n return (\n <div className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}>\n <Skeleton className='h-3.5 w-20 mb-2.5' />\n <Skeleton className='h-7 w-24' />\n </div>\n )\n }\n\n if (props.inactive) {\n return (\n <div\n className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}\n >\n <div className='flex items-center gap-1.5'>\n {Icon && <Icon className='size-3.5 text-muted-foreground' />}\n <span className='text-[13px] text-muted-foreground font-medium'>{label}</span>\n </div>\n <div className='text-2xl font-semibold tracking-tight text-muted-foreground/30 tabular-nums mt-1.5'>0</div>\n </div>\n )\n }\n\n return (\n <div className={cn('rounded-[16px] bg-card shadow-[var(--shadow-card)] px-5 py-4', className)}>\n <div className='flex items-center gap-1.5'>\n {Icon && <Icon className='size-3.5 text-muted-foreground' />}\n <span className='text-[13px] text-muted-foreground font-medium'>{label}</span>\n </div>\n <div className='flex items-baseline gap-2 mt-1.5'>\n <span className='text-2xl font-semibold tracking-tight tabular-nums'>{props.value}</span>\n {props.trend && props.trendValue && (\n <span className={cn('text-xs font-medium tabular-nums', trendColor[props.trend])}>\n {props.trendValue}\n </span>\n )}\n </div>\n </div>\n )\n}\n","'use client';\n\n/**\n * Placeholder stub for the docs-AI sheet.\n *\n * Renders nothing in droplet — the real sheet lives in the consumer app and\n * subscribes to the `docsPath` to surface contextual AI help. Kept here so\n * `PageActions` can mount it unconditionally without each consumer wiring it.\n */\nexport const AskAISheet = ({ docsPath: _docsPath }: { docsPath?: string }) => {\n return null;\n};\n","import { HugeiconsIcon } from '@hugeicons/react'\nimport { WebhookIcon } from '@hugeicons/core-free-icons'\nimport Link from 'next/link'\n\nimport { Button } from '../ui/button'\nimport { AskAISheet } from '../ask-ai-sheet'\n\nexport const AskAIAction = ({ docsPath }: { docsPath?: string }) => {\n return <AskAISheet docsPath={docsPath} />\n}\n\nexport const WebhooksAction = () => {\n return (\n <Button variant='outline' size='sm' asChild>\n <Link href='/dashboard/developers?tab=webhooks'>\n <HugeiconsIcon icon={WebhookIcon} size={14} />\n Webhooks\n </Link>\n </Button>\n )\n}\n","'use client'\n\nimport { type ReactNode } from 'react'\nimport { motion, useReducedMotion } from 'motion/react'\n\nimport { cn } from '../../lib/utils'\n\nconst spring = { bounce: 0, duration: 0.35, type: 'spring' as const }\n\ninterface Tab {\n description?: string,\n heading?: string,\n id: string,\n label: string\n}\n\nexport interface ProductPageLayoutProps {\n activeTab: string,\n children: ReactNode,\n headerActions?: ReactNode,\n headerContent?: ReactNode,\n onTabChange: (tabId: string) => void,\n sidebarFooter?: ReactNode,\n tabs: Tab[],\n title: string\n}\n\nexport const ProductPageLayout = ({\n title,\n tabs,\n activeTab,\n onTabChange,\n children,\n headerActions,\n headerContent,\n sidebarFooter,\n}: ProductPageLayoutProps) => {\n const activeTabConfig = tabs.find((t) => t.id === activeTab)\n const shouldReduceMotion = useReducedMotion()\n\n return (\n <div className='flex h-full'>\n {/* Sub-nav sidebar */}\n <nav className='w-52 shrink-0 bg-background overflow-y-auto py-4 px-3 flex flex-col'>\n <h2 className='px-3 mb-3 text-sm font-semibold text-balance'>{title}</h2>\n <div className='flex flex-col gap-0.5'>\n {tabs.map((tab) => (\n <motion.button\n key={tab.id}\n whileTap={shouldReduceMotion ? undefined : { scale: 0.96 }}\n transition={spring}\n onClick={() => onTabChange(tab.id)}\n className={cn(\n 'flex items-center rounded-md px-3 py-1.5 text-[13px] font-medium transition-[color,background-color] text-left touch-manipulation',\n activeTab === tab.id\n ? 'bg-muted text-foreground'\n : 'text-muted-foreground hover:bg-muted/50 hover:text-foreground'\n )}\n >\n {tab.label}\n </motion.button>\n ))}\n </div>\n {sidebarFooter && (\n <div className='mt-auto pt-4'>\n {sidebarFooter}\n </div>\n )}\n </nav>\n\n {/* Content area */}\n <div className='flex-1 overflow-auto'>\n <div className='px-10 py-8 space-y-8'>\n {headerContent ?? (\n <div className='flex items-start justify-between gap-4'>\n <div>\n <h1 className='text-2xl font-semibold text-balance'>{activeTabConfig?.heading ?? activeTabConfig?.label ?? activeTab}</h1>\n {activeTabConfig?.description && (\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{activeTabConfig.description}</p>\n )}\n </div>\n {headerActions && (\n <div className='flex items-center gap-2 shrink-0'>\n {headerActions}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </div>\n )\n}\n","import { type ReactNode } from 'react'\n\nimport { cn } from '../../lib/utils'\n\nexport interface SettingsSectionProps {\n children: ReactNode,\n className?: string,\n description?: string,\n title: string,\n variant?: 'default' | 'danger'\n}\n\nexport const SettingsSection = ({\n title,\n description,\n children,\n variant = 'default',\n className,\n}: SettingsSectionProps) => {\n return (\n <div className={cn(\n 'rounded-xl border p-6 shadow-[var(--shadow-card)] bg-card',\n variant === 'danger' && 'border-[var(--border-danger)]/30',\n className\n )}>\n <div className='mb-4'>\n <h3 className={cn(\n 'text-sm font-semibold text-balance',\n variant === 'danger' && 'text-[var(--text-danger)]'\n )}>\n {title}\n </h3>\n {description && (\n <p className='text-sm text-muted-foreground mt-1 text-pretty'>{description}</p>\n )}\n </div>\n <div className='space-y-4'>\n {children}\n </div>\n </div>\n )\n}\n","import { Badge } from '../ui/badge'\nimport { cn } from '../../lib/utils'\n\ntype StatusType = 'active' | 'inactive' | 'blocked' | 'pending' | 'live' | 'sandbox' | 'processing'\n\nconst statusConfig: Record<StatusType, { dot: boolean, label: string; variant: 'success' | 'inactive' | 'danger' | 'warning' | 'brand' | 'process'; }> = {\n active: { dot: true, label: 'Active', variant: 'success' },\n blocked: { dot: true, label: 'Blocked', variant: 'danger' },\n inactive: { dot: true, label: 'Inactive', variant: 'inactive' },\n live: { dot: true, label: 'Live', variant: 'success' },\n pending: { dot: true, label: 'Pending', variant: 'warning' },\n processing: { dot: true, label: 'Processing', variant: 'process' },\n sandbox: { dot: true, label: 'Sandbox', variant: 'warning' },\n}\n\nexport interface StatusBadgeProps {\n className?: string,\n label?: string\n status: StatusType\n}\n\nexport const StatusBadge = ({ status, label, className }: StatusBadgeProps) => {\n const config = statusConfig[status]\n\n return (\n <Badge variant={config.variant} className={cn('gap-1.5', className)}>\n {config.dot && (\n <span className='size-1.5 rounded-full bg-current opacity-70' />\n )}\n {label || config.label}\n </Badge>\n )\n}\n","/**\n * ToggleCard — droplet's rich toggle composite.\n *\n * Rebuilt from Northstar's SingleToggleCard to support the redcoast dashboard\n * migration. ToggleRow (sibling primitive) remains the minimal/canonical\n * single-line toggle; ToggleCard is the multi-feature card variant with:\n * - Accordion expand/collapse for nested children\n * - Pluggable input type: switch (default), radio, or checkbox\n * - Optional left icon\n * - Tags row above the title and a RightSideTags slot on the right\n * - Optional notification dot in the trigger\n * - Optional `actionLink` rendered below content\n * - Optional `customActionIcon` rendered alongside the trigger affordance\n * - Whole-card click handler\n *\n * The API mirrors Northstar SingleToggleCard so a redcoast migration can be a\n * mechanical rename. Where the Northstar API surfaced layout-tuning props\n * (`disableHover`, `dontSeparateContentFromHeader`, `descriptionModificators`,\n * `titleModificators`) the equivalent expression here is via Tailwind classes\n * on `className` or `triggerClassName`.\n *\n * Authored in droplet so a single canonical card is available across teams.\n * Backed by Card + Switch/Checkbox/RadioGroup + Radix Accordion.\n */\nimport {\n type ChangeEvent,\n type FC,\n type ReactElement,\n type ReactNode,\n useId,\n} from 'react';\nimport {\n Content as AccordionContent,\n Header as AccordionHeader,\n Item as AccordionItem,\n Root as AccordionRoot,\n Trigger as AccordionTrigger,\n} from '@radix-ui/react-accordion';\n\nimport { cn } from '../../lib/utils';\nimport { Switch } from '../ui/switch';\nimport { Checkbox } from '../ui/checkbox';\nimport { RadioGroup, RadioGroupItem } from '../ui/radio-group';\n\ntype ToggleCardInputType = 'toggle' | 'radio' | 'checkbox';\n\nexport type ToggleCardInputProps = {\n checked?: boolean;\n disabled?: boolean;\n /** Hide the input control entirely (useful when the row is informational). */\n hidden?: boolean;\n id?: string;\n /** When true, renders a lock badge instead of a switch — signals the value\n * is fixed and cannot be toggled via this UI. Implies disabled. */\n isLocked?: boolean;\n /** Indicates the saved/unsaved state via styling — informational, optional. */\n isSaved?: boolean;\n /** When true, paints the input with the warning accent (informational). */\n isWarning?: boolean;\n name?: string;\n /** Native onChange — receives a synthetic event for parity with HTML inputs. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Controls which control element renders next to the title. */\n type?: ToggleCardInputType;\n};\n\nexport type ToggleCardTag = {\n Tag: ReactElement;\n id: string;\n};\n\nexport type ToggleCardActionLink = {\n onClick: () => void;\n text: string;\n};\n\nexport type ToggleCardCustomActionIcon = {\n Icon: ReactElement;\n className?: string;\n};\n\nexport type ToggleCardProps = {\n /** Optional icon rendered before the title. */\n Icon?: ReactElement;\n /** Tags shown on the RIGHT side of the trigger (e.g. status badges). */\n RightSideTags?: ToggleCardTag[];\n /** Tags shown ABOVE the title (e.g. status pills). */\n Tags?: ToggleCardTag[];\n /** Required key for Radix Accordion item identity. */\n accordionKey: string;\n /** Action button rendered at the bottom of expanded content. */\n actionLink?: ToggleCardActionLink;\n /** Whether the accordion CAN expand. Defaults to true. */\n allowExpand?: boolean;\n /** Children — rendered inside the AccordionContent when expanded. */\n children?: ReactNode;\n /** className applied to the outer Accordion root. */\n className?: string;\n /** Whether the accordion can be collapsed (Radix `collapsible`). */\n collapsible?: boolean;\n /** Replaces the default chevron with a custom icon. */\n customActionIcon?: ToggleCardCustomActionIcon;\n /** Whether the accordion is expanded by default. */\n defaultExpanded?: boolean;\n /** Optional secondary line below the title. */\n description?: string;\n /** Disables the entire card (input + trigger). */\n disabled?: boolean;\n /** Inputs (toggle/radio/checkbox) rendered alongside the title. */\n inputProps?: ToggleCardInputProps;\n /** When true, draws a notification dot on the trigger. */\n notification?: boolean;\n /**\n * Click handler for the whole card surface.\n *\n * @deprecated Currently a no-op: attaching onClick to a wrapper that nests\n * interactive children (AccordionTrigger, Switch / Checkbox / RadioGroup)\n * is an a11y anti-pattern. Kept in the type signature for Northstar\n * mechanical-rename parity. A future iteration may re-introduce this with\n * a dedicated click target (e.g. an overlay button) outside the nested\n * interactives.\n */\n onCardClick?: () => void;\n /** Accordion value-change handler. */\n onValueChange?: (value: string | undefined) => void;\n /** Card title — rendered as the primary label inside the trigger. */\n title?: string;\n /** className applied to the trigger row. */\n triggerClassName?: string;\n /** Test id applied to the accordion trigger element. */\n triggerTestId?: string;\n /** Controlled accordion value. */\n value?: string;\n};\n\nconst inputCommon =\n 'shrink-0 touch-manipulation cursor-pointer disabled:cursor-not-allowed disabled:opacity-50';\n\n// Internal helper — two positional params are clearer here than wrapping in\n// an object. Signature is private to this module.\n// eslint-disable-next-line custom-rules/require-single-object-param\nconst renderInput = (input: ToggleCardInputProps | undefined, id: string) => {\n if (!input || input.hidden) return null;\n // Locked state: render a compact lock badge instead of a switch. Signals to\n // users that the value is fixed by an external constraint (plan tier,\n // global setting, etc.) and cannot be changed via this control.\n if (input.isLocked) {\n return (\n <div\n aria-label='Locked'\n title='Locked'\n className='shrink-0 inline-flex items-center justify-center size-5 rounded-full bg-muted text-muted-foreground mt-0.5'\n >\n <svg\n className='size-3'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n >\n <rect x='3' y='11' width='18' height='11' rx='2' ry='2' />\n <path d='M7 11V7a5 5 0 0110 0v4' />\n </svg>\n </div>\n );\n }\n const type = input.type ?? 'toggle';\n // Internal handler — single boolean is the natural shape for an onChange\n // callback. Wrapping in an object would be ceremony.\n // eslint-disable-next-line custom-rules/require-single-object-param\n const handleChange = (next: boolean) => {\n if (!input.onChange) return;\n // Synthesize a minimal ChangeEvent so consumers expecting native event\n // shape keep working.\n input.onChange({\n target: { checked: next, name: input.name ?? '' },\n } as ChangeEvent<HTMLInputElement>);\n };\n if (type === 'toggle') {\n return (\n <Switch\n id={input.id ?? id}\n checked={Boolean(input.checked)}\n disabled={input.disabled}\n onCheckedChange={handleChange}\n className={cn(inputCommon, 'mt-0.5')}\n />\n );\n }\n if (type === 'checkbox') {\n return (\n <Checkbox\n id={input.id ?? id}\n checked={Boolean(input.checked)}\n disabled={input.disabled}\n onCheckedChange={(state) => handleChange(state === true)}\n className={cn(inputCommon, 'mt-1')}\n />\n );\n }\n // radio — wrap in a single-item RadioGroup so semantics are preserved\n return (\n <RadioGroup\n value={input.checked ? input.id ?? id : ''}\n onValueChange={(v) => handleChange(v === (input.id ?? id))}\n disabled={input.disabled}\n className='shrink-0 mt-0.5'\n >\n <RadioGroupItem\n id={input.id ?? id}\n value={input.id ?? id}\n className={inputCommon}\n />\n </RadioGroup>\n );\n};\n\nexport const ToggleCard: FC<ToggleCardProps> = ({\n accordionKey,\n title,\n description,\n // Note: the `Icon` prop is accepted in ToggleCardProps for API parity with\n // Northstar's SingleToggleCard but intentionally not destructured/rendered\n // here (toggle cards do not render a leading icon per droplet design).\n // Drop the prop at the migration sweep when touching each consumer.\n inputProps,\n allowExpand = true,\n defaultExpanded,\n value,\n onValueChange,\n collapsible = true,\n Tags,\n RightSideTags,\n notification,\n actionLink,\n customActionIcon,\n // Intentionally unused — see ToggleCardProps['onCardClick'] JSDoc.\n onCardClick: _onCardClick,\n children,\n disabled,\n triggerTestId,\n className,\n triggerClassName,\n}) => {\n const generatedId = useId();\n const inputId = inputProps?.id ?? generatedId;\n // Parent-with-nested-children mode: the trigger row is the \"section header\"\n // for a group of sub-toggles. Visual hierarchy reads correctly when the\n // header sits on a muted/grey surface and the nested children get the\n // clean white card surface below.\n const isParentMode = !allowExpand && Boolean(children);\n\n // Extracted to keep the main render's cognitive complexity below the\n // Sonar threshold. Content sits inside an AccordionContent when\n // expandable, or directly under the header when not.\n const renderContent = () => {\n const actionLinkButton = actionLink ? (\n <button\n type='button'\n onClick={actionLink.onClick}\n className='mt-3 text-sm font-medium text-(--action) hover:underline underline-offset-4 cursor-pointer'\n >\n {actionLink.text}\n </button>\n ) : null;\n\n if (allowExpand) {\n return (\n <AccordionContent className='border-t border-border-divider px-5 py-4'>\n {children}\n {actionLinkButton}\n </AccordionContent>\n );\n }\n\n // When the accordion can't expand, children still render as nested\n // content below the header. Used for the \"parent + sub-toggles\"\n // pattern. Children sit on the clean card surface (white) so the\n // visual contrast with the grey header above signals the hierarchy.\n if (!children && !actionLink) return null;\n return (\n <div className='border-t border-border-divider bg-card px-5 py-3 space-y-2'>\n {children}\n {actionLinkButton}\n </div>\n );\n };\n\n return (\n <AccordionRoot\n type='single'\n collapsible={collapsible}\n defaultValue={defaultExpanded ? accordionKey : undefined}\n value={value}\n onValueChange={onValueChange}\n data-slot='toggle-card'\n className={cn(\n 'rounded-xl bg-card shadow-card overflow-hidden',\n disabled && 'opacity-60',\n className,\n )}\n >\n <AccordionItem value={accordionKey} className='border-0'>\n <AccordionHeader className='m-0'>\n {/* The wrapper is intentionally non-interactive. `onCardClick` is\n kept in the API for Northstar parity but currently no-ops —\n attaching an onClick here is an a11y anti-pattern because the\n wrapper nests an AccordionTrigger button and the input control\n (switch / checkbox / radio). Adding role='button' + tabIndex\n would either nest two interactives or trigger Sonar's \"use\n <button> instead of role\" rule. Consumers that need\n whole-card-click should wire it to a specific child instead. */}\n <div\n className={cn(\n 'group flex items-start gap-3 px-5 py-4',\n isParentMode && 'bg-bg-bottom',\n triggerClassName,\n )}\n >\n {renderInput(inputProps, inputId)}\n <div className='flex-1 min-w-0'>\n {title && (\n <div className='flex items-baseline gap-1.5 flex-wrap leading-5'>\n <label\n htmlFor={inputId}\n className={cn(\n 'text-sm font-medium select-none leading-5',\n disabled && 'text-muted-foreground',\n )}\n >\n {title}\n {notification && (\n <span\n aria-hidden\n className='inline-block ml-1.5 size-1.5 rounded-full bg-destructive align-middle'\n />\n )}\n </label>\n {Tags && Tags.length > 0 && (\n <>\n {Tags.map((t) => (\n <span key={t.id} className='leading-5'>\n {t.Tag}\n </span>\n ))}\n </>\n )}\n </div>\n )}\n {!title && Tags && Tags.length > 0 && (\n <div className='flex items-baseline gap-1.5 mb-1 leading-5'>\n {Tags.map((t) => (\n <span key={t.id} className='leading-5'>\n {t.Tag}\n </span>\n ))}\n </div>\n )}\n {description && (\n <p className='text-sm text-muted-foreground mt-0.5 text-pretty'>\n {description}\n </p>\n )}\n </div>\n <div className='flex items-center gap-2 shrink-0 self-start'>\n {RightSideTags && RightSideTags.length > 0 && (\n <div className='flex items-center gap-1.5'>\n {RightSideTags.map((t) => (\n <span key={t.id}>{t.Tag}</span>\n ))}\n </div>\n )}\n {allowExpand && (\n <AccordionTrigger\n data-testid={triggerTestId}\n className={cn(\n 'shrink-0 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-[transform,background-color] duration-150 hover:bg-overlay-hover [&[data-state=open]>svg]:rotate-180',\n customActionIcon?.className,\n )}\n disabled={!allowExpand}\n >\n {customActionIcon ? (\n customActionIcon.Icon\n ) : (\n <svg\n className='size-4'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n )}\n </AccordionTrigger>\n )}\n </div>\n </div>\n </AccordionHeader>\n {renderContent()}\n </AccordionItem>\n </AccordionRoot>\n );\n};\n","'use client';\n\n/**\n * Base wrapper for animated icons. Handles ref (startAnimation/stopAnimation),\n * mouse enter/leave animation, and the outer div. Use via render prop:\n *\n * <AnimatedIcon ref={ref} size={28} {...props}>\n * {(controls, size) => (\n * <svg height={size} ...> or <motion.svg animate={controls} ...>...</motion.svg>\n * )}\n * </AnimatedIcon>\n *\n * Icons with custom handle logic (e.g. triggerCopied, custom startAnimation)\n * keep their own useImperativeHandle and do not use this base.\n */\n\nimport type { HTMLAttributes, MouseEvent, ReactNode } from 'react';\nimport { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport { useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface AnimatedIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface AnimatedIconProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n children: (\n controls: ReturnType<typeof useAnimation>,\n size: number,\n ) => ReactNode;\n size?: number;\n}\n\nconst AnimatedIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n (\n { children, className, onMouseEnter, onMouseLeave, size = 28, ...props },\n ref,\n ) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n };\n });\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n controls.start('animate').catch(() => undefined);\n }\n },\n [controls, onMouseEnter],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('normal').catch(() => undefined);\n }\n },\n [controls, onMouseLeave],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn('inline-flex items-center justify-center', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children(controls, size)}\n </div>\n );\n },\n);\n\nAnimatedIcon.displayName = 'AnimatedIcon';\n\nexport { AnimatedIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ArrowUpRightIconHandle = AnimatedIconHandle;\n\ntype ArrowUpRightIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst ArrowUpRightIcon = forwardRef<ArrowUpRightIconHandle, ArrowUpRightIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M7 17 17 7'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0], y: [0, -2, 0] }, normal: { x: 0, y: 0 } }}\n />\n <motion.path\n animate={controls}\n d='M7 7h10v10'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0], y: [0, -2, 0] }, normal: { x: 0, y: 0 } }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nArrowUpRightIcon.displayName = 'ArrowUpRightIcon';\n\nexport { ArrowUpRightIcon };\n","'use client';\n\nimport type { HTMLAttributes, MouseEvent } from 'react';\nimport { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion, useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface ChartBarIncreasingIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\ninterface ChartBarIncreasingIconProps extends HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nconst LINE_VARIANTS: Variants = {\n hidden: { opacity: 0, pathLength: 0 },\n visible: { opacity: 1, pathLength: 1 },\n};\n\nconst transitionFor = (i: number) => ({\n delay: i * 0.1,\n duration: 0.3,\n});\n\nconst ChartBarIncreasingIcon = forwardRef<\n ChartBarIncreasingIconHandle,\n ChartBarIncreasingIconProps\n>(({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n return {\n startAnimation: async () => {\n await controls.start((i) => ({\n opacity: 0,\n pathLength: 0,\n transition: transitionFor(i),\n }));\n await controls.start((i) => ({\n opacity: 1,\n pathLength: 1,\n transition: transitionFor(i),\n }));\n },\n stopAnimation: () => controls.start('visible'),\n };\n });\n\n const handleMouseEnter = useCallback(\n async (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n await controls.start((i) => ({\n opacity: 0,\n pathLength: 0,\n transition: transitionFor(i),\n }));\n await controls.start((i) => ({\n opacity: 1,\n pathLength: 1,\n transition: transitionFor(i),\n }));\n }\n },\n [controls, onMouseEnter],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('visible').catch(() => undefined);\n }\n },\n [controls, onMouseLeave],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn('inline-flex items-center justify-center', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 3v16a2 2 0 0 0 2 2h16' />\n <motion.path\n animate={controls}\n custom={1}\n d='M7 11h8'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n <motion.path\n animate={controls}\n custom={2}\n d='M7 16h12'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n <motion.path\n animate={controls}\n custom={0}\n d='M7 6h3'\n initial='visible'\n variants={LINE_VARIANTS}\n />\n </svg>\n </div>\n );\n});\n\nChartBarIncreasingIcon.displayName = 'ChartBarIncreasingIcon';\n\nexport { ChartBarIncreasingIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ChevronDownIconHandle = AnimatedIconHandle;\n\ntype ChevronDownIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst ChevronDownIcon = forwardRef<ChevronDownIconHandle, ChevronDownIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='m6 9 6 6 6-6'\n transition={DEFAULT_TRANSITION}\n variants={{\n animate: { y: [0, 2, 0] },\n normal: { y: 0 },\n }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\n\nexport { ChevronDownIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ChevronRightIconHandle = AnimatedIconHandle;\n\ntype ChevronRightIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst ChevronRightIcon = forwardRef<ChevronRightIconHandle, ChevronRightIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='m9 18 6-6-6-6'\n transition={{ duration: 0.5, times: [0, 0.4, 1] }}\n variants={{ animate: { x: [0, 2, 0] }, normal: { x: 0 } }}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nChevronRightIcon.displayName = 'ChevronRightIcon';\n\nexport { ChevronRightIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type CopyIconHandle = AnimatedIconHandle;\n\ntype CopyIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst springTransition = {\n damping: 17,\n mass: 1,\n stiffness: 160,\n type: 'spring' as const,\n};\n\nconst CopyIcon = forwardRef<CopyIconHandle, CopyIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='14'\n rx='2'\n ry='2'\n transition={springTransition}\n variants={{\n animate: { translateX: -3, translateY: -3 },\n normal: { translateX: 0, translateY: 0 },\n }}\n width='14'\n x='8'\n y='8'\n />\n <motion.path\n animate={controls}\n d='M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2'\n transition={springTransition}\n variants={{\n animate: { x: 3, y: 3 },\n normal: { x: 0, y: 0 },\n }}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nCopyIcon.displayName = 'CopyIcon';\n\nexport { CopyIcon };\n","'use client';\n\nimport type { HTMLAttributes, MouseEvent } from 'react';\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport type { Transition } from 'motion/react';\nimport { AnimatePresence, motion, useAnimation } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\n\nexport interface CopyCheckIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n triggerCopied: () => void;\n}\n\ninterface CopyCheckIconProps extends HTMLAttributes<HTMLDivElement> {\n size?: number;\n}\n\nconst SPRING_TRANSITION: Transition = {\n damping: 17,\n mass: 1,\n stiffness: 160,\n type: 'spring',\n};\n\nconst CopyCheckIcon = forwardRef<CopyCheckIconHandle, CopyCheckIconProps>(\n ({ onMouseEnter, onMouseLeave, className, size = 28, ...props }, ref) => {\n const controls = useAnimation();\n const isControlledRef = useRef(false);\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const triggerCopied = useCallback(() => {\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1500);\n }, []);\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n triggerCopied,\n };\n });\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (!copied) {\n if (isControlledRef.current) {\n onMouseEnter?.(e);\n } else {\n controls.start('animate').catch(() => undefined);\n }\n }\n },\n [controls, onMouseEnter, copied],\n );\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (!copied) {\n if (isControlledRef.current) {\n onMouseLeave?.(e);\n } else {\n controls.start('normal').catch(() => undefined);\n }\n }\n },\n [controls, onMouseLeave, copied],\n );\n\n return (\n <div\n aria-hidden='true'\n className={cn(\n 'relative inline-flex items-center justify-center',\n className,\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <AnimatePresence mode='wait'>\n {copied ? (\n <motion.svg\n key='check'\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={{ duration: 0.15 }}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n className='text-green-500'\n >\n <motion.path\n d='M20 6 9 17l-5-5'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ delay: 0.1, duration: 0.3 }}\n />\n </motion.svg>\n ) : (\n <motion.div\n key='copy'\n initial={{ opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={{ duration: 0.15 }}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='14'\n rx='2'\n ry='2'\n transition={SPRING_TRANSITION}\n variants={{\n animate: { translateX: -3, translateY: -3 },\n normal: { translateX: 0, translateY: 0 },\n }}\n width='14'\n x='8'\n y='8'\n />\n <motion.path\n animate={controls}\n d='M8 4V2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.75a2 2 0 0 0-2-2H16a2 2 0 0 0-2-2h-2z'\n transition={SPRING_TRANSITION}\n variants={{\n animate: { x: 3, y: 3 },\n normal: { x: 0, y: 0 },\n }}\n />\n </svg>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n },\n);\n\nCopyCheckIcon.displayName = 'CopyCheckIcon';\n\nexport { CopyCheckIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type DollarSignIconHandle = AnimatedIconHandle;\n\ntype DollarSignIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DOLLAR_MAIN_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n transition: { duration: 0.6, opacity: { duration: 0.1 } },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n transition: { duration: 0.4, opacity: { duration: 0.1 } },\n },\n};\n\nconst DOLLAR_SECONDARY_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n pathOffset: [1, 0],\n transition: {\n delay: 0.5,\n duration: 0.4,\n opacity: { delay: 0.5, duration: 0.1 },\n },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n pathOffset: 0,\n transition: {\n delay: 0.3,\n duration: 0.3,\n opacity: { delay: 0.3, duration: 0.1 },\n },\n },\n};\n\nconst DollarSignIcon = forwardRef<DollarSignIconHandle, DollarSignIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6'\n initial='normal'\n variants={DOLLAR_MAIN_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M12 22 L12 2'\n initial='normal'\n variants={DOLLAR_SECONDARY_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nDollarSignIcon.displayName = 'DollarSignIcon';\n\nexport { DollarSignIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type DownloadIconHandle = AnimatedIconHandle;\n\ntype DownloadIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DownloadIcon = forwardRef<DownloadIconHandle, DownloadIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M12 15V3'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { y: [0, 2, 0] }, normal: { y: 0 } }}\n />\n <motion.path\n animate={controls}\n d='m8 11 4 4 4-4'\n transition={{ duration: 0.3, times: [0, 0.4, 1] }}\n variants={{ animate: { y: [0, 2, 0] }, normal: { y: 0 } }}\n />\n <path d='M20 21H4' />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nDownloadIcon.displayName = 'DownloadIcon';\n\nexport { DownloadIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type FingerprintIconHandle = AnimatedIconHandle;\n\ntype FingerprintIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n opacity: [0, 0, 1, 1, 1],\n pathLength: [0.1, 0.3, 0.5, 0.7, 0.9, 1],\n transition: { opacity: { duration: 0.5 }, pathLength: { duration: 2 } },\n },\n normal: { opacity: 1, pathLength: 1 },\n};\n\nconst FINGERPRINT_PATHS = [\n { d: 'M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4' },\n { d: 'M14 13.12c0 2.38 0 6.38-1 8.88' },\n { d: 'M17.29 21.02c.12-.6.43-2.3.5-3.02' },\n { d: 'M2 12a10 10 0 0 1 18-6' },\n { d: 'M2 16h.01' },\n { d: 'M21.8 16c.2-2 .131-5.354 0-6' },\n { d: 'M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2' },\n { d: 'M8.65 22c.21-.66.45-1.32.57-2' },\n { d: 'M9 6.8a6 6 0 0 1 9 5.2v2' },\n] as const;\n\nconst FingerprintIcon = forwardRef<FingerprintIconHandle, FingerprintIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n {FINGERPRINT_PATHS.map(({ d }) => (\n <path d={d} key={d} strokeOpacity={0.4} />\n ))}\n {FINGERPRINT_PATHS.map(({ d }) => (\n <motion.path\n animate={controls}\n d={d}\n key={`motion-${d}`}\n variants={PATH_VARIANTS}\n />\n ))}\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nFingerprintIcon.displayName = 'FingerprintIcon';\n\nexport { FingerprintIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type HomeIconHandle = AnimatedIconHandle;\n\ntype HomeIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.6,\n opacity: { duration: 0.2 },\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { opacity: [0, 1], pathLength: [0, 1] },\n normal: { opacity: 1, pathLength: 1 },\n};\n\nconst HomeIcon = forwardRef<HomeIconHandle, HomeIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z' />\n <motion.path\n animate={controls}\n d='M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nHomeIcon.displayName = 'HomeIcon';\n\nexport { HomeIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type KeyIconHandle = AnimatedIconHandle;\n\ntype KeyIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst KeyIcon = forwardRef<KeyIconHandle, KeyIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n initial='normal'\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n style={{ originX: 0.3, originY: 0.7 }}\n variants={{\n animate: {\n rotate: [-3, -33, -25, -28],\n transition: {\n duration: 0.6,\n ease: 'easeInOut',\n times: [0, 0.6, 0.8, 1],\n },\n },\n normal: {\n rotate: 0,\n transition: {\n damping: 14,\n duration: 0.8,\n stiffness: 120,\n type: 'spring',\n },\n },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4' />\n <path d='m21 2-9.6 9.6' />\n <circle cx='7.5' cy='15.5' r='5.5' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nKeyIcon.displayName = 'KeyIcon';\n\nexport { KeyIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type LayoutPanelTopIconHandle = AnimatedIconHandle;\n\ntype LayoutPanelTopIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst LayoutPanelTopIcon = forwardRef<\n LayoutPanelTopIconHandle,\n LayoutPanelTopIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.5, times: [0.2, 1] },\n },\n translateY: [-5, 0],\n },\n normal: { opacity: 1, translateY: 0 },\n }}\n width='18'\n x='3'\n y='3'\n />\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.7, times: [0.5, 1] },\n translateX: { delay: 0.3 },\n },\n translateX: [-10, 0],\n },\n normal: { opacity: 1, translateX: 0 },\n }}\n width='7'\n x='3'\n y='14'\n />\n <motion.rect\n animate={controls}\n height='7'\n initial='normal'\n rx='1'\n variants={{\n animate: {\n opacity: [0, 1],\n transition: {\n duration: 0.5,\n opacity: { duration: 0.8, times: [0.5, 1] },\n translateX: { delay: 0.4 },\n },\n translateX: [10, 0],\n },\n normal: { opacity: 1, translateX: 0 },\n }}\n width='7'\n x='14'\n y='14'\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nLayoutPanelTopIcon.displayName = 'LayoutPanelTopIcon';\n\nexport { LayoutPanelTopIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type LinkIconHandle = AnimatedIconHandle;\n\ntype LinkIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n pathLength: [1, 0.97, 1, 0.97, 1],\n pathOffset: [0, 0.05, 0, 0.05, 0],\n rotate: [0, -5, 0],\n transition: {\n duration: 1,\n ease: 'easeInOut',\n rotate: { duration: 0.5 },\n times: [0, 0.2, 0.4, 0.6, 1],\n },\n },\n normal: { pathLength: 1, pathOffset: 0, rotate: 0 },\n};\n\nconst LinkIcon = forwardRef<LinkIconHandle, LinkIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <motion.path\n animate={controls}\n d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'\n variants={PATH_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nLinkIcon.displayName = 'LinkIcon';\n\nexport { LinkIcon };\n","import { type SVGProps } from 'react';\n\ninterface IconProps extends SVGProps<SVGSVGElement> {\n size?: number;\n}\n\nexport const ClaudeLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <path\n d='M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z'\n fill='#D97757'\n fillRule='nonzero'\n />\n </svg>\n);\n\nexport const CursorLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <rect width='24' height='24' rx='5' fill='#F5F5F5' />\n <path d='M12 4L5 8v8l7 4 7-4V8l-7-4z' fill='#E5E5E5' />\n <path d='M12 4L5 8l7 4 7-4-7-4z' fill='#808080' />\n <path d='M12 12l7-4v8l-7 4v-8z' fill='#666' />\n <path d='M12 12L5 8v8l7 4v-8z' fill='#999' />\n </svg>\n);\n\nexport const VSCodeLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 100 100'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <mask\n id='vsc-mask'\n maskUnits='userSpaceOnUse'\n x='0'\n y='0'\n width='100'\n height='100'\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M70.912 99.317C72.487 99.931 74.283 99.891 75.873 99.126L96.461 89.22C98.624 88.179 100 85.989 100 83.587V16.413C100 14.011 98.624 11.822 96.461 10.781L75.873 0.874C73.786 -0.13 71.345 0.116 69.513 1.447C69.252 1.637 69.003 1.849 68.769 2.083L29.355 38.041L12.187 25.01C10.589 23.797 8.354 23.896 6.869 25.246L1.363 30.255C-0.453 31.906 -0.455 34.763 1.359 36.417L16.247 50L1.359 63.583C-0.455 65.237 -0.453 68.094 1.363 69.745L6.869 74.754C8.354 76.104 10.589 76.204 12.187 74.99L29.355 61.959L68.769 97.917C69.392 98.541 70.125 99.01 70.912 99.317ZM75.015 27.299L45.109 50L75.015 72.701V27.299Z'\n fill='#fff'\n />\n </mask>\n <g mask='url(#vsc-mask)'>\n <path\n d='M96.461 10.796L75.857 0.876C73.472 -0.273 70.622 0.212 68.75 2.083L1.299 63.583C-0.516 65.237 -0.514 68.094 1.303 69.745L6.813 74.754C8.298 76.104 10.535 76.204 12.134 74.99L93.361 13.37C96.086 11.303 100 13.246 100 16.667V16.427C100 14.027 98.625 11.838 96.461 10.796Z'\n fill='#0065A9'\n />\n <path\n d='M96.461 89.204L75.857 99.124C73.472 100.273 70.622 99.788 68.75 97.917L1.299 36.417C-0.516 34.763 -0.514 31.906 1.303 30.255L6.813 25.246C8.298 23.896 10.535 23.796 12.134 25.009L93.361 86.63C96.086 88.697 100 86.754 100 83.333V83.573C100 85.974 98.625 88.162 96.461 89.204Z'\n fill='#007ACC'\n />\n <path\n d='M75.858 99.126C73.472 100.274 70.622 99.788 68.75 97.917C71.056 100.223 75 98.59 75 95.328V4.672C75 1.41 71.056 -0.223 68.75 2.083C70.622 0.211 73.472 -0.274 75.858 0.874L96.459 10.781C98.623 11.822 100 14.011 100 16.413V83.587C100 85.989 98.623 88.179 96.459 89.22L75.858 99.126Z'\n fill='#1F9CF0'\n />\n </g>\n </svg>\n);\n\nexport const OpenAILogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <defs>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='codex-grad'\n x1='12'\n x2='12'\n y1='3'\n y2='21'\n >\n <stop stopColor='#B1A7FF' />\n <stop offset='.5' stopColor='#7A9DFF' />\n <stop offset='1' stopColor='#3941FF' />\n </linearGradient>\n </defs>\n <path\n d='M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z'\n fill='#F0F6FF'\n />\n <path\n d='M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z'\n fill='url(#codex-grad)'\n />\n </svg>\n);\n\nexport const WindsurfLogo = ({ size = 32, ...props }: IconProps) => (\n <svg\n width={size}\n height={size}\n viewBox='0 0 1024 1024'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n {...props}\n >\n <path\n d='M897.246 286.869H889.819C850.735 286.808 819.017 318.46 819.017 357.539V515.589C819.017 547.15 792.93 572.716 761.882 572.716C743.436 572.716 725.02 563.433 714.093 547.85L552.673 317.304C539.28 298.16 517.486 286.747 493.895 286.747C457.094 286.747 423.976 318.034 423.976 356.657V515.619C423.976 547.181 398.103 572.746 366.842 572.746C348.335 572.746 329.949 563.463 319.021 547.881L138.395 289.882C134.316 284.038 125.154 286.93 125.154 294.052V431.892C125.154 438.862 127.285 445.619 131.272 451.34L309.037 705.2C319.539 720.204 335.033 731.344 352.9 735.392C397.616 745.557 438.77 711.135 438.77 667.278V508.406C438.77 476.845 464.339 451.279 495.904 451.279H495.995C515.02 451.279 532.857 460.562 543.785 476.145L705.235 706.661C718.659 725.835 739.327 737.218 763.983 737.218C801.606 737.218 833.841 705.9 833.841 667.308V508.376C833.841 476.815 859.41 451.249 890.975 451.249H897.276C901.233 451.249 904.43 448.053 904.43 444.097V294.021C904.43 290.065 901.233 286.869 897.276 286.869H897.246Z'\n fill='#0B100F'\n />\n </svg>\n);\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type MoonIconHandle = AnimatedIconHandle;\n\ntype MoonIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SVG_VARIANTS: Variants = {\n animate: { rotate: [0, -10, 10, -5, 5, 0] },\n normal: { rotate: 0 },\n};\n\nconst SVG_TRANSITION: Transition = {\n duration: 1.2,\n ease: 'easeInOut',\n};\n\nconst MoonIcon = forwardRef<MoonIconHandle, MoonIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={SVG_TRANSITION}\n variants={SVG_VARIANTS}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nMoonIcon.displayName = 'MoonIcon';\n\nexport { MoonIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PanelLeftCloseIconHandle = AnimatedIconHandle;\n\ntype PanelLeftCloseIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { x: [0, -1.5, 0] },\n normal: { x: 0 },\n};\n\nconst PanelLeftCloseIcon = forwardRef<\n PanelLeftCloseIconHandle,\n PanelLeftCloseIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m16 15-3-3 3-3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nPanelLeftCloseIcon.displayName = 'PanelLeftCloseIcon';\n\nexport { PanelLeftCloseIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Transition, Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PanelLeftOpenIconHandle = AnimatedIconHandle;\n\ntype PanelLeftOpenIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst DEFAULT_TRANSITION: Transition = {\n duration: 0.5,\n times: [0, 0.4, 1],\n};\n\nconst PATH_VARIANTS: Variants = {\n animate: { x: [0, 1.5, 0] },\n normal: { x: 0 },\n};\n\nconst PanelLeftOpenIcon = forwardRef<\n PanelLeftOpenIconHandle,\n PanelLeftOpenIconProps\n>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m14 9 3 3-3 3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nPanelLeftOpenIcon.displayName = 'PanelLeftOpenIcon';\n\nexport { PanelLeftOpenIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type PlusIconHandle = AnimatedIconHandle;\n\ntype PlusIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PlusIcon = forwardRef<PlusIconHandle, PlusIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 15, stiffness: 100, type: 'spring' }}\n variants={{ animate: { rotate: 180 }, normal: { rotate: 0 } }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M5 12h14' />\n <path d='M12 5v14' />\n </motion.svg>\n )}\n </AnimatedIcon>\n));\n\nPlusIcon.displayName = 'PlusIcon';\n\nexport { PlusIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type RefreshCWIconHandle = AnimatedIconHandle;\n\ntype RefreshCWIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst RefreshCWIcon = forwardRef<RefreshCWIconHandle, RefreshCWIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 25, stiffness: 250, type: 'spring' }}\n variants={{ animate: { rotate: '50deg' }, normal: { rotate: '0deg' } }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8' />\n <path d='M21 3v5h-5' />\n <path d='M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16' />\n <path d='M8 16H3v5' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nRefreshCWIcon.displayName = 'RefreshCWIcon';\n\nexport { RefreshCWIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SearchIconHandle = AnimatedIconHandle;\n\ntype SearchIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SearchIcon = forwardRef<SearchIconHandle, SearchIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{\n bounce: 0.3,\n duration: 1,\n }}\n variants={{\n animate: {\n x: [0, 0, -3, 0],\n y: [0, -4, 0, 0],\n },\n normal: { x: 0, y: 0 },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <circle cx='11' cy='11' r='8' />\n <path d='m21 21-4.3-4.3' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nSearchIcon.displayName = 'SearchIcon';\n\nexport { SearchIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SettingsIconHandle = AnimatedIconHandle;\n\ntype SettingsIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst SettingsIcon = forwardRef<SettingsIconHandle, SettingsIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <motion.svg\n animate={controls}\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n transition={{ damping: 10, stiffness: 50, type: 'spring' }}\n variants={{\n animate: { rotate: 180 },\n normal: { rotate: 0 },\n }}\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z' />\n <circle cx='12' cy='12' r='3' />\n </motion.svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nSettingsIcon.displayName = 'SettingsIcon';\n\nexport { SettingsIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type ShieldCheckIconHandle = AnimatedIconHandle;\n\ntype ShieldCheckIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n opacity: [0, 1],\n pathLength: [0, 1],\n scale: [0.5, 1],\n transition: { duration: 0.4, opacity: { duration: 0.1 } },\n },\n normal: {\n opacity: 1,\n pathLength: 1,\n scale: 1,\n transition: { duration: 0.3, opacity: { duration: 0.1 } },\n },\n};\n\nconst ShieldCheckIcon = forwardRef<ShieldCheckIconHandle, ShieldCheckIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z' />\n <motion.path\n animate={controls}\n d='m9 12 2 2 4-4'\n initial='normal'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nShieldCheckIcon.displayName = 'ShieldCheckIcon';\n\nexport { ShieldCheckIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type SunIconHandle = AnimatedIconHandle;\n\ntype SunIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: (i: number) => ({\n opacity: [0, 1],\n transition: { delay: i * 0.1, duration: 0.3 },\n }),\n normal: { opacity: 1 },\n};\n\nconst SUN_PATHS = [\n 'M12 2v2',\n 'm19.07 4.93-1.41 1.41',\n 'M20 12h2',\n 'm17.66 17.66 1.41 1.41',\n 'M12 20v2',\n 'm6.34 17.66-1.41 1.41',\n 'M2 12h2',\n 'm4.93 4.93 1.41 1.41',\n];\n\nconst SunIcon = forwardRef<SunIconHandle, SunIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <circle cx='12' cy='12' r='4' />\n {SUN_PATHS.map((d, index) => (\n <motion.path\n animate={controls}\n custom={index + 1}\n d={d}\n key={d}\n variants={PATH_VARIANTS}\n />\n ))}\n </svg>\n )}\n </AnimatedIcon>\n));\n\nSunIcon.displayName = 'SunIcon';\n\nexport { SunIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type TerminalIconHandle = AnimatedIconHandle;\n\ntype TerminalIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst LINE_VARIANTS: Variants = {\n animate: {\n opacity: [1, 0, 1],\n transition: { duration: 0.8, ease: 'linear', repeat: Infinity },\n },\n normal: { opacity: 1 },\n};\n\nconst TerminalIcon = forwardRef<TerminalIconHandle, TerminalIconProps>(\n (props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <polyline points='4 17 10 11 4 5' />\n <motion.line\n animate={controls}\n initial='normal'\n variants={LINE_VARIANTS}\n x1='12'\n x2='20'\n y1='19'\n y2='19'\n />\n </svg>\n )}\n </AnimatedIcon>\n ),\n);\n\nTerminalIcon.displayName = 'TerminalIcon';\n\nexport { TerminalIcon };\n","'use client';\n\nimport { forwardRef } from 'react';\nimport type { Variants } from 'motion/react';\nimport { motion } from 'motion/react';\n\nimport {\n AnimatedIcon,\n type AnimatedIconHandle,\n type AnimatedIconProps,\n} from '../animated-icon';\n\nexport type UsersIconHandle = AnimatedIconHandle;\n\ntype UsersIconProps = Omit<AnimatedIconProps, 'children'>;\n\nconst PATH_VARIANTS: Variants = {\n animate: {\n transition: { damping: 13, delay: 0.1, stiffness: 200, type: 'spring' },\n translateX: [-6, 0],\n },\n normal: {\n transition: { damping: 13, stiffness: 200, type: 'spring' },\n translateX: 0,\n },\n};\n\nconst UsersIcon = forwardRef<UsersIconHandle, UsersIconProps>((props, ref) => (\n <AnimatedIcon ref={ref} {...props}>\n {(controls, size) => (\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' />\n <circle cx='9' cy='7' r='4' />\n <motion.path\n animate={controls}\n d='M22 21v-2a4 4 0 0 0-3-3.87'\n variants={PATH_VARIANTS}\n />\n <motion.path\n animate={controls}\n d='M16 3.13a4 4 0 0 1 0 7.75'\n variants={PATH_VARIANTS}\n />\n </svg>\n )}\n </AnimatedIcon>\n));\n\nUsersIcon.displayName = 'UsersIcon';\n\nexport { UsersIcon };\n"],"mappings":"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"}