@tamagui/style-grammar 0.0.0-bootstrap.0 → 3.0.0-beta.643.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 (458) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -1
  3. package/dist/cjs/backgroundFamily.cjs +176 -0
  4. package/dist/cjs/backgroundFamily.native.cjs +195 -0
  5. package/dist/cjs/backgroundFamily.native.js +197 -0
  6. package/dist/cjs/backgroundFamily.native.js.map +1 -0
  7. package/dist/cjs/borderFamily.cjs +169 -0
  8. package/dist/cjs/borderFamily.native.cjs +247 -0
  9. package/dist/cjs/borderFamily.native.js +249 -0
  10. package/dist/cjs/borderFamily.native.js.map +1 -0
  11. package/dist/cjs/candidate.cjs +608 -0
  12. package/dist/cjs/candidate.native.cjs +821 -0
  13. package/dist/cjs/candidate.native.js +823 -0
  14. package/dist/cjs/candidate.native.js.map +1 -0
  15. package/dist/cjs/candidateTarget.cjs +50 -0
  16. package/dist/cjs/candidateTarget.native.cjs +88 -0
  17. package/dist/cjs/candidateTarget.native.js +90 -0
  18. package/dist/cjs/candidateTarget.native.js.map +1 -0
  19. package/dist/cjs/clauseCapability.cjs +130 -0
  20. package/dist/cjs/clauseCapability.native.cjs +152 -0
  21. package/dist/cjs/clauseCapability.native.js +154 -0
  22. package/dist/cjs/clauseCapability.native.js.map +1 -0
  23. package/dist/cjs/clausePrecedence.cjs +153 -0
  24. package/dist/cjs/clausePrecedence.native.cjs +204 -0
  25. package/dist/cjs/clausePrecedence.native.js +206 -0
  26. package/dist/cjs/clausePrecedence.native.js.map +1 -0
  27. package/dist/cjs/clauseSources.cjs +47 -0
  28. package/dist/cjs/clauseSources.native.cjs +49 -0
  29. package/dist/cjs/clauseSources.native.js +51 -0
  30. package/dist/cjs/clauseSources.native.js.map +1 -0
  31. package/dist/cjs/config.cjs +130 -0
  32. package/dist/cjs/config.native.cjs +185 -0
  33. package/dist/cjs/config.native.js +187 -0
  34. package/dist/cjs/config.native.js.map +1 -0
  35. package/dist/cjs/evaluateProgram.cjs +65 -0
  36. package/dist/cjs/evaluateProgram.native.cjs +70 -0
  37. package/dist/cjs/evaluateProgram.native.js +72 -0
  38. package/dist/cjs/evaluateProgram.native.js.map +1 -0
  39. package/dist/cjs/fontShorthand.cjs +207 -0
  40. package/dist/cjs/fontShorthand.native.cjs +260 -0
  41. package/dist/cjs/fontShorthand.native.js +262 -0
  42. package/dist/cjs/fontShorthand.native.js.map +1 -0
  43. package/dist/cjs/geometricShorthand.cjs +122 -0
  44. package/dist/cjs/geometricShorthand.native.cjs +128 -0
  45. package/dist/cjs/geometricShorthand.native.js +130 -0
  46. package/dist/cjs/geometricShorthand.native.js.map +1 -0
  47. package/dist/cjs/index.cjs +19 -0
  48. package/dist/cjs/index.native.cjs +21 -0
  49. package/dist/cjs/index.native.js +23 -0
  50. package/dist/cjs/index.native.js.map +1 -0
  51. package/dist/cjs/lowerProgram.cjs +205 -0
  52. package/dist/cjs/lowerProgram.native.cjs +257 -0
  53. package/dist/cjs/lowerProgram.native.js +259 -0
  54. package/dist/cjs/lowerProgram.native.js.map +1 -0
  55. package/dist/cjs/mergeFlatValues.cjs +50 -0
  56. package/dist/cjs/mergeFlatValues.native.cjs +71 -0
  57. package/dist/cjs/mergeFlatValues.native.js +73 -0
  58. package/dist/cjs/mergeFlatValues.native.js.map +1 -0
  59. package/dist/cjs/modifierRegistry.cjs +246 -0
  60. package/dist/cjs/modifierRegistry.native.cjs +426 -0
  61. package/dist/cjs/modifierRegistry.native.js +428 -0
  62. package/dist/cjs/modifierRegistry.native.js.map +1 -0
  63. package/dist/cjs/payloadShape.cjs +69 -0
  64. package/dist/cjs/payloadShape.native.cjs +71 -0
  65. package/dist/cjs/payloadShape.native.js +73 -0
  66. package/dist/cjs/payloadShape.native.js.map +1 -0
  67. package/dist/cjs/programEligibility.cjs +46 -0
  68. package/dist/cjs/programEligibility.native.cjs +48 -0
  69. package/dist/cjs/programEligibility.native.js +50 -0
  70. package/dist/cjs/programEligibility.native.js.map +1 -0
  71. package/dist/cjs/programHash.cjs +86 -0
  72. package/dist/cjs/programHash.native.cjs +106 -0
  73. package/dist/cjs/programHash.native.js +108 -0
  74. package/dist/cjs/programHash.native.js.map +1 -0
  75. package/dist/cjs/programs.cjs +128 -0
  76. package/dist/cjs/programs.native.cjs +220 -0
  77. package/dist/cjs/programs.native.js +222 -0
  78. package/dist/cjs/programs.native.js.map +1 -0
  79. package/dist/cjs/registry.cjs +629 -0
  80. package/dist/cjs/registry.native.cjs +635 -0
  81. package/dist/cjs/registry.native.js +637 -0
  82. package/dist/cjs/registry.native.js.map +1 -0
  83. package/dist/cjs/resolvePayload.cjs +296 -0
  84. package/dist/cjs/resolvePayload.native.cjs +302 -0
  85. package/dist/cjs/resolvePayload.native.js +304 -0
  86. package/dist/cjs/resolvePayload.native.js.map +1 -0
  87. package/dist/cjs/runtime.cjs +50 -0
  88. package/dist/cjs/runtime.native.cjs +52 -0
  89. package/dist/cjs/runtime.native.js +54 -0
  90. package/dist/cjs/runtime.native.js.map +1 -0
  91. package/dist/cjs/safeAreaVariables.cjs +42 -0
  92. package/dist/cjs/safeAreaVariables.native.cjs +44 -0
  93. package/dist/cjs/safeAreaVariables.native.js +46 -0
  94. package/dist/cjs/safeAreaVariables.native.js.map +1 -0
  95. package/dist/cjs/scanFlatValue.cjs +181 -0
  96. package/dist/cjs/scanFlatValue.native.cjs +183 -0
  97. package/dist/cjs/scanFlatValue.native.js +185 -0
  98. package/dist/cjs/scanFlatValue.native.js.map +1 -0
  99. package/dist/cjs/serializePayload.cjs +149 -0
  100. package/dist/cjs/serializePayload.native.cjs +187 -0
  101. package/dist/cjs/serializePayload.native.js +189 -0
  102. package/dist/cjs/serializePayload.native.js.map +1 -0
  103. package/dist/cjs/stateModifiers.cjs +43 -0
  104. package/dist/cjs/stateModifiers.native.cjs +45 -0
  105. package/dist/cjs/stateModifiers.native.js +47 -0
  106. package/dist/cjs/stateModifiers.native.js.map +1 -0
  107. package/dist/cjs/states.cjs +97 -0
  108. package/dist/cjs/states.native.cjs +131 -0
  109. package/dist/cjs/states.native.js +133 -0
  110. package/dist/cjs/states.native.js.map +1 -0
  111. package/dist/cjs/table.cjs +54 -0
  112. package/dist/cjs/table.native.cjs +135 -0
  113. package/dist/cjs/table.native.js +137 -0
  114. package/dist/cjs/table.native.js.map +1 -0
  115. package/dist/cjs/textDecorationFamily.cjs +129 -0
  116. package/dist/cjs/textDecorationFamily.native.cjs +199 -0
  117. package/dist/cjs/textDecorationFamily.native.js +201 -0
  118. package/dist/cjs/textDecorationFamily.native.js.map +1 -0
  119. package/dist/cjs/tooling.cjs +26 -0
  120. package/dist/cjs/tooling.native.cjs +28 -0
  121. package/dist/cjs/tooling.native.js +30 -0
  122. package/dist/cjs/tooling.native.js.map +1 -0
  123. package/dist/cjs/toolingAnnotations.cjs +105 -0
  124. package/dist/cjs/toolingAnnotations.native.cjs +133 -0
  125. package/dist/cjs/toolingAnnotations.native.js +135 -0
  126. package/dist/cjs/toolingAnnotations.native.js.map +1 -0
  127. package/dist/cjs/toolingDiagnostics.cjs +459 -0
  128. package/dist/cjs/toolingDiagnostics.native.cjs +788 -0
  129. package/dist/cjs/toolingDiagnostics.native.js +790 -0
  130. package/dist/cjs/toolingDiagnostics.native.js.map +1 -0
  131. package/dist/cjs/toolingRegistry.cjs +159 -0
  132. package/dist/cjs/toolingRegistry.native.cjs +164 -0
  133. package/dist/cjs/toolingRegistry.native.js +166 -0
  134. package/dist/cjs/toolingRegistry.native.js.map +1 -0
  135. package/dist/cjs/transformFamily.cjs +425 -0
  136. package/dist/cjs/transformFamily.native.cjs +517 -0
  137. package/dist/cjs/transformFamily.native.js +519 -0
  138. package/dist/cjs/transformFamily.native.js.map +1 -0
  139. package/dist/cjs/transition.cjs +459 -0
  140. package/dist/cjs/transition.native.cjs +499 -0
  141. package/dist/cjs/transition.native.js +501 -0
  142. package/dist/cjs/transition.native.js.map +1 -0
  143. package/dist/cjs/transitionAlign.cjs +115 -0
  144. package/dist/cjs/transitionAlign.native.cjs +154 -0
  145. package/dist/cjs/transitionAlign.native.js +156 -0
  146. package/dist/cjs/transitionAlign.native.js.map +1 -0
  147. package/dist/cjs/transitionLegacy.cjs +217 -0
  148. package/dist/cjs/transitionLegacy.native.cjs +260 -0
  149. package/dist/cjs/transitionLegacy.native.js +262 -0
  150. package/dist/cjs/transitionLegacy.native.js.map +1 -0
  151. package/dist/cjs/transitionNative.cjs +281 -0
  152. package/dist/cjs/transitionNative.native.cjs +285 -0
  153. package/dist/cjs/transitionNative.native.js +287 -0
  154. package/dist/cjs/transitionNative.native.js.map +1 -0
  155. package/dist/cjs/unitlessNumbers.cjs +86 -0
  156. package/dist/cjs/unitlessNumbers.native.cjs +106 -0
  157. package/dist/cjs/unitlessNumbers.native.js +108 -0
  158. package/dist/cjs/unitlessNumbers.native.js.map +1 -0
  159. package/dist/cjs/v6ThemeNames.cjs +47 -0
  160. package/dist/cjs/v6ThemeNames.native.cjs +53 -0
  161. package/dist/cjs/v6ThemeNames.native.js +55 -0
  162. package/dist/cjs/v6ThemeNames.native.js.map +1 -0
  163. package/dist/cjs/valueParser.cjs +148 -0
  164. package/dist/cjs/valueParser.native.cjs +150 -0
  165. package/dist/cjs/valueParser.native.js +152 -0
  166. package/dist/cjs/valueParser.native.js.map +1 -0
  167. package/dist/cjs/valueTypes.cjs +38 -0
  168. package/dist/cjs/valueTypes.native.cjs +40 -0
  169. package/dist/cjs/valueTypes.native.js +42 -0
  170. package/dist/cjs/valueTypes.native.js.map +1 -0
  171. package/dist/esm/backgroundFamily.mjs +150 -0
  172. package/dist/esm/backgroundFamily.mjs.map +1 -0
  173. package/dist/esm/backgroundFamily.native.js +167 -0
  174. package/dist/esm/backgroundFamily.native.js.map +1 -0
  175. package/dist/esm/borderFamily.mjs +146 -0
  176. package/dist/esm/borderFamily.mjs.map +1 -0
  177. package/dist/esm/borderFamily.native.js +222 -0
  178. package/dist/esm/borderFamily.native.js.map +1 -0
  179. package/dist/esm/candidate.mjs +581 -0
  180. package/dist/esm/candidate.mjs.map +1 -0
  181. package/dist/esm/candidate.native.js +792 -0
  182. package/dist/esm/candidate.native.js.map +1 -0
  183. package/dist/esm/candidateTarget.mjs +29 -0
  184. package/dist/esm/candidateTarget.mjs.map +1 -0
  185. package/dist/esm/candidateTarget.native.js +65 -0
  186. package/dist/esm/candidateTarget.native.js.map +1 -0
  187. package/dist/esm/clauseCapability.mjs +107 -0
  188. package/dist/esm/clauseCapability.mjs.map +1 -0
  189. package/dist/esm/clauseCapability.native.js +127 -0
  190. package/dist/esm/clauseCapability.native.js.map +1 -0
  191. package/dist/esm/clausePrecedence.mjs +121 -0
  192. package/dist/esm/clausePrecedence.mjs.map +1 -0
  193. package/dist/esm/clausePrecedence.native.js +170 -0
  194. package/dist/esm/clausePrecedence.native.js.map +1 -0
  195. package/dist/esm/clauseSources.mjs +23 -0
  196. package/dist/esm/clauseSources.mjs.map +1 -0
  197. package/dist/esm/clauseSources.native.js +23 -0
  198. package/dist/esm/clauseSources.native.js.map +1 -0
  199. package/dist/esm/config.mjs +103 -0
  200. package/dist/esm/config.mjs.map +1 -0
  201. package/dist/esm/config.native.js +156 -0
  202. package/dist/esm/config.native.js.map +1 -0
  203. package/dist/esm/evaluateProgram.mjs +45 -0
  204. package/dist/esm/evaluateProgram.mjs.map +1 -0
  205. package/dist/esm/evaluateProgram.native.js +48 -0
  206. package/dist/esm/evaluateProgram.native.js.map +1 -0
  207. package/dist/esm/fontShorthand.mjs +184 -0
  208. package/dist/esm/fontShorthand.mjs.map +1 -0
  209. package/dist/esm/fontShorthand.native.js +235 -0
  210. package/dist/esm/fontShorthand.native.js.map +1 -0
  211. package/dist/esm/geometricShorthand.mjs +102 -0
  212. package/dist/esm/geometricShorthand.mjs.map +1 -0
  213. package/dist/esm/geometricShorthand.native.js +106 -0
  214. package/dist/esm/geometricShorthand.native.js.map +1 -0
  215. package/dist/esm/index.mjs +1 -0
  216. package/dist/esm/index.native.js +1 -0
  217. package/dist/esm/lowerProgram.mjs +182 -0
  218. package/dist/esm/lowerProgram.mjs.map +1 -0
  219. package/dist/esm/lowerProgram.native.js +232 -0
  220. package/dist/esm/lowerProgram.native.js.map +1 -0
  221. package/dist/esm/mergeFlatValues.mjs +27 -0
  222. package/dist/esm/mergeFlatValues.mjs.map +1 -0
  223. package/dist/esm/mergeFlatValues.native.js +46 -0
  224. package/dist/esm/mergeFlatValues.native.js.map +1 -0
  225. package/dist/esm/modifierRegistry.mjs +219 -0
  226. package/dist/esm/modifierRegistry.mjs.map +1 -0
  227. package/dist/esm/modifierRegistry.native.js +397 -0
  228. package/dist/esm/modifierRegistry.native.js.map +1 -0
  229. package/dist/esm/payloadShape.mjs +49 -0
  230. package/dist/esm/payloadShape.mjs.map +1 -0
  231. package/dist/esm/payloadShape.native.js +49 -0
  232. package/dist/esm/payloadShape.native.js.map +1 -0
  233. package/dist/esm/programEligibility.mjs +22 -0
  234. package/dist/esm/programEligibility.mjs.map +1 -0
  235. package/dist/esm/programEligibility.native.js +22 -0
  236. package/dist/esm/programEligibility.native.js.map +1 -0
  237. package/dist/esm/programHash.mjs +62 -0
  238. package/dist/esm/programHash.mjs.map +1 -0
  239. package/dist/esm/programHash.native.js +80 -0
  240. package/dist/esm/programHash.native.js.map +1 -0
  241. package/dist/esm/programs.mjs +103 -0
  242. package/dist/esm/programs.mjs.map +1 -0
  243. package/dist/esm/programs.native.js +193 -0
  244. package/dist/esm/programs.native.js.map +1 -0
  245. package/dist/esm/registry.mjs +595 -0
  246. package/dist/esm/registry.mjs.map +1 -0
  247. package/dist/esm/registry.native.js +599 -0
  248. package/dist/esm/registry.native.js.map +1 -0
  249. package/dist/esm/resolvePayload.mjs +273 -0
  250. package/dist/esm/resolvePayload.mjs.map +1 -0
  251. package/dist/esm/resolvePayload.native.js +277 -0
  252. package/dist/esm/resolvePayload.native.js.map +1 -0
  253. package/dist/esm/runtime.mjs +63 -0
  254. package/dist/esm/runtime.native.js +63 -0
  255. package/dist/esm/safeAreaVariables.mjs +18 -0
  256. package/dist/esm/safeAreaVariables.mjs.map +1 -0
  257. package/dist/esm/safeAreaVariables.native.js +18 -0
  258. package/dist/esm/safeAreaVariables.native.js.map +1 -0
  259. package/dist/esm/scanFlatValue.mjs +160 -0
  260. package/dist/esm/scanFlatValue.mjs.map +1 -0
  261. package/dist/esm/scanFlatValue.native.js +160 -0
  262. package/dist/esm/scanFlatValue.native.js.map +1 -0
  263. package/dist/esm/serializePayload.mjs +125 -0
  264. package/dist/esm/serializePayload.mjs.map +1 -0
  265. package/dist/esm/serializePayload.native.js +161 -0
  266. package/dist/esm/serializePayload.native.js.map +1 -0
  267. package/dist/esm/stateModifiers.mjs +19 -0
  268. package/dist/esm/stateModifiers.mjs.map +1 -0
  269. package/dist/esm/stateModifiers.native.js +19 -0
  270. package/dist/esm/stateModifiers.native.js.map +1 -0
  271. package/dist/esm/states.mjs +69 -0
  272. package/dist/esm/states.mjs.map +1 -0
  273. package/dist/esm/states.native.js +101 -0
  274. package/dist/esm/states.native.js.map +1 -0
  275. package/dist/esm/table.mjs +31 -0
  276. package/dist/esm/table.mjs.map +1 -0
  277. package/dist/esm/table.native.js +110 -0
  278. package/dist/esm/table.native.js.map +1 -0
  279. package/dist/esm/textDecorationFamily.mjs +106 -0
  280. package/dist/esm/textDecorationFamily.mjs.map +1 -0
  281. package/dist/esm/textDecorationFamily.native.js +174 -0
  282. package/dist/esm/textDecorationFamily.native.js.map +1 -0
  283. package/dist/esm/tooling.mjs +15 -0
  284. package/dist/esm/tooling.native.js +15 -0
  285. package/dist/esm/toolingAnnotations.mjs +85 -0
  286. package/dist/esm/toolingAnnotations.mjs.map +1 -0
  287. package/dist/esm/toolingAnnotations.native.js +111 -0
  288. package/dist/esm/toolingAnnotations.native.js.map +1 -0
  289. package/dist/esm/toolingDiagnostics.mjs +428 -0
  290. package/dist/esm/toolingDiagnostics.mjs.map +1 -0
  291. package/dist/esm/toolingDiagnostics.native.js +755 -0
  292. package/dist/esm/toolingDiagnostics.native.js.map +1 -0
  293. package/dist/esm/toolingRegistry.mjs +135 -0
  294. package/dist/esm/toolingRegistry.mjs.map +1 -0
  295. package/dist/esm/toolingRegistry.native.js +138 -0
  296. package/dist/esm/toolingRegistry.native.js.map +1 -0
  297. package/dist/esm/transformFamily.mjs +392 -0
  298. package/dist/esm/transformFamily.mjs.map +1 -0
  299. package/dist/esm/transformFamily.native.js +482 -0
  300. package/dist/esm/transformFamily.native.js.map +1 -0
  301. package/dist/esm/transition.mjs +434 -0
  302. package/dist/esm/transition.mjs.map +1 -0
  303. package/dist/esm/transition.native.js +472 -0
  304. package/dist/esm/transition.native.js.map +1 -0
  305. package/dist/esm/transitionAlign.mjs +95 -0
  306. package/dist/esm/transitionAlign.mjs.map +1 -0
  307. package/dist/esm/transitionAlign.native.js +132 -0
  308. package/dist/esm/transitionAlign.native.js.map +1 -0
  309. package/dist/esm/transitionLegacy.mjs +197 -0
  310. package/dist/esm/transitionLegacy.mjs.map +1 -0
  311. package/dist/esm/transitionLegacy.native.js +238 -0
  312. package/dist/esm/transitionLegacy.native.js.map +1 -0
  313. package/dist/esm/transitionNative.mjs +257 -0
  314. package/dist/esm/transitionNative.mjs.map +1 -0
  315. package/dist/esm/transitionNative.native.js +259 -0
  316. package/dist/esm/transitionNative.native.js.map +1 -0
  317. package/dist/esm/unitlessNumbers.mjs +65 -0
  318. package/dist/esm/unitlessNumbers.mjs.map +1 -0
  319. package/dist/esm/unitlessNumbers.native.js +83 -0
  320. package/dist/esm/unitlessNumbers.native.js.map +1 -0
  321. package/dist/esm/v6ThemeNames.mjs +23 -0
  322. package/dist/esm/v6ThemeNames.mjs.map +1 -0
  323. package/dist/esm/v6ThemeNames.native.js +27 -0
  324. package/dist/esm/v6ThemeNames.native.js.map +1 -0
  325. package/dist/esm/valueParser.mjs +125 -0
  326. package/dist/esm/valueParser.mjs.map +1 -0
  327. package/dist/esm/valueParser.native.js +125 -0
  328. package/dist/esm/valueParser.native.js.map +1 -0
  329. package/dist/esm/valueTypes.mjs +14 -0
  330. package/dist/esm/valueTypes.mjs.map +1 -0
  331. package/dist/esm/valueTypes.native.js +14 -0
  332. package/dist/esm/valueTypes.native.js.map +1 -0
  333. package/package.json +98 -4
  334. package/src/backgroundFamily.ts +182 -0
  335. package/src/borderFamily.ts +172 -0
  336. package/src/candidate.ts +691 -0
  337. package/src/candidateTarget.ts +67 -0
  338. package/src/clauseCapability.ts +209 -0
  339. package/src/clausePrecedence.ts +198 -0
  340. package/src/clauseSources.ts +29 -0
  341. package/src/config.ts +169 -0
  342. package/src/evaluateProgram.ts +91 -0
  343. package/src/fontShorthand.ts +177 -0
  344. package/src/geometricShorthand.ts +105 -0
  345. package/src/index.ts +1 -0
  346. package/src/lowerProgram.ts +398 -0
  347. package/src/modifierRegistry.ts +340 -0
  348. package/src/payloadShape.ts +92 -0
  349. package/src/programEligibility.ts +46 -0
  350. package/src/programHash.ts +128 -0
  351. package/src/programs.ts +95 -0
  352. package/src/registry.ts +367 -0
  353. package/src/resolvePayload.ts +480 -0
  354. package/src/runtime.ts +32 -0
  355. package/src/safeAreaVariables.ts +19 -0
  356. package/src/scanFlatValue.ts +327 -0
  357. package/src/serializePayload.ts +199 -0
  358. package/src/stateModifiers.ts +36 -0
  359. package/src/states.ts +128 -0
  360. package/src/table.ts +47 -0
  361. package/src/textDecorationFamily.ts +119 -0
  362. package/src/tooling.ts +8 -0
  363. package/src/toolingAnnotations.ts +151 -0
  364. package/src/toolingDiagnostics.ts +735 -0
  365. package/src/toolingRegistry.ts +130 -0
  366. package/src/transformFamily.ts +590 -0
  367. package/src/transition.ts +553 -0
  368. package/src/transitionAlign.ts +165 -0
  369. package/src/transitionLegacy.ts +237 -0
  370. package/src/transitionNative.ts +357 -0
  371. package/src/unitlessNumbers.ts +61 -0
  372. package/src/v6ThemeNames.ts +40 -0
  373. package/src/valueParser.ts +193 -0
  374. package/src/valueTypes.ts +136 -0
  375. package/types/backgroundFamily.d.ts +17 -0
  376. package/types/backgroundFamily.d.ts.map +11 -0
  377. package/types/borderFamily.d.ts +23 -0
  378. package/types/borderFamily.d.ts.map +11 -0
  379. package/types/candidate.d.ts +52 -0
  380. package/types/candidate.d.ts.map +11 -0
  381. package/types/candidateTarget.d.ts +32 -0
  382. package/types/candidateTarget.d.ts.map +11 -0
  383. package/types/clauseCapability.d.ts +69 -0
  384. package/types/clauseCapability.d.ts.map +11 -0
  385. package/types/clausePrecedence.d.ts +30 -0
  386. package/types/clausePrecedence.d.ts.map +11 -0
  387. package/types/clauseSources.d.ts +12 -0
  388. package/types/clauseSources.d.ts.map +11 -0
  389. package/types/config.d.ts +44 -0
  390. package/types/config.d.ts.map +11 -0
  391. package/types/evaluateProgram.d.ts +27 -0
  392. package/types/evaluateProgram.d.ts.map +11 -0
  393. package/types/fontShorthand.d.ts +25 -0
  394. package/types/fontShorthand.d.ts.map +11 -0
  395. package/types/geometricShorthand.d.ts +21 -0
  396. package/types/geometricShorthand.d.ts.map +11 -0
  397. package/types/index.d.ts +3 -0
  398. package/types/index.d.ts.map +11 -0
  399. package/types/lowerProgram.d.ts +73 -0
  400. package/types/lowerProgram.d.ts.map +11 -0
  401. package/types/mergeFlatValues.d.ts +14 -0
  402. package/types/mergeFlatValues.d.ts.map +11 -0
  403. package/types/modifierRegistry.d.ts +70 -0
  404. package/types/modifierRegistry.d.ts.map +11 -0
  405. package/types/payloadShape.d.ts +15 -0
  406. package/types/payloadShape.d.ts.map +11 -0
  407. package/types/programEligibility.d.ts +23 -0
  408. package/types/programEligibility.d.ts.map +11 -0
  409. package/types/programHash.d.ts +20 -0
  410. package/types/programHash.d.ts.map +11 -0
  411. package/types/programs.d.ts +18 -0
  412. package/types/programs.d.ts.map +11 -0
  413. package/types/registry.d.ts +24 -0
  414. package/types/registry.d.ts.map +11 -0
  415. package/types/resolvePayload.d.ts +75 -0
  416. package/types/resolvePayload.d.ts.map +11 -0
  417. package/types/runtime.d.ts +34 -0
  418. package/types/runtime.d.ts.map +11 -0
  419. package/types/safeAreaVariables.d.ts +5 -0
  420. package/types/safeAreaVariables.d.ts.map +11 -0
  421. package/types/scanFlatValue.d.ts +29 -0
  422. package/types/scanFlatValue.d.ts.map +11 -0
  423. package/types/serializePayload.d.ts +13 -0
  424. package/types/serializePayload.d.ts.map +11 -0
  425. package/types/stateModifiers.d.ts +14 -0
  426. package/types/stateModifiers.d.ts.map +11 -0
  427. package/types/states.d.ts +22 -0
  428. package/types/states.d.ts.map +11 -0
  429. package/types/table.d.ts +4 -0
  430. package/types/table.d.ts.map +11 -0
  431. package/types/textDecorationFamily.d.ts +23 -0
  432. package/types/textDecorationFamily.d.ts.map +11 -0
  433. package/types/tooling.d.ts +10 -0
  434. package/types/tooling.d.ts.map +11 -0
  435. package/types/toolingAnnotations.d.ts +29 -0
  436. package/types/toolingAnnotations.d.ts.map +11 -0
  437. package/types/toolingDiagnostics.d.ts +114 -0
  438. package/types/toolingDiagnostics.d.ts.map +11 -0
  439. package/types/toolingRegistry.d.ts +10 -0
  440. package/types/toolingRegistry.d.ts.map +11 -0
  441. package/types/transformFamily.d.ts +83 -0
  442. package/types/transformFamily.d.ts.map +11 -0
  443. package/types/transition.d.ts +65 -0
  444. package/types/transition.d.ts.map +11 -0
  445. package/types/transitionAlign.d.ts +15 -0
  446. package/types/transitionAlign.d.ts.map +11 -0
  447. package/types/transitionLegacy.d.ts +9 -0
  448. package/types/transitionLegacy.d.ts.map +11 -0
  449. package/types/transitionNative.d.ts +41 -0
  450. package/types/transitionNative.d.ts.map +11 -0
  451. package/types/unitlessNumbers.d.ts +3 -0
  452. package/types/unitlessNumbers.d.ts.map +11 -0
  453. package/types/v6ThemeNames.d.ts +7 -0
  454. package/types/v6ThemeNames.d.ts.map +11 -0
  455. package/types/valueParser.d.ts +36 -0
  456. package/types/valueParser.d.ts.map +11 -0
  457. package/types/valueTypes.d.ts +66 -0
  458. package/types/valueTypes.d.ts.map +11 -0
@@ -0,0 +1,581 @@
1
+ import { fontWeightNames, grammarEntries, modifierAliases, prefixToEntries, radiusCornerProps, standaloneValueProps, textAlignKeywords, wholeClassConveniences, wholeClassUtilities } from "./registry.mjs";
2
+ import { createModifierRegistry } from "./modifierRegistry.mjs";
3
+ import { splitColorOpacitySuffix } from "./resolvePayload.mjs";
4
+ import { getSafeAreaEdge } from "./safeAreaVariables.mjs";
5
+
6
+ const sizingConveniences = /* @__PURE__ */ new Set([
7
+ "full",
8
+ "auto",
9
+ "screen",
10
+ "min",
11
+ "max",
12
+ "fit"
13
+ ]);
14
+ const fontGenerics = /* @__PURE__ */ new Set([
15
+ "sans",
16
+ "serif",
17
+ "mono"
18
+ ]);
19
+ const numericPattern = /^\d+(?:\.\d+)?$/;
20
+ const extraPrefixes = [
21
+ "border-x",
22
+ "border-y",
23
+ "rounded-t",
24
+ "rounded-r",
25
+ "rounded-b",
26
+ "rounded-l"
27
+ ];
28
+ const negativeTokenProps = /* @__PURE__ */ new Set([
29
+ "margin",
30
+ "marginTop",
31
+ "marginRight",
32
+ "marginBottom",
33
+ "marginLeft",
34
+ "marginHorizontal",
35
+ "marginVertical",
36
+ "top",
37
+ "right",
38
+ "bottom",
39
+ "left",
40
+ "inset",
41
+ "x",
42
+ "y",
43
+ "letterSpacing"
44
+ ]);
45
+ const borderWidthKeywords = /* @__PURE__ */ new Set([
46
+ "thin",
47
+ "medium",
48
+ "thick"
49
+ ]);
50
+ const ambiguousCssKeywords = /* @__PURE__ */ new Set([
51
+ "auto",
52
+ "dashed",
53
+ "dotted",
54
+ "double",
55
+ "groove",
56
+ "hidden",
57
+ "inherit",
58
+ "initial",
59
+ "inset",
60
+ "none",
61
+ "outset",
62
+ "revert",
63
+ "revert-layer",
64
+ "ridge",
65
+ "solid",
66
+ "unset"
67
+ ]);
68
+ const 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)";
69
+ const cssLengthPattern = new RegExp(`^-?(?:\\d+|\\d*\\.\\d+)${cssLengthUnits}$`, "i");
70
+ function hasName(names, name) {
71
+ if (!names) return false;
72
+ if (Array.isArray(names)) return names.includes(name);
73
+ if (names instanceof Set) return names.has(name);
74
+ return Object.prototype.hasOwnProperty.call(names, name);
75
+ }
76
+ function splitCandidate(candidate) {
77
+ const parts = [];
78
+ let current = "";
79
+ let bracketDepth = 0;
80
+ let escaped = false;
81
+ for (const char of candidate) {
82
+ if (escaped) {
83
+ current += char;
84
+ escaped = false;
85
+ continue;
86
+ }
87
+ if (char === "\\") {
88
+ current += char;
89
+ escaped = true;
90
+ continue;
91
+ }
92
+ if (char === "[") bracketDepth++;
93
+ if (char === "]") bracketDepth--;
94
+ if (char === ":" && bracketDepth === 0) {
95
+ parts.push(current);
96
+ current = "";
97
+ } else {
98
+ current += char;
99
+ }
100
+ }
101
+ if (!current || bracketDepth !== 0) return null;
102
+ return {
103
+ modifiers: parts,
104
+ base: current
105
+ };
106
+ }
107
+ const modifierRegistryCache = /* @__PURE__ */ new WeakMap();
108
+ function getModifierRegistry(config) {
109
+ let registry = modifierRegistryCache.get(config);
110
+ if (!registry) {
111
+ registry = createModifierRegistry(config).registry;
112
+ modifierRegistryCache.set(config, registry);
113
+ }
114
+ return registry;
115
+ }
116
+ function modifierKind(modifier, config) {
117
+ const canonical = modifierAliases[modifier] || modifier;
118
+ return getModifierRegistry(config).get(canonical) || null;
119
+ }
120
+ function modifiersAreKnown(modifiers, config) {
121
+ const seen = /* @__PURE__ */ new Set();
122
+ for (const modifier of modifiers) {
123
+ const kind = modifierKind(modifier, config);
124
+ if (!kind || seen.has(kind)) return false;
125
+ seen.add(kind);
126
+ }
127
+ return true;
128
+ }
129
+ function hasTokenDomain(config, category) {
130
+ return config.tokenNames?.[category] !== void 0;
131
+ }
132
+ function hasTokenName(config, category, name) {
133
+ return hasName(config.tokenNames?.[category], name);
134
+ }
135
+ function resolveEntries(prefix, config) {
136
+ const registered = prefixToEntries[prefix];
137
+ if (registered) return registered;
138
+ if (prefix === "border-x" || prefix === "border-y") {
139
+ const props = prefix === "border-x" ? ["borderLeft", "borderRight"] : ["borderTop", "borderBottom"];
140
+ return grammarEntries.filter((entry) => props.some((prop) => entry.prop === `${prop}Width` || entry.prop === `${prop}Color`));
141
+ }
142
+ if (prefix.startsWith("rounded-")) {
143
+ const props = radiusCornerProps[prefix.slice("rounded-".length)];
144
+ return props ? grammarEntries.filter((entry) => props.includes(entry.prop)) : [];
145
+ }
146
+ const expanded = config.shorthands?.[prefix];
147
+ if (!expanded) return [];
148
+ return grammarEntries.filter((entry) => entry.prop === expanded);
149
+ }
150
+ function findPrefix(base, config) {
151
+ const prefixes = new Set(Object.keys(prefixToEntries));
152
+ for (const prefix of extraPrefixes) prefixes.add(prefix);
153
+ for (const shorthand in config.shorthands) prefixes.add(shorthand);
154
+ let found = null;
155
+ for (const prefix of prefixes) {
156
+ if (base.startsWith(`${prefix}-`) && (!found || prefix.length > found.length)) {
157
+ found = prefix;
158
+ }
159
+ }
160
+ return found;
161
+ }
162
+ function arbitraryInner(rawValue) {
163
+ if (rawValue.length <= 2 || rawValue[0] !== "[" || rawValue.at(-1) !== "]") {
164
+ return null;
165
+ }
166
+ const inner = rawValue.slice(1, -1);
167
+ return arbitraryValueIsBalanced(decodeArbitrary(inner)) ? inner : null;
168
+ }
169
+ function arbitraryValueIsBalanced(value) {
170
+ const opening = /* @__PURE__ */ new Set([
171
+ "(",
172
+ "[",
173
+ "{"
174
+ ]);
175
+ const matching = {
176
+ ")": "(",
177
+ "]": "[",
178
+ "}": "{"
179
+ };
180
+ const stack = [];
181
+ let quote = "";
182
+ let escaped = false;
183
+ for (const char of value) {
184
+ if (escaped) {
185
+ escaped = false;
186
+ continue;
187
+ }
188
+ if (char === "\\") {
189
+ escaped = true;
190
+ continue;
191
+ }
192
+ if (quote) {
193
+ if (char === quote) quote = "";
194
+ continue;
195
+ }
196
+ if (char === "\"" || char === "'") {
197
+ quote = char;
198
+ continue;
199
+ }
200
+ if (opening.has(char)) {
201
+ stack.push(char);
202
+ continue;
203
+ }
204
+ const expected = matching[char];
205
+ if (expected && stack.pop() !== expected) return false;
206
+ }
207
+ return !escaped && !quote && stack.length === 0;
208
+ }
209
+ function fractionIsValid(value) {
210
+ const fraction = /^(\d+)\/(\d+)$/.exec(value);
211
+ return !!fraction && Number(fraction[2]) !== 0;
212
+ }
213
+ function arbitraryBorderKind(value) {
214
+ if (/^-?(?:\d+|\d*\.\d+)$/.test(value)) return "width";
215
+ if (cssLengthPattern.test(value) || borderWidthKeywords.has(value)) return "width";
216
+ if (/^(?:calc|min|max|clamp)\(/.test(value)) return "width";
217
+ if (ambiguousCssKeywords.has(value) || value.startsWith("var(")) return null;
218
+ 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)) {
219
+ return "color";
220
+ }
221
+ return null;
222
+ }
223
+ function tokenLookupName(category, value) {
224
+ if (category !== "color") return value;
225
+ const suffix = splitColorOpacitySuffix(value);
226
+ return suffix.kind === "none" ? value : suffix.name;
227
+ }
228
+ function chooseEntry(entries, prefix, rawValue, negative, config) {
229
+ if (getSafeAreaEdge(rawValue)) {
230
+ const entry = entries.find(({ tokenCategory }) => tokenCategory === "space" || tokenCategory === "size" || tokenCategory === "radius" || tokenCategory === "fontSize" || tokenCategory === "lineHeight" || tokenCategory === "letterSpacing");
231
+ if (entry) {
232
+ return {
233
+ entry,
234
+ valueKind: "convenience",
235
+ convenience: "safe-area"
236
+ };
237
+ }
238
+ }
239
+ const arbitrary = arbitraryInner(rawValue);
240
+ if (arbitrary !== null) {
241
+ if (!arbitrary) return null;
242
+ if (prefix.startsWith("border")) {
243
+ const width = entries.find((entry) => entry.prop.endsWith("Width"));
244
+ const color = entries.find((entry) => entry.prop.endsWith("Color"));
245
+ const kind = arbitraryBorderKind(decodeArbitrary(arbitrary));
246
+ if (!kind || !width || !color) return null;
247
+ return {
248
+ entry: kind === "width" ? width : color,
249
+ valueKind: "arbitrary"
250
+ };
251
+ }
252
+ if (prefix === "text") {
253
+ return {
254
+ entry: entries.find((entry) => entry.prop === "fontSize"),
255
+ valueKind: "arbitrary"
256
+ };
257
+ }
258
+ if (prefix === "font") {
259
+ return {
260
+ entry: entries.find((entry) => entry.prop === "fontFamily"),
261
+ valueKind: "arbitrary"
262
+ };
263
+ }
264
+ return {
265
+ entry: entries[0],
266
+ valueKind: "arbitrary"
267
+ };
268
+ }
269
+ if (prefix === "text") {
270
+ const fontSize = entries.find((entry) => entry.prop === "fontSize");
271
+ if (fontSize && hasTokenName(config, "fontSize", rawValue)) {
272
+ return {
273
+ entry: fontSize,
274
+ valueKind: "token"
275
+ };
276
+ }
277
+ if (textAlignKeywords.has(rawValue)) {
278
+ return {
279
+ entry: entries.find((entry) => entry.prop === "textAlign"),
280
+ valueKind: "enum"
281
+ };
282
+ }
283
+ return null;
284
+ }
285
+ if (prefix === "font") {
286
+ const fontFamily = entries.find((entry) => entry.prop === "fontFamily");
287
+ const fontWeight = entries.find((entry) => entry.prop === "fontWeight");
288
+ if (!fontFamily) return null;
289
+ const matchesFamily = hasTokenName(config, "fontFamily", rawValue);
290
+ const matchesWeight = fontWeight && hasTokenName(config, "fontWeight", rawValue);
291
+ if (matchesFamily && matchesWeight) return null;
292
+ if (matchesFamily) {
293
+ return {
294
+ entry: fontFamily,
295
+ valueKind: "token"
296
+ };
297
+ }
298
+ if (matchesWeight) {
299
+ return {
300
+ entry: fontWeight,
301
+ valueKind: "token"
302
+ };
303
+ }
304
+ return fontGenerics.has(rawValue) ? {
305
+ entry: fontFamily,
306
+ valueKind: "convenience",
307
+ convenience: "font-generic"
308
+ } : null;
309
+ }
310
+ if (prefix.startsWith("border")) {
311
+ const width = entries.find((entry) => entry.prop.endsWith("Width"));
312
+ const color = entries.find((entry) => entry.prop.endsWith("Color"));
313
+ const token = negative ? `-${rawValue}` : rawValue;
314
+ const matchesWidth = width && hasTokenName(config, "space", token);
315
+ const colorName = tokenLookupName("color", rawValue);
316
+ const matchesColor = color && hasTokenName(config, "color", colorName);
317
+ if (matchesWidth && matchesColor) return null;
318
+ if (matchesWidth) {
319
+ return {
320
+ entry: width,
321
+ valueKind: "token"
322
+ };
323
+ }
324
+ if (matchesColor) {
325
+ return {
326
+ entry: color,
327
+ valueKind: "token"
328
+ };
329
+ }
330
+ return null;
331
+ }
332
+ for (const entry of entries) {
333
+ if (entry.tokenCategory) {
334
+ const name = negative ? `-${rawValue}` : rawValue;
335
+ const tokenName = tokenLookupName(entry.tokenCategory, name);
336
+ if (hasTokenName(config, entry.tokenCategory, tokenName)) {
337
+ return {
338
+ entry,
339
+ valueKind: "token"
340
+ };
341
+ }
342
+ if (entry.tokenCategory === "size" && (sizingConveniences.has(rawValue) || fractionIsValid(rawValue))) {
343
+ return {
344
+ entry,
345
+ valueKind: "convenience",
346
+ convenience: "sizing-keyword"
347
+ };
348
+ }
349
+ if (entry.tokenCategory === "zIndex" && numericPattern.test(rawValue)) {
350
+ return {
351
+ entry,
352
+ valueKind: "convenience",
353
+ convenience: "integer"
354
+ };
355
+ }
356
+ continue;
357
+ }
358
+ if (prefix === "opacity" || prefix === "scale") {
359
+ if (numericPattern.test(rawValue)) {
360
+ return {
361
+ entry,
362
+ valueKind: "convenience",
363
+ convenience: "percentage"
364
+ };
365
+ }
366
+ continue;
367
+ }
368
+ if (entry.prop === "zIndex" && numericPattern.test(rawValue)) {
369
+ return {
370
+ entry,
371
+ valueKind: "convenience",
372
+ convenience: "integer"
373
+ };
374
+ }
375
+ }
376
+ return null;
377
+ }
378
+ function parseCandidate(candidate, config) {
379
+ const split = splitCandidate(candidate);
380
+ if (!split || !modifiersAreKnown(split.modifiers, config)) {
381
+ return null;
382
+ }
383
+ const modifiers = split.modifiers.map((modifier) => modifierAliases[modifier] || modifier);
384
+ const negative = split.base[0] === "-";
385
+ const core = negative ? split.base.slice(1) : split.base;
386
+ const prefix = findPrefix(core, config);
387
+ let dynamic;
388
+ if (prefix) {
389
+ const rawValue = core.slice(prefix.length + 1);
390
+ if (rawValue) {
391
+ const entries = resolveEntries(prefix, config);
392
+ const selected = chooseEntry(entries, prefix, rawValue, negative, config);
393
+ if (selected && (!negative || selected.valueKind === "token" && negativeTokenProps.has(selected.entry.prop))) {
394
+ dynamic = {
395
+ prefix,
396
+ rawValue,
397
+ selected
398
+ };
399
+ if (selected.valueKind === "token") {
400
+ return {
401
+ candidate,
402
+ base: split.base,
403
+ modifiers,
404
+ negative,
405
+ kind: "dynamic",
406
+ prefix,
407
+ rawValue,
408
+ arbitrary: arbitraryInner(rawValue) !== null,
409
+ entry: selected.entry,
410
+ valueKind: selected.valueKind,
411
+ convenience: selected.convenience
412
+ };
413
+ }
414
+ }
415
+ }
416
+ }
417
+ const direct = wholeClassUtilities[split.base];
418
+ if (!negative && direct) {
419
+ const convenience = wholeClassConveniences[split.base];
420
+ return {
421
+ candidate,
422
+ base: split.base,
423
+ modifiers,
424
+ kind: "utility",
425
+ valueKind: convenience ? "convenience" : "enum",
426
+ properties: direct,
427
+ convenience,
428
+ negative: false
429
+ };
430
+ }
431
+ if (dynamic) {
432
+ return {
433
+ candidate,
434
+ base: split.base,
435
+ modifiers,
436
+ negative,
437
+ kind: "dynamic",
438
+ prefix: dynamic.prefix,
439
+ rawValue: dynamic.rawValue,
440
+ arbitrary: arbitraryInner(dynamic.rawValue) !== null,
441
+ entry: dynamic.selected.entry,
442
+ valueKind: dynamic.selected.valueKind,
443
+ convenience: dynamic.selected.convenience
444
+ };
445
+ }
446
+ return null;
447
+ }
448
+ function classifyCandidate(candidate, config) {
449
+ const parsed = parseCandidate(candidate, config);
450
+ return parsed ? {
451
+ kind: "tamagui",
452
+ parsed
453
+ } : {
454
+ kind: "passthrough",
455
+ reason: "not in the configured Tamagui grammar"
456
+ };
457
+ }
458
+ function tokenValidationConfig(entry, value, config) {
459
+ const tokenNames = { ...config?.tokenNames };
460
+ const category = entry.tokenCategory;
461
+ if (tokenNames[category] === void 0) {
462
+ tokenNames[category] = [tokenLookupName(category, value)];
463
+ }
464
+ for (const other of prefixToEntries[entry.prefix] || []) {
465
+ if (other.tokenCategory && tokenNames[other.tokenCategory] === void 0) {
466
+ tokenNames[other.tokenCategory] = [];
467
+ }
468
+ }
469
+ return {
470
+ ...config,
471
+ tokenNames
472
+ };
473
+ }
474
+ function formatCandidate({ prop, value, valueKind, modifiers = [] }, config) {
475
+ const entry = grammarEntries.find((candidate2) => candidate2.prop === prop);
476
+ if (!entry) return null;
477
+ if (valueKind === "arbitrary" && value === "") return null;
478
+ if (!modifiersAreKnown(modifiers, config || {})) return null;
479
+ const normalizedModifiers = modifiers.map((modifier) => modifierAliases[modifier] || modifier);
480
+ if (valueKind === "enum") {
481
+ const whole2 = standaloneValueProps[prop]?.[value];
482
+ if (whole2) {
483
+ const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(":")}:${whole2}` : whole2;
484
+ if (config) {
485
+ const parsed2 = parseCandidate(candidate2, config);
486
+ if (!parsed2?.properties || parsed2.properties[prop] !== value) return null;
487
+ }
488
+ return candidate2;
489
+ }
490
+ if (prop === "fontWeight") {
491
+ const name = fontWeightNames[value];
492
+ if (!name) return null;
493
+ const core2 = `font-${name}`;
494
+ if (String(wholeClassUtilities[core2]?.fontWeight) !== value) return null;
495
+ const candidate2 = normalizedModifiers.length ? `${normalizedModifiers.join(":")}:${core2}` : core2;
496
+ if (config) {
497
+ const parsed2 = parseCandidate(candidate2, config);
498
+ if (!parsed2?.properties || String(parsed2.properties.fontWeight) !== value) {
499
+ return null;
500
+ }
501
+ }
502
+ return candidate2;
503
+ }
504
+ }
505
+ if (!entry.prefix) return null;
506
+ if (valueKind === "token") {
507
+ if (!entry.tokenCategory) return null;
508
+ const sourceDomainKnown = !!config && hasTokenDomain(config, entry.tokenCategory);
509
+ const lookupName = tokenLookupName(entry.tokenCategory, value);
510
+ if (sourceDomainKnown && !hasTokenName(config, entry.tokenCategory, lookupName)) return null;
511
+ const colliding = prefixToEntries[entry.prefix].filter((other) => other.prop !== prop && other.tokenCategory);
512
+ if (colliding.length) {
513
+ if (!config || !sourceDomainKnown) return null;
514
+ for (const other of colliding) {
515
+ if (!hasTokenDomain(config, other.tokenCategory)) return null;
516
+ if (hasTokenName(config, other.tokenCategory, value)) return null;
517
+ }
518
+ }
519
+ }
520
+ const formattedValue = valueKind === "arbitrary" ? `[${encodeArbitrary(value)}]` : value;
521
+ const core = formattedValue[0] === "-" && formattedValue[1] !== "[" ? `-${entry.prefix}-${formattedValue.slice(1)}` : formattedValue ? `${entry.prefix}-${formattedValue}` : entry.prefix;
522
+ const candidate = normalizedModifiers.length ? `${normalizedModifiers.join(":")}:${core}` : core;
523
+ const whole = wholeClassUtilities[core];
524
+ if (whole) {
525
+ if (valueKind === "token") {
526
+ if (!config || !hasTokenDomain(config, entry.tokenCategory)) return null;
527
+ } else if (config) {
528
+ const parsed2 = parseCandidate(candidate, config);
529
+ if (parsed2?.kind === "utility") {
530
+ return Object.prototype.hasOwnProperty.call(parsed2.properties, prop) && String(parsed2.properties?.[prop]) === value ? candidate : null;
531
+ }
532
+ return parsed2?.entry?.prop === prop && parsed2.valueKind === valueKind ? candidate : null;
533
+ } else if (Object.prototype.hasOwnProperty.call(whole, prop) && String(whole[prop]) === value) {
534
+ return candidate;
535
+ } else {
536
+ return null;
537
+ }
538
+ }
539
+ if (valueKind === "token") {
540
+ if (!hasTokenDomain(config || {}, entry.tokenCategory) && parseCandidate(candidate, config || {})) {
541
+ return null;
542
+ }
543
+ const parsed2 = parseCandidate(candidate, tokenValidationConfig(entry, value, config));
544
+ const parsedValue = parsed2?.rawValue ? `${parsed2.negative ? "-" : ""}${parsed2.rawValue}` : null;
545
+ if (parsed2?.kind !== "dynamic" || parsed2.entry?.prop !== prop || parsed2.valueKind !== "token" || parsedValue !== value) {
546
+ return null;
547
+ }
548
+ return candidate;
549
+ }
550
+ const parsed = parseCandidate(candidate, config || {});
551
+ if (!parsed || parsed.entry?.prop !== prop || parsed.valueKind !== valueKind) return null;
552
+ return candidate;
553
+ }
554
+ function encodeArbitrary(value) {
555
+ let encoded = "";
556
+ for (const char of value) {
557
+ if (char === "\\" || char === "_" || char === "[" || char === "]") {
558
+ encoded += `\\${char}`;
559
+ } else if (/\s/.test(char)) {
560
+ encoded += "_";
561
+ } else {
562
+ encoded += char;
563
+ }
564
+ }
565
+ return encoded;
566
+ }
567
+ function decodeArbitrary(value) {
568
+ let decoded = "";
569
+ for (let index = 0; index < value.length; index++) {
570
+ const char = value[index];
571
+ if (char === "\\" && index + 1 < value.length) {
572
+ decoded += value[++index];
573
+ } else {
574
+ decoded += char === "_" ? " " : char;
575
+ }
576
+ }
577
+ return decoded;
578
+ }
579
+
580
+ export { classifyCandidate, decodeArbitrary, encodeArbitrary, formatCandidate, hasTokenName, parseCandidate };
581
+ //# sourceMappingURL=candidate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate.js","names":[],"sources":["esm/candidate.js"],"sourcesContent":["import {\n grammarEntries,\n fontWeightNames,\n modifierAliases,\n prefixToEntries,\n radiusCornerProps,\n standaloneValueProps,\n textAlignKeywords,\n wholeClassConveniences,\n wholeClassUtilities\n} from \"./registry\";\nimport { createModifierRegistry } from \"./modifierRegistry\";\nimport { splitColorOpacitySuffix } from \"./resolvePayload\";\nimport { getSafeAreaEdge } from \"./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];\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 Object.prototype.hasOwnProperty.call(names, name);\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 modifierRegistryCache = /* @__PURE__ */ new WeakMap();\nfunction getModifierRegistry(config) {\n let registry = modifierRegistryCache.get(config);\n if (!registry) {\n registry = createModifierRegistry(config).registry;\n modifierRegistryCache.set(config, registry);\n }\n return registry;\n}\nfunction modifierKind(modifier, config) {\n const canonical = modifierAliases[modifier] || modifier;\n return getModifierRegistry(config).get(canonical) || null;\n}\nfunction modifiersAreKnown(modifiers, config) {\n const seen = /* @__PURE__ */ new Set();\n for (const modifier of modifiers) {\n const kind = modifierKind(modifier, config);\n if (!kind || seen.has(kind)) return false;\n seen.add(kind);\n }\n return true;\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 resolveEntries(prefix, config) {\n const registered = prefixToEntries[prefix];\n if (registered) return registered;\n if (prefix === \"border-x\" || prefix === \"border-y\") {\n const props = prefix === \"border-x\" ? [\"borderLeft\", \"borderRight\"] : [\"borderTop\", \"borderBottom\"];\n return grammarEntries.filter(\n (entry) => props.some((prop) => entry.prop === `${prop}Width` || entry.prop === `${prop}Color`)\n );\n }\n if (prefix.startsWith(\"rounded-\")) {\n const props = radiusCornerProps[prefix.slice(\"rounded-\".length)];\n return props ? grammarEntries.filter((entry) => props.includes(entry.prop)) : [];\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 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 return {\n entry: entries.find((entry) => entry.prop === \"fontSize\"),\n valueKind: \"arbitrary\"\n };\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 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 || !modifiersAreKnown(split.modifiers, config)) {\n return null;\n }\n const modifiers = split.modifiers.map(\n (modifier) => modifierAliases[modifier] || modifier\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 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 if (!modifiersAreKnown(modifiers, config || {})) return null;\n const normalizedModifiers = modifiers.map(\n (modifier) => modifierAliases[modifier] || modifier\n );\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 Object.prototype.hasOwnProperty.call(parsed2.properties, prop) && String(parsed2.properties?.[prop]) === value ? candidate : null;\n }\n return parsed2?.entry?.prop === prop && parsed2.valueKind === valueKind ? candidate : null;\n } else if (Object.prototype.hasOwnProperty.call(whole, prop) && 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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"}