@tamagui/use-element-layout 1.129.6-1751237024118 → 1.129.7

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/esm/index.js CHANGED
@@ -5,7 +5,8 @@ let strategy = "async";
5
5
  function setOnLayoutStrategy(state) {
6
6
  strategy = state;
7
7
  }
8
- const NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap(), DebounceTimers = /* @__PURE__ */ new WeakMap(), LastChangeTime = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0, DEBOUNCE_DELAY = 32;
8
+ const NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap();
9
+ const LastChangeTime = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
9
10
  let avoidUpdates = !0;
10
11
  const queuedUpdates = /* @__PURE__ */ new Map();
11
12
  function enable() {
@@ -15,61 +16,52 @@ if (isClient)
15
16
  if (rAF) {
16
17
  let layoutOnAnimationFrame = function() {
17
18
  const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
18
- lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
19
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach((node) => {
20
+ updateLayoutIfChanged(node, lastFrameAt);
21
+ })), rAF(layoutOnAnimationFrame);
19
22
  }, lastFrameAt = Date.now();
20
23
  const numDroppedFramesUntilPause = 2;
21
- async function updateLayoutIfChanged(node) {
22
- const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
24
+ async function updateLayoutIfChanged(node, frameId) {
25
+ const parentNode = node.parentElement;
26
+ let nodeRect, parentRect;
27
+ if (strategy === "async") {
28
+ const [nr, pr] = await Promise.all([
29
+ getBoundingClientRectAsync(node),
30
+ getBoundingClientRectAsync(parentNode)
31
+ ]);
32
+ if (frameId !== lastFrameAt)
33
+ return;
34
+ nodeRect = nr, parentRect = pr;
35
+ } else
36
+ nodeRect = node.getBoundingClientRect(), parentRect = parentNode?.getBoundingClientRect();
37
+ if (!parentRect)
38
+ return;
39
+ const onLayout = LayoutHandlers.get(node);
23
40
  if (typeof onLayout != "function") return;
24
41
  const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
25
42
  if (!cachedRect || // has changed one rect
26
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))
43
+ !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
27
44
  if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
28
- const event = getElementLayoutEvent(node);
45
+ const event = getElementLayoutEvent(nodeRect, parentRect);
29
46
  queuedUpdates.set(node, () => onLayout(event));
30
- } else if (strategy === "async") {
31
- const now = Date.now();
32
- LastChangeTime.set(node, now);
33
- const existingTimer = DebounceTimers.get(node);
34
- existingTimer && clearTimeout(existingTimer);
35
- const timer = setTimeout(async () => {
36
- const lastChange = LastChangeTime.get(node) || 0, timeSinceChange = Date.now() - lastChange;
37
- if (timeSinceChange >= DEBOUNCE_DELAY) {
38
- const event = await getElementLayoutEventAsync(node);
39
- onLayout(event), DebounceTimers.delete(node);
40
- } else {
41
- const remainingDelay = DEBOUNCE_DELAY - timeSinceChange, newTimer = setTimeout(async () => {
42
- const event = await getElementLayoutEventAsync(node);
43
- onLayout(event), DebounceTimers.delete(node);
44
- }, remainingDelay);
45
- DebounceTimers.set(node, newTimer);
46
- }
47
- }, DEBOUNCE_DELAY);
48
- DebounceTimers.set(node, timer);
49
- } else {
50
- const event = getElementLayoutEvent(node);
47
+ } else if (strategy !== "async") {
48
+ const event = getElementLayoutEvent(nodeRect, parentRect);
51
49
  onLayout(event);
52
50
  }
51
+ }
53
52
  }
54
53
  rAF(layoutOnAnimationFrame);
55
54
  } else
56
55
  process.env.NODE_ENV === "development" && console.warn(
57
56
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
58
57
  );
59
- const getElementLayoutEvent = (target) => {
60
- let res = null;
61
- if (measureLayout(target, null, (x, y, width, height, left, top) => {
62
- res = {
63
- nativeEvent: {
64
- layout: { x, y, width, height, left, top },
65
- target
66
- },
67
- timeStamp: Date.now()
68
- };
69
- }), !res)
70
- throw new Error("\u203C\uFE0F");
71
- return res;
72
- }, measureLayout = (node, relativeTo, callback) => {
58
+ const getElementLayoutEvent = (nodeRect, parentRect) => ({
59
+ nativeEvent: {
60
+ layout: getRelativeDimensions(nodeRect, parentRect),
61
+ target: nodeRect
62
+ },
63
+ timeStamp: Date.now()
64
+ }), measureLayout = (node, relativeTo, callback) => {
73
65
  const relativeNode = relativeTo || node?.parentElement;
74
66
  if (relativeNode instanceof HTMLElement) {
75
67
  const nodeDim = node.getBoundingClientRect(), relativeNodeDim = relativeNode.getBoundingClientRect();
@@ -96,8 +88,8 @@ const getElementLayoutEvent = (target) => {
96
88
  const relativeNode = relativeTo || node?.parentElement;
97
89
  if (relativeNode instanceof HTMLElement) {
98
90
  const [nodeDim, relativeNodeDim] = await Promise.all([
99
- node.getBoundingClientRect(),
100
- relativeNode.getBoundingClientRect()
91
+ getBoundingClientRectAsync(node),
92
+ getBoundingClientRectAsync(relativeNode)
101
93
  ]);
102
94
  if (relativeNodeDim && nodeDim) {
103
95
  const { x, y, width, height, left, top } = getRelativeDimensions(
@@ -117,19 +109,33 @@ function useElementLayout(ref, onLayout) {
117
109
  node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
118
110
  if (!onLayout) return;
119
111
  const node2 = ref.current?.host;
120
- if (node2)
121
- return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
122
- Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
123
- const timer = DebounceTimers.get(node2);
124
- timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
125
- };
112
+ if (!node2) return;
113
+ LayoutHandlers.set(node2, onLayout), Nodes.add(node2);
114
+ const parentNode = node2.parentNode;
115
+ return parentNode && onLayout(
116
+ getElementLayoutEvent(
117
+ node2.getBoundingClientRect(),
118
+ parentNode.getBoundingClientRect()
119
+ )
120
+ ), () => {
121
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2);
122
+ };
126
123
  }, [ref, !!onLayout]);
127
124
  }
128
125
  function ensureWebElement(x) {
129
126
  if (!(typeof HTMLElement > "u"))
130
127
  return x instanceof HTMLElement ? x : void 0;
131
128
  }
132
- const getBoundingClientRect = (node) => {
129
+ const getBoundingClientRectAsync = (node) => new Promise((res) => {
130
+ if (!node || node.nodeType !== 1) return;
131
+ const io = new IntersectionObserver(
132
+ (entries) => (io.disconnect(), res(entries[0].boundingClientRect)),
133
+ {
134
+ threshold: 0
135
+ }
136
+ );
137
+ io.observe(node);
138
+ }), getBoundingClientRect = (node) => {
133
139
  if (!(!node || node.nodeType !== 1))
134
140
  return node.getBoundingClientRect?.();
135
141
  }, getRect = (node) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["node"]
6
6
  }
@@ -7,11 +7,9 @@ function setOnLayoutStrategy(state) {
7
7
  strategy = state;
8
8
  }
9
9
  const NodeRectCache = /* @__PURE__ */new WeakMap(),
10
- ParentRectCache = /* @__PURE__ */new WeakMap(),
11
- DebounceTimers = /* @__PURE__ */new WeakMap(),
12
- LastChangeTime = /* @__PURE__ */new WeakMap(),
13
- rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
14
- DEBOUNCE_DELAY = 32;
10
+ ParentRectCache = /* @__PURE__ */new WeakMap();
11
+ const LastChangeTime = /* @__PURE__ */new WeakMap(),
12
+ rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
15
13
  let avoidUpdates = !0;
16
14
  const queuedUpdates = /* @__PURE__ */new Map();
17
15
  function enable() {
@@ -21,71 +19,46 @@ if (isClient) if (rAF) {
21
19
  let layoutOnAnimationFrame = function () {
22
20
  const now = Date.now(),
23
21
  timeSinceLastFrame = now - lastFrameAt;
24
- lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
22
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(node => {
23
+ updateLayoutIfChanged(node, lastFrameAt);
24
+ })), rAF(layoutOnAnimationFrame);
25
25
  },
26
26
  lastFrameAt = Date.now();
27
27
  const numDroppedFramesUntilPause = 2;
28
- async function updateLayoutIfChanged(node) {
29
- const nodeRect = node.getBoundingClientRect(),
30
- parentNode = node.parentElement,
31
- parentRect = parentNode?.getBoundingClientRect(),
32
- onLayout = LayoutHandlers.get(node);
28
+ async function updateLayoutIfChanged(node, frameId) {
29
+ const parentNode = node.parentElement;
30
+ let nodeRect, parentRect;
31
+ if (strategy === "async") {
32
+ const [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
33
+ if (frameId !== lastFrameAt) return;
34
+ nodeRect = nr, parentRect = pr;
35
+ } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode?.getBoundingClientRect();
36
+ if (!parentRect) return;
37
+ const onLayout = LayoutHandlers.get(node);
33
38
  if (typeof onLayout != "function") return;
34
39
  const cachedRect = NodeRectCache.get(node),
35
40
  cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
36
41
  if (!cachedRect ||
37
42
  // has changed one rect
38
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
39
- const event = getElementLayoutEvent(node);
40
- queuedUpdates.set(node, () => onLayout(event));
41
- } else if (strategy === "async") {
42
- const now = Date.now();
43
- LastChangeTime.set(node, now);
44
- const existingTimer = DebounceTimers.get(node);
45
- existingTimer && clearTimeout(existingTimer);
46
- const timer = setTimeout(async () => {
47
- const lastChange = LastChangeTime.get(node) || 0,
48
- timeSinceChange = Date.now() - lastChange;
49
- if (timeSinceChange >= DEBOUNCE_DELAY) {
50
- const event = await getElementLayoutEventAsync(node);
51
- onLayout(event), DebounceTimers.delete(node);
52
- } else {
53
- const remainingDelay = DEBOUNCE_DELAY - timeSinceChange,
54
- newTimer = setTimeout(async () => {
55
- const event = await getElementLayoutEventAsync(node);
56
- onLayout(event), DebounceTimers.delete(node);
57
- }, remainingDelay);
58
- DebounceTimers.set(node, newTimer);
59
- }
60
- }, DEBOUNCE_DELAY);
61
- DebounceTimers.set(node, timer);
62
- } else {
63
- const event = getElementLayoutEvent(node);
64
- onLayout(event);
43
+ !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
44
+ if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
45
+ const event = getElementLayoutEvent(nodeRect, parentRect);
46
+ queuedUpdates.set(node, () => onLayout(event));
47
+ } else if (strategy !== "async") {
48
+ const event = getElementLayoutEvent(nodeRect, parentRect);
49
+ onLayout(event);
50
+ }
65
51
  }
66
52
  }
67
53
  rAF(layoutOnAnimationFrame);
68
54
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
69
- const getElementLayoutEvent = target => {
70
- let res = null;
71
- if (measureLayout(target, null, (x, y, width, height, left, top) => {
72
- res = {
73
- nativeEvent: {
74
- layout: {
75
- x,
76
- y,
77
- width,
78
- height,
79
- left,
80
- top
81
- },
82
- target
83
- },
84
- timeStamp: Date.now()
85
- };
86
- }), !res) throw new Error("\u203C\uFE0F");
87
- return res;
88
- },
55
+ const getElementLayoutEvent = (nodeRect, parentRect) => ({
56
+ nativeEvent: {
57
+ layout: getRelativeDimensions(nodeRect, parentRect),
58
+ target: nodeRect
59
+ },
60
+ timeStamp: Date.now()
61
+ }),
89
62
  measureLayout = (node, relativeTo, callback) => {
90
63
  const relativeNode = relativeTo || node?.parentElement;
91
64
  if (relativeNode instanceof HTMLElement) {
@@ -118,7 +91,7 @@ const getElementLayoutEvent = target => {
118
91
  measureLayoutAsync = async (node, relativeTo) => {
119
92
  const relativeNode = relativeTo || node?.parentElement;
120
93
  if (relativeNode instanceof HTMLElement) {
121
- const [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
94
+ const [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
122
95
  if (relativeNodeDim && nodeDim) {
123
96
  const {
124
97
  x,
@@ -163,17 +136,25 @@ function useElementLayout(ref, onLayout) {
163
136
  node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
164
137
  if (!onLayout) return;
165
138
  const node2 = ref.current?.host;
166
- if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
167
- Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
168
- const timer = DebounceTimers.get(node2);
169
- timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
139
+ if (!node2) return;
140
+ LayoutHandlers.set(node2, onLayout), Nodes.add(node2);
141
+ const parentNode = node2.parentNode;
142
+ return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), () => {
143
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2);
170
144
  };
171
145
  }, [ref, !!onLayout]);
172
146
  }
173
147
  function ensureWebElement(x) {
174
148
  if (!(typeof HTMLElement > "u")) return x instanceof HTMLElement ? x : void 0;
175
149
  }
176
- const getBoundingClientRect = node => {
150
+ const getBoundingClientRectAsync = node => new Promise(res => {
151
+ if (!node || node.nodeType !== 1) return;
152
+ const io = new IntersectionObserver(entries => (io.disconnect(), res(entries[0].boundingClientRect)), {
153
+ threshold: 0
154
+ });
155
+ io.observe(node);
156
+ }),
157
+ getBoundingClientRect = node => {
177
158
  if (!(!node || node.nodeType !== 1)) return node.getBoundingClientRect?.();
178
159
  },
179
160
  getRect = node => {
@@ -1 +1 @@
1
- {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","updateLayoutIfChanged","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","existingTimer","clearTimeout","timer","setTimeout","lastChange","timeSinceChange","getElementLayoutEventAsync","delete","remainingDelay","newTimer","process","env","NODE_ENV","console","warn","target","res","measureLayout","x","y","width","height","left","top","nativeEvent","layout","timeStamp","Error","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","getRelativeDimensions","measureLayoutAsync","Promise","all","a","b","useElementLayout","ref","ensureWebElement","current","host","node2","add","nodeType","getRect","rect","offsetWidth","offsetHeight"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","LastChangeTime","rAF","window","requestAnimationFrame","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","node","updateLayoutIfChanged","frameId","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","process","env","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","target","timeStamp","measureLayout","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","x","y","width","height","left","top","getElementLayoutEventAsync","measureLayoutAsync","Error","a","b","useElementLayout","ref","ensureWebElement","current","host","node2","add","delete","res","nodeType","io","IntersectionObserver","entries","disconnect","boundingClientRect","threshold","observe","getRect","rect","offsetWidth","offsetHeight"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -7,11 +7,9 @@ function setOnLayoutStrategy(state) {
7
7
  strategy = state;
8
8
  }
9
9
  var NodeRectCache = /* @__PURE__ */new WeakMap(),
10
- ParentRectCache = /* @__PURE__ */new WeakMap(),
11
- DebounceTimers = /* @__PURE__ */new WeakMap(),
12
- LastChangeTime = /* @__PURE__ */new WeakMap(),
10
+ ParentRectCache = /* @__PURE__ */new WeakMap();
11
+ var LastChangeTime = /* @__PURE__ */new WeakMap(),
13
12
  rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
14
- DEBOUNCE_DELAY = 32,
15
13
  avoidUpdates = !0,
16
14
  queuedUpdates = /* @__PURE__ */new Map();
17
15
  function enable() {
@@ -26,76 +24,55 @@ if (isClient) if (rAF) {
26
24
  if (lastFrameAt = now, strategy !== "off") {
27
25
  var expectedFrameTime = 16.67,
28
26
  hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
29
- hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
27
+ hasRecentSyncWork || Nodes.forEach(function (node) {
28
+ updateLayoutIfChanged(node, lastFrameAt);
29
+ });
30
30
  }
31
31
  rAF(layoutOnAnimationFrame);
32
32
  };
33
33
  var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
34
34
  lastFrameAt = Date.now(),
35
35
  numDroppedFramesUntilPause = 2;
36
- async function updateLayoutIfChanged(node) {
37
- var nodeRect = node.getBoundingClientRect(),
38
- parentNode = node.parentElement,
39
- parentRect = parentNode?.getBoundingClientRect(),
40
- onLayout = LayoutHandlers.get(node);
41
- if (typeof onLayout == "function") {
42
- var cachedRect = NodeRectCache.get(node),
43
- cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
44
- if (!cachedRect ||
45
- // has changed one rect
46
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
47
- var event = getElementLayoutEvent(node);
48
- queuedUpdates.set(node, function () {
49
- return onLayout(event);
50
- });
51
- } else if (strategy === "async") {
52
- var now = Date.now();
53
- LastChangeTime.set(node, now);
54
- var existingTimer = DebounceTimers.get(node);
55
- existingTimer && clearTimeout(existingTimer);
56
- var timer = setTimeout(async function () {
57
- var lastChange = LastChangeTime.get(node) || 0,
58
- timeSinceChange = Date.now() - lastChange;
59
- if (timeSinceChange >= DEBOUNCE_DELAY) {
60
- var event2 = await getElementLayoutEventAsync(node);
61
- onLayout(event2), DebounceTimers.delete(node);
62
- } else {
63
- var remainingDelay = DEBOUNCE_DELAY - timeSinceChange,
64
- newTimer = setTimeout(async function () {
65
- var event3 = await getElementLayoutEventAsync(node);
66
- onLayout(event3), DebounceTimers.delete(node);
67
- }, remainingDelay);
68
- DebounceTimers.set(node, newTimer);
36
+ async function updateLayoutIfChanged(node, frameId) {
37
+ var parentNode = node.parentElement,
38
+ nodeRect,
39
+ parentRect;
40
+ if (strategy === "async") {
41
+ var [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
42
+ if (frameId !== lastFrameAt) return;
43
+ nodeRect = nr, parentRect = pr;
44
+ } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode?.getBoundingClientRect();
45
+ if (parentRect) {
46
+ var onLayout = LayoutHandlers.get(node);
47
+ if (typeof onLayout == "function") {
48
+ var cachedRect = NodeRectCache.get(node),
49
+ cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
50
+ if (!cachedRect ||
51
+ // has changed one rect
52
+ !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
53
+ if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
54
+ var event = getElementLayoutEvent(nodeRect, parentRect);
55
+ queuedUpdates.set(node, function () {
56
+ return onLayout(event);
57
+ });
58
+ } else if (strategy !== "async") {
59
+ var event1 = getElementLayoutEvent(nodeRect, parentRect);
60
+ onLayout(event1);
69
61
  }
70
- }, DEBOUNCE_DELAY);
71
- DebounceTimers.set(node, timer);
72
- } else {
73
- var event1 = getElementLayoutEvent(node);
74
- onLayout(event1);
62
+ }
75
63
  }
76
64
  }
77
65
  }
78
66
  rAF(layoutOnAnimationFrame);
79
67
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
80
- var getElementLayoutEvent = function (target) {
81
- var res = null;
82
- if (measureLayout(target, null, function (x, y, width, height, left, top) {
83
- res = {
84
- nativeEvent: {
85
- layout: {
86
- x,
87
- y,
88
- width,
89
- height,
90
- left,
91
- top
92
- },
93
- target
94
- },
95
- timeStamp: Date.now()
96
- };
97
- }), !res) throw new Error("\u203C\uFE0F");
98
- return res;
68
+ var getElementLayoutEvent = function (nodeRect, parentRect) {
69
+ return {
70
+ nativeEvent: {
71
+ layout: getRelativeDimensions(nodeRect, parentRect),
72
+ target: nodeRect
73
+ },
74
+ timeStamp: Date.now()
75
+ };
99
76
  },
100
77
  measureLayout = function (node, relativeTo, callback) {
101
78
  var relativeNode = relativeTo || node?.parentElement;
@@ -129,7 +106,7 @@ var getElementLayoutEvent = function (target) {
129
106
  measureLayoutAsync = async function (node, relativeTo) {
130
107
  var relativeNode = relativeTo || node?.parentElement;
131
108
  if (relativeNode instanceof HTMLElement) {
132
- var [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
109
+ var [nodeDim, relativeNodeDim] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(relativeNode)]);
133
110
  if (relativeNodeDim && nodeDim) {
134
111
  var {
135
112
  x,
@@ -176,18 +153,32 @@ function useElementLayout(ref, onLayout) {
176
153
  var _ref_current2;
177
154
  if (onLayout) {
178
155
  var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
179
- if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), function () {
180
- Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
181
- var timer = DebounceTimers.get(node2);
182
- timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
183
- };
156
+ if (node2) {
157
+ LayoutHandlers.set(node2, onLayout), Nodes.add(node2);
158
+ var parentNode = node2.parentNode;
159
+ return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), function () {
160
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2);
161
+ };
162
+ }
184
163
  }
185
164
  }, [ref, !!onLayout]);
186
165
  }
187
166
  function ensureWebElement(x) {
188
167
  if (!(typeof HTMLElement > "u")) return x instanceof HTMLElement ? x : void 0;
189
168
  }
190
- var getBoundingClientRect = function (node) {
169
+ var getBoundingClientRectAsync = function (node) {
170
+ return new Promise(function (res) {
171
+ if (!(!node || node.nodeType !== 1)) {
172
+ var io = new IntersectionObserver(function (entries) {
173
+ return io.disconnect(), res(entries[0].boundingClientRect);
174
+ }, {
175
+ threshold: 0
176
+ });
177
+ io.observe(node);
178
+ }
179
+ });
180
+ },
181
+ getBoundingClientRect = function (node) {
191
182
  var _node_getBoundingClientRect;
192
183
  if (!(!node || node.nodeType !== 1)) return (_node_getBoundingClientRect = node.getBoundingClientRect) === null || _node_getBoundingClientRect === void 0 ? void 0 : _node_getBoundingClientRect.call(node);
193
184
  },