@tamagui/style-grammar 3.1.10 → 3.2.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.
@@ -881,7 +881,8 @@ function formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {
881
881
  }
882
882
  }
883
883
  if (valueKind === "token") {
884
- if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate, config || {})) {
884
+ const untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate, config || {}) : null;
885
+ if (untokened && untokened.convenience !== "spacing-scale") {
885
886
  return null;
886
887
  }
887
888
  const parsed2 = parseCandidate(candidate, tokenValidationConfig(entry, value, config));
@@ -1104,7 +1104,8 @@ function formatCandidate(param, config) {
1104
1104
  }
1105
1105
  if (valueKind === "token") {
1106
1106
  var _parsed_entry2;
1107
- if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate2, config || {})) {
1107
+ var untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate2, config || {}) : null;
1108
+ if (untokened && untokened.convenience !== "spacing-scale") {
1108
1109
  return null;
1109
1110
  }
1110
1111
  var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));
@@ -1104,7 +1104,8 @@ function formatCandidate(param, config) {
1104
1104
  }
1105
1105
  if (valueKind === "token") {
1106
1106
  var _parsed_entry2;
1107
- if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate2, config || {})) {
1107
+ var untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate2, config || {}) : null;
1108
+ if (untokened && untokened.convenience !== "spacing-scale") {
1108
1109
  return null;
1109
1110
  }
1110
1111
  var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.native.js","names":[],"sources":["cjs/tooling/candidate.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar candidate_exports = {};\n__export(candidate_exports, {\n classifyCandidate: () => classifyCandidate,\n decimalHalfTokenAlias: () => decimalHalfTokenAlias,\n decodeArbitrary: () => decodeArbitrary,\n encodeArbitrary: () => encodeArbitrary,\n formatCandidate: () => formatCandidate,\n hasTokenName: () => hasTokenName,\n parseCandidate: () => parseCandidate,\n resolveTokenName: () => resolveTokenName,\n splitCandidate: () => splitCandidate,\n tailwindLeadingRatios: () => tailwindLeadingRatios,\n tailwindTrackingEms: () => tailwindTrackingEms\n});\nmodule.exports = __toCommonJS(candidate_exports);\nvar import_namedCssColors = require(\"../runtime/namedCssColors\");\nvar import_config = require(\"./config\");\nvar import_registry = require(\"./registry\");\nvar import_clauseIdentity = require(\"../runtime/clauseIdentity\");\nvar import_modifierVocabulary = require(\"../runtime/modifierVocabulary\");\nvar import_colorOpacity = require(\"../runtime/colorOpacity\");\nvar import_safeAreaVariables = require(\"../runtime/safeAreaVariables\");\nvar sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nvar fontGenerics = /* @__PURE__ */ new Set([\n \"sans\",\n \"serif\",\n \"mono\"\n]);\nvar numericPattern = /^\\d+(?:\\.\\d+)?$/;\nvar tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nvar tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nvar extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nvar negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nvar positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nvar marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nvar borderWidthKeywords = /* @__PURE__ */ new Set([\n \"thin\",\n \"medium\",\n \"thick\"\n]);\nvar ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nvar cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nvar cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n var parts = [];\n var current = \"\";\n var bracketDepth = 0;\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = candidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return {\n modifiers: parts,\n base: current\n };\n}\nvar modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nvar modifierKindGroup = 5;\nvar modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n var vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = (0, import_modifierVocabulary.compileModifierVocabulary)(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n var vocabulary = getModifierVocabulary(config);\n var exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if ((0, import_clauseIdentity.parseGroupModifier)(modifier)) return modifierKindGroup;\n var sizeEnd = (0, import_clauseIdentity.containerModifierSizeEnd)(modifier);\n if (sizeEnd === -1) return 0;\n var size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === import_modifierVocabulary.modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n var normalized = [];\n var seen = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = modifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var modifier = _step.value;\n var canonical = (0, import_clauseIdentity.canonicalClauseModifier)(modifier);\n var kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n var _config_tokenNames, _config_tokenNames1;\n var fallback = import_config.propTokenGroupFallbacks[category];\n return ((_config_tokenNames = config.tokenNames) === null || _config_tokenNames === void 0 ? void 0 : _config_tokenNames[category]) || (fallback ? (_config_tokenNames1 = config.tokenNames) === null || _config_tokenNames1 === void 0 ? void 0 : _config_tokenNames1[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n var match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n var names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n var alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n var byProp = new Map(import_registry.grammarEntries.map(function(entry2) {\n return [\n entry2.prop,\n entry2\n ];\n }));\n var out = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n var entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n var _config_shorthands;\n var registered = import_registry.prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\n \"fontSize\",\n \"textAlign\",\n \"color\"\n ]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n var sides = prefix === \"border-x\" ? [\n \"Left\",\n \"Right\"\n ] : [\n \"Top\",\n \"Bottom\"\n ];\n return entriesForProps(sides.flatMap(function(side) {\n return [\n `border${side}Width`,\n `border${side}Color`\n ];\n }));\n }\n if (prefix === \"size\") {\n return entriesForProps(import_registry.sizeUtilityProps).map(function(entry) {\n return {\n ...entry,\n tokenCategory: \"size\"\n };\n });\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(import_registry.insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\n \"x\",\n \"y\"\n ]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n var props = import_registry.radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n var expanded = (_config_shorthands = config.shorthands) === null || _config_shorthands === void 0 ? void 0 : _config_shorthands[prefix];\n if (!expanded) return [];\n return import_registry.grammarEntries.filter(function(entry) {\n return entry.prop === expanded;\n });\n}\nfunction findPrefix(base, config) {\n var prefixes = new Set(Object.keys(import_registry.prefixToEntries));\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = extraPrefixes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prefix = _step.value;\n prefixes.add(prefix);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n for (var shorthand in config.shorthands) prefixes.add(shorthand);\n var found = null;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = prefixes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var prefix1 = _step1.value;\n if (base.startsWith(`${prefix1}-`) && (!found || prefix1.length > found.length)) {\n found = prefix1;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n var inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n var opening = /* @__PURE__ */ new Set([\n \"(\",\n \"[\",\n \"{\"\n ]);\n var matching = {\n \")\": \"(\",\n \"]\": \"[\",\n \"}\": \"{\"\n };\n var stack = [];\n var quote = \"\";\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n var expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n var fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || import_namedCssColors.namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n var suffix = (0, import_colorOpacity.splitColorOpacitySuffix)(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if ((0, import_safeAreaVariables.getSafeAreaEdge)(rawValue)) {\n var entry = entries.find(function(param) {\n var { tokenCategory } = param;\n return tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\";\n });\n if (entry) {\n return {\n entry,\n valueKind: \"convenience\",\n convenience: \"safe-area\"\n };\n }\n }\n var arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n var width = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var kind1 = arbitraryTextKind(decodeArbitrary(arbitrary));\n var fontSize = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n var color1 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (kind1 === \"fontSize\" && fontSize) {\n return {\n entry: fontSize,\n valueKind: \"arbitrary\"\n };\n }\n if (kind1 === \"color\" && color1) {\n return {\n entry: color1,\n valueKind: \"arbitrary\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n }),\n valueKind: \"arbitrary\"\n };\n }\n return {\n entry: entries[0],\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var fontSize1 = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n if (fontSize1 && hasTokenName(config, \"fontSize\", rawValue)) {\n return {\n entry: fontSize1,\n valueKind: \"token\"\n };\n }\n if (import_registry.textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"textAlign\";\n }),\n valueKind: \"enum\"\n };\n }\n var color2 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (color2 && rawValue === \"transparent\") {\n return {\n entry: color2,\n valueKind: \"enum\"\n };\n }\n var colorName = tokenLookupName(\"color\", rawValue);\n if (color2 && hasTokenName(config, \"color\", colorName)) {\n return {\n entry: color2,\n valueKind: \"token\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n var fontFamily = entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n });\n var fontWeight = entries.find(function(entry3) {\n return entry3.prop === \"fontWeight\";\n });\n if (!fontFamily) return null;\n var matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n var matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return {\n entry: fontFamily,\n valueKind: \"token\"\n };\n }\n if (matchesWeight) {\n return {\n entry: fontWeight,\n valueKind: \"token\"\n };\n }\n return fontGenerics.has(rawValue) ? {\n entry: fontFamily,\n valueKind: \"convenience\",\n convenience: \"font-generic\"\n } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n var width1 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color3 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var token = negative ? `-${rawValue}` : rawValue;\n var widthCategory = (width1 === null || width1 === void 0 ? void 0 : width1.tokenCategory) || \"space\";\n var matchesWidth = width1 && hasTokenName(config, widthCategory, token);\n var colorName1 = tokenLookupName(\"color\", rawValue);\n var matchesColor = color3 && hasTokenName(config, \"color\", colorName1);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return {\n entry: width1,\n valueKind: \"token\"\n };\n }\n if (matchesColor) {\n return {\n entry: color3,\n valueKind: \"token\"\n };\n }\n if (color3 && rawValue === \"transparent\") {\n return {\n entry: color3,\n valueKind: \"enum\"\n };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n var flex = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex) {\n return {\n entry: flex,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n var letterSpacing = entries.find(function(entry3) {\n return entry3.prop === \"letterSpacing\";\n });\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n var lineHeight = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n var angle = entries.find(function(entry3) {\n var _entry_conveniences2;\n return (_entry_conveniences2 = entry3.conveniences) === null || _entry_conveniences2 === void 0 ? void 0 : _entry_conveniences2.includes(\"angle\");\n });\n if (angle) {\n return {\n entry: angle,\n valueKind: \"convenience\",\n convenience: \"angle\"\n };\n }\n if (prefix === \"flex\") {\n var flex1 = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex1) return {\n entry: flex1,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n if (prefix === \"grow\") {\n var grow = entries.find(function(entry3) {\n return entry3.prop === \"flexGrow\";\n });\n if (grow) return {\n entry: grow,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"shrink\") {\n var shrink = entries.find(function(entry3) {\n return entry3.prop === \"flexShrink\";\n });\n if (shrink) return {\n entry: shrink,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"line-clamp\") {\n var clamp = entries.find(function(entry3) {\n return entry3.prop === \"numberOfLines\";\n });\n if (clamp) return {\n entry: clamp,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"leading\") {\n var lineHeight1 = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight1 && (!lineHeight1.tokenCategory || !hasTokenName(config, lineHeight1.tokenCategory, rawValue))) {\n return {\n entry: lineHeight1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n var entry1 = entries[0];\n if (entry1) return {\n entry: entry1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var entry2 = _step.value;\n var _entry_conveniences;\n if (entry2.tokenCategory) {\n var _entry_conveniences1;\n if (entry2.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return {\n entry: entry2,\n valueKind: \"enum\"\n };\n }\n if (entry2.tokenCategory === \"radius\" && rawValue === \"none\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"zero\"\n };\n }\n var name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n var tokenName = tokenLookupName(entry2.tokenCategory, name);\n if (hasTokenName(config, entry2.tokenCategory, tokenName)) {\n return {\n entry: entry2,\n valueKind: \"token\"\n };\n }\n if (((_entry_conveniences1 = entry2.conveniences) === null || _entry_conveniences1 === void 0 ? void 0 : _entry_conveniences1.includes(\"sizing-keyword\")) && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (positionSpaceProps.has(entry2.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (marginSpaceProps.has(entry2.prop) && rawValue === \"auto\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (entry2.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (numericPattern.test(rawValue) && (entry2.tokenCategory === \"space\" || entry2.tokenCategory === \"size\" || import_config.propTokenGroupFallbacks[entry2.tokenCategory] === \"size\")) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"spacing-scale\"\n };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"percentage\"\n };\n }\n continue;\n }\n if (entry2.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (((_entry_conveniences = entry2.conveniences) === null || _entry_conveniences === void 0 ? void 0 : _entry_conveniences.includes(\"integer\")) && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n var split = splitCandidate(candidate);\n if (!split) return null;\n var modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n var negative = split.base[0] === \"-\";\n var core = negative ? split.base.slice(1) : split.base;\n var prefix = findPrefix(core, config);\n var dynamic;\n if (prefix) {\n var rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n var entries = resolveEntries(prefix, config);\n var selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = {\n prefix,\n rawValue,\n selected\n };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n var direct = import_registry.wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n var convenience = import_registry.wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n var parsed = parseCandidate(candidate, config);\n return parsed ? {\n kind: \"tamagui\",\n parsed\n } : {\n kind: \"passthrough\",\n reason: \"not in the configured Tamagui grammar\"\n };\n}\nfunction tokenValidationConfig(entry, value, config) {\n var tokenNames = {\n ...config === null || config === void 0 ? void 0 : config.tokenNames\n };\n var category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [\n tokenLookupName(category, value)\n ];\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = (import_registry.prefixToEntries[entry.prefix] || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n ...config,\n tokenNames\n };\n}\nfunction formatCandidate(param, config) {\n var { prop, value, valueKind, modifiers = [] } = param;\n var _parsed_entry;\n var entry = import_registry.propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n var normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n var _standaloneValueProps_prop;\n var whole = (_standaloneValueProps_prop = import_registry.standaloneValueProps[prop]) === null || _standaloneValueProps_prop === void 0 ? void 0 : _standaloneValueProps_prop[value];\n if (whole) {\n var candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole}` : whole;\n if (config) {\n var parsed = parseCandidate(candidate, config);\n if (!(parsed === null || parsed === void 0 ? void 0 : parsed.properties) || parsed.properties[prop] !== value) return null;\n }\n return candidate;\n }\n if (prop === \"fontWeight\") {\n var _wholeClassUtilities_core;\n var name = import_registry.fontWeightNames[value];\n if (!name) return null;\n var core = `font-${name}`;\n if (String((_wholeClassUtilities_core = import_registry.wholeClassUtilities[core]) === null || _wholeClassUtilities_core === void 0 ? void 0 : _wholeClassUtilities_core.fontWeight) !== value) return null;\n var candidate1 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n if (config) {\n var parsed1 = parseCandidate(candidate1, config);\n if (!(parsed1 === null || parsed1 === void 0 ? void 0 : parsed1.properties) || String(parsed1.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate1;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n var sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n var lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName)) return null;\n var colliding = import_registry.prefixToEntries[entry.prefix].filter(function(other2) {\n return other2.prop !== prop && other2.tokenCategory;\n });\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = colliding[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n var formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n var core1 = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n var candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core1}` : core1;\n var whole1 = import_registry.wholeClassUtilities[core1];\n if (whole1) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n var _parsed_entry1;\n var parsed2 = parseCandidate(candidate2, config);\n if ((parsed2 === null || parsed2 === void 0 ? void 0 : parsed2.kind) === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate2 : null;\n }\n return (parsed2 === null || parsed2 === void 0 ? void 0 : (_parsed_entry1 = parsed2.entry) === null || _parsed_entry1 === void 0 ? void 0 : _parsed_entry1.prop) === prop && parsed2.valueKind === valueKind ? candidate2 : null;\n } else if (prop in whole1 && String(whole1[prop]) === value) {\n return candidate2;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n var _parsed_entry2;\n if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate2, config || {})) {\n return null;\n }\n var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));\n var parsedValue = (parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.rawValue) ? `${parsed3.negative ? \"-\" : \"\"}${parsed3.rawValue}` : null;\n if ((parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.kind) !== \"dynamic\" || ((_parsed_entry2 = parsed3.entry) === null || _parsed_entry2 === void 0 ? void 0 : _parsed_entry2.prop) !== prop || parsed3.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate2;\n }\n var parsed4 = parseCandidate(candidate2, config || {});\n if (!parsed4 || ((_parsed_entry = parsed4.entry) === null || _parsed_entry === void 0 ? void 0 : _parsed_entry.prop) !== prop || parsed4.valueKind !== valueKind) return null;\n return candidate2;\n}\nfunction encodeArbitrary(value) {\n var encoded = \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n var decoded = \"\";\n for (var index = 0; index < value.length; index++) {\n var char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,oBAAoB,CAAC;AACzB,SAAS,mBAAmB;CAC1B,yBAAyB;CACzB,6BAA6B;CAC7B,uBAAuB;CACvB,uBAAuB;CACvB,uBAAuB;CACvB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,sBAAsB;CACtB,6BAA6B;CAC7B,2BAA2B;AAC7B,CAAC;AACD,OAAO,UAAU,aAAa,iBAAiB;AAC/C,IAAI,wBAAwB,QAAQ,qCAA2B;AAC/D,IAAI,gBAAgB,QAAQ,oBAAU;AACtC,IAAI,kBAAkB,QAAQ,sBAAY;AAC1C,IAAI,wBAAwB,QAAQ,qCAA2B;AAC/D,IAAI,4BAA4B,QAAQ,yCAA+B;AACvE,IAAI,sBAAsB,QAAQ,mCAAyB;AAC3D,IAAI,2BAA2B,QAAQ,wCAA8B;AACrE,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,+BAA+B,IAAI,IAAI;CACzC;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;CAC1B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,IAAI,sBAAsB;CACxB,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,IAAI,gBAAgB;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,mCAAmC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,sCAAsC,IAAI,IAAI;CAChD;CACA;CACA;AACF,CAAC;AACD,IAAI,uCAAuC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AAClF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,IAAI;CAC/C,OAAO,QAAQ;AACjB;AACA,SAAS,eAAe,WAAW;CACjC,IAAI,QAAQ,CAAC;CACb,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAI,UAAU;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,UAAU,OAA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"}
1
+ {"version":3,"file":"candidate.native.js","names":[],"sources":["cjs/tooling/candidate.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar candidate_exports = {};\n__export(candidate_exports, {\n classifyCandidate: () => classifyCandidate,\n decimalHalfTokenAlias: () => decimalHalfTokenAlias,\n decodeArbitrary: () => decodeArbitrary,\n encodeArbitrary: () => encodeArbitrary,\n formatCandidate: () => formatCandidate,\n hasTokenName: () => hasTokenName,\n parseCandidate: () => parseCandidate,\n resolveTokenName: () => resolveTokenName,\n splitCandidate: () => splitCandidate,\n tailwindLeadingRatios: () => tailwindLeadingRatios,\n tailwindTrackingEms: () => tailwindTrackingEms\n});\nmodule.exports = __toCommonJS(candidate_exports);\nvar import_namedCssColors = require(\"../runtime/namedCssColors\");\nvar import_config = require(\"./config\");\nvar import_registry = require(\"./registry\");\nvar import_clauseIdentity = require(\"../runtime/clauseIdentity\");\nvar import_modifierVocabulary = require(\"../runtime/modifierVocabulary\");\nvar import_colorOpacity = require(\"../runtime/colorOpacity\");\nvar import_safeAreaVariables = require(\"../runtime/safeAreaVariables\");\nvar sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nvar fontGenerics = /* @__PURE__ */ new Set([\n \"sans\",\n \"serif\",\n \"mono\"\n]);\nvar numericPattern = /^\\d+(?:\\.\\d+)?$/;\nvar tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nvar tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nvar extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nvar negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nvar positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nvar marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nvar borderWidthKeywords = /* @__PURE__ */ new Set([\n \"thin\",\n \"medium\",\n \"thick\"\n]);\nvar ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nvar cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nvar cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n var parts = [];\n var current = \"\";\n var bracketDepth = 0;\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = candidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return {\n modifiers: parts,\n base: current\n };\n}\nvar modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nvar modifierKindGroup = 5;\nvar modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n var vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = (0, import_modifierVocabulary.compileModifierVocabulary)(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n var vocabulary = getModifierVocabulary(config);\n var exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if ((0, import_clauseIdentity.parseGroupModifier)(modifier)) return modifierKindGroup;\n var sizeEnd = (0, import_clauseIdentity.containerModifierSizeEnd)(modifier);\n if (sizeEnd === -1) return 0;\n var size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === import_modifierVocabulary.modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n var normalized = [];\n var seen = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = modifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var modifier = _step.value;\n var canonical = (0, import_clauseIdentity.canonicalClauseModifier)(modifier);\n var kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n var _config_tokenNames, _config_tokenNames1;\n var fallback = import_config.propTokenGroupFallbacks[category];\n return ((_config_tokenNames = config.tokenNames) === null || _config_tokenNames === void 0 ? void 0 : _config_tokenNames[category]) || (fallback ? (_config_tokenNames1 = config.tokenNames) === null || _config_tokenNames1 === void 0 ? void 0 : _config_tokenNames1[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n var match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n var names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n var alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n var byProp = new Map(import_registry.grammarEntries.map(function(entry2) {\n return [\n entry2.prop,\n entry2\n ];\n }));\n var out = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n var entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n var _config_shorthands;\n var registered = import_registry.prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\n \"fontSize\",\n \"textAlign\",\n \"color\"\n ]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n var sides = prefix === \"border-x\" ? [\n \"Left\",\n \"Right\"\n ] : [\n \"Top\",\n \"Bottom\"\n ];\n return entriesForProps(sides.flatMap(function(side) {\n return [\n `border${side}Width`,\n `border${side}Color`\n ];\n }));\n }\n if (prefix === \"size\") {\n return entriesForProps(import_registry.sizeUtilityProps).map(function(entry) {\n return {\n ...entry,\n tokenCategory: \"size\"\n };\n });\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(import_registry.insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\n \"x\",\n \"y\"\n ]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n var props = import_registry.radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n var expanded = (_config_shorthands = config.shorthands) === null || _config_shorthands === void 0 ? void 0 : _config_shorthands[prefix];\n if (!expanded) return [];\n return import_registry.grammarEntries.filter(function(entry) {\n return entry.prop === expanded;\n });\n}\nfunction findPrefix(base, config) {\n var prefixes = new Set(Object.keys(import_registry.prefixToEntries));\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = extraPrefixes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prefix = _step.value;\n prefixes.add(prefix);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n for (var shorthand in config.shorthands) prefixes.add(shorthand);\n var found = null;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = prefixes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var prefix1 = _step1.value;\n if (base.startsWith(`${prefix1}-`) && (!found || prefix1.length > found.length)) {\n found = prefix1;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n var inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n var opening = /* @__PURE__ */ new Set([\n \"(\",\n \"[\",\n \"{\"\n ]);\n var matching = {\n \")\": \"(\",\n \"]\": \"[\",\n \"}\": \"{\"\n };\n var stack = [];\n var quote = \"\";\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n var expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n var fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || import_namedCssColors.namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n var suffix = (0, import_colorOpacity.splitColorOpacitySuffix)(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if ((0, import_safeAreaVariables.getSafeAreaEdge)(rawValue)) {\n var entry = entries.find(function(param) {\n var { tokenCategory } = param;\n return tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\";\n });\n if (entry) {\n return {\n entry,\n valueKind: \"convenience\",\n convenience: \"safe-area\"\n };\n }\n }\n var arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n var width = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var kind1 = arbitraryTextKind(decodeArbitrary(arbitrary));\n var fontSize = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n var color1 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (kind1 === \"fontSize\" && fontSize) {\n return {\n entry: fontSize,\n valueKind: \"arbitrary\"\n };\n }\n if (kind1 === \"color\" && color1) {\n return {\n entry: color1,\n valueKind: \"arbitrary\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n }),\n valueKind: \"arbitrary\"\n };\n }\n return {\n entry: entries[0],\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var fontSize1 = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n if (fontSize1 && hasTokenName(config, \"fontSize\", rawValue)) {\n return {\n entry: fontSize1,\n valueKind: \"token\"\n };\n }\n if (import_registry.textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"textAlign\";\n }),\n valueKind: \"enum\"\n };\n }\n var color2 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (color2 && rawValue === \"transparent\") {\n return {\n entry: color2,\n valueKind: \"enum\"\n };\n }\n var colorName = tokenLookupName(\"color\", rawValue);\n if (color2 && hasTokenName(config, \"color\", colorName)) {\n return {\n entry: color2,\n valueKind: \"token\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n var fontFamily = entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n });\n var fontWeight = entries.find(function(entry3) {\n return entry3.prop === \"fontWeight\";\n });\n if (!fontFamily) return null;\n var matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n var matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return {\n entry: fontFamily,\n valueKind: \"token\"\n };\n }\n if (matchesWeight) {\n return {\n entry: fontWeight,\n valueKind: \"token\"\n };\n }\n return fontGenerics.has(rawValue) ? {\n entry: fontFamily,\n valueKind: \"convenience\",\n convenience: \"font-generic\"\n } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n var width1 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color3 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var token = negative ? `-${rawValue}` : rawValue;\n var widthCategory = (width1 === null || width1 === void 0 ? void 0 : width1.tokenCategory) || \"space\";\n var matchesWidth = width1 && hasTokenName(config, widthCategory, token);\n var colorName1 = tokenLookupName(\"color\", rawValue);\n var matchesColor = color3 && hasTokenName(config, \"color\", colorName1);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return {\n entry: width1,\n valueKind: \"token\"\n };\n }\n if (matchesColor) {\n return {\n entry: color3,\n valueKind: \"token\"\n };\n }\n if (color3 && rawValue === \"transparent\") {\n return {\n entry: color3,\n valueKind: \"enum\"\n };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n var flex = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex) {\n return {\n entry: flex,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n var letterSpacing = entries.find(function(entry3) {\n return entry3.prop === \"letterSpacing\";\n });\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n var lineHeight = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n var angle = entries.find(function(entry3) {\n var _entry_conveniences2;\n return (_entry_conveniences2 = entry3.conveniences) === null || _entry_conveniences2 === void 0 ? void 0 : _entry_conveniences2.includes(\"angle\");\n });\n if (angle) {\n return {\n entry: angle,\n valueKind: \"convenience\",\n convenience: \"angle\"\n };\n }\n if (prefix === \"flex\") {\n var flex1 = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex1) return {\n entry: flex1,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n if (prefix === \"grow\") {\n var grow = entries.find(function(entry3) {\n return entry3.prop === \"flexGrow\";\n });\n if (grow) return {\n entry: grow,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"shrink\") {\n var shrink = entries.find(function(entry3) {\n return entry3.prop === \"flexShrink\";\n });\n if (shrink) return {\n entry: shrink,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"line-clamp\") {\n var clamp = entries.find(function(entry3) {\n return entry3.prop === \"numberOfLines\";\n });\n if (clamp) return {\n entry: clamp,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"leading\") {\n var lineHeight1 = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight1 && (!lineHeight1.tokenCategory || !hasTokenName(config, lineHeight1.tokenCategory, rawValue))) {\n return {\n entry: lineHeight1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n var entry1 = entries[0];\n if (entry1) return {\n entry: entry1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var entry2 = _step.value;\n var _entry_conveniences;\n if (entry2.tokenCategory) {\n var _entry_conveniences1;\n if (entry2.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return {\n entry: entry2,\n valueKind: \"enum\"\n };\n }\n if (entry2.tokenCategory === \"radius\" && rawValue === \"none\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"zero\"\n };\n }\n var name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n var tokenName = tokenLookupName(entry2.tokenCategory, name);\n if (hasTokenName(config, entry2.tokenCategory, tokenName)) {\n return {\n entry: entry2,\n valueKind: \"token\"\n };\n }\n if (((_entry_conveniences1 = entry2.conveniences) === null || _entry_conveniences1 === void 0 ? void 0 : _entry_conveniences1.includes(\"sizing-keyword\")) && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (positionSpaceProps.has(entry2.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (marginSpaceProps.has(entry2.prop) && rawValue === \"auto\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (entry2.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (numericPattern.test(rawValue) && (entry2.tokenCategory === \"space\" || entry2.tokenCategory === \"size\" || import_config.propTokenGroupFallbacks[entry2.tokenCategory] === \"size\")) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"spacing-scale\"\n };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"percentage\"\n };\n }\n continue;\n }\n if (entry2.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (((_entry_conveniences = entry2.conveniences) === null || _entry_conveniences === void 0 ? void 0 : _entry_conveniences.includes(\"integer\")) && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n var split = splitCandidate(candidate);\n if (!split) return null;\n var modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n var negative = split.base[0] === \"-\";\n var core = negative ? split.base.slice(1) : split.base;\n var prefix = findPrefix(core, config);\n var dynamic;\n if (prefix) {\n var rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n var entries = resolveEntries(prefix, config);\n var selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = {\n prefix,\n rawValue,\n selected\n };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n var direct = import_registry.wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n var convenience = import_registry.wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n var parsed = parseCandidate(candidate, config);\n return parsed ? {\n kind: \"tamagui\",\n parsed\n } : {\n kind: \"passthrough\",\n reason: \"not in the configured Tamagui grammar\"\n };\n}\nfunction tokenValidationConfig(entry, value, config) {\n var tokenNames = {\n ...config === null || config === void 0 ? void 0 : config.tokenNames\n };\n var category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [\n tokenLookupName(category, value)\n ];\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = (import_registry.prefixToEntries[entry.prefix] || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n ...config,\n tokenNames\n };\n}\nfunction formatCandidate(param, config) {\n var { prop, value, valueKind, modifiers = [] } = param;\n var _parsed_entry;\n var entry = import_registry.propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n var normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n var _standaloneValueProps_prop;\n var whole = (_standaloneValueProps_prop = import_registry.standaloneValueProps[prop]) === null || _standaloneValueProps_prop === void 0 ? void 0 : _standaloneValueProps_prop[value];\n if (whole) {\n var candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole}` : whole;\n if (config) {\n var parsed = parseCandidate(candidate, config);\n if (!(parsed === null || parsed === void 0 ? void 0 : parsed.properties) || parsed.properties[prop] !== value) return null;\n }\n return candidate;\n }\n if (prop === \"fontWeight\") {\n var _wholeClassUtilities_core;\n var name = import_registry.fontWeightNames[value];\n if (!name) return null;\n var core = `font-${name}`;\n if (String((_wholeClassUtilities_core = import_registry.wholeClassUtilities[core]) === null || _wholeClassUtilities_core === void 0 ? void 0 : _wholeClassUtilities_core.fontWeight) !== value) return null;\n var candidate1 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n if (config) {\n var parsed1 = parseCandidate(candidate1, config);\n if (!(parsed1 === null || parsed1 === void 0 ? void 0 : parsed1.properties) || String(parsed1.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate1;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n var sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n var lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName)) return null;\n var colliding = import_registry.prefixToEntries[entry.prefix].filter(function(other2) {\n return other2.prop !== prop && other2.tokenCategory;\n });\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = colliding[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n var formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n var core1 = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n var candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core1}` : core1;\n var whole1 = import_registry.wholeClassUtilities[core1];\n if (whole1) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n var _parsed_entry1;\n var parsed2 = parseCandidate(candidate2, config);\n if ((parsed2 === null || parsed2 === void 0 ? void 0 : parsed2.kind) === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate2 : null;\n }\n return (parsed2 === null || parsed2 === void 0 ? void 0 : (_parsed_entry1 = parsed2.entry) === null || _parsed_entry1 === void 0 ? void 0 : _parsed_entry1.prop) === prop && parsed2.valueKind === valueKind ? candidate2 : null;\n } else if (prop in whole1 && String(whole1[prop]) === value) {\n return candidate2;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n var _parsed_entry2;\n var untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate2, config || {}) : null;\n if (untokened && untokened.convenience !== \"spacing-scale\") {\n return null;\n }\n var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));\n var parsedValue = (parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.rawValue) ? `${parsed3.negative ? \"-\" : \"\"}${parsed3.rawValue}` : null;\n if ((parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.kind) !== \"dynamic\" || ((_parsed_entry2 = parsed3.entry) === null || _parsed_entry2 === void 0 ? void 0 : _parsed_entry2.prop) !== prop || parsed3.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate2;\n }\n var parsed4 = parseCandidate(candidate2, config || {});\n if (!parsed4 || ((_parsed_entry = parsed4.entry) === null || _parsed_entry === void 0 ? void 0 : _parsed_entry.prop) !== prop || parsed4.valueKind !== valueKind) return null;\n return candidate2;\n}\nfunction encodeArbitrary(value) {\n var encoded = \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n var decoded = \"\";\n for (var index = 0; index < value.length; index++) {\n var char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;AACA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,YAAY,QAAQ,QAAQ;CAC9B,KAAK,IAAI,QAAQ,KACf,UAAU,QAAQ,MAAM;EAAE,KAAK,IAAI;EAAO,YAAY;CAAK,CAAC;AAChE;AACA,IAAI,eAAe,IAAI,MAAM,QAAQ,SAAS;CAC5C,IAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY;EAClE,KAAK,IAAI,OAAO,kBAAkB,IAAI,GACpC,IAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,QACzC,UAAU,IAAI,KAAK;GAAE,WAAW,KAAK;GAAM,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;EAAW,CAAC;CACvH;CACA,OAAO;AACT;AACA,IAAI,gBAAgB,QAAQ,YAAY,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG;AACzF,IAAI,oBAAoB,CAAC;AACzB,SAAS,mBAAmB;CAC1B,yBAAyB;CACzB,6BAA6B;CAC7B,uBAAuB;CACvB,uBAAuB;CACvB,uBAAuB;CACvB,oBAAoB;CACpB,sBAAsB;CACtB,wBAAwB;CACxB,sBAAsB;CACtB,6BAA6B;CAC7B,2BAA2B;AAC7B,CAAC;AACD,OAAO,UAAU,aAAa,iBAAiB;AAC/C,IAAI,wBAAwB,QAAQ,qCAA2B;AAC/D,IAAI,gBAAgB,QAAQ,oBAAU;AACtC,IAAI,kBAAkB,QAAQ,sBAAY;AAC1C,IAAI,wBAAwB,QAAQ,qCAA2B;AAC/D,IAAI,4BAA4B,QAAQ,yCAA+B;AACvE,IAAI,sBAAsB,QAAQ,mCAAyB;AAC3D,IAAI,2BAA2B,QAAQ,wCAA8B;AACrE,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,+BAA+B,IAAI,IAAI;CACzC;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;CAC1B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,IAAI,sBAAsB;CACxB,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,IAAI,gBAAgB;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,mCAAmC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,sCAAsC,IAAI,IAAI;CAChD;CACA;CACA;AACF,CAAC;AACD,IAAI,uCAAuC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AAClF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,IAAI;CAC/C,OAAO,QAAQ;AACjB;AACA,SAAS,eAAe,WAAW;CACjC,IAAI,QAAQ,CAAC;CACb,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAI,UAAU;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,UAAU,OAA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"}
@@ -847,7 +847,8 @@ function formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {
847
847
  }
848
848
  }
849
849
  if (valueKind === "token") {
850
- if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate, config || {})) {
850
+ const untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate, config || {}) : null;
851
+ if (untokened && untokened.convenience !== "spacing-scale") {
851
852
  return null;
852
853
  }
853
854
  const parsed2 = parseCandidate(candidate, tokenValidationConfig(entry, value, config));
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.js","names":[],"sources":["esm/tooling/candidate.js"],"sourcesContent":["import { namedCssColors } from \"../runtime/namedCssColors\";\nimport { propTokenGroupFallbacks } from \"./config\";\nimport {\n grammarEntries,\n fontWeightNames,\n insetAxisProps,\n prefixToEntries,\n propToGrammarEntry,\n radiusCornerProps,\n sizeUtilityProps,\n standaloneValueProps,\n textAlignKeywords,\n wholeClassConveniences,\n wholeClassUtilities\n} from \"./registry\";\nimport {\n canonicalClauseModifier,\n containerModifierSizeEnd,\n parseGroupModifier\n} from \"../runtime/clauseIdentity\";\nimport {\n compileModifierVocabulary,\n modifierKindMedia\n} from \"../runtime/modifierVocabulary\";\nimport { splitColorOpacitySuffix } from \"../runtime/colorOpacity\";\nimport { getSafeAreaEdge } from \"../runtime/safeAreaVariables\";\nconst sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nconst fontGenerics = /* @__PURE__ */ new Set([\"sans\", \"serif\", \"mono\"]);\nconst numericPattern = /^\\d+(?:\\.\\d+)?$/;\nconst tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nconst tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nconst extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nconst negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nconst positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nconst marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nconst borderWidthKeywords = /* @__PURE__ */ new Set([\"thin\", \"medium\", \"thick\"]);\nconst ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nconst cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nconst cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n const parts = [];\n let current = \"\";\n let bracketDepth = 0;\n let escaped = false;\n for (const char of candidate) {\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return { modifiers: parts, base: current };\n}\nconst modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nconst modifierKindGroup = 5;\nconst modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n let vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n const vocabulary = getModifierVocabulary(config);\n const exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if (parseGroupModifier(modifier)) return modifierKindGroup;\n const sizeEnd = containerModifierSizeEnd(modifier);\n if (sizeEnd === -1) return 0;\n const size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n const normalized = [];\n const seen = /* @__PURE__ */ new Set();\n for (const modifier of modifiers) {\n const canonical = canonicalClauseModifier(modifier);\n const kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n const fallback = propTokenGroupFallbacks[category];\n return config.tokenNames?.[category] || (fallback ? config.tokenNames?.[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n const match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n const names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n const alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n const byProp = new Map(grammarEntries.map((entry) => [entry.prop, entry]));\n const out = [];\n for (const prop of props) {\n const entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n const registered = prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\"fontSize\", \"textAlign\", \"color\"]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n const sides = prefix === \"border-x\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"];\n return entriesForProps(\n sides.flatMap((side) => [`border${side}Width`, `border${side}Color`])\n );\n }\n if (prefix === \"size\") {\n return entriesForProps(sizeUtilityProps).map((entry) => ({\n ...entry,\n tokenCategory: \"size\"\n }));\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\"x\", \"y\"]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n const props = radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n const expanded = config.shorthands?.[prefix];\n if (!expanded) return [];\n return grammarEntries.filter((entry) => entry.prop === expanded);\n}\nfunction findPrefix(base, config) {\n const prefixes = new Set(Object.keys(prefixToEntries));\n for (const prefix of extraPrefixes) prefixes.add(prefix);\n for (const shorthand in config.shorthands) prefixes.add(shorthand);\n let found = null;\n for (const prefix of prefixes) {\n if (base.startsWith(`${prefix}-`) && (!found || prefix.length > found.length)) {\n found = prefix;\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n const inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n const opening = /* @__PURE__ */ new Set([\"(\", \"[\", \"{\"]);\n const matching = { \")\": \"(\", \"]\": \"[\", \"}\": \"{\" };\n const stack = [];\n let quote = \"\";\n let escaped = false;\n for (const char of value) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n const expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n const fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n const suffix = splitColorOpacitySuffix(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if (getSafeAreaEdge(rawValue)) {\n const entry = entries.find(\n ({ tokenCategory }) => tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\"\n );\n if (entry) {\n return { entry, valueKind: \"convenience\", convenience: \"safe-area\" };\n }\n }\n const arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith(\"Width\"));\n const color = entries.find((entry) => entry.prop.endsWith(\"Color\"));\n const kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n const kind = arbitraryTextKind(decodeArbitrary(arbitrary));\n const fontSize = entries.find((entry) => entry.prop === \"fontSize\");\n const color = entries.find((entry) => entry.prop === \"color\");\n if (kind === \"fontSize\" && fontSize) {\n return { entry: fontSize, valueKind: \"arbitrary\" };\n }\n if (kind === \"color\" && color) {\n return { entry: color, valueKind: \"arbitrary\" };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find((entry) => entry.prop === \"fontFamily\"),\n valueKind: \"arbitrary\"\n };\n }\n return { entry: entries[0], valueKind: \"arbitrary\" };\n }\n if (prefix === \"text\") {\n const fontSize = entries.find((entry) => entry.prop === \"fontSize\");\n if (fontSize && hasTokenName(config, \"fontSize\", rawValue)) {\n return { entry: fontSize, valueKind: \"token\" };\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find((entry) => entry.prop === \"textAlign\"),\n valueKind: \"enum\"\n };\n }\n const color = entries.find((entry) => entry.prop === \"color\");\n if (color && rawValue === \"transparent\") {\n return { entry: color, valueKind: \"enum\" };\n }\n const colorName = tokenLookupName(\"color\", rawValue);\n if (color && hasTokenName(config, \"color\", colorName)) {\n return { entry: color, valueKind: \"token\" };\n }\n return null;\n }\n if (prefix === \"font\") {\n const fontFamily = entries.find((entry) => entry.prop === \"fontFamily\");\n const fontWeight = entries.find((entry) => entry.prop === \"fontWeight\");\n if (!fontFamily) return null;\n const matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n const matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return { entry: fontFamily, valueKind: \"token\" };\n }\n if (matchesWeight) {\n return { entry: fontWeight, valueKind: \"token\" };\n }\n return fontGenerics.has(rawValue) ? { entry: fontFamily, valueKind: \"convenience\", convenience: \"font-generic\" } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith(\"Width\"));\n const color = entries.find((entry) => entry.prop.endsWith(\"Color\"));\n const token = negative ? `-${rawValue}` : rawValue;\n const widthCategory = width?.tokenCategory || \"space\";\n const matchesWidth = width && hasTokenName(config, widthCategory, token);\n const colorName = tokenLookupName(\"color\", rawValue);\n const matchesColor = color && hasTokenName(config, \"color\", colorName);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return { entry: width, valueKind: \"token\" };\n }\n if (matchesColor) {\n return { entry: color, valueKind: \"token\" };\n }\n if (color && rawValue === \"transparent\") {\n return { entry: color, valueKind: \"enum\" };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n const flex = entries.find((entry) => entry.prop === \"flex\");\n if (flex) {\n return { entry: flex, valueKind: \"convenience\", convenience: \"flex-bundle\" };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n const letterSpacing = entries.find((entry) => entry.prop === \"letterSpacing\");\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n const lineHeight = entries.find((entry) => entry.prop === \"lineHeight\");\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n const angle = entries.find((entry) => entry.conveniences?.includes(\"angle\"));\n if (angle) {\n return { entry: angle, valueKind: \"convenience\", convenience: \"angle\" };\n }\n if (prefix === \"flex\") {\n const flex = entries.find((entry) => entry.prop === \"flex\");\n if (flex)\n return { entry: flex, valueKind: \"convenience\", convenience: \"flex-bundle\" };\n }\n if (prefix === \"grow\") {\n const grow = entries.find((entry) => entry.prop === \"flexGrow\");\n if (grow) return { entry: grow, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"shrink\") {\n const shrink = entries.find((entry) => entry.prop === \"flexShrink\");\n if (shrink)\n return { entry: shrink, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"line-clamp\") {\n const clamp = entries.find((entry) => entry.prop === \"numberOfLines\");\n if (clamp) return { entry: clamp, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"leading\") {\n const lineHeight = entries.find((entry) => entry.prop === \"lineHeight\");\n if (lineHeight && (!lineHeight.tokenCategory || !hasTokenName(config, lineHeight.tokenCategory, rawValue))) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n const entry = entries[0];\n if (entry) return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n }\n for (const entry of entries) {\n if (entry.tokenCategory) {\n if (entry.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return { entry, valueKind: \"enum\" };\n }\n if (entry.tokenCategory === \"radius\" && rawValue === \"none\") {\n return { entry, valueKind: \"convenience\", convenience: \"zero\" };\n }\n const name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n const tokenName = tokenLookupName(entry.tokenCategory, name);\n if (hasTokenName(config, entry.tokenCategory, tokenName)) {\n return { entry, valueKind: \"token\" };\n }\n if (entry.conveniences?.includes(\"sizing-keyword\") && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (positionSpaceProps.has(entry.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (marginSpaceProps.has(entry.prop) && rawValue === \"auto\") {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (entry.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (numericPattern.test(rawValue) && (entry.tokenCategory === \"space\" || entry.tokenCategory === \"size\" || propTokenGroupFallbacks[entry.tokenCategory] === \"size\")) {\n return { entry, valueKind: \"convenience\", convenience: \"spacing-scale\" };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"percentage\" };\n }\n continue;\n }\n if (entry.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (entry.conveniences?.includes(\"integer\") && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n const split = splitCandidate(candidate);\n if (!split) return null;\n const modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n const negative = split.base[0] === \"-\";\n const core = negative ? split.base.slice(1) : split.base;\n const prefix = findPrefix(core, config);\n let dynamic;\n if (prefix) {\n const rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n const entries = resolveEntries(prefix, config);\n const selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = { prefix, rawValue, selected };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n const direct = wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n const convenience = wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n const parsed = parseCandidate(candidate, config);\n return parsed ? { kind: \"tamagui\", parsed } : { kind: \"passthrough\", reason: \"not in the configured Tamagui grammar\" };\n}\nfunction tokenValidationConfig(entry, value, config) {\n const tokenNames = {\n ...config?.tokenNames\n };\n const category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [tokenLookupName(category, value)];\n }\n for (const other of prefixToEntries[entry.prefix] || []) {\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n return { ...config, tokenNames };\n}\nfunction formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {\n const entry = propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n const normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n const whole2 = standaloneValueProps[prop]?.[value];\n if (whole2) {\n const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole2}` : whole2;\n if (config) {\n const parsed2 = parseCandidate(candidate2, config);\n if (!parsed2?.properties || parsed2.properties[prop] !== value) return null;\n }\n return candidate2;\n }\n if (prop === \"fontWeight\") {\n const name = fontWeightNames[value];\n if (!name) return null;\n const core2 = `font-${name}`;\n if (String(wholeClassUtilities[core2]?.fontWeight) !== value) return null;\n const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core2}` : core2;\n if (config) {\n const parsed2 = parseCandidate(candidate2, config);\n if (!parsed2?.properties || String(parsed2.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate2;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n const sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n const lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName))\n return null;\n const colliding = prefixToEntries[entry.prefix].filter(\n (other) => other.prop !== prop && other.tokenCategory\n );\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n for (const other of colliding) {\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n }\n }\n const formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n const core = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n const candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n const whole = wholeClassUtilities[core];\n if (whole) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n const parsed2 = parseCandidate(candidate, config);\n if (parsed2?.kind === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate : null;\n }\n return parsed2?.entry?.prop === prop && parsed2.valueKind === valueKind ? candidate : null;\n } else if (prop in whole && String(whole[prop]) === value) {\n return candidate;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate, config || {})) {\n return null;\n }\n const parsed2 = parseCandidate(candidate, tokenValidationConfig(entry, value, config));\n const parsedValue = parsed2?.rawValue ? `${parsed2.negative ? \"-\" : \"\"}${parsed2.rawValue}` : null;\n if (parsed2?.kind !== \"dynamic\" || parsed2.entry?.prop !== prop || parsed2.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate;\n }\n const parsed = parseCandidate(candidate, config || {});\n if (!parsed || parsed.entry?.prop !== prop || parsed.valueKind !== valueKind)\n return null;\n return candidate;\n}\nfunction encodeArbitrary(value) {\n let encoded = \"\";\n for (const char of value) {\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n let decoded = \"\";\n for (let index = 0; index < value.length; index++) {\n const char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\nexport {\n classifyCandidate,\n decimalHalfTokenAlias,\n decodeArbitrary,\n encodeArbitrary,\n formatCandidate,\n hasTokenName,\n parseCandidate,\n resolveTokenName,\n splitCandidate,\n tailwindLeadingRatios,\n tailwindTrackingEms\n};\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;;;;;;;AA0BA,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,+BAA+B,IAAI,IAAI;CAAC;CAAQ;CAAS;AAAM,CAAC;AACtE,MAAM,iBAAiB;AACvB,MAAM,wBAAwB;CAC5B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,MAAM,sBAAsB;CAC1B,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,mCAAmC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,sCAAsC,IAAI,IAAI;CAAC;CAAQ;CAAU;AAAO,CAAC;AAC/E,MAAM,uCAAuC,IAAI,IAAI;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,iBAAiB;AACvB,MAAM,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AACpF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,IAAI;CAC/C,OAAO,QAAQ;AACjB;AACA,SAAS,eAAe,WAAW;CACjC,MAAM,QAAQ,CAAC;CACf,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,WAAW;EAC5B,IAAI,SAAS;GACX,WAAW;GACX,UAAU;GACV;EACF;EACA,IAAI,SAAS,MAAM;GACjB,WAAW;GACX,UAAU;GACV;EACF;EACA,IAAI,SAAS,KAAK;EAClB,IAAI,SAAS,KAAK;EAClB,IAAI,SAAS,OAAO,iBAAiB,GAAG;GACtC,MAAM,KAAK,OAAO;GAClB,UAAU;EACZ,OAAO;GACL,WAAW;EACb;CACF;CACA,IAAI,CAAC,WAAW,iBAAiB,GAAG,OAAO;CAC3C,OAAO;EAAE,WAAW;EAAO,MAAM;CAAQ;AAC3C;AACA,MAAM,0CAA0C,IAAI,QAAQ;AAC5D,MAAM,oBAAoB;AAC1B,MAAM,wBAAwB;AAC9B,SAAS,sBAAsB,QAAQ;CACrC,IAAI,aAAa,wBAAwB,IAAI,MAAM;CACnD,IAAI,CAAC,YAAY;EACf,aAAa,0BAA0B,MAAM;EAC7C,wBAAwB,IAAI,QAAQ,UAAU;CAChD;CACA,OAAO;AACT;AACA,SAAS,iBAAiB,UAAU,QAAQ;CAC1C,MAAM,aAAa,sBAAsB,MAAM;CAC/C,MAAM,QAAQ,WAAW;CACzB,IAAI,UAAU,KAAK,GAAG,OAAO,QAAQ;CACrC,IAAI,mBAAmB,QAAQ,GAAG,OAAO;CACzC,MAAM,UAAU,yBAAyB,QAAQ;CACjD,IAAI,YAAY,CAAC,GAAG,OAAO;CAC3B,MAAM,OAAO,SAAS,MAAM,GAAG,OAAO;CACtC,QAAQ,WAAW,QAAQ,OAAO,sBAAsB,OAAO,uBAAuB,KAAK,KAAK,QAAQ,OAAO,oBAAoB,IAAI,KAAK,wBAAwB;AACtK;AACA,SAAS,mBAAmB,WAAW,QAAQ;CAC7C,MAAM,aAAa,CAAC;CACpB,MAAM,uBAAuB,IAAI,IAAI;CACrC,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,YAAY,wBAAwB,QAAQ;EAClD,MAAM,OAAO,iBAAiB,WAAW,MAAM;EAC/C,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,OAAO;EACpC,KAAK,IAAI,IAAI;EACb,WAAW,KAAK,SAAS;CAC3B;CACA,OAAO;AACT;AACA,SAAS,YAAY,QAAQ,UAAU;CACrC,MAAM,WAAW,wBAAwB;CACzC,OAAO,OAAO,aAAa,cAAc,WAAW,OAAO,aAAa,YAAY,KAAK;AAC3F;AACA,SAAS,eAAe,QAAQ,UAAU;CACxC,OAAO,YAAY,QAAQ,QAAQ,MAAM,KAAK;AAChD;AACA,SAAS,aAAa,QAAQ,UAAU,MAAM;CAC5C,OAAO,iBAAiB,QAAQ,UAAU,IAAI,MAAM;AACtD;AACA,SAAS,sBAAsB,MAAM;CACnC,MAAM,QAAQ,eAAe,KAAK,IAAI;CACtC,OAAO,QAAQ,GAAG,MAAM,GAAG,MAAM;AACnC;AACA,SAAS,iBAAiB,QAAQ,UAAU,MAAM;CAChD,MAAM,QAAQ,YAAY,QAAQ,QAAQ;CAC1C,IAAI,QAAQ,OAAO,IAAI,GAAG,OAAO;CACjC,MAAM,QAAQ,sBAAsB,IAAI;CACxC,OAAO,UAAU,QAAQ,QAAQ,OAAO,KAAK,IAAI,QAAQ;AAC3D;AACA,SAAS,gBAAgB,OAAO;CAC9B,MAAM,SAAS,IAAI,IAAI,eAAe,KAAK,UAAU,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC;CACzE,MAAM,MAAM,CAAC;CACb,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,OAAO,IAAI,IAAI;EAC7B,IAAI,OAAO,IAAI,KAAK,KAAK;CAC3B;CACA,OAAO;AACT;AACA,SAAS,eAAe,QAAQ,QAAQ;CACtC,MAAM,aAAa,gBAAgB;CACnC,IAAI,WAAW,QAAQ;EACrB,OAAO,gBAAgB;GAAC;GAAY;GAAa;EAAO,CAAC;CAC3D;CACA,IAAI,YAAY,OAAO;CACvB,IAAI,WAAW,cAAc,WAAW,YAAY;EAClD,MAAM,QAAQ,WAAW,aAAa,CAAC,QAAQ,OAAO,IAAI,CAAC,OAAO,QAAQ;EAC1E,OAAO,gBACL,MAAM,SAAS,SAAS,CAAC,SAAS,KAAK,QAAQ,SAAS,KAAK,MAAM,CAAC,CACtE;CACF;CACA,IAAI,WAAW,QAAQ;EACrB,OAAO,gBAAgB,gBAAgB,CAAC,CAAC,KAAK,WAAW;GACvD,GAAG;GACH,eAAe;EACjB,EAAE;CACJ;CACA,IAAI,WAAW,aAAa,WAAW,WAAW;EAChD,OAAO,gBAAgB,eAAe,OAAO,MAAM,SAAS,MAAM,EAAE;CACtE;CACA,IAAI,WAAW,aAAa;EAC1B,OAAO,gBAAgB,CAAC,KAAK,GAAG,CAAC;CACnC;CACA,IAAI,OAAO,WAAW,UAAU,GAAG;EACjC,MAAM,QAAQ,kBAAkB,OAAO,MAAM,WAAW,MAAM;EAC9D,OAAO,QAAQ,gBAAgB,KAAK,IAAI,CAAC;CAC3C;CACA,MAAM,WAAW,OAAO,aAAa;CACrC,IAAI,CAAC,UAAU,OAAO,CAAC;CACvB,OAAO,eAAe,QAAQ,UAAU,MAAM,SAAS,QAAQ;AACjE;AACA,SAAS,WAAW,MAAM,QAAQ;CAChC,MAAM,WAAW,IAAI,IAAI,OAAO,KAAK,eAAe,CAAC;CACrD,KAAK,MAAM,UAAU,eAAe,SAAS,IAAI,MAAM;CACvD,KAAK,MAAM,aAAa,OAAO,YAAY,SAAS,IAAI,SAAS;CACjE,IAAI,QAAQ;CACZ,KAAK,MAAM,UAAU,UAAU;EAC7B,IAAI,KAAK,WAAW,GAAG,OAAO,EAAE,MAAM,CAAC,SAAS,OAAO,SAAS,MAAM,SAAS;GAC7E,QAAQ;EACV;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,UAAU;CAChC,IAAI,SAAS,UAAU,KAAK,SAAS,OAAO,OAAO,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK;EAC1E,OAAO;CACT;CACA,MAAM,QAAQ,SAAS,MAAM,GAAG,CAAC,CAAC;CAClC,OAAO,yBAAyB,gBAAgB,KAAK,CAAC,IAAI,QAAQ;AACpE;AACA,SAAS,yBAAyB,OAAO;CACvC,MAAM,0BAA0B,IAAI,IAAI;EAAC;EAAK;EAAK;CAAG,CAAC;CACvD,MAAM,WAAW;EAAE,KAAK;EAAK,KAAK;EAAK,KAAK;CAAI;CAChD,MAAM,QAAQ,CAAC;CACf,IAAI,QAAQ;CACZ,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,SAAS;GACX,UAAU;GACV;EACF;EACA,IAAI,SAAS,MAAM;GACjB,UAAU;GACV;EACF;EACA,IAAI,OAAO;GACT,IAAI,SAAS,OAAO,QAAQ;GAC5B;EACF;EACA,IAAI,SAAS,QAAO,SAAS,KAAK;GAChC,QAAQ;GACR;EACF;EACA,IAAI,QAAQ,IAAI,IAAI,GAAG;GACrB,MAAM,KAAK,IAAI;GACf;EACF;EACA,MAAM,WAAW,SAAS;EAC1B,IAAI,YAAY,MAAM,IAAI,MAAM,UAAU,OAAO;CACnD;CACA,OAAO,CAAC,WAAW,CAAC,SAAS,MAAM,WAAW;AAChD;AACA,SAAS,gBAAgB,OAAO;CAC9B,MAAM,WAAW,iBAAiB,KAAK,KAAK;CAC5C,OAAO,CAAC,CAAC,YAAY,OAAO,SAAS,EAAE,MAAM;AAC/C;AACA,SAAS,kBAAkB,OAAO;CAChC,IAAI,uBAAuB,KAAK,KAAK,GAAG,OAAO;CAC/C,IAAI,iBAAiB,KAAK,KAAK,KAAK,4BAA4B,KAAK,KAAK,GAAG;EAC3E,OAAO;CACT;CACA,IAAI,qBAAqB,IAAI,KAAK,KAAK,MAAM,WAAW,MAAM,GAAG,OAAO;CACxE,IAAI,MAAM,WAAW,GAAG,KAAK,oEAAoE,KAAK,KAAK,KAAK,eAAe,IAAI,MAAM,YAAY,CAAC,GAAG;EACvJ,OAAO;CACT;CACA,IAAI,0BAA0B,KAAK,KAAK,GAAG,OAAO;CAClD,OAAO;AACT;AACA,SAAS,mBAAmB,QAAQ;CAClC,OAAO,OAAO,WAAW,QAAQ,KAAK,WAAW;AACnD;AACA,SAAS,oBAAoB,OAAO;CAClC,IAAI,uBAAuB,KAAK,KAAK,GAAG,OAAO;CAC/C,IAAI,iBAAiB,KAAK,KAAK,KAAK,oBAAoB,IAAI,KAAK,GAAG,OAAO;CAC3E,IAAI,4BAA4B,KAAK,KAAK,GAAG,OAAO;CACpD,IAAI,qBAAqB,IAAI,KAAK,KAAK,MAAM,WAAW,MAAM,GAAG,OAAO;CACxE,IAAI,MAAM,WAAW,GAAG,KAAK,oEAAoE,KAAK,KAAK,KAAK,0BAA0B,KAAK,KAAK,GAAG;EACrJ,OAAO;CACT;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,UAAU,OAAO;CACxC,IAAI,aAAa,SAAS,OAAO;CACjC,MAAM,SAAS,wBAAwB,KAAK;CAC5C,OAAO,OAAO,SAAS,SAAS,QAAQ,OAAO;AACjD;AACA,SAAS,YAAY,SAAS,QAAQ,UAAU,UAAU,QAAQ;CAChE,IAAI,gBAAgB,QAAQ,GAAG;EAC7B,MAAM,QAAQ,QAAQ,MACnB,EAAE,oBAAoB,kBAAkB,WAAW,kBAAkB,UAAU,kBAAkB,YAAY,kBAAkB,cAAc,kBAAkB,gBAAgB,kBAAkB,eACpM;EACA,IAAI,OAAO;GACT,OAAO;IAAE;IAAO,WAAW;IAAe,aAAa;GAAY;EACrE;CACF;CACA,MAAM,YAAY,eAAe,QAAQ;CACzC,IAAI,cAAc,MAAM;EACtB,IAAI,CAAC,WAAW,OAAO;EACvB,IAAI,mBAAmB,MAAM,GAAG;GAC9B,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,CAAC;GAClE,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,CAAC;GAClE,MAAM,OAAO,oBAAoB,gBAAgB,SAAS,CAAC;GAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,OAAO;GACtC,OAAO;IACL,OAAO,SAAS,UAAU,QAAQ;IAClC,WAAW;GACb;EACF;EACA,IAAI,WAAW,QAAQ;GACrB,MAAM,OAAO,kBAAkB,gBAAgB,SAAS,CAAC;GACzD,MAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU;GAClE,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,SAAS,OAAO;GAC5D,IAAI,SAAS,cAAc,UAAU;IACnC,OAAO;KAAE,OAAO;KAAU,WAAW;IAAY;GACnD;GACA,IAAI,SAAS,WAAW,OAAO;IAC7B,OAAO;KAAE,OAAO;KAAO,WAAW;IAAY;GAChD;GACA,OAAO;EACT;EACA,IAAI,WAAW,QAAQ;GACrB,OAAO;IACL,OAAO,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;IAC1D,WAAW;GACb;EACF;EACA,OAAO;GAAE,OAAO,QAAQ;GAAI,WAAW;EAAY;CACrD;CACA,IAAI,WAAW,QAAQ;EACrB,MAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU;EAClE,IAAI,YAAY,aAAa,QAAQ,YAAY,QAAQ,GAAG;GAC1D,OAAO;IAAE,OAAO;IAAU,WAAW;GAAQ;EAC/C;EACA,IAAI,kBAAkB,IAAI,QAAQ,GAAG;GACnC,OAAO;IACL,OAAO,QAAQ,MAAM,UAAU,MAAM,SAAS,WAAW;IACzD,WAAW;GACb;EACF;EACA,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,SAAS,OAAO;EAC5D,IAAI,SAAS,aAAa,eAAe;GACvC,OAAO;IAAE,OAAO;IAAO,WAAW;GAAO;EAC3C;EACA,MAAM,YAAY,gBAAgB,SAAS,QAAQ;EACnD,IAAI,SAAS,aAAa,QAAQ,SAAS,SAAS,GAAG;GACrD,OAAO;IAAE,OAAO;IAAO,WAAW;GAAQ;EAC5C;EACA,OAAO;CACT;CACA,IAAI,WAAW,QAAQ;EACrB,MAAM,aAAa,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;EACtE,MAAM,aAAa,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;EACtE,IAAI,CAAC,YAAY,OAAO;EACxB,MAAM,gBAAgB,aAAa,QAAQ,cAAc,QAAQ;EACjE,MAAM,gBAAgB,cAAc,aAAa,QAAQ,cAAc,QAAQ;EAC/E,IAAI,iBAAiB,eAAe,OAAO;EAC3C,IAAI,eAAe;GACjB,OAAO;IAAE,OAAO;IAAY,WAAW;GAAQ;EACjD;EACA,IAAI,eAAe;GACjB,OAAO;IAAE,OAAO;IAAY,WAAW;GAAQ;EACjD;EACA,OAAO,aAAa,IAAI,QAAQ,IAAI;GAAE,OAAO;GAAY,WAAW;GAAe,aAAa;EAAe,IAAI;CACrH;CACA,IAAI,mBAAmB,MAAM,GAAG;EAC9B,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,CAAC;EAClE,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,CAAC;EAClE,MAAM,QAAQ,WAAW,IAAI,aAAa;EAC1C,MAAM,gBAAgB,OAAO,iBAAiB;EAC9C,MAAM,eAAe,SAAS,aAAa,QAAQ,eAAe,KAAK;EACvE,MAAM,YAAY,gBAAgB,SAAS,QAAQ;EACnD,MAAM,eAAe,SAAS,aAAa,QAAQ,SAAS,SAAS;EACrE,IAAI,gBAAgB,cAAc,OAAO;EACzC,IAAI,cAAc;GAChB,OAAO;IAAE,OAAO;IAAO,WAAW;GAAQ;EAC5C;EACA,IAAI,cAAc;GAChB,OAAO;IAAE,OAAO;IAAO,WAAW;GAAQ;EAC5C;EACA,IAAI,SAAS,aAAa,eAAe;GACvC,OAAO;IAAE,OAAO;IAAO,WAAW;GAAO;EAC3C;EACA,OAAO;CACT;CACA,IAAI,WAAW,UAAU,gBAAgB,QAAQ,GAAG;EAClD,MAAM,OAAO,QAAQ,MAAM,UAAU,MAAM,SAAS,MAAM;EAC1D,IAAI,MAAM;GACR,OAAO;IAAE,OAAO;IAAM,WAAW;IAAe,aAAa;GAAc;EAC7E;CACF;CACA,IAAI,WAAW,cAAc,OAAO,OAAO,qBAAqB,QAAQ,GAAG;EACzE,MAAM,gBAAgB,QAAQ,MAAM,UAAU,MAAM,SAAS,eAAe;EAC5E,IAAI,eAAe;GACjB,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,WAAW,aAAa,OAAO,OAAO,uBAAuB,QAAQ,GAAG;EAC1E,MAAM,aAAa,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;EACtE,IAAI,YAAY;GACd,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,eAAe,KAAK,QAAQ,GAAG;EACjC,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,cAAc,SAAS,OAAO,CAAC;EAC3E,IAAI,OAAO;GACT,OAAO;IAAE,OAAO;IAAO,WAAW;IAAe,aAAa;GAAQ;EACxE;EACA,IAAI,WAAW,QAAQ;GACrB,MAAM,OAAO,QAAQ,MAAM,UAAU,MAAM,SAAS,MAAM;GAC1D,IAAI,MACF,OAAO;IAAE,OAAO;IAAM,WAAW;IAAe,aAAa;GAAc;EAC/E;EACA,IAAI,WAAW,QAAQ;GACrB,MAAM,OAAO,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU;GAC9D,IAAI,MAAM,OAAO;IAAE,OAAO;IAAM,WAAW;IAAe,aAAa;GAAU;EACnF;EACA,IAAI,WAAW,UAAU;GACvB,MAAM,SAAS,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;GAClE,IAAI,QACF,OAAO;IAAE,OAAO;IAAQ,WAAW;IAAe,aAAa;GAAU;EAC7E;EACA,IAAI,WAAW,cAAc;GAC3B,MAAM,QAAQ,QAAQ,MAAM,UAAU,MAAM,SAAS,eAAe;GACpE,IAAI,OAAO,OAAO;IAAE,OAAO;IAAO,WAAW;IAAe,aAAa;GAAU;EACrF;EACA,IAAI,WAAW,WAAW;GACxB,MAAM,aAAa,QAAQ,MAAM,UAAU,MAAM,SAAS,YAAY;GACtE,IAAI,eAAe,CAAC,WAAW,iBAAiB,CAAC,aAAa,QAAQ,WAAW,eAAe,QAAQ,IAAI;IAC1G,OAAO;KACL,OAAO;KACP,WAAW;KACX,aAAa;IACf;GACF;EACF;EACA,IAAI,WAAW,eAAe,WAAW,cAAc,WAAW,eAAe,WAAW,aAAa,WAAW,cAAc,WAAW,eAAe,WAAW,WAAW;GAChL,MAAM,QAAQ,QAAQ;GACtB,IAAI,OAAO,OAAO;IAAE;IAAO,WAAW;IAAe,aAAa;GAAU;EAC9E;CACF;CACA,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,eAAe;GACvB,IAAI,MAAM,kBAAkB,WAAW,aAAa,eAAe;IACjE,OAAO;KAAE;KAAO,WAAW;IAAO;GACpC;GACA,IAAI,MAAM,kBAAkB,YAAY,aAAa,QAAQ;IAC3D,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAO;GAChE;GACA,MAAM,OAAO,YAAY,aAAa,MAAM,IAAI,aAAa;GAC7D,MAAM,YAAY,gBAAgB,MAAM,eAAe,IAAI;GAC3D,IAAI,aAAa,QAAQ,MAAM,eAAe,SAAS,GAAG;IACxD,OAAO;KAAE;KAAO,WAAW;IAAQ;GACrC;GACA,IAAI,MAAM,cAAc,SAAS,gBAAgB,MAAM,mBAAmB,IAAI,QAAQ,KAAK,gBAAgB,QAAQ,IAAI;IACrH,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAiB;GAC1E;GACA,IAAI,mBAAmB,IAAI,MAAM,IAAI,MAAM,aAAa,UAAU,aAAa,UAAU,gBAAgB,QAAQ,IAAI;IACnH,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAiB;GAC1E;GACA,IAAI,iBAAiB,IAAI,MAAM,IAAI,KAAK,aAAa,QAAQ;IAC3D,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAiB;GAC1E;GACA,IAAI,MAAM,kBAAkB,YAAY,eAAe,KAAK,QAAQ,GAAG;IACrE,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAU;GACnE;GACA,IAAI,eAAe,KAAK,QAAQ,MAAM,MAAM,kBAAkB,WAAW,MAAM,kBAAkB,UAAU,wBAAwB,MAAM,mBAAmB,SAAS;IACnK,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAgB;GACzE;GACA;EACF;EACA,IAAI,WAAW,aAAa,WAAW,WAAW,WAAW,aAAa,WAAW,WAAW;GAC9F,IAAI,eAAe,KAAK,QAAQ,GAAG;IACjC,OAAO;KAAE;KAAO,WAAW;KAAe,aAAa;IAAa;GACtE;GACA;EACF;EACA,IAAI,MAAM,SAAS,YAAY,eAAe,KAAK,QAAQ,GAAG;GAC5D,OAAO;IAAE;IAAO,WAAW;IAAe,aAAa;GAAU;EACnE;EACA,IAAI,MAAM,cAAc,SAAS,SAAS,KAAK,eAAe,KAAK,QAAQ,GAAG;GAC5E,OAAO;IAAE;IAAO,WAAW;IAAe,aAAa;GAAU;EACnE;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,WAAW,QAAQ;CACzC,MAAM,QAAQ,eAAe,SAAS;CACtC,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,YAAY,mBAAmB,MAAM,WAAW,MAAM;CAC5D,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,WAAW,MAAM,KAAK,OAAO;CACnC,MAAM,OAAO,WAAW,MAAM,KAAK,MAAM,CAAC,IAAI,MAAM;CACpD,MAAM,SAAS,WAAW,MAAM,MAAM;CACtC,IAAI;CACJ,IAAI,QAAQ;EACV,MAAM,WAAW,KAAK,MAAM,OAAO,SAAS,CAAC;EAC7C,IAAI,UAAU;GACZ,MAAM,UAAU,eAAe,QAAQ,MAAM;GAC7C,MAAM,WAAW,YAAY,SAAS,QAAQ,UAAU,UAAU,MAAM;GACxE,IAAI,aAAa,CAAC,YAAY,SAAS,gBAAgB,sBAAsB,mBAAmB,IAAI,SAAS,MAAM,IAAI,MAAM,SAAS,cAAc,WAAW,SAAS,cAAc,eAAe,SAAS,MAAM,SAAS,WAAW,SAAS,gBAAgB,WAAW,SAAS,gBAAgB,gBAAgB,SAAS,gBAAgB,oBAAoB,SAAS,gBAAgB,mBAAmB,SAAS,gBAAgB,aAAa;IAClb,UAAU;KAAE;KAAQ;KAAU;IAAS;IACvC,IAAI,SAAS,cAAc,SAAS;KAClC,OAAO;MACL;MACA,MAAM,MAAM;MACZ;MACA;MACA,MAAM;MACN;MACA;MACA,WAAW,eAAe,QAAQ,MAAM;MACxC,OAAO,SAAS;MAChB,WAAW,SAAS;MACpB,aAAa,SAAS;KACxB;IACF;GACF;EACF;CACF;CACA,MAAM,SAAS,oBAAoB,MAAM;CACzC,IAAI,CAAC,YAAY,WAAW,MAAM,SAAS,YAAY,aAAa,QAAQ,aAAa,IAAI,IAAI;EAC/F,MAAM,cAAc,uBAAuB,MAAM;EACjD,OAAO;GACL;GACA,MAAM,MAAM;GACZ;GACA,MAAM;GACN,WAAW,cAAc,gBAAgB;GACzC,YAAY;GACZ;GACA,UAAU;EACZ;CACF;CACA,IAAI,SAAS;EACX,OAAO;GACL;GACA,MAAM,MAAM;GACZ;GACA;GACA,MAAM;GACN,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,WAAW,eAAe,QAAQ,QAAQ,MAAM;GAChD,OAAO,QAAQ,SAAS;GACxB,WAAW,QAAQ,SAAS;GAC5B,aAAa,QAAQ,SAAS;EAChC;CACF;CACA,OAAO;AACT;AACA,SAAS,kBAAkB,WAAW,QAAQ;CAC5C,MAAM,SAAS,eAAe,WAAW,MAAM;CAC/C,OAAO,SAAS;EAAE,MAAM;EAAW;CAAO,IAAI;EAAE,MAAM;EAAe,QAAQ;CAAwC;AACvH;AACA,SAAS,sBAAsB,OAAO,OAAO,QAAQ;CACnD,MAAM,aAAa,EACjB,GAAG,QAAQ,WACb;CACA,MAAM,WAAW,MAAM;CACvB,IAAI,WAAW,cAAc,KAAK,GAAG;EACnC,WAAW,YAAY,CAAC,gBAAgB,UAAU,KAAK,CAAC;CAC1D;CACA,KAAK,MAAM,SAAS,gBAAgB,MAAM,WAAW,CAAC,GAAG;EACvD,IAAI,MAAM,iBAAiB,WAAW,MAAM,mBAAmB,KAAK,GAAG;GACrE,WAAW,MAAM,iBAAiB,CAAC;EACrC;CACF;CACA,OAAO;EAAE,GAAG;EAAQ;CAAW;AACjC;AACA,SAAS,gBAAgB,EAAE,MAAM,OAAO,WAAW,YAAY,CAAC,KAAK,QAAQ;CAC3E,MAAM,QAAQ,mBAAmB;CACjC,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,cAAc,eAAe,UAAU,IAAI,OAAO;CACtD,MAAM,sBAAsB,mBAAmB,WAAW,UAAU,CAAC,CAAC;CACtE,IAAI,CAAC,qBAAqB,OAAO;CACjC,IAAI,cAAc,QAAQ;EACxB,MAAM,SAAS,qBAAqB,KAAK,GAAG;EAC5C,IAAI,QAAQ;GACV,MAAM,aAAa,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,WAAW;GAC/F,IAAI,QAAQ;IACV,MAAM,UAAU,eAAe,YAAY,MAAM;IACjD,IAAI,CAAC,SAAS,cAAc,QAAQ,WAAW,UAAU,OAAO,OAAO;GACzE;GACA,OAAO;EACT;EACA,IAAI,SAAS,cAAc;GACzB,MAAM,OAAO,gBAAgB;GAC7B,IAAI,CAAC,MAAM,OAAO;GAClB,MAAM,QAAQ,QAAQ;GACtB,IAAI,OAAO,oBAAoB,MAAM,EAAE,UAAU,MAAM,OAAO,OAAO;GACrE,MAAM,aAAa,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,UAAU;GAC9F,IAAI,QAAQ;IACV,MAAM,UAAU,eAAe,YAAY,MAAM;IACjD,IAAI,CAAC,SAAS,cAAc,OAAO,QAAQ,WAAW,UAAU,MAAM,OAAO;KAC3E,OAAO;IACT;GACF;GACA,OAAO;EACT;CACF;CACA,IAAI,CAAC,MAAM,QAAQ,OAAO;CAC1B,IAAI,cAAc,SAAS;EACzB,IAAI,CAAC,MAAM,eAAe,OAAO;EACjC,MAAM,oBAAoB,CAAC,CAAC,UAAU,eAAe,QAAQ,MAAM,aAAa;EAChF,MAAM,aAAa,gBAAgB,MAAM,eAAe,KAAK;EAC7D,IAAI,qBAAqB,CAAC,aAAa,QAAQ,MAAM,eAAe,UAAU,GAC5E,OAAO;EACT,MAAM,YAAY,gBAAgB,MAAM,OAAO,CAAC,QAC7C,UAAU,MAAM,SAAS,QAAQ,MAAM,aAC1C;EACA,IAAI,UAAU,QAAQ;GACpB,IAAI,CAAC,UAAU,CAAC,mBAAmB,OAAO;GAC1C,KAAK,MAAM,SAAS,WAAW;IAC7B,IAAI,CAAC,eAAe,QAAQ,MAAM,aAAa,GAAG,OAAO;IACzD,IAAI,aAAa,QAAQ,MAAM,eAAe,KAAK,GAAG,OAAO;GAC/D;EACF;CACF;CACA,MAAM,iBAAiB,cAAc,cAAc,IAAI,gBAAgB,KAAK,EAAE,KAAK;CACnF,MAAM,OAAO,eAAe,OAAO,OAAO,eAAe,OAAO,MAAM,IAAI,MAAM,OAAO,GAAG,eAAe,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,OAAO,GAAG,mBAAmB,MAAM;CACnL,MAAM,YAAY,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,SAAS;CAC5F,MAAM,QAAQ,oBAAoB;CAClC,IAAI,OAAO;EACT,IAAI,cAAc,SAAS;GACzB,IAAI,CAAC,UAAU,CAAC,eAAe,QAAQ,MAAM,aAAa,GAAG,OAAO;EACtE,OAAO,IAAI,QAAQ;GACjB,MAAM,UAAU,eAAe,WAAW,MAAM;GAChD,IAAI,SAAS,SAAS,WAAW;IAC/B,OAAO,QAAQ,cAAc,QAAQ,QAAQ,cAAc,OAAO,QAAQ,WAAW,KAAK,MAAM,QAAQ,YAAY;GACtH;GACA,OAAO,SAAS,OAAO,SAAS,QAAQ,QAAQ,cAAc,YAAY,YAAY;EACxF,OAAO,IAAI,QAAQ,SAAS,OAAO,MAAM,KAAK,MAAM,OAAO;GACzD,OAAO;EACT,OAAO;GACL,OAAO;EACT;CACF;CACA,IAAI,cAAc,SAAS;EACzB,IAAI,CAAC,eAAe,UAAU,CAAC,GAAG,MAAM,aAAa,KAAK,eAAe,WAAW,UAAU,CAAC,CAAC,GAAG;GACjG,OAAO;EACT;EACA,MAAM,UAAU,eAAe,WAAW,sBAAsB,OAAO,OAAO,MAAM,CAAC;EACrF,MAAM,cAAc,SAAS,WAAW,GAAG,QAAQ,WAAW,MAAM,KAAK,QAAQ,aAAa;EAC9F,IAAI,SAAS,SAAS,aAAa,QAAQ,OAAO,SAAS,QAAQ,QAAQ,cAAc,WAAW,gBAAgB,OAAO;GACzH,OAAO;EACT;EACA,OAAO;CACT;CACA,MAAM,SAAS,eAAe,WAAW,UAAU,CAAC,CAAC;CACrD,IAAI,CAAC,UAAU,OAAO,OAAO,SAAS,QAAQ,OAAO,cAAc,WACjE,OAAO;CACT,OAAO;AACT;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,SAAS,QAAQ,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;GACjE,WAAW,KAAK;EAClB,OAAO,IAAI,KAAK,KAAK,IAAI,GAAG;GAC1B,WAAW;EACb,OAAO;GACL,WAAW;EACb;CACF;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,UAAU;CACd,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,MAAM;EACnB,IAAI,SAAS,QAAQ,QAAQ,IAAI,MAAM,QAAQ;GAC7C,WAAW,MAAM,EAAE;EACrB,OAAO;GACL,WAAW,SAAS,MAAM,MAAM;EAClC;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"candidate.js","names":[],"sources":["esm/tooling/candidate.js"],"sourcesContent":["import { namedCssColors } from \"../runtime/namedCssColors\";\nimport { propTokenGroupFallbacks } from \"./config\";\nimport {\n grammarEntries,\n fontWeightNames,\n insetAxisProps,\n prefixToEntries,\n propToGrammarEntry,\n radiusCornerProps,\n sizeUtilityProps,\n standaloneValueProps,\n textAlignKeywords,\n wholeClassConveniences,\n wholeClassUtilities\n} from \"./registry\";\nimport {\n canonicalClauseModifier,\n containerModifierSizeEnd,\n parseGroupModifier\n} from \"../runtime/clauseIdentity\";\nimport {\n compileModifierVocabulary,\n modifierKindMedia\n} from \"../runtime/modifierVocabulary\";\nimport { splitColorOpacitySuffix } from \"../runtime/colorOpacity\";\nimport { getSafeAreaEdge } from \"../runtime/safeAreaVariables\";\nconst sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nconst fontGenerics = /* @__PURE__ */ new Set([\"sans\", \"serif\", \"mono\"]);\nconst numericPattern = /^\\d+(?:\\.\\d+)?$/;\nconst tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nconst tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nconst extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nconst negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nconst positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nconst marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nconst borderWidthKeywords = /* @__PURE__ */ new Set([\"thin\", \"medium\", \"thick\"]);\nconst ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nconst cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nconst cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n const parts = [];\n let current = \"\";\n let bracketDepth = 0;\n let escaped = false;\n for (const char of candidate) {\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return { modifiers: parts, base: current };\n}\nconst modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nconst modifierKindGroup = 5;\nconst modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n let vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n const vocabulary = getModifierVocabulary(config);\n const exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if (parseGroupModifier(modifier)) return modifierKindGroup;\n const sizeEnd = containerModifierSizeEnd(modifier);\n if (sizeEnd === -1) return 0;\n const size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n const normalized = [];\n const seen = /* @__PURE__ */ new Set();\n for (const modifier of modifiers) {\n const canonical = canonicalClauseModifier(modifier);\n const kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n const fallback = propTokenGroupFallbacks[category];\n return config.tokenNames?.[category] || (fallback ? config.tokenNames?.[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n const match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n const names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n const alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n const byProp = new Map(grammarEntries.map((entry) => [entry.prop, entry]));\n const out = [];\n for (const prop of props) {\n const entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n const registered = prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\"fontSize\", \"textAlign\", \"color\"]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n const sides = prefix === \"border-x\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"];\n return entriesForProps(\n sides.flatMap((side) => [`border${side}Width`, `border${side}Color`])\n );\n }\n if (prefix === \"size\") {\n return entriesForProps(sizeUtilityProps).map((entry) => ({\n ...entry,\n tokenCategory: \"size\"\n }));\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\"x\", \"y\"]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n const props = radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n const expanded = config.shorthands?.[prefix];\n if (!expanded) return [];\n return grammarEntries.filter((entry) => entry.prop === expanded);\n}\nfunction findPrefix(base, config) {\n const prefixes = new Set(Object.keys(prefixToEntries));\n for (const prefix of extraPrefixes) prefixes.add(prefix);\n for (const shorthand in config.shorthands) prefixes.add(shorthand);\n let found = null;\n for (const prefix of prefixes) {\n if (base.startsWith(`${prefix}-`) && (!found || prefix.length > found.length)) {\n found = prefix;\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n const inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n const opening = /* @__PURE__ */ new Set([\"(\", \"[\", \"{\"]);\n const matching = { \")\": \"(\", \"]\": \"[\", \"}\": \"{\" };\n const stack = [];\n let quote = \"\";\n let escaped = false;\n for (const char of value) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n const expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n const fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n const suffix = splitColorOpacitySuffix(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if (getSafeAreaEdge(rawValue)) {\n const entry = entries.find(\n ({ tokenCategory }) => tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\"\n );\n if (entry) {\n return { entry, valueKind: \"convenience\", convenience: \"safe-area\" };\n }\n }\n const arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith(\"Width\"));\n const color = entries.find((entry) => entry.prop.endsWith(\"Color\"));\n const kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n const kind = arbitraryTextKind(decodeArbitrary(arbitrary));\n const fontSize = entries.find((entry) => entry.prop === \"fontSize\");\n const color = entries.find((entry) => entry.prop === \"color\");\n if (kind === \"fontSize\" && fontSize) {\n return { entry: fontSize, valueKind: \"arbitrary\" };\n }\n if (kind === \"color\" && color) {\n return { entry: color, valueKind: \"arbitrary\" };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find((entry) => entry.prop === \"fontFamily\"),\n valueKind: \"arbitrary\"\n };\n }\n return { entry: entries[0], valueKind: \"arbitrary\" };\n }\n if (prefix === \"text\") {\n const fontSize = entries.find((entry) => entry.prop === \"fontSize\");\n if (fontSize && hasTokenName(config, \"fontSize\", rawValue)) {\n return { entry: fontSize, valueKind: \"token\" };\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find((entry) => entry.prop === \"textAlign\"),\n valueKind: \"enum\"\n };\n }\n const color = entries.find((entry) => entry.prop === \"color\");\n if (color && rawValue === \"transparent\") {\n return { entry: color, valueKind: \"enum\" };\n }\n const colorName = tokenLookupName(\"color\", rawValue);\n if (color && hasTokenName(config, \"color\", colorName)) {\n return { entry: color, valueKind: \"token\" };\n }\n return null;\n }\n if (prefix === \"font\") {\n const fontFamily = entries.find((entry) => entry.prop === \"fontFamily\");\n const fontWeight = entries.find((entry) => entry.prop === \"fontWeight\");\n if (!fontFamily) return null;\n const matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n const matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return { entry: fontFamily, valueKind: \"token\" };\n }\n if (matchesWeight) {\n return { entry: fontWeight, valueKind: \"token\" };\n }\n return fontGenerics.has(rawValue) ? { entry: fontFamily, valueKind: \"convenience\", convenience: \"font-generic\" } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith(\"Width\"));\n const color = entries.find((entry) => entry.prop.endsWith(\"Color\"));\n const token = negative ? `-${rawValue}` : rawValue;\n const widthCategory = width?.tokenCategory || \"space\";\n const matchesWidth = width && hasTokenName(config, widthCategory, token);\n const colorName = tokenLookupName(\"color\", rawValue);\n const matchesColor = color && hasTokenName(config, \"color\", colorName);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return { entry: width, valueKind: \"token\" };\n }\n if (matchesColor) {\n return { entry: color, valueKind: \"token\" };\n }\n if (color && rawValue === \"transparent\") {\n return { entry: color, valueKind: \"enum\" };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n const flex = entries.find((entry) => entry.prop === \"flex\");\n if (flex) {\n return { entry: flex, valueKind: \"convenience\", convenience: \"flex-bundle\" };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n const letterSpacing = entries.find((entry) => entry.prop === \"letterSpacing\");\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n const lineHeight = entries.find((entry) => entry.prop === \"lineHeight\");\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n const angle = entries.find((entry) => entry.conveniences?.includes(\"angle\"));\n if (angle) {\n return { entry: angle, valueKind: \"convenience\", convenience: \"angle\" };\n }\n if (prefix === \"flex\") {\n const flex = entries.find((entry) => entry.prop === \"flex\");\n if (flex)\n return { entry: flex, valueKind: \"convenience\", convenience: \"flex-bundle\" };\n }\n if (prefix === \"grow\") {\n const grow = entries.find((entry) => entry.prop === \"flexGrow\");\n if (grow) return { entry: grow, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"shrink\") {\n const shrink = entries.find((entry) => entry.prop === \"flexShrink\");\n if (shrink)\n return { entry: shrink, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"line-clamp\") {\n const clamp = entries.find((entry) => entry.prop === \"numberOfLines\");\n if (clamp) return { entry: clamp, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (prefix === \"leading\") {\n const lineHeight = entries.find((entry) => entry.prop === \"lineHeight\");\n if (lineHeight && (!lineHeight.tokenCategory || !hasTokenName(config, lineHeight.tokenCategory, rawValue))) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n const entry = entries[0];\n if (entry) return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n }\n for (const entry of entries) {\n if (entry.tokenCategory) {\n if (entry.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return { entry, valueKind: \"enum\" };\n }\n if (entry.tokenCategory === \"radius\" && rawValue === \"none\") {\n return { entry, valueKind: \"convenience\", convenience: \"zero\" };\n }\n const name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n const tokenName = tokenLookupName(entry.tokenCategory, name);\n if (hasTokenName(config, entry.tokenCategory, tokenName)) {\n return { entry, valueKind: \"token\" };\n }\n if (entry.conveniences?.includes(\"sizing-keyword\") && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (positionSpaceProps.has(entry.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (marginSpaceProps.has(entry.prop) && rawValue === \"auto\") {\n return { entry, valueKind: \"convenience\", convenience: \"sizing-keyword\" };\n }\n if (entry.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (numericPattern.test(rawValue) && (entry.tokenCategory === \"space\" || entry.tokenCategory === \"size\" || propTokenGroupFallbacks[entry.tokenCategory] === \"size\")) {\n return { entry, valueKind: \"convenience\", convenience: \"spacing-scale\" };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"percentage\" };\n }\n continue;\n }\n if (entry.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n if (entry.conveniences?.includes(\"integer\") && numericPattern.test(rawValue)) {\n return { entry, valueKind: \"convenience\", convenience: \"integer\" };\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n const split = splitCandidate(candidate);\n if (!split) return null;\n const modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n const negative = split.base[0] === \"-\";\n const core = negative ? split.base.slice(1) : split.base;\n const prefix = findPrefix(core, config);\n let dynamic;\n if (prefix) {\n const rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n const entries = resolveEntries(prefix, config);\n const selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = { prefix, rawValue, selected };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n const direct = wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n const convenience = wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n const parsed = parseCandidate(candidate, config);\n return parsed ? { kind: \"tamagui\", parsed } : { kind: \"passthrough\", reason: \"not in the configured Tamagui grammar\" };\n}\nfunction tokenValidationConfig(entry, value, config) {\n const tokenNames = {\n ...config?.tokenNames\n };\n const category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [tokenLookupName(category, value)];\n }\n for (const other of prefixToEntries[entry.prefix] || []) {\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n return { ...config, tokenNames };\n}\nfunction formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {\n const entry = propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n const normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n const whole2 = standaloneValueProps[prop]?.[value];\n if (whole2) {\n const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole2}` : whole2;\n if (config) {\n const parsed2 = parseCandidate(candidate2, config);\n if (!parsed2?.properties || parsed2.properties[prop] !== value) return null;\n }\n return candidate2;\n }\n if (prop === \"fontWeight\") {\n const name = fontWeightNames[value];\n if (!name) return null;\n const core2 = `font-${name}`;\n if (String(wholeClassUtilities[core2]?.fontWeight) !== value) return null;\n const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core2}` : core2;\n if (config) {\n const parsed2 = parseCandidate(candidate2, config);\n if (!parsed2?.properties || String(parsed2.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate2;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n const sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n const lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName))\n return null;\n const colliding = prefixToEntries[entry.prefix].filter(\n (other) => other.prop !== prop && other.tokenCategory\n );\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n for (const other of colliding) {\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n }\n }\n const formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n const core = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n const candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n const whole = wholeClassUtilities[core];\n if (whole) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n const parsed2 = parseCandidate(candidate, config);\n if (parsed2?.kind === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate : null;\n }\n return parsed2?.entry?.prop === prop && parsed2.valueKind === valueKind ? candidate : null;\n } else if (prop in whole && String(whole[prop]) === value) {\n return candidate;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n const untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate, config || {}) : null;\n if (untokened && untokened.convenience !== \"spacing-scale\") {\n return null;\n }\n const parsed2 = parseCandidate(candidate, tokenValidationConfig(entry, value, config));\n const parsedValue = parsed2?.rawValue ? `${parsed2.negative ? \"-\" : \"\"}${parsed2.rawValue}` : null;\n if (parsed2?.kind !== \"dynamic\" || parsed2.entry?.prop !== prop || parsed2.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate;\n }\n const parsed = parseCandidate(candidate, config || {});\n if (!parsed || parsed.entry?.prop !== prop || parsed.valueKind !== valueKind)\n return null;\n return candidate;\n}\nfunction encodeArbitrary(value) {\n let encoded = \"\";\n for (const char of value) {\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n let decoded = \"\";\n for (let index = 0; index < value.length; index++) {\n const char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\nexport {\n classifyCandidate,\n decimalHalfTokenAlias,\n decodeArbitrary,\n encodeArbitrary,\n formatCandidate,\n hasTokenName,\n parseCandidate,\n resolveTokenName,\n splitCandidate,\n tailwindLeadingRatios,\n tailwindTrackingEms\n};\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;;;;;;;AA0BA,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,+BAA+B,IAAI,IAAI;CAAC;CAAQ;CAAS;AAAM,CAAC;AACtE,MAAM,iBAAiB;AACvB,MAAM,wBAAwB;CAC5B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,MAAM,sBAAsB;CAC1B,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,qCAAqC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,mCAAmC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,sCAAsC,IAAI,IAAI;CAAC;CAAQ;CAAU;AAAO,CAAC;AAC/E,MAAM,uCAAuC,IAAI,IAAI;CACnD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,MAAM,iBAAiB;AACvB,MAAM,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AACpF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,i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"}
@@ -1068,7 +1068,8 @@ function formatCandidate(param, config) {
1068
1068
  }
1069
1069
  if (valueKind === "token") {
1070
1070
  var _parsed_entry2;
1071
- if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate2, config || {})) {
1071
+ var untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate2, config || {}) : null;
1072
+ if (untokened && untokened.convenience !== "spacing-scale") {
1072
1073
  return null;
1073
1074
  }
1074
1075
  var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.native.js","names":[],"sources":["esm/tooling/candidate.native.js"],"sourcesContent":["import { namedCssColors } from \"../runtime/namedCssColors\";\nimport { propTokenGroupFallbacks } from \"./config\";\nimport { grammarEntries, fontWeightNames, insetAxisProps, prefixToEntries, propToGrammarEntry, radiusCornerProps, sizeUtilityProps, standaloneValueProps, textAlignKeywords, wholeClassConveniences, wholeClassUtilities } from \"./registry\";\nimport { canonicalClauseModifier, containerModifierSizeEnd, parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { compileModifierVocabulary, modifierKindMedia } from \"../runtime/modifierVocabulary\";\nimport { splitColorOpacitySuffix } from \"../runtime/colorOpacity\";\nimport { getSafeAreaEdge } from \"../runtime/safeAreaVariables\";\nvar sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nvar fontGenerics = /* @__PURE__ */ new Set([\n \"sans\",\n \"serif\",\n \"mono\"\n]);\nvar numericPattern = /^\\d+(?:\\.\\d+)?$/;\nvar tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nvar tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nvar extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nvar negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nvar positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nvar marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nvar borderWidthKeywords = /* @__PURE__ */ new Set([\n \"thin\",\n \"medium\",\n \"thick\"\n]);\nvar ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nvar cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nvar cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n var parts = [];\n var current = \"\";\n var bracketDepth = 0;\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = candidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return {\n modifiers: parts,\n base: current\n };\n}\nvar modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nvar modifierKindGroup = 5;\nvar modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n var vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n var vocabulary = getModifierVocabulary(config);\n var exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if (parseGroupModifier(modifier)) return modifierKindGroup;\n var sizeEnd = containerModifierSizeEnd(modifier);\n if (sizeEnd === -1) return 0;\n var size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n var normalized = [];\n var seen = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = modifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var modifier = _step.value;\n var canonical = canonicalClauseModifier(modifier);\n var kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n var _config_tokenNames, _config_tokenNames1;\n var fallback = propTokenGroupFallbacks[category];\n return ((_config_tokenNames = config.tokenNames) === null || _config_tokenNames === void 0 ? void 0 : _config_tokenNames[category]) || (fallback ? (_config_tokenNames1 = config.tokenNames) === null || _config_tokenNames1 === void 0 ? void 0 : _config_tokenNames1[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n var match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n var names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n var alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n var byProp = new Map(grammarEntries.map(function(entry2) {\n return [\n entry2.prop,\n entry2\n ];\n }));\n var out = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n var entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n var _config_shorthands;\n var registered = prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\n \"fontSize\",\n \"textAlign\",\n \"color\"\n ]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n var sides = prefix === \"border-x\" ? [\n \"Left\",\n \"Right\"\n ] : [\n \"Top\",\n \"Bottom\"\n ];\n return entriesForProps(sides.flatMap(function(side) {\n return [\n `border${side}Width`,\n `border${side}Color`\n ];\n }));\n }\n if (prefix === \"size\") {\n return entriesForProps(sizeUtilityProps).map(function(entry) {\n return {\n ...entry,\n tokenCategory: \"size\"\n };\n });\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\n \"x\",\n \"y\"\n ]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n var props = radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n var expanded = (_config_shorthands = config.shorthands) === null || _config_shorthands === void 0 ? void 0 : _config_shorthands[prefix];\n if (!expanded) return [];\n return grammarEntries.filter(function(entry) {\n return entry.prop === expanded;\n });\n}\nfunction findPrefix(base, config) {\n var prefixes = new Set(Object.keys(prefixToEntries));\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = extraPrefixes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prefix = _step.value;\n prefixes.add(prefix);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n for (var shorthand in config.shorthands) prefixes.add(shorthand);\n var found = null;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = prefixes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var prefix1 = _step1.value;\n if (base.startsWith(`${prefix1}-`) && (!found || prefix1.length > found.length)) {\n found = prefix1;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n var inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n var opening = /* @__PURE__ */ new Set([\n \"(\",\n \"[\",\n \"{\"\n ]);\n var matching = {\n \")\": \"(\",\n \"]\": \"[\",\n \"}\": \"{\"\n };\n var stack = [];\n var quote = \"\";\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n var expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n var fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n var suffix = splitColorOpacitySuffix(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if (getSafeAreaEdge(rawValue)) {\n var entry = entries.find(function(param) {\n var { tokenCategory } = param;\n return tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\";\n });\n if (entry) {\n return {\n entry,\n valueKind: \"convenience\",\n convenience: \"safe-area\"\n };\n }\n }\n var arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n var width = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var kind1 = arbitraryTextKind(decodeArbitrary(arbitrary));\n var fontSize = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n var color1 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (kind1 === \"fontSize\" && fontSize) {\n return {\n entry: fontSize,\n valueKind: \"arbitrary\"\n };\n }\n if (kind1 === \"color\" && color1) {\n return {\n entry: color1,\n valueKind: \"arbitrary\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n }),\n valueKind: \"arbitrary\"\n };\n }\n return {\n entry: entries[0],\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var fontSize1 = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n if (fontSize1 && hasTokenName(config, \"fontSize\", rawValue)) {\n return {\n entry: fontSize1,\n valueKind: \"token\"\n };\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"textAlign\";\n }),\n valueKind: \"enum\"\n };\n }\n var color2 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (color2 && rawValue === \"transparent\") {\n return {\n entry: color2,\n valueKind: \"enum\"\n };\n }\n var colorName = tokenLookupName(\"color\", rawValue);\n if (color2 && hasTokenName(config, \"color\", colorName)) {\n return {\n entry: color2,\n valueKind: \"token\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n var fontFamily = entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n });\n var fontWeight = entries.find(function(entry3) {\n return entry3.prop === \"fontWeight\";\n });\n if (!fontFamily) return null;\n var matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n var matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return {\n entry: fontFamily,\n valueKind: \"token\"\n };\n }\n if (matchesWeight) {\n return {\n entry: fontWeight,\n valueKind: \"token\"\n };\n }\n return fontGenerics.has(rawValue) ? {\n entry: fontFamily,\n valueKind: \"convenience\",\n convenience: \"font-generic\"\n } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n var width1 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color3 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var token = negative ? `-${rawValue}` : rawValue;\n var widthCategory = (width1 === null || width1 === void 0 ? void 0 : width1.tokenCategory) || \"space\";\n var matchesWidth = width1 && hasTokenName(config, widthCategory, token);\n var colorName1 = tokenLookupName(\"color\", rawValue);\n var matchesColor = color3 && hasTokenName(config, \"color\", colorName1);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return {\n entry: width1,\n valueKind: \"token\"\n };\n }\n if (matchesColor) {\n return {\n entry: color3,\n valueKind: \"token\"\n };\n }\n if (color3 && rawValue === \"transparent\") {\n return {\n entry: color3,\n valueKind: \"enum\"\n };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n var flex = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex) {\n return {\n entry: flex,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n var letterSpacing = entries.find(function(entry3) {\n return entry3.prop === \"letterSpacing\";\n });\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n var lineHeight = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n var angle = entries.find(function(entry3) {\n var _entry_conveniences2;\n return (_entry_conveniences2 = entry3.conveniences) === null || _entry_conveniences2 === void 0 ? void 0 : _entry_conveniences2.includes(\"angle\");\n });\n if (angle) {\n return {\n entry: angle,\n valueKind: \"convenience\",\n convenience: \"angle\"\n };\n }\n if (prefix === \"flex\") {\n var flex1 = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex1) return {\n entry: flex1,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n if (prefix === \"grow\") {\n var grow = entries.find(function(entry3) {\n return entry3.prop === \"flexGrow\";\n });\n if (grow) return {\n entry: grow,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"shrink\") {\n var shrink = entries.find(function(entry3) {\n return entry3.prop === \"flexShrink\";\n });\n if (shrink) return {\n entry: shrink,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"line-clamp\") {\n var clamp = entries.find(function(entry3) {\n return entry3.prop === \"numberOfLines\";\n });\n if (clamp) return {\n entry: clamp,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"leading\") {\n var lineHeight1 = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight1 && (!lineHeight1.tokenCategory || !hasTokenName(config, lineHeight1.tokenCategory, rawValue))) {\n return {\n entry: lineHeight1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n var entry1 = entries[0];\n if (entry1) return {\n entry: entry1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var entry2 = _step.value;\n var _entry_conveniences;\n if (entry2.tokenCategory) {\n var _entry_conveniences1;\n if (entry2.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return {\n entry: entry2,\n valueKind: \"enum\"\n };\n }\n if (entry2.tokenCategory === \"radius\" && rawValue === \"none\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"zero\"\n };\n }\n var name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n var tokenName = tokenLookupName(entry2.tokenCategory, name);\n if (hasTokenName(config, entry2.tokenCategory, tokenName)) {\n return {\n entry: entry2,\n valueKind: \"token\"\n };\n }\n if (((_entry_conveniences1 = entry2.conveniences) === null || _entry_conveniences1 === void 0 ? void 0 : _entry_conveniences1.includes(\"sizing-keyword\")) && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (positionSpaceProps.has(entry2.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (marginSpaceProps.has(entry2.prop) && rawValue === \"auto\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (entry2.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (numericPattern.test(rawValue) && (entry2.tokenCategory === \"space\" || entry2.tokenCategory === \"size\" || propTokenGroupFallbacks[entry2.tokenCategory] === \"size\")) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"spacing-scale\"\n };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"percentage\"\n };\n }\n continue;\n }\n if (entry2.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (((_entry_conveniences = entry2.conveniences) === null || _entry_conveniences === void 0 ? void 0 : _entry_conveniences.includes(\"integer\")) && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n var split = splitCandidate(candidate);\n if (!split) return null;\n var modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n var negative = split.base[0] === \"-\";\n var core = negative ? split.base.slice(1) : split.base;\n var prefix = findPrefix(core, config);\n var dynamic;\n if (prefix) {\n var rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n var entries = resolveEntries(prefix, config);\n var selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = {\n prefix,\n rawValue,\n selected\n };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n var direct = wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n var convenience = wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n var parsed = parseCandidate(candidate, config);\n return parsed ? {\n kind: \"tamagui\",\n parsed\n } : {\n kind: \"passthrough\",\n reason: \"not in the configured Tamagui grammar\"\n };\n}\nfunction tokenValidationConfig(entry, value, config) {\n var tokenNames = {\n ...config === null || config === void 0 ? void 0 : config.tokenNames\n };\n var category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [\n tokenLookupName(category, value)\n ];\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = (prefixToEntries[entry.prefix] || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n ...config,\n tokenNames\n };\n}\nfunction formatCandidate(param, config) {\n var { prop, value, valueKind, modifiers = [] } = param;\n var _parsed_entry;\n var entry = propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n var normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n var _standaloneValueProps_prop;\n var whole = (_standaloneValueProps_prop = standaloneValueProps[prop]) === null || _standaloneValueProps_prop === void 0 ? void 0 : _standaloneValueProps_prop[value];\n if (whole) {\n var candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole}` : whole;\n if (config) {\n var parsed = parseCandidate(candidate, config);\n if (!(parsed === null || parsed === void 0 ? void 0 : parsed.properties) || parsed.properties[prop] !== value) return null;\n }\n return candidate;\n }\n if (prop === \"fontWeight\") {\n var _wholeClassUtilities_core;\n var name = fontWeightNames[value];\n if (!name) return null;\n var core = `font-${name}`;\n if (String((_wholeClassUtilities_core = wholeClassUtilities[core]) === null || _wholeClassUtilities_core === void 0 ? void 0 : _wholeClassUtilities_core.fontWeight) !== value) return null;\n var candidate1 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n if (config) {\n var parsed1 = parseCandidate(candidate1, config);\n if (!(parsed1 === null || parsed1 === void 0 ? void 0 : parsed1.properties) || String(parsed1.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate1;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n var sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n var lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName)) return null;\n var colliding = prefixToEntries[entry.prefix].filter(function(other2) {\n return other2.prop !== prop && other2.tokenCategory;\n });\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = colliding[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n var formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n var core1 = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n var candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core1}` : core1;\n var whole1 = wholeClassUtilities[core1];\n if (whole1) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n var _parsed_entry1;\n var parsed2 = parseCandidate(candidate2, config);\n if ((parsed2 === null || parsed2 === void 0 ? void 0 : parsed2.kind) === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate2 : null;\n }\n return (parsed2 === null || parsed2 === void 0 ? void 0 : (_parsed_entry1 = parsed2.entry) === null || _parsed_entry1 === void 0 ? void 0 : _parsed_entry1.prop) === prop && parsed2.valueKind === valueKind ? candidate2 : null;\n } else if (prop in whole1 && String(whole1[prop]) === value) {\n return candidate2;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n var _parsed_entry2;\n if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate2, config || {})) {\n return null;\n }\n var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));\n var parsedValue = (parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.rawValue) ? `${parsed3.negative ? \"-\" : \"\"}${parsed3.rawValue}` : null;\n if ((parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.kind) !== \"dynamic\" || ((_parsed_entry2 = parsed3.entry) === null || _parsed_entry2 === void 0 ? void 0 : _parsed_entry2.prop) !== prop || parsed3.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate2;\n }\n var parsed4 = parseCandidate(candidate2, config || {});\n if (!parsed4 || ((_parsed_entry = parsed4.entry) === null || _parsed_entry === void 0 ? void 0 : _parsed_entry.prop) !== prop || parsed4.valueKind !== valueKind) return null;\n return candidate2;\n}\nfunction encodeArbitrary(value) {\n var encoded = \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n var decoded = \"\";\n for (var index = 0; index < value.length; index++) {\n var char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\nexport {\n classifyCandidate,\n decimalHalfTokenAlias,\n decodeArbitrary,\n encodeArbitrary,\n formatCandidate,\n hasTokenName,\n parseCandidate,\n resolveTokenName,\n splitCandidate,\n tailwindLeadingRatios,\n tailwindTrackingEms\n};\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;;;;;;;AAOA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,+BAA+B,IAAI,IAAI;CACzC;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;CAC1B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,IAAI,sBAAsB;CACxB,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,IAAI,gBAAgB;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,mCAAmC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,sCAAsC,IAAI,IAAI;CAChD;CACA;CACA;AACF,CAAC;AACD,IAAI,uCAAuC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AAClF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,IAAI;CAC/C,OAAO,QAAQ;AACjB;AACA,SAAS,eAAe,WAAW;CACjC,IAAI,QAAQ,CAAC;CACb,IAAI,UAAU;CACd,IAAI,eAAe;CACnB,IAAI,UAAU;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,UAAU,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GAC1J,IAAI,OAAO,MAAM;GACjB,IAAI,SAAS;IACX,WAAW;IACX,UAAU;IACV;GACF;GACA,IAAI,SAAS,MAAM;IACjB,WAAW;IACX,UAAU;IACV;GACF;GACA,IAAI,SAAS,KAAK;GAClB,IAAI,SAAS,KAAK;GAClB,IAAI,SAAS,OAAO,iBAAiB,GAAG;IACtC,MAAM,KAAK,OAAO;IAClB,UAAU;GACZ,OAAO;IACL,WAAW;GACb;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,IAAI,CAAC,WAAW,iBAAiB,GAAG,OAAO;CAC3C,OAAO;EACL,WAAW;EACX,MAAM;CACR;AACF;AACA,IAAI,0CAA0C,IAAI,QAAQ;AAC1D,IAAI,oBAAoB;AACxB,IAAI,wBAAwB;AAC5B,SAAS,sBAAsB,QAAQ;CACrC,IAAI,aAAa,wBAAwB,IAAI,MAAM;CACnD,IAAI,CAAC,YAAY;EACf,aAAa,0BAA0B,MAAM;EAC7C,wBAAwB,IAAI,QAAQ,UAAU;CAChD;CACA,OAAO;AACT;AACA,SAAS,iBAAiB,UAAU,QAAQ;CAC1C,IAAI,aAAa,sBAAsB,MAAM;CAC7C,IAAI,QAAQ,WAAW;CACvB,IAAI,UAAU,KAAK,GAAG,OAAO,QAAQ;CACrC,IAAI,mBAAmB,QAAQ,GAAG,OAAO;CACzC,IAAI,UAAU,yBAAyB,QAAQ;CAC/C,IAAI,YAAY,CAAC,GAAG,OAAO;CAC3B,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO;CACpC,QAAQ,WAAW,QAAQ,OAAO,sBAAsB,OAAO,uBAAuB,KAAK,KAAK,QAAQ,OAAO,oBAAoB,IAAI,KAAK,wBAAwB;AACtK;AACA,SAAS,mBAAmB,WAAW,QAAQ;CAC7C,IAAI,aAAa,CAAC;CAClB,IAAI,uBAAuB,IAAI,IAAI;CACnC,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,UAAU,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GAC1J,IAAI,WAAW,MAAM;GACrB,IAAI,YAAY,wBAAwB,QAAQ;GAChD,IAAI,OAAO,iBAAiB,WAAW,MAAM;GAC7C,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,OAAO;GACpC,KAAK,IAAI,IAAI;GACb,WAAW,KAAK,SAAS;EAC3B;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,YAAY,QAAQ,UAAU;CACrC,IAAI,oBAAoB;CACxB,IAAI,WAAW,wBAAwB;CACvC,SAAS,qBAAqB,OAAO,gBAAgB,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB,eAAe,YAAY,sBAAsB,OAAO,gBAAgB,QAAQ,wBAAwB,KAAK,IAAI,KAAK,IAAI,oBAAoB,YAAY,KAAK;AAC1R;AACA,SAAS,eAAe,QAAQ,UAAU;CACxC,OAAO,YAAY,QAAQ,QAAQ,MAAM,KAAK;AAChD;AACA,SAAS,aAAa,QAAQ,UAAU,MAAM;CAC5C,OAAO,iBAAiB,QAAQ,UAAU,IAAI,MAAM;AACtD;AACA,SAAS,sBAAsB,MAAM;CACnC,IAAI,QAAQ,eAAe,KAAK,IAAI;CACpC,OAAO,QAAQ,GAAG,MAAM,GAAG,MAAM;AACnC;AACA,SAAS,iBAAiB,QAAQ,UAAU,MAAM;CAChD,IAAI,QAAQ,YAAY,QAAQ,QAAQ;CACxC,IAAI,QAAQ,OAAO,IAAI,GAAG,OAAO;CACjC,IAAI,QAAQ,sBAAsB,IAAI;CACtC,OAAO,UAAU,QAAQ,QAAQ,OAAO,KAAK,IAAI,QAAQ;AAC3D;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,SAAS,IAAI,IAAI,eAAe,IAAI,SAAS,QAAQ;EACvD,OAAO,CACL,OAAO,MACP,MACF;CACF,CAAC,CAAC;CACF,IAAI,MAAM,CAAC;CACX,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,MAAM,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACtJ,IAAI,OAAO,MAAM;GACjB,IAAI,QAAQ,OAAO,IAAI,IAAI;GAC3B,IAAI,OAAO,IAAI,KAAK,KAAK;EAC3B;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,QAAQ,QAAQ;CACtC,IAAI;CACJ,IAAI,aAAa,gBAAgB;CACjC,IAAI,WAAW,QAAQ;EACrB,OAAO,gBAAgB;GACrB;GACA;GACA;EACF,CAAC;CACH;CACA,IAAI,YAAY,OAAO;CACvB,IAAI,WAAW,cAAc,WAAW,YAAY;EAClD,IAAI,QAAQ,WAAW,aAAa,CAClC,QACA,OACF,IAAI,CACF,OACA,QACF;EACA,OAAO,gBAAgB,MAAM,QAAQ,SAAS,MAAM;GAClD,OAAO,CACL,SAAS,KAAK,QACd,SAAS,KAAK,MAChB;EACF,CAAC,CAAC;CACJ;CACA,IAAI,WAAW,QAAQ;EACrB,OAAO,gBAAgB,gBAAgB,CAAC,CAAC,IAAI,SAAS,OAAO;GAC3D,OAAO;IACL,GAAG;IACH,eAAe;GACjB;EACF,CAAC;CACH;CACA,IAAI,WAAW,aAAa,WAAW,WAAW;EAChD,OAAO,gBAAgB,eAAe,OAAO,MAAM,SAAS,MAAM,EAAE;CACtE;CACA,IAAI,WAAW,aAAa;EAC1B,OAAO,gBAAgB,CACrB,KACA,GACF,CAAC;CACH;CACA,IAAI,OAAO,WAAW,UAAU,GAAG;EACjC,IAAI,QAAQ,kBAAkB,OAAO,MAAM,WAAW,MAAM;EAC5D,OAAO,QAAQ,gBAAgB,KAAK,IAAI,CAAC;CAC3C;CACA,IAAI,YAAY,qBAAqB,OAAO,gBAAgB,QAAQ,uBAAuB,KAAK,IAAI,KAAK,IAAI,mBAAmB;CAChI,IAAI,CAAC,UAAU,OAAO,CAAC;CACvB,OAAO,eAAe,OAAO,SAAS,OAAO;EAC3C,OAAO,MAAM,SAAS;CACxB,CAAC;AACH;AACA,SAAS,WAAW,MAAM,QAAQ;CAChC,IAAI,WAAW,IAAI,IAAI,OAAO,KAAK,eAAe,CAAC;CACnD,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,cAAc,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GAC9J,IAAI,SAAS,MAAM;GACnB,SAAS,IAAI,MAAM;EACrB;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,KAAK,IAAI,aAAa,OAAO,YAAY,SAAS,IAAI,SAAS;CAC/D,IAAI,QAAQ;CACZ,IAAI,6BAA6B,MAAM,qBAAqB,OAAO,kBAAkB,KAAK;CAC1F,IAAI;EACF,KAAK,IAAI,aAAa,SAAS,OAAO,SAAS,CAAC,GAAG,QAAQ,EAAE,8BAA8B,SAAS,WAAW,KAAK,EAAC,CAAE,OAAO,6BAA6B,MAAM;GAC/J,IAAI,UAAU,OAAO;GACrB,IAAI,KAAK,WAAW,GAAG,QAAQ,EAAE,MAAM,CAAC,SAAS,QAAQ,SAAS,MAAM,SAAS;IAC/E,QAAQ;GACV;EACF;CACF,SAAS,KAAK;EACZ,qBAAqB;EACrB,kBAAkB;CACpB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,8BAA8B,WAAW,UAAU,MAAM;IAC5D,WAAW,OAAO;GACpB;EACF,UAAU;GACR,IAAI,oBAAoB;IACtB,MAAM;GACR;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,UAAU;CAChC,IAAI,SAAS,UAAU,KAAK,SAAS,OAAO,OAAO,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK;EAC1E,OAAO;CACT;CACA,IAAI,QAAQ,SAAS,MAAM,GAAG,CAAC,CAAC;CAChC,OAAO,yBAAyB,gBAAgB,KAAK,CAAC,IAAI,QAAQ;AACpE;AACA,SAAS,yBAAyB,OAAO;CACvC,IAAI,0BAA0B,IAAI,IAAI;EACpC;EACA;EACA;CACF,CAAC;CACD,IAAI,WAAW;EACb,KAAK;EACL,KAAK;EACL,KAAK;CACP;CACA,IAAI,QAAQ,CAAC;CACb,IAAI,QAAQ;CACZ,IAAI,UAAU;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,MAAM,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACtJ,IAAI,OAAO,MAAM;GACjB,IAAI,SAAS;IACX,UAAU;IACV;GACF;GACA,IAAI,SAAS,MAAM;IACjB,UAAU;IACV;GACF;GACA,IAAI,OAAO;IACT,IAAI,SAAS,OAAO,QAAQ;IAC5B;GACF;GACA,IAAI,SAAS,QAAO,SAAS,KAAK;IAChC,QAAQ;IACR;GACF;GACA,IAAI,QAAQ,IAAI,IAAI,GAAG;IACrB,MAAM,KAAK,IAAI;IACf;GACF;GACA,IAAI,WAAW,SAAS;GACxB,IAAI,YAAY,MAAM,IAAI,MAAM,UAAU,OAAO;EACnD;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO,CAAC,WAAW,CAAC,SAAS,MAAM,WAAW;AAChD;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,WAAW,iBAAiB,KAAK,KAAK;CAC1C,OAAO,CAAC,CAAC,YAAY,OAAO,SAAS,EAAE,MAAM;AAC/C;AACA,SAAS,kBAAkB,OAAO;CAChC,IAAI,uBAAuB,KAAK,KAAK,GAAG,OAAO;CAC/C,IAAI,iBAAiB,KAAK,KAAK,KAAK,4BAA4B,KAAK,KAAK,GAAG;EAC3E,OAAO;CACT;CACA,IAAI,qBAAqB,IAAI,KAAK,KAAK,MAAM,WAAW,MAAM,GAAG,OAAO;CACxE,IAAI,MAAM,WAAW,GAAG,KAAK,oEAAoE,KAAK,KAAK,KAAK,eAAe,IAAI,MAAM,YAAY,CAAC,GAAG;EACvJ,OAAO;CACT;CACA,IAAI,0BAA0B,KAAK,KAAK,GAAG,OAAO;CAClD,OAAO;AACT;AACA,SAAS,mBAAmB,QAAQ;CAClC,OAAO,OAAO,WAAW,QAAQ,KAAK,WAAW;AACnD;AACA,SAAS,oBAAoB,OAAO;CAClC,IAAI,uBAAuB,KAAK,KAAK,GAAG,OAAO;CAC/C,IAAI,iBAAiB,KAAK,KAAK,KAAK,oBAAoB,IAAI,KAAK,GAAG,OAAO;CAC3E,IAAI,4BAA4B,KAAK,KAAK,GAAG,OAAO;CACpD,IAAI,qBAAqB,IAAI,KAAK,KAAK,MAAM,WAAW,MAAM,GAAG,OAAO;CACxE,IAAI,MAAM,WAAW,GAAG,KAAK,oEAAoE,KAAK,KAAK,KAAK,0BAA0B,KAAK,KAAK,GAAG;EACrJ,OAAO;CACT;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,UAAU,OAAO;CACxC,IAAI,aAAa,SAAS,OAAO;CACjC,IAAI,SAAS,wBAAwB,KAAK;CAC1C,OAAO,OAAO,SAAS,SAAS,QAAQ,OAAO;AACjD;AACA,SAAS,YAAY,SAAS,QAAQ,UAAU,UAAU,QAAQ;CAChE,IAAI,gBAAgB,QAAQ,GAAG;EAC7B,IAAI,QAAQ,QAAQ,KAAK,SAAS,OAAO;GACvC,IAAI,EAAE,kBAAkB;GACxB,OAAO,kBAAkB,WAAW,kBAAkB,UAAU,kBAAkB,YAAY,kBAAkB,cAAc,kBAAkB,gBAAgB,kBAAkB;EACpL,CAAC;EACD,IAAI,OAAO;GACT,OAAO;IACL;IACA,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,YAAY,eAAe,QAAQ;CACvC,IAAI,cAAc,MAAM;EACtB,IAAI,CAAC,WAAW,OAAO;EACvB,IAAI,mBAAmB,MAAM,GAAG;GAC9B,IAAI,QAAQ,QAAQ,KAAK,SAAS,QAAQ;IACxC,OAAO,OAAO,KAAK,SAAS,OAAO;GACrC,CAAC;GACD,IAAI,QAAQ,QAAQ,KAAK,SAAS,QAAQ;IACxC,OAAO,OAAO,KAAK,SAAS,OAAO;GACrC,CAAC;GACD,IAAI,OAAO,oBAAoB,gBAAgB,SAAS,CAAC;GACzD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,OAAO;GACtC,OAAO;IACL,OAAO,SAAS,UAAU,QAAQ;IAClC,WAAW;GACb;EACF;EACA,IAAI,WAAW,QAAQ;GACrB,IAAI,QAAQ,kBAAkB,gBAAgB,SAAS,CAAC;GACxD,IAAI,WAAW,QAAQ,KAAK,SAAS,QAAQ;IAC3C,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ;IACzC,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,UAAU,cAAc,UAAU;IACpC,OAAO;KACL,OAAO;KACP,WAAW;IACb;GACF;GACA,IAAI,UAAU,WAAW,QAAQ;IAC/B,OAAO;KACL,OAAO;KACP,WAAW;IACb;GACF;GACA,OAAO;EACT;EACA,IAAI,WAAW,QAAQ;GACrB,OAAO;IACL,OAAO,QAAQ,KAAK,SAAS,QAAQ;KACnC,OAAO,OAAO,SAAS;IACzB,CAAC;IACD,WAAW;GACb;EACF;EACA,OAAO;GACL,OAAO,QAAQ;GACf,WAAW;EACb;CACF;CACA,IAAI,WAAW,QAAQ;EACrB,IAAI,YAAY,QAAQ,KAAK,SAAS,QAAQ;GAC5C,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,aAAa,aAAa,QAAQ,YAAY,QAAQ,GAAG;GAC3D,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,IAAI,kBAAkB,IAAI,QAAQ,GAAG;GACnC,OAAO;IACL,OAAO,QAAQ,KAAK,SAAS,QAAQ;KACnC,OAAO,OAAO,SAAS;IACzB,CAAC;IACD,WAAW;GACb;EACF;EACA,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ;GACzC,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,UAAU,aAAa,eAAe;GACxC,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,IAAI,YAAY,gBAAgB,SAAS,QAAQ;EACjD,IAAI,UAAU,aAAa,QAAQ,SAAS,SAAS,GAAG;GACtD,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,OAAO;CACT;CACA,IAAI,WAAW,QAAQ;EACrB,IAAI,aAAa,QAAQ,KAAK,SAAS,QAAQ;GAC7C,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,aAAa,QAAQ,KAAK,SAAS,QAAQ;GAC7C,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,CAAC,YAAY,OAAO;EACxB,IAAI,gBAAgB,aAAa,QAAQ,cAAc,QAAQ;EAC/D,IAAI,gBAAgB,cAAc,aAAa,QAAQ,cAAc,QAAQ;EAC7E,IAAI,iBAAiB,eAAe,OAAO;EAC3C,IAAI,eAAe;GACjB,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,IAAI,eAAe;GACjB,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,OAAO,aAAa,IAAI,QAAQ,IAAI;GAClC,OAAO;GACP,WAAW;GACX,aAAa;EACf,IAAI;CACN;CACA,IAAI,mBAAmB,MAAM,GAAG;EAC9B,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ;GACzC,OAAO,OAAO,KAAK,SAAS,OAAO;EACrC,CAAC;EACD,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ;GACzC,OAAO,OAAO,KAAK,SAAS,OAAO;EACrC,CAAC;EACD,IAAI,QAAQ,WAAW,IAAI,aAAa;EACxC,IAAI,iBAAiB,WAAW,QAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,OAAO,kBAAkB;EAC9F,IAAI,eAAe,UAAU,aAAa,QAAQ,eAAe,KAAK;EACtE,IAAI,aAAa,gBAAgB,SAAS,QAAQ;EAClD,IAAI,eAAe,UAAU,aAAa,QAAQ,SAAS,UAAU;EACrE,IAAI,gBAAgB,cAAc,OAAO;EACzC,IAAI,cAAc;GAChB,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,IAAI,cAAc;GAChB,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,IAAI,UAAU,aAAa,eAAe;GACxC,OAAO;IACL,OAAO;IACP,WAAW;GACb;EACF;EACA,OAAO;CACT;CACA,IAAI,WAAW,UAAU,gBAAgB,QAAQ,GAAG;EAClD,IAAI,OAAO,QAAQ,KAAK,SAAS,QAAQ;GACvC,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,MAAM;GACR,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,WAAW,cAAc,OAAO,OAAO,qBAAqB,QAAQ,GAAG;EACzE,IAAI,gBAAgB,QAAQ,KAAK,SAAS,QAAQ;GAChD,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,eAAe;GACjB,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,WAAW,aAAa,OAAO,OAAO,uBAAuB,QAAQ,GAAG;EAC1E,IAAI,aAAa,QAAQ,KAAK,SAAS,QAAQ;GAC7C,OAAO,OAAO,SAAS;EACzB,CAAC;EACD,IAAI,YAAY;GACd,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,eAAe,KAAK,QAAQ,GAAG;EACjC,IAAI,QAAQ,QAAQ,KAAK,SAAS,QAAQ;GACxC,IAAI;GACJ,QAAQ,uBAAuB,OAAO,kBAAkB,QAAQ,yBAAyB,KAAK,IAAI,KAAK,IAAI,qBAAqB,SAAS,OAAO;EAClJ,CAAC;EACD,IAAI,OAAO;GACT,OAAO;IACL,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;EACA,IAAI,WAAW,QAAQ;GACrB,IAAI,QAAQ,QAAQ,KAAK,SAAS,QAAQ;IACxC,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,OAAO,OAAO;IAChB,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;EACA,IAAI,WAAW,QAAQ;GACrB,IAAI,OAAO,QAAQ,KAAK,SAAS,QAAQ;IACvC,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,MAAM,OAAO;IACf,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;EACA,IAAI,WAAW,UAAU;GACvB,IAAI,SAAS,QAAQ,KAAK,SAAS,QAAQ;IACzC,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,QAAQ,OAAO;IACjB,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;EACA,IAAI,WAAW,cAAc;GAC3B,IAAI,QAAQ,QAAQ,KAAK,SAAS,QAAQ;IACxC,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,OAAO,OAAO;IAChB,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;EACA,IAAI,WAAW,WAAW;GACxB,IAAI,cAAc,QAAQ,KAAK,SAAS,QAAQ;IAC9C,OAAO,OAAO,SAAS;GACzB,CAAC;GACD,IAAI,gBAAgB,CAAC,YAAY,iBAAiB,CAAC,aAAa,QAAQ,YAAY,eAAe,QAAQ,IAAI;IAC7G,OAAO;KACL,OAAO;KACP,WAAW;KACX,aAAa;IACf;GACF;EACF;EACA,IAAI,WAAW,eAAe,WAAW,cAAc,WAAW,eAAe,WAAW,aAAa,WAAW,cAAc,WAAW,eAAe,WAAW,WAAW;GAChL,IAAI,SAAS,QAAQ;GACrB,IAAI,QAAQ,OAAO;IACjB,OAAO;IACP,WAAW;IACX,aAAa;GACf;EACF;CACF;CACA,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,QAAQ,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACxJ,IAAI,SAAS,MAAM;GACnB,IAAI;GACJ,IAAI,OAAO,eAAe;IACxB,IAAI;IACJ,IAAI,OAAO,kBAAkB,WAAW,aAAa,eAAe;KAClE,OAAO;MACL,OAAO;MACP,WAAW;KACb;IACF;IACA,IAAI,OAAO,kBAAkB,YAAY,aAAa,QAAQ;KAC5D,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA,IAAI,OAAO,YAAY,aAAa,MAAM,IAAI,aAAa;IAC3D,IAAI,YAAY,gBAAgB,OAAO,eAAe,IAAI;IAC1D,IAAI,aAAa,QAAQ,OAAO,eAAe,SAAS,GAAG;KACzD,OAAO;MACL,OAAO;MACP,WAAW;KACb;IACF;IACA,MAAM,uBAAuB,OAAO,kBAAkB,QAAQ,yBAAyB,KAAK,IAAI,KAAK,IAAI,qBAAqB,SAAS,gBAAgB,OAAO,mBAAmB,IAAI,QAAQ,KAAK,gBAAgB,QAAQ,IAAI;KAC5N,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA,IAAI,mBAAmB,IAAI,OAAO,IAAI,MAAM,aAAa,UAAU,aAAa,UAAU,gBAAgB,QAAQ,IAAI;KACpH,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA,IAAI,iBAAiB,IAAI,OAAO,IAAI,KAAK,aAAa,QAAQ;KAC5D,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA,IAAI,OAAO,kBAAkB,YAAY,eAAe,KAAK,QAAQ,GAAG;KACtE,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA,IAAI,eAAe,KAAK,QAAQ,MAAM,OAAO,kBAAkB,WAAW,OAAO,kBAAkB,UAAU,wBAAwB,OAAO,mBAAmB,SAAS;KACtK,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA;GACF;GACA,IAAI,WAAW,aAAa,WAAW,WAAW,WAAW,aAAa,WAAW,WAAW;IAC9F,IAAI,eAAe,KAAK,QAAQ,GAAG;KACjC,OAAO;MACL,OAAO;MACP,WAAW;MACX,aAAa;KACf;IACF;IACA;GACF;GACA,IAAI,OAAO,SAAS,YAAY,eAAe,KAAK,QAAQ,GAAG;IAC7D,OAAO;KACL,OAAO;KACP,WAAW;KACX,aAAa;IACf;GACF;GACA,MAAM,sBAAsB,OAAO,kBAAkB,QAAQ,wBAAwB,KAAK,IAAI,KAAK,IAAI,oBAAoB,SAAS,SAAS,MAAM,eAAe,KAAK,QAAQ,GAAG;IAChL,OAAO;KACL,OAAO;KACP,WAAW;KACX,aAAa;IACf;GACF;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,WAAW,QAAQ;CACzC,IAAI,QAAQ,eAAe,SAAS;CACpC,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,YAAY,mBAAmB,MAAM,WAAW,MAAM;CAC1D,IAAI,CAAC,WAAW,OAAO;CACvB,IAAI,WAAW,MAAM,KAAK,OAAO;CACjC,IAAI,OAAO,WAAW,MAAM,KAAK,MAAM,CAAC,IAAI,MAAM;CAClD,IAAI,SAAS,WAAW,MAAM,MAAM;CACpC,IAAI;CACJ,IAAI,QAAQ;EACV,IAAI,WAAW,KAAK,MAAM,OAAO,SAAS,CAAC;EAC3C,IAAI,UAAU;GACZ,IAAI,UAAU,eAAe,QAAQ,MAAM;GAC3C,IAAI,WAAW,YAAY,SAAS,QAAQ,UAAU,UAAU,MAAM;GACtE,IAAI,aAAa,CAAC,YAAY,SAAS,gBAAgB,sBAAsB,mBAAmB,IAAI,SAAS,MAAM,IAAI,MAAM,SAAS,cAAc,WAAW,SAAS,cAAc,eAAe,SAAS,MAAM,SAAS,WAAW,SAAS,gBAAgB,WAAW,SAAS,gBAAgB,gBAAgB,SAAS,gBAAgB,oBAAoB,SAAS,gBAAgB,mBAAmB,SAAS,gBAAgB,aAAa;IAClb,UAAU;KACR;KACA;KACA;IACF;IACA,IAAI,SAAS,cAAc,SAAS;KAClC,OAAO;MACL;MACA,MAAM,MAAM;MACZ;MACA;MACA,MAAM;MACN;MACA;MACA,WAAW,eAAe,QAAQ,MAAM;MACxC,OAAO,SAAS;MAChB,WAAW,SAAS;MACpB,aAAa,SAAS;KACxB;IACF;GACF;EACF;CACF;CACA,IAAI,SAAS,oBAAoB,MAAM;CACvC,IAAI,CAAC,YAAY,WAAW,MAAM,SAAS,YAAY,aAAa,QAAQ,aAAa,IAAI,IAAI;EAC/F,IAAI,cAAc,uBAAuB,MAAM;EAC/C,OAAO;GACL;GACA,MAAM,MAAM;GACZ;GACA,MAAM;GACN,WAAW,cAAc,gBAAgB;GACzC,YAAY;GACZ;GACA,UAAU;EACZ;CACF;CACA,IAAI,SAAS;EACX,OAAO;GACL;GACA,MAAM,MAAM;GACZ;GACA;GACA,MAAM;GACN,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,WAAW,eAAe,QAAQ,QAAQ,MAAM;GAChD,OAAO,QAAQ,SAAS;GACxB,WAAW,QAAQ,SAAS;GAC5B,aAAa,QAAQ,SAAS;EAChC;CACF;CACA,OAAO;AACT;AACA,SAAS,kBAAkB,WAAW,QAAQ;CAC5C,IAAI,SAAS,eAAe,WAAW,MAAM;CAC7C,OAAO,SAAS;EACd,MAAM;EACN;CACF,IAAI;EACF,MAAM;EACN,QAAQ;CACV;AACF;AACA,SAAS,sBAAsB,OAAO,OAAO,QAAQ;CACnD,IAAI,aAAa,EACf,GAAG,WAAW,QAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,OAAO,WAC5D;CACA,IAAI,WAAW,MAAM;CACrB,IAAI,WAAW,cAAc,KAAK,GAAG;EACnC,WAAW,YAAY,CACrB,gBAAgB,UAAU,KAAK,CACjC;CACF;CACA,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,aAAa,gBAAgB,MAAM,WAAW,CAAC,EAAC,CAAE,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACtL,IAAI,QAAQ,MAAM;GAClB,IAAI,MAAM,iBAAiB,WAAW,MAAM,mBAAmB,KAAK,GAAG;IACrE,WAAW,MAAM,iBAAiB,CAAC;GACrC;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO;EACL,GAAG;EACH;CACF;AACF;AACA,SAAS,gBAAgB,OAAO,QAAQ;CACtC,IAAI,EAAE,MAAM,OAAO,WAAW,YAAY,CAAC,MAAM;CACjD,IAAI;CACJ,IAAI,QAAQ,mBAAmB;CAC/B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,cAAc,eAAe,UAAU,IAAI,OAAO;CACtD,IAAI,sBAAsB,mBAAmB,WAAW,UAAU,CAAC,CAAC;CACpE,IAAI,CAAC,qBAAqB,OAAO;CACjC,IAAI,cAAc,QAAQ;EACxB,IAAI;EACJ,IAAI,SAAS,6BAA6B,qBAAqB,WAAW,QAAQ,+BAA+B,KAAK,IAAI,KAAK,IAAI,2BAA2B;EAC9J,IAAI,OAAO;GACT,IAAI,YAAY,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,UAAU;GAC3F,IAAI,QAAQ;IACV,IAAI,SAAS,eAAe,WAAW,MAAM;IAC7C,IAAI,EAAE,WAAW,QAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,OAAO,eAAe,OAAO,WAAW,UAAU,OAAO,OAAO;GACxH;GACA,OAAO;EACT;EACA,IAAI,SAAS,cAAc;GACzB,IAAI;GACJ,IAAI,OAAO,gBAAgB;GAC3B,IAAI,CAAC,MAAM,OAAO;GAClB,IAAI,OAAO,QAAQ;GACnB,IAAI,QAAQ,4BAA4B,oBAAoB,WAAW,QAAQ,8BAA8B,KAAK,IAAI,KAAK,IAAI,0BAA0B,UAAU,MAAM,OAAO,OAAO;GACvL,IAAI,aAAa,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,SAAS;GAC3F,IAAI,QAAQ;IACV,IAAI,UAAU,eAAe,YAAY,MAAM;IAC/C,IAAI,EAAE,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,eAAe,OAAO,QAAQ,WAAW,UAAU,MAAM,OAAO;KAC9H,OAAO;IACT;GACF;GACA,OAAO;EACT;CACF;CACA,IAAI,CAAC,MAAM,QAAQ,OAAO;CAC1B,IAAI,cAAc,SAAS;EACzB,IAAI,CAAC,MAAM,eAAe,OAAO;EACjC,IAAI,oBAAoB,CAAC,CAAC,UAAU,eAAe,QAAQ,MAAM,aAAa;EAC9E,IAAI,aAAa,gBAAgB,MAAM,eAAe,KAAK;EAC3D,IAAI,qBAAqB,CAAC,aAAa,QAAQ,MAAM,eAAe,UAAU,GAAG,OAAO;EACxF,IAAI,YAAY,gBAAgB,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ;GACpE,OAAO,OAAO,SAAS,QAAQ,OAAO;EACxC,CAAC;EACD,IAAI,UAAU,QAAQ;GACpB,IAAI,CAAC,UAAU,CAAC,mBAAmB,OAAO;GAC1C,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;GACvF,IAAI;IACF,KAAK,IAAI,YAAY,UAAU,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;KAC1J,IAAI,QAAQ,MAAM;KAClB,IAAI,CAAC,eAAe,QAAQ,MAAM,aAAa,GAAG,OAAO;KACzD,IAAI,aAAa,QAAQ,MAAM,eAAe,KAAK,GAAG,OAAO;IAC/D;GACF,SAAS,KAAK;IACZ,oBAAoB;IACpB,iBAAiB;GACnB,UAAU;IACR,IAAI;KACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;MAC1D,UAAU,OAAO;KACnB;IACF,UAAU;KACR,IAAI,mBAAmB;MACrB,MAAM;KACR;IACF;GACF;EACF;CACF;CACA,IAAI,iBAAiB,cAAc,cAAc,IAAI,gBAAgB,KAAK,EAAE,KAAK;CACjF,IAAI,QAAQ,eAAe,OAAO,OAAO,eAAe,OAAO,MAAM,IAAI,MAAM,OAAO,GAAG,eAAe,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,OAAO,GAAG,mBAAmB,MAAM;CAClL,IAAI,aAAa,oBAAoB,SAAS,GAAG,oBAAoB,KAAK,GAAG,EAAE,GAAG,UAAU;CAC5F,IAAI,SAAS,oBAAoB;CACjC,IAAI,QAAQ;EACV,IAAI,cAAc,SAAS;GACzB,IAAI,CAAC,UAAU,CAAC,eAAe,QAAQ,MAAM,aAAa,GAAG,OAAO;EACtE,OAAO,IAAI,QAAQ;GACjB,IAAI;GACJ,IAAI,UAAU,eAAe,YAAY,MAAM;GAC/C,KAAK,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,UAAU,WAAW;IAClF,OAAO,QAAQ,cAAc,QAAQ,QAAQ,cAAc,OAAO,QAAQ,WAAW,KAAK,MAAM,QAAQ,aAAa;GACvH;GACA,QAAQ,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,KAAK,iBAAiB,QAAQ,WAAW,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,UAAU,QAAQ,QAAQ,cAAc,YAAY,aAAa;EAC9N,OAAO,IAAI,QAAQ,UAAU,OAAO,OAAO,KAAK,MAAM,OAAO;GAC3D,OAAO;EACT,OAAO;GACL,OAAO;EACT;CACF;CACA,IAAI,cAAc,SAAS;EACzB,IAAI;EACJ,IAAI,CAAC,eAAe,UAAU,CAAC,GAAG,MAAM,aAAa,KAAK,eAAe,YAAY,UAAU,CAAC,CAAC,GAAG;GAClG,OAAO;EACT;EACA,IAAI,UAAU,eAAe,YAAY,sBAAsB,OAAO,OAAO,MAAM,CAAC;EACpF,IAAI,eAAe,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,YAAY,GAAG,QAAQ,WAAW,MAAM,KAAK,QAAQ,aAAa;EAC/I,KAAK,YAAY,QAAQ,YAAY,KAAK,IAAI,KAAK,IAAI,QAAQ,UAAU,eAAe,iBAAiB,QAAQ,WAAW,QAAQ,mBAAmB,KAAK,IAAI,KAAK,IAAI,eAAe,UAAU,QAAQ,QAAQ,cAAc,WAAW,gBAAgB,OAAO;GAChQ,OAAO;EACT;EACA,OAAO;CACT;CACA,IAAI,UAAU,eAAe,YAAY,UAAU,CAAC,CAAC;CACrD,IAAI,CAAC,aAAa,gBAAgB,QAAQ,WAAW,QAAQ,kBAAkB,KAAK,IAAI,KAAK,IAAI,cAAc,UAAU,QAAQ,QAAQ,cAAc,WAAW,OAAO;CACzK,OAAO;AACT;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,UAAU;CACd,IAAI,4BAA4B,MAAM,oBAAoB,OAAO,iBAAiB,KAAK;CACvF,IAAI;EACF,KAAK,IAAI,YAAY,MAAM,OAAO,SAAS,CAAC,GAAG,OAAO,EAAE,6BAA6B,QAAQ,UAAU,KAAK,EAAC,CAAE,OAAO,4BAA4B,MAAM;GACtJ,IAAI,OAAO,MAAM;GACjB,IAAI,SAAS,QAAQ,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;IACjE,WAAW,KAAK;GAClB,OAAO,IAAI,KAAK,KAAK,IAAI,GAAG;IAC1B,WAAW;GACb,OAAO;IACL,WAAW;GACb;EACF;CACF,SAAS,KAAK;EACZ,oBAAoB;EACpB,iBAAiB;CACnB,UAAU;EACR,IAAI;GACF,IAAI,CAAC,6BAA6B,UAAU,UAAU,MAAM;IAC1D,UAAU,OAAO;GACnB;EACF,UAAU;GACR,IAAI,mBAAmB;IACrB,MAAM;GACR;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,OAAO;CAC9B,IAAI,UAAU;CACd,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,IAAI,OAAO,MAAM;EACjB,IAAI,SAAS,QAAQ,QAAQ,IAAI,MAAM,QAAQ;GAC7C,WAAW,MAAM,EAAE;EACrB,OAAO;GACL,WAAW,SAAS,MAAM,MAAM;EAClC;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"candidate.native.js","names":[],"sources":["esm/tooling/candidate.native.js"],"sourcesContent":["import { namedCssColors } from \"../runtime/namedCssColors\";\nimport { propTokenGroupFallbacks } from \"./config\";\nimport { grammarEntries, fontWeightNames, insetAxisProps, prefixToEntries, propToGrammarEntry, radiusCornerProps, sizeUtilityProps, standaloneValueProps, textAlignKeywords, wholeClassConveniences, wholeClassUtilities } from \"./registry\";\nimport { canonicalClauseModifier, containerModifierSizeEnd, parseGroupModifier } from \"../runtime/clauseIdentity\";\nimport { compileModifierVocabulary, modifierKindMedia } from \"../runtime/modifierVocabulary\";\nimport { splitColorOpacitySuffix } from \"../runtime/colorOpacity\";\nimport { getSafeAreaEdge } from \"../runtime/safeAreaVariables\";\nvar sizingConveniences = /* @__PURE__ */ new Set([\n \"full\",\n \"auto\",\n \"screen\",\n \"dvh\",\n \"lvh\",\n \"svh\",\n \"dvw\",\n \"lvw\",\n \"svw\",\n \"min\",\n \"max\",\n \"fit\"\n]);\nvar fontGenerics = /* @__PURE__ */ new Set([\n \"sans\",\n \"serif\",\n \"mono\"\n]);\nvar numericPattern = /^\\d+(?:\\.\\d+)?$/;\nvar tailwindLeadingRatios = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2\n};\nvar tailwindTrackingEms = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1\n};\nvar extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"rounded-s\",\n \"rounded-e\",\n \"inset-x\",\n \"inset-y\",\n \"size\",\n \"translate\"\n];\nvar negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\",\n \"zIndex\",\n \"x\",\n \"y\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skewX\",\n \"skewY\",\n \"order\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"letterSpacing\",\n \"outlineOffset\"\n]);\nvar positionSpaceProps = /* @__PURE__ */ new Set([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"insetInlineStart\",\n \"insetInlineEnd\",\n \"insetBlockStart\",\n \"insetBlockEnd\",\n \"start\",\n \"end\"\n]);\nvar marginSpaceProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginInlineStart\",\n \"marginInlineEnd\",\n \"marginBlockStart\",\n \"marginBlockEnd\",\n \"marginHorizontal\",\n \"marginVertical\"\n]);\nvar borderWidthKeywords = /* @__PURE__ */ new Set([\n \"thin\",\n \"medium\",\n \"thick\"\n]);\nvar ambiguousCssKeywords = /* @__PURE__ */ new Set([\n \"auto\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"groove\",\n \"hidden\",\n \"inherit\",\n \"initial\",\n \"inset\",\n \"none\",\n \"outset\",\n \"revert\",\n \"revert-layer\",\n \"ridge\",\n \"solid\",\n \"unset\"\n]);\nvar cssLengthUnits = \"(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)\";\nvar cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, \"i\");\nfunction hasName(names, name) {\n if (!names) return false;\n if (Array.isArray(names)) return names.includes(name);\n if (names instanceof Set) return names.has(name);\n return name in names;\n}\nfunction splitCandidate(candidate) {\n var parts = [];\n var current = \"\";\n var bracketDepth = 0;\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = candidate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n current += char;\n escaped = true;\n continue;\n }\n if (char === \"[\") bracketDepth++;\n if (char === \"]\") bracketDepth--;\n if (char === \":\" && bracketDepth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n if (!current || bracketDepth !== 0) return null;\n return {\n modifiers: parts,\n base: current\n };\n}\nvar modifierVocabularyCache = /* @__PURE__ */ new WeakMap();\nvar modifierKindGroup = 5;\nvar modifierKindContainer = 6;\nfunction getModifierVocabulary(config) {\n var vocabulary = modifierVocabularyCache.get(config);\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config);\n modifierVocabularyCache.set(config, vocabulary);\n }\n return vocabulary;\n}\nfunction modifierKindCode(modifier, config) {\n var vocabulary = getModifierVocabulary(config);\n var exact = vocabulary[modifier];\n if (exact !== void 0) return exact & 7;\n if (parseGroupModifier(modifier)) return modifierKindGroup;\n var sizeEnd = containerModifierSizeEnd(modifier);\n if (sizeEnd === -1) return 0;\n var size = modifier.slice(1, sizeEnd);\n return (vocabulary[size] & 7) === modifierKindMedia && (config.containerSizeNames === void 0 || hasName(config.containerSizeNames, size)) ? modifierKindContainer : 0;\n}\nfunction normalizeModifiers(modifiers, config) {\n var normalized = [];\n var seen = /* @__PURE__ */ new Set();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = modifiers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var modifier = _step.value;\n var canonical = canonicalClauseModifier(modifier);\n var kind = modifierKindCode(canonical, config);\n if (!kind || seen.has(kind)) return null;\n seen.add(kind);\n normalized.push(canonical);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return normalized;\n}\nfunction tokenDomain(config, category) {\n var _config_tokenNames, _config_tokenNames1;\n var fallback = propTokenGroupFallbacks[category];\n return ((_config_tokenNames = config.tokenNames) === null || _config_tokenNames === void 0 ? void 0 : _config_tokenNames[category]) || (fallback ? (_config_tokenNames1 = config.tokenNames) === null || _config_tokenNames1 === void 0 ? void 0 : _config_tokenNames1[fallback] : void 0);\n}\nfunction hasTokenDomain(config, category) {\n return tokenDomain(config, category) !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return resolveTokenName(config, category, name) !== null;\n}\nfunction decimalHalfTokenAlias(name) {\n var match = /^(-?\\d+)\\.5$/.exec(name);\n return match ? `${match[1]}-5` : null;\n}\nfunction resolveTokenName(config, category, name) {\n var names = tokenDomain(config, category);\n if (hasName(names, name)) return name;\n var alias = decimalHalfTokenAlias(name);\n return alias !== null && hasName(names, alias) ? alias : null;\n}\nfunction entriesForProps(props) {\n var byProp = new Map(grammarEntries.map(function(entry2) {\n return [\n entry2.prop,\n entry2\n ];\n }));\n var out = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = props[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n var entry = byProp.get(prop);\n if (entry) out.push(entry);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return out;\n}\nfunction resolveEntries(prefix, config) {\n var _config_shorthands;\n var registered = prefixToEntries[prefix];\n if (prefix === \"text\") {\n return entriesForProps([\n \"fontSize\",\n \"textAlign\",\n \"color\"\n ]);\n }\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n var sides = prefix === \"border-x\" ? [\n \"Left\",\n \"Right\"\n ] : [\n \"Top\",\n \"Bottom\"\n ];\n return entriesForProps(sides.flatMap(function(side) {\n return [\n `border${side}Width`,\n `border${side}Color`\n ];\n }));\n }\n if (prefix === \"size\") {\n return entriesForProps(sizeUtilityProps).map(function(entry) {\n return {\n ...entry,\n tokenCategory: \"size\"\n };\n });\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(insetAxisProps[prefix.slice(\"inset-\".length)]);\n }\n if (prefix === \"translate\") {\n return entriesForProps([\n \"x\",\n \"y\"\n ]);\n }\n if (prefix.startsWith(\"rounded-\")) {\n var props = radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? entriesForProps(props) : [];\n }\n var expanded = (_config_shorthands = config.shorthands) === null || _config_shorthands === void 0 ? void 0 : _config_shorthands[prefix];\n if (!expanded) return [];\n return grammarEntries.filter(function(entry) {\n return entry.prop === expanded;\n });\n}\nfunction findPrefix(base, config) {\n var prefixes = new Set(Object.keys(prefixToEntries));\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = extraPrefixes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prefix = _step.value;\n prefixes.add(prefix);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n for (var shorthand in config.shorthands) prefixes.add(shorthand);\n var found = null;\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;\n try {\n for (var _iterator1 = prefixes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {\n var prefix1 = _step1.value;\n if (base.startsWith(`${prefix1}-`) && (!found || prefix1.length > found.length)) {\n found = prefix1;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally {\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n return found;\n}\nfunction arbitraryInner(rawValue) {\n if (rawValue.length <= 2 || rawValue[0] !== \"[\" || rawValue.at(-1) !== \"]\") {\n return null;\n }\n var inner = rawValue.slice(1, -1);\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;\n}\nfunction arbitraryValueIsBalanced(value) {\n var opening = /* @__PURE__ */ new Set([\n \"(\",\n \"[\",\n \"{\"\n ]);\n var matching = {\n \")\": \"(\",\n \"]\": \"[\",\n \"}\": \"{\"\n };\n var stack = [];\n var quote = \"\";\n var escaped = false;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (quote) {\n if (char === quote) quote = \"\";\n continue;\n }\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n if (opening.has(char)) {\n stack.push(char);\n continue;\n }\n var expected = matching[char];\n if (expected && stack.pop() !== expected) return false;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return !escaped && !quote && stack.length === 0;\n}\nfunction fractionIsValid(value) {\n var fraction = /^(\\d+)\\/(\\d+)$/.exec(value);\n return !!fraction && Number(fraction[2]) !== 0;\n}\nfunction arbitraryTextKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"fontSize\";\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return \"fontSize\";\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || namedCssColors.has(value.toLowerCase())) {\n return \"color\";\n }\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return \"fontSize\";\n return null;\n}\nfunction isWidthColorPrefix(prefix) {\n return prefix.startsWith(\"border\") || prefix === \"outline\";\n}\nfunction arbitraryBorderKind(value) {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return \"width\";\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return \"width\";\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return \"width\";\n if (ambiguousCssKeywords.has(value) || value.startsWith(\"var(\")) return null;\n if (value.startsWith(\"#\") || /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) || /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) {\n return \"color\";\n }\n return null;\n}\nfunction tokenLookupName(category, value) {\n if (category !== \"color\") return value;\n var suffix = splitColorOpacitySuffix(value);\n return suffix.kind === \"none\" ? value : suffix.name;\n}\nfunction chooseEntry(entries, prefix, rawValue, negative, config) {\n if (getSafeAreaEdge(rawValue)) {\n var entry = entries.find(function(param) {\n var { tokenCategory } = param;\n return tokenCategory === \"space\" || tokenCategory === \"size\" || tokenCategory === \"radius\" || tokenCategory === \"fontSize\" || tokenCategory === \"lineHeight\" || tokenCategory === \"letterSpacing\";\n });\n if (entry) {\n return {\n entry,\n valueKind: \"convenience\",\n convenience: \"safe-area\"\n };\n }\n }\n var arbitrary = arbitraryInner(rawValue);\n if (arbitrary !== null) {\n if (!arbitrary) return null;\n if (isWidthColorPrefix(prefix)) {\n var width = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var kind = arbitraryBorderKind(decodeArbitrary(arbitrary));\n if (!kind || !width || !color) return null;\n return {\n entry: kind === \"width\" ? width : color,\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var kind1 = arbitraryTextKind(decodeArbitrary(arbitrary));\n var fontSize = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n var color1 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (kind1 === \"fontSize\" && fontSize) {\n return {\n entry: fontSize,\n valueKind: \"arbitrary\"\n };\n }\n if (kind1 === \"color\" && color1) {\n return {\n entry: color1,\n valueKind: \"arbitrary\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n }),\n valueKind: \"arbitrary\"\n };\n }\n return {\n entry: entries[0],\n valueKind: \"arbitrary\"\n };\n }\n if (prefix === \"text\") {\n var fontSize1 = entries.find(function(entry3) {\n return entry3.prop === \"fontSize\";\n });\n if (fontSize1 && hasTokenName(config, \"fontSize\", rawValue)) {\n return {\n entry: fontSize1,\n valueKind: \"token\"\n };\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find(function(entry3) {\n return entry3.prop === \"textAlign\";\n }),\n valueKind: \"enum\"\n };\n }\n var color2 = entries.find(function(entry3) {\n return entry3.prop === \"color\";\n });\n if (color2 && rawValue === \"transparent\") {\n return {\n entry: color2,\n valueKind: \"enum\"\n };\n }\n var colorName = tokenLookupName(\"color\", rawValue);\n if (color2 && hasTokenName(config, \"color\", colorName)) {\n return {\n entry: color2,\n valueKind: \"token\"\n };\n }\n return null;\n }\n if (prefix === \"font\") {\n var fontFamily = entries.find(function(entry3) {\n return entry3.prop === \"fontFamily\";\n });\n var fontWeight = entries.find(function(entry3) {\n return entry3.prop === \"fontWeight\";\n });\n if (!fontFamily) return null;\n var matchesFamily = hasTokenName(config, \"fontFamily\", rawValue);\n var matchesWeight = fontWeight && hasTokenName(config, \"fontWeight\", rawValue);\n if (matchesFamily && matchesWeight) return null;\n if (matchesFamily) {\n return {\n entry: fontFamily,\n valueKind: \"token\"\n };\n }\n if (matchesWeight) {\n return {\n entry: fontWeight,\n valueKind: \"token\"\n };\n }\n return fontGenerics.has(rawValue) ? {\n entry: fontFamily,\n valueKind: \"convenience\",\n convenience: \"font-generic\"\n } : null;\n }\n if (isWidthColorPrefix(prefix)) {\n var width1 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Width\");\n });\n var color3 = entries.find(function(entry3) {\n return entry3.prop.endsWith(\"Color\");\n });\n var token = negative ? `-${rawValue}` : rawValue;\n var widthCategory = (width1 === null || width1 === void 0 ? void 0 : width1.tokenCategory) || \"space\";\n var matchesWidth = width1 && hasTokenName(config, widthCategory, token);\n var colorName1 = tokenLookupName(\"color\", rawValue);\n var matchesColor = color3 && hasTokenName(config, \"color\", colorName1);\n if (matchesWidth && matchesColor) return null;\n if (matchesWidth) {\n return {\n entry: width1,\n valueKind: \"token\"\n };\n }\n if (matchesColor) {\n return {\n entry: color3,\n valueKind: \"token\"\n };\n }\n if (color3 && rawValue === \"transparent\") {\n return {\n entry: color3,\n valueKind: \"enum\"\n };\n }\n return null;\n }\n if (prefix === \"flex\" && fractionIsValid(rawValue)) {\n var flex = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex) {\n return {\n entry: flex,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n }\n if (prefix === \"tracking\" && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n var letterSpacing = entries.find(function(entry3) {\n return entry3.prop === \"letterSpacing\";\n });\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: \"convenience\",\n convenience: \"tracking-keyword\"\n };\n }\n }\n if (prefix === \"leading\" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n var lineHeight = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: \"convenience\",\n convenience: \"leading-keyword\"\n };\n }\n }\n if (numericPattern.test(rawValue)) {\n var angle = entries.find(function(entry3) {\n var _entry_conveniences2;\n return (_entry_conveniences2 = entry3.conveniences) === null || _entry_conveniences2 === void 0 ? void 0 : _entry_conveniences2.includes(\"angle\");\n });\n if (angle) {\n return {\n entry: angle,\n valueKind: \"convenience\",\n convenience: \"angle\"\n };\n }\n if (prefix === \"flex\") {\n var flex1 = entries.find(function(entry3) {\n return entry3.prop === \"flex\";\n });\n if (flex1) return {\n entry: flex1,\n valueKind: \"convenience\",\n convenience: \"flex-bundle\"\n };\n }\n if (prefix === \"grow\") {\n var grow = entries.find(function(entry3) {\n return entry3.prop === \"flexGrow\";\n });\n if (grow) return {\n entry: grow,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"shrink\") {\n var shrink = entries.find(function(entry3) {\n return entry3.prop === \"flexShrink\";\n });\n if (shrink) return {\n entry: shrink,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"line-clamp\") {\n var clamp = entries.find(function(entry3) {\n return entry3.prop === \"numberOfLines\";\n });\n if (clamp) return {\n entry: clamp,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (prefix === \"leading\") {\n var lineHeight1 = entries.find(function(entry3) {\n return entry3.prop === \"lineHeight\";\n });\n if (lineHeight1 && (!lineHeight1.tokenCategory || !hasTokenName(config, lineHeight1.tokenCategory, rawValue))) {\n return {\n entry: lineHeight1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n if (prefix === \"grid-cols\" || prefix === \"col-span\" || prefix === \"col-start\" || prefix === \"col-end\" || prefix === \"row-span\" || prefix === \"row-start\" || prefix === \"row-end\") {\n var entry1 = entries[0];\n if (entry1) return {\n entry: entry1,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var entry2 = _step.value;\n var _entry_conveniences;\n if (entry2.tokenCategory) {\n var _entry_conveniences1;\n if (entry2.tokenCategory === \"color\" && rawValue === \"transparent\") {\n return {\n entry: entry2,\n valueKind: \"enum\"\n };\n }\n if (entry2.tokenCategory === \"radius\" && rawValue === \"none\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"zero\"\n };\n }\n var name = negative && rawValue !== \"0\" ? `-${rawValue}` : rawValue;\n var tokenName = tokenLookupName(entry2.tokenCategory, name);\n if (hasTokenName(config, entry2.tokenCategory, tokenName)) {\n return {\n entry: entry2,\n valueKind: \"token\"\n };\n }\n if (((_entry_conveniences1 = entry2.conveniences) === null || _entry_conveniences1 === void 0 ? void 0 : _entry_conveniences1.includes(\"sizing-keyword\")) && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (positionSpaceProps.has(entry2.prop) && (rawValue === \"full\" || rawValue === \"auto\" || fractionIsValid(rawValue))) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (marginSpaceProps.has(entry2.prop) && rawValue === \"auto\") {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"sizing-keyword\"\n };\n }\n if (entry2.tokenCategory === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (numericPattern.test(rawValue) && (entry2.tokenCategory === \"space\" || entry2.tokenCategory === \"size\" || propTokenGroupFallbacks[entry2.tokenCategory] === \"size\")) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"spacing-scale\"\n };\n }\n continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\" || prefix === \"scale-x\" || prefix === \"scale-y\") {\n if (numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"percentage\"\n };\n }\n continue;\n }\n if (entry2.prop === \"zIndex\" && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n if (((_entry_conveniences = entry2.conveniences) === null || _entry_conveniences === void 0 ? void 0 : _entry_conveniences.includes(\"integer\")) && numericPattern.test(rawValue)) {\n return {\n entry: entry2,\n valueKind: \"convenience\",\n convenience: \"integer\"\n };\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return null;\n}\nfunction parseCandidate(candidate, config) {\n var split = splitCandidate(candidate);\n if (!split) return null;\n var modifiers = normalizeModifiers(split.modifiers, config);\n if (!modifiers) return null;\n var negative = split.base[0] === \"-\";\n var core = negative ? split.base.slice(1) : split.base;\n var prefix = findPrefix(core, config);\n var dynamic;\n if (prefix) {\n var rawValue = core.slice(prefix.length + 1);\n if (rawValue) {\n var entries = resolveEntries(prefix, config);\n var selected = chooseEntry(entries, prefix, rawValue, negative, config);\n if (selected && (!negative || selected.convenience === \"tracking-keyword\" || negativeTokenProps.has(selected.entry.prop) && (selected.valueKind === \"token\" || selected.valueKind === \"arbitrary\" && selected.entry.prop === \"order\" || selected.convenience === \"angle\" || selected.convenience === \"percentage\" || selected.convenience === \"sizing-keyword\" || selected.convenience === \"spacing-scale\" || selected.convenience === \"integer\"))) {\n dynamic = {\n prefix,\n rawValue,\n selected\n };\n if (selected.valueKind === \"token\") {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience\n };\n }\n }\n }\n }\n var direct = wholeClassUtilities[split.base];\n if (!negative && direct && (split.base !== \"shadow\" || hasTokenName(config, \"boxShadow\", \"sm\"))) {\n var convenience = wholeClassConveniences[split.base];\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: \"utility\",\n valueKind: convenience ? \"convenience\" : \"enum\",\n properties: direct,\n convenience,\n negative: false\n };\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: \"dynamic\",\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience\n };\n }\n return null;\n}\nfunction classifyCandidate(candidate, config) {\n var parsed = parseCandidate(candidate, config);\n return parsed ? {\n kind: \"tamagui\",\n parsed\n } : {\n kind: \"passthrough\",\n reason: \"not in the configured Tamagui grammar\"\n };\n}\nfunction tokenValidationConfig(entry, value, config) {\n var tokenNames = {\n ...config === null || config === void 0 ? void 0 : config.tokenNames\n };\n var category = entry.tokenCategory;\n if (tokenNames[category] === void 0) {\n tokenNames[category] = [\n tokenLookupName(category, value)\n ];\n }\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = (prefixToEntries[entry.prefix] || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {\n tokenNames[other.tokenCategory] = [];\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return {\n ...config,\n tokenNames\n };\n}\nfunction formatCandidate(param, config) {\n var { prop, value, valueKind, modifiers = [] } = param;\n var _parsed_entry;\n var entry = propToGrammarEntry[prop];\n if (!entry) return null;\n if (valueKind === \"arbitrary\" && value === \"\") return null;\n var normalizedModifiers = normalizeModifiers(modifiers, config || {});\n if (!normalizedModifiers) return null;\n if (valueKind === \"enum\") {\n var _standaloneValueProps_prop;\n var whole = (_standaloneValueProps_prop = standaloneValueProps[prop]) === null || _standaloneValueProps_prop === void 0 ? void 0 : _standaloneValueProps_prop[value];\n if (whole) {\n var candidate = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${whole}` : whole;\n if (config) {\n var parsed = parseCandidate(candidate, config);\n if (!(parsed === null || parsed === void 0 ? void 0 : parsed.properties) || parsed.properties[prop] !== value) return null;\n }\n return candidate;\n }\n if (prop === \"fontWeight\") {\n var _wholeClassUtilities_core;\n var name = fontWeightNames[value];\n if (!name) return null;\n var core = `font-${name}`;\n if (String((_wholeClassUtilities_core = wholeClassUtilities[core]) === null || _wholeClassUtilities_core === void 0 ? void 0 : _wholeClassUtilities_core.fontWeight) !== value) return null;\n var candidate1 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core}` : core;\n if (config) {\n var parsed1 = parseCandidate(candidate1, config);\n if (!(parsed1 === null || parsed1 === void 0 ? void 0 : parsed1.properties) || String(parsed1.properties.fontWeight) !== value) {\n return null;\n }\n }\n return candidate1;\n }\n }\n if (!entry.prefix) return null;\n if (valueKind === \"token\") {\n if (!entry.tokenCategory) return null;\n var sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);\n var lookupName = tokenLookupName(entry.tokenCategory, value);\n if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName)) return null;\n var colliding = prefixToEntries[entry.prefix].filter(function(other2) {\n return other2.prop !== prop && other2.tokenCategory;\n });\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null;\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = colliding[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var other = _step.value;\n if (!hasTokenDomain(config, other.tokenCategory)) return null;\n if (hasTokenName(config, other.tokenCategory, value)) return null;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n var formattedValue = valueKind === \"arbitrary\" ? `[${encodeArbitrary(value)}]` : value;\n var core1 = formattedValue[0] === \"-\" && formattedValue[1] !== \"[\" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;\n var candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(\":\")}:${core1}` : core1;\n var whole1 = wholeClassUtilities[core1];\n if (whole1) {\n if (valueKind === \"token\") {\n if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;\n } else if (config) {\n var _parsed_entry1;\n var parsed2 = parseCandidate(candidate2, config);\n if ((parsed2 === null || parsed2 === void 0 ? void 0 : parsed2.kind) === \"utility\") {\n return parsed2.properties && prop in parsed2.properties && String(parsed2.properties[prop]) === value ? candidate2 : null;\n }\n return (parsed2 === null || parsed2 === void 0 ? void 0 : (_parsed_entry1 = parsed2.entry) === null || _parsed_entry1 === void 0 ? void 0 : _parsed_entry1.prop) === prop && parsed2.valueKind === valueKind ? candidate2 : null;\n } else if (prop in whole1 && String(whole1[prop]) === value) {\n return candidate2;\n } else {\n return null;\n }\n }\n if (valueKind === \"token\") {\n var _parsed_entry2;\n var untokened = !hasTokenDomain(config || {}, entry.tokenCategory) ? parseCandidate(candidate2, config || {}) : null;\n if (untokened && untokened.convenience !== \"spacing-scale\") {\n return null;\n }\n var parsed3 = parseCandidate(candidate2, tokenValidationConfig(entry, value, config));\n var parsedValue = (parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.rawValue) ? `${parsed3.negative ? \"-\" : \"\"}${parsed3.rawValue}` : null;\n if ((parsed3 === null || parsed3 === void 0 ? void 0 : parsed3.kind) !== \"dynamic\" || ((_parsed_entry2 = parsed3.entry) === null || _parsed_entry2 === void 0 ? void 0 : _parsed_entry2.prop) !== prop || parsed3.valueKind !== \"token\" || parsedValue !== value) {\n return null;\n }\n return candidate2;\n }\n var parsed4 = parseCandidate(candidate2, config || {});\n if (!parsed4 || ((_parsed_entry = parsed4.entry) === null || _parsed_entry === void 0 ? void 0 : _parsed_entry.prop) !== prop || parsed4.valueKind !== valueKind) return null;\n return candidate2;\n}\nfunction encodeArbitrary(value) {\n var encoded = \"\";\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var char = _step.value;\n if (char === \"\\\\\" || char === \"_\" || char === \"[\" || char === \"]\") {\n encoded += `\\\\${char}`;\n } else if (/\\s/.test(char)) {\n encoded += \"_\";\n } else {\n encoded += char;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return encoded;\n}\nfunction decodeArbitrary(value) {\n var decoded = \"\";\n for (var index = 0; index < value.length; index++) {\n var char = value[index];\n if (char === \"\\\\\" && index + 1 < value.length) {\n decoded += value[++index];\n } else {\n decoded += char === \"_\" ? \" \" : char;\n }\n }\n return decoded;\n}\nexport {\n classifyCandidate,\n decimalHalfTokenAlias,\n decodeArbitrary,\n encodeArbitrary,\n formatCandidate,\n hasTokenName,\n parseCandidate,\n resolveTokenName,\n splitCandidate,\n tailwindLeadingRatios,\n tailwindTrackingEms\n};\n//# sourceMappingURL=candidate.js.map\n"],"mappings":";;;;;;;;;AAOA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,+BAA+B,IAAI,IAAI;CACzC;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;CAC1B,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;AACT;AACA,IAAI,sBAAsB;CACxB,SAAS,CAAC;CACV,OAAO,CAAC;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;AACV;AACA,IAAI,gBAAgB;CAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,qCAAqC,IAAI,IAAI;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,mCAAmC,IAAI,IAAI;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,sCAAsC,IAAI,IAAI;CAChD;CACA;CACA;AACF,CAAC;AACD,IAAI,uCAAuC,IAAI,IAAI;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAI,iBAAiB;AACrB,IAAI,mBAAmB,IAAI,OAAO,0BAA0B,eAAe,IAAI,GAAG;AAClF,SAAS,QAAQ,OAAO,MAAM;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,SAAS,IAAI;CACpD,IAAI,iB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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/style-grammar",
3
- "version": "3.1.10",
3
+ "version": "3.2.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -84,7 +84,7 @@
84
84
  },
85
85
  "dependencies": {},
86
86
  "devDependencies": {
87
- "@tamagui/build": "3.1.10",
87
+ "@tamagui/build": "3.2.0",
88
88
  "vitest": "4.1.11"
89
89
  },
90
90
  "repository": {
@@ -92,5 +92,5 @@
92
92
  "url": "git+https://github.com/tamagui/tamagui.git",
93
93
  "directory": "code/core/style-grammar"
94
94
  },
95
- "releaseSourceCommit": "667a06425e709c73431628b364929dba4aa3bca1"
95
+ "releaseSourceCommit": "25770fb5d49c618553abe73e1002459037cc194b"
96
96
  }
@@ -972,10 +972,11 @@ export function formatCandidate(
972
972
  }
973
973
  }
974
974
  if (valueKind === 'token') {
975
- if (
976
- !hasTokenDomain(config || {}, entry.tokenCategory!) &&
977
- parseCandidate(candidate, config || {})
978
- ) {
975
+ // a numeric spacing-scale parse is the same class a token would spell, so only other parses are ambiguous
976
+ const untokened = !hasTokenDomain(config || {}, entry.tokenCategory!)
977
+ ? parseCandidate(candidate, config || {})
978
+ : null
979
+ if (untokened && untokened.convenience !== 'spacing-scale') {
979
980
  return null
980
981
  }
981
982
  const parsed = parseCandidate(candidate, tokenValidationConfig(entry, value, config))
@@ -1,11 +1,11 @@
1
1
  {
2
- "mappings": "AAEA,cAYO,mBACA,qBACA;KAcF,4BAA4B,sBAAsB,SAAS;AAEhE,iBAAiB,kBAAkB;CACjC,aAAa,SAAS;CACtB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,aAAa,QAAQ,OAAO,eAAe;;;;;;;CAO3C;;AAGF,iBAAiB,gBAAgB;CAC/B;CACA;CACA;CACA;CACA,MAAM,YAAY;CAClB,WAAW,UAAU,cAAc,SAAS;CAC5C,aAAa,SAAS;CACtB,QAAQ;CACR;CACA;CACA;CACA;;AAGF,YAAY,0BACR;CAAE,MAAM;CAAW,QAAQ;IAC3B;CAAE,MAAM;CAAe;;AAoB3B,OAAO,cAAM,uBAAuB;AAUpC,OAAO,cAAM,qBAAqB;;;;;;AA0HlC,OAAO,iBAAS,eACd,oBACC;CAAE;CAAqB;;AA0F1B,OAAO,iBAAS,aACd,QAAQ,mBACR,UAAU,eACV;AAMF,OAAO,iBAAS,sBAAsB;AAKtC,OAAO,iBAAS,iBACd,QAAQ,mBACR,UAAU,eACV;AA2aF,OAAO,iBAAS,eACd,mBACA,QAAQ,oBACP;AA4FH,OAAO,iBAAS,kBACd,mBACA,QAAQ,oBACP;AAOH,iBAAiB,qBAAqB;CACpC;CACA;CACA,WAAW,gBAAgB;CAC3B;;AAuBF,OAAO,iBAAS,gBACd,EAAE,MAAM,OAAO,WAAW,aAAkB,sBAC5C,SAAS;AAkHX,OAAO,iBAAS,gBAAgB;AAchC,OAAO,iBAAS,gBAAgB",
2
+ "mappings": "AAEA,cAYO,mBACA,qBACA;KAcF,4BAA4B,sBAAsB,SAAS;AAEhE,iBAAiB,kBAAkB;CACjC,aAAa,SAAS;CACtB,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,aAAa,QAAQ,OAAO,eAAe;;;;;;;CAO3C;;AAGF,iBAAiB,gBAAgB;CAC/B;CACA;CACA;CACA;CACA,MAAM,YAAY;CAClB,WAAW,UAAU,cAAc,SAAS;CAC5C,aAAa,SAAS;CACtB,QAAQ;CACR;CACA;CACA;CACA;;AAGF,YAAY,0BACR;CAAE,MAAM;CAAW,QAAQ;IAC3B;CAAE,MAAM;CAAe;;AAoB3B,OAAO,cAAM,uBAAuB;AAUpC,OAAO,cAAM,qBAAqB;;;;;;AA0HlC,OAAO,iBAAS,eACd,oBACC;CAAE;CAAqB;;AA0F1B,OAAO,iBAAS,aACd,QAAQ,mBACR,UAAU,eACV;AAMF,OAAO,iBAAS,sBAAsB;AAKtC,OAAO,iBAAS,iBACd,QAAQ,mBACR,UAAU,eACV;AA2aF,OAAO,iBAAS,eACd,mBACA,QAAQ,oBACP;AA4FH,OAAO,iBAAS,kBACd,mBACA,QAAQ,oBACP;AAOH,iBAAiB,qBAAqB;CACpC;CACA;CACA,WAAW,gBAAgB;CAC3B;;AAuBF,OAAO,iBAAS,gBACd,EAAE,MAAM,OAAO,WAAW,aAAkB,sBAC5C,SAAS;AAmHX,OAAO,iBAAS,gBAAgB;AAchC,OAAO,iBAAS,gBAAgB",
3
3
  "names": [],
4
4
  "sources": [
5
5
  "src/tooling/candidate.ts"
6
6
  ],
7
7
  "version": 3,
8
8
  "sourcesContent": [
9
- "import { namedCssColors } from '../runtime/namedCssColors'\nimport { propTokenGroupFallbacks } from './config'\nimport {\n grammarEntries,\n fontWeightNames,\n insetAxisProps,\n prefixToEntries,\n propToGrammarEntry,\n radiusCornerProps,\n sizeUtilityProps,\n standaloneValueProps,\n textAlignKeywords,\n wholeClassConveniences,\n wholeClassUtilities,\n type GrammarEntry,\n type TokenCategory,\n} from './registry'\nimport {\n canonicalClauseModifier,\n containerModifierSizeEnd,\n parseGroupModifier,\n} from '../runtime/clauseIdentity'\nimport {\n compileModifierVocabulary,\n modifierKindMedia,\n type CompiledModifierVocabulary,\n} from '../runtime/modifierVocabulary'\nimport { splitColorOpacitySuffix } from '../runtime/colorOpacity'\nimport { getSafeAreaEdge } from '../runtime/safeAreaVariables'\n\ntype Names = readonly string[] | ReadonlySet<string> | Readonly<Record<string, unknown>>\n\nexport interface GrammarConfigView {\n shorthands?: Readonly<Record<string, string>>\n mediaNames?: Names\n themeNames?: Names\n platformNames?: Names\n tokenNames?: Partial<Record<TokenCategory, Names>>\n /**\n * the media keys that measure a size, so `@key:` is a meaningful container\n * query. derived by createGrammarConfigView when the media input carries\n * query information; absent means UNKNOWN, and the modifier registry then\n * refuses container claims with a diagnostic rather than over-claiming\n */\n containerSizeNames?: readonly string[]\n}\n\nexport interface ParsedCandidate {\n candidate: string\n base: string\n modifiers: readonly string[]\n negative: boolean\n kind: 'utility' | 'dynamic'\n valueKind: 'token' | 'arbitrary' | 'enum' | 'convenience'\n properties?: Readonly<Record<string, string | number>>\n entry?: GrammarEntry\n prefix?: string\n rawValue?: string\n arbitrary?: boolean\n convenience?: string\n}\n\nexport type CandidateClassification =\n | { kind: 'tamagui'; parsed: ParsedCandidate }\n | { kind: 'passthrough'; reason: string }\n\nconst sizingConveniences = new Set([\n 'full',\n 'auto',\n 'screen',\n 'dvh',\n 'lvh',\n 'svh',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n])\nconst fontGenerics = new Set(['sans', 'serif', 'mono'])\nconst numericPattern = /^\\d+(?:\\.\\d+)?$/\n\n// tailwind v4's named leading scale, as unitless line-height ratios\nexport const tailwindLeadingRatios: Record<string, number> = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2,\n}\n\n// tailwind v4's named tracking scale, in em of the element's font size\nexport const tailwindTrackingEms: Record<string, number> = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1,\n}\nconst extraPrefixes = [\n 'border-x',\n 'border-y',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-s',\n 'rounded-e',\n 'inset-x',\n 'inset-y',\n 'size',\n 'translate',\n]\nconst negativeTokenProps = new Set([\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n 'marginHorizontal',\n 'marginVertical',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'insetInlineStart',\n 'insetInlineEnd',\n 'insetBlockStart',\n 'insetBlockEnd',\n 'start',\n 'end',\n 'zIndex',\n 'x',\n 'y',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'skewX',\n 'skewY',\n 'order',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'letterSpacing',\n 'outlineOffset',\n])\nconst positionSpaceProps = new Set([\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'insetInlineStart',\n 'insetInlineEnd',\n 'insetBlockStart',\n 'insetBlockEnd',\n 'start',\n 'end',\n])\nconst marginSpaceProps = new Set([\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n 'marginHorizontal',\n 'marginVertical',\n])\nconst borderWidthKeywords = new Set(['thin', 'medium', 'thick'])\nconst ambiguousCssKeywords = new Set([\n 'auto',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inherit',\n 'initial',\n 'inset',\n 'none',\n 'outset',\n 'revert',\n 'revert-layer',\n 'ridge',\n 'solid',\n 'unset',\n])\nconst cssLengthUnits =\n '(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)'\nconst cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, 'i')\n\nfunction hasName(names: Names | undefined, name: string): boolean {\n if (!names) return false\n if (Array.isArray(names)) return names.includes(name)\n if (names instanceof Set) return names.has(name)\n return name in names\n}\n\n/**\n * Split a candidate on its unbracketed colons: everything before the last one is a\n * raw modifier, the remainder is the base. `null` for unbalanced brackets or an\n * empty base, which are not candidates at all.\n */\nexport function splitCandidate(\n candidate: string\n): { modifiers: string[]; base: string } | null {\n const parts: string[] = []\n let current = ''\n let bracketDepth = 0\n let escaped = false\n for (const char of candidate) {\n if (escaped) {\n current += char\n escaped = false\n continue\n }\n if (char === '\\\\') {\n current += char\n escaped = true\n continue\n }\n if (char === '[') bracketDepth++\n if (char === ']') bracketDepth--\n if (char === ':' && bracketDepth === 0) {\n parts.push(current)\n current = ''\n } else {\n current += char\n }\n }\n if (!current || bracketDepth !== 0) return null\n return { modifiers: parts, base: current }\n}\n\nconst modifierVocabularyCache = new WeakMap<\n GrammarConfigView,\n CompiledModifierVocabulary\n>()\nconst modifierKindGroup = 5\nconst modifierKindContainer = 6\n\nfunction getModifierVocabulary(config: GrammarConfigView): CompiledModifierVocabulary {\n let vocabulary = modifierVocabularyCache.get(config)\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config)\n modifierVocabularyCache.set(config, vocabulary)\n }\n return vocabulary\n}\n\nfunction modifierKindCode(modifier: string, config: GrammarConfigView): number {\n const vocabulary = getModifierVocabulary(config)\n const exact = vocabulary[modifier]\n if (exact !== undefined) return exact & 7\n if (parseGroupModifier(modifier)) return modifierKindGroup\n const sizeEnd = containerModifierSizeEnd(modifier)\n if (sizeEnd === -1) return 0\n const size = modifier.slice(1, sizeEnd)\n return (vocabulary[size] & 7) === modifierKindMedia &&\n (config.containerSizeNames === undefined || hasName(config.containerSizeNames, size))\n ? modifierKindContainer\n : 0\n}\n\nfunction normalizeModifiers(\n modifiers: readonly string[],\n config: GrammarConfigView\n): string[] | null {\n const normalized: string[] = []\n const seen = new Set<number>()\n for (const modifier of modifiers) {\n const canonical = canonicalClauseModifier(modifier)\n const kind = modifierKindCode(canonical, config)\n if (!kind || seen.has(kind)) return null\n seen.add(kind)\n normalized.push(canonical)\n }\n return normalized\n}\n\nfunction tokenDomain(\n config: GrammarConfigView,\n category: TokenCategory\n): Names | undefined {\n const fallback = propTokenGroupFallbacks[category]\n return (\n config.tokenNames?.[category] ||\n (fallback ? config.tokenNames?.[fallback] : undefined)\n )\n}\n\nfunction hasTokenDomain(config: GrammarConfigView, category: TokenCategory): boolean {\n return tokenDomain(config, category) !== undefined\n}\n\nexport function hasTokenName(\n config: GrammarConfigView,\n category: TokenCategory,\n name: string\n): boolean {\n return resolveTokenName(config, category, name) !== null\n}\n\n// Tailwind spells half-steps as `0.5`; some Tamagui configs use `0-5`.\nexport function decimalHalfTokenAlias(name: string): string | null {\n const match = /^(-?\\d+)\\.5$/.exec(name)\n return match ? `${match[1]}-5` : null\n}\n\nexport function resolveTokenName(\n config: GrammarConfigView,\n category: TokenCategory,\n name: string\n): string | null {\n const names = tokenDomain(config, category)\n if (hasName(names, name)) return name\n const alias = decimalHalfTokenAlias(name)\n return alias !== null && hasName(names, alias) ? alias : null\n}\n\nfunction entriesForProps(props: readonly string[]): GrammarEntry[] {\n const byProp = new Map(grammarEntries.map((entry) => [entry.prop, entry]))\n const out: GrammarEntry[] = []\n for (const prop of props) {\n const entry = byProp.get(prop)\n if (entry) out.push(entry)\n }\n return out\n}\n\nfunction resolveEntries(\n prefix: string,\n config: GrammarConfigView\n): readonly GrammarEntry[] {\n const registered = prefixToEntries[prefix]\n if (prefix === 'text') {\n return entriesForProps(['fontSize', 'textAlign', 'color'])\n }\n if (registered) return registered\n if (prefix === 'border-x' || prefix === 'border-y') {\n const sides = prefix === 'border-x' ? ['Left', 'Right'] : ['Top', 'Bottom']\n return entriesForProps(\n sides.flatMap((side) => [`border${side}Width`, `border${side}Color`])\n )\n }\n if (prefix === 'size') {\n return entriesForProps(sizeUtilityProps).map((entry) => ({\n ...entry,\n tokenCategory: 'size',\n }))\n }\n if (prefix === 'inset-x' || prefix === 'inset-y') {\n return entriesForProps(insetAxisProps[prefix.slice('inset-'.length)])\n }\n if (prefix === 'translate') {\n return entriesForProps(['x', 'y'])\n }\n if (prefix.startsWith('rounded-')) {\n const props = radiusCornerProps[prefix.slice('rounded-'.length)]\n return props ? entriesForProps(props) : []\n }\n const expanded = config.shorthands?.[prefix]\n if (!expanded) return []\n return grammarEntries.filter((entry) => entry.prop === expanded)\n}\n\nfunction findPrefix(base: string, config: GrammarConfigView): string | null {\n const prefixes = new Set(Object.keys(prefixToEntries))\n for (const prefix of extraPrefixes) prefixes.add(prefix)\n for (const shorthand in config.shorthands) prefixes.add(shorthand)\n let found: string | null = null\n for (const prefix of prefixes) {\n if (base.startsWith(`${prefix}-`) && (!found || prefix.length > found.length)) {\n found = prefix\n }\n }\n return found\n}\n\nfunction arbitraryInner(rawValue: string): string | null {\n if (rawValue.length <= 2 || rawValue[0] !== '[' || rawValue.at(-1) !== ']') {\n return null\n }\n const inner = rawValue.slice(1, -1)\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null\n}\n\nfunction arbitraryValueIsBalanced(value: string): boolean {\n const opening = new Set(['(', '[', '{'])\n const matching: Readonly<Record<string, string>> = { ')': '(', ']': '[', '}': '{' }\n const stack: string[] = []\n let quote = ''\n let escaped = false\n for (const char of value) {\n if (escaped) {\n escaped = false\n continue\n }\n if (char === '\\\\') {\n escaped = true\n continue\n }\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n if (opening.has(char)) {\n stack.push(char)\n continue\n }\n const expected = matching[char]\n if (expected && stack.pop() !== expected) return false\n }\n return !escaped && !quote && stack.length === 0\n}\n\nfunction fractionIsValid(value: string): boolean {\n const fraction = /^(\\d+)\\/(\\d+)$/.exec(value)\n return !!fraction && Number(fraction[2]) !== 0\n}\n\nfunction arbitraryTextKind(value: string): 'fontSize' | 'color' | null {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return 'fontSize'\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return 'fontSize'\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith('var(')) return null\n if (\n value.startsWith('#') ||\n /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) ||\n namedCssColors.has(value.toLowerCase())\n ) {\n return 'color'\n }\n // any other bare word is a font size the way Tailwind reads `text-[...]`: a\n // raw fontSize value the converter could not match to a token round-trips\n // here (`fontSize=\"body\"` -> `text-[body]`)\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return 'fontSize'\n return null\n}\n\nfunction isWidthColorPrefix(prefix: string): boolean {\n return prefix.startsWith('border') || prefix === 'outline'\n}\n\nfunction arbitraryBorderKind(value: string): 'width' | 'color' | null {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return 'width'\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return 'width'\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return 'width'\n if (ambiguousCssKeywords.has(value) || value.startsWith('var(')) return null\n if (\n value.startsWith('#') ||\n /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) ||\n /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)\n ) {\n return 'color'\n }\n return null\n}\n\nfunction tokenLookupName(category: TokenCategory, value: string): string {\n if (category !== 'color') return value\n const suffix = splitColorOpacitySuffix(value)\n return suffix.kind === 'none' ? value : suffix.name\n}\n\nfunction chooseEntry(\n entries: readonly GrammarEntry[],\n prefix: string,\n rawValue: string,\n negative: boolean,\n config: GrammarConfigView\n): {\n entry: GrammarEntry\n valueKind: ParsedCandidate['valueKind']\n convenience?: string\n} | null {\n if (getSafeAreaEdge(rawValue)) {\n const entry = entries.find(\n ({ tokenCategory }) =>\n tokenCategory === 'space' ||\n tokenCategory === 'size' ||\n tokenCategory === 'radius' ||\n tokenCategory === 'fontSize' ||\n tokenCategory === 'lineHeight' ||\n tokenCategory === 'letterSpacing'\n )\n if (entry) {\n return { entry, valueKind: 'convenience', convenience: 'safe-area' }\n }\n }\n\n const arbitrary = arbitraryInner(rawValue)\n if (arbitrary !== null) {\n if (!arbitrary) return null\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith('Width'))\n const color = entries.find((entry) => entry.prop.endsWith('Color'))\n const kind = arbitraryBorderKind(decodeArbitrary(arbitrary))\n if (!kind || !width || !color) return null\n return {\n entry: kind === 'width' ? width : color,\n valueKind: 'arbitrary',\n }\n }\n if (prefix === 'text') {\n const kind = arbitraryTextKind(decodeArbitrary(arbitrary))\n const fontSize = entries.find((entry) => entry.prop === 'fontSize')\n const color = entries.find((entry) => entry.prop === 'color')\n if (kind === 'fontSize' && fontSize) {\n return { entry: fontSize, valueKind: 'arbitrary' }\n }\n if (kind === 'color' && color) {\n return { entry: color, valueKind: 'arbitrary' }\n }\n return null\n }\n if (prefix === 'font') {\n return {\n entry: entries.find((entry) => entry.prop === 'fontFamily')!,\n valueKind: 'arbitrary',\n }\n }\n return { entry: entries[0], valueKind: 'arbitrary' }\n }\n\n if (prefix === 'text') {\n const fontSize = entries.find((entry) => entry.prop === 'fontSize')\n if (fontSize && hasTokenName(config, 'fontSize', rawValue)) {\n return { entry: fontSize, valueKind: 'token' }\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find((entry) => entry.prop === 'textAlign')!,\n valueKind: 'enum',\n }\n }\n const color = entries.find((entry) => entry.prop === 'color')\n if (color && rawValue === 'transparent') {\n return { entry: color, valueKind: 'enum' }\n }\n const colorName = tokenLookupName('color', rawValue)\n if (color && hasTokenName(config, 'color', colorName)) {\n return { entry: color, valueKind: 'token' }\n }\n return null\n }\n\n if (prefix === 'font') {\n const fontFamily = entries.find((entry) => entry.prop === 'fontFamily')\n const fontWeight = entries.find((entry) => entry.prop === 'fontWeight')\n if (!fontFamily) return null\n const matchesFamily = hasTokenName(config, 'fontFamily', rawValue)\n const matchesWeight = fontWeight && hasTokenName(config, 'fontWeight', rawValue)\n // a name configured as both a family and a weight is ambiguous, like the\n // border width/color rule above\n if (matchesFamily && matchesWeight) return null\n if (matchesFamily) {\n return { entry: fontFamily, valueKind: 'token' }\n }\n if (matchesWeight) {\n return { entry: fontWeight, valueKind: 'token' }\n }\n return fontGenerics.has(rawValue)\n ? { entry: fontFamily, valueKind: 'convenience', convenience: 'font-generic' }\n : null\n }\n\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith('Width'))\n const color = entries.find((entry) => entry.prop.endsWith('Color'))\n const token = negative ? `-${rawValue}` : rawValue\n const widthCategory = width?.tokenCategory || 'space'\n const matchesWidth = width && hasTokenName(config, widthCategory, token)\n const colorName = tokenLookupName('color', rawValue)\n const matchesColor = color && hasTokenName(config, 'color', colorName)\n if (matchesWidth && matchesColor) return null\n if (matchesWidth) {\n return { entry: width, valueKind: 'token' }\n }\n if (matchesColor) {\n return { entry: color, valueKind: 'token' }\n }\n if (color && rawValue === 'transparent') {\n return { entry: color, valueKind: 'enum' }\n }\n return null\n }\n\n if (prefix === 'flex' && fractionIsValid(rawValue)) {\n const flex = entries.find((entry) => entry.prop === 'flex')\n if (flex) {\n return { entry: flex, valueKind: 'convenience', convenience: 'flex-bundle' }\n }\n }\n\n if (prefix === 'tracking' && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n const letterSpacing = entries.find((entry) => entry.prop === 'letterSpacing')\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: 'convenience',\n convenience: 'tracking-keyword',\n }\n }\n }\n\n if (prefix === 'leading' && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n const lineHeight = entries.find((entry) => entry.prop === 'lineHeight')\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: 'convenience',\n convenience: 'leading-keyword',\n }\n }\n }\n\n if (numericPattern.test(rawValue)) {\n const angle = entries.find((entry) => entry.conveniences?.includes('angle'))\n if (angle) {\n return { entry: angle, valueKind: 'convenience', convenience: 'angle' }\n }\n if (prefix === 'flex') {\n const flex = entries.find((entry) => entry.prop === 'flex')\n if (flex)\n return { entry: flex, valueKind: 'convenience', convenience: 'flex-bundle' }\n }\n if (prefix === 'grow') {\n const grow = entries.find((entry) => entry.prop === 'flexGrow')\n if (grow) return { entry: grow, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'shrink') {\n const shrink = entries.find((entry) => entry.prop === 'flexShrink')\n if (shrink)\n return { entry: shrink, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'line-clamp') {\n const clamp = entries.find((entry) => entry.prop === 'numberOfLines')\n if (clamp) return { entry: clamp, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'leading') {\n const lineHeight = entries.find((entry) => entry.prop === 'lineHeight')\n if (\n lineHeight &&\n (!lineHeight.tokenCategory ||\n !hasTokenName(config, lineHeight.tokenCategory, rawValue))\n ) {\n return {\n entry: lineHeight,\n valueKind: 'convenience',\n convenience: 'integer',\n }\n }\n }\n // grid utilities: grid-cols-3, col-span-2, col-start-1, row-span-3, etc.\n if (\n prefix === 'grid-cols' ||\n prefix === 'col-span' ||\n prefix === 'col-start' ||\n prefix === 'col-end' ||\n prefix === 'row-span' ||\n prefix === 'row-start' ||\n prefix === 'row-end'\n ) {\n const entry = entries[0]\n if (entry) return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n }\n\n for (const entry of entries) {\n if (entry.tokenCategory) {\n if (entry.tokenCategory === 'color' && rawValue === 'transparent') {\n return { entry, valueKind: 'enum' }\n }\n if (entry.tokenCategory === 'radius' && rawValue === 'none') {\n return { entry, valueKind: 'convenience', convenience: 'zero' }\n }\n // Negative zero has the same runtime value as zero. Tailwind emits these\n // candidates, while token maps intentionally do not duplicate a `-0` key.\n const name = negative && rawValue !== '0' ? `-${rawValue}` : rawValue\n const tokenName = tokenLookupName(entry.tokenCategory, name)\n if (hasTokenName(config, entry.tokenCategory, tokenName)) {\n return { entry, valueKind: 'token' }\n }\n if (\n entry.conveniences?.includes('sizing-keyword') &&\n (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))\n ) {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (\n positionSpaceProps.has(entry.prop) &&\n (rawValue === 'full' || rawValue === 'auto' || fractionIsValid(rawValue))\n ) {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (marginSpaceProps.has(entry.prop) && rawValue === 'auto') {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (entry.tokenCategory === 'zIndex' && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n // tailwind spacing is any number times 4px, so h-10.5 needs no token\n if (\n numericPattern.test(rawValue) &&\n (entry.tokenCategory === 'space' ||\n entry.tokenCategory === 'size' ||\n propTokenGroupFallbacks[entry.tokenCategory] === 'size')\n ) {\n return { entry, valueKind: 'convenience', convenience: 'spacing-scale' }\n }\n continue\n }\n if (\n prefix === 'opacity' ||\n prefix === 'scale' ||\n prefix === 'scale-x' ||\n prefix === 'scale-y'\n ) {\n if (numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'percentage' }\n }\n continue\n }\n if (entry.prop === 'zIndex' && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n if (entry.conveniences?.includes('integer') && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n }\n return null\n}\n\nexport function parseCandidate(\n candidate: string,\n config: GrammarConfigView\n): ParsedCandidate | null {\n const split = splitCandidate(candidate)\n if (!split) return null\n const modifiers = normalizeModifiers(split.modifiers, config)\n if (!modifiers) return null\n\n const negative = split.base[0] === '-'\n const core = negative ? split.base.slice(1) : split.base\n const prefix = findPrefix(core, config)\n let dynamic:\n | {\n prefix: string\n rawValue: string\n selected: NonNullable<ReturnType<typeof chooseEntry>>\n }\n | undefined\n if (prefix) {\n const rawValue = core.slice(prefix.length + 1)\n if (rawValue) {\n const entries = resolveEntries(prefix, config)\n const selected = chooseEntry(entries, prefix, rawValue, negative, config)\n if (\n selected &&\n (!negative ||\n selected.convenience === 'tracking-keyword' ||\n (negativeTokenProps.has(selected.entry.prop) &&\n (selected.valueKind === 'token' ||\n (selected.valueKind === 'arbitrary' && selected.entry.prop === 'order') ||\n selected.convenience === 'angle' ||\n selected.convenience === 'percentage' ||\n selected.convenience === 'sizing-keyword' ||\n selected.convenience === 'spacing-scale' ||\n selected.convenience === 'integer')))\n ) {\n dynamic = { prefix, rawValue, selected }\n // An exact configured token owns its spelling before a reserved whole utility. Other\n // dynamic forms defer to the whole utility and are used only when no whole form exists.\n if (selected.valueKind === 'token') {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: 'dynamic',\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience,\n }\n }\n }\n }\n }\n\n const direct = wholeClassUtilities[split.base]\n if (\n !negative &&\n direct &&\n (split.base !== 'shadow' || hasTokenName(config, 'boxShadow', 'sm'))\n ) {\n const convenience = wholeClassConveniences[split.base]\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: 'utility',\n valueKind: convenience ? 'convenience' : 'enum',\n properties: direct,\n convenience,\n negative: false,\n }\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: 'dynamic',\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience,\n }\n }\n return null\n}\n\nexport function classifyCandidate(\n candidate: string,\n config: GrammarConfigView\n): CandidateClassification {\n const parsed = parseCandidate(candidate, config)\n return parsed\n ? { kind: 'tamagui', parsed }\n : { kind: 'passthrough', reason: 'not in the configured Tamagui grammar' }\n}\n\nexport interface FormatCandidateInput {\n prop: string\n value: string\n valueKind: ParsedCandidate['valueKind']\n modifiers?: readonly string[]\n}\n\nfunction tokenValidationConfig(\n entry: GrammarEntry,\n value: string,\n config: GrammarConfigView | undefined\n): GrammarConfigView {\n const tokenNames: Partial<Record<TokenCategory, Names>> = {\n ...config?.tokenNames,\n }\n const category = entry.tokenCategory!\n if (tokenNames[category] === undefined) {\n tokenNames[category] = [tokenLookupName(category, value)]\n }\n for (const other of prefixToEntries[entry.prefix] || []) {\n if (other.tokenCategory && tokenNames[other.tokenCategory] === undefined) {\n tokenNames[other.tokenCategory] = []\n }\n }\n return { ...config, tokenNames }\n}\n\nexport function formatCandidate(\n { prop, value, valueKind, modifiers = [] }: FormatCandidateInput,\n config?: GrammarConfigView\n): string | null {\n const entry = propToGrammarEntry[prop]\n if (!entry) return null\n if (valueKind === 'arbitrary' && value === '') return null\n const normalizedModifiers = normalizeModifiers(modifiers, config || {})\n if (!normalizedModifiers) return null\n\n if (valueKind === 'enum') {\n const whole = standaloneValueProps[prop]?.[value]\n if (whole) {\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${whole}`\n : whole\n if (config) {\n const parsed = parseCandidate(candidate, config)\n if (!parsed?.properties || parsed.properties[prop] !== value) return null\n }\n return candidate\n }\n if (prop === 'fontWeight') {\n const name = fontWeightNames[value]\n if (!name) return null\n const core = `font-${name}`\n if (String(wholeClassUtilities[core]?.fontWeight) !== value) return null\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${core}`\n : core\n if (config) {\n const parsed = parseCandidate(candidate, config)\n if (!parsed?.properties || String(parsed.properties.fontWeight) !== value) {\n return null\n }\n }\n return candidate\n }\n }\n if (!entry.prefix) return null\n if (valueKind === 'token') {\n if (!entry.tokenCategory) return null\n const sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory)\n const lookupName = tokenLookupName(entry.tokenCategory, value)\n if (sourceDomainKnown && !hasTokenName(config!, entry.tokenCategory, lookupName))\n return null\n const colliding = prefixToEntries[entry.prefix].filter(\n (other) => other.prop !== prop && other.tokenCategory\n )\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null\n for (const other of colliding) {\n if (!hasTokenDomain(config, other.tokenCategory!)) return null\n if (hasTokenName(config, other.tokenCategory!, value)) return null\n }\n }\n }\n const formattedValue = valueKind === 'arbitrary' ? `[${encodeArbitrary(value)}]` : value\n const core =\n formattedValue[0] === '-' && formattedValue[1] !== '['\n ? `-${entry.prefix}-${formattedValue.slice(1)}`\n : formattedValue\n ? `${entry.prefix}-${formattedValue}`\n : entry.prefix\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${core}`\n : core\n const whole = wholeClassUtilities[core]\n if (whole) {\n if (valueKind === 'token') {\n if (!config || !hasTokenDomain(config, entry.tokenCategory!)) return null\n } else if (config) {\n const parsed = parseCandidate(candidate, config)\n if (parsed?.kind === 'utility') {\n return parsed.properties &&\n prop in parsed.properties &&\n String(parsed.properties[prop]) === value\n ? candidate\n : null\n }\n return parsed?.entry?.prop === prop && parsed.valueKind === valueKind\n ? candidate\n : null\n } else if (prop in whole && String(whole[prop]) === value) {\n return candidate\n } else {\n return null\n }\n }\n if (valueKind === 'token') {\n if (\n !hasTokenDomain(config || {}, entry.tokenCategory!) &&\n parseCandidate(candidate, config || {})\n ) {\n return null\n }\n const parsed = parseCandidate(candidate, tokenValidationConfig(entry, value, config))\n const parsedValue = parsed?.rawValue\n ? `${parsed.negative ? '-' : ''}${parsed.rawValue}`\n : null\n if (\n parsed?.kind !== 'dynamic' ||\n parsed.entry?.prop !== prop ||\n parsed.valueKind !== 'token' ||\n parsedValue !== value\n ) {\n return null\n }\n return candidate\n }\n const parsed = parseCandidate(candidate, config || {})\n if (!parsed || parsed.entry?.prop !== prop || parsed.valueKind !== valueKind)\n return null\n return candidate\n}\n\nexport function encodeArbitrary(value: string): string {\n let encoded = ''\n for (const char of value) {\n if (char === '\\\\' || char === '_' || char === '[' || char === ']') {\n encoded += `\\\\${char}`\n } else if (/\\s/.test(char)) {\n encoded += '_'\n } else {\n encoded += char\n }\n }\n return encoded\n}\n\nexport function decodeArbitrary(value: string): string {\n let decoded = ''\n for (let index = 0; index < value.length; index++) {\n const char = value[index]\n if (char === '\\\\' && index + 1 < value.length) {\n decoded += value[++index]\n } else {\n decoded += char === '_' ? ' ' : char\n }\n }\n return decoded\n}\n"
9
+ "import { namedCssColors } from '../runtime/namedCssColors'\nimport { propTokenGroupFallbacks } from './config'\nimport {\n grammarEntries,\n fontWeightNames,\n insetAxisProps,\n prefixToEntries,\n propToGrammarEntry,\n radiusCornerProps,\n sizeUtilityProps,\n standaloneValueProps,\n textAlignKeywords,\n wholeClassConveniences,\n wholeClassUtilities,\n type GrammarEntry,\n type TokenCategory,\n} from './registry'\nimport {\n canonicalClauseModifier,\n containerModifierSizeEnd,\n parseGroupModifier,\n} from '../runtime/clauseIdentity'\nimport {\n compileModifierVocabulary,\n modifierKindMedia,\n type CompiledModifierVocabulary,\n} from '../runtime/modifierVocabulary'\nimport { splitColorOpacitySuffix } from '../runtime/colorOpacity'\nimport { getSafeAreaEdge } from '../runtime/safeAreaVariables'\n\ntype Names = readonly string[] | ReadonlySet<string> | Readonly<Record<string, unknown>>\n\nexport interface GrammarConfigView {\n shorthands?: Readonly<Record<string, string>>\n mediaNames?: Names\n themeNames?: Names\n platformNames?: Names\n tokenNames?: Partial<Record<TokenCategory, Names>>\n /**\n * the media keys that measure a size, so `@key:` is a meaningful container\n * query. derived by createGrammarConfigView when the media input carries\n * query information; absent means UNKNOWN, and the modifier registry then\n * refuses container claims with a diagnostic rather than over-claiming\n */\n containerSizeNames?: readonly string[]\n}\n\nexport interface ParsedCandidate {\n candidate: string\n base: string\n modifiers: readonly string[]\n negative: boolean\n kind: 'utility' | 'dynamic'\n valueKind: 'token' | 'arbitrary' | 'enum' | 'convenience'\n properties?: Readonly<Record<string, string | number>>\n entry?: GrammarEntry\n prefix?: string\n rawValue?: string\n arbitrary?: boolean\n convenience?: string\n}\n\nexport type CandidateClassification =\n | { kind: 'tamagui'; parsed: ParsedCandidate }\n | { kind: 'passthrough'; reason: string }\n\nconst sizingConveniences = new Set([\n 'full',\n 'auto',\n 'screen',\n 'dvh',\n 'lvh',\n 'svh',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n])\nconst fontGenerics = new Set(['sans', 'serif', 'mono'])\nconst numericPattern = /^\\d+(?:\\.\\d+)?$/\n\n// tailwind v4's named leading scale, as unitless line-height ratios\nexport const tailwindLeadingRatios: Record<string, number> = {\n none: 1,\n tight: 1.25,\n snug: 1.375,\n normal: 1.5,\n relaxed: 1.625,\n loose: 2,\n}\n\n// tailwind v4's named tracking scale, in em of the element's font size\nexport const tailwindTrackingEms: Record<string, number> = {\n tighter: -0.05,\n tight: -0.025,\n normal: 0,\n wide: 0.025,\n wider: 0.05,\n widest: 0.1,\n}\nconst extraPrefixes = [\n 'border-x',\n 'border-y',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-s',\n 'rounded-e',\n 'inset-x',\n 'inset-y',\n 'size',\n 'translate',\n]\nconst negativeTokenProps = new Set([\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n 'marginHorizontal',\n 'marginVertical',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'insetInlineStart',\n 'insetInlineEnd',\n 'insetBlockStart',\n 'insetBlockEnd',\n 'start',\n 'end',\n 'zIndex',\n 'x',\n 'y',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'skewX',\n 'skewY',\n 'order',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'letterSpacing',\n 'outlineOffset',\n])\nconst positionSpaceProps = new Set([\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'insetInlineStart',\n 'insetInlineEnd',\n 'insetBlockStart',\n 'insetBlockEnd',\n 'start',\n 'end',\n])\nconst marginSpaceProps = new Set([\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n 'marginHorizontal',\n 'marginVertical',\n])\nconst borderWidthKeywords = new Set(['thin', 'medium', 'thick'])\nconst ambiguousCssKeywords = new Set([\n 'auto',\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inherit',\n 'initial',\n 'inset',\n 'none',\n 'outset',\n 'revert',\n 'revert-layer',\n 'ridge',\n 'solid',\n 'unset',\n])\nconst cssLengthUnits =\n '(?:px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|svw|svh|svmin|svmax|lvw|lvh|lvmin|lvmax|dvw|dvh|dvmin|dvmax|cm|mm|q|in|pt|pc)'\nconst cssLengthPattern = new RegExp(`^-?(?:\\\\d+|\\\\d*\\\\.\\\\d+)${cssLengthUnits}$`, 'i')\n\nfunction hasName(names: Names | undefined, name: string): boolean {\n if (!names) return false\n if (Array.isArray(names)) return names.includes(name)\n if (names instanceof Set) return names.has(name)\n return name in names\n}\n\n/**\n * Split a candidate on its unbracketed colons: everything before the last one is a\n * raw modifier, the remainder is the base. `null` for unbalanced brackets or an\n * empty base, which are not candidates at all.\n */\nexport function splitCandidate(\n candidate: string\n): { modifiers: string[]; base: string } | null {\n const parts: string[] = []\n let current = ''\n let bracketDepth = 0\n let escaped = false\n for (const char of candidate) {\n if (escaped) {\n current += char\n escaped = false\n continue\n }\n if (char === '\\\\') {\n current += char\n escaped = true\n continue\n }\n if (char === '[') bracketDepth++\n if (char === ']') bracketDepth--\n if (char === ':' && bracketDepth === 0) {\n parts.push(current)\n current = ''\n } else {\n current += char\n }\n }\n if (!current || bracketDepth !== 0) return null\n return { modifiers: parts, base: current }\n}\n\nconst modifierVocabularyCache = new WeakMap<\n GrammarConfigView,\n CompiledModifierVocabulary\n>()\nconst modifierKindGroup = 5\nconst modifierKindContainer = 6\n\nfunction getModifierVocabulary(config: GrammarConfigView): CompiledModifierVocabulary {\n let vocabulary = modifierVocabularyCache.get(config)\n if (!vocabulary) {\n vocabulary = compileModifierVocabulary(config)\n modifierVocabularyCache.set(config, vocabulary)\n }\n return vocabulary\n}\n\nfunction modifierKindCode(modifier: string, config: GrammarConfigView): number {\n const vocabulary = getModifierVocabulary(config)\n const exact = vocabulary[modifier]\n if (exact !== undefined) return exact & 7\n if (parseGroupModifier(modifier)) return modifierKindGroup\n const sizeEnd = containerModifierSizeEnd(modifier)\n if (sizeEnd === -1) return 0\n const size = modifier.slice(1, sizeEnd)\n return (vocabulary[size] & 7) === modifierKindMedia &&\n (config.containerSizeNames === undefined || hasName(config.containerSizeNames, size))\n ? modifierKindContainer\n : 0\n}\n\nfunction normalizeModifiers(\n modifiers: readonly string[],\n config: GrammarConfigView\n): string[] | null {\n const normalized: string[] = []\n const seen = new Set<number>()\n for (const modifier of modifiers) {\n const canonical = canonicalClauseModifier(modifier)\n const kind = modifierKindCode(canonical, config)\n if (!kind || seen.has(kind)) return null\n seen.add(kind)\n normalized.push(canonical)\n }\n return normalized\n}\n\nfunction tokenDomain(\n config: GrammarConfigView,\n category: TokenCategory\n): Names | undefined {\n const fallback = propTokenGroupFallbacks[category]\n return (\n config.tokenNames?.[category] ||\n (fallback ? config.tokenNames?.[fallback] : undefined)\n )\n}\n\nfunction hasTokenDomain(config: GrammarConfigView, category: TokenCategory): boolean {\n return tokenDomain(config, category) !== undefined\n}\n\nexport function hasTokenName(\n config: GrammarConfigView,\n category: TokenCategory,\n name: string\n): boolean {\n return resolveTokenName(config, category, name) !== null\n}\n\n// Tailwind spells half-steps as `0.5`; some Tamagui configs use `0-5`.\nexport function decimalHalfTokenAlias(name: string): string | null {\n const match = /^(-?\\d+)\\.5$/.exec(name)\n return match ? `${match[1]}-5` : null\n}\n\nexport function resolveTokenName(\n config: GrammarConfigView,\n category: TokenCategory,\n name: string\n): string | null {\n const names = tokenDomain(config, category)\n if (hasName(names, name)) return name\n const alias = decimalHalfTokenAlias(name)\n return alias !== null && hasName(names, alias) ? alias : null\n}\n\nfunction entriesForProps(props: readonly string[]): GrammarEntry[] {\n const byProp = new Map(grammarEntries.map((entry) => [entry.prop, entry]))\n const out: GrammarEntry[] = []\n for (const prop of props) {\n const entry = byProp.get(prop)\n if (entry) out.push(entry)\n }\n return out\n}\n\nfunction resolveEntries(\n prefix: string,\n config: GrammarConfigView\n): readonly GrammarEntry[] {\n const registered = prefixToEntries[prefix]\n if (prefix === 'text') {\n return entriesForProps(['fontSize', 'textAlign', 'color'])\n }\n if (registered) return registered\n if (prefix === 'border-x' || prefix === 'border-y') {\n const sides = prefix === 'border-x' ? ['Left', 'Right'] : ['Top', 'Bottom']\n return entriesForProps(\n sides.flatMap((side) => [`border${side}Width`, `border${side}Color`])\n )\n }\n if (prefix === 'size') {\n return entriesForProps(sizeUtilityProps).map((entry) => ({\n ...entry,\n tokenCategory: 'size',\n }))\n }\n if (prefix === 'inset-x' || prefix === 'inset-y') {\n return entriesForProps(insetAxisProps[prefix.slice('inset-'.length)])\n }\n if (prefix === 'translate') {\n return entriesForProps(['x', 'y'])\n }\n if (prefix.startsWith('rounded-')) {\n const props = radiusCornerProps[prefix.slice('rounded-'.length)]\n return props ? entriesForProps(props) : []\n }\n const expanded = config.shorthands?.[prefix]\n if (!expanded) return []\n return grammarEntries.filter((entry) => entry.prop === expanded)\n}\n\nfunction findPrefix(base: string, config: GrammarConfigView): string | null {\n const prefixes = new Set(Object.keys(prefixToEntries))\n for (const prefix of extraPrefixes) prefixes.add(prefix)\n for (const shorthand in config.shorthands) prefixes.add(shorthand)\n let found: string | null = null\n for (const prefix of prefixes) {\n if (base.startsWith(`${prefix}-`) && (!found || prefix.length > found.length)) {\n found = prefix\n }\n }\n return found\n}\n\nfunction arbitraryInner(rawValue: string): string | null {\n if (rawValue.length <= 2 || rawValue[0] !== '[' || rawValue.at(-1) !== ']') {\n return null\n }\n const inner = rawValue.slice(1, -1)\n return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null\n}\n\nfunction arbitraryValueIsBalanced(value: string): boolean {\n const opening = new Set(['(', '[', '{'])\n const matching: Readonly<Record<string, string>> = { ')': '(', ']': '[', '}': '{' }\n const stack: string[] = []\n let quote = ''\n let escaped = false\n for (const char of value) {\n if (escaped) {\n escaped = false\n continue\n }\n if (char === '\\\\') {\n escaped = true\n continue\n }\n if (quote) {\n if (char === quote) quote = ''\n continue\n }\n if (char === '\"' || char === \"'\") {\n quote = char\n continue\n }\n if (opening.has(char)) {\n stack.push(char)\n continue\n }\n const expected = matching[char]\n if (expected && stack.pop() !== expected) return false\n }\n return !escaped && !quote && stack.length === 0\n}\n\nfunction fractionIsValid(value: string): boolean {\n const fraction = /^(\\d+)\\/(\\d+)$/.exec(value)\n return !!fraction && Number(fraction[2]) !== 0\n}\n\nfunction arbitraryTextKind(value: string): 'fontSize' | 'color' | null {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return 'fontSize'\n if (cssLengthPattern.test(value) || /^(?:calc|min|max|clamp)\\(/.test(value)) {\n return 'fontSize'\n }\n if (ambiguousCssKeywords.has(value) || value.startsWith('var(')) return null\n if (\n value.startsWith('#') ||\n /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) ||\n namedCssColors.has(value.toLowerCase())\n ) {\n return 'color'\n }\n // any other bare word is a font size the way Tailwind reads `text-[...]`: a\n // raw fontSize value the converter could not match to a token round-trips\n // here (`fontSize=\"body\"` -> `text-[body]`)\n if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return 'fontSize'\n return null\n}\n\nfunction isWidthColorPrefix(prefix: string): boolean {\n return prefix.startsWith('border') || prefix === 'outline'\n}\n\nfunction arbitraryBorderKind(value: string): 'width' | 'color' | null {\n if (/^-?(?:\\d+|\\d*\\.\\d+)$/.test(value)) return 'width'\n if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return 'width'\n if (/^(?:calc|min|max|clamp)\\(/.test(value)) return 'width'\n if (ambiguousCssKeywords.has(value) || value.startsWith('var(')) return null\n if (\n value.startsWith('#') ||\n /^(?:rgb|hsl|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\\(/.test(value) ||\n /^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)\n ) {\n return 'color'\n }\n return null\n}\n\nfunction tokenLookupName(category: TokenCategory, value: string): string {\n if (category !== 'color') return value\n const suffix = splitColorOpacitySuffix(value)\n return suffix.kind === 'none' ? value : suffix.name\n}\n\nfunction chooseEntry(\n entries: readonly GrammarEntry[],\n prefix: string,\n rawValue: string,\n negative: boolean,\n config: GrammarConfigView\n): {\n entry: GrammarEntry\n valueKind: ParsedCandidate['valueKind']\n convenience?: string\n} | null {\n if (getSafeAreaEdge(rawValue)) {\n const entry = entries.find(\n ({ tokenCategory }) =>\n tokenCategory === 'space' ||\n tokenCategory === 'size' ||\n tokenCategory === 'radius' ||\n tokenCategory === 'fontSize' ||\n tokenCategory === 'lineHeight' ||\n tokenCategory === 'letterSpacing'\n )\n if (entry) {\n return { entry, valueKind: 'convenience', convenience: 'safe-area' }\n }\n }\n\n const arbitrary = arbitraryInner(rawValue)\n if (arbitrary !== null) {\n if (!arbitrary) return null\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith('Width'))\n const color = entries.find((entry) => entry.prop.endsWith('Color'))\n const kind = arbitraryBorderKind(decodeArbitrary(arbitrary))\n if (!kind || !width || !color) return null\n return {\n entry: kind === 'width' ? width : color,\n valueKind: 'arbitrary',\n }\n }\n if (prefix === 'text') {\n const kind = arbitraryTextKind(decodeArbitrary(arbitrary))\n const fontSize = entries.find((entry) => entry.prop === 'fontSize')\n const color = entries.find((entry) => entry.prop === 'color')\n if (kind === 'fontSize' && fontSize) {\n return { entry: fontSize, valueKind: 'arbitrary' }\n }\n if (kind === 'color' && color) {\n return { entry: color, valueKind: 'arbitrary' }\n }\n return null\n }\n if (prefix === 'font') {\n return {\n entry: entries.find((entry) => entry.prop === 'fontFamily')!,\n valueKind: 'arbitrary',\n }\n }\n return { entry: entries[0], valueKind: 'arbitrary' }\n }\n\n if (prefix === 'text') {\n const fontSize = entries.find((entry) => entry.prop === 'fontSize')\n if (fontSize && hasTokenName(config, 'fontSize', rawValue)) {\n return { entry: fontSize, valueKind: 'token' }\n }\n if (textAlignKeywords.has(rawValue)) {\n return {\n entry: entries.find((entry) => entry.prop === 'textAlign')!,\n valueKind: 'enum',\n }\n }\n const color = entries.find((entry) => entry.prop === 'color')\n if (color && rawValue === 'transparent') {\n return { entry: color, valueKind: 'enum' }\n }\n const colorName = tokenLookupName('color', rawValue)\n if (color && hasTokenName(config, 'color', colorName)) {\n return { entry: color, valueKind: 'token' }\n }\n return null\n }\n\n if (prefix === 'font') {\n const fontFamily = entries.find((entry) => entry.prop === 'fontFamily')\n const fontWeight = entries.find((entry) => entry.prop === 'fontWeight')\n if (!fontFamily) return null\n const matchesFamily = hasTokenName(config, 'fontFamily', rawValue)\n const matchesWeight = fontWeight && hasTokenName(config, 'fontWeight', rawValue)\n // a name configured as both a family and a weight is ambiguous, like the\n // border width/color rule above\n if (matchesFamily && matchesWeight) return null\n if (matchesFamily) {\n return { entry: fontFamily, valueKind: 'token' }\n }\n if (matchesWeight) {\n return { entry: fontWeight, valueKind: 'token' }\n }\n return fontGenerics.has(rawValue)\n ? { entry: fontFamily, valueKind: 'convenience', convenience: 'font-generic' }\n : null\n }\n\n if (isWidthColorPrefix(prefix)) {\n const width = entries.find((entry) => entry.prop.endsWith('Width'))\n const color = entries.find((entry) => entry.prop.endsWith('Color'))\n const token = negative ? `-${rawValue}` : rawValue\n const widthCategory = width?.tokenCategory || 'space'\n const matchesWidth = width && hasTokenName(config, widthCategory, token)\n const colorName = tokenLookupName('color', rawValue)\n const matchesColor = color && hasTokenName(config, 'color', colorName)\n if (matchesWidth && matchesColor) return null\n if (matchesWidth) {\n return { entry: width, valueKind: 'token' }\n }\n if (matchesColor) {\n return { entry: color, valueKind: 'token' }\n }\n if (color && rawValue === 'transparent') {\n return { entry: color, valueKind: 'enum' }\n }\n return null\n }\n\n if (prefix === 'flex' && fractionIsValid(rawValue)) {\n const flex = entries.find((entry) => entry.prop === 'flex')\n if (flex) {\n return { entry: flex, valueKind: 'convenience', convenience: 'flex-bundle' }\n }\n }\n\n if (prefix === 'tracking' && Object.hasOwn(tailwindTrackingEms, rawValue)) {\n const letterSpacing = entries.find((entry) => entry.prop === 'letterSpacing')\n if (letterSpacing) {\n return {\n entry: letterSpacing,\n valueKind: 'convenience',\n convenience: 'tracking-keyword',\n }\n }\n }\n\n if (prefix === 'leading' && Object.hasOwn(tailwindLeadingRatios, rawValue)) {\n const lineHeight = entries.find((entry) => entry.prop === 'lineHeight')\n if (lineHeight) {\n return {\n entry: lineHeight,\n valueKind: 'convenience',\n convenience: 'leading-keyword',\n }\n }\n }\n\n if (numericPattern.test(rawValue)) {\n const angle = entries.find((entry) => entry.conveniences?.includes('angle'))\n if (angle) {\n return { entry: angle, valueKind: 'convenience', convenience: 'angle' }\n }\n if (prefix === 'flex') {\n const flex = entries.find((entry) => entry.prop === 'flex')\n if (flex)\n return { entry: flex, valueKind: 'convenience', convenience: 'flex-bundle' }\n }\n if (prefix === 'grow') {\n const grow = entries.find((entry) => entry.prop === 'flexGrow')\n if (grow) return { entry: grow, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'shrink') {\n const shrink = entries.find((entry) => entry.prop === 'flexShrink')\n if (shrink)\n return { entry: shrink, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'line-clamp') {\n const clamp = entries.find((entry) => entry.prop === 'numberOfLines')\n if (clamp) return { entry: clamp, valueKind: 'convenience', convenience: 'integer' }\n }\n if (prefix === 'leading') {\n const lineHeight = entries.find((entry) => entry.prop === 'lineHeight')\n if (\n lineHeight &&\n (!lineHeight.tokenCategory ||\n !hasTokenName(config, lineHeight.tokenCategory, rawValue))\n ) {\n return {\n entry: lineHeight,\n valueKind: 'convenience',\n convenience: 'integer',\n }\n }\n }\n // grid utilities: grid-cols-3, col-span-2, col-start-1, row-span-3, etc.\n if (\n prefix === 'grid-cols' ||\n prefix === 'col-span' ||\n prefix === 'col-start' ||\n prefix === 'col-end' ||\n prefix === 'row-span' ||\n prefix === 'row-start' ||\n prefix === 'row-end'\n ) {\n const entry = entries[0]\n if (entry) return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n }\n\n for (const entry of entries) {\n if (entry.tokenCategory) {\n if (entry.tokenCategory === 'color' && rawValue === 'transparent') {\n return { entry, valueKind: 'enum' }\n }\n if (entry.tokenCategory === 'radius' && rawValue === 'none') {\n return { entry, valueKind: 'convenience', convenience: 'zero' }\n }\n // Negative zero has the same runtime value as zero. Tailwind emits these\n // candidates, while token maps intentionally do not duplicate a `-0` key.\n const name = negative && rawValue !== '0' ? `-${rawValue}` : rawValue\n const tokenName = tokenLookupName(entry.tokenCategory, name)\n if (hasTokenName(config, entry.tokenCategory, tokenName)) {\n return { entry, valueKind: 'token' }\n }\n if (\n entry.conveniences?.includes('sizing-keyword') &&\n (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))\n ) {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (\n positionSpaceProps.has(entry.prop) &&\n (rawValue === 'full' || rawValue === 'auto' || fractionIsValid(rawValue))\n ) {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (marginSpaceProps.has(entry.prop) && rawValue === 'auto') {\n return { entry, valueKind: 'convenience', convenience: 'sizing-keyword' }\n }\n if (entry.tokenCategory === 'zIndex' && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n // tailwind spacing is any number times 4px, so h-10.5 needs no token\n if (\n numericPattern.test(rawValue) &&\n (entry.tokenCategory === 'space' ||\n entry.tokenCategory === 'size' ||\n propTokenGroupFallbacks[entry.tokenCategory] === 'size')\n ) {\n return { entry, valueKind: 'convenience', convenience: 'spacing-scale' }\n }\n continue\n }\n if (\n prefix === 'opacity' ||\n prefix === 'scale' ||\n prefix === 'scale-x' ||\n prefix === 'scale-y'\n ) {\n if (numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'percentage' }\n }\n continue\n }\n if (entry.prop === 'zIndex' && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n if (entry.conveniences?.includes('integer') && numericPattern.test(rawValue)) {\n return { entry, valueKind: 'convenience', convenience: 'integer' }\n }\n }\n return null\n}\n\nexport function parseCandidate(\n candidate: string,\n config: GrammarConfigView\n): ParsedCandidate | null {\n const split = splitCandidate(candidate)\n if (!split) return null\n const modifiers = normalizeModifiers(split.modifiers, config)\n if (!modifiers) return null\n\n const negative = split.base[0] === '-'\n const core = negative ? split.base.slice(1) : split.base\n const prefix = findPrefix(core, config)\n let dynamic:\n | {\n prefix: string\n rawValue: string\n selected: NonNullable<ReturnType<typeof chooseEntry>>\n }\n | undefined\n if (prefix) {\n const rawValue = core.slice(prefix.length + 1)\n if (rawValue) {\n const entries = resolveEntries(prefix, config)\n const selected = chooseEntry(entries, prefix, rawValue, negative, config)\n if (\n selected &&\n (!negative ||\n selected.convenience === 'tracking-keyword' ||\n (negativeTokenProps.has(selected.entry.prop) &&\n (selected.valueKind === 'token' ||\n (selected.valueKind === 'arbitrary' && selected.entry.prop === 'order') ||\n selected.convenience === 'angle' ||\n selected.convenience === 'percentage' ||\n selected.convenience === 'sizing-keyword' ||\n selected.convenience === 'spacing-scale' ||\n selected.convenience === 'integer')))\n ) {\n dynamic = { prefix, rawValue, selected }\n // An exact configured token owns its spelling before a reserved whole utility. Other\n // dynamic forms defer to the whole utility and are used only when no whole form exists.\n if (selected.valueKind === 'token') {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: 'dynamic',\n prefix,\n rawValue,\n arbitrary: arbitraryInner(rawValue) !== null,\n entry: selected.entry,\n valueKind: selected.valueKind,\n convenience: selected.convenience,\n }\n }\n }\n }\n }\n\n const direct = wholeClassUtilities[split.base]\n if (\n !negative &&\n direct &&\n (split.base !== 'shadow' || hasTokenName(config, 'boxShadow', 'sm'))\n ) {\n const convenience = wholeClassConveniences[split.base]\n return {\n candidate,\n base: split.base,\n modifiers,\n kind: 'utility',\n valueKind: convenience ? 'convenience' : 'enum',\n properties: direct,\n convenience,\n negative: false,\n }\n }\n if (dynamic) {\n return {\n candidate,\n base: split.base,\n modifiers,\n negative,\n kind: 'dynamic',\n prefix: dynamic.prefix,\n rawValue: dynamic.rawValue,\n arbitrary: arbitraryInner(dynamic.rawValue) !== null,\n entry: dynamic.selected.entry,\n valueKind: dynamic.selected.valueKind,\n convenience: dynamic.selected.convenience,\n }\n }\n return null\n}\n\nexport function classifyCandidate(\n candidate: string,\n config: GrammarConfigView\n): CandidateClassification {\n const parsed = parseCandidate(candidate, config)\n return parsed\n ? { kind: 'tamagui', parsed }\n : { kind: 'passthrough', reason: 'not in the configured Tamagui grammar' }\n}\n\nexport interface FormatCandidateInput {\n prop: string\n value: string\n valueKind: ParsedCandidate['valueKind']\n modifiers?: readonly string[]\n}\n\nfunction tokenValidationConfig(\n entry: GrammarEntry,\n value: string,\n config: GrammarConfigView | undefined\n): GrammarConfigView {\n const tokenNames: Partial<Record<TokenCategory, Names>> = {\n ...config?.tokenNames,\n }\n const category = entry.tokenCategory!\n if (tokenNames[category] === undefined) {\n tokenNames[category] = [tokenLookupName(category, value)]\n }\n for (const other of prefixToEntries[entry.prefix] || []) {\n if (other.tokenCategory && tokenNames[other.tokenCategory] === undefined) {\n tokenNames[other.tokenCategory] = []\n }\n }\n return { ...config, tokenNames }\n}\n\nexport function formatCandidate(\n { prop, value, valueKind, modifiers = [] }: FormatCandidateInput,\n config?: GrammarConfigView\n): string | null {\n const entry = propToGrammarEntry[prop]\n if (!entry) return null\n if (valueKind === 'arbitrary' && value === '') return null\n const normalizedModifiers = normalizeModifiers(modifiers, config || {})\n if (!normalizedModifiers) return null\n\n if (valueKind === 'enum') {\n const whole = standaloneValueProps[prop]?.[value]\n if (whole) {\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${whole}`\n : whole\n if (config) {\n const parsed = parseCandidate(candidate, config)\n if (!parsed?.properties || parsed.properties[prop] !== value) return null\n }\n return candidate\n }\n if (prop === 'fontWeight') {\n const name = fontWeightNames[value]\n if (!name) return null\n const core = `font-${name}`\n if (String(wholeClassUtilities[core]?.fontWeight) !== value) return null\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${core}`\n : core\n if (config) {\n const parsed = parseCandidate(candidate, config)\n if (!parsed?.properties || String(parsed.properties.fontWeight) !== value) {\n return null\n }\n }\n return candidate\n }\n }\n if (!entry.prefix) return null\n if (valueKind === 'token') {\n if (!entry.tokenCategory) return null\n const sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory)\n const lookupName = tokenLookupName(entry.tokenCategory, value)\n if (sourceDomainKnown && !hasTokenName(config!, entry.tokenCategory, lookupName))\n return null\n const colliding = prefixToEntries[entry.prefix].filter(\n (other) => other.prop !== prop && other.tokenCategory\n )\n if (colliding.length) {\n if (!config || !sourceDomainKnown) return null\n for (const other of colliding) {\n if (!hasTokenDomain(config, other.tokenCategory!)) return null\n if (hasTokenName(config, other.tokenCategory!, value)) return null\n }\n }\n }\n const formattedValue = valueKind === 'arbitrary' ? `[${encodeArbitrary(value)}]` : value\n const core =\n formattedValue[0] === '-' && formattedValue[1] !== '['\n ? `-${entry.prefix}-${formattedValue.slice(1)}`\n : formattedValue\n ? `${entry.prefix}-${formattedValue}`\n : entry.prefix\n const candidate = normalizedModifiers.length\n ? `${normalizedModifiers.join(':')}:${core}`\n : core\n const whole = wholeClassUtilities[core]\n if (whole) {\n if (valueKind === 'token') {\n if (!config || !hasTokenDomain(config, entry.tokenCategory!)) return null\n } else if (config) {\n const parsed = parseCandidate(candidate, config)\n if (parsed?.kind === 'utility') {\n return parsed.properties &&\n prop in parsed.properties &&\n String(parsed.properties[prop]) === value\n ? candidate\n : null\n }\n return parsed?.entry?.prop === prop && parsed.valueKind === valueKind\n ? candidate\n : null\n } else if (prop in whole && String(whole[prop]) === value) {\n return candidate\n } else {\n return null\n }\n }\n if (valueKind === 'token') {\n // a numeric spacing-scale parse is the same class a token would spell, so only other parses are ambiguous\n const untokened = !hasTokenDomain(config || {}, entry.tokenCategory!)\n ? parseCandidate(candidate, config || {})\n : null\n if (untokened && untokened.convenience !== 'spacing-scale') {\n return null\n }\n const parsed = parseCandidate(candidate, tokenValidationConfig(entry, value, config))\n const parsedValue = parsed?.rawValue\n ? `${parsed.negative ? '-' : ''}${parsed.rawValue}`\n : null\n if (\n parsed?.kind !== 'dynamic' ||\n parsed.entry?.prop !== prop ||\n parsed.valueKind !== 'token' ||\n parsedValue !== value\n ) {\n return null\n }\n return candidate\n }\n const parsed = parseCandidate(candidate, config || {})\n if (!parsed || parsed.entry?.prop !== prop || parsed.valueKind !== valueKind)\n return null\n return candidate\n}\n\nexport function encodeArbitrary(value: string): string {\n let encoded = ''\n for (const char of value) {\n if (char === '\\\\' || char === '_' || char === '[' || char === ']') {\n encoded += `\\\\${char}`\n } else if (/\\s/.test(char)) {\n encoded += '_'\n } else {\n encoded += char\n }\n }\n return encoded\n}\n\nexport function decodeArbitrary(value: string): string {\n let decoded = ''\n for (let index = 0; index < value.length; index++) {\n const char = value[index]\n if (char === '\\\\' && index + 1 < value.length) {\n decoded += value[++index]\n } else {\n decoded += char === '_' ? ' ' : char\n }\n }\n return decoded\n}\n"
10
10
  ]
11
11
  }