@tamagui/use-element-layout 1.132.2 → 1.132.3

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.
@@ -64,19 +64,8 @@ function startGlobalObservers() {
64
64
  }));
65
65
  }
66
66
  if (import_constants.isClient) if (rAF) {
67
- let layoutOnAnimationFrame = function () {
68
- if (strategy !== "off") {
69
- if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
70
- rAF(layoutOnAnimationFrame);
71
- return;
72
- }
73
- frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach(node => {
74
- updateLayoutIfChanged(node);
75
- });
76
- }
77
- rAF(layoutOnAnimationFrame);
78
- };
79
- const supportsCheckVisibility = "checkVisibility" in document.body;
67
+ const supportsCheckVisibility = "checkVisibility" in document.body,
68
+ BoundingRects = /* @__PURE__ */new WeakMap();
80
69
  async function updateLayoutIfChanged(node) {
81
70
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility()) return;
82
71
  const onLayout = LayoutHandlers.get(node);
@@ -85,7 +74,7 @@ if (import_constants.isClient) if (rAF) {
85
74
  if (!parentNode) return;
86
75
  let nodeRect, parentRect;
87
76
  if (strategy === "async") {
88
- const [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
77
+ const [nr, pr] = await Promise.all([BoundingRects.get(node) || getBoundingClientRectAsync(node), BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)]);
89
78
  if (nr === !1 || pr === !1) return;
90
79
  nodeRect = nr, parentRect = pr;
91
80
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
@@ -106,6 +95,27 @@ if (import_constants.isClient) if (rAF) {
106
95
  let frameCount = 0;
107
96
  const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP,
108
97
  RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
98
+ async function layoutOnAnimationFrame() {
99
+ if (strategy !== "off") {
100
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
101
+ rAF(layoutOnAnimationFrame);
102
+ return;
103
+ }
104
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise(res => {
105
+ const io = new IntersectionObserver(entries => {
106
+ io.disconnect();
107
+ for (const entry of entries) BoundingRects.set(entry.target, entry.boundingClientRect);
108
+ res();
109
+ }, {
110
+ threshold: 0
111
+ });
112
+ for (const node of Nodes) node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
113
+ }), Nodes.forEach(node => {
114
+ updateLayoutIfChanged(node);
115
+ });
116
+ }
117
+ rAF(layoutOnAnimationFrame);
118
+ }
109
119
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
110
120
  const getElementLayoutEvent = (nodeRect, parentRect) => ({
111
121
  nativeEvent: {
package/dist/cjs/index.js CHANGED
@@ -55,19 +55,7 @@ function startGlobalObservers() {
55
55
  }
56
56
  if (import_constants.isClient)
57
57
  if (rAF) {
58
- let layoutOnAnimationFrame = function() {
59
- if (strategy !== "off") {
60
- if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
61
- rAF(layoutOnAnimationFrame);
62
- return;
63
- }
64
- frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), Nodes.forEach((node) => {
65
- updateLayoutIfChanged(node);
66
- });
67
- }
68
- rAF(layoutOnAnimationFrame);
69
- };
70
- const supportsCheckVisibility = "checkVisibility" in document.body;
58
+ const supportsCheckVisibility = "checkVisibility" in document.body, BoundingRects = /* @__PURE__ */ new WeakMap();
71
59
  async function updateLayoutIfChanged(node) {
72
60
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())
73
61
  return;
@@ -78,8 +66,8 @@ if (import_constants.isClient)
78
66
  let nodeRect, parentRect;
79
67
  if (strategy === "async") {
80
68
  const [nr, pr] = await Promise.all([
81
- getBoundingClientRectAsync(node),
82
- getBoundingClientRectAsync(parentNode)
69
+ BoundingRects.get(node) || getBoundingClientRectAsync(node),
70
+ BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)
83
71
  ]);
84
72
  if (nr === !1 || pr === !1)
85
73
  return;
@@ -99,6 +87,32 @@ if (import_constants.isClient)
99
87
  rAF(layoutOnAnimationFrame);
100
88
  let frameCount = 0;
101
89
  const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP, RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
90
+ async function layoutOnAnimationFrame() {
91
+ if (strategy !== "off") {
92
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
93
+ rAF(layoutOnAnimationFrame);
94
+ return;
95
+ }
96
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise((res) => {
97
+ const io = new IntersectionObserver(
98
+ (entries) => {
99
+ io.disconnect();
100
+ for (const entry of entries)
101
+ BoundingRects.set(entry.target, entry.boundingClientRect);
102
+ res();
103
+ },
104
+ {
105
+ threshold: 0
106
+ }
107
+ );
108
+ for (const node of Nodes)
109
+ node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
110
+ }), Nodes.forEach((node) => {
111
+ updateLayoutIfChanged(node);
112
+ });
113
+ }
114
+ rAF(layoutOnAnimationFrame);
115
+ }
102
116
  } else
103
117
  process.env.NODE_ENV === "development" && console.warn(
104
118
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
@@ -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
  }
@@ -51,19 +51,7 @@ function startGlobalObservers() {
51
51
  }
52
52
  if (import_constants.isClient)
53
53
  if (rAF) {
54
- let layoutOnAnimationFrame = function() {
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(function(node) {
61
- updateLayoutIfChanged(node);
62
- });
63
- }
64
- rAF(layoutOnAnimationFrame);
65
- };
66
- var layoutOnAnimationFrame2 = layoutOnAnimationFrame, supportsCheckVisibility = "checkVisibility" in document.body;
54
+ var supportsCheckVisibility = "checkVisibility" in document.body, BoundingRects = /* @__PURE__ */ new WeakMap();
67
55
  async function updateLayoutIfChanged(node) {
68
56
  if (IntersectionState.get(node) !== !1 && !(process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())) {
69
57
  var onLayout = LayoutHandlers.get(node);
@@ -73,8 +61,8 @@ if (import_constants.isClient)
73
61
  var nodeRect, parentRect;
74
62
  if (strategy === "async") {
75
63
  var [nr, pr] = await Promise.all([
76
- getBoundingClientRectAsync(node),
77
- getBoundingClientRectAsync(parentNode)
64
+ BoundingRects.get(node) || getBoundingClientRectAsync(node),
65
+ BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)
78
66
  ]);
79
67
  if (nr === !1 || pr === !1)
80
68
  return;
@@ -98,6 +86,56 @@ if (import_constants.isClient)
98
86
  }
99
87
  rAF(layoutOnAnimationFrame);
100
88
  var frameCount = 0, userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP, RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
89
+ async function layoutOnAnimationFrame() {
90
+ if (strategy !== "off") {
91
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
92
+ rAF(layoutOnAnimationFrame);
93
+ return;
94
+ }
95
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise(function(res) {
96
+ var io = new IntersectionObserver(function(entries) {
97
+ io.disconnect();
98
+ var _iteratorNormalCompletion2 = !0, _didIteratorError2 = !1, _iteratorError2 = void 0;
99
+ try {
100
+ for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
101
+ var entry = _step2.value;
102
+ BoundingRects.set(entry.target, entry.boundingClientRect);
103
+ }
104
+ } catch (err) {
105
+ _didIteratorError2 = !0, _iteratorError2 = err;
106
+ } finally {
107
+ try {
108
+ !_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
109
+ } finally {
110
+ if (_didIteratorError2)
111
+ throw _iteratorError2;
112
+ }
113
+ }
114
+ res();
115
+ }, {
116
+ threshold: 0
117
+ }), _iteratorNormalCompletion = !0, _didIteratorError = !1, _iteratorError = void 0;
118
+ try {
119
+ for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
120
+ var node = _step.value;
121
+ node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
122
+ }
123
+ } catch (err) {
124
+ _didIteratorError = !0, _iteratorError = err;
125
+ } finally {
126
+ try {
127
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
128
+ } finally {
129
+ if (_didIteratorError)
130
+ throw _iteratorError;
131
+ }
132
+ }
133
+ }), Nodes.forEach(function(node) {
134
+ updateLayoutIfChanged(node);
135
+ });
136
+ }
137
+ rAF(layoutOnAnimationFrame);
138
+ }
101
139
  } else
102
140
  process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
103
141
  var getElementLayoutEvent = function(nodeRect, parentRect) {
@@ -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,SAASC,uBAAAA;AACP,EAAI,CAACC,6BAAYnB,+BAEjBA,6BAA6B,IAAIoB,qBAC/B,SAACC,SAAAA;AACCA,YAAQN,QAAQ,SAACO,OAAAA;AACf,UAAMC,OAAOD,MAAME;AACnB,MAAIzB,kBAAkB0B,IAAIF,IAAAA,MAAUD,MAAMI,kBACxC3B,kBAAkB4B,IAAIJ,MAAMD,MAAMI,cAAc;IAEpD,CAAA;EACF,GACA;IACEE,WAAW;EACb,CAAA;AAEJ;AAEA,IAAIT;AACF,MAAIZ,KAAK;AA6EP,QAASsB,yBAAT,WAASA;AACP,UAAI5B,aAAa,OAAO;AACtB,YAAI6B,eAAeC,uBAAuB,GAAG;AAE3CxB,cAAKsB,sBAAAA;AACL;QACF;AAEA,QAAIC,eAAeE,OAAOC,qBACxBH,aAAa,IAGfjC,MAAMkB,QAAQ,SAACQ,MAAAA;AACbW,gCAAsBX,IAAAA;QACxB,CAAA;MACF;AAEAhB,UAAKsB,sBAAAA;IACP;AAlBSA,QAAAA,0BAAAA,wBA5EHM,0BAA0B,qBAAqBC,SAASC;AAE9D,mBAAeH,sBAAsBX,MAAiB;AACpD,UAAIxB,kBAAkB0B,IAAIF,IAAAA,MAAU,MAKhCe,UAAQC,IAAIC,sCAAsC,OAChDL,2BAA2B,CAAEZ,KAAakB,gBAAe,IAM/D;YAAMC,WAAW/C,eAAe8B,IAAIF,IAAAA;AACpC,YAAI,OAAOmB,YAAa,YAExB;cAAMC,aAAapB,KAAKqB;AACxB,cAAKD,YAEL;gBAAIE,UACAC;AAEJ,gBAAI7C,aAAa,SAAS;AACxB,kBAAM,CAAC8C,IAAIC,EAAAA,IAAM,MAAMC,QAAQC,IAAI;gBACjCC,2BAA2B5B,IAAAA;gBAC3B4B,2BAA2BR,UAAAA;eAC5B;AAED,kBAAII,OAAO,MAASC,OAAO;AACzB;AAGFH,yBAAWE,IACXD,aAAaE;YACf;AACEH,yBAAWtB,KAAK6B,sBAAqB,GACrCN,aAAaH,WAAWS,sBAAqB;AAG/C,gBAAMC,aAAajD,cAAcqB,IAAIF,IAAAA,GAC/B+B,mBAAmBlD,cAAcqB,IAAIkB,UAAAA;AAE3C,gBACE,CAACU;;YAGA,KAACE,wCAAeF,YAAYR,QAAAA;aAE1B,CAACS,oBAAoB,KAACC,wCAAeD,kBAAkBR,UAAAA,IAC1D;AACA1C,4BAAcuB,IAAIJ,MAAMsB,QAAAA,GACxBxC,gBAAgBsB,IAAIgB,YAAYG,UAAAA;AAEhC,kBAAMU,QAAQC,sBAAsBZ,UAAUC,UAAAA;AAE9C,cAAInC,eACFC,cAAce,IAAIJ,MAAM,WAAA;uBAAMmB,SAASc,KAAAA;mBAEvCd,SAASc,KAAAA;YAEb;;;;IACF;AAKAjD,QAAKsB,sBAAAA;AAGL,QAAIC,aAAa,GAEX4B,cAAcpB,QAAQC,IAAIoB,2BAC1B5B,qBAAqB2B,cAAc,CAACA,cAAc;EAqB1D;AACE,IAAIpB,QAAQC,IAAIqB,aAAa,iBAC3BC,QAAQC,KACN,2EAA2E;AAM5E,IAAML,wBAAwB,SACnCZ,UACAC,YAAAA;AAEA,SAAO;IACLiB,aAAa;MACXC,QAAQC,sBAAsBpB,UAAUC,UAAAA;MACxCtB,QAAQqB;IACV;IACAqB,WAAWC,KAAKC,IAAG;EACrB;AACF,GAEMH,wBAAwB,SAACI,GAAoBC,GAAAA;AACjD,MAAM,EAAEC,QAAQC,MAAMC,KAAKC,MAAK,IAAKL,GAC/BM,IAAIH,OAAOF,EAAEE,MACbI,IAAIH,MAAMH,EAAEG;AAClB,SAAO;IAAEE;IAAGC;IAAGF;IAAOH;IAAQM,OAAOR,EAAEG;IAAMM,OAAOT,EAAEI;EAAI;AAC5D;AAEO,SAASM,iBACdC,KACAtC,UAA4C;MAGdsC,cAAxBzD,OAAO0D,kBAAiBD,eAAAA,IAAIE,aAAO,QAAXF,iBAAAA,SAAAA,SAAAA,aAAaG,IAAI;AAC/C,EAAI5D,QAAQmB,YACV/C,eAAegC,IAAIJ,MAAMmB,QAAAA,OAG3B0C,4CAA0B,WAAA;QAEXJ;AADb,QAAKtC,UACL;UAAMnB,SAAOyD,gBAAAA,IAAIE,aAAO,QAAXF,kBAAAA,SAAAA,SAAAA,cAAaG;AAC1B,UAAK5D,OAEL1B;cAAMwF,IAAI9D,KAAAA,GAGVL,qBAAAA,GACIlB,+BACFA,2BAA2BsF,QAAQ/D,KAAAA,GAEnCxB,kBAAkB4B,IAAIJ,OAAM,EAAA;AAI9B,YAAMoB,aAAapB,MAAKoB;AACxB,eAAIA,cACFD,SACEe,sBACElC,MAAK6B,sBAAqB,GAC1BT,WAAWS,sBAAqB,CAAA,CAAA,GAK/B,WAAA;AACLvD,gBAAM0F,OAAOhE,KAAAA,GACb5B,eAAe4F,OAAOhE,KAAAA,GACtBnB,cAAcmF,OAAOhE,KAAAA,GACrBjB,eAAeiF,OAAOhE,KAAAA,GACtBxB,kBAAkBwF,OAAOhE,KAAAA,GAGrBvB,8BACFA,2BAA2BwF,UAAUjE,KAAAA;QAEzC;;;EACF,GAAG;IAACyD;IAAK,CAAC,CAACtC;GAAS;AACtB;AAEA,SAASuC,iBAAoBN,GAAI;AAC/B,MAAI,SAAOc,cAAgB;AAG3B,WAAOd,aAAac,cAAcd,IAAIjE;AACxC;AAEO,IAAMyC,6BAA6B,SACxC5B,MAAAA;AAEA,SAAO,IAAI0B,QAAiC,SAACyC,KAAAA;AAC3C,QAAI,CAACnE,QAAQA,KAAKoE,aAAa,EAAG,QAAOD,IAAI,EAAA;AAE7C,QAAME,KAAK,IAAIxE,qBACb,SAACC,SAAAA;AACCuE,gBAAGC,WAAU,GACNH,IAAIrE,QAAQ,CAAA,EAAGyE,kBAAkB;IAC1C,GACA;MACElE,WAAW;IACb,CAAA;AAEFgE,OAAGN,QAAQ/D,IAAAA;EACb,CAAA;AACF,GAEawE,cAAc,eACzBxE,MACAyE,YAAAA;AAEA,MAAMC,eAAeD,eAAczE,QAAAA,OAAAA,SAAAA,KAAMqB;AACzC,MAAIqD,wBAAwBR,aAAa;AACvC,QAAM,CAACS,SAASC,eAAAA,IAAmB,MAAMlD,QAAQC,IAAI;MACnDC,2BAA2B5B,IAAAA;MAC3B4B,2BAA2B8C,YAAAA;KAC5B;AACD,QAAIE,mBAAmBD;AACrB,aAAOjC,sBAAsBiC,SAASC,eAAAA;EAE1C;AACA,SAAO;AACT,GAaaC,UAAU,eACrB7E,MACA8E,UAAAA;AAEA,MAAMC,MAAM,MAAMP,YAChBxE,MACAA,KAAKoB,sBAAsB8C,cAAclE,KAAKoB,aAAa,IAAA;AAE7D,SAAI2D,QACFD,YAAAA,QAAAA,SAAWC,IAAI3B,GAAG2B,IAAI1B,GAAG0B,IAAI5B,OAAO4B,IAAI/B,QAAQ+B,IAAIzB,OAAOyB,IAAIxB,KAAK,IAE/DwB;AACT;AAEO,SAASC,cACdhF,MAAiB;AAEjB,SAAO,SAAC8E,UAAAA;WAAaD,QAAQ7E,MAAM8E,QAAAA;;AACrC;AAIO,IAAMG,kBAAkB,eAC7BjF,MACA8E,UAAAA;AAEA,MAAMC,MAAM,MAAMP,YAAYxE,MAAM,IAAA;AACpC,SAAI+E,QACFD,YAAAA,QAAAA,SAAWC,IAAIzB,OAAOyB,IAAIxB,OAAOwB,IAAI5B,OAAO4B,IAAI/B,MAAM,IAEjD+B;AACT,GAEaG,wBAAwB,SACnClF,MAAAA;AAEA,SAAO,SAAC8E,UAAAA;WAAaG,gBAAgBjF,MAAM8E,QAAAA;;AAC7C,GAEaK,gBAAgB,eAC3BnF,MACA0E,cACAI,UAAAA;AAEA,MAAMC,MAAM,MAAMP,YAAYxE,MAAM0E,YAAAA;AACpC,SAAIK,QACFD,YAAAA,QAAAA,SAAWC,IAAI3B,GAAG2B,IAAI1B,GAAG0B,IAAI5B,OAAO4B,IAAI/B,QAAQ+B,IAAIzB,OAAOyB,IAAIxB,KAAK,IAE/DwB;AACT;AAEO,SAASK,oBACdpF,MAAiB;AAEjB,SAAO,SAACyE,YAAYK,UAAAA;WAAaK,cAAcnF,MAAMyE,YAAYK,QAAAA;;AACnE;",
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", "startGlobalObservers", "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", "userSkipVal", "TAMAGUI_LAYOUT_FRAME_SKIP", "NODE_ENV", "console", "warn", "nativeEvent", "layout", "getRelativeDimensions", "timeStamp", "Date", "now", "a", "b", "height", "left", "top", "width", "x", "y", "pageX", "pageY", "useElementLayout", "ref", "ensureWebElement", "current", "host", "useIsomorphicLayoutEffect", "add", "observe", "delete", "unobserve", "HTMLElement", "res", "nodeType", "io", "disconnect", "boundingClientRect", "measureNode", "relativeTo", "relativeNode", "nodeDim", "relativeNodeDim", "measure", "callback", "out", "createMeasure", "measureInWindow", "createMeasureInWindow", "measureLayout", "createMeasureLayout"]
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", "startGlobalObservers", "isClient", "IntersectionObserver", "entries", "entry", "node", "target", "get", "isIntersecting", "set", "threshold", "supportsCheckVisibility", "document", "body", "BoundingRects", "updateLayoutIfChanged", "process", "env", "TAMAGUI_ONLAYOUT_VISIBILITY_CHECK", "checkVisibility", "onLayout", "parentNode", "parentElement", "nodeRect", "parentRect", "nr", "pr", "Promise", "all", "getBoundingClientRectAsync", "getBoundingClientRect", "cachedRect", "cachedParentRect", "isEqualShallow", "event", "getElementLayoutEvent", "layoutOnAnimationFrame", "frameCount", "userSkipVal", "TAMAGUI_LAYOUT_FRAME_SKIP", "RUN_EVERY_X_FRAMES", "size", "Number", "MAX_SAFE_INTEGER", "res", "io", "disconnect", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "_iterator", "_step", "boundingClientRect", "HTMLElement", "observe", "NODE_ENV", "console", "warn", "nativeEvent", "layout", "getRelativeDimensions", "timeStamp", "Date", "now", "a", "b", "height", "left", "top", "width", "x", "y", "pageX", "pageY", "useElementLayout", "ref", "ensureWebElement", "current", "host", "useIsomorphicLayoutEffect", "add", "delete", "unobserve", "nodeType", "measureNode", "relativeTo", "relativeNode", "nodeDim", "relativeNodeDim", "measure", "callback", "out", "createMeasure", "measureInWindow", "createMeasureInWindow", "measureLayout", "createMeasureLayout"]
6
6
  }
package/dist/esm/index.js CHANGED
@@ -26,19 +26,7 @@ function startGlobalObservers() {
26
26
  }
27
27
  if (isClient)
28
28
  if (rAF) {
29
- let layoutOnAnimationFrame = function() {
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
- });
38
- }
39
- rAF(layoutOnAnimationFrame);
40
- };
41
- const supportsCheckVisibility = "checkVisibility" in document.body;
29
+ const supportsCheckVisibility = "checkVisibility" in document.body, BoundingRects = /* @__PURE__ */ new WeakMap();
42
30
  async function updateLayoutIfChanged(node) {
43
31
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())
44
32
  return;
@@ -49,8 +37,8 @@ if (isClient)
49
37
  let nodeRect, parentRect;
50
38
  if (strategy === "async") {
51
39
  const [nr, pr] = await Promise.all([
52
- getBoundingClientRectAsync(node),
53
- getBoundingClientRectAsync(parentNode)
40
+ BoundingRects.get(node) || getBoundingClientRectAsync(node),
41
+ BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)
54
42
  ]);
55
43
  if (nr === !1 || pr === !1)
56
44
  return;
@@ -70,6 +58,32 @@ if (isClient)
70
58
  rAF(layoutOnAnimationFrame);
71
59
  let frameCount = 0;
72
60
  const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP, RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
61
+ async function layoutOnAnimationFrame() {
62
+ if (strategy !== "off") {
63
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
64
+ rAF(layoutOnAnimationFrame);
65
+ return;
66
+ }
67
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise((res) => {
68
+ const io = new IntersectionObserver(
69
+ (entries) => {
70
+ io.disconnect();
71
+ for (const entry of entries)
72
+ BoundingRects.set(entry.target, entry.boundingClientRect);
73
+ res();
74
+ },
75
+ {
76
+ threshold: 0
77
+ }
78
+ );
79
+ for (const node of Nodes)
80
+ node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
81
+ }), Nodes.forEach((node) => {
82
+ updateLayoutIfChanged(node);
83
+ });
84
+ }
85
+ rAF(layoutOnAnimationFrame);
86
+ }
73
87
  } else
74
88
  process.env.NODE_ENV === "development" && console.warn(
75
89
  "No requestAnimationFrame - please polyfill for onLayout to work correctly"
@@ -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
  }
@@ -28,19 +28,8 @@ function startGlobalObservers() {
28
28
  }));
29
29
  }
30
30
  if (isClient) if (rAF) {
31
- let layoutOnAnimationFrame = function () {
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
- });
40
- }
41
- rAF(layoutOnAnimationFrame);
42
- };
43
- const supportsCheckVisibility = "checkVisibility" in document.body;
31
+ const supportsCheckVisibility = "checkVisibility" in document.body,
32
+ BoundingRects = /* @__PURE__ */new WeakMap();
44
33
  async function updateLayoutIfChanged(node) {
45
34
  if (IntersectionState.get(node) === !1 || process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility()) return;
46
35
  const onLayout = LayoutHandlers.get(node);
@@ -49,7 +38,7 @@ if (isClient) if (rAF) {
49
38
  if (!parentNode) return;
50
39
  let nodeRect, parentRect;
51
40
  if (strategy === "async") {
52
- const [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
41
+ const [nr, pr] = await Promise.all([BoundingRects.get(node) || getBoundingClientRectAsync(node), BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)]);
53
42
  if (nr === !1 || pr === !1) return;
54
43
  nodeRect = nr, parentRect = pr;
55
44
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
@@ -70,6 +59,27 @@ if (isClient) if (rAF) {
70
59
  let frameCount = 0;
71
60
  const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP,
72
61
  RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
62
+ async function layoutOnAnimationFrame() {
63
+ if (strategy !== "off") {
64
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
65
+ rAF(layoutOnAnimationFrame);
66
+ return;
67
+ }
68
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise(res => {
69
+ const io = new IntersectionObserver(entries => {
70
+ io.disconnect();
71
+ for (const entry of entries) BoundingRects.set(entry.target, entry.boundingClientRect);
72
+ res();
73
+ }, {
74
+ threshold: 0
75
+ });
76
+ for (const node of Nodes) node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
77
+ }), Nodes.forEach(node => {
78
+ updateLayoutIfChanged(node);
79
+ });
80
+ }
81
+ rAF(layoutOnAnimationFrame);
82
+ }
73
83
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
74
84
  const getElementLayoutEvent = (nodeRect, parentRect) => ({
75
85
  nativeEvent: {
@@ -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","startGlobalObservers","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","userSkipVal","TAMAGUI_LAYOUT_FRAME_SKIP","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","a","b","height","left","top","width","x","y","pageX","pageY","useElementLayout","ref","ensureWebElement","current","host","node2","add","observe","delete","unobserve","HTMLElement","res","nodeType","io","disconnect","boundingClientRect","measureNode","relativeTo","relativeNode","nodeDim","relativeNodeDim","measure","callback","out","createMeasure","measureInWindow","createMeasureInWindow","measureLayout","createMeasureLayout"],"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","startGlobalObservers","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","supportsCheckVisibility","document","body","BoundingRects","updateLayoutIfChanged","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","layoutOnAnimationFrame","frameCount","userSkipVal","TAMAGUI_LAYOUT_FRAME_SKIP","RUN_EVERY_X_FRAMES","size","Number","MAX_SAFE_INTEGER","res","io","disconnect","boundingClientRect","HTMLElement","observe","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","a","b","height","left","top","width","x","y","pageX","pageY","useElementLayout","ref","ensureWebElement","current","host","node2","add","delete","unobserve","nodeType","measureNode","relativeTo","relativeNode","nodeDim","relativeNodeDim","measure","callback","out","createMeasure","measureInWindow","createMeasureInWindow","measureLayout","createMeasureLayout"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,yBAAA,QAAiC;AACpD,SAASC,cAAA,QAAsB;AAG/B,MAAMC,cAAA,GAAiB,mBAAIC,OAAA,CAA+B;EACpDC,KAAA,GAAQ,mBAAIC,GAAA,CAAiB;EAC7BC,iBAAA,GAAoB,mBAAIH,OAAA,CAA8B;AAG5D,IAAII,0BAAA,GAA0D;EAQ1DC,QAAA,GAAsC;AAEnC,SAASC,oBAAoBC,KAAA,EAAwC;EAC1EF,QAAA,GAAWE,KAAA;AACb;AAmBA,MAAMC,aAAA,GAAgB,mBAAIR,OAAA,CAA8B;EAClDS,eAAA,GAAkB,mBAAIT,OAAA,CAA8B;EACpDU,cAAA,GAAiB,mBAAIV,OAAA,CAA6B;EAElDW,GAAA,GAAM,OAAOC,MAAA,GAAW,MAAcA,MAAA,CAAOC,qBAAA,GAAwB;AAG3E,IAAIC,YAAA,GAAe;AACnB,MAAMC,aAAA,GAAgB,mBAAIC,GAAA,CAA2B;AAE9C,SAASC,OAAA,EAAe;EACzBH,YAAA,KACFA,YAAA,GAAe,IACXC,aAAA,KACFA,aAAA,CAAcG,OAAA,CAASC,EAAA,IAAOA,EAAA,CAAG,CAAC,GAClCJ,aAAA,CAAcK,KAAA,CAAM;AAG1B;AAEA,SAASC,qBAAA,EAAuB;EAC1B,CAACzB,QAAA,IAAYQ,0BAAA,KAEjBA,0BAAA,GAA6B,IAAIkB,oBAAA,CAC9BC,OAAA,IAAY;IACXA,OAAA,CAAQL,OAAA,CAASM,KAAA,IAAU;MACzB,MAAMC,IAAA,GAAOD,KAAA,CAAME,MAAA;MACfvB,iBAAA,CAAkBwB,GAAA,CAAIF,IAAI,MAAMD,KAAA,CAAMI,cAAA,IACxCzB,iBAAA,CAAkB0B,GAAA,CAAIJ,IAAA,EAAMD,KAAA,CAAMI,cAAc;IAEpD,CAAC;EACH,GACA;IACEE,SAAA,EAAW;EACb,CACF;AACF;AAEA,IAAIlC,QAAA,EACF,IAAIe,GAAA,EAAK;EACP,MAAMoB,uBAAA,GAA0B,qBAAqBC,QAAA,CAASC,IAAA;IAExDC,aAAA,GAAgB,mBAAIlC,OAAA,CAA0C;EAEpE,eAAemC,sBAAsBV,IAAA,EAAmB;IAMtD,IALItB,iBAAA,CAAkBwB,GAAA,CAAIF,IAAI,MAAM,MAKhCW,OAAA,CAAQC,GAAA,CAAIC,iCAAA,KAAsC,OAChDP,uBAAA,IAA2B,CAAEN,IAAA,CAAac,eAAA,CAAgB,GAE5D;IAIJ,MAAMC,QAAA,GAAWzC,cAAA,CAAe4B,GAAA,CAAIF,IAAI;IACxC,IAAI,OAAOe,QAAA,IAAa,YAAY;IAEpC,MAAMC,UAAA,GAAahB,IAAA,CAAKiB,aAAA;IACxB,IAAI,CAACD,UAAA,EAAY;IAEjB,IAAIE,QAAA,EACAC,UAAA;IAEJ,IAAIvC,QAAA,KAAa,SAAS;MACxB,MAAM,CAACwC,EAAA,EAAIC,EAAE,IAAI,MAAMC,OAAA,CAAQC,GAAA,CAAI,CACjCd,aAAA,CAAcP,GAAA,CAAIF,IAAI,KAAKwB,0BAAA,CAA2BxB,IAAI,GAC1DS,aAAA,CAAcP,GAAA,CAAIc,UAAU,KAAKQ,0BAAA,CAA2BR,UAAU,EACvE;MAED,IAAII,EAAA,KAAO,MAASC,EAAA,KAAO,IACzB;MAGFH,QAAA,GAAWE,EAAA,EACXD,UAAA,GAAaE,EAAA;IACf,OACEH,QAAA,GAAWlB,IAAA,CAAKyB,qBAAA,CAAsB,GACtCN,UAAA,GAAaH,UAAA,CAAWS,qBAAA,CAAsB;IAGhD,MAAMC,UAAA,GAAa3C,aAAA,CAAcmB,GAAA,CAAIF,IAAI;MACnC2B,gBAAA,GAAmB5C,aAAA,CAAcmB,GAAA,CAAIc,UAAU;IAErD,IACE,CAACU,UAAA;IAAA;IAAA;IAGA,CAACrD,cAAA,CAAeqD,UAAA,EAAYR,QAAQ;IAAA;IAElC,CAACS,gBAAA,IAAoB,CAACtD,cAAA,CAAesD,gBAAA,EAAkBR,UAAU,IACpE;MACApC,aAAA,CAAcqB,GAAA,CAAIJ,IAAA,EAAMkB,QAAQ,GAChClC,eAAA,CAAgBoB,GAAA,CAAIY,UAAA,EAAYG,UAAU;MAE1C,MAAMS,KAAA,GAAQC,qBAAA,CAAsBX,QAAA,EAAUC,UAAU;MAEpD9B,YAAA,GACFC,aAAA,CAAcc,GAAA,CAAIJ,IAAA,EAAM,MAAMe,QAAA,CAASa,KAAK,CAAC,IAE7Cb,QAAA,CAASa,KAAK;IAElB;EACF;EAKA1C,GAAA,CAAK4C,sBAAsB;EAG3B,IAAIC,UAAA,GAAa;EAEjB,MAAMC,WAAA,GAAcrB,OAAA,CAAQC,GAAA,CAAIqB,yBAAA;IAC1BC,kBAAA,GAAqBF,WAAA,GAAc,CAACA,WAAA,GAAc;EAExD,eAAeF,uBAAA,EAAyB;IACtC,IAAIlD,QAAA,KAAa,OAAO;MACtB,IAAI,CAACJ,KAAA,CAAM2D,IAAA,IAAQJ,UAAA,KAAeG,kBAAA,KAAuB,GAAG;QAE1DhD,GAAA,CAAK4C,sBAAsB;QAC3B;MACF;MAEIC,UAAA,KAAeK,MAAA,CAAOC,gBAAA,KACxBN,UAAA,GAAa,IAIf,MAAM,IAAIT,OAAA,CAAegB,GAAA,IAAQ;QAC/B,MAAMC,EAAA,GAAK,IAAI1C,oBAAA,CACZC,OAAA,IAAY;UACXyC,EAAA,CAAGC,UAAA,CAAW;UACd,WAAWzC,KAAA,IAASD,OAAA,EAClBW,aAAA,CAAcL,GAAA,CAAIL,KAAA,CAAME,MAAA,EAAQF,KAAA,CAAM0C,kBAAkB;UAE1DH,GAAA,CAAI;QACN,GACA;UACEjC,SAAA,EAAW;QACb,CACF;QACA,WAAWL,IAAA,IAAQxB,KAAA,EACbwB,IAAA,CAAKiB,aAAA,YAAyByB,WAAA,KAChCH,EAAA,CAAGI,OAAA,CAAQ3C,IAAI,GACfuC,EAAA,CAAGI,OAAA,CAAQ3C,IAAA,CAAKiB,aAAa;MAGnC,CAAC,GAEDzC,KAAA,CAAMiB,OAAA,CAASO,IAAA,IAAS;QACtBU,qBAAA,CAAsBV,IAAI;MAC5B,CAAC;IACH;IAEAd,GAAA,CAAK4C,sBAAsB;EAC7B;AACF,OACMnB,OAAA,CAAQC,GAAA,CAAIgC,QAAA,KAAa,iBAC3BC,OAAA,CAAQC,IAAA,CACN,2EACF;AAKC,MAAMjB,qBAAA,GAAwBA,CACnCX,QAAA,EACAC,UAAA,MAEO;IACL4B,WAAA,EAAa;MACXC,MAAA,EAAQC,qBAAA,CAAsB/B,QAAA,EAAUC,UAAU;MAClDlB,MAAA,EAAQiB;IACV;IACAgC,SAAA,EAAWC,IAAA,CAAKC,GAAA,CAAI;EACtB;EAGIH,qBAAA,GAAwBA,CAACI,CAAA,EAAoBC,CAAA,KAAuB;IACxE,MAAM;QAAEC,MAAA;QAAQC,IAAA;QAAMC,GAAA;QAAKC;MAAM,IAAIL,CAAA;MAC/BM,CAAA,GAAIH,IAAA,GAAOF,CAAA,CAAEE,IAAA;MACbI,CAAA,GAAIH,GAAA,GAAMH,CAAA,CAAEG,GAAA;IAClB,OAAO;MAAEE,CAAA;MAAGC,CAAA;MAAGF,KAAA;MAAOH,MAAA;MAAQM,KAAA,EAAOR,CAAA,CAAEG,IAAA;MAAMM,KAAA,EAAOT,CAAA,CAAEI;IAAI;EAC5D;AAEO,SAASM,iBACdC,GAAA,EACAjD,QAAA,EACM;EAEN,MAAMf,IAAA,GAAOiE,gBAAA,CAAiBD,GAAA,CAAIE,OAAA,EAASC,IAAI;EAC3CnE,IAAA,IAAQe,QAAA,IACVzC,cAAA,CAAe8B,GAAA,CAAIJ,IAAA,EAAMe,QAAQ,GAGnC3C,yBAAA,CAA0B,MAAM;IAC9B,IAAI,CAAC2C,QAAA,EAAU;IACf,MAAMqD,KAAA,GAAOJ,GAAA,CAAIE,OAAA,EAASC,IAAA;IAC1B,IAAI,CAACC,KAAA,EAAM;IAEX5F,KAAA,CAAM6F,GAAA,CAAID,KAAI,GAGdxE,oBAAA,CAAqB,GACjBjB,0BAAA,KACFA,0BAAA,CAA2BgE,OAAA,CAAQyB,KAAI,GAEvC1F,iBAAA,CAAkB0B,GAAA,CAAIgE,KAAA,EAAM,EAAI;IAIlC,MAAMpD,UAAA,GAAaoD,KAAA,CAAKpD,UAAA;IACxB,OAAIA,UAAA,IACFD,QAAA,CACEc,qBAAA,CACEuC,KAAA,CAAK3C,qBAAA,CAAsB,GAC3BT,UAAA,CAAWS,qBAAA,CAAsB,CACnC,CACF,GAGK,MAAM;MACXjD,KAAA,CAAM8F,MAAA,CAAOF,KAAI,GACjB9F,cAAA,CAAegG,MAAA,CAAOF,KAAI,GAC1BrF,aAAA,CAAcuF,MAAA,CAAOF,KAAI,GACzBnF,cAAA,CAAeqF,MAAA,CAAOF,KAAI,GAC1B1F,iBAAA,CAAkB4F,MAAA,CAAOF,KAAI,GAGzBzF,0BAAA,IACFA,0BAAA,CAA2B4F,SAAA,CAAUH,KAAI;IAE7C;EACF,GAAG,CAACJ,GAAA,EAAK,CAAC,CAACjD,QAAQ,CAAC;AACtB;AAEA,SAASkD,iBAAoBN,CAAA,EAA+B;EAC1D,IAAI,SAAOjB,WAAA,GAAgB,MAG3B,OAAOiB,CAAA,YAAajB,WAAA,GAAciB,CAAA,GAAI;AACxC;AAEO,MAAMnC,0BAAA,GACXxB,IAAA,IAEO,IAAIsB,OAAA,CAAkCgB,GAAA,IAAQ;IACnD,IAAI,CAACtC,IAAA,IAAQA,IAAA,CAAKwE,QAAA,KAAa,GAAG,OAAOlC,GAAA,CAAI,EAAK;IAElD,MAAMC,EAAA,GAAK,IAAI1C,oBAAA,CACZC,OAAA,KACCyC,EAAA,CAAGC,UAAA,CAAW,GACPF,GAAA,CAAIxC,OAAA,CAAQ,CAAC,EAAE2C,kBAAkB,IAE1C;MACEpC,SAAA,EAAW;IACb,CACF;IACAkC,EAAA,CAAGI,OAAA,CAAQ3C,IAAI;EACjB,CAAC;EAGUyE,WAAA,GAAc,MAAAA,CACzBzE,IAAA,EACA0E,UAAA,KACgC;IAChC,MAAMC,YAAA,GAAeD,UAAA,IAAc1E,IAAA,EAAMiB,aAAA;IACzC,IAAI0D,YAAA,YAAwBjC,WAAA,EAAa;MACvC,MAAM,CAACkC,OAAA,EAASC,eAAe,IAAI,MAAMvD,OAAA,CAAQC,GAAA,CAAI,CACnDC,0BAAA,CAA2BxB,IAAI,GAC/BwB,0BAAA,CAA2BmD,YAAY,EACxC;MACD,IAAIE,eAAA,IAAmBD,OAAA,EACrB,OAAO3B,qBAAA,CAAsB2B,OAAA,EAASC,eAAe;IAEzD;IACA,OAAO;EACT;EAaaC,OAAA,GAAU,MAAAA,CACrB9E,IAAA,EACA+E,QAAA,KACgC;IAChC,MAAMC,GAAA,GAAM,MAAMP,WAAA,CAChBzE,IAAA,EACAA,IAAA,CAAKgB,UAAA,YAAsB0B,WAAA,GAAc1C,IAAA,CAAKgB,UAAA,GAAa,IAC7D;IACA,OAAIgE,GAAA,IACFD,QAAA,GAAWC,GAAA,CAAIrB,CAAA,EAAGqB,GAAA,CAAIpB,CAAA,EAAGoB,GAAA,CAAItB,KAAA,EAAOsB,GAAA,CAAIzB,MAAA,EAAQyB,GAAA,CAAInB,KAAA,EAAOmB,GAAA,CAAIlB,KAAK,GAE/DkB,GAAA;EACT;AAEO,SAASC,cACdjF,IAAA,EACsD;EACtD,OAAQ+E,QAAA,IAAaD,OAAA,CAAQ9E,IAAA,EAAM+E,QAAQ;AAC7C;AAIO,MAAMG,eAAA,GAAkB,MAAAA,CAC7BlF,IAAA,EACA+E,QAAA,KACiC;IACjC,MAAMC,GAAA,GAAM,MAAMP,WAAA,CAAYzE,IAAA,EAAM,IAAI;IACxC,OAAIgF,GAAA,IACFD,QAAA,GAAWC,GAAA,CAAInB,KAAA,EAAOmB,GAAA,CAAIlB,KAAA,EAAOkB,GAAA,CAAItB,KAAA,EAAOsB,GAAA,CAAIzB,MAAM,GAEjDyB,GAAA;EACT;EAEaG,qBAAA,GACXnF,IAAA,IAEQ+E,QAAA,IAAaG,eAAA,CAAgBlF,IAAA,EAAM+E,QAAQ;EAGxCK,aAAA,GAAgB,MAAAA,CAC3BpF,IAAA,EACA2E,YAAA,EACAI,QAAA,KACgC;IAChC,MAAMC,GAAA,GAAM,MAAMP,WAAA,CAAYzE,IAAA,EAAM2E,YAAY;IAChD,OAAIK,GAAA,IACFD,QAAA,GAAWC,GAAA,CAAIrB,CAAA,EAAGqB,GAAA,CAAIpB,CAAA,EAAGoB,GAAA,CAAItB,KAAA,EAAOsB,GAAA,CAAIzB,MAAA,EAAQyB,GAAA,CAAInB,KAAA,EAAOmB,GAAA,CAAIlB,KAAK,GAE/DkB,GAAA;EACT;AAEO,SAASK,oBACdrF,IAAA,EAC+E;EAC/E,OAAO,CAAC0E,UAAA,EAAYK,QAAA,KAAaK,aAAA,CAAcpF,IAAA,EAAM0E,UAAA,EAAYK,QAAQ;AAC3E","ignoreList":[]}
@@ -30,20 +30,8 @@ function startGlobalObservers() {
30
30
  }));
31
31
  }
32
32
  if (isClient) if (rAF) {
33
- let layoutOnAnimationFrame = function () {
34
- if (strategy !== "off") {
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);
41
- });
42
- }
43
- rAF(layoutOnAnimationFrame);
44
- };
45
- var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
46
- supportsCheckVisibility = "checkVisibility" in document.body;
33
+ var supportsCheckVisibility = "checkVisibility" in document.body,
34
+ BoundingRects = /* @__PURE__ */new WeakMap();
47
35
  async function updateLayoutIfChanged(node) {
48
36
  if (IntersectionState.get(node) !== !1 && !(process.env.TAMAGUI_ONLAYOUT_VISIBILITY_CHECK === "1" && supportsCheckVisibility && !node.checkVisibility())) {
49
37
  var onLayout = LayoutHandlers.get(node);
@@ -52,7 +40,7 @@ if (isClient) if (rAF) {
52
40
  if (parentNode) {
53
41
  var nodeRect, parentRect;
54
42
  if (strategy === "async") {
55
- var [nr, pr] = await Promise.all([getBoundingClientRectAsync(node), getBoundingClientRectAsync(parentNode)]);
43
+ var [nr, pr] = await Promise.all([BoundingRects.get(node) || getBoundingClientRectAsync(node), BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode)]);
56
44
  if (nr === !1 || pr === !1) return;
57
45
  nodeRect = nr, parentRect = pr;
58
46
  } else nodeRect = node.getBoundingClientRect(), parentRect = parentNode.getBoundingClientRect();
@@ -78,6 +66,59 @@ if (isClient) if (rAF) {
78
66
  var frameCount = 0,
79
67
  userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP,
80
68
  RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10;
69
+ async function layoutOnAnimationFrame() {
70
+ if (strategy !== "off") {
71
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
72
+ rAF(layoutOnAnimationFrame);
73
+ return;
74
+ }
75
+ frameCount === Number.MAX_SAFE_INTEGER && (frameCount = 0), await new Promise(function (res) {
76
+ var io = new IntersectionObserver(function (entries) {
77
+ io.disconnect();
78
+ var _iteratorNormalCompletion2 = !0,
79
+ _didIteratorError2 = !1,
80
+ _iteratorError2 = void 0;
81
+ try {
82
+ for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = !0) {
83
+ var entry = _step2.value;
84
+ BoundingRects.set(entry.target, entry.boundingClientRect);
85
+ }
86
+ } catch (err) {
87
+ _didIteratorError2 = !0, _iteratorError2 = err;
88
+ } finally {
89
+ try {
90
+ !_iteratorNormalCompletion2 && _iterator2.return != null && _iterator2.return();
91
+ } finally {
92
+ if (_didIteratorError2) throw _iteratorError2;
93
+ }
94
+ }
95
+ res();
96
+ }, {
97
+ threshold: 0
98
+ }),
99
+ _iteratorNormalCompletion = !0,
100
+ _didIteratorError = !1,
101
+ _iteratorError = void 0;
102
+ try {
103
+ for (var _iterator = Nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
104
+ var node = _step.value;
105
+ node.parentElement instanceof HTMLElement && (io.observe(node), io.observe(node.parentElement));
106
+ }
107
+ } catch (err) {
108
+ _didIteratorError = !0, _iteratorError = err;
109
+ } finally {
110
+ try {
111
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
112
+ } finally {
113
+ if (_didIteratorError) throw _iteratorError;
114
+ }
115
+ }
116
+ }), Nodes.forEach(function (node) {
117
+ updateLayoutIfChanged(node);
118
+ });
119
+ }
120
+ rAF(layoutOnAnimationFrame);
121
+ }
81
122
  } else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
82
123
  var getElementLayoutEvent = function (nodeRect, parentRect) {
83
124
  return {
@@ -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","startGlobalObservers","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","userSkipVal","TAMAGUI_LAYOUT_FRAME_SKIP","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","a","b","height","left","top","width","x","y","pageX","pageY","useElementLayout","ref","_ref_current","ensureWebElement","current","host","_ref_current2","node2","add","observe","delete","unobserve","HTMLElement","res","nodeType","io","disconnect","boundingClientRect","measureNode","relativeTo","relativeNode","nodeDim","relativeNodeDim","measure","callback","out","createMeasure","measureInWindow"],"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","startGlobalObservers","IntersectionObserver","entries","entry","node","target","get","isIntersecting","set","threshold","supportsCheckVisibility","document","body","BoundingRects","updateLayoutIfChanged","process","env","TAMAGUI_ONLAYOUT_VISIBILITY_CHECK","checkVisibility","onLayout","parentNode","parentElement","nodeRect","parentRect","nr","pr","Promise","all","getBoundingClientRectAsync","getBoundingClientRect","cachedRect","cachedParentRect","event","getElementLayoutEvent","layoutOnAnimationFrame","frameCount","userSkipVal","TAMAGUI_LAYOUT_FRAME_SKIP","RUN_EVERY_X_FRAMES","size","Number","MAX_SAFE_INTEGER","res","io","disconnect","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","Symbol","iterator","_step2","next","done","value","boundingClientRect","err","return","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","HTMLElement","observe","NODE_ENV","console","warn","nativeEvent","layout","getRelativeDimensions","timeStamp","Date","now","a","b","height","left","top","width","x","y","pageX","pageY","useElementLayout","ref","_ref_current","ensureWebElement","current","host","_ref_current2","node2","add","delete","unobserve","nodeType"],"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.132.2",
3
+ "version": "1.132.3",
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.132.2",
35
- "@tamagui/is-equal-shallow": "1.132.2"
34
+ "@tamagui/constants": "1.132.3",
35
+ "@tamagui/is-equal-shallow": "1.132.3"
36
36
  },
37
37
  "devDependencies": {
38
- "@tamagui/build": "1.132.2",
38
+ "@tamagui/build": "1.132.3",
39
39
  "react": "*"
40
40
  },
41
41
  "publishConfig": {
package/src/index.ts CHANGED
@@ -80,6 +80,8 @@ if (isClient) {
80
80
  if (rAF) {
81
81
  const supportsCheckVisibility = 'checkVisibility' in document.body
82
82
 
83
+ const BoundingRects = new WeakMap<any, DOMRectReadOnly | undefined>()
84
+
83
85
  async function updateLayoutIfChanged(node: HTMLElement) {
84
86
  if (IntersectionState.get(node) === false) {
85
87
  // avoid due to not intersecting
@@ -104,8 +106,8 @@ if (isClient) {
104
106
 
105
107
  if (strategy === 'async') {
106
108
  const [nr, pr] = await Promise.all([
107
- getBoundingClientRectAsync(node),
108
- getBoundingClientRectAsync(parentNode),
109
+ BoundingRects.get(node) || getBoundingClientRectAsync(node),
110
+ BoundingRects.get(parentNode) || getBoundingClientRectAsync(parentNode),
109
111
  ])
110
112
 
111
113
  if (nr === false || pr === false) {
@@ -154,9 +156,9 @@ if (isClient) {
154
156
  const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP
155
157
  const RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10
156
158
 
157
- function layoutOnAnimationFrame() {
159
+ async function layoutOnAnimationFrame() {
158
160
  if (strategy !== 'off') {
159
- if (frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
161
+ if (!Nodes.size || frameCount++ % RUN_EVERY_X_FRAMES !== 0) {
160
162
  // skip a few frames to avoid work
161
163
  rAF!(layoutOnAnimationFrame)
162
164
  return
@@ -166,6 +168,28 @@ if (isClient) {
166
168
  frameCount = 0
167
169
  }
168
170
 
171
+ // do a 1 rather than N IntersectionObservers for performance
172
+ await new Promise<void>((res) => {
173
+ const io = new IntersectionObserver(
174
+ (entries) => {
175
+ io.disconnect()
176
+ for (const entry of entries) {
177
+ BoundingRects.set(entry.target, entry.boundingClientRect)
178
+ }
179
+ res()
180
+ },
181
+ {
182
+ threshold: 0,
183
+ }
184
+ )
185
+ for (const node of Nodes) {
186
+ if (node.parentElement instanceof HTMLElement) {
187
+ io.observe(node)
188
+ io.observe(node.parentElement)
189
+ }
190
+ }
191
+ })
192
+
169
193
  Nodes.forEach((node) => {
170
194
  updateLayoutIfChanged(node)
171
195
  })
@@ -1,5 +1,5 @@
1
1
  {
2
- "mappings": "AAEA,cAA2B,iBAAiB,OAAO;KAS9C,+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;AAsIhB,OAAO,cAAM,wBACXC,UAAU,iBACVC,YAAY,oBACX;AAiBH,OAAO,iBAAS,iBACdC,KAAK,UAAU,+BACfC,aAAaC,GAAG;AAwDlB,OAAO,cAAM,6BACXC,MAAM,uBACL,QAAQ,kBAAkB;AAiB7B,OAAO,cAAM,cACXC,MAAM,aACNC,aAAa,uBACZ,eAAe;KAcb,qBAAqBC,WAAWC,WAAWC,eAAeC;KAE1D,aACHH,WACAC,WACAC,eACAC,gBACAC,eACAC;AAGF,OAAO,cAAM,UACXP,MAAM,aACNQ,UAAU,cACT,QAAQ;AAWX,OAAO,iBAAS,cACdR,MAAM,eACJQ,UAAU,cAAc,QAAQ;KAI/B,eAAe;CAAE;CAAe;CAAe;CAAe;AAAgB;AAEnF,OAAO,cAAM,kBACXR,MAAM,aACNS,UAAU,sBACT,QAAQ;AAQX,OAAO,cAAM,wBACXT,MAAM,kBACHS,UAAU,sBAAsB,QAAQ;AAI7C,OAAO,cAAM,gBACXT,MAAM,aACNU,cAAc,aACdF,UAAU,cACT,QAAQ;AAQX,OAAO,iBAAS,oBACdR,MAAM,eACJW,YAAY,aAAaH,UAAU,cAAc,QAAQ",
2
+ "mappings": "AAEA,cAA2B,iBAAiB,OAAO;KAS9C,+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;AA8JhB,OAAO,cAAM,wBACXC,UAAU,iBACVC,YAAY,oBACX;AAiBH,OAAO,iBAAS,iBACdC,KAAK,UAAU,+BACfC,aAAaC,GAAG;AAwDlB,OAAO,cAAM,6BACXC,MAAM,uBACL,QAAQ,kBAAkB;AAiB7B,OAAO,cAAM,cACXC,MAAM,aACNC,aAAa,uBACZ,eAAe;KAcb,qBAAqBC,WAAWC,WAAWC,eAAeC;KAE1D,aACHH,WACAC,WACAC,eACAC,gBACAC,eACAC;AAGF,OAAO,cAAM,UACXP,MAAM,aACNQ,UAAU,cACT,QAAQ;AAWX,OAAO,iBAAS,cACdR,MAAM,eACJQ,UAAU,cAAc,QAAQ;KAI/B,eAAe;CAAE;CAAe;CAAe;CAAe;AAAgB;AAEnF,OAAO,cAAM,kBACXR,MAAM,aACNS,UAAU,sBACT,QAAQ;AAQX,OAAO,cAAM,wBACXT,MAAM,kBACHS,UAAU,sBAAsB,QAAQ;AAI7C,OAAO,cAAM,gBACXT,MAAM,aACNU,cAAc,aACdF,UAAU,cACT,QAAQ;AAQX,OAAO,iBAAS,oBACdR,MAAM,eACJW,YAAY,aAAaH,UAAU,cAAc,QAAQ",
3
3
  "names": [
4
4
  "state: LayoutMeasurementStrategy",
5
5
  "nodeRect: DOMRectReadOnly",
@@ -25,7 +25,7 @@
25
25
  "src/index.ts"
26
26
  ],
27
27
  "sourcesContent": [
28
- "import { isClient, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport { isEqualShallow } from '@tamagui/is-equal-shallow'\nimport { useCallback, 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 pageX: number\n pageY: 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 startGlobalObservers() {\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\n const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP\n const RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10\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\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, pageX: a.left, pageY: a.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 startGlobalObservers()\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\nexport const 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\nexport const measureNode = 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 if (relativeNodeDim && nodeDim) {\n return getRelativeDimensions(nodeDim, relativeNodeDim)\n }\n }\n return null\n}\n\ntype MeasureInWindowCb = (x: number, y: number, width: number, height: number) => void\n\ntype MeasureCb = (\n x: number,\n y: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number\n) => void\n\nexport const measure = async (\n node: HTMLElement,\n callback: MeasureCb\n): Promise<LayoutValue | null> => {\n const out = await measureNode(\n node,\n node.parentNode instanceof HTMLElement ? node.parentNode : null\n )\n if (out) {\n callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY)\n }\n return out\n}\n\nexport function createMeasure(\n node: HTMLElement\n): (callback: MeasureCb) => Promise<LayoutValue | null> {\n return (callback) => measure(node, callback)\n}\n\ntype WindowLayout = { pageX: number; pageY: number; width: number; height: number }\n\nexport const measureInWindow = async (\n node: HTMLElement,\n callback: MeasureInWindowCb\n): Promise<WindowLayout | null> => {\n const out = await measureNode(node, null)\n if (out) {\n callback?.(out.pageX, out.pageY, out.width, out.height)\n }\n return out\n}\n\nexport const createMeasureInWindow = (\n node: HTMLElement\n): ((callback: MeasureInWindowCb) => Promise<WindowLayout | null>) => {\n return (callback) => measureInWindow(node, callback)\n}\n\nexport const measureLayout = async (\n node: HTMLElement,\n relativeNode: HTMLElement,\n callback: MeasureCb\n): Promise<LayoutValue | null> => {\n const out = await measureNode(node, relativeNode)\n if (out) {\n callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY)\n }\n return out\n}\n\nexport function createMeasureLayout(\n node: HTMLElement\n): (relativeTo: HTMLElement, callback: MeasureCb) => Promise<LayoutValue | null> {\n return (relativeTo, callback) => measureLayout(node, relativeTo, callback)\n}\n"
28
+ "import { isClient, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport { isEqualShallow } from '@tamagui/is-equal-shallow'\nimport { useCallback, 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 pageX: number\n pageY: 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 startGlobalObservers() {\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 const BoundingRects = new WeakMap<any, DOMRectReadOnly | undefined>()\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 BoundingRects.get(node) || getBoundingClientRectAsync(node),\n BoundingRects.get(parentNode) || 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\n const userSkipVal = process.env.TAMAGUI_LAYOUT_FRAME_SKIP\n const RUN_EVERY_X_FRAMES = userSkipVal ? +userSkipVal : 10\n\n async function layoutOnAnimationFrame() {\n if (strategy !== 'off') {\n if (!Nodes.size || 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 // do a 1 rather than N IntersectionObservers for performance\n await new Promise<void>((res) => {\n const io = new IntersectionObserver(\n (entries) => {\n io.disconnect()\n for (const entry of entries) {\n BoundingRects.set(entry.target, entry.boundingClientRect)\n }\n res()\n },\n {\n threshold: 0,\n }\n )\n for (const node of Nodes) {\n if (node.parentElement instanceof HTMLElement) {\n io.observe(node)\n io.observe(node.parentElement)\n }\n }\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\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, pageX: a.left, pageY: a.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 startGlobalObservers()\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\nexport const 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\nexport const measureNode = 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 if (relativeNodeDim && nodeDim) {\n return getRelativeDimensions(nodeDim, relativeNodeDim)\n }\n }\n return null\n}\n\ntype MeasureInWindowCb = (x: number, y: number, width: number, height: number) => void\n\ntype MeasureCb = (\n x: number,\n y: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number\n) => void\n\nexport const measure = async (\n node: HTMLElement,\n callback: MeasureCb\n): Promise<LayoutValue | null> => {\n const out = await measureNode(\n node,\n node.parentNode instanceof HTMLElement ? node.parentNode : null\n )\n if (out) {\n callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY)\n }\n return out\n}\n\nexport function createMeasure(\n node: HTMLElement\n): (callback: MeasureCb) => Promise<LayoutValue | null> {\n return (callback) => measure(node, callback)\n}\n\ntype WindowLayout = { pageX: number; pageY: number; width: number; height: number }\n\nexport const measureInWindow = async (\n node: HTMLElement,\n callback: MeasureInWindowCb\n): Promise<WindowLayout | null> => {\n const out = await measureNode(node, null)\n if (out) {\n callback?.(out.pageX, out.pageY, out.width, out.height)\n }\n return out\n}\n\nexport const createMeasureInWindow = (\n node: HTMLElement\n): ((callback: MeasureInWindowCb) => Promise<WindowLayout | null>) => {\n return (callback) => measureInWindow(node, callback)\n}\n\nexport const measureLayout = async (\n node: HTMLElement,\n relativeNode: HTMLElement,\n callback: MeasureCb\n): Promise<LayoutValue | null> => {\n const out = await measureNode(node, relativeNode)\n if (out) {\n callback?.(out.x, out.y, out.width, out.height, out.pageX, out.pageY)\n }\n return out\n}\n\nexport function createMeasureLayout(\n node: HTMLElement\n): (relativeTo: HTMLElement, callback: MeasureCb) => Promise<LayoutValue | null> {\n return (relativeTo, callback) => measureLayout(node, relativeTo, callback)\n}\n"
29
29
  ],
30
30
  "version": 3
31
31
  }