@tamagui/core 1.126.18 → 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
package/dist/native.js
CHANGED
|
@@ -12351,42 +12351,66 @@ var getRect = function(node) {
|
|
|
12351
12351
|
};
|
|
12352
12352
|
|
|
12353
12353
|
// src/hooks/useElementLayout.tsx
|
|
12354
|
-
var import_constants = __toESM(require_index_native2()), import_web = __toESM(require_index_native8()), LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set(),
|
|
12354
|
+
var import_constants = __toESM(require_index_native2()), import_web = __toESM(require_index_native8()), LayoutHandlers = /* @__PURE__ */ new WeakMap(), Nodes = /* @__PURE__ */ new Set(), strategy = "async";
|
|
12355
12355
|
function setOnLayoutStrategy(state) {
|
|
12356
|
-
|
|
12356
|
+
strategy = state;
|
|
12357
12357
|
}
|
|
12358
|
-
var NodeRectCache = /* @__PURE__ */ new WeakMap(), ParentRectCache = /* @__PURE__ */ new WeakMap(), rAF = typeof window < "u" ? window.requestAnimationFrame : void 0;
|
|
12358
|
+
var 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;
|
|
12359
12359
|
if (import_constants.isClient)
|
|
12360
12360
|
if (rAF) {
|
|
12361
|
-
let
|
|
12362
|
-
var nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode == null ? void 0 : parentNode.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
|
|
12363
|
-
if (typeof onLayout == "function") {
|
|
12364
|
-
var cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
12365
|
-
if (!cachedRect || // has changed one rect
|
|
12366
|
-
!(0, import_web.isEqualShallow)(cachedRect, nodeRect) && (!cachedParentRect || !(0, import_web.isEqualShallow)(cachedParentRect, parentRect))) {
|
|
12367
|
-
NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect);
|
|
12368
|
-
var event = getElementLayoutEvent(node);
|
|
12369
|
-
avoidUpdates ? queuedUpdates.set(node, function() {
|
|
12370
|
-
return onLayout(event);
|
|
12371
|
-
}) : onLayout(event);
|
|
12372
|
-
}
|
|
12373
|
-
}
|
|
12374
|
-
}, layoutOnAnimationFrame = function() {
|
|
12361
|
+
let layoutOnAnimationFrame = function() {
|
|
12375
12362
|
var now = Date.now(), timeSinceLastFrame = now - lastFrameAt;
|
|
12376
|
-
if (lastFrameAt = now,
|
|
12363
|
+
if (lastFrameAt = now, strategy !== "off") {
|
|
12377
12364
|
var expectedFrameTime = 16.67, hasRecentSyncWork = timeSinceLastFrame > expectedFrameTime * numDroppedFramesUntilPause;
|
|
12378
12365
|
hasRecentSyncWork || Nodes.forEach(updateLayoutIfChanged);
|
|
12379
12366
|
}
|
|
12380
12367
|
rAF(layoutOnAnimationFrame);
|
|
12381
12368
|
};
|
|
12382
|
-
|
|
12369
|
+
layoutOnAnimationFrame2 = layoutOnAnimationFrame, avoidUpdates = !0, queuedUpdates = /* @__PURE__ */ new Map(), lastFrameAt = Date.now(), numDroppedFramesUntilPause = 2, (0, import_web.___onDidFinishClientRender)(function() {
|
|
12383
12370
|
avoidUpdates = !1, queuedUpdates && (queuedUpdates.forEach(function(cb) {
|
|
12384
12371
|
return cb();
|
|
12385
12372
|
}), queuedUpdates.clear());
|
|
12386
|
-
})
|
|
12373
|
+
});
|
|
12374
|
+
async function updateLayoutIfChanged(node) {
|
|
12375
|
+
var nodeRect = node.getBoundingClientRect(), parentNode = node.parentElement, parentRect = parentNode == null ? void 0 : parentNode.getBoundingClientRect(), onLayout = LayoutHandlers.get(node);
|
|
12376
|
+
if (typeof onLayout == "function") {
|
|
12377
|
+
var cachedRect = NodeRectCache.get(node), cachedParentRect = parentNode ? NodeRectCache.get(parentNode) : null;
|
|
12378
|
+
if (!cachedRect || // has changed one rect
|
|
12379
|
+
!(0, import_web.isEqualShallow)(cachedRect, nodeRect) && (!cachedParentRect || !(0, import_web.isEqualShallow)(cachedParentRect, parentRect)))
|
|
12380
|
+
if (NodeRectCache.set(node, nodeRect), parentRect && parentNode && ParentRectCache.set(parentNode, parentRect), avoidUpdates) {
|
|
12381
|
+
var event = getElementLayoutEvent(node);
|
|
12382
|
+
queuedUpdates.set(node, function() {
|
|
12383
|
+
return onLayout(event);
|
|
12384
|
+
});
|
|
12385
|
+
} else if (strategy === "async") {
|
|
12386
|
+
var now = Date.now();
|
|
12387
|
+
LastChangeTime.set(node, now);
|
|
12388
|
+
var existingTimer = DebounceTimers.get(node);
|
|
12389
|
+
existingTimer && clearTimeout(existingTimer);
|
|
12390
|
+
var timer = setTimeout(async function() {
|
|
12391
|
+
var lastChange = LastChangeTime.get(node) || 0, timeSinceChange = Date.now() - lastChange;
|
|
12392
|
+
if (timeSinceChange >= DEBOUNCE_DELAY) {
|
|
12393
|
+
var event2 = await getElementLayoutEventAsync(node);
|
|
12394
|
+
onLayout(event2), DebounceTimers.delete(node);
|
|
12395
|
+
} else {
|
|
12396
|
+
var remainingDelay = DEBOUNCE_DELAY - timeSinceChange, newTimer = setTimeout(async function() {
|
|
12397
|
+
var event3 = await getElementLayoutEventAsync(node);
|
|
12398
|
+
onLayout(event3), DebounceTimers.delete(node);
|
|
12399
|
+
}, remainingDelay);
|
|
12400
|
+
DebounceTimers.set(node, newTimer);
|
|
12401
|
+
}
|
|
12402
|
+
}, DEBOUNCE_DELAY);
|
|
12403
|
+
DebounceTimers.set(node, timer);
|
|
12404
|
+
} else {
|
|
12405
|
+
var event1 = getElementLayoutEvent(node);
|
|
12406
|
+
onLayout(event1);
|
|
12407
|
+
}
|
|
12408
|
+
}
|
|
12409
|
+
}
|
|
12410
|
+
rAF(layoutOnAnimationFrame);
|
|
12387
12411
|
} else
|
|
12388
12412
|
process.env.NODE_ENV === "development" && console.warn("No requestAnimationFrame - please polyfill for onLayout to work correctly");
|
|
12389
|
-
var avoidUpdates, queuedUpdates, lastFrameAt, numDroppedFramesUntilPause,
|
|
12413
|
+
var avoidUpdates, queuedUpdates, lastFrameAt, numDroppedFramesUntilPause, layoutOnAnimationFrame2, getElementLayoutEvent = function(target) {
|
|
12390
12414
|
var res = null;
|
|
12391
12415
|
if (measureLayout(target, null, function(x, y, width, height, left, top) {
|
|
12392
12416
|
res = {
|
|
@@ -12415,6 +12439,38 @@ var avoidUpdates, queuedUpdates, lastFrameAt, numDroppedFramesUntilPause, update
|
|
|
12415
12439
|
callback(x, y, width, height, left, top);
|
|
12416
12440
|
}
|
|
12417
12441
|
}
|
|
12442
|
+
}, getElementLayoutEventAsync = async function(target) {
|
|
12443
|
+
var res = null;
|
|
12444
|
+
if (await measureLayoutAsync(target, null, function(x, y, width, height, left, top) {
|
|
12445
|
+
res = {
|
|
12446
|
+
nativeEvent: {
|
|
12447
|
+
layout: {
|
|
12448
|
+
x,
|
|
12449
|
+
y,
|
|
12450
|
+
width,
|
|
12451
|
+
height,
|
|
12452
|
+
left,
|
|
12453
|
+
top
|
|
12454
|
+
},
|
|
12455
|
+
target
|
|
12456
|
+
},
|
|
12457
|
+
timeStamp: Date.now()
|
|
12458
|
+
};
|
|
12459
|
+
}), !res)
|
|
12460
|
+
throw new Error("\u203C\uFE0F");
|
|
12461
|
+
return res;
|
|
12462
|
+
}, measureLayoutAsync = async function(node, relativeTo, callback) {
|
|
12463
|
+
var relativeNode = relativeTo || (node == null ? void 0 : node.parentElement);
|
|
12464
|
+
if (relativeNode instanceof HTMLElement) {
|
|
12465
|
+
var [nodeDim, relativeNodeDim] = await Promise.all([
|
|
12466
|
+
node.getBoundingClientRect(),
|
|
12467
|
+
relativeNode.getBoundingClientRect()
|
|
12468
|
+
]);
|
|
12469
|
+
if (relativeNodeDim && nodeDim) {
|
|
12470
|
+
var { x, y, width, height, left, top } = getRelativeDimensions(nodeDim, relativeNodeDim);
|
|
12471
|
+
callback(x, y, width, height, left, top);
|
|
12472
|
+
}
|
|
12473
|
+
}
|
|
12418
12474
|
}, getRelativeDimensions = function(a, b) {
|
|
12419
12475
|
var { height, left, top, width } = a, x = left - b.left, y = top - b.top;
|
|
12420
12476
|
return {
|