@tamagui/core 1.92.0 → 1.93.0

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.
@@ -14,30 +14,42 @@ var __export = (target, all) => {
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
15
15
  var useElementLayout_exports = {};
16
16
  __export(useElementLayout_exports, {
17
+ measureElement: () => measureElement,
17
18
  measureLayout: () => measureLayout,
18
19
  useElementLayout: () => useElementLayout
19
20
  });
20
21
  module.exports = __toCommonJS(useElementLayout_exports);
21
22
  var import_constants = require("@tamagui/constants"), import_getBoundingClientRect = require("../helpers/getBoundingClientRect");
22
- const LayoutHandlers = /* @__PURE__ */ new WeakMap();
23
+ const LayoutHandlers = /* @__PURE__ */ new WeakMap(), resizeListeners = /* @__PURE__ */ new Set();
23
24
  let resizeObserver = null;
24
- typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver((entries) => {
25
+ if (typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver((entries) => {
25
26
  for (const { target } of entries) {
26
27
  const onLayout = LayoutHandlers.get(target);
27
28
  if (typeof onLayout != "function")
28
29
  return;
29
- measureLayout(target, null, (x, y, width, height, left, top) => {
30
- onLayout({
31
- nativeEvent: {
32
- layout: { x, y, width, height, left, top },
33
- target
34
- },
35
- timeStamp: Date.now()
36
- });
30
+ measureElement(target).then((event) => {
31
+ onLayout(event);
37
32
  });
38
33
  }
39
- }));
40
- const cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo, callback) => {
34
+ }), typeof window.addEventListener == "function")) {
35
+ let tm;
36
+ window.addEventListener("resize", () => {
37
+ clearTimeout(tm), tm = setTimeout(() => {
38
+ resizeListeners.forEach((cb) => cb());
39
+ }, 4);
40
+ });
41
+ }
42
+ const measureElement = async (target) => new Promise((res) => {
43
+ measureLayout(target, null, (x, y, width, height, left, top) => {
44
+ res({
45
+ nativeEvent: {
46
+ layout: { x, y, width, height, left, top },
47
+ target
48
+ },
49
+ timeStamp: Date.now()
50
+ });
51
+ });
52
+ }), cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo, callback) => {
41
53
  const relativeNode = relativeTo || node?.parentNode;
42
54
  if (relativeNode instanceof HTMLElement) {
43
55
  const now = Date.now();
@@ -73,13 +85,22 @@ const cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo,
73
85
  });
74
86
  function useElementLayout(ref, onLayout) {
75
87
  (0, import_constants.useIsomorphicLayoutEffect)(() => {
76
- if (!resizeObserver || !onLayout)
88
+ if (!onLayout)
77
89
  return;
78
90
  const node = ref.current;
79
- if (node)
80
- return LayoutHandlers.set(node, onLayout), resizeObserver.observe(node), () => {
81
- resizeObserver?.unobserve(node);
82
- };
83
- }, [ref, onLayout]);
91
+ node && LayoutHandlers.set(node, onLayout);
92
+ }, [ref, onLayout]), (0, import_constants.useIsomorphicLayoutEffect)(() => {
93
+ if (!resizeObserver)
94
+ return;
95
+ const node = ref.current;
96
+ if (!node || !LayoutHandlers.has(node))
97
+ return;
98
+ const onResize = () => {
99
+ measureElement(node).then(onLayout);
100
+ };
101
+ return resizeListeners.add(onResize), resizeObserver.observe(node), () => {
102
+ resizeListeners.delete(onResize), resizeObserver?.unobserve(node);
103
+ };
104
+ }, [ref]);
84
105
  }
85
106
  //# sourceMappingURL=useElementLayout.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useElementLayout.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA0C,+BAE1C,+BAAsC;AAEtC,MAAM,iBAAiB,oBAAI,QAA2B;AAoBtD,IAAI,iBAAwC;AAExC,OAAO,SAAW,OAAe,oBAAoB,WACvD,iBAAiB,IAAI,eAAe,CAAC,YAAY;AAC/C,aAAW,EAAE,OAAO,KAAK,SAAS;AAChC,UAAM,WAAW,eAAe,IAAI,MAAM;AAC1C,QAAI,OAAO,YAAa;AAAY;AACpC,kBAAc,QAAuB,MAAM,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,QAAQ;AAC7E,eAAS;AAAA,QACP,aAAa;AAAA,UACX,QAAQ,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAAA,UACzC;AAAA,QACF;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF,CAAC;AAGH,MAAM,QAAQ,oBAAI,QAAQ,GAEb,gBAAgB,CAC3B,MACA,YACA,aAQG;AACH,QAAM,eAAe,cAAc,MAAM;AACzC,MAAI,wBAAwB,aAAa;AACvC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,IAAI,MAAM,GAAG,GACnB,QAAQ,IAAI;AAAA,MACV,2BAA2B,IAAI;AAAA,MAC/B,2BAA2B,YAAY;AAAA,IACzC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,eAAe,MAAM;AACtC,UAAI,mBAAmB,WAAW,MAAM,IAAI,IAAI,MAAM,KAAK;AACzD,cAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI,IAAI;AAAA,UACzC;AAAA,UACA;AAAA,QACF;AACA,iBAAS,GAAG,GAAG,OAAO,QAAQ,MAAM,GAAG;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF,GAEM,wBAAwB,CAAC,GAAoB,MAAuB;AACxE,QAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,IAAI,GAC/B,IAAI,OAAO,EAAE,MACb,IAAI,MAAM,EAAE;AAClB,SAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAC1C,GAEM,6BAA6B,CACjC,YAEO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAS,iBAAiB;AACxB,gBAAQ,oDAAsB,OAAO,CAAC;AAAA,EACxC;AACA,QAAM,KAAK,WAAW,gBAAgB,EAAE;AAWxC,EAViB,IAAI;AAAA,IACnB,CAAC,SAAS,OAAO;AACf,mBAAa,EAAE,GACf,GAAG,WAAW,GACd,QAAQ,QAAQ,CAAC,GAAG,kBAAkB;AAAA,IACxC;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EACF,EACS,QAAQ,OAAO;AAC1B,CAAC;AAGI,SAAS,iBACd,KACA,UACA;AACA,kDAA0B,MAAM;AAC9B,QAAI,CAAC,kBAAkB,CAAC;AAAU;AAClC,UAAM,OAAO,IAAI;AACjB,QAAK;AACL,4BAAe,IAAI,MAAM,QAAQ,GACjC,eAAe,QAAQ,IAAI,GACpB,MAAM;AACX,wBAAgB,UAAU,IAAI;AAAA,MAChC;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,CAAC;AACpB;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -15,6 +15,7 @@ var __export = (target, all) => {
15
15
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
16
  var useElementLayout_exports = {};
17
17
  __export(useElementLayout_exports, {
18
+ measureElement: () => measureElement,
18
19
  measureLayout: () => measureLayout,
19
20
  useElementLayout: () => useElementLayout
20
21
  });
@@ -30,6 +31,30 @@ function _array_with_holes(arr) {
30
31
  if (Array.isArray(arr))
31
32
  return arr;
32
33
  }
34
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
35
+ try {
36
+ var info = gen[key](arg), value = info.value;
37
+ } catch (error) {
38
+ reject(error);
39
+ return;
40
+ }
41
+ info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
42
+ }
43
+ function _async_to_generator(fn) {
44
+ return function() {
45
+ var self = this, args = arguments;
46
+ return new Promise(function(resolve, reject) {
47
+ var gen = fn.apply(self, args);
48
+ function _next(value) {
49
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
50
+ }
51
+ function _throw(err) {
52
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
53
+ }
54
+ _next(void 0);
55
+ });
56
+ };
57
+ }
33
58
  function _instanceof(left, right) {
34
59
  return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
35
60
  }
@@ -74,9 +99,99 @@ function _unsupported_iterable_to_array(o, minLen) {
74
99
  return _array_like_to_array(o, minLen);
75
100
  }
76
101
  }
77
- var LayoutHandlers = /* @__PURE__ */ new WeakMap();
78
- var resizeObserver = null;
79
- typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver(function(entries) {
102
+ function _ts_generator(thisArg, body) {
103
+ var f, y, t, g, _ = {
104
+ label: 0,
105
+ sent: function() {
106
+ if (t[0] & 1)
107
+ throw t[1];
108
+ return t[1];
109
+ },
110
+ trys: [],
111
+ ops: []
112
+ };
113
+ return g = {
114
+ next: verb(0),
115
+ throw: verb(1),
116
+ return: verb(2)
117
+ }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
118
+ return this;
119
+ }), g;
120
+ function verb(n) {
121
+ return function(v) {
122
+ return step([
123
+ n,
124
+ v
125
+ ]);
126
+ };
127
+ }
128
+ function step(op) {
129
+ if (f)
130
+ throw new TypeError("Generator is already executing.");
131
+ for (; _; )
132
+ try {
133
+ if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
134
+ return t;
135
+ switch (y = 0, t && (op = [
136
+ op[0] & 2,
137
+ t.value
138
+ ]), op[0]) {
139
+ case 0:
140
+ case 1:
141
+ t = op;
142
+ break;
143
+ case 4:
144
+ return _.label++, {
145
+ value: op[1],
146
+ done: !1
147
+ };
148
+ case 5:
149
+ _.label++, y = op[1], op = [
150
+ 0
151
+ ];
152
+ continue;
153
+ case 7:
154
+ op = _.ops.pop(), _.trys.pop();
155
+ continue;
156
+ default:
157
+ if (t = _.trys, !(t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
158
+ _ = 0;
159
+ continue;
160
+ }
161
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
162
+ _.label = op[1];
163
+ break;
164
+ }
165
+ if (op[0] === 6 && _.label < t[1]) {
166
+ _.label = t[1], t = op;
167
+ break;
168
+ }
169
+ if (t && _.label < t[2]) {
170
+ _.label = t[2], _.ops.push(op);
171
+ break;
172
+ }
173
+ t[2] && _.ops.pop(), _.trys.pop();
174
+ continue;
175
+ }
176
+ op = body.call(thisArg, _);
177
+ } catch (e) {
178
+ op = [
179
+ 6,
180
+ e
181
+ ], y = 0;
182
+ } finally {
183
+ f = t = 0;
184
+ }
185
+ if (op[0] & 5)
186
+ throw op[1];
187
+ return {
188
+ value: op[0] ? op[1] : void 0,
189
+ done: !0
190
+ };
191
+ }
192
+ }
193
+ var LayoutHandlers = /* @__PURE__ */ new WeakMap(), resizeListeners = /* @__PURE__ */ new Set(), resizeObserver = null;
194
+ if (typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver(function(entries) {
80
195
  var _iteratorNormalCompletion = !0, _didIteratorError = !1, _iteratorError = void 0;
81
196
  try {
82
197
  for (var _loop = function() {
@@ -85,21 +200,8 @@ typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new Resiz
85
200
  return {
86
201
  v: void 0
87
202
  };
88
- measureLayout(target, null, function(x, y, width, height, left, top) {
89
- onLayout({
90
- nativeEvent: {
91
- layout: {
92
- x,
93
- y,
94
- width,
95
- height,
96
- left,
97
- top
98
- },
99
- target
100
- },
101
- timeStamp: Date.now()
102
- });
203
+ measureElement(target).then(function(event) {
204
+ onLayout(event);
103
205
  });
104
206
  }, _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
105
207
  var _ret = _loop();
@@ -116,8 +218,46 @@ typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new Resiz
116
218
  throw _iteratorError;
117
219
  }
118
220
  }
119
- }));
120
- var cache = /* @__PURE__ */ new WeakMap(), measureLayout = function(node, relativeTo, callback) {
221
+ }), typeof window.addEventListener == "function")) {
222
+ var tm;
223
+ window.addEventListener("resize", function() {
224
+ clearTimeout(tm), tm = setTimeout(function() {
225
+ resizeListeners.forEach(function(cb) {
226
+ return cb();
227
+ });
228
+ }, 4);
229
+ });
230
+ }
231
+ var measureElement = function() {
232
+ var _ref = _async_to_generator(function(target) {
233
+ return _ts_generator(this, function(_state) {
234
+ return [
235
+ 2,
236
+ new Promise(function(res) {
237
+ measureLayout(target, null, function(x, y, width, height, left, top) {
238
+ res({
239
+ nativeEvent: {
240
+ layout: {
241
+ x,
242
+ y,
243
+ width,
244
+ height,
245
+ left,
246
+ top
247
+ },
248
+ target
249
+ },
250
+ timeStamp: Date.now()
251
+ });
252
+ });
253
+ })
254
+ ];
255
+ });
256
+ });
257
+ return function(target) {
258
+ return _ref.apply(this, arguments);
259
+ };
260
+ }(), cache = /* @__PURE__ */ new WeakMap(), measureLayout = function(node, relativeTo, callback) {
121
261
  var relativeNode = relativeTo || (node == null ? void 0 : node.parentNode);
122
262
  if (_instanceof(relativeNode, HTMLElement)) {
123
263
  var now = Date.now();
@@ -157,20 +297,32 @@ var cache = /* @__PURE__ */ new WeakMap(), measureLayout = function(node, relati
157
297
  };
158
298
  function useElementLayout(ref, onLayout) {
159
299
  (0, import_constants.useIsomorphicLayoutEffect)(function() {
160
- if (!(!resizeObserver || !onLayout)) {
300
+ if (onLayout) {
161
301
  var node = ref.current;
162
- if (node)
163
- return LayoutHandlers.set(node, onLayout), resizeObserver.observe(node), function() {
164
- resizeObserver == null || resizeObserver.unobserve(node);
165
- };
302
+ node && LayoutHandlers.set(node, onLayout);
166
303
  }
167
304
  }, [
168
305
  ref,
169
306
  onLayout
307
+ ]), (0, import_constants.useIsomorphicLayoutEffect)(function() {
308
+ if (resizeObserver) {
309
+ var node = ref.current;
310
+ if (node && LayoutHandlers.has(node)) {
311
+ var onResize = function() {
312
+ measureElement(node).then(onLayout);
313
+ };
314
+ return resizeListeners.add(onResize), resizeObserver.observe(node), function() {
315
+ resizeListeners.delete(onResize), resizeObserver == null || resizeObserver.unobserve(node);
316
+ };
317
+ }
318
+ }
319
+ }, [
320
+ ref
170
321
  ]);
171
322
  }
172
323
  // Annotate the CommonJS export names for ESM import in node:
173
324
  0 && (module.exports = {
325
+ measureElement,
174
326
  measureLayout,
175
327
  useElementLayout
176
328
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/Users/n8/tamagui/packages/core/src/hooks/useElementLayout.tsx"],
4
- "mappings": "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",
5
- "names": ["LayoutHandlers", "WeakMap", "resizeObserver", "window", "ResizeObserver", "entries", "target", "onLayout", "LayoutHandlers", "get", "measureLayout", "x", "y", "width", "height", "left", "top", "nativeEvent", "layout", "timeStamp", "Date", "now", "cache", "WeakMap", "node", "relativeTo", "callback", "relativeNode", "parentNode", "HTMLElement", "set", "Promise", "all", "getBoundingClientRectAsync", "then", "nodeDim", "relativeNodeDim", "getRelativeDimensions", "a", "b", "element", "resolve", "fallbackToSync", "getBoundingClientRect", "tm", "setTimeout", "observer", "IntersectionObserver", "ob", "clearTimeout", "disconnect", "boundingClientRect", "threshold", "observe", "useElementLayout", "ref", "useIsomorphicLayoutEffect", "current", "unobserve"]
4
+ "mappings": "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",
5
+ "names": ["LayoutHandlers", "WeakMap", "resizeListeners", "Set", "resizeObserver", "window", "ResizeObserver", "entries", "target", "onLayout", "get", "measureElement", "then", "event", "addEventListener", "tm", "clearTimeout", "setTimeout", "forEach", "cb", "Promise", "res", "measureLayout", "x", "y", "width", "height", "left", "top", "nativeEvent", "layout", "timeStamp", "Date", "now", "cache", "node", "relativeTo", "callback", "relativeNode", "parentNode", "HTMLElement", "set", "all", "getBoundingClientRectAsync", "nodeDim", "relativeNodeDim", "getRelativeDimensions", "a", "b", "element", "resolve", "fallbackToSync", "getBoundingClientRect", "observer", "IntersectionObserver", "ob", "disconnect", "boundingClientRect", "threshold", "observe", "useElementLayout", "ref", "useIsomorphicLayoutEffect", "current", "has", "onResize", "add", "delete", "unobserve"]
6
6
  }
@@ -1,24 +1,35 @@
1
1
  import { useIsomorphicLayoutEffect } from "@tamagui/constants";
2
2
  import { getBoundingClientRect } from "../helpers/getBoundingClientRect";
3
- const LayoutHandlers = /* @__PURE__ */ new WeakMap();
3
+ const LayoutHandlers = /* @__PURE__ */ new WeakMap(), resizeListeners = /* @__PURE__ */ new Set();
4
4
  let resizeObserver = null;
5
- typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver((entries) => {
5
+ if (typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver((entries) => {
6
6
  for (const { target } of entries) {
7
7
  const onLayout = LayoutHandlers.get(target);
8
8
  if (typeof onLayout != "function")
9
9
  return;
10
- measureLayout(target, null, (x, y, width, height, left, top) => {
11
- onLayout({
12
- nativeEvent: {
13
- layout: { x, y, width, height, left, top },
14
- target
15
- },
16
- timeStamp: Date.now()
17
- });
10
+ measureElement(target).then((event) => {
11
+ onLayout(event);
18
12
  });
19
13
  }
20
- }));
21
- const cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo, callback) => {
14
+ }), typeof window.addEventListener == "function")) {
15
+ let tm;
16
+ window.addEventListener("resize", () => {
17
+ clearTimeout(tm), tm = setTimeout(() => {
18
+ resizeListeners.forEach((cb) => cb());
19
+ }, 4);
20
+ });
21
+ }
22
+ const measureElement = async (target) => new Promise((res) => {
23
+ measureLayout(target, null, (x, y, width, height, left, top) => {
24
+ res({
25
+ nativeEvent: {
26
+ layout: { x, y, width, height, left, top },
27
+ target
28
+ },
29
+ timeStamp: Date.now()
30
+ });
31
+ });
32
+ }), cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo, callback) => {
22
33
  const relativeNode = relativeTo || node?.parentNode;
23
34
  if (relativeNode instanceof HTMLElement) {
24
35
  const now = Date.now();
@@ -54,16 +65,26 @@ const cache = /* @__PURE__ */ new WeakMap(), measureLayout = (node, relativeTo,
54
65
  });
55
66
  function useElementLayout(ref, onLayout) {
56
67
  useIsomorphicLayoutEffect(() => {
57
- if (!resizeObserver || !onLayout)
68
+ if (!onLayout)
58
69
  return;
59
70
  const node = ref.current;
60
- if (node)
61
- return LayoutHandlers.set(node, onLayout), resizeObserver.observe(node), () => {
62
- resizeObserver?.unobserve(node);
63
- };
64
- }, [ref, onLayout]);
71
+ node && LayoutHandlers.set(node, onLayout);
72
+ }, [ref, onLayout]), useIsomorphicLayoutEffect(() => {
73
+ if (!resizeObserver)
74
+ return;
75
+ const node = ref.current;
76
+ if (!node || !LayoutHandlers.has(node))
77
+ return;
78
+ const onResize = () => {
79
+ measureElement(node).then(onLayout);
80
+ };
81
+ return resizeListeners.add(onResize), resizeObserver.observe(node), () => {
82
+ resizeListeners.delete(onResize), resizeObserver?.unobserve(node);
83
+ };
84
+ }, [ref]);
65
85
  }
66
86
  export {
87
+ measureElement,
67
88
  measureLayout,
68
89
  useElementLayout
69
90
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useElementLayout.tsx"],
4
- "mappings": "AAAA,SAAS,iCAAiC;AAE1C,SAAS,6BAA6B;AAEtC,MAAM,iBAAiB,oBAAI,QAA2B;AAoBtD,IAAI,iBAAwC;AAExC,OAAO,SAAW,OAAe,oBAAoB,WACvD,iBAAiB,IAAI,eAAe,CAAC,YAAY;AAC/C,aAAW,EAAE,OAAO,KAAK,SAAS;AAChC,UAAM,WAAW,eAAe,IAAI,MAAM;AAC1C,QAAI,OAAO,YAAa;AAAY;AACpC,kBAAc,QAAuB,MAAM,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,QAAQ;AAC7E,eAAS;AAAA,QACP,aAAa;AAAA,UACX,QAAQ,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAAA,UACzC;AAAA,QACF;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF,CAAC;AAGH,MAAM,QAAQ,oBAAI,QAAQ,GAEb,gBAAgB,CAC3B,MACA,YACA,aAQG;AACH,QAAM,eAAe,cAAc,MAAM;AACzC,MAAI,wBAAwB,aAAa;AACvC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,IAAI,MAAM,GAAG,GACnB,QAAQ,IAAI;AAAA,MACV,2BAA2B,IAAI;AAAA,MAC/B,2BAA2B,YAAY;AAAA,IACzC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,eAAe,MAAM;AACtC,UAAI,mBAAmB,WAAW,MAAM,IAAI,IAAI,MAAM,KAAK;AACzD,cAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI,IAAI;AAAA,UACzC;AAAA,UACA;AAAA,QACF;AACA,iBAAS,GAAG,GAAG,OAAO,QAAQ,MAAM,GAAG;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF,GAEM,wBAAwB,CAAC,GAAoB,MAAuB;AACxE,QAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,IAAI,GAC/B,IAAI,OAAO,EAAE,MACb,IAAI,MAAM,EAAE;AAClB,SAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAC1C,GAEM,6BAA6B,CACjC,YAEO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAS,iBAAiB;AACxB,YAAQ,sBAAsB,OAAO,CAAC;AAAA,EACxC;AACA,QAAM,KAAK,WAAW,gBAAgB,EAAE;AAWxC,EAViB,IAAI;AAAA,IACnB,CAAC,SAAS,OAAO;AACf,mBAAa,EAAE,GACf,GAAG,WAAW,GACd,QAAQ,QAAQ,CAAC,GAAG,kBAAkB;AAAA,IACxC;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EACF,EACS,QAAQ,OAAO;AAC1B,CAAC;AAGI,SAAS,iBACd,KACA,UACA;AACA,4BAA0B,MAAM;AAC9B,QAAI,CAAC,kBAAkB,CAAC;AAAU;AAClC,UAAM,OAAO,IAAI;AACjB,QAAK;AACL,4BAAe,IAAI,MAAM,QAAQ,GACjC,eAAe,QAAQ,IAAI,GACpB,MAAM;AACX,wBAAgB,UAAU,IAAI;AAAA,MAChC;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,CAAC;AACpB;",
4
+ "mappings": "AAAA,SAAS,iCAAiC;AAE1C,SAAS,6BAA6B;AAEtC,MAAM,iBAAiB,oBAAI,QAA2B,GAChD,kBAAkB,oBAAI,IAAc;AAmB1C,IAAI,iBAAwC;AAE5C,IAAI,OAAO,SAAW,OAAe,oBAAoB,WAEvD,iBAAiB,IAAI,eAAe,CAAC,YAAY;AAC/C,aAAW,EAAE,OAAO,KAAK,SAAS;AAChC,UAAM,WAAW,eAAe,IAAI,MAAM;AAC1C,QAAI,OAAO,YAAa;AAAY;AACpC,mBAAe,MAAqB,EAAE,KAAK,CAAC,UAAU;AACpD,eAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AACF,CAAC,GAGG,OAAO,OAAO,oBAAqB,aAAY;AACjD,MAAI;AACJ,SAAO,iBAAiB,UAAU,MAAM;AACtC,iBAAa,EAAE,GACf,KAAK,WAAW,MAAM;AACpB,sBAAgB,QAAQ,CAAC,OAAO,GAAG,CAAC;AAAA,IACtC,GAAG,CAAC;AAAA,EACN,CAAC;AACH;AAGK,MAAM,iBAAiB,OAAO,WAC5B,IAAI,QAAQ,CAAC,QAAQ;AAC1B,gBAAc,QAAQ,MAAM,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,QAAQ;AAC9D,QAAI;AAAA,MACF,aAAa;AAAA,QACX,QAAQ,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,EACH,CAAC;AACH,CAAC,GAGG,QAAQ,oBAAI,QAAQ,GAEb,gBAAgB,CAC3B,MACA,YACA,aAQG;AACH,QAAM,eAAe,cAAc,MAAM;AACzC,MAAI,wBAAwB,aAAa;AACvC,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,IAAI,MAAM,GAAG,GACnB,QAAQ,IAAI;AAAA,MACV,2BAA2B,IAAI;AAAA,MAC/B,2BAA2B,YAAY;AAAA,IACzC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,eAAe,MAAM;AACtC,UAAI,mBAAmB,WAAW,MAAM,IAAI,IAAI,MAAM,KAAK;AACzD,cAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI,IAAI;AAAA,UACzC;AAAA,UACA;AAAA,QACF;AACA,iBAAS,GAAG,GAAG,OAAO,QAAQ,MAAM,GAAG;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF,GAEM,wBAAwB,CAAC,GAAoB,MAAuB;AACxE,QAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,IAAI,GAC/B,IAAI,OAAO,EAAE,MACb,IAAI,MAAM,EAAE;AAClB,SAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAC1C,GAEM,6BAA6B,CACjC,YAEO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAS,iBAAiB;AACxB,YAAQ,sBAAsB,OAAO,CAAC;AAAA,EACxC;AACA,QAAM,KAAK,WAAW,gBAAgB,EAAE;AAWxC,EAViB,IAAI;AAAA,IACnB,CAAC,SAAS,OAAO;AACf,mBAAa,EAAE,GACf,GAAG,WAAW,GACd,QAAQ,QAAQ,CAAC,GAAG,kBAAkB;AAAA,IACxC;AAAA,IACA;AAAA,MACE,WAAW;AAAA,IACb;AAAA,EACF,EACS,QAAQ,OAAO;AAC1B,CAAC;AAGI,SAAS,iBACd,KACA,UACA;AAEA,4BAA0B,MAAM;AAC9B,QAAI,CAAC;AAAU;AACf,UAAM,OAAO,IAAI;AACjB,IAAK,QACL,eAAe,IAAI,MAAM,QAAQ;AAAA,EACnC,GAAG,CAAC,KAAK,QAAQ,CAAC,GAElB,0BAA0B,MAAM;AAC9B,QAAI,CAAC;AAAgB;AACrB,UAAM,OAAO,IAAI;AAEjB,QADI,CAAC,QACD,CAAC,eAAe,IAAI,IAAI;AAAG;AAC/B,UAAM,WAAW,MAAM;AACrB,qBAAe,IAAmB,EAAE,KAAK,QAAQ;AAAA,IACnD;AACA,2BAAgB,IAAI,QAAQ,GAC5B,eAAe,QAAQ,IAAI,GACpB,MAAM;AACX,sBAAgB,OAAO,QAAQ,GAC/B,gBAAgB,UAAU,IAAI;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AACV;",
5
5
  "names": []
6
6
  }
@@ -1,15 +1,29 @@
1
1
  import { useIsomorphicLayoutEffect } from "@tamagui/constants";
2
2
  import { getBoundingClientRect } from "../helpers/getBoundingClientRect.mjs";
3
- const LayoutHandlers = /* @__PURE__ */new WeakMap();
3
+ const LayoutHandlers = /* @__PURE__ */new WeakMap(),
4
+ resizeListeners = /* @__PURE__ */new Set();
4
5
  let resizeObserver = null;
5
- typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver(entries => {
6
+ if (typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new ResizeObserver(entries => {
6
7
  for (const {
7
8
  target
8
9
  } of entries) {
9
10
  const onLayout = LayoutHandlers.get(target);
10
11
  if (typeof onLayout != "function") return;
12
+ measureElement(target).then(event => {
13
+ onLayout(event);
14
+ });
15
+ }
16
+ }), typeof window.addEventListener == "function")) {
17
+ let tm;
18
+ window.addEventListener("resize", () => {
19
+ clearTimeout(tm), tm = setTimeout(() => {
20
+ resizeListeners.forEach(cb => cb());
21
+ }, 4);
22
+ });
23
+ }
24
+ const measureElement = async target => new Promise(res => {
11
25
  measureLayout(target, null, (x, y, width, height, left, top) => {
12
- onLayout({
26
+ res({
13
27
  nativeEvent: {
14
28
  layout: {
15
29
  x,
@@ -24,9 +38,8 @@ typeof window < "u" && "ResizeObserver" in window && (resizeObserver = new Resiz
24
38
  timeStamp: Date.now()
25
39
  });
26
40
  });
27
- }
28
- }));
29
- const cache = /* @__PURE__ */new WeakMap(),
41
+ }),
42
+ cache = /* @__PURE__ */new WeakMap(),
30
43
  measureLayout = (node, relativeTo, callback) => {
31
44
  const relativeNode = relativeTo || node?.parentNode;
32
45
  if (relativeNode instanceof HTMLElement) {
@@ -77,11 +90,19 @@ const cache = /* @__PURE__ */new WeakMap(),
77
90
  });
78
91
  function useElementLayout(ref, onLayout) {
79
92
  useIsomorphicLayoutEffect(() => {
80
- if (!resizeObserver || !onLayout) return;
93
+ if (!onLayout) return;
94
+ const node = ref.current;
95
+ node && LayoutHandlers.set(node, onLayout);
96
+ }, [ref, onLayout]), useIsomorphicLayoutEffect(() => {
97
+ if (!resizeObserver) return;
81
98
  const node = ref.current;
82
- if (node) return LayoutHandlers.set(node, onLayout), resizeObserver.observe(node), () => {
83
- resizeObserver?.unobserve(node);
99
+ if (!node || !LayoutHandlers.has(node)) return;
100
+ const onResize = () => {
101
+ measureElement(node).then(onLayout);
102
+ };
103
+ return resizeListeners.add(onResize), resizeObserver.observe(node), () => {
104
+ resizeListeners.delete(onResize), resizeObserver?.unobserve(node);
84
105
  };
85
- }, [ref, onLayout]);
106
+ }, [ref]);
86
107
  }
87
- export { measureLayout, useElementLayout };
108
+ export { measureElement, measureLayout, useElementLayout };