@vritti/quantum-ui 0.3.3 → 0.3.5

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 (108) hide show
  1. package/dist/Alert.js +1 -1
  2. package/dist/Avatar.js +4 -4
  3. package/dist/Badge2.js +2 -2
  4. package/dist/Breadcrumb.js +1 -1
  5. package/dist/Button2.js +2 -2
  6. package/dist/Checkbox2.js +6 -6
  7. package/dist/Combination.js +3 -3
  8. package/dist/DateTimePicker.js +2 -2
  9. package/dist/Dialog.js +1 -1
  10. package/dist/Label.js +1 -1
  11. package/dist/Progress.js +2 -2
  12. package/dist/RadioGroup.js +8 -8
  13. package/dist/Select.js +2 -2
  14. package/dist/SelectFilter.js +2 -2
  15. package/dist/Sidebar.js +3 -3
  16. package/dist/SingleSelect.js +1 -1
  17. package/dist/Sonner.js +1 -1
  18. package/dist/Switch.js +5 -5
  19. package/dist/TabsSkeleton.js +1 -1
  20. package/dist/Toggle.js +2 -2
  21. package/dist/assets/quantum-ui.css +296 -392
  22. package/dist/calendar2.js +1 -1
  23. package/dist/cells.js +2 -2
  24. package/dist/collapsible2.js +1 -1
  25. package/dist/components/FormattedDate.js +2 -2
  26. package/dist/components/RichTextEditor.js +1 -1
  27. package/dist/components/Select.js +4 -4
  28. package/dist/components/TreeView.js +7 -7
  29. package/dist/dropdown-menu.js +9 -9
  30. package/dist/field.js +1 -1
  31. package/dist/image-component.js +1 -1
  32. package/dist/index.js +4 -4
  33. package/dist/index10.js +1499 -102
  34. package/dist/index10.js.map +1 -1
  35. package/dist/index11.js +37 -1499
  36. package/dist/index11.js.map +1 -1
  37. package/dist/index12.js +476 -29
  38. package/dist/index12.js.map +1 -1
  39. package/dist/index13.js +230 -426
  40. package/dist/index13.js.map +1 -1
  41. package/dist/index14.js +1073 -214
  42. package/dist/index14.js.map +1 -1
  43. package/dist/index15.js +14 -1139
  44. package/dist/index15.js.map +1 -1
  45. package/dist/index16.js +20 -14
  46. package/dist/index16.js.map +1 -1
  47. package/dist/index17.js +180 -25
  48. package/dist/index17.js.map +1 -1
  49. package/dist/index18.js +201 -173
  50. package/dist/index18.js.map +1 -1
  51. package/dist/index19.js +69 -203
  52. package/dist/index19.js.map +1 -1
  53. package/dist/index20.js +211 -70
  54. package/dist/index20.js.map +1 -1
  55. package/dist/index21.js +117 -207
  56. package/dist/index21.js.map +1 -1
  57. package/dist/index22.js +71 -123
  58. package/dist/index22.js.map +1 -1
  59. package/dist/index23.js +11 -74
  60. package/dist/index23.js.map +1 -1
  61. package/dist/index24.js +1134 -13
  62. package/dist/index24.js.map +1 -1
  63. package/dist/index25.js +2733 -1103
  64. package/dist/index25.js.map +1 -1
  65. package/dist/index26.js +24 -2755
  66. package/dist/index26.js.map +1 -1
  67. package/dist/index27.js +4 -32
  68. package/dist/index27.js.map +1 -1
  69. package/dist/index28.js +37 -4
  70. package/dist/index28.js.map +1 -1
  71. package/dist/index29.js +310 -36
  72. package/dist/index29.js.map +1 -1
  73. package/dist/index30.js +7 -309
  74. package/dist/index30.js.map +1 -1
  75. package/dist/index31.js +30 -8
  76. package/dist/index31.js.map +1 -1
  77. package/dist/index32.js +59 -29
  78. package/dist/index32.js.map +1 -1
  79. package/dist/index33.js +10 -59
  80. package/dist/index33.js.map +1 -1
  81. package/dist/index34.js +35 -10
  82. package/dist/index34.js.map +1 -1
  83. package/dist/index35.js +36810 -27
  84. package/dist/index35.js.map +1 -1
  85. package/dist/index4.js +136 -86
  86. package/dist/index4.js.map +1 -1
  87. package/dist/index5.js +315 -36745
  88. package/dist/index5.js.map +1 -1
  89. package/dist/index6.js +12 -141
  90. package/dist/index6.js.map +1 -1
  91. package/dist/index7.js +82 -382
  92. package/dist/index7.js.map +1 -1
  93. package/dist/index8.js +42 -12
  94. package/dist/index8.js.map +1 -1
  95. package/dist/index9.js +102 -42
  96. package/dist/index9.js.map +1 -1
  97. package/dist/lib/index.d.ts.map +1 -1
  98. package/dist/popover.js +1 -1
  99. package/dist/select2.js +1 -1
  100. package/dist/separator2.js +1 -1
  101. package/dist/tooltip.js +1 -1
  102. package/dist/useTimer.js +1 -1
  103. package/dist/utils/axios.js +1 -1
  104. package/dist/utils/currency.js +2 -2
  105. package/dist/utils/format.js +2 -2
  106. package/dist/utils/money.js +1 -1
  107. package/dist/utils/timezone.js +1 -1
  108. package/package.json +1 -1
package/dist/index13.js CHANGED
@@ -1,487 +1,291 @@
1
1
  import * as React from 'react';
2
- import { u as useControllableState, P as Primitive, c as composeEventHandlers, a as createSlottable } from './index19.js';
3
- import { u as useComposedRefs } from './index12.js';
4
- import { c as createContextScope } from './index20.js';
5
- import { R as Root2, A as Anchor, c as createPopperScope, P as Portal$1, a as Arrow, D as DismissableLayer, C as Content } from './index26.js';
6
- import { u as useId } from './index24.js';
7
- import { P as Presence } from './index22.js';
8
- import { R as Root } from './index27.js';
9
- import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { u as useControllableState, P as Primitive, c as composeEventHandlers, b as createSlot } from './index18.js';
3
+ import { u as useComposedRefs } from './index11.js';
4
+ import { c as createContextScope } from './index19.js';
5
+ import { R as Root2$1, A as Anchor, P as Portal$1, c as createPopperScope, D as DismissableLayer, C as Content, a as Arrow } from './index25.js';
6
+ import { h as hideOthers, R as ReactRemoveScroll, u as useFocusGuards, F as FocusScope } from './Combination.js';
7
+ import { u as useId } from './index23.js';
8
+ import { P as Presence } from './index21.js';
9
+ import { jsx } from 'react/jsx-runtime';
10
10
 
11
- var [createTooltipContext] = createContextScope("Tooltip", [
11
+ var POPOVER_NAME = "Popover";
12
+ var [createPopoverContext] = createContextScope(POPOVER_NAME, [
12
13
  createPopperScope
13
14
  ]);
14
15
  var usePopperScope = createPopperScope();
15
- var PROVIDER_NAME = "TooltipProvider";
16
- var DEFAULT_DELAY_DURATION = 700;
17
- var TOOLTIP_OPEN = "tooltip.open";
18
- var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);
19
- var TooltipProvider = (props) => {
16
+ var [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);
17
+ var Popover = (props) => {
20
18
  const {
21
- __scopeTooltip,
22
- delayDuration = DEFAULT_DELAY_DURATION,
23
- skipDelayDuration = 300,
24
- disableHoverableContent = false,
25
- children
26
- } = props;
27
- const isOpenDelayedRef = React.useRef(true);
28
- const isPointerInTransitRef = React.useRef(false);
29
- const skipDelayTimerRef = React.useRef(0);
30
- React.useEffect(() => {
31
- const skipDelayTimer = skipDelayTimerRef.current;
32
- return () => window.clearTimeout(skipDelayTimer);
33
- }, []);
34
- return /* @__PURE__ */ jsx(
35
- TooltipProviderContextProvider,
36
- {
37
- scope: __scopeTooltip,
38
- isOpenDelayedRef,
39
- delayDuration,
40
- onOpen: React.useCallback(() => {
41
- window.clearTimeout(skipDelayTimerRef.current);
42
- isOpenDelayedRef.current = false;
43
- }, []),
44
- onClose: React.useCallback(() => {
45
- window.clearTimeout(skipDelayTimerRef.current);
46
- skipDelayTimerRef.current = window.setTimeout(
47
- () => isOpenDelayedRef.current = true,
48
- skipDelayDuration
49
- );
50
- }, [skipDelayDuration]),
51
- isPointerInTransitRef,
52
- onPointerInTransitChange: React.useCallback((inTransit) => {
53
- isPointerInTransitRef.current = inTransit;
54
- }, []),
55
- disableHoverableContent,
56
- children
57
- }
58
- );
59
- };
60
- TooltipProvider.displayName = PROVIDER_NAME;
61
- var TOOLTIP_NAME = "Tooltip";
62
- var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);
63
- var Tooltip = (props) => {
64
- const {
65
- __scopeTooltip,
19
+ __scopePopover,
66
20
  children,
67
21
  open: openProp,
68
22
  defaultOpen,
69
23
  onOpenChange,
70
- disableHoverableContent: disableHoverableContentProp,
71
- delayDuration: delayDurationProp
24
+ modal = false
72
25
  } = props;
73
- const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
74
- const popperScope = usePopperScope(__scopeTooltip);
75
- const [trigger, setTrigger] = React.useState(null);
76
- const contentId = useId();
77
- const openTimerRef = React.useRef(0);
78
- const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
79
- const delayDuration = delayDurationProp ?? providerContext.delayDuration;
80
- const wasOpenDelayedRef = React.useRef(false);
26
+ const popperScope = usePopperScope(__scopePopover);
27
+ const triggerRef = React.useRef(null);
28
+ const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
81
29
  const [open, setOpen] = useControllableState({
82
30
  prop: openProp,
83
31
  defaultProp: defaultOpen ?? false,
84
- onChange: (open2) => {
85
- if (open2) {
86
- providerContext.onOpen();
87
- document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));
88
- } else {
89
- providerContext.onClose();
90
- }
91
- onOpenChange?.(open2);
92
- },
93
- caller: TOOLTIP_NAME
32
+ onChange: onOpenChange,
33
+ caller: POPOVER_NAME
94
34
  });
95
- const stateAttribute = React.useMemo(() => {
96
- return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
97
- }, [open]);
98
- const handleOpen = React.useCallback(() => {
99
- window.clearTimeout(openTimerRef.current);
100
- openTimerRef.current = 0;
101
- wasOpenDelayedRef.current = false;
102
- setOpen(true);
103
- }, [setOpen]);
104
- const handleClose = React.useCallback(() => {
105
- window.clearTimeout(openTimerRef.current);
106
- openTimerRef.current = 0;
107
- setOpen(false);
108
- }, [setOpen]);
109
- const handleDelayedOpen = React.useCallback(() => {
110
- window.clearTimeout(openTimerRef.current);
111
- openTimerRef.current = window.setTimeout(() => {
112
- wasOpenDelayedRef.current = true;
113
- setOpen(true);
114
- openTimerRef.current = 0;
115
- }, delayDuration);
116
- }, [delayDuration, setOpen]);
117
- React.useEffect(() => {
118
- return () => {
119
- if (openTimerRef.current) {
120
- window.clearTimeout(openTimerRef.current);
121
- openTimerRef.current = 0;
122
- }
123
- };
124
- }, []);
125
- return /* @__PURE__ */ jsx(Root2, { ...popperScope, children: /* @__PURE__ */ jsx(
126
- TooltipContextProvider,
35
+ return /* @__PURE__ */ jsx(Root2$1, { ...popperScope, children: /* @__PURE__ */ jsx(
36
+ PopoverProvider,
127
37
  {
128
- scope: __scopeTooltip,
129
- contentId,
38
+ scope: __scopePopover,
39
+ contentId: useId(),
40
+ triggerRef,
130
41
  open,
131
- stateAttribute,
132
- trigger,
133
- onTriggerChange: setTrigger,
134
- onTriggerEnter: React.useCallback(() => {
135
- if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();
136
- else handleOpen();
137
- }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),
138
- onTriggerLeave: React.useCallback(() => {
139
- if (disableHoverableContent) {
140
- handleClose();
141
- } else {
142
- window.clearTimeout(openTimerRef.current);
143
- openTimerRef.current = 0;
144
- }
145
- }, [handleClose, disableHoverableContent]),
146
- onOpen: handleOpen,
147
- onClose: handleClose,
148
- disableHoverableContent,
42
+ onOpenChange: setOpen,
43
+ onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
44
+ hasCustomAnchor,
45
+ onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),
46
+ onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),
47
+ modal,
149
48
  children
150
49
  }
151
50
  ) });
152
51
  };
153
- Tooltip.displayName = TOOLTIP_NAME;
154
- var TRIGGER_NAME = "TooltipTrigger";
155
- var TooltipTrigger = React.forwardRef(
52
+ Popover.displayName = POPOVER_NAME;
53
+ var ANCHOR_NAME = "PopoverAnchor";
54
+ var PopoverAnchor = React.forwardRef(
156
55
  (props, forwardedRef) => {
157
- const { __scopeTooltip, ...triggerProps } = props;
158
- const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);
159
- const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);
160
- const popperScope = usePopperScope(__scopeTooltip);
161
- const ref = React.useRef(null);
162
- const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);
163
- const isPointerDownRef = React.useRef(false);
164
- const hasPointerMoveOpenedRef = React.useRef(false);
165
- const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);
56
+ const { __scopePopover, ...anchorProps } = props;
57
+ const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
58
+ const popperScope = usePopperScope(__scopePopover);
59
+ const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
166
60
  React.useEffect(() => {
167
- return () => document.removeEventListener("pointerup", handlePointerUp);
168
- }, [handlePointerUp]);
169
- return /* @__PURE__ */ jsx(Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(
61
+ onCustomAnchorAdd();
62
+ return () => onCustomAnchorRemove();
63
+ }, [onCustomAnchorAdd, onCustomAnchorRemove]);
64
+ return /* @__PURE__ */ jsx(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });
65
+ }
66
+ );
67
+ PopoverAnchor.displayName = ANCHOR_NAME;
68
+ var TRIGGER_NAME = "PopoverTrigger";
69
+ var PopoverTrigger = React.forwardRef(
70
+ (props, forwardedRef) => {
71
+ const { __scopePopover, ...triggerProps } = props;
72
+ const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
73
+ const popperScope = usePopperScope(__scopePopover);
74
+ const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
75
+ const trigger = /* @__PURE__ */ jsx(
170
76
  Primitive.button,
171
77
  {
172
- "aria-describedby": context.open ? context.contentId : void 0,
173
- "data-state": context.stateAttribute,
78
+ type: "button",
79
+ "aria-haspopup": "dialog",
80
+ "aria-expanded": context.open,
81
+ "aria-controls": context.contentId,
82
+ "data-state": getState(context.open),
174
83
  ...triggerProps,
175
- ref: composedRefs,
176
- onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
177
- if (event.pointerType === "touch") return;
178
- if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {
179
- context.onTriggerEnter();
180
- hasPointerMoveOpenedRef.current = true;
181
- }
182
- }),
183
- onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {
184
- context.onTriggerLeave();
185
- hasPointerMoveOpenedRef.current = false;
186
- }),
187
- onPointerDown: composeEventHandlers(props.onPointerDown, () => {
188
- if (context.open) {
189
- context.onClose();
190
- }
191
- isPointerDownRef.current = true;
192
- document.addEventListener("pointerup", handlePointerUp, { once: true });
193
- }),
194
- onFocus: composeEventHandlers(props.onFocus, () => {
195
- if (!isPointerDownRef.current) context.onOpen();
196
- }),
197
- onBlur: composeEventHandlers(props.onBlur, context.onClose),
198
- onClick: composeEventHandlers(props.onClick, context.onClose)
84
+ ref: composedTriggerRef,
85
+ onClick: composeEventHandlers(props.onClick, context.onOpenToggle)
199
86
  }
200
- ) });
87
+ );
88
+ return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(Anchor, { asChild: true, ...popperScope, children: trigger });
201
89
  }
202
90
  );
203
- TooltipTrigger.displayName = TRIGGER_NAME;
204
- var PORTAL_NAME = "TooltipPortal";
205
- var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {
91
+ PopoverTrigger.displayName = TRIGGER_NAME;
92
+ var PORTAL_NAME = "PopoverPortal";
93
+ var [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {
206
94
  forceMount: void 0
207
95
  });
208
- var TooltipPortal = (props) => {
209
- const { __scopeTooltip, forceMount, children, container } = props;
210
- const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);
211
- return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Portal$1, { asChild: true, container, children }) }) });
96
+ var PopoverPortal = (props) => {
97
+ const { __scopePopover, forceMount, children, container } = props;
98
+ const context = usePopoverContext(PORTAL_NAME, __scopePopover);
99
+ return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Portal$1, { asChild: true, container, children }) }) });
212
100
  };
213
- TooltipPortal.displayName = PORTAL_NAME;
214
- var CONTENT_NAME = "TooltipContent";
215
- var TooltipContent = React.forwardRef(
101
+ PopoverPortal.displayName = PORTAL_NAME;
102
+ var CONTENT_NAME = "PopoverContent";
103
+ var PopoverContent = React.forwardRef(
216
104
  (props, forwardedRef) => {
217
- const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);
218
- const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
219
- const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
220
- return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });
105
+ const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);
106
+ const { forceMount = portalContext.forceMount, ...contentProps } = props;
107
+ const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
108
+ return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });
221
109
  }
222
110
  );
223
- var TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {
224
- const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
225
- const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);
226
- const ref = React.useRef(null);
227
- const composedRefs = useComposedRefs(forwardedRef, ref);
228
- const [pointerGraceArea, setPointerGraceArea] = React.useState(null);
229
- const { trigger, onClose } = context;
230
- const content = ref.current;
231
- const { onPointerInTransitChange } = providerContext;
232
- const handleRemoveGraceArea = React.useCallback(() => {
233
- setPointerGraceArea(null);
234
- onPointerInTransitChange(false);
235
- }, [onPointerInTransitChange]);
236
- const handleCreateGraceArea = React.useCallback(
237
- (event, hoverTarget) => {
238
- const currentTarget = event.currentTarget;
239
- const exitPoint = { x: event.clientX, y: event.clientY };
240
- const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());
241
- const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);
242
- const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());
243
- const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);
244
- setPointerGraceArea(graceArea);
245
- onPointerInTransitChange(true);
246
- },
247
- [onPointerInTransitChange]
248
- );
249
- React.useEffect(() => {
250
- return () => handleRemoveGraceArea();
251
- }, [handleRemoveGraceArea]);
252
- React.useEffect(() => {
253
- if (trigger && content) {
254
- const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);
255
- const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);
256
- trigger.addEventListener("pointerleave", handleTriggerLeave);
257
- content.addEventListener("pointerleave", handleContentLeave);
258
- return () => {
259
- trigger.removeEventListener("pointerleave", handleTriggerLeave);
260
- content.removeEventListener("pointerleave", handleContentLeave);
261
- };
262
- }
263
- }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);
264
- React.useEffect(() => {
265
- if (pointerGraceArea) {
266
- const handleTrackPointerGrace = (event) => {
267
- const target = event.target;
268
- const pointerPosition = { x: event.clientX, y: event.clientY };
269
- const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);
270
- const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);
271
- if (hasEnteredTarget) {
272
- handleRemoveGraceArea();
273
- } else if (isPointerOutsideGraceArea) {
274
- handleRemoveGraceArea();
275
- onClose();
111
+ PopoverContent.displayName = CONTENT_NAME;
112
+ var Slot = createSlot("PopoverContent.RemoveScroll");
113
+ var PopoverContentModal = React.forwardRef(
114
+ (props, forwardedRef) => {
115
+ const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
116
+ const contentRef = React.useRef(null);
117
+ const composedRefs = useComposedRefs(forwardedRef, contentRef);
118
+ const isRightClickOutsideRef = React.useRef(false);
119
+ React.useEffect(() => {
120
+ const content = contentRef.current;
121
+ if (content) return hideOthers(content);
122
+ }, []);
123
+ return /* @__PURE__ */ jsx(ReactRemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(
124
+ PopoverContentImpl,
125
+ {
126
+ ...props,
127
+ ref: composedRefs,
128
+ trapFocus: context.open,
129
+ disableOutsidePointerEvents: true,
130
+ onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
131
+ event.preventDefault();
132
+ if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();
133
+ }),
134
+ onPointerDownOutside: composeEventHandlers(
135
+ props.onPointerDownOutside,
136
+ (event) => {
137
+ const originalEvent = event.detail.originalEvent;
138
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
139
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
140
+ isRightClickOutsideRef.current = isRightClick;
141
+ },
142
+ { checkForDefaultPrevented: false }
143
+ ),
144
+ onFocusOutside: composeEventHandlers(
145
+ props.onFocusOutside,
146
+ (event) => event.preventDefault(),
147
+ { checkForDefaultPrevented: false }
148
+ )
149
+ }
150
+ ) });
151
+ }
152
+ );
153
+ var PopoverContentNonModal = React.forwardRef(
154
+ (props, forwardedRef) => {
155
+ const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
156
+ const hasInteractedOutsideRef = React.useRef(false);
157
+ const hasPointerDownOutsideRef = React.useRef(false);
158
+ return /* @__PURE__ */ jsx(
159
+ PopoverContentImpl,
160
+ {
161
+ ...props,
162
+ ref: forwardedRef,
163
+ trapFocus: false,
164
+ disableOutsidePointerEvents: false,
165
+ onCloseAutoFocus: (event) => {
166
+ props.onCloseAutoFocus?.(event);
167
+ if (!event.defaultPrevented) {
168
+ if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();
169
+ event.preventDefault();
170
+ }
171
+ hasInteractedOutsideRef.current = false;
172
+ hasPointerDownOutsideRef.current = false;
173
+ },
174
+ onInteractOutside: (event) => {
175
+ props.onInteractOutside?.(event);
176
+ if (!event.defaultPrevented) {
177
+ hasInteractedOutsideRef.current = true;
178
+ if (event.detail.originalEvent.type === "pointerdown") {
179
+ hasPointerDownOutsideRef.current = true;
180
+ }
181
+ }
182
+ const target = event.target;
183
+ const targetIsTrigger = context.triggerRef.current?.contains(target);
184
+ if (targetIsTrigger) event.preventDefault();
185
+ if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) {
186
+ event.preventDefault();
187
+ }
276
188
  }
277
- };
278
- document.addEventListener("pointermove", handleTrackPointerGrace);
279
- return () => document.removeEventListener("pointermove", handleTrackPointerGrace);
280
- }
281
- }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);
282
- return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });
283
- });
284
- var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });
285
- var Slottable = createSlottable("TooltipContent");
286
- var TooltipContentImpl = React.forwardRef(
189
+ }
190
+ );
191
+ }
192
+ );
193
+ var PopoverContentImpl = React.forwardRef(
287
194
  (props, forwardedRef) => {
288
195
  const {
289
- __scopeTooltip,
290
- children,
291
- "aria-label": ariaLabel,
196
+ __scopePopover,
197
+ trapFocus,
198
+ onOpenAutoFocus,
199
+ onCloseAutoFocus,
200
+ disableOutsidePointerEvents,
292
201
  onEscapeKeyDown,
293
202
  onPointerDownOutside,
203
+ onFocusOutside,
204
+ onInteractOutside,
294
205
  ...contentProps
295
206
  } = props;
296
- const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
297
- const popperScope = usePopperScope(__scopeTooltip);
298
- const { onClose } = context;
299
- React.useEffect(() => {
300
- document.addEventListener(TOOLTIP_OPEN, onClose);
301
- return () => document.removeEventListener(TOOLTIP_OPEN, onClose);
302
- }, [onClose]);
303
- React.useEffect(() => {
304
- if (context.trigger) {
305
- const handleScroll = (event) => {
306
- const target = event.target;
307
- if (target?.contains(context.trigger)) onClose();
308
- };
309
- window.addEventListener("scroll", handleScroll, { capture: true });
310
- return () => window.removeEventListener("scroll", handleScroll, { capture: true });
311
- }
312
- }, [context.trigger, onClose]);
207
+ const context = usePopoverContext(CONTENT_NAME, __scopePopover);
208
+ const popperScope = usePopperScope(__scopePopover);
209
+ useFocusGuards();
313
210
  return /* @__PURE__ */ jsx(
314
- DismissableLayer,
211
+ FocusScope,
315
212
  {
316
213
  asChild: true,
317
- disableOutsidePointerEvents: false,
318
- onEscapeKeyDown,
319
- onPointerDownOutside,
320
- onFocusOutside: (event) => event.preventDefault(),
321
- onDismiss: onClose,
322
- children: /* @__PURE__ */ jsxs(
323
- Content,
214
+ loop: true,
215
+ trapped: trapFocus,
216
+ onMountAutoFocus: onOpenAutoFocus,
217
+ onUnmountAutoFocus: onCloseAutoFocus,
218
+ children: /* @__PURE__ */ jsx(
219
+ DismissableLayer,
324
220
  {
325
- "data-state": context.stateAttribute,
326
- ...popperScope,
327
- ...contentProps,
328
- ref: forwardedRef,
329
- style: {
330
- ...contentProps.style,
331
- // re-namespace exposed content custom properties
332
- ...{
333
- "--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
334
- "--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
335
- "--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
336
- "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
337
- "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
221
+ asChild: true,
222
+ disableOutsidePointerEvents,
223
+ onInteractOutside,
224
+ onEscapeKeyDown,
225
+ onPointerDownOutside,
226
+ onFocusOutside,
227
+ onDismiss: () => context.onOpenChange(false),
228
+ children: /* @__PURE__ */ jsx(
229
+ Content,
230
+ {
231
+ "data-state": getState(context.open),
232
+ role: "dialog",
233
+ id: context.contentId,
234
+ ...popperScope,
235
+ ...contentProps,
236
+ ref: forwardedRef,
237
+ style: {
238
+ ...contentProps.style,
239
+ // re-namespace exposed content custom properties
240
+ ...{
241
+ "--radix-popover-content-transform-origin": "var(--radix-popper-transform-origin)",
242
+ "--radix-popover-content-available-width": "var(--radix-popper-available-width)",
243
+ "--radix-popover-content-available-height": "var(--radix-popper-available-height)",
244
+ "--radix-popover-trigger-width": "var(--radix-popper-anchor-width)",
245
+ "--radix-popover-trigger-height": "var(--radix-popper-anchor-height)"
246
+ }
247
+ }
338
248
  }
339
- },
340
- children: [
341
- /* @__PURE__ */ jsx(Slottable, { children }),
342
- /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) })
343
- ]
249
+ )
344
250
  }
345
251
  )
346
252
  }
347
253
  );
348
254
  }
349
255
  );
350
- TooltipContent.displayName = CONTENT_NAME;
351
- var ARROW_NAME = "TooltipArrow";
352
- var TooltipArrow = React.forwardRef(
256
+ var CLOSE_NAME = "PopoverClose";
257
+ var PopoverClose = React.forwardRef(
353
258
  (props, forwardedRef) => {
354
- const { __scopeTooltip, ...arrowProps } = props;
355
- const popperScope = usePopperScope(__scopeTooltip);
356
- const visuallyHiddenContentContext = useVisuallyHiddenContentContext(
357
- ARROW_NAME,
358
- __scopeTooltip
259
+ const { __scopePopover, ...closeProps } = props;
260
+ const context = usePopoverContext(CLOSE_NAME, __scopePopover);
261
+ return /* @__PURE__ */ jsx(
262
+ Primitive.button,
263
+ {
264
+ type: "button",
265
+ ...closeProps,
266
+ ref: forwardedRef,
267
+ onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))
268
+ }
359
269
  );
360
- return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });
361
270
  }
362
271
  );
363
- TooltipArrow.displayName = ARROW_NAME;
364
- function getExitSideFromRect(point, rect) {
365
- const top = Math.abs(rect.top - point.y);
366
- const bottom = Math.abs(rect.bottom - point.y);
367
- const right = Math.abs(rect.right - point.x);
368
- const left = Math.abs(rect.left - point.x);
369
- switch (Math.min(top, bottom, right, left)) {
370
- case left:
371
- return "left";
372
- case right:
373
- return "right";
374
- case top:
375
- return "top";
376
- case bottom:
377
- return "bottom";
378
- default:
379
- throw new Error("unreachable");
380
- }
381
- }
382
- function getPaddedExitPoints(exitPoint, exitSide, padding = 5) {
383
- const paddedExitPoints = [];
384
- switch (exitSide) {
385
- case "top":
386
- paddedExitPoints.push(
387
- { x: exitPoint.x - padding, y: exitPoint.y + padding },
388
- { x: exitPoint.x + padding, y: exitPoint.y + padding }
389
- );
390
- break;
391
- case "bottom":
392
- paddedExitPoints.push(
393
- { x: exitPoint.x - padding, y: exitPoint.y - padding },
394
- { x: exitPoint.x + padding, y: exitPoint.y - padding }
395
- );
396
- break;
397
- case "left":
398
- paddedExitPoints.push(
399
- { x: exitPoint.x + padding, y: exitPoint.y - padding },
400
- { x: exitPoint.x + padding, y: exitPoint.y + padding }
401
- );
402
- break;
403
- case "right":
404
- paddedExitPoints.push(
405
- { x: exitPoint.x - padding, y: exitPoint.y - padding },
406
- { x: exitPoint.x - padding, y: exitPoint.y + padding }
407
- );
408
- break;
409
- }
410
- return paddedExitPoints;
411
- }
412
- function getPointsFromRect(rect) {
413
- const { top, right, bottom, left } = rect;
414
- return [
415
- { x: left, y: top },
416
- { x: right, y: top },
417
- { x: right, y: bottom },
418
- { x: left, y: bottom }
419
- ];
420
- }
421
- function isPointInPolygon(point, polygon) {
422
- const { x, y } = point;
423
- let inside = false;
424
- for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
425
- const ii = polygon[i];
426
- const jj = polygon[j];
427
- const xi = ii.x;
428
- const yi = ii.y;
429
- const xj = jj.x;
430
- const yj = jj.y;
431
- const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
432
- if (intersect) inside = !inside;
433
- }
434
- return inside;
435
- }
436
- function getHull(points) {
437
- const newPoints = points.slice();
438
- newPoints.sort((a, b) => {
439
- if (a.x < b.x) return -1;
440
- else if (a.x > b.x) return 1;
441
- else if (a.y < b.y) return -1;
442
- else if (a.y > b.y) return 1;
443
- else return 0;
444
- });
445
- return getHullPresorted(newPoints);
446
- }
447
- function getHullPresorted(points) {
448
- if (points.length <= 1) return points.slice();
449
- const upperHull = [];
450
- for (let i = 0; i < points.length; i++) {
451
- const p = points[i];
452
- while (upperHull.length >= 2) {
453
- const q = upperHull[upperHull.length - 1];
454
- const r = upperHull[upperHull.length - 2];
455
- if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();
456
- else break;
457
- }
458
- upperHull.push(p);
459
- }
460
- upperHull.pop();
461
- const lowerHull = [];
462
- for (let i = points.length - 1; i >= 0; i--) {
463
- const p = points[i];
464
- while (lowerHull.length >= 2) {
465
- const q = lowerHull[lowerHull.length - 1];
466
- const r = lowerHull[lowerHull.length - 2];
467
- if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();
468
- else break;
469
- }
470
- lowerHull.push(p);
471
- }
472
- lowerHull.pop();
473
- if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {
474
- return upperHull;
475
- } else {
476
- return upperHull.concat(lowerHull);
272
+ PopoverClose.displayName = CLOSE_NAME;
273
+ var ARROW_NAME = "PopoverArrow";
274
+ var PopoverArrow = React.forwardRef(
275
+ (props, forwardedRef) => {
276
+ const { __scopePopover, ...arrowProps } = props;
277
+ const popperScope = usePopperScope(__scopePopover);
278
+ return /* @__PURE__ */ jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });
477
279
  }
280
+ );
281
+ PopoverArrow.displayName = ARROW_NAME;
282
+ function getState(open) {
283
+ return open ? "open" : "closed";
478
284
  }
479
- var Provider = TooltipProvider;
480
- var Root3 = Tooltip;
481
- var Trigger = TooltipTrigger;
482
- var Portal = TooltipPortal;
483
- var Content2 = TooltipContent;
484
- var Arrow2 = TooltipArrow;
285
+ var Root2 = Popover;
286
+ var Trigger = PopoverTrigger;
287
+ var Portal = PopoverPortal;
288
+ var Content2 = PopoverContent;
485
289
 
486
- export { Arrow2 as A, Content2 as C, Provider as P, Root3 as R, Trigger as T, Portal as a };
290
+ export { Content2 as C, Portal as P, Root2 as R, Trigger as T, PopoverPortal as a };
487
291
  //# sourceMappingURL=index13.js.map