@wow-two-beta/ui 0.0.66 → 0.0.68

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 (188) hide show
  1. package/dist/actions/index.js +8 -8
  2. package/dist/actions/speedDial/SpeedDial.d.ts +8 -6
  3. package/dist/actions/toggleButton/ToggleButton.d.ts +1 -0
  4. package/dist/actions/toolbar/Toolbar.d.ts +4 -6
  5. package/dist/{chunk-3SWPYYRQ.js → chunk-3BKZLK7D.js} +5 -5
  6. package/dist/{chunk-3SWPYYRQ.js.map → chunk-3BKZLK7D.js.map} +1 -1
  7. package/dist/{chunk-XLYJF3HC.js → chunk-B4X7XXSM.js} +4 -4
  8. package/dist/{chunk-XLYJF3HC.js.map → chunk-B4X7XXSM.js.map} +1 -1
  9. package/dist/{chunk-X2MYOHOB.js → chunk-D4ZT36AZ.js} +2 -2
  10. package/dist/chunk-D4ZT36AZ.js.map +1 -0
  11. package/dist/{chunk-FXYEMUV6.js → chunk-D5QVCOX5.js} +58 -44
  12. package/dist/chunk-D5QVCOX5.js.map +1 -0
  13. package/dist/{chunk-MVMDDGW7.js → chunk-D7ZFCHX5.js} +3 -3
  14. package/dist/{chunk-MVMDDGW7.js.map → chunk-D7ZFCHX5.js.map} +1 -1
  15. package/dist/{chunk-LGTGZ3RW.js → chunk-F4HGQMUI.js} +2 -2
  16. package/dist/chunk-F4HGQMUI.js.map +1 -0
  17. package/dist/{chunk-YQGEF43L.js → chunk-GPMNI5MG.js} +6 -6
  18. package/dist/{chunk-YQGEF43L.js.map → chunk-GPMNI5MG.js.map} +1 -1
  19. package/dist/{chunk-ZTK5ZQIL.js → chunk-HPA5BHDK.js} +57 -44
  20. package/dist/chunk-HPA5BHDK.js.map +1 -0
  21. package/dist/{chunk-7ZDLUNAY.js → chunk-KZLEHWAJ.js} +4 -4
  22. package/dist/{chunk-7ZDLUNAY.js.map → chunk-KZLEHWAJ.js.map} +1 -1
  23. package/dist/{chunk-3BNEDKMS.js → chunk-ORYO55KN.js} +24 -20
  24. package/dist/chunk-ORYO55KN.js.map +1 -0
  25. package/dist/{chunk-NOOKDXIZ.js → chunk-OZBLEOLZ.js} +5 -5
  26. package/dist/chunk-OZBLEOLZ.js.map +1 -0
  27. package/dist/{chunk-MZZKA3ZS.js → chunk-QTHKG7MQ.js} +41 -38
  28. package/dist/chunk-QTHKG7MQ.js.map +1 -0
  29. package/dist/{chunk-O4Y52ERR.js → chunk-R5MOEUXM.js} +38 -17
  30. package/dist/chunk-R5MOEUXM.js.map +1 -0
  31. package/dist/{chunk-V267IMBH.js → chunk-RNHY33US.js} +4 -4
  32. package/dist/chunk-RNHY33US.js.map +1 -0
  33. package/dist/{chunk-FMTBJJP6.js → chunk-UMRRFZ4R.js} +3 -3
  34. package/dist/{chunk-FMTBJJP6.js.map → chunk-UMRRFZ4R.js.map} +1 -1
  35. package/dist/{chunk-NEH4ITXL.js → chunk-VTRPW2QQ.js} +15 -13
  36. package/dist/chunk-VTRPW2QQ.js.map +1 -0
  37. package/dist/{chunk-NW7ULTYL.js → chunk-VYFPLQPV.js} +4 -4
  38. package/dist/{chunk-NW7ULTYL.js.map → chunk-VYFPLQPV.js.map} +1 -1
  39. package/dist/{chunk-4XWLEKH2.js → chunk-WKVWOAQV.js} +3 -3
  40. package/dist/{chunk-4XWLEKH2.js.map → chunk-WKVWOAQV.js.map} +1 -1
  41. package/dist/{chunk-ZC4H4PIN.js → chunk-X5JSX4PU.js} +20 -17
  42. package/dist/chunk-X5JSX4PU.js.map +1 -0
  43. package/dist/{chunk-GTBNVI77.js → chunk-XFUD3RZK.js} +59 -45
  44. package/dist/chunk-XFUD3RZK.js.map +1 -0
  45. package/dist/{chunk-H3WC7KRX.js → chunk-XOUAFZ2E.js} +70 -54
  46. package/dist/chunk-XOUAFZ2E.js.map +1 -0
  47. package/dist/{chunk-DX7FYAKY.js → chunk-XSW3NZDD.js} +17 -17
  48. package/dist/chunk-XSW3NZDD.js.map +1 -0
  49. package/dist/display/carousel/Carousel.d.ts +9 -11
  50. package/dist/display/collapsible/Collapsible.d.ts +4 -6
  51. package/dist/display/index.js +10 -10
  52. package/dist/display/list/List.d.ts +3 -5
  53. package/dist/display/table/Table.d.ts +9 -11
  54. package/dist/display/tabs/Tabs.d.ts +5 -7
  55. package/dist/display/timeline/Timeline.d.ts +3 -5
  56. package/dist/display/tree/Tree.d.ts +4 -6
  57. package/dist/feedback/index.js +9 -9
  58. package/dist/feedback/onboardingChecklist/OnboardingChecklist.d.ts +3 -9
  59. package/dist/forms/characterCount/CharacterCount.d.ts +1 -1
  60. package/dist/forms/combobox/Combobox.d.ts +8 -6
  61. package/dist/forms/editable/Editable.d.ts +10 -8
  62. package/dist/forms/{formField/FormField.d.ts → field/Field.d.ts} +2 -2
  63. package/dist/forms/field/index.d.ts +6 -0
  64. package/dist/forms/index.d.ts +2 -2
  65. package/dist/forms/index.js +14 -14
  66. package/dist/forms/labeledInput/LabeledInput.d.ts +6 -2
  67. package/dist/forms/labeledInput/index.d.ts +1 -0
  68. package/dist/forms/multiSelect/MultiSelect.d.ts +8 -6
  69. package/dist/forms/stepper/Stepper.d.ts +5 -7
  70. package/dist/forms/textareaInput/TextareaInput.d.ts +9 -0
  71. package/dist/forms/textareaInput/index.d.ts +6 -0
  72. package/dist/forms/wizard/Wizard.d.ts +5 -7
  73. package/dist/hooks/index.js +2 -2
  74. package/dist/hooks/useClipboard/index.d.ts +1 -0
  75. package/dist/hooks/useControlled/index.d.ts +1 -0
  76. package/dist/hooks/useDebounceHandler/index.d.ts +1 -0
  77. package/dist/hooks/useDisclosure/index.d.ts +1 -0
  78. package/dist/hooks/useEscape/index.d.ts +1 -0
  79. package/dist/hooks/useEventListener/index.d.ts +1 -0
  80. package/dist/hooks/useFocusTrap/index.d.ts +1 -0
  81. package/dist/hooks/useId/index.d.ts +1 -0
  82. package/dist/hooks/useMediaQuery/index.d.ts +1 -0
  83. package/dist/hooks/useOutsideClick/index.d.ts +1 -0
  84. package/dist/hooks/useReducedMotion/index.d.ts +1 -0
  85. package/dist/hooks/useResizeObserver/index.d.ts +1 -0
  86. package/dist/hooks/useScrollLock/index.d.ts +1 -0
  87. package/dist/hooks/useTypeahead/index.d.ts +1 -0
  88. package/dist/icons/index.js +3 -3
  89. package/dist/index.js +22 -22
  90. package/dist/layout/appShell/AppShell.d.ts +8 -15
  91. package/dist/layout/index.js +11 -11
  92. package/dist/layout/resizablePanels/ResizablePanels.d.ts +4 -6
  93. package/dist/nav/commandPalette/CommandPalette.d.ts +11 -9
  94. package/dist/nav/contextMenu/ContextMenu.d.ts +9 -7
  95. package/dist/nav/dropdownMenu/DropdownMenu.d.ts +9 -7
  96. package/dist/nav/index.js +11 -11
  97. package/dist/nav/menu/Menu.d.ts +7 -5
  98. package/dist/nav/menubar/Menubar.d.ts +5 -7
  99. package/dist/nav/navigationMenu/NavigationMenu.d.ts +7 -9
  100. package/dist/overlays/actionSheet/ActionSheet.d.ts +8 -6
  101. package/dist/overlays/alertModal/AlertModal.d.ts +30 -0
  102. package/dist/overlays/alertModal/index.d.ts +6 -0
  103. package/dist/overlays/backdrop/Backdrop.d.ts +1 -1
  104. package/dist/overlays/bottomSheet/BottomSheet.d.ts +4 -11
  105. package/dist/overlays/drawer/Drawer.d.ts +14 -12
  106. package/dist/overlays/hoverCard/HoverCard.d.ts +7 -5
  107. package/dist/overlays/index.d.ts +2 -2
  108. package/dist/overlays/index.js +10 -10
  109. package/dist/overlays/modal/Modal.d.ts +54 -0
  110. package/dist/overlays/modal/index.d.ts +6 -0
  111. package/dist/overlays/popover/Popover.d.ts +8 -6
  112. package/dist/primitives/formControlContext/FormControlContext.d.ts +1 -1
  113. package/dist/primitives/index.js +3 -3
  114. package/dist/utils/ColorExtensions/index.d.ts +1 -0
  115. package/dist/utils/CssExtensions/index.d.ts +1 -0
  116. package/dist/utils/Environment/index.d.ts +1 -0
  117. package/dist/utils/Equality/index.d.ts +1 -0
  118. package/dist/utils/HtmlExtensions/index.d.ts +1 -0
  119. package/dist/utils/KeyboardExtensions/index.d.ts +1 -0
  120. package/dist/utils/Layers/index.d.ts +1 -0
  121. package/dist/utils/OptionalExtensions/index.d.ts +1 -0
  122. package/dist/utils/PressExtensions/index.d.ts +1 -0
  123. package/dist/utils/StyleTokens/index.d.ts +1 -0
  124. package/dist/utils/{SurfaceStyles.d.ts → SurfaceStyles/SurfaceStyles.d.ts} +1 -1
  125. package/dist/utils/SurfaceStyles/index.d.ts +1 -0
  126. package/dist/utils/{Tones.d.ts → Tones/Tones.d.ts} +1 -1
  127. package/dist/utils/Tones/index.d.ts +1 -0
  128. package/dist/utils/TransitionExtensions/index.d.ts +1 -0
  129. package/dist/utils/cn/index.d.ts +1 -0
  130. package/dist/utils/composeEventHandlers/index.d.ts +1 -0
  131. package/dist/utils/composeRefs/index.d.ts +1 -0
  132. package/dist/utils/dataAttr/index.d.ts +1 -0
  133. package/dist/utils/index.js +2 -2
  134. package/dist/utils/polymorphic/index.d.ts +1 -0
  135. package/dist/utils/tv/index.d.ts +1 -0
  136. package/package.json +2 -2
  137. package/dist/chunk-3BNEDKMS.js.map +0 -1
  138. package/dist/chunk-DX7FYAKY.js.map +0 -1
  139. package/dist/chunk-FXYEMUV6.js.map +0 -1
  140. package/dist/chunk-GTBNVI77.js.map +0 -1
  141. package/dist/chunk-H3WC7KRX.js.map +0 -1
  142. package/dist/chunk-LGTGZ3RW.js.map +0 -1
  143. package/dist/chunk-MZZKA3ZS.js.map +0 -1
  144. package/dist/chunk-NEH4ITXL.js.map +0 -1
  145. package/dist/chunk-NOOKDXIZ.js.map +0 -1
  146. package/dist/chunk-O4Y52ERR.js.map +0 -1
  147. package/dist/chunk-V267IMBH.js.map +0 -1
  148. package/dist/chunk-X2MYOHOB.js.map +0 -1
  149. package/dist/chunk-ZC4H4PIN.js.map +0 -1
  150. package/dist/chunk-ZTK5ZQIL.js.map +0 -1
  151. package/dist/forms/formField/index.d.ts +0 -1
  152. package/dist/forms/textarea/Textarea.d.ts +0 -9
  153. package/dist/forms/textarea/index.d.ts +0 -1
  154. package/dist/overlays/alertDialog/AlertDialog.d.ts +0 -28
  155. package/dist/overlays/alertDialog/index.d.ts +0 -1
  156. package/dist/overlays/dialog/Dialog.d.ts +0 -46
  157. package/dist/overlays/dialog/index.d.ts +0 -1
  158. /package/dist/hooks/{useClipboard.d.ts → useClipboard/useClipboard.d.ts} +0 -0
  159. /package/dist/hooks/{useControlled.d.ts → useControlled/useControlled.d.ts} +0 -0
  160. /package/dist/hooks/{useDebounceHandler.d.ts → useDebounceHandler/useDebounceHandler.d.ts} +0 -0
  161. /package/dist/hooks/{useDisclosure.d.ts → useDisclosure/useDisclosure.d.ts} +0 -0
  162. /package/dist/hooks/{useEscape.d.ts → useEscape/useEscape.d.ts} +0 -0
  163. /package/dist/hooks/{useEventListener.d.ts → useEventListener/useEventListener.d.ts} +0 -0
  164. /package/dist/hooks/{useFocusTrap.d.ts → useFocusTrap/useFocusTrap.d.ts} +0 -0
  165. /package/dist/hooks/{useId.d.ts → useId/useId.d.ts} +0 -0
  166. /package/dist/hooks/{useMediaQuery.d.ts → useMediaQuery/useMediaQuery.d.ts} +0 -0
  167. /package/dist/hooks/{useOutsideClick.d.ts → useOutsideClick/useOutsideClick.d.ts} +0 -0
  168. /package/dist/hooks/{useReducedMotion.d.ts → useReducedMotion/useReducedMotion.d.ts} +0 -0
  169. /package/dist/hooks/{useResizeObserver.d.ts → useResizeObserver/useResizeObserver.d.ts} +0 -0
  170. /package/dist/hooks/{useScrollLock.d.ts → useScrollLock/useScrollLock.d.ts} +0 -0
  171. /package/dist/hooks/{useTypeahead.d.ts → useTypeahead/useTypeahead.d.ts} +0 -0
  172. /package/dist/utils/{ColorExtensions.d.ts → ColorExtensions/ColorExtensions.d.ts} +0 -0
  173. /package/dist/utils/{CssExtensions.d.ts → CssExtensions/CssExtensions.d.ts} +0 -0
  174. /package/dist/utils/{Environment.d.ts → Environment/Environment.d.ts} +0 -0
  175. /package/dist/utils/{Equality.d.ts → Equality/Equality.d.ts} +0 -0
  176. /package/dist/utils/{HtmlExtensions.d.ts → HtmlExtensions/HtmlExtensions.d.ts} +0 -0
  177. /package/dist/utils/{KeyboardExtensions.d.ts → KeyboardExtensions/KeyboardExtensions.d.ts} +0 -0
  178. /package/dist/utils/{Layers.d.ts → Layers/Layers.d.ts} +0 -0
  179. /package/dist/utils/{OptionalExtensions.d.ts → OptionalExtensions/OptionalExtensions.d.ts} +0 -0
  180. /package/dist/utils/{PressExtensions.d.ts → PressExtensions/PressExtensions.d.ts} +0 -0
  181. /package/dist/utils/{StyleTokens.d.ts → StyleTokens/StyleTokens.d.ts} +0 -0
  182. /package/dist/utils/{TransitionExtensions.d.ts → TransitionExtensions/TransitionExtensions.d.ts} +0 -0
  183. /package/dist/utils/{cn.d.ts → cn/cn.d.ts} +0 -0
  184. /package/dist/utils/{composeEventHandlers.d.ts → composeEventHandlers/composeEventHandlers.d.ts} +0 -0
  185. /package/dist/utils/{composeRefs.d.ts → composeRefs/composeRefs.d.ts} +0 -0
  186. /package/dist/utils/{dataAttr.d.ts → dataAttr/dataAttr.d.ts} +0 -0
  187. /package/dist/utils/{polymorphic.d.ts → polymorphic/polymorphic.d.ts} +0 -0
  188. /package/dist/utils/{tv.d.ts → tv/tv.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
- export { BackToTopButton, Button, ButtonGroup, CopyButton, DisclosureButton, FAB, Link, SegmentedControl, SpeedDial, SpeedDialAction, SpeedDialTrigger, ToggleButton, ToggleButtonGroup, Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, buttonVariants, fabVariants, linkVariants, toggleButtonVariants } from '../chunk-O4Y52ERR.js';
2
- import '../chunk-YQGEF43L.js';
3
- import '../chunk-V267IMBH.js';
4
- import '../chunk-MVMDDGW7.js';
5
- import '../chunk-DX7FYAKY.js';
6
- import '../chunk-XLYJF3HC.js';
7
- import '../chunk-LGTGZ3RW.js';
8
- import '../chunk-X2MYOHOB.js';
1
+ export { BackToTopButton, Button, ButtonGroup, CopyButton, DisclosureButton, FAB, Link, SegmentedControl, SpeedDial, SpeedDialAction, SpeedDialTrigger, ToggleButton, ToggleButtonGroup, Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, buttonVariants, fabVariants, linkVariants, toggleButtonVariants } from '../chunk-R5MOEUXM.js';
2
+ import '../chunk-GPMNI5MG.js';
3
+ import '../chunk-RNHY33US.js';
4
+ import '../chunk-D7ZFCHX5.js';
5
+ import '../chunk-XSW3NZDD.js';
6
+ import '../chunk-B4X7XXSM.js';
7
+ import '../chunk-F4HGQMUI.js';
8
+ import '../chunk-D4ZT36AZ.js';
9
9
  import '../chunk-DCHYNTHI.js';
10
10
  //# sourceMappingURL=index.js.map
11
11
  //# sourceMappingURL=index.js.map
@@ -12,7 +12,10 @@ export interface SpeedDialProps {
12
12
  className?: string;
13
13
  children: ReactNode;
14
14
  }
15
- export declare function SpeedDial({ position, direction, isOpen: openProp, defaultOpen, onOpenChange, gap, className, children, }: SpeedDialProps): import("react/jsx-runtime").JSX.Element;
15
+ declare function SpeedDialRoot({ position, direction, isOpen: openProp, defaultOpen, onOpenChange, gap, className, children, }: SpeedDialProps): import("react/jsx-runtime").JSX.Element;
16
+ declare namespace SpeedDialRoot {
17
+ var displayName: string;
18
+ }
16
19
  export interface SpeedDialTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
17
20
  /** Required accessible label. Default `"Toggle actions"`. */
18
21
  'aria-label'?: string;
@@ -29,9 +32,8 @@ export interface SpeedDialActionProps extends Omit<ButtonHTMLAttributes<HTMLButt
29
32
  tooltip?: ReactNode;
30
33
  }
31
34
  export declare const SpeedDialAction: import("react").ForwardRefExoticComponent<SpeedDialActionProps & import("react").RefAttributes<HTMLButtonElement>>;
32
- type SpeedDialComponent = typeof SpeedDial & {
33
- Trigger: typeof SpeedDialTrigger;
34
- Action: typeof SpeedDialAction;
35
+ export declare const SpeedDial: typeof SpeedDialRoot & {
36
+ Trigger: import("react").ForwardRefExoticComponent<SpeedDialTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
37
+ Action: import("react").ForwardRefExoticComponent<SpeedDialActionProps & import("react").RefAttributes<HTMLButtonElement>>;
35
38
  };
36
- declare const _default: SpeedDialComponent;
37
- export default _default;
39
+ export default SpeedDial;
@@ -16,6 +16,7 @@ export interface ToggleButtonProps extends Omit<ButtonProps, 'variant' | 'tone'
16
16
  'aria-label'?: StateAware<string>;
17
17
  color?: ColorProp;
18
18
  tooltip?: ReactNode;
19
+ as?: 'button' | 'div';
19
20
  }
20
21
  export declare const ToggleButton: import("react").ForwardRefExoticComponent<ToggleButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
21
22
  export {};
@@ -2,7 +2,6 @@ import { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type HTMLAttribut
2
2
  export interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {
3
3
  orientation?: 'horizontal' | 'vertical';
4
4
  }
5
- export declare const Toolbar: import("react").ForwardRefExoticComponent<ToolbarProps & import("react").RefAttributes<HTMLDivElement>>;
6
5
  export interface ToolbarButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
7
6
  asChild?: boolean;
8
7
  children: ReactNode;
@@ -13,10 +12,9 @@ export interface ToolbarLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorEl
13
12
  }
14
13
  export declare const ToolbarLink: import("react").ForwardRefExoticComponent<ToolbarLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
15
14
  export declare function ToolbarSeparator(props: HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
16
- type ToolbarComponent = typeof Toolbar & {
17
- Button: typeof ToolbarButton;
18
- Link: typeof ToolbarLink;
15
+ export declare const Toolbar: import("react").ForwardRefExoticComponent<ToolbarProps & import("react").RefAttributes<HTMLDivElement>> & {
16
+ Button: import("react").ForwardRefExoticComponent<ToolbarButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
17
+ Link: import("react").ForwardRefExoticComponent<ToolbarLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
19
18
  Separator: typeof ToolbarSeparator;
20
19
  };
21
- declare const _default: ToolbarComponent;
22
- export default _default;
20
+ export default Toolbar;
@@ -1,6 +1,6 @@
1
- import { Icon } from './chunk-MVMDDGW7.js';
2
- import { tv } from './chunk-DX7FYAKY.js';
3
- import { cn } from './chunk-X2MYOHOB.js';
1
+ import { Icon } from './chunk-D7ZFCHX5.js';
2
+ import { tv } from './chunk-XSW3NZDD.js';
3
+ import { cn } from './chunk-D4ZT36AZ.js';
4
4
  import { forwardRef } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
  import { X } from 'lucide-react';
@@ -159,5 +159,5 @@ function isInRange(d, start, end) {
159
159
  }
160
160
 
161
161
  export { Kbd, MONTHS_LONG, Tag, WEEKDAYS_SHORT, addDays, addMonths, buildMonthGrid, formatISODate, formatISOTime, isDateDisabled, isInRange, isSameDay, isToday, parseISODate, parseISOTime, startOfDay, startOfMonth, tagVariants };
162
- //# sourceMappingURL=chunk-3SWPYYRQ.js.map
163
- //# sourceMappingURL=chunk-3SWPYYRQ.js.map
162
+ //# sourceMappingURL=chunk-3BKZLK7D.js.map
163
+ //# sourceMappingURL=chunk-3BKZLK7D.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/display/kbd/Kbd.tsx","../src/display/tag/Tag.variants.ts","../src/display/tag/Tag.tsx","../src/forms/DateExtensions.ts"],"names":["forwardRef","jsx"],"mappings":"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","file":"chunk-3SWPYYRQ.js","sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type KbdProps = ComponentPropsWithoutRef<'kbd'>;\n\n/**\n * Keyboard key affordance — `<kbd>` styled with subtle border and inset\n * shadow. Single key per `<Kbd>`; chain via `<Kbd>⌘</Kbd> + <Kbd>K</Kbd>`.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(({ className, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border',\n 'bg-muted px-1.5 font-mono text-xs text-muted-foreground shadow-[inset_0_-1px_0_0_rgb(0_0_0/0.05)]',\n className,\n )}\n {...props}\n />\n));\nKbd.displayName = 'Kbd';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const tagVariants = tv({\n base: 'inline-flex items-center gap-1 rounded-md border border-border bg-card px-2 py-0.5 text-xs font-medium text-card-foreground',\n variants: {\n variant: {\n neutral: '',\n brand: 'border-transparent bg-primary-soft text-primary-soft-foreground',\n success: 'border-transparent bg-success-soft text-success-soft-foreground',\n warning: 'border-transparent bg-warning-soft text-warning-soft-foreground',\n danger: 'border-transparent bg-destructive-soft text-destructive-soft-foreground',\n info: 'border-transparent bg-info-soft text-info-soft-foreground',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n },\n});\n\nexport type TagVariants = VariantProps<typeof tagVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { tagVariants, type TagVariants } from './Tag.variants';\n\nexport interface TagProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'children'>,\n TagVariants {\n children?: ReactNode;\n /** Show a close (×) button. Pass a handler to receive the click. */\n onClose?: () => void;\n /** Accessible label for the close button. Default `\"Remove\"`. */\n closeLabel?: string;\n}\n\n/**\n * Pill with an optional close button. The close button is a raw `<button>`\n * to keep the strict atom rule (Tag is L3, so importing Button would make\n * this an atom-on-atom composition).\n */\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n ({ children, onClose, closeLabel = 'Remove', variant, className, ...props }, ref) => (\n <span ref={ref} className={cn(tagVariants({ variant }), className)} {...props}>\n {children}\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-1 inline-flex h-4 w-4 items-center justify-center rounded-sm text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <Icon icon={X} size={12} />\n </button>\n )}\n </span>\n ),\n);\nTag.displayName = 'Tag';\n","// Shared date helpers for Calendar / DatePicker / DateField / RangeCalendar.\n// Co-located in `forms/` so imports stay within-domain.\n//\n// Native Date only — no date-fns / luxon dependency. All helpers operate on\n// local time (no UTC math) since calendar UIs are inherently local.\n\nexport const WEEKDAYS_SHORT = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nexport const MONTHS_LONG = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nexport function startOfDay(d: Date): Date {\n const c = new Date(d);\n c.setHours(0, 0, 0, 0);\n return c;\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n}\n\nexport function addMonths(d: Date, n: number): Date {\n const c = new Date(d);\n const month = d.getMonth() + n;\n // Clamp to the target month's last day (Jan 31 +1 → Feb 28, not Mar 3).\n c.setMonth(month, Math.min(d.getDate(), daysInMonth(d.getFullYear(), month)));\n return c;\n}\n\nexport function addDays(d: Date, n: number): Date {\n const c = new Date(d);\n c.setDate(c.getDate() + n);\n return c;\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function daysInMonth(year: number, month: number): number {\n // month is 0-indexed; setting day 0 of next month gives last day of month.\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Build the 6-week (42-cell) grid that the calendar UI renders.\n * Cells outside the target month carry `outOfMonth: true`.\n */\nexport function buildMonthGrid(year: number, month: number): { date: Date; outOfMonth: boolean }[] {\n const first = new Date(year, month, 1);\n const firstWeekday = first.getDay(); // 0 (Sun) – 6 (Sat)\n const start = addDays(first, -firstWeekday);\n const cells: { date: Date; outOfMonth: boolean }[] = [];\n for (let i = 0; i < 42; i++) {\n const date = addDays(start, i);\n cells.push({ date, outOfMonth: date.getMonth() !== month });\n }\n return cells;\n}\n\n/** Format Date → \"YYYY-MM-DD\" for native `<input type=\"date\">` value. */\nexport function formatISODate(d: Date | null | undefined): string {\n if (!d) return '';\n const year = d.getFullYear();\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/** Parse \"YYYY-MM-DD\" → Date (local time). Returns null for invalid input. */\nexport function parseISODate(s: string | null | undefined): Date | null {\n if (!s) return null;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(s);\n if (!m) return null;\n const [, y, mo, d] = m;\n if (!y || !mo || !d) return null;\n const date = new Date(Number(y), Number(mo) - 1, Number(d));\n if (isNaN(date.getTime())) return null;\n return date;\n}\n\n/** Format Date → \"HH:MM\" for native `<input type=\"time\">` value. */\nexport function formatISOTime(d: Date | null | undefined): string {\n if (!d) return '';\n const h = String(d.getHours()).padStart(2, '0');\n const m = String(d.getMinutes()).padStart(2, '0');\n return `${h}:${m}`;\n}\n\n/** Parse \"HH:MM\" → { hours, minutes }. Returns null for invalid input. */\nexport function parseISOTime(s: string | null | undefined): { hours: number; minutes: number } | null {\n if (!s) return null;\n const m = /^(\\d{2}):(\\d{2})$/.exec(s);\n if (!m) return null;\n const [, h, mi] = m;\n if (!h || !mi) return null;\n const hours = Number(h);\n const minutes = Number(mi);\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;\n return { hours, minutes };\n}\n\nexport function clampDate(d: Date, min?: Date | null, max?: Date | null): Date {\n if (min && d < min) return min;\n if (max && d > max) return max;\n return d;\n}\n\nexport function isDateDisabled(\n d: Date,\n options: { min?: Date | null; max?: Date | null; isDisabled?: (d: Date) => boolean },\n): boolean {\n const { min, max, isDisabled } = options;\n if (min && startOfDay(d) < startOfDay(min)) return true;\n if (max && startOfDay(d) > startOfDay(max)) return true;\n if (isDisabled?.(d)) return true;\n return false;\n}\n\nexport function isInRange(\n d: Date,\n start: Date | null | undefined,\n end: Date | null | undefined,\n): boolean {\n if (!start || !end) return false;\n const t = startOfDay(d).getTime();\n const s = startOfDay(start).getTime();\n const e = startOfDay(end).getTime();\n return t >= Math.min(s, e) && t <= Math.max(s, e);\n}\n"]}
1
+ {"version":3,"sources":["../src/display/kbd/Kbd.tsx","../src/display/tag/Tag.variants.ts","../src/display/tag/Tag.tsx","../src/forms/DateExtensions.ts"],"names":["forwardRef","jsx"],"mappings":";;;;;;;AASO,IAAM,GAAA,GAAM,WAAkC,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC7E,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qFAAA;AAAA,MACA,mGAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,GAAA,CAAI,WAAA,GAAc,KAAA;;;AClBX,IAAM,cAAc,EAAA,CAAG;AAAA,EAC5B,IAAA,EAAM,6HAAA;AAAA,EACN,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAA;AAAA,MACT,KAAA,EAAO,iEAAA;AAAA,MACP,OAAA,EAAS,iEAAA;AAAA,MACT,OAAA,EAAS,iEAAA;AAAA,MACT,MAAA,EAAQ,yEAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;ACIM,IAAM,GAAA,GAAMA,UAAAA;AAAA,EACjB,CAAC,EAAE,QAAA,EAAU,OAAA,EAAS,UAAA,GAAa,UAAU,OAAA,EAAS,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,0BAC1E,MAAA,EAAA,EAAK,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACrE,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,2BACCC,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,UAAA;AAAA,QACZ,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAU,qMAAA;AAAA,QAEV,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,CAAA,EAAG,MAAM,EAAA,EAAI;AAAA;AAAA;AAC3B,GAAA,EAEJ;AAEJ;AACA,GAAA,CAAI,WAAA,GAAc,KAAA;;;AChCX,IAAM,cAAA,GAAiB,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI;AAChE,IAAM,WAAA,GAAc;AAAA,EACzB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAEO,SAAS,WAAW,CAAA,EAAe;AACxC,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,CAAC,CAAA;AACpB,EAAA,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACrB,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,SAAA,CAAU,GAA4B,CAAA,EAAqC;AACzF,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG,OAAO,KAAA;AACrB,EAAA,OACE,EAAE,WAAA,EAAY,KAAM,CAAA,CAAE,WAAA,MACtB,CAAA,CAAE,QAAA,EAAS,KAAM,CAAA,CAAE,UAAS,IAC5B,CAAA,CAAE,OAAA,EAAQ,KAAM,EAAE,OAAA,EAAQ;AAE9B;AAEO,SAAS,QAAQ,CAAA,EAAkB;AACxC,EAAA,OAAO,SAAA,CAAU,CAAA,kBAAG,IAAI,IAAA,EAAM,CAAA;AAChC;AAEO,SAAS,SAAA,CAAU,GAAS,CAAA,EAAiB;AAClD,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,CAAC,CAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,QAAA,EAAS,GAAI,CAAA;AAE7B,EAAA,CAAA,CAAE,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,OAAA,EAAQ,EAAG,WAAA,CAAY,CAAA,CAAE,WAAA,EAAY,EAAG,KAAK,CAAC,CAAC,CAAA;AAC5E,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,OAAA,CAAQ,GAAS,CAAA,EAAiB;AAChD,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,CAAC,CAAA;AACpB,EAAA,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAC,CAAA;AACzB,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,aAAa,CAAA,EAAe;AAC1C,EAAA,OAAO,IAAI,KAAK,CAAA,CAAE,WAAA,IAAe,CAAA,CAAE,QAAA,IAAY,CAAC,CAAA;AAClD;AAEO,SAAS,WAAA,CAAY,MAAc,KAAA,EAAuB;AAE/D,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,EAAG,CAAC,EAAE,OAAA,EAAQ;AAC9C;AAMO,SAAS,cAAA,CAAe,MAAc,KAAA,EAAsD;AACjG,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AACrC,EAAA,MAAM,YAAA,GAAe,MAAM,MAAA,EAAO;AAClC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,CAAC,YAAY,CAAA;AAC1C,EAAA,MAAM,QAA+C,EAAC;AACtD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAK,QAAA,EAAS,KAAM,OAAO,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,cAAc,CAAA,EAAoC;AAChE,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAE,WAAA,EAAY;AAC3B,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAA,CAAE,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,OAAO,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC/C,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AAGO,SAAS,aAAa,CAAA,EAA2C;AACtE,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,CAAA,GAAI,2BAAA,CAA4B,IAAA,CAAK,CAAC,CAAA;AAC5C,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,GAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA,GAAI,CAAA;AACrB,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,EAAA,IAAM,CAAC,GAAG,OAAO,IAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,GAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAC1D,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,GAAG,OAAO,IAAA;AAClC,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,cAAc,CAAA,EAAoC;AAChE,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC9C,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAClB;AAGO,SAAS,aAAa,CAAA,EAAyE;AACpG,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,CAAA,GAAI,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAA;AACpC,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,EAAA,MAAM,GAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA;AAClB,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,EAAA,EAAI,OAAO,IAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,MAAM,OAAA,GAAU,OAAO,EAAE,CAAA;AACzB,EAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,GAAQ,EAAA,IAAM,UAAU,CAAA,IAAK,OAAA,GAAU,IAAI,OAAO,IAAA;AACnE,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B;AAQO,SAAS,cAAA,CACd,GACA,OAAA,EACS;AACT,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,UAAA,EAAW,GAAI,OAAA;AACjC,EAAA,IAAI,OAAO,UAAA,CAAW,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,OAAO,UAAA,CAAW,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,UAAA,GAAa,CAAC,CAAA,EAAG,OAAO,IAAA;AAC5B,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,SAAA,CACd,CAAA,EACA,KAAA,EACA,GAAA,EACS;AACT,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,GAAA,EAAK,OAAO,KAAA;AAC3B,EAAA,MAAM,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,CAAE,OAAA,EAAQ;AAChC,EAAA,MAAM,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA,EAAQ;AACpC,EAAA,MAAM,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA,CAAE,OAAA,EAAQ;AAClC,EAAA,OAAO,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,KAAK,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAClD","file":"chunk-3BKZLK7D.js","sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type KbdProps = ComponentPropsWithoutRef<'kbd'>;\n\n/**\n * Keyboard key affordance — `<kbd>` styled with subtle border and inset\n * shadow. Single key per `<Kbd>`; chain via `<Kbd>⌘</Kbd> + <Kbd>K</Kbd>`.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(({ className, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border',\n 'bg-muted px-1.5 font-mono text-xs text-muted-foreground shadow-[inset_0_-1px_0_0_rgb(0_0_0/0.05)]',\n className,\n )}\n {...props}\n />\n));\nKbd.displayName = 'Kbd';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const tagVariants = tv({\n base: 'inline-flex items-center gap-1 rounded-md border border-border bg-card px-2 py-0.5 text-xs font-medium text-card-foreground',\n variants: {\n variant: {\n neutral: '',\n brand: 'border-transparent bg-primary-soft text-primary-soft-foreground',\n success: 'border-transparent bg-success-soft text-success-soft-foreground',\n warning: 'border-transparent bg-warning-soft text-warning-soft-foreground',\n danger: 'border-transparent bg-destructive-soft text-destructive-soft-foreground',\n info: 'border-transparent bg-info-soft text-info-soft-foreground',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n },\n});\n\nexport type TagVariants = VariantProps<typeof tagVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { tagVariants, type TagVariants } from './Tag.variants';\n\nexport interface TagProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'children'>,\n TagVariants {\n children?: ReactNode;\n /** Show a close (×) button. Pass a handler to receive the click. */\n onClose?: () => void;\n /** Accessible label for the close button. Default `\"Remove\"`. */\n closeLabel?: string;\n}\n\n/**\n * Pill with an optional close button. The close button is a raw `<button>`\n * to keep the strict atom rule (Tag is L3, so importing Button would make\n * this an atom-on-atom composition).\n */\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n ({ children, onClose, closeLabel = 'Remove', variant, className, ...props }, ref) => (\n <span ref={ref} className={cn(tagVariants({ variant }), className)} {...props}>\n {children}\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-1 inline-flex h-4 w-4 items-center justify-center rounded-sm text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <Icon icon={X} size={12} />\n </button>\n )}\n </span>\n ),\n);\nTag.displayName = 'Tag';\n","// Shared date helpers for Calendar / DatePicker / DateField / RangeCalendar.\n// Co-located in `forms/` so imports stay within-domain.\n//\n// Native Date only — no date-fns / luxon dependency. All helpers operate on\n// local time (no UTC math) since calendar UIs are inherently local.\n\nexport const WEEKDAYS_SHORT = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nexport const MONTHS_LONG = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nexport function startOfDay(d: Date): Date {\n const c = new Date(d);\n c.setHours(0, 0, 0, 0);\n return c;\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n}\n\nexport function addMonths(d: Date, n: number): Date {\n const c = new Date(d);\n const month = d.getMonth() + n;\n // Clamp to the target month's last day (Jan 31 +1 → Feb 28, not Mar 3).\n c.setMonth(month, Math.min(d.getDate(), daysInMonth(d.getFullYear(), month)));\n return c;\n}\n\nexport function addDays(d: Date, n: number): Date {\n const c = new Date(d);\n c.setDate(c.getDate() + n);\n return c;\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function daysInMonth(year: number, month: number): number {\n // month is 0-indexed; setting day 0 of next month gives last day of month.\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * Build the 6-week (42-cell) grid that the calendar UI renders.\n * Cells outside the target month carry `outOfMonth: true`.\n */\nexport function buildMonthGrid(year: number, month: number): { date: Date; outOfMonth: boolean }[] {\n const first = new Date(year, month, 1);\n const firstWeekday = first.getDay(); // 0 (Sun) – 6 (Sat)\n const start = addDays(first, -firstWeekday);\n const cells: { date: Date; outOfMonth: boolean }[] = [];\n for (let i = 0; i < 42; i++) {\n const date = addDays(start, i);\n cells.push({ date, outOfMonth: date.getMonth() !== month });\n }\n return cells;\n}\n\n/** Format Date → \"YYYY-MM-DD\" for native `<input type=\"date\">` value. */\nexport function formatISODate(d: Date | null | undefined): string {\n if (!d) return '';\n const year = d.getFullYear();\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/** Parse \"YYYY-MM-DD\" → Date (local time). Returns null for invalid input. */\nexport function parseISODate(s: string | null | undefined): Date | null {\n if (!s) return null;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(s);\n if (!m) return null;\n const [, y, mo, d] = m;\n if (!y || !mo || !d) return null;\n const date = new Date(Number(y), Number(mo) - 1, Number(d));\n if (isNaN(date.getTime())) return null;\n return date;\n}\n\n/** Format Date → \"HH:MM\" for native `<input type=\"time\">` value. */\nexport function formatISOTime(d: Date | null | undefined): string {\n if (!d) return '';\n const h = String(d.getHours()).padStart(2, '0');\n const m = String(d.getMinutes()).padStart(2, '0');\n return `${h}:${m}`;\n}\n\n/** Parse \"HH:MM\" → { hours, minutes }. Returns null for invalid input. */\nexport function parseISOTime(s: string | null | undefined): { hours: number; minutes: number } | null {\n if (!s) return null;\n const m = /^(\\d{2}):(\\d{2})$/.exec(s);\n if (!m) return null;\n const [, h, mi] = m;\n if (!h || !mi) return null;\n const hours = Number(h);\n const minutes = Number(mi);\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;\n return { hours, minutes };\n}\n\nexport function clampDate(d: Date, min?: Date | null, max?: Date | null): Date {\n if (min && d < min) return min;\n if (max && d > max) return max;\n return d;\n}\n\nexport function isDateDisabled(\n d: Date,\n options: { min?: Date | null; max?: Date | null; isDisabled?: (d: Date) => boolean },\n): boolean {\n const { min, max, isDisabled } = options;\n if (min && startOfDay(d) < startOfDay(min)) return true;\n if (max && startOfDay(d) > startOfDay(max)) return true;\n if (isDisabled?.(d)) return true;\n return false;\n}\n\nexport function isInRange(\n d: Date,\n start: Date | null | undefined,\n end: Date | null | undefined,\n): boolean {\n if (!start || !end) return false;\n const t = startOfDay(d).getTime();\n const s = startOfDay(start).getTime();\n const e = startOfDay(end).getTime();\n return t >= Math.min(s, e) && t <= Math.max(s, e);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { useId as useId$1, useScrollLock } from './chunk-LGTGZ3RW.js';
2
- import { useComposedRefs, cn, composeRefs } from './chunk-X2MYOHOB.js';
1
+ import { useId as useId$1, useScrollLock } from './chunk-F4HGQMUI.js';
2
+ import { useComposedRefs, cn, composeRefs } from './chunk-D4ZT36AZ.js';
3
3
  import { __export } from './chunk-DCHYNTHI.js';
4
4
  import { forwardRef, isValidElement, Children, cloneElement, useState, useEffect, useRef, createContext, useContext, useCallback, useMemo, useId } from 'react';
5
5
  import { createPortal } from 'react-dom';
@@ -543,5 +543,5 @@ function useColorMode() {
543
543
  }
544
544
 
545
545
  export { AccessibleIcon, AnchoredPositioner, Announce, ColorModeProvider, DirectionProvider, DismissableLayer, FocusScope, FormControlProvider, OverlayArrow, Portal, Presence, RovingFocusGroup, ScrollLockProvider, Slot, VisuallyHidden, createCollection, primitives_exports, useColorMode, useDirection, useFormControl, useRovingFocusItem };
546
- //# sourceMappingURL=chunk-XLYJF3HC.js.map
547
- //# sourceMappingURL=chunk-XLYJF3HC.js.map
546
+ //# sourceMappingURL=chunk-B4X7XXSM.js.map
547
+ //# sourceMappingURL=chunk-B4X7XXSM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/index.ts","../src/primitives/slot/Slot.tsx","../src/primitives/portal/Portal.tsx","../src/primitives/visuallyHidden/VisuallyHidden.tsx","../src/primitives/presence/Presence.tsx","../src/primitives/directionProvider/DirectionProvider.tsx","../src/primitives/accessibleIcon/AccessibleIcon.tsx","../src/primitives/focusScope/FocusScope.tsx","../src/primitives/dismissableLayer/DismissableLayer.tsx","../src/primitives/anchoredPositioner/AnchoredPositioner.tsx","../src/primitives/rovingFocusGroup/RovingFocusGroup.tsx","../src/primitives/collection/Collection.tsx","../src/primitives/formControlContext/FormControlContext.tsx","../src/primitives/scrollLockProvider/ScrollLockProvider.tsx","../src/primitives/overlayArrow/OverlayArrow.tsx","../src/primitives/announce/Announce.tsx","../src/primitives/colorModeProvider/ColorModeProvider.tsx"],"names":["forwardRef","jsx","useState","isValidElement","useEffect","cloneElement","RadixFocusScope","useRef","offset","offsetMiddleware","sizeMiddleware","createContext","RovingFocusGroup","useContext","useId","useCallback","useMemo","Fragment","OverlayArrow"],"mappings":"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","file":"chunk-XLYJF3HC.js","sourcesContent":["// L2 — headless primitives. Behavior + a11y, no visual styling beyond layout.\n// Foundation layer; cannot import upward (enforced by ESLint boundaries).\n\nexport * from './slot';\nexport * from './portal';\nexport * from './visuallyHidden';\nexport * from './presence';\nexport * from './directionProvider';\nexport * from './accessibleIcon';\nexport * from './focusScope';\nexport * from './dismissableLayer';\nexport * from './anchoredPositioner';\nexport * from './rovingFocusGroup';\nexport * from './collection';\nexport * from './formControlContext';\nexport * from './scrollLockProvider';\nexport * from './overlayArrow';\nexport * from './announce';\nexport * from './colorModeProvider';\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...childProps };\n for (const key of Object.keys(slotProps)) {\n const slotVal = slotProps[key];\n const childVal = childProps[key];\n if (key === 'className') {\n merged.className = [slotVal, childVal].filter(Boolean).join(' ');\n } else if (key === 'style') {\n merged.style = { ...(slotVal as CSSProperties), ...(childVal as CSSProperties) };\n } else if (/^on[A-Z]/.test(key)) {\n const slotFn = slotVal as ((...args: unknown[]) => void) | undefined;\n const childFn = childVal as ((...args: unknown[]) => void) | undefined;\n if (slotFn && childFn) {\n merged[key] = (...args: unknown[]) => {\n childFn(...args);\n slotFn(...args);\n };\n } else if (slotFn) {\n merged[key] = slotFn;\n }\n } else if (childVal === undefined) {\n merged[key] = slotVal;\n }\n }\n return merged;\n}\n\n/**\n * Polymorphic slot — renders the single child element with the parent's props\n * merged in (className concatenated, handlers chained, refs composed).\n *\n * Use to enable an `asChild` API on a component:\n * ```tsx\n * <Button asChild><a href=\"/x\">Open</a></Button>\n * ```\n */\nexport const Slot = forwardRef<HTMLElement, SlotProps>(\n ({ children, ...slotProps }, forwardedRef) => {\n const child = isValidElement(children)\n ? (children as ReactElement<AnyProps> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(forwardedRef, child?.ref);\n if (!child) {\n return Children.count(children) > 1 ? Children.only(null) : null;\n }\n const merged = mergeProps(slotProps as AnyProps, (child.props ?? {}) as AnyProps);\n return cloneElement(child, {\n ...merged,\n ref: composedRef,\n });\n },\n);\nSlot.displayName = 'Slot';\n","import { useEffect, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Container to render into. Default: `document.body`. */\n container?: HTMLElement | null;\n /** Optional named layer — sets `data-portal-name` on the wrapper. */\n name?: string;\n}\n\n/**\n * Render children into a different DOM node (default `document.body`).\n * SSR-inert — renders nothing on the server, portals in after mount on the client.\n */\nexport function Portal({ children, container, name }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n const target = container ?? document.body;\n return createPortal(<div data-portal-name={name}>{children}</div>, target);\n}\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type VisuallyHiddenProps = HTMLAttributes<HTMLSpanElement>;\n\n/**\n * Visually hidden span — content removed from the visual layout but still\n * announced to screen readers. Use for accessible labels on icon-only\n * affordances and live-region announcements.\n */\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...props}\n />\n ),\n);\nVisuallyHidden.displayName = 'VisuallyHidden';\n","import {\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface PresenceProps {\n /** Whether the content should be present. Toggle false to trigger exit. */\n isPresent: boolean;\n /** Single React element child — receives `ref` and `data-state` (\"open\" | \"closed\"). */\n children: ReactElement;\n}\n\nfunction parseTimes(value: string): number[] {\n return value.split(',').map((part) => {\n const trimmed = part.trim();\n const ms = trimmed.endsWith('ms') ? parseFloat(trimmed) : parseFloat(trimmed) * 1000;\n return Number.isFinite(ms) ? ms : 0;\n });\n}\n\n/** Longest computed transition/animation (duration + delay) in ms. */\nfunction getTotalDurationMs(node: HTMLElement): number {\n const cs = getComputedStyle(node);\n const maxOf = (durations: number[], delays: number[]) =>\n durations.reduce(\n (max, duration, i) => Math.max(max, duration + (delays[i % delays.length] ?? 0)),\n 0,\n );\n return Math.max(\n maxOf(parseTimes(cs.transitionDuration), parseTimes(cs.transitionDelay)),\n maxOf(parseTimes(cs.animationDuration), parseTimes(cs.animationDelay)),\n );\n}\n\n/**\n * Defer unmount until the child's exit animation/transition finishes.\n * Pass `isPresent={false}` to start the exit; the child stays mounted with\n * `data-state=\"closed\"` until its own `animationend`/`transitionend` fires\n * (or a computed-duration timeout as a fallback). If no exit animation\n * actually starts, the child unmounts immediately. On enter, the child\n * mounts with `data-state=\"closed\"` and flips to `\"open\"` on the next\n * frame so enter transitions play.\n */\nexport function Presence({ isPresent, children }: PresenceProps): ReactElement | null {\n const [rendered, setRendered] = useState(isPresent);\n const [dataState, setDataState] = useState<'open' | 'closed'>('closed');\n const ref = useRef<HTMLElement | null>(null);\n\n const child = isValidElement(children)\n ? (children as ReactElement<{ ref?: Ref<HTMLElement> }> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(ref, child?.ref);\n\n // Enter — mount closed, then flip to open on the next frame (double rAF\n // so the closed styles are committed and painted first) to run transitions.\n useEffect(() => {\n if (!isPresent) return;\n if (!rendered) {\n setRendered(true);\n return;\n }\n if (dataState === 'open') return;\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setDataState('open'));\n });\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n };\n }, [isPresent, rendered, dataState]);\n\n // Exit — flip to closed, then unmount when the child's own exit\n // animation/transition ends; immediately if none starts within a frame\n // window; or after the computed total duration as a safety net.\n useEffect(() => {\n if (isPresent) return;\n const node = ref.current;\n if (!node) {\n setRendered(false);\n return;\n }\n let started = false;\n let timer: number | undefined;\n let raf2 = 0;\n const onStart = (event: Event) => {\n if (event.target === node) started = true;\n };\n const onEnd = (event: Event) => {\n if (event.target === node) setRendered(false);\n };\n node.addEventListener('animationstart', onStart);\n node.addEventListener('transitionrun', onStart);\n node.addEventListener('animationend', onEnd);\n node.addEventListener('transitionend', onEnd);\n // Flip the DOM synchronously so the start-detection window below is\n // deterministic; React re-renders to the same value via setDataState.\n node.setAttribute('data-state', 'closed');\n setDataState('closed');\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n const animating = started || (node.getAnimations?.().length ?? 0) > 0;\n if (!animating) {\n setRendered(false);\n return;\n }\n timer = window.setTimeout(() => setRendered(false), getTotalDurationMs(node) + 100);\n });\n });\n return () => {\n node.removeEventListener('animationstart', onStart);\n node.removeEventListener('transitionrun', onStart);\n node.removeEventListener('animationend', onEnd);\n node.removeEventListener('transitionend', onEnd);\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n if (timer !== undefined) window.clearTimeout(timer);\n };\n }, [isPresent]);\n\n if (!rendered || !child) return null;\n return cloneElement(child, {\n ref: composedRef,\n 'data-state': dataState,\n } as Partial<typeof child.props>);\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nconst DirectionContext = createContext<Direction>('ltr');\n\nexport interface DirectionProviderProps {\n dir: Direction;\n children: ReactNode;\n}\n\n/**\n * Provide reading direction to descendants. Components that mirror in RTL\n * (Tabs arrow keys, Slider, Carousel, etc.) read this via `useDirection()`.\n */\nexport function DirectionProvider({ dir, children }: DirectionProviderProps) {\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n}\n\nexport function useDirection(): Direction {\n return useContext(DirectionContext);\n}\n","import { cloneElement, isValidElement, type ReactElement } from 'react';\nimport { VisuallyHidden } from '../visuallyHidden/VisuallyHidden';\n\nexport interface AccessibleIconProps {\n /** Required accessible label for the icon. */\n label: string;\n /** Single icon element — will receive `aria-hidden` so SR reads only the label. */\n children: ReactElement;\n}\n\n/**\n * Wrap an icon-only element with an accessible label. The icon is hidden\n * from assistive tech and a `VisuallyHidden` sibling provides the label.\n */\nexport function AccessibleIcon({ label, children }: AccessibleIconProps) {\n const icon = isValidElement(children)\n ? cloneElement(children as ReactElement<{ 'aria-hidden'?: boolean | string; focusable?: string }>, {\n 'aria-hidden': 'true',\n focusable: 'false',\n })\n : children;\n return (\n <>\n {icon}\n <VisuallyHidden>{label}</VisuallyHidden>\n </>\n );\n}\n","import { FocusScope as RadixFocusScope } from '@radix-ui/react-focus-scope';\n\nexport type FocusScopeProps = React.ComponentProps<typeof RadixFocusScope>;\n\n/**\n * Trap focus within children. On unmount, returns focus to the previously\n * focused element. Pass `loop` to wrap Tab navigation; `trapped` to enable\n * the trap (default true while mounted).\n *\n * Wraps `@radix-ui/react-focus-scope` — battle-tested implementation.\n */\nexport const FocusScope = RadixFocusScope;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\ninterface LayerEntry {\n node: HTMLElement;\n onEscape?: (event: KeyboardEvent) => void;\n onOutsidePointerDown?: (event: PointerEvent) => void;\n}\n\nconst layerStack: LayerEntry[] = [];\n\nexport interface DismissableLayerProps extends HTMLAttributes<HTMLDivElement> {\n /** Called when Escape is pressed and this is the topmost layer. */\n onEscape?: (event: KeyboardEvent) => void;\n /** Called when a pointerdown lands outside this layer's DOM and this is topmost. */\n onOutsidePointerDown?: (event: PointerEvent) => void;\n /** Disable the Escape listener for this layer. */\n isEscapeDisabled?: boolean;\n /** Disable the outside-pointer-down listener for this layer. */\n isOutsideClickDisabled?: boolean;\n}\n\n/**\n * Stack-aware dismissal layer. Multiple layers may stack (modal > popover);\n * only the topmost reacts to Escape / outside click. Used as the base of\n * Modal, Drawer, Popover, Menu, HoverCard, ContextMenu.\n */\nexport const DismissableLayer = forwardRef<HTMLDivElement, DismissableLayerProps>(\n (\n { onEscape, onOutsidePointerDown, isEscapeDisabled, isOutsideClickDisabled, ...props },\n forwardedRef,\n ) => {\n const ref = useRef<HTMLDivElement | null>(null);\n\n // Keep callbacks in refs so registration runs once on mount; re-registering\n // on identity change would reorder the stack and corrupt dismissal ordering.\n const onEscapeRef = useRef(onEscape);\n const onOutsidePointerDownRef = useRef(onOutsidePointerDown);\n useEffect(() => {\n onEscapeRef.current = onEscape;\n onOutsidePointerDownRef.current = onOutsidePointerDown;\n });\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n const entry: LayerEntry = {\n node,\n onEscape: (event) => onEscapeRef.current?.(event),\n onOutsidePointerDown: (event) => onOutsidePointerDownRef.current?.(event),\n };\n layerStack.push(entry);\n return () => {\n const idx = layerStack.indexOf(entry);\n if (idx >= 0) layerStack.splice(idx, 1);\n };\n }, []);\n\n useEffect(() => {\n if (isEscapeDisabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n const top = layerStack[layerStack.length - 1];\n if (top && top.node === ref.current) top.onEscape?.(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [isEscapeDisabled]);\n\n useEffect(() => {\n if (isOutsideClickDisabled) return;\n const onPointer = (e: PointerEvent) => {\n const top = layerStack[layerStack.length - 1];\n if (!top || top.node !== ref.current) return;\n const target = e.target as Node | null;\n if (!target || ref.current?.contains(target)) return;\n top.onOutsidePointerDown?.(e);\n };\n document.addEventListener('pointerdown', onPointer, true);\n return () => document.removeEventListener('pointerdown', onPointer, true);\n }, [isOutsideClickDisabled]);\n\n const composedRef = useComposedRefs(forwardedRef, ref);\n return <div ref={composedRef} {...props} />;\n },\n);\nDismissableLayer.displayName = 'DismissableLayer';\n","import {\n autoUpdate,\n flip,\n offset as offsetMiddleware,\n shift,\n size as sizeMiddleware,\n useFloating,\n type Placement,\n} from '@floating-ui/react';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { composeRefs } from '../../utils/composeRefs';\n\nexport interface AnchoredPositionerProps extends HTMLAttributes<HTMLDivElement> {\n /** The element the floating layer should be anchored to. */\n anchor: HTMLElement | null;\n /** Floating UI placement. Default `bottom`. */\n placement?: Placement;\n /** Distance between anchor and floating element in px. Default 8. */\n offset?: number;\n /** Render the floating element only when open. */\n isOpen?: boolean;\n children: ReactNode;\n}\n\n/**\n * Position children relative to an anchor element using Floating UI.\n * Auto-flips and shifts to stay in viewport. Use as the positioning surface\n * for Tooltip, Popover, Menu, HoverCard.\n *\n * Exposes the anchor's measured size as CSS variables on the floating\n * element, enabling consumers to size content relative to the trigger:\n *\n * style=\"--anchor-width: 240px; --anchor-height: 36px;\"\n *\n * Common pattern: `min-w-[var(--anchor-width)]` on a Select dropdown so\n * the panel never narrows below the trigger.\n */\nexport const AnchoredPositioner = forwardRef<HTMLDivElement, AnchoredPositionerProps>(\n (\n { anchor, placement = 'bottom', offset = 8, isOpen = true, children, style, ...props },\n forwardedRef,\n ) => {\n const { refs, floatingStyles } = useFloating({\n open: isOpen,\n placement,\n middleware: [\n offsetMiddleware(offset),\n flip(),\n shift({ padding: 8 }),\n sizeMiddleware({\n apply({ rects, elements }) {\n elements.floating.style.setProperty('--anchor-width', `${rects.reference.width}px`);\n elements.floating.style.setProperty(\n '--anchor-height',\n `${rects.reference.height}px`,\n );\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n elements: { reference: anchor },\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={composeRefs(forwardedRef, refs.setFloating)}\n style={{ ...floatingStyles, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nAnchoredPositioner.displayName = 'AnchoredPositioner';\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\nimport { useDirection } from '../directionProvider';\n\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\ninterface ItemEntry {\n id: string;\n node: HTMLElement | null;\n}\n\ninterface RovingFocusContextValue {\n register: (id: string, node: HTMLElement | null) => void;\n unregister: (id: string) => void;\n focusedId: string | null;\n setFocusedId: (id: string) => void;\n onItemKeyDown: (event: KeyboardEvent, id: string) => void;\n /** True once the user has interacted with the group; reset when focus leaves. */\n interactedRef: RefObject<boolean>;\n groupRef: RefObject<HTMLDivElement | null>;\n}\n\nconst RovingFocusContext = createContext<RovingFocusContextValue | null>(null);\n\nexport interface RovingFocusGroupProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: Orientation;\n canLoop?: boolean;\n children: ReactNode;\n}\n\n/**\n * Provide arrow-key navigation for a group of focusable children. Children\n * call `useRovingFocusItem()` to register and receive `tabIndex` / event\n * handlers. Used by Tabs, ToggleGroup, RadioGroup, Menu.\n */\nexport const RovingFocusGroup = forwardRef<HTMLDivElement, RovingFocusGroupProps>(\n function RovingFocusGroup(\n { orientation = 'horizontal', canLoop = true, children, ...props },\n ref,\n ) {\n const items = useRef<ItemEntry[]>([]);\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const interactedRef = useRef(false);\n const groupRef = useRef<HTMLDivElement | null>(null);\n const composedRef = useComposedRefs(ref, groupRef);\n const direction = useDirection();\n\n const register = useCallback((id: string, node: HTMLElement | null) => {\n if (!items.current.some((item) => item.id === id)) {\n const entry: ItemEntry = { id, node };\n // Insert by DOM order (not mount order) so dynamically inserted\n // items navigate in visual order.\n const index = node\n ? items.current.findIndex(\n (item) =>\n item.node !== null &&\n (node.compareDocumentPosition(item.node) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0,\n )\n : -1;\n if (index === -1) items.current.push(entry);\n else items.current.splice(index, 0, entry);\n }\n setFocusedId((current) => current ?? id);\n }, []);\n\n const unregister = useCallback((id: string) => {\n const idx = items.current.findIndex((item) => item.id === id);\n items.current = items.current.filter((item) => item.id !== id);\n // If the tab stop unmounts, advance to the next remaining item (or\n // the first) so the group keeps exactly one tabbable item.\n setFocusedId((current) => {\n if (current !== id) return current;\n const next = items.current[idx] ?? items.current[0];\n return next ? next.id : null;\n });\n }, []);\n\n // Reset the interaction flag when focus leaves the group so tab-stop\n // bookkeeping (focusedId updates) never steals focus back.\n useEffect(() => {\n const node = groupRef.current;\n if (!node) return;\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !node.contains(next)) interactedRef.current = false;\n };\n node.addEventListener('focusout', onFocusOut);\n return () => node.removeEventListener('focusout', onFocusOut);\n }, []);\n\n const onItemKeyDown = useCallback(\n (event: KeyboardEvent, id: string) => {\n const list = items.current;\n const idx = list.findIndex((item) => item.id === id);\n if (idx === -1) return;\n const isVert = orientation === 'vertical' || orientation === 'both';\n const isHoriz = orientation === 'horizontal' || orientation === 'both';\n // Horizontal arrows mirror in RTL.\n const nextHorizKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n const prevHorizKey = direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n let next = idx;\n if ((event.key === nextHorizKey && isHoriz) || (event.key === 'ArrowDown' && isVert)) {\n next = idx + 1;\n if (next >= list.length) next = canLoop ? 0 : list.length - 1;\n } else if ((event.key === prevHorizKey && isHoriz) || (event.key === 'ArrowUp' && isVert)) {\n next = idx - 1;\n if (next < 0) next = canLoop ? list.length - 1 : 0;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = list.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n interactedRef.current = true;\n const entry = list[next];\n if (entry) setFocusedId(entry.id);\n },\n [orientation, canLoop, direction],\n );\n\n const value = useMemo(\n () => ({\n register,\n unregister,\n focusedId,\n setFocusedId,\n onItemKeyDown,\n interactedRef,\n groupRef,\n }),\n [register, unregister, focusedId, onItemKeyDown],\n );\n\n return (\n <RovingFocusContext.Provider value={value}>\n <div ref={composedRef} role=\"group\" {...props}>\n {children}\n </div>\n </RovingFocusContext.Provider>\n );\n },\n);\n\nexport interface UseRovingFocusItemOptions {\n /** Preferred tab stop while focus is outside the group (e.g. the selected tab) — APG composite-widget pattern. */\n isActive?: boolean;\n}\n\nexport interface UseRovingFocusItemReturn {\n ref: (node: HTMLElement | null) => void;\n tabIndex: 0 | -1;\n onKeyDown: (event: KeyboardEvent) => void;\n onFocus: () => void;\n 'data-roving-focus-item': boolean;\n}\n\n/**\n * Inside a `RovingFocusGroup`, returns props to spread onto a focusable item.\n * Outside, returns inert props (tabIndex 0).\n */\nexport function useRovingFocusItem(\n options: UseRovingFocusItemOptions = {},\n): UseRovingFocusItemReturn {\n const { isActive = false } = options;\n const context = useContext(RovingFocusContext);\n const id = useId();\n const ref = useRef<HTMLElement | null>(null);\n\n const register = context?.register;\n const unregister = context?.unregister;\n useEffect(() => {\n register?.(id, ref.current);\n return () => unregister?.(id);\n }, [register, unregister, id]);\n\n // Move DOM focus only after user interaction — never on initial mount.\n const focusedId = context?.focusedId;\n const interactedRef = context?.interactedRef;\n useEffect(() => {\n if (\n focusedId === id &&\n interactedRef?.current &&\n ref.current &&\n document.activeElement !== ref.current\n ) {\n ref.current.focus();\n }\n }, [focusedId, interactedRef, id]);\n\n // Keep the active item (e.g. selected tab) as the tab stop whenever focus\n // is outside the group.\n const setFocusedId = context?.setFocusedId;\n const groupRef = context?.groupRef;\n useEffect(() => {\n if (!isActive || !setFocusedId || !groupRef) return;\n const groupNode = groupRef.current;\n if (!groupNode || !groupNode.contains(document.activeElement)) setFocusedId(id);\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !groupNode?.contains(next)) setFocusedId(id);\n };\n groupNode?.addEventListener('focusout', onFocusOut);\n return () => groupNode?.removeEventListener('focusout', onFocusOut);\n }, [isActive, setFocusedId, groupRef, id]);\n\n return {\n ref: (node) => {\n ref.current = node;\n },\n tabIndex: !context || context.focusedId === id ? 0 : -1,\n onKeyDown: (e) => context?.onItemKeyDown(e, id),\n onFocus: () => {\n if (!context) return;\n context.interactedRef.current = true;\n context.setFocusedId(id);\n },\n 'data-roving-focus-item': true,\n };\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type Context,\n type ReactNode,\n} from 'react';\n\nexport interface CollectionContextValue<T> {\n items: T[];\n register: (item: T) => void;\n unregister: (item: T) => void;\n}\n\n/**\n * Factory for a typed children-registry context. Compound components\n * (Menu, Tabs, Listbox) use this so the parent can iterate ordered children\n * without prop-drilling.\n */\nexport function createCollection<T>(): {\n Provider: (props: { children: ReactNode }) => ReactNode;\n useCollection: () => CollectionContextValue<T>;\n Context: Context<CollectionContextValue<T> | null>;\n} {\n const CollectionContext = createContext<CollectionContextValue<T> | null>(null);\n\n function Provider({ children }: { children: ReactNode }) {\n const [items, setItems] = useState<T[]>([]);\n const register = useCallback((item: T) => {\n setItems((prev) => (prev.includes(item) ? prev : [...prev, item]));\n }, []);\n const unregister = useCallback((item: T) => {\n setItems((prev) => prev.filter((i) => i !== item));\n }, []);\n const value = useMemo(() => ({ items, register, unregister }), [items, register, unregister]);\n return <CollectionContext.Provider value={value}>{children}</CollectionContext.Provider>;\n }\n\n function useCollection(): CollectionContextValue<T> {\n const ctx = useContext(CollectionContext);\n if (!ctx) {\n throw new Error('useCollection must be used inside its Provider');\n }\n return ctx;\n }\n\n return { Provider, useCollection, Context: CollectionContext };\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport { useId } from '../../hooks/useId';\n\nexport interface FormControlContextValue {\n id: string;\n labelId: string;\n helperId: string;\n errorId: string;\n isInvalid: boolean;\n isDisabled: boolean;\n isRequired: boolean;\n isReadOnly: boolean;\n}\n\nconst Context = createContext<FormControlContextValue | null>(null);\n\nexport interface FormControlProviderProps {\n /** Override the auto-generated id (also used as control's `id`). */\n id?: string;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n isReadOnly?: boolean;\n children: ReactNode;\n}\n\n/**\n * Wires Label ↔ control ↔ HelperText/ErrorMessage via stable IDs and shared\n * state flags. Used by `FormField` (L4) — atoms (Input, Label, etc.) read\n * via `useFormControl()` to get the right `id`/`htmlFor`/`aria-describedby`.\n */\nexport function FormControlProvider({\n id: providedId,\n isInvalid = false,\n isDisabled = false,\n isRequired = false,\n isReadOnly = false,\n children,\n}: FormControlProviderProps) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const value: FormControlContextValue = {\n id,\n labelId: `${id}-label`,\n helperId: `${id}-helper`,\n errorId: `${id}-error`,\n isInvalid,\n isDisabled,\n isRequired,\n isReadOnly,\n };\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\n/**\n * Read the surrounding form-control context. Returns `null` when used\n * outside a provider — atoms gracefully degrade to standalone mode.\n */\nexport function useFormControl(): FormControlContextValue | null {\n return useContext(Context);\n}\n","import { type ReactNode } from 'react';\nimport { useScrollLock } from '../../hooks/useScrollLock';\n\nexport interface ScrollLockProviderProps {\n isEnabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Component wrapper around `useScrollLock` — handy when scroll lock should\n * follow a child's mount lifecycle (e.g. inside a Modal's portal).\n * Multiple wrappers stack; lock releases when the count reaches zero.\n */\nexport function ScrollLockProvider({ isEnabled = true, children }: ScrollLockProviderProps) {\n useScrollLock(isEnabled);\n return <>{children}</>;\n}\n","import { forwardRef, type SVGAttributes } from 'react';\n\nexport interface OverlayArrowProps extends SVGAttributes<SVGSVGElement> {\n /** Arrow width in px. Default 12. */\n width?: number;\n /** Arrow height in px. Default 6. */\n height?: number;\n}\n\n/**\n * Tip-arrow primitive for floating overlays (Tooltip, Popover, HoverCard).\n *\n * Renders a minimal SVG triangle with `fill=\"currentColor\"` — color follows\n * the consuming overlay's background via Tailwind's `text-*` utilities.\n *\n * Pair with Floating UI's `arrow()` middleware to position. The middleware\n * exposes the arrow's `x` / `y` offset on the resolved data; consumers apply\n * those as inline styles to the wrapping span.\n */\nexport const OverlayArrow = forwardRef<SVGSVGElement, OverlayArrowProps>(\n function OverlayArrow({ width = 12, height = 6, fill = 'currentColor', ...rest }, ref) {\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n {...rest}\n >\n <polygon points={`0,0 ${width},0 ${width / 2},${height}`} fill={fill} />\n </svg>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AnnounceProps extends HTMLAttributes<HTMLDivElement> {\n /** `polite` → `role=\"status\"`, `assertive` → `role=\"alert\"`. Default `polite`. */\n politeness?: 'polite' | 'assertive';\n children?: ReactNode;\n}\n\n/**\n * Visually-hidden ARIA live region. Children are announced by screen readers\n * whenever they change. Pair with a stable mount + swappable children for\n * lightweight transient announcements (status updates, toast messages, etc.).\n */\nexport const Announce = forwardRef<HTMLDivElement, AnnounceProps>(\n ({ politeness = 'polite', className, children, ...rest }, ref) => (\n <div\n ref={ref}\n role={politeness === 'assertive' ? 'alert' : 'status'}\n aria-live={politeness}\n aria-atomic=\"true\"\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n ),\n);\nAnnounce.displayName = 'Announce';\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nexport type ColorMode = 'light' | 'dark';\n\ninterface ColorModeContextValue {\n mode: ColorMode;\n setMode: (mode: ColorMode) => void;\n toggle: () => void;\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null);\n\nconst systemMode = (): ColorMode =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n\nexport interface ColorModeProviderProps {\n children: ReactNode;\n /** Mode used when nothing is persisted. `'system'` follows the OS preference. Default `'system'`. */\n defaultMode?: ColorMode | 'system';\n /** `localStorage` key for persistence; pass `null` to disable. Default `'wow-color-mode'`. */\n storageKey?: string | null;\n}\n\n/**\n * Owns the app's light/dark mode: toggles the `dark` class on `<html>` (which flips every semantic\n * token) + sets `color-scheme`, persists the choice, and falls back to the OS preference. Wrap the\n * app once; read via `useColorMode()`. This is the canonical `.dark` mechanism for the design tokens.\n */\nexport function ColorModeProvider({\n children,\n defaultMode = 'system',\n storageKey = 'wow-color-mode',\n}: ColorModeProviderProps) {\n const [mode, setModeState] = useState<ColorMode>(() => {\n if (typeof window === 'undefined') return 'light';\n const stored = storageKey ? (localStorage.getItem(storageKey) as ColorMode | null) : null;\n if (stored === 'light' || stored === 'dark') return stored;\n return defaultMode === 'system' ? systemMode() : defaultMode;\n });\n\n useEffect(() => {\n const root = document.documentElement;\n root.classList.toggle('dark', mode === 'dark');\n root.style.colorScheme = mode;\n }, [mode]);\n\n const setMode = useCallback(\n (next: ColorMode) => {\n setModeState(next);\n if (storageKey) localStorage.setItem(storageKey, next);\n },\n [storageKey],\n );\n\n const value = useMemo<ColorModeContextValue>(\n () => ({ mode, setMode, toggle: () => setMode(mode === 'dark' ? 'light' : 'dark') }),\n [mode, setMode],\n );\n\n return <ColorModeContext.Provider value={value}>{children}</ColorModeContext.Provider>;\n}\n\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext);\n if (!ctx) throw new Error('useColorMode must be used within a <ColorModeProvider>.');\n return ctx;\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/index.ts","../src/primitives/slot/Slot.tsx","../src/primitives/portal/Portal.tsx","../src/primitives/visuallyHidden/VisuallyHidden.tsx","../src/primitives/presence/Presence.tsx","../src/primitives/directionProvider/DirectionProvider.tsx","../src/primitives/accessibleIcon/AccessibleIcon.tsx","../src/primitives/focusScope/FocusScope.tsx","../src/primitives/dismissableLayer/DismissableLayer.tsx","../src/primitives/anchoredPositioner/AnchoredPositioner.tsx","../src/primitives/rovingFocusGroup/RovingFocusGroup.tsx","../src/primitives/collection/Collection.tsx","../src/primitives/formControlContext/FormControlContext.tsx","../src/primitives/scrollLockProvider/ScrollLockProvider.tsx","../src/primitives/overlayArrow/OverlayArrow.tsx","../src/primitives/announce/Announce.tsx","../src/primitives/colorModeProvider/ColorModeProvider.tsx"],"names":["forwardRef","jsx","useState","isValidElement","useEffect","cloneElement","RadixFocusScope","useRef","offset","offsetMiddleware","sizeMiddleware","createContext","RovingFocusGroup","useContext","useId","useCallback","useMemo","Fragment","OverlayArrow"],"mappings":"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","file":"chunk-B4X7XXSM.js","sourcesContent":["// L2 — headless primitives. Behavior + a11y, no visual styling beyond layout.\n// Foundation layer; cannot import upward (enforced by ESLint boundaries).\n\nexport * from './slot';\nexport * from './portal';\nexport * from './visuallyHidden';\nexport * from './presence';\nexport * from './directionProvider';\nexport * from './accessibleIcon';\nexport * from './focusScope';\nexport * from './dismissableLayer';\nexport * from './anchoredPositioner';\nexport * from './rovingFocusGroup';\nexport * from './collection';\nexport * from './formControlContext';\nexport * from './scrollLockProvider';\nexport * from './overlayArrow';\nexport * from './announce';\nexport * from './colorModeProvider';\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...childProps };\n for (const key of Object.keys(slotProps)) {\n const slotVal = slotProps[key];\n const childVal = childProps[key];\n if (key === 'className') {\n merged.className = [slotVal, childVal].filter(Boolean).join(' ');\n } else if (key === 'style') {\n merged.style = { ...(slotVal as CSSProperties), ...(childVal as CSSProperties) };\n } else if (/^on[A-Z]/.test(key)) {\n const slotFn = slotVal as ((...args: unknown[]) => void) | undefined;\n const childFn = childVal as ((...args: unknown[]) => void) | undefined;\n if (slotFn && childFn) {\n merged[key] = (...args: unknown[]) => {\n childFn(...args);\n slotFn(...args);\n };\n } else if (slotFn) {\n merged[key] = slotFn;\n }\n } else if (childVal === undefined) {\n merged[key] = slotVal;\n }\n }\n return merged;\n}\n\n/**\n * Polymorphic slot — renders the single child element with the parent's props\n * merged in (className concatenated, handlers chained, refs composed).\n *\n * Use to enable an `asChild` API on a component:\n * ```tsx\n * <Button asChild><a href=\"/x\">Open</a></Button>\n * ```\n */\nexport const Slot = forwardRef<HTMLElement, SlotProps>(\n ({ children, ...slotProps }, forwardedRef) => {\n const child = isValidElement(children)\n ? (children as ReactElement<AnyProps> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(forwardedRef, child?.ref);\n if (!child) {\n return Children.count(children) > 1 ? Children.only(null) : null;\n }\n const merged = mergeProps(slotProps as AnyProps, (child.props ?? {}) as AnyProps);\n return cloneElement(child, {\n ...merged,\n ref: composedRef,\n });\n },\n);\nSlot.displayName = 'Slot';\n","import { useEffect, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Container to render into. Default: `document.body`. */\n container?: HTMLElement | null;\n /** Optional named layer — sets `data-portal-name` on the wrapper. */\n name?: string;\n}\n\n/**\n * Render children into a different DOM node (default `document.body`).\n * SSR-inert — renders nothing on the server, portals in after mount on the client.\n */\nexport function Portal({ children, container, name }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n const target = container ?? document.body;\n return createPortal(<div data-portal-name={name}>{children}</div>, target);\n}\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type VisuallyHiddenProps = HTMLAttributes<HTMLSpanElement>;\n\n/**\n * Visually hidden span — content removed from the visual layout but still\n * announced to screen readers. Use for accessible labels on icon-only\n * affordances and live-region announcements.\n */\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...props}\n />\n ),\n);\nVisuallyHidden.displayName = 'VisuallyHidden';\n","import {\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface PresenceProps {\n /** Whether the content should be present. Toggle false to trigger exit. */\n isPresent: boolean;\n /** Single React element child — receives `ref` and `data-state` (\"open\" | \"closed\"). */\n children: ReactElement;\n}\n\nfunction parseTimes(value: string): number[] {\n return value.split(',').map((part) => {\n const trimmed = part.trim();\n const ms = trimmed.endsWith('ms') ? parseFloat(trimmed) : parseFloat(trimmed) * 1000;\n return Number.isFinite(ms) ? ms : 0;\n });\n}\n\n/** Longest computed transition/animation (duration + delay) in ms. */\nfunction getTotalDurationMs(node: HTMLElement): number {\n const cs = getComputedStyle(node);\n const maxOf = (durations: number[], delays: number[]) =>\n durations.reduce(\n (max, duration, i) => Math.max(max, duration + (delays[i % delays.length] ?? 0)),\n 0,\n );\n return Math.max(\n maxOf(parseTimes(cs.transitionDuration), parseTimes(cs.transitionDelay)),\n maxOf(parseTimes(cs.animationDuration), parseTimes(cs.animationDelay)),\n );\n}\n\n/**\n * Defer unmount until the child's exit animation/transition finishes.\n * Pass `isPresent={false}` to start the exit; the child stays mounted with\n * `data-state=\"closed\"` until its own `animationend`/`transitionend` fires\n * (or a computed-duration timeout as a fallback). If no exit animation\n * actually starts, the child unmounts immediately. On enter, the child\n * mounts with `data-state=\"closed\"` and flips to `\"open\"` on the next\n * frame so enter transitions play.\n */\nexport function Presence({ isPresent, children }: PresenceProps): ReactElement | null {\n const [rendered, setRendered] = useState(isPresent);\n const [dataState, setDataState] = useState<'open' | 'closed'>('closed');\n const ref = useRef<HTMLElement | null>(null);\n\n const child = isValidElement(children)\n ? (children as ReactElement<{ ref?: Ref<HTMLElement> }> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(ref, child?.ref);\n\n // Enter — mount closed, then flip to open on the next frame (double rAF\n // so the closed styles are committed and painted first) to run transitions.\n useEffect(() => {\n if (!isPresent) return;\n if (!rendered) {\n setRendered(true);\n return;\n }\n if (dataState === 'open') return;\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setDataState('open'));\n });\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n };\n }, [isPresent, rendered, dataState]);\n\n // Exit — flip to closed, then unmount when the child's own exit\n // animation/transition ends; immediately if none starts within a frame\n // window; or after the computed total duration as a safety net.\n useEffect(() => {\n if (isPresent) return;\n const node = ref.current;\n if (!node) {\n setRendered(false);\n return;\n }\n let started = false;\n let timer: number | undefined;\n let raf2 = 0;\n const onStart = (event: Event) => {\n if (event.target === node) started = true;\n };\n const onEnd = (event: Event) => {\n if (event.target === node) setRendered(false);\n };\n node.addEventListener('animationstart', onStart);\n node.addEventListener('transitionrun', onStart);\n node.addEventListener('animationend', onEnd);\n node.addEventListener('transitionend', onEnd);\n // Flip the DOM synchronously so the start-detection window below is\n // deterministic; React re-renders to the same value via setDataState.\n node.setAttribute('data-state', 'closed');\n setDataState('closed');\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n const animating = started || (node.getAnimations?.().length ?? 0) > 0;\n if (!animating) {\n setRendered(false);\n return;\n }\n timer = window.setTimeout(() => setRendered(false), getTotalDurationMs(node) + 100);\n });\n });\n return () => {\n node.removeEventListener('animationstart', onStart);\n node.removeEventListener('transitionrun', onStart);\n node.removeEventListener('animationend', onEnd);\n node.removeEventListener('transitionend', onEnd);\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n if (timer !== undefined) window.clearTimeout(timer);\n };\n }, [isPresent]);\n\n if (!rendered || !child) return null;\n return cloneElement(child, {\n ref: composedRef,\n 'data-state': dataState,\n } as Partial<typeof child.props>);\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nconst DirectionContext = createContext<Direction>('ltr');\n\nexport interface DirectionProviderProps {\n dir: Direction;\n children: ReactNode;\n}\n\n/**\n * Provide reading direction to descendants. Components that mirror in RTL\n * (Tabs arrow keys, Slider, Carousel, etc.) read this via `useDirection()`.\n */\nexport function DirectionProvider({ dir, children }: DirectionProviderProps) {\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n}\n\nexport function useDirection(): Direction {\n return useContext(DirectionContext);\n}\n","import { cloneElement, isValidElement, type ReactElement } from 'react';\nimport { VisuallyHidden } from '../visuallyHidden/VisuallyHidden';\n\nexport interface AccessibleIconProps {\n /** Required accessible label for the icon. */\n label: string;\n /** Single icon element — will receive `aria-hidden` so SR reads only the label. */\n children: ReactElement;\n}\n\n/**\n * Wrap an icon-only element with an accessible label. The icon is hidden\n * from assistive tech and a `VisuallyHidden` sibling provides the label.\n */\nexport function AccessibleIcon({ label, children }: AccessibleIconProps) {\n const icon = isValidElement(children)\n ? cloneElement(children as ReactElement<{ 'aria-hidden'?: boolean | string; focusable?: string }>, {\n 'aria-hidden': 'true',\n focusable: 'false',\n })\n : children;\n return (\n <>\n {icon}\n <VisuallyHidden>{label}</VisuallyHidden>\n </>\n );\n}\n","import { FocusScope as RadixFocusScope } from '@radix-ui/react-focus-scope';\n\nexport type FocusScopeProps = React.ComponentProps<typeof RadixFocusScope>;\n\n/**\n * Trap focus within children. On unmount, returns focus to the previously\n * focused element. Pass `loop` to wrap Tab navigation; `trapped` to enable\n * the trap (default true while mounted).\n *\n * Wraps `@radix-ui/react-focus-scope` — battle-tested implementation.\n */\nexport const FocusScope = RadixFocusScope;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\ninterface LayerEntry {\n node: HTMLElement;\n onEscape?: (event: KeyboardEvent) => void;\n onOutsidePointerDown?: (event: PointerEvent) => void;\n}\n\nconst layerStack: LayerEntry[] = [];\n\nexport interface DismissableLayerProps extends HTMLAttributes<HTMLDivElement> {\n /** Called when Escape is pressed and this is the topmost layer. */\n onEscape?: (event: KeyboardEvent) => void;\n /** Called when a pointerdown lands outside this layer's DOM and this is topmost. */\n onOutsidePointerDown?: (event: PointerEvent) => void;\n /** Disable the Escape listener for this layer. */\n isEscapeDisabled?: boolean;\n /** Disable the outside-pointer-down listener for this layer. */\n isOutsideClickDisabled?: boolean;\n}\n\n/**\n * Stack-aware dismissal layer. Multiple layers may stack (modal > popover);\n * only the topmost reacts to Escape / outside click. Used as the base of\n * Modal, Drawer, Popover, Menu, HoverCard, ContextMenu.\n */\nexport const DismissableLayer = forwardRef<HTMLDivElement, DismissableLayerProps>(\n (\n { onEscape, onOutsidePointerDown, isEscapeDisabled, isOutsideClickDisabled, ...props },\n forwardedRef,\n ) => {\n const ref = useRef<HTMLDivElement | null>(null);\n\n // Keep callbacks in refs so registration runs once on mount; re-registering\n // on identity change would reorder the stack and corrupt dismissal ordering.\n const onEscapeRef = useRef(onEscape);\n const onOutsidePointerDownRef = useRef(onOutsidePointerDown);\n useEffect(() => {\n onEscapeRef.current = onEscape;\n onOutsidePointerDownRef.current = onOutsidePointerDown;\n });\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n const entry: LayerEntry = {\n node,\n onEscape: (event) => onEscapeRef.current?.(event),\n onOutsidePointerDown: (event) => onOutsidePointerDownRef.current?.(event),\n };\n layerStack.push(entry);\n return () => {\n const idx = layerStack.indexOf(entry);\n if (idx >= 0) layerStack.splice(idx, 1);\n };\n }, []);\n\n useEffect(() => {\n if (isEscapeDisabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n const top = layerStack[layerStack.length - 1];\n if (top && top.node === ref.current) top.onEscape?.(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [isEscapeDisabled]);\n\n useEffect(() => {\n if (isOutsideClickDisabled) return;\n const onPointer = (e: PointerEvent) => {\n const top = layerStack[layerStack.length - 1];\n if (!top || top.node !== ref.current) return;\n const target = e.target as Node | null;\n if (!target || ref.current?.contains(target)) return;\n top.onOutsidePointerDown?.(e);\n };\n document.addEventListener('pointerdown', onPointer, true);\n return () => document.removeEventListener('pointerdown', onPointer, true);\n }, [isOutsideClickDisabled]);\n\n const composedRef = useComposedRefs(forwardedRef, ref);\n return <div ref={composedRef} {...props} />;\n },\n);\nDismissableLayer.displayName = 'DismissableLayer';\n","import {\n autoUpdate,\n flip,\n offset as offsetMiddleware,\n shift,\n size as sizeMiddleware,\n useFloating,\n type Placement,\n} from '@floating-ui/react';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { composeRefs } from '../../utils/composeRefs';\n\nexport interface AnchoredPositionerProps extends HTMLAttributes<HTMLDivElement> {\n /** The element the floating layer should be anchored to. */\n anchor: HTMLElement | null;\n /** Floating UI placement. Default `bottom`. */\n placement?: Placement;\n /** Distance between anchor and floating element in px. Default 8. */\n offset?: number;\n /** Render the floating element only when open. */\n isOpen?: boolean;\n children: ReactNode;\n}\n\n/**\n * Position children relative to an anchor element using Floating UI.\n * Auto-flips and shifts to stay in viewport. Use as the positioning surface\n * for Tooltip, Popover, Menu, HoverCard.\n *\n * Exposes the anchor's measured size as CSS variables on the floating\n * element, enabling consumers to size content relative to the trigger:\n *\n * style=\"--anchor-width: 240px; --anchor-height: 36px;\"\n *\n * Common pattern: `min-w-[var(--anchor-width)]` on a Select dropdown so\n * the panel never narrows below the trigger.\n */\nexport const AnchoredPositioner = forwardRef<HTMLDivElement, AnchoredPositionerProps>(\n (\n { anchor, placement = 'bottom', offset = 8, isOpen = true, children, style, ...props },\n forwardedRef,\n ) => {\n const { refs, floatingStyles } = useFloating({\n open: isOpen,\n placement,\n middleware: [\n offsetMiddleware(offset),\n flip(),\n shift({ padding: 8 }),\n sizeMiddleware({\n apply({ rects, elements }) {\n elements.floating.style.setProperty('--anchor-width', `${rects.reference.width}px`);\n elements.floating.style.setProperty(\n '--anchor-height',\n `${rects.reference.height}px`,\n );\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n elements: { reference: anchor },\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={composeRefs(forwardedRef, refs.setFloating)}\n style={{ ...floatingStyles, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nAnchoredPositioner.displayName = 'AnchoredPositioner';\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\nimport { useDirection } from '../directionProvider';\n\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\ninterface ItemEntry {\n id: string;\n node: HTMLElement | null;\n}\n\ninterface RovingFocusContextValue {\n register: (id: string, node: HTMLElement | null) => void;\n unregister: (id: string) => void;\n focusedId: string | null;\n setFocusedId: (id: string) => void;\n onItemKeyDown: (event: KeyboardEvent, id: string) => void;\n /** True once the user has interacted with the group; reset when focus leaves. */\n interactedRef: RefObject<boolean>;\n groupRef: RefObject<HTMLDivElement | null>;\n}\n\nconst RovingFocusContext = createContext<RovingFocusContextValue | null>(null);\n\nexport interface RovingFocusGroupProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: Orientation;\n canLoop?: boolean;\n children: ReactNode;\n}\n\n/**\n * Provide arrow-key navigation for a group of focusable children. Children\n * call `useRovingFocusItem()` to register and receive `tabIndex` / event\n * handlers. Used by Tabs, ToggleGroup, RadioGroup, Menu.\n */\nexport const RovingFocusGroup = forwardRef<HTMLDivElement, RovingFocusGroupProps>(\n function RovingFocusGroup(\n { orientation = 'horizontal', canLoop = true, children, ...props },\n ref,\n ) {\n const items = useRef<ItemEntry[]>([]);\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const interactedRef = useRef(false);\n const groupRef = useRef<HTMLDivElement | null>(null);\n const composedRef = useComposedRefs(ref, groupRef);\n const direction = useDirection();\n\n const register = useCallback((id: string, node: HTMLElement | null) => {\n if (!items.current.some((item) => item.id === id)) {\n const entry: ItemEntry = { id, node };\n // Insert by DOM order (not mount order) so dynamically inserted\n // items navigate in visual order.\n const index = node\n ? items.current.findIndex(\n (item) =>\n item.node !== null &&\n (node.compareDocumentPosition(item.node) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0,\n )\n : -1;\n if (index === -1) items.current.push(entry);\n else items.current.splice(index, 0, entry);\n }\n setFocusedId((current) => current ?? id);\n }, []);\n\n const unregister = useCallback((id: string) => {\n const idx = items.current.findIndex((item) => item.id === id);\n items.current = items.current.filter((item) => item.id !== id);\n // If the tab stop unmounts, advance to the next remaining item (or\n // the first) so the group keeps exactly one tabbable item.\n setFocusedId((current) => {\n if (current !== id) return current;\n const next = items.current[idx] ?? items.current[0];\n return next ? next.id : null;\n });\n }, []);\n\n // Reset the interaction flag when focus leaves the group so tab-stop\n // bookkeeping (focusedId updates) never steals focus back.\n useEffect(() => {\n const node = groupRef.current;\n if (!node) return;\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !node.contains(next)) interactedRef.current = false;\n };\n node.addEventListener('focusout', onFocusOut);\n return () => node.removeEventListener('focusout', onFocusOut);\n }, []);\n\n const onItemKeyDown = useCallback(\n (event: KeyboardEvent, id: string) => {\n const list = items.current;\n const idx = list.findIndex((item) => item.id === id);\n if (idx === -1) return;\n const isVert = orientation === 'vertical' || orientation === 'both';\n const isHoriz = orientation === 'horizontal' || orientation === 'both';\n // Horizontal arrows mirror in RTL.\n const nextHorizKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n const prevHorizKey = direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n let next = idx;\n if ((event.key === nextHorizKey && isHoriz) || (event.key === 'ArrowDown' && isVert)) {\n next = idx + 1;\n if (next >= list.length) next = canLoop ? 0 : list.length - 1;\n } else if ((event.key === prevHorizKey && isHoriz) || (event.key === 'ArrowUp' && isVert)) {\n next = idx - 1;\n if (next < 0) next = canLoop ? list.length - 1 : 0;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = list.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n interactedRef.current = true;\n const entry = list[next];\n if (entry) setFocusedId(entry.id);\n },\n [orientation, canLoop, direction],\n );\n\n const value = useMemo(\n () => ({\n register,\n unregister,\n focusedId,\n setFocusedId,\n onItemKeyDown,\n interactedRef,\n groupRef,\n }),\n [register, unregister, focusedId, onItemKeyDown],\n );\n\n return (\n <RovingFocusContext.Provider value={value}>\n <div ref={composedRef} role=\"group\" {...props}>\n {children}\n </div>\n </RovingFocusContext.Provider>\n );\n },\n);\n\nexport interface UseRovingFocusItemOptions {\n /** Preferred tab stop while focus is outside the group (e.g. the selected tab) — APG composite-widget pattern. */\n isActive?: boolean;\n}\n\nexport interface UseRovingFocusItemReturn {\n ref: (node: HTMLElement | null) => void;\n tabIndex: 0 | -1;\n onKeyDown: (event: KeyboardEvent) => void;\n onFocus: () => void;\n 'data-roving-focus-item': boolean;\n}\n\n/**\n * Inside a `RovingFocusGroup`, returns props to spread onto a focusable item.\n * Outside, returns inert props (tabIndex 0).\n */\nexport function useRovingFocusItem(\n options: UseRovingFocusItemOptions = {},\n): UseRovingFocusItemReturn {\n const { isActive = false } = options;\n const context = useContext(RovingFocusContext);\n const id = useId();\n const ref = useRef<HTMLElement | null>(null);\n\n const register = context?.register;\n const unregister = context?.unregister;\n useEffect(() => {\n register?.(id, ref.current);\n return () => unregister?.(id);\n }, [register, unregister, id]);\n\n // Move DOM focus only after user interaction — never on initial mount.\n const focusedId = context?.focusedId;\n const interactedRef = context?.interactedRef;\n useEffect(() => {\n if (\n focusedId === id &&\n interactedRef?.current &&\n ref.current &&\n document.activeElement !== ref.current\n ) {\n ref.current.focus();\n }\n }, [focusedId, interactedRef, id]);\n\n // Keep the active item (e.g. selected tab) as the tab stop whenever focus\n // is outside the group.\n const setFocusedId = context?.setFocusedId;\n const groupRef = context?.groupRef;\n useEffect(() => {\n if (!isActive || !setFocusedId || !groupRef) return;\n const groupNode = groupRef.current;\n if (!groupNode || !groupNode.contains(document.activeElement)) setFocusedId(id);\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !groupNode?.contains(next)) setFocusedId(id);\n };\n groupNode?.addEventListener('focusout', onFocusOut);\n return () => groupNode?.removeEventListener('focusout', onFocusOut);\n }, [isActive, setFocusedId, groupRef, id]);\n\n return {\n ref: (node) => {\n ref.current = node;\n },\n tabIndex: !context || context.focusedId === id ? 0 : -1,\n onKeyDown: (e) => context?.onItemKeyDown(e, id),\n onFocus: () => {\n if (!context) return;\n context.interactedRef.current = true;\n context.setFocusedId(id);\n },\n 'data-roving-focus-item': true,\n };\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type Context,\n type ReactNode,\n} from 'react';\n\nexport interface CollectionContextValue<T> {\n items: T[];\n register: (item: T) => void;\n unregister: (item: T) => void;\n}\n\n/**\n * Factory for a typed children-registry context. Compound components\n * (Menu, Tabs, Listbox) use this so the parent can iterate ordered children\n * without prop-drilling.\n */\nexport function createCollection<T>(): {\n Provider: (props: { children: ReactNode }) => ReactNode;\n useCollection: () => CollectionContextValue<T>;\n Context: Context<CollectionContextValue<T> | null>;\n} {\n const CollectionContext = createContext<CollectionContextValue<T> | null>(null);\n\n function Provider({ children }: { children: ReactNode }) {\n const [items, setItems] = useState<T[]>([]);\n const register = useCallback((item: T) => {\n setItems((prev) => (prev.includes(item) ? prev : [...prev, item]));\n }, []);\n const unregister = useCallback((item: T) => {\n setItems((prev) => prev.filter((i) => i !== item));\n }, []);\n const value = useMemo(() => ({ items, register, unregister }), [items, register, unregister]);\n return <CollectionContext.Provider value={value}>{children}</CollectionContext.Provider>;\n }\n\n function useCollection(): CollectionContextValue<T> {\n const ctx = useContext(CollectionContext);\n if (!ctx) {\n throw new Error('useCollection must be used inside its Provider');\n }\n return ctx;\n }\n\n return { Provider, useCollection, Context: CollectionContext };\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport { useId } from '../../hooks/useId';\n\nexport interface FormControlContextValue {\n id: string;\n labelId: string;\n helperId: string;\n errorId: string;\n isInvalid: boolean;\n isDisabled: boolean;\n isRequired: boolean;\n isReadOnly: boolean;\n}\n\nconst Context = createContext<FormControlContextValue | null>(null);\n\nexport interface FormControlProviderProps {\n /** Override the auto-generated id (also used as control's `id`). */\n id?: string;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n isReadOnly?: boolean;\n children: ReactNode;\n}\n\n/**\n * Wires Label ↔ control ↔ HelperText/ErrorMessage via stable IDs and shared\n * state flags. Used by `Field` (L4) — atoms (Input, Label, etc.) read\n * via `useFormControl()` to get the right `id`/`htmlFor`/`aria-describedby`.\n */\nexport function FormControlProvider({\n id: providedId,\n isInvalid = false,\n isDisabled = false,\n isRequired = false,\n isReadOnly = false,\n children,\n}: FormControlProviderProps) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const value: FormControlContextValue = {\n id,\n labelId: `${id}-label`,\n helperId: `${id}-helper`,\n errorId: `${id}-error`,\n isInvalid,\n isDisabled,\n isRequired,\n isReadOnly,\n };\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\n/**\n * Read the surrounding form-control context. Returns `null` when used\n * outside a provider — atoms gracefully degrade to standalone mode.\n */\nexport function useFormControl(): FormControlContextValue | null {\n return useContext(Context);\n}\n","import { type ReactNode } from 'react';\nimport { useScrollLock } from '../../hooks/useScrollLock';\n\nexport interface ScrollLockProviderProps {\n isEnabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Component wrapper around `useScrollLock` — handy when scroll lock should\n * follow a child's mount lifecycle (e.g. inside a Modal's portal).\n * Multiple wrappers stack; lock releases when the count reaches zero.\n */\nexport function ScrollLockProvider({ isEnabled = true, children }: ScrollLockProviderProps) {\n useScrollLock(isEnabled);\n return <>{children}</>;\n}\n","import { forwardRef, type SVGAttributes } from 'react';\n\nexport interface OverlayArrowProps extends SVGAttributes<SVGSVGElement> {\n /** Arrow width in px. Default 12. */\n width?: number;\n /** Arrow height in px. Default 6. */\n height?: number;\n}\n\n/**\n * Tip-arrow primitive for floating overlays (Tooltip, Popover, HoverCard).\n *\n * Renders a minimal SVG triangle with `fill=\"currentColor\"` — color follows\n * the consuming overlay's background via Tailwind's `text-*` utilities.\n *\n * Pair with Floating UI's `arrow()` middleware to position. The middleware\n * exposes the arrow's `x` / `y` offset on the resolved data; consumers apply\n * those as inline styles to the wrapping span.\n */\nexport const OverlayArrow = forwardRef<SVGSVGElement, OverlayArrowProps>(\n function OverlayArrow({ width = 12, height = 6, fill = 'currentColor', ...rest }, ref) {\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n {...rest}\n >\n <polygon points={`0,0 ${width},0 ${width / 2},${height}`} fill={fill} />\n </svg>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AnnounceProps extends HTMLAttributes<HTMLDivElement> {\n /** `polite` → `role=\"status\"`, `assertive` → `role=\"alert\"`. Default `polite`. */\n politeness?: 'polite' | 'assertive';\n children?: ReactNode;\n}\n\n/**\n * Visually-hidden ARIA live region. Children are announced by screen readers\n * whenever they change. Pair with a stable mount + swappable children for\n * lightweight transient announcements (status updates, toast messages, etc.).\n */\nexport const Announce = forwardRef<HTMLDivElement, AnnounceProps>(\n ({ politeness = 'polite', className, children, ...rest }, ref) => (\n <div\n ref={ref}\n role={politeness === 'assertive' ? 'alert' : 'status'}\n aria-live={politeness}\n aria-atomic=\"true\"\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n ),\n);\nAnnounce.displayName = 'Announce';\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nexport type ColorMode = 'light' | 'dark';\n\ninterface ColorModeContextValue {\n mode: ColorMode;\n setMode: (mode: ColorMode) => void;\n toggle: () => void;\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null);\n\nconst systemMode = (): ColorMode =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n\nexport interface ColorModeProviderProps {\n children: ReactNode;\n /** Mode used when nothing is persisted. `'system'` follows the OS preference. Default `'system'`. */\n defaultMode?: ColorMode | 'system';\n /** `localStorage` key for persistence; pass `null` to disable. Default `'wow-color-mode'`. */\n storageKey?: string | null;\n}\n\n/**\n * Owns the app's light/dark mode: toggles the `dark` class on `<html>` (which flips every semantic\n * token) + sets `color-scheme`, persists the choice, and falls back to the OS preference. Wrap the\n * app once; read via `useColorMode()`. This is the canonical `.dark` mechanism for the design tokens.\n */\nexport function ColorModeProvider({\n children,\n defaultMode = 'system',\n storageKey = 'wow-color-mode',\n}: ColorModeProviderProps) {\n const [mode, setModeState] = useState<ColorMode>(() => {\n if (typeof window === 'undefined') return 'light';\n const stored = storageKey ? (localStorage.getItem(storageKey) as ColorMode | null) : null;\n if (stored === 'light' || stored === 'dark') return stored;\n return defaultMode === 'system' ? systemMode() : defaultMode;\n });\n\n useEffect(() => {\n const root = document.documentElement;\n root.classList.toggle('dark', mode === 'dark');\n root.style.colorScheme = mode;\n }, [mode]);\n\n const setMode = useCallback(\n (next: ColorMode) => {\n setModeState(next);\n if (storageKey) localStorage.setItem(storageKey, next);\n },\n [storageKey],\n );\n\n const value = useMemo<ColorModeContextValue>(\n () => ({ mode, setMode, toggle: () => setMode(mode === 'dark' ? 'light' : 'dark') }),\n [mode, setMode],\n );\n\n return <ColorModeContext.Provider value={value}>{children}</ColorModeContext.Provider>;\n}\n\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext);\n if (!ctx) throw new Error('useColorMode must be used within a <ColorModeProvider>.');\n return ctx;\n}\n"]}
@@ -36,5 +36,5 @@ function useComposedRefs(...refs) {
36
36
  }
37
37
 
38
38
  export { cn, composeRefs, useComposedRefs };
39
- //# sourceMappingURL=chunk-X2MYOHOB.js.map
40
- //# sourceMappingURL=chunk-X2MYOHOB.js.map
39
+ //# sourceMappingURL=chunk-D4ZT36AZ.js.map
40
+ //# sourceMappingURL=chunk-D4ZT36AZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/cn/cn.ts","../src/utils/composeRefs/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-D4ZT36AZ.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"]}