@tamagui/core 1.129.5-1751220455565 → 1.129.6-1751237024118
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/index.cjs +15 -9
- package/dist/cjs/index.js +11 -7
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/index.native.js +15 -7
- package/dist/cjs/index.native.js.map +2 -2
- package/dist/esm/index.js +15 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +11 -6
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +13 -6
- package/dist/esm/index.native.js.map +1 -1
- package/dist/native.js +427 -356
- package/dist/native.js.map +3 -3
- package/dist/test.native.js +407 -335
- package/dist/test.native.js.map +3 -3
- package/package.json +9 -8
- package/src/index.tsx +19 -3
- package/types/index.d.ts +3 -2
- package/types/index.d.ts.map +1 -1
- package/dist/cjs/helpers/getBoundingClientRect.cjs +0 -41
- package/dist/cjs/helpers/getBoundingClientRect.js +0 -39
- package/dist/cjs/helpers/getBoundingClientRect.js.map +0 -6
- package/dist/cjs/helpers/getBoundingClientRect.native.js +0 -48
- package/dist/cjs/helpers/getBoundingClientRect.native.js.map +0 -6
- package/dist/cjs/helpers/getRect.cjs +0 -44
- package/dist/cjs/helpers/getRect.js +0 -27
- package/dist/cjs/helpers/getRect.js.map +0 -6
- package/dist/cjs/helpers/getRect.native.js +0 -39
- package/dist/cjs/helpers/getRect.native.js.map +0 -6
- package/dist/cjs/hooks/useElementLayout.cjs +0 -203
- package/dist/cjs/hooks/useElementLayout.js +0 -152
- package/dist/cjs/hooks/useElementLayout.js.map +0 -6
- package/dist/cjs/hooks/useElementLayout.native.js +0 -185
- package/dist/cjs/hooks/useElementLayout.native.js.map +0 -6
- package/dist/esm/helpers/getBoundingClientRect.js +0 -23
- package/dist/esm/helpers/getBoundingClientRect.js.map +0 -6
- package/dist/esm/helpers/getBoundingClientRect.mjs +0 -17
- package/dist/esm/helpers/getBoundingClientRect.mjs.map +0 -1
- package/dist/esm/helpers/getBoundingClientRect.native.js +0 -24
- package/dist/esm/helpers/getBoundingClientRect.native.js.map +0 -1
- package/dist/esm/helpers/getRect.js +0 -11
- package/dist/esm/helpers/getRect.js.map +0 -6
- package/dist/esm/helpers/getRect.mjs +0 -21
- package/dist/esm/helpers/getRect.mjs.map +0 -1
- package/dist/esm/helpers/getRect.native.js +0 -22
- package/dist/esm/helpers/getRect.native.js.map +0 -1
- package/dist/esm/hooks/useElementLayout.js +0 -140
- package/dist/esm/hooks/useElementLayout.js.map +0 -6
- package/dist/esm/hooks/useElementLayout.mjs +0 -175
- package/dist/esm/hooks/useElementLayout.mjs.map +0 -1
- package/dist/esm/hooks/useElementLayout.native.js +0 -189
- package/dist/esm/hooks/useElementLayout.native.js.map +0 -1
- package/src/helpers/getBoundingClientRect.tsx +0 -30
- package/src/helpers/getRect.tsx +0 -8
- package/src/hooks/useElementLayout.tsx +0 -292
- package/types/helpers/getBoundingClientRect.d.ts +0 -3
- package/types/helpers/getBoundingClientRect.d.ts.map +0 -1
- package/types/helpers/getRect.d.ts +0 -9
- package/types/helpers/getRect.d.ts.map +0 -1
- package/types/hooks/useElementLayout.d.ts +0 -26
- package/types/hooks/useElementLayout.d.ts.map +0 -1
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
2
|
-
import {
|
|
3
|
-
isEqualShallow,
|
|
4
|
-
___onDidFinishClientRender
|
|
5
|
-
} from "@tamagui/web";
|
|
6
|
-
const LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set();
|
|
7
|
-
let strategy = "async";
|
|
8
|
-
function setOnLayoutStrategy(state) {
|
|
9
|
-
strategy = state;
|
|
10
|
-
}
|
|
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
|
-
if (isClient)
|
|
13
|
-
if (rAF) {
|
|
14
|
-
let layoutOnAnimationFrame = function() {
|
|
15
|
-
const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
|
|
16
|
-
lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
|
|
17
|
-
}, avoidUpdates = !0;
|
|
18
|
-
const queuedUpdates = /* @__PURE__ */ new Map();
|
|
19
|
-
let lastFrameAt = Date.now();
|
|
20
|
-
const numDroppedFramesUntilPause = 2;
|
|
21
|
-
___onDidFinishClientRender(() => {
|
|
22
|
-
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear());
|
|
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);
|
|
58
|
-
} else
|
|
59
|
-
process.env.NODE_ENV === "development" && console.warn(
|
|
60
|
-
"No requestAnimationFrame - please polyfill for onLayout to work correctly"
|
|
61
|
-
);
|
|
62
|
-
const getElementLayoutEvent = (target) => {
|
|
63
|
-
let res = null;
|
|
64
|
-
if (measureLayout(target, null, (x, y, width, height, left, top) => {
|
|
65
|
-
res = {
|
|
66
|
-
nativeEvent: {
|
|
67
|
-
layout: { x, y, width, height, left, top },
|
|
68
|
-
target
|
|
69
|
-
},
|
|
70
|
-
timeStamp: Date.now()
|
|
71
|
-
};
|
|
72
|
-
}), !res)
|
|
73
|
-
throw new Error("\u203C\uFE0F");
|
|
74
|
-
return res;
|
|
75
|
-
}, measureLayout = (node, relativeTo, callback) => {
|
|
76
|
-
const relativeNode = relativeTo || node?.parentElement;
|
|
77
|
-
if (relativeNode instanceof HTMLElement) {
|
|
78
|
-
const nodeDim = node.getBoundingClientRect(), relativeNodeDim = relativeNode.getBoundingClientRect();
|
|
79
|
-
if (relativeNodeDim && nodeDim) {
|
|
80
|
-
const { x, y, width, height, left, top } = getRelativeDimensions(
|
|
81
|
-
nodeDim,
|
|
82
|
-
relativeNodeDim
|
|
83
|
-
);
|
|
84
|
-
callback(x, y, width, height, left, top);
|
|
85
|
-
}
|
|
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
|
-
}
|
|
115
|
-
}, getRelativeDimensions = (a, b) => {
|
|
116
|
-
const { height, left, top, width } = a, x = left - b.left, y = top - b.top;
|
|
117
|
-
return { x, y, width, height, left, top };
|
|
118
|
-
};
|
|
119
|
-
function useElementLayout(ref, onLayout) {
|
|
120
|
-
const node = ref.current?.host;
|
|
121
|
-
node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
|
|
122
|
-
if (!onLayout) return;
|
|
123
|
-
const node2 = ref.current?.host;
|
|
124
|
-
if (node2)
|
|
125
|
-
return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
|
|
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);
|
|
129
|
-
};
|
|
130
|
-
}, [ref, !!onLayout]);
|
|
131
|
-
}
|
|
132
|
-
export {
|
|
133
|
-
getElementLayoutEvent,
|
|
134
|
-
getElementLayoutEventAsync,
|
|
135
|
-
measureLayout,
|
|
136
|
-
measureLayoutAsync,
|
|
137
|
-
setOnLayoutStrategy,
|
|
138
|
-
useElementLayout
|
|
139
|
-
};
|
|
140
|
-
//# sourceMappingURL=useElementLayout.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/hooks/useElementLayout.tsx"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["node"]
|
|
6
|
-
}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
2
|
-
import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
|
|
3
|
-
const LayoutHandlers = /* @__PURE__ */new WeakMap(),
|
|
4
|
-
Nodes = /* @__PURE__ */new Set();
|
|
5
|
-
let strategy = "async";
|
|
6
|
-
function setOnLayoutStrategy(state) {
|
|
7
|
-
strategy = state;
|
|
8
|
-
}
|
|
9
|
-
const NodeRectCache = /* @__PURE__ */new WeakMap(),
|
|
10
|
-
ParentRectCache = /* @__PURE__ */new WeakMap(),
|
|
11
|
-
DebounceTimers = /* @__PURE__ */new WeakMap(),
|
|
12
|
-
LastChangeTime = /* @__PURE__ */new WeakMap(),
|
|
13
|
-
rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
|
|
14
|
-
DEBOUNCE_DELAY = 32;
|
|
15
|
-
if (isClient) if (rAF) {
|
|
16
|
-
let layoutOnAnimationFrame = function () {
|
|
17
|
-
const now = Date.now(),
|
|
18
|
-
timeSinceLastFrame = now - lastFrameAt;
|
|
19
|
-
lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
|
|
20
|
-
},
|
|
21
|
-
avoidUpdates = !0;
|
|
22
|
-
const queuedUpdates = /* @__PURE__ */new Map();
|
|
23
|
-
let lastFrameAt = Date.now();
|
|
24
|
-
const numDroppedFramesUntilPause = 2;
|
|
25
|
-
___onDidFinishClientRender(() => {
|
|
26
|
-
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear());
|
|
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);
|
|
68
|
-
} else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
|
|
69
|
-
const getElementLayoutEvent = target => {
|
|
70
|
-
let res = null;
|
|
71
|
-
if (measureLayout(target, null, (x, y, width, height, left, top) => {
|
|
72
|
-
res = {
|
|
73
|
-
nativeEvent: {
|
|
74
|
-
layout: {
|
|
75
|
-
x,
|
|
76
|
-
y,
|
|
77
|
-
width,
|
|
78
|
-
height,
|
|
79
|
-
left,
|
|
80
|
-
top
|
|
81
|
-
},
|
|
82
|
-
target
|
|
83
|
-
},
|
|
84
|
-
timeStamp: Date.now()
|
|
85
|
-
};
|
|
86
|
-
}), !res) throw new Error("\u203C\uFE0F");
|
|
87
|
-
return res;
|
|
88
|
-
},
|
|
89
|
-
measureLayout = (node, relativeTo, callback) => {
|
|
90
|
-
const relativeNode = relativeTo || node?.parentElement;
|
|
91
|
-
if (relativeNode instanceof HTMLElement) {
|
|
92
|
-
const nodeDim = node.getBoundingClientRect(),
|
|
93
|
-
relativeNodeDim = relativeNode.getBoundingClientRect();
|
|
94
|
-
if (relativeNodeDim && nodeDim) {
|
|
95
|
-
const {
|
|
96
|
-
x,
|
|
97
|
-
y,
|
|
98
|
-
width,
|
|
99
|
-
height,
|
|
100
|
-
left,
|
|
101
|
-
top
|
|
102
|
-
} = getRelativeDimensions(nodeDim, relativeNodeDim);
|
|
103
|
-
callback(x, y, width, height, left, top);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
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
|
-
},
|
|
144
|
-
getRelativeDimensions = (a, b) => {
|
|
145
|
-
const {
|
|
146
|
-
height,
|
|
147
|
-
left,
|
|
148
|
-
top,
|
|
149
|
-
width
|
|
150
|
-
} = a,
|
|
151
|
-
x = left - b.left,
|
|
152
|
-
y = top - b.top;
|
|
153
|
-
return {
|
|
154
|
-
x,
|
|
155
|
-
y,
|
|
156
|
-
width,
|
|
157
|
-
height,
|
|
158
|
-
left,
|
|
159
|
-
top
|
|
160
|
-
};
|
|
161
|
-
};
|
|
162
|
-
function useElementLayout(ref, onLayout) {
|
|
163
|
-
const node = ref.current?.host;
|
|
164
|
-
node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
|
|
165
|
-
if (!onLayout) return;
|
|
166
|
-
const node2 = ref.current?.host;
|
|
167
|
-
if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
|
|
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);
|
|
171
|
-
};
|
|
172
|
-
}, [ref, !!onLayout]);
|
|
173
|
-
}
|
|
174
|
-
export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
|
|
175
|
-
//# sourceMappingURL=useElementLayout.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
|
|
2
|
-
import { isEqualShallow, ___onDidFinishClientRender } from "@tamagui/web";
|
|
3
|
-
var LayoutHandlers = /* @__PURE__ */new WeakMap(),
|
|
4
|
-
Nodes = /* @__PURE__ */new Set(),
|
|
5
|
-
strategy = "async";
|
|
6
|
-
function setOnLayoutStrategy(state) {
|
|
7
|
-
strategy = state;
|
|
8
|
-
}
|
|
9
|
-
var NodeRectCache = /* @__PURE__ */new WeakMap(),
|
|
10
|
-
ParentRectCache = /* @__PURE__ */new WeakMap(),
|
|
11
|
-
DebounceTimers = /* @__PURE__ */new WeakMap(),
|
|
12
|
-
LastChangeTime = /* @__PURE__ */new WeakMap(),
|
|
13
|
-
rAF = typeof window < "u" ? window.requestAnimationFrame : void 0,
|
|
14
|
-
DEBOUNCE_DELAY = 32;
|
|
15
|
-
if (isClient) if (rAF) {
|
|
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,
|
|
27
|
-
avoidUpdates = !0,
|
|
28
|
-
queuedUpdates = /* @__PURE__ */new Map(),
|
|
29
|
-
lastFrameAt = Date.now(),
|
|
30
|
-
numDroppedFramesUntilPause = 2;
|
|
31
|
-
___onDidFinishClientRender(function () {
|
|
32
|
-
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function (cb) {
|
|
33
|
-
return cb();
|
|
34
|
-
}), queuedUpdates.clear());
|
|
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);
|
|
79
|
-
} else process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
|
|
80
|
-
var getElementLayoutEvent = function (target) {
|
|
81
|
-
var res = null;
|
|
82
|
-
if (measureLayout(target, null, function (x, y, width, height, left, top) {
|
|
83
|
-
res = {
|
|
84
|
-
nativeEvent: {
|
|
85
|
-
layout: {
|
|
86
|
-
x,
|
|
87
|
-
y,
|
|
88
|
-
width,
|
|
89
|
-
height,
|
|
90
|
-
left,
|
|
91
|
-
top
|
|
92
|
-
},
|
|
93
|
-
target
|
|
94
|
-
},
|
|
95
|
-
timeStamp: Date.now()
|
|
96
|
-
};
|
|
97
|
-
}), !res) throw new Error("\u203C\uFE0F");
|
|
98
|
-
return res;
|
|
99
|
-
},
|
|
100
|
-
measureLayout = function (node, relativeTo, callback) {
|
|
101
|
-
var relativeNode = relativeTo || node?.parentElement;
|
|
102
|
-
if (relativeNode instanceof HTMLElement) {
|
|
103
|
-
var nodeDim = node.getBoundingClientRect(),
|
|
104
|
-
relativeNodeDim = relativeNode.getBoundingClientRect();
|
|
105
|
-
if (relativeNodeDim && nodeDim) {
|
|
106
|
-
var {
|
|
107
|
-
x,
|
|
108
|
-
y,
|
|
109
|
-
width,
|
|
110
|
-
height,
|
|
111
|
-
left,
|
|
112
|
-
top
|
|
113
|
-
} = getRelativeDimensions(nodeDim, relativeNodeDim);
|
|
114
|
-
callback(x, y, width, height, left, top);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
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
|
-
},
|
|
155
|
-
getRelativeDimensions = function (a, b) {
|
|
156
|
-
var {
|
|
157
|
-
height,
|
|
158
|
-
left,
|
|
159
|
-
top,
|
|
160
|
-
width
|
|
161
|
-
} = a,
|
|
162
|
-
x = left - b.left,
|
|
163
|
-
y = top - b.top;
|
|
164
|
-
return {
|
|
165
|
-
x,
|
|
166
|
-
y,
|
|
167
|
-
width,
|
|
168
|
-
height,
|
|
169
|
-
left,
|
|
170
|
-
top
|
|
171
|
-
};
|
|
172
|
-
};
|
|
173
|
-
function useElementLayout(ref, onLayout) {
|
|
174
|
-
var _ref_current,
|
|
175
|
-
node = (_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host;
|
|
176
|
-
node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(function () {
|
|
177
|
-
var _ref_current2;
|
|
178
|
-
if (onLayout) {
|
|
179
|
-
var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
|
|
180
|
-
if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), function () {
|
|
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);
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
}, [ref, !!onLayout]);
|
|
187
|
-
}
|
|
188
|
-
export { getElementLayoutEvent, getElementLayoutEventAsync, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
|
|
189
|
-
//# sourceMappingURL=useElementLayout.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export const getBoundingClientRect = (node: HTMLElement | null): undefined | DOMRect => {
|
|
2
|
-
if (!node || node.nodeType !== 1) return
|
|
3
|
-
return node.getBoundingClientRect?.()
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export const getBoundingClientRectAsync = (
|
|
7
|
-
element: HTMLElement
|
|
8
|
-
): Promise<DOMRectReadOnly | undefined> => {
|
|
9
|
-
return new Promise((resolve) => {
|
|
10
|
-
let didFallback = false
|
|
11
|
-
function fallbackToSync() {
|
|
12
|
-
didFallback = true
|
|
13
|
-
resolve(getBoundingClientRect(element))
|
|
14
|
-
}
|
|
15
|
-
const tm = setTimeout(fallbackToSync, 32)
|
|
16
|
-
const observer = new IntersectionObserver(
|
|
17
|
-
(entries, ob) => {
|
|
18
|
-
clearTimeout(tm)
|
|
19
|
-
ob.disconnect()
|
|
20
|
-
if (!didFallback) {
|
|
21
|
-
resolve(entries[0]?.boundingClientRect)
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
threshold: 0.0001,
|
|
26
|
-
}
|
|
27
|
-
)
|
|
28
|
-
observer.observe(element)
|
|
29
|
-
})
|
|
30
|
-
}
|
package/src/helpers/getRect.tsx
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { getBoundingClientRect } from './getBoundingClientRect'
|
|
2
|
-
|
|
3
|
-
export const getRect = (node: HTMLElement) => {
|
|
4
|
-
const rect = getBoundingClientRect(node)
|
|
5
|
-
if (!rect) return
|
|
6
|
-
const { x, y, top, left } = rect
|
|
7
|
-
return { x, y, width: node.offsetWidth, height: node.offsetHeight, top, left }
|
|
8
|
-
}
|