@tamagui/core 1.126.17 → 1.127.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/cjs/helpers/getBoundingClientRect.cjs +16 -3
  2. package/dist/cjs/helpers/getBoundingClientRect.js +17 -2
  3. package/dist/cjs/helpers/getBoundingClientRect.js.map +1 -1
  4. package/dist/cjs/helpers/getBoundingClientRect.native.js +20 -2
  5. package/dist/cjs/helpers/getBoundingClientRect.native.js.map +2 -2
  6. package/dist/cjs/hooks/useElementLayout.cjs +90 -22
  7. package/dist/cjs/hooks/useElementLayout.js +72 -16
  8. package/dist/cjs/hooks/useElementLayout.js.map +1 -1
  9. package/dist/cjs/hooks/useElementLayout.native.js +82 -20
  10. package/dist/cjs/hooks/useElementLayout.native.js.map +2 -2
  11. package/dist/esm/helpers/getBoundingClientRect.js +17 -2
  12. package/dist/esm/helpers/getBoundingClientRect.js.map +1 -1
  13. package/dist/esm/helpers/getBoundingClientRect.mjs +15 -3
  14. package/dist/esm/helpers/getBoundingClientRect.mjs.map +1 -1
  15. package/dist/esm/helpers/getBoundingClientRect.native.js +22 -4
  16. package/dist/esm/helpers/getBoundingClientRect.native.js.map +1 -1
  17. package/dist/esm/hooks/useElementLayout.js +72 -16
  18. package/dist/esm/hooks/useElementLayout.js.map +1 -1
  19. package/dist/esm/hooks/useElementLayout.mjs +89 -23
  20. package/dist/esm/hooks/useElementLayout.mjs.map +1 -1
  21. package/dist/esm/hooks/useElementLayout.native.js +101 -36
  22. package/dist/esm/hooks/useElementLayout.native.js.map +1 -1
  23. package/dist/native.js +77 -21
  24. package/dist/native.js.map +2 -2
  25. package/dist/test.native.js +77 -21
  26. package/dist/test.native.js.map +2 -2
  27. package/package.json +7 -7
  28. package/src/helpers/getBoundingClientRect.tsx +26 -0
  29. package/src/hooks/useElementLayout.tsx +107 -8
  30. package/types/helpers/getBoundingClientRect.d.ts +1 -0
  31. package/types/helpers/getBoundingClientRect.d.ts.map +1 -1
  32. package/types/hooks/useElementLayout.d.ts +4 -2
  33. package/types/hooks/useElementLayout.d.ts.map +1 -1
@@ -1,5 +1,17 @@
1
1
  const getBoundingClientRect = node => {
2
- if (!(!node || node.nodeType !== 1)) return node.getBoundingClientRect?.();
3
- };
4
- export { getBoundingClientRect };
2
+ if (!(!node || node.nodeType !== 1)) return node.getBoundingClientRect?.();
3
+ },
4
+ getBoundingClientRectAsync = element => new Promise(resolve => {
5
+ let didFallback = !1;
6
+ function fallbackToSync() {
7
+ didFallback = !0, resolve(getBoundingClientRect(element));
8
+ }
9
+ const tm = setTimeout(fallbackToSync, 32);
10
+ new IntersectionObserver((entries, ob) => {
11
+ clearTimeout(tm), ob.disconnect(), didFallback || resolve(entries[0]?.boundingClientRect);
12
+ }, {
13
+ threshold: 1e-4
14
+ }).observe(element);
15
+ });
16
+ export { getBoundingClientRect, getBoundingClientRectAsync };
5
17
  //# sourceMappingURL=getBoundingClientRect.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["getBoundingClientRect","node","nodeType"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,qBAAA,GAAyBC,IAAA,IAAkD;EACtF,IAAI,GAACA,IAAA,IAAQA,IAAA,CAAKC,QAAA,KAAa,IAC/B,OAAOD,IAAA,CAAKD,qBAAA,GAAwB;AACtC","ignoreList":[]}
1
+ {"version":3,"names":["getBoundingClientRect","node","nodeType","getBoundingClientRectAsync","element","Promise","resolve","didFallback","fallbackToSync","tm","setTimeout","IntersectionObserver","entries","ob","clearTimeout","disconnect","boundingClientRect","threshold","observe"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,qBAAA,GAAyBC,IAAA,IAAkD;IACtF,IAAI,GAACA,IAAA,IAAQA,IAAA,CAAKC,QAAA,KAAa,IAC/B,OAAOD,IAAA,CAAKD,qBAAA,GAAwB;EACtC;EAEaG,0BAAA,GACXC,OAAA,IAEO,IAAIC,OAAA,CAASC,OAAA,IAAY;IAC9B,IAAIC,WAAA,GAAc;IAClB,SAASC,eAAA,EAAiB;MACxBD,WAAA,GAAc,IACdD,OAAA,CAAQN,qBAAA,CAAsBI,OAAO,CAAC;IACxC;IACA,MAAMK,EAAA,GAAKC,UAAA,CAAWF,cAAA,EAAgB,EAAE;IACvB,IAAIG,oBAAA,CACnB,CAACC,OAAA,EAASC,EAAA,KAAO;MACfC,YAAA,CAAaL,EAAE,GACfI,EAAA,CAAGE,UAAA,CAAW,GACTR,WAAA,IACHD,OAAA,CAAQM,OAAA,CAAQ,CAAC,GAAGI,kBAAkB;IAE1C,GACA;MACEC,SAAA,EAAW;IACb,CACF,EACSC,OAAA,CAAQd,OAAO;EAC1B,CAAC","ignoreList":[]}
@@ -1,6 +1,24 @@
1
1
  var getBoundingClientRect = function (node) {
2
- var _node_getBoundingClientRect;
3
- if (!(!node || node.nodeType !== 1)) return (_node_getBoundingClientRect = node.getBoundingClientRect) === null || _node_getBoundingClientRect === void 0 ? void 0 : _node_getBoundingClientRect.call(node);
4
- };
5
- export { getBoundingClientRect };
2
+ var _node_getBoundingClientRect;
3
+ if (!(!node || node.nodeType !== 1)) return (_node_getBoundingClientRect = node.getBoundingClientRect) === null || _node_getBoundingClientRect === void 0 ? void 0 : _node_getBoundingClientRect.call(node);
4
+ },
5
+ getBoundingClientRectAsync = function (element) {
6
+ return new Promise(function (resolve) {
7
+ var didFallback = !1;
8
+ function fallbackToSync() {
9
+ didFallback = !0, resolve(getBoundingClientRect(element));
10
+ }
11
+ var tm = setTimeout(fallbackToSync, 32),
12
+ observer = new IntersectionObserver(function (entries, ob) {
13
+ if (clearTimeout(tm), ob.disconnect(), !didFallback) {
14
+ var _entries_;
15
+ resolve((_entries_ = entries[0]) === null || _entries_ === void 0 ? void 0 : _entries_.boundingClientRect);
16
+ }
17
+ }, {
18
+ threshold: 1e-4
19
+ });
20
+ observer.observe(element);
21
+ });
22
+ };
23
+ export { getBoundingClientRect, getBoundingClientRectAsync };
6
24
  //# sourceMappingURL=getBoundingClientRect.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getBoundingClientRect","node","_node_getBoundingClientRect","nodeType","call"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,qBAAM,YAAAA,CAAyBC,IAAkD;EACtF,IAAIC,2BAAc;EAClB,OAAAD,IAAO,IAAKA,IAAA,CAAAE,QAAA,SACd,QAAAD,2BAAA,GAAAD,IAAA,CAAAD,qBAAA,cAAAE,2BAAA,uBAAAA,2BAAA,CAAAE,IAAA,CAAAH,IAAA","ignoreList":[]}
1
+ {"version":3,"names":["getBoundingClientRect","node","_node_getBoundingClientRect","nodeType","call","getBoundingClientRectAsync","element","Promise","resolve","didFallback","fallbackToSync","tm","setTimeout","observer","IntersectionObserver","entries","ob","clearTimeout","disconnect","_entries_","boundingClientRect","threshold"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,qBAAM,YAAAA,CAAyBC,IAAkD;IACtF,IAAIC,2BAAc;IAClB,OAAAD,IAAO,IAAKA,IAAA,CAAAE,QAAA,SAGD,QAAAD,2BACX,GAAAD,IAEO,CAAAD,qBAAa,MAAY,QAAAE,2BAAA,uBAAAA,2BAAA,CAAAE,IAAA,CAAAH,IAAA;EAC9B;EAAAI,0BAAkB,YAAAA,CAAAC,OAAA;IAClB,WAASC,OAAA,WAAiBC,OAAA;MACxB,IAAAC,WAAc,GACd;MACF,SAAAC,eAAA;QACAD,WAAW,OAAWD,OAAA,CAAAR,qBAAkB,CAAAM,OAAA;MACvB;MACf,IAACK,EAAA,GAAAC,UAAgB,CAAAF,cAAA;QAAAG,QAAA,OAAAC,oBAAA,WAAAC,OAAA,EAAAC,EAAA;UACf,IAAAC,YAAe,CAAAN,EACf,GAAGK,EAAA,CAAAE,UACE,KAAAT,WACH;YAEJ,IAAAU,SAAA;YACAX,OAAA,EAAAW,SAAA,GAAAJ,OAAA,iBAAAI,SAAA,uBAAAA,SAAA,CAAAC,kBAAA;UACE;QACF;UAEOC,SAAQ;QAClB","ignoreList":[]}
@@ -4,33 +4,57 @@ import {
4
4
  ___onDidFinishClientRender
5
5
  } from "@tamagui/web";
6
6
  const LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set();
7
- let status = "active";
7
+ let strategy = "async";
8
8
  function setOnLayoutStrategy(state) {
9
- status = state;
9
+ strategy = state;
10
10
  }
11
- const NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
11
+ 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;
12
12
  if (isClient)
13
13
  if (rAF) {
14
- let updateLayoutIfChanged = function(node) {
15
- const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
16
- if (typeof onLayout != "function") return;
17
- const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
18
- if (!cachedRect || // has changed one rect
19
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
20
- NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
21
- const event = getElementLayoutEvent(node);
22
- avoidUpdates ? queuedUpdates.set(node, () => onLayout(event)) : onLayout(event);
23
- }
24
- }, layoutOnAnimationFrame = function() {
14
+ let layoutOnAnimationFrame = function() {
25
15
  const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
26
- lastFrameAt = now, status !== "inactive" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
16
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
27
17
  }, avoidUpdates = !0;
28
18
  const queuedUpdates = /* @__PURE__ */ new Map();
29
19
  let lastFrameAt = Date.now();
30
20
  const numDroppedFramesUntilPause = 2;
31
21
  ___onDidFinishClientRender(() => {
32
22
  avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear());
33
- }), rAF(layoutOnAnimationFrame);
23
+ });
24
+ async function updateLayoutIfChanged(node) {
25
+ const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
26
+ if (typeof onLayout != "function") return;
27
+ const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
28
+ if (!cachedRect || // has changed one rect
29
+ !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))
30
+ if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
31
+ const event = getElementLayoutEvent(node);
32
+ queuedUpdates.set(node, () => onLayout(event));
33
+ } else if (strategy === "async") {
34
+ const now = Date.now();
35
+ LastChangeTime.set(node, now);
36
+ const existingTimer = DebounceTimers.get(node);
37
+ existingTimer && clearTimeout(existingTimer);
38
+ const timer = setTimeout(async () => {
39
+ const lastChange = LastChangeTime.get(node) || 0, timeSinceChange = Date.now() - lastChange;
40
+ if (timeSinceChange >= DEBOUNCE_DELAY) {
41
+ const event = await getElementLayoutEventAsync(node);
42
+ onLayout(event), DebounceTimers.delete(node);
43
+ } else {
44
+ const remainingDelay = DEBOUNCE_DELAY - timeSinceChange, newTimer = setTimeout(async () => {
45
+ const event = await getElementLayoutEventAsync(node);
46
+ onLayout(event), DebounceTimers.delete(node);
47
+ }, remainingDelay);
48
+ DebounceTimers.set(node, newTimer);
49
+ }
50
+ }, DEBOUNCE_DELAY);
51
+ DebounceTimers.set(node, timer);
52
+ } else {
53
+ const event = getElementLayoutEvent(node);
54
+ onLayout(event);
55
+ }
56
+ }
57
+ rAF(layoutOnAnimationFrame);
34
58
  } else
35
59
  process.env.NODE_ENV === "development" && console.warn(
36
60
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
@@ -60,6 +84,34 @@ const getElementLayoutEvent = (target) => {
60
84
  callback(x, y, width, height, left, top);
61
85
  }
62
86
  }
87
+ }, getElementLayoutEventAsync = async (target) => {
88
+ let res = null;
89
+ if (await measureLayoutAsync(target, null, (x, y, width, height, left, top) => {
90
+ res = {
91
+ nativeEvent: {
92
+ layout: { x, y, width, height, left, top },
93
+ target
94
+ },
95
+ timeStamp: Date.now()
96
+ };
97
+ }), !res)
98
+ throw new Error("\u203C\uFE0F");
99
+ return res;
100
+ }, measureLayoutAsync = async (node, relativeTo, callback) => {
101
+ const relativeNode = relativeTo || node?.parentElement;
102
+ if (relativeNode instanceof HTMLElement) {
103
+ const [nodeDim, relativeNodeDim] = await Promise.all([
104
+ node.getBoundingClientRect(),
105
+ relativeNode.getBoundingClientRect()
106
+ ]);
107
+ if (relativeNodeDim && nodeDim) {
108
+ const { x, y, width, height, left, top } = getRelativeDimensions(
109
+ nodeDim,
110
+ relativeNodeDim
111
+ );
112
+ callback(x, y, width, height, left, top);
113
+ }
114
+ }
63
115
  }, getRelativeDimensions = (a, b) => {
64
116
  const { height, left, top, width } = a, x = left - b.left, y = top - b.top;
65
117
  return { x, y, width, height, left, top };
@@ -72,12 +124,16 @@ function useElementLayout(ref, onLayout) {
72
124
  if (node2)
73
125
  return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
74
126
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
127
+ const timer = DebounceTimers.get(node2);
128
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
75
129
  };
76
130
  }, [ref, !!onLayout]);
77
131
  }
78
132
  export {
79
133
  getElementLayoutEvent,
134
+ getElementLayoutEventAsync,
80
135
  measureLayout,
136
+ measureLayoutAsync,
81
137
  setOnLayoutStrategy,
82
138
  useElementLayout
83
139
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useElementLayout.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["node"]
6
6
  }
@@ -2,34 +2,21 @@ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
2
2
  import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
3
3
  const LayoutHandlers = /* @__PURE__ */new WeakMap(),
4
4
  Nodes = /* @__PURE__ */new Set();
5
- let status = "active";
5
+ let strategy = "async";
6
6
  function setOnLayoutStrategy(state) {
7
- status = state;
7
+ strategy = state;
8
8
  }
9
9
  const NodeRectCache = /* @__PURE__ */new WeakMap(),
10
10
  ParentRectCache = /* @__PURE__ */new WeakMap(),
11
- rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
11
+ DebounceTimers = /* @__PURE__ */new WeakMap(),
12
+ LastChangeTime = /* @__PURE__ */new WeakMap(),
13
+ rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
14
+ DEBOUNCE_DELAY = 32;
12
15
  if (isClient) if (rAF) {
13
- let updateLayoutIfChanged = function (node) {
14
- const nodeRect = node.getBoundingClientRect(),
15
- parentNode = node.parentElement,
16
- parentRect = parentNode?.getBoundingClientRect(),
17
- onLayout = LayoutHandlers.get(node);
18
- if (typeof onLayout != "function") return;
19
- const cachedRect = NodeRectCache.get(node),
20
- cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
21
- if (!cachedRect ||
22
- // has changed one rect
23
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
24
- NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
25
- const event = getElementLayoutEvent(node);
26
- avoidUpdates ? queuedUpdates.set(node, () => onLayout(event)) : onLayout(event);
27
- }
28
- },
29
- layoutOnAnimationFrame = function () {
16
+ let layoutOnAnimationFrame = function () {
30
17
  const now = Date.now(),
31
18
  timeSinceLastFrame = now - lastFrameAt;
32
- lastFrameAt = now, status !== "inactive" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
19
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
33
20
  },
34
21
  avoidUpdates = !0;
35
22
  const queuedUpdates = /* @__PURE__ */new Map();
@@ -37,7 +24,47 @@ if (isClient) if (rAF) {
37
24
  const numDroppedFramesUntilPause = 2;
38
25
  ___onDidFinishClientRender(() => {
39
26
  avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear());
40
- }), rAF(layoutOnAnimationFrame);
27
+ });
28
+ async function updateLayoutIfChanged(node) {
29
+ const nodeRect = node.getBoundingClientRect(),
30
+ parentNode = node.parentElement,
31
+ parentRect = parentNode?.getBoundingClientRect(),
32
+ onLayout = LayoutHandlers.get(node);
33
+ if (typeof onLayout != "function") return;
34
+ const cachedRect = NodeRectCache.get(node),
35
+ cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
36
+ if (!cachedRect ||
37
+ // 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);
65
+ }
66
+ }
67
+ rAF(layoutOnAnimationFrame);
41
68
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
42
69
  const getElementLayoutEvent = target => {
43
70
  let res = null;
@@ -77,6 +104,43 @@ const getElementLayoutEvent = target => {
77
104
  }
78
105
  }
79
106
  },
107
+ getElementLayoutEventAsync = async target => {
108
+ let res = null;
109
+ if (await measureLayoutAsync(target, null, (x, y, width, height, left, top) => {
110
+ res = {
111
+ nativeEvent: {
112
+ layout: {
113
+ x,
114
+ y,
115
+ width,
116
+ height,
117
+ left,
118
+ top
119
+ },
120
+ target
121
+ },
122
+ timeStamp: Date.now()
123
+ };
124
+ }), !res) throw new Error("\u203C\uFE0F");
125
+ return res;
126
+ },
127
+ measureLayoutAsync = async (node, relativeTo, callback) => {
128
+ const relativeNode = relativeTo || node?.parentElement;
129
+ if (relativeNode instanceof HTMLElement) {
130
+ const [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
131
+ if (relativeNodeDim && nodeDim) {
132
+ const {
133
+ x,
134
+ y,
135
+ width,
136
+ height,
137
+ left,
138
+ top
139
+ } = getRelativeDimensions(nodeDim, relativeNodeDim);
140
+ callback(x, y, width, height, left, top);
141
+ }
142
+ }
143
+ },
80
144
  getRelativeDimensions = (a, b) => {
81
145
  const {
82
146
  height,
@@ -102,8 +166,10 @@ function useElementLayout(ref, onLayout) {
102
166
  const node2 = ref.current?.host;
103
167
  if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
104
168
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
169
+ const timer = DebounceTimers.get(node2);
170
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
105
171
  };
106
172
  }, [ref, !!onLayout]);
107
173
  }
108
- export { getElementLayoutEvent, measureLayout, setOnLayoutStrategy, useElementLayout };
174
+ export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
109
175
  //# sourceMappingURL=useElementLayout.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","status","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","rAF","window","requestAnimationFrame","updateLayoutIfChanged","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","avoidUpdates","queuedUpdates","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","forEach","Map","cb","clear","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","a","b","useElementLayout","ref","current","host","node2","add","delete"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","forEach","updateLayoutIfChanged","avoidUpdates","queuedUpdates","Map","cb","clear","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","current","host","node2","add"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -2,45 +2,28 @@ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
2
2
  import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
3
3
  var LayoutHandlers = /* @__PURE__ */new WeakMap(),
4
4
  Nodes = /* @__PURE__ */new Set(),
5
- status = "active";
5
+ strategy = "async";
6
6
  function setOnLayoutStrategy(state) {
7
- status = state;
7
+ strategy = state;
8
8
  }
9
9
  var NodeRectCache = /* @__PURE__ */new WeakMap(),
10
10
  ParentRectCache = /* @__PURE__ */new WeakMap(),
11
- rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
11
+ DebounceTimers = /* @__PURE__ */new WeakMap(),
12
+ LastChangeTime = /* @__PURE__ */new WeakMap(),
13
+ rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
14
+ DEBOUNCE_DELAY = 32;
12
15
  if (isClient) if (rAF) {
13
- let updateLayoutIfChanged = function (node) {
14
- var nodeRect = node.getBoundingClientRect(),
15
- parentNode = node.parentElement,
16
- parentRect = parentNode?.getBoundingClientRect(),
17
- onLayout = LayoutHandlers.get(node);
18
- if (typeof onLayout == "function") {
19
- var cachedRect = NodeRectCache.get(node),
20
- cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
21
- if (!cachedRect ||
22
- // has changed one rect
23
- !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
24
- NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
25
- var event = getElementLayoutEvent(node);
26
- avoidUpdates ? queuedUpdates.set(node, function () {
27
- return onLayout(event);
28
- }) : onLayout(event);
29
- }
30
- }
31
- },
32
- layoutOnAnimationFrame = function () {
33
- var now = Date.now(),
34
- timeSinceLastFrame = now - lastFrameAt;
35
- if (lastFrameAt = now, status !== "inactive") {
36
- var expectedFrameTime = 16.67,
37
- hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
38
- hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
39
- }
40
- rAF(layoutOnAnimationFrame);
41
- };
42
- var updateLayoutIfChanged2 = updateLayoutIfChanged,
43
- layoutOnAnimationFrame2 = layoutOnAnimationFrame,
16
+ let layoutOnAnimationFrame = function () {
17
+ var now = Date.now(),
18
+ timeSinceLastFrame = now - lastFrameAt;
19
+ if (lastFrameAt = now, strategy !== "off") {
20
+ var expectedFrameTime = 16.67,
21
+ hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
22
+ hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
23
+ }
24
+ rAF(layoutOnAnimationFrame);
25
+ };
26
+ var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
44
27
  avoidUpdates = !0,
45
28
  queuedUpdates = /* @__PURE__ */new Map(),
46
29
  lastFrameAt = Date.now(),
@@ -49,7 +32,50 @@ if (isClient) if (rAF) {
49
32
  avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function (cb) {
50
33
  return cb();
51
34
  }), queuedUpdates.clear());
52
- }), rAF(layoutOnAnimationFrame);
35
+ });
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);
69
+ }
70
+ }, DEBOUNCE_DELAY);
71
+ DebounceTimers.set(node, timer);
72
+ } else {
73
+ var event1 = getElementLayoutEvent(node);
74
+ onLayout(event1);
75
+ }
76
+ }
77
+ }
78
+ rAF(layoutOnAnimationFrame);
53
79
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
54
80
  var getElementLayoutEvent = function (target) {
55
81
  var res = null;
@@ -89,6 +115,43 @@ var getElementLayoutEvent = function (target) {
89
115
  }
90
116
  }
91
117
  },
118
+ getElementLayoutEventAsync = async function (target) {
119
+ var res = null;
120
+ if (await measureLayoutAsync(target, null, function (x, y, width, height, left, top) {
121
+ res = {
122
+ nativeEvent: {
123
+ layout: {
124
+ x,
125
+ y,
126
+ width,
127
+ height,
128
+ left,
129
+ top
130
+ },
131
+ target
132
+ },
133
+ timeStamp: Date.now()
134
+ };
135
+ }), !res) throw new Error("\u203C\uFE0F");
136
+ return res;
137
+ },
138
+ measureLayoutAsync = async function (node, relativeTo, callback) {
139
+ var relativeNode = relativeTo || node?.parentElement;
140
+ if (relativeNode instanceof HTMLElement) {
141
+ var [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
142
+ if (relativeNodeDim && nodeDim) {
143
+ var {
144
+ x,
145
+ y,
146
+ width,
147
+ height,
148
+ left,
149
+ top
150
+ } = getRelativeDimensions(nodeDim, relativeNodeDim);
151
+ callback(x, y, width, height, left, top);
152
+ }
153
+ }
154
+ },
92
155
  getRelativeDimensions = function (a, b) {
93
156
  var {
94
157
  height,
@@ -116,9 +179,11 @@ function useElementLayout(ref, onLayout) {
116
179
  var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
117
180
  if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), function () {
118
181
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
182
+ var timer = DebounceTimers.get(node2);
183
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
119
184
  };
120
185
  }
121
186
  }, [ref, !!onLayout]);
122
187
  }
123
- export { getElementLayoutEvent, measureLayout, setOnLayoutStrategy, useElementLayout };
188
+ export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
124
189
  //# sourceMappingURL=useElementLayout.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","status","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","rAF","window","requestAnimationFrame","updateLayoutIfChanged","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","avoidUpdates","queuedUpdates","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","expectedFrameTime","hasRecentSyncWork","numDroppedFramesUntilPause","forEach","updateLayoutIfChanged2","layoutOnAnimationFrame2","Map","cb","clear","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","a","b"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","expectedFrameTime","hasRecentSyncWork","numDroppedFramesUntilPause","forEach","updateLayoutIfChanged","layoutOnAnimationFrame2","avoidUpdates","queuedUpdates","Map","cb","clear","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","existingTimer","clearTimeout","timer","setTimeout","lastChange","timeSinceChange","event2","getElementLayoutEventAsync","delete","remainingDelay","newTimer","event3","event1","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"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}