@tamagui/popover 2.0.0-rc.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cjs/Popover.cjs +637 -406
  2. package/dist/cjs/Popover.native.js +651 -436
  3. package/dist/cjs/Popover.native.js.map +1 -1
  4. package/dist/cjs/index.cjs +7 -5
  5. package/dist/cjs/index.native.js +7 -5
  6. package/dist/cjs/index.native.js.map +1 -1
  7. package/dist/cjs/useFloatingContext.cjs +226 -58
  8. package/dist/cjs/useFloatingContext.native.js +28 -26
  9. package/dist/cjs/useFloatingContext.native.js.map +1 -1
  10. package/dist/esm/Popover.mjs +589 -376
  11. package/dist/esm/Popover.mjs.map +1 -1
  12. package/dist/esm/Popover.native.js +605 -408
  13. package/dist/esm/Popover.native.js.map +1 -1
  14. package/dist/esm/index.js +2 -2
  15. package/dist/esm/index.js.map +1 -6
  16. package/dist/esm/useFloatingContext.mjs +200 -34
  17. package/dist/esm/useFloatingContext.mjs.map +1 -1
  18. package/dist/jsx/Popover.mjs +589 -376
  19. package/dist/jsx/Popover.mjs.map +1 -1
  20. package/dist/jsx/Popover.native.js +651 -436
  21. package/dist/jsx/Popover.native.js.map +1 -1
  22. package/dist/jsx/index.js +2 -2
  23. package/dist/jsx/index.js.map +1 -6
  24. package/dist/jsx/index.native.js +7 -5
  25. package/dist/jsx/useFloatingContext.mjs +200 -34
  26. package/dist/jsx/useFloatingContext.mjs.map +1 -1
  27. package/dist/jsx/useFloatingContext.native.js +28 -26
  28. package/dist/jsx/useFloatingContext.native.js.map +1 -1
  29. package/package.json +25 -26
  30. package/src/Popover.tsx +536 -177
  31. package/src/useFloatingContext.tsx +321 -43
  32. package/types/Popover.d.ts +126 -8
  33. package/types/Popover.d.ts.map +1 -1
  34. package/types/useFloatingContext.d.ts +14 -8
  35. package/types/useFloatingContext.d.ts.map +1 -1
  36. package/dist/cjs/Popover.js +0 -394
  37. package/dist/cjs/Popover.js.map +0 -6
  38. package/dist/cjs/index.js +0 -16
  39. package/dist/cjs/index.js.map +0 -6
  40. package/dist/cjs/useFloatingContext.js +0 -74
  41. package/dist/cjs/useFloatingContext.js.map +0 -6
  42. package/dist/esm/Popover.js +0 -415
  43. package/dist/esm/Popover.js.map +0 -6
  44. package/dist/esm/useFloatingContext.js +0 -59
  45. package/dist/esm/useFloatingContext.js.map +0 -6
  46. package/dist/jsx/Popover.js +0 -415
  47. package/dist/jsx/Popover.js.map +0 -6
  48. package/dist/jsx/useFloatingContext.js +0 -59
  49. package/dist/jsx/useFloatingContext.js.map +0 -6
@@ -2,33 +2,35 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf,
6
- __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: !0
11
- });
12
- },
13
- __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
16
  get: () => from[key],
16
17
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
18
  });
18
- return to;
19
- };
19
+ }
20
+ return to;
21
+ };
20
22
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
26
- value: mod,
27
- enumerable: !0
28
- }) : target, mod)),
29
- __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
30
- value: !0
31
- }), mod);
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: true
30
+ }) : target, mod));
31
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: true
33
+ }), mod);
32
34
  var Popover_exports = {};
33
35
  __export(Popover_exports, {
34
36
  Popover: () => Popover,
@@ -37,162 +39,339 @@ __export(Popover_exports, {
37
39
  PopoverClose: () => PopoverClose,
38
40
  PopoverContent: () => PopoverContent,
39
41
  PopoverContext: () => PopoverContext,
42
+ PopoverContextProvider: () => PopoverContextProvider,
40
43
  PopoverTrigger: () => PopoverTrigger,
41
- usePopoverContext: () => usePopoverContext
44
+ PopoverTriggerContext: () => PopoverTriggerContext,
45
+ PopoverZIndexContext: () => PopoverZIndexContext,
46
+ closeLastOpenedPopover: () => closeLastOpenedPopover,
47
+ closeOpenPopovers: () => closeOpenPopovers,
48
+ hasOpenPopovers: () => hasOpenPopovers,
49
+ usePopoverContext: () => usePopoverContext,
50
+ usePopoverOpen: () => usePopoverOpen,
51
+ usePopoverTriggerContext: () => usePopoverTriggerContext,
52
+ usePopoverTriggerSetup: () => usePopoverTriggerSetup
42
53
  });
43
54
  module.exports = __toCommonJS(Popover_exports);
44
- var import_polyfill_dev = require("@tamagui/polyfill-dev"),
45
- import_adapt = require("@tamagui/adapt"),
46
- import_animate = require("@tamagui/animate"),
47
- import_animate_presence = require("@tamagui/animate-presence"),
48
- import_compose_refs = require("@tamagui/compose-refs"),
49
- import_constants = require("@tamagui/constants"),
50
- import_core = require("@tamagui/core"),
51
- import_floating = require("@tamagui/floating"),
52
- import_focus_scope = require("@tamagui/focus-scope"),
53
- import_helpers = require("@tamagui/helpers"),
54
- import_popper = require("@tamagui/popper"),
55
- import_portal = require("@tamagui/portal"),
56
- import_remove_scroll = require("@tamagui/remove-scroll"),
57
- import_scroll_view = require("@tamagui/scroll-view"),
58
- import_controller = require("@tamagui/sheet/controller"),
59
- import_stacks = require("@tamagui/stacks"),
60
- import_use_controllable_state = require("@tamagui/use-controllable-state"),
61
- import_z_index_stack = require("@tamagui/z-index-stack"),
62
- React = __toESM(require("react"), 1),
63
- import_useFloatingContext = require("./useFloatingContext.cjs"),
64
- import_jsx_runtime = require("react/jsx-runtime");
65
- const needsRepropagation = (0, import_portal.needsPortalRepropagation)(),
66
- PopoverContext = (0, import_core.createStyledContext)(
67
- // since we always provide this we can avoid setting here
68
- {}, "Popover__"),
69
- usePopoverContext = PopoverContext.useStyledContext,
70
- PopoverAnchor = React.forwardRef(function (props, forwardedRef) {
71
- const {
72
- scope,
73
- ...rest
74
- } = props,
75
- context = usePopoverContext(scope),
76
- {
77
- onCustomAnchorAdd,
78
- onCustomAnchorRemove
79
- } = context || {};
80
- return React.useEffect(() => (onCustomAnchorAdd(), () => onCustomAnchorRemove()), [onCustomAnchorAdd, onCustomAnchorRemove]), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
81
- scope,
82
- ...rest,
83
- ref: forwardedRef
84
- });
85
- }),
86
- PopoverTrigger = React.forwardRef(function (props, forwardedRef) {
87
- const {
88
- scope,
89
- ...rest
90
- } = props,
91
- context = usePopoverContext(scope),
92
- anchorTo = context.anchorTo,
93
- composedTriggerRef = (0, import_compose_refs.useComposedRefs)(forwardedRef, context.triggerRef);
94
- if (!props.children) return null;
95
- const trigger = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
96
- "aria-expanded": context.open,
97
- "data-state": getState(context.open),
98
- ...rest,
99
- ref: composedTriggerRef,
100
- onPress: (0, import_helpers.composeEventHandlers)(props.onPress, context.onOpenToggle)
101
- }),
102
- virtualRef = React.useMemo(() => anchorTo ? {
103
- current: {
104
- getBoundingClientRect: () => import_constants.isWeb ? DOMRect.fromRect(anchorTo) : anchorTo,
105
- ...(!import_constants.isWeb && {
106
- measure: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height),
107
- measureInWindow: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height)
108
- })
109
- }
110
- } : null, [context.anchorTo, anchorTo?.x, anchorTo?.y, anchorTo?.height, anchorTo?.width]);
111
- return context.hasCustomAnchor ? trigger : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
112
- ...(virtualRef && {
113
- virtualRef
114
- }),
55
+ require("@tamagui/polyfill-dev");
56
+ var import_adapt = require("@tamagui/adapt");
57
+ var import_animate = require("@tamagui/animate");
58
+ var import_animate_presence = require("@tamagui/animate-presence");
59
+ var import_compose_refs = require("@tamagui/compose-refs");
60
+ var import_constants = require("@tamagui/constants");
61
+ var import_core = require("@tamagui/core");
62
+ var import_dismissable = require("@tamagui/dismissable");
63
+ var import_floating = require("@tamagui/floating");
64
+ var import_focus_scope = require("@tamagui/focus-scope");
65
+ var import_helpers = require("@tamagui/helpers");
66
+ var import_popper = require("@tamagui/popper");
67
+ var import_portal = require("@tamagui/portal");
68
+ var import_remove_scroll = require("@tamagui/remove-scroll");
69
+ var import_scroll_view = require("@tamagui/scroll-view");
70
+ var import_controller = require("@tamagui/sheet/controller");
71
+ var import_stacks = require("@tamagui/stacks");
72
+ var import_use_controllable_state = require("@tamagui/use-controllable-state");
73
+ var React = __toESM(require("react"), 1);
74
+ var import_useFloatingContext = require("./useFloatingContext.cjs");
75
+ var import_jsx_runtime = require("react/jsx-runtime");
76
+ const needsRepropagation = (0, import_portal.needsPortalRepropagation)();
77
+ const openPopovers = /* @__PURE__ */new Set();
78
+ const hasOpenPopovers = () => {
79
+ return openPopovers.size > 0;
80
+ };
81
+ const closeOpenPopovers = () => {
82
+ if (openPopovers.size === 0) return false;
83
+ openPopovers.forEach(setOpen => setOpen(false));
84
+ return true;
85
+ };
86
+ const closeLastOpenedPopover = () => {
87
+ if (openPopovers.size === 0) return false;
88
+ const last = Array.from(openPopovers).pop();
89
+ if (last) {
90
+ last(false);
91
+ return true;
92
+ }
93
+ return false;
94
+ };
95
+ const PopoverContext = (0, import_core.createStyledContext)(
96
+ // since we always provide this we can avoid setting here
97
+ {}, "Popover__");
98
+ const PopoverZIndexContext = React.createContext(void 0);
99
+ const PopoverAdaptHiddenContext = React.createContext(true);
100
+ const PopoverTriggerContext = (0, import_core.createStyledContext)({}, "PopoverTrigger__");
101
+ const usePopoverContext = PopoverContext.useStyledContext;
102
+ const usePopoverTriggerContext = PopoverTriggerContext.useStyledContext;
103
+ function usePopoverOpen(scope) {
104
+ return usePopoverContext(scope).open;
105
+ }
106
+ function usePopoverTriggerSetup(open) {
107
+ const triggerStateSettersRef = React.useRef(/* @__PURE__ */new Map());
108
+ const activeTriggerIdRef = React.useRef(null);
109
+ const setActiveTrigger = (0, import_core.useEvent)(id => {
110
+ const prevId = activeTriggerIdRef.current;
111
+ if (prevId === id) return;
112
+ if (prevId) triggerStateSettersRef.current.get(prevId)?.(false);
113
+ activeTriggerIdRef.current = id;
114
+ if (id && open) triggerStateSettersRef.current.get(id)?.(true);
115
+ });
116
+ const registerTrigger = (0, import_core.useEvent)((id, setOpenState) => {
117
+ triggerStateSettersRef.current.set(id, setOpenState);
118
+ setOpenState(activeTriggerIdRef.current === id && open);
119
+ });
120
+ const unregisterTrigger = (0, import_core.useEvent)(id => {
121
+ triggerStateSettersRef.current.delete(id);
122
+ if (activeTriggerIdRef.current === id) activeTriggerIdRef.current = null;
123
+ });
124
+ React.useEffect(() => {
125
+ if (!open) {
126
+ setActiveTrigger(null);
127
+ return;
128
+ }
129
+ const activeId = activeTriggerIdRef.current;
130
+ if (activeId) triggerStateSettersRef.current.get(activeId)?.(true);
131
+ }, [open, setActiveTrigger]);
132
+ return {
133
+ setActiveTrigger,
134
+ registerTrigger,
135
+ unregisterTrigger
136
+ };
137
+ }
138
+ const PopoverContextProvider = React.memo(({
139
+ scope,
140
+ children,
141
+ open,
142
+ onOpenChange,
143
+ onOpenToggle,
144
+ triggerRef,
145
+ id = "",
146
+ contentId,
147
+ hasCustomAnchor = false,
148
+ onCustomAnchorAdd = voidFn,
149
+ onCustomAnchorRemove = voidFn,
150
+ anchorTo,
151
+ adaptScope,
152
+ breakpointActive,
153
+ keepChildrenMounted,
154
+ disableDismissable,
155
+ hoverable
156
+ }) => {
157
+ const [branches] = React.useState(() => /* @__PURE__ */new Set());
158
+ const {
159
+ setActiveTrigger,
160
+ registerTrigger,
161
+ unregisterTrigger
162
+ } = usePopoverTriggerSetup(open);
163
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContext.Provider, {
164
+ scope,
165
+ popoverScope: scope,
166
+ adaptScope,
167
+ id,
168
+ contentId,
169
+ triggerRef,
170
+ open,
171
+ onOpenChange,
172
+ onOpenToggle,
173
+ hasCustomAnchor,
174
+ onCustomAnchorAdd,
175
+ onCustomAnchorRemove,
176
+ anchorTo,
177
+ branches,
178
+ breakpointActive,
179
+ keepChildrenMounted,
180
+ disableDismissable,
181
+ hoverable,
182
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverTriggerContext.Provider, {
115
183
  scope,
116
- asChild: !0,
117
- children: trigger
118
- });
119
- }),
120
- PopoverContentFrame = (0, import_core.styled)(import_popper.PopperContentFrame, {
121
- name: "Popover"
122
- }),
123
- PopoverContent = PopoverContentFrame.styleable(function (props, forwardedRef) {
124
- const {
125
- trapFocus,
126
- enableRemoveScroll = !1,
127
- zIndex,
128
- scope,
129
- ...contentImplProps
130
- } = props,
131
- context = usePopoverContext(scope),
132
- contentRef = React.useRef(null),
133
- composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, contentRef),
134
- isRightClickOutsideRef = React.useRef(!1),
135
- [isFullyHidden, setIsFullyHidden] = React.useState(!context.open);
136
- return React.useEffect(() => {
137
- context.open && isFullyHidden && setIsFullyHidden(!1);
138
- }, [context.open, isFullyHidden]), !context.keepChildrenMounted && isFullyHidden && !context.open ? null : /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverPortal, {
184
+ triggerRef,
185
+ hasCustomAnchor,
186
+ anchorTo,
187
+ branches,
188
+ onOpenToggle,
189
+ setActiveTrigger,
190
+ registerTrigger,
191
+ unregisterTrigger,
192
+ children
193
+ })
194
+ });
195
+ });
196
+ const voidFn = () => {};
197
+ const PopoverAnchor = React.memo(React.forwardRef(function PopoverAnchor2(props, forwardedRef) {
198
+ const {
199
+ scope,
200
+ ...rest
201
+ } = props;
202
+ const {
203
+ onCustomAnchorAdd,
204
+ onCustomAnchorRemove
205
+ } = usePopoverContext(scope) || {};
206
+ React.useEffect(() => {
207
+ onCustomAnchorAdd();
208
+ return () => onCustomAnchorRemove();
209
+ }, [onCustomAnchorAdd, onCustomAnchorRemove]);
210
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
211
+ scope,
212
+ ...rest,
213
+ ref: forwardedRef
214
+ });
215
+ }));
216
+ const PopoverTrigger = React.memo(React.forwardRef(function PopoverTrigger2(props, forwardedRef) {
217
+ const {
218
+ scope,
219
+ disablePressTrigger,
220
+ ...rest
221
+ } = props;
222
+ const triggerContext = usePopoverTriggerContext(scope);
223
+ const triggerId = React.useId();
224
+ const [open, setOpen] = React.useState(false);
225
+ const anchorTo = triggerContext.anchorTo;
226
+ const triggerElRef = React.useRef(null);
227
+ const composedTriggerRef = (0, import_compose_refs.useComposedRefs)(forwardedRef, triggerElRef);
228
+ const {
229
+ registerTrigger,
230
+ unregisterTrigger
231
+ } = triggerContext;
232
+ React.useEffect(() => {
233
+ registerTrigger(triggerId, setOpen);
234
+ return () => {
235
+ unregisterTrigger(triggerId);
236
+ };
237
+ }, [registerTrigger, unregisterTrigger, triggerId]);
238
+ if (!rest.children) return null;
239
+ const activateSelf = () => {
240
+ triggerContext.setActiveTrigger(triggerId);
241
+ const el = triggerElRef.current;
242
+ if (el) triggerContext.triggerRef.current = el;
243
+ };
244
+ const trigger = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
245
+ "aria-expanded": open,
246
+ "data-state": getState(open),
247
+ ...rest,
248
+ ref: composedTriggerRef,
249
+ onPress: (0, import_helpers.composeEventHandlers)(rest.onPress, () => {
250
+ if (disablePressTrigger) return;
251
+ triggerContext.setActiveTrigger(open ? null : triggerId);
252
+ triggerContext.onOpenToggle();
253
+ }),
254
+ onMouseEnter: (0, import_helpers.composeEventHandlers)(rest.onMouseEnter, activateSelf),
255
+ onPressIn: (0, import_helpers.composeEventHandlers)(rest.onPressIn, activateSelf),
256
+ onFocus: (0, import_helpers.composeEventHandlers)(rest.onFocus, activateSelf)
257
+ });
258
+ const virtualRef = React.useMemo(() => {
259
+ if (!anchorTo) return null;
260
+ return {
261
+ current: {
262
+ getBoundingClientRect: () => import_constants.isWeb ? DOMRect.fromRect(anchorTo) : anchorTo,
263
+ ...(!import_constants.isWeb && {
264
+ measure: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height),
265
+ measureInWindow: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height)
266
+ })
267
+ }
268
+ };
269
+ }, [triggerContext.anchorTo, anchorTo?.x, anchorTo?.y, anchorTo?.height, anchorTo?.width]);
270
+ const wrappedTrigger = import_constants.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_dismissable.DismissableBranch, {
271
+ branches: triggerContext.branches,
272
+ children: trigger
273
+ }) : trigger;
274
+ return triggerContext.hasCustomAnchor ? wrappedTrigger : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
275
+ ...(virtualRef && {
276
+ virtualRef
277
+ }),
278
+ scope,
279
+ asChild: true,
280
+ children: wrappedTrigger
281
+ });
282
+ }));
283
+ const PopoverContent = import_popper.PopperContentFrame.styleable(function PopoverContent2(props, forwardedRef) {
284
+ const {
285
+ trapFocus,
286
+ enableRemoveScroll = false,
287
+ zIndex: zIndexProp,
288
+ scope,
289
+ ...contentImplProps
290
+ } = props;
291
+ const context = usePopoverContext(scope);
292
+ const zIndexFromContext = React.useContext(PopoverZIndexContext);
293
+ const zIndex = zIndexProp ?? zIndexFromContext;
294
+ const open = usePopoverOpen(scope);
295
+ const contentRef = React.useRef(null);
296
+ const composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, contentRef);
297
+ const isRightClickOutsideRef = React.useRef(false);
298
+ const [isFullyHidden, setIsFullyHidden] = React.useState(!open);
299
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
300
+ if (open && isFullyHidden) setIsFullyHidden(false);
301
+ }, [open, isFullyHidden]);
302
+ const isAdaptFullyHidden = React.useContext(PopoverAdaptHiddenContext);
303
+ if (!context.keepChildrenMounted) {
304
+ if (context.breakpointActive) {
305
+ if (!open && isAdaptFullyHidden) return null;
306
+ } else if (isFullyHidden && !open) return null;
307
+ }
308
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverPortal, {
309
+ passThrough: context.breakpointActive,
310
+ context,
311
+ open,
312
+ zIndex,
313
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
139
314
  passThrough: context.breakpointActive,
140
- context,
141
- zIndex,
142
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
143
- passThrough: context.breakpointActive,
144
- pointerEvents: context.open ? contentImplProps.pointerEvents ?? "auto" : "none",
145
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContentImpl, {
146
- ...contentImplProps,
147
- context,
148
- enableRemoveScroll,
149
- ref: composedRefs,
150
- setIsFullyHidden,
151
- scope,
152
- trapFocus: trapFocus ?? context.open,
153
- disableOutsidePointerEvents: !0,
154
- onCloseAutoFocus: props.onCloseAutoFocus === !1 ? void 0 : (0, import_helpers.composeEventHandlers)(props.onCloseAutoFocus, event => {
155
- event.defaultPrevented || (event.preventDefault(), isRightClickOutsideRef.current || context.triggerRef.current?.focus());
156
- }),
157
- onPointerDownOutside: (0, import_helpers.composeEventHandlers)(props.onPointerDownOutside, event => {
158
- const originalEvent = event.detail.originalEvent,
159
- ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === !0,
160
- isRightClick = originalEvent.button === 2 || ctrlLeftClick;
161
- isRightClickOutsideRef.current = isRightClick;
162
- }, {
163
- checkDefaultPrevented: !1
164
- }),
165
- onFocusOutside: (0, import_helpers.composeEventHandlers)(props.onFocusOutside, event => event.preventDefault(), {
166
- checkDefaultPrevented: !1
167
- })
315
+ pointerEvents: open ? contentImplProps.pointerEvents ?? "auto" : "none",
316
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContentImpl, {
317
+ ...contentImplProps,
318
+ context,
319
+ open,
320
+ enableRemoveScroll,
321
+ ref: composedRefs,
322
+ setIsFullyHidden,
323
+ scope,
324
+ trapFocus: trapFocus ?? open,
325
+ disableOutsidePointerEvents: true,
326
+ onCloseAutoFocus: props.onCloseAutoFocus === false ? void 0 : (0, import_helpers.composeEventHandlers)(props.onCloseAutoFocus, event => {
327
+ if (event.defaultPrevented) return;
328
+ event.preventDefault();
329
+ if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();
330
+ }),
331
+ onPointerDownOutside: (0, import_helpers.composeEventHandlers)(props.onPointerDownOutside, event => {
332
+ const originalEvent = event.detail.originalEvent;
333
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
334
+ isRightClickOutsideRef.current = originalEvent.button === 2 || ctrlLeftClick;
335
+ }, {
336
+ checkDefaultPrevented: false
337
+ }),
338
+ onFocusOutside: (0, import_helpers.composeEventHandlers)(props.onFocusOutside, event => event.preventDefault(), {
339
+ checkDefaultPrevented: false
168
340
  })
169
341
  })
170
- });
171
- }),
172
- useParentContexts = scope => {
173
- const context = usePopoverContext(scope),
174
- popperContext = (0, import_popper.usePopperContext)(scope),
175
- adaptContext = (0, import_adapt.useAdaptContext)(context.adaptScope);
176
- return {
177
- popperContext,
178
- adaptContext,
179
- context
180
- };
342
+ })
343
+ });
344
+ });
345
+ const useParentContexts = scope => {
346
+ const context = usePopoverContext(scope);
347
+ const triggerContext = usePopoverTriggerContext(scope);
348
+ return {
349
+ popperContext: (0, import_popper.usePopperContext)(scope),
350
+ adaptContext: (0, import_adapt.useAdaptContext)(context.adaptScope),
351
+ context,
352
+ triggerContext
181
353
  };
354
+ };
182
355
  function RepropagateParentContexts({
183
356
  adaptContext,
184
357
  children,
185
358
  context,
359
+ triggerContext,
186
360
  popperContext
187
361
  }) {
188
362
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperProvider, {
189
363
  scope: context.popoverScope,
190
364
  ...popperContext,
191
365
  children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContext.Provider, {
366
+ scope: context.popoverScope,
192
367
  ...context,
193
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
194
- ...adaptContext,
195
- children
368
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverTriggerContext.Provider, {
369
+ scope: context.popoverScope,
370
+ ...triggerContext,
371
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
372
+ ...adaptContext,
373
+ children
374
+ })
196
375
  })
197
376
  })
198
377
  });
@@ -201,6 +380,8 @@ const PortalAdaptSafe = ({
201
380
  children,
202
381
  context
203
382
  }) => {
383
+ "use no memo";
384
+
204
385
  if (needsRepropagation) {
205
386
  const parentContexts = useParentContexts(context.popoverScope);
206
387
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.AdaptPortalContents, {
@@ -218,12 +399,14 @@ const PortalAdaptSafe = ({
218
399
  };
219
400
  function PopoverPortal({
220
401
  context,
402
+ open,
221
403
  zIndex,
222
404
  passThrough,
223
405
  children,
224
406
  onPress
225
407
  }) {
226
- const themeName = (0, import_core.useThemeName)();
408
+ "use no memo";
409
+
227
410
  let content = children;
228
411
  if (needsRepropagation) {
229
412
  const parentContexts = useParentContexts(context.popoverScope);
@@ -232,271 +415,319 @@ function PopoverPortal({
232
415
  children: content
233
416
  });
234
417
  }
235
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_portal.Portal, {
418
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_portal.Portal, {
236
419
  passThrough,
237
- stackZIndex: !0,
420
+ stackZIndex: true,
238
421
  zIndex,
239
- children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_core.Theme, {
240
- passThrough,
241
- contain: !0,
242
- forceClassName: !0,
243
- name: themeName,
244
- children: [!!context.open && !context.breakpointActive && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
245
- fullscreen: !0,
246
- onPress: (0, import_helpers.composeEventHandlers)(onPress, context.onOpenToggle)
247
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_z_index_stack.StackZIndexContext, {
248
- zIndex: (0, import_portal.resolveViewZIndex)(zIndex),
249
- children: content
250
- })]
251
- })
422
+ children: [!!open && !context.breakpointActive && !context.hoverable && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
423
+ fullscreen: true,
424
+ onPress: (0, import_helpers.composeEventHandlers)(onPress, context.onOpenToggle)
425
+ }), content]
252
426
  });
253
427
  }
254
- const PopoverContentImpl = React.forwardRef(function (props, forwardedRef) {
255
- const {
256
- trapFocus,
257
- scope,
258
- onOpenAutoFocus,
259
- onCloseAutoFocus,
260
- disableOutsidePointerEvents,
261
- disableFocusScope,
262
- onEscapeKeyDown,
263
- onPointerDownOutside,
264
- onFocusOutside,
265
- onInteractOutside,
266
- children,
267
- enableRemoveScroll,
268
- freezeContentsWhenHidden,
269
- setIsFullyHidden,
270
- lazyMount,
271
- context,
272
- ...contentProps
273
- } = props,
274
- {
275
- open,
276
- keepChildrenMounted
277
- } = context,
278
- handleExitComplete = React.useCallback(() => {
279
- setIsFullyHidden?.(!0);
280
- }, [setIsFullyHidden]);
281
- let contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate_presence.ResetPresence, {
282
- disable: context.breakpointActive,
283
- children
284
- });
285
- return context.breakpointActive || (contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_remove_scroll.RemoveScroll, {
286
- enabled: context.breakpointActive ? !1 : enableRemoveScroll ? open : !1,
287
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_focus_scope.FocusScope, {
288
- loop: trapFocus !== !1,
289
- enabled: context.breakpointActive || disableFocusScope ? !1 : open,
290
- trapped: context.breakpointActive ? !1 : trapFocus,
291
- onMountAutoFocus: onOpenAutoFocus,
292
- onUnmountAutoFocus: onCloseAutoFocus === !1 ? void 0 : onCloseAutoFocus,
293
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)("div", {
294
- style: dspContentsStyle,
295
- children: contents
296
- })
428
+ const PopoverContentImpl = React.forwardRef(function PopoverContentImpl2(props, forwardedRef) {
429
+ const {
430
+ trapFocus,
431
+ scope,
432
+ onOpenAutoFocus,
433
+ onCloseAutoFocus,
434
+ disableOutsidePointerEvents,
435
+ disableFocusScope,
436
+ onEscapeKeyDown,
437
+ onPointerDownOutside,
438
+ onFocusOutside,
439
+ onInteractOutside,
440
+ children,
441
+ enableRemoveScroll,
442
+ freezeContentsWhenHidden,
443
+ setIsFullyHidden,
444
+ lazyMount,
445
+ forceUnmount,
446
+ context,
447
+ open,
448
+ alwaysDisable,
449
+ ...contentProps
450
+ } = props;
451
+ const {
452
+ keepChildrenMounted,
453
+ disableDismissable
454
+ } = context;
455
+ const handleExitComplete = React.useCallback(() => {
456
+ setIsFullyHidden?.(true);
457
+ }, [setIsFullyHidden]);
458
+ let contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate_presence.ResetPresence, {
459
+ disable: context.breakpointActive,
460
+ children
461
+ });
462
+ const handleDismiss = React.useCallback(() => {
463
+ context.onOpenChange(false, "press");
464
+ }, [context]);
465
+ if (!context.breakpointActive) {
466
+ if (!alwaysDisable || !alwaysDisable.focus) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_focus_scope.FocusScope, {
467
+ loop: trapFocus !== false,
468
+ enabled: context.breakpointActive ? false : disableFocusScope ? false : open,
469
+ trapped: context.breakpointActive ? false : trapFocus,
470
+ onMountAutoFocus: onOpenAutoFocus,
471
+ onUnmountAutoFocus: onCloseAutoFocus === false ? void 0 : onCloseAutoFocus,
472
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)("div", {
473
+ style: dspContentsStyle,
474
+ children: contents
297
475
  })
298
- })), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate.Animate, {
299
- type: "presence",
300
- present: !!open,
301
- keepChildrenMounted: !!keepChildrenMounted,
302
- onExitComplete: handleExitComplete,
303
- lazyMount,
304
- passThrough: context.breakpointActive,
305
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperContent, {
306
- scope,
307
- "data-state": getState(open),
308
- id: context.contentId,
309
- ref: forwardedRef,
310
- passThrough: context.breakpointActive,
311
- ...contentProps,
312
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PortalAdaptSafe, {
313
- context,
314
- children: contents
315
- })
316
- }, context.contentId)
317
476
  });
318
- }),
319
- dspContentsStyle = {
320
- display: "contents"
321
- },
322
- PopoverClose = React.forwardRef(function (props, forwardedRef) {
323
- const {
324
- scope,
325
- ...rest
326
- } = props,
327
- context = usePopoverContext(scope);
328
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
329
- ...rest,
330
- ref: forwardedRef,
331
- componentName: "PopoverClose",
332
- onPress: (0, import_helpers.composeEventHandlers)(props.onPress, () => context?.onOpenChange?.(!1, "press"))
477
+ if (!alwaysDisable || !alwaysDisable["remove-scroll"]) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_remove_scroll.RemoveScroll, {
478
+ enabled: context.breakpointActive ? false : enableRemoveScroll ? open : false,
479
+ children: contents
333
480
  });
334
- }),
335
- PopoverArrow = import_popper.PopperArrowFrame.styleable(function (props, forwardedRef) {
336
- const {
337
- scope,
338
- ...rest
339
- } = props,
340
- context = usePopoverContext(scope);
341
- return (0, import_adapt.useAdaptIsActive)(context.adaptScope) ? null : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperArrow, {
342
- scope,
343
- componentName: "PopoverArrow",
344
- ...rest,
345
- ref: forwardedRef
481
+ if (!alwaysDisable || !alwaysDisable.dismiss) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_dismissable.Dismissable, {
482
+ branches: context.branches,
483
+ forceUnmount: disableDismissable || (forceUnmount ?? !open),
484
+ onEscapeKeyDown,
485
+ onPointerDownOutside,
486
+ onFocusOutside,
487
+ onInteractOutside,
488
+ onDismiss: handleDismiss,
489
+ children: contents
346
490
  });
347
- }),
348
- PopoverScrollView = React.forwardRef(({
491
+ }
492
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate.Animate, {
493
+ type: "presence",
494
+ present: Boolean(open),
495
+ keepChildrenMounted: Boolean(keepChildrenMounted),
496
+ onExitComplete: handleExitComplete,
497
+ lazyMount,
498
+ passThrough: context.breakpointActive,
499
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperContent, {
500
+ scope,
501
+ "data-state": getState(open),
502
+ id: context.contentId,
503
+ ref: forwardedRef,
504
+ passThrough: context.breakpointActive,
505
+ ...(!contentProps.unstyled && {
506
+ size: "$true",
507
+ backgroundColor: "$background",
508
+ alignItems: "center"
509
+ }),
510
+ ...contentProps,
511
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PortalAdaptSafe, {
512
+ context,
513
+ children: contents
514
+ })
515
+ }, context.contentId)
516
+ });
517
+ });
518
+ const dspContentsStyle = {
519
+ display: "contents"
520
+ };
521
+ const PopoverClose = React.forwardRef(function PopoverClose2(props, forwardedRef) {
522
+ const {
349
523
  scope,
524
+ ...rest
525
+ } = props;
526
+ const context = usePopoverContext(scope);
527
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
528
+ ...rest,
529
+ ref: forwardedRef,
530
+ componentName: "PopoverClose",
531
+ onPress: (0, import_helpers.composeEventHandlers)(props.onPress, () => context?.onOpenChange?.(false, "press"))
532
+ });
533
+ });
534
+ const PopoverArrow = import_popper.PopperArrowFrame.styleable(function PopoverArrow2(props, forwardedRef) {
535
+ const {
536
+ scope,
537
+ ...rest
538
+ } = props;
539
+ const context = usePopoverContext(scope);
540
+ if ((0, import_adapt.useAdaptIsActive)(context.adaptScope)) return null;
541
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperArrow, {
542
+ scope,
543
+ componentName: "PopoverArrow",
544
+ ...rest,
545
+ ref: forwardedRef
546
+ });
547
+ });
548
+ const PopoverScrollView = React.forwardRef(({
549
+ scope,
550
+ ...props
551
+ }, ref) => {
552
+ const context = usePopoverContext(scope);
553
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
554
+ ref,
555
+ pointerEvents: context.breakpointActive ? "none" : void 0,
556
+ scrollEnabled: !context.breakpointActive,
557
+ passThrough: context.breakpointActive,
350
558
  ...props
351
- }, ref) => {
352
- const context = usePopoverContext(scope);
353
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
559
+ });
560
+ });
561
+ const DEFAULT_SCOPE = "";
562
+ const Popover = (0, import_helpers.withStaticProperties)(React.forwardRef(function Popover2({
563
+ scope = DEFAULT_SCOPE,
564
+ ...props
565
+ }, ref) {
566
+ const id = React.useId();
567
+ const adaptScope = `PopoverAdapt${scope}`;
568
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.AdaptParent, {
569
+ scope: adaptScope,
570
+ portal: true,
571
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverInner, {
572
+ adaptScope,
354
573
  ref,
355
- pointerEvents: context.breakpointActive ? "none" : void 0,
356
- scrollEnabled: !context.breakpointActive,
357
- passThrough: context.breakpointActive,
574
+ id,
575
+ scope,
358
576
  ...props
359
- });
360
- }),
361
- DEFAULT_SCOPE = "",
362
- Popover = (0, import_helpers.withStaticProperties)(React.forwardRef(function ({
577
+ })
578
+ });
579
+ }), {
580
+ Anchor: PopoverAnchor,
581
+ Arrow: PopoverArrow,
582
+ Trigger: PopoverTrigger,
583
+ Content: PopoverContent,
584
+ Close: PopoverClose,
585
+ Adapt: import_adapt.Adapt,
586
+ ScrollView: PopoverScrollView,
587
+ FocusScope: import_focus_scope.FocusScopeController
588
+ });
589
+ const PopoverInner = React.forwardRef(function PopoverInner2(props, forwardedRef) {
590
+ const {
591
+ children,
592
+ open: openProp,
593
+ defaultOpen,
594
+ onOpenChange,
363
595
  scope = DEFAULT_SCOPE,
364
- ...props
365
- }, ref) {
366
- const id = React.useId(),
367
- adaptScope = `PopoverAdapt${scope}`;
368
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.AdaptParent, {
369
- scope: adaptScope,
370
- portal: !0,
371
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverInner, {
372
- adaptScope,
373
- ref,
374
- id,
375
- scope,
376
- ...props
377
- })
378
- });
379
- }), {
380
- Anchor: PopoverAnchor,
381
- Arrow: PopoverArrow,
382
- Trigger: PopoverTrigger,
383
- Content: PopoverContent,
384
- Close: PopoverClose,
385
- Adapt: import_adapt.Adapt,
386
- ScrollView: PopoverScrollView,
387
- FocusScope: import_focus_scope.FocusScopeController
388
- }),
389
- PopoverInner = React.forwardRef(function (props, forwardedRef) {
390
- const {
391
- children,
392
- open: openProp,
393
- defaultOpen,
394
- onOpenChange,
395
- scope = DEFAULT_SCOPE,
396
- keepChildrenMounted: keepChildrenMountedProp,
397
- hoverable,
398
- disableFocus,
399
- id,
400
- adaptScope,
401
- ...restProps
402
- } = props,
403
- triggerRef = React.useRef(null),
404
- [hasCustomAnchor, setHasCustomAnchor] = React.useState(!1),
405
- viaRef = React.useRef(void 0),
406
- [keepChildrenMounted] = (0, import_use_controllable_state.useControllableState)({
407
- prop: keepChildrenMountedProp,
408
- defaultProp: !1,
409
- transition: keepChildrenMountedProp === "lazy"
410
- }),
411
- [open, setOpen] = (0, import_use_controllable_state.useControllableState)({
412
- prop: openProp,
413
- defaultProp: defaultOpen || !1,
414
- onChange: val => {
415
- onOpenChange?.(val, viaRef.current);
416
- }
417
- }),
418
- handleOpenChange = (0, import_core.useEvent)((val, via) => {
419
- viaRef.current = via, setOpen(val);
420
- }),
421
- isAdapted = (0, import_adapt.useAdaptIsActive)(adaptScope),
422
- floatingContext = (0, import_useFloatingContext.useFloatingContext)({
423
- open,
424
- setOpen: handleOpenChange,
425
- disable: isAdapted,
426
- hoverable,
427
- disableFocus
428
- }),
429
- [anchorTo, setAnchorToRaw] = React.useState(),
430
- setAnchorTo = (0, import_core.useCreateShallowSetState)(setAnchorToRaw);
431
- React.useImperativeHandle(forwardedRef, () => ({
432
- anchorTo: setAnchorTo,
433
- toggle: () => setOpen(prev => !prev),
434
- open: () => setOpen(!0),
435
- close: () => setOpen(!1),
436
- setOpen
437
- }));
438
- const popoverContext = {
439
- popoverScope: scope,
440
- adaptScope,
441
- id,
442
- contentId: React.useId(),
443
- triggerRef,
444
- open,
445
- breakpointActive: isAdapted,
446
- onOpenChange: handleOpenChange,
447
- onOpenToggle: (0, import_core.useEvent)(() => {
448
- open && isAdapted || setOpen(!open);
449
- }),
450
- hasCustomAnchor,
451
- anchorTo,
452
- onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(!0), []),
453
- onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(!1), []),
454
- keepChildrenMounted
455
- },
456
- memoizedChildren = React.useMemo(() => /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContext.Provider, {
457
- scope,
458
- ...popoverContext,
459
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverSheetController, {
460
- context: popoverContext,
461
- onOpenChange: setOpen,
462
- children
463
- })
464
- }), [scope, setOpen, children, ...Object.values(popoverContext)]),
465
- contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.Popper, {
596
+ keepChildrenMounted: keepChildrenMountedProp,
597
+ hoverable,
598
+ disableFocus,
599
+ disableDismissable,
600
+ zIndex,
601
+ id,
602
+ adaptScope,
603
+ ...restProps
604
+ } = props;
605
+ const triggerRef = React.useRef(null);
606
+ const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
607
+ const viaRef = React.useRef(void 0);
608
+ const [keepChildrenMounted] = (0, import_use_controllable_state.useControllableState)({
609
+ prop: keepChildrenMountedProp,
610
+ defaultProp: false,
611
+ transition: keepChildrenMountedProp === "lazy"
612
+ });
613
+ const [open, setOpen] = (0, import_use_controllable_state.useControllableState)({
614
+ prop: openProp,
615
+ defaultProp: defaultOpen || false,
616
+ onChange: val => {
617
+ onOpenChange?.(val, viaRef.current);
618
+ }
619
+ });
620
+ React.useEffect(() => {
621
+ if (!open) return;
622
+ openPopovers.add(setOpen);
623
+ return () => {
624
+ openPopovers.delete(setOpen);
625
+ };
626
+ }, [open, setOpen]);
627
+ const handleOpenChange = (0, import_core.useEvent)((val, via) => {
628
+ viaRef.current = via;
629
+ setOpen(val);
630
+ });
631
+ const isAdapted = (0, import_adapt.useAdaptIsActive)(adaptScope);
632
+ const floatingContext = (0, import_useFloatingContext.useFloatingContext)({
633
+ open,
634
+ setOpen: handleOpenChange,
635
+ disable: isAdapted,
636
+ hoverable,
637
+ disableFocus
638
+ });
639
+ const [anchorTo, setAnchorToRaw] = React.useState();
640
+ const setAnchorTo = (0, import_core.useCreateShallowSetState)(setAnchorToRaw);
641
+ React.useImperativeHandle(forwardedRef, () => ({
642
+ anchorTo: setAnchorTo,
643
+ toggle: () => setOpen(prev => !prev),
644
+ open: () => setOpen(true),
645
+ close: () => setOpen(false),
646
+ setOpen
647
+ }));
648
+ const contentId = React.useId();
649
+ const onOpenToggle = (0, import_core.useEvent)(() => {
650
+ if (open && isAdapted) return;
651
+ setOpen(!open);
652
+ });
653
+ const onCustomAnchorAdd = React.useCallback(() => setHasCustomAnchor(true), []);
654
+ const onCustomAnchorRemove = React.useCallback(() => setHasCustomAnchor(false), []);
655
+ const contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.Popper, {
656
+ open,
657
+ passThrough: isAdapted,
658
+ scope,
659
+ stayInFrame: true,
660
+ ...restProps,
661
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContextProvider, {
662
+ scope,
663
+ open,
664
+ onOpenChange: handleOpenChange,
665
+ onOpenToggle,
666
+ triggerRef,
667
+ id,
668
+ contentId,
669
+ hasCustomAnchor,
670
+ onCustomAnchorAdd,
671
+ onCustomAnchorRemove,
672
+ anchorTo,
673
+ adaptScope,
674
+ breakpointActive: isAdapted,
675
+ keepChildrenMounted,
676
+ disableDismissable,
677
+ hoverable,
678
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverSheetController, {
679
+ onOpenChange: setOpen,
466
680
  open,
467
- passThrough: isAdapted,
468
681
  scope,
469
- stayInFrame: !0,
470
- ...restProps,
471
- children: memoizedChildren
472
- });
473
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
474
- children: import_constants.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_floating.FloatingOverrideContext.Provider, {
475
- value: floatingContext,
476
- children: contents
477
- }) : contents
478
- });
682
+ children
683
+ })
684
+ })
685
+ });
686
+ let result = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
687
+ children: import_constants.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_floating.FloatingOverrideContext.Provider, {
688
+ value: floatingContext,
689
+ children: contents
690
+ }) : contents
479
691
  });
692
+ if (zIndex !== void 0) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverZIndexContext.Provider, {
693
+ value: zIndex,
694
+ children: result
695
+ });
696
+ return result;
697
+ });
480
698
  function getState(open) {
481
699
  return open ? "open" : "closed";
482
700
  }
483
701
  const PopoverSheetController = ({
484
- context,
485
- ...props
702
+ open,
703
+ scope,
704
+ ...props
705
+ }) => {
706
+ const context = usePopoverContext(scope);
707
+ const showSheet = useShowPopoverSheet(context, open);
708
+ const breakpointActive = context?.breakpointActive;
709
+ const getShowSheet = (0, import_core.useGet)(showSheet);
710
+ const [isAdaptFullyHidden, setIsAdaptFullyHidden] = React.useState(!open);
711
+ if (open && isAdaptFullyHidden) setIsAdaptFullyHidden(false);
712
+ const handleSheetAnimationComplete = React.useCallback(({
713
+ open: isOpen
486
714
  }) => {
487
- const showSheet = useShowPopoverSheet(context),
488
- breakpointActive = context.breakpointActive,
489
- getShowSheet = (0, import_core.useGet)(showSheet);
490
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_controller.SheetController, {
491
- onOpenChange: val => {
492
- getShowSheet() && props.onOpenChange?.(val);
493
- },
494
- open: context.open,
495
- hidden: !breakpointActive,
715
+ if (!isOpen) setIsAdaptFullyHidden(true);
716
+ }, []);
717
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_controller.SheetController, {
718
+ onOpenChange: val => {
719
+ if (getShowSheet()) props.onOpenChange?.(val);
720
+ },
721
+ onAnimationComplete: handleSheetAnimationComplete,
722
+ open,
723
+ hidden: !breakpointActive,
724
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverAdaptHiddenContext.Provider, {
725
+ value: isAdaptFullyHidden,
496
726
  children: props.children
497
- });
498
- },
499
- useShowPopoverSheet = context => {
500
- const isAdapted = (0, import_adapt.useAdaptIsActive)(context.adaptScope);
501
- return context.open === !1 ? !1 : isAdapted;
502
- };
727
+ })
728
+ });
729
+ };
730
+ const useShowPopoverSheet = (context, open) => {
731
+ const isAdapted = (0, import_adapt.useAdaptIsActive)(context.adaptScope);
732
+ return open === false ? false : isAdapted;
733
+ };