@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
@@ -437,6 +437,19 @@ function contributeProp(pass, keyOg, valOg, originalOg = valOg, disabled = false
437
437
  } else return;
438
438
  }
439
439
  let isValidStyleKeyInit = isValidStyleKey(keyInit, validStyles);
440
+ if (process.env.NODE_ENV === "development") {
441
+ if (!isValidStyleKeyInit && (!variants || !(keyInit in variants))) {
442
+ let replacement;
443
+ if (keyInit === "animation") replacement = "transition=";
444
+ else if (keyInit === "hoverStyle") replacement = "hover: clause";
445
+ else if (keyInit === "pressStyle") replacement = "press: clause";
446
+ else if (keyInit === "focusStyle") replacement = "focus: clause";
447
+ else if (keyInit === "enterStyle") replacement = "enter: clause";
448
+ else if (keyInit === "exitStyle") replacement = "exit: clause";
449
+ else if (keyInit.charCodeAt(0) === 36 && keyInit.length > 1) replacement = `${keyInit.slice(1)}: clause`;
450
+ if (replacement) (0, import_warnOnce.warnOnce)(`v2-prop:${keyInit}`, `prop "${keyInit}" was removed in v3; use ${replacement}`);
451
+ }
452
+ }
440
453
  if (keyInit.startsWith("data-")) {
441
454
  viewProps[keyInit] = valInit;
442
455
  return;
@@ -1225,7 +1238,7 @@ function emitUnderCondition(state, property, value, cursor, originalValue, conte
1225
1238
  }
1226
1239
  return condition;
1227
1240
  }
1228
- 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 \"(\"";
1241
+ 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 ${import_runtime.grammarMaxNonPlatformDepth} non-platform conditions` : "an unterminated \"(\"";
1229
1242
  const warnScanFailure = (property, source, failure, failureIndex) => {
1230
1243
  if (process.env.NODE_ENV === "development") (0, import_warnOnce.warnRefusedValue)(property, source, formatScanFailure(failure, source, failureIndex));
1231
1244
  };
@@ -1235,6 +1248,15 @@ let valueCaches = /* @__PURE__ */ new WeakMap();
1235
1248
  let valueCacheEntries = 0;
1236
1249
  const valueCacheRoot = {};
1237
1250
  const parsedSlices = /* @__PURE__ */ new WeakMap();
1251
+ const cssWideColorKeywords = /* @__PURE__ */ new Set([
1252
+ "inherit",
1253
+ "initial",
1254
+ "unset",
1255
+ "revert",
1256
+ "revert-layer",
1257
+ "currentcolor",
1258
+ "transparent"
1259
+ ]);
1238
1260
  function configuredValue(state, property, raw, embedded = false) {
1239
1261
  const grammar = (0, import_grammarConfig.getConfigRevisionState)(state.conf);
1240
1262
  let name = raw;
@@ -1307,8 +1329,75 @@ function configuredValue(state, property, raw, embedded = false) {
1307
1329
  }
1308
1330
  }
1309
1331
  if (process.env.NODE_ENV === "development") {
1310
- const category = grammar.tokenCategory(property);
1332
+ const category = grammar.tokenCategory(property) || grammar.tokenCategory(state.conf.shorthands[property] || property);
1311
1333
  if (category && category !== "color" && state.conf.tokensParsed.color?.[name]) (0, import_warnOnce.warnOnce)(`"${name}" contributes to "color", not "${property}"`);
1334
+ if (!value && !fontProperty) {
1335
+ if (name.charCodeAt(0) === 36 || raw.charCodeAt(0) === 36) {
1336
+ const suggested = name.charCodeAt(0) === 36 ? name.slice(1) : raw.slice(1);
1337
+ (0, import_warnOnce.warnOnce)(`v2-token:${property}=${raw}`, `${property}="${raw}": v3 tokens have no "$" prefix, did you mean "${suggested}"?`);
1338
+ } else if ((category === "size" || category === "space" || category === "radius" || category === "zIndex") && /^-?\d+(?:\.\d+)?$/.test(name)) {
1339
+ let nearest;
1340
+ let minDistance = Infinity;
1341
+ const rawNum = Number(name);
1342
+ const tokens = category ? state.conf.tokensParsed[category] : void 0;
1343
+ if (tokens && Number.isFinite(rawNum)) for (const key in tokens) {
1344
+ const keyNum = Number(key);
1345
+ if (Number.isFinite(keyNum)) {
1346
+ const dist = Math.abs(keyNum - rawNum);
1347
+ if (dist < minDistance) {
1348
+ minDistance = dist;
1349
+ nearest = key;
1350
+ }
1351
+ } else {
1352
+ const val = tokens[key]?.val;
1353
+ const valNum = typeof val === "number" ? val : Number(val);
1354
+ if (Number.isFinite(valNum)) {
1355
+ const dist = Math.abs(valNum - rawNum);
1356
+ if (dist < minDistance) {
1357
+ minDistance = dist;
1358
+ nearest = key;
1359
+ }
1360
+ }
1361
+ }
1362
+ }
1363
+ (0, import_warnOnce.warnOnce)(`numeric-token:${property}=${raw}`, `${property}="${raw}" was passed to CSS as-is with px units${nearest ? `; nearest token is "${nearest}"` : ""}`);
1364
+ } else if (category === "color" && /^[a-zA-Z0-9-]+$/.test(name) && /[a-zA-Z]/.test(name)) {
1365
+ const lower = name.toLowerCase();
1366
+ if (!import_runtime.namedCssColors.has(lower) && !cssWideColorKeywords.has(lower)) {
1367
+ const themeKeys = [];
1368
+ if (state.theme && typeof state.theme === "object") for (const k in state.theme) themeKeys.push(k);
1369
+ if (state.conf.themes) {
1370
+ const active = state.conf.themes[state.flatThemeName || ""];
1371
+ if (active) for (const k in active) themeKeys.push(k);
1372
+ else for (const t in state.conf.themes) for (const k in state.conf.themes[t]) themeKeys.push(k);
1373
+ }
1374
+ let bestMatch;
1375
+ let minDistance = 3;
1376
+ for (const key of themeKeys) {
1377
+ if (Math.abs(key.length - name.length) > 2) continue;
1378
+ const m = name.length;
1379
+ const n = key.length;
1380
+ const d = [];
1381
+ for (let i = 0; i <= m; i++) d[i] = i;
1382
+ for (let j = 1; j <= n; j++) {
1383
+ let prev = d[0];
1384
+ d[0] = j;
1385
+ for (let i = 1; i <= m; i++) {
1386
+ const temp = d[i];
1387
+ d[i] = name[i - 1] === key[j - 1] ? prev : Math.min(prev, d[i], d[i - 1]) + 1;
1388
+ prev = temp;
1389
+ }
1390
+ }
1391
+ const dist = d[m];
1392
+ if (dist <= 2 && dist < minDistance) {
1393
+ minDistance = dist;
1394
+ bestMatch = key;
1395
+ }
1396
+ }
1397
+ (0, import_warnOnce.warnOnce)(`unknown-color:${property}=${raw}`, bestMatch ? `unknown color "${name}", did you mean "${bestMatch}"?` : `unknown color "${name}"`);
1398
+ }
1399
+ }
1400
+ }
1312
1401
  }
1313
1402
  let out = raw;
1314
1403
  if ((0, import_createVariable.isVariable)(value)) {
@@ -1513,6 +1602,11 @@ function walkConditionalValue(state, property, value, parent, sink, warnMode = 0
1513
1602
  if (typeof value === "string") {
1514
1603
  const parsed = (0, import_grammarConfig.getConfigRevisionState)(state.conf).parseFlatValue(value);
1515
1604
  const [segments, failure, failureIndex] = parsed;
1605
+ if (process.env.NODE_ENV === "development") {
1606
+ if ((0, import_config.getSetting)("styleValueSyntax") === "object") {
1607
+ if (segments.length > 5 || segments.length >= 5 && segments[2] !== -1 || value.includes(":")) (0, import_warnOnce.warnOnce)(`syntax:string:${property}=${value}`, `string syntax is disabled by config (styleValueSyntax: 'object'); received "${property}=${value}"`);
1608
+ }
1609
+ }
1516
1610
  let slices = parsedSlices.get(parsed);
1517
1611
  if (slices === void 0) parsedSlices.set(parsed, slices = []);
1518
1612
  const chainCount = segments.length / 5 - 1;
@@ -1558,6 +1652,9 @@ function walkConditionalValue(state, property, value, parent, sink, warnMode = 0
1558
1652
  if (process.env.NODE_ENV !== "production") lastPayload = value.slice(lastPayloadStart);
1559
1653
  } else {
1560
1654
  if (!value || typeof value !== "object" || Array.isArray(value) || (0, import_createVariable.isVariable)(value) || !classifyConditionalObject(value, state)) return false;
1655
+ if (process.env.NODE_ENV === "development") {
1656
+ if ((0, import_config.getSetting)("styleValueSyntax") === "string") (0, import_warnOnce.warnOnce)(`syntax:object:${property}=${JSON.stringify(value)}`, `object-form conditional syntax is disabled by config (styleValueSyntax: 'string'); received "${property}"`);
1657
+ }
1561
1658
  if (value.default != null) {
1562
1659
  emitConditionalValue(state, property, value.default, parentCondition, value.default, sink, warnMode, contextOnly);
1563
1660
  hasBase = true;
@@ -489,6 +489,19 @@ function contributeProp(pass, keyOg, valOg) {
489
489
  if (!isNativeInputColor && keyInit in import_skipProps.skipProps && shouldSkipDirectProps && !(neverSkipProps === null || neverSkipProps === void 0 ? void 0 : neverSkipProps[keyInit])) if (keyInit === "transition" && typeof valInit === "string") return;
490
490
  else return;
491
491
  var isValidStyleKeyInit = isValidStyleKey(keyInit, validStyles);
492
+ if (process.env.NODE_ENV === "development") {
493
+ if (!isValidStyleKeyInit && (!variants || !(keyInit in variants))) {
494
+ var replacement;
495
+ if (keyInit === "animation") replacement = "transition=";
496
+ else if (keyInit === "hoverStyle") replacement = "hover: clause";
497
+ else if (keyInit === "pressStyle") replacement = "press: clause";
498
+ else if (keyInit === "focusStyle") replacement = "focus: clause";
499
+ else if (keyInit === "enterStyle") replacement = "enter: clause";
500
+ else if (keyInit === "exitStyle") replacement = "exit: clause";
501
+ else if (keyInit.charCodeAt(0) === 36 && keyInit.length > 1) replacement = `${keyInit.slice(1)}: clause`;
502
+ if (replacement) (0, import_warnOnce.warnOnce)(`v2-prop:${keyInit}`, `prop "${keyInit}" was removed in v3; use ${replacement}`);
503
+ }
504
+ }
492
505
  if (!isValidStyleKeyInit) {
493
506
  if (!import_constants.isAndroid) {
494
507
  if (keyInit === "elevationAndroid") return;
@@ -1218,7 +1231,7 @@ function emitUnderCondition(state, property, value, cursor, originalValue, conte
1218
1231
  return condition;
1219
1232
  }
1220
1233
  var formatScanFailure = function(failure, source, failureIndex) {
1221
- return 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 \"(\"";
1234
+ return 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 ${import_runtime.grammarMaxNonPlatformDepth} non-platform conditions` : "an unterminated \"(\"";
1222
1235
  };
1223
1236
  var warnScanFailure = function(property, source, failure, failureIndex) {
1224
1237
  if (process.env.NODE_ENV === "development") (0, import_warnOnce.warnRefusedValue)(property, source, formatScanFailure(failure, source, failureIndex));
@@ -1244,6 +1257,15 @@ var valueCaches = /* @__PURE__ */ new WeakMap();
1244
1257
  var valueCacheEntries = 0;
1245
1258
  var valueCacheRoot = {};
1246
1259
  var parsedSlices = /* @__PURE__ */ new WeakMap();
1260
+ var cssWideColorKeywords = /* @__PURE__ */ new Set([
1261
+ "inherit",
1262
+ "initial",
1263
+ "unset",
1264
+ "revert",
1265
+ "revert-layer",
1266
+ "currentcolor",
1267
+ "transparent"
1268
+ ]);
1247
1269
  function configuredValue(state, property, raw) {
1248
1270
  var embedded = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
1249
1271
  var grammar = (0, import_grammarConfig.getConfigRevisionState)(state.conf);
@@ -1329,8 +1351,89 @@ function configuredValue(state, property, raw) {
1329
1351
  }
1330
1352
  if (process.env.NODE_ENV === "development") {
1331
1353
  var _state_conf_tokensParsed_color1;
1332
- var category1 = grammar.tokenCategory(property);
1354
+ var category1 = grammar.tokenCategory(property) || grammar.tokenCategory(state.conf.shorthands[property] || property);
1333
1355
  if (category1 && category1 !== "color" && ((_state_conf_tokensParsed_color1 = state.conf.tokensParsed.color) === null || _state_conf_tokensParsed_color1 === void 0 ? void 0 : _state_conf_tokensParsed_color1[name])) (0, import_warnOnce.warnOnce)(`"${name}" contributes to "color", not "${property}"`);
1356
+ if (!value && !fontProperty) {
1357
+ if (name.charCodeAt(0) === 36 || raw.charCodeAt(0) === 36) {
1358
+ var suggested = name.charCodeAt(0) === 36 ? name.slice(1) : raw.slice(1);
1359
+ (0, import_warnOnce.warnOnce)(`v2-token:${property}=${raw}`, `${property}="${raw}": v3 tokens have no "$" prefix, did you mean "${suggested}"?`);
1360
+ } else if ((category1 === "size" || category1 === "space" || category1 === "radius" || category1 === "zIndex") && /^-?\d+(?:\.\d+)?$/.test(name)) {
1361
+ var nearest;
1362
+ var minDistance = Infinity;
1363
+ var rawNum = Number(name);
1364
+ var tokens = category1 ? state.conf.tokensParsed[category1] : void 0;
1365
+ if (tokens && Number.isFinite(rawNum)) for (var key in tokens) {
1366
+ var keyNum = Number(key);
1367
+ if (Number.isFinite(keyNum)) {
1368
+ var dist = Math.abs(keyNum - rawNum);
1369
+ if (dist < minDistance) {
1370
+ minDistance = dist;
1371
+ nearest = key;
1372
+ }
1373
+ } else {
1374
+ var _tokens_key;
1375
+ var val = (_tokens_key = tokens[key]) === null || _tokens_key === void 0 ? void 0 : _tokens_key.val;
1376
+ var valNum = typeof val === "number" ? val : Number(val);
1377
+ if (Number.isFinite(valNum)) {
1378
+ var dist1 = Math.abs(valNum - rawNum);
1379
+ if (dist1 < minDistance) {
1380
+ minDistance = dist1;
1381
+ nearest = key;
1382
+ }
1383
+ }
1384
+ }
1385
+ }
1386
+ (0, import_warnOnce.warnOnce)(`numeric-token:${property}=${raw}`, `${property}="${raw}" was passed to CSS as-is with px units${nearest ? `; nearest token is "${nearest}"` : ""}`);
1387
+ } else if (category1 === "color" && /^[a-zA-Z0-9-]+$/.test(name) && /[a-zA-Z]/.test(name)) {
1388
+ var lower = name.toLowerCase();
1389
+ if (!import_runtime.namedCssColors.has(lower) && !cssWideColorKeywords.has(lower)) {
1390
+ var themeKeys = [];
1391
+ if (state.theme && typeof state.theme === "object") for (var k in state.theme) themeKeys.push(k);
1392
+ if (state.conf.themes) {
1393
+ var active = state.conf.themes[state.flatThemeName || ""];
1394
+ if (active) for (var k1 in active) themeKeys.push(k1);
1395
+ else for (var t in state.conf.themes) for (var k2 in state.conf.themes[t]) themeKeys.push(k2);
1396
+ }
1397
+ var bestMatch;
1398
+ var minDistance1 = 3;
1399
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
1400
+ try {
1401
+ for (var _iterator = themeKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
1402
+ var key1 = _step.value;
1403
+ if (Math.abs(key1.length - name.length) > 2) continue;
1404
+ var m = name.length;
1405
+ var n = key1.length;
1406
+ var d = [];
1407
+ for (var i = 0; i <= m; i++) d[i] = i;
1408
+ for (var j = 1; j <= n; j++) {
1409
+ var prev = d[0];
1410
+ d[0] = j;
1411
+ for (var i1 = 1; i1 <= m; i1++) {
1412
+ var temp = d[i1];
1413
+ d[i1] = name[i1 - 1] === key1[j - 1] ? prev : Math.min(prev, d[i1], d[i1 - 1]) + 1;
1414
+ prev = temp;
1415
+ }
1416
+ }
1417
+ var dist2 = d[m];
1418
+ if (dist2 <= 2 && dist2 < minDistance1) {
1419
+ minDistance1 = dist2;
1420
+ bestMatch = key1;
1421
+ }
1422
+ }
1423
+ } catch (err) {
1424
+ _didIteratorError = true;
1425
+ _iteratorError = err;
1426
+ } finally {
1427
+ try {
1428
+ if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
1429
+ } finally {
1430
+ if (_didIteratorError) throw _iteratorError;
1431
+ }
1432
+ }
1433
+ (0, import_warnOnce.warnOnce)(`unknown-color:${property}=${raw}`, bestMatch ? `unknown color "${name}", did you mean "${bestMatch}"?` : `unknown color "${name}"`);
1434
+ }
1435
+ }
1436
+ }
1334
1437
  }
1335
1438
  var out = raw;
1336
1439
  if ((0, import_createVariable.isVariable)(value)) {
@@ -1661,6 +1764,11 @@ function walkConditionalValue(state, property, value, parent, sink) {
1661
1764
  if (typeof value === "string") {
1662
1765
  var parsed = (0, import_grammarConfig.getConfigRevisionState)(state.conf).parseFlatValue(value);
1663
1766
  var [segments, failure, failureIndex] = parsed;
1767
+ if (process.env.NODE_ENV === "development") {
1768
+ if ((0, import_config.getSetting)("styleValueSyntax") === "object") {
1769
+ if (segments.length > 5 || segments.length >= 5 && segments[2] !== -1 || value.includes(":")) (0, import_warnOnce.warnOnce)(`syntax:string:${property}=${value}`, `string syntax is disabled by config (styleValueSyntax: 'object'); received "${property}=${value}"`);
1770
+ }
1771
+ }
1664
1772
  var slices = parsedSlices.get(parsed);
1665
1773
  if (slices === void 0) parsedSlices.set(parsed, slices = []);
1666
1774
  var chainCount = segments.length / 5 - 1;
@@ -1714,6 +1822,9 @@ function walkConditionalValue(state, property, value, parent, sink) {
1714
1822
  if (process.env.NODE_ENV !== "production") lastPayload = value.slice(lastPayloadStart);
1715
1823
  } else {
1716
1824
  if (!value || typeof value !== "object" || Array.isArray(value) || (0, import_createVariable.isVariable)(value) || !classifyConditionalObject(value, state)) return false;
1825
+ if (process.env.NODE_ENV === "development") {
1826
+ if ((0, import_config.getSetting)("styleValueSyntax") === "string") (0, import_warnOnce.warnOnce)(`syntax:object:${property}=${JSON.stringify(value)}`, `object-form conditional syntax is disabled by config (styleValueSyntax: 'string'); received "${property}"`);
1827
+ }
1717
1828
  if (value.default != null) {
1718
1829
  emitConditionalValue(state, property, value.default, parentCondition, value.default, sink, warnMode, contextOnly);
1719
1830
  hasBase = true;
@@ -489,6 +489,19 @@ function contributeProp(pass, keyOg, valOg) {
489
489
  if (!isNativeInputColor && keyInit in import_skipProps.skipProps && shouldSkipDirectProps && !(neverSkipProps === null || neverSkipProps === void 0 ? void 0 : neverSkipProps[keyInit])) if (keyInit === "transition" && typeof valInit === "string") return;
490
490
  else return;
491
491
  var isValidStyleKeyInit = isValidStyleKey(keyInit, validStyles);
492
+ if (process.env.NODE_ENV === "development") {
493
+ if (!isValidStyleKeyInit && (!variants || !(keyInit in variants))) {
494
+ var replacement;
495
+ if (keyInit === "animation") replacement = "transition=";
496
+ else if (keyInit === "hoverStyle") replacement = "hover: clause";
497
+ else if (keyInit === "pressStyle") replacement = "press: clause";
498
+ else if (keyInit === "focusStyle") replacement = "focus: clause";
499
+ else if (keyInit === "enterStyle") replacement = "enter: clause";
500
+ else if (keyInit === "exitStyle") replacement = "exit: clause";
501
+ else if (keyInit.charCodeAt(0) === 36 && keyInit.length > 1) replacement = `${keyInit.slice(1)}: clause`;
502
+ if (replacement) (0, import_warnOnce.warnOnce)(`v2-prop:${keyInit}`, `prop "${keyInit}" was removed in v3; use ${replacement}`);
503
+ }
504
+ }
492
505
  if (!isValidStyleKeyInit) {
493
506
  if (!import_constants.isAndroid) {
494
507
  if (keyInit === "elevationAndroid") return;
@@ -1218,7 +1231,7 @@ function emitUnderCondition(state, property, value, cursor, originalValue, conte
1218
1231
  return condition;
1219
1232
  }
1220
1233
  var formatScanFailure = function(failure, source, failureIndex) {
1221
- return 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 \"(\"";
1234
+ return 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 ${import_runtime.grammarMaxNonPlatformDepth} non-platform conditions` : "an unterminated \"(\"";
1222
1235
  };
1223
1236
  var warnScanFailure = function(property, source, failure, failureIndex) {
1224
1237
  if (process.env.NODE_ENV === "development") (0, import_warnOnce.warnRefusedValue)(property, source, formatScanFailure(failure, source, failureIndex));
@@ -1244,6 +1257,15 @@ var valueCaches = /* @__PURE__ */ new WeakMap();
1244
1257
  var valueCacheEntries = 0;
1245
1258
  var valueCacheRoot = {};
1246
1259
  var parsedSlices = /* @__PURE__ */ new WeakMap();
1260
+ var cssWideColorKeywords = /* @__PURE__ */ new Set([
1261
+ "inherit",
1262
+ "initial",
1263
+ "unset",
1264
+ "revert",
1265
+ "revert-layer",
1266
+ "currentcolor",
1267
+ "transparent"
1268
+ ]);
1247
1269
  function configuredValue(state, property, raw) {
1248
1270
  var embedded = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
1249
1271
  var grammar = (0, import_grammarConfig.getConfigRevisionState)(state.conf);
@@ -1329,8 +1351,89 @@ function configuredValue(state, property, raw) {
1329
1351
  }
1330
1352
  if (process.env.NODE_ENV === "development") {
1331
1353
  var _state_conf_tokensParsed_color1;
1332
- var category1 = grammar.tokenCategory(property);
1354
+ var category1 = grammar.tokenCategory(property) || grammar.tokenCategory(state.conf.shorthands[property] || property);
1333
1355
  if (category1 && category1 !== "color" && ((_state_conf_tokensParsed_color1 = state.conf.tokensParsed.color) === null || _state_conf_tokensParsed_color1 === void 0 ? void 0 : _state_conf_tokensParsed_color1[name])) (0, import_warnOnce.warnOnce)(`"${name}" contributes to "color", not "${property}"`);
1356
+ if (!value && !fontProperty) {
1357
+ if (name.charCodeAt(0) === 36 || raw.charCodeAt(0) === 36) {
1358
+ var suggested = name.charCodeAt(0) === 36 ? name.slice(1) : raw.slice(1);
1359
+ (0, import_warnOnce.warnOnce)(`v2-token:${property}=${raw}`, `${property}="${raw}": v3 tokens have no "$" prefix, did you mean "${suggested}"?`);
1360
+ } else if ((category1 === "size" || category1 === "space" || category1 === "radius" || category1 === "zIndex") && /^-?\d+(?:\.\d+)?$/.test(name)) {
1361
+ var nearest;
1362
+ var minDistance = Infinity;
1363
+ var rawNum = Number(name);
1364
+ var tokens = category1 ? state.conf.tokensParsed[category1] : void 0;
1365
+ if (tokens && Number.isFinite(rawNum)) for (var key in tokens) {
1366
+ var keyNum = Number(key);
1367
+ if (Number.isFinite(keyNum)) {
1368
+ var dist = Math.abs(keyNum - rawNum);
1369
+ if (dist < minDistance) {
1370
+ minDistance = dist;
1371
+ nearest = key;
1372
+ }
1373
+ } else {
1374
+ var _tokens_key;
1375
+ var val = (_tokens_key = tokens[key]) === null || _tokens_key === void 0 ? void 0 : _tokens_key.val;
1376
+ var valNum = typeof val === "number" ? val : Number(val);
1377
+ if (Number.isFinite(valNum)) {
1378
+ var dist1 = Math.abs(valNum - rawNum);
1379
+ if (dist1 < minDistance) {
1380
+ minDistance = dist1;
1381
+ nearest = key;
1382
+ }
1383
+ }
1384
+ }
1385
+ }
1386
+ (0, import_warnOnce.warnOnce)(`numeric-token:${property}=${raw}`, `${property}="${raw}" was passed to CSS as-is with px units${nearest ? `; nearest token is "${nearest}"` : ""}`);
1387
+ } else if (category1 === "color" && /^[a-zA-Z0-9-]+$/.test(name) && /[a-zA-Z]/.test(name)) {
1388
+ var lower = name.toLowerCase();
1389
+ if (!import_runtime.namedCssColors.has(lower) && !cssWideColorKeywords.has(lower)) {
1390
+ var themeKeys = [];
1391
+ if (state.theme && typeof state.theme === "object") for (var k in state.theme) themeKeys.push(k);
1392
+ if (state.conf.themes) {
1393
+ var active = state.conf.themes[state.flatThemeName || ""];
1394
+ if (active) for (var k1 in active) themeKeys.push(k1);
1395
+ else for (var t in state.conf.themes) for (var k2 in state.conf.themes[t]) themeKeys.push(k2);
1396
+ }
1397
+ var bestMatch;
1398
+ var minDistance1 = 3;
1399
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
1400
+ try {
1401
+ for (var _iterator = themeKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
1402
+ var key1 = _step.value;
1403
+ if (Math.abs(key1.length - name.length) > 2) continue;
1404
+ var m = name.length;
1405
+ var n = key1.length;
1406
+ var d = [];
1407
+ for (var i = 0; i <= m; i++) d[i] = i;
1408
+ for (var j = 1; j <= n; j++) {
1409
+ var prev = d[0];
1410
+ d[0] = j;
1411
+ for (var i1 = 1; i1 <= m; i1++) {
1412
+ var temp = d[i1];
1413
+ d[i1] = name[i1 - 1] === key1[j - 1] ? prev : Math.min(prev, d[i1], d[i1 - 1]) + 1;
1414
+ prev = temp;
1415
+ }
1416
+ }
1417
+ var dist2 = d[m];
1418
+ if (dist2 <= 2 && dist2 < minDistance1) {
1419
+ minDistance1 = dist2;
1420
+ bestMatch = key1;
1421
+ }
1422
+ }
1423
+ } catch (err) {
1424
+ _didIteratorError = true;
1425
+ _iteratorError = err;
1426
+ } finally {
1427
+ try {
1428
+ if (!_iteratorNormalCompletion && _iterator.return != null) _iterator.return();
1429
+ } finally {
1430
+ if (_didIteratorError) throw _iteratorError;
1431
+ }
1432
+ }
1433
+ (0, import_warnOnce.warnOnce)(`unknown-color:${property}=${raw}`, bestMatch ? `unknown color "${name}", did you mean "${bestMatch}"?` : `unknown color "${name}"`);
1434
+ }
1435
+ }
1436
+ }
1334
1437
  }
1335
1438
  var out = raw;
1336
1439
  if ((0, import_createVariable.isVariable)(value)) {
@@ -1661,6 +1764,11 @@ function walkConditionalValue(state, property, value, parent, sink) {
1661
1764
  if (typeof value === "string") {
1662
1765
  var parsed = (0, import_grammarConfig.getConfigRevisionState)(state.conf).parseFlatValue(value);
1663
1766
  var [segments, failure, failureIndex] = parsed;
1767
+ if (process.env.NODE_ENV === "development") {
1768
+ if ((0, import_config.getSetting)("styleValueSyntax") === "object") {
1769
+ if (segments.length > 5 || segments.length >= 5 && segments[2] !== -1 || value.includes(":")) (0, import_warnOnce.warnOnce)(`syntax:string:${property}=${value}`, `string syntax is disabled by config (styleValueSyntax: 'object'); received "${property}=${value}"`);
1770
+ }
1771
+ }
1664
1772
  var slices = parsedSlices.get(parsed);
1665
1773
  if (slices === void 0) parsedSlices.set(parsed, slices = []);
1666
1774
  var chainCount = segments.length / 5 - 1;
@@ -1714,6 +1822,9 @@ function walkConditionalValue(state, property, value, parent, sink) {
1714
1822
  if (process.env.NODE_ENV !== "production") lastPayload = value.slice(lastPayloadStart);
1715
1823
  } else {
1716
1824
  if (!value || typeof value !== "object" || Array.isArray(value) || (0, import_createVariable.isVariable)(value) || !classifyConditionalObject(value, state)) return false;
1825
+ if (process.env.NODE_ENV === "development") {
1826
+ if ((0, import_config.getSetting)("styleValueSyntax") === "string") (0, import_warnOnce.warnOnce)(`syntax:object:${property}=${JSON.stringify(value)}`, `object-form conditional syntax is disabled by config (styleValueSyntax: 'string'); received "${property}"`);
1827
+ }
1717
1828
  if (value.default != null) {
1718
1829
  emitConditionalValue(state, property, value.default, parentCondition, value.default, sink, warnMode, contextOnly);
1719
1830
  hasBase = true;