@tamagui/use-element-layout 3.0.0-beta.807.1 → 3.0.0-beta.881.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.
- package/dist/cjs/index.cjs +54 -94
- package/dist/cjs/index.native.cjs +44 -69
- package/dist/cjs/index.native.js +44 -69
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/index.js +56 -101
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +56 -101
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +45 -69
- package/dist/esm/index.native.js.map +1 -1
- package/package.json +4 -4
- package/src/index.tsx +78 -249
- package/types/index.d.ts +6 -8
- package/types/index.d.ts.map +2 -2
package/dist/cjs/index.cjs
CHANGED
|
@@ -32,7 +32,6 @@ __export(index_exports, {
|
|
|
32
32
|
measureLayout: () => measureLayout,
|
|
33
33
|
measureNode: () => measureNode,
|
|
34
34
|
registerLayoutNode: () => registerLayoutNode,
|
|
35
|
-
setOnLayoutStrategy: () => setOnLayoutStrategy,
|
|
36
35
|
useElementLayout: () => useElementLayout
|
|
37
36
|
});
|
|
38
37
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -42,12 +41,10 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
42
41
|
const LayoutHandlers = /* @__PURE__ */ new WeakMap();
|
|
43
42
|
const LayoutDisableKey = /* @__PURE__ */ new WeakMap();
|
|
44
43
|
const Nodes = /* @__PURE__ */ new Set();
|
|
44
|
+
const NodeRectCache = /* @__PURE__ */ new WeakMap();
|
|
45
|
+
const PrevHostNode = /* @__PURE__ */ new WeakMap();
|
|
45
46
|
const usePretransformDimensions = () => globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
|
|
46
|
-
|
|
47
|
-
function isDebugLayout() {
|
|
48
|
-
if (_debugLayout === void 0) _debugLayout = typeof window !== "undefined" && new URLSearchParams(window.location.search).has("__tamaDebugLayout");
|
|
49
|
-
return _debugLayout;
|
|
50
|
-
}
|
|
47
|
+
const isDebugLayout = () => typeof window !== "undefined" && window.location?.search?.includes("__tamaDebugLayout");
|
|
51
48
|
const DisableLayoutContextValues = {};
|
|
52
49
|
const DisableLayoutContextKey = (0, import_react.createContext)("");
|
|
53
50
|
const ENABLE = typeof IntersectionObserver !== "undefined";
|
|
@@ -66,11 +63,6 @@ const LayoutMeasurementController = ({ disable, children }) => {
|
|
|
66
63
|
let strategy = "async";
|
|
67
64
|
let resumeLayoutLoop;
|
|
68
65
|
let measureOnNextFrame;
|
|
69
|
-
function setOnLayoutStrategy(state) {
|
|
70
|
-
strategy = state;
|
|
71
|
-
resumeLayoutLoop?.();
|
|
72
|
-
}
|
|
73
|
-
const NodeRectCache = /* @__PURE__ */ new WeakMap();
|
|
74
66
|
let avoidUpdates = true;
|
|
75
67
|
const queuedUpdates = /* @__PURE__ */ new Map();
|
|
76
68
|
function enable() {
|
|
@@ -98,17 +90,7 @@ if (ENABLE) {
|
|
|
98
90
|
}
|
|
99
91
|
}, { threshold: 0 });
|
|
100
92
|
return rectFetchObserver;
|
|
101
|
-
},
|
|
102
|
-
if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
|
|
103
|
-
frameScheduled = true;
|
|
104
|
-
rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
|
|
105
|
-
};
|
|
106
|
-
const BoundingRects = /* @__PURE__ */ new WeakMap();
|
|
107
|
-
let rectFetchObserver = null;
|
|
108
|
-
let rectFetchResolve = null;
|
|
109
|
-
let rectFetchStartTime = 0;
|
|
110
|
-
let lastCallbackDelay = 0;
|
|
111
|
-
async function updateLayoutIfChanged(node) {
|
|
93
|
+
}, updateLayoutIfChanged = function(node) {
|
|
112
94
|
if (typeof LayoutHandlers.get(node) !== "function") return;
|
|
113
95
|
const parentNode = node.parentElement;
|
|
114
96
|
if (!parentNode) return;
|
|
@@ -123,7 +105,16 @@ if (ENABLE) {
|
|
|
123
105
|
parentRect = parentNode.getBoundingClientRect();
|
|
124
106
|
}
|
|
125
107
|
emitLayoutIfChanged(node, parentNode, nodeRect, parentRect);
|
|
126
|
-
}
|
|
108
|
+
}, scheduleLayoutFrame = function() {
|
|
109
|
+
if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
|
|
110
|
+
frameScheduled = true;
|
|
111
|
+
rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
|
|
112
|
+
};
|
|
113
|
+
const BoundingRects = /* @__PURE__ */ new WeakMap();
|
|
114
|
+
let rectFetchObserver = null;
|
|
115
|
+
let rectFetchResolve = null;
|
|
116
|
+
let rectFetchStartTime = 0;
|
|
117
|
+
let lastCallbackDelay = 0;
|
|
127
118
|
const rAF = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : void 0;
|
|
128
119
|
const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP;
|
|
129
120
|
const BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10;
|
|
@@ -178,32 +169,27 @@ if (ENABLE) {
|
|
|
178
169
|
document.addEventListener("visibilitychange", scheduleLayoutFrame);
|
|
179
170
|
scheduleLayoutFrame();
|
|
180
171
|
}
|
|
181
|
-
const getElementLayoutEvent = (nodeRect, parentRect, node) => {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
width: node.offsetWidth,
|
|
193
|
-
height: node.offsetHeight
|
|
194
|
-
};
|
|
195
|
-
};
|
|
172
|
+
const getElementLayoutEvent = (nodeRect, parentRect, node) => ({
|
|
173
|
+
nativeEvent: {
|
|
174
|
+
layout: getRelativeDimensions(nodeRect, parentRect, node),
|
|
175
|
+
target: nodeRect
|
|
176
|
+
},
|
|
177
|
+
timeStamp: Date.now()
|
|
178
|
+
});
|
|
179
|
+
const getPreTransformDimensions = (node) => ({
|
|
180
|
+
width: node.offsetWidth,
|
|
181
|
+
height: node.offsetHeight
|
|
182
|
+
});
|
|
196
183
|
const getRelativeDimensions = (a, b, aNode) => {
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const y = top - b.top;
|
|
184
|
+
const left = a.left - b.left;
|
|
185
|
+
const top = a.top - b.top;
|
|
200
186
|
const { width, height } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
|
|
201
187
|
width: a.width,
|
|
202
188
|
height: a.height
|
|
203
189
|
};
|
|
204
190
|
return {
|
|
205
|
-
x,
|
|
206
|
-
y,
|
|
191
|
+
x: left,
|
|
192
|
+
y: top,
|
|
207
193
|
width,
|
|
208
194
|
height,
|
|
209
195
|
pageX: a.left,
|
|
@@ -221,13 +207,6 @@ function emitLayoutIfChanged(node, parentNode, nodeRect, parentRect) {
|
|
|
221
207
|
NodeRectCache.set(node, nodeRect);
|
|
222
208
|
NodeRectCache.set(parentNode, parentRect);
|
|
223
209
|
const event = getElementLayoutEvent(nodeRect, parentRect, node);
|
|
224
|
-
if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] change", {
|
|
225
|
-
tag: node.tagName,
|
|
226
|
-
id: node.id || void 0,
|
|
227
|
-
className: (node.className || "").slice(0, 60) || void 0,
|
|
228
|
-
layout: event.nativeEvent.layout,
|
|
229
|
-
first: !cachedRect
|
|
230
|
-
});
|
|
231
210
|
if (avoidUpdates) queuedUpdates.set(node, () => onLayout(event));
|
|
232
211
|
else onLayout(event);
|
|
233
212
|
}
|
|
@@ -248,7 +227,6 @@ function cleanupNode(node) {
|
|
|
248
227
|
LayoutDisableKey.delete(node);
|
|
249
228
|
NodeRectCache.delete(node);
|
|
250
229
|
}
|
|
251
|
-
const PrevHostNode = /* @__PURE__ */ new WeakMap();
|
|
252
230
|
function emitLayoutSync(node) {
|
|
253
231
|
const onLayout = LayoutHandlers.get(node);
|
|
254
232
|
if (typeof onLayout !== "function") return;
|
|
@@ -271,48 +249,36 @@ function useElementLayout(ref, onLayout) {
|
|
|
271
249
|
if (!onLayout) return;
|
|
272
250
|
const nextNode = ensureWebElement(ref.current?.host);
|
|
273
251
|
const prevNode = PrevHostNode.get(ref);
|
|
274
|
-
if (nextNode
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (!onLayout) return;
|
|
284
|
-
const node2 = ref.current?.host;
|
|
285
|
-
if (!node2) return;
|
|
286
|
-
LayoutHandlers.set(node2, onLayout);
|
|
287
|
-
observeLayoutNode(node2, disableKey);
|
|
288
|
-
if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] register", {
|
|
289
|
-
tag: node2.tagName,
|
|
290
|
-
id: node2.id || void 0,
|
|
291
|
-
className: (node2.className || "").slice(0, 60) || void 0,
|
|
292
|
-
totalNodes: Nodes.size
|
|
293
|
-
});
|
|
252
|
+
if (nextNode !== prevNode) {
|
|
253
|
+
if (prevNode) cleanupNode(prevNode);
|
|
254
|
+
PrevHostNode.set(ref, nextNode);
|
|
255
|
+
if (nextNode) {
|
|
256
|
+
LayoutHandlers.set(nextNode, onLayout);
|
|
257
|
+
observeLayoutNode(nextNode, disableKey);
|
|
258
|
+
emitLayoutSync(nextNode);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
294
261
|
return () => {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
262
|
+
const activeNode = ensureWebElement(ref.current?.host);
|
|
263
|
+
if (activeNode) cleanupNode(activeNode);
|
|
264
|
+
const swapped = PrevHostNode.get(ref);
|
|
265
|
+
if (swapped && swapped !== activeNode) cleanupNode(swapped);
|
|
298
266
|
PrevHostNode.delete(ref);
|
|
299
267
|
};
|
|
300
268
|
}, [ref, !!onLayout]);
|
|
301
269
|
}
|
|
302
270
|
function ensureWebElement(x) {
|
|
303
|
-
if (typeof HTMLElement === "undefined") return;
|
|
271
|
+
if (typeof HTMLElement === "undefined") return void 0;
|
|
304
272
|
return x instanceof HTMLElement ? x : void 0;
|
|
305
273
|
}
|
|
306
|
-
const getBoundingClientRectAsync = (node) => {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
return res(entries[0].boundingClientRect);
|
|
312
|
-
}, { threshold: 0 });
|
|
313
|
-
io.observe(node);
|
|
274
|
+
const getBoundingClientRectAsync = (node) => new Promise((res) => {
|
|
275
|
+
if (!node || node.nodeType !== 1) return res(false);
|
|
276
|
+
const io = new IntersectionObserver((entries) => {
|
|
277
|
+
io.disconnect();
|
|
278
|
+
res(entries[0].boundingClientRect);
|
|
314
279
|
});
|
|
315
|
-
|
|
280
|
+
io.observe(node);
|
|
281
|
+
});
|
|
316
282
|
const measureNode = async (node, relativeTo) => {
|
|
317
283
|
const relativeNode = relativeTo || node?.parentElement;
|
|
318
284
|
if (relativeNode instanceof HTMLElement) {
|
|
@@ -322,26 +288,20 @@ const measureNode = async (node, relativeTo) => {
|
|
|
322
288
|
return null;
|
|
323
289
|
};
|
|
324
290
|
const measure = async (node, callback) => {
|
|
325
|
-
const out = await measureNode(node, node.
|
|
291
|
+
const out = await measureNode(node, node.parentElement);
|
|
326
292
|
if (out) callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
|
|
327
293
|
return out;
|
|
328
294
|
};
|
|
329
|
-
|
|
330
|
-
return (callback) => measure(node, callback);
|
|
331
|
-
}
|
|
295
|
+
const createMeasure = (node) => (callback) => measure(node, callback);
|
|
332
296
|
const measureInWindow = async (node, callback) => {
|
|
333
297
|
const out = await measureNode(node, null);
|
|
334
298
|
if (out) callback?.(out.pageX, out.pageY, out.width, out.height);
|
|
335
299
|
return out;
|
|
336
300
|
};
|
|
337
|
-
const createMeasureInWindow = (node) =>
|
|
338
|
-
return (callback) => measureInWindow(node, callback);
|
|
339
|
-
};
|
|
301
|
+
const createMeasureInWindow = (node) => (callback) => measureInWindow(node, callback);
|
|
340
302
|
const measureLayout = async (node, relativeNode, callback) => {
|
|
341
303
|
const out = await measureNode(node, relativeNode);
|
|
342
304
|
if (out) callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
|
|
343
305
|
return out;
|
|
344
306
|
};
|
|
345
|
-
|
|
346
|
-
return (relativeTo, callback) => measureLayout(node, relativeTo, callback);
|
|
347
|
-
}
|
|
307
|
+
const createMeasureLayout = (node) => (relativeTo, callback) => measureLayout(node, relativeTo, callback);
|
|
@@ -34,7 +34,6 @@ __export(index_exports, {
|
|
|
34
34
|
measureLayout: () => measureLayout,
|
|
35
35
|
measureNode: () => measureNode,
|
|
36
36
|
registerLayoutNode: () => registerLayoutNode,
|
|
37
|
-
setOnLayoutStrategy: () => setOnLayoutStrategy,
|
|
38
37
|
useElementLayout: () => useElementLayout
|
|
39
38
|
});
|
|
40
39
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -48,14 +47,15 @@ function _instanceof(left, right) {
|
|
|
48
47
|
var LayoutHandlers = /* @__PURE__ */ new WeakMap();
|
|
49
48
|
var LayoutDisableKey = /* @__PURE__ */ new WeakMap();
|
|
50
49
|
var Nodes = /* @__PURE__ */ new Set();
|
|
50
|
+
var NodeRectCache = /* @__PURE__ */ new WeakMap();
|
|
51
|
+
var PrevHostNode = /* @__PURE__ */ new WeakMap();
|
|
51
52
|
var usePretransformDimensions = function() {
|
|
52
53
|
return globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
|
|
53
54
|
};
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
55
|
+
var isDebugLayout = function() {
|
|
56
|
+
var _window_location_search, _window_location;
|
|
57
|
+
return typeof window !== "undefined" && ((_window_location = window.location) === null || _window_location === void 0 ? void 0 : (_window_location_search = _window_location.search) === null || _window_location_search === void 0 ? void 0 : _window_location_search.includes("__tamaDebugLayout"));
|
|
58
|
+
};
|
|
59
59
|
var DisableLayoutContextValues = {};
|
|
60
60
|
var DisableLayoutContextKey = /* @__PURE__ */ (0, import_react.createContext)("");
|
|
61
61
|
var ENABLE = false;
|
|
@@ -75,11 +75,6 @@ var LayoutMeasurementController = function(param) {
|
|
|
75
75
|
var strategy = "async";
|
|
76
76
|
var resumeLayoutLoop;
|
|
77
77
|
var measureOnNextFrame;
|
|
78
|
-
function setOnLayoutStrategy(state) {
|
|
79
|
-
strategy = state;
|
|
80
|
-
resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
|
|
81
|
-
}
|
|
82
|
-
var NodeRectCache = /* @__PURE__ */ new WeakMap();
|
|
83
78
|
var avoidUpdates = true;
|
|
84
79
|
var queuedUpdates = /* @__PURE__ */ new Map();
|
|
85
80
|
function enable() {
|
|
@@ -109,17 +104,7 @@ if (ENABLE) {
|
|
|
109
104
|
}
|
|
110
105
|
}, { threshold: 0 });
|
|
111
106
|
return rectFetchObserver;
|
|
112
|
-
},
|
|
113
|
-
if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
|
|
114
|
-
frameScheduled = true;
|
|
115
|
-
rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
|
|
116
|
-
};
|
|
117
|
-
var BoundingRects = /* @__PURE__ */ new WeakMap();
|
|
118
|
-
var rectFetchObserver = null;
|
|
119
|
-
var rectFetchResolve = null;
|
|
120
|
-
var rectFetchStartTime = 0;
|
|
121
|
-
var lastCallbackDelay = 0;
|
|
122
|
-
async function updateLayoutIfChanged(node) {
|
|
107
|
+
}, updateLayoutIfChanged2 = function(node) {
|
|
123
108
|
if (typeof LayoutHandlers.get(node) !== "function") return;
|
|
124
109
|
var parentNode = node.parentElement;
|
|
125
110
|
if (!parentNode) return;
|
|
@@ -134,7 +119,16 @@ if (ENABLE) {
|
|
|
134
119
|
parentRect = parentNode.getBoundingClientRect();
|
|
135
120
|
}
|
|
136
121
|
emitLayoutIfChanged(node, parentNode, nodeRect, parentRect);
|
|
137
|
-
}
|
|
122
|
+
}, scheduleLayoutFrame2 = function() {
|
|
123
|
+
if (frameScheduled || strategy === "off" || Nodes.size === 0 || document.hidden) return;
|
|
124
|
+
frameScheduled = true;
|
|
125
|
+
rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
|
|
126
|
+
};
|
|
127
|
+
var BoundingRects = /* @__PURE__ */ new WeakMap();
|
|
128
|
+
var rectFetchObserver = null;
|
|
129
|
+
var rectFetchResolve = null;
|
|
130
|
+
var rectFetchStartTime = 0;
|
|
131
|
+
var lastCallbackDelay = 0;
|
|
138
132
|
var rAF = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : void 0;
|
|
139
133
|
var userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP;
|
|
140
134
|
var BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10;
|
|
@@ -218,7 +212,7 @@ if (ENABLE) {
|
|
|
218
212
|
}
|
|
219
213
|
if (lastCallbackDelay > 50) skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);
|
|
220
214
|
else if (lastCallbackDelay < 20) skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
|
|
221
|
-
for (var i2 = 0; i2 < activeNodes.length; i2++)
|
|
215
|
+
for (var i2 = 0; i2 < activeNodes.length; i2++) updateLayoutIfChanged2(activeNodes[i2]);
|
|
222
216
|
}
|
|
223
217
|
}
|
|
224
218
|
frameScheduled = false;
|
|
@@ -248,16 +242,15 @@ var getPreTransformDimensions = function(node) {
|
|
|
248
242
|
};
|
|
249
243
|
};
|
|
250
244
|
var getRelativeDimensions = function(a, b, aNode) {
|
|
251
|
-
var
|
|
252
|
-
var
|
|
253
|
-
var y = top - b.top;
|
|
245
|
+
var left = a.left - b.left;
|
|
246
|
+
var top = a.top - b.top;
|
|
254
247
|
var { width, height } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
|
|
255
248
|
width: a.width,
|
|
256
249
|
height: a.height
|
|
257
250
|
};
|
|
258
251
|
return {
|
|
259
|
-
x,
|
|
260
|
-
y,
|
|
252
|
+
x: left,
|
|
253
|
+
y: top,
|
|
261
254
|
width,
|
|
262
255
|
height,
|
|
263
256
|
pageX: a.left,
|
|
@@ -275,13 +268,6 @@ function emitLayoutIfChanged(node, parentNode, nodeRect, parentRect) {
|
|
|
275
268
|
NodeRectCache.set(node, nodeRect);
|
|
276
269
|
NodeRectCache.set(parentNode, parentRect);
|
|
277
270
|
var event = getElementLayoutEvent(nodeRect, parentRect, node);
|
|
278
|
-
if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] change", {
|
|
279
|
-
tag: node.tagName,
|
|
280
|
-
id: node.id || void 0,
|
|
281
|
-
className: (node.className || "").slice(0, 60) || void 0,
|
|
282
|
-
layout: event.nativeEvent.layout,
|
|
283
|
-
first: !cachedRect
|
|
284
|
-
});
|
|
285
271
|
if (avoidUpdates) queuedUpdates.set(node, function() {
|
|
286
272
|
return onLayout(event);
|
|
287
273
|
});
|
|
@@ -306,7 +292,6 @@ function cleanupNode(node) {
|
|
|
306
292
|
LayoutDisableKey.delete(node);
|
|
307
293
|
NodeRectCache.delete(node);
|
|
308
294
|
}
|
|
309
|
-
var PrevHostNode = /* @__PURE__ */ new WeakMap();
|
|
310
295
|
function emitLayoutSync(node) {
|
|
311
296
|
var onLayout = LayoutHandlers.get(node);
|
|
312
297
|
if (typeof onLayout !== "function") return;
|
|
@@ -331,37 +316,27 @@ function useElementLayout(ref, onLayout) {
|
|
|
331
316
|
if (!onLayout) return;
|
|
332
317
|
var nextNode = ensureWebElement((_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host);
|
|
333
318
|
var prevNode = PrevHostNode.get(ref);
|
|
334
|
-
if (nextNode
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
var _ref_current2;
|
|
344
|
-
if (!onLayout) return;
|
|
345
|
-
var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
|
|
346
|
-
if (!node2) return;
|
|
347
|
-
LayoutHandlers.set(node2, onLayout);
|
|
348
|
-
observeLayoutNode(node2, disableKey);
|
|
349
|
-
if (process.env.NODE_ENV === "development" && isDebugLayout()) console.log("[useElementLayout] register", {
|
|
350
|
-
tag: node2.tagName,
|
|
351
|
-
id: node2.id || void 0,
|
|
352
|
-
className: (node2.className || "").slice(0, 60) || void 0,
|
|
353
|
-
totalNodes: Nodes.size
|
|
354
|
-
});
|
|
319
|
+
if (nextNode !== prevNode) {
|
|
320
|
+
if (prevNode) cleanupNode(prevNode);
|
|
321
|
+
PrevHostNode.set(ref, nextNode);
|
|
322
|
+
if (nextNode) {
|
|
323
|
+
LayoutHandlers.set(nextNode, onLayout);
|
|
324
|
+
observeLayoutNode(nextNode, disableKey);
|
|
325
|
+
emitLayoutSync(nextNode);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
355
328
|
return function() {
|
|
356
|
-
|
|
357
|
-
var
|
|
358
|
-
if (
|
|
329
|
+
var _ref_current3;
|
|
330
|
+
var activeNode = ensureWebElement((_ref_current3 = ref.current) === null || _ref_current3 === void 0 ? void 0 : _ref_current3.host);
|
|
331
|
+
if (activeNode) cleanupNode(activeNode);
|
|
332
|
+
var swapped = PrevHostNode.get(ref);
|
|
333
|
+
if (swapped && swapped !== activeNode) cleanupNode(swapped);
|
|
359
334
|
PrevHostNode.delete(ref);
|
|
360
335
|
};
|
|
361
336
|
}, [ref, !!onLayout]);
|
|
362
337
|
}
|
|
363
338
|
function ensureWebElement(x) {
|
|
364
|
-
if (typeof HTMLElement === "undefined") return;
|
|
339
|
+
if (typeof HTMLElement === "undefined") return void 0;
|
|
365
340
|
return _instanceof(x, HTMLElement) ? x : void 0;
|
|
366
341
|
}
|
|
367
342
|
var getBoundingClientRectAsync = function(node) {
|
|
@@ -369,8 +344,8 @@ var getBoundingClientRectAsync = function(node) {
|
|
|
369
344
|
if (!node || node.nodeType !== 1) return res(false);
|
|
370
345
|
var io = new IntersectionObserver(function(entries) {
|
|
371
346
|
io.disconnect();
|
|
372
|
-
|
|
373
|
-
}
|
|
347
|
+
res(entries[0].boundingClientRect);
|
|
348
|
+
});
|
|
374
349
|
io.observe(node);
|
|
375
350
|
});
|
|
376
351
|
};
|
|
@@ -383,15 +358,15 @@ var measureNode = async function(node, relativeTo) {
|
|
|
383
358
|
return null;
|
|
384
359
|
};
|
|
385
360
|
var measure = async function(node, callback) {
|
|
386
|
-
var out = await measureNode(node,
|
|
361
|
+
var out = await measureNode(node, node.parentElement);
|
|
387
362
|
if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
|
|
388
363
|
return out;
|
|
389
364
|
};
|
|
390
|
-
|
|
365
|
+
var createMeasure = function(node) {
|
|
391
366
|
return function(callback) {
|
|
392
367
|
return measure(node, callback);
|
|
393
368
|
};
|
|
394
|
-
}
|
|
369
|
+
};
|
|
395
370
|
var measureInWindow = async function(node, callback) {
|
|
396
371
|
var out = await measureNode(node, null);
|
|
397
372
|
if (out) callback === null || callback === void 0 || callback(out.pageX, out.pageY, out.width, out.height);
|
|
@@ -407,8 +382,8 @@ var measureLayout = async function(node, relativeNode, callback) {
|
|
|
407
382
|
if (out) callback === null || callback === void 0 || callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
|
|
408
383
|
return out;
|
|
409
384
|
};
|
|
410
|
-
|
|
385
|
+
var createMeasureLayout = function(node) {
|
|
411
386
|
return function(relativeTo, callback) {
|
|
412
387
|
return measureLayout(node, relativeTo, callback);
|
|
413
388
|
};
|
|
414
|
-
}
|
|
389
|
+
};
|