@tamagui/core 2.7.3 → 2.7.5

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.
@@ -1,4 +1,4 @@
1
1
  $ tamagui-build
2
- built @tamagui/core in 608 ms
2
+ built @tamagui/core in 598 ms
3
3
  Running afterBuild script...
4
- afterBuild completed in 213 ms
4
+ afterBuild completed in 192 ms
package/dist/native.cjs CHANGED
@@ -879,16 +879,6 @@ function enable() {
879
879
  }
880
880
  }
881
881
  }
882
- function startGlobalObservers() {
883
- if (!ENABLE || globalIntersectionObserver) return;
884
- globalIntersectionObserver = new IntersectionObserver(function(entries) {
885
- for (var i = 0; i < entries.length; i++) {
886
- var entry = entries[i];
887
- var node = entry.target;
888
- if (IntersectionState.get(node) !== entry.isIntersecting) IntersectionState.set(node, entry.isIntersecting);
889
- }
890
- }, { threshold: 0 });
891
- }
892
882
  function rectsEqual(a, b) {
893
883
  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
894
884
  }
@@ -912,11 +902,6 @@ function observeLayoutNode(node, disableKey) {
912
902
  Nodes.add(node);
913
903
  if (disableKey) LayoutDisableKey.set(node, disableKey);
914
904
  else LayoutDisableKey.delete(node);
915
- startGlobalObservers();
916
- if (globalIntersectionObserver) {
917
- globalIntersectionObserver.observe(node);
918
- IntersectionState.set(node, true);
919
- }
920
905
  resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
921
906
  }
922
907
  function registerLayoutNode(node, onChange, disableKey) {
@@ -931,8 +916,6 @@ function cleanupNode(node) {
931
916
  LayoutHandlers.delete(node);
932
917
  LayoutDisableKey.delete(node);
933
918
  NodeRectCache.delete(node);
934
- IntersectionState.delete(node);
935
- if (globalIntersectionObserver) globalIntersectionObserver.unobserve(node);
936
919
  }
937
920
  function emitLayoutSync(node) {
938
921
  var onLayout = LayoutHandlers.get(node);
@@ -995,14 +978,13 @@ function createMeasureLayout(node) {
995
978
  return measureLayout$1(node, relativeTo, callback);
996
979
  };
997
980
  }
998
- var LayoutHandlers, LayoutDisableKey, Nodes, IntersectionState, usePretransformDimensions, DisableLayoutContextValues, DisableLayoutContextKey, ENABLE, LayoutMeasurementController, globalIntersectionObserver, strategy, resumeLayoutLoop, NodeRectCache, avoidUpdates, queuedUpdates, BoundingRects, rectFetchObserver, rectFetchResolve, rectFetchStartTime, lastCallbackDelay, rAF, userSkipVal, BASE_SKIP_FRAMES, MAX_SKIP_FRAMES, skipFrames, frameCount, frameScheduled, getElementLayoutEvent, getPreTransformDimensions, getRelativeDimensions, PrevHostNode, getBoundingClientRectAsync, measureNode, measure, measureInWindow, createMeasureInWindow, measureLayout$1;
981
+ var LayoutHandlers, LayoutDisableKey, Nodes, usePretransformDimensions, DisableLayoutContextValues, DisableLayoutContextKey, ENABLE, LayoutMeasurementController, strategy, resumeLayoutLoop, measureOnNextFrame, NodeRectCache, avoidUpdates, queuedUpdates, BoundingRects, rectFetchObserver, rectFetchResolve, rectFetchStartTime, lastCallbackDelay, rAF, userSkipVal, BASE_SKIP_FRAMES, MAX_SKIP_FRAMES, skipFrames, frameCount, frameScheduled, getElementLayoutEvent, getPreTransformDimensions, getRelativeDimensions, PrevHostNode, getBoundingClientRectAsync, measureNode, measure, measureInWindow, createMeasureInWindow, measureLayout$1;
999
982
  var init_index_native$11 = __esmMin((() => {
1000
983
  init_index_native$7();
1001
984
  init_asyncToGenerator();
1002
985
  LayoutHandlers = /* @__PURE__ */ new WeakMap();
1003
986
  LayoutDisableKey = /* @__PURE__ */ new WeakMap();
1004
987
  Nodes = /* @__PURE__ */ new Set();
1005
- IntersectionState = /* @__PURE__ */ new WeakMap();
1006
988
  usePretransformDimensions = function() {
1007
989
  return globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
1008
990
  };
@@ -1013,14 +995,15 @@ var init_index_native$11 = __esmMin((() => {
1013
995
  var { disable, children } = param;
1014
996
  var id = (0, react.useId)();
1015
997
  useIsomorphicLayoutEffect(function() {
998
+ var wasDisabled = DisableLayoutContextValues[id] === true;
1016
999
  DisableLayoutContextValues[id] = disable;
1000
+ if (wasDisabled && !disable) measureOnNextFrame === null || measureOnNextFrame === void 0 || measureOnNextFrame();
1017
1001
  }, [disable, id]);
1018
1002
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DisableLayoutContextKey.Provider, {
1019
1003
  value: id,
1020
1004
  children
1021
1005
  });
1022
1006
  };
1023
- globalIntersectionObserver = null;
1024
1007
  strategy = "async";
1025
1008
  NodeRectCache = /* @__PURE__ */ new WeakMap();
1026
1009
  avoidUpdates = true;
@@ -1088,7 +1071,7 @@ var init_index_native$11 = __esmMin((() => {
1088
1071
  }
1089
1072
  if (frameCount >= Number.MAX_SAFE_INTEGER) frameCount = 0;
1090
1073
  if (strategy !== "off") {
1091
- var visibleNodes = [];
1074
+ var activeNodes = [];
1092
1075
  var parentsToObserve = /* @__PURE__ */ new Set();
1093
1076
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
1094
1077
  try {
@@ -1101,8 +1084,7 @@ var init_index_native$11 = __esmMin((() => {
1101
1084
  }
1102
1085
  var disableKey = LayoutDisableKey.get(node);
1103
1086
  if (disableKey && DisableLayoutContextValues[disableKey] === true) continue;
1104
- if (IntersectionState.get(node) === false) continue;
1105
- visibleNodes.push(node);
1087
+ activeNodes.push(node);
1106
1088
  parentsToObserve.add(parentElement);
1107
1089
  }
1108
1090
  } catch (err) {
@@ -1115,10 +1097,10 @@ var init_index_native$11 = __esmMin((() => {
1115
1097
  if (_didIteratorError) throw _iteratorError;
1116
1098
  }
1117
1099
  }
1118
- if (visibleNodes.length > 0) {
1100
+ if (activeNodes.length > 0) {
1119
1101
  var io = ensureRectFetchObserver2();
1120
1102
  rectFetchStartTime = performance.now();
1121
- for (var i = 0; i < visibleNodes.length; i++) io.observe(visibleNodes[i]);
1103
+ for (var i = 0; i < activeNodes.length; i++) io.observe(activeNodes[i]);
1122
1104
  var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
1123
1105
  try {
1124
1106
  for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
@@ -1138,7 +1120,7 @@ var init_index_native$11 = __esmMin((() => {
1138
1120
  yield new Promise(function(res) {
1139
1121
  rectFetchResolve = res;
1140
1122
  });
1141
- for (var i1 = 0; i1 < visibleNodes.length; i1++) io.unobserve(visibleNodes[i1]);
1123
+ for (var i1 = 0; i1 < activeNodes.length; i1++) io.unobserve(activeNodes[i1]);
1142
1124
  var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
1143
1125
  try {
1144
1126
  for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
@@ -1157,7 +1139,7 @@ var init_index_native$11 = __esmMin((() => {
1157
1139
  }
1158
1140
  if (lastCallbackDelay > 50) skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);
1159
1141
  else if (lastCallbackDelay < 20) skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
1160
- for (var i2 = 0; i2 < visibleNodes.length; i2++) updateLayoutIfChanged(visibleNodes[i2]);
1142
+ for (var i2 = 0; i2 < activeNodes.length; i2++) updateLayoutIfChanged(activeNodes[i2]);
1161
1143
  }
1162
1144
  }
1163
1145
  frameScheduled = false;
@@ -1166,6 +1148,10 @@ var init_index_native$11 = __esmMin((() => {
1166
1148
  return _layoutOnAnimationFrame.apply(this, arguments);
1167
1149
  }
1168
1150
  resumeLayoutLoop = scheduleLayoutFrame2;
1151
+ measureOnNextFrame = function() {
1152
+ frameCount = 0;
1153
+ scheduleLayoutFrame2();
1154
+ };
1169
1155
  document.addEventListener("visibilitychange", scheduleLayoutFrame2);
1170
1156
  scheduleLayoutFrame2();
1171
1157
  }
@@ -7187,7 +7187,6 @@ function _instanceof(left, right) {
7187
7187
  var LayoutHandlers = /* @__PURE__ */ new WeakMap();
7188
7188
  var LayoutDisableKey = /* @__PURE__ */ new WeakMap();
7189
7189
  var Nodes = /* @__PURE__ */ new Set();
7190
- var IntersectionState = /* @__PURE__ */ new WeakMap();
7191
7190
  var usePretransformDimensions = function() {
7192
7191
  return globalThis.__TAMAGUI_ONLAYOUT_PRETRANSFORM === true || process.env.TAMAGUI_ONLAYOUT_PRETRANSFORM === "1";
7193
7192
  };
@@ -7198,16 +7197,18 @@ var LayoutMeasurementController = function(param) {
7198
7197
  var { disable, children } = param;
7199
7198
  var id = (0, react.useId)();
7200
7199
  useIsomorphicLayoutEffect(function() {
7200
+ var wasDisabled = DisableLayoutContextValues[id] === true;
7201
7201
  DisableLayoutContextValues[id] = disable;
7202
+ if (wasDisabled && !disable) measureOnNextFrame === null || measureOnNextFrame === void 0 || measureOnNextFrame();
7202
7203
  }, [disable, id]);
7203
7204
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DisableLayoutContextKey.Provider, {
7204
7205
  value: id,
7205
7206
  children
7206
7207
  });
7207
7208
  };
7208
- var globalIntersectionObserver = null;
7209
7209
  var strategy = "async";
7210
7210
  var resumeLayoutLoop;
7211
+ var measureOnNextFrame;
7211
7212
  function setOnLayoutStrategy(state) {
7212
7213
  strategy = state;
7213
7214
  resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
@@ -7226,16 +7227,6 @@ function enable() {
7226
7227
  }
7227
7228
  }
7228
7229
  }
7229
- function startGlobalObservers() {
7230
- if (!ENABLE || globalIntersectionObserver) return;
7231
- globalIntersectionObserver = new IntersectionObserver(function(entries) {
7232
- for (var i = 0; i < entries.length; i++) {
7233
- var entry = entries[i];
7234
- var node = entry.target;
7235
- if (IntersectionState.get(node) !== entry.isIntersecting) IntersectionState.set(node, entry.isIntersecting);
7236
- }
7237
- }, { threshold: 0 });
7238
- }
7239
7230
  function rectsEqual(a, b) {
7240
7231
  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
7241
7232
  }
@@ -7302,7 +7293,7 @@ if (ENABLE) {
7302
7293
  }
7303
7294
  if (frameCount >= Number.MAX_SAFE_INTEGER) frameCount = 0;
7304
7295
  if (strategy !== "off") {
7305
- var visibleNodes = [];
7296
+ var activeNodes = [];
7306
7297
  var parentsToObserve = /* @__PURE__ */ new Set();
7307
7298
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
7308
7299
  try {
@@ -7315,8 +7306,7 @@ if (ENABLE) {
7315
7306
  }
7316
7307
  var disableKey = LayoutDisableKey.get(node);
7317
7308
  if (disableKey && DisableLayoutContextValues[disableKey] === true) continue;
7318
- if (IntersectionState.get(node) === false) continue;
7319
- visibleNodes.push(node);
7309
+ activeNodes.push(node);
7320
7310
  parentsToObserve.add(parentElement);
7321
7311
  }
7322
7312
  } catch (err) {
@@ -7329,10 +7319,10 @@ if (ENABLE) {
7329
7319
  if (_didIteratorError) throw _iteratorError;
7330
7320
  }
7331
7321
  }
7332
- if (visibleNodes.length > 0) {
7322
+ if (activeNodes.length > 0) {
7333
7323
  var io = ensureRectFetchObserver2();
7334
7324
  rectFetchStartTime = performance.now();
7335
- for (var i = 0; i < visibleNodes.length; i++) io.observe(visibleNodes[i]);
7325
+ for (var i = 0; i < activeNodes.length; i++) io.observe(activeNodes[i]);
7336
7326
  var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
7337
7327
  try {
7338
7328
  for (var _iterator1 = parentsToObserve[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
@@ -7352,7 +7342,7 @@ if (ENABLE) {
7352
7342
  yield new Promise(function(res) {
7353
7343
  rectFetchResolve = res;
7354
7344
  });
7355
- for (var i1 = 0; i1 < visibleNodes.length; i1++) io.unobserve(visibleNodes[i1]);
7345
+ for (var i1 = 0; i1 < activeNodes.length; i1++) io.unobserve(activeNodes[i1]);
7356
7346
  var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
7357
7347
  try {
7358
7348
  for (var _iterator2 = parentsToObserve[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
@@ -7371,7 +7361,7 @@ if (ENABLE) {
7371
7361
  }
7372
7362
  if (lastCallbackDelay > 50) skipFrames = Math.min(skipFrames + 2, MAX_SKIP_FRAMES);
7373
7363
  else if (lastCallbackDelay < 20) skipFrames = Math.max(skipFrames - 1, BASE_SKIP_FRAMES);
7374
- for (var i2 = 0; i2 < visibleNodes.length; i2++) updateLayoutIfChanged(visibleNodes[i2]);
7364
+ for (var i2 = 0; i2 < activeNodes.length; i2++) updateLayoutIfChanged(activeNodes[i2]);
7375
7365
  }
7376
7366
  }
7377
7367
  frameScheduled = false;
@@ -7380,6 +7370,10 @@ if (ENABLE) {
7380
7370
  return _layoutOnAnimationFrame.apply(this, arguments);
7381
7371
  }
7382
7372
  resumeLayoutLoop = scheduleLayoutFrame2;
7373
+ measureOnNextFrame = function() {
7374
+ frameCount = 0;
7375
+ scheduleLayoutFrame2();
7376
+ };
7383
7377
  document.addEventListener("visibilitychange", scheduleLayoutFrame2);
7384
7378
  scheduleLayoutFrame2();
7385
7379
  }
@@ -7435,11 +7429,6 @@ function observeLayoutNode(node, disableKey) {
7435
7429
  Nodes.add(node);
7436
7430
  if (disableKey) LayoutDisableKey.set(node, disableKey);
7437
7431
  else LayoutDisableKey.delete(node);
7438
- startGlobalObservers();
7439
- if (globalIntersectionObserver) {
7440
- globalIntersectionObserver.observe(node);
7441
- IntersectionState.set(node, true);
7442
- }
7443
7432
  resumeLayoutLoop === null || resumeLayoutLoop === void 0 || resumeLayoutLoop();
7444
7433
  }
7445
7434
  function registerLayoutNode(node, onChange, disableKey) {
@@ -7454,8 +7443,6 @@ function cleanupNode(node) {
7454
7443
  LayoutHandlers.delete(node);
7455
7444
  LayoutDisableKey.delete(node);
7456
7445
  NodeRectCache.delete(node);
7457
- IntersectionState.delete(node);
7458
- if (globalIntersectionObserver) globalIntersectionObserver.unobserve(node);
7459
7446
  }
7460
7447
  //#endregion
7461
7448
  //#region src/getBaseViews.native.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/core",
3
- "version": "2.7.3",
3
+ "version": "2.7.5",
4
4
  "gitHead": "a49cc7ea6b93ba384e77a4880ae48ac4a5635c14",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -79,17 +79,17 @@
79
79
  "clean:build": "tamagui-build clean:build"
80
80
  },
81
81
  "dependencies": {
82
- "@tamagui/helpers": "2.7.3",
83
- "@tamagui/react-native-media-driver": "2.7.3",
84
- "@tamagui/react-native-use-pressable": "2.7.3",
85
- "@tamagui/use-element-layout": "2.7.3",
86
- "@tamagui/use-event": "2.7.3",
87
- "@tamagui/web": "2.7.3"
82
+ "@tamagui/helpers": "2.7.5",
83
+ "@tamagui/react-native-media-driver": "2.7.5",
84
+ "@tamagui/react-native-use-pressable": "2.7.5",
85
+ "@tamagui/use-element-layout": "2.7.5",
86
+ "@tamagui/use-event": "2.7.5",
87
+ "@tamagui/web": "2.7.5"
88
88
  },
89
89
  "devDependencies": {
90
- "@tamagui/build": "2.7.3",
91
- "@tamagui/native-bundle": "2.7.3",
92
- "@tamagui/react-native-web-lite": "2.7.3",
90
+ "@tamagui/build": "2.7.5",
91
+ "@tamagui/native-bundle": "2.7.5",
92
+ "@tamagui/react-native-web-lite": "2.7.5",
93
93
  "@testing-library/react": "^16.1.0",
94
94
  "csstype": "^3.0.10",
95
95
  "react": ">=19",