@wow-two-beta/ui 0.0.67 → 0.0.69

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 (200) hide show
  1. package/dist/actions/index.js +8 -8
  2. package/dist/actions/speedDial/SpeedDial.d.ts +8 -6
  3. package/dist/actions/toolbar/Toolbar.d.ts +4 -6
  4. package/dist/{chunk-XLYJF3HC.js → chunk-B4X7XXSM.js} +4 -4
  5. package/dist/{chunk-XLYJF3HC.js.map → chunk-B4X7XXSM.js.map} +1 -1
  6. package/dist/{chunk-X2MYOHOB.js → chunk-D4ZT36AZ.js} +2 -2
  7. package/dist/chunk-D4ZT36AZ.js.map +1 -0
  8. package/dist/{chunk-MVMDDGW7.js → chunk-D7ZFCHX5.js} +3 -3
  9. package/dist/{chunk-MVMDDGW7.js.map → chunk-D7ZFCHX5.js.map} +1 -1
  10. package/dist/{chunk-3SWPYYRQ.js → chunk-EKGOQL75.js} +43 -58
  11. package/dist/chunk-EKGOQL75.js.map +1 -0
  12. package/dist/{chunk-LGTGZ3RW.js → chunk-F4HGQMUI.js} +2 -2
  13. package/dist/chunk-F4HGQMUI.js.map +1 -0
  14. package/dist/{chunk-YQGEF43L.js → chunk-GPMNI5MG.js} +6 -6
  15. package/dist/{chunk-YQGEF43L.js.map → chunk-GPMNI5MG.js.map} +1 -1
  16. package/dist/{chunk-7ZDLUNAY.js → chunk-KZLEHWAJ.js} +4 -4
  17. package/dist/{chunk-7ZDLUNAY.js.map → chunk-KZLEHWAJ.js.map} +1 -1
  18. package/dist/{chunk-3BNEDKMS.js → chunk-ORYO55KN.js} +24 -20
  19. package/dist/chunk-ORYO55KN.js.map +1 -0
  20. package/dist/{chunk-NOOKDXIZ.js → chunk-OZBLEOLZ.js} +5 -5
  21. package/dist/chunk-OZBLEOLZ.js.map +1 -0
  22. package/dist/{chunk-MZZKA3ZS.js → chunk-QTHKG7MQ.js} +41 -38
  23. package/dist/chunk-QTHKG7MQ.js.map +1 -0
  24. package/dist/{chunk-JLAFUXGZ.js → chunk-R5MOEUXM.js} +21 -16
  25. package/dist/chunk-R5MOEUXM.js.map +1 -0
  26. package/dist/{chunk-V267IMBH.js → chunk-RNHY33US.js} +4 -4
  27. package/dist/chunk-RNHY33US.js.map +1 -0
  28. package/dist/{chunk-ZTK5ZQIL.js → chunk-SREWD3XJ.js} +127 -109
  29. package/dist/chunk-SREWD3XJ.js.map +1 -0
  30. package/dist/{chunk-FMTBJJP6.js → chunk-UMRRFZ4R.js} +3 -3
  31. package/dist/{chunk-FMTBJJP6.js.map → chunk-UMRRFZ4R.js.map} +1 -1
  32. package/dist/{chunk-NEH4ITXL.js → chunk-VTRPW2QQ.js} +15 -13
  33. package/dist/chunk-VTRPW2QQ.js.map +1 -0
  34. package/dist/{chunk-NW7ULTYL.js → chunk-VYFPLQPV.js} +4 -4
  35. package/dist/{chunk-NW7ULTYL.js.map → chunk-VYFPLQPV.js.map} +1 -1
  36. package/dist/{chunk-4XWLEKH2.js → chunk-WKVWOAQV.js} +3 -3
  37. package/dist/{chunk-4XWLEKH2.js.map → chunk-WKVWOAQV.js.map} +1 -1
  38. package/dist/{chunk-D6K6MU2G.js → chunk-X3JVVEUJ.js} +78 -43
  39. package/dist/chunk-X3JVVEUJ.js.map +1 -0
  40. package/dist/{chunk-ZC4H4PIN.js → chunk-X5JSX4PU.js} +20 -17
  41. package/dist/chunk-X5JSX4PU.js.map +1 -0
  42. package/dist/{chunk-GTBNVI77.js → chunk-XFUD3RZK.js} +59 -45
  43. package/dist/chunk-XFUD3RZK.js.map +1 -0
  44. package/dist/{chunk-H3WC7KRX.js → chunk-XOUAFZ2E.js} +70 -54
  45. package/dist/chunk-XOUAFZ2E.js.map +1 -0
  46. package/dist/{chunk-DX7FYAKY.js → chunk-XSW3NZDD.js} +17 -17
  47. package/dist/chunk-XSW3NZDD.js.map +1 -0
  48. package/dist/display/carousel/Carousel.d.ts +9 -11
  49. package/dist/display/collapsible/Collapsible.d.ts +4 -6
  50. package/dist/display/index.js +10 -10
  51. package/dist/display/list/List.d.ts +3 -5
  52. package/dist/display/table/Table.d.ts +9 -11
  53. package/dist/display/tabs/Tabs.d.ts +5 -7
  54. package/dist/display/timeline/Timeline.d.ts +3 -5
  55. package/dist/display/tree/Tree.d.ts +4 -6
  56. package/dist/feedback/index.js +9 -9
  57. package/dist/feedback/onboardingChecklist/OnboardingChecklist.d.ts +3 -9
  58. package/dist/forms/DateExtensions.d.ts +30 -25
  59. package/dist/forms/MonthGrid.d.ts +8 -7
  60. package/dist/forms/calendar/Calendar.d.ts +8 -7
  61. package/dist/forms/characterCount/CharacterCount.d.ts +1 -1
  62. package/dist/forms/colorPicker/ColorPicker.d.ts +7 -0
  63. package/dist/forms/combobox/Combobox.d.ts +8 -6
  64. package/dist/forms/dateField/DateField.d.ts +6 -5
  65. package/dist/forms/datePicker/DatePicker.d.ts +8 -7
  66. package/dist/forms/dateRangePicker/DateRangePicker.d.ts +5 -4
  67. package/dist/forms/editable/Editable.d.ts +10 -8
  68. package/dist/forms/{formField/FormField.d.ts → field/Field.d.ts} +2 -2
  69. package/dist/forms/field/index.d.ts +6 -0
  70. package/dist/forms/index.d.ts +2 -2
  71. package/dist/forms/index.js +14 -14
  72. package/dist/forms/labeledInput/LabeledInput.d.ts +6 -2
  73. package/dist/forms/labeledInput/index.d.ts +1 -0
  74. package/dist/forms/multiSelect/MultiSelect.d.ts +8 -6
  75. package/dist/forms/rangeCalendar/RangeCalendar.d.ts +8 -6
  76. package/dist/forms/recurrenceEditor/RecurrenceEditor.d.ts +3 -2
  77. package/dist/forms/stepper/Stepper.d.ts +5 -7
  78. package/dist/forms/textareaInput/TextareaInput.d.ts +9 -0
  79. package/dist/forms/textareaInput/index.d.ts +6 -0
  80. package/dist/forms/timeField/TimeField.d.ts +4 -7
  81. package/dist/forms/timeField/index.d.ts +1 -1
  82. package/dist/forms/timePicker/TimePicker.d.ts +5 -5
  83. package/dist/forms/wizard/Wizard.d.ts +5 -7
  84. package/dist/hooks/index.js +2 -2
  85. package/dist/hooks/useClipboard/index.d.ts +1 -0
  86. package/dist/hooks/useControlled/index.d.ts +1 -0
  87. package/dist/hooks/useDebounceHandler/index.d.ts +1 -0
  88. package/dist/hooks/useDisclosure/index.d.ts +1 -0
  89. package/dist/hooks/useEscape/index.d.ts +1 -0
  90. package/dist/hooks/useEventListener/index.d.ts +1 -0
  91. package/dist/hooks/useFocusTrap/index.d.ts +1 -0
  92. package/dist/hooks/useId/index.d.ts +1 -0
  93. package/dist/hooks/useMediaQuery/index.d.ts +1 -0
  94. package/dist/hooks/useOutsideClick/index.d.ts +1 -0
  95. package/dist/hooks/useReducedMotion/index.d.ts +1 -0
  96. package/dist/hooks/useResizeObserver/index.d.ts +1 -0
  97. package/dist/hooks/useScrollLock/index.d.ts +1 -0
  98. package/dist/hooks/useTypeahead/index.d.ts +1 -0
  99. package/dist/icons/index.js +3 -3
  100. package/dist/index.js +22 -22
  101. package/dist/layout/appShell/AppShell.d.ts +8 -15
  102. package/dist/layout/index.js +11 -11
  103. package/dist/layout/resizablePanels/ResizablePanels.d.ts +4 -6
  104. package/dist/nav/commandPalette/CommandPalette.d.ts +11 -9
  105. package/dist/nav/contextMenu/ContextMenu.d.ts +9 -7
  106. package/dist/nav/dropdownMenu/DropdownMenu.d.ts +9 -7
  107. package/dist/nav/index.js +11 -11
  108. package/dist/nav/menu/Menu.d.ts +7 -5
  109. package/dist/nav/menubar/Menubar.d.ts +5 -7
  110. package/dist/nav/navigationMenu/NavigationMenu.d.ts +7 -9
  111. package/dist/overlays/actionSheet/ActionSheet.d.ts +8 -6
  112. package/dist/overlays/alertModal/AlertModal.d.ts +30 -0
  113. package/dist/overlays/alertModal/index.d.ts +6 -0
  114. package/dist/overlays/backdrop/Backdrop.d.ts +1 -1
  115. package/dist/overlays/bottomSheet/BottomSheet.d.ts +4 -11
  116. package/dist/overlays/drawer/Drawer.d.ts +14 -12
  117. package/dist/overlays/hoverCard/HoverCard.d.ts +7 -5
  118. package/dist/overlays/index.d.ts +2 -2
  119. package/dist/overlays/index.js +10 -10
  120. package/dist/overlays/modal/Modal.d.ts +54 -0
  121. package/dist/overlays/modal/index.d.ts +6 -0
  122. package/dist/overlays/popover/Popover.d.ts +8 -6
  123. package/dist/primitives/formControlContext/FormControlContext.d.ts +1 -1
  124. package/dist/primitives/index.js +3 -3
  125. package/dist/utils/ColorExtensions/index.d.ts +1 -0
  126. package/dist/utils/CssExtensions/index.d.ts +1 -0
  127. package/dist/utils/Environment/index.d.ts +1 -0
  128. package/dist/utils/Equality/index.d.ts +1 -0
  129. package/dist/utils/HtmlExtensions/index.d.ts +1 -0
  130. package/dist/utils/KeyboardExtensions/index.d.ts +1 -0
  131. package/dist/utils/Layers/index.d.ts +1 -0
  132. package/dist/utils/OptionalExtensions/index.d.ts +1 -0
  133. package/dist/utils/PressExtensions/index.d.ts +1 -0
  134. package/dist/utils/StyleTokens/index.d.ts +1 -0
  135. package/dist/utils/{SurfaceStyles.d.ts → SurfaceStyles/SurfaceStyles.d.ts} +1 -1
  136. package/dist/utils/SurfaceStyles/index.d.ts +1 -0
  137. package/dist/utils/{Tones.d.ts → Tones/Tones.d.ts} +1 -1
  138. package/dist/utils/Tones/index.d.ts +1 -0
  139. package/dist/utils/TransitionExtensions/index.d.ts +1 -0
  140. package/dist/utils/cn/index.d.ts +1 -0
  141. package/dist/utils/composeEventHandlers/index.d.ts +1 -0
  142. package/dist/utils/composeRefs/index.d.ts +1 -0
  143. package/dist/utils/dataAttr/index.d.ts +1 -0
  144. package/dist/utils/index.js +2 -2
  145. package/dist/utils/polymorphic/index.d.ts +1 -0
  146. package/dist/utils/tv/index.d.ts +1 -0
  147. package/package.json +3 -2
  148. package/dist/chunk-3BNEDKMS.js.map +0 -1
  149. package/dist/chunk-3SWPYYRQ.js.map +0 -1
  150. package/dist/chunk-D6K6MU2G.js.map +0 -1
  151. package/dist/chunk-DX7FYAKY.js.map +0 -1
  152. package/dist/chunk-GTBNVI77.js.map +0 -1
  153. package/dist/chunk-H3WC7KRX.js.map +0 -1
  154. package/dist/chunk-JLAFUXGZ.js.map +0 -1
  155. package/dist/chunk-LGTGZ3RW.js.map +0 -1
  156. package/dist/chunk-MZZKA3ZS.js.map +0 -1
  157. package/dist/chunk-NEH4ITXL.js.map +0 -1
  158. package/dist/chunk-NOOKDXIZ.js.map +0 -1
  159. package/dist/chunk-V267IMBH.js.map +0 -1
  160. package/dist/chunk-X2MYOHOB.js.map +0 -1
  161. package/dist/chunk-ZC4H4PIN.js.map +0 -1
  162. package/dist/chunk-ZTK5ZQIL.js.map +0 -1
  163. package/dist/forms/formField/index.d.ts +0 -1
  164. package/dist/forms/textarea/Textarea.d.ts +0 -9
  165. package/dist/forms/textarea/index.d.ts +0 -1
  166. package/dist/overlays/alertDialog/AlertDialog.d.ts +0 -28
  167. package/dist/overlays/alertDialog/index.d.ts +0 -1
  168. package/dist/overlays/dialog/Dialog.d.ts +0 -46
  169. package/dist/overlays/dialog/index.d.ts +0 -1
  170. /package/dist/hooks/{useClipboard.d.ts → useClipboard/useClipboard.d.ts} +0 -0
  171. /package/dist/hooks/{useControlled.d.ts → useControlled/useControlled.d.ts} +0 -0
  172. /package/dist/hooks/{useDebounceHandler.d.ts → useDebounceHandler/useDebounceHandler.d.ts} +0 -0
  173. /package/dist/hooks/{useDisclosure.d.ts → useDisclosure/useDisclosure.d.ts} +0 -0
  174. /package/dist/hooks/{useEscape.d.ts → useEscape/useEscape.d.ts} +0 -0
  175. /package/dist/hooks/{useEventListener.d.ts → useEventListener/useEventListener.d.ts} +0 -0
  176. /package/dist/hooks/{useFocusTrap.d.ts → useFocusTrap/useFocusTrap.d.ts} +0 -0
  177. /package/dist/hooks/{useId.d.ts → useId/useId.d.ts} +0 -0
  178. /package/dist/hooks/{useMediaQuery.d.ts → useMediaQuery/useMediaQuery.d.ts} +0 -0
  179. /package/dist/hooks/{useOutsideClick.d.ts → useOutsideClick/useOutsideClick.d.ts} +0 -0
  180. /package/dist/hooks/{useReducedMotion.d.ts → useReducedMotion/useReducedMotion.d.ts} +0 -0
  181. /package/dist/hooks/{useResizeObserver.d.ts → useResizeObserver/useResizeObserver.d.ts} +0 -0
  182. /package/dist/hooks/{useScrollLock.d.ts → useScrollLock/useScrollLock.d.ts} +0 -0
  183. /package/dist/hooks/{useTypeahead.d.ts → useTypeahead/useTypeahead.d.ts} +0 -0
  184. /package/dist/utils/{ColorExtensions.d.ts → ColorExtensions/ColorExtensions.d.ts} +0 -0
  185. /package/dist/utils/{CssExtensions.d.ts → CssExtensions/CssExtensions.d.ts} +0 -0
  186. /package/dist/utils/{Environment.d.ts → Environment/Environment.d.ts} +0 -0
  187. /package/dist/utils/{Equality.d.ts → Equality/Equality.d.ts} +0 -0
  188. /package/dist/utils/{HtmlExtensions.d.ts → HtmlExtensions/HtmlExtensions.d.ts} +0 -0
  189. /package/dist/utils/{KeyboardExtensions.d.ts → KeyboardExtensions/KeyboardExtensions.d.ts} +0 -0
  190. /package/dist/utils/{Layers.d.ts → Layers/Layers.d.ts} +0 -0
  191. /package/dist/utils/{OptionalExtensions.d.ts → OptionalExtensions/OptionalExtensions.d.ts} +0 -0
  192. /package/dist/utils/{PressExtensions.d.ts → PressExtensions/PressExtensions.d.ts} +0 -0
  193. /package/dist/utils/{StyleTokens.d.ts → StyleTokens/StyleTokens.d.ts} +0 -0
  194. /package/dist/utils/{TransitionExtensions.d.ts → TransitionExtensions/TransitionExtensions.d.ts} +0 -0
  195. /package/dist/utils/{cn.d.ts → cn/cn.d.ts} +0 -0
  196. /package/dist/utils/{composeEventHandlers.d.ts → composeEventHandlers/composeEventHandlers.d.ts} +0 -0
  197. /package/dist/utils/{composeRefs.d.ts → composeRefs/composeRefs.d.ts} +0 -0
  198. /package/dist/utils/{dataAttr.d.ts → dataAttr/dataAttr.d.ts} +0 -0
  199. /package/dist/utils/{polymorphic.d.ts → polymorphic/polymorphic.d.ts} +0 -0
  200. /package/dist/utils/{tv.d.ts → tv/tv.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/feedback/skeleton/Skeleton.variants.ts","../src/feedback/skeleton/Skeleton.tsx","../src/feedback/progressBar/ProgressBar.variants.ts","../src/feedback/progressBar/ProgressBar.tsx","../src/feedback/progressCircle/ProgressCircle.tsx","../src/feedback/alertSimple/AlertSimple.variants.ts","../src/feedback/alertSimple/AlertSimple.tsx","../src/feedback/bannerSimple/BannerSimple.variants.ts","../src/feedback/bannerSimple/BannerSimple.tsx","../src/feedback/toastSimple/ToastSimple.tsx","../src/feedback/toastSimple/ToastSimple.variants.ts","../src/feedback/alert/Alert.tsx","../src/feedback/banner/Banner.tsx","../src/feedback/toast/Toast.tsx","../src/feedback/callout/Callout.tsx","../src/feedback/inlineSpinner/InlineSpinner.tsx","../src/feedback/loadingState/LoadingState.tsx","../src/feedback/progressSteps/ProgressSteps.tsx","../src/feedback/statusIndicator/StatusIndicator.tsx","../src/feedback/meterBar/MeterBar.tsx","../src/feedback/trendIndicator/TrendIndicator.tsx","../src/feedback/toaster/Toaster.tsx","../src/feedback/loadingOverlay/LoadingOverlay.tsx","../src/feedback/undoBar/UndoBar.tsx","../src/feedback/onboardingChecklist/OnboardingChecklist.tsx","../src/feedback/tour/Tour.tsx","../src/feedback/typingIndicator/TypingIndicator.tsx","../src/feedback/presenceIndicator/PresenceIndicator.tsx","../src/feedback/liveCursor/LiveCursor.tsx","../src/feedback/notificationCenter/NotificationCenter.tsx"],"names":["forwardRef","jsx","jsxs","X","LoadingOverlay","LoadingScrim","useState","useRef","useEffect","UndoBarPanel","OnboardingChecklist","useMemo","OnboardingChecklistTask","Check","TourTooltip","SIZE","TONE","Children","isValidElement"],"mappings":"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","file":"chunk-NEH4ITXL.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\nexport const skeletonVariants = tv({\n base: 'animate-pulse bg-muted',\n variants: {\n shape: {\n rect: 'rounded-md',\n text: 'h-4 rounded-sm',\n circle: 'rounded-full',\n },\n },\n defaultVariants: {\n shape: 'rect',\n },\n});\n\nexport type SkeletonVariants = VariantProps<typeof skeletonVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { skeletonVariants, type SkeletonVariants } from './Skeleton.variants';\n\nexport interface SkeletonProps extends ComponentPropsWithoutRef<'div'>, SkeletonVariants {}\n\n/**\n * Loading placeholder. Use sized via `className` (e.g. `w-32 h-4`) for text\n * lines, or as a full block with `shape=\"rect\"`.\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, shape, ...props }, ref) => (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(skeletonVariants({ shape }), className)}\n {...props}\n />\n ),\n);\nSkeleton.displayName = 'Skeleton';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const progressTrackVariants = tv({\n base: 'h-2 w-full overflow-hidden rounded-full bg-muted',\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nexport const progressFillVariants = tv({\n base: 'h-full rounded-full transition-[width] duration-300',\n variants: {\n tone: {\n brand: 'bg-primary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n neutral: 'bg-muted-foreground',\n },\n },\n defaultVariants: {\n tone: 'brand',\n },\n});\n\nexport type ProgressBarVariants = VariantProps<typeof progressTrackVariants> &\n VariantProps<typeof progressFillVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport {\n progressFillVariants,\n progressTrackVariants,\n type ProgressBarVariants,\n} from './ProgressBar.variants';\n\nexport interface ProgressBarProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'children'>,\n ProgressBarVariants {\n /** Current value 0–100. Pass `undefined` for indeterminate. */\n value?: number;\n max?: number;\n /** Accessible label for the progress. */\n label?: string;\n}\n\n/**\n * Linear progress indicator. Set `value` (0–`max`) for determinate; omit\n * for indeterminate.\n */\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n ({ value, max = 100, size, tone, label, className, ...props }, ref) => {\n const determinate = typeof value === 'number';\n const pct = determinate ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={determinate ? value : undefined}\n className={cn(progressTrackVariants({ size }), className)}\n {...props}\n >\n <div\n className={cn(\n progressFillVariants({ tone }),\n !determinate && 'w-1/3 animate-[indeterminate_1.4s_ease-in-out_infinite]',\n )}\n style={determinate ? { width: `${pct}%` } : undefined}\n />\n </div>\n );\n },\n);\nProgressBar.displayName = 'ProgressBar';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ProgressCircleProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** 0–100. Omit for indeterminate. */\n value?: number;\n max?: number;\n size?: number;\n thickness?: number;\n tone?: 'brand' | 'success' | 'warning' | 'danger' | 'neutral';\n label?: string;\n}\n\nconst TONE_CLASS: Record<NonNullable<ProgressCircleProps['tone']>, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n neutral: 'text-muted-foreground',\n};\n\n/**\n * Circular progress indicator (SVG). Determinate when `value` is set;\n * indeterminate (rotating) when omitted.\n */\nexport const ProgressCircle = forwardRef<HTMLDivElement, ProgressCircleProps>(\n (\n { value, max = 100, size = 40, thickness = 4, tone = 'brand', label, className, ...props },\n ref,\n ) => {\n const determinate = typeof value === 'number';\n const radius = (size - thickness) / 2;\n const circumference = 2 * Math.PI * radius;\n const pct = determinate ? Math.min(100, Math.max(0, (value / max) * 100)) : 25;\n const offset = circumference - (pct / 100) * circumference;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={determinate ? value : undefined}\n className={cn('inline-block', !determinate && 'animate-spin', TONE_CLASS[tone], className)}\n style={{ width: size, height: size }}\n {...props}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={thickness}\n fill=\"none\"\n opacity={0.2}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"currentColor\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n fill=\"none\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n style={{ transition: 'stroke-dashoffset 300ms ease' }}\n />\n </svg>\n </div>\n );\n },\n);\nProgressCircle.displayName = 'ProgressCircle';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const alertSimpleVariants = tv({\n base: 'rounded-md border px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft bg-info-soft text-info-soft-foreground',\n success: 'border-success-soft bg-success-soft text-success-soft-foreground',\n warning: 'border-warning-soft bg-warning-soft text-warning-soft-foreground',\n danger: 'border-destructive-soft bg-destructive-soft text-destructive-soft-foreground',\n neutral: 'border-border bg-muted text-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type AlertSimpleVariants = VariantProps<typeof alertSimpleVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { alertSimpleVariants, type AlertSimpleVariants } from './AlertSimple.variants';\n\nexport interface AlertSimpleProps\n extends ComponentPropsWithoutRef<'div'>,\n AlertSimpleVariants {}\n\n/**\n * Atomic alert — a styled colored container that takes free-form `children`.\n * No internal slots; consumer composes title/description/actions inline.\n *\n * For the structured Icon + Title + Description + Actions composition use\n * the `Alert` molecule (L4).\n */\nexport const AlertSimple = forwardRef<HTMLDivElement, AlertSimpleProps>(\n ({ className, severity, role = 'status', ...props }, ref) => (\n <div\n ref={ref}\n role={role}\n className={cn(alertSimpleVariants({ severity }), className)}\n {...props}\n />\n ),\n);\nAlertSimple.displayName = 'AlertSimple';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const bannerSimpleVariants = tv({\n base: 'w-full px-6 py-3 text-sm',\n variants: {\n severity: {\n info: 'bg-info text-info-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-destructive text-destructive-foreground',\n neutral: 'bg-inverse text-inverse-foreground',\n },\n },\n defaultVariants: {\n severity: 'info',\n },\n});\n\nexport type BannerSimpleVariants = VariantProps<typeof bannerSimpleVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { bannerSimpleVariants, type BannerSimpleVariants } from './BannerSimple.variants';\n\nexport interface BannerSimpleProps\n extends ComponentPropsWithoutRef<'div'>,\n BannerSimpleVariants {}\n\n/**\n * Full-width banner — typically pinned to the top of the app to broadcast\n * status. Atom; for structured slotted layout use `Banner` (L4).\n */\nexport const BannerSimple = forwardRef<HTMLDivElement, BannerSimpleProps>(\n ({ className, severity, role = 'status', ...props }, ref) => (\n <div\n ref={ref}\n role={role}\n className={cn(bannerSimpleVariants({ severity }), className)}\n {...props}\n />\n ),\n);\nBannerSimple.displayName = 'BannerSimple';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn, surfaceVariants } from '../../utils';\nimport type { Tone } from '../../utils';\nimport type { ToastSimpleVariants } from './ToastSimple.variants';\n\n/** Represents the prop surface of `ToastSimple`. */\nexport interface ToastSimpleProps\n extends ComponentPropsWithoutRef<'div'>,\n ToastSimpleVariants {}\n\n/** Maps the toast `severity` keyword to a SurfaceStyles `tone`. */\nconst SEVERITY_TO_TONE: Record<NonNullable<ToastSimpleVariants['severity']>, Tone> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n neutral: 'neutral',\n};\n\n/** Provides the atomic toast card — single tone-driven notification with free-form children. */\nexport const ToastSimple = forwardRef<HTMLDivElement, ToastSimpleProps>(\n ({ className, severity = 'neutral', role = 'status', ...props }, ref) => (\n <div\n ref={ref}\n role={role}\n aria-live=\"polite\"\n className={cn(\n 'pointer-events-auto text-sm',\n surfaceVariants({\n variant: 'surface',\n tone: SEVERITY_TO_TONE[severity],\n radius: 'md',\n padding: 'md',\n elevation: 3,\n }),\n className,\n )}\n {...props}\n />\n ),\n);\nToastSimple.displayName = 'ToastSimple';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const toastSimpleVariants = tv({\n base: 'pointer-events-auto rounded-md border bg-popover text-popover-foreground shadow-lg px-4 py-3 text-sm',\n variants: {\n severity: {\n info: 'border-info-soft',\n success: 'border-success-soft',\n warning: 'border-warning-soft',\n danger: 'border-destructive-soft',\n neutral: 'border-border',\n },\n },\n defaultVariants: {\n severity: 'neutral',\n },\n});\n\nexport type ToastSimpleVariants = VariantProps<typeof toastSimpleVariants>;\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { AlertSimple } from '../alertSimple/AlertSimple';\nimport type { AlertSimpleVariants } from '../alertSimple/AlertSimple.variants';\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>,\n AlertSimpleVariants {\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Bold heading line. */\n title?: ReactNode;\n /** Body text below the title. */\n description?: ReactNode;\n /** Right-side action slot (typically Button(s)). */\n actions?: ReactNode;\n /** When provided, renders a close button that calls this. */\n onClose?: () => void;\n /** Accessible label for the close button. Default `\"Dismiss\"`. */\n closeLabel?: string;\n}\n\n/**\n * Slotted Alert — Icon + Title + Description + Actions on top of `AlertSimple`.\n * Pair: `AlertSimple` (atom, free-form children) + `Alert` (this molecule).\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n { icon, title, description, actions, onClose, closeLabel = 'Dismiss', severity, className, ...props },\n ref,\n ) => (\n <AlertSimple\n ref={ref}\n severity={severity}\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && <span className=\"mt-0.5 shrink-0\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"font-medium\">{title}</div>}\n {description && <div className={cn('text-sm', title && 'mt-0.5 opacity-90')}>{description}</div>}\n {actions && <div className=\"mt-2 flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-current opacity-60 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n >\n <Icon icon={X} size={14} />\n </button>\n )}\n </AlertSimple>\n ),\n);\nAlert.displayName = 'Alert';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { BannerSimple } from '../bannerSimple/BannerSimple';\nimport type { BannerSimpleVariants } from '../bannerSimple/BannerSimple.variants';\n\nexport interface BannerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>,\n BannerSimpleVariants {\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n}\n\n/**\n * Slotted full-width banner. Pair with `BannerSimple` (atomic, free-form\n * children) when you don't need the structured slots.\n */\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(\n (\n { icon, title, description, actions, onClose, closeLabel = 'Dismiss', severity, className, ...props },\n ref,\n ) => (\n <BannerSimple\n ref={ref}\n severity={severity}\n className={cn('flex items-center gap-4', className)}\n {...props}\n >\n {icon && <span className=\"shrink-0\">{icon}</span>}\n <div className=\"flex min-w-0 flex-1 items-baseline gap-3\">\n {title && <span className=\"font-medium\">{title}</span>}\n {description && <span className=\"opacity-90\">{description}</span>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-2 grid h-7 w-7 shrink-0 place-items-center rounded text-current opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n >\n <Icon icon={X} size={16} />\n </button>\n )}\n </BannerSimple>\n ),\n);\nBanner.displayName = 'Banner';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { ToastSimple } from '../toastSimple/ToastSimple';\nimport type { ToastSimpleVariants } from '../toastSimple/ToastSimple.variants';\n\nexport interface ToastProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>,\n ToastSimpleVariants {\n icon?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n onClose?: () => void;\n closeLabel?: string;\n}\n\n/**\n * Slotted toast — visual only (no queue / portal / lifecycle, those land\n * with `Toaster` at L5). Pair: `ToastSimple` (atomic) + `Toast` (molecule).\n */\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(\n (\n { icon, title, description, actions, onClose, closeLabel = 'Dismiss', severity, className, ...props },\n ref,\n ) => (\n <ToastSimple\n ref={ref}\n severity={severity}\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n {icon && <span className=\"mt-0.5 shrink-0\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"font-medium\">{title}</div>}\n {description && (\n <div className={cn('text-sm', title && 'mt-0.5 text-muted-foreground')}>{description}</div>\n )}\n {actions && <div className=\"mt-2 flex flex-wrap items-center gap-2\">{actions}</div>}\n </div>\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-1 grid h-6 w-6 shrink-0 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <Icon icon={X} size={14} />\n </button>\n )}\n </ToastSimple>\n ),\n);\nToast.displayName = 'Toast';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n severity?: 'info' | 'success' | 'warning' | 'danger' | 'neutral';\n icon?: ReactNode;\n title?: ReactNode;\n children?: ReactNode;\n}\n\nconst SEVERITY: Record<NonNullable<CalloutProps['severity']>, string> = {\n info: 'border-l-info text-foreground',\n success: 'border-l-success text-foreground',\n warning: 'border-l-warning text-foreground',\n danger: 'border-l-destructive text-foreground',\n neutral: 'border-l-border text-foreground',\n};\n\n/**\n * Quieter cousin of `Alert` — colored left rule, no fill. Use for inline\n * doc-style notes, supplementary content (think MDX callouts).\n */\nexport const Callout = forwardRef<HTMLDivElement, CalloutProps>(\n ({ severity = 'info', icon, title, children, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-start gap-3 rounded-md border-l-4 bg-card px-4 py-3 text-sm',\n SEVERITY[severity],\n className,\n )}\n {...props}\n >\n {icon && <span className=\"mt-0.5 shrink-0\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"mb-0.5 font-medium\">{title}</div>}\n {children}\n </div>\n </div>\n ),\n);\nCallout.displayName = 'Callout';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Spinner, type SpinnerProps } from '../spinner/Spinner';\n\nexport interface InlineSpinnerProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** Label rendered next to the spinner. Default `\"Loading…\"`. */\n children?: ReactNode;\n size?: SpinnerProps['size'];\n tone?: SpinnerProps['tone'];\n}\n\n/**\n * Spinner + label inline. Drops cleanly into buttons, list rows, anywhere\n * a \"loading…\" affordance is needed mid-flow.\n */\nexport const InlineSpinner = forwardRef<HTMLSpanElement, InlineSpinnerProps>(\n ({ children = 'Loading…', size = 'sm', tone = 'default', className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-2 text-sm text-muted-foreground', className)}\n {...props}\n >\n <Spinner size={size} tone={tone} />\n {children}\n </span>\n ),\n);\nInlineSpinner.displayName = 'InlineSpinner';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Spinner } from '../spinner/Spinner';\n\nexport interface LoadingStateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {\n /** Heading copy. Default `\"Loading…\"`. */\n title?: ReactNode;\n /** Body text below the title. */\n description?: ReactNode;\n /** Size of the spinner. Default `lg`. */\n size?: 'sm' | 'md' | 'lg' | 'xl';\n}\n\n/**\n * Centered loading affordance for full sections / pages — Spinner + title +\n * description stacked. Use inline `InlineSpinner` for in-row loading.\n */\nexport const LoadingState = forwardRef<HTMLDivElement, LoadingStateProps>(\n ({ title = 'Loading…', description, size = 'lg', className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"status\"\n className={cn('flex flex-col items-center justify-center gap-3 py-12 text-center', className)}\n {...props}\n >\n <Spinner size={size} tone=\"brand\" />\n {title && <div className=\"text-sm font-medium text-foreground\">{title}</div>}\n {description && <div className=\"text-sm text-muted-foreground\">{description}</div>}\n </div>\n ),\n);\nLoadingState.displayName = 'LoadingState';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface ProgressStepsProps extends ComponentPropsWithoutRef<'ol'> {\n /** Step labels in order. */\n steps: string[];\n /** Index of the active step (0-based). Steps before are marked complete. */\n current: number;\n /** Layout direction. Default `horizontal`. */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Visual N-of-M progress dots / pills with connectors. No state machine —\n * the consumer drives `current`. For full wizard-with-content semantics use\n * the L5 `Stepper` organism.\n */\nexport const ProgressSteps = forwardRef<HTMLOListElement, ProgressStepsProps>(\n ({ steps, current, orientation = 'horizontal', className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row items-center gap-2' : 'flex-col gap-3',\n className,\n )}\n {...props}\n >\n {steps.map((label, i) => {\n const status = i < current ? 'complete' : i === current ? 'current' : 'upcoming';\n return (\n <li\n key={i}\n className={cn(\n 'flex items-center gap-2',\n orientation === 'horizontal' && i < steps.length - 1 && 'flex-1',\n )}\n >\n <span\n className={cn(\n 'grid h-7 w-7 place-items-center rounded-full text-xs font-medium',\n status === 'complete' && 'bg-primary text-primary-foreground',\n status === 'current' && 'border-2 border-primary text-primary',\n status === 'upcoming' && 'border border-border text-muted-foreground',\n )}\n aria-current={status === 'current' ? 'step' : undefined}\n >\n {status === 'complete' ? <Icon icon={Check} size={14} /> : i + 1}\n </span>\n <span\n className={cn(\n 'text-sm',\n status === 'upcoming' ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {label}\n </span>\n {orientation === 'horizontal' && i < steps.length - 1 && (\n <span\n className={cn(\n 'h-px flex-1',\n i < current ? 'bg-primary' : 'bg-border',\n )}\n aria-hidden=\"true\"\n />\n )}\n </li>\n );\n })}\n </ol>\n ),\n);\nProgressSteps.displayName = 'ProgressSteps';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface StatusIndicatorProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {\n tone?: 'success' | 'warning' | 'destructive' | 'info' | 'neutral';\n /** Bold first-line label (e.g. \"All systems normal\"). */\n label: ReactNode;\n /** Smaller secondary line (e.g. \"Updated 2m ago\"). */\n description?: ReactNode;\n /** Optional pulsing ring for \"live\" indication. */\n hasPulse?: boolean;\n}\n\nconst TONE: Record<NonNullable<StatusIndicatorProps['tone']>, string> = {\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-info',\n neutral: 'bg-muted-foreground',\n};\n\n/**\n * Two-line status indicator — colored dot + bold label + smaller helper.\n * Use on monitoring / status pages. For an inline single-line indicator use\n * `display/Status`.\n */\nexport const StatusIndicator = forwardRef<HTMLDivElement, StatusIndicatorProps>(\n ({ tone = 'success', label, description, hasPulse, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-start gap-3', className)}\n {...props}\n >\n <span className=\"relative mt-1 inline-flex\">\n <span className={cn('inline-block h-2.5 w-2.5 rounded-full', TONE[tone])} />\n {hasPulse && (\n <span\n className={cn(\n 'absolute inset-0 inline-block rounded-full opacity-75 animate-ping',\n TONE[tone],\n )}\n />\n )}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-foreground\">{label}</div>\n {description && <div className=\"text-xs text-muted-foreground\">{description}</div>}\n </div>\n </div>\n ),\n);\nStatusIndicator.displayName = 'StatusIndicator';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface MeterBarProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Current value 0–`max`. */\n value: number;\n max?: number;\n /** Threshold values that change the fill tone. Pass `[good, warn]` —\n * `value <= good` → success, `<= warn` → warning, otherwise destructive.\n * Defaults: `[max * 0.7, max * 0.9]`. */\n thresholds?: [number, number];\n size?: 'sm' | 'md' | 'lg';\n label?: string;\n}\n\nconst SIZE: Record<NonNullable<MeterBarProps['size']>, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n};\n\n/**\n * Like `ProgressBar` but the fill color reflects threshold zones — green /\n * amber / red. Use for usage gauges, capacity, score meters.\n */\nexport const MeterBar = forwardRef<HTMLDivElement, MeterBarProps>(\n ({ value, max = 100, thresholds, size = 'md', label, className, ...props }, ref) => {\n const [good, warn] = thresholds ?? [max * 0.7, max * 0.9];\n const tone =\n value <= good ? 'bg-success' : value <= warn ? 'bg-warning' : 'bg-destructive';\n const pct = Math.min(100, Math.max(0, (value / max) * 100));\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n className={cn('w-full overflow-hidden rounded-full bg-muted', SIZE[size], className)}\n {...props}\n >\n <div\n className={cn('h-full rounded-full transition-[width] duration-300', tone)}\n style={{ width: `${pct}%` }}\n />\n </div>\n );\n },\n);\nMeterBar.displayName = 'MeterBar';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { Minus, TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface TrendIndicatorProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** Numeric delta — sign drives direction. */\n value: number;\n /** Optional formatter (default: `${sign}${value}%`). */\n format?: (value: number) => ReactNode;\n /** When `true`, an increase reads as bad (e.g. error rate, churn). */\n isInverse?: boolean;\n /** Small trailing label, e.g. \"vs last week\". */\n label?: ReactNode;\n size?: 'xs' | 'sm' | 'md';\n}\n\nconst SIZE_TEXT: Record<NonNullable<TrendIndicatorProps['size']>, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n};\nconst SIZE_ICON: Record<NonNullable<TrendIndicatorProps['size']>, number> = {\n xs: 12,\n sm: 14,\n md: 16,\n};\n\n/**\n * Up / down / flat arrow + value + optional label. Used inside `Stat` and\n * dashboard tiles. Pass `isInverse` for metrics where higher is worse.\n */\nexport const TrendIndicator = forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n ({ value, format, isInverse, label, size = 'sm', className, ...props }, ref) => {\n const direction = value > 0 ? 'up' : value < 0 ? 'down' : 'flat';\n const positive =\n direction === 'flat' ? false : (direction === 'up') !== Boolean(isInverse);\n const tone =\n direction === 'flat' ? 'text-muted-foreground' : positive ? 'text-success' : 'text-destructive';\n const arrow = direction === 'up' ? TrendingUp : direction === 'down' ? TrendingDown : Minus;\n const display = format ? format(value) : `${value > 0 ? '+' : ''}${value}%`;\n return (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-1 font-medium', SIZE_TEXT[size], tone, className)}\n {...props}\n >\n <Icon icon={arrow} size={SIZE_ICON[size]} />\n {display}\n {label && <span className=\"text-muted-foreground\"> {label}</span>}\n </span>\n );\n },\n);\nTrendIndicator.displayName = 'TrendIndicator';\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { Announce, Portal, Presence } from '../../primitives';\nimport { Toast } from '../toast';\nimport type { ToastSimpleVariants } from '../toastSimple/ToastSimple.variants';\n\nexport type ToastSeverity = NonNullable<ToastSimpleVariants['severity']>;\n\nexport type ToasterPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nexport interface ToastOptions {\n title?: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n severity?: ToastSeverity;\n /** ms before auto-dismiss. Default: Toaster's `defaultDuration`. `Infinity` = sticky. */\n duration?: number;\n action?: ReactNode;\n}\n\ninterface ToastEntry extends ToastOptions {\n id: string;\n}\n\ntype Listener = (toasts: ToastEntry[]) => void;\n\nclass ToasterStore {\n private items: ToastEntry[] = [];\n private listeners = new Set<Listener>();\n private idSeq = 0;\n\n toast(opts: ToastOptions): string {\n const id = `t_${++this.idSeq}`;\n this.items = [...this.items, { id, ...opts }];\n this.emit();\n return id;\n }\n\n dismiss(id: string): void {\n this.items = this.items.filter((t) => t.id !== id);\n this.emit();\n }\n\n dismissAll(): void {\n this.items = [];\n this.emit();\n }\n\n subscribe(fn: Listener): () => void {\n this.listeners.add(fn);\n fn(this.items);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n private emit() {\n for (const fn of this.listeners) fn(this.items);\n }\n}\n\nexport const toaster = new ToasterStore();\n\nexport function useToaster() {\n return useMemo(\n () => ({\n toast: (opts: ToastOptions) => toaster.toast(opts),\n dismiss: (id: string) => toaster.dismiss(id),\n dismissAll: () => toaster.dismissAll(),\n }),\n [],\n );\n}\n\nconst POSITION_CLASSES: Record<ToasterPosition, string> = {\n 'top-right': 'top-4 right-4 items-end',\n 'top-left': 'top-4 left-4 items-start',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2 items-center',\n 'bottom-right': 'bottom-4 right-4 items-end',\n 'bottom-left': 'bottom-4 left-4 items-start',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2 items-center',\n};\n\n/**\n * Enter/exit animation per position, gated on `data-state` (set by `Presence`)\n * and `motion-safe:` so reduced-motion users get an instant swap. Corner\n * toasts slide along their horizontal edge; centered toasts slide along the\n * vertical axis they're anchored to. Exit anims are shorter (`--duration-fast`).\n */\nconst MOTION_CLASSES: Record<ToasterPosition, string> = {\n 'top-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'top-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'top-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-top) motion-safe:data-[state=closed]:animate-(--animate-slide-out-top) motion-reduce:animate-none',\n 'bottom-right':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-right) motion-safe:data-[state=closed]:animate-(--animate-slide-out-right) motion-reduce:animate-none',\n 'bottom-left':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-left) motion-safe:data-[state=closed]:animate-(--animate-slide-out-left) motion-reduce:animate-none',\n 'bottom-center':\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom) motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom) motion-reduce:animate-none',\n};\n\nexport interface ToasterProps {\n position?: ToasterPosition;\n max?: number;\n /** ms; per-toast `duration` overrides. Default 5000. `Infinity` to disable. */\n defaultDuration?: number;\n canPauseOnHover?: boolean;\n gap?: number;\n className?: string;\n}\n\ninterface VisibleToast extends ToastEntry {\n resolvedDuration: number;\n}\n\n/**\n * Per-toast animated wrapper. `forwardRef` + `{...props}` spread so the\n * `data-state` Presence sets lands on this node (and Presence can ref it to\n * await `animationend` before unmount). Carries the slide+fade motion classes.\n *\n * Runs an unmount-only cleanup that calls `onRemoved` — since `Presence` keeps\n * this child mounted until its exit animation ends, that cleanup is our\n * \"exit finished\" signal (the read-only `Presence` API exposes no callback).\n */\ninterface ToastItemProps extends HTMLAttributes<HTMLDivElement> {\n motionClass: string;\n onRemoved?: () => void;\n}\n\nconst ToastItem = forwardRef<HTMLDivElement, ToastItemProps>(\n ({ motionClass, onRemoved, className, children, ...props }, ref) => {\n const onRemovedRef = useRef(onRemoved);\n onRemovedRef.current = onRemoved;\n useEffect(() => () => onRemovedRef.current?.(), []);\n return (\n <div\n ref={ref}\n className={cn('pointer-events-auto w-80', motionClass, className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToastItem.displayName = 'ToastItem';\n\n/**\n * Viewport that subscribes to the global `toaster` store and renders toasts\n * via the L4 `Toast` molecule. Mount once, per app.\n */\nexport function Toaster({\n position = 'bottom-right',\n max = 5,\n defaultDuration = 5000,\n canPauseOnHover = true,\n gap = 8,\n className,\n}: ToasterProps) {\n const [items, setItems] = useState<ToastEntry[]>([]);\n const [paused, setPaused] = useState(false);\n const timersRef = useRef(new Map<string, number>());\n const remainingRef = useRef(new Map<string, number>());\n const startRef = useRef(new Map<string, number>());\n\n useEffect(() => {\n return toaster.subscribe(setItems);\n }, []);\n\n // Visible window (FIFO).\n const visible: VisibleToast[] = items.slice(0, max).map((t) => ({\n ...t,\n resolvedDuration: t.duration ?? defaultDuration,\n }));\n const visibleIds = useMemo(() => new Set(visible.map((v) => v.id)), [visible]);\n\n // Toasts that just left `visible` (dismissed, or pushed out of the FIFO\n // window) but must still play their exit animation. Kept mounted with\n // `data-state=\"closed\"` until `Presence` unmounts the child — `ToastItem`\n // then fires `onRemoved`, pruning the entry here.\n const [exiting, setExiting] = useState<VisibleToast[]>([]);\n const prevVisibleRef = useRef<VisibleToast[]>([]);\n\n useEffect(() => {\n const gone = prevVisibleRef.current.filter((p) => !visibleIds.has(p.id));\n prevVisibleRef.current = visible;\n setExiting((cur) => {\n const known = new Set(cur.map((e) => e.id));\n // Add newly-gone toasts; drop any that re-entered `visible`.\n const merged = [...cur, ...gone.filter((g) => !known.has(g.id))].filter(\n (e) => !visibleIds.has(e.id),\n );\n return merged.length === cur.length &&\n merged.every((e, i) => e.id === cur[i]?.id)\n ? cur\n : merged;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visibleIds]);\n\n const removeExiting = (id: string) =>\n setExiting((cur) => cur.filter((e) => e.id !== id));\n\n // Visible (present) first, then the ones animating out.\n const rendered: Array<VisibleToast & { present: boolean }> = [\n ...visible.map((v) => ({ ...v, present: true })),\n ...exiting.map((e) => ({ ...e, present: false })),\n ];\n\n const latestTitle =\n typeof visible[visible.length - 1]?.title === 'string'\n ? (visible[visible.length - 1]!.title as string)\n : visible[visible.length - 1]?.description && typeof visible[visible.length - 1]!.description === 'string'\n ? (visible[visible.length - 1]!.description as string)\n : '';\n\n // Schedule auto-dismiss timers.\n useEffect(() => {\n const ids = new Set(visible.map((v) => v.id));\n // Clear timers for items that are no longer visible.\n for (const [id, h] of timersRef.current) {\n if (!ids.has(id)) {\n window.clearTimeout(h);\n timersRef.current.delete(id);\n remainingRef.current.delete(id);\n startRef.current.delete(id);\n }\n }\n if (paused) return;\n for (const v of visible) {\n if (v.resolvedDuration === Infinity) continue;\n if (timersRef.current.has(v.id)) continue;\n const remaining = remainingRef.current.get(v.id) ?? v.resolvedDuration;\n const handle = window.setTimeout(() => {\n toaster.dismiss(v.id);\n }, remaining);\n timersRef.current.set(v.id, handle);\n startRef.current.set(v.id, Date.now());\n remainingRef.current.set(v.id, remaining);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, max, defaultDuration, paused]);\n\n // Cleanup on unmount.\n useEffect(() => {\n const timers = timersRef.current;\n return () => {\n for (const h of timers.values()) window.clearTimeout(h);\n timers.clear();\n };\n }, []);\n\n const handlePause = () => {\n if (!canPauseOnHover || paused) return;\n setPaused(true);\n for (const [id, h] of timersRef.current) {\n window.clearTimeout(h);\n const start = startRef.current.get(id) ?? Date.now();\n const prev = remainingRef.current.get(id) ?? 0;\n const elapsed = Date.now() - start;\n remainingRef.current.set(id, Math.max(0, prev - elapsed));\n }\n timersRef.current.clear();\n };\n\n const handleResume = () => {\n if (!canPauseOnHover || !paused) return;\n setPaused(false);\n };\n\n if (rendered.length === 0) {\n return (\n <Portal>\n <Announce politeness=\"polite\" />\n </Portal>\n );\n }\n\n return (\n <Portal>\n <div\n aria-label=\"Notifications\"\n onMouseEnter={handlePause}\n onMouseLeave={handleResume}\n onFocus={handlePause}\n onBlur={handleResume}\n style={{ gap }}\n className={cn(\n 'pointer-events-none fixed z-toast flex flex-col',\n POSITION_CLASSES[position],\n className,\n )}\n >\n {rendered.map((t) => (\n <Presence key={t.id} isPresent={t.present}>\n <ToastItem\n motionClass={MOTION_CLASSES[position]}\n onRemoved={t.present ? undefined : () => removeExiting(t.id)}\n >\n <Toast\n icon={t.icon}\n title={t.title}\n description={t.description}\n severity={t.severity}\n actions={t.action}\n onClose={() => toaster.dismiss(t.id)}\n />\n </ToastItem>\n </Presence>\n ))}\n </div>\n <Announce politeness=\"polite\">{latestTitle}</Announce>\n </Portal>\n );\n}\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Presence } from '../../primitives';\nimport { Backdrop } from '../../overlays/backdrop';\nimport { Spinner } from '../spinner';\nimport type { SpinnerVariants } from '../spinner/Spinner.variants';\n\nexport interface LoadingOverlayProps extends HTMLAttributes<HTMLDivElement> {\n isOpen?: boolean;\n label?: ReactNode;\n /** Position the scrim absolutely inside the parent (parent must be `position: relative`). */\n isInline?: boolean;\n hasBlur?: boolean;\n spinnerSize?: SpinnerVariants['size'];\n spinnerTone?: SpinnerVariants['tone'];\n}\n\n/**\n * Scrim + centered spinner — blocks interaction with a region during a long task.\n * `isInline` scopes the scrim to a `position: relative` parent; default covers the\n * viewport via `Backdrop`.\n */\nexport const LoadingOverlay = forwardRef<HTMLDivElement, LoadingOverlayProps>(\n function LoadingOverlay(\n {\n isOpen = true,\n label = 'Loading…',\n isInline = false,\n hasBlur,\n spinnerSize = 'lg',\n spinnerTone = 'brand',\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const content = (\n <>\n <Spinner size={spinnerSize} tone={spinnerTone} label={typeof label === 'string' ? label : 'Loading'} />\n {label && <div className=\"text-sm text-foreground\">{label}</div>}\n {children}\n </>\n );\n\n if (isInline) {\n // `Presence` defers unmount until the exit fade ends, cloning `data-state`\n // + `ref` onto the scrim below (forwardRef + `{...props}` spread required).\n return (\n <Presence isPresent={isOpen}>\n <LoadingScrim\n ref={ref}\n className={cn(\n 'absolute inset-0 z-banner bg-background/70',\n hasBlur && 'backdrop-blur-sm',\n className,\n )}\n {...rest}\n >\n {content}\n </LoadingScrim>\n </Presence>\n );\n }\n\n return (\n <>\n {/* Backdrop self-wraps in `Presence`; driving `open` with `isOpen` lets its\n fade-out play before it defers its own unmount. */}\n <Backdrop open={isOpen} isBlurred={hasBlur} className=\"bg-background/70\" />\n <Presence isPresent={isOpen}>\n <LoadingScrim\n ref={ref}\n className={cn(\n 'fixed inset-0 z-modal pointer-events-none',\n className,\n )}\n {...rest}\n >\n {content}\n </LoadingScrim>\n </Presence>\n </>\n );\n },\n);\nLoadingOverlay.displayName = 'LoadingOverlay';\n\n/**\n * `Presence`-clonable scrim: a single `forwardRef` element that spreads the\n * injected `data-state` (\"open\" | \"closed\") onto its node and runs the fade off\n * it. `forwardRef` + `{...props}` spread are required so the `ref` and\n * `data-state` actually land here (it's the node `Presence` watches for\n * `animationend`). `motion-safe`/`motion-reduce` honour reduced-motion.\n */\nconst LoadingScrim = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function LoadingScrim({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n role=\"status\"\n className={cn(\n 'flex flex-col items-center justify-center gap-3',\n 'motion-safe:data-[state=open]:animate-(--animate-fade-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-fade-out)',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nLoadingScrim.displayName = 'LoadingScrim';\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, surfaceVariants } from '../../utils';\nimport { Portal, Presence } from '../../primitives';\n\nexport type UndoBarPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nexport interface UndoBarProps {\n isOpen: boolean;\n onOpenChange?: (open: boolean) => void;\n message: ReactNode;\n onUndo?: () => void;\n undoLabel?: string;\n /** ms until auto-dismiss; `Infinity` = sticky. Default 5000. */\n duration?: number;\n canPauseOnHover?: boolean;\n position?: UndoBarPosition;\n hasCountdown?: boolean;\n className?: string;\n}\n\nconst POSITION: Record<UndoBarPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n};\n\n/**\n * Snackbar with a single \"Undo\" action. Auto-dismisses after `duration`;\n * pause-on-hover preserves remaining time. For multi-toast queues use the L5\n * `Toaster` instead.\n */\nexport function UndoBar({\n isOpen,\n onOpenChange,\n message,\n onUndo,\n undoLabel = 'Undo',\n duration = 5000,\n canPauseOnHover = true,\n position = 'bottom-center',\n hasCountdown = false,\n className,\n}: UndoBarProps) {\n const [progress, setProgress] = useState(1);\n const [paused, setPaused] = useState(false);\n const startRef = useRef<number>(0);\n const remainingRef = useRef<number>(duration);\n const rafRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!isOpen) {\n remainingRef.current = duration;\n setProgress(1);\n return;\n }\n if (duration === Infinity) {\n setProgress(1);\n return;\n }\n if (paused) return;\n\n startRef.current = performance.now();\n if (!hasCountdown) {\n // No visible countdown — a single timeout, no per-frame re-renders.\n const handle = window.setTimeout(() => {\n onOpenChange?.(false);\n }, remainingRef.current);\n return () => {\n window.clearTimeout(handle);\n const elapsed = performance.now() - startRef.current;\n remainingRef.current = Math.max(0, remainingRef.current - elapsed);\n };\n }\n const tick = (now: number) => {\n const elapsed = now - startRef.current;\n const remaining = Math.max(0, remainingRef.current - elapsed);\n setProgress(remaining / duration);\n if (remaining <= 0) {\n onOpenChange?.(false);\n return;\n }\n rafRef.current = requestAnimationFrame(tick);\n };\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n const elapsed = performance.now() - startRef.current;\n remainingRef.current = Math.max(0, remainingRef.current - elapsed);\n };\n }, [isOpen, duration, paused, hasCountdown, onOpenChange]);\n\n return (\n /* Static positioning wrapper holds the fixed corner + (for `*-center`) the\n centering `-translate-x-1/2`; the inner `UndoBarPanel` carries the slide\n keyframe, whose own `translateY` would otherwise clobber that centering\n translate if both sat on one node. `Portal` stays mounted; `Presence`\n owns the panel's mount so the exit (slide-out + fade) plays before\n unmount, cloning `ref` + `data-state` onto the panel for its motion. */\n <Portal>\n <div className={cn('fixed z-toast', POSITION[position])}>\n <Presence isPresent={isOpen}>\n <UndoBarPanel\n onMouseEnter={() => canPauseOnHover && setPaused(true)}\n onMouseLeave={() => canPauseOnHover && setPaused(false)}\n onFocus={() => canPauseOnHover && setPaused(true)}\n onBlur={() => canPauseOnHover && setPaused(false)}\n className={className}\n >\n <span className=\"flex-1\">{message}</span>\n {onUndo && (\n <button\n type=\"button\"\n onClick={() => {\n onUndo();\n onOpenChange?.(false);\n }}\n className=\"font-medium text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm px-1\"\n >\n {undoLabel}\n </button>\n )}\n {hasCountdown && duration !== Infinity && (\n <div className=\"absolute bottom-0 left-0 h-0.5 w-full bg-border\">\n <div\n className=\"h-full bg-primary transition-[width] duration-100 ease-linear\"\n style={{ width: `${progress * 100}%` }}\n />\n </div>\n )}\n </UndoBarPanel>\n </Presence>\n </div>\n </Portal>\n );\n}\n\n/**\n * `Presence`-clonable bar: a single `forwardRef` element that spreads the\n * injected `ref` + `data-state` (\"open\" | \"closed\") onto its node and runs the\n * enter/exit tokens off that state. forwardRef + `{...props}` are required so\n * the ref and `data-state` actually land here. Enter slides up from below +\n * fades in; exit slides down + fades out. Reduced motion gets neither.\n */\nconst UndoBarPanel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function UndoBarPanel({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n 'relative flex items-center gap-3 overflow-hidden text-sm',\n surfaceVariants({ variant: 'surface', radius: 'md', padding: 'sm', elevation: 3 }),\n 'px-4 py-2.5',\n /* slide-in-bottom/out-bottom carry their own fade; gated on data-state +\n motion-safe so reduced-motion users get no movement. */\n 'motion-safe:data-[state=open]:animate-(--animate-slide-in-bottom)',\n 'motion-safe:data-[state=closed]:animate-(--animate-slide-out-bottom)',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Check, ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\ninterface OnboardingContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nconst OnboardingContext = createContext<OnboardingContextValue | null>(null);\n\nexport interface OnboardingChecklistProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: ReactNode;\n defaultOpen?: boolean;\n canDismissOnComplete?: boolean;\n /** ms after 100% before unmounting. */\n dismissDelay?: number;\n onDismiss?: () => void;\n children: ReactNode;\n}\n\n/**\n * Onboarding task card. Children are `OnboardingChecklist.Task` elements;\n * progress is auto-derived from their `isDone` props.\n */\nexport const OnboardingChecklist = forwardRef<HTMLDivElement, OnboardingChecklistProps>(\n function OnboardingChecklist(\n {\n title = 'Get started',\n defaultOpen = true,\n canDismissOnComplete = false,\n dismissDelay = 2000,\n onDismiss,\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const [open, setOpen] = useState(defaultOpen);\n const [dismissed, setDismissed] = useState(false);\n\n const tasks = Children.toArray(children).filter(\n (c): c is React.ReactElement<OnboardingChecklistTaskProps> =>\n isValidElement(c) &&\n (c.type as { displayName?: string }).displayName === 'OnboardingChecklistTask',\n );\n const total = tasks.length;\n const done = tasks.filter((t) => t.props.isDone).length;\n const complete = total > 0 && done === total;\n\n useEffect(() => {\n if (!canDismissOnComplete || !complete || dismissed) return;\n const handle = window.setTimeout(() => {\n setDismissed(true);\n onDismiss?.();\n }, dismissDelay);\n return () => window.clearTimeout(handle);\n }, [complete, canDismissOnComplete, dismissDelay, dismissed, onDismiss]);\n\n const ctx = useMemo<OnboardingContextValue>(() => ({ open, setOpen }), [open]);\n\n if (dismissed) return null;\n\n return (\n <OnboardingContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn(\n 'overflow-hidden rounded-lg border border-border bg-card shadow-sm',\n className,\n )}\n {...rest}\n >\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n className=\"flex w-full items-center gap-3 px-4 py-3 text-left transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <div className=\"flex-1\">\n <div className=\"text-sm font-medium text-foreground\">{title}</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {done} of {total} tasks complete\n </div>\n <div className=\"mt-2 h-1.5 overflow-hidden rounded-full bg-border\">\n <div\n className={cn(\n 'h-full bg-primary transition-[width] duration-300',\n complete && 'bg-success',\n )}\n style={{ width: total ? `${(done / total) * 100}%` : '0%' }}\n />\n </div>\n </div>\n <Icon\n icon={ChevronDown}\n size={16}\n className={cn('text-muted-foreground transition-transform', open && 'rotate-180')}\n />\n </button>\n {open && (\n <ul role=\"list\" className=\"border-t border-border\">\n {children}\n </ul>\n )}\n </div>\n </OnboardingContext.Provider>\n );\n },\n);\n\nexport interface OnboardingChecklistTaskProps extends HTMLAttributes<HTMLLIElement> {\n label: ReactNode;\n description?: ReactNode;\n isDone?: boolean;\n action?: ReactNode;\n}\n\nexport const OnboardingChecklistTask = forwardRef<\n HTMLLIElement,\n OnboardingChecklistTaskProps\n>(function OnboardingChecklistTask(\n { label, description, isDone = false, action, className, ...rest },\n ref,\n) {\n return (\n <li\n ref={ref}\n data-done={isDone || undefined}\n className={cn(\n 'flex items-start gap-3 px-4 py-3 transition-colors',\n isDone && 'opacity-60',\n className,\n )}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 grid h-5 w-5 shrink-0 place-items-center rounded-full border',\n isDone ? 'border-success bg-success text-success-foreground' : 'border-border',\n )}\n >\n {isDone && <Icon icon={Check} size={12} />}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className={cn('text-sm font-medium text-foreground', isDone && 'line-through')}>\n {label}\n </div>\n {description && (\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{description}</div>\n )}\n </div>\n {action && !isDone && <div className=\"shrink-0\">{action}</div>}\n </li>\n );\n});\nOnboardingChecklistTask.displayName = 'OnboardingChecklistTask';\n\ntype OnboardingChecklistComponent = typeof OnboardingChecklist & {\n Task: typeof OnboardingChecklistTask;\n};\n\n(OnboardingChecklist as OnboardingChecklistComponent).Task = OnboardingChecklistTask;\n\nexport function useOnboardingChecklist() {\n const ctx = useContext(OnboardingContext);\n if (!ctx) throw new Error('useOnboardingChecklist must be used inside <OnboardingChecklist>');\n return ctx;\n}\n\nexport default OnboardingChecklist as OnboardingChecklistComponent;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled, useReducedMotion } from '../../hooks';\nimport { Announce, Portal, Presence } from '../../primitives';\n\nexport interface TourStep {\n target: string | RefObject<HTMLElement>;\n title?: ReactNode;\n body?: ReactNode;\n placement?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nexport interface TourProps {\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n steps: TourStep[];\n currentStep?: number;\n defaultCurrentStep?: number;\n onStepChange?: (i: number) => void;\n onComplete?: () => void;\n onSkip?: () => void;\n padding?: number;\n}\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nfunction rectFromTarget(target: TourStep['target']): Rect | null {\n let el: HTMLElement | null = null;\n if (typeof target === 'string') {\n el = document.querySelector(target);\n } else {\n el = target.current;\n }\n if (!el) return null;\n const r = el.getBoundingClientRect();\n return { top: r.top, left: r.left, width: r.width, height: r.height };\n}\n\nfunction placementCoords(rect: Rect, placement: NonNullable<TourStep['placement']>, gap = 12) {\n switch (placement) {\n case 'top':\n return { top: rect.top - gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, -100%)' };\n case 'right':\n return { top: rect.top + rect.height / 2, left: rect.left + rect.width + gap, transform: 'translate(0, -50%)' };\n case 'bottom':\n return { top: rect.top + rect.height + gap, left: rect.left + rect.width / 2, transform: 'translate(-50%, 0)' };\n case 'left':\n return { top: rect.top + rect.height / 2, left: rect.left - gap, transform: 'translate(-100%, -50%)' };\n }\n}\n\n/**\n * Multi-step product tour. Renders an SVG mask with a cutout around each\n * step's target + a floating tooltip with Next / Prev / Skip / Done.\n */\nexport function Tour({\n isOpen: openProp,\n defaultOpen = false,\n onOpenChange,\n steps,\n currentStep: currentStepProp,\n defaultCurrentStep = 0,\n onStepChange,\n onComplete,\n onSkip,\n padding = 8,\n}: TourProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [currentStep, setCurrentStep] = useControlled({\n controlled: currentStepProp,\n default: defaultCurrentStep,\n onChange: onStepChange,\n });\n\n const [rect, setRect] = useState<Rect | null>(null);\n const titleId = useId();\n const descId = useId();\n const maskId = useId();\n const reducedMotion = useReducedMotion();\n\n const step = steps[currentStep];\n\n /* Keep the Portal (scrim + tooltip) mounted while the pop-out plays — the\n component hard-unmounts on `!open`, which would kill the exit. Opening\n flips this true synchronously; closing defers the unmount until the\n tooltip's exit animation ends (`onAnimationEnd` below). Under reduced\n motion no animation fires, so drop it on the next frame instead. */\n const [mounted, setMounted] = useState(open);\n useEffect(() => {\n if (open) {\n setMounted(true);\n return;\n }\n if (!reducedMotion) return;\n const raf = requestAnimationFrame(() => setMounted(false));\n return () => cancelAnimationFrame(raf);\n }, [open, reducedMotion]);\n\n // Update rect when step changes / window scrolls / resizes.\n useEffect(() => {\n if (!open || !step) return;\n\n const update = () => {\n const r = rectFromTarget(step.target);\n setRect(r);\n };\n // Defer to next frame so the target can mount / scroll into view.\n const handle = requestAnimationFrame(update);\n\n window.addEventListener('resize', update, { passive: true });\n window.addEventListener('scroll', update, { passive: true, capture: true });\n return () => {\n cancelAnimationFrame(handle);\n window.removeEventListener('resize', update);\n window.removeEventListener('scroll', update, true);\n };\n }, [open, step]);\n\n // Escape handling.\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n onSkip?.();\n }\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, setOpen, onSkip]);\n\n const goNext = useCallback(() => {\n if (currentStep >= steps.length - 1) {\n setOpen(false);\n onComplete?.();\n } else {\n setCurrentStep(currentStep + 1);\n }\n }, [currentStep, steps.length, setOpen, setCurrentStep, onComplete]);\n\n const goPrev = useCallback(() => {\n if (currentStep > 0) setCurrentStep(currentStep - 1);\n }, [currentStep, setCurrentStep]);\n\n const skip = useCallback(() => {\n setOpen(false);\n onSkip?.();\n }, [setOpen, onSkip]);\n\n if (!mounted || !step) return null;\n\n const placement = step.placement ?? 'bottom';\n const tooltipCoords = rect ? placementCoords(rect, placement) : null;\n const cutoutPadding = padding;\n\n return (\n <Portal>\n {/* SVG mask backdrop with cutout around target. Skipped while the\n target is unresolvable so a bare scrim never blocks the page.\n Gated on `open` (not `mounted`) so the scrim clears immediately on\n close while the tooltip plays its pop-out before unmount. */}\n {open && rect && (\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-auto fixed inset-0 z-modal h-full w-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <mask id={maskId}>\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left - cutoutPadding}\n y={rect.top - cutoutPadding}\n width={rect.width + cutoutPadding * 2}\n height={rect.height + cutoutPadding * 2}\n rx={6}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.55)\"\n mask={`url(#${maskId})`}\n />\n </svg>\n )}\n\n {/* Tooltip — wrapped in `Presence` so its pop-out plays before the\n component unmounts. `Presence` clones `data-state` (\"open\" | \"closed\")\n + a `ref` onto the panel, so the pop tokens run gated on that state;\n the exit's `onAnimationEnd` drops `mounted`. */}\n {tooltipCoords && (\n <Presence isPresent={open}>\n <TourTooltip\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n style={{\n position: 'fixed',\n top: tooltipCoords.top,\n left: tooltipCoords.left,\n transform: tooltipCoords.transform,\n }}\n onAnimationEnd={() => {\n /* Drop the Portal once the exit animation completes. */\n if (!open) setMounted(false);\n }}\n >\n {step.title && (\n <div id={titleId} className=\"text-sm font-semibold\">\n {step.title}\n </div>\n )}\n {step.body && (\n <div id={descId} className={cn('text-sm text-muted-foreground', step.title && 'mt-1.5')}>\n {step.body}\n </div>\n )}\n <div className=\"mt-3 flex items-center justify-between gap-3\">\n <span className=\"text-xs text-muted-foreground\">\n {currentStep + 1} / {steps.length}\n </span>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={skip}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Skip\n </button>\n {currentStep > 0 && (\n <button\n type=\"button\"\n onClick={goPrev}\n className=\"inline-flex h-7 items-center rounded-md border border-border bg-background px-2.5 text-xs font-medium hover:bg-muted\"\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={goNext}\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {currentStep >= steps.length - 1 ? 'Done' : 'Next'}\n </button>\n </div>\n </div>\n </TourTooltip>\n </Presence>\n )}\n\n <Announce politeness=\"polite\">\n {step.title\n ? `Step ${currentStep + 1} of ${steps.length}: ${typeof step.title === 'string' ? step.title : ''}`\n : ''}\n </Announce>\n </Portal>\n );\n}\n\n/**\n * `Presence`-clonable tooltip panel: a single `forwardRef` element that\n * spreads `data-state` (\"open\" | \"closed\", injected by `Presence`) + the\n * `ref` onto its node, so the pop (fade + slight scale) runs gated on that\n * state. forwardRef + `{...props}` spread are required so the ref and\n * `data-state` actually land here. `motion-safe` so reduced-motion users get\n * no movement.\n */\nconst TourTooltip = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement> & { style?: CSSProperties }\n>(function TourTooltip({ className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\n 'z-popover w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n 'motion-safe:data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-pop-out)',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n});\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface TypingIndicatorProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** Optional name(s) of who is typing — rendered as a leading label. */\n who?: ReactNode;\n /** Visual size of the bouncing dots. */\n size?: 'sm' | 'md' | 'lg';\n /** Color of the dots; defaults to muted. */\n tone?: 'muted' | 'primary' | 'foreground';\n /** Tone-down dot opacity at rest (between bounces). */\n isSubtle?: boolean;\n}\n\nconst SIZE: Record<NonNullable<TypingIndicatorProps['size']>, string> = {\n sm: 'h-1 w-1',\n md: 'h-1.5 w-1.5',\n lg: 'h-2 w-2',\n};\n\nconst TONE: Record<NonNullable<TypingIndicatorProps['tone']>, string> = {\n muted: 'bg-muted-foreground',\n primary: 'bg-primary',\n foreground: 'bg-foreground',\n};\n\n/**\n * Three-dot \"someone is typing\" indicator. Honors `prefers-reduced-motion`\n * via Tailwind's `motion-safe:` / `motion-reduce:` modifiers — dots stay\n * visible at full opacity when motion is reduced.\n */\nexport const TypingIndicator = forwardRef<HTMLSpanElement, TypingIndicatorProps>(\n ({ who, size = 'md', tone = 'muted', isSubtle, className, ...props }, ref) => {\n const dot = cn(\n 'inline-block rounded-full motion-safe:animate-bounce',\n SIZE[size],\n TONE[tone],\n isSubtle && 'motion-safe:opacity-60',\n );\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={typeof who === 'string' ? `${who} is typing` : 'Typing'}\n className={cn(\n 'inline-flex items-center gap-2 text-xs text-muted-foreground',\n className,\n )}\n {...props}\n >\n {who && <span className=\"truncate\">{who}</span>}\n <span className=\"inline-flex items-end gap-1\" aria-hidden=\"true\">\n <span className={dot} style={{ animationDelay: '0ms' }} />\n <span className={dot} style={{ animationDelay: '150ms' }} />\n <span className={dot} style={{ animationDelay: '300ms' }} />\n </span>\n </span>\n );\n },\n);\nTypingIndicator.displayName = 'TypingIndicator';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type PresenceStatus = 'online' | 'idle' | 'busy' | 'offline' | 'invisible';\n\nexport interface PresenceIndicatorProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n status?: PresenceStatus;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /** Pulsing ring (only meaningful for `online`). */\n hasPulse?: boolean;\n /** Position absolutely on a parent (use inside an Avatar wrapper). */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n /** Override the accessible label. Defaults to status name. */\n label?: string;\n}\n\nconst STATUS_BG: Record<PresenceStatus, string> = {\n online: 'bg-success',\n idle: 'bg-warning',\n busy: 'bg-destructive',\n offline: 'bg-muted-foreground',\n invisible: 'bg-transparent border border-muted-foreground',\n};\n\nconst SIZE: Record<NonNullable<PresenceIndicatorProps['size']>, string> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n};\n\nconst POS: Record<NonNullable<PresenceIndicatorProps['position']>, string> = {\n 'top-right': 'absolute top-0 right-0',\n 'top-left': 'absolute top-0 left-0',\n 'bottom-right': 'absolute bottom-0 right-0',\n 'bottom-left': 'absolute bottom-0 left-0',\n};\n\nconst STATUS_LABEL: Record<PresenceStatus, string> = {\n online: 'Online',\n idle: 'Idle',\n busy: 'Busy',\n offline: 'Offline',\n invisible: 'Invisible',\n};\n\n/**\n * Colored dot encoding a person's presence (online / idle / busy / offline /\n * invisible). Includes a `ring-background` so it pops cleanly when overlaid\n * on an `Avatar`. Pass `position` to absolutely place on a positioned parent.\n */\nexport const PresenceIndicator = forwardRef<HTMLSpanElement, PresenceIndicatorProps>(\n ({ status = 'online', size = 'sm', hasPulse, position, label, className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"status\"\n aria-label={label ?? STATUS_LABEL[status]}\n data-status={status}\n className={cn(\n 'inline-flex rounded-full ring-2 ring-background',\n STATUS_BG[status],\n SIZE[size],\n position && POS[position],\n 'relative',\n className,\n )}\n {...props}\n >\n {hasPulse && status === 'online' && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'absolute inset-0 rounded-full opacity-75 motion-safe:animate-ping',\n STATUS_BG.online,\n )}\n />\n )}\n </span>\n ),\n);\nPresenceIndicator.displayName = 'PresenceIndicator';\n","import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useReducedMotion } from '../../hooks';\n\nexport interface LiveCursorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n /** Pixel offset from the parent's top-left corner. */\n x: number;\n y: number;\n /** Display name to show beside the pointer. */\n name?: ReactNode;\n /** CSS color used for the pointer fill and label background. */\n color?: string;\n /** Smooth movement between updates. Defaults to true; auto-disables with reduced motion. */\n isSmooth?: boolean;\n /** Pixels offset for the label relative to the pointer. */\n labelOffset?: { x?: number; y?: number };\n /** Hide the label and show only the pointer. */\n isPointerOnly?: boolean;\n}\n\n/**\n * Remote-user cursor for collaborative canvases. Wrap in a `relative` parent;\n * places itself absolutely at `(x, y)`, smoothing movement unless reduced-motion.\n */\nexport const LiveCursor = forwardRef<HTMLDivElement, LiveCursorProps>(\n (\n {\n x,\n y,\n name,\n color = 'var(--color-primary)',\n isSmooth = true,\n labelOffset,\n isPointerOnly,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const reducedMotion = useReducedMotion();\n const useTransition = isSmooth && !reducedMotion;\n const lx = labelOffset?.x ?? 12;\n const ly = labelOffset?.y ?? 16;\n\n const wrapperStyle: CSSProperties = {\n transform: `translate3d(${x}px, ${y}px, 0)`,\n transition: useTransition ? 'transform 80ms linear' : undefined,\n ...style,\n };\n\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute left-0 top-0 z-tooltip select-none',\n className,\n )}\n style={wrapperStyle}\n {...props}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"drop-shadow-sm\"\n >\n <path\n d=\"M5 3 L5 19 L9.5 14.5 L12.5 21 L15.5 19.5 L12.5 13 L19 13 Z\"\n fill={color}\n stroke=\"white\"\n strokeWidth=\"1.25\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {name && !isPointerOnly && (\n <span\n className=\"absolute whitespace-nowrap rounded-md px-1.5 py-0.5 text-[11px] font-medium leading-none text-white shadow-sm\"\n style={{ backgroundColor: color, transform: `translate(${lx}px, ${ly}px)` }}\n >\n {name}\n </span>\n )}\n </div>\n );\n },\n);\nLiveCursor.displayName = 'LiveCursor';\n","import {\n Children,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Bell, X } from 'lucide-react';\nimport { cn, surfaceVariants } from '../../utils';\n\nexport interface NotificationCenterProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Header title. Default `\"Notifications\"`. */\n title?: ReactNode;\n /** Badge / count rendered next to the title. */\n count?: ReactNode;\n /** Action slot in the header (e.g. \"Mark all as read\"). */\n headerActions?: ReactNode;\n /** Empty-state node, rendered when no children are provided. */\n emptyState?: ReactNode;\n /** Footer slot (e.g. \"View all\"). */\n footer?: ReactNode;\n children?: ReactNode;\n}\n\nexport interface NotificationItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Leading icon / avatar. */\n icon?: ReactNode;\n /** Primary title. */\n title: ReactNode;\n /** Body / description. */\n description?: ReactNode;\n /** Timestamp / relative time label. */\n timestamp?: ReactNode;\n /** Marks this row as unread (bold + leading dot). */\n isUnread?: boolean;\n /** Trailing actions slot. */\n actions?: ReactNode;\n /** Fires when the row is clicked / activated. */\n onSelect?: () => void;\n /** Renders a dismiss button on hover. */\n onDismiss?: () => void;\n}\n\nexport const NotificationItem = forwardRef<HTMLDivElement, NotificationItemProps>(\n (\n {\n icon,\n title,\n description,\n timestamp,\n isUnread,\n actions,\n onSelect,\n onDismiss,\n className,\n ...props\n },\n ref,\n ) => {\n const interactive = !!onSelect;\n return (\n <div\n ref={ref}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n data-unread={isUnread ? '' : undefined}\n onClick={onSelect}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.target !== e.currentTarget) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect?.();\n }\n }\n : undefined\n }\n className={cn(\n 'group/notif relative flex gap-3 rounded-md px-3 py-2.5 text-sm',\n interactive &&\n 'cursor-pointer hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isUnread && 'bg-primary-soft/30',\n className,\n )}\n {...props}\n >\n {isUnread && (\n <span\n aria-hidden=\"true\"\n className=\"absolute left-1 top-3 inline-block h-2 w-2 rounded-full bg-primary\"\n />\n )}\n {icon && <div className=\"shrink-0 self-start pl-3\">{icon}</div>}\n <div className={cn('min-w-0 flex-1', !icon && 'pl-3')}>\n <div className=\"flex items-baseline gap-2\">\n <span\n className={cn(\n 'truncate text-foreground',\n isUnread ? 'font-semibold' : 'font-medium',\n )}\n >\n {title}\n </span>\n {timestamp && (\n <span className=\"ml-auto whitespace-nowrap text-xs text-muted-foreground\">\n {timestamp}\n </span>\n )}\n </div>\n {description && (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">\n {description}\n </div>\n )}\n {actions && <div className=\"mt-1.5 flex items-center gap-2\">{actions}</div>}\n </div>\n {onDismiss && (\n <button\n type=\"button\"\n aria-label=\"Dismiss notification\"\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n className={cn(\n 'absolute right-2 top-2 inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground opacity-0',\n 'group-hover/notif:opacity-100 group-focus-within/notif:opacity-100',\n 'hover:bg-background hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\nNotificationItem.displayName = 'NotificationCenter.Item';\n\nconst NotificationCenterInner = forwardRef<HTMLDivElement, NotificationCenterProps>(\n (\n {\n title = 'Notifications',\n count,\n headerActions,\n emptyState,\n footer,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const items = Children.toArray(children).filter(isValidElement);\n const isEmpty = items.length === 0;\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label=\"Notifications\"\n className={cn(\n 'flex w-80 flex-col',\n surfaceVariants({ variant: 'surface', radius: 'md' }),\n className,\n )}\n {...props}\n >\n <header className=\"flex items-center justify-between gap-2 border-b border-border px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold\">{title}</span>\n {count != null && (\n <span className=\"inline-flex items-center justify-center rounded-full bg-primary px-1.5 text-[10px] font-semibold leading-5 text-primary-foreground\">\n {count}\n </span>\n )}\n </div>\n {headerActions}\n </header>\n <div className=\"max-h-96 overflow-y-auto py-1\">\n {isEmpty ? (\n (emptyState ?? (\n <div className=\"flex flex-col items-center gap-2 px-4 py-10 text-center text-muted-foreground\">\n <Bell className=\"h-6 w-6\" />\n <p className=\"text-sm\">You're all caught up.</p>\n </div>\n ))\n ) : (\n <div className=\"flex flex-col\">{children}</div>\n )}\n </div>\n {footer && (\n <div className=\"border-t border-border px-3 py-2 text-center text-xs\">\n {footer}\n </div>\n )}\n </div>\n );\n },\n);\nNotificationCenterInner.displayName = 'NotificationCenter';\n\ntype NotificationCenterComponent = typeof NotificationCenterInner & {\n Item: typeof NotificationItem;\n};\n\nexport const NotificationCenter = NotificationCenterInner as NotificationCenterComponent;\nNotificationCenter.Item = NotificationItem;\n\nexport default NotificationCenter;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/overlays/OverlayChrome.tsx"],"names":["OverlayCloseButton"],"mappings":"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","file":"chunk-NOOKDXIZ.js","sourcesContent":["// Shared header / title / description / body / footer / close subcomponents\n// for Dialog and Drawer. Co-located in `overlays/` as a domain-internal helper.\n//\n// Each consuming overlay (Dialog, Drawer) wraps its content with\n// `OverlayChromeProvider`, supplying the `titleId`, `descriptionId`, and a\n// `close()` action. The shared subcomponents read from this context.\n//\n// Naming convention: `Overlay*` for shared chrome pieces; consumers re-export\n// them under their own name (e.g. `Dialog.Header = OverlayHeader`).\n\nimport {\n createContext,\n forwardRef,\n useContext,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../utils';\nimport { Slot } from '../primitives';\n\nexport interface OverlayChromeContextValue {\n titleId: string;\n descriptionId: string;\n /** Closes the overlay and returns focus to the trigger. */\n close: () => void;\n}\n\nconst OverlayChromeContext = createContext<OverlayChromeContextValue | null>(null);\n\nexport const OverlayChromeProvider = OverlayChromeContext.Provider;\n\nfunction useOverlayChromeContext() {\n const ctx = useContext(OverlayChromeContext);\n if (!ctx)\n throw new Error(\n 'Overlay chrome subcomponents must be used inside an OverlayChromeProvider (Dialog / Drawer)',\n );\n return ctx;\n}\n\nexport interface OverlayHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayHeader({ className, children, ...rest }: OverlayHeaderProps) {\n return (\n <div className={cn('mb-4 flex flex-col gap-1.5', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface OverlayTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n}\n\nexport function OverlayTitle({ className, children, ...rest }: OverlayTitleProps) {\n const ctx = useOverlayChromeContext();\n return (\n <h2\n id={ctx.titleId}\n className={cn('text-lg font-semibold leading-none text-foreground', className)}\n {...rest}\n >\n {children}\n </h2>\n );\n}\n\nexport interface OverlayDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function OverlayDescription({\n className,\n children,\n ...rest\n}: OverlayDescriptionProps) {\n const ctx = useOverlayChromeContext();\n return (\n <p\n id={ctx.descriptionId}\n className={cn('text-sm text-muted-foreground', className)}\n {...rest}\n >\n {children}\n </p>\n );\n}\n\nexport interface OverlayBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayBody({ className, children, ...rest }: OverlayBodyProps) {\n return (\n <div className={cn('text-sm text-foreground', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface OverlayFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayFooter({ className, children, ...rest }: OverlayFooterProps) {\n return (\n <div\n className={cn(\n 'mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface OverlayCloseButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children?: ReactNode;\n}\n\nexport const OverlayCloseButton = forwardRef<HTMLButtonElement, OverlayCloseButtonProps>(\n function OverlayCloseButton(\n { asChild, onClick, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useOverlayChromeContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={forwardedRef as never}\n type=\"button\"\n aria-label={children ? undefined : 'Close'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.close();\n }}\n className={\n asChild\n ? className\n : cn(\n 'absolute right-4 top-4 grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )\n }\n {...rest}\n >\n {children ?? <X className=\"h-4 w-4\" />}\n </Component>\n );\n },\n);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/index.ts","../src/hooks/useControlled.ts","../src/hooks/useDisclosure.ts","../src/hooks/useEventListener.ts","../src/hooks/useOutsideClick.ts","../src/hooks/useEscape.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useResizeObserver.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useClipboard.ts","../src/hooks/useDebounceHandler.ts","../src/hooks/useTypeahead.ts"],"names":["useState","useCallback","useRef","useLayoutEffect","useEffect"],"mappings":"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","file":"chunk-V267IMBH.js","sourcesContent":["export { useId } from './useId';\nexport { useControlled } from './useControlled';\nexport { useDisclosure, type DisclosureControls } from './useDisclosure';\nexport { useEventListener } from './useEventListener';\nexport { useOutsideClick } from './useOutsideClick';\nexport { useEscape } from './useEscape';\nexport { useFocusTrap } from './useFocusTrap';\nexport { useScrollLock } from './useScrollLock';\nexport { useResizeObserver } from './useResizeObserver';\nexport { useMediaQuery } from './useMediaQuery';\nexport { useReducedMotion } from './useReducedMotion';\nexport { useClipboard, type UseClipboardOptions, type ClipboardControls } from './useClipboard';\nexport { useDebounceHandler } from './useDebounceHandler';\nexport {\n useTypeahead,\n type UseTypeaheadOptions,\n type UseTypeaheadReturn,\n} from './useTypeahead';\n","import { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\ninterface UseControlledOptions<T> {\n controlled: T | undefined;\n default: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled pattern.\n *\n * - If `controlled` is defined, the component is controlled — internal state is\n * ignored, `setValue` only fires `onChange`.\n * - Otherwise the component owns its state, `setValue` updates it, and `onChange`\n * still fires for consumers that want to observe changes.\n */\nexport function useControlled<T>({\n controlled,\n default: defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (value: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n useLayoutEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const isControlled = controlled !== undefined;\n const value = isControlled ? controlled : uncontrolled;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useState } from 'react';\n\nexport interface DisclosureControls {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setOpen: (next: boolean) => void;\n}\n\n/**\n * Minimal open/close state with stable callbacks. The standard backbone for\n * Modal, Drawer, Popover, Menu, Accordion, etc. Use `useControlled` underneath\n * when the consumer may also pass a controlled `open` prop.\n */\nexport function useDisclosure(initial = false): DisclosureControls {\n const [isOpen, setIsOpen] = useState(initial);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n return { isOpen, open, close, toggle, setOpen: setIsOpen };\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\ntype Target = Window | Document | HTMLElement | null;\n\n/**\n * Add an event listener and clean it up automatically. Handler is read from\n * a ref so consumers don't need to memoize it.\n */\nexport function useEventListener<K extends string>(\n event: K,\n handler: (event: Event) => void,\n target: Target = document,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n const optionsRef = useRef(options);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n optionsRef.current = options;\n }, [handler, options]);\n\n useEffect(() => {\n if (!target) return;\n // Capture options at attach time — remove must use the same capture flag.\n const listenerOptions = optionsRef.current;\n const listener = (e: Event) => handlerRef.current(e);\n target.addEventListener(event, listener, listenerOptions);\n return () => target.removeEventListener(event, listener, listenerOptions);\n }, [event, target]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Fire `handler` when the user clicks outside any of the provided refs.\n * Uses `pointerdown` so it fires before focus shifts (avoids losing focus\n * inside an overlay before a click on a trigger registers).\n */\nexport function useOutsideClick(\n refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n handler: (event: PointerEvent) => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler);\n const refsRef = useRef(refs);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n refsRef.current = refs;\n }, [handler, refs]);\n\n useEffect(() => {\n if (!enabled) return;\n\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n const refList = Array.isArray(refsRef.current) ? refsRef.current : [refsRef.current];\n for (const ref of refList) {\n if (ref.current && ref.current.contains(target)) return;\n }\n handlerRef.current(e);\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\n/**\n * Fire `handler` when the Escape key is pressed at the document level.\n * For nested overlays, the topmost should call `event.stopPropagation()` in\n * its handler — `DismissableLayer` handles this stack-style.\n */\nexport function useEscape(handler: (event: KeyboardEvent) => void, enabled = true): void {\n const handlerRef = useRef(handler);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handlerRef.current(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [enabled]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nfunction isVisible(el: HTMLElement): boolean {\n // checkVisibility covers display/visibility/content-visibility; the\n // getClientRects fallback (older engines) still includes position:fixed\n // elements, which `offsetParent !== null` would wrongly exclude.\n return el.checkVisibility?.() ?? el.getClientRects().length > 0;\n}\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.getAttribute('aria-hidden') !== 'true' && isVisible(el),\n );\n}\n\n/**\n * Trap Tab / Shift+Tab focus inside the referenced element. On mount, focuses\n * the first focusable child (unless already focused inside). On unmount,\n * returns focus to the element that had it before mounting.\n *\n * For richer behavior (sentinels, nested traps), wrap `FocusScope` instead —\n * this hook is the lower primitive.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, enabled = true): void {\n useEffect(() => {\n if (!enabled || !ref.current) return;\n const container = ref.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n const previousTabIndex = container.getAttribute('tabindex');\n let tabIndexMutated = false;\n\n const focusables = getFocusable(container);\n if (focusables.length > 0 && !container.contains(document.activeElement)) {\n focusables[0]?.focus();\n } else if (focusables.length === 0) {\n container.tabIndex = -1;\n tabIndexMutated = true;\n container.focus();\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const items = getFocusable(container);\n if (items.length === 0) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n if (!first || !last) return;\n const active = document.activeElement;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (tabIndexMutated) {\n if (previousTabIndex === null) container.removeAttribute('tabindex');\n else container.setAttribute('tabindex', previousTabIndex);\n }\n previouslyFocused?.focus?.();\n };\n }, [ref, enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Run `callback` whenever the referenced element's size changes. Returns\n * synchronously after layout, before paint. Cleans up automatically.\n */\nexport function useResizeObserver<T extends HTMLElement>(\n ref: RefObject<T | null>,\n callback: (entry: ResizeObserverEntry) => void,\n enabled = true,\n): void {\n const callbackRef = useRef(callback);\n useLayoutEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!enabled || !ref.current || typeof ResizeObserver === 'undefined') return;\n const element = ref.current;\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) callbackRef.current(entry);\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, enabled]);\n}\n","import { useCallback, useSyncExternalStore } from 'react';\n\n/**\n * Reactively follow a CSS media query. Pass a query string like\n * `'(min-width: 768px)'` or `'(prefers-reduced-motion: reduce)'`.\n * SSR-safe — renders `false` on the server, syncs to the real value on the client.\n */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const mql = window.matchMedia(query);\n mql.addEventListener('change', onStoreChange);\n return () => mql.removeEventListener('change', onStoreChange);\n },\n [query],\n );\n\n return useSyncExternalStore(\n subscribe,\n () => window.matchMedia(query).matches,\n () => false,\n );\n}\n","import { useMediaQuery } from './useMediaQuery';\n\n/**\n * Returns `true` when the user has requested reduced motion via OS settings.\n * Components should short-circuit looping/transitional animations to a\n * static final state when this is `true`.\n */\nexport function useReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardOptions {\n /** Reset `copied` back to false after this many ms. Default 2000. Set 0 to keep state until explicitly reset. */\n resetAfter?: number;\n}\n\nexport interface ClipboardControls {\n /** True for `resetAfter` ms after a successful copy. */\n copied: boolean;\n /** Last error from `navigator.clipboard.writeText`, if any. */\n error: Error | null;\n /** Write `text` to the system clipboard. Returns the promise. */\n copy: (text: string) => Promise<void>;\n /** Force-clear the `copied` flag. */\n reset: () => void;\n}\n\n/**\n * Wraps `navigator.clipboard.writeText` with a transient `copied` flag for\n * post-action UI (icon swap, \"Copied!\" tooltip). Pass `resetAfter: 0` to\n * keep `copied` true until you call `reset()`.\n */\nexport function useClipboard({ resetAfter = 2000 }: UseClipboardOptions = {}): ClipboardControls {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reset = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setCopied(false);\n setError(null);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setError(null);\n setCopied(true);\n if (resetAfter > 0) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), resetAfter);\n }\n } catch (err) {\n setCopied(false);\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetAfter],\n );\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { copied, error, copy, reset };\n}\n","import { useCallback, useRef } from 'react';\nimport type { SyntheticEvent } from 'react';\n\n/**\n * Throttle a React event handler. First call in a `ms` window fires; subsequent\n * within the window are swallowed via `event.preventDefault()`. When `ms` is\n * `undefined`, the handler passes through unchanged. Use to prevent rapid-fire\n * gestures (double-clicks, double-submits, repeated touches) without wiring\n * timer state in the consumer.\n *\n * Functionally a *throttle* (first wins). The `Debounce` naming is kept for\n * vocabulary consistency with the `debounceMs` props on consuming components.\n */\nexport function useDebounceHandler<E extends SyntheticEvent>(\n handler: ((event: E) => void) | undefined,\n ms: number | undefined,\n): (event: E) => void {\n const lastTimeRef = useRef(0);\n return useCallback(\n (event: E) => {\n if (ms !== undefined) {\n const now = Date.now();\n if (now - lastTimeRef.current < ms) {\n event.preventDefault();\n return;\n }\n lastTimeRef.current = now;\n }\n handler?.(event);\n },\n [handler, ms],\n );\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent } from 'react';\n\n/** Resolves the typeahead item pool — a static array or a getter read lazily on each keystroke. */\ntype ItemSource<T> = readonly T[] | (() => readonly T[]);\n\n/** Configures {@link useTypeahead}. `T` is the item type the caller stores per option. */\nexport interface UseTypeaheadOptions<T> {\n /** Supplies the items to match against; a function is re-read on every keystroke (live lists). */\n items: ItemSource<T>;\n /** Extracts the comparable label from an item. Matching is case-insensitive on this string. */\n getLabel: (item: T) => string;\n /** Reports whether an item is disabled; disabled items are skipped during matching. */\n isDisabled?: (item: T) => boolean;\n /** Fires with the matched item and its index in the (live) item array when a keystroke resolves. */\n onMatch: (item: T, index: number) => void;\n /** Returns the index of the currently-active item — same-letter cycling starts after it. */\n getActiveIndex?: () => number;\n /** Disables the matcher when `false`; every key falls through unhandled. Defaults to `true`. */\n enabled?: boolean;\n /** Idle time (ms) after which the typed buffer resets. Defaults to `500`. */\n timeout?: number;\n}\n\n/** The keyboard handler + manual reset returned by {@link useTypeahead}. */\nexport interface UseTypeaheadReturn {\n /** Feeds a keydown into the matcher. Returns `true` when consumed (caller should stop), else `false`. */\n onKeyDown: (event: KeyboardEvent) => boolean;\n /** Clears the typed buffer immediately (e.g. on blur / close). */\n reset: () => void;\n}\n\n/** Reports whether a key event carries a single printable character (and no command modifier). */\nfunction isPrintableKey(event: KeyboardEvent): boolean {\n if (event.ctrlKey || event.metaKey || event.altKey) return false;\n // Printable keys surface as a single char in `key`; named keys (Enter, ArrowDown…) are multi-char.\n return event.key.length === 1;\n}\n\n/** Reports whether every char in the buffer is the same letter — the \"cycle\" case (e.g. \"aaa\"). */\nfunction isAllSameChar(buffer: string): boolean {\n return buffer.length > 0 && [...buffer].every((c) => c === buffer[0]);\n}\n\n/**\n * APG-correct type-to-select matcher (WAI-ARIA listbox/combobox typeahead). Accumulates printable\n * chars into a buffer (resets after `timeout` ms idle): a repeated single char cycles to the next\n * label starting with it (after `getActiveIndex()`, wrap-around), else prefix-matches the whole\n * buffer case-insensitively; disabled items skipped. On a hit `onMatch(item, index)` fires; consumed\n * keys return `true`, others `false` to fall through. Space is typeable only while buffering (a\n * leading Space reaches the caller). SSR-safe; reset timer cleared on unmount.\n */\nexport function useTypeahead<T>(options: UseTypeaheadOptions<T>): UseTypeaheadReturn {\n const { enabled = true } = options;\n\n /* Consumer fns/values read through a ref so `onKeyDown` stays referentially stable\n (callers wire it into their own memoised keydown handlers). */\n const optsRef = useRef(options);\n optsRef.current = options;\n\n const bufferRef = useRef('');\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const reset = useCallback(() => {\n bufferRef.current = '';\n clearTimer();\n }, [clearTimer]);\n\n /* Clears the pending reset timer on unmount (no stale fire after teardown). */\n useEffect(() => clearTimer, [clearTimer]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): boolean => {\n const o = optsRef.current;\n if (o.enabled === false) return false;\n if (!isPrintableKey(event)) return false;\n\n const isSpace = event.key === ' ';\n const hasBuffer = bufferRef.current.length > 0;\n /* Reserve Space: with no active buffer, hand it back so the caller can select; while typing,\n a Space is a real character (matches labels with spaces) and is consumed. */\n if (isSpace && !hasBuffer) return false;\n\n const resolved = typeof o.items === 'function' ? o.items() : o.items;\n const list = resolved as readonly T[];\n if (list.length === 0) return false;\n\n const nextBuffer = bufferRef.current + event.key;\n bufferRef.current = nextBuffer;\n\n /* Restart the idle window on every accepted keystroke. */\n clearTimer();\n timerRef.current = setTimeout(() => {\n bufferRef.current = '';\n timerRef.current = null;\n }, o.timeout ?? 500);\n\n const labelOf = (item: T) => o.getLabel(item).toLowerCase();\n const disabledOf = (item: T) => (o.isDisabled ? o.isDisabled(item) : false);\n const startFrom = o.getActiveIndex ? o.getActiveIndex() : -1;\n\n let matchIndex = -1;\n if (isAllSameChar(nextBuffer)) {\n /* Same-letter repeat → cycle to the next label starting with that letter, after the active one. */\n const char = nextBuffer[0]!.toLowerCase();\n for (let step = 1; step <= list.length; step += 1) {\n const idx = (startFrom + step + list.length) % list.length;\n const item = list[idx]!;\n if (!disabledOf(item) && labelOf(item).startsWith(char)) {\n matchIndex = idx;\n break;\n }\n }\n } else {\n /* Multi-char buffer → prefix-match the whole buffer; scan from the current item forward so a\n refining sequence stays put when the active item still matches. */\n const prefix = nextBuffer.toLowerCase();\n const begin = startFrom < 0 ? 0 : startFrom;\n for (let step = 0; step < list.length; step += 1) {\n const idx = (begin + step) % list.length;\n const item = list[idx]!;\n if (!disabledOf(item) && labelOf(item).startsWith(prefix)) {\n matchIndex = idx;\n break;\n }\n }\n }\n\n if (matchIndex >= 0) {\n o.onMatch(list[matchIndex]!, matchIndex);\n return true;\n }\n /* No label matched, but the char was consumed into the buffer (and Space, once buffering,\n must not double as select) — report handled so the caller doesn't also act on it. */\n return true;\n },\n [clearTimer],\n );\n\n /* `enabled` toggling off mid-type should not leave a stale buffer/timer armed. */\n useEffect(() => {\n if (!enabled) reset();\n }, [enabled, reset]);\n\n return { onKeyDown, reset };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/utils/composeRefs.ts"],"names":[],"mappings":";;;;AAOO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACLA,SAAS,MAAA,CAAU,KAAqB,KAAA,EAAsC;AAC5E,EAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,IAAA,OAAO,IAAI,KAAK,CAAA;AAAA,EAClB,CAAA,MAAA,IAAW,OAAO,IAAA,EAAM;AACtB,IAAC,IAA8B,OAAA,GAAU,KAAA;AAAA,EAC3C;AACF;AAUO,SAAS,eACX,IAAA,EACsC;AACzC,EAAA,OAAO,CAAC,IAAA,KAAS;AACf,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjC,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,EAAK,IAAI,CAAA;AAChC,MAAA,IAAI,OAAO,OAAA,KAAY,UAAA,EAAY,UAAA,GAAa,IAAA;AAChD,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,MAAM;AACX,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,UAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,UAAA,IAAI,OAAO,OAAA,KAAY,UAAA,EAAY,OAAA,EAAQ;AAAA,eACtC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,QAC3B;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAMO,SAAS,mBACX,IAAA,EACsC;AAEzC,EAAA,OAAO,WAAA,CAAY,WAAA,CAAY,GAAG,IAAI,GAAG,IAAI,CAAA;AAC/C","file":"chunk-X2MYOHOB.js","sourcesContent":["import clsx, { type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Conditional class composer with Tailwind conflict-resolution.\n * Use anywhere you'd otherwise concatenate class strings.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { useCallback, type Ref } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T | null): (() => void) | void {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref != null) {\n (ref as { current: T | null }).current = value;\n }\n}\n\n/**\n * Merge multiple React refs (callback or object) into a single callback ref.\n * Use to forward a ref while also keeping a local ref to the same node.\n *\n * React 19 callback refs may return a cleanup function; the composed ref\n * preserves them — it returns a cleanup that invokes each inner cleanup\n * (and null-calls refs that returned none).\n */\nexport function composeRefs<T>(\n ...refs: PossibleRef<T>[]\n): (node: T | null) => (() => void) | void {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (typeof cleanup === 'function') hasCleanup = true;\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < refs.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === 'function') cleanup();\n else setRef(refs[i], null);\n }\n };\n }\n };\n}\n\n/**\n * `composeRefs` with a render-stable identity — memoized so React doesn't\n * detach/reattach the composed ref on every commit.\n */\nexport function useComposedRefs<T>(\n ...refs: PossibleRef<T>[]\n): (node: T | null) => (() => void) | void {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback(composeRefs(...refs), refs);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/overlays/drawer/Drawer.tsx"],"names":["DrawerTrigger","DrawerSurface","DrawerContent"],"mappings":"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","file":"chunk-ZC4H4PIN.js","sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, Presence, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\nexport type DrawerSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n side: DrawerSide;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null);\n\nfunction useDrawerContext() {\n const ctx = useContext(DrawerContext);\n if (!ctx) throw new Error('Drawer.* must be used inside <Drawer>');\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: DrawerSide;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: DrawerProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DrawerContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n side,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, side, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>;\n}\n\nexport interface DrawerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function DrawerTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n// Full-edge slide: the panel rests at translate-0 when open and is pushed\n// fully off its own edge when closed. `transition-transform` (gated on\n// `motion-safe:`) animates both enter and exit via Presence's data-state flip.\nconst SIDE_BASE: Record<DrawerSide, string> = {\n right:\n 'inset-y-0 right-0 h-full w-full border-l ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:translate-x-full',\n left:\n 'inset-y-0 left-0 h-full w-full border-r ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:-translate-x-full',\n top:\n 'inset-x-0 top-0 w-full border-b ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:-translate-y-full',\n bottom:\n 'inset-x-0 bottom-0 w-full border-t ' +\n 'motion-safe:transition-transform motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out) ' +\n 'data-[state=closed]:translate-y-full',\n};\n\nconst HORIZONTAL_SIZE: Record<DrawerSize, string> = {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-2xl',\n full: '',\n};\n\nconst VERTICAL_SIZE: Record<DrawerSize, string> = {\n sm: 'max-h-[40vh]',\n md: 'max-h-[60vh]',\n lg: 'max-h-[75vh]',\n xl: 'max-h-[85vh]',\n full: 'max-h-screen',\n};\n\n/** Represents the prop surface of `Drawer.Content`. */\nexport interface DrawerContentProps extends HTMLAttributes<HTMLDivElement>, SurfaceVariants {\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n /** Per-side max-size token. Default `md` (preserves prior behavior for right/left at `sm`-ish width via `sm:max-w-md`). */\n size?: DrawerSize;\n children: ReactNode;\n}\n\n/**\n * The full portal subtree (scroll-lock + backdrop + focus-trap + dialog panel),\n * rendered as the single child of `<Presence>`. Presence injects `data-state`\n * (\"open\" | \"closed\") + a `ref` here; both are forwarded to the dialog panel —\n * the element whose `transition-transform` end defers unmount — and `data-state`\n * is mirrored onto the backdrop so its fade runs in lock-step with the slide.\n * Keeping the whole subtree inside Presence holds the focus-trap + scroll-lock\n * active through the exit animation and releases them on unmount.\n */\ninterface DrawerSurfaceProps extends HTMLAttributes<HTMLDivElement> {\n ctx: DrawerContextValue;\n hideBackdrop?: boolean;\n isBlurred?: boolean;\n chromeCtx: OverlayChromeContextValue;\n surfaceClassName?: string;\n children: ReactNode;\n}\n\nconst DrawerSurface = forwardRef<HTMLDivElement, DrawerSurfaceProps>(function DrawerSurface(\n {\n ctx,\n hideBackdrop,\n isBlurred,\n chromeCtx,\n surfaceClassName,\n children,\n // `data-state` is injected by Presence; default to \"open\" when rendered standalone.\n 'data-state': dataState = 'open',\n ...rest\n }: DrawerSurfaceProps & { 'data-state'?: 'open' | 'closed' },\n forwardedRef,\n) {\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n isInline\n isBlurred={isBlurred}\n data-state={dataState}\n className={cn(\n // Backdrop fade driven by the same data-state Presence flips (motion-safe).\n 'motion-safe:transition-opacity motion-safe:duration-(--duration-base) motion-safe:ease-(--ease-out)',\n 'data-[state=closed]:opacity-0',\n )}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <FocusScope asChild trapped loop>\n <DismissableLayer\n isEscapeDisabled={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n isOutsideClickDisabled\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state={dataState}\n data-side={ctx.side}\n className={surfaceClassName}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n );\n});\nDrawerSurface.displayName = 'DrawerSurface';\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(\n {\n hideBackdrop,\n isBlurred,\n variant,\n tone,\n radius,\n padding,\n elevation,\n size = 'md',\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useDrawerContext();\n const isHorizontal = ctx.side === 'right' || ctx.side === 'left';\n const sizeClass = isHorizontal ? HORIZONTAL_SIZE[size] : VERTICAL_SIZE[size];\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n const surfaceClassName = cn(\n 'fixed z-modal flex flex-col gap-4 outline-none',\n surfaceVariants({\n variant: variant ?? 'elevated',\n tone,\n radius: radius ?? 'none',\n padding: padding ?? 'xl',\n elevation: elevation ?? 3,\n }),\n SIDE_BASE[ctx.side],\n sizeClass,\n className,\n );\n\n // Presence keeps the subtree mounted through the exit slide, flipping\n // data-state open→closed and deferring unmount until the panel's\n // transition ends.\n return (\n <Presence isPresent={ctx.open}>\n <DrawerSurface\n ref={forwardedRef}\n ctx={ctx}\n hideBackdrop={hideBackdrop}\n isBlurred={isBlurred}\n chromeCtx={chromeCtx}\n surfaceClassName={surfaceClassName}\n {...rest}\n >\n {children}\n </DrawerSurface>\n </Presence>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Drawer namespace.\nexport const DrawerHeader = OverlayHeader;\nexport const DrawerTitle = OverlayTitle;\nexport const DrawerDescription = OverlayDescription;\nexport const DrawerBody = OverlayBody;\nexport const DrawerFooter = OverlayFooter;\nexport const DrawerClose = OverlayCloseButton;\n\ntype DrawerComponent = typeof Drawer & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Title: typeof DrawerTitle;\n Description: typeof DrawerDescription;\n Body: typeof DrawerBody;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n(Drawer as DrawerComponent).Trigger = DrawerTrigger;\n(Drawer as DrawerComponent).Content = DrawerContent;\n(Drawer as DrawerComponent).Header = DrawerHeader;\n(Drawer as DrawerComponent).Title = DrawerTitle;\n(Drawer as DrawerComponent).Description = DrawerDescription;\n(Drawer as DrawerComponent).Body = DrawerBody;\n(Drawer as DrawerComponent).Footer = DrawerFooter;\n(Drawer as DrawerComponent).Close = DrawerClose;\n\nexport default Drawer as DrawerComponent;\n"]}