@tamagui/popover 2.0.0-rc.4 → 2.0.0-rc.40

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 +624 -408
  2. package/dist/cjs/Popover.native.js +637 -438
  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 +576 -377
  11. package/dist/esm/Popover.mjs.map +1 -1
  12. package/dist/esm/Popover.native.js +591 -409
  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 +576 -377
  19. package/dist/jsx/Popover.mjs.map +1 -1
  20. package/dist/jsx/Popover.native.js +637 -438
  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 -29
  30. package/src/Popover.tsx +494 -175
  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,335 @@ __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 PopoverTriggerContext = (0, import_core.createStyledContext)({}, "PopoverTrigger__");
100
+ const usePopoverContext = PopoverContext.useStyledContext;
101
+ const usePopoverTriggerContext = PopoverTriggerContext.useStyledContext;
102
+ function usePopoverOpen(scope) {
103
+ return usePopoverContext(scope).open;
104
+ }
105
+ function usePopoverTriggerSetup(open) {
106
+ const triggerStateSettersRef = React.useRef(/* @__PURE__ */new Map());
107
+ const activeTriggerIdRef = React.useRef(null);
108
+ const setActiveTrigger = (0, import_core.useEvent)(id => {
109
+ const prevId = activeTriggerIdRef.current;
110
+ if (prevId === id) return;
111
+ if (prevId) triggerStateSettersRef.current.get(prevId)?.(false);
112
+ activeTriggerIdRef.current = id;
113
+ if (id && open) triggerStateSettersRef.current.get(id)?.(true);
114
+ });
115
+ const registerTrigger = (0, import_core.useEvent)((id, setOpenState) => {
116
+ triggerStateSettersRef.current.set(id, setOpenState);
117
+ setOpenState(activeTriggerIdRef.current === id && open);
118
+ });
119
+ const unregisterTrigger = (0, import_core.useEvent)(id => {
120
+ triggerStateSettersRef.current.delete(id);
121
+ if (activeTriggerIdRef.current === id) activeTriggerIdRef.current = null;
122
+ });
123
+ React.useEffect(() => {
124
+ if (!open) {
125
+ setActiveTrigger(null);
126
+ return;
127
+ }
128
+ const activeId = activeTriggerIdRef.current;
129
+ if (activeId) triggerStateSettersRef.current.get(activeId)?.(true);
130
+ }, [open, setActiveTrigger]);
131
+ return {
132
+ setActiveTrigger,
133
+ registerTrigger,
134
+ unregisterTrigger
135
+ };
136
+ }
137
+ const PopoverContextProvider = React.memo(({
138
+ scope,
139
+ children,
140
+ open,
141
+ onOpenChange,
142
+ onOpenToggle,
143
+ triggerRef,
144
+ id = "",
145
+ contentId,
146
+ hasCustomAnchor = false,
147
+ onCustomAnchorAdd = voidFn,
148
+ onCustomAnchorRemove = voidFn,
149
+ anchorTo,
150
+ adaptScope,
151
+ breakpointActive,
152
+ keepChildrenMounted,
153
+ disableDismissable,
154
+ hoverable
155
+ }) => {
156
+ const [branches] = React.useState(() => /* @__PURE__ */new Set());
157
+ const {
158
+ setActiveTrigger,
159
+ registerTrigger,
160
+ unregisterTrigger
161
+ } = usePopoverTriggerSetup(open);
162
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContext.Provider, {
163
+ scope,
164
+ popoverScope: scope,
165
+ adaptScope,
166
+ id,
167
+ contentId,
168
+ triggerRef,
169
+ open,
170
+ onOpenChange,
171
+ onOpenToggle,
172
+ hasCustomAnchor,
173
+ onCustomAnchorAdd,
174
+ onCustomAnchorRemove,
175
+ anchorTo,
176
+ branches,
177
+ breakpointActive,
178
+ keepChildrenMounted,
179
+ disableDismissable,
180
+ hoverable,
181
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverTriggerContext.Provider, {
115
182
  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, {
183
+ triggerRef,
184
+ hasCustomAnchor,
185
+ anchorTo,
186
+ branches,
187
+ onOpenToggle,
188
+ setActiveTrigger,
189
+ registerTrigger,
190
+ unregisterTrigger,
191
+ children
192
+ })
193
+ });
194
+ });
195
+ const voidFn = () => {};
196
+ const PopoverAnchor = React.memo(React.forwardRef(function PopoverAnchor2(props, forwardedRef) {
197
+ const {
198
+ scope,
199
+ ...rest
200
+ } = props;
201
+ const {
202
+ onCustomAnchorAdd,
203
+ onCustomAnchorRemove
204
+ } = usePopoverContext(scope) || {};
205
+ React.useEffect(() => {
206
+ onCustomAnchorAdd();
207
+ return () => onCustomAnchorRemove();
208
+ }, [onCustomAnchorAdd, onCustomAnchorRemove]);
209
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
210
+ scope,
211
+ ...rest,
212
+ ref: forwardedRef
213
+ });
214
+ }));
215
+ const PopoverTrigger = React.memo(React.forwardRef(function PopoverTrigger2(props, forwardedRef) {
216
+ const {
217
+ scope,
218
+ disablePressTrigger,
219
+ ...rest
220
+ } = props;
221
+ const triggerContext = usePopoverTriggerContext(scope);
222
+ const triggerId = React.useId();
223
+ const [open, setOpen] = React.useState(false);
224
+ const anchorTo = triggerContext.anchorTo;
225
+ const triggerElRef = React.useRef(null);
226
+ const composedTriggerRef = (0, import_compose_refs.useComposedRefs)(forwardedRef, triggerElRef);
227
+ const {
228
+ registerTrigger,
229
+ unregisterTrigger
230
+ } = triggerContext;
231
+ React.useEffect(() => {
232
+ registerTrigger(triggerId, setOpen);
233
+ return () => {
234
+ unregisterTrigger(triggerId);
235
+ };
236
+ }, [registerTrigger, unregisterTrigger, triggerId]);
237
+ if (!rest.children) return null;
238
+ const activateSelf = () => {
239
+ triggerContext.setActiveTrigger(triggerId);
240
+ const el = triggerElRef.current;
241
+ if (el) triggerContext.triggerRef.current = el;
242
+ };
243
+ const trigger = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
244
+ "aria-expanded": open,
245
+ "data-state": getState(open),
246
+ ...rest,
247
+ ref: composedTriggerRef,
248
+ onPress: (0, import_helpers.composeEventHandlers)(rest.onPress, () => {
249
+ if (disablePressTrigger) return;
250
+ triggerContext.setActiveTrigger(open ? null : triggerId);
251
+ triggerContext.onOpenToggle();
252
+ }),
253
+ onMouseEnter: (0, import_helpers.composeEventHandlers)(rest.onMouseEnter, activateSelf),
254
+ onPressIn: (0, import_helpers.composeEventHandlers)(rest.onPressIn, activateSelf),
255
+ onFocus: (0, import_helpers.composeEventHandlers)(rest.onFocus, activateSelf)
256
+ });
257
+ const virtualRef = React.useMemo(() => {
258
+ if (!anchorTo) return null;
259
+ return {
260
+ current: {
261
+ getBoundingClientRect: () => import_constants.isWeb ? DOMRect.fromRect(anchorTo) : anchorTo,
262
+ ...(!import_constants.isWeb && {
263
+ measure: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height),
264
+ measureInWindow: c => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height)
265
+ })
266
+ }
267
+ };
268
+ }, [triggerContext.anchorTo, anchorTo?.x, anchorTo?.y, anchorTo?.height, anchorTo?.width]);
269
+ const wrappedTrigger = import_constants.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_dismissable.DismissableBranch, {
270
+ branches: triggerContext.branches,
271
+ children: trigger
272
+ }) : trigger;
273
+ return triggerContext.hasCustomAnchor ? wrappedTrigger : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperAnchor, {
274
+ ...(virtualRef && {
275
+ virtualRef
276
+ }),
277
+ scope,
278
+ asChild: true,
279
+ children: wrappedTrigger
280
+ });
281
+ }));
282
+ const PopoverContent = import_popper.PopperContentFrame.styleable(function PopoverContent2(props, forwardedRef) {
283
+ const {
284
+ trapFocus,
285
+ enableRemoveScroll = false,
286
+ zIndex: zIndexProp,
287
+ scope,
288
+ ...contentImplProps
289
+ } = props;
290
+ const context = usePopoverContext(scope);
291
+ const zIndexFromContext = React.useContext(PopoverZIndexContext);
292
+ const zIndex = zIndexProp ?? zIndexFromContext;
293
+ const open = usePopoverOpen(scope);
294
+ const contentRef = React.useRef(null);
295
+ const composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, contentRef);
296
+ const isRightClickOutsideRef = React.useRef(false);
297
+ const [isFullyHidden, setIsFullyHidden] = React.useState(!open);
298
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
299
+ if (open && isFullyHidden) setIsFullyHidden(false);
300
+ }, [open, isFullyHidden]);
301
+ if (!context.keepChildrenMounted) {
302
+ if (isFullyHidden && !open) return null;
303
+ }
304
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverPortal, {
305
+ passThrough: context.breakpointActive,
306
+ context,
307
+ open,
308
+ zIndex,
309
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
139
310
  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
- })
311
+ pointerEvents: open ? contentImplProps.pointerEvents ?? "auto" : "none",
312
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContentImpl, {
313
+ ...contentImplProps,
314
+ context,
315
+ open,
316
+ enableRemoveScroll,
317
+ ref: composedRefs,
318
+ setIsFullyHidden,
319
+ scope,
320
+ trapFocus: trapFocus ?? open,
321
+ disableOutsidePointerEvents: true,
322
+ onCloseAutoFocus: props.onCloseAutoFocus === false ? void 0 : (0, import_helpers.composeEventHandlers)(props.onCloseAutoFocus, event => {
323
+ if (event.defaultPrevented) return;
324
+ event.preventDefault();
325
+ if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();
326
+ }),
327
+ onPointerDownOutside: (0, import_helpers.composeEventHandlers)(props.onPointerDownOutside, event => {
328
+ const originalEvent = event.detail.originalEvent;
329
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
330
+ isRightClickOutsideRef.current = originalEvent.button === 2 || ctrlLeftClick;
331
+ }, {
332
+ checkDefaultPrevented: false
333
+ }),
334
+ onFocusOutside: (0, import_helpers.composeEventHandlers)(props.onFocusOutside, event => event.preventDefault(), {
335
+ checkDefaultPrevented: false
168
336
  })
169
337
  })
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
- };
338
+ })
339
+ });
340
+ });
341
+ const useParentContexts = scope => {
342
+ const context = usePopoverContext(scope);
343
+ const triggerContext = usePopoverTriggerContext(scope);
344
+ return {
345
+ popperContext: (0, import_popper.usePopperContext)(scope),
346
+ adaptContext: (0, import_adapt.useAdaptContext)(context.adaptScope),
347
+ context,
348
+ triggerContext
181
349
  };
350
+ };
182
351
  function RepropagateParentContexts({
183
352
  adaptContext,
184
353
  children,
185
354
  context,
355
+ triggerContext,
186
356
  popperContext
187
357
  }) {
188
358
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperProvider, {
189
359
  scope: context.popoverScope,
190
360
  ...popperContext,
191
361
  children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContext.Provider, {
362
+ scope: context.popoverScope,
192
363
  ...context,
193
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
194
- ...adaptContext,
195
- children
364
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverTriggerContext.Provider, {
365
+ scope: context.popoverScope,
366
+ ...triggerContext,
367
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.ProvideAdaptContext, {
368
+ ...adaptContext,
369
+ children
370
+ })
196
371
  })
197
372
  })
198
373
  });
@@ -201,6 +376,8 @@ const PortalAdaptSafe = ({
201
376
  children,
202
377
  context
203
378
  }) => {
379
+ "use no memo";
380
+
204
381
  if (needsRepropagation) {
205
382
  const parentContexts = useParentContexts(context.popoverScope);
206
383
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.AdaptPortalContents, {
@@ -218,12 +395,14 @@ const PortalAdaptSafe = ({
218
395
  };
219
396
  function PopoverPortal({
220
397
  context,
398
+ open,
221
399
  zIndex,
222
400
  passThrough,
223
401
  children,
224
402
  onPress
225
403
  }) {
226
- const themeName = (0, import_core.useThemeName)();
404
+ "use no memo";
405
+
227
406
  let content = children;
228
407
  if (needsRepropagation) {
229
408
  const parentContexts = useParentContexts(context.popoverScope);
@@ -232,271 +411,308 @@ function PopoverPortal({
232
411
  children: content
233
412
  });
234
413
  }
235
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_portal.Portal, {
414
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_portal.Portal, {
236
415
  passThrough,
237
- stackZIndex: !0,
416
+ stackZIndex: true,
238
417
  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
- })
418
+ children: [!!open && !context.breakpointActive && !context.hoverable && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
419
+ fullscreen: true,
420
+ onPress: (0, import_helpers.composeEventHandlers)(onPress, context.onOpenToggle)
421
+ }), content]
252
422
  });
253
423
  }
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
- })
424
+ const PopoverContentImpl = React.forwardRef(function PopoverContentImpl2(props, forwardedRef) {
425
+ const {
426
+ trapFocus,
427
+ scope,
428
+ onOpenAutoFocus,
429
+ onCloseAutoFocus,
430
+ disableOutsidePointerEvents,
431
+ disableFocusScope,
432
+ onEscapeKeyDown,
433
+ onPointerDownOutside,
434
+ onFocusOutside,
435
+ onInteractOutside,
436
+ children,
437
+ enableRemoveScroll,
438
+ freezeContentsWhenHidden,
439
+ setIsFullyHidden,
440
+ lazyMount,
441
+ forceUnmount,
442
+ context,
443
+ open,
444
+ alwaysDisable,
445
+ ...contentProps
446
+ } = props;
447
+ const {
448
+ keepChildrenMounted,
449
+ disableDismissable
450
+ } = context;
451
+ const handleExitComplete = React.useCallback(() => {
452
+ setIsFullyHidden?.(true);
453
+ }, [setIsFullyHidden]);
454
+ let contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate_presence.ResetPresence, {
455
+ disable: context.breakpointActive,
456
+ children
457
+ });
458
+ const handleDismiss = React.useCallback(() => {
459
+ context.onOpenChange(false, "press");
460
+ }, [context]);
461
+ if (!context.breakpointActive) {
462
+ if (!alwaysDisable || !alwaysDisable.focus) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_focus_scope.FocusScope, {
463
+ loop: trapFocus !== false,
464
+ enabled: context.breakpointActive ? false : disableFocusScope ? false : open,
465
+ trapped: context.breakpointActive ? false : trapFocus,
466
+ onMountAutoFocus: onOpenAutoFocus,
467
+ onUnmountAutoFocus: onCloseAutoFocus === false ? void 0 : onCloseAutoFocus,
468
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)("div", {
469
+ style: dspContentsStyle,
470
+ children: contents
297
471
  })
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
472
  });
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"))
473
+ if (!alwaysDisable || !alwaysDisable["remove-scroll"]) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_remove_scroll.RemoveScroll, {
474
+ enabled: context.breakpointActive ? false : enableRemoveScroll ? open : false,
475
+ children: contents
333
476
  });
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
477
+ if (!alwaysDisable || !alwaysDisable.dismiss) contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_dismissable.Dismissable, {
478
+ branches: context.branches,
479
+ forceUnmount: disableDismissable || (forceUnmount ?? !open),
480
+ onEscapeKeyDown,
481
+ onPointerDownOutside,
482
+ onFocusOutside,
483
+ onInteractOutside,
484
+ onDismiss: handleDismiss,
485
+ children: contents
346
486
  });
347
- }),
348
- PopoverScrollView = React.forwardRef(({
487
+ }
488
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_animate.Animate, {
489
+ type: "presence",
490
+ present: Boolean(open),
491
+ keepChildrenMounted: Boolean(keepChildrenMounted),
492
+ onExitComplete: handleExitComplete,
493
+ lazyMount,
494
+ passThrough: context.breakpointActive,
495
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperContent, {
496
+ scope,
497
+ "data-state": getState(open),
498
+ id: context.contentId,
499
+ ref: forwardedRef,
500
+ passThrough: context.breakpointActive,
501
+ ...(!contentProps.unstyled && {
502
+ size: "$true",
503
+ backgroundColor: "$background",
504
+ alignItems: "center"
505
+ }),
506
+ ...contentProps,
507
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PortalAdaptSafe, {
508
+ context,
509
+ children: contents
510
+ })
511
+ }, context.contentId)
512
+ });
513
+ });
514
+ const dspContentsStyle = {
515
+ display: "contents"
516
+ };
517
+ const PopoverClose = React.forwardRef(function PopoverClose2(props, forwardedRef) {
518
+ const {
349
519
  scope,
520
+ ...rest
521
+ } = props;
522
+ const context = usePopoverContext(scope);
523
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_stacks.YStack, {
524
+ ...rest,
525
+ ref: forwardedRef,
526
+ componentName: "PopoverClose",
527
+ onPress: (0, import_helpers.composeEventHandlers)(props.onPress, () => context?.onOpenChange?.(false, "press"))
528
+ });
529
+ });
530
+ const PopoverArrow = import_popper.PopperArrowFrame.styleable(function PopoverArrow2(props, forwardedRef) {
531
+ const {
532
+ scope,
533
+ ...rest
534
+ } = props;
535
+ const context = usePopoverContext(scope);
536
+ if ((0, import_adapt.useAdaptIsActive)(context.adaptScope)) return null;
537
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.PopperArrow, {
538
+ scope,
539
+ componentName: "PopoverArrow",
540
+ ...rest,
541
+ ref: forwardedRef
542
+ });
543
+ });
544
+ const PopoverScrollView = React.forwardRef(({
545
+ scope,
546
+ ...props
547
+ }, ref) => {
548
+ const context = usePopoverContext(scope);
549
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
550
+ ref,
551
+ pointerEvents: context.breakpointActive ? "none" : void 0,
552
+ scrollEnabled: !context.breakpointActive,
553
+ passThrough: context.breakpointActive,
350
554
  ...props
351
- }, ref) => {
352
- const context = usePopoverContext(scope);
353
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
555
+ });
556
+ });
557
+ const DEFAULT_SCOPE = "";
558
+ const Popover = (0, import_helpers.withStaticProperties)(React.forwardRef(function Popover2({
559
+ scope = DEFAULT_SCOPE,
560
+ ...props
561
+ }, ref) {
562
+ const id = React.useId();
563
+ const adaptScope = `PopoverAdapt${scope}`;
564
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_adapt.AdaptParent, {
565
+ scope: adaptScope,
566
+ portal: true,
567
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverInner, {
568
+ adaptScope,
354
569
  ref,
355
- pointerEvents: context.breakpointActive ? "none" : void 0,
356
- scrollEnabled: !context.breakpointActive,
357
- passThrough: context.breakpointActive,
570
+ id,
571
+ scope,
358
572
  ...props
359
- });
360
- }),
361
- DEFAULT_SCOPE = "",
362
- Popover = (0, import_helpers.withStaticProperties)(React.forwardRef(function ({
573
+ })
574
+ });
575
+ }), {
576
+ Anchor: PopoverAnchor,
577
+ Arrow: PopoverArrow,
578
+ Trigger: PopoverTrigger,
579
+ Content: PopoverContent,
580
+ Close: PopoverClose,
581
+ Adapt: import_adapt.Adapt,
582
+ ScrollView: PopoverScrollView,
583
+ FocusScope: import_focus_scope.FocusScopeController
584
+ });
585
+ const PopoverInner = React.forwardRef(function PopoverInner2(props, forwardedRef) {
586
+ const {
587
+ children,
588
+ open: openProp,
589
+ defaultOpen,
590
+ onOpenChange,
363
591
  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, {
592
+ keepChildrenMounted: keepChildrenMountedProp,
593
+ hoverable,
594
+ disableFocus,
595
+ disableDismissable,
596
+ zIndex,
597
+ id,
598
+ adaptScope,
599
+ ...restProps
600
+ } = props;
601
+ const triggerRef = React.useRef(null);
602
+ const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
603
+ const viaRef = React.useRef(void 0);
604
+ const [keepChildrenMounted] = (0, import_use_controllable_state.useControllableState)({
605
+ prop: keepChildrenMountedProp,
606
+ defaultProp: false,
607
+ transition: keepChildrenMountedProp === "lazy"
608
+ });
609
+ const [open, setOpen] = (0, import_use_controllable_state.useControllableState)({
610
+ prop: openProp,
611
+ defaultProp: defaultOpen || false,
612
+ onChange: val => {
613
+ onOpenChange?.(val, viaRef.current);
614
+ }
615
+ });
616
+ React.useEffect(() => {
617
+ if (!open) return;
618
+ openPopovers.add(setOpen);
619
+ return () => {
620
+ openPopovers.delete(setOpen);
621
+ };
622
+ }, [open, setOpen]);
623
+ const handleOpenChange = (0, import_core.useEvent)((val, via) => {
624
+ viaRef.current = via;
625
+ setOpen(val);
626
+ });
627
+ const isAdapted = (0, import_adapt.useAdaptIsActive)(adaptScope);
628
+ const floatingContext = (0, import_useFloatingContext.useFloatingContext)({
629
+ open,
630
+ setOpen: handleOpenChange,
631
+ disable: isAdapted,
632
+ hoverable,
633
+ disableFocus
634
+ });
635
+ const [anchorTo, setAnchorToRaw] = React.useState();
636
+ const setAnchorTo = (0, import_core.useCreateShallowSetState)(setAnchorToRaw);
637
+ React.useImperativeHandle(forwardedRef, () => ({
638
+ anchorTo: setAnchorTo,
639
+ toggle: () => setOpen(prev => !prev),
640
+ open: () => setOpen(true),
641
+ close: () => setOpen(false),
642
+ setOpen
643
+ }));
644
+ const contentId = React.useId();
645
+ const onOpenToggle = (0, import_core.useEvent)(() => {
646
+ if (open && isAdapted) return;
647
+ setOpen(!open);
648
+ });
649
+ const onCustomAnchorAdd = React.useCallback(() => setHasCustomAnchor(true), []);
650
+ const onCustomAnchorRemove = React.useCallback(() => setHasCustomAnchor(false), []);
651
+ const contents = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_popper.Popper, {
652
+ open,
653
+ passThrough: isAdapted,
654
+ scope,
655
+ stayInFrame: true,
656
+ ...restProps,
657
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverContextProvider, {
658
+ scope,
659
+ open,
660
+ onOpenChange: handleOpenChange,
661
+ onOpenToggle,
662
+ triggerRef,
663
+ id,
664
+ contentId,
665
+ hasCustomAnchor,
666
+ onCustomAnchorAdd,
667
+ onCustomAnchorRemove,
668
+ anchorTo,
669
+ adaptScope,
670
+ breakpointActive: isAdapted,
671
+ keepChildrenMounted,
672
+ disableDismissable,
673
+ hoverable,
674
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverSheetController, {
675
+ onOpenChange: setOpen,
466
676
  open,
467
- passThrough: isAdapted,
468
677
  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
- });
678
+ children
679
+ })
680
+ })
479
681
  });
682
+ let result = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
683
+ children: import_constants.isWeb ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_floating.FloatingOverrideContext.Provider, {
684
+ value: floatingContext,
685
+ children: contents
686
+ }) : contents
687
+ });
688
+ if (zIndex !== void 0) return /* @__PURE__ */(0, import_jsx_runtime.jsx)(PopoverZIndexContext.Provider, {
689
+ value: zIndex,
690
+ children: result
691
+ });
692
+ return result;
693
+ });
480
694
  function getState(open) {
481
695
  return open ? "open" : "closed";
482
696
  }
483
697
  const PopoverSheetController = ({
484
- context,
485
- ...props
486
- }) => {
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,
496
- 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
- };
698
+ open,
699
+ scope,
700
+ ...props
701
+ }) => {
702
+ const context = usePopoverContext(scope);
703
+ const showSheet = useShowPopoverSheet(context, open);
704
+ const breakpointActive = context?.breakpointActive;
705
+ const getShowSheet = (0, import_core.useGet)(showSheet);
706
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_controller.SheetController, {
707
+ onOpenChange: val => {
708
+ if (getShowSheet()) props.onOpenChange?.(val);
709
+ },
710
+ open,
711
+ hidden: !breakpointActive,
712
+ children: props.children
713
+ });
714
+ };
715
+ const useShowPopoverSheet = (context, open) => {
716
+ const isAdapted = (0, import_adapt.useAdaptIsActive)(context.adaptScope);
717
+ return open === false ? false : isAdapted;
718
+ };