@tamagui/use-element-layout 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.
@@ -0,0 +1,151 @@
1
+ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
2
+ import { isEqualShallow } from "@tamagui/is-equal-shallow";
3
+ const LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set();
4
+ let strategy = "async";
5
+ function setOnLayoutStrategy(state) {
6
+ strategy = state;
7
+ }
8
+ 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;
9
+ let avoidUpdates = !0;
10
+ const queuedUpdates = /* @__PURE__ */ new Map();
11
+ function enable() {
12
+ avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach((cb) => cb()), queuedUpdates.clear()));
13
+ }
14
+ if (isClient)
15
+ if (rAF) {
16
+ let layoutOnAnimationFrame = function() {
17
+ const now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
18
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
19
+ }, lastFrameAt = Date.now();
20
+ const numDroppedFramesUntilPause = 2;
21
+ async function updateLayoutIfChanged(node) {
22
+ const nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode?.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
23
+ if (typeof onLayout != "function") return;
24
+ const cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
25
+ if (!cachedRect || // has changed one rect
26
+ !isEqualShallow(cachedRect, nodeRect) && (!cachedParentRect || !isEqualShallow(cachedParentRect, parentRect)))
27
+ if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
28
+ const event = getElementLayoutEvent(node);
29
+ queuedUpdates.set(node, () => onLayout(event));
30
+ } else if (strategy === "async") {
31
+ const now = Date.now();
32
+ LastChangeTime.set(node, now);
33
+ const existingTimer = DebounceTimers.get(node);
34
+ existingTimer && clearTimeout(existingTimer);
35
+ const timer = setTimeout(async () => {
36
+ const lastChange = LastChangeTime.get(node) || 0, timeSinceChange = Date.now() - lastChange;
37
+ if (timeSinceChange >= DEBOUNCE_DELAY) {
38
+ const event = await getElementLayoutEventAsync(node);
39
+ onLayout(event), DebounceTimers.delete(node);
40
+ } else {
41
+ const remainingDelay = DEBOUNCE_DELAY - timeSinceChange, newTimer = setTimeout(async () => {
42
+ const event = await getElementLayoutEventAsync(node);
43
+ onLayout(event), DebounceTimers.delete(node);
44
+ }, remainingDelay);
45
+ DebounceTimers.set(node, newTimer);
46
+ }
47
+ }, DEBOUNCE_DELAY);
48
+ DebounceTimers.set(node, timer);
49
+ } else {
50
+ const event = getElementLayoutEvent(node);
51
+ onLayout(event);
52
+ }
53
+ }
54
+ rAF(layoutOnAnimationFrame);
55
+ } else
56
+ process.env.NODE_ENV === "development" && console.warn(
57
+ "No requestAnimationFrame - please polyfill for onLayout to work correctly"
58
+ );
59
+ const getElementLayoutEvent = (target) => {
60
+ let res = null;
61
+ if (measureLayout(target, null, (x, y, width, height, left, top) => {
62
+ res = {
63
+ nativeEvent: {
64
+ layout: { x, y, width, height, left, top },
65
+ target
66
+ },
67
+ timeStamp: Date.now()
68
+ };
69
+ }), !res)
70
+ throw new Error("\u203C\uFE0F");
71
+ return res;
72
+ }, measureLayout = (node, relativeTo, callback) => {
73
+ const relativeNode = relativeTo || node?.parentElement;
74
+ if (relativeNode instanceof HTMLElement) {
75
+ const nodeDim = node.getBoundingClientRect(), relativeNodeDim = relativeNode.getBoundingClientRect();
76
+ if (relativeNodeDim && nodeDim) {
77
+ const { x, y, width, height, left, top } = getRelativeDimensions(
78
+ nodeDim,
79
+ relativeNodeDim
80
+ );
81
+ callback(x, y, width, height, left, top);
82
+ }
83
+ }
84
+ }, getElementLayoutEventAsync = async (target) => {
85
+ const layout = await measureLayoutAsync(target);
86
+ if (!layout)
87
+ throw new Error("\u203C\uFE0F");
88
+ return {
89
+ nativeEvent: {
90
+ layout,
91
+ target
92
+ },
93
+ timeStamp: Date.now()
94
+ };
95
+ }, measureLayoutAsync = async (node, relativeTo) => {
96
+ const relativeNode = relativeTo || node?.parentElement;
97
+ if (relativeNode instanceof HTMLElement) {
98
+ const [nodeDim, relativeNodeDim] = await Promise.all([
99
+ node.getBoundingClientRect(),
100
+ relativeNode.getBoundingClientRect()
101
+ ]);
102
+ if (relativeNodeDim && nodeDim) {
103
+ const { x, y, width, height, left, top } = getRelativeDimensions(
104
+ nodeDim,
105
+ relativeNodeDim
106
+ );
107
+ return { x, y, width, height, left, top };
108
+ }
109
+ }
110
+ return null;
111
+ }, getRelativeDimensions = (a, b) => {
112
+ const { height, left, top, width } = a, x = left - b.left, y = top - b.top;
113
+ return { x, y, width, height, left, top };
114
+ };
115
+ function useElementLayout(ref, onLayout) {
116
+ const node = ensureWebElement(ref.current?.host);
117
+ node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
118
+ if (!onLayout) return;
119
+ const node2 = ref.current?.host;
120
+ if (node2)
121
+ return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
122
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
123
+ const timer = DebounceTimers.get(node2);
124
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
125
+ };
126
+ }, [ref, !!onLayout]);
127
+ }
128
+ function ensureWebElement(x) {
129
+ if (!(typeof HTMLElement > "u"))
130
+ return x instanceof HTMLElement ? x : void 0;
131
+ }
132
+ const getBoundingClientRect = (node) => {
133
+ if (!(!node || node.nodeType !== 1))
134
+ return node.getBoundingClientRect?.();
135
+ }, getRect = (node) => {
136
+ const rect = getBoundingClientRect(node);
137
+ if (!rect) return;
138
+ const { x, y, top, left } = rect;
139
+ return { x, y, width: node.offsetWidth, height: node.offsetHeight, top, left };
140
+ };
141
+ export {
142
+ enable,
143
+ getElementLayoutEvent,
144
+ getElementLayoutEventAsync,
145
+ getRect,
146
+ measureLayout,
147
+ measureLayoutAsync,
148
+ setOnLayoutStrategy,
149
+ useElementLayout
150
+ };
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "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",
5
+ "names": ["node"]
6
+ }
@@ -0,0 +1,198 @@
1
+ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
2
+ import { isEqualShallow } from "@tamagui/is-equal-shallow";
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
+ let avoidUpdates = !0;
16
+ const queuedUpdates = /* @__PURE__ */new Map();
17
+ function enable() {
18
+ avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(cb => cb()), queuedUpdates.clear()));
19
+ }
20
+ if (isClient) if (rAF) {
21
+ let layoutOnAnimationFrame = function () {
22
+ const now = Date.now(),
23
+ timeSinceLastFrame = now - lastFrameAt;
24
+ lastFrameAt = now, strategy !== "off" && (timeSinceLastFrame > 16.67 * numDroppedFramesUntilPause || Nodes.forEach(updateLayoutIfChanged)), rAF(layoutOnAnimationFrame);
25
+ },
26
+ lastFrameAt = Date.now();
27
+ const numDroppedFramesUntilPause = 2;
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
+ const layout = await measureLayoutAsync(target);
109
+ if (!layout) throw new Error("\u203C\uFE0F");
110
+ return {
111
+ nativeEvent: {
112
+ layout,
113
+ target
114
+ },
115
+ timeStamp: Date.now()
116
+ };
117
+ },
118
+ measureLayoutAsync = async (node, relativeTo) => {
119
+ const relativeNode = relativeTo || node?.parentElement;
120
+ if (relativeNode instanceof HTMLElement) {
121
+ const [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
122
+ if (relativeNodeDim && nodeDim) {
123
+ const {
124
+ x,
125
+ y,
126
+ width,
127
+ height,
128
+ left,
129
+ top
130
+ } = getRelativeDimensions(nodeDim, relativeNodeDim);
131
+ return {
132
+ x,
133
+ y,
134
+ width,
135
+ height,
136
+ left,
137
+ top
138
+ };
139
+ }
140
+ }
141
+ return null;
142
+ },
143
+ getRelativeDimensions = (a, b) => {
144
+ const {
145
+ height,
146
+ left,
147
+ top,
148
+ width
149
+ } = a,
150
+ x = left - b.left,
151
+ y = top - b.top;
152
+ return {
153
+ x,
154
+ y,
155
+ width,
156
+ height,
157
+ left,
158
+ top
159
+ };
160
+ };
161
+ function useElementLayout(ref, onLayout) {
162
+ const node = ensureWebElement(ref.current?.host);
163
+ node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(() => {
164
+ if (!onLayout) return;
165
+ const node2 = ref.current?.host;
166
+ if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), () => {
167
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
168
+ const timer = DebounceTimers.get(node2);
169
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
170
+ };
171
+ }, [ref, !!onLayout]);
172
+ }
173
+ function ensureWebElement(x) {
174
+ if (!(typeof HTMLElement > "u")) return x instanceof HTMLElement ? x : void 0;
175
+ }
176
+ const getBoundingClientRect = node => {
177
+ if (!(!node || node.nodeType !== 1)) return node.getBoundingClientRect?.();
178
+ },
179
+ getRect = node => {
180
+ const rect = getBoundingClientRect(node);
181
+ if (!rect) return;
182
+ const {
183
+ x,
184
+ y,
185
+ top,
186
+ left
187
+ } = rect;
188
+ return {
189
+ x,
190
+ y,
191
+ width: node.offsetWidth,
192
+ height: node.offsetHeight,
193
+ top,
194
+ left
195
+ };
196
+ };
197
+ export { enable, getElementLayoutEvent, getElementLayoutEventAsync, getRect, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
198
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","numDroppedFramesUntilPause","updateLayoutIfChanged","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","ensureWebElement","current","host","node2","add","nodeType","getRect","rect","offsetWidth","offsetHeight"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,214 @@
1
+ import { isClient, useIsomorphicLayoutEffect } from "@tamagui/constants";
2
+ import { isEqualShallow } from "@tamagui/is-equal-shallow";
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
+ avoidUpdates = !0,
16
+ queuedUpdates = /* @__PURE__ */new Map();
17
+ function enable() {
18
+ avoidUpdates && (avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function (cb) {
19
+ return cb();
20
+ }), queuedUpdates.clear()));
21
+ }
22
+ if (isClient) if (rAF) {
23
+ let layoutOnAnimationFrame = function () {
24
+ var now = Date.now(),
25
+ timeSinceLastFrame = now - lastFrameAt;
26
+ if (lastFrameAt = now, strategy !== "off") {
27
+ var expectedFrameTime = 16.67,
28
+ hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
29
+ hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
30
+ }
31
+ rAF(layoutOnAnimationFrame);
32
+ };
33
+ var layoutOnAnimationFrame2 = layoutOnAnimationFrame,
34
+ lastFrameAt = Date.now(),
35
+ numDroppedFramesUntilPause = 2;
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 layout = await measureLayoutAsync(target);
120
+ if (!layout) throw new Error("\u203C\uFE0F");
121
+ return {
122
+ nativeEvent: {
123
+ layout,
124
+ target
125
+ },
126
+ timeStamp: Date.now()
127
+ };
128
+ },
129
+ measureLayoutAsync = async function (node, relativeTo) {
130
+ var relativeNode = relativeTo || node?.parentElement;
131
+ if (relativeNode instanceof HTMLElement) {
132
+ var [nodeDim, relativeNodeDim] = await Promise.all([node.getBoundingClientRect(), relativeNode.getBoundingClientRect()]);
133
+ if (relativeNodeDim && nodeDim) {
134
+ var {
135
+ x,
136
+ y,
137
+ width,
138
+ height,
139
+ left,
140
+ top
141
+ } = getRelativeDimensions(nodeDim, relativeNodeDim);
142
+ return {
143
+ x,
144
+ y,
145
+ width,
146
+ height,
147
+ left,
148
+ top
149
+ };
150
+ }
151
+ }
152
+ return null;
153
+ },
154
+ getRelativeDimensions = function (a, b) {
155
+ var {
156
+ height,
157
+ left,
158
+ top,
159
+ width
160
+ } = a,
161
+ x = left - b.left,
162
+ y = top - b.top;
163
+ return {
164
+ x,
165
+ y,
166
+ width,
167
+ height,
168
+ left,
169
+ top
170
+ };
171
+ };
172
+ function useElementLayout(ref, onLayout) {
173
+ var _ref_current,
174
+ node = ensureWebElement((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.host);
175
+ node && onLayout && LayoutHandlers.set(node, onLayout), useIsomorphicLayoutEffect(function () {
176
+ var _ref_current2;
177
+ if (onLayout) {
178
+ var node2 = (_ref_current2 = ref.current) === null || _ref_current2 === void 0 ? void 0 : _ref_current2.host;
179
+ if (node2) return LayoutHandlers.set(node2, onLayout), Nodes.add(node2), onLayout(getElementLayoutEvent(node2)), function () {
180
+ Nodes.delete(node2), LayoutHandlers.delete(node2), NodeRectCache.delete(node2);
181
+ var timer = DebounceTimers.get(node2);
182
+ timer && (clearTimeout(timer), DebounceTimers.delete(node2)), LastChangeTime.delete(node2);
183
+ };
184
+ }
185
+ }, [ref, !!onLayout]);
186
+ }
187
+ function ensureWebElement(x) {
188
+ if (!(typeof HTMLElement > "u")) return x instanceof HTMLElement ? x : void 0;
189
+ }
190
+ var getBoundingClientRect = function (node) {
191
+ var _node_getBoundingClientRect;
192
+ if (!(!node || node.nodeType !== 1)) return (_node_getBoundingClientRect = node.getBoundingClientRect) === null || _node_getBoundingClientRect === void 0 ? void 0 : _node_getBoundingClientRect.call(node);
193
+ },
194
+ getRect = function (node) {
195
+ var rect = getBoundingClientRect(node);
196
+ if (rect) {
197
+ var {
198
+ x,
199
+ y,
200
+ top,
201
+ left
202
+ } = rect;
203
+ return {
204
+ x,
205
+ y,
206
+ width: node.offsetWidth,
207
+ height: node.offsetHeight,
208
+ top,
209
+ left
210
+ };
211
+ }
212
+ };
213
+ export { enable, getElementLayoutEvent, getElementLayoutEventAsync, getRect, measureLayout, measureLayoutAsync, setOnLayoutStrategy, useElementLayout };
214
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isClient","useIsomorphicLayoutEffect","isEqualShallow","LayoutHandlers","WeakMap","Nodes","Set","strategy","setOnLayoutStrategy","state","NodeRectCache","ParentRectCache","DebounceTimers","LastChangeTime","rAF","window","requestAnimationFrame","DEBOUNCE_DELAY","avoidUpdates","queuedUpdates","Map","enable","forEach","cb","clear","layoutOnAnimationFrame","now","Date","timeSinceLastFrame","lastFrameAt","expectedFrameTime","hasRecentSyncWork","numDroppedFramesUntilPause","updateLayoutIfChanged","layoutOnAnimationFrame2","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","useElementLayout","ref","_ref_current","ensureWebElement","current","host","_ref_current2","node2"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@tamagui/use-element-layout",
3
+ "version": "1.129.6-1751237024118",
4
+ "types": "./types/index.d.ts",
5
+ "main": "dist/cjs",
6
+ "module": "dist/esm",
7
+ "files": [
8
+ "src",
9
+ "types",
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tamagui-build",
14
+ "watch": "tamagui-build --watch",
15
+ "lint": "biome check src",
16
+ "lint:fix": "biome check --write src",
17
+ "clean": "tamagui-build clean",
18
+ "clean:build": "tamagui-build clean:build"
19
+ },
20
+ "exports": {
21
+ "./package.json": "./package.json",
22
+ ".": {
23
+ "react-native": {
24
+ "import": "./dist/esm/index.native.js",
25
+ "require": "./dist/cjs/index.native.js"
26
+ },
27
+ "types": "./types/index.d.ts",
28
+ "import": "./dist/esm/index.mjs",
29
+ "require": "./dist/cjs/index.cjs",
30
+ "default": "./dist/cjs/index.native.js"
31
+ }
32
+ },
33
+ "dependencies": {
34
+ "@tamagui/constants": "1.129.6-1751237024118",
35
+ "@tamagui/is-equal-shallow": "1.129.6-1751237024118"
36
+ },
37
+ "devDependencies": {
38
+ "@tamagui/build": "1.129.6-1751237024118",
39
+ "react": "*"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "gitHead": "a49cc7ea6b93ba384e77a4880ae48ac4a5635c14",
45
+ "peerDependencies": {
46
+ "react": "*"
47
+ }
48
+ }