@hanzogui/use-element-layout 3.0.6 → 4.3.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.
@@ -5,20 +5,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: !0
11
- });
12
- },
13
- __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
16
  get: () => from[key],
16
17
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
18
  });
18
- return to;
19
- };
19
+ }
20
+ return to;
21
+ };
20
22
  var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
- value: !0
23
+ value: true
22
24
  }), mod);
23
25
  var index_exports = {};
24
26
  __export(index_exports, {
@@ -38,192 +40,264 @@ __export(index_exports, {
38
40
  useElementLayout: () => useElementLayout
39
41
  });
40
42
  module.exports = __toCommonJS(index_exports);
41
- var import_jsx_runtime = require("react/jsx-runtime"),
42
- import_constants = require("@hanzogui/constants"),
43
- import_react = require("react");
43
+ var import_jsx_runtime = require("react/jsx-runtime");
44
+ var import_constants = require("@hanzogui/constants");
45
+ var import_react = require("react");
44
46
  function _instanceof(left, right) {
45
- return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
47
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
48
+ return !!right[Symbol.hasInstance](left);
49
+ } else {
50
+ return left instanceof right;
51
+ }
46
52
  }
47
- var LayoutHandlers = /* @__PURE__ */new WeakMap(),
48
- LayoutDisableKey = /* @__PURE__ */new WeakMap(),
49
- Nodes = /* @__PURE__ */new Set(),
50
- IntersectionState = /* @__PURE__ */new WeakMap(),
51
- usePretransformDimensions = function () {
52
- return globalThis.__HANZO_GUI_ONLAYOUT_PRETRANSFORM === !0 || process.env.HANZO_GUI_ONLAYOUT_PRETRANSFORM === "1";
53
- },
54
- _debugLayout;
53
+ var LayoutHandlers = /* @__PURE__ */new WeakMap();
54
+ var LayoutDisableKey = /* @__PURE__ */new WeakMap();
55
+ var Nodes = /* @__PURE__ */new Set();
56
+ var IntersectionState = /* @__PURE__ */new WeakMap();
57
+ var usePretransformDimensions = function () {
58
+ return globalThis.__GUI_ONLAYOUT_PRETRANSFORM === true || process.env.GUI_ONLAYOUT_PRETRANSFORM === "1";
59
+ };
60
+ var _debugLayout;
55
61
  function isDebugLayout() {
56
- return _debugLayout === void 0 && (_debugLayout = typeof window < "u" && new URLSearchParams(window.location.search).has("__tamaDebugLayout")), _debugLayout;
62
+ if (_debugLayout === void 0) {
63
+ _debugLayout = typeof window !== "undefined" && new URLSearchParams(window.location.search).has("__tamaDebugLayout");
64
+ }
65
+ return _debugLayout;
57
66
  }
58
- var DisableLayoutContextValues = {},
59
- DisableLayoutContextKey = /* @__PURE__ */(0, import_react.createContext)(""),
60
- ENABLE = !1,
61
- LayoutMeasurementController = function (param) {
62
- var {
63
- disable,
64
- children
65
- } = param,
66
- id = (0, import_react.useId)();
67
- return (0, import_constants.useIsomorphicLayoutEffect)(function () {
68
- DisableLayoutContextValues[id] = disable;
69
- }, [disable, id]), /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisableLayoutContextKey.Provider, {
70
- value: id,
71
- children
72
- });
73
- },
74
- globalIntersectionObserver = null,
75
- strategy = "async";
67
+ var DisableLayoutContextValues = {};
68
+ var DisableLayoutContextKey = /* @__PURE__ */(0, import_react.createContext)("");
69
+ var ENABLE = false;
70
+ var LayoutMeasurementController = function (param) {
71
+ var {
72
+ disable,
73
+ children
74
+ } = param;
75
+ var id = (0, import_react.useId)();
76
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
77
+ DisableLayoutContextValues[id] = disable;
78
+ }, [disable, id]);
79
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(DisableLayoutContextKey.Provider, {
80
+ value: id,
81
+ children
82
+ });
83
+ };
84
+ var globalIntersectionObserver = null;
85
+ var strategy = "async";
76
86
  function setOnLayoutStrategy(state) {
77
87
  strategy = state;
78
88
  }
79
- var NodeRectCache = /* @__PURE__ */new WeakMap(),
80
- avoidUpdates = !0,
81
- queuedUpdates = /* @__PURE__ */new Map();
89
+ var NodeRectCache = /* @__PURE__ */new WeakMap();
90
+ var avoidUpdates = true;
91
+ var queuedUpdates = /* @__PURE__ */new Map();
82
92
  function enable() {
83
- avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function (cb) {
84
- return cb();
85
- }), queuedUpdates.clear()));
93
+ if (avoidUpdates) {
94
+ avoidUpdates = false;
95
+ if (queuedUpdates) {
96
+ queuedUpdates.forEach(function (cb) {
97
+ return cb();
98
+ });
99
+ queuedUpdates.clear();
100
+ }
101
+ }
86
102
  }
87
103
  function startGlobalObservers() {
88
- !ENABLE || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(function (entries) {
104
+ if (!ENABLE || globalIntersectionObserver) return;
105
+ globalIntersectionObserver = new IntersectionObserver(function (entries) {
89
106
  for (var i = 0; i < entries.length; i++) {
90
- var entry = entries[i],
91
- node = entry.target;
92
- IntersectionState.get(node) !== entry.isIntersecting && IntersectionState.set(node, entry.isIntersecting);
107
+ var entry = entries[i];
108
+ var node = entry.target;
109
+ if (IntersectionState.get(node) !== entry.isIntersecting) {
110
+ IntersectionState.set(node, entry.isIntersecting);
111
+ }
93
112
  }
94
113
  }, {
95
114
  threshold: 0
96
- }));
115
+ });
97
116
  }
98
117
  function rectsEqual(a, b) {
99
118
  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
100
119
  }
101
120
  if (ENABLE) {
102
121
  let ensureRectFetchObserver = function () {
103
- return rectFetchObserver || (rectFetchObserver = new IntersectionObserver(function (entries) {
122
+ if (rectFetchObserver) return rectFetchObserver;
123
+ rectFetchObserver = new IntersectionObserver(function (entries) {
104
124
  lastCallbackDelay = Math.round(performance.now() - rectFetchStartTime);
105
- for (var i = 0; i < entries.length; i++) BoundingRects.set(entries[i].target, entries[i].boundingClientRect);
106
- process.env.NODE_ENV === "development" && isDebugLayout() && lastCallbackDelay > 50 && console.warn("[onLayout-io-delay]", lastCallbackDelay + "ms", entries.length, "entries"), rectFetchResolve && (rectFetchResolve(!0), rectFetchResolve = null);
125
+ for (var i = 0; i < entries.length; i++) {
126
+ BoundingRects.set(entries[i].target, entries[i].boundingClientRect);
127
+ }
128
+ if (process.env.NODE_ENV === "development" && isDebugLayout() && lastCallbackDelay > 50) {
129
+ console.warn("[onLayout-io-delay]", lastCallbackDelay + "ms", entries.length, "entries");
130
+ }
131
+ if (rectFetchResolve) {
132
+ rectFetchResolve(true);
133
+ rectFetchResolve = null;
134
+ }
107
135
  }, {
108
136
  threshold: 0
109
- }), rectFetchObserver);
137
+ });
138
+ return rectFetchObserver;
110
139
  };
111
- var ensureRectFetchObserver2 = ensureRectFetchObserver,
112
- BoundingRects = /* @__PURE__ */new WeakMap(),
113
- rectFetchObserver = null,
114
- rectFetchResolve = null,
115
- rectFetchStartTime = 0,
116
- lastCallbackDelay = 0;
140
+ var ensureRectFetchObserver2 = ensureRectFetchObserver;
141
+ var BoundingRects = /* @__PURE__ */new WeakMap();
142
+ var rectFetchObserver = null;
143
+ var rectFetchResolve = null;
144
+ var rectFetchStartTime = 0;
145
+ var lastCallbackDelay = 0;
117
146
  async function updateLayoutIfChanged(node) {
118
147
  var onLayout = LayoutHandlers.get(node);
119
- if (typeof onLayout == "function") {
120
- var parentNode = node.parentElement;
121
- if (parentNode) {
122
- var nodeRect, parentRect;
123
- if (strategy === "async") {
124
- if (nodeRect = BoundingRects.get(node), parentRect = BoundingRects.get(parentNode), !nodeRect || !parentRect) return;
125
- } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
126
- var cachedRect = NodeRectCache.get(node),
127
- cachedParentRect = NodeRectCache.get(parentNode),
128
- nodeChanged = !cachedRect || !rectsEqual(cachedRect, nodeRect),
129
- parentChanged = !cachedParentRect || !rectsEqual(cachedParentRect, parentRect);
130
- if (nodeChanged || parentChanged) {
131
- NodeRectCache.set(node, nodeRect), NodeRectCache.set(parentNode, parentRect);
132
- var event = getElementLayoutEvent(nodeRect, parentRect, node);
133
- process.env.NODE_ENV === "development" && isDebugLayout() && console.log("[useElementLayout] change", {
134
- tag: node.tagName,
135
- id: node.id || void 0,
136
- className: (node.className || "").slice(0, 60) || void 0,
137
- layout: event.nativeEvent.layout,
138
- first: !cachedRect
139
- }), avoidUpdates ? queuedUpdates.set(node, function () {
140
- return onLayout(event);
141
- }) : onLayout(event);
142
- }
148
+ if (typeof onLayout !== "function") return;
149
+ var parentNode = node.parentElement;
150
+ if (!parentNode) return;
151
+ var nodeRect;
152
+ var parentRect;
153
+ if (strategy === "async") {
154
+ nodeRect = BoundingRects.get(node);
155
+ parentRect = BoundingRects.get(parentNode);
156
+ if (!nodeRect || !parentRect) {
157
+ return;
158
+ }
159
+ } else {
160
+ nodeRect = node.getBoundingClientRect();
161
+ parentRect = parentNode.getBoundingClientRect();
162
+ }
163
+ var cachedRect = NodeRectCache.get(node);
164
+ var cachedParentRect = NodeRectCache.get(parentNode);
165
+ var nodeChanged = !cachedRect || !rectsEqual(cachedRect, nodeRect);
166
+ var parentChanged = !cachedParentRect || !rectsEqual(cachedParentRect, parentRect);
167
+ if (nodeChanged || parentChanged) {
168
+ NodeRectCache.set(node, nodeRect);
169
+ NodeRectCache.set(parentNode, parentRect);
170
+ var event = getElementLayoutEvent(nodeRect, parentRect, node);
171
+ if (process.env.NODE_ENV === "development" && isDebugLayout()) {
172
+ console.log("[useElementLayout] change", {
173
+ tag: node.tagName,
174
+ id: node.id || void 0,
175
+ className: (node.className || "").slice(0, 60) || void 0,
176
+ layout: event.nativeEvent.layout,
177
+ first: !cachedRect
178
+ });
179
+ }
180
+ if (avoidUpdates) {
181
+ queuedUpdates.set(node, function () {
182
+ return onLayout(event);
183
+ });
184
+ } else {
185
+ onLayout(event);
143
186
  }
144
187
  }
145
188
  }
146
- var rAF = typeof requestAnimationFrame < "u" ? requestAnimationFrame : void 0,
147
- userSkipVal = process.env.HANZO_GUI_LAYOUT_FRAME_SKIP,
148
- BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10,
149
- MAX_SKIP_FRAMES = 20,
150
- skipFrames = BASE_SKIP_FRAMES,
151
- frameCount = 0;
189
+ var rAF = typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : void 0;
190
+ var userSkipVal = process.env.GUI_LAYOUT_FRAME_SKIP;
191
+ var BASE_SKIP_FRAMES = userSkipVal ? +userSkipVal : 10;
192
+ var MAX_SKIP_FRAMES = 20;
193
+ var skipFrames = BASE_SKIP_FRAMES;
194
+ var frameCount = 0;
152
195
  async function layoutOnAnimationFrame() {
153
196
  if (frameCount++ % skipFrames !== 0) {
154
197
  rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
155
198
  return;
156
199
  }
157
- if (frameCount >= Number.MAX_SAFE_INTEGER && (frameCount = 0), strategy !== "off") {
158
- var visibleNodes = [],
159
- parentsToObserve = /* @__PURE__ */new Set(),
160
- _iteratorNormalCompletion = !0,
161
- _didIteratorError = !1,
200
+ if (frameCount >= Number.MAX_SAFE_INTEGER) {
201
+ frameCount = 0;
202
+ }
203
+ if (strategy !== "off") {
204
+ var visibleNodes = [];
205
+ var parentsToObserve = /* @__PURE__ */new Set();
206
+ var _iteratorNormalCompletion = true,
207
+ _didIteratorError = false,
162
208
  _iteratorError = void 0;
163
209
  try {
164
- for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
165
- var node = _step.value,
166
- parentElement = node.parentElement;
210
+ for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
211
+ var node = _step.value;
212
+ var parentElement = node.parentElement;
167
213
  if (!_instanceof(parentElement, HTMLElement)) {
168
214
  cleanupNode(node);
169
215
  continue;
170
216
  }
171
217
  var disableKey = LayoutDisableKey.get(node);
172
- disableKey && DisableLayoutContextValues[disableKey] === !0 || IntersectionState.get(node) !== !1 && (visibleNodes.push(node), parentsToObserve.add(parentElement));
218
+ if (disableKey && DisableLayoutContextValues[disableKey] === true) continue;
219
+ if (IntersectionState.get(node) === false) continue;
220
+ visibleNodes.push(node);
221
+ parentsToObserve.add(parentElement);
173
222
  }
174
223
  } catch (err) {
175
- _didIteratorError = !0, _iteratorError = err;
224
+ _didIteratorError = true;
225
+ _iteratorError = err;
176
226
  } finally {
177
227
  try {
178
- !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
228
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
229
+ _iterator.return();
230
+ }
179
231
  } finally {
180
- if (_didIteratorError) throw _iteratorError;
232
+ if (_didIteratorError) {
233
+ throw _iteratorError;
234
+ }
181
235
  }
182
236
  }
183
237
  if (visibleNodes.length > 0) {
184
238
  var io = ensureRectFetchObserver();
185
239
  rectFetchStartTime = performance.now();
186
- for (var i = 0; i < visibleNodes.length; i++) io.observe(visibleNodes[i]);
187
- var _iteratorNormalCompletion1 = !0,
188
- _didIteratorError1 = !1,
240
+ for (var i = 0; i < visibleNodes.length; i++) {
241
+ io.observe(visibleNodes[i]);
242
+ }
243
+ var _iteratorNormalCompletion1 = true,
244
+ _didIteratorError1 = false,
189
245
  _iteratorError1 = void 0;
190
246
  try {
191
- for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
247
+ for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
192
248
  var parent = _step1.value;
193
249
  io.observe(parent);
194
250
  }
195
251
  } catch (err) {
196
- _didIteratorError1 = !0, _iteratorError1 = err;
252
+ _didIteratorError1 = true;
253
+ _iteratorError1 = err;
197
254
  } finally {
198
255
  try {
199
- !_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
256
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
257
+ _iterator1.return();
258
+ }
200
259
  } finally {
201
- if (_didIteratorError1) throw _iteratorError1;
260
+ if (_didIteratorError1) {
261
+ throw _iteratorError1;
262
+ }
202
263
  }
203
264
  }
204
265
  await new Promise(function (res) {
205
266
  rectFetchResolve = res;
206
267
  });
207
- for (var i1 = 0; i1 < visibleNodes.length; i1++) io.unobserve(visibleNodes[i1]);
208
- var _iteratorNormalCompletion2 = !0,
209
- _didIteratorError2 = !1,
268
+ for (var i1 = 0; i1 < visibleNodes.length; i1++) {
269
+ io.unobserve(visibleNodes[i1]);
270
+ }
271
+ var _iteratorNormalCompletion2 = true,
272
+ _didIteratorError2 = false,
210
273
  _iteratorError2 = void 0;
211
274
  try {
212
- for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
275
+ for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
213
276
  var parent1 = _step2.value;
214
277
  io.unobserve(parent1);
215
278
  }
216
279
  } catch (err) {
217
- _didIteratorError2 = !0, _iteratorError2 = err;
280
+ _didIteratorError2 = true;
281
+ _iteratorError2 = err;
218
282
  } finally {
219
283
  try {
220
- !_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
284
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
285
+ _iterator2.return();
286
+ }
221
287
  } finally {
222
- if (_didIteratorError2) throw _iteratorError2;
288
+ if (_didIteratorError2) {
289
+ throw _iteratorError2;
290
+ }
223
291
  }
224
292
  }
225
- lastCallbackDelay > 50 ? skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES) : lastCallbackDelay < 20 && (skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES));
226
- for (var i2 = 0; i2 < visibleNodes.length; i2++) updateLayoutIfChanged(visibleNodes[i2]);
293
+ if (lastCallbackDelay > 50) {
294
+ skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);
295
+ } else if (lastCallbackDelay < 20) {
296
+ skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
297
+ }
298
+ for (var i2 = 0; i2 < visibleNodes.length; i2++) {
299
+ updateLayoutIfChanged(visibleNodes[i2]);
300
+ }
227
301
  }
228
302
  }
229
303
  rAF ? rAF(layoutOnAnimationFrame) : setTimeout(layoutOnAnimationFrame, 16);
@@ -231,139 +305,192 @@ if (ENABLE) {
231
305
  layoutOnAnimationFrame();
232
306
  }
233
307
  var getElementLayoutEvent = function (nodeRect, parentRect, node) {
234
- return {
235
- nativeEvent: {
236
- layout: getRelativeDimensions(nodeRect, parentRect, node),
237
- target: nodeRect
238
- },
239
- timeStamp: Date.now()
240
- };
241
- },
242
- getPreTransformDimensions = function (node) {
243
- return {
244
- width: node.offsetWidth,
245
- height: node.offsetHeight
246
- };
247
- },
248
- getRelativeDimensions = function (a, b, aNode) {
249
- var {
250
- left,
251
- top
252
- } = a,
253
- x = left - b.left,
254
- y = top - b.top,
255
- {
256
- width,
257
- height
258
- } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
259
- width: a.width,
260
- height: a.height
261
- };
262
- return {
263
- x,
264
- y,
265
- width,
266
- height,
267
- pageX: a.left,
268
- pageY: a.top
269
- };
308
+ return {
309
+ nativeEvent: {
310
+ layout: getRelativeDimensions(nodeRect, parentRect, node),
311
+ target: nodeRect
312
+ },
313
+ timeStamp: Date.now()
314
+ };
315
+ };
316
+ var getPreTransformDimensions = function (node) {
317
+ return {
318
+ width: node.offsetWidth,
319
+ height: node.offsetHeight
320
+ };
321
+ };
322
+ var getRelativeDimensions = function (a, b, aNode) {
323
+ var {
324
+ left,
325
+ top
326
+ } = a;
327
+ var x = left - b.left;
328
+ var y = top - b.top;
329
+ var {
330
+ width,
331
+ height
332
+ } = usePretransformDimensions() && aNode ? getPreTransformDimensions(aNode) : {
333
+ width: a.width,
334
+ height: a.height
335
+ };
336
+ return {
337
+ x,
338
+ y,
339
+ width,
340
+ height,
341
+ pageX: a.left,
342
+ pageY: a.top
270
343
  };
344
+ };
271
345
  function registerLayoutNode(node, onChange, disableKey) {
272
- return Nodes.add(node), LayoutHandlers.set(node, onChange), disableKey && LayoutDisableKey.set(node, disableKey), startGlobalObservers(), globalIntersectionObserver && (globalIntersectionObserver.observe(node), IntersectionState.set(node, !0)), function () {
346
+ Nodes.add(node);
347
+ LayoutHandlers.set(node, onChange);
348
+ if (disableKey) LayoutDisableKey.set(node, disableKey);
349
+ startGlobalObservers();
350
+ if (globalIntersectionObserver) {
351
+ globalIntersectionObserver.observe(node);
352
+ IntersectionState.set(node, true);
353
+ }
354
+ return function () {
273
355
  return cleanupNode(node);
274
356
  };
275
357
  }
276
358
  function cleanupNode(node) {
277
- Nodes.delete(node), LayoutHandlers.delete(node), LayoutDisableKey.delete(node), NodeRectCache.delete(node), IntersectionState.delete(node), globalIntersectionObserver && globalIntersectionObserver.unobserve(node);
359
+ Nodes.delete(node);
360
+ LayoutHandlers.delete(node);
361
+ LayoutDisableKey.delete(node);
362
+ NodeRectCache.delete(node);
363
+ IntersectionState.delete(node);
364
+ if (globalIntersectionObserver) {
365
+ globalIntersectionObserver.unobserve(node);
366
+ }
278
367
  }
279
368
  var PrevHostNode = /* @__PURE__ */new WeakMap();
280
369
  function useElementLayout(ref, onLayout) {
281
- var _ref_current,
282
- disableKey = (0, import_react.useContext)(DisableLayoutContextKey),
283
- node = ensureWebElement((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host);
284
- node && onLayout && (LayoutHandlers.set(node, onLayout), LayoutDisableKey.set(node, disableKey)), (0, import_constants.useIsomorphicLayoutEffect)(function () {
370
+ var _ref_current;
371
+ var disableKey = (0, import_react.useContext)(DisableLayoutContextKey);
372
+ var node = ensureWebElement((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host);
373
+ if (node && onLayout) {
374
+ LayoutHandlers.set(node, onLayout);
375
+ LayoutDisableKey.set(node, disableKey);
376
+ }
377
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
285
378
  var _ref_current2;
286
- if (onLayout) {
287
- var nextNode = ensureWebElement((_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host),
288
- prevNode = PrevHostNode.get(ref);
289
- if (nextNode !== prevNode && (prevNode && cleanupNode(prevNode), PrevHostNode.set(ref, nextNode), !!nextNode)) {
290
- Nodes.add(nextNode), startGlobalObservers(), globalIntersectionObserver && (globalIntersectionObserver.observe(nextNode), IntersectionState.set(nextNode, !0));
291
- var handler = LayoutHandlers.get(nextNode);
292
- if (typeof handler == "function") {
293
- var parentNode = nextNode.parentElement;
294
- if (parentNode) {
295
- var nodeRect = nextNode.getBoundingClientRect(),
296
- parentRect = parentNode.getBoundingClientRect();
297
- NodeRectCache.set(nextNode, nodeRect), NodeRectCache.set(parentNode, parentRect), handler(getElementLayoutEvent(nodeRect, parentRect, nextNode));
298
- }
299
- }
300
- }
379
+ if (!onLayout) return;
380
+ var nextNode = ensureWebElement((_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host);
381
+ var prevNode = PrevHostNode.get(ref);
382
+ if (nextNode === prevNode) return;
383
+ if (prevNode) cleanupNode(prevNode);
384
+ PrevHostNode.set(ref, nextNode);
385
+ if (!nextNode) return;
386
+ Nodes.add(nextNode);
387
+ startGlobalObservers();
388
+ if (globalIntersectionObserver) {
389
+ globalIntersectionObserver.observe(nextNode);
390
+ IntersectionState.set(nextNode, true);
301
391
  }
302
- }), (0, import_constants.useIsomorphicLayoutEffect)(function () {
392
+ var handler = LayoutHandlers.get(nextNode);
393
+ if (typeof handler !== "function") return;
394
+ var parentNode = nextNode.parentElement;
395
+ if (!parentNode) return;
396
+ var nodeRect = nextNode.getBoundingClientRect();
397
+ var parentRect = parentNode.getBoundingClientRect();
398
+ NodeRectCache.set(nextNode, nodeRect);
399
+ NodeRectCache.set(parentNode, parentRect);
400
+ handler(getElementLayoutEvent(nodeRect, parentRect, nextNode));
401
+ });
402
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
303
403
  var _ref_current2;
304
- if (onLayout) {
305
- var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
306
- if (node2) {
307
- Nodes.add(node2), startGlobalObservers(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0)), process.env.NODE_ENV === "development" && isDebugLayout() && console.log("[useElementLayout] register", {
308
- tag: node2.tagName,
309
- id: node2.id || void 0,
310
- className: (node2.className || "").slice(0, 60) || void 0,
311
- totalNodes: Nodes.size
312
- });
313
- var parentNode = node2.parentNode;
314
- return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect(), node2)), function () {
315
- cleanupNode(node2);
316
- var swappedNode = PrevHostNode.get(ref);
317
- swappedNode && swappedNode !== node2 && cleanupNode(swappedNode), PrevHostNode.delete(ref);
318
- };
319
- }
404
+ if (!onLayout) return;
405
+ var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
406
+ if (!node2) return;
407
+ Nodes.add(node2);
408
+ startGlobalObservers();
409
+ if (globalIntersectionObserver) {
410
+ globalIntersectionObserver.observe(node2);
411
+ IntersectionState.set(node2, true);
412
+ }
413
+ if (process.env.NODE_ENV === "development" && isDebugLayout()) {
414
+ console.log("[useElementLayout] register", {
415
+ tag: node2.tagName,
416
+ id: node2.id || void 0,
417
+ className: (node2.className || "").slice(0, 60) || void 0,
418
+ totalNodes: Nodes.size
419
+ });
320
420
  }
421
+ var parentNode = node2.parentNode;
422
+ if (parentNode) {
423
+ onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect(), node2));
424
+ }
425
+ return function () {
426
+ cleanupNode(node2);
427
+ var swappedNode = PrevHostNode.get(ref);
428
+ if (swappedNode && swappedNode !== node2) {
429
+ cleanupNode(swappedNode);
430
+ }
431
+ PrevHostNode.delete(ref);
432
+ };
321
433
  }, [ref, !!onLayout]);
322
434
  }
323
435
  function ensureWebElement(x) {
324
- if (!(typeof HTMLElement > "u")) return _instanceof(x, HTMLElement) ? x : void 0;
436
+ if (typeof HTMLElement === "undefined") {
437
+ return void 0;
438
+ }
439
+ return _instanceof(x, HTMLElement) ? x : void 0;
325
440
  }
326
441
  var getBoundingClientRectAsync = function (node) {
327
- return new Promise(function (res) {
328
- if (!node || node.nodeType !== 1) return res(!1);
329
- var io = new IntersectionObserver(function (entries) {
330
- return io.disconnect(), res(entries[0].boundingClientRect);
331
- }, {
332
- threshold: 0
333
- });
334
- io.observe(node);
442
+ return new Promise(function (res) {
443
+ if (!node || node.nodeType !== 1) return res(false);
444
+ var io = new IntersectionObserver(function (entries) {
445
+ io.disconnect();
446
+ return res(entries[0].boundingClientRect);
447
+ }, {
448
+ threshold: 0
335
449
  });
336
- },
337
- measureNode = async function (node, relativeTo) {
338
- var relativeNode = relativeTo || node?.parentElement;
339
- if (_instanceof(relativeNode, HTMLElement)) {
340
- var [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
341
- if (relativeNodeDim && nodeDim) return getRelativeDimensions(nodeDim, relativeNodeDim, node);
450
+ io.observe(node);
451
+ });
452
+ };
453
+ var measureNode = async function (node, relativeTo) {
454
+ var relativeNode = relativeTo || (node === null || node === void 0 ? void 0 : node.parentElement);
455
+ if (_instanceof(relativeNode, HTMLElement)) {
456
+ var [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
457
+ if (relativeNodeDim && nodeDim) {
458
+ return getRelativeDimensions(nodeDim, relativeNodeDim, node);
342
459
  }
343
- return null;
344
- },
345
- measure = async function (node, callback) {
346
- var out = await measureNode(node, _instanceof(node.parentNode, HTMLElement) ? node.parentNode : null);
347
- return out && callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY), out;
348
- };
460
+ }
461
+ return null;
462
+ };
463
+ var measure = async function (node, callback) {
464
+ var out = await measureNode(node, _instanceof(node.parentNode, HTMLElement) ? node.parentNode : null);
465
+ if (out) {
466
+ callback === null || callback === void 0 ? void 0 : callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
467
+ }
468
+ return out;
469
+ };
349
470
  function createMeasure(node) {
350
471
  return function (callback) {
351
472
  return measure(node, callback);
352
473
  };
353
474
  }
354
475
  var measureInWindow = async function (node, callback) {
355
- var out = await measureNode(node, null);
356
- return out && callback?.(out.pageX, out.pageY, out.width, out.height), out;
357
- },
358
- createMeasureInWindow = function (node) {
359
- return function (callback) {
360
- return measureInWindow(node, callback);
361
- };
362
- },
363
- measureLayout = async function (node, relativeNode, callback) {
364
- var out = await measureNode(node, relativeNode);
365
- return out && callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY), out;
476
+ var out = await measureNode(node, null);
477
+ if (out) {
478
+ callback === null || callback === void 0 ? void 0 : callback(out.pageX, out.pageY, out.width, out.height);
479
+ }
480
+ return out;
481
+ };
482
+ var createMeasureInWindow = function (node) {
483
+ return function (callback) {
484
+ return measureInWindow(node, callback);
366
485
  };
486
+ };
487
+ var measureLayout = async function (node, relativeNode, callback) {
488
+ var out = await measureNode(node, relativeNode);
489
+ if (out) {
490
+ callback === null || callback === void 0 ? void 0 : callback(out.x, out.y, out.width, out.height, out.pageX, out.pageY);
491
+ }
492
+ return out;
493
+ };
367
494
  function createMeasureLayout(node) {
368
495
  return function (relativeTo, callback) {
369
496
  return measureLayout(node, relativeTo, callback);