@tamagui/popover 2.7.7 → 3.0.0-beta.643.1

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