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