@tamagui/use-element-layout 2.7.7 → 3.0.0-beta.643.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,392 +1,378 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useIsomorphicLayoutEffect } from "@tamagui/constants";
3
3
  import { createContext, useContext, useId } from "react";
4
+
4
5
  function _instanceof(left, right) {
5
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);else return left instanceof right;
6
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) return !!right[Symbol.hasInstance](left);
7
+ else return left instanceof right;
6
8
  }
7
- var LayoutHandlers = /* @__PURE__ */new WeakMap();
8
- var LayoutDisableKey = /* @__PURE__ */new WeakMap();
9
- var Nodes = /* @__PURE__ */new Set();
10
- var usePretransformDimensions = function () {
11
- return globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
9
+ var LayoutHandlers = /* @__PURE__ */ new WeakMap();
10
+ var LayoutDisableKey = /* @__PURE__ */ new WeakMap();
11
+ var Nodes = /* @__PURE__ */ new Set();
12
+ var usePretransformDimensions = function() {
13
+ return globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
12
14
  };
13
15
  var _debugLayout;
14
16
  function isDebugLayout() {
15
- if (_debugLayout === void 0) _debugLayout = typeof window !== "undefined" && new URLSearchParams(window.location.search).has("__tamaDebugLayout");
16
- return _debugLayout;
17
+ if (_debugLayout === void 0) _debugLayout = typeof window !== "undefined" && new URLSearchParams(window.location.search).has("__tamaDebugLayout");
18
+ return _debugLayout;
17
19
  }
18
20
  var DisableLayoutContextValues = {};
19
- var DisableLayoutContextKey = /* @__PURE__ */createContext("");
21
+ var DisableLayoutContextKey = /* @__PURE__ */ createContext("");
20
22
  var ENABLE = false;
21
- var LayoutMeasurementController = function (param) {
22
- var {
23
- disable,
24
- children
25
- } = param;
26
- var id = useId();
27
- useIsomorphicLayoutEffect(function () {
28
- var wasDisabled = DisableLayoutContextValues[id] === true;
29
- DisableLayoutContextValues[id] = disable;
30
- if (wasDisabled && !disable) measureOnNextFrame === null || measureOnNextFrame === void 0 || measureOnNextFrame();
31
- }, [disable, id]);
32
- return /* @__PURE__ */jsx(DisableLayoutContextKey.Provider, {
33
- value: id,
34
- children
35
- });
23
+ var LayoutMeasurementController = function(param) {
24
+ var { disable, children } = param;
25
+ var id = useId();
26
+ useIsomorphicLayoutEffect(function() {
27
+ var wasDisabled = DisableLayoutContextValues[id] === true;
28
+ DisableLayoutContextValues[id] = disable;
29
+ if (wasDisabled && !disable) measureOnNextFrame === null || measureOnNextFrame === void 0 || measureOnNextFrame();
30
+ }, [disable, id]);
31
+ return /* @__PURE__ */ jsx(DisableLayoutContextKey.Provider, {
32
+ value: id,
33
+ children
34
+ });
36
35
  };
37
36
  var strategy = "async";
38
37
  var resumeLayoutLoop;
39
38
  var measureOnNextFrame;
40
39
  function setOnLayoutStrategy(state) {
41
- strategy = state;
42
- resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
40
+ strategy = state;
41
+ resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
43
42
  }
44
- var NodeRectCache = /* @__PURE__ */new WeakMap();
43
+ var NodeRectCache = /* @__PURE__ */ new WeakMap();
45
44
  var avoidUpdates = true;
46
- var queuedUpdates = /* @__PURE__ */new Map();
45
+ var queuedUpdates = /* @__PURE__ */ new Map();
47
46
  function enable() {
48
- if (avoidUpdates) {
49
- avoidUpdates = false;
50
- if (queuedUpdates) {
51
- queuedUpdates.forEach(function (cb) {
52
- return cb();
53
- });
54
- queuedUpdates.clear();
55
- }
56
- }
47
+ if (avoidUpdates) {
48
+ avoidUpdates = false;
49
+ if (queuedUpdates) {
50
+ queuedUpdates.forEach(function(cb) {
51
+ return cb();
52
+ });
53
+ queuedUpdates.clear();
54
+ }
55
+ }
57
56
  }
58
57
  function rectsEqual(a, b) {
59
- return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
58
+ return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
60
59
  }
61
60
  if (ENABLE) {
62
- let ensureRectFetchObserver2 = function () {
63
- if (rectFetchObserver) return rectFetchObserver;
64
- rectFetchObserver = new IntersectionObserver(function (entries) {
65
- lastCallbackDelay = Math.round(performance.now() - rectFetchStartTime);
66
- for (var i = 0; i < entries.length; i++) BoundingRects.set(entries[i].target, entries[i].boundingClientRect);
67
- if (process.env.NODE_ENV === "development" && isDebugLayout() && lastCallbackDelay > 50) console.warn("[onLayout-io-delay]", lastCallbackDelay + "ms", entries.length, "entries");
68
- if (rectFetchResolve) {
69
- rectFetchResolve(true);
70
- rectFetchResolve = null;
71
- }
72
- }, {
73
- threshold: 0
74
- });
75
- return rectFetchObserver;
76
- },
77
- scheduleLayoutFrame2 = function () {
78
- if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
79
- frameScheduled = true;
80
- rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
81
- };
82
- var BoundingRects = /* @__PURE__ */new WeakMap();
83
- var rectFetchObserver = null;
84
- var rectFetchResolve = null;
85
- var rectFetchStartTime = 0;
86
- var lastCallbackDelay = 0;
87
- async function updateLayoutIfChanged(node) {
88
- if (typeof LayoutHandlers.get(node) !== "function") return;
89
- var parentNode = node.parentElement;
90
- if (!parentNode) return;
91
- var nodeRect;
92
- var parentRect;
93
- if (strategy === "async") {
94
- nodeRect = BoundingRects.get(node);
95
- parentRect = BoundingRects.get(parentNode);
96
- if (!nodeRect || !parentRect) return;
97
- } else {
98
- nodeRect = node.getBoundingClientRect();
99
- parentRect = parentNode.getBoundingClientRect();
100
- }
101
- emitLayoutIfChanged(node, parentNode, nodeRect, parentRect);
102
- }
103
- var rAF = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : void 0;
104
- var userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP;
105
- var BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10;
106
- var MAX_SKIP_FRAMES = 20;
107
- var skipFrames = BASE_SKIP_FRAMES;
108
- var frameCount = 0;
109
- var frameScheduled = false;
110
- async function layoutOnAnimationFrame() {
111
- if (frameCount++ % skipFrames !== 0) {
112
- frameScheduled = false;
113
- scheduleLayoutFrame2();
114
- return;
115
- }
116
- if (frameCount >= Number.MAX_SAFE_INTEGER) frameCount = 0;
117
- if (strategy !== "off") {
118
- var activeNodes = [];
119
- var parentsToObserve = /* @__PURE__ */new Set();
120
- var _iteratorNormalCompletion = true,
121
- _didIteratorError = false,
122
- _iteratorError = void 0;
123
- try {
124
- for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
125
- var node = _step.value;
126
- var parentElement = node.parentElement;
127
- if (!_instanceof(parentElement, HTMLElement)) {
128
- cleanupNode(node);
129
- continue;
130
- }
131
- var disableKey = LayoutDisableKey.get(node);
132
- if (disableKey && DisableLayoutContextValues[disableKey] === true) continue;
133
- activeNodes.push(node);
134
- parentsToObserve.add(parentElement);
135
- }
136
- } catch (err) {
137
- _didIteratorError = true;
138
- _iteratorError = err;
139
- } finally {
140
- try {
141
- if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
142
- } finally {
143
- if (_didIteratorError) throw _iteratorError;
144
- }
145
- }
146
- if (activeNodes.length > 0) {
147
- var io = ensureRectFetchObserver2();
148
- rectFetchStartTime = performance.now();
149
- for (var i = 0; i < activeNodes.length; i++) io.observe(activeNodes[i]);
150
- var _iteratorNormalCompletion1 = true,
151
- _didIteratorError1 = false,
152
- _iteratorError1 = void 0;
153
- try {
154
- for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
155
- var parent = _step1.value;
156
- io.observe(parent);
157
- }
158
- } catch (err) {
159
- _didIteratorError1 = true;
160
- _iteratorError1 = err;
161
- } finally {
162
- try {
163
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) _iterator1.return();
164
- } finally {
165
- if (_didIteratorError1) throw _iteratorError1;
166
- }
167
- }
168
- await new Promise(function (res) {
169
- rectFetchResolve = res;
170
- });
171
- for (var i1 = 0; i1 < activeNodes.length; i1++) io.unobserve(activeNodes[i1]);
172
- var _iteratorNormalCompletion2 = true,
173
- _didIteratorError2 = false,
174
- _iteratorError2 = void 0;
175
- try {
176
- for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
177
- var parent1 = _step2.value;
178
- io.unobserve(parent1);
179
- }
180
- } catch (err) {
181
- _didIteratorError2 = true;
182
- _iteratorError2 = err;
183
- } finally {
184
- try {
185
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) _iterator2.return();
186
- } finally {
187
- if (_didIteratorError2) throw _iteratorError2;
188
- }
189
- }
190
- if (lastCallbackDelay > 50) skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);else if (lastCallbackDelay < 20) skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
191
- for (var i2 = 0; i2 < activeNodes.length; i2++) updateLayoutIfChanged(activeNodes[i2]);
192
- }
193
- }
194
- frameScheduled = false;
195
- scheduleLayoutFrame2();
196
- }
197
- resumeLayoutLoop = scheduleLayoutFrame2;
198
- measureOnNextFrame = function () {
199
- frameCount = 0;
200
- scheduleLayoutFrame2();
201
- };
202
- document.addEventListener("visibilitychange", scheduleLayoutFrame2);
203
- scheduleLayoutFrame2();
61
+ let ensureRectFetchObserver2 = function() {
62
+ if (rectFetchObserver) return rectFetchObserver;
63
+ rectFetchObserver = new IntersectionObserver(function(entries) {
64
+ lastCallbackDelay = Math.round(performance.now() - rectFetchStartTime);
65
+ for (var i = 0; i < entries.length; i++) BoundingRects.set(entries[i].target, entries[i].boundingClientRect);
66
+ if (process.env.NODE_ENV === "development" && isDebugLayout() && lastCallbackDelay > 50) console.warn("[onLayout-io-delay]", lastCallbackDelay + "ms", entries.length, "entries");
67
+ if (rectFetchResolve) {
68
+ rectFetchResolve(true);
69
+ rectFetchResolve = null;
70
+ }
71
+ }, { threshold: 0 });
72
+ return rectFetchObserver;
73
+ }, scheduleLayoutFrame2 = function() {
74
+ if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
75
+ frameScheduled = true;
76
+ rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
77
+ };
78
+ var BoundingRects = /* @__PURE__ */ new WeakMap();
79
+ var rectFetchObserver = null;
80
+ var rectFetchResolve = null;
81
+ var rectFetchStartTime = 0;
82
+ var lastCallbackDelay = 0;
83
+ async function updateLayoutIfChanged(node) {
84
+ if (typeof LayoutHandlers.get(node) !== "function") return;
85
+ var parentNode = node.parentElement;
86
+ if (!parentNode) return;
87
+ var nodeRect;
88
+ var parentRect;
89
+ if (strategy === "async") {
90
+ nodeRect = BoundingRects.get(node);
91
+ parentRect = BoundingRects.get(parentNode);
92
+ if (!nodeRect || !parentRect) return;
93
+ } else {
94
+ nodeRect = node.getBoundingClientRect();
95
+ parentRect = parentNode.getBoundingClientRect();
96
+ }
97
+ emitLayoutIfChanged(node, parentNode, nodeRect, parentRect);
98
+ }
99
+ var rAF = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : void 0;
100
+ var userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP;
101
+ var BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10;
102
+ var MAX_SKIP_FRAMES = 20;
103
+ var skipFrames = BASE_SKIP_FRAMES;
104
+ var frameCount = 0;
105
+ var frameScheduled = false;
106
+ async function layoutOnAnimationFrame() {
107
+ if (frameCount++ % skipFrames !== 0) {
108
+ frameScheduled = false;
109
+ scheduleLayoutFrame2();
110
+ return;
111
+ }
112
+ if (frameCount >= Number.MAX_SAFE_INTEGER) frameCount = 0;
113
+ if (strategy !== "off") {
114
+ var activeNodes = [];
115
+ var parentsToObserve = /* @__PURE__ */ new Set();
116
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
117
+ try {
118
+ for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
119
+ var node = _step.value;
120
+ var parentElement = node.parentElement;
121
+ if (!_instanceof(parentElement, HTMLElement)) {
122
+ cleanupNode(node);
123
+ continue;
124
+ }
125
+ var disableKey = LayoutDisableKey.get(node);
126
+ if (disableKey && DisableLayoutContextValues[disableKey] === true) continue;
127
+ activeNodes.push(node);
128
+ parentsToObserve.add(parentElement);
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
+ if (activeNodes.length > 0) {
141
+ var io = ensureRectFetchObserver2();
142
+ rectFetchStartTime = performance.now();
143
+ for (var i = 0; i < activeNodes.length; i++) io.observe(activeNodes[i]);
144
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
145
+ try {
146
+ for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
147
+ var parent = _step1.value;
148
+ io.observe(parent);
149
+ }
150
+ } catch (err) {
151
+ _didIteratorError1 = true;
152
+ _iteratorError1 = err;
153
+ } finally {
154
+ try {
155
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) _iterator1.return();
156
+ } finally {
157
+ if (_didIteratorError1) throw _iteratorError1;
158
+ }
159
+ }
160
+ await new Promise(function(res) {
161
+ rectFetchResolve = res;
162
+ });
163
+ for (var i1 = 0; i1 < activeNodes.length; i1++) io.unobserve(activeNodes[i1]);
164
+ var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
165
+ try {
166
+ for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
167
+ var parent1 = _step2.value;
168
+ io.unobserve(parent1);
169
+ }
170
+ } catch (err) {
171
+ _didIteratorError2 = true;
172
+ _iteratorError2 = err;
173
+ } finally {
174
+ try {
175
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) _iterator2.return();
176
+ } finally {
177
+ if (_didIteratorError2) throw _iteratorError2;
178
+ }
179
+ }
180
+ if (lastCallbackDelay > 50) skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);
181
+ else if (lastCallbackDelay < 20) skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
182
+ for (var i2 = 0; i2 < activeNodes.length; i2++) updateLayoutIfChanged(activeNodes[i2]);
183
+ }
184
+ }
185
+ frameScheduled = false;
186
+ scheduleLayoutFrame2();
187
+ }
188
+ resumeLayoutLoop = scheduleLayoutFrame2;
189
+ measureOnNextFrame = function() {
190
+ frameCount = 0;
191
+ scheduleLayoutFrame2();
192
+ };
193
+ document.addEventListener("visibilitychange", scheduleLayoutFrame2);
194
+ scheduleLayoutFrame2();
204
195
  }
205
- var getElementLayoutEvent = function (nodeRect, parentRect, node) {
206
- return {
207
- nativeEvent: {
208
- layout: getRelativeDimensions(nodeRect, parentRect, node),
209
- target: nodeRect
210
- },
211
- timeStamp: Date.now()
212
- };
196
+ var getElementLayoutEvent = function(nodeRect, parentRect, node) {
197
+ return {
198
+ nativeEvent: {
199
+ layout: getRelativeDimensions(nodeRect, parentRect, node),
200
+ target: nodeRect
201
+ },
202
+ timeStamp: Date.now()
203
+ };
213
204
  };
214
- var getPreTransformDimensions = function (node) {
215
- return {
216
- width: node.offsetWidth,
217
- height: node.offsetHeight
218
- };
205
+ var getPreTransformDimensions = function(node) {
206
+ return {
207
+ width: node.offsetWidth,
208
+ height: node.offsetHeight
209
+ };
219
210
  };
220
- var getRelativeDimensions = function (a, b, aNode) {
221
- var {
222
- left,
223
- top
224
- } = a;
225
- var x = left - b.left;
226
- var y = top - b.top;
227
- var {
228
- width,
229
- height
230
- } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
231
- width: a.width,
232
- height: a.height
233
- };
234
- return {
235
- x,
236
- y,
237
- width,
238
- height,
239
- pageX: a.left,
240
- pageY: a.top
241
- };
211
+ var getRelativeDimensions = function(a, b, aNode) {
212
+ var { left, top } = a;
213
+ var x = left - b.left;
214
+ var y = top - b.top;
215
+ var { width, height } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
216
+ width: a.width,
217
+ height: a.height
218
+ };
219
+ return {
220
+ x,
221
+ y,
222
+ width,
223
+ height,
224
+ pageX: a.left,
225
+ pageY: a.top
226
+ };
242
227
  };
243
228
  function emitLayoutIfChanged(node, parentNode, nodeRect, parentRect) {
244
- var onLayout = LayoutHandlers.get(node);
245
- if (typeof onLayout !== "function") return;
246
- var cachedRect = NodeRectCache.get(node);
247
- var cachedParentRect = NodeRectCache.get(parentNode);
248
- var nodeChanged = !cachedRect || !rectsEqual(cachedRect, nodeRect);
249
- var parentChanged = !cachedParentRect || !rectsEqual(cachedParentRect, parentRect);
250
- if (!nodeChanged && !parentChanged) return;
251
- NodeRectCache.set(node, nodeRect);
252
- NodeRectCache.set(parentNode, parentRect);
253
- var event = getElementLayoutEvent(nodeRect, parentRect, node);
254
- if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] change", {
255
- tag: node.tagName,
256
- id: node.id || void 0,
257
- className: (node.className || "").slice(0, 60) || void 0,
258
- layout: event.nativeEvent.layout,
259
- first: !cachedRect
260
- });
261
- if (avoidUpdates) queuedUpdates.set(node, function () {
262
- return onLayout(event);
263
- });else onLayout(event);
229
+ var onLayout = LayoutHandlers.get(node);
230
+ if (typeof onLayout !== "function") return;
231
+ var cachedRect = NodeRectCache.get(node);
232
+ var cachedParentRect = NodeRectCache.get(parentNode);
233
+ var nodeChanged = !cachedRect || !rectsEqual(cachedRect, nodeRect);
234
+ var parentChanged = !cachedParentRect || !rectsEqual(cachedParentRect, parentRect);
235
+ if (!nodeChanged && !parentChanged) return;
236
+ NodeRectCache.set(node, nodeRect);
237
+ NodeRectCache.set(parentNode, parentRect);
238
+ var event = getElementLayoutEvent(nodeRect, parentRect, node);
239
+ if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] change", {
240
+ tag: node.tagName,
241
+ id: node.id || void 0,
242
+ className: (node.className || "").slice(0, 60) || void 0,
243
+ layout: event.nativeEvent.layout,
244
+ first: !cachedRect
245
+ });
246
+ if (avoidUpdates) queuedUpdates.set(node, function() {
247
+ return onLayout(event);
248
+ });
249
+ else onLayout(event);
264
250
  }
265
251
  function observeLayoutNode(node, disableKey) {
266
- Nodes.add(node);
267
- if (disableKey) LayoutDisableKey.set(node, disableKey);else LayoutDisableKey.delete(node);
268
- resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
252
+ Nodes.add(node);
253
+ if (disableKey) LayoutDisableKey.set(node, disableKey);
254
+ else LayoutDisableKey.delete(node);
255
+ resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
269
256
  }
270
257
  function registerLayoutNode(node, onChange, disableKey) {
271
- LayoutHandlers.set(node, onChange);
272
- observeLayoutNode(node, disableKey);
273
- return function () {
274
- return cleanupNode(node);
275
- };
258
+ LayoutHandlers.set(node, onChange);
259
+ observeLayoutNode(node, disableKey);
260
+ return function() {
261
+ return cleanupNode(node);
262
+ };
276
263
  }
277
264
  function cleanupNode(node) {
278
- Nodes.delete(node);
279
- LayoutHandlers.delete(node);
280
- LayoutDisableKey.delete(node);
281
- NodeRectCache.delete(node);
265
+ Nodes.delete(node);
266
+ LayoutHandlers.delete(node);
267
+ LayoutDisableKey.delete(node);
268
+ NodeRectCache.delete(node);
282
269
  }
283
- var PrevHostNode = /* @__PURE__ */new WeakMap();
270
+ var PrevHostNode = /* @__PURE__ */ new WeakMap();
284
271
  function emitLayoutSync(node) {
285
- var onLayout = LayoutHandlers.get(node);
286
- if (typeof onLayout !== "function") return;
287
- var parentNode = node.parentElement;
288
- if (!parentNode) return;
289
- var nodeRect = node.getBoundingClientRect();
290
- var parentRect = parentNode.getBoundingClientRect();
291
- NodeRectCache.set(node, nodeRect);
292
- NodeRectCache.set(parentNode, parentRect);
293
- onLayout(getElementLayoutEvent(nodeRect, parentRect, node));
272
+ var onLayout = LayoutHandlers.get(node);
273
+ if (typeof onLayout !== "function") return;
274
+ var parentNode = node.parentElement;
275
+ if (!parentNode) return;
276
+ var nodeRect = node.getBoundingClientRect();
277
+ var parentRect = parentNode.getBoundingClientRect();
278
+ NodeRectCache.set(node, nodeRect);
279
+ NodeRectCache.set(parentNode, parentRect);
280
+ onLayout(getElementLayoutEvent(nodeRect, parentRect, node));
294
281
  }
295
282
  function useElementLayout(ref, onLayout) {
296
- var _ref_current;
297
- var disableKey = useContext(DisableLayoutContextKey);
298
- var node = ensureWebElement((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host);
299
- if (node && onLayout) {
300
- LayoutHandlers.set(node, onLayout);
301
- LayoutDisableKey.set(node, disableKey);
302
- }
303
- useIsomorphicLayoutEffect(function () {
304
- var _ref_current2;
305
- if (!onLayout) return;
306
- var nextNode = ensureWebElement((_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host);
307
- var prevNode = PrevHostNode.get(ref);
308
- if (nextNode === prevNode) return;
309
- if (prevNode) cleanupNode(prevNode);
310
- PrevHostNode.set(ref, nextNode);
311
- if (!nextNode) return;
312
- LayoutHandlers.set(nextNode, onLayout);
313
- observeLayoutNode(nextNode, disableKey);
314
- emitLayoutSync(nextNode);
315
- });
316
- useIsomorphicLayoutEffect(function () {
317
- var _ref_current2;
318
- if (!onLayout) return;
319
- var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
320
- if (!node2) return;
321
- LayoutHandlers.set(node2, onLayout);
322
- observeLayoutNode(node2, disableKey);
323
- if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] register", {
324
- tag: node2.tagName,
325
- id: node2.id || void 0,
326
- className: (node2.className || "").slice(0, 60) || void 0,
327
- totalNodes: Nodes.size
328
- });
329
- return function () {
330
- cleanupNode(node2);
331
- var swappedNode = PrevHostNode.get(ref);
332
- if (swappedNode && swappedNode !== node2) cleanupNode(swappedNode);
333
- PrevHostNode.delete(ref);
334
- };
335
- }, [ref, !!onLayout]);
283
+ var _ref_current;
284
+ var disableKey = useContext(DisableLayoutContextKey);
285
+ var node = ensureWebElement((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host);
286
+ if (node && onLayout) {
287
+ LayoutHandlers.set(node, onLayout);
288
+ LayoutDisableKey.set(node, disableKey);
289
+ }
290
+ useIsomorphicLayoutEffect(function() {
291
+ var _ref_current2;
292
+ if (!onLayout) return;
293
+ var nextNode = ensureWebElement((_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host);
294
+ var prevNode = PrevHostNode.get(ref);
295
+ if (nextNode === prevNode) return;
296
+ if (prevNode) cleanupNode(prevNode);
297
+ PrevHostNode.set(ref, nextNode);
298
+ if (!nextNode) return;
299
+ LayoutHandlers.set(nextNode, onLayout);
300
+ observeLayoutNode(nextNode, disableKey);
301
+ emitLayoutSync(nextNode);
302
+ });
303
+ useIsomorphicLayoutEffect(function() {
304
+ var _ref_current2;
305
+ if (!onLayout) return;
306
+ var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
307
+ if (!node2) return;
308
+ LayoutHandlers.set(node2, onLayout);
309
+ observeLayoutNode(node2, disableKey);
310
+ if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] register", {
311
+ tag: node2.tagName,
312
+ id: node2.id || void 0,
313
+ className: (node2.className || "").slice(0, 60) || void 0,
314
+ totalNodes: Nodes.size
315
+ });
316
+ return function() {
317
+ cleanupNode(node2);
318
+ var swappedNode = PrevHostNode.get(ref);
319
+ if (swappedNode && swappedNode !== node2) cleanupNode(swappedNode);
320
+ PrevHostNode.delete(ref);
321
+ };
322
+ }, [ref, !!onLayout]);
336
323
  }
337
324
  function ensureWebElement(x) {
338
- if (typeof HTMLElement === "undefined") return;
339
- return _instanceof(x, HTMLElement) ? x : void 0;
325
+ if (typeof HTMLElement === "undefined") return;
326
+ return _instanceof(x, HTMLElement) ? x : void 0;
340
327
  }
341
- var getBoundingClientRectAsync = function (node) {
342
- return new Promise(function (res) {
343
- if (!node || node.nodeType !== 1) return res(false);
344
- var io = new IntersectionObserver(function (entries) {
345
- io.disconnect();
346
- return res(entries[0].boundingClientRect);
347
- }, {
348
- threshold: 0
349
- });
350
- io.observe(node);
351
- });
328
+ var getBoundingClientRectAsync = function(node) {
329
+ return new Promise(function(res) {
330
+ if (!node || node.nodeType !== 1) return res(false);
331
+ var io = new IntersectionObserver(function(entries) {
332
+ io.disconnect();
333
+ return res(entries[0].boundingClientRect);
334
+ }, { threshold: 0 });
335
+ io.observe(node);
336
+ });
352
337
  };
353
- var measureNode = async function (node, relativeTo) {
354
- var relativeNode = relativeTo || (node === null || node === void 0 ? void 0 : node.parentElement);
355
- if (_instanceof(relativeNode, HTMLElement)) {
356
- var [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
357
- if (relativeNodeDim && nodeDim) return getRelativeDimensions(nodeDim, relativeNodeDim, node);
358
- }
359
- return null;
338
+ var measureNode = async function(node, relativeTo) {
339
+ var relativeNode = relativeTo || (node === null || node === void 0 ? void 0 : node.parentElement);
340
+ if (_instanceof(relativeNode, HTMLElement)) {
341
+ var [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
342
+ if (relativeNodeDim && nodeDim) return getRelativeDimensions(nodeDim, relativeNodeDim, node);
343
+ }
344
+ return null;
360
345
  };
361
- var measure = async function (node, callback) {
362
- var out = await measureNode(node, _instanceof(node.parentNode, HTMLElement) ? node.parentNode : null);
363
- if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
364
- return out;
346
+ var measure = async function(node, callback) {
347
+ var out = await measureNode(node, _instanceof(node.parentNode, HTMLElement) ? node.parentNode : null);
348
+ if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
349
+ return out;
365
350
  };
366
351
  function createMeasure(node) {
367
- return function (callback) {
368
- return measure(node, callback);
369
- };
352
+ return function(callback) {
353
+ return measure(node, callback);
354
+ };
370
355
  }
371
- var measureInWindow = async function (node, callback) {
372
- var out = await measureNode(node, null);
373
- if (out) callback === null || callback === void 0 || callback(out.pageX, out.pageY, out.width, out.height);
374
- return out;
356
+ var measureInWindow = async function(node, callback) {
357
+ var out = await measureNode(node, null);
358
+ if (out) callback === null || callback === void 0 || callback(out.pageX, out.pageY, out.width, out.height);
359
+ return out;
375
360
  };
376
- var createMeasureInWindow = function (node) {
377
- return function (callback) {
378
- return measureInWindow(node, callback);
379
- };
361
+ var createMeasureInWindow = function(node) {
362
+ return function(callback) {
363
+ return measureInWindow(node, callback);
364
+ };
380
365
  };
381
- var measureLayout = async function (node, relativeNode, callback) {
382
- var out = await measureNode(node, relativeNode);
383
- if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
384
- return out;
366
+ var measureLayout = async function(node, relativeNode, callback) {
367
+ var out = await measureNode(node, relativeNode);
368
+ if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
369
+ return out;
385
370
  };
386
371
  function createMeasureLayout(node) {
387
- return function (relativeTo, callback) {
388
- return measureLayout(node, relativeTo, callback);
389
- };
372
+ return function(relativeTo, callback) {
373
+ return measureLayout(node, relativeTo, callback);
374
+ };
390
375
  }
376
+
391
377
  export { LayoutMeasurementController, createMeasure, createMeasureInWindow, createMeasureLayout, enable, getBoundingClientRectAsync, getElementLayoutEvent, measure, measureInWindow, measureLayout, measureNode, registerLayoutNode, setOnLayoutStrategy, useElementLayout };
392
378
  //# sourceMappingURL=index.native.js.map