@tamagui/web 3.0.0-beta.1093.1 → 3.0.0-beta.1097.1

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.
Files changed (77) hide show
  1. package/dist/cjs/config.cjs +2 -2
  2. package/dist/cjs/config.native.cjs +3 -4
  3. package/dist/cjs/config.native.js +3 -4
  4. package/dist/cjs/config.native.js.map +1 -1
  5. package/dist/cjs/createComponent.cjs +1 -2
  6. package/dist/cjs/createComponent.native.cjs +1 -2
  7. package/dist/cjs/createComponent.native.js +1 -2
  8. package/dist/cjs/createComponent.native.js.map +1 -1
  9. package/dist/cjs/helpers/expandStyles.cjs +7 -1
  10. package/dist/cjs/helpers/expandStyles.native.cjs +7 -1
  11. package/dist/cjs/helpers/expandStyles.native.js +7 -1
  12. package/dist/cjs/helpers/expandStyles.native.js.map +1 -1
  13. package/dist/cjs/helpers/getSplitStyles.cjs +99 -2
  14. package/dist/cjs/helpers/getSplitStyles.native.cjs +113 -2
  15. package/dist/cjs/helpers/getSplitStyles.native.js +113 -2
  16. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  17. package/dist/cjs/helpers/resolveNativeUnits.native.cjs +62 -31
  18. package/dist/cjs/helpers/resolveNativeUnits.native.js +62 -31
  19. package/dist/cjs/helpers/resolveNativeUnits.native.js.map +1 -1
  20. package/dist/cjs/helpers/warnOnce.cjs +6 -0
  21. package/dist/cjs/helpers/warnOnce.native.cjs +6 -0
  22. package/dist/cjs/helpers/warnOnce.native.js +6 -0
  23. package/dist/cjs/helpers/warnOnce.native.js.map +1 -1
  24. package/dist/cjs/views/Theme.cjs +2 -11
  25. package/dist/cjs/views/Theme.native.cjs +1 -4
  26. package/dist/cjs/views/Theme.native.js +1 -4
  27. package/dist/cjs/views/Theme.native.js.map +1 -1
  28. package/dist/esm/config.mjs +2 -2
  29. package/dist/esm/config.mjs.map +1 -1
  30. package/dist/esm/config.native.js +3 -4
  31. package/dist/esm/config.native.js.map +1 -1
  32. package/dist/esm/createComponent.mjs +1 -2
  33. package/dist/esm/createComponent.mjs.map +1 -1
  34. package/dist/esm/createComponent.native.js +1 -2
  35. package/dist/esm/createComponent.native.js.map +1 -1
  36. package/dist/esm/helpers/expandStyles.mjs +7 -1
  37. package/dist/esm/helpers/expandStyles.mjs.map +1 -1
  38. package/dist/esm/helpers/expandStyles.native.js +7 -1
  39. package/dist/esm/helpers/expandStyles.native.js.map +1 -1
  40. package/dist/esm/helpers/getSplitStyles.mjs +101 -4
  41. package/dist/esm/helpers/getSplitStyles.mjs.map +1 -1
  42. package/dist/esm/helpers/getSplitStyles.native.js +115 -4
  43. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
  44. package/dist/esm/helpers/resolveNativeUnits.native.js +62 -32
  45. package/dist/esm/helpers/resolveNativeUnits.native.js.map +1 -1
  46. package/dist/esm/helpers/warnOnce.mjs +6 -1
  47. package/dist/esm/helpers/warnOnce.mjs.map +1 -1
  48. package/dist/esm/helpers/warnOnce.native.js +6 -1
  49. package/dist/esm/helpers/warnOnce.native.js.map +1 -1
  50. package/dist/esm/views/Theme.mjs +2 -5
  51. package/dist/esm/views/Theme.mjs.map +1 -1
  52. package/dist/esm/views/Theme.native.js +2 -5
  53. package/dist/esm/views/Theme.native.js.map +1 -1
  54. package/package.json +17 -17
  55. package/src/config.ts +2 -6
  56. package/src/createComponent.tsx +0 -1
  57. package/src/dom/styleTypes.ts +1 -1
  58. package/src/helpers/expandStyles.ts +6 -2
  59. package/src/helpers/getSplitStyles.tsx +165 -3
  60. package/src/helpers/insertStyleRule.tsx +1 -1
  61. package/src/helpers/resolveNativeUnits.native.ts +71 -20
  62. package/src/helpers/warnOnce.ts +6 -0
  63. package/src/types.tsx +114 -34
  64. package/src/views/Theme.tsx +2 -8
  65. package/types/config.d.ts.map +1 -1
  66. package/types/createComponent.d.ts.map +1 -1
  67. package/types/dom/styleTypes.d.ts +1 -1
  68. package/types/dom/styleTypes.d.ts.map +1 -1
  69. package/types/helpers/expandStyles.d.ts.map +1 -1
  70. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  71. package/types/helpers/resolveNativeUnits.native.d.ts +1 -0
  72. package/types/helpers/resolveNativeUnits.native.d.ts.map +1 -1
  73. package/types/helpers/warnOnce.d.ts +1 -0
  74. package/types/helpers/warnOnce.d.ts.map +1 -1
  75. package/types/types.d.ts +57 -22
  76. package/types/types.d.ts.map +1 -1
  77. package/types/views/Theme.d.ts.map +1 -1
@@ -1,8 +1,8 @@
1
1
  import { getTransitionResolver } from "@tamagui/animation-helpers/transitionResolver";
2
2
  import { isClient } from "@tamagui/constants";
3
3
  import { nonAnimatableStyleProps, stylePropsAll, stylePropsInput, stylePropsText, stylePropsTransform, validStyles } from "@tamagui/helpers";
4
- import { addTransformValue, createTransformAccumulator, finalizeTransformAccumulator, getTransformPartKeys, removeTransformValue } from "@tamagui/style-grammar/runtime";
5
- import { getConfig, getConfigMaybe } from "../config.mjs";
4
+ import { addTransformValue, createTransformAccumulator, finalizeTransformAccumulator, getTransformPartKeys, grammarMaxNonPlatformDepth, namedCssColors, removeTransformValue } from "@tamagui/style-grammar/runtime";
5
+ import { getConfig, getConfigMaybe, getSetting } from "../config.mjs";
6
6
  import { isDevTools } from "../constants/isDevTools.mjs";
7
7
  import { defaultComponentStateMounted } from "../defaultComponentState.mjs";
8
8
  import { isVariable } from "../createVariable.mjs";
@@ -397,6 +397,19 @@ function contributeProp(pass, keyOg, valOg, originalOg = valOg, disabled = false
397
397
  } else return;
398
398
  }
399
399
  let isValidStyleKeyInit = isValidStyleKey(keyInit, validStyles);
400
+ if (process.env.NODE_ENV === "development") {
401
+ if (!isValidStyleKeyInit && (!variants || !(keyInit in variants))) {
402
+ let replacement;
403
+ if (keyInit === "animation") replacement = "transition=";
404
+ else if (keyInit === "hoverStyle") replacement = "hover: clause";
405
+ else if (keyInit === "pressStyle") replacement = "press: clause";
406
+ else if (keyInit === "focusStyle") replacement = "focus: clause";
407
+ else if (keyInit === "enterStyle") replacement = "enter: clause";
408
+ else if (keyInit === "exitStyle") replacement = "exit: clause";
409
+ else if (keyInit.charCodeAt(0) === 36 && keyInit.length > 1) replacement = `${keyInit.slice(1)}: clause`;
410
+ if (replacement) warnOnce(`v2-prop:${keyInit}`, `prop "${keyInit}" was removed in v3; use ${replacement}`);
411
+ }
412
+ }
400
413
  if (keyInit.startsWith("data-")) {
401
414
  viewProps[keyInit] = valInit;
402
415
  return;
@@ -1185,7 +1198,7 @@ function emitUnderCondition(state, property, value, cursor, originalValue, conte
1185
1198
  }
1186
1199
  return condition;
1187
1200
  }
1188
- const formatScanFailure = (failure, source, failureIndex) => failure === "invalid-character" ? `"${source[failureIndex]}" would end the declaration or rule` : failure === "unterminated-string" ? "an unterminated string" : failure === "unterminated-comment" ? "an unterminated \"/*\" comment" : failure === "stray-comment-close" ? "a stray \"*/\"" : "an unterminated \"(\"";
1201
+ const formatScanFailure = (failure, source, failureIndex) => failure === "invalid-character" ? `"${source[failureIndex]}" would end the declaration or rule` : failure === "unterminated-string" ? "an unterminated string" : failure === "unterminated-comment" ? "an unterminated \"/*\" comment" : failure === "stray-comment-close" ? "a stray \"*/\"" : failure === "over-deep-clause" ? `a clause with more than ${grammarMaxNonPlatformDepth} non-platform conditions` : "an unterminated \"(\"";
1189
1202
  const warnScanFailure = (property, source, failure, failureIndex) => {
1190
1203
  if (process.env.NODE_ENV === "development") warnRefusedValue(property, source, formatScanFailure(failure, source, failureIndex));
1191
1204
  };
@@ -1195,6 +1208,15 @@ let valueCaches = /* @__PURE__ */ new WeakMap();
1195
1208
  let valueCacheEntries = 0;
1196
1209
  const valueCacheRoot = {};
1197
1210
  const parsedSlices = /* @__PURE__ */ new WeakMap();
1211
+ const cssWideColorKeywords = /* @__PURE__ */ new Set([
1212
+ "inherit",
1213
+ "initial",
1214
+ "unset",
1215
+ "revert",
1216
+ "revert-layer",
1217
+ "currentcolor",
1218
+ "transparent"
1219
+ ]);
1198
1220
  function configuredValue(state, property, raw, embedded = false) {
1199
1221
  const grammar = getConfigRevisionState(state.conf);
1200
1222
  let name = raw;
@@ -1267,8 +1289,75 @@ function configuredValue(state, property, raw, embedded = false) {
1267
1289
  }
1268
1290
  }
1269
1291
  if (process.env.NODE_ENV === "development") {
1270
- const category = grammar.tokenCategory(property);
1292
+ const category = grammar.tokenCategory(property) || grammar.tokenCategory(state.conf.shorthands[property] || property);
1271
1293
  if (category && category !== "color" && state.conf.tokensParsed.color?.[name]) warnOnce(`"${name}" contributes to "color", not "${property}"`);
1294
+ if (!value && !fontProperty) {
1295
+ if (name.charCodeAt(0) === 36 || raw.charCodeAt(0) === 36) {
1296
+ const suggested = name.charCodeAt(0) === 36 ? name.slice(1) : raw.slice(1);
1297
+ warnOnce(`v2-token:${property}=${raw}`, `${property}="${raw}": v3 tokens have no "$" prefix, did you mean "${suggested}"?`);
1298
+ } else if ((category === "size" || category === "space" || category === "radius" || category === "zIndex") && /^-?\d+(?:\.\d+)?$/.test(name)) {
1299
+ let nearest;
1300
+ let minDistance = Infinity;
1301
+ const rawNum = Number(name);
1302
+ const tokens = category ? state.conf.tokensParsed[category] : void 0;
1303
+ if (tokens && Number.isFinite(rawNum)) for (const key in tokens) {
1304
+ const keyNum = Number(key);
1305
+ if (Number.isFinite(keyNum)) {
1306
+ const dist = Math.abs(keyNum - rawNum);
1307
+ if (dist < minDistance) {
1308
+ minDistance = dist;
1309
+ nearest = key;
1310
+ }
1311
+ } else {
1312
+ const val = tokens[key]?.val;
1313
+ const valNum = typeof val === "number" ? val : Number(val);
1314
+ if (Number.isFinite(valNum)) {
1315
+ const dist = Math.abs(valNum - rawNum);
1316
+ if (dist < minDistance) {
1317
+ minDistance = dist;
1318
+ nearest = key;
1319
+ }
1320
+ }
1321
+ }
1322
+ }
1323
+ warnOnce(`numeric-token:${property}=${raw}`, `${property}="${raw}" was passed to CSS as-is with px units${nearest ? `; nearest token is "${nearest}"` : ""}`);
1324
+ } else if (category === "color" && /^[a-zA-Z0-9-]+$/.test(name) && /[a-zA-Z]/.test(name)) {
1325
+ const lower = name.toLowerCase();
1326
+ if (!namedCssColors.has(lower) && !cssWideColorKeywords.has(lower)) {
1327
+ const themeKeys = [];
1328
+ if (state.theme && typeof state.theme === "object") for (const k in state.theme) themeKeys.push(k);
1329
+ if (state.conf.themes) {
1330
+ const active = state.conf.themes[state.flatThemeName || ""];
1331
+ if (active) for (const k in active) themeKeys.push(k);
1332
+ else for (const t in state.conf.themes) for (const k in state.conf.themes[t]) themeKeys.push(k);
1333
+ }
1334
+ let bestMatch;
1335
+ let minDistance = 3;
1336
+ for (const key of themeKeys) {
1337
+ if (Math.abs(key.length - name.length) > 2) continue;
1338
+ const m = name.length;
1339
+ const n = key.length;
1340
+ const d = [];
1341
+ for (let i = 0; i <= m; i++) d[i] = i;
1342
+ for (let j = 1; j <= n; j++) {
1343
+ let prev = d[0];
1344
+ d[0] = j;
1345
+ for (let i = 1; i <= m; i++) {
1346
+ const temp = d[i];
1347
+ d[i] = name[i - 1] === key[j - 1] ? prev : Math.min(prev, d[i], d[i - 1]) + 1;
1348
+ prev = temp;
1349
+ }
1350
+ }
1351
+ const dist = d[m];
1352
+ if (dist <= 2 && dist < minDistance) {
1353
+ minDistance = dist;
1354
+ bestMatch = key;
1355
+ }
1356
+ }
1357
+ warnOnce(`unknown-color:${property}=${raw}`, bestMatch ? `unknown color "${name}", did you mean "${bestMatch}"?` : `unknown color "${name}"`);
1358
+ }
1359
+ }
1360
+ }
1272
1361
  }
1273
1362
  let out = raw;
1274
1363
  if (isVariable(value)) {
@@ -1473,6 +1562,11 @@ function walkConditionalValue(state, property, value, parent, sink, warnMode = 0
1473
1562
  if (typeof value === "string") {
1474
1563
  const parsed = getConfigRevisionState(state.conf).parseFlatValue(value);
1475
1564
  const [segments, failure, failureIndex] = parsed;
1565
+ if (process.env.NODE_ENV === "development") {
1566
+ if (getSetting("styleValueSyntax") === "object") {
1567
+ if (segments.length > 5 || segments.length >= 5 && segments[2] !== -1 || value.includes(":")) warnOnce(`syntax:string:${property}=${value}`, `string syntax is disabled by config (styleValueSyntax: 'object'); received "${property}=${value}"`);
1568
+ }
1569
+ }
1476
1570
  let slices = parsedSlices.get(parsed);
1477
1571
  if (slices === void 0) parsedSlices.set(parsed, slices = []);
1478
1572
  const chainCount = segments.length / 5 - 1;
@@ -1518,6 +1612,9 @@ function walkConditionalValue(state, property, value, parent, sink, warnMode = 0
1518
1612
  if (process.env.NODE_ENV !== "production") lastPayload = value.slice(lastPayloadStart);
1519
1613
  } else {
1520
1614
  if (!value || typeof value !== "object" || Array.isArray(value) || isVariable(value) || !classifyConditionalObject(value, state)) return false;
1615
+ if (process.env.NODE_ENV === "development") {
1616
+ if (getSetting("styleValueSyntax") === "string") warnOnce(`syntax:object:${property}=${JSON.stringify(value)}`, `object-form conditional syntax is disabled by config (styleValueSyntax: 'string'); received "${property}"`);
1617
+ }
1521
1618
  if (value.default != null) {
1522
1619
  emitConditionalValue(state, property, value.default, parentCondition, value.default, sink, warnMode, contextOnly);
1523
1620
  hasBase = true;