@tamagui/use-element-layout 1.130.3 → 1.130.5

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.
@@ -49,8 +49,6 @@ const queuedUpdates = /* @__PURE__ */new Map();
49
49
  function enable() {
50
50
  avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear()));
51
51
  }
52
- const expectedFrameTime = 16.67,
53
- numDroppedFramesUntilPause = 10;
54
52
  function startGlobalIntersectionObserver() {
55
53
  !import_constants.isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(entries => {
56
54
  entries.forEach(entry => {
@@ -63,19 +61,19 @@ function startGlobalIntersectionObserver() {
63
61
  }
64
62
  if (import_constants.isClient) if (rAF) {
65
63
  let layoutOnAnimationFrame = function () {
66
- const now = Date.now(),
67
- timeSinceLastFrame = now - lastFrameAt;
68
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
69
- frameCount = 0, rAF(layoutOnAnimationFrame);
70
- return;
64
+ if (strategy !== "off") {
65
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
66
+ rAF(layoutOnAnimationFrame);
67
+ return;
68
+ }
69
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach(node => {
70
+ updateLayoutIfChanged(node);
71
+ });
71
72
  }
72
- strategy !== "off" && (timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause || Nodes.forEach(node => {
73
- updateLayoutIfChanged(node, lastFrameAt);
74
- })), rAF(layoutOnAnimationFrame);
73
+ rAF(layoutOnAnimationFrame);
75
74
  };
76
75
  const supportsCheckVisibility = "checkVisibility" in document.body;
77
- let lastFrameAt = Date.now();
78
- async function updateLayoutIfChanged(node, frameId) {
76
+ async function updateLayoutIfChanged(node) {
79
77
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility()) return;
80
78
  const onLayout = LayoutHandlers.get(node);
81
79
  if (typeof onLayout != "function") return;
@@ -84,7 +82,7 @@ if (import_constants.isClient) if (rAF) {
84
82
  let nodeRect, parentRect;
85
83
  if (strategy === "async") {
86
84
  const [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
87
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt) return;
85
+ if (nr === !1 || pr === !1) return;
88
86
  nodeRect = nr, parentRect = pr;
89
87
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
90
88
  const cachedRect = NodeRectCache.get(node),
@@ -102,7 +100,7 @@ if (import_constants.isClient) if (rAF) {
102
100
  }
103
101
  rAF(layoutOnAnimationFrame);
104
102
  let frameCount = 0;
105
- const RUN_EVERY_X_FRAMES = 4;
103
+ const RUN_EVERY_X_FRAMES = 8;
106
104
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
107
105
  const getElementLayoutEvent = (nodeRect, parentRect) => ({
108
106
  nativeEvent: {
@@ -189,7 +187,7 @@ function useElementLayout(ref, onLayout) {
189
187
  if (!onLayout) return;
190
188
  const node2 = ref.current?.host;
191
189
  if (!node2) return;
192
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
190
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
193
191
  const parentNode = node2.parentNode;
194
192
  return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), () => {
195
193
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2), IntersectionState.delete(node2), globalIntersectionObserver && globalIntersectionObserver.unobserve(node2);
package/dist/cjs/index.js CHANGED
@@ -36,7 +36,6 @@ const queuedUpdates = /* @__PURE__ */ new Map();
36
36
  function enable() {
37
37
  avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear()));
38
38
  }
39
- const expectedFrameTime = 16.67, numDroppedFramesUntilPause = 10;
40
39
  function startGlobalIntersectionObserver() {
41
40
  !import_constants.isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(
42
41
  (entries) => {
@@ -53,18 +52,19 @@ function startGlobalIntersectionObserver() {
53
52
  if (import_constants.isClient)
54
53
  if (rAF) {
55
54
  let layoutOnAnimationFrame = function() {
56
- const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
57
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
58
- frameCount = 0, rAF(layoutOnAnimationFrame);
59
- return;
55
+ if (strategy !== "off") {
56
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
57
+ rAF(layoutOnAnimationFrame);
58
+ return;
59
+ }
60
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach((node) => {
61
+ updateLayoutIfChanged(node);
62
+ });
60
63
  }
61
- strategy !== "off" && (timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause || Nodes.forEach((node) => {
62
- updateLayoutIfChanged(node, lastFrameAt);
63
- })), rAF(layoutOnAnimationFrame);
64
+ rAF(layoutOnAnimationFrame);
64
65
  };
65
66
  const supportsCheckVisibility = "checkVisibility" in document.body;
66
- let lastFrameAt = Date.now();
67
- async function updateLayoutIfChanged(node, frameId) {
67
+ async function updateLayoutIfChanged(node) {
68
68
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())
69
69
  return;
70
70
  const onLayout = LayoutHandlers.get(node);
@@ -77,7 +77,7 @@ if (import_constants.isClient)
77
77
  getBoundingClientRectAsync(node),
78
78
  getBoundingClientRectAsync(parentNode)
79
79
  ]);
80
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt)
80
+ if (nr === !1 || pr === !1)
81
81
  return;
82
82
  nodeRect = nr, parentRect = pr;
83
83
  } else
@@ -94,7 +94,7 @@ if (import_constants.isClient)
94
94
  }
95
95
  rAF(layoutOnAnimationFrame);
96
96
  let frameCount = 0;
97
- const RUN_EVERY_X_FRAMES = 4;
97
+ const RUN_EVERY_X_FRAMES = 8;
98
98
  } else
99
99
  process.env.NODE_ENV === "development" && console.warn(
100
100
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
@@ -154,7 +154,7 @@ function useElementLayout(ref, onLayout) {
154
154
  if (!onLayout) return;
155
155
  const node2 = ref.current?.host;
156
156
  if (!node2) return;
157
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
157
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
158
158
  const parentNode = node2.parentNode;
159
159
  return parentNode && onLayout(
160
160
  getElementLayoutEvent(
@@ -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
  }
@@ -35,7 +35,6 @@ function enable() {
35
35
  return cb();
36
36
  }), queuedUpdates.clear()));
37
37
  }
38
- var expectedFrameTime = 16.67, numDroppedFramesUntilPause = 10;
39
38
  function startGlobalIntersectionObserver() {
40
39
  !import_constants.isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(function(entries) {
41
40
  entries.forEach(function(entry) {
@@ -49,21 +48,19 @@ function startGlobalIntersectionObserver() {
49
48
  if (import_constants.isClient)
50
49
  if (rAF) {
51
50
  let layoutOnAnimationFrame = function() {
52
- var now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
53
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
54
- frameCount = 0, rAF(layoutOnAnimationFrame);
55
- return;
56
- }
57
51
  if (strategy !== "off") {
58
- var hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
59
- hasRecentSyncWork || Nodes.forEach(function(node) {
60
- updateLayoutIfChanged(node, lastFrameAt);
52
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
53
+ rAF(layoutOnAnimationFrame);
54
+ return;
55
+ }
56
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach(function(node) {
57
+ updateLayoutIfChanged(node);
61
58
  });
62
59
  }
63
60
  rAF(layoutOnAnimationFrame);
64
61
  };
65
- var layoutOnAnimationFrame2 = layoutOnAnimationFrame, supportsCheckVisibility = "checkVisibility" in document.body, lastFrameAt = Date.now();
66
- async function updateLayoutIfChanged(node, frameId) {
62
+ var layoutOnAnimationFrame2 = layoutOnAnimationFrame, supportsCheckVisibility = "checkVisibility" in document.body;
63
+ async function updateLayoutIfChanged(node) {
67
64
  if (IntersectionState.get(node) !== !1 && !(process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())) {
68
65
  var onLayout = LayoutHandlers.get(node);
69
66
  if (typeof onLayout == "function") {
@@ -75,7 +72,7 @@ if (import_constants.isClient)
75
72
  getBoundingClientRectAsync(node),
76
73
  getBoundingClientRectAsync(parentNode)
77
74
  ]);
78
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt)
75
+ if (nr === !1 || pr === !1)
79
76
  return;
80
77
  nodeRect = nr, parentRect = pr;
81
78
  } else
@@ -96,7 +93,7 @@ if (import_constants.isClient)
96
93
  }
97
94
  }
98
95
  rAF(layoutOnAnimationFrame);
99
- var frameCount = 0, RUN_EVERY_X_FRAMES = 4;
96
+ var frameCount = 0, RUN_EVERY_X_FRAMES = 8;
100
97
  } else
101
98
  process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
102
99
  var getElementLayoutEvent = function(nodeRect, parentRect) {
@@ -165,7 +162,7 @@ function useElementLayout(ref, onLayout) {
165
162
  if (onLayout) {
166
163
  var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
167
164
  if (node2) {
168
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
165
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
169
166
  var parentNode = node2.parentNode;
170
167
  return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), function() {
171
168
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2), IntersectionState.delete(node2), globalIntersectionObserver && globalIntersectionObserver.unobserve(node2);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;uBAAoD,+BACpD,0BAA+B,sCAGzBA,iBAAiB,oBAAIC,QAAAA,GACrBC,QAAQ,oBAAIC,IAAAA,GACZC,oBAAoB,oBAAIH,QAAAA,GAG1BI,6BAA0D,MAQ1DC,WAAsC;AAEnC,SAASC,oBAAoBC,OAAgC;AAClEF,aAAWE;AACb;AAmBA,IAAMC,gBAAgB,oBAAIR,QAAAA,GACpBS,kBAAkB,oBAAIT,QAAAA,GACtBU,iBAAiB,oBAAIV,QAAAA,GAErBW,MAAM,OAAOC,SAAW,MAAcA,OAAOC,wBAAwBC,QAGvEC,eAAe,IACbC,gBAAgB,oBAAIC,IAAAA;AAEnB,SAASC,SAAAA;AACd,EAAIH,iBACFA,eAAe,IACXC,kBACFA,cAAcG,QAAQ,SAACC,IAAAA;WAAOA,GAAAA;MAC9BJ,cAAcK,MAAK;AAGzB;AAEA,IAAMC,oBAAoB,OACpBC,6BAA6B;AAEnC,SAASC,kCAAAA;AACP,EAAI,CAACC,6BAAYrB,+BAEjBA,6BAA6B,IAAIsB,qBAC/B,SAACC,SAAAA;AACCA,YAAQR,QAAQ,SAACS,OAAAA;AACf,UAAMC,OAAOD,MAAME;AACnB,MAAI3B,kBAAkB4B,IAAIF,IAAAA,MAAUD,MAAMI,kBACxC7B,kBAAkB8B,IAAIJ,MAAMD,MAAMI,cAAc;IAEpD,CAAA;EACF,GACA;IACEE,WAAW;EACb,CAAA;AAEJ;AAEA,IAAIT;AACF,MAAId,KAAK;AAgFP,QAASwB,yBAAT,WAASA;AACP,UAAMC,MAAMC,KAAKD,IAAG,GACdE,qBAAqBF,MAAMG;AAKjC,UAJAA,cAAcH,KAEdI,cAEIA,aAAaC,uBAAuB,GAAG;AACzCD,qBAAa,GACb7B,IAAKwB,sBAAAA;AACL;MACF;AAEA,UAAI9B,aAAa,OAAO;AAGtB,YAAMqC,oBACJJ,qBAAqBhB,oBAAoBC;AAE3C,QAAKmB,qBACHzC,MAAMkB,QAAQ,SAACU,MAAAA;AACbc,gCAAsBd,MAAMU,WAAAA;QAC9B,CAAA;MAEJ;AAEA5B,UAAKwB,sBAAAA;IACP;AA3BSA,QAAAA,0BAAAA,wBA/EHS,0BAA0B,qBAAqBC,SAASC,MAE1DP,cAAcF,KAAKD,IAAG;AAE1B,mBAAeO,sBAAsBd,MAAmBkB,SAAe;AACrE,UAAI5C,kBAAkB4B,IAAIF,IAAAA,MAAU,MAKhCmB,UAAQC,IAAIC,sCAAsC,OAChDN,2BAA2B,CAAEf,KAAasB,gBAAe,IAM/D;YAAMC,WAAWrD,eAAegC,IAAIF,IAAAA;AACpC,YAAI,OAAOuB,YAAa,YAExB;cAAMC,aAAaxB,KAAKyB;AACxB,cAAKD,YAEL;gBAAIE,UACAC;AAEJ,gBAAInD,aAAa,SAAS;AACxB,kBAAM,CAACoD,IAAIC,EAAAA,IAAM,MAAMC,QAAQC,IAAI;gBACjCC,2BAA2BhC,IAAAA;gBAC3BgC,2BAA2BR,UAAAA;eAC5B;AAOD,kBALII,OAAO,MAASC,OAAO,MAKvBX,YAAYR;AACd;AAGFgB,yBAAWE,IACXD,aAAaE;YACf;AACEH,yBAAW1B,KAAKiC,sBAAqB,GACrCN,aAAaH,WAAWS,sBAAqB;AAG/C,gBAAMC,aAAavD,cAAcuB,IAAIF,IAAAA,GAC/BmC,mBAAmBxD,cAAcuB,IAAIsB,UAAAA;AAE3C,gBACE,CAACU;;YAGA,KAACE,wCAAeF,YAAYR,QAAAA;aAE1B,CAACS,oBAAoB,KAACC,wCAAeD,kBAAkBR,UAAAA,IAC1D;AACAhD,4BAAcyB,IAAIJ,MAAM0B,QAAAA,GACxB9C,gBAAgBwB,IAAIoB,YAAYG,UAAAA;AAEhC,kBAAMU,QAAQC,sBAAsBZ,UAAUC,UAAAA;AAE9C,cAAIzC,eACFC,cAAciB,IAAIJ,MAAM,WAAA;uBAAMuB,SAASc,KAAAA;mBAEvCd,SAASc,KAAAA;YAEb;;;;IACF;AAGAvD,QAAKwB,sBAAAA;AAGL,QAAIK,aAAa,GACXC,qBAAqB;EA8B7B;AACE,IAAIO,QAAQC,IAAImB,aAAa,iBAC3BC,QAAQC,KACN,2EAA2E;AAM5E,IAAMH,wBAAwB,SACnCZ,UACAC,YAAAA;AAEA,SAAO;IACLe,aAAa;MACXC,QAAQC,sBAAsBlB,UAAUC,UAAAA;MACxC1B,QAAQyB;IACV;IACAmB,WAAWrC,KAAKD,IAAG;EACrB;AACF,GAEauC,gBAAgB,SAC3B9C,MACA+C,YACAC,UAAAA;AASA,MAAMC,eAAeF,eAAc/C,QAAAA,OAAAA,SAAAA,KAAMyB;AACzC,MAAIwB,wBAAwBC,aAAa;AACvC,QAAMC,UAAUnD,KAAKiC,sBAAqB,GACpCmB,kBAAkBH,aAAahB,sBAAqB;AAE1D,QAAImB,mBAAmBD,SAAS;AAC9B,UAAM,EAAEE,GAAGC,GAAGC,OAAOC,QAAQC,MAAMC,IAAG,IAAKd,sBACzCO,SACAC,eAAAA;AAEFJ,eAASK,GAAGC,GAAGC,OAAOC,QAAQC,MAAMC,GAAAA;IACtC;EACF;AACF,GAEaC,6BAA6B,eACxC1D,QAAAA;AAEA,MAAM0C,SAAS,MAAMiB,mBAAmB3D,MAAAA;AACxC,MAAI,CAAC0C;AACH,UAAM,IAAIkB,MAAM,cAAI;AAEtB,SAAO;IACLnB,aAAa;MACXC;MACA1C;IACF;IACA4C,WAAWrC,KAAKD,IAAG;EACrB;AACF,GAEaqD,qBAAqB,eAChC5D,MACA+C,YAAAA;AAEA,MAAME,eAAeF,eAAc/C,QAAAA,OAAAA,SAAAA,KAAMyB;AACzC,MAAIwB,wBAAwBC,aAAa;AACvC,QAAM,CAACC,SAASC,eAAAA,IAAmB,MAAMtB,QAAQC,IAAI;MACnDC,2BAA2BhC,IAAAA;MAC3BgC,2BAA2BiB,YAAAA;KAC5B;AAED,QAAIG,mBAAmBD,SAAS;AAC9B,UAAM,EAAEE,GAAGC,GAAGC,OAAOC,QAAQC,MAAMC,IAAG,IAAKd,sBACzCO,SACAC,eAAAA;AAEF,aAAO;QAAEC;QAAGC;QAAGC;QAAOC;QAAQC;QAAMC;MAAI;IAC1C;EACF;AACA,SAAO;AACT,GAEMd,wBAAwB,SAACkB,GAAoBC,GAAAA;AACjD,MAAM,EAAEP,QAAQC,MAAMC,KAAKH,MAAK,IAAKO,GAC/BT,IAAII,OAAOM,EAAEN,MACbH,IAAII,MAAMK,EAAEL;AAClB,SAAO;IAAEL;IAAGC;IAAGC;IAAOC;IAAQC;IAAMC;EAAI;AAC1C;AAEO,SAASM,iBACdC,KACA1C,UAA4C;MAGd0C,cAAxBjE,OAAOkE,kBAAiBD,eAAAA,IAAIE,aAAO,QAAXF,iBAAAA,SAAAA,SAAAA,aAAaG,IAAI;AAC/C,EAAIpE,QAAQuB,YACVrD,eAAekC,IAAIJ,MAAMuB,QAAAA,OAG3B8C,4CAA0B,WAAA;QAEXJ;AADb,QAAK1C,UACL;UAAMvB,SAAOiE,gBAAAA,IAAIE,aAAO,QAAXF,kBAAAA,SAAAA,SAAAA,cAAaG;AAC1B,UAAKpE,OAEL9B;uBAAekC,IAAIJ,OAAMuB,QAAAA,GACzBnD,MAAMkG,IAAItE,KAAAA,GAGVL,gCAAAA,GACIpB,+BACFA,2BAA2BgG,QAAQvE,KAAAA,GAEnC1B,kBAAkB8B,IAAIJ,OAAM,EAAA;AAI9B,YAAMwB,aAAaxB,MAAKwB;AACxB,eAAIA,cACFD,SACEe,sBACEtC,MAAKiC,sBAAqB,GAC1BT,WAAWS,sBAAqB,CAAA,CAAA,GAK/B,WAAA;AACL7D,gBAAMoG,OAAOxE,KAAAA,GACb9B,eAAesG,OAAOxE,KAAAA,GACtBrB,cAAc6F,OAAOxE,KAAAA,GACrBnB,eAAe2F,OAAOxE,KAAAA,GACtB1B,kBAAkBkG,OAAOxE,KAAAA,GAGrBzB,8BACFA,2BAA2BkG,UAAUzE,KAAAA;QAEzC;;;EACF,GAAG;IAACiE;IAAK,CAAC,CAAC1C;GAAS;AACtB;AAEA,SAAS2C,iBAAoBb,GAAI;AAC/B,MAAI,SAAOH,cAAgB;AAG3B,WAAOG,aAAaH,cAAcG,IAAIpE;AACxC;AAEA,IAAM+C,6BAA6B,SACjChC,MAAAA;AAEA,SAAO,IAAI8B,QAAiC,SAAC4C,KAAAA;AAC3C,QAAI,CAAC1E,QAAQA,KAAK2E,aAAa,EAAG,QAAOD,IAAI,EAAA;AAE7C,QAAME,KAAK,IAAI/E,qBACb,SAACC,SAAAA;AACC8E,gBAAGC,WAAU,GACNH,IAAI5E,QAAQ,CAAA,EAAGgF,kBAAkB;IAC1C,GACA;MACEzE,WAAW;IACb,CAAA;AAEFuE,OAAGL,QAAQvE,IAAAA;EACb,CAAA;AACF,GAEMiC,wBAAwB,SAACjC,MAAAA;MAEtBA;AADP,MAAI,GAACA,QAAQA,KAAK2E,aAAa;AAC/B,YAAO3E,8BAAAA,KAAKiC,2BAAqB,QAA1BjC,gCAAAA,SAAAA,SAAAA,4BAAAA,KAAAA,IAAAA;AACT,GAEa+E,UAAU,SAAC/E,MAAAA;AACtB,MAAMgF,OAAO/C,sBAAsBjC,IAAAA;AACnC,MAAKgF,MACL;QAAM,EAAE3B,GAAGC,GAAGI,KAAKD,KAAI,IAAKuB;AAC5B,WAAO;MAAE3B;MAAGC;MAAGC,OAAOvD,KAAKiF;MAAazB,QAAQxD,KAAKkF;MAAcxB;MAAKD;IAAK;;AAC/E;",
5
- "names": ["LayoutHandlers", "WeakMap", "Nodes", "Set", "IntersectionState", "globalIntersectionObserver", "strategy", "setOnLayoutStrategy", "state", "NodeRectCache", "ParentRectCache", "LastChangeTime", "rAF", "window", "requestAnimationFrame", "undefined", "avoidUpdates", "queuedUpdates", "Map", "enable", "forEach", "cb", "clear", "expectedFrameTime", "numDroppedFramesUntilPause", "startGlobalIntersectionObserver", "isClient", "IntersectionObserver", "entries", "entry", "node", "target", "get", "isIntersecting", "set", "threshold", "layoutOnAnimationFrame", "now", "Date", "timeSinceLastFrame", "lastFrameAt", "frameCount", "RUN_EVERY_X_FRAMES", "hasRecentSyncWork", "updateLayoutIfChanged", "supportsCheckVisibility", "document", "body", "frameId", "process", "env", "TAMAGUI_ONLAYOUT_VISIBILITY_CHECK", "checkVisibility", "onLayout", "parentNode", "parentElement", "nodeRect", "parentRect", "nr", "pr", "Promise", "all", "getBoundingClientRectAsync", "getBoundingClientRect", "cachedRect", "cachedParentRect", "isEqualShallow", "event", "getElementLayoutEvent", "NODE_ENV", "console", "warn", "nativeEvent", "layout", "getRelativeDimensions", "timeStamp", "measureLayout", "relativeTo", "callback", "relativeNode", "HTMLElement", "nodeDim", "relativeNodeDim", "x", "y", "width", "height", "left", "top", "getElementLayoutEventAsync", "measureLayoutAsync", "Error", "a", "b", "useElementLayout", "ref", "ensureWebElement", "current", "host", "useIsomorphicLayoutEffect", "add", "observe", "delete", "unobserve", "res", "nodeType", "io", "disconnect", "boundingClientRect", "getRect", "rect", "offsetWidth", "offsetHeight"]
4
+ "mappings": "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",
5
+ "names": ["LayoutHandlers", "WeakMap", "Nodes", "Set", "IntersectionState", "globalIntersectionObserver", "strategy", "setOnLayoutStrategy", "state", "NodeRectCache", "ParentRectCache", "LastChangeTime", "rAF", "window", "requestAnimationFrame", "undefined", "avoidUpdates", "queuedUpdates", "Map", "enable", "forEach", "cb", "clear", "startGlobalIntersectionObserver", "isClient", "IntersectionObserver", "entries", "entry", "node", "target", "get", "isIntersecting", "set", "threshold", "layoutOnAnimationFrame", "frameCount", "RUN_EVERY_X_FRAMES", "Number", "MAX_SAFE_INTEGER", "updateLayoutIfChanged", "supportsCheckVisibility", "document", "body", "process", "env", "TAMAGUI_ONLAYOUT_VISIBILITY_CHECK", "checkVisibility", "onLayout", "parentNode", "parentElement", "nodeRect", "parentRect", "nr", "pr", "Promise", "all", "getBoundingClientRectAsync", "getBoundingClientRect", "cachedRect", "cachedParentRect", "isEqualShallow", "event", "getElementLayoutEvent", "NODE_ENV", "console", "warn", "nativeEvent", "layout", "getRelativeDimensions", "timeStamp", "Date", "now", "measureLayout", "relativeTo", "callback", "relativeNode", "HTMLElement", "nodeDim", "relativeNodeDim", "x", "y", "width", "height", "left", "top", "getElementLayoutEventAsync", "measureLayoutAsync", "Error", "a", "b", "useElementLayout", "ref", "ensureWebElement", "current", "host", "useIsomorphicLayoutEffect", "add", "observe", "delete", "unobserve", "res", "nodeType", "io", "disconnect", "boundingClientRect", "getRect", "rect", "offsetWidth", "offsetHeight"]
6
6
  }
package/dist/esm/index.js CHANGED
@@ -11,7 +11,6 @@ const queuedUpdates = /* @__PURE__ */ new Map();
11
11
  function enable() {
12
12
  avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear()));
13
13
  }
14
- const expectedFrameTime = 16.67, numDroppedFramesUntilPause = 10;
15
14
  function startGlobalIntersectionObserver() {
16
15
  !isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(
17
16
  (entries) => {
@@ -28,18 +27,19 @@ function startGlobalIntersectionObserver() {
28
27
  if (isClient)
29
28
  if (rAF) {
30
29
  let layoutOnAnimationFrame = function() {
31
- const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
32
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
33
- frameCount = 0, rAF(layoutOnAnimationFrame);
34
- return;
30
+ if (strategy !== "off") {
31
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
32
+ rAF(layoutOnAnimationFrame);
33
+ return;
34
+ }
35
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach((node) => {
36
+ updateLayoutIfChanged(node);
37
+ });
35
38
  }
36
- strategy !== "off" && (timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause || Nodes.forEach((node) => {
37
- updateLayoutIfChanged(node, lastFrameAt);
38
- })), rAF(layoutOnAnimationFrame);
39
+ rAF(layoutOnAnimationFrame);
39
40
  };
40
41
  const supportsCheckVisibility = "checkVisibility" in document.body;
41
- let lastFrameAt = Date.now();
42
- async function updateLayoutIfChanged(node, frameId) {
42
+ async function updateLayoutIfChanged(node) {
43
43
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())
44
44
  return;
45
45
  const onLayout = LayoutHandlers.get(node);
@@ -52,7 +52,7 @@ if (isClient)
52
52
  getBoundingClientRectAsync(node),
53
53
  getBoundingClientRectAsync(parentNode)
54
54
  ]);
55
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt)
55
+ if (nr === !1 || pr === !1)
56
56
  return;
57
57
  nodeRect = nr, parentRect = pr;
58
58
  } else
@@ -69,7 +69,7 @@ if (isClient)
69
69
  }
70
70
  rAF(layoutOnAnimationFrame);
71
71
  let frameCount = 0;
72
- const RUN_EVERY_X_FRAMES = 4;
72
+ const RUN_EVERY_X_FRAMES = 8;
73
73
  } else
74
74
  process.env.NODE_ENV === "development" && console.warn(
75
75
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
@@ -129,7 +129,7 @@ function useElementLayout(ref, onLayout) {
129
129
  if (!onLayout) return;
130
130
  const node2 = ref.current?.host;
131
131
  if (!node2) return;
132
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
132
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
133
133
  const parentNode = node2.parentNode;
134
134
  return parentNode && onLayout(
135
135
  getElementLayoutEvent(
@@ -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
  }
@@ -17,8 +17,6 @@ const queuedUpdates = /* @__PURE__ */new Map();
17
17
  function enable() {
18
18
  avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear()));
19
19
  }
20
- const expectedFrameTime = 16.67,
21
- numDroppedFramesUntilPause = 10;
22
20
  function startGlobalIntersectionObserver() {
23
21
  !isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(entries => {
24
22
  entries.forEach(entry => {
@@ -31,19 +29,19 @@ function startGlobalIntersectionObserver() {
31
29
  }
32
30
  if (isClient) if (rAF) {
33
31
  let layoutOnAnimationFrame = function () {
34
- const now = Date.now(),
35
- timeSinceLastFrame = now - lastFrameAt;
36
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
37
- frameCount = 0, rAF(layoutOnAnimationFrame);
38
- return;
32
+ if (strategy !== "off") {
33
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
34
+ rAF(layoutOnAnimationFrame);
35
+ return;
36
+ }
37
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach(node => {
38
+ updateLayoutIfChanged(node);
39
+ });
39
40
  }
40
- strategy !== "off" && (timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause || Nodes.forEach(node => {
41
- updateLayoutIfChanged(node, lastFrameAt);
42
- })), rAF(layoutOnAnimationFrame);
41
+ rAF(layoutOnAnimationFrame);
43
42
  };
44
43
  const supportsCheckVisibility = "checkVisibility" in document.body;
45
- let lastFrameAt = Date.now();
46
- async function updateLayoutIfChanged(node, frameId) {
44
+ async function updateLayoutIfChanged(node) {
47
45
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility()) return;
48
46
  const onLayout = LayoutHandlers.get(node);
49
47
  if (typeof onLayout != "function") return;
@@ -52,7 +50,7 @@ if (isClient) if (rAF) {
52
50
  let nodeRect, parentRect;
53
51
  if (strategy === "async") {
54
52
  const [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
55
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt) return;
53
+ if (nr === !1 || pr === !1) return;
56
54
  nodeRect = nr, parentRect = pr;
57
55
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
58
56
  const cachedRect = NodeRectCache.get(node),
@@ -70,7 +68,7 @@ if (isClient) if (rAF) {
70
68
  }
71
69
  rAF(layoutOnAnimationFrame);
72
70
  let frameCount = 0;
73
- const RUN_EVERY_X_FRAMES = 4;
71
+ const RUN_EVERY_X_FRAMES = 8;
74
72
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
75
73
  const getElementLayoutEvent = (nodeRect, parentRect) => ({
76
74
  nativeEvent: {
@@ -157,7 +155,7 @@ function useElementLayout(ref, onLayout) {
157
155
  if (!onLayout) return;
158
156
  const node2 = ref.current?.host;
159
157
  if (!node2) return;
160
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
158
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
161
159
  const parentNode = node2.parentNode;
162
160
  return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), () => {
163
161
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2), IntersectionState.delete(node2), globalIntersectionObserver && globalIntersectionObserver.unobserve(node2);
@@ -1 +1 @@
1
- {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","IntersectionState","globalIntersectionObserver","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","LastChangeTime","rAF","window","requestAnimationFrame","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","expectedFrameTime","numDroppedFramesUntilPause","startGlobalIntersectionObserver","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","frameCount","RUN_EVERY_X_FRAMES","updateLayoutIfChanged","supportsCheckVisibility","document","body","frameId","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","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","observe","delete","unobserve","res","nodeType","io","disconnect","boundingClientRect","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","IntersectionState","globalIntersectionObserver","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","LastChangeTime","rAF","window","requestAnimationFrame","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","startGlobalIntersectionObserver","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","layoutOnAnimationFrame","frameCount","RUN_EVERY_X_FRAMES","Number","MAX_SAFE_INTEGER","updateLayoutIfChanged","supportsCheckVisibility","document","body","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","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","observe","delete","unobserve","res","nodeType","io","disconnect","boundingClientRect","getRect","rect","offsetWidth","offsetHeight"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -19,8 +19,6 @@ function enable() {
19
19
  return cb();
20
20
  }), queuedUpdates.clear()));
21
21
  }
22
- var expectedFrameTime = 16.67,
23
- numDroppedFramesUntilPause = 10;
24
22
  function startGlobalIntersectionObserver() {
25
23
  !isClient || globalIntersectionObserver || (globalIntersectionObserver = new IntersectionObserver(function (entries) {
26
24
  entries.forEach(function (entry) {
@@ -33,24 +31,20 @@ function startGlobalIntersectionObserver() {
33
31
  }
34
32
  if (isClient) if (rAF) {
35
33
  let layoutOnAnimationFrame = function () {
36
- var now = Date.now(),
37
- timeSinceLastFrame = now - lastFrameAt;
38
- if (lastFrameAt = now, frameCount++, frameCount % RUN_EVERY_X_FRAMES === 0) {
39
- frameCount = 0, rAF(layoutOnAnimationFrame);
40
- return;
41
- }
42
34
  if (strategy !== "off") {
43
- var hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
44
- hasRecentSyncWork || Nodes.forEach(function (node) {
45
- updateLayoutIfChanged(node, lastFrameAt);
35
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
36
+ rAF(layoutOnAnimationFrame);
37
+ return;
38
+ }
39
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach(function (node) {
40
+ updateLayoutIfChanged(node);
46
41
  });
47
42
  }
48
43
  rAF(layoutOnAnimationFrame);
49
44
  };
50
45
  var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
51
- supportsCheckVisibility = "checkVisibility" in document.body,
52
- lastFrameAt = Date.now();
53
- async function updateLayoutIfChanged(node, frameId) {
46
+ supportsCheckVisibility = "checkVisibility" in document.body;
47
+ async function updateLayoutIfChanged(node) {
54
48
  if (IntersectionState.get(node) !== !1 && !(process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())) {
55
49
  var onLayout = LayoutHandlers.get(node);
56
50
  if (typeof onLayout == "function") {
@@ -59,7 +53,7 @@ if (isClient) if (rAF) {
59
53
  var nodeRect, parentRect;
60
54
  if (strategy === "async") {
61
55
  var [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
62
- if (nr === !1 || pr === !1 || frameId !== lastFrameAt) return;
56
+ if (nr === !1 || pr === !1) return;
63
57
  nodeRect = nr, parentRect = pr;
64
58
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
65
59
  var cachedRect = NodeRectCache.get(node),
@@ -82,7 +76,7 @@ if (isClient) if (rAF) {
82
76
  }
83
77
  rAF(layoutOnAnimationFrame);
84
78
  var frameCount = 0,
85
- RUN_EVERY_X_FRAMES = 4;
79
+ RUN_EVERY_X_FRAMES = 8;
86
80
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
87
81
  var getElementLayoutEvent = function (nodeRect, parentRect) {
88
82
  return {
@@ -173,7 +167,7 @@ function useElementLayout(ref, onLayout) {
173
167
  if (onLayout) {
174
168
  var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
175
169
  if (node2) {
176
- LayoutHandlers.set(node2, onLayout), Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
170
+ Nodes.add(node2), startGlobalIntersectionObserver(), globalIntersectionObserver && (globalIntersectionObserver.observe(node2), IntersectionState.set(node2, !0));
177
171
  var parentNode = node2.parentNode;
178
172
  return parentNode && onLayout(getElementLayoutEvent(node2.getBoundingClientRect(), parentNode.getBoundingClientRect())), function () {
179
173
  Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2), LastChangeTime.delete(node2), IntersectionState.delete(node2), globalIntersectionObserver && globalIntersectionObserver.unobserve(node2);
@@ -1 +1 @@
1
- {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","IntersectionState","globalIntersectionObserver","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","LastChangeTime","rAF","window","requestAnimationFrame","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","expectedFrameTime","numDroppedFramesUntilPause","startGlobalIntersectionObserver","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","frameCount","RUN_EVERY_X_FRAMES","hasRecentSyncWork","updateLayoutIfChanged","layoutOnAnimationFrame2","supportsCheckVisibility","document","body","frameId","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","measureLayout","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","x","y","width","height","left","top","getElementLayoutEventAsync","measureLayoutAsync","Error","a","b","useElementLayout","ref","_ref_current","ensureWebElement","current","host","_ref_current2","node2","add","observe","delete","unobserve","res","nodeType","io","disconnect","boundingClientRect"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","IntersectionState","globalIntersectionObserver","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","LastChangeTime","rAF","window","requestAnimationFrame","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","startGlobalIntersectionObserver","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","layoutOnAnimationFrame","frameCount","RUN_EVERY_X_FRAMES","Number","MAX_SAFE_INTEGER","updateLayoutIfChanged","layoutOnAnimationFrame2","supportsCheckVisibility","document","body","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","measureLayout","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","x","y","width","height","left","top","getElementLayoutEventAsync","measureLayoutAsync","Error","a","b","useElementLayout","ref","_ref_current","ensureWebElement","current","host","_ref_current2","node2","add","observe","delete","unobserve","res","nodeType","io","disconnect","boundingClientRect"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/use-element-layout",
3
- "version": "1.130.3",
3
+ "version": "1.130.5",
4
4
  "types": "./types/index.d.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -31,11 +31,11 @@
31
31
  }
32
32
  },
33
33
  "dependencies": {
34
- "@tamagui/constants": "1.130.3",
35
- "@tamagui/is-equal-shallow": "1.130.3"
34
+ "@tamagui/constants": "1.130.5",
35
+ "@tamagui/is-equal-shallow": "1.130.5"
36
36
  },
37
37
  "devDependencies": {
38
- "@tamagui/build": "1.130.3",
38
+ "@tamagui/build": "1.130.5",
39
39
  "react": "*"
40
40
  },
41
41
  "publishConfig": {
package/src/index.ts CHANGED
@@ -58,9 +58,6 @@ export function enable(): void {
58
58
  }
59
59
  }
60
60
 
61
- const expectedFrameTime = 16.67 // ~60fps
62
- const numDroppedFramesUntilPause = 10
63
-
64
61
  function startGlobalIntersectionObserver() {
65
62
  if (!isClient || globalIntersectionObserver) return
66
63
 
@@ -82,10 +79,8 @@ function startGlobalIntersectionObserver() {
82
79
  if (isClient) {
83
80
  if (rAF) {
84
81
  const supportsCheckVisibility = 'checkVisibility' in document.body
85
- // track frame timing to detect sync work and avoid updates during heavy periods
86
- let lastFrameAt = Date.now()
87
82
 
88
- async function updateLayoutIfChanged(node: HTMLElement, frameId: number) {
83
+ async function updateLayoutIfChanged(node: HTMLElement) {
89
84
  if (IntersectionState.get(node) === false) {
90
85
  // avoid due to not intersecting
91
86
  return
@@ -117,11 +112,6 @@ if (isClient) {
117
112
  return
118
113
  }
119
114
 
120
- // cancel if we skipped a frame
121
- if (frameId !== lastFrameAt) {
122
- return
123
- }
124
-
125
115
  nodeRect = nr
126
116
  parentRect = pr
127
117
  } else {
@@ -154,36 +144,29 @@ if (isClient) {
154
144
  }
155
145
 
156
146
  // note that getBoundingClientRect() does not thrash layout if its after an animation frame
147
+ // ok new note: *if* it needed recalc then yea, but browsers often skip that, so it does
148
+ // which is why we use async strategy in general
157
149
  rAF!(layoutOnAnimationFrame)
158
150
 
159
151
  // only run once in a few frames, this could be adjustable
160
152
  let frameCount = 0
161
- const RUN_EVERY_X_FRAMES = 4
153
+ const RUN_EVERY_X_FRAMES = 8
162
154
 
163
155
  function layoutOnAnimationFrame() {
164
- const now = Date.now()
165
- const timeSinceLastFrame = now - lastFrameAt
166
- lastFrameAt = now
167
-
168
- frameCount++
169
-
170
- if (frameCount % RUN_EVERY_X_FRAMES === 0) {
171
- frameCount = 0
172
- rAF!(layoutOnAnimationFrame)
173
- return
174
- }
175
-
176
156
  if (strategy !== 'off') {
177
- // for both strategies:
178
- // avoid updates if we've been dropping frames (indicates sync work happening)
179
- const hasRecentSyncWork =
180
- timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause
181
-
182
- if (!hasRecentSyncWork) {
183
- Nodes.forEach((node) => {
184
- updateLayoutIfChanged(node, lastFrameAt)
185
- })
157
+ if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
158
+ // skip a few frames to avoid work
159
+ rAF!(layoutOnAnimationFrame)
160
+ return
186
161
  }
162
+
163
+ if (frameCount === Number.MAX_SAFE_INTEGER) {
164
+ frameCount = 0
165
+ }
166
+
167
+ Nodes.forEach((node) => {
168
+ updateLayoutIfChanged(node)
169
+ })
187
170
  }
188
171
 
189
172
  rAF!(layoutOnAnimationFrame)
@@ -297,7 +280,6 @@ export function useElementLayout(
297
280
  const node = ref.current?.host
298
281
  if (!node) return
299
282
 
300
- LayoutHandlers.set(node, onLayout)
301
283
  Nodes.add(node)
302
284
 
303
285
  // Add node to intersection observer
@@ -1,5 +1,5 @@
1
1
  {
2
- "mappings": "AAEA,cAAc,iBAAiB,OAAO;KASjC,+BAA+B;CAClC;AACD;KAEI,4BAA4B,QAAQ,SAAS;AAIlD,OAAO,iBAAS,oBAAoBA,OAAO;AAI3C,YAAY,cAAc;CACxB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,YAAY,cAAc;CACxB,aAAa;EACX,QAAQ;EACR;CACD;CACD;AACD;AAYD,OAAO,iBAAS;AAqJhB,OAAO,cAAM,wBACXC,UAAU,iBACVC,YAAY,oBACX;AAUH,OAAO,cAAM,gBACXC,MAAM,aACNC,YAAY,oBACZC,WACEC,WACAC,WACAC,eACAC,gBACAC,cACAC;AAkBJ,OAAO,cAAM,6BACXC,QAAQ,gBACP,QAAQ;AAcX,OAAO,cAAM,qBACXT,MAAM,aACNU,aAAa,uBACZ,eAAe;AA0BlB,OAAO,iBAAS,iBACdC,KAAK,UAAU,+BACfC,aAAaC,GAAG;AAiFlB,OAAO,cAAM,UAAWb,MAAM,gBAAc",
2
+ "mappings": "AAEA,cAAc,iBAAiB,OAAO;KASjC,+BAA+B;CAClC;AACD;KAEI,4BAA4B,QAAQ,SAAS;AAIlD,OAAO,iBAAS,oBAAoBA,OAAO;AAI3C,YAAY,cAAc;CACxB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,YAAY,cAAc;CACxB,aAAa;EACX,QAAQ;EACR;CACD;CACD;AACD;AAYD,OAAO,iBAAS;AAoIhB,OAAO,cAAM,wBACXC,UAAU,iBACVC,YAAY,oBACX;AAUH,OAAO,cAAM,gBACXC,MAAM,aACNC,YAAY,oBACZC,WACEC,WACAC,WACAC,eACAC,gBACAC,cACAC;AAkBJ,OAAO,cAAM,6BACXC,QAAQ,gBACP,QAAQ;AAcX,OAAO,cAAM,qBACXT,MAAM,aACNU,aAAa,uBACZ,eAAe;AA0BlB,OAAO,iBAAS,iBACdC,KAAK,UAAU,+BACfC,aAAaC,GAAG;AAgFlB,OAAO,cAAM,UAAWb,MAAM,gBAAc",
3
3
  "names": [
4
4
  "state: LayoutMeasurementStrategy",
5
5
  "nodeRect: DOMRectReadOnly",
@@ -23,7 +23,7 @@
23
23
  "src/index.ts"
24
24
  ],
25
25
  "sourcesContent": [
26
- "import { isClient, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport { isEqualShallow } from '@tamagui/is-equal-shallow'\nimport type { RefObject } from 'react'\n\nconst LayoutHandlers = new WeakMap<HTMLElement, Function>()\nconst Nodes = new Set<HTMLElement>()\nconst IntersectionState = new WeakMap<HTMLElement, boolean>()\n\n// Single persistent IntersectionObserver for all nodes\nlet globalIntersectionObserver: IntersectionObserver | null = null\n\ntype TamaguiComponentStatePartial = {\n host?: any\n}\n\ntype LayoutMeasurementStrategy = 'off' | 'sync' | 'async'\n\nlet strategy: LayoutMeasurementStrategy = 'async'\n\nexport function setOnLayoutStrategy(state: LayoutMeasurementStrategy): void {\n strategy = state\n}\n\nexport type LayoutValue = {\n x: number\n y: number\n width: number\n height: number\n left: number\n top: number\n}\n\nexport type LayoutEvent = {\n nativeEvent: {\n layout: LayoutValue\n target: any\n }\n timeStamp: number\n}\n\nconst NodeRectCache = new WeakMap<HTMLElement, DOMRect>()\nconst ParentRectCache = new WeakMap<HTMLElement, DOMRect>()\nconst LastChangeTime = new WeakMap<HTMLElement, number>()\n\nconst rAF = typeof window !== 'undefined' ? window.requestAnimationFrame : undefined\n\n// prevent thrashing during first hydration (somewhat, streaming gets trickier)\nlet avoidUpdates = true\nconst queuedUpdates = new Map<HTMLElement, Function>()\n\nexport function enable(): void {\n if (avoidUpdates) {\n avoidUpdates = false\n if (queuedUpdates) {\n queuedUpdates.forEach((cb) => cb())\n queuedUpdates.clear()\n }\n }\n}\n\nconst expectedFrameTime = 16.67 // ~60fps\nconst numDroppedFramesUntilPause = 10\n\nfunction startGlobalIntersectionObserver() {\n if (!isClient || globalIntersectionObserver) return\n\n globalIntersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const node = entry.target as HTMLElement\n if (IntersectionState.get(node) !== entry.isIntersecting) {\n IntersectionState.set(node, entry.isIntersecting)\n }\n })\n },\n {\n threshold: 0,\n }\n )\n}\n\nif (isClient) {\n if (rAF) {\n const supportsCheckVisibility = 'checkVisibility' in document.body\n // track frame timing to detect sync work and avoid updates during heavy periods\n let lastFrameAt = Date.now()\n\n async function updateLayoutIfChanged(node: HTMLElement, frameId: number) {\n if (IntersectionState.get(node) === false) {\n // avoid due to not intersecting\n return\n }\n // triggers style recalculation in safari which is slower than not\n if (process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === '1') {\n if (supportsCheckVisibility && !(node as any).checkVisibility()) {\n // avoid due to not visible\n return\n }\n }\n\n const onLayout = LayoutHandlers.get(node)\n if (typeof onLayout !== 'function') return\n\n const parentNode = node.parentElement\n if (!parentNode) return\n\n let nodeRect: DOMRectReadOnly\n let parentRect: DOMRectReadOnly\n\n if (strategy === 'async') {\n const [nr, pr] = await Promise.all([\n getBoundingClientRectAsync(node),\n getBoundingClientRectAsync(parentNode),\n ])\n\n if (nr === false || pr === false) {\n return\n }\n\n // cancel if we skipped a frame\n if (frameId !== lastFrameAt) {\n return\n }\n\n nodeRect = nr\n parentRect = pr\n } else {\n nodeRect = node.getBoundingClientRect()\n parentRect = parentNode.getBoundingClientRect()\n }\n\n const cachedRect = NodeRectCache.get(node)\n const cachedParentRect = NodeRectCache.get(parentNode)\n\n if (\n !cachedRect ||\n // has changed one rect\n // @ts-expect-error DOMRectReadOnly can go into object\n (!isEqualShallow(cachedRect, nodeRect) &&\n // @ts-expect-error DOMRectReadOnly can go into object\n (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))\n ) {\n NodeRectCache.set(node, nodeRect)\n ParentRectCache.set(parentNode, parentRect)\n\n const event = getElementLayoutEvent(nodeRect, parentRect)\n\n if (avoidUpdates) {\n queuedUpdates.set(node, () => onLayout(event))\n } else {\n onLayout(event)\n }\n }\n }\n\n // note that getBoundingClientRect() does not thrash layout if its after an animation frame\n rAF!(layoutOnAnimationFrame)\n\n // only run once in a few frames, this could be adjustable\n let frameCount = 0\n const RUN_EVERY_X_FRAMES = 4\n\n function layoutOnAnimationFrame() {\n const now = Date.now()\n const timeSinceLastFrame = now - lastFrameAt\n lastFrameAt = now\n\n frameCount++\n\n if (frameCount % RUN_EVERY_X_FRAMES === 0) {\n frameCount = 0\n rAF!(layoutOnAnimationFrame)\n return\n }\n\n if (strategy !== 'off') {\n // for both strategies:\n // avoid updates if we've been dropping frames (indicates sync work happening)\n const hasRecentSyncWork =\n timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause\n\n if (!hasRecentSyncWork) {\n Nodes.forEach((node) => {\n updateLayoutIfChanged(node, lastFrameAt)\n })\n }\n }\n\n rAF!(layoutOnAnimationFrame)\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n `No requestAnimationFrame - please polyfill for onLayout to work correctly`\n )\n }\n }\n}\n\nexport const getElementLayoutEvent = (\n nodeRect: DOMRectReadOnly,\n parentRect: DOMRectReadOnly\n): LayoutEvent => {\n return {\n nativeEvent: {\n layout: getRelativeDimensions(nodeRect, parentRect),\n target: nodeRect,\n },\n timeStamp: Date.now(),\n }\n}\n\nexport const measureLayout = (\n node: HTMLElement,\n relativeTo: HTMLElement | null,\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => void\n): void => {\n const relativeNode = relativeTo || node?.parentElement\n if (relativeNode instanceof HTMLElement) {\n const nodeDim = node.getBoundingClientRect()\n const relativeNodeDim = relativeNode.getBoundingClientRect()\n\n if (relativeNodeDim && nodeDim) {\n const { x, y, width, height, left, top } = getRelativeDimensions(\n nodeDim,\n relativeNodeDim\n )\n callback(x, y, width, height, left, top)\n }\n }\n}\n\nexport const getElementLayoutEventAsync = async (\n target: HTMLElement\n): Promise<LayoutEvent> => {\n const layout = await measureLayoutAsync(target)\n if (!layout) {\n throw new Error(`‼️`) // impossible\n }\n return {\n nativeEvent: {\n layout,\n target,\n },\n timeStamp: Date.now(),\n }\n}\n\nexport const measureLayoutAsync = async (\n node: HTMLElement,\n relativeTo?: HTMLElement | null\n): Promise<null | LayoutValue> => {\n const relativeNode = relativeTo || node?.parentElement\n if (relativeNode instanceof HTMLElement) {\n const [nodeDim, relativeNodeDim] = await Promise.all([\n getBoundingClientRectAsync(node),\n getBoundingClientRectAsync(relativeNode),\n ])\n\n if (relativeNodeDim && nodeDim) {\n const { x, y, width, height, left, top } = getRelativeDimensions(\n nodeDim,\n relativeNodeDim\n )\n return { x, y, width, height, left, top }\n }\n }\n return null\n}\n\nconst getRelativeDimensions = (a: DOMRectReadOnly, b: DOMRectReadOnly) => {\n const { height, left, top, width } = a\n const x = left - b.left\n const y = top - b.top\n return { x, y, width, height, left, top }\n}\n\nexport function useElementLayout(\n ref: RefObject<TamaguiComponentStatePartial>,\n onLayout?: ((e: LayoutEvent) => void) | null\n): void {\n // ensure always up to date so we can avoid re-running effect\n const node = ensureWebElement(ref.current?.host)\n if (node && onLayout) {\n LayoutHandlers.set(node, onLayout)\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!onLayout) return\n const node = ref.current?.host\n if (!node) return\n\n LayoutHandlers.set(node, onLayout)\n Nodes.add(node)\n\n // Add node to intersection observer\n startGlobalIntersectionObserver()\n if (globalIntersectionObserver) {\n globalIntersectionObserver.observe(node)\n // Initialize as intersecting by default\n IntersectionState.set(node, true)\n }\n\n // always do one immediate sync layout event no matter the strategy for accuracy\n const parentNode = node.parentNode\n if (parentNode) {\n onLayout(\n getElementLayoutEvent(\n node.getBoundingClientRect(),\n parentNode.getBoundingClientRect()\n )\n )\n }\n\n return () => {\n Nodes.delete(node)\n LayoutHandlers.delete(node)\n NodeRectCache.delete(node)\n LastChangeTime.delete(node)\n IntersectionState.delete(node)\n\n // Remove from intersection observer\n if (globalIntersectionObserver) {\n globalIntersectionObserver.unobserve(node)\n }\n }\n }, [ref, !!onLayout])\n}\n\nfunction ensureWebElement<X>(x: X): HTMLElement | undefined {\n if (typeof HTMLElement === 'undefined') {\n return undefined\n }\n return x instanceof HTMLElement ? x : undefined\n}\n\nconst getBoundingClientRectAsync = (\n node: HTMLElement | null\n): Promise<DOMRectReadOnly | false> => {\n return new Promise<DOMRectReadOnly | false>((res) => {\n if (!node || node.nodeType !== 1) return res(false)\n\n const io = new IntersectionObserver(\n (entries) => {\n io.disconnect()\n return res(entries[0].boundingClientRect)\n },\n {\n threshold: 0,\n }\n )\n io.observe(node)\n })\n}\n\nconst getBoundingClientRect = (node: HTMLElement | null): undefined | DOMRect => {\n if (!node || node.nodeType !== 1) return\n return node.getBoundingClientRect?.()\n}\n\nexport const getRect = (node: HTMLElement): LayoutValue | undefined => {\n const rect = getBoundingClientRect(node)\n if (!rect) return\n const { x, y, top, left } = rect\n return { x, y, width: node.offsetWidth, height: node.offsetHeight, top, left }\n}\n"
26
+ "import { isClient, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport { isEqualShallow } from '@tamagui/is-equal-shallow'\nimport type { RefObject } from 'react'\n\nconst LayoutHandlers = new WeakMap<HTMLElement, Function>()\nconst Nodes = new Set<HTMLElement>()\nconst IntersectionState = new WeakMap<HTMLElement, boolean>()\n\n// Single persistent IntersectionObserver for all nodes\nlet globalIntersectionObserver: IntersectionObserver | null = null\n\ntype TamaguiComponentStatePartial = {\n host?: any\n}\n\ntype LayoutMeasurementStrategy = 'off' | 'sync' | 'async'\n\nlet strategy: LayoutMeasurementStrategy = 'async'\n\nexport function setOnLayoutStrategy(state: LayoutMeasurementStrategy): void {\n strategy = state\n}\n\nexport type LayoutValue = {\n x: number\n y: number\n width: number\n height: number\n left: number\n top: number\n}\n\nexport type LayoutEvent = {\n nativeEvent: {\n layout: LayoutValue\n target: any\n }\n timeStamp: number\n}\n\nconst NodeRectCache = new WeakMap<HTMLElement, DOMRect>()\nconst ParentRectCache = new WeakMap<HTMLElement, DOMRect>()\nconst LastChangeTime = new WeakMap<HTMLElement, number>()\n\nconst rAF = typeof window !== 'undefined' ? window.requestAnimationFrame : undefined\n\n// prevent thrashing during first hydration (somewhat, streaming gets trickier)\nlet avoidUpdates = true\nconst queuedUpdates = new Map<HTMLElement, Function>()\n\nexport function enable(): void {\n if (avoidUpdates) {\n avoidUpdates = false\n if (queuedUpdates) {\n queuedUpdates.forEach((cb) => cb())\n queuedUpdates.clear()\n }\n }\n}\n\nfunction startGlobalIntersectionObserver() {\n if (!isClient || globalIntersectionObserver) return\n\n globalIntersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const node = entry.target as HTMLElement\n if (IntersectionState.get(node) !== entry.isIntersecting) {\n IntersectionState.set(node, entry.isIntersecting)\n }\n })\n },\n {\n threshold: 0,\n }\n )\n}\n\nif (isClient) {\n if (rAF) {\n const supportsCheckVisibility = 'checkVisibility' in document.body\n\n async function updateLayoutIfChanged(node: HTMLElement) {\n if (IntersectionState.get(node) === false) {\n // avoid due to not intersecting\n return\n }\n // triggers style recalculation in safari which is slower than not\n if (process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === '1') {\n if (supportsCheckVisibility && !(node as any).checkVisibility()) {\n // avoid due to not visible\n return\n }\n }\n\n const onLayout = LayoutHandlers.get(node)\n if (typeof onLayout !== 'function') return\n\n const parentNode = node.parentElement\n if (!parentNode) return\n\n let nodeRect: DOMRectReadOnly\n let parentRect: DOMRectReadOnly\n\n if (strategy === 'async') {\n const [nr, pr] = await Promise.all([\n getBoundingClientRectAsync(node),\n getBoundingClientRectAsync(parentNode),\n ])\n\n if (nr === false || pr === false) {\n return\n }\n\n nodeRect = nr\n parentRect = pr\n } else {\n nodeRect = node.getBoundingClientRect()\n parentRect = parentNode.getBoundingClientRect()\n }\n\n const cachedRect = NodeRectCache.get(node)\n const cachedParentRect = NodeRectCache.get(parentNode)\n\n if (\n !cachedRect ||\n // has changed one rect\n // @ts-expect-error DOMRectReadOnly can go into object\n (!isEqualShallow(cachedRect, nodeRect) &&\n // @ts-expect-error DOMRectReadOnly can go into object\n (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))\n ) {\n NodeRectCache.set(node, nodeRect)\n ParentRectCache.set(parentNode, parentRect)\n\n const event = getElementLayoutEvent(nodeRect, parentRect)\n\n if (avoidUpdates) {\n queuedUpdates.set(node, () => onLayout(event))\n } else {\n onLayout(event)\n }\n }\n }\n\n // note that getBoundingClientRect() does not thrash layout if its after an animation frame\n // ok new note: *if* it needed recalc then yea, but browsers often skip that, so it does\n // which is why we use async strategy in general\n rAF!(layoutOnAnimationFrame)\n\n // only run once in a few frames, this could be adjustable\n let frameCount = 0\n const RUN_EVERY_X_FRAMES = 8\n\n function layoutOnAnimationFrame() {\n if (strategy !== 'off') {\n if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {\n // skip a few frames to avoid work\n rAF!(layoutOnAnimationFrame)\n return\n }\n\n if (frameCount === Number.MAX_SAFE_INTEGER) {\n frameCount = 0\n }\n\n Nodes.forEach((node) => {\n updateLayoutIfChanged(node)\n })\n }\n\n rAF!(layoutOnAnimationFrame)\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n `No requestAnimationFrame - please polyfill for onLayout to work correctly`\n )\n }\n }\n}\n\nexport const getElementLayoutEvent = (\n nodeRect: DOMRectReadOnly,\n parentRect: DOMRectReadOnly\n): LayoutEvent => {\n return {\n nativeEvent: {\n layout: getRelativeDimensions(nodeRect, parentRect),\n target: nodeRect,\n },\n timeStamp: Date.now(),\n }\n}\n\nexport const measureLayout = (\n node: HTMLElement,\n relativeTo: HTMLElement | null,\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n left: number,\n top: number\n ) => void\n): void => {\n const relativeNode = relativeTo || node?.parentElement\n if (relativeNode instanceof HTMLElement) {\n const nodeDim = node.getBoundingClientRect()\n const relativeNodeDim = relativeNode.getBoundingClientRect()\n\n if (relativeNodeDim && nodeDim) {\n const { x, y, width, height, left, top } = getRelativeDimensions(\n nodeDim,\n relativeNodeDim\n )\n callback(x, y, width, height, left, top)\n }\n }\n}\n\nexport const getElementLayoutEventAsync = async (\n target: HTMLElement\n): Promise<LayoutEvent> => {\n const layout = await measureLayoutAsync(target)\n if (!layout) {\n throw new Error(`‼️`) // impossible\n }\n return {\n nativeEvent: {\n layout,\n target,\n },\n timeStamp: Date.now(),\n }\n}\n\nexport const measureLayoutAsync = async (\n node: HTMLElement,\n relativeTo?: HTMLElement | null\n): Promise<null | LayoutValue> => {\n const relativeNode = relativeTo || node?.parentElement\n if (relativeNode instanceof HTMLElement) {\n const [nodeDim, relativeNodeDim] = await Promise.all([\n getBoundingClientRectAsync(node),\n getBoundingClientRectAsync(relativeNode),\n ])\n\n if (relativeNodeDim && nodeDim) {\n const { x, y, width, height, left, top } = getRelativeDimensions(\n nodeDim,\n relativeNodeDim\n )\n return { x, y, width, height, left, top }\n }\n }\n return null\n}\n\nconst getRelativeDimensions = (a: DOMRectReadOnly, b: DOMRectReadOnly) => {\n const { height, left, top, width } = a\n const x = left - b.left\n const y = top - b.top\n return { x, y, width, height, left, top }\n}\n\nexport function useElementLayout(\n ref: RefObject<TamaguiComponentStatePartial>,\n onLayout?: ((e: LayoutEvent) => void) | null\n): void {\n // ensure always up to date so we can avoid re-running effect\n const node = ensureWebElement(ref.current?.host)\n if (node && onLayout) {\n LayoutHandlers.set(node, onLayout)\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!onLayout) return\n const node = ref.current?.host\n if (!node) return\n\n Nodes.add(node)\n\n // Add node to intersection observer\n startGlobalIntersectionObserver()\n if (globalIntersectionObserver) {\n globalIntersectionObserver.observe(node)\n // Initialize as intersecting by default\n IntersectionState.set(node, true)\n }\n\n // always do one immediate sync layout event no matter the strategy for accuracy\n const parentNode = node.parentNode\n if (parentNode) {\n onLayout(\n getElementLayoutEvent(\n node.getBoundingClientRect(),\n parentNode.getBoundingClientRect()\n )\n )\n }\n\n return () => {\n Nodes.delete(node)\n LayoutHandlers.delete(node)\n NodeRectCache.delete(node)\n LastChangeTime.delete(node)\n IntersectionState.delete(node)\n\n // Remove from intersection observer\n if (globalIntersectionObserver) {\n globalIntersectionObserver.unobserve(node)\n }\n }\n }, [ref, !!onLayout])\n}\n\nfunction ensureWebElement<X>(x: X): HTMLElement | undefined {\n if (typeof HTMLElement === 'undefined') {\n return undefined\n }\n return x instanceof HTMLElement ? x : undefined\n}\n\nconst getBoundingClientRectAsync = (\n node: HTMLElement | null\n): Promise<DOMRectReadOnly | false> => {\n return new Promise<DOMRectReadOnly | false>((res) => {\n if (!node || node.nodeType !== 1) return res(false)\n\n const io = new IntersectionObserver(\n (entries) => {\n io.disconnect()\n return res(entries[0].boundingClientRect)\n },\n {\n threshold: 0,\n }\n )\n io.observe(node)\n })\n}\n\nconst getBoundingClientRect = (node: HTMLElement | null): undefined | DOMRect => {\n if (!node || node.nodeType !== 1) return\n return node.getBoundingClientRect?.()\n}\n\nexport const getRect = (node: HTMLElement): LayoutValue | undefined => {\n const rect = getBoundingClientRect(node)\n if (!rect) return\n const { x, y, top, left } = rect\n return { x, y, width: node.offsetWidth, height: node.offsetHeight, top, left }\n}\n"
27
27
  ],
28
28
  "version": 3
29
29
  }