@wow-two-beta/ui 0.0.12 → 0.0.14

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 (110) hide show
  1. package/dist/actions/index.d.ts +1 -0
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +2 -2
  4. package/dist/actions/toolbar/Toolbar.d.ts +23 -0
  5. package/dist/actions/toolbar/Toolbar.d.ts.map +1 -0
  6. package/dist/actions/toolbar/index.d.ts +2 -0
  7. package/dist/actions/toolbar/index.d.ts.map +1 -0
  8. package/dist/chunk-ASXB42MH.js +1670 -0
  9. package/dist/chunk-ASXB42MH.js.map +1 -0
  10. package/dist/{chunk-K6V4KLRO.js → chunk-BQTO7XY6.js} +1299 -478
  11. package/dist/chunk-BQTO7XY6.js.map +1 -0
  12. package/dist/{chunk-52DFDWY3.js → chunk-FS6DTWWH.js} +121 -146
  13. package/dist/chunk-FS6DTWWH.js.map +1 -0
  14. package/dist/{chunk-ZTHJ5OTI.js → chunk-UGHPZ3I7.js} +212 -6
  15. package/dist/chunk-UGHPZ3I7.js.map +1 -0
  16. package/dist/{chunk-D5CHR6RX.js → chunk-ULAOIBCP.js} +113 -5
  17. package/dist/chunk-ULAOIBCP.js.map +1 -0
  18. package/dist/{chunk-YANOG5YR.js → chunk-YMSAS7M7.js} +104 -55
  19. package/dist/chunk-YMSAS7M7.js.map +1 -0
  20. package/dist/display/accordion/Accordion.d.ts +41 -0
  21. package/dist/display/accordion/Accordion.d.ts.map +1 -0
  22. package/dist/display/accordion/index.d.ts +2 -0
  23. package/dist/display/accordion/index.d.ts.map +1 -0
  24. package/dist/display/collapsible/Collapsible.d.ts +26 -0
  25. package/dist/display/collapsible/Collapsible.d.ts.map +1 -0
  26. package/dist/display/collapsible/index.d.ts +2 -0
  27. package/dist/display/collapsible/index.d.ts.map +1 -0
  28. package/dist/display/dataTable/DataTable.d.ts +34 -0
  29. package/dist/display/dataTable/DataTable.d.ts.map +1 -0
  30. package/dist/display/dataTable/index.d.ts +2 -0
  31. package/dist/display/dataTable/index.d.ts.map +1 -0
  32. package/dist/display/index.d.ts +8 -0
  33. package/dist/display/index.d.ts.map +1 -1
  34. package/dist/display/index.js +2 -3
  35. package/dist/display/list/List.d.ts +23 -0
  36. package/dist/display/list/List.d.ts.map +1 -0
  37. package/dist/display/list/List.variants.d.ts +89 -0
  38. package/dist/display/list/List.variants.d.ts.map +1 -0
  39. package/dist/display/list/index.d.ts +2 -0
  40. package/dist/display/list/index.d.ts.map +1 -0
  41. package/dist/display/table/Table.d.ts +35 -0
  42. package/dist/display/table/Table.d.ts.map +1 -0
  43. package/dist/display/table/index.d.ts +2 -0
  44. package/dist/display/table/index.d.ts.map +1 -0
  45. package/dist/display/tabs/Tabs.d.ts +31 -0
  46. package/dist/display/tabs/Tabs.d.ts.map +1 -0
  47. package/dist/display/tabs/index.d.ts +2 -0
  48. package/dist/display/tabs/index.d.ts.map +1 -0
  49. package/dist/display/timeline/Timeline.d.ts +29 -0
  50. package/dist/display/timeline/Timeline.d.ts.map +1 -0
  51. package/dist/display/timeline/index.d.ts +2 -0
  52. package/dist/display/timeline/index.d.ts.map +1 -0
  53. package/dist/display/tree/Tree.d.ts +30 -0
  54. package/dist/display/tree/Tree.d.ts.map +1 -0
  55. package/dist/display/tree/index.d.ts +2 -0
  56. package/dist/display/tree/index.d.ts.map +1 -0
  57. package/dist/forms/MonthGrid.d.ts +29 -0
  58. package/dist/forms/MonthGrid.d.ts.map +1 -0
  59. package/dist/forms/calendar/Calendar.d.ts.map +1 -1
  60. package/dist/forms/datePicker/DatePicker.d.ts.map +1 -1
  61. package/dist/forms/dateRangePicker/DateRangePicker.d.ts.map +1 -1
  62. package/dist/forms/index.d.ts +8 -0
  63. package/dist/forms/index.d.ts.map +1 -1
  64. package/dist/forms/index.js +3 -3
  65. package/dist/forms/multiSelect/MultiSelect.d.ts +4 -5
  66. package/dist/forms/multiSelect/MultiSelect.d.ts.map +1 -1
  67. package/dist/forms/rangeCalendar/RangeCalendar.d.ts.map +1 -1
  68. package/dist/forms/select/Select.d.ts +5 -9
  69. package/dist/forms/select/Select.d.ts.map +1 -1
  70. package/dist/forms/stepper/Stepper.d.ts +32 -0
  71. package/dist/forms/stepper/Stepper.d.ts.map +1 -0
  72. package/dist/forms/stepper/index.d.ts +2 -0
  73. package/dist/forms/stepper/index.d.ts.map +1 -0
  74. package/dist/forms/timePicker/TimePicker.d.ts.map +1 -1
  75. package/dist/index.js +6 -7
  76. package/dist/nav/index.d.ts +1 -0
  77. package/dist/nav/index.d.ts.map +1 -1
  78. package/dist/nav/index.js +2 -3
  79. package/dist/nav/navigationMenu/NavigationMenu.d.ts +39 -0
  80. package/dist/nav/navigationMenu/NavigationMenu.d.ts.map +1 -0
  81. package/dist/nav/navigationMenu/index.d.ts +2 -0
  82. package/dist/nav/navigationMenu/index.d.ts.map +1 -0
  83. package/dist/overlays/OverlayChrome.d.ts +34 -0
  84. package/dist/overlays/OverlayChrome.d.ts.map +1 -0
  85. package/dist/overlays/dialog/Dialog.d.ts +7 -25
  86. package/dist/overlays/dialog/Dialog.d.ts.map +1 -1
  87. package/dist/overlays/dialog/index.d.ts +1 -1
  88. package/dist/overlays/dialog/index.d.ts.map +1 -1
  89. package/dist/overlays/drawer/Drawer.d.ts +7 -21
  90. package/dist/overlays/drawer/Drawer.d.ts.map +1 -1
  91. package/dist/overlays/drawer/index.d.ts +1 -1
  92. package/dist/overlays/drawer/index.d.ts.map +1 -1
  93. package/dist/overlays/index.js +2 -3
  94. package/dist/overlays/popover/Popover.d.ts +7 -0
  95. package/dist/overlays/popover/Popover.d.ts.map +1 -1
  96. package/dist/primitives/anchoredPositioner/AnchoredPositioner.d.ts +8 -0
  97. package/dist/primitives/anchoredPositioner/AnchoredPositioner.d.ts.map +1 -1
  98. package/dist/primitives/index.js +1 -2
  99. package/dist/primitives/rovingFocusGroup/RovingFocusGroup.d.ts +1 -1
  100. package/dist/primitives/rovingFocusGroup/RovingFocusGroup.d.ts.map +1 -1
  101. package/package.json +1 -1
  102. package/dist/chunk-33IOXQYO.js +0 -47
  103. package/dist/chunk-33IOXQYO.js.map +0 -1
  104. package/dist/chunk-52DFDWY3.js.map +0 -1
  105. package/dist/chunk-D5CHR6RX.js.map +0 -1
  106. package/dist/chunk-K6V4KLRO.js.map +0 -1
  107. package/dist/chunk-VTLWHUMD.js +0 -774
  108. package/dist/chunk-VTLWHUMD.js.map +0 -1
  109. package/dist/chunk-YANOG5YR.js.map +0 -1
  110. package/dist/chunk-ZTHJ5OTI.js.map +0 -1
@@ -1,12 +1,11 @@
1
- import { Portal, ScrollLockProvider, DismissableLayer, AnchoredPositioner, OverlayArrow } from './chunk-YANOG5YR.js';
2
1
  import { useControlled } from './chunk-4P2TFUVW.js';
3
- import { Slot } from './chunk-33IOXQYO.js';
2
+ import { Portal, Slot, ScrollLockProvider, DismissableLayer, AnchoredPositioner, OverlayArrow } from './chunk-YMSAS7M7.js';
4
3
  import { composeRefs } from './chunk-DN7WBRIV.js';
5
4
  import { cn } from './chunk-KZ4VFY2T.js';
6
- import { forwardRef, createContext, useContext, useRef, useId, useMemo, useCallback, isValidElement, cloneElement } from 'react';
5
+ import { forwardRef, createContext, useCallback, useMemo, useContext, useRef, useId, isValidElement, cloneElement } from 'react';
7
6
  import { jsx, jsxs } from 'react/jsx-runtime';
8
- import { X } from 'lucide-react';
9
7
  import { FocusScope } from '@radix-ui/react-focus-scope';
8
+ import { X } from 'lucide-react';
10
9
 
11
10
  var Backdrop = forwardRef(function Backdrop2({ open = true, blur, pointerEvents = "auto", inline, className, style, ...rest }, ref) {
12
11
  if (!open) return null;
@@ -26,6 +25,88 @@ var Backdrop = forwardRef(function Backdrop2({ open = true, blur, pointerEvents
26
25
  );
27
26
  return inline ? node : /* @__PURE__ */ jsx(Portal, { children: node });
28
27
  });
28
+ var OverlayChromeContext = createContext(null);
29
+ var OverlayChromeProvider = OverlayChromeContext.Provider;
30
+ function useOverlayChromeContext() {
31
+ const ctx = useContext(OverlayChromeContext);
32
+ if (!ctx)
33
+ throw new Error(
34
+ "Overlay chrome subcomponents must be used inside an OverlayChromeProvider (Dialog / Drawer)"
35
+ );
36
+ return ctx;
37
+ }
38
+ function OverlayHeader({ className, children, ...rest }) {
39
+ return /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5", className), ...rest, children });
40
+ }
41
+ function OverlayTitle({ className, children, ...rest }) {
42
+ const ctx = useOverlayChromeContext();
43
+ return /* @__PURE__ */ jsx(
44
+ "h2",
45
+ {
46
+ id: ctx.titleId,
47
+ className: cn("text-lg font-semibold leading-none text-foreground", className),
48
+ ...rest,
49
+ children
50
+ }
51
+ );
52
+ }
53
+ function OverlayDescription({
54
+ className,
55
+ children,
56
+ ...rest
57
+ }) {
58
+ const ctx = useOverlayChromeContext();
59
+ return /* @__PURE__ */ jsx(
60
+ "p",
61
+ {
62
+ id: ctx.descriptionId,
63
+ className: cn("text-sm text-muted-foreground", className),
64
+ ...rest,
65
+ children
66
+ }
67
+ );
68
+ }
69
+ function OverlayBody({ className, children, ...rest }) {
70
+ return /* @__PURE__ */ jsx("div", { className: cn("text-sm text-foreground", className), ...rest, children });
71
+ }
72
+ function OverlayFooter({ className, children, ...rest }) {
73
+ return /* @__PURE__ */ jsx(
74
+ "div",
75
+ {
76
+ className: cn(
77
+ "mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
78
+ className
79
+ ),
80
+ ...rest,
81
+ children
82
+ }
83
+ );
84
+ }
85
+ var OverlayCloseButton = forwardRef(
86
+ function OverlayCloseButton2({ asChild, onClick, className, children, ...rest }, forwardedRef) {
87
+ const ctx = useOverlayChromeContext();
88
+ const Component = asChild ? Slot : "button";
89
+ return /* @__PURE__ */ jsx(
90
+ Component,
91
+ {
92
+ ref: forwardedRef,
93
+ type: "button",
94
+ "aria-label": children ? void 0 : "Close",
95
+ onClick: (e) => {
96
+ onClick?.(e);
97
+ if (e.defaultPrevented) return;
98
+ ctx.close();
99
+ },
100
+ className: asChild ? className : cn(
101
+ "absolute right-4 top-4 grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
102
+ className
103
+ ),
104
+ ...rest,
105
+ children: children ?? /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
106
+ }
107
+ );
108
+ }
109
+ );
29
110
  var DialogContext = createContext(null);
30
111
  function useDialogContext() {
31
112
  const ctx = useContext(DialogContext);
@@ -73,7 +154,7 @@ var DialogTrigger = forwardRef(
73
154
  {
74
155
  ref: composeRefs(forwardedRef, ctx.triggerRef),
75
156
  type: "button",
76
- "aria-haspopup": ctx.role === "alertdialog" ? "dialog" : "dialog",
157
+ "aria-haspopup": "dialog",
77
158
  "aria-expanded": ctx.open,
78
159
  "data-state": ctx.open ? "open" : "closed",
79
160
  onClick: (e) => {
@@ -90,6 +171,14 @@ var DialogTrigger = forwardRef(
90
171
  var DialogContent = forwardRef(
91
172
  function DialogContent2({ hideBackdrop, blur, className, children, ...rest }, forwardedRef) {
92
173
  const ctx = useDialogContext();
174
+ const close = useCallback(() => {
175
+ ctx.setOpen(false);
176
+ requestAnimationFrame(() => ctx.triggerRef.current?.focus());
177
+ }, [ctx]);
178
+ const chromeCtx = useMemo(
179
+ () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),
180
+ [ctx.titleId, ctx.descriptionId, close]
181
+ );
93
182
  if (!ctx.open) return null;
94
183
  return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(ScrollLockProvider, { children: [
95
184
  !hideBackdrop && /* @__PURE__ */ jsx(
@@ -122,7 +211,7 @@ var DialogContent = forwardRef(
122
211
  className
123
212
  ),
124
213
  ...rest,
125
- children
214
+ children: /* @__PURE__ */ jsx(OverlayChromeProvider, { value: chromeCtx, children })
126
215
  }
127
216
  )
128
217
  }
@@ -130,69 +219,12 @@ var DialogContent = forwardRef(
130
219
  ] }) });
131
220
  }
132
221
  );
133
- function DialogHeader({ className, children, ...rest }) {
134
- return /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex flex-col gap-1.5", className), ...rest, children });
135
- }
136
- function DialogTitle({ className, children, ...rest }) {
137
- const ctx = useDialogContext();
138
- return /* @__PURE__ */ jsx(
139
- "h2",
140
- {
141
- id: ctx.titleId,
142
- className: cn("text-lg font-semibold leading-none text-foreground", className),
143
- ...rest,
144
- children
145
- }
146
- );
147
- }
148
- function DialogDescription({
149
- className,
150
- children,
151
- ...rest
152
- }) {
153
- const ctx = useDialogContext();
154
- return /* @__PURE__ */ jsx("p", { id: ctx.descriptionId, className: cn("text-sm text-muted-foreground", className), ...rest, children });
155
- }
156
- function DialogBody({ className, children, ...rest }) {
157
- return /* @__PURE__ */ jsx("div", { className: cn("text-sm text-foreground", className), ...rest, children });
158
- }
159
- function DialogFooter({ className, children, ...rest }) {
160
- return /* @__PURE__ */ jsx(
161
- "div",
162
- {
163
- className: cn(
164
- "mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
165
- className
166
- ),
167
- ...rest,
168
- children
169
- }
170
- );
171
- }
172
- var DialogClose = forwardRef(function DialogClose2({ asChild, onClick, className, children, ...rest }, forwardedRef) {
173
- const ctx = useDialogContext();
174
- const Component = asChild ? Slot : "button";
175
- return /* @__PURE__ */ jsx(
176
- Component,
177
- {
178
- ref: forwardedRef,
179
- type: "button",
180
- "aria-label": children ? void 0 : "Close",
181
- onClick: (e) => {
182
- onClick?.(e);
183
- if (e.defaultPrevented) return;
184
- ctx.setOpen(false);
185
- requestAnimationFrame(() => ctx.triggerRef.current?.focus());
186
- },
187
- className: asChild ? className : cn(
188
- "absolute right-4 top-4 grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
189
- className
190
- ),
191
- ...rest,
192
- children: children ?? /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
193
- }
194
- );
195
- });
222
+ var DialogHeader = OverlayHeader;
223
+ var DialogTitle = OverlayTitle;
224
+ var DialogDescription = OverlayDescription;
225
+ var DialogBody = OverlayBody;
226
+ var DialogFooter = OverlayFooter;
227
+ var DialogClose = OverlayCloseButton;
196
228
  Dialog.Trigger = DialogTrigger;
197
229
  Dialog.Content = DialogContent;
198
230
  Dialog.Header = DialogHeader;
@@ -325,6 +357,14 @@ var SIDE_CLASSES = {
325
357
  var DrawerContent = forwardRef(
326
358
  function DrawerContent2({ hideBackdrop, blur, className, children, ...rest }, forwardedRef) {
327
359
  const ctx = useDrawerContext();
360
+ const close = useCallback(() => {
361
+ ctx.setOpen(false);
362
+ requestAnimationFrame(() => ctx.triggerRef.current?.focus());
363
+ }, [ctx]);
364
+ const chromeCtx = useMemo(
365
+ () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),
366
+ [ctx.titleId, ctx.descriptionId, close]
367
+ );
328
368
  if (!ctx.open) return null;
329
369
  return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(ScrollLockProvider, { children: [
330
370
  !hideBackdrop && /* @__PURE__ */ jsx(
@@ -359,7 +399,7 @@ var DrawerContent = forwardRef(
359
399
  className
360
400
  ),
361
401
  ...rest,
362
- children
402
+ children: /* @__PURE__ */ jsx(OverlayChromeProvider, { value: chromeCtx, children })
363
403
  }
364
404
  )
365
405
  }
@@ -367,78 +407,12 @@ var DrawerContent = forwardRef(
367
407
  ] }) });
368
408
  }
369
409
  );
370
- function DrawerHeader({ className, children, ...rest }) {
371
- return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5", className), ...rest, children });
372
- }
373
- function DrawerTitle({
374
- className,
375
- children,
376
- ...rest
377
- }) {
378
- const ctx = useDrawerContext();
379
- return /* @__PURE__ */ jsx(
380
- "h2",
381
- {
382
- id: ctx.titleId,
383
- className: cn("text-lg font-semibold leading-none text-foreground", className),
384
- ...rest,
385
- children
386
- }
387
- );
388
- }
389
- function DrawerDescription({
390
- className,
391
- children,
392
- ...rest
393
- }) {
394
- const ctx = useDrawerContext();
395
- return /* @__PURE__ */ jsx("p", { id: ctx.descriptionId, className: cn("text-sm text-muted-foreground", className), ...rest, children });
396
- }
397
- function DrawerBody({
398
- className,
399
- children,
400
- ...rest
401
- }) {
402
- return /* @__PURE__ */ jsx("div", { className: cn("flex-1 overflow-y-auto text-sm text-foreground", className), ...rest, children });
403
- }
404
- function DrawerFooter({
405
- className,
406
- children,
407
- ...rest
408
- }) {
409
- return /* @__PURE__ */ jsx(
410
- "div",
411
- {
412
- className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
413
- ...rest,
414
- children
415
- }
416
- );
417
- }
418
- var DrawerClose = forwardRef(function DrawerClose2({ asChild, onClick, className, children, ...rest }, forwardedRef) {
419
- const ctx = useDrawerContext();
420
- const Component = asChild ? Slot : "button";
421
- return /* @__PURE__ */ jsx(
422
- Component,
423
- {
424
- ref: forwardedRef,
425
- type: "button",
426
- "aria-label": children ? void 0 : "Close",
427
- onClick: (e) => {
428
- onClick?.(e);
429
- if (e.defaultPrevented) return;
430
- ctx.setOpen(false);
431
- requestAnimationFrame(() => ctx.triggerRef.current?.focus());
432
- },
433
- className: asChild ? className : cn(
434
- "absolute right-4 top-4 grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
435
- className
436
- ),
437
- ...rest,
438
- children: children ?? /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
439
- }
440
- );
441
- });
410
+ var DrawerHeader = OverlayHeader;
411
+ var DrawerTitle = OverlayTitle;
412
+ var DrawerDescription = OverlayDescription;
413
+ var DrawerBody = OverlayBody;
414
+ var DrawerFooter = OverlayFooter;
415
+ var DrawerClose = OverlayCloseButton;
442
416
  Drawer.Trigger = DrawerTrigger;
443
417
  Drawer.Content = DrawerContent;
444
418
  Drawer.Header = DrawerHeader;
@@ -507,7 +481,7 @@ var PopoverTrigger = forwardRef(
507
481
  }
508
482
  );
509
483
  var PopoverContent = forwardRef(
510
- function PopoverContent2({ className, children, ...rest }, forwardedRef) {
484
+ function PopoverContent2({ bare, className, children, ...rest }, forwardedRef) {
511
485
  const ctx = usePopoverContext();
512
486
  if (!ctx.open) return null;
513
487
  return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(
@@ -536,7 +510,8 @@ var PopoverContent = forwardRef(
536
510
  role: "dialog",
537
511
  "data-state": "open",
538
512
  className: cn(
539
- "z-50 w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95",
513
+ "z-50 outline-none animate-in fade-in-0 zoom-in-95",
514
+ !bare && "w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md",
540
515
  className
541
516
  ),
542
517
  ...rest,
@@ -674,5 +649,5 @@ HoverCard.Content = HoverCardContent;
674
649
  HoverCard.Arrow = HoverCardArrow;
675
650
 
676
651
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, Backdrop, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger, Popover, PopoverArrow, PopoverContent, PopoverTrigger };
677
- //# sourceMappingURL=chunk-52DFDWY3.js.map
678
- //# sourceMappingURL=chunk-52DFDWY3.js.map
652
+ //# sourceMappingURL=chunk-FS6DTWWH.js.map
653
+ //# sourceMappingURL=chunk-FS6DTWWH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/overlays/backdrop/Backdrop.tsx","../src/overlays/OverlayChrome.tsx","../src/overlays/dialog/Dialog.tsx","../src/overlays/alertDialog/AlertDialog.tsx","../src/overlays/drawer/Drawer.tsx","../src/overlays/popover/Popover.tsx","../src/overlays/hoverCard/HoverCard.tsx"],"names":["Backdrop","jsx","forwardRef","OverlayCloseButton","createContext","useContext","DialogTrigger","DialogContent","AlertDialogContent","AlertDialogAction","AlertDialogCancel","useRef","useId","useMemo","DrawerTrigger","DrawerContent","useCallback","jsxs","FocusScope","PopoverTrigger","PopoverContent","HoverCardContent"],"mappings":"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","file":"chunk-FS6DTWWH.js","sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { Portal } from '../../primitives';\n\nexport interface BackdropProps extends HTMLAttributes<HTMLDivElement> {\n /** Mount state. Default `true`. */\n open?: boolean;\n /** Apply backdrop-blur. */\n blur?: boolean;\n /** When `'none'`, clicks pass through. Default `'auto'`. */\n pointerEvents?: 'auto' | 'none';\n /** Skip the Portal wrap — render in place. */\n inline?: boolean;\n}\n\n/**\n * Fixed-position scrim. Used by Dialog / Drawer / LoadingOverlay; also a\n * public component for custom overlay surfaces.\n */\nexport const Backdrop = forwardRef<HTMLDivElement, BackdropProps>(function Backdrop(\n { open = true, blur, pointerEvents = 'auto', inline, className, style, ...rest },\n ref,\n) {\n if (!open) return null;\n const node = (\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n style={{ pointerEvents, ...style }}\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 animate-in fade-in-0',\n blur && 'backdrop-blur-sm',\n className,\n )}\n {...rest}\n />\n );\n return inline ? node : <Portal>{node}</Portal>;\n});\n","// Shared header / title / description / body / footer / close subcomponents\n// for Dialog and Drawer. Co-located in `overlays/` as a domain-internal helper.\n//\n// Each consuming overlay (Dialog, Drawer) wraps its content with\n// `OverlayChromeProvider`, supplying the `titleId`, `descriptionId`, and a\n// `close()` action. The shared subcomponents read from this context.\n//\n// Naming convention: `Overlay*` for shared chrome pieces; consumers re-export\n// them under their own name (e.g. `Dialog.Header = OverlayHeader`).\n\nimport {\n createContext,\n forwardRef,\n useContext,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../utils';\nimport { Slot } from '../primitives';\n\nexport interface OverlayChromeContextValue {\n titleId: string;\n descriptionId: string;\n /** Closes the overlay and returns focus to the trigger. */\n close: () => void;\n}\n\nconst OverlayChromeContext = createContext<OverlayChromeContextValue | null>(null);\n\nexport const OverlayChromeProvider = OverlayChromeContext.Provider;\n\nfunction useOverlayChromeContext() {\n const ctx = useContext(OverlayChromeContext);\n if (!ctx)\n throw new Error(\n 'Overlay chrome subcomponents must be used inside an OverlayChromeProvider (Dialog / Drawer)',\n );\n return ctx;\n}\n\nexport interface OverlayHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayHeader({ className, children, ...rest }: OverlayHeaderProps) {\n return (\n <div className={cn('mb-4 flex flex-col gap-1.5', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface OverlayTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n}\n\nexport function OverlayTitle({ className, children, ...rest }: OverlayTitleProps) {\n const ctx = useOverlayChromeContext();\n return (\n <h2\n id={ctx.titleId}\n className={cn('text-lg font-semibold leading-none text-foreground', className)}\n {...rest}\n >\n {children}\n </h2>\n );\n}\n\nexport interface OverlayDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function OverlayDescription({\n className,\n children,\n ...rest\n}: OverlayDescriptionProps) {\n const ctx = useOverlayChromeContext();\n return (\n <p\n id={ctx.descriptionId}\n className={cn('text-sm text-muted-foreground', className)}\n {...rest}\n >\n {children}\n </p>\n );\n}\n\nexport interface OverlayBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayBody({ className, children, ...rest }: OverlayBodyProps) {\n return (\n <div className={cn('text-sm text-foreground', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface OverlayFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport function OverlayFooter({ className, children, ...rest }: OverlayFooterProps) {\n return (\n <div\n className={cn(\n 'mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface OverlayCloseButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children?: ReactNode;\n}\n\nexport const OverlayCloseButton = forwardRef<HTMLButtonElement, OverlayCloseButtonProps>(\n function OverlayCloseButton(\n { asChild, onClick, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useOverlayChromeContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={forwardedRef as never}\n type=\"button\"\n aria-label={children ? undefined : 'Close'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.close();\n }}\n className={\n asChild\n ? className\n : cn(\n 'absolute right-4 top-4 grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )\n }\n {...rest}\n >\n {children ?? <X className=\"h-4 w-4\" />}\n </Component>\n );\n },\n);\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n role: 'dialog' | 'alertdialog';\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogContext() {\n const ctx = useContext(DialogContext);\n if (!ctx) throw new Error('Dialog.* must be used inside <Dialog>');\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n /** Internal — `AlertDialog` overrides this. */\n role?: 'dialog' | 'alertdialog';\n children: ReactNode;\n}\n\nexport function Dialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n role = 'dialog',\n children,\n}: DialogProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DialogContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n role,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, role, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DialogContext.Provider value={ctx}>{children}</DialogContext.Provider>;\n}\n\nexport interface DialogTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {\n /** Disable the default backdrop. */\n hideBackdrop?: boolean;\n /** Apply backdrop blur. */\n blur?: boolean;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent(\n { hideBackdrop, blur, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDialogContext();\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n inline\n blur={blur}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <div className=\"fixed inset-0 z-50 grid place-items-center overflow-y-auto p-4\">\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n disableOutsideClick\n >\n <div\n ref={forwardedRef}\n role={ctx.role}\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n className={cn(\n 'relative w-full max-w-lg rounded-lg border border-border bg-background p-6 shadow-lg outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </div>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Dialog namespace.\nexport const DialogHeader = OverlayHeader;\nexport const DialogTitle = OverlayTitle;\nexport const DialogDescription = OverlayDescription;\nexport const DialogBody = OverlayBody;\nexport const DialogFooter = OverlayFooter;\nexport const DialogClose = OverlayCloseButton;\n\ntype DialogComponent = typeof Dialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n};\n\n(Dialog as DialogComponent).Trigger = DialogTrigger;\n(Dialog as DialogComponent).Content = DialogContent;\n(Dialog as DialogComponent).Header = DialogHeader;\n(Dialog as DialogComponent).Title = DialogTitle;\n(Dialog as DialogComponent).Description = DialogDescription;\n(Dialog as DialogComponent).Body = DialogBody;\n(Dialog as DialogComponent).Footer = DialogFooter;\n(Dialog as DialogComponent).Close = DialogClose;\n\nexport default Dialog as DialogComponent;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport {\n Dialog,\n DialogBody,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n DialogClose,\n type DialogProps,\n type DialogContentProps,\n} from '../dialog';\n\nexport type AlertDialogProps = Omit<DialogProps, 'role' | 'dismissOnOutsideClick'>;\n\nexport function AlertDialog(props: AlertDialogProps) {\n return <Dialog {...props} role=\"alertdialog\" dismissOnOutsideClick={false} />;\n}\n\nexport const AlertDialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function AlertDialogContent(props, ref) {\n return <DialogContent ref={ref} {...props} />;\n },\n);\n\nexport interface AlertDialogActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Runs before the dialog closes. */\n onAction?: () => void;\n children: ReactNode;\n}\n\nexport const AlertDialogAction = forwardRef<HTMLButtonElement, AlertDialogActionProps>(\n function AlertDialogAction({ onAction, onClick, className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onAction?.();\n }}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\nexport interface AlertDialogCancelProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AlertDialogCancel = forwardRef<HTMLButtonElement, AlertDialogCancelProps>(\n function AlertDialogCancel({ className, children, ...rest }, ref) {\n return (\n <DialogClose\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </DialogClose>\n );\n },\n);\n\ntype AlertDialogComponent = typeof AlertDialog & {\n Trigger: typeof DialogTrigger;\n Content: typeof AlertDialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Action: typeof AlertDialogAction;\n Cancel: typeof AlertDialogCancel;\n};\n\n(AlertDialog as AlertDialogComponent).Trigger = DialogTrigger;\n(AlertDialog as AlertDialogComponent).Content = AlertDialogContent;\n(AlertDialog as AlertDialogComponent).Header = DialogHeader;\n(AlertDialog as AlertDialogComponent).Title = DialogTitle;\n(AlertDialog as AlertDialogComponent).Description = DialogDescription;\n(AlertDialog as AlertDialogComponent).Body = DialogBody;\n(AlertDialog as AlertDialogComponent).Footer = DialogFooter;\n(AlertDialog as AlertDialogComponent).Action = AlertDialogAction;\n(AlertDialog as AlertDialogComponent).Cancel = AlertDialogCancel;\n\nexport default AlertDialog as AlertDialogComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { DismissableLayer, Portal, ScrollLockProvider, Slot } from '../../primitives';\nimport { Backdrop } from '../backdrop';\nimport {\n OverlayBody,\n OverlayChromeProvider,\n OverlayCloseButton,\n OverlayDescription,\n OverlayFooter,\n OverlayHeader,\n OverlayTitle,\n type OverlayChromeContextValue,\n} from '../OverlayChrome';\n\nexport type DrawerSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n titleId: string;\n descriptionId: string;\n side: DrawerSide;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null);\n\nfunction useDrawerContext() {\n const ctx = useContext(DrawerContext);\n if (!ctx) throw new Error('Drawer.* must be used inside <Drawer>');\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n side?: DrawerSide;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Drawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: DrawerProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n const ctx = useMemo<DrawerContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n titleId,\n descriptionId,\n side,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, titleId, descriptionId, side, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <DrawerContext.Provider value={ctx}>{children}</DrawerContext.Provider>;\n}\n\nexport interface DrawerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n function DrawerTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nconst SIDE_CLASSES: Record<DrawerSide, string> = {\n right:\n 'inset-y-0 right-0 h-full w-full sm:max-w-sm border-l animate-in slide-in-from-right',\n left: 'inset-y-0 left-0 h-full w-full sm:max-w-sm border-r animate-in slide-in-from-left',\n top: 'inset-x-0 top-0 w-full max-h-[85vh] border-b animate-in slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 w-full max-h-[85vh] border-t animate-in slide-in-from-bottom',\n};\n\nexport interface DrawerContentProps extends HTMLAttributes<HTMLDivElement> {\n hideBackdrop?: boolean;\n blur?: boolean;\n children: ReactNode;\n}\n\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n function DrawerContent(\n { hideBackdrop, blur, className, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDrawerContext();\n\n const close = useCallback(() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }, [ctx]);\n\n const chromeCtx = useMemo<OverlayChromeContextValue>(\n () => ({ titleId: ctx.titleId, descriptionId: ctx.descriptionId, close }),\n [ctx.titleId, ctx.descriptionId, close],\n );\n\n if (!ctx.open) return null;\n return (\n <Portal>\n <ScrollLockProvider>\n {!hideBackdrop && (\n <Backdrop\n inline\n blur={blur}\n onClick={() => {\n if (ctx.dismissOnOutsideClick) ctx.setOpen(false);\n }}\n />\n )}\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!ctx.dismissOnEscape}\n onEscape={() => ctx.setOpen(false)}\n disableOutsideClick\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-state=\"open\"\n data-side={ctx.side}\n className={cn(\n 'fixed z-50 flex flex-col gap-4 border-border bg-background p-6 shadow-lg outline-none',\n SIDE_CLASSES[ctx.side],\n className,\n )}\n {...rest}\n >\n <OverlayChromeProvider value={chromeCtx}>{children}</OverlayChromeProvider>\n </div>\n </DismissableLayer>\n </FocusScope>\n </ScrollLockProvider>\n </Portal>\n );\n },\n);\n\n// Re-export shared chrome subcomponents under the Drawer namespace.\nexport const DrawerHeader = OverlayHeader;\nexport const DrawerTitle = OverlayTitle;\nexport const DrawerDescription = OverlayDescription;\nexport const DrawerBody = OverlayBody;\nexport const DrawerFooter = OverlayFooter;\nexport const DrawerClose = OverlayCloseButton;\n\ntype DrawerComponent = typeof Drawer & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Title: typeof DrawerTitle;\n Description: typeof DrawerDescription;\n Body: typeof DrawerBody;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n(Drawer as DrawerComponent).Trigger = DrawerTrigger;\n(Drawer as DrawerComponent).Content = DrawerContent;\n(Drawer as DrawerComponent).Header = DrawerHeader;\n(Drawer as DrawerComponent).Title = DrawerTitle;\n(Drawer as DrawerComponent).Description = DrawerDescription;\n(Drawer as DrawerComponent).Body = DrawerBody;\n(Drawer as DrawerComponent).Footer = DrawerFooter;\n(Drawer as DrawerComponent).Close = DrawerClose;\n\nexport default Drawer as DrawerComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n OverlayArrow,\n Portal,\n Slot,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n dismissOnOutsideClick: boolean;\n dismissOnEscape: boolean;\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null);\n\nfunction usePopoverContext() {\n const ctx = useContext(PopoverContext);\n if (!ctx) throw new Error('Popover.* must be used inside <Popover>');\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n dismissOnOutsideClick?: boolean;\n dismissOnEscape?: boolean;\n children: ReactNode;\n}\n\nexport function Popover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n offset = 8,\n dismissOnOutsideClick = true,\n dismissOnEscape = true,\n children,\n}: PopoverProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const ctx = useMemo<PopoverContextValue>(\n () => ({\n open,\n setOpen,\n triggerRef,\n placement,\n offset,\n dismissOnOutsideClick,\n dismissOnEscape,\n }),\n [open, setOpen, placement, offset, dismissOnOutsideClick, dismissOnEscape],\n );\n\n return <PopoverContext.Provider value={ctx}>{children}</PopoverContext.Provider>;\n}\n\nexport interface PopoverTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n function PopoverTrigger({ asChild, onClick, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef as React.MutableRefObject<HTMLButtonElement | null>) as never}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface PopoverContentProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Strip the default chrome (bg / border / padding / shadow / fixed width).\n * Use when the child provides its own container — e.g. wrapping a `Calendar`,\n * `Listbox`, or any pre-styled card. Keeps only structural classes\n * (z-index, animation, outline).\n */\n bare?: boolean;\n children: ReactNode;\n}\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n function PopoverContent({ bare, className, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext();\n if (!ctx.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.triggerRef.current}\n placement={ctx.placement}\n offset={ctx.offset}\n >\n <FocusScope asChild trapped loop>\n <DismissableLayer\n disableEscape={!ctx.dismissOnEscape}\n onEscape={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n disableOutsideClick={!ctx.dismissOnOutsideClick}\n onOutsidePointerDown={(e) => {\n if (ctx.triggerRef.current?.contains(e.target as Node)) return;\n ctx.setOpen(false);\n }}\n >\n <div\n ref={forwardedRef}\n role=\"dialog\"\n data-state=\"open\"\n className={cn(\n 'z-50 outline-none animate-in fade-in-0 zoom-in-95',\n !bare &&\n 'w-72 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function PopoverArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype PopoverComponent = typeof Popover & {\n Trigger: typeof PopoverTrigger;\n Content: typeof PopoverContent;\n Arrow: typeof PopoverArrow;\n};\n\n(Popover as PopoverComponent).Trigger = PopoverTrigger;\n(Popover as PopoverComponent).Content = PopoverContent;\n(Popover as PopoverComponent).Arrow = PopoverArrow;\n\nexport default Popover as PopoverComponent;\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n OverlayArrow,\n Portal,\n type AnchoredPositionerProps,\n type OverlayArrowProps,\n} from '../../primitives';\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n show: () => void;\n hide: () => void;\n cancelHide: () => void;\n placement: AnchoredPositionerProps['placement'];\n offset: number;\n}\n\nconst HoverCardContext = createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext() {\n const ctx = useContext(HoverCardContext);\n if (!ctx) throw new Error('HoverCard.* must be used inside <HoverCard>');\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n openDelay?: number;\n closeDelay?: number;\n placement?: AnchoredPositionerProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function HoverCard({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n openDelay = 700,\n closeDelay = 300,\n placement = 'bottom',\n offset = 8,\n children,\n}: HoverCardProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n }, []);\n\n const show = useCallback(() => {\n clear();\n openTimer.current = setTimeout(() => setOpen(true), openDelay);\n }, [clear, openDelay, setOpen]);\n\n const hide = useCallback(() => {\n clear();\n closeTimer.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clear, closeDelay, setOpen]);\n\n const cancelHide = useCallback(() => {\n if (closeTimer.current) {\n clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n }, []);\n\n const ctx = useMemo<HoverCardContextValue>(\n () => ({ open, setOpen, triggerRef, show, hide, cancelHide, placement, offset }),\n [open, setOpen, show, hide, cancelHide, placement, offset],\n );\n\n return <HoverCardContext.Provider value={ctx}>{children}</HoverCardContext.Provider>;\n}\n\nexport interface HoverCardTriggerProps {\n asChild?: boolean;\n children: ReactElement;\n}\n\nexport function HoverCardTrigger({ children }: HoverCardTriggerProps) {\n const ctx = useHoverCardContext();\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n return cloneElement(trigger, {\n ref: composeRefs((node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n ctx.show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n ctx.hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n ctx.show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n ctx.hide();\n },\n });\n}\n\nexport interface HoverCardContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const HoverCardContent = forwardRef<HTMLDivElement, HoverCardContentProps>(\n function HoverCardContent({ className, children, onPointerEnter, onPointerLeave, ...rest }, forwardedRef) {\n const ctx = useHoverCardContext();\n if (!ctx.open) return null;\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.triggerRef.current}\n placement={ctx.placement}\n offset={ctx.offset}\n >\n <div\n ref={forwardedRef}\n data-state=\"open\"\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n ctx.cancelHide();\n }}\n onPointerLeave={(e) => {\n onPointerLeave?.(e);\n ctx.hide();\n }}\n className={cn(\n 'z-50 w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\nexport function HoverCardArrow({ className, ...rest }: OverlayArrowProps) {\n return <OverlayArrow className={cn('text-popover', className)} {...rest} />;\n}\n\ntype HoverCardComponent = typeof HoverCard & {\n Trigger: typeof HoverCardTrigger;\n Content: typeof HoverCardContent;\n Arrow: typeof HoverCardArrow;\n};\n\n(HoverCard as HoverCardComponent).Trigger = HoverCardTrigger;\n(HoverCard as HoverCardComponent).Content = HoverCardContent;\n(HoverCard as HoverCardComponent).Arrow = HoverCardArrow;\n\nexport default HoverCard as HoverCardComponent;\n"]}