@tamagui/popper 2.7.7 → 3.0.0-beta.1091.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 (53) hide show
  1. package/dist/cjs/Popper.cjs +473 -607
  2. package/dist/cjs/Popper.native.cjs +498 -0
  3. package/dist/cjs/Popper.native.js +454 -611
  4. package/dist/cjs/Popper.native.js.map +1 -1
  5. package/dist/cjs/index.cjs +9 -11
  6. package/dist/cjs/index.native.cjs +20 -0
  7. package/dist/cjs/index.native.js +9 -10
  8. package/dist/cjs/index.native.js.map +1 -1
  9. package/dist/cjs/useRepositionOnNative.cjs +24 -0
  10. package/dist/cjs/useRepositionOnNative.native.cjs +63 -0
  11. package/dist/cjs/useRepositionOnNative.native.js +65 -0
  12. package/dist/cjs/useRepositionOnNative.native.js.map +1 -0
  13. package/dist/esm/Popper.mjs +443 -559
  14. package/dist/esm/Popper.mjs.map +1 -1
  15. package/dist/esm/Popper.native.js +423 -559
  16. package/dist/esm/Popper.native.js.map +1 -1
  17. package/dist/esm/index.js +1 -2
  18. package/dist/esm/index.mjs +1 -2
  19. package/dist/esm/index.native.js +1 -2
  20. package/dist/esm/useRepositionOnNative.mjs +4 -0
  21. package/dist/esm/useRepositionOnNative.mjs.map +1 -0
  22. package/dist/esm/useRepositionOnNative.native.js +36 -0
  23. package/dist/esm/useRepositionOnNative.native.js.map +1 -0
  24. package/dist/jsx/Popper.mjs +443 -559
  25. package/dist/jsx/Popper.mjs.map +1 -1
  26. package/dist/jsx/Popper.native.cjs +498 -0
  27. package/dist/jsx/Popper.native.js +454 -611
  28. package/dist/jsx/Popper.native.js.map +1 -1
  29. package/dist/jsx/index.js +1 -2
  30. package/dist/jsx/index.mjs +1 -2
  31. package/dist/jsx/index.native.cjs +20 -0
  32. package/dist/jsx/index.native.js +9 -10
  33. package/dist/jsx/index.native.js.map +1 -1
  34. package/dist/jsx/useRepositionOnNative.mjs +4 -0
  35. package/dist/jsx/useRepositionOnNative.mjs.map +1 -0
  36. package/dist/jsx/useRepositionOnNative.native.cjs +63 -0
  37. package/dist/jsx/useRepositionOnNative.native.js +65 -0
  38. package/dist/jsx/useRepositionOnNative.native.js.map +1 -0
  39. package/package.json +15 -13
  40. package/src/Popper.tsx +44 -129
  41. package/src/useRepositionOnNative.native.ts +40 -0
  42. package/src/useRepositionOnNative.ts +8 -0
  43. package/types/Popper.d.ts +42 -74
  44. package/types/Popper.d.ts.map +1 -1
  45. package/types/useRepositionOnNative.d.ts +6 -0
  46. package/types/useRepositionOnNative.d.ts.map +1 -0
  47. package/types/useRepositionOnNative.native.d.ts +7 -0
  48. package/types/useRepositionOnNative.native.d.ts.map +1 -0
  49. package/dist/esm/index.js.map +0 -1
  50. package/dist/esm/index.mjs.map +0 -1
  51. package/dist/esm/index.native.js.map +0 -1
  52. package/dist/jsx/index.js.map +0 -1
  53. package/dist/jsx/index.mjs.map +0 -1
@@ -2,588 +2,452 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { flushSync } from "react-dom";
3
3
  import { useComposedRefs } from "@tamagui/compose-refs";
4
4
  import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/constants";
5
- import { LayoutMeasurementController, View, createStyledContext, getVariableValue, registerLayoutNode, styled } from "@tamagui/core";
5
+ import { LayoutMeasurementController, View, createRefComponent, createStyledContext, createStyledHOC, getVariableValue, registerLayoutNode, styled } from "@tamagui/core";
6
6
  import { FloatingOverrideContext, arrow, flip, getOverflowAncestors, offset, platform, shift, useFloating } from "@tamagui/floating";
7
- import { getSpace } from "@tamagui/get-token";
8
- import { YStack } from "@tamagui/stacks";
7
+ import { getSize } from "@tamagui/get-token";
9
8
  import { startTransition } from "@tamagui/start-transition";
10
9
  import * as React from "react";
11
- import { Keyboard, useWindowDimensions } from "react-native";
12
- function _instanceof(left, right) {
13
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);else return left instanceof right;
14
- }
15
- function _type_of(obj) {
16
- "@swc/helpers - typeof";
10
+ import { useRepositionOnNative } from "./useRepositionOnNative.native.js";
17
11
 
18
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
19
- }
20
12
  var PopperContextFast = createStyledContext({}, "Popper__");
21
13
  var PopperPositionContext = createStyledContext;
22
- var {
23
- useStyledContext: usePopperContext,
24
- Provider: PopperProviderFast
25
- } = PopperContextFast;
14
+ var { useStyledContext: usePopperContext, Provider: PopperProviderFast } = PopperContextFast;
26
15
  var PopperContextSlow = createStyledContext({}, "PopperSlow__");
27
- var {
28
- useStyledContext: usePopperContextSlow,
29
- Provider: PopperProviderSlow
30
- } = PopperContextSlow;
31
- var PopperProvider = function (param) {
32
- var {
33
- scope,
34
- children,
35
- ...context
36
- } = param;
37
- var fns = React.useRef(context);
38
- fns.current = context;
39
- var [slowContext] = React.useState(function () {
40
- return {
41
- refs: context.refs,
42
- triggerElements: context.triggerElements,
43
- update() {
44
- for (var _len = arguments.length, a = new Array(_len), _key = 0; _key < _len; _key++) a[_key] = arguments[_key];
45
- fns.current.update(...a);
46
- },
47
- getReferenceProps(p) {
48
- var _fns_current_getReferenceProps, _fns_current;
49
- return (_fns_current_getReferenceProps = (_fns_current = fns.current).getReferenceProps) === null || _fns_current_getReferenceProps === void 0 ? void 0 : _fns_current_getReferenceProps.call(_fns_current, p);
50
- },
51
- onHoverReference(e) {
52
- var _fns_current_onHoverReference, _fns_current;
53
- (_fns_current_onHoverReference = (_fns_current = fns.current).onHoverReference) === null || _fns_current_onHoverReference === void 0 || _fns_current_onHoverReference.call(_fns_current, e);
54
- },
55
- onLeaveReference() {
56
- var _fns_current_onLeaveReference, _fns_current;
57
- (_fns_current_onLeaveReference = (_fns_current = fns.current).onLeaveReference) === null || _fns_current_onLeaveReference === void 0 || _fns_current_onLeaveReference.call(_fns_current);
58
- }
59
- };
60
- });
61
- return /* @__PURE__ */jsx(PopperProviderFast, {
62
- scope,
63
- ...context,
64
- children: /* @__PURE__ */jsx(PopperProviderSlow, {
65
- scope,
66
- ...slowContext,
67
- children
68
- })
69
- });
16
+ var { useStyledContext: usePopperContextSlow, Provider: PopperProviderSlow } = PopperContextSlow;
17
+ var PopperProvider = function(param) {
18
+ var { scope, children, ...context } = param;
19
+ var fns = React.useRef(context);
20
+ fns.current = context;
21
+ var [slowContext] = React.useState(function() {
22
+ return {
23
+ refs: context.refs,
24
+ triggerElements: context.triggerElements,
25
+ update() {
26
+ for (var _len = arguments.length, a = new Array(_len), _key = 0; _key < _len; _key++) a[_key] = arguments[_key];
27
+ fns.current.update(...a);
28
+ },
29
+ getReferenceProps(p) {
30
+ var _fns_current_getReferenceProps, _fns_current;
31
+ return (_fns_current_getReferenceProps = (_fns_current = fns.current).getReferenceProps) === null || _fns_current_getReferenceProps === void 0 ? void 0 : _fns_current_getReferenceProps.call(_fns_current, p);
32
+ },
33
+ onHoverReference(e) {
34
+ var _fns_current_onHoverReference, _fns_current;
35
+ (_fns_current_onHoverReference = (_fns_current = fns.current).onHoverReference) === null || _fns_current_onHoverReference === void 0 || _fns_current_onHoverReference.call(_fns_current, e);
36
+ },
37
+ onLeaveReference() {
38
+ var _fns_current_onLeaveReference, _fns_current;
39
+ (_fns_current_onLeaveReference = (_fns_current = fns.current).onLeaveReference) === null || _fns_current_onLeaveReference === void 0 || _fns_current_onLeaveReference.call(_fns_current);
40
+ }
41
+ };
42
+ });
43
+ return /* @__PURE__ */ jsx(PopperProviderFast, {
44
+ scope,
45
+ ...context,
46
+ children: /* @__PURE__ */ jsx(PopperProviderSlow, {
47
+ scope,
48
+ ...slowContext,
49
+ children
50
+ })
51
+ });
70
52
  };
71
53
  var checkFloating = {
72
- name: "checkFloating",
73
- fn(data) {
74
- return {
75
- data: {
76
- hasFloating: !!data.rects.floating.width
77
- }
78
- };
79
- }
54
+ name: "checkFloating",
55
+ fn(data) {
56
+ return { data: { hasFloating: !!data.rects.floating.width } };
57
+ }
80
58
  };
81
59
  var setupOptions = {};
82
60
  function setupPopper(options) {
83
- Object.assign(setupOptions, options);
61
+ Object.assign(setupOptions, options);
84
62
  }
85
63
  function tamaguiAutoUpdate(reference, floating, update) {
86
- update();
87
- var rafId = requestAnimationFrame(function () {
88
- update();
89
- rafId = 0;
90
- });
91
- var cleanups = [function () {
92
- if (rafId) cancelAnimationFrame(rafId);
93
- }];
94
- if (_instanceof(reference, HTMLElement)) cleanups.push(registerLayoutNode(reference, update));
95
- if (typeof ResizeObserver !== "undefined") {
96
- var lastWidth = -1;
97
- var lastHeight = -1;
98
- var ro = new ResizeObserver(function (entries) {
99
- var entry = entries[entries.length - 1];
100
- if (!entry) return;
101
- var {
102
- width,
103
- height
104
- } = entry.contentRect;
105
- if (lastWidth === -1) {
106
- lastWidth = width;
107
- lastHeight = height;
108
- return;
109
- }
110
- if (width !== lastWidth || height !== lastHeight) {
111
- lastWidth = width;
112
- lastHeight = height;
113
- update();
114
- }
115
- });
116
- ro.observe(floating);
117
- cleanups.push(function () {
118
- return ro.disconnect();
119
- });
120
- }
121
- var ancestors = [...(_instanceof(reference, Element) ? getOverflowAncestors(reference) : []), ...getOverflowAncestors(floating)];
122
- var uniqueAncestors = [...new Set(ancestors)];
123
- var _iteratorNormalCompletion = true,
124
- _didIteratorError = false,
125
- _iteratorError = void 0;
126
- try {
127
- for (var _iterator = uniqueAncestors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _step.value.addEventListener("scroll", update, {
128
- passive: true
129
- });
130
- } catch (err) {
131
- _didIteratorError = true;
132
- _iteratorError = err;
133
- } finally {
134
- try {
135
- if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
136
- } finally {
137
- if (_didIteratorError) throw _iteratorError;
138
- }
139
- }
140
- window.addEventListener("resize", update);
141
- cleanups.push(function () {
142
- var _iteratorNormalCompletion2 = true,
143
- _didIteratorError2 = false,
144
- _iteratorError2 = void 0;
145
- try {
146
- for (var _iterator2 = uniqueAncestors[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) _step2.value.removeEventListener("scroll", update);
147
- } catch (err) {
148
- _didIteratorError2 = true;
149
- _iteratorError2 = err;
150
- } finally {
151
- try {
152
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) _iterator2.return();
153
- } finally {
154
- if (_didIteratorError2) throw _iteratorError2;
155
- }
156
- }
157
- window.removeEventListener("resize", update);
158
- });
159
- return function () {
160
- return cleanups.forEach(function (fn) {
161
- return fn();
162
- });
163
- };
64
+ update();
65
+ var rafId = requestAnimationFrame(function() {
66
+ update();
67
+ rafId = 0;
68
+ });
69
+ var cleanups = [function() {
70
+ if (rafId) cancelAnimationFrame(rafId);
71
+ }];
72
+ if (reference instanceof HTMLElement) cleanups.push(registerLayoutNode(reference, update));
73
+ if (typeof ResizeObserver !== "undefined") {
74
+ var lastWidth = -1;
75
+ var lastHeight = -1;
76
+ var ro = new ResizeObserver(function(entries) {
77
+ var entry = entries[entries.length - 1];
78
+ if (!entry) return;
79
+ var { width, height } = entry.contentRect;
80
+ if (lastWidth === -1) {
81
+ lastWidth = width;
82
+ lastHeight = height;
83
+ return;
84
+ }
85
+ if (width !== lastWidth || height !== lastHeight) {
86
+ lastWidth = width;
87
+ lastHeight = height;
88
+ update();
89
+ }
90
+ });
91
+ ro.observe(floating);
92
+ cleanups.push(function() {
93
+ return ro.disconnect();
94
+ });
95
+ }
96
+ var ancestors = [...reference instanceof Element ? getOverflowAncestors(reference) : [], ...getOverflowAncestors(floating)];
97
+ var uniqueAncestors = [...new Set(ancestors)];
98
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
99
+ try {
100
+ for (var _iterator = uniqueAncestors[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _step.value.addEventListener("scroll", update, { passive: true });
101
+ } catch (err) {
102
+ _didIteratorError = true;
103
+ _iteratorError = err;
104
+ } finally {
105
+ try {
106
+ if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
107
+ } finally {
108
+ if (_didIteratorError) throw _iteratorError;
109
+ }
110
+ }
111
+ window.addEventListener("resize", update);
112
+ cleanups.push(function() {
113
+ var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
114
+ try {
115
+ for (var _iterator2 = uniqueAncestors[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) _step2.value.removeEventListener("scroll", update);
116
+ } catch (err) {
117
+ _didIteratorError2 = true;
118
+ _iteratorError2 = err;
119
+ } finally {
120
+ try {
121
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) _iterator2.return();
122
+ } finally {
123
+ if (_didIteratorError2) throw _iteratorError2;
124
+ }
125
+ }
126
+ window.removeEventListener("resize", update);
127
+ });
128
+ return function() {
129
+ return cleanups.forEach(function(fn) {
130
+ return fn();
131
+ });
132
+ };
164
133
  }
165
134
  function Popper(props) {
166
- var {
167
- children,
168
- size,
169
- strategy = "absolute",
170
- placement = "bottom",
171
- stayInFrame,
172
- allowFlip,
173
- offset: offset$1,
174
- disableRTL,
175
- resize,
176
- passThrough,
177
- open,
178
- scope
179
- } = props;
180
- var [arrowEl, setArrow] = React.useState(null);
181
- var [arrowSize, setArrowSize] = React.useState(0);
182
- var offsetOptions = offset$1 !== null && offset$1 !== void 0 ? offset$1 : arrowSize;
183
- React.useRef({});
184
- var isOpen = passThrough ? false : open !== null && open !== void 0 ? open : true;
185
- var middlewareRef = React.useRef([]);
186
- if (isOpen) middlewareRef.current = [typeof offsetOptions !== "undefined" ? offset(offsetOptions) : null, allowFlip ? flip(typeof allowFlip === "boolean" ? {} : allowFlip) : null, stayInFrame ? shift({
187
- padding: 10,
188
- mainAxis: true,
189
- crossAxis: false,
190
- ...((typeof stayInFrame === "undefined" ? "undefined" : _type_of(stayInFrame)) === "object" ? stayInFrame : null)
191
- }) : null, arrowEl ? arrow({
192
- element: arrowEl
193
- }) : null, checkFloating, null, null, null].filter(Boolean);
194
- var floating = useFloating({
195
- open: isOpen,
196
- strategy,
197
- placement,
198
- sameScrollView: false,
199
- whileElementsMounted: !isOpen ? void 0 : tamaguiAutoUpdate,
200
- platform: (disableRTL !== null && disableRTL !== void 0 ? disableRTL : setupOptions.disableRTL) ? {
201
- ...platform,
202
- isRTL(element) {
203
- return false;
204
- }
205
- } : platform,
206
- middleware: middlewareRef.current
207
- });
208
- var {
209
- middlewareData
210
- } = floating;
211
- var dimensions = useWindowDimensions();
212
- var [keyboardOpen, setKeyboardOpen] = React.useState(false);
213
- React.useEffect(function () {
214
- var showSubscription = Keyboard.addListener("keyboardDidShow", function () {
215
- startTransition(function () {
216
- setKeyboardOpen(true);
217
- });
218
- });
219
- var hideSubscription = Keyboard.addListener("keyboardDidHide", function () {
220
- startTransition(function () {
221
- setKeyboardOpen(false);
222
- });
223
- });
224
- return function () {
225
- showSubscription.remove();
226
- hideSubscription.remove();
227
- };
228
- }, []);
229
- useIsomorphicLayoutEffect(function () {
230
- if (passThrough) return;
231
- floating.update();
232
- }, [passThrough, dimensions, keyboardOpen]);
233
- return /* @__PURE__ */jsx(PopperProvider, {
234
- scope,
235
- ...React.useMemo(function () {
236
- var _middlewareData_checkFloating;
237
- return {
238
- size,
239
- arrowRef: setArrow,
240
- arrowStyle: middlewareData.arrow,
241
- onArrowSize: setArrowSize,
242
- hasFloating: (_middlewareData_checkFloating = middlewareData.checkFloating) === null || _middlewareData_checkFloating === void 0 ? void 0 : _middlewareData_checkFloating.hasFloating,
243
- transformOrigin: middlewareData.transformOrigin,
244
- open: !!open,
245
- ...floating
246
- };
247
- }, [open, size, floating, JSON.stringify(middlewareData.arrow || null), JSON.stringify(middlewareData.transformOrigin || null)]),
248
- children: /* @__PURE__ */jsx(FloatingOverrideContext.Provider, {
249
- value: null,
250
- children
251
- })
252
- });
135
+ var { children, size, strategy = "absolute", placement = "bottom", stayInFrame, allowFlip, offset: offset$1, disableRTL, resize, passThrough, open, scope } = props;
136
+ var [arrowEl, setArrow] = React.useState(null);
137
+ var [arrowSize, setArrowSize] = React.useState(0);
138
+ var offsetOptions = offset$1 !== null && offset$1 !== void 0 ? offset$1 : arrowSize;
139
+ React.useRef({});
140
+ var isOpen = passThrough ? false : open !== null && open !== void 0 ? open : true;
141
+ var middlewareRef = React.useRef([]);
142
+ if (isOpen) middlewareRef.current = [
143
+ typeof offsetOptions !== "undefined" ? offset(offsetOptions) : null,
144
+ allowFlip ? flip(typeof allowFlip === "boolean" ? {} : allowFlip) : null,
145
+ stayInFrame ? shift({
146
+ padding: 10,
147
+ mainAxis: true,
148
+ crossAxis: false,
149
+ ...typeof stayInFrame === "object" ? stayInFrame : null
150
+ }) : null,
151
+ arrowEl ? arrow({ element: arrowEl }) : null,
152
+ checkFloating,
153
+ null,
154
+ null,
155
+ null
156
+ ].filter(Boolean);
157
+ var floating = useFloating({
158
+ open: isOpen,
159
+ strategy,
160
+ placement,
161
+ sameScrollView: false,
162
+ whileElementsMounted: !isOpen ? void 0 : tamaguiAutoUpdate,
163
+ platform: (disableRTL !== null && disableRTL !== void 0 ? disableRTL : setupOptions.disableRTL) ? {
164
+ ...platform,
165
+ isRTL(element) {
166
+ return false;
167
+ }
168
+ } : platform,
169
+ middleware: middlewareRef.current
170
+ });
171
+ var { middlewareData } = floating;
172
+ useRepositionOnNative(floating.update, passThrough);
173
+ return /* @__PURE__ */ jsx(PopperProvider, {
174
+ scope,
175
+ ...React.useMemo(function() {
176
+ var _middlewareData_checkFloating;
177
+ return {
178
+ size,
179
+ arrowRef: setArrow,
180
+ arrowStyle: middlewareData.arrow,
181
+ onArrowSize: setArrowSize,
182
+ hasFloating: (_middlewareData_checkFloating = middlewareData.checkFloating) === null || _middlewareData_checkFloating === void 0 ? void 0 : _middlewareData_checkFloating.hasFloating,
183
+ transformOrigin: middlewareData.transformOrigin,
184
+ open: !!open,
185
+ ...floating
186
+ };
187
+ }, [
188
+ open,
189
+ size,
190
+ floating,
191
+ JSON.stringify(middlewareData.arrow || null),
192
+ JSON.stringify(middlewareData.transformOrigin || null)
193
+ ]),
194
+ children: /* @__PURE__ */ jsx(FloatingOverrideContext.Provider, {
195
+ value: null,
196
+ children
197
+ })
198
+ });
253
199
  }
254
- var PopperAnchor = YStack.styleable(function PopperAnchor2(props, forwardedRef) {
255
- var {
256
- virtualRef,
257
- scope,
258
- ...rest
259
- } = props;
260
- var context = usePopperContextSlow(scope);
261
- var {
262
- getReferenceProps,
263
- refs,
264
- update
265
- } = context;
266
- var ref = React.useRef(null);
267
- var triggerId = React.useId();
268
- React.useEffect(function () {
269
- if (!scope || !context.triggerElements || !ref.current) return;
270
- if (!_instanceof(ref.current, Element)) return;
271
- var el = ref.current;
272
- context.triggerElements.add(triggerId, el);
273
- return function () {
274
- var _context_triggerElements;
275
- (_context_triggerElements = context.triggerElements) === null || _context_triggerElements === void 0 || _context_triggerElements.delete(triggerId);
276
- };
277
- }, [scope, triggerId, context.triggerElements]);
278
- React.useEffect(function () {
279
- if (virtualRef) {
280
- refs.setReference(virtualRef.current);
281
- update();
282
- }
283
- }, [virtualRef]);
284
- var refProps = (getReferenceProps === null || getReferenceProps === void 0 ? void 0 : getReferenceProps({
285
- ...rest,
286
- ref
287
- })) || null;
288
- var safeSetReference = React.useCallback(function (node) {
289
- startTransition(function () {
290
- refs.setReference(node);
291
- });
292
- }, [refs]);
293
- var shouldHandleInHover = isWeb && scope;
294
- var composedRefs = useComposedRefs(forwardedRef, ref, shouldHandleInHover ? void 0 : safeSetReference);
295
- return /* @__PURE__ */jsx(View, {
296
- ...rest,
297
- ...refProps,
298
- ref: composedRefs,
299
- ...(shouldHandleInHover && {
300
- onMouseEnter: function (e) {
301
- var _e_currentTarget;
302
- var el = (_e_currentTarget = e.currentTarget) !== null && _e_currentTarget !== void 0 ? _e_currentTarget : ref.current;
303
- if (_instanceof(el, HTMLElement)) {
304
- var _refProps_onPointerEnter, _context_onHoverReference;
305
- flushSync(function () {
306
- return refs.setReference(el);
307
- });
308
- update();
309
- if (!refProps) return;
310
- (_refProps_onPointerEnter = refProps.onPointerEnter) === null || _refProps_onPointerEnter === void 0 || _refProps_onPointerEnter.call(refProps, e);
311
- (_context_onHoverReference = context.onHoverReference) === null || _context_onHoverReference === void 0 || _context_onHoverReference.call(context, e.nativeEvent);
312
- }
313
- },
314
- onMouseLeave: function (e) {
315
- var _context_onLeaveReference, _refProps_onMouseLeave;
316
- (_context_onLeaveReference = context.onLeaveReference) === null || _context_onLeaveReference === void 0 || _context_onLeaveReference.call(context);
317
- refProps === null || refProps === void 0 || (_refProps_onMouseLeave = refProps.onMouseLeave) == null || _refProps_onMouseLeave.call(refProps, e);
318
- }
319
- })
320
- });
200
+ var PopperAnchor = createStyledHOC(View, function PopperAnchor2(props, forwardedRef) {
201
+ var { virtualRef, scope, ...rest } = props;
202
+ var context = usePopperContextSlow(scope);
203
+ var { getReferenceProps, refs, update } = context;
204
+ var ref = React.useRef(null);
205
+ var triggerId = React.useId();
206
+ React.useEffect(function() {
207
+ if (!scope || !context.triggerElements || !ref.current) return;
208
+ if (!(ref.current instanceof Element)) return;
209
+ var el = ref.current;
210
+ context.triggerElements.add(triggerId, el);
211
+ return function() {
212
+ var _context_triggerElements;
213
+ (_context_triggerElements = context.triggerElements) === null || _context_triggerElements === void 0 || _context_triggerElements.delete(triggerId);
214
+ };
215
+ }, [
216
+ scope,
217
+ triggerId,
218
+ context.triggerElements
219
+ ]);
220
+ React.useEffect(function() {
221
+ if (virtualRef) {
222
+ refs.setReference(virtualRef.current);
223
+ update();
224
+ }
225
+ }, [virtualRef]);
226
+ var refProps = (getReferenceProps === null || getReferenceProps === void 0 ? void 0 : getReferenceProps({
227
+ ...rest,
228
+ ref
229
+ })) || null;
230
+ var safeSetReference = React.useCallback(function(node) {
231
+ startTransition(function() {
232
+ refs.setReference(node);
233
+ });
234
+ }, [refs]);
235
+ var shouldHandleInHover = isWeb && scope;
236
+ var composedRefs = useComposedRefs(forwardedRef, ref, shouldHandleInHover ? void 0 : safeSetReference);
237
+ return /* @__PURE__ */ jsx(View, {
238
+ ...rest,
239
+ ...refProps,
240
+ ref: composedRefs,
241
+ ...shouldHandleInHover && {
242
+ onMouseEnter: function(e) {
243
+ var _e_currentTarget;
244
+ var el = (_e_currentTarget = e.currentTarget) !== null && _e_currentTarget !== void 0 ? _e_currentTarget : ref.current;
245
+ if (el instanceof HTMLElement) {
246
+ var _refProps_onPointerEnter, _context_onHoverReference;
247
+ flushSync(function() {
248
+ return refs.setReference(el);
249
+ });
250
+ update();
251
+ if (!refProps) return;
252
+ (_refProps_onPointerEnter = refProps.onPointerEnter) === null || _refProps_onPointerEnter === void 0 || _refProps_onPointerEnter.call(refProps, e);
253
+ (_context_onHoverReference = context.onHoverReference) === null || _context_onHoverReference === void 0 || _context_onHoverReference.call(context, e.nativeEvent);
254
+ }
255
+ },
256
+ onMouseLeave: function(e) {
257
+ var _context_onLeaveReference, _refProps_onMouseLeave;
258
+ (_context_onLeaveReference = context.onLeaveReference) === null || _context_onLeaveReference === void 0 || _context_onLeaveReference.call(context);
259
+ refProps === null || refProps === void 0 || (_refProps_onMouseLeave = refProps.onMouseLeave) == null || _refProps_onMouseLeave.call(refProps, e);
260
+ }
261
+ }
262
+ });
321
263
  });
322
- var PopperContentFrame = styled(YStack, {
323
- name: "PopperContent",
324
- variants: {
325
- unstyled: {
326
- true: {}
327
- },
328
- size: {
329
- "...size": function (val, param) {
330
- var {
331
- tokens
332
- } = param;
333
- return {
334
- padding: tokens.space[val],
335
- borderRadius: tokens.radius[val]
336
- };
337
- }
338
- }
339
- }
264
+ var PopperContentFrame = styled(View, { displayName: "PopperContent" });
265
+ var PopperContent = createRefComponent(function PopperContent2(props, forwardedRef) {
266
+ var isAnimatePosControlled = "animatePosition" in props;
267
+ var { scope, animatePosition, children, passThrough, ...rest } = props;
268
+ var animatePos = animatePosition;
269
+ var context = usePopperContext(scope);
270
+ var { strategy, placement, refs, x, y, getFloatingProps, isPositioned, transformOrigin, update } = context;
271
+ var updateRef = React.useRef(update);
272
+ updateRef.current = update;
273
+ var lastNodeRef = React.useRef(null);
274
+ var safeSetFloating = React.useCallback(function(node) {
275
+ var isNewNode = node !== lastNodeRef.current;
276
+ if (node) {
277
+ lastNodeRef.current = node;
278
+ refs.setFloating(node);
279
+ if (!isNewNode) {
280
+ var _updateRef_current;
281
+ (_updateRef_current = updateRef.current) === null || _updateRef_current === void 0 || _updateRef_current.call(updateRef);
282
+ }
283
+ }
284
+ }, [refs.setFloating]);
285
+ React.useEffect(function() {
286
+ return function() {
287
+ var ourNode = lastNodeRef.current;
288
+ if (ourNode && refs.floating.current === ourNode) refs.setFloating(null);
289
+ lastNodeRef.current = null;
290
+ };
291
+ }, []);
292
+ var contentRefs = useComposedRefs(safeSetFloating, forwardedRef);
293
+ var [needsMeasure, setNeedsMeasure] = React.useState(animatePos);
294
+ useIsomorphicLayoutEffect(function() {
295
+ if (needsMeasure && x && y) setNeedsMeasure(false);
296
+ }, [
297
+ needsMeasure,
298
+ animatePos,
299
+ x,
300
+ y
301
+ ]);
302
+ var hasBeenPositioned = React.useRef(false);
303
+ var lastGoodPosition = React.useRef({
304
+ x: 0,
305
+ y: 0
306
+ });
307
+ if (x !== 0 || y !== 0) {
308
+ lastGoodPosition.current = {
309
+ x,
310
+ y
311
+ };
312
+ if (isPositioned) hasBeenPositioned.current = true;
313
+ }
314
+ var brieflyZero = hasBeenPositioned.current && x === 0 && y === 0;
315
+ var effectiveX = brieflyZero ? lastGoodPosition.current.x : x;
316
+ var effectiveY = brieflyZero ? lastGoodPosition.current.y : y;
317
+ var hide = !hasBeenPositioned.current && effectiveX === 0 && effectiveY === 0;
318
+ var disableAnimationProp = animatePos === "even-when-repositioning" ? needsMeasure : !hasBeenPositioned.current && !isPositioned || needsMeasure;
319
+ var [disableAnimation, setDisableAnimation] = React.useState(disableAnimationProp);
320
+ React.useEffect(function() {
321
+ setDisableAnimation(disableAnimationProp);
322
+ }, [disableAnimationProp]);
323
+ var frameProps = {
324
+ ref: contentRefs,
325
+ ...hide ? {} : {
326
+ x: effectiveX || 0,
327
+ y: effectiveY || 0
328
+ },
329
+ top: 0,
330
+ left: 0,
331
+ position: strategy,
332
+ opacity: hide ? 0 : 1,
333
+ ...isAnimatePosControlled && {
334
+ transition: animatePos && !disableAnimation ? rest.transition : "none",
335
+ animatePresence: false
336
+ }
337
+ };
338
+ var { style, ...floatingProps } = getFloatingProps ? getFloatingProps(frameProps) : frameProps;
339
+ var transformOriginStyle = isWeb && transformOrigin ? { transformOrigin: `${transformOrigin.x} ${transformOrigin.y}` } : void 0;
340
+ return /* @__PURE__ */ jsx(LayoutMeasurementController, {
341
+ disable: !context.open,
342
+ children: /* @__PURE__ */ jsx(View, {
343
+ passThrough,
344
+ ref: contentRefs,
345
+ direction: rest.direction,
346
+ ...passThrough ? null : floatingProps,
347
+ ...!passThrough && animatePos && { "data-popper-animate-position": "true" },
348
+ children: /* @__PURE__ */ jsx(PopperContentFrame, {
349
+ passThrough,
350
+ ...!passThrough && {
351
+ "data-placement": placement,
352
+ "data-strategy": strategy,
353
+ ...style,
354
+ ...transformOriginStyle,
355
+ ...rest
356
+ },
357
+ children
358
+ }, "popper-content-frame")
359
+ })
360
+ });
340
361
  });
341
- var PopperContent = /* @__PURE__ */React.forwardRef(function PopperContent2(props, forwardedRef) {
342
- var isAnimatePosControlled = "animatePosition" in props || "enableAnimationForPositionChange" in props;
343
- var {
344
- scope,
345
- animatePosition,
346
- enableAnimationForPositionChange,
347
- children,
348
- passThrough,
349
- unstyled,
350
- ...rest
351
- } = props;
352
- var animatePos = animatePosition !== null && animatePosition !== void 0 ? animatePosition : enableAnimationForPositionChange;
353
- var context = usePopperContext(scope);
354
- var {
355
- strategy,
356
- placement,
357
- refs,
358
- x,
359
- y,
360
- getFloatingProps,
361
- size,
362
- isPositioned,
363
- transformOrigin,
364
- update
365
- } = context;
366
- var updateRef = React.useRef(update);
367
- updateRef.current = update;
368
- var lastNodeRef = React.useRef(null);
369
- var safeSetFloating = React.useCallback(function (node) {
370
- var isNewNode = node !== lastNodeRef.current;
371
- if (node) {
372
- lastNodeRef.current = node;
373
- refs.setFloating(node);
374
- if (!isNewNode) {
375
- var _updateRef_current;
376
- (_updateRef_current = updateRef.current) === null || _updateRef_current === void 0 || _updateRef_current.call(updateRef);
377
- }
378
- }
379
- }, [refs.setFloating]);
380
- React.useEffect(function () {
381
- return function () {
382
- var ourNode = lastNodeRef.current;
383
- if (ourNode && refs.floating.current === ourNode) refs.setFloating(null);
384
- lastNodeRef.current = null;
385
- };
386
- }, []);
387
- var contentRefs = useComposedRefs(safeSetFloating, forwardedRef);
388
- var [needsMeasure, setNeedsMeasure] = React.useState(animatePos);
389
- useIsomorphicLayoutEffect(function () {
390
- if (needsMeasure && x && y) setNeedsMeasure(false);
391
- }, [needsMeasure, animatePos, x, y]);
392
- var hasBeenPositioned = React.useRef(false);
393
- var lastGoodPosition = React.useRef({
394
- x: 0,
395
- y: 0
396
- });
397
- if (x !== 0 || y !== 0) {
398
- lastGoodPosition.current = {
399
- x,
400
- y
401
- };
402
- if (isPositioned) hasBeenPositioned.current = true;
403
- }
404
- var brieflyZero = hasBeenPositioned.current && x === 0 && y === 0;
405
- var effectiveX = brieflyZero ? lastGoodPosition.current.x : x;
406
- var effectiveY = brieflyZero ? lastGoodPosition.current.y : y;
407
- var hide = !hasBeenPositioned.current && effectiveX === 0 && effectiveY === 0;
408
- var disableAnimationProp = animatePos === "even-when-repositioning" ? needsMeasure : !hasBeenPositioned.current && !isPositioned || needsMeasure;
409
- var [disableAnimation, setDisableAnimation] = React.useState(disableAnimationProp);
410
- React.useEffect(function () {
411
- setDisableAnimation(disableAnimationProp);
412
- }, [disableAnimationProp]);
413
- var frameProps = {
414
- ref: contentRefs,
415
- ...(hide ? {} : {
416
- x: effectiveX || 0,
417
- y: effectiveY || 0
418
- }),
419
- top: 0,
420
- left: 0,
421
- position: strategy,
422
- opacity: hide ? 0 : 1,
423
- ...(isAnimatePosControlled && {
424
- transition: animatePos ? rest.transition : void 0,
425
- animateOnly: animatePos && !disableAnimation ? rest.animateOnly : [],
426
- animatePresence: false
427
- })
428
- };
429
- var {
430
- style,
431
- ...floatingProps
432
- } = getFloatingProps ? getFloatingProps(frameProps) : frameProps;
433
- var transformOriginStyle = isWeb && transformOrigin ? {
434
- transformOrigin: `${transformOrigin.x} ${transformOrigin.y}`
435
- } : void 0;
436
- return /* @__PURE__ */jsx(LayoutMeasurementController, {
437
- disable: !context.open,
438
- children: /* @__PURE__ */jsx(View, {
439
- passThrough,
440
- ref: contentRefs,
441
- direction: rest.direction,
442
- ...(passThrough ? null : floatingProps),
443
- ...(!passThrough && animatePos && {
444
- "data-popper-animate-position": "true"
445
- }),
446
- children: /* @__PURE__ */jsx(PopperContentFrame, {
447
- passThrough,
448
- unstyled,
449
- ...(!passThrough && {
450
- "data-placement": placement,
451
- "data-strategy": strategy,
452
- size,
453
- ...style,
454
- ...transformOriginStyle,
455
- ...rest
456
- }),
457
- children
458
- }, "popper-content-frame")
459
- })
460
- });
362
+ var PopperArrowFrame = styled(View, {
363
+ displayName: "PopperArrow",
364
+ position: "relative"
461
365
  });
462
- var PopperArrowFrame = styled(YStack, {
463
- name: "PopperArrow",
464
- variants: {
465
- unstyled: {
466
- false: {
467
- borderColor: "$borderColor",
468
- backgroundColor: "$background",
469
- position: "relative"
470
- }
471
- }
472
- },
473
- defaultVariants: {
474
- unstyled: process.env.TAMAGUI_HEADLESS === "1"
475
- }
476
- });
477
- var PopperArrowOuterFrame = styled(YStack, {
478
- name: "PopperArrowOuter",
479
- variants: {
480
- unstyled: {
481
- false: {
482
- position: "absolute",
483
- zIndex: 1e6,
484
- pointerEvents: "none",
485
- overflow: "hidden",
486
- alignItems: "center",
487
- justifyContent: "center"
488
- }
489
- }
490
- },
491
- defaultVariants: {
492
- unstyled: process.env.TAMAGUI_HEADLESS === "1"
493
- }
366
+ var PopperArrowOuterFrame = styled(View, {
367
+ displayName: "PopperArrowOuter",
368
+ position: "absolute",
369
+ zIndex: 1e6,
370
+ pointerEvents: "none",
371
+ overflow: "hidden",
372
+ alignItems: "center",
373
+ justifyContent: "center"
494
374
  });
495
375
  var opposites = {
496
- top: "bottom",
497
- right: "left",
498
- bottom: "top",
499
- left: "right"
376
+ top: "bottom",
377
+ right: "left",
378
+ bottom: "top",
379
+ left: "right"
500
380
  };
501
- var PopperArrow = /* @__PURE__ */React.forwardRef(function PopperArrow2(propsIn, forwardedRef) {
502
- var _context_arrowStyle, _context_arrowStyle1;
503
- var isAnimatePosControlled = "animatePosition" in propsIn;
504
- var {
505
- scope,
506
- animatePosition,
507
- transition,
508
- ...rest
509
- } = propsIn;
510
- var {
511
- offset,
512
- size: sizeProp,
513
- borderWidth = 0,
514
- ...arrowProps
515
- } = rest;
516
- var context = usePopperContext(scope);
517
- var sizeVal = typeof sizeProp === "number" ? sizeProp : getVariableValue(getSpace(sizeProp !== null && sizeProp !== void 0 ? sizeProp : context.size, {
518
- shift: -2,
519
- bounds: [2]
520
- }));
521
- var size = Math.max(0, +sizeVal);
522
- var {
523
- placement
524
- } = context;
525
- var refs = useComposedRefs(context.arrowRef, forwardedRef);
526
- var x = ((_context_arrowStyle = context.arrowStyle) === null || _context_arrowStyle === void 0 ? void 0 : _context_arrowStyle.x) || 0;
527
- var y = ((_context_arrowStyle1 = context.arrowStyle) === null || _context_arrowStyle1 === void 0 ? void 0 : _context_arrowStyle1.y) || 0;
528
- var arrowPositioned = context.arrowStyle != null;
529
- var primaryPlacement = placement ? placement.split("-")[0] : "top";
530
- var arrowStyle = {
531
- x,
532
- y,
533
- width: size,
534
- height: size
535
- };
536
- var innerArrowStyle = {};
537
- var isVertical = primaryPlacement === "bottom" || primaryPlacement === "top";
538
- if (primaryPlacement) {
539
- arrowStyle[isVertical ? "width" : "height"] = size * 2;
540
- var oppSide = opposites[primaryPlacement];
541
- if (oppSide) {
542
- arrowStyle[oppSide] = -size;
543
- innerArrowStyle[oppSide] = size / 2;
544
- }
545
- if (oppSide === "top" || oppSide === "bottom") arrowStyle.left = 0;
546
- if (oppSide === "left" || oppSide === "right") arrowStyle.top = 0;
547
- useIsomorphicLayoutEffect(function () {
548
- var _context_onArrowSize;
549
- (_context_onArrowSize = context.onArrowSize) === null || _context_onArrowSize === void 0 || _context_onArrowSize.call(context, size);
550
- }, [size, context.onArrowSize]);
551
- }
552
- return /* @__PURE__ */jsx(PopperArrowOuterFrame, {
553
- ref: refs,
554
- ...arrowStyle,
555
- ...(!arrowPositioned && {
556
- opacity: 0
557
- }),
558
- ...(isAnimatePosControlled && {
559
- transition: animatePosition ? transition : void 0,
560
- animateOnly: animatePosition ? ["transform"] : [],
561
- animatePresence: false
562
- }),
563
- children: /* @__PURE__ */jsx(PopperArrowFrame, {
564
- width: size,
565
- height: size,
566
- ...arrowProps,
567
- ...innerArrowStyle,
568
- rotate: "45deg",
569
- ...(primaryPlacement === "bottom" && {
570
- borderLeftWidth: borderWidth,
571
- borderTopWidth: borderWidth
572
- }),
573
- ...(primaryPlacement === "top" && {
574
- borderBottomWidth: borderWidth,
575
- borderRightWidth: borderWidth
576
- }),
577
- ...(primaryPlacement === "right" && {
578
- borderLeftWidth: borderWidth,
579
- borderBottomWidth: borderWidth
580
- }),
581
- ...(primaryPlacement === "left" && {
582
- borderTopWidth: borderWidth,
583
- borderRightWidth: borderWidth
584
- })
585
- })
586
- });
381
+ var PopperArrow = createRefComponent(function PopperArrow2(propsIn, forwardedRef) {
382
+ var _context_arrowStyle, _context_arrowStyle1;
383
+ var isAnimatePosControlled = "animatePosition" in propsIn;
384
+ var { scope, animatePosition, transition, ...rest } = propsIn;
385
+ var { offset, size: sizeProp, borderWidth = 0, ...arrowProps } = rest;
386
+ var context = usePopperContext(scope);
387
+ var _ref;
388
+ var sizeVal = typeof sizeProp === "number" ? sizeProp : getVariableValue(getSize((_ref = sizeProp !== null && sizeProp !== void 0 ? sizeProp : context.size) !== null && _ref !== void 0 ? _ref : true)) * .52 - 11.5;
389
+ var size = Math.max(0, +sizeVal);
390
+ var { placement } = context;
391
+ var refs = useComposedRefs(context.arrowRef, forwardedRef);
392
+ var x = ((_context_arrowStyle = context.arrowStyle) === null || _context_arrowStyle === void 0 ? void 0 : _context_arrowStyle.x) || 0;
393
+ var y = ((_context_arrowStyle1 = context.arrowStyle) === null || _context_arrowStyle1 === void 0 ? void 0 : _context_arrowStyle1.y) || 0;
394
+ var arrowPositioned = context.arrowStyle != null;
395
+ var primaryPlacement = placement ? placement.split("-")[0] : "top";
396
+ var arrowStyle = {
397
+ x,
398
+ y,
399
+ width: size,
400
+ height: size
401
+ };
402
+ var innerArrowStyle = {};
403
+ var isVertical = primaryPlacement === "bottom" || primaryPlacement === "top";
404
+ if (primaryPlacement) {
405
+ arrowStyle[isVertical ? "width" : "height"] = size * 2;
406
+ var oppSide = opposites[primaryPlacement];
407
+ if (oppSide) {
408
+ arrowStyle[oppSide] = -size;
409
+ innerArrowStyle[oppSide] = size / 2;
410
+ }
411
+ if (oppSide === "top" || oppSide === "bottom") arrowStyle.left = 0;
412
+ if (oppSide === "left" || oppSide === "right") arrowStyle.top = 0;
413
+ useIsomorphicLayoutEffect(function() {
414
+ var _context_onArrowSize;
415
+ (_context_onArrowSize = context.onArrowSize) === null || _context_onArrowSize === void 0 || _context_onArrowSize.call(context, size);
416
+ }, [size, context.onArrowSize]);
417
+ }
418
+ return /* @__PURE__ */ jsx(PopperArrowOuterFrame, {
419
+ ref: refs,
420
+ ...arrowStyle,
421
+ ...!arrowPositioned && { opacity: 0 },
422
+ ...isAnimatePosControlled && {
423
+ transition: animatePosition ? { transform: transition } : "none",
424
+ animatePresence: false
425
+ },
426
+ children: /* @__PURE__ */ jsx(PopperArrowFrame, {
427
+ width: size,
428
+ height: size,
429
+ ...arrowProps,
430
+ ...innerArrowStyle,
431
+ rotate: "45deg",
432
+ ...primaryPlacement === "bottom" && {
433
+ borderLeftWidth: borderWidth,
434
+ borderTopWidth: borderWidth
435
+ },
436
+ ...primaryPlacement === "top" && {
437
+ borderBottomWidth: borderWidth,
438
+ borderRightWidth: borderWidth
439
+ },
440
+ ...primaryPlacement === "right" && {
441
+ borderLeftWidth: borderWidth,
442
+ borderBottomWidth: borderWidth
443
+ },
444
+ ...primaryPlacement === "left" && {
445
+ borderTopWidth: borderWidth,
446
+ borderRightWidth: borderWidth
447
+ }
448
+ })
449
+ });
587
450
  });
451
+
588
452
  export { Popper, PopperAnchor, PopperArrow, PopperArrowFrame, PopperContent, PopperContentFrame, PopperContextFast, PopperContextSlow, PopperPositionContext, PopperProvider, PopperProviderFast, PopperProviderSlow, setupPopper, usePopperContext, usePopperContextSlow };
589
453
  //# sourceMappingURL=Popper.native.js.map