@tamagui/popover 2.7.7 → 3.0.0-beta.1093.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 (50) hide show
  1. package/dist/cjs/Popover.cjs +522 -665
  2. package/dist/cjs/Popover.native.cjs +615 -0
  3. package/dist/cjs/Popover.native.js +549 -692
  4. package/dist/cjs/Popover.native.js.map +1 -1
  5. package/dist/cjs/index.cjs +9 -11
  6. package/dist/cjs/index.native.cjs +21 -0
  7. package/dist/cjs/index.native.js +9 -10
  8. package/dist/cjs/index.native.js.map +1 -1
  9. package/dist/cjs/useFloatingContext.cjs +213 -234
  10. package/dist/cjs/useFloatingContext.native.cjs +35 -0
  11. package/dist/cjs/useFloatingContext.native.js +19 -27
  12. package/dist/cjs/useFloatingContext.native.js.map +1 -1
  13. package/dist/esm/Popover.mjs +487 -618
  14. package/dist/esm/Popover.mjs.map +1 -1
  15. package/dist/esm/Popover.native.js +513 -645
  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 +198 -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 +487 -618
  25. package/dist/jsx/Popover.mjs.map +1 -1
  26. package/dist/jsx/Popover.native.cjs +615 -0
  27. package/dist/jsx/Popover.native.js +549 -692
  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 +21 -0
  32. package/dist/jsx/index.native.js +9 -10
  33. package/dist/jsx/index.native.js.map +1 -1
  34. package/dist/jsx/useFloatingContext.mjs +198 -208
  35. package/dist/jsx/useFloatingContext.mjs.map +1 -1
  36. package/dist/jsx/useFloatingContext.native.cjs +35 -0
  37. package/dist/jsx/useFloatingContext.native.js +19 -27
  38. package/dist/jsx/useFloatingContext.native.js.map +1 -1
  39. package/package.json +24 -23
  40. package/src/Popover.tsx +157 -154
  41. package/src/useFloatingContext.tsx +15 -7
  42. package/types/Popover.d.ts +40 -112
  43. package/types/Popover.d.ts.map +1 -1
  44. package/types/useFloatingContext.d.ts +5 -2
  45. package/types/useFloatingContext.d.ts.map +1 -1
  46. package/dist/esm/index.js.map +0 -1
  47. package/dist/esm/index.mjs.map +0 -1
  48. package/dist/esm/index.native.js.map +0 -1
  49. package/dist/jsx/index.js.map +0 -1
  50. 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,530 @@ 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, closeReasonRef }) => {
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
+ closeReasonRef,
103
+ children: /* @__PURE__ */ jsx(PopoverTriggerContext.Provider, {
104
+ scope,
105
+ triggerRef,
106
+ hasCustomAnchor,
107
+ anchorTo,
108
+ branches,
109
+ onOpenToggle,
110
+ setActiveTrigger,
111
+ registerTrigger,
112
+ unregisterTrigger,
113
+ children
114
+ })
115
+ });
138
116
  });
139
117
  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
- });
118
+ const PopoverAnchor = React.memo(createRefComponent(function PopoverAnchor2(props, forwardedRef) {
119
+ const { scope, ...rest } = props;
120
+ const { onCustomAnchorAdd, onCustomAnchorRemove } = usePopoverContext(scope) || {};
121
+ React.useEffect(() => {
122
+ onCustomAnchorAdd();
123
+ return () => onCustomAnchorRemove();
124
+ }, [onCustomAnchorAdd, onCustomAnchorRemove]);
125
+ return /* @__PURE__ */ jsx(PopperAnchor, {
126
+ scope,
127
+ ...rest,
128
+ ref: forwardedRef
129
+ });
158
130
  }));
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
- });
131
+ const PopoverTrigger = React.memo(createRefComponent(function PopoverTrigger2(props, forwardedRef) {
132
+ const { scope, disablePressTrigger, ...rest } = props;
133
+ const triggerContext = usePopoverTriggerContext(scope);
134
+ const triggerId = React.useId();
135
+ const [open, setOpen] = React.useState(false);
136
+ const anchorTo = triggerContext.anchorTo;
137
+ const triggerElRef = React.useRef(null);
138
+ const composedTriggerRef = useComposedRefs(forwardedRef, triggerElRef);
139
+ const { registerTrigger, unregisterTrigger } = triggerContext;
140
+ React.useEffect(() => {
141
+ registerTrigger(triggerId, setOpen);
142
+ return () => {
143
+ unregisterTrigger(triggerId);
144
+ };
145
+ }, [
146
+ registerTrigger,
147
+ unregisterTrigger,
148
+ triggerId
149
+ ]);
150
+ if (!rest.children) return null;
151
+ const activateSelf = () => {
152
+ triggerContext.setActiveTrigger(triggerId);
153
+ const el = triggerElRef.current;
154
+ if (el) triggerContext.triggerRef.current = el;
155
+ };
156
+ const trigger = /* @__PURE__ */ jsx(View, {
157
+ "aria-expanded": open,
158
+ "data-state": getState(open),
159
+ ...rest,
160
+ ref: composedTriggerRef,
161
+ onPress: composeEventHandlers(rest.onPress, () => {
162
+ if (disablePressTrigger) return;
163
+ triggerContext.setActiveTrigger(open ? null : triggerId);
164
+ triggerContext.onOpenToggle();
165
+ }),
166
+ onMouseEnter: composeEventHandlers(rest.onMouseEnter, activateSelf),
167
+ onPressIn: composeEventHandlers(rest.onPressIn, activateSelf),
168
+ onFocus: composeEventHandlers(rest.onFocus, activateSelf)
169
+ });
170
+ const virtualRef = React.useMemo(() => {
171
+ if (!anchorTo) return null;
172
+ return { current: {
173
+ getBoundingClientRect: () => isWeb ? DOMRect.fromRect(anchorTo) : anchorTo,
174
+ ...!isWeb && {
175
+ measure: (c) => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height),
176
+ measureInWindow: (c) => c(anchorTo?.x, anchorTo?.y, anchorTo?.width, anchorTo?.height)
177
+ }
178
+ } };
179
+ }, [
180
+ triggerContext.anchorTo,
181
+ anchorTo?.x,
182
+ anchorTo?.y,
183
+ anchorTo?.height,
184
+ anchorTo?.width
185
+ ]);
186
+ const wrappedTrigger = isWeb ? /* @__PURE__ */ jsx(DismissableBranch, {
187
+ branches: triggerContext.branches,
188
+ children: trigger
189
+ }) : trigger;
190
+ return triggerContext.hasCustomAnchor ? wrappedTrigger : /* @__PURE__ */ jsx(PopperAnchor, {
191
+ ...virtualRef && { virtualRef },
192
+ scope,
193
+ asChild: true,
194
+ children: wrappedTrigger
195
+ });
225
196
  }));
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
- });
286
- });
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
- };
197
+ const PopoverContent = createStyledHOC(PopperContentFrame, function PopoverContent2(props, forwardedRef) {
198
+ const { trapFocus, enableRemoveScroll = false, zIndex: zIndexProp, scope, forceMount, ...contentImplProps } = props;
199
+ const context = usePopoverContext(scope);
200
+ const adaptContext = useAdaptContext(context.adaptScope);
201
+ const zIndexFromContext = React.useContext(PopoverZIndexContext);
202
+ const zIndex = zIndexProp ?? zIndexFromContext;
203
+ const open = usePopoverOpen(scope);
204
+ const composedRefs = useComposedRefs(forwardedRef, React.useRef(null));
205
+ const isRightClickOutsideRef = React.useRef(false);
206
+ const [isFullyHidden, setIsFullyHidden] = React.useState(!open);
207
+ useIsomorphicLayoutEffect(() => {
208
+ if (open && isFullyHidden) setIsFullyHidden(false);
209
+ }, [open, isFullyHidden]);
210
+ if (!forceMount && !context.keepChildrenMounted) {
211
+ if (context.breakpointActive) {
212
+ if (!open && adaptContext.targetFullyHidden) return null;
213
+ } else if (isFullyHidden && !open) return null;
214
+ }
215
+ return /* @__PURE__ */ jsx(PopoverPortal, {
216
+ passThrough: context.breakpointActive,
217
+ context,
218
+ open,
219
+ visuallyActive: open || !isFullyHidden,
220
+ zIndex,
221
+ children: /* @__PURE__ */ jsx(View, {
222
+ passThrough: context.breakpointActive,
223
+ pointerEvents: open ? contentImplProps.pointerEvents ?? "auto" : "none",
224
+ children: /* @__PURE__ */ jsx(PopoverContentImpl, {
225
+ ...contentImplProps,
226
+ context,
227
+ open,
228
+ forceMount,
229
+ enableRemoveScroll,
230
+ ref: composedRefs,
231
+ setIsFullyHidden,
232
+ scope,
233
+ trapFocus: trapFocus ?? open,
234
+ disableOutsidePointerEvents: true,
235
+ onCloseAutoFocus: props.onCloseAutoFocus === false ? void 0 : composeEventHandlers(props.onCloseAutoFocus, (event) => {
236
+ if (event.isCanceled) return;
237
+ event.cancel();
238
+ if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();
239
+ }),
240
+ onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {
241
+ const originalEvent = event.event;
242
+ if (!originalEvent) return;
243
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
244
+ isRightClickOutsideRef.current = originalEvent.button === 2 || ctrlLeftClick;
245
+ }, { checkDefaultPrevented: false }),
246
+ onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {
247
+ if (trapFocus ?? open) event.cancel();
248
+ }, { checkDefaultPrevented: false })
249
+ })
250
+ })
251
+ });
252
+ }, { staticConfig: { inlineProps: /* @__PURE__ */ new Set([
253
+ ...PopperContentFrame.staticConfig.inlineProps || [],
254
+ "zIndex",
255
+ "opacity",
256
+ "y"
257
+ ]) } });
258
+ const useParentContexts = (scope) => {
259
+ const context = usePopoverContext(scope);
260
+ const triggerContext = usePopoverTriggerContext(scope);
261
+ return {
262
+ popperContext: usePopperContext(scope),
263
+ adaptContext: useAdaptContext(context.adaptScope),
264
+ context,
265
+ triggerContext
266
+ };
296
267
  };
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
- });
268
+ function RepropagateParentContexts({ adaptContext, children, context, triggerContext, popperContext }) {
269
+ return /* @__PURE__ */ jsx(PopperProvider, {
270
+ scope: context.popoverScope,
271
+ ...popperContext,
272
+ children: /* @__PURE__ */ jsx(PopoverContext.Provider, {
273
+ scope: context.popoverScope,
274
+ ...context,
275
+ children: /* @__PURE__ */ jsx(PopoverTriggerContext.Provider, {
276
+ scope: context.popoverScope,
277
+ ...triggerContext,
278
+ children: /* @__PURE__ */ jsx(ProvideAdaptContext, {
279
+ ...adaptContext,
280
+ children
281
+ })
282
+ })
283
+ })
284
+ });
320
285
  }
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
- });
286
+ const PortalAdaptSafe = ({ children, context }) => {
287
+ "use no memo";
288
+ if (needsRepropagation) {
289
+ const parentContexts = useParentContexts(context.popoverScope);
290
+ return /* @__PURE__ */ jsx(AdaptPortalContents, {
291
+ scope: context.adaptScope,
292
+ children: /* @__PURE__ */ jsx(RepropagateParentContexts, {
293
+ ...parentContexts,
294
+ children
295
+ })
296
+ });
297
+ }
298
+ return /* @__PURE__ */ jsx(AdaptPortalContents, {
299
+ scope: context.adaptScope,
300
+ children
301
+ });
341
302
  };
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
- });
303
+ function PopoverPortal({ context, open, visuallyActive, zIndex, passThrough, children, onPress }) {
304
+ "use no memo";
305
+ let content = children;
306
+ if (needsRepropagation) content = /* @__PURE__ */ jsx(RepropagateParentContexts, {
307
+ ...useParentContexts(context.popoverScope),
308
+ children: content
309
+ });
310
+ return /* @__PURE__ */ jsxs(Portal, {
311
+ passThrough,
312
+ stackZIndex: true,
313
+ zIndex,
314
+ hidden: !visuallyActive,
315
+ children: [!!open && !context.breakpointActive && !context.hoverable && /* @__PURE__ */ jsx(YStack, {
316
+ position: "absolute",
317
+ inset: 0,
318
+ onPress: composeEventHandlers(onPress, context.onOpenToggle)
319
+ }), content]
320
+ });
366
321
  }
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
- });
322
+ const PopoverContentImpl = createRefComponent(function PopoverContentImpl2(props, forwardedRef) {
323
+ const { trapFocus, scope, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, disableFocusScope, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, children, enableRemoveScroll, freezeContentsWhenHidden, setIsFullyHidden, lazyMount, forceUnmount, forceMount, context, open, alwaysDisable, ...contentProps } = props;
324
+ const { disableDismissable } = context;
325
+ const keepChildrenMounted = context.keepChildrenMounted || forceMount;
326
+ const handleExitComplete = React.useCallback(() => {
327
+ setIsFullyHidden?.(true);
328
+ }, [setIsFullyHidden]);
329
+ let contents = /* @__PURE__ */ jsx(ResetPresence, {
330
+ disable: context.breakpointActive,
331
+ children
332
+ });
333
+ const handleDismiss = React.useCallback((details) => {
334
+ if (context.closeReasonRef) context.closeReasonRef.current = details.reason === "escape-key" ? "escape-key" : "dismiss";
335
+ context.onOpenChange(false, "press");
336
+ }, [context]);
337
+ if (!context.breakpointActive) {
338
+ if (!alwaysDisable || !alwaysDisable.focus) contents = /* @__PURE__ */ jsx(FocusScope, {
339
+ loop: trapFocus !== false,
340
+ enabled: context.breakpointActive ? false : disableFocusScope ? false : open,
341
+ trapped: context.breakpointActive ? false : trapFocus,
342
+ onMountAutoFocus: onOpenAutoFocus,
343
+ onUnmountAutoFocus: onCloseAutoFocus === false ? void 0 : onCloseAutoFocus,
344
+ children: contents
345
+ });
346
+ if (!alwaysDisable || !alwaysDisable["remove-scroll"]) contents = /* @__PURE__ */ jsx(RemoveScroll, {
347
+ enabled: context.breakpointActive ? false : enableRemoveScroll ? open : false,
348
+ children: contents
349
+ });
350
+ if (!alwaysDisable || !alwaysDisable.dismiss) contents = /* @__PURE__ */ jsx(Dismissable, {
351
+ branches: context.branches,
352
+ forceUnmount: disableDismissable || (forceUnmount ?? !open),
353
+ onEscapeKeyDown,
354
+ onPointerDownOutside,
355
+ onFocusOutside,
356
+ onInteractOutside,
357
+ onDismiss: handleDismiss,
358
+ children: contents
359
+ });
360
+ }
361
+ return /* @__PURE__ */ jsx(Animate, {
362
+ type: "presence",
363
+ present: Boolean(open),
364
+ keepChildrenMounted: Boolean(keepChildrenMounted),
365
+ onExitComplete: handleExitComplete,
366
+ lazyMount,
367
+ passThrough: context.breakpointActive,
368
+ children: /* @__PURE__ */ jsx(PopperContent, {
369
+ scope,
370
+ "data-state": getState(open),
371
+ id: context.contentId,
372
+ ref: forwardedRef,
373
+ passThrough: context.breakpointActive,
374
+ ...contentProps,
375
+ children: /* @__PURE__ */ jsx(PortalAdaptSafe, {
376
+ context,
377
+ children: contents
378
+ })
379
+ }, context.contentId)
380
+ });
456
381
  });
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
- });
382
+ const PopoverClose = createRefComponent(function PopoverClose2(props, forwardedRef) {
383
+ const { scope, className, ...rest } = props;
384
+ const context = usePopoverContext(scope);
385
+ return /* @__PURE__ */ jsx(YStack, {
386
+ ...rest,
387
+ ref: forwardedRef,
388
+ className: `is_PopoverClose ${className || ""}`.trim(),
389
+ onPress: composeEventHandlers(props.onPress, () => context?.onOpenChange?.(false, "press"))
390
+ });
472
391
  });
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
- });
392
+ const PopoverArrow = createStyledHOC(PopperArrowFrame, function PopoverArrow2(props, forwardedRef) {
393
+ const { scope, className, ...rest } = props;
394
+ if (useAdaptIsActive(usePopoverContext(scope).adaptScope)) return null;
395
+ return /* @__PURE__ */ jsx(PopperArrow, {
396
+ scope,
397
+ className: `is_PopoverArrow ${className || ""}`.trim(),
398
+ ...rest,
399
+ ref: forwardedRef
400
+ });
485
401
  });
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
- });
402
+ const PopoverScrollView = createRefComponent(({ scope, ...props }, ref) => {
403
+ const context = usePopoverContext(scope);
404
+ return /* @__PURE__ */ jsx(ScrollView, {
405
+ ref,
406
+ pointerEvents: context.breakpointActive ? "none" : void 0,
407
+ scrollEnabled: !context.breakpointActive,
408
+ passThrough: context.breakpointActive,
409
+ ...props
410
+ });
498
411
  });
499
412
  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
- });
413
+ const Popover = withStaticProperties(createRefComponent(function Popover2({ scope = DEFAULT_SCOPE, ...props }, ref) {
414
+ const id = React.useId();
415
+ const adaptScope = `PopoverAdapt${scope}`;
416
+ const { open: openProp, defaultOpen, onOpenChange } = props;
417
+ const viaRef = React.useRef(void 0);
418
+ const closeReasonRef = React.useRef(void 0);
419
+ const [open, setOpen] = useControllableState({
420
+ prop: openProp,
421
+ defaultProp: defaultOpen || false,
422
+ onChange: (val) => {
423
+ onOpenChange?.(val, viaRef.current);
424
+ }
425
+ });
426
+ const handleOpenChange = useEvent((val, via) => {
427
+ viaRef.current = via;
428
+ setOpen(val);
429
+ });
430
+ React.useEffect(() => {
431
+ if (!open) return;
432
+ openPopovers.add(setOpen);
433
+ return () => {
434
+ openPopovers.delete(setOpen);
435
+ };
436
+ }, [open, setOpen]);
437
+ return /* @__PURE__ */ jsx(AdaptParent, {
438
+ scope: adaptScope,
439
+ adaptChildren: props.children,
440
+ open,
441
+ onOpenChange: setOpen,
442
+ children: /* @__PURE__ */ jsx(PopoverInner, {
443
+ adaptScope,
444
+ ref,
445
+ id,
446
+ scope,
447
+ open,
448
+ setOpen,
449
+ handleOpenChange,
450
+ closeReasonRef,
451
+ ...props
452
+ })
453
+ });
517
454
  }), {
518
- Anchor: PopoverAnchor,
519
- Arrow: PopoverArrow,
520
- Trigger: PopoverTrigger,
521
- Content: PopoverContent,
522
- Close: PopoverClose,
523
- Adapt,
524
- ScrollView: PopoverScrollView,
525
- FocusScope: FocusScopeController
455
+ Anchor: PopoverAnchor,
456
+ Arrow: PopoverArrow,
457
+ Trigger: PopoverTrigger,
458
+ Content: PopoverContent,
459
+ Close: PopoverClose,
460
+ Adapt,
461
+ ScrollView: PopoverScrollView,
462
+ FocusScope: FocusScopeController
526
463
  });
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;
464
+ const PopoverInner = createRefComponent(function PopoverInner2(props, forwardedRef) {
465
+ const { children, open: _openProp, defaultOpen: _defaultOpen, onOpenChange: _onOpenChange, scope = DEFAULT_SCOPE, keepChildrenMounted: keepChildrenMountedProp, hoverable, disableFocus = !hoverable, disableDismissable, zIndex, id, adaptScope, open, setOpen, handleOpenChange, closeReasonRef, ...restProps } = props;
466
+ const triggerRef = React.useRef(null);
467
+ const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);
468
+ const [keepChildrenMounted] = useControllableState({
469
+ prop: keepChildrenMountedProp,
470
+ defaultProp: false,
471
+ transition: keepChildrenMountedProp === "lazy"
472
+ });
473
+ const isAdapted = useAdaptIsActive(adaptScope);
474
+ const floatingContext = useFloatingContext({
475
+ open,
476
+ setOpen: handleOpenChange,
477
+ closeReasonRef,
478
+ disable: isAdapted,
479
+ hoverable,
480
+ disableFocus
481
+ });
482
+ const [anchorTo, setAnchorToRaw] = React.useState();
483
+ const setAnchorTo = useCreateShallowSetState(setAnchorToRaw);
484
+ React.useImperativeHandle(forwardedRef, () => ({
485
+ anchorTo: setAnchorTo,
486
+ toggle: () => setOpen((prev) => !prev),
487
+ open: () => setOpen(true),
488
+ close: () => setOpen(false),
489
+ setOpen
490
+ }));
491
+ const contentId = React.useId();
492
+ const onOpenToggle = useEvent(() => {
493
+ if (open && isAdapted) return;
494
+ closeReasonRef.current = open ? "reference-press" : void 0;
495
+ setOpen(!open);
496
+ });
497
+ const onCustomAnchorAdd = React.useCallback(() => setHasCustomAnchor(true), []);
498
+ const onCustomAnchorRemove = React.useCallback(() => setHasCustomAnchor(false), []);
499
+ const contents = /* @__PURE__ */ jsx(Popper, {
500
+ open,
501
+ passThrough: isAdapted,
502
+ scope,
503
+ stayInFrame: true,
504
+ ...restProps,
505
+ children: /* @__PURE__ */ jsx(PopoverContextProvider, {
506
+ scope,
507
+ open,
508
+ onOpenChange: handleOpenChange,
509
+ onOpenToggle,
510
+ triggerRef,
511
+ id,
512
+ contentId,
513
+ hasCustomAnchor,
514
+ onCustomAnchorAdd,
515
+ onCustomAnchorRemove,
516
+ anchorTo,
517
+ adaptScope,
518
+ breakpointActive: isAdapted,
519
+ keepChildrenMounted,
520
+ disableDismissable,
521
+ hoverable,
522
+ closeReasonRef,
523
+ children
524
+ })
525
+ });
526
+ let result = /* @__PURE__ */ jsx(Fragment, { children: isWeb ? /* @__PURE__ */ jsx(FloatingOverrideContext.Provider, {
527
+ value: floatingContext,
528
+ children: contents
529
+ }) : contents });
530
+ if (zIndex !== void 0) return /* @__PURE__ */ jsx(PopoverZIndexContext.Provider, {
531
+ value: zIndex,
532
+ children: result
533
+ });
534
+ return result;
635
535
  });
636
536
  function getState(open) {
637
- return open ? "open" : "closed";
537
+ return open ? "open" : "closed";
638
538
  }
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
- };
539
+
671
540
  export { Popover, PopoverAnchor, PopoverArrow, PopoverClose, PopoverContent, PopoverContext, PopoverContextProvider, PopoverTrigger, PopoverTriggerContext, PopoverZIndexContext, closeLastOpenedPopover, closeOpenPopovers, hasOpenPopovers, usePopoverContext, usePopoverOpen, usePopoverTriggerContext, usePopoverTriggerSetup };
672
541
  //# sourceMappingURL=Popover.mjs.map