@tamagui/style-grammar 3.0.0-beta.924.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/cjs/ast/payloadShape.cjs +45 -17
  2. package/dist/cjs/ast/payloadShape.native.cjs +45 -17
  3. package/dist/cjs/ast/payloadShape.native.js +45 -17
  4. package/dist/cjs/ast/payloadShape.native.js.map +1 -1
  5. package/dist/cjs/ast/resolvePayload.cjs +16 -9
  6. package/dist/cjs/ast/resolvePayload.native.cjs +16 -9
  7. package/dist/cjs/ast/resolvePayload.native.js +16 -9
  8. package/dist/cjs/ast/resolvePayload.native.js.map +1 -1
  9. package/dist/cjs/programs/lowerProgram.cjs +2 -2
  10. package/dist/cjs/programs/lowerProgram.native.cjs +2 -2
  11. package/dist/cjs/programs/lowerProgram.native.js +2 -2
  12. package/dist/cjs/programs/lowerProgram.native.js.map +1 -1
  13. package/dist/cjs/runtime/clauseIdentity.cjs +9 -28
  14. package/dist/cjs/runtime/clauseIdentity.native.cjs +9 -28
  15. package/dist/cjs/runtime/clauseIdentity.native.js +9 -28
  16. package/dist/cjs/runtime/clauseIdentity.native.js.map +1 -1
  17. package/dist/cjs/runtime/clausePrecedence.cjs +2 -2
  18. package/dist/cjs/runtime/clausePrecedence.native.cjs +3 -10
  19. package/dist/cjs/runtime/clausePrecedence.native.js +3 -10
  20. package/dist/cjs/runtime/clausePrecedence.native.js.map +1 -1
  21. package/dist/cjs/runtime/modifierVocabulary.native.cjs +1 -8
  22. package/dist/cjs/runtime/modifierVocabulary.native.js +1 -8
  23. package/dist/cjs/runtime/modifierVocabulary.native.js.map +1 -1
  24. package/dist/cjs/runtime/scanFlatValue.cjs +58 -7
  25. package/dist/cjs/runtime/scanFlatValue.native.cjs +58 -7
  26. package/dist/cjs/runtime/scanFlatValue.native.js +58 -7
  27. package/dist/cjs/runtime/scanFlatValue.native.js.map +1 -1
  28. package/dist/cjs/runtime/spring.cjs +123 -0
  29. package/dist/cjs/runtime/spring.native.cjs +131 -0
  30. package/dist/cjs/runtime/spring.native.js +133 -0
  31. package/dist/cjs/runtime/spring.native.js.map +1 -0
  32. package/dist/cjs/runtime/stateModifiers.cjs +23 -1
  33. package/dist/cjs/runtime/stateModifiers.native.cjs +23 -1
  34. package/dist/cjs/runtime/stateModifiers.native.js +23 -1
  35. package/dist/cjs/runtime/stateModifiers.native.js.map +1 -1
  36. package/dist/cjs/runtime/tokenCategories.cjs +3 -0
  37. package/dist/cjs/runtime/tokenCategories.native.cjs +3 -0
  38. package/dist/cjs/runtime/tokenCategories.native.js +3 -0
  39. package/dist/cjs/runtime/tokenCategories.native.js.map +1 -1
  40. package/dist/cjs/runtime/unitlessNumbers.cjs +0 -5
  41. package/dist/cjs/runtime/unitlessNumbers.native.cjs +0 -5
  42. package/dist/cjs/runtime/unitlessNumbers.native.js +0 -5
  43. package/dist/cjs/runtime/unitlessNumbers.native.js.map +1 -1
  44. package/dist/cjs/runtime.cjs +11 -0
  45. package/dist/cjs/runtime.native.cjs +11 -0
  46. package/dist/cjs/runtime.native.js +11 -0
  47. package/dist/cjs/runtime.native.js.map +1 -1
  48. package/dist/cjs/shorthands/transition.cjs +111 -36
  49. package/dist/cjs/shorthands/transition.native.cjs +113 -36
  50. package/dist/cjs/shorthands/transition.native.js +113 -36
  51. package/dist/cjs/shorthands/transition.native.js.map +1 -1
  52. package/dist/cjs/shorthands/transitionAlign.cjs +13 -10
  53. package/dist/cjs/shorthands/transitionAlign.native.cjs +14 -11
  54. package/dist/cjs/shorthands/transitionAlign.native.js +14 -11
  55. package/dist/cjs/shorthands/transitionAlign.native.js.map +1 -1
  56. package/dist/cjs/shorthands/transitionLegacy.cjs +263 -126
  57. package/dist/cjs/shorthands/transitionLegacy.native.cjs +333 -155
  58. package/dist/cjs/shorthands/transitionLegacy.native.js +333 -155
  59. package/dist/cjs/shorthands/transitionLegacy.native.js.map +1 -1
  60. package/dist/cjs/shorthands/transitionNative.cjs +5 -5
  61. package/dist/cjs/shorthands/transitionNative.native.cjs +8 -7
  62. package/dist/cjs/shorthands/transitionNative.native.js +8 -7
  63. package/dist/cjs/shorthands/transitionNative.native.js.map +1 -1
  64. package/dist/cjs/shorthands/transitionObject.cjs +302 -0
  65. package/dist/cjs/shorthands/transitionObject.native.cjs +347 -0
  66. package/dist/cjs/shorthands/transitionObject.native.js +349 -0
  67. package/dist/cjs/shorthands/transitionObject.native.js.map +1 -0
  68. package/dist/cjs/tooling/candidate.cjs +254 -15
  69. package/dist/cjs/tooling/candidate.native.cjs +314 -62
  70. package/dist/cjs/tooling/candidate.native.js +314 -62
  71. package/dist/cjs/tooling/candidate.native.js.map +1 -1
  72. package/dist/cjs/tooling/config.cjs +19 -9
  73. package/dist/cjs/tooling/config.native.cjs +25 -26
  74. package/dist/cjs/tooling/config.native.js +25 -26
  75. package/dist/cjs/tooling/config.native.js.map +1 -1
  76. package/dist/cjs/tooling/registry.cjs +579 -11
  77. package/dist/cjs/tooling/registry.native.cjs +579 -11
  78. package/dist/cjs/tooling/registry.native.js +579 -11
  79. package/dist/cjs/tooling/registry.native.js.map +1 -1
  80. package/dist/cjs/tooling/toolingDiagnostics.cjs +306 -10
  81. package/dist/cjs/tooling/toolingDiagnostics.native.cjs +408 -48
  82. package/dist/cjs/tooling/toolingDiagnostics.native.js +408 -48
  83. package/dist/cjs/tooling/toolingDiagnostics.native.js.map +1 -1
  84. package/dist/cjs/tooling/toolingRegistry.cjs +6 -1
  85. package/dist/cjs/tooling/toolingRegistry.native.cjs +9 -1
  86. package/dist/cjs/tooling/toolingRegistry.native.js +9 -1
  87. package/dist/cjs/tooling/toolingRegistry.native.js.map +1 -1
  88. package/dist/cjs/tooling.cjs +1 -0
  89. package/dist/cjs/tooling.native.cjs +1 -0
  90. package/dist/cjs/tooling.native.js +1 -0
  91. package/dist/cjs/tooling.native.js.map +1 -1
  92. package/dist/cjs/transitions.cjs +38 -0
  93. package/dist/cjs/transitions.native.cjs +40 -0
  94. package/dist/cjs/transitions.native.js +42 -0
  95. package/dist/cjs/transitions.native.js.map +1 -0
  96. package/dist/esm/ast/payloadShape.mjs +45 -17
  97. package/dist/esm/ast/payloadShape.mjs.map +1 -1
  98. package/dist/esm/ast/payloadShape.native.js +45 -17
  99. package/dist/esm/ast/payloadShape.native.js.map +1 -1
  100. package/dist/esm/ast/resolvePayload.mjs +16 -9
  101. package/dist/esm/ast/resolvePayload.mjs.map +1 -1
  102. package/dist/esm/ast/resolvePayload.native.js +16 -9
  103. package/dist/esm/ast/resolvePayload.native.js.map +1 -1
  104. package/dist/esm/programs/lowerProgram.mjs +2 -2
  105. package/dist/esm/programs/lowerProgram.mjs.map +1 -1
  106. package/dist/esm/programs/lowerProgram.native.js +2 -2
  107. package/dist/esm/programs/lowerProgram.native.js.map +1 -1
  108. package/dist/esm/runtime/clauseIdentity.mjs +2 -22
  109. package/dist/esm/runtime/clauseIdentity.mjs.map +1 -1
  110. package/dist/esm/runtime/clauseIdentity.native.js +2 -22
  111. package/dist/esm/runtime/clauseIdentity.native.js.map +1 -1
  112. package/dist/esm/runtime/clausePrecedence.mjs +2 -2
  113. package/dist/esm/runtime/clausePrecedence.mjs.map +1 -1
  114. package/dist/esm/runtime/clausePrecedence.native.js +3 -10
  115. package/dist/esm/runtime/clausePrecedence.native.js.map +1 -1
  116. package/dist/esm/runtime/modifierVocabulary.native.js +1 -8
  117. package/dist/esm/runtime/modifierVocabulary.native.js.map +1 -1
  118. package/dist/esm/runtime/scanFlatValue.mjs +59 -7
  119. package/dist/esm/runtime/scanFlatValue.mjs.map +1 -1
  120. package/dist/esm/runtime/scanFlatValue.native.js +59 -7
  121. package/dist/esm/runtime/scanFlatValue.native.js.map +1 -1
  122. package/dist/esm/runtime/spring.mjs +93 -0
  123. package/dist/esm/runtime/spring.mjs.map +1 -0
  124. package/dist/esm/runtime/spring.native.js +99 -0
  125. package/dist/esm/runtime/spring.native.js.map +1 -0
  126. package/dist/esm/runtime/stateModifiers.mjs +22 -2
  127. package/dist/esm/runtime/stateModifiers.mjs.map +1 -1
  128. package/dist/esm/runtime/stateModifiers.native.js +22 -2
  129. package/dist/esm/runtime/stateModifiers.native.js.map +1 -1
  130. package/dist/esm/runtime/tokenCategories.mjs +3 -0
  131. package/dist/esm/runtime/tokenCategories.mjs.map +1 -1
  132. package/dist/esm/runtime/tokenCategories.native.js +3 -0
  133. package/dist/esm/runtime/tokenCategories.native.js.map +1 -1
  134. package/dist/esm/runtime/unitlessNumbers.mjs +0 -5
  135. package/dist/esm/runtime/unitlessNumbers.mjs.map +1 -1
  136. package/dist/esm/runtime/unitlessNumbers.native.js +0 -5
  137. package/dist/esm/runtime/unitlessNumbers.native.js.map +1 -1
  138. package/dist/esm/runtime.mjs +4 -2
  139. package/dist/esm/runtime.native.js +4 -2
  140. package/dist/esm/shorthands/transition.mjs +111 -36
  141. package/dist/esm/shorthands/transition.mjs.map +1 -1
  142. package/dist/esm/shorthands/transition.native.js +113 -36
  143. package/dist/esm/shorthands/transition.native.js.map +1 -1
  144. package/dist/esm/shorthands/transitionAlign.mjs +13 -10
  145. package/dist/esm/shorthands/transitionAlign.mjs.map +1 -1
  146. package/dist/esm/shorthands/transitionAlign.native.js +14 -11
  147. package/dist/esm/shorthands/transitionAlign.native.js.map +1 -1
  148. package/dist/esm/shorthands/transitionLegacy.mjs +260 -126
  149. package/dist/esm/shorthands/transitionLegacy.mjs.map +1 -1
  150. package/dist/esm/shorthands/transitionLegacy.native.js +330 -155
  151. package/dist/esm/shorthands/transitionLegacy.native.js.map +1 -1
  152. package/dist/esm/shorthands/transitionNative.mjs +5 -5
  153. package/dist/esm/shorthands/transitionNative.mjs.map +1 -1
  154. package/dist/esm/shorthands/transitionNative.native.js +8 -7
  155. package/dist/esm/shorthands/transitionNative.native.js.map +1 -1
  156. package/dist/esm/shorthands/transitionObject.mjs +280 -0
  157. package/dist/esm/shorthands/transitionObject.mjs.map +1 -0
  158. package/dist/esm/shorthands/transitionObject.native.js +323 -0
  159. package/dist/esm/shorthands/transitionObject.native.js.map +1 -0
  160. package/dist/esm/tooling/candidate.mjs +250 -16
  161. package/dist/esm/tooling/candidate.mjs.map +1 -1
  162. package/dist/esm/tooling/candidate.native.js +310 -63
  163. package/dist/esm/tooling/candidate.native.js.map +1 -1
  164. package/dist/esm/tooling/config.mjs +18 -9
  165. package/dist/esm/tooling/config.mjs.map +1 -1
  166. package/dist/esm/tooling/config.native.js +24 -26
  167. package/dist/esm/tooling/config.native.js.map +1 -1
  168. package/dist/esm/tooling/registry.mjs +579 -11
  169. package/dist/esm/tooling/registry.mjs.map +1 -1
  170. package/dist/esm/tooling/registry.native.js +579 -11
  171. package/dist/esm/tooling/registry.native.js.map +1 -1
  172. package/dist/esm/tooling/toolingDiagnostics.mjs +306 -11
  173. package/dist/esm/tooling/toolingDiagnostics.mjs.map +1 -1
  174. package/dist/esm/tooling/toolingDiagnostics.native.js +408 -49
  175. package/dist/esm/tooling/toolingDiagnostics.native.js.map +1 -1
  176. package/dist/esm/tooling/toolingRegistry.mjs +6 -1
  177. package/dist/esm/tooling/toolingRegistry.mjs.map +1 -1
  178. package/dist/esm/tooling/toolingRegistry.native.js +9 -1
  179. package/dist/esm/tooling/toolingRegistry.native.js.map +1 -1
  180. package/dist/esm/tooling.mjs +2 -0
  181. package/dist/esm/tooling.native.js +2 -0
  182. package/dist/esm/transitions.mjs +5 -0
  183. package/dist/esm/transitions.native.js +5 -0
  184. package/package.json +21 -3
  185. package/src/ast/payloadShape.ts +44 -16
  186. package/src/ast/resolvePayload.ts +28 -13
  187. package/src/programs/lowerProgram.ts +9 -4
  188. package/src/runtime/clauseIdentity.ts +8 -31
  189. package/src/runtime/clausePrecedence.ts +2 -10
  190. package/src/runtime/scanFlatValue.ts +81 -9
  191. package/src/runtime/spring.ts +208 -0
  192. package/src/runtime/stateModifiers.ts +31 -1
  193. package/src/runtime/tokenCategories.ts +3 -0
  194. package/src/runtime/unitlessNumbers.ts +0 -5
  195. package/src/runtime.ts +13 -0
  196. package/src/shorthands/transition.ts +159 -44
  197. package/src/shorthands/transitionAlign.ts +22 -12
  198. package/src/shorthands/transitionLegacy.ts +376 -156
  199. package/src/shorthands/transitionNative.ts +8 -11
  200. package/src/shorthands/transitionObject.ts +369 -0
  201. package/src/tooling/candidate.ts +269 -14
  202. package/src/tooling/config.ts +25 -9
  203. package/src/tooling/registry.ts +339 -12
  204. package/src/tooling/toolingDiagnostics.ts +474 -9
  205. package/src/tooling/toolingRegistry.ts +6 -1
  206. package/src/tooling.ts +1 -0
  207. package/src/transitions.ts +42 -0
  208. package/types/ast/payloadShape.d.ts.map +2 -2
  209. package/types/ast/resolvePayload.d.ts +5 -4
  210. package/types/ast/resolvePayload.d.ts.map +2 -2
  211. package/types/programs/lowerProgram.d.ts +4 -2
  212. package/types/programs/lowerProgram.d.ts.map +2 -2
  213. package/types/runtime/clauseIdentity.d.ts +1 -4
  214. package/types/runtime/clauseIdentity.d.ts.map +2 -2
  215. package/types/runtime/clausePrecedence.d.ts.map +2 -2
  216. package/types/runtime/scanFlatValue.d.ts +1 -1
  217. package/types/runtime/scanFlatValue.d.ts.map +2 -2
  218. package/types/runtime/spring.d.ts +61 -0
  219. package/types/runtime/spring.d.ts.map +11 -0
  220. package/types/runtime/stateModifiers.d.ts +4 -0
  221. package/types/runtime/stateModifiers.d.ts.map +2 -2
  222. package/types/runtime/tokenCategories.d.ts.map +2 -2
  223. package/types/runtime/unitlessNumbers.d.ts.map +2 -2
  224. package/types/runtime.d.ts +3 -1
  225. package/types/runtime.d.ts.map +2 -2
  226. package/types/shorthands/transition.d.ts +26 -5
  227. package/types/shorthands/transition.d.ts.map +2 -2
  228. package/types/shorthands/transitionAlign.d.ts.map +2 -2
  229. package/types/shorthands/transitionLegacy.d.ts +19 -4
  230. package/types/shorthands/transitionLegacy.d.ts.map +2 -2
  231. package/types/shorthands/transitionNative.d.ts.map +1 -1
  232. package/types/shorthands/transitionObject.d.ts +49 -0
  233. package/types/shorthands/transitionObject.d.ts.map +11 -0
  234. package/types/tooling/candidate.d.ts +13 -0
  235. package/types/tooling/candidate.d.ts.map +2 -2
  236. package/types/tooling/config.d.ts +8 -1
  237. package/types/tooling/config.d.ts.map +2 -2
  238. package/types/tooling/registry.d.ts +4 -2
  239. package/types/tooling/registry.d.ts.map +2 -2
  240. package/types/tooling/toolingDiagnostics.d.ts +3 -1
  241. package/types/tooling/toolingDiagnostics.d.ts.map +2 -2
  242. package/types/tooling/toolingRegistry.d.ts.map +2 -2
  243. package/types/tooling.d.ts +1 -0
  244. package/types/tooling.d.ts.map +2 -2
  245. package/types/transitions.d.ts +5 -0
  246. package/types/transitions.d.ts.map +11 -0
@@ -1,5 +1,6 @@
1
1
  import { namedCssColors } from "../runtime/namedCssColors.mjs";
2
- import { fontWeightNames, grammarEntries, insetAxisProps, prefixToEntries, radiusCornerProps, sizeUtilityProps, standaloneValueProps, textAlignKeywords, wholeClassConveniences, wholeClassUtilities } from "./registry.mjs";
2
+ import { propTokenGroupFallbacks } from "./config.mjs";
3
+ import { fontWeightNames, grammarEntries, insetAxisProps, prefixToEntries, propToGrammarEntry, radiusCornerProps, sizeUtilityProps, standaloneValueProps, textAlignKeywords, wholeClassConveniences, wholeClassUtilities } from "./registry.mjs";
3
4
  import { canonicalClauseModifier, containerModifierSizeEnd, parseGroupModifier } from "../runtime/clauseIdentity.mjs";
4
5
  import { compileModifierVocabulary, modifierKindMedia } from "../runtime/modifierVocabulary.mjs";
5
6
  import { splitColorOpacitySuffix } from "../runtime/colorOpacity.mjs";
@@ -9,6 +10,12 @@ const sizingConveniences = /* @__PURE__ */ new Set([
9
10
  "full",
10
11
  "auto",
11
12
  "screen",
13
+ "dvh",
14
+ "lvh",
15
+ "svh",
16
+ "dvw",
17
+ "lvw",
18
+ "svw",
12
19
  "min",
13
20
  "max",
14
21
  "fit"
@@ -19,6 +26,22 @@ const fontGenerics = /* @__PURE__ */ new Set([
19
26
  "mono"
20
27
  ]);
21
28
  const numericPattern = /^\d+(?:\.\d+)?$/;
29
+ const tailwindLeadingRatios = {
30
+ none: 1,
31
+ tight: 1.25,
32
+ snug: 1.375,
33
+ normal: 1.5,
34
+ relaxed: 1.625,
35
+ loose: 2
36
+ };
37
+ const tailwindTrackingEms = {
38
+ tighter: -.05,
39
+ tight: -.025,
40
+ normal: 0,
41
+ wide: .025,
42
+ wider: .05,
43
+ widest: .1
44
+ };
22
45
  const extraPrefixes = [
23
46
  "border-x",
24
47
  "border-y",
@@ -26,9 +49,12 @@ const extraPrefixes = [
26
49
  "rounded-r",
27
50
  "rounded-b",
28
51
  "rounded-l",
52
+ "rounded-s",
53
+ "rounded-e",
29
54
  "inset-x",
30
55
  "inset-y",
31
- "size"
56
+ "size",
57
+ "translate"
32
58
  ];
33
59
  const negativeTokenProps = /* @__PURE__ */ new Set([
34
60
  "margin",
@@ -36,6 +62,10 @@ const negativeTokenProps = /* @__PURE__ */ new Set([
36
62
  "marginRight",
37
63
  "marginBottom",
38
64
  "marginLeft",
65
+ "marginInlineStart",
66
+ "marginInlineEnd",
67
+ "marginBlockStart",
68
+ "marginBlockEnd",
39
69
  "marginHorizontal",
40
70
  "marginVertical",
41
71
  "top",
@@ -43,9 +73,53 @@ const negativeTokenProps = /* @__PURE__ */ new Set([
43
73
  "bottom",
44
74
  "left",
45
75
  "inset",
76
+ "insetInlineStart",
77
+ "insetInlineEnd",
78
+ "insetBlockStart",
79
+ "insetBlockEnd",
80
+ "start",
81
+ "end",
82
+ "zIndex",
46
83
  "x",
47
84
  "y",
48
- "letterSpacing"
85
+ "rotate",
86
+ "rotateX",
87
+ "rotateY",
88
+ "rotateZ",
89
+ "skewX",
90
+ "skewY",
91
+ "order",
92
+ "scale",
93
+ "scaleX",
94
+ "scaleY",
95
+ "letterSpacing",
96
+ "outlineOffset"
97
+ ]);
98
+ const positionSpaceProps = /* @__PURE__ */ new Set([
99
+ "top",
100
+ "right",
101
+ "bottom",
102
+ "left",
103
+ "inset",
104
+ "insetInlineStart",
105
+ "insetInlineEnd",
106
+ "insetBlockStart",
107
+ "insetBlockEnd",
108
+ "start",
109
+ "end"
110
+ ]);
111
+ const marginSpaceProps = /* @__PURE__ */ new Set([
112
+ "margin",
113
+ "marginTop",
114
+ "marginRight",
115
+ "marginBottom",
116
+ "marginLeft",
117
+ "marginInlineStart",
118
+ "marginInlineEnd",
119
+ "marginBlockStart",
120
+ "marginBlockEnd",
121
+ "marginHorizontal",
122
+ "marginVertical"
49
123
  ]);
50
124
  const borderWidthKeywords = /* @__PURE__ */ new Set([
51
125
  "thin",
@@ -142,11 +216,25 @@ function normalizeModifiers(modifiers, config) {
142
216
  }
143
217
  return normalized;
144
218
  }
219
+ function tokenDomain(config, category) {
220
+ const fallback = propTokenGroupFallbacks[category];
221
+ return config.tokenNames?.[category] || (fallback ? config.tokenNames?.[fallback] : void 0);
222
+ }
145
223
  function hasTokenDomain(config, category) {
146
- return config.tokenNames?.[category] !== void 0;
224
+ return tokenDomain(config, category) !== void 0;
147
225
  }
148
226
  function hasTokenName(config, category, name) {
149
- return hasName(config.tokenNames?.[category], name);
227
+ return resolveTokenName(config, category, name) !== null;
228
+ }
229
+ function decimalHalfTokenAlias(name) {
230
+ const match = /^(-?\d+)\.5$/.exec(name);
231
+ return match ? `${match[1]}-5` : null;
232
+ }
233
+ function resolveTokenName(config, category, name) {
234
+ const names = tokenDomain(config, category);
235
+ if (hasName(names, name)) return name;
236
+ const alias = decimalHalfTokenAlias(name);
237
+ return alias !== null && hasName(names, alias) ? alias : null;
150
238
  }
151
239
  function entriesForProps(props) {
152
240
  const byProp = new Map(grammarEntries.map((entry) => [entry.prop, entry]));
@@ -172,11 +260,17 @@ function resolveEntries(prefix, config) {
172
260
  return entriesForProps(sides.flatMap((side) => [`border${side}Width`, `border${side}Color`]));
173
261
  }
174
262
  if (prefix === "size") {
175
- return entriesForProps(sizeUtilityProps);
263
+ return entriesForProps(sizeUtilityProps).map((entry) => ({
264
+ ...entry,
265
+ tokenCategory: "size"
266
+ }));
176
267
  }
177
268
  if (prefix === "inset-x" || prefix === "inset-y") {
178
269
  return entriesForProps(insetAxisProps[prefix.slice("inset-".length)]);
179
270
  }
271
+ if (prefix === "translate") {
272
+ return entriesForProps(["x", "y"]);
273
+ }
180
274
  if (prefix.startsWith("rounded-")) {
181
275
  const props = radiusCornerProps[prefix.slice("rounded-".length)];
182
276
  return props ? entriesForProps(props) : [];
@@ -260,6 +354,9 @@ function arbitraryTextKind(value) {
260
354
  if (/^[a-zA-Z][a-zA-Z0-9-]*$/.test(value)) return "fontSize";
261
355
  return null;
262
356
  }
357
+ function isWidthColorPrefix(prefix) {
358
+ return prefix.startsWith("border") || prefix === "outline";
359
+ }
263
360
  function arbitraryBorderKind(value) {
264
361
  if (/^-?(?:\d+|\d*\.\d+)$/.test(value)) return "width";
265
362
  if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return "width";
@@ -289,7 +386,7 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
289
386
  const arbitrary = arbitraryInner(rawValue);
290
387
  if (arbitrary !== null) {
291
388
  if (!arbitrary) return null;
292
- if (prefix.startsWith("border")) {
389
+ if (isWidthColorPrefix(prefix)) {
293
390
  const width = entries.find((entry) => entry.prop.endsWith("Width"));
294
391
  const color = entries.find((entry) => entry.prop.endsWith("Color"));
295
392
  const kind = arbitraryBorderKind(decodeArbitrary(arbitrary));
@@ -343,6 +440,12 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
343
440
  };
344
441
  }
345
442
  const color = entries.find((entry) => entry.prop === "color");
443
+ if (color && rawValue === "transparent") {
444
+ return {
445
+ entry: color,
446
+ valueKind: "enum"
447
+ };
448
+ }
346
449
  const colorName = tokenLookupName("color", rawValue);
347
450
  if (color && hasTokenName(config, "color", colorName)) {
348
451
  return {
@@ -377,11 +480,12 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
377
480
  convenience: "font-generic"
378
481
  } : null;
379
482
  }
380
- if (prefix.startsWith("border")) {
483
+ if (isWidthColorPrefix(prefix)) {
381
484
  const width = entries.find((entry) => entry.prop.endsWith("Width"));
382
485
  const color = entries.find((entry) => entry.prop.endsWith("Color"));
383
486
  const token = negative ? `-${rawValue}` : rawValue;
384
- const matchesWidth = width && hasTokenName(config, "space", token);
487
+ const widthCategory = width?.tokenCategory || "space";
488
+ const matchesWidth = width && hasTokenName(config, widthCategory, token);
385
489
  const colorName = tokenLookupName("color", rawValue);
386
490
  const matchesColor = color && hasTokenName(config, "color", colorName);
387
491
  if (matchesWidth && matchesColor) return null;
@@ -397,11 +501,120 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
397
501
  valueKind: "token"
398
502
  };
399
503
  }
504
+ if (color && rawValue === "transparent") {
505
+ return {
506
+ entry: color,
507
+ valueKind: "enum"
508
+ };
509
+ }
400
510
  return null;
401
511
  }
512
+ if (prefix === "flex" && fractionIsValid(rawValue)) {
513
+ const flex = entries.find((entry) => entry.prop === "flex");
514
+ if (flex) {
515
+ return {
516
+ entry: flex,
517
+ valueKind: "convenience",
518
+ convenience: "flex-bundle"
519
+ };
520
+ }
521
+ }
522
+ if (prefix === "tracking" && Object.hasOwn(tailwindTrackingEms, rawValue)) {
523
+ const letterSpacing = entries.find((entry) => entry.prop === "letterSpacing");
524
+ if (letterSpacing) {
525
+ return {
526
+ entry: letterSpacing,
527
+ valueKind: "convenience",
528
+ convenience: "tracking-keyword"
529
+ };
530
+ }
531
+ }
532
+ if (prefix === "leading" && Object.hasOwn(tailwindLeadingRatios, rawValue)) {
533
+ const lineHeight = entries.find((entry) => entry.prop === "lineHeight");
534
+ if (lineHeight) {
535
+ return {
536
+ entry: lineHeight,
537
+ valueKind: "convenience",
538
+ convenience: "leading-keyword"
539
+ };
540
+ }
541
+ }
542
+ if (numericPattern.test(rawValue)) {
543
+ const angle = entries.find((entry) => entry.conveniences?.includes("angle"));
544
+ if (angle) {
545
+ return {
546
+ entry: angle,
547
+ valueKind: "convenience",
548
+ convenience: "angle"
549
+ };
550
+ }
551
+ if (prefix === "flex") {
552
+ const flex = entries.find((entry) => entry.prop === "flex");
553
+ if (flex) return {
554
+ entry: flex,
555
+ valueKind: "convenience",
556
+ convenience: "flex-bundle"
557
+ };
558
+ }
559
+ if (prefix === "grow") {
560
+ const grow = entries.find((entry) => entry.prop === "flexGrow");
561
+ if (grow) return {
562
+ entry: grow,
563
+ valueKind: "convenience",
564
+ convenience: "integer"
565
+ };
566
+ }
567
+ if (prefix === "shrink") {
568
+ const shrink = entries.find((entry) => entry.prop === "flexShrink");
569
+ if (shrink) return {
570
+ entry: shrink,
571
+ valueKind: "convenience",
572
+ convenience: "integer"
573
+ };
574
+ }
575
+ if (prefix === "line-clamp") {
576
+ const clamp = entries.find((entry) => entry.prop === "numberOfLines");
577
+ if (clamp) return {
578
+ entry: clamp,
579
+ valueKind: "convenience",
580
+ convenience: "integer"
581
+ };
582
+ }
583
+ if (prefix === "leading") {
584
+ const lineHeight = entries.find((entry) => entry.prop === "lineHeight");
585
+ if (lineHeight && (!lineHeight.tokenCategory || !hasTokenName(config, lineHeight.tokenCategory, rawValue))) {
586
+ return {
587
+ entry: lineHeight,
588
+ valueKind: "convenience",
589
+ convenience: "integer"
590
+ };
591
+ }
592
+ }
593
+ if (prefix === "grid-cols" || prefix === "col-span" || prefix === "col-start" || prefix === "col-end" || prefix === "row-span" || prefix === "row-start" || prefix === "row-end") {
594
+ const entry = entries[0];
595
+ if (entry) return {
596
+ entry,
597
+ valueKind: "convenience",
598
+ convenience: "integer"
599
+ };
600
+ }
601
+ }
402
602
  for (const entry of entries) {
403
603
  if (entry.tokenCategory) {
404
- const name = negative ? `-${rawValue}` : rawValue;
604
+ if (entry.tokenCategory === "color" && rawValue === "transparent") {
605
+ return {
606
+ entry,
607
+ valueKind: "enum"
608
+ };
609
+ }
610
+ if (entry.tokenCategory === "radius" && rawValue === "none") {
611
+ return {
612
+ entry,
613
+ valueKind: "convenience",
614
+ convenience: "zero"
615
+ };
616
+ }
617
+ const name = negative && rawValue !== "0" ? `-${rawValue}` : rawValue;
405
618
  const tokenName = tokenLookupName(entry.tokenCategory, name);
406
619
  if (hasTokenName(config, entry.tokenCategory, tokenName)) {
407
620
  return {
@@ -409,7 +622,21 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
409
622
  valueKind: "token"
410
623
  };
411
624
  }
412
- if (entry.tokenCategory === "size" && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {
625
+ if (entry.conveniences?.includes("sizing-keyword") && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {
626
+ return {
627
+ entry,
628
+ valueKind: "convenience",
629
+ convenience: "sizing-keyword"
630
+ };
631
+ }
632
+ if (positionSpaceProps.has(entry.prop) && (rawValue === "full" || rawValue === "auto" || fractionIsValid(rawValue))) {
633
+ return {
634
+ entry,
635
+ valueKind: "convenience",
636
+ convenience: "sizing-keyword"
637
+ };
638
+ }
639
+ if (marginSpaceProps.has(entry.prop) && rawValue === "auto") {
413
640
  return {
414
641
  entry,
415
642
  valueKind: "convenience",
@@ -425,7 +652,7 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
425
652
  }
426
653
  continue;
427
654
  }
428
- if (prefix === "opacity" || prefix === "scale") {
655
+ if (prefix === "opacity" || prefix === "scale" || prefix === "scale-x" || prefix === "scale-y") {
429
656
  if (numericPattern.test(rawValue)) {
430
657
  return {
431
658
  entry,
@@ -442,6 +669,13 @@ function chooseEntry(entries, prefix, rawValue, negative, config) {
442
669
  convenience: "integer"
443
670
  };
444
671
  }
672
+ if (entry.conveniences?.includes("integer") && numericPattern.test(rawValue)) {
673
+ return {
674
+ entry,
675
+ valueKind: "convenience",
676
+ convenience: "integer"
677
+ };
678
+ }
445
679
  }
446
680
  return null;
447
681
  }
@@ -459,7 +693,7 @@ function parseCandidate(candidate, config) {
459
693
  if (rawValue) {
460
694
  const entries = resolveEntries(prefix, config);
461
695
  const selected = chooseEntry(entries, prefix, rawValue, negative, config);
462
- if (selected && (!negative || selected.valueKind === "token" && negativeTokenProps.has(selected.entry.prop))) {
696
+ 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 === "integer"))) {
463
697
  dynamic = {
464
698
  prefix,
465
699
  rawValue,
@@ -484,7 +718,7 @@ function parseCandidate(candidate, config) {
484
718
  }
485
719
  }
486
720
  const direct = wholeClassUtilities[split.base];
487
- if (!negative && direct) {
721
+ if (!negative && direct && (split.base !== "shadow" || hasTokenName(config, "boxShadow", "sm"))) {
488
722
  const convenience = wholeClassConveniences[split.base];
489
723
  return {
490
724
  candidate,
@@ -541,7 +775,7 @@ function tokenValidationConfig(entry, value, config) {
541
775
  };
542
776
  }
543
777
  function formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {
544
- const entry = grammarEntries.find((candidate2) => candidate2.prop === prop);
778
+ const entry = propToGrammarEntry[prop];
545
779
  if (!entry) return null;
546
780
  if (valueKind === "arbitrary" && value === "") return null;
547
781
  const normalizedModifiers = normalizeModifiers(modifiers, config || {});
@@ -646,5 +880,5 @@ function decodeArbitrary(value) {
646
880
  return decoded;
647
881
  }
648
882
 
649
- export { classifyCandidate, decodeArbitrary, encodeArbitrary, formatCandidate, hasTokenName, parseCandidate };
883
+ export { classifyCandidate, decimalHalfTokenAlias, decodeArbitrary, encodeArbitrary, formatCandidate, hasTokenName, parseCandidate, resolveTokenName, splitCandidate, tailwindLeadingRatios, tailwindTrackingEms };
650
884
  //# sourceMappingURL=candidate.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.js","names":[],"sources":["esm/tooling/candidate.js"],"sourcesContent":["import { namedCssColors } from \"../runtime/namedCssColors\";\nimport {\n grammarEntries,\n fontWeightNames,\n insetAxisProps,\n prefixToEntries,\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([\"full\", \"auto\", \"screen\", \"min\", \"max\", \"fit\"]);\nconst fontGenerics = /* @__PURE__ */ new Set([\"sans\", \"serif\", \"mono\"]);\nconst numericPattern = /^\\d+(?:\\.\\d+)?$/;\nconst extraPrefixes = [\n \"border-x\",\n \"border-y\",\n \"rounded-t\",\n \"rounded-r\",\n \"rounded-b\",\n \"rounded-l\",\n \"inset-x\",\n \"inset-y\",\n \"size\"\n];\nconst negativeTokenProps = /* @__PURE__ */ new Set([\n \"margin\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"marginHorizontal\",\n \"marginVertical\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"inset\",\n \"x\",\n \"y\",\n \"letterSpacing\"\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 hasTokenDomain(config, category) {\n return config.tokenNames?.[category] !== void 0;\n}\nfunction hasTokenName(config, category, name) {\n return hasName(config.tokenNames?.[category], name);\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);\n }\n if (prefix === \"inset-x\" || prefix === \"inset-y\") {\n return entriesForProps(insetAxisProps[prefix.slice(\"inset-\".length)]);\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 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 (prefix.startsWith(\"border\")) {\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 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 (prefix.startsWith(\"border\")) {\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 matchesWidth = width && hasTokenName(config, \"space\", 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 return null;\n }\n for (const entry of entries) {\n if (entry.tokenCategory) {\n const name = negative ? `-${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.tokenCategory === \"size\" && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {\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 continue;\n }\n if (prefix === \"opacity\" || prefix === \"scale\") {\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 }\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.valueKind === \"token\" && negativeTokenProps.has(selected.entry.prop))) {\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) {\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 = grammarEntries.find((candidate2) => candidate2.prop === 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 decodeArbitrary,\n encodeArbitrary,\n formatCandidate,\n hasTokenName,\n parseCandidate\n};\n//# sourceMappingURL=candidate.js.map\n"],"mappings":"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"}
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 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 === \"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,i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"}