@tamagui/core 1.126.17 → 1.127.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/helpers/getBoundingClientRect.cjs +16 -3
- package/dist/cjs/helpers/getBoundingClientRect.js +17 -2
- package/dist/cjs/helpers/getBoundingClientRect.js.map +1 -1
- package/dist/cjs/helpers/getBoundingClientRect.native.js +20 -2
- package/dist/cjs/helpers/getBoundingClientRect.native.js.map +2 -2
- package/dist/cjs/hooks/useElementLayout.cjs +90 -22
- package/dist/cjs/hooks/useElementLayout.js +72 -16
- package/dist/cjs/hooks/useElementLayout.js.map +1 -1
- package/dist/cjs/hooks/useElementLayout.native.js +82 -20
- package/dist/cjs/hooks/useElementLayout.native.js.map +2 -2
- package/dist/esm/helpers/getBoundingClientRect.js +17 -2
- package/dist/esm/helpers/getBoundingClientRect.js.map +1 -1
- package/dist/esm/helpers/getBoundingClientRect.mjs +15 -3
- package/dist/esm/helpers/getBoundingClientRect.mjs.map +1 -1
- package/dist/esm/helpers/getBoundingClientRect.native.js +22 -4
- package/dist/esm/helpers/getBoundingClientRect.native.js.map +1 -1
- package/dist/esm/hooks/useElementLayout.js +72 -16
- package/dist/esm/hooks/useElementLayout.js.map +1 -1
- package/dist/esm/hooks/useElementLayout.mjs +89 -23
- package/dist/esm/hooks/useElementLayout.mjs.map +1 -1
- package/dist/esm/hooks/useElementLayout.native.js +101 -36
- package/dist/esm/hooks/useElementLayout.native.js.map +1 -1
- package/dist/native.js +77 -21
- package/dist/native.js.map +2 -2
- package/dist/test.native.js +77 -21
- package/dist/test.native.js.map +2 -2
- package/package.json +7 -7
- package/src/helpers/getBoundingClientRect.tsx +26 -0
- package/src/hooks/useElementLayout.tsx +107 -8
- package/types/helpers/getBoundingClientRect.d.ts +1 -0
- package/types/helpers/getBoundingClientRect.d.ts.map +1 -1
- package/types/hooks/useElementLayout.d.ts +4 -2
- package/types/hooks/useElementLayout.d.ts.map +1 -1
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
const getBoundingClientRect = node => {
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
2
|
+
if (!(!node || node.nodeType !== 1)) return node.getBoundingClientRect?.();
|
|
3
|
+
},
|
|
4
|
+
getBoundingClientRectAsync = element => new Promise(resolve => {
|
|
5
|
+
let didFallback = !1;
|
|
6
|
+
function fallbackToSync() {
|
|
7
|
+
didFallback = !0, resolve(getBoundingClientRect(element));
|
|
8
|
+
}
|
|
9
|
+
const tm = setTimeout(fallbackToSync, 32);
|
|
10
|
+
new IntersectionObserver((entries, ob) => {
|
|
11
|
+
clearTimeout(tm), ob.disconnect(), didFallback || resolve(entries[0]?.boundingClientRect);
|
|
12
|
+
}, {
|
|
13
|
+
threshold: 1e-4
|
|
14
|
+
}).observe(element);
|
|
15
|
+
});
|
|
16
|
+
export { getBoundingClientRect, getBoundingClientRectAsync };
|
|
5
17
|
//# sourceMappingURL=getBoundingClientRect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBoundingClientRect","node","nodeType"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,qBAAA,GAAyBC,IAAA,IAAkD;
|
|
1
|
+
{"version":3,"names":["getBoundingClientRect","node","nodeType","getBoundingClientRectAsync","element","Promise","resolve","didFallback","fallbackToSync","tm","setTimeout","IntersectionObserver","entries","ob","clearTimeout","disconnect","boundingClientRect","threshold","observe"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,qBAAA,GAAyBC,IAAA,IAAkD;IACtF,IAAI,GAACA,IAAA,IAAQA,IAAA,CAAKC,QAAA,KAAa,IAC/B,OAAOD,IAAA,CAAKD,qBAAA,GAAwB;EACtC;EAEaG,0BAAA,GACXC,OAAA,IAEO,IAAIC,OAAA,CAASC,OAAA,IAAY;IAC9B,IAAIC,WAAA,GAAc;IAClB,SAASC,eAAA,EAAiB;MACxBD,WAAA,GAAc,IACdD,OAAA,CAAQN,qBAAA,CAAsBI,OAAO,CAAC;IACxC;IACA,MAAMK,EAAA,GAAKC,UAAA,CAAWF,cAAA,EAAgB,EAAE;IACvB,IAAIG,oBAAA,CACnB,CAACC,OAAA,EAASC,EAAA,KAAO;MACfC,YAAA,CAAaL,EAAE,GACfI,EAAA,CAAGE,UAAA,CAAW,GACTR,WAAA,IACHD,OAAA,CAAQM,OAAA,CAAQ,CAAC,GAAGI,kBAAkB;IAE1C,GACA;MACEC,SAAA,EAAW;IACb,CACF,EACSC,OAAA,CAAQd,OAAO;EAC1B,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
var getBoundingClientRect = function (node) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
2
|
+
var _node_getBoundingClientRect;
|
|
3
|
+
if (!(!node || node.nodeType !== 1)) return (_node_getBoundingClientRect = node.getBoundingClientRect) === null || _node_getBoundingClientRect === void 0 ? void 0 : _node_getBoundingClientRect.call(node);
|
|
4
|
+
},
|
|
5
|
+
getBoundingClientRectAsync = function (element) {
|
|
6
|
+
return new Promise(function (resolve) {
|
|
7
|
+
var didFallback = !1;
|
|
8
|
+
function fallbackToSync() {
|
|
9
|
+
didFallback = !0, resolve(getBoundingClientRect(element));
|
|
10
|
+
}
|
|
11
|
+
var tm = setTimeout(fallbackToSync, 32),
|
|
12
|
+
observer = new IntersectionObserver(function (entries, ob) {
|
|
13
|
+
if (clearTimeout(tm), ob.disconnect(), !didFallback) {
|
|
14
|
+
var _entries_;
|
|
15
|
+
resolve((_entries_ = entries[0]) === null || _entries_ === void 0 ? void 0 : _entries_.boundingClientRect);
|
|
16
|
+
}
|
|
17
|
+
}, {
|
|
18
|
+
threshold: 1e-4
|
|
19
|
+
});
|
|
20
|
+
observer.observe(element);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
export { getBoundingClientRect, getBoundingClientRectAsync };
|
|
6
24
|
//# sourceMappingURL=getBoundingClientRect.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getBoundingClientRect","node","_node_getBoundingClientRect","nodeType","call"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,qBAAM,YAAAA,CAAyBC,IAAkD;
|
|
1
|
+
{"version":3,"names":["getBoundingClientRect","node","_node_getBoundingClientRect","nodeType","call","getBoundingClientRectAsync","element","Promise","resolve","didFallback","fallbackToSync","tm","setTimeout","observer","IntersectionObserver","entries","ob","clearTimeout","disconnect","_entries_","boundingClientRect","threshold"],"sources":["../../../src/helpers/getBoundingClientRect.tsx"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,qBAAM,YAAAA,CAAyBC,IAAkD;IACtF,IAAIC,2BAAc;IAClB,OAAAD,IAAO,IAAKA,IAAA,CAAAE,QAAA,SAGD,QAAAD,2BACX,GAAAD,IAEO,CAAAD,qBAAa,MAAY,QAAAE,2BAAA,uBAAAA,2BAAA,CAAAE,IAAA,CAAAH,IAAA;EAC9B;EAAAI,0BAAkB,YAAAA,CAAAC,OAAA;IAClB,WAASC,OAAA,WAAiBC,OAAA;MACxB,IAAAC,WAAc,GACd;MACF,SAAAC,eAAA;QACAD,WAAW,OAAWD,OAAA,CAAAR,qBAAkB,CAAAM,OAAA;MACvB;MACf,IAACK,EAAA,GAAAC,UAAgB,CAAAF,cAAA;QAAAG,QAAA,OAAAC,oBAAA,WAAAC,OAAA,EAAAC,EAAA;UACf,IAAAC,YAAe,CAAAN,EACf,GAAGK,EAAA,CAAAE,UACE,KAAAT,WACH;YAEJ,IAAAU,SAAA;YACAX,OAAA,EAAAW,SAAA,GAAAJ,OAAA,iBAAAI,SAAA,uBAAAA,SAAA,CAAAC,kBAAA;UACE;QACF;UAEOC,SAAQ;QAClB","ignoreList":[]}
|
|
@@ -4,33 +4,57 @@ import {
|
|
|
4
4
|
___onDidFinishClientRender
|
|
5
5
|
} from "@tamagui/web";
|
|
6
6
|
const LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set();
|
|
7
|
-
let
|
|
7
|
+
let strategy = "async";
|
|
8
8
|
function setOnLayoutStrategy(state) {
|
|
9
|
-
|
|
9
|
+
strategy = state;
|
|
10
10
|
}
|
|
11
|
-
const NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
|
|
11
|
+
const NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap(), DebounceTimers = /* @__PURE__ */ new WeakMap(), LastChangeTime = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0, DEBOUNCE_DELAY = 32;
|
|
12
12
|
if (isClient)
|
|
13
13
|
if (rAF) {
|
|
14
|
-
let
|
|
15
|
-
const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
|
|
16
|
-
if (typeof onLayout != "function") return;
|
|
17
|
-
const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
18
|
-
if (!cachedRect || // has changed one rect
|
|
19
|
-
!isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
|
|
20
|
-
NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
|
|
21
|
-
const event = getElementLayoutEvent(node);
|
|
22
|
-
avoidUpdates ? queuedUpdates.set(node, () => onLayout(event)) : onLayout(event);
|
|
23
|
-
}
|
|
24
|
-
}, layoutOnAnimationFrame = function() {
|
|
14
|
+
let layoutOnAnimationFrame = function() {
|
|
25
15
|
const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
|
|
26
|
-
lastFrameAt = now,
|
|
16
|
+
lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
|
|
27
17
|
}, avoidUpdates = !0;
|
|
28
18
|
const queuedUpdates = /* @__PURE__ */ new Map();
|
|
29
19
|
let lastFrameAt = Date.now();
|
|
30
20
|
const numDroppedFramesUntilPause = 2;
|
|
31
21
|
___onDidFinishClientRender(() => {
|
|
32
22
|
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear());
|
|
33
|
-
})
|
|
23
|
+
});
|
|
24
|
+
async function updateLayoutIfChanged(node) {
|
|
25
|
+
const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
|
|
26
|
+
if (typeof onLayout != "function") return;
|
|
27
|
+
const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
28
|
+
if (!cachedRect || // has changed one rect
|
|
29
|
+
!isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))
|
|
30
|
+
if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
|
|
31
|
+
const event = getElementLayoutEvent(node);
|
|
32
|
+
queuedUpdates.set(node, () => onLayout(event));
|
|
33
|
+
} else if (strategy === "async") {
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
LastChangeTime.set(node, now);
|
|
36
|
+
const existingTimer = DebounceTimers.get(node);
|
|
37
|
+
existingTimer && clearTimeout(existingTimer);
|
|
38
|
+
const timer = setTimeout(async () => {
|
|
39
|
+
const lastChange = LastChangeTime.get(node) || 0, timeSinceChange = Date.now() - lastChange;
|
|
40
|
+
if (timeSinceChange >= DEBOUNCE_DELAY) {
|
|
41
|
+
const event = await getElementLayoutEventAsync(node);
|
|
42
|
+
onLayout(event), DebounceTimers.delete(node);
|
|
43
|
+
} else {
|
|
44
|
+
const remainingDelay = DEBOUNCE_DELAY - timeSinceChange, newTimer = setTimeout(async () => {
|
|
45
|
+
const event = await getElementLayoutEventAsync(node);
|
|
46
|
+
onLayout(event), DebounceTimers.delete(node);
|
|
47
|
+
}, remainingDelay);
|
|
48
|
+
DebounceTimers.set(node, newTimer);
|
|
49
|
+
}
|
|
50
|
+
}, DEBOUNCE_DELAY);
|
|
51
|
+
DebounceTimers.set(node, timer);
|
|
52
|
+
} else {
|
|
53
|
+
const event = getElementLayoutEvent(node);
|
|
54
|
+
onLayout(event);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
rAF(layoutOnAnimationFrame);
|
|
34
58
|
} else
|
|
35
59
|
process.env.NODE_ENV === "development" && console.warn(
|
|
36
60
|
"No requestAnimationFrame - please polyfill for onLayout to work correctly"
|
|
@@ -60,6 +84,34 @@ const getElementLayoutEvent = (target) => {
|
|
|
60
84
|
callback(x, y, width, height, left, top);
|
|
61
85
|
}
|
|
62
86
|
}
|
|
87
|
+
}, getElementLayoutEventAsync = async (target) => {
|
|
88
|
+
let res = null;
|
|
89
|
+
if (await measureLayoutAsync(target, null, (x, y, width, height, left, top) => {
|
|
90
|
+
res = {
|
|
91
|
+
nativeEvent: {
|
|
92
|
+
layout: { x, y, width, height, left, top },
|
|
93
|
+
target
|
|
94
|
+
},
|
|
95
|
+
timeStamp: Date.now()
|
|
96
|
+
};
|
|
97
|
+
}), !res)
|
|
98
|
+
throw new Error("\u203C\uFE0F");
|
|
99
|
+
return res;
|
|
100
|
+
}, measureLayoutAsync = async (node, relativeTo, callback) => {
|
|
101
|
+
const relativeNode = relativeTo || node?.parentElement;
|
|
102
|
+
if (relativeNode instanceof HTMLElement) {
|
|
103
|
+
const [nodeDim, relativeNodeDim] = await Promise.all([
|
|
104
|
+
node.getBoundingClientRect(),
|
|
105
|
+
relativeNode.getBoundingClientRect()
|
|
106
|
+
]);
|
|
107
|
+
if (relativeNodeDim && nodeDim) {
|
|
108
|
+
const { x, y, width, height, left, top } = getRelativeDimensions(
|
|
109
|
+
nodeDim,
|
|
110
|
+
relativeNodeDim
|
|
111
|
+
);
|
|
112
|
+
callback(x, y, width, height, left, top);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
63
115
|
}, getRelativeDimensions = (a, b) => {
|
|
64
116
|
const { height, left, top, width } = a, x = left - b.left, y = top - b.top;
|
|
65
117
|
return { x, y, width, height, left, top };
|
|
@@ -72,12 +124,16 @@ function useElementLayout(ref, onLayout) {
|
|
|
72
124
|
if (node2)
|
|
73
125
|
return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
|
|
74
126
|
Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
|
|
127
|
+
const timer = DebounceTimers.get(node2);
|
|
128
|
+
timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
|
|
75
129
|
};
|
|
76
130
|
}, [ref, !!onLayout]);
|
|
77
131
|
}
|
|
78
132
|
export {
|
|
79
133
|
getElementLayoutEvent,
|
|
134
|
+
getElementLayoutEventAsync,
|
|
80
135
|
measureLayout,
|
|
136
|
+
measureLayoutAsync,
|
|
81
137
|
setOnLayoutStrategy,
|
|
82
138
|
useElementLayout
|
|
83
139
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useElementLayout.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,UAAU,iCAAiC;AACpD;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AAGP,MAAM,iBAAiB,oBAAI,QAA+B,GACpD,QAAQ,oBAAI,IAAiB;AAInC,IAAI,
|
|
4
|
+
"mappings": "AAAA,SAAS,UAAU,iCAAiC;AACpD;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AAGP,MAAM,iBAAiB,oBAAI,QAA+B,GACpD,QAAQ,oBAAI,IAAiB;AAInC,IAAI,WAAsC;AAEnC,SAAS,oBAAoB,OAAkC;AACpE,aAAW;AACb;AAmBA,MAAM,gBAAgB,oBAAI,QAA8B,GAClD,kBAAkB,oBAAI,QAA8B,GACpD,iBAAiB,oBAAI,QAAqC,GAC1D,iBAAiB,oBAAI,QAA6B,GAElD,MAAM,OAAO,SAAW,MAAc,OAAO,wBAAwB,QACrE,iBAAiB;AAEvB,IAAI;AACF,MAAI,KAAK;AAuFP,QAAS,yBAAT,WAAkC;AAChC,YAAM,MAAM,KAAK,IAAI,GACf,qBAAqB,MAAM;AACjC,oBAAc,KAEV,aAAa,UAIb,qBAAqB,QAAoB,8BAGzC,MAAM,QAAQ,qBAAqB,IAGvC,IAAK,sBAAsB;AAAA,IAC7B,GArGI,eAAe;AACnB,UAAM,gBAAgB,oBAAI,IAA2B;AAGrD,QAAI,cAAc,KAAK,IAAI;AAC3B,UAAM,6BAA6B;AAEnC,+BAA2B,MAAM;AAC/B,qBAAe,IACX,kBACF,cAAc,QAAQ,CAAC,OAAO,GAAG,CAAC,GAClC,cAAc,MAAM;AAAA,IAExB,CAAC;AAED,mBAAe,sBAAsB,MAAmB;AACtD,YAAM,WAAW,KAAK,sBAAsB,GACtC,aAAa,KAAK,eAClB,aAAa,YAAY,sBAAsB,GAE/C,WAAW,eAAe,IAAI,IAAI;AACxC,UAAI,OAAO,YAAa,WAAY;AAEpC,YAAM,aAAa,cAAc,IAAI,IAAI,GACnC,mBAAmB,aAAa,cAAc,IAAI,UAAU,IAAI;AAEtE,UACE,CAAC;AAAA,MAEA,CAAC,eAAe,YAAY,QAAQ,MAClC,CAAC,oBAAoB,CAAC,eAAe,kBAAkB,UAAU;AAOpE,YALA,cAAc,IAAI,MAAM,QAAQ,GAC5B,cAAc,cAChB,gBAAgB,IAAI,YAAY,UAAU,GAGxC,cAAc;AAEhB,gBAAM,QAAQ,sBAAsB,IAAI;AACxC,wBAAc,IAAI,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,QAC/C,WAAW,aAAa,SAAS;AAE/B,gBAAM,MAAM,KAAK,IAAI;AACrB,yBAAe,IAAI,MAAM,GAAG;AAG5B,gBAAM,gBAAgB,eAAe,IAAI,IAAI;AAC7C,UAAI,iBACF,aAAa,aAAa;AAI5B,gBAAM,QAAQ,WAAW,YAAY;AACnC,kBAAM,aAAa,eAAe,IAAI,IAAI,KAAK,GACzC,kBAAkB,KAAK,IAAI,IAAI;AAGrC,gBAAI,mBAAmB,gBAAgB;AACrC,oBAAM,QAAQ,MAAM,2BAA2B,IAAI;AACnD,uBAAS,KAAK,GACd,eAAe,OAAO,IAAI;AAAA,YAC5B,OAAO;AAEL,oBAAM,iBAAiB,iBAAiB,iBAClC,WAAW,WAAW,YAAY;AACtC,sBAAM,QAAQ,MAAM,2BAA2B,IAAI;AACnD,yBAAS,KAAK,GACd,eAAe,OAAO,IAAI;AAAA,cAC5B,GAAG,cAAc;AACjB,6BAAe,IAAI,MAAM,QAAQ;AAAA,YACnC;AAAA,UACF,GAAG,cAAc;AAEjB,yBAAe,IAAI,MAAM,KAAK;AAAA,QAChC,OAAO;AAEL,gBAAM,QAAQ,sBAAsB,IAAI;AACxC,mBAAS,KAAK;AAAA,QAChB;AAAA,IAEJ;AAGA,QAAK,sBAAsB;AAAA,EAkB7B;AACE,IAAI,QAAQ,IAAI,aAAa,iBAC3B,QAAQ;AAAA,MACN;AAAA,IACF;AAMC,MAAM,wBAAwB,CAAC,WAAqC;AACzE,MAAI,MAA0B;AAU9B,MATA,cAAc,QAAQ,MAAM,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,QAAQ;AAC9D,UAAM;AAAA,MACJ,aAAa;AAAA,QACX,QAAQ,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF,CAAC,GACG,CAAC;AACH,UAAM,IAAI,MAAM,cAAI;AAEtB,SAAO;AACT,GAEa,gBAAgB,CAC3B,MACA,YACA,aAQG;AACH,QAAM,eAAe,cAAc,MAAM;AACzC,MAAI,wBAAwB,aAAa;AACvC,UAAM,UAAU,KAAK,sBAAsB,GACrC,kBAAkB,aAAa,sBAAsB;AAE3D,QAAI,mBAAmB,SAAS;AAC9B,YAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI,IAAI;AAAA,QACzC;AAAA,QACA;AAAA,MACF;AACA,eAAS,GAAG,GAAG,OAAO,QAAQ,MAAM,GAAG;AAAA,IACzC;AAAA,EACF;AACF,GAEa,6BAA6B,OACxC,WACyB;AACzB,MAAI,MAA0B;AAU9B,MATA,MAAM,mBAAmB,QAAQ,MAAM,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,QAAQ;AACzE,UAAM;AAAA,MACJ,aAAa;AAAA,QACX,QAAQ,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF,CAAC,GACG,CAAC;AACH,UAAM,IAAI,MAAM,cAAI;AAEtB,SAAO;AACT,GAEa,qBAAqB,OAChC,MACA,YACA,aAQG;AACH,QAAM,eAAe,cAAc,MAAM;AACzC,MAAI,wBAAwB,aAAa;AACvC,UAAM,CAAC,SAAS,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,MACnD,KAAK,sBAAsB;AAAA,MAC3B,aAAa,sBAAsB;AAAA,IACrC,CAAC;AAED,QAAI,mBAAmB,SAAS;AAC9B,YAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI,IAAI;AAAA,QACzC;AAAA,QACA;AAAA,MACF;AACA,eAAS,GAAG,GAAG,OAAO,QAAQ,MAAM,GAAG;AAAA,IACzC;AAAA,EACF;AACF,GAEM,wBAAwB,CAAC,GAAoB,MAAuB;AACxE,QAAM,EAAE,QAAQ,MAAM,KAAK,MAAM,IAAI,GAC/B,IAAI,OAAO,EAAE,MACb,IAAI,MAAM,EAAE;AAClB,SAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,MAAM,IAAI;AAC1C;AAEO,SAAS,iBACd,KACA,UACA;AAEA,QAAM,OAAO,IAAI,SAAS;AAC1B,EAAI,QAAQ,YACV,eAAe,IAAI,MAAM,QAAQ,GAGnC,0BAA0B,MAAM;AAC9B,QAAI,CAAC,SAAU;AACf,UAAMA,QAAO,IAAI,SAAS;AAC1B,QAAKA;AAEL,4BAAe,IAAIA,OAAM,QAAQ,GACjC,MAAM,IAAIA,KAAI,GACd,SAAS,sBAAsBA,KAAI,CAAC,GAE7B,MAAM;AACX,cAAM,OAAOA,KAAI,GACjB,eAAe,OAAOA,KAAI,GAC1B,cAAc,OAAOA,KAAI;AAGzB,cAAM,QAAQ,eAAe,IAAIA,KAAI;AACrC,QAAI,UACF,aAAa,KAAK,GAClB,eAAe,OAAOA,KAAI,IAE5B,eAAe,OAAOA,KAAI;AAAA,MAC5B;AAAA,EACF,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACtB;",
|
|
5
5
|
"names": ["node"]
|
|
6
6
|
}
|
|
@@ -2,34 +2,21 @@ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
|
2
2
|
import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
|
|
3
3
|
const LayoutHandlers = /* @__PURE__ */new WeakMap(),
|
|
4
4
|
Nodes = /* @__PURE__ */new Set();
|
|
5
|
-
let
|
|
5
|
+
let strategy = "async";
|
|
6
6
|
function setOnLayoutStrategy(state) {
|
|
7
|
-
|
|
7
|
+
strategy = state;
|
|
8
8
|
}
|
|
9
9
|
const NodeRectCache = /* @__PURE__ */new WeakMap(),
|
|
10
10
|
ParentRectCache = /* @__PURE__ */new WeakMap(),
|
|
11
|
-
|
|
11
|
+
DebounceTimers = /* @__PURE__ */new WeakMap(),
|
|
12
|
+
LastChangeTime = /* @__PURE__ */new WeakMap(),
|
|
13
|
+
rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
|
|
14
|
+
DEBOUNCE_DELAY = 32;
|
|
12
15
|
if (isClient) if (rAF) {
|
|
13
|
-
let
|
|
14
|
-
const nodeRect = node.getBoundingClientRect(),
|
|
15
|
-
parentNode = node.parentElement,
|
|
16
|
-
parentRect = parentNode?.getBoundingClientRect(),
|
|
17
|
-
onLayout = LayoutHandlers.get(node);
|
|
18
|
-
if (typeof onLayout != "function") return;
|
|
19
|
-
const cachedRect = NodeRectCache.get(node),
|
|
20
|
-
cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
21
|
-
if (!cachedRect ||
|
|
22
|
-
// has changed one rect
|
|
23
|
-
!isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) {
|
|
24
|
-
NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
|
|
25
|
-
const event = getElementLayoutEvent(node);
|
|
26
|
-
avoidUpdates ? queuedUpdates.set(node, () => onLayout(event)) : onLayout(event);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
layoutOnAnimationFrame = function () {
|
|
16
|
+
let layoutOnAnimationFrame = function () {
|
|
30
17
|
const now = Date.now(),
|
|
31
18
|
timeSinceLastFrame = now - lastFrameAt;
|
|
32
|
-
lastFrameAt = now,
|
|
19
|
+
lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
|
|
33
20
|
},
|
|
34
21
|
avoidUpdates = !0;
|
|
35
22
|
const queuedUpdates = /* @__PURE__ */new Map();
|
|
@@ -37,7 +24,47 @@ if (isClient) if (rAF) {
|
|
|
37
24
|
const numDroppedFramesUntilPause = 2;
|
|
38
25
|
___onDidFinishClientRender(() => {
|
|
39
26
|
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear());
|
|
40
|
-
})
|
|
27
|
+
});
|
|
28
|
+
async function updateLayoutIfChanged(node) {
|
|
29
|
+
const nodeRect = node.getBoundingClientRect(),
|
|
30
|
+
parentNode = node.parentElement,
|
|
31
|
+
parentRect = parentNode?.getBoundingClientRect(),
|
|
32
|
+
onLayout = LayoutHandlers.get(node);
|
|
33
|
+
if (typeof onLayout != "function") return;
|
|
34
|
+
const cachedRect = NodeRectCache.get(node),
|
|
35
|
+
cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
36
|
+
if (!cachedRect ||
|
|
37
|
+
// has changed one rect
|
|
38
|
+
!isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
|
|
39
|
+
const event = getElementLayoutEvent(node);
|
|
40
|
+
queuedUpdates.set(node, () => onLayout(event));
|
|
41
|
+
} else if (strategy === "async") {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
LastChangeTime.set(node, now);
|
|
44
|
+
const existingTimer = DebounceTimers.get(node);
|
|
45
|
+
existingTimer && clearTimeout(existingTimer);
|
|
46
|
+
const timer = setTimeout(async () => {
|
|
47
|
+
const lastChange = LastChangeTime.get(node) || 0,
|
|
48
|
+
timeSinceChange = Date.now() - lastChange;
|
|
49
|
+
if (timeSinceChange >= DEBOUNCE_DELAY) {
|
|
50
|
+
const event = await getElementLayoutEventAsync(node);
|
|
51
|
+
onLayout(event), DebounceTimers.delete(node);
|
|
52
|
+
} else {
|
|
53
|
+
const remainingDelay = DEBOUNCE_DELAY - timeSinceChange,
|
|
54
|
+
newTimer = setTimeout(async () => {
|
|
55
|
+
const event = await getElementLayoutEventAsync(node);
|
|
56
|
+
onLayout(event), DebounceTimers.delete(node);
|
|
57
|
+
}, remainingDelay);
|
|
58
|
+
DebounceTimers.set(node, newTimer);
|
|
59
|
+
}
|
|
60
|
+
}, DEBOUNCE_DELAY);
|
|
61
|
+
DebounceTimers.set(node, timer);
|
|
62
|
+
} else {
|
|
63
|
+
const event = getElementLayoutEvent(node);
|
|
64
|
+
onLayout(event);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
rAF(layoutOnAnimationFrame);
|
|
41
68
|
} else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
|
|
42
69
|
const getElementLayoutEvent = target => {
|
|
43
70
|
let res = null;
|
|
@@ -77,6 +104,43 @@ const getElementLayoutEvent = target => {
|
|
|
77
104
|
}
|
|
78
105
|
}
|
|
79
106
|
},
|
|
107
|
+
getElementLayoutEventAsync = async target => {
|
|
108
|
+
let res = null;
|
|
109
|
+
if (await measureLayoutAsync(target, null, (x, y, width, height, left, top) => {
|
|
110
|
+
res = {
|
|
111
|
+
nativeEvent: {
|
|
112
|
+
layout: {
|
|
113
|
+
x,
|
|
114
|
+
y,
|
|
115
|
+
width,
|
|
116
|
+
height,
|
|
117
|
+
left,
|
|
118
|
+
top
|
|
119
|
+
},
|
|
120
|
+
target
|
|
121
|
+
},
|
|
122
|
+
timeStamp: Date.now()
|
|
123
|
+
};
|
|
124
|
+
}), !res) throw new Error("\u203C\uFE0F");
|
|
125
|
+
return res;
|
|
126
|
+
},
|
|
127
|
+
measureLayoutAsync = async (node, relativeTo, callback) => {
|
|
128
|
+
const relativeNode = relativeTo || node?.parentElement;
|
|
129
|
+
if (relativeNode instanceof HTMLElement) {
|
|
130
|
+
const [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
|
|
131
|
+
if (relativeNodeDim && nodeDim) {
|
|
132
|
+
const {
|
|
133
|
+
x,
|
|
134
|
+
y,
|
|
135
|
+
width,
|
|
136
|
+
height,
|
|
137
|
+
left,
|
|
138
|
+
top
|
|
139
|
+
} = getRelativeDimensions(nodeDim, relativeNodeDim);
|
|
140
|
+
callback(x, y, width, height, left, top);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
80
144
|
getRelativeDimensions = (a, b) => {
|
|
81
145
|
const {
|
|
82
146
|
height,
|
|
@@ -102,8 +166,10 @@ function useElementLayout(ref, onLayout) {
|
|
|
102
166
|
const node2 = ref.current?.host;
|
|
103
167
|
if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
|
|
104
168
|
Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
|
|
169
|
+
const timer = DebounceTimers.get(node2);
|
|
170
|
+
timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
|
|
105
171
|
};
|
|
106
172
|
}, [ref, !!onLayout]);
|
|
107
173
|
}
|
|
108
|
-
export { getElementLayoutEvent, measureLayout, setOnLayoutStrategy, useElementLayout };
|
|
174
|
+
export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
|
|
109
175
|
//# sourceMappingURL=useElementLayout.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","
|
|
1
|
+
{"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","forEach","updateLayoutIfChanged","avoidUpdates","queuedUpdates","Map","cb","clear","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","existingTimer","clearTimeout","timer","setTimeout","lastChange","timeSinceChange","getElementLayoutEventAsync","delete","remainingDelay","newTimer","process","env","NODE_ENV","console","warn","target","res","measureLayout","x","y","width","height","left","top","nativeEvent","layout","timeStamp","Error","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","getRelativeDimensions","measureLayoutAsync","Promise","all","a","b","useElementLayout","ref","current","host","node2","add"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -2,45 +2,28 @@ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
|
2
2
|
import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
|
|
3
3
|
var LayoutHandlers = /* @__PURE__ */new WeakMap(),
|
|
4
4
|
Nodes = /* @__PURE__ */new Set(),
|
|
5
|
-
|
|
5
|
+
strategy = "async";
|
|
6
6
|
function setOnLayoutStrategy(state) {
|
|
7
|
-
|
|
7
|
+
strategy = state;
|
|
8
8
|
}
|
|
9
9
|
var NodeRectCache = /* @__PURE__ */new WeakMap(),
|
|
10
10
|
ParentRectCache = /* @__PURE__ */new WeakMap(),
|
|
11
|
-
|
|
11
|
+
DebounceTimers = /* @__PURE__ */new WeakMap(),
|
|
12
|
+
LastChangeTime = /* @__PURE__ */new WeakMap(),
|
|
13
|
+
rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
|
|
14
|
+
DEBOUNCE_DELAY = 32;
|
|
12
15
|
if (isClient) if (rAF) {
|
|
13
|
-
let
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
|
|
25
|
-
var event = getElementLayoutEvent(node);
|
|
26
|
-
avoidUpdates ? queuedUpdates.set(node, function () {
|
|
27
|
-
return onLayout(event);
|
|
28
|
-
}) : onLayout(event);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
layoutOnAnimationFrame = function () {
|
|
33
|
-
var now = Date.now(),
|
|
34
|
-
timeSinceLastFrame = now - lastFrameAt;
|
|
35
|
-
if (lastFrameAt = now, status !== "inactive") {
|
|
36
|
-
var expectedFrameTime = 16.67,
|
|
37
|
-
hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
|
|
38
|
-
hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
|
|
39
|
-
}
|
|
40
|
-
rAF(layoutOnAnimationFrame);
|
|
41
|
-
};
|
|
42
|
-
var updateLayoutIfChanged2 = updateLayoutIfChanged,
|
|
43
|
-
layoutOnAnimationFrame2 = layoutOnAnimationFrame,
|
|
16
|
+
let layoutOnAnimationFrame = function () {
|
|
17
|
+
var now = Date.now(),
|
|
18
|
+
timeSinceLastFrame = now - lastFrameAt;
|
|
19
|
+
if (lastFrameAt = now, strategy !== "off") {
|
|
20
|
+
var expectedFrameTime = 16.67,
|
|
21
|
+
hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
|
|
22
|
+
hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
|
|
23
|
+
}
|
|
24
|
+
rAF(layoutOnAnimationFrame);
|
|
25
|
+
};
|
|
26
|
+
var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
|
|
44
27
|
avoidUpdates = !0,
|
|
45
28
|
queuedUpdates = /* @__PURE__ */new Map(),
|
|
46
29
|
lastFrameAt = Date.now(),
|
|
@@ -49,7 +32,50 @@ if (isClient) if (rAF) {
|
|
|
49
32
|
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function (cb) {
|
|
50
33
|
return cb();
|
|
51
34
|
}), queuedUpdates.clear());
|
|
52
|
-
})
|
|
35
|
+
});
|
|
36
|
+
async function updateLayoutIfChanged(node) {
|
|
37
|
+
var nodeRect = node.getBoundingClientRect(),
|
|
38
|
+
parentNode = node.parentElement,
|
|
39
|
+
parentRect = parentNode?.getBoundingClientRect(),
|
|
40
|
+
onLayout = LayoutHandlers.get(node);
|
|
41
|
+
if (typeof onLayout == "function") {
|
|
42
|
+
var cachedRect = NodeRectCache.get(node),
|
|
43
|
+
cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
44
|
+
if (!cachedRect ||
|
|
45
|
+
// has changed one rect
|
|
46
|
+
!isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect))) if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
|
|
47
|
+
var event = getElementLayoutEvent(node);
|
|
48
|
+
queuedUpdates.set(node, function () {
|
|
49
|
+
return onLayout(event);
|
|
50
|
+
});
|
|
51
|
+
} else if (strategy === "async") {
|
|
52
|
+
var now = Date.now();
|
|
53
|
+
LastChangeTime.set(node, now);
|
|
54
|
+
var existingTimer = DebounceTimers.get(node);
|
|
55
|
+
existingTimer && clearTimeout(existingTimer);
|
|
56
|
+
var timer = setTimeout(async function () {
|
|
57
|
+
var lastChange = LastChangeTime.get(node) || 0,
|
|
58
|
+
timeSinceChange = Date.now() - lastChange;
|
|
59
|
+
if (timeSinceChange >= DEBOUNCE_DELAY) {
|
|
60
|
+
var event2 = await getElementLayoutEventAsync(node);
|
|
61
|
+
onLayout(event2), DebounceTimers.delete(node);
|
|
62
|
+
} else {
|
|
63
|
+
var remainingDelay = DEBOUNCE_DELAY - timeSinceChange,
|
|
64
|
+
newTimer = setTimeout(async function () {
|
|
65
|
+
var event3 = await getElementLayoutEventAsync(node);
|
|
66
|
+
onLayout(event3), DebounceTimers.delete(node);
|
|
67
|
+
}, remainingDelay);
|
|
68
|
+
DebounceTimers.set(node, newTimer);
|
|
69
|
+
}
|
|
70
|
+
}, DEBOUNCE_DELAY);
|
|
71
|
+
DebounceTimers.set(node, timer);
|
|
72
|
+
} else {
|
|
73
|
+
var event1 = getElementLayoutEvent(node);
|
|
74
|
+
onLayout(event1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
rAF(layoutOnAnimationFrame);
|
|
53
79
|
} else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
|
|
54
80
|
var getElementLayoutEvent = function (target) {
|
|
55
81
|
var res = null;
|
|
@@ -89,6 +115,43 @@ var getElementLayoutEvent = function (target) {
|
|
|
89
115
|
}
|
|
90
116
|
}
|
|
91
117
|
},
|
|
118
|
+
getElementLayoutEventAsync = async function (target) {
|
|
119
|
+
var res = null;
|
|
120
|
+
if (await measureLayoutAsync(target, null, function (x, y, width, height, left, top) {
|
|
121
|
+
res = {
|
|
122
|
+
nativeEvent: {
|
|
123
|
+
layout: {
|
|
124
|
+
x,
|
|
125
|
+
y,
|
|
126
|
+
width,
|
|
127
|
+
height,
|
|
128
|
+
left,
|
|
129
|
+
top
|
|
130
|
+
},
|
|
131
|
+
target
|
|
132
|
+
},
|
|
133
|
+
timeStamp: Date.now()
|
|
134
|
+
};
|
|
135
|
+
}), !res) throw new Error("\u203C\uFE0F");
|
|
136
|
+
return res;
|
|
137
|
+
},
|
|
138
|
+
measureLayoutAsync = async function (node, relativeTo, callback) {
|
|
139
|
+
var relativeNode = relativeTo || node?.parentElement;
|
|
140
|
+
if (relativeNode instanceof HTMLElement) {
|
|
141
|
+
var [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
|
|
142
|
+
if (relativeNodeDim && nodeDim) {
|
|
143
|
+
var {
|
|
144
|
+
x,
|
|
145
|
+
y,
|
|
146
|
+
width,
|
|
147
|
+
height,
|
|
148
|
+
left,
|
|
149
|
+
top
|
|
150
|
+
} = getRelativeDimensions(nodeDim, relativeNodeDim);
|
|
151
|
+
callback(x, y, width, height, left, top);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
92
155
|
getRelativeDimensions = function (a, b) {
|
|
93
156
|
var {
|
|
94
157
|
height,
|
|
@@ -116,9 +179,11 @@ function useElementLayout(ref, onLayout) {
|
|
|
116
179
|
var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
|
|
117
180
|
if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), function () {
|
|
118
181
|
Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
|
|
182
|
+
var timer = DebounceTimers.get(node2);
|
|
183
|
+
timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
|
|
119
184
|
};
|
|
120
185
|
}
|
|
121
186
|
}, [ref, !!onLayout]);
|
|
122
187
|
}
|
|
123
|
-
export { getElementLayoutEvent, measureLayout, setOnLayoutStrategy, useElementLayout };
|
|
188
|
+
export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
|
|
124
189
|
//# sourceMappingURL=useElementLayout.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","
|
|
1
|
+
{"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","___onDidFinishClientRender","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","expectedFrameTime","hasRecentSyncWork","numDroppedFramesUntilPause","forEach","updateLayoutIfChanged","layoutOnAnimationFrame2","avoidUpdates","queuedUpdates","Map","cb","clear","node","nodeRect","getBoundingClientRect","parentNode","parentElement","parentRect","onLayout","get","cachedRect","cachedParentRect","set","event","getElementLayoutEvent","existingTimer","clearTimeout","timer","setTimeout","lastChange","timeSinceChange","event2","getElementLayoutEventAsync","delete","remainingDelay","newTimer","event3","event1","process","env","NODE_ENV","console","warn","target","res","measureLayout","x","y","width","height","left","top","nativeEvent","layout","timeStamp","Error","relativeTo","callback","relativeNode","HTMLElement","nodeDim","relativeNodeDim","getRelativeDimensions","measureLayoutAsync","Promise","all","a","b"],"sources":["../../../src/hooks/useElementLayout.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|