boss-css 0.0.14 → 0.0.16

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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -1
  3. package/dist/ai/server.cjs +1 -0
  4. package/dist/ai/server.mjs +1 -0
  5. package/dist/ai/skills.cjs +3 -0
  6. package/dist/ai/skills.mjs +3 -0
  7. package/dist/cli/tasks/init.cjs +54 -30
  8. package/dist/cli/tasks/init.mjs +54 -30
  9. package/dist/cli/templates/init.cjs +5 -5
  10. package/dist/cli/templates/init.mjs +5 -5
  11. package/dist/devtools-app/index.mjs +320 -0
  12. package/dist/devtools-app/monaco/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
  13. package/dist/devtools-app/monaco/vs/abap-D-t0cyap.js +1 -0
  14. package/dist/devtools-app/monaco/vs/apex-CcIm7xu6.js +1 -0
  15. package/dist/devtools-app/monaco/vs/assets/css.worker-HnVq6Ewq.js +93 -0
  16. package/dist/devtools-app/monaco/vs/assets/editor.worker-Be8ye1pW.js +26 -0
  17. package/dist/devtools-app/monaco/vs/assets/html.worker-B51mlPHg.js +470 -0
  18. package/dist/devtools-app/monaco/vs/assets/json.worker-DKiEKt88.js +58 -0
  19. package/dist/devtools-app/monaco/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
  20. package/dist/devtools-app/monaco/vs/azcli-BA0tQDCg.js +1 -0
  21. package/dist/devtools-app/monaco/vs/basic-languages/monaco.contribution.js +1 -0
  22. package/dist/devtools-app/monaco/vs/bat-C397hTD6.js +1 -0
  23. package/dist/devtools-app/monaco/vs/bicep-DF5aW17k.js +2 -0
  24. package/dist/devtools-app/monaco/vs/cameligo-plsz8qhj.js +1 -0
  25. package/dist/devtools-app/monaco/vs/clojure-Y2auQMzK.js +1 -0
  26. package/dist/devtools-app/monaco/vs/coffee-Bu45yuWE.js +1 -0
  27. package/dist/devtools-app/monaco/vs/cpp-CkKPQIni.js +1 -0
  28. package/dist/devtools-app/monaco/vs/csharp-CX28MZyh.js +1 -0
  29. package/dist/devtools-app/monaco/vs/csp-D8uWnyxW.js +1 -0
  30. package/dist/devtools-app/monaco/vs/css-CaeNmE3S.js +3 -0
  31. package/dist/devtools-app/monaco/vs/cssMode-CjiAH6dQ.js +1 -0
  32. package/dist/devtools-app/monaco/vs/cypher-DVThT8BS.js +1 -0
  33. package/dist/devtools-app/monaco/vs/dart-CmGfCvrO.js +1 -0
  34. package/dist/devtools-app/monaco/vs/dockerfile-CZqqYdch.js +1 -0
  35. package/dist/devtools-app/monaco/vs/ecl-30fUercY.js +1 -0
  36. package/dist/devtools-app/monaco/vs/editor/editor.main.css +1 -0
  37. package/dist/devtools-app/monaco/vs/editor/editor.main.js +5 -0
  38. package/dist/devtools-app/monaco/vs/editor.api-CalNCsUg.js +903 -0
  39. package/dist/devtools-app/monaco/vs/elixir-xjPaIfzF.js +1 -0
  40. package/dist/devtools-app/monaco/vs/flow9-DqtmStfK.js +1 -0
  41. package/dist/devtools-app/monaco/vs/freemarker2-Cz_sV6Md.js +3 -0
  42. package/dist/devtools-app/monaco/vs/fsharp-BOMdg4U1.js +1 -0
  43. package/dist/devtools-app/monaco/vs/go-D_hbi-Jt.js +1 -0
  44. package/dist/devtools-app/monaco/vs/graphql-CKUU4kLG.js +1 -0
  45. package/dist/devtools-app/monaco/vs/handlebars-OwglfO-1.js +1 -0
  46. package/dist/devtools-app/monaco/vs/hcl-DTaboeZW.js +1 -0
  47. package/dist/devtools-app/monaco/vs/html-Pa1xEWsY.js +1 -0
  48. package/dist/devtools-app/monaco/vs/htmlMode-Bz67EXwp.js +1 -0
  49. package/dist/devtools-app/monaco/vs/ini-CsNwO04R.js +1 -0
  50. package/dist/devtools-app/monaco/vs/java-CI4ZMsH9.js +1 -0
  51. package/dist/devtools-app/monaco/vs/javascript-PczUCGdz.js +1 -0
  52. package/dist/devtools-app/monaco/vs/jsonMode-DULH5oaX.js +7 -0
  53. package/dist/devtools-app/monaco/vs/julia-BwzEvaQw.js +1 -0
  54. package/dist/devtools-app/monaco/vs/kotlin-IUYPiTV8.js +1 -0
  55. package/dist/devtools-app/monaco/vs/language/css/monaco.contribution.js +1 -0
  56. package/dist/devtools-app/monaco/vs/language/html/monaco.contribution.js +1 -0
  57. package/dist/devtools-app/monaco/vs/language/json/monaco.contribution.js +1 -0
  58. package/dist/devtools-app/monaco/vs/language/typescript/monaco.contribution.js +1 -0
  59. package/dist/devtools-app/monaco/vs/less-C0eDYdqa.js +2 -0
  60. package/dist/devtools-app/monaco/vs/lexon-iON-Kj97.js +1 -0
  61. package/dist/devtools-app/monaco/vs/liquid-DqKjdPGy.js +1 -0
  62. package/dist/devtools-app/monaco/vs/loader.js +1368 -0
  63. package/dist/devtools-app/monaco/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
  64. package/dist/devtools-app/monaco/vs/lua-DtygF91M.js +1 -0
  65. package/dist/devtools-app/monaco/vs/m3-CsR4AuFi.js +1 -0
  66. package/dist/devtools-app/monaco/vs/markdown-C_rD0bIw.js +1 -0
  67. package/dist/devtools-app/monaco/vs/mdx-DEWtB1K5.js +1 -0
  68. package/dist/devtools-app/monaco/vs/mips-CiYP61RB.js +1 -0
  69. package/dist/devtools-app/monaco/vs/monaco.contribution-D2OdxNBt.js +1 -0
  70. package/dist/devtools-app/monaco/vs/monaco.contribution-DO3azKX8.js +1 -0
  71. package/dist/devtools-app/monaco/vs/monaco.contribution-EcChJV6a.js +1 -0
  72. package/dist/devtools-app/monaco/vs/monaco.contribution-qLAYrEOP.js +1 -0
  73. package/dist/devtools-app/monaco/vs/msdax-C38-sJlp.js +1 -0
  74. package/dist/devtools-app/monaco/vs/mysql-CdtbpvbG.js +1 -0
  75. package/dist/devtools-app/monaco/vs/nls.messages-loader.js +1 -0
  76. package/dist/devtools-app/monaco/vs/nls.messages.cs.js.js +17 -0
  77. package/dist/devtools-app/monaco/vs/nls.messages.de.js.js +17 -0
  78. package/dist/devtools-app/monaco/vs/nls.messages.es.js.js +17 -0
  79. package/dist/devtools-app/monaco/vs/nls.messages.fr.js.js +15 -0
  80. package/dist/devtools-app/monaco/vs/nls.messages.it.js.js +15 -0
  81. package/dist/devtools-app/monaco/vs/nls.messages.ja.js.js +17 -0
  82. package/dist/devtools-app/monaco/vs/nls.messages.js.js +10 -0
  83. package/dist/devtools-app/monaco/vs/nls.messages.ko.js.js +25 -0
  84. package/dist/devtools-app/monaco/vs/nls.messages.pl.js.js +17 -0
  85. package/dist/devtools-app/monaco/vs/nls.messages.pt-br.js.js +6 -0
  86. package/dist/devtools-app/monaco/vs/nls.messages.ru.js.js +17 -0
  87. package/dist/devtools-app/monaco/vs/nls.messages.tr.js.js +15 -0
  88. package/dist/devtools-app/monaco/vs/nls.messages.zh-cn.js.js +17 -0
  89. package/dist/devtools-app/monaco/vs/nls.messages.zh-tw.js.js +15 -0
  90. package/dist/devtools-app/monaco/vs/objective-c-CntZFaHX.js +1 -0
  91. package/dist/devtools-app/monaco/vs/pascal-r6kuqfl_.js +1 -0
  92. package/dist/devtools-app/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
  93. package/dist/devtools-app/monaco/vs/perl-DABw_TcH.js +1 -0
  94. package/dist/devtools-app/monaco/vs/pgsql-me_jFXeX.js +1 -0
  95. package/dist/devtools-app/monaco/vs/php-D_kh-9LK.js +1 -0
  96. package/dist/devtools-app/monaco/vs/pla-VfZjczW0.js +1 -0
  97. package/dist/devtools-app/monaco/vs/postiats-BBSzz8Pk.js +1 -0
  98. package/dist/devtools-app/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
  99. package/dist/devtools-app/monaco/vs/powershell-B-7ap1zc.js +1 -0
  100. package/dist/devtools-app/monaco/vs/protobuf-BmtuEB1A.js +2 -0
  101. package/dist/devtools-app/monaco/vs/pug-BRpRNeEb.js +1 -0
  102. package/dist/devtools-app/monaco/vs/python-Cr0UkIbn.js +1 -0
  103. package/dist/devtools-app/monaco/vs/qsharp-BzsFaUU9.js +1 -0
  104. package/dist/devtools-app/monaco/vs/r-f8dDdrp4.js +1 -0
  105. package/dist/devtools-app/monaco/vs/razor-BYAHOTkz.js +1 -0
  106. package/dist/devtools-app/monaco/vs/redis-fvZQY4PI.js +1 -0
  107. package/dist/devtools-app/monaco/vs/redshift-45Et0LQi.js +1 -0
  108. package/dist/devtools-app/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
  109. package/dist/devtools-app/monaco/vs/ruby-CZO8zYTz.js +1 -0
  110. package/dist/devtools-app/monaco/vs/rust-Bfetafyc.js +1 -0
  111. package/dist/devtools-app/monaco/vs/sb-3GYllVck.js +1 -0
  112. package/dist/devtools-app/monaco/vs/scala-foMgrKo1.js +1 -0
  113. package/dist/devtools-app/monaco/vs/scheme-CHdMtr7p.js +1 -0
  114. package/dist/devtools-app/monaco/vs/scss-C1cmLt9V.js +3 -0
  115. package/dist/devtools-app/monaco/vs/shell-ClXCKCEW.js +1 -0
  116. package/dist/devtools-app/monaco/vs/solidity-MZ6ExpPy.js +1 -0
  117. package/dist/devtools-app/monaco/vs/sophia-DWkuSsPQ.js +1 -0
  118. package/dist/devtools-app/monaco/vs/sparql-AUGFYSyk.js +1 -0
  119. package/dist/devtools-app/monaco/vs/sql-32GpJSV2.js +1 -0
  120. package/dist/devtools-app/monaco/vs/st-CuDFIVZ_.js +1 -0
  121. package/dist/devtools-app/monaco/vs/swift-n-2HociN.js +3 -0
  122. package/dist/devtools-app/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
  123. package/dist/devtools-app/monaco/vs/tcl-D74tq1nH.js +1 -0
  124. package/dist/devtools-app/monaco/vs/tsMode-CZz1Umrk.js +11 -0
  125. package/dist/devtools-app/monaco/vs/twig-C6taOxMV.js +1 -0
  126. package/dist/devtools-app/monaco/vs/typescript-DfOrAzoV.js +1 -0
  127. package/dist/devtools-app/monaco/vs/typespec-D-PIh9Xw.js +1 -0
  128. package/dist/devtools-app/monaco/vs/vb-Dyb2648j.js +1 -0
  129. package/dist/devtools-app/monaco/vs/wgsl-BhLXMOR0.js +298 -0
  130. package/dist/devtools-app/monaco/vs/workers-DcJshg-q.js +1 -0
  131. package/dist/devtools-app/monaco/vs/xml-CdsdnY8S.js +1 -0
  132. package/dist/devtools-app/monaco/vs/yaml-DYGvmE88.js +1 -0
  133. package/dist/eslint-plugin/index.cjs +5 -2
  134. package/dist/eslint-plugin/index.mjs +5 -2
  135. package/dist/eslint-plugin/rules/prefer-unitless-values.cjs +217 -0
  136. package/dist/eslint-plugin/rules/prefer-unitless-values.mjs +217 -0
  137. package/dist/eslint-plugin/utils/api.cjs +3 -4
  138. package/dist/eslint-plugin/utils/api.mjs +2 -2
  139. package/dist/native/server.cjs +4 -4
  140. package/dist/native/server.mjs +4 -4
  141. package/dist/parser/jsx/extractCode.cjs +3 -2
  142. package/dist/parser/jsx/extractCode.mjs +3 -2
  143. package/dist/parser/jsx/extractProps.cjs +7 -1
  144. package/dist/parser/jsx/extractProps.mjs +7 -1
  145. package/dist/parser/jsx/server.cjs +13 -7
  146. package/dist/parser/jsx/server.mjs +13 -7
  147. package/dist/prop/at/shared.cjs +3 -3
  148. package/dist/prop/at/shared.mjs +3 -3
  149. package/dist/tasks/postcss.cjs +16 -5
  150. package/dist/tasks/postcss.mjs +16 -5
  151. package/dist/transform/cache.cjs +0 -3
  152. package/dist/transform/cache.mjs +0 -2
  153. package/dist/use/token/browser.cjs +17 -9
  154. package/dist/use/token/browser.mjs +18 -10
  155. package/dist/use/token/normalize.cjs +474 -0
  156. package/dist/use/token/normalize.mjs +473 -0
  157. package/dist/use/token/propMap.cjs +34 -5
  158. package/dist/use/token/propMap.mjs +34 -6
  159. package/dist/use/token/runtime-only.cjs +36 -47
  160. package/dist/use/token/runtime-only.mjs +37 -48
  161. package/dist/use/token/server.cjs +82 -15
  162. package/dist/use/token/server.mjs +83 -17
  163. package/dist/use/token/vars.cjs +14 -2
  164. package/dist/use/token/vars.mjs +15 -2
  165. package/package.json +13 -13
@@ -1,3 +1,4 @@
1
+ const require_normalize = require('./normalize.cjs');
1
2
  const require_vars = require('./vars.cjs');
2
3
  const require_propMap = require('./propMap.cjs');
3
4
 
@@ -59,26 +60,13 @@ const tokenState = /* @__PURE__ */ new WeakMap();
59
60
  const tokenAlphaKeyPattern = /^[a-zA-Z0-9_.-]+$/;
60
61
  const getTokenState = (api) => {
61
62
  if (tokenState.has(api)) return tokenState.get(api);
62
- const tokens = mergeTokens(defaultTokens, api.tokens);
63
- const byProp = /* @__PURE__ */ new Map();
64
- for (const [group, values] of Object.entries(tokens)) {
65
- const propsToMap = require_propMap.propMap.get(group) ?? new Set([group]);
66
- for (const prop of propsToMap) {
67
- const dashProp = api?.camelCaseToDash ? api.camelCaseToDash(prop) : prop;
68
- byProp.set(prop, values);
69
- byProp.set(dashProp, values);
70
- }
71
- }
72
- const state = {
73
- groups: tokens,
74
- byProp
75
- };
63
+ const state = { groups: require_normalize.normalizeTokens(mergeTokens(defaultTokens, api.tokens)) };
76
64
  tokenState.set(api, state);
77
65
  return state;
78
66
  };
79
67
  const resolveTokenParts = (values, pathParts) => {
80
68
  if (!pathParts.length) return values;
81
- return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key], values);
69
+ return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key]?.$value ?? acc?.[key], values);
82
70
  };
83
71
  const parseTokenAlphaValue = (value) => {
84
72
  const slashIndex = value.lastIndexOf("/");
@@ -111,49 +99,50 @@ const getTokenPath = (api, prop, value) => {
111
99
  source: "group"
112
100
  };
113
101
  if (typeof value !== "string") return null;
114
- const { byProp, groups } = getTokenState(api);
102
+ const { groups } = getTokenState(api);
115
103
  const dashProp = api?.camelCaseToDash ? api.camelCaseToDash(prop) : prop;
116
- const groupCandidates = [
117
- require_propMap.getTokenGroupForProp(prop),
118
- require_propMap.getTokenGroupForProp(dashProp),
119
- prop,
120
- dashProp
121
- ].filter(Boolean);
122
- let groupName = groupCandidates[0] ?? prop;
123
- let values = byProp.get(prop) ?? byProp.get(dashProp);
124
- if (!values) for (const candidate of groupCandidates) {
125
- const groupValues = groups?.[candidate];
126
- if (groupValues) {
127
- groupName = candidate;
128
- values = groupValues;
129
- break;
130
- }
131
- }
132
- if (!values) return null;
133
- if (typeof value === "string") {
134
- const tokenAlpha = parseTokenAlphaValue(value);
135
- if (tokenAlpha) {
136
- if (resolveTokenParts(values, tokenAlpha.base.split(".")) === void 0) return null;
137
- if (tokenAlpha.alpha === null) return null;
104
+ const groupCandidates = [];
105
+ const seen = /* @__PURE__ */ new Set();
106
+ const addCandidate = (group) => {
107
+ if (!group || seen.has(group)) return;
108
+ seen.add(group);
109
+ groupCandidates.push(group);
110
+ };
111
+ for (const group of require_propMap.getTokenGroupsForProp(prop)) addCandidate(group);
112
+ for (const group of require_propMap.getTokenGroupsForProp(dashProp)) addCandidate(group);
113
+ addCandidate(prop);
114
+ addCandidate(dashProp);
115
+ if (!groupCandidates.length) return null;
116
+ if (typeof value !== "string") return null;
117
+ const tokenAlphaCandidate = parseTokenAlphaValue(value);
118
+ const baseParts = tokenAlphaCandidate ? tokenAlphaCandidate.base.split(".") : [];
119
+ const rawParts = value.split(".");
120
+ const colorTokens = groups?.color;
121
+ for (const group of groupCandidates) {
122
+ const values = groups?.[group];
123
+ if (!values) continue;
124
+ if (tokenAlphaCandidate && values === colorTokens) {
125
+ if (resolveTokenParts(values, baseParts) === void 0) continue;
126
+ if (tokenAlphaCandidate.alpha === null) return null;
138
127
  return {
139
- path: `${groupName}.${tokenAlpha.base}`,
128
+ path: `${group}.${tokenAlphaCandidate.base}`,
140
129
  source: "prop",
141
130
  values,
142
- alpha: tokenAlpha.alpha,
131
+ alpha: tokenAlphaCandidate.alpha,
143
132
  selectorValue: value
144
133
  };
145
134
  }
146
- if (resolveTokenParts(values, value.split(".")) !== void 0) return {
147
- path: `${groupName}.${value}`,
135
+ if (resolveTokenParts(values, rawParts) !== void 0) return {
136
+ path: `${group}.${value}`,
137
+ source: "prop",
138
+ values
139
+ };
140
+ if (value in values) return {
141
+ path: `${group}.${value}`,
148
142
  source: "prop",
149
143
  values
150
144
  };
151
145
  }
152
- if (value in values) return {
153
- path: `${groupName}.${value}`,
154
- source: "prop",
155
- values
156
- };
157
146
  return null;
158
147
  };
159
148
  const resolveRuntimeToken = (api, prop, value) => {
@@ -1,5 +1,6 @@
1
+ import { normalizeTokens } from "./normalize.mjs";
1
2
  import { createTokenVars } from "./vars.mjs";
2
- import { getTokenGroupForProp, propMap, setTokenPropGroups } from "./propMap.mjs";
3
+ import { getTokenGroupsForProp, setTokenPropGroups } from "./propMap.mjs";
3
4
 
4
5
  //#region src/use/token/runtime-only.ts
5
6
  let currentApi = null;
@@ -59,26 +60,13 @@ const tokenState = /* @__PURE__ */ new WeakMap();
59
60
  const tokenAlphaKeyPattern = /^[a-zA-Z0-9_.-]+$/;
60
61
  const getTokenState = (api) => {
61
62
  if (tokenState.has(api)) return tokenState.get(api);
62
- const tokens = mergeTokens(defaultTokens, api.tokens);
63
- const byProp = /* @__PURE__ */ new Map();
64
- for (const [group, values] of Object.entries(tokens)) {
65
- const propsToMap = propMap.get(group) ?? new Set([group]);
66
- for (const prop of propsToMap) {
67
- const dashProp = api?.camelCaseToDash ? api.camelCaseToDash(prop) : prop;
68
- byProp.set(prop, values);
69
- byProp.set(dashProp, values);
70
- }
71
- }
72
- const state = {
73
- groups: tokens,
74
- byProp
75
- };
63
+ const state = { groups: normalizeTokens(mergeTokens(defaultTokens, api.tokens)) };
76
64
  tokenState.set(api, state);
77
65
  return state;
78
66
  };
79
67
  const resolveTokenParts = (values, pathParts) => {
80
68
  if (!pathParts.length) return values;
81
- return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key], values);
69
+ return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key]?.$value ?? acc?.[key], values);
82
70
  };
83
71
  const parseTokenAlphaValue = (value) => {
84
72
  const slashIndex = value.lastIndexOf("/");
@@ -111,49 +99,50 @@ const getTokenPath = (api, prop, value) => {
111
99
  source: "group"
112
100
  };
113
101
  if (typeof value !== "string") return null;
114
- const { byProp, groups } = getTokenState(api);
102
+ const { groups } = getTokenState(api);
115
103
  const dashProp = api?.camelCaseToDash ? api.camelCaseToDash(prop) : prop;
116
- const groupCandidates = [
117
- getTokenGroupForProp(prop),
118
- getTokenGroupForProp(dashProp),
119
- prop,
120
- dashProp
121
- ].filter(Boolean);
122
- let groupName = groupCandidates[0] ?? prop;
123
- let values = byProp.get(prop) ?? byProp.get(dashProp);
124
- if (!values) for (const candidate of groupCandidates) {
125
- const groupValues = groups?.[candidate];
126
- if (groupValues) {
127
- groupName = candidate;
128
- values = groupValues;
129
- break;
130
- }
131
- }
132
- if (!values) return null;
133
- if (typeof value === "string") {
134
- const tokenAlpha = parseTokenAlphaValue(value);
135
- if (tokenAlpha) {
136
- if (resolveTokenParts(values, tokenAlpha.base.split(".")) === void 0) return null;
137
- if (tokenAlpha.alpha === null) return null;
104
+ const groupCandidates = [];
105
+ const seen = /* @__PURE__ */ new Set();
106
+ const addCandidate = (group) => {
107
+ if (!group || seen.has(group)) return;
108
+ seen.add(group);
109
+ groupCandidates.push(group);
110
+ };
111
+ for (const group of getTokenGroupsForProp(prop)) addCandidate(group);
112
+ for (const group of getTokenGroupsForProp(dashProp)) addCandidate(group);
113
+ addCandidate(prop);
114
+ addCandidate(dashProp);
115
+ if (!groupCandidates.length) return null;
116
+ if (typeof value !== "string") return null;
117
+ const tokenAlphaCandidate = parseTokenAlphaValue(value);
118
+ const baseParts = tokenAlphaCandidate ? tokenAlphaCandidate.base.split(".") : [];
119
+ const rawParts = value.split(".");
120
+ const colorTokens = groups?.color;
121
+ for (const group of groupCandidates) {
122
+ const values = groups?.[group];
123
+ if (!values) continue;
124
+ if (tokenAlphaCandidate && values === colorTokens) {
125
+ if (resolveTokenParts(values, baseParts) === void 0) continue;
126
+ if (tokenAlphaCandidate.alpha === null) return null;
138
127
  return {
139
- path: `${groupName}.${tokenAlpha.base}`,
128
+ path: `${group}.${tokenAlphaCandidate.base}`,
140
129
  source: "prop",
141
130
  values,
142
- alpha: tokenAlpha.alpha,
131
+ alpha: tokenAlphaCandidate.alpha,
143
132
  selectorValue: value
144
133
  };
145
134
  }
146
- if (resolveTokenParts(values, value.split(".")) !== void 0) return {
147
- path: `${groupName}.${value}`,
135
+ if (resolveTokenParts(values, rawParts) !== void 0) return {
136
+ path: `${group}.${value}`,
137
+ source: "prop",
138
+ values
139
+ };
140
+ if (value in values) return {
141
+ path: `${group}.${value}`,
148
142
  source: "prop",
149
143
  values
150
144
  };
151
145
  }
152
- if (value in values) return {
153
- path: `${groupName}.${value}`,
154
- source: "prop",
155
- values
156
- };
157
146
  return null;
158
147
  };
159
148
  const resolveRuntimeToken = (api, prop, value) => {
@@ -1,10 +1,12 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_normalize = require('./normalize.cjs');
2
3
  const require_propMap = require('./propMap.cjs');
3
4
  let ts_deepmerge = require("ts-deepmerge");
4
5
 
5
6
  //#region src/use/token/server.ts
6
7
  var server_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
7
8
  getTokenGroupForProp: () => require_propMap.getTokenGroupForProp,
9
+ getTokenGroupsForProp: () => require_propMap.getTokenGroupsForProp,
8
10
  getTokenPropGroups: () => require_propMap.getTokenPropGroups,
9
11
  getTokens: () => getTokens,
10
12
  name: () => name,
@@ -17,12 +19,14 @@ var server_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
17
19
  setTokenPropGroups: () => require_propMap.setTokenPropGroups
18
20
  });
19
21
  const name = "token";
22
+ let rawOriginals = {};
20
23
  let originals = {};
21
24
  const getTokens = () => originals;
22
25
  const set = (input) => {
23
26
  const resolvedInput = typeof input === "object" ? input : input(valueMap);
24
- originals = (0, ts_deepmerge.merge)(originals, resolvedInput);
25
- for (const [key, value] of Object.entries(resolvedInput)) {
27
+ rawOriginals = (0, ts_deepmerge.merge)(rawOriginals, resolvedInput);
28
+ originals = require_normalize.normalizeTokens(rawOriginals);
29
+ for (const [key, value] of Object.entries(originals)) {
26
30
  const propsToMap = require_propMap.propMap.get(key) || [key];
27
31
  for (const prop of propsToMap) valueMap.set(prop, value);
28
32
  }
@@ -72,7 +76,7 @@ const parseTokenAlphaValue = (value) => {
72
76
  };
73
77
  const resolveTokenParts = (values, pathParts) => {
74
78
  if (!pathParts.length) return values;
75
- return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key], values);
79
+ return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key]?.$value ?? acc?.[key], values);
76
80
  };
77
81
  const warnAlpha = (message) => {
78
82
  if (alphaWarnings.has(message)) return;
@@ -96,6 +100,7 @@ const emitAllTokenVars = (api) => {
96
100
  for (const [group, value] of Object.entries(originals)) addTokenVars(group, value);
97
101
  };
98
102
  const onBoot = async (api) => {
103
+ rawOriginals = {};
99
104
  hasTokens = false;
100
105
  hasProxyTokens = false;
101
106
  hasTokenOverrides = false;
@@ -257,23 +262,84 @@ const onPropTree = async (api, { tree, parser }) => {
257
262
  if (typeof pathString !== "string") return;
258
263
  const [tokenGroupName, ...rest] = pathString.split(".");
259
264
  const isExplicitToken = isTokenCodeString || typeof prop.value === "string" && prop.value.startsWith("$$.token.");
260
- const groupForProp = typeof name === "string" ? require_propMap.getTokenGroupForProp(name) : null;
261
- const resolvedGroupName = isExplicitToken ? tokenGroupName : groupForProp ?? tokenGroupName;
262
265
  const { aliases } = descriptor;
263
- const valuesByGroupName = valueMap.get(resolvedGroupName) ?? valueMap.get(tokenGroupName);
264
- const values = aliases.reduce((acc, alias) => {
265
- if (acc) return acc;
266
- const direct = valueMap.get(alias);
267
- if (direct) return direct;
268
- const dashed = api.camelCaseToDash(alias);
269
- return valueMap.get(dashed) || null;
270
- }, null) || valuesByGroupName;
271
- if (!values) return;
272
266
  const rawValue = prop.value;
267
+ const dashName = typeof name === "string" ? api.camelCaseToDash(name) : "";
268
+ const groupCandidates = [];
269
+ const seenCandidates = /* @__PURE__ */ new Set();
270
+ const addCandidate = (group) => {
271
+ if (!group || seenCandidates.has(group)) return;
272
+ seenCandidates.add(group);
273
+ groupCandidates.push(group);
274
+ };
275
+ const addGroupsForProp = (propName) => {
276
+ if (!propName) return;
277
+ for (const group of require_propMap.getTokenGroupsForProp(propName)) addCandidate(group);
278
+ };
279
+ if (typeof name === "string") {
280
+ addGroupsForProp(name);
281
+ if (dashName && dashName !== name) addGroupsForProp(dashName);
282
+ }
283
+ for (const alias of aliases) {
284
+ addGroupsForProp(alias);
285
+ const dashedAlias = api.camelCaseToDash(alias);
286
+ if (dashedAlias && dashedAlias !== alias) addGroupsForProp(dashedAlias);
287
+ }
288
+ const addOriginalGroup = (groupName) => {
289
+ if (!groupName) return;
290
+ if (Object.prototype.hasOwnProperty.call(originals, groupName)) addCandidate(groupName);
291
+ };
292
+ if (typeof name === "string") {
293
+ addOriginalGroup(name);
294
+ if (dashName && dashName !== name) addOriginalGroup(dashName);
295
+ }
296
+ for (const alias of aliases) {
297
+ addOriginalGroup(alias);
298
+ const dashedAlias = api.camelCaseToDash(alias);
299
+ if (dashedAlias && dashedAlias !== alias) addOriginalGroup(dashedAlias);
300
+ }
301
+ const getOriginalGroupValues = (group) => originals[group];
302
+ let resolvedGroupName = isExplicitToken ? tokenGroupName : require_propMap.getTokenGroupForProp(String(name)) ?? tokenGroupName;
303
+ let values = null;
304
+ if (isExplicitToken) {
305
+ const valuesByGroupName = getOriginalGroupValues(resolvedGroupName) ?? getOriginalGroupValues(tokenGroupName) ?? valueMap.get(resolvedGroupName) ?? valueMap.get(tokenGroupName);
306
+ const valuesByPropName = aliases.reduce((acc, alias) => {
307
+ if (acc) return acc;
308
+ const direct = getOriginalGroupValues(alias) ?? valueMap.get(alias);
309
+ if (direct) return direct;
310
+ const dashed = api.camelCaseToDash(alias);
311
+ return getOriginalGroupValues(dashed) ?? valueMap.get(dashed) ?? null;
312
+ }, null);
313
+ values = valuesByGroupName || valuesByPropName;
314
+ } else if (typeof rawValue === "string") {
315
+ const tokenAlphaCandidate = parseTokenAlphaValue(rawValue);
316
+ const baseParts = tokenAlphaCandidate ? tokenAlphaCandidate.base.split(".") : [];
317
+ const rawParts = rawValue.split(".");
318
+ const colorTokens$1 = getOriginalGroupValues("color");
319
+ for (const group of groupCandidates) {
320
+ const groupValues = getOriginalGroupValues(group);
321
+ if (!groupValues) continue;
322
+ if (tokenAlphaCandidate && groupValues === colorTokens$1) {
323
+ if (resolveTokenParts(groupValues, baseParts) !== void 0) {
324
+ resolvedGroupName = group;
325
+ values = groupValues;
326
+ break;
327
+ }
328
+ continue;
329
+ }
330
+ if (resolveTokenParts(groupValues, rawParts) !== void 0) {
331
+ resolvedGroupName = group;
332
+ values = groupValues;
333
+ break;
334
+ }
335
+ }
336
+ }
337
+ if (!values) return;
273
338
  const colorTokens = valueMap.get("color");
274
339
  const tokenAlpha = typeof rawValue === "string" && values && colorTokens && values === colorTokens ? parseTokenAlphaValue(rawValue) : null;
275
340
  if (tokenAlpha) {
276
- const baseValue = resolveTokenParts(values, tokenAlpha.base.split("."));
341
+ const baseParts = tokenAlpha.base.split(".");
342
+ const baseValue = resolveTokenParts(values, baseParts);
277
343
  if (baseValue === void 0) {
278
344
  warnAlpha(`Unknown token "${tokenAlpha.base}" for "${name}:${rawValue}".`);
279
345
  return;
@@ -316,6 +382,7 @@ const onPropTree = async (api, { tree, parser }) => {
316
382
 
317
383
  //#endregion
318
384
  exports.getTokenGroupForProp = require_propMap.getTokenGroupForProp;
385
+ exports.getTokenGroupsForProp = require_propMap.getTokenGroupsForProp;
319
386
  exports.getTokenPropGroups = require_propMap.getTokenPropGroups;
320
387
  exports.getTokens = getTokens;
321
388
  exports.name = name;
@@ -1,10 +1,12 @@
1
1
  import { __exportAll } from "../../_virtual/rolldown_runtime.mjs";
2
- import { getTokenGroupForProp, getTokenPropGroups, propMap, setTokenPropGroups } from "./propMap.mjs";
2
+ import { normalizeTokens } from "./normalize.mjs";
3
+ import { getTokenGroupForProp, getTokenGroupsForProp, getTokenPropGroups, propMap, setTokenPropGroups } from "./propMap.mjs";
3
4
  import { merge } from "ts-deepmerge";
4
5
 
5
6
  //#region src/use/token/server.ts
6
7
  var server_exports = /* @__PURE__ */ __exportAll({
7
8
  getTokenGroupForProp: () => getTokenGroupForProp,
9
+ getTokenGroupsForProp: () => getTokenGroupsForProp,
8
10
  getTokenPropGroups: () => getTokenPropGroups,
9
11
  getTokens: () => getTokens,
10
12
  name: () => name,
@@ -17,12 +19,14 @@ var server_exports = /* @__PURE__ */ __exportAll({
17
19
  setTokenPropGroups: () => setTokenPropGroups
18
20
  });
19
21
  const name = "token";
22
+ let rawOriginals = {};
20
23
  let originals = {};
21
24
  const getTokens = () => originals;
22
25
  const set = (input) => {
23
26
  const resolvedInput = typeof input === "object" ? input : input(valueMap);
24
- originals = merge(originals, resolvedInput);
25
- for (const [key, value] of Object.entries(resolvedInput)) {
27
+ rawOriginals = merge(rawOriginals, resolvedInput);
28
+ originals = normalizeTokens(rawOriginals);
29
+ for (const [key, value] of Object.entries(originals)) {
26
30
  const propsToMap = propMap.get(key) || [key];
27
31
  for (const prop of propsToMap) valueMap.set(prop, value);
28
32
  }
@@ -72,7 +76,7 @@ const parseTokenAlphaValue = (value) => {
72
76
  };
73
77
  const resolveTokenParts = (values, pathParts) => {
74
78
  if (!pathParts.length) return values;
75
- return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key], values);
79
+ return pathParts.reduce((acc, key) => acc?.[key]?.value ?? acc?.[key]?.$value ?? acc?.[key], values);
76
80
  };
77
81
  const warnAlpha = (message) => {
78
82
  if (alphaWarnings.has(message)) return;
@@ -96,6 +100,7 @@ const emitAllTokenVars = (api) => {
96
100
  for (const [group, value] of Object.entries(originals)) addTokenVars(group, value);
97
101
  };
98
102
  const onBoot = async (api) => {
103
+ rawOriginals = {};
99
104
  hasTokens = false;
100
105
  hasProxyTokens = false;
101
106
  hasTokenOverrides = false;
@@ -257,23 +262,84 @@ const onPropTree = async (api, { tree, parser }) => {
257
262
  if (typeof pathString !== "string") return;
258
263
  const [tokenGroupName, ...rest] = pathString.split(".");
259
264
  const isExplicitToken = isTokenCodeString || typeof prop.value === "string" && prop.value.startsWith("$$.token.");
260
- const groupForProp = typeof name === "string" ? getTokenGroupForProp(name) : null;
261
- const resolvedGroupName = isExplicitToken ? tokenGroupName : groupForProp ?? tokenGroupName;
262
265
  const { aliases } = descriptor;
263
- const valuesByGroupName = valueMap.get(resolvedGroupName) ?? valueMap.get(tokenGroupName);
264
- const values = aliases.reduce((acc, alias) => {
265
- if (acc) return acc;
266
- const direct = valueMap.get(alias);
267
- if (direct) return direct;
268
- const dashed = api.camelCaseToDash(alias);
269
- return valueMap.get(dashed) || null;
270
- }, null) || valuesByGroupName;
271
- if (!values) return;
272
266
  const rawValue = prop.value;
267
+ const dashName = typeof name === "string" ? api.camelCaseToDash(name) : "";
268
+ const groupCandidates = [];
269
+ const seenCandidates = /* @__PURE__ */ new Set();
270
+ const addCandidate = (group) => {
271
+ if (!group || seenCandidates.has(group)) return;
272
+ seenCandidates.add(group);
273
+ groupCandidates.push(group);
274
+ };
275
+ const addGroupsForProp = (propName) => {
276
+ if (!propName) return;
277
+ for (const group of getTokenGroupsForProp(propName)) addCandidate(group);
278
+ };
279
+ if (typeof name === "string") {
280
+ addGroupsForProp(name);
281
+ if (dashName && dashName !== name) addGroupsForProp(dashName);
282
+ }
283
+ for (const alias of aliases) {
284
+ addGroupsForProp(alias);
285
+ const dashedAlias = api.camelCaseToDash(alias);
286
+ if (dashedAlias && dashedAlias !== alias) addGroupsForProp(dashedAlias);
287
+ }
288
+ const addOriginalGroup = (groupName) => {
289
+ if (!groupName) return;
290
+ if (Object.prototype.hasOwnProperty.call(originals, groupName)) addCandidate(groupName);
291
+ };
292
+ if (typeof name === "string") {
293
+ addOriginalGroup(name);
294
+ if (dashName && dashName !== name) addOriginalGroup(dashName);
295
+ }
296
+ for (const alias of aliases) {
297
+ addOriginalGroup(alias);
298
+ const dashedAlias = api.camelCaseToDash(alias);
299
+ if (dashedAlias && dashedAlias !== alias) addOriginalGroup(dashedAlias);
300
+ }
301
+ const getOriginalGroupValues = (group) => originals[group];
302
+ let resolvedGroupName = isExplicitToken ? tokenGroupName : getTokenGroupForProp(String(name)) ?? tokenGroupName;
303
+ let values = null;
304
+ if (isExplicitToken) {
305
+ const valuesByGroupName = getOriginalGroupValues(resolvedGroupName) ?? getOriginalGroupValues(tokenGroupName) ?? valueMap.get(resolvedGroupName) ?? valueMap.get(tokenGroupName);
306
+ const valuesByPropName = aliases.reduce((acc, alias) => {
307
+ if (acc) return acc;
308
+ const direct = getOriginalGroupValues(alias) ?? valueMap.get(alias);
309
+ if (direct) return direct;
310
+ const dashed = api.camelCaseToDash(alias);
311
+ return getOriginalGroupValues(dashed) ?? valueMap.get(dashed) ?? null;
312
+ }, null);
313
+ values = valuesByGroupName || valuesByPropName;
314
+ } else if (typeof rawValue === "string") {
315
+ const tokenAlphaCandidate = parseTokenAlphaValue(rawValue);
316
+ const baseParts = tokenAlphaCandidate ? tokenAlphaCandidate.base.split(".") : [];
317
+ const rawParts = rawValue.split(".");
318
+ const colorTokens$1 = getOriginalGroupValues("color");
319
+ for (const group of groupCandidates) {
320
+ const groupValues = getOriginalGroupValues(group);
321
+ if (!groupValues) continue;
322
+ if (tokenAlphaCandidate && groupValues === colorTokens$1) {
323
+ if (resolveTokenParts(groupValues, baseParts) !== void 0) {
324
+ resolvedGroupName = group;
325
+ values = groupValues;
326
+ break;
327
+ }
328
+ continue;
329
+ }
330
+ if (resolveTokenParts(groupValues, rawParts) !== void 0) {
331
+ resolvedGroupName = group;
332
+ values = groupValues;
333
+ break;
334
+ }
335
+ }
336
+ }
337
+ if (!values) return;
273
338
  const colorTokens = valueMap.get("color");
274
339
  const tokenAlpha = typeof rawValue === "string" && values && colorTokens && values === colorTokens ? parseTokenAlphaValue(rawValue) : null;
275
340
  if (tokenAlpha) {
276
- const baseValue = resolveTokenParts(values, tokenAlpha.base.split("."));
341
+ const baseParts = tokenAlpha.base.split(".");
342
+ const baseValue = resolveTokenParts(values, baseParts);
277
343
  if (baseValue === void 0) {
278
344
  warnAlpha(`Unknown token "${tokenAlpha.base}" for "${name}:${rawValue}".`);
279
345
  return;
@@ -315,4 +381,4 @@ const onPropTree = async (api, { tree, parser }) => {
315
381
  };
316
382
 
317
383
  //#endregion
318
- export { getTokenGroupForProp, getTokenPropGroups, getTokens, name, onBoot, onParse, onPropTree, onReady, propMap, server_exports, set, setTokenPropGroups };
384
+ export { getTokenGroupForProp, getTokenGroupsForProp, getTokenPropGroups, getTokens, name, onBoot, onParse, onPropTree, onReady, propMap, server_exports, set, setTokenPropGroups };
@@ -1,3 +1,4 @@
1
+ const require_normalize = require('./normalize.cjs');
1
2
 
2
3
  //#region src/use/token/vars.ts
3
4
  const isPlainObject = (value) => {
@@ -6,11 +7,15 @@ const isPlainObject = (value) => {
6
7
  const hasValueEntry = (value) => {
7
8
  return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, "value");
8
9
  };
10
+ const hasDtcgValueEntry = (value) => {
11
+ return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, "$value");
12
+ };
9
13
  const createTokenVars = ({ prefix = "", toValue } = {}) => {
10
14
  const resolveValue = toValue ?? ((value) => value == null ? value : String(value));
11
15
  return (input) => {
12
16
  const result = {};
13
17
  if (!input || typeof input !== "object") return result;
18
+ const normalizedInput = require_normalize.normalizeTokens(input);
14
19
  const applyVar = (path, group, value) => {
15
20
  if (!path.length) return;
16
21
  const name = `--${prefix}${path.join("-")}`;
@@ -36,9 +41,16 @@ const createTokenVars = ({ prefix = "", toValue } = {}) => {
36
41
  applyVar(path, group, node.value);
37
42
  return;
38
43
  }
39
- for (const [key, value] of Object.entries(node)) walk(value, [...path, key], group ?? key);
44
+ if (hasDtcgValueEntry(node)) {
45
+ applyVar(path, group, node.$value);
46
+ return;
47
+ }
48
+ for (const [key, value] of Object.entries(node)) {
49
+ if (key.startsWith("$")) continue;
50
+ walk(value, [...path, key], group ?? key);
51
+ }
40
52
  };
41
- walk(input, [], null);
53
+ walk(normalizedInput, [], null);
42
54
  return result;
43
55
  };
44
56
  };
@@ -1,3 +1,5 @@
1
+ import { normalizeTokens } from "./normalize.mjs";
2
+
1
3
  //#region src/use/token/vars.ts
2
4
  const isPlainObject = (value) => {
3
5
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
@@ -5,11 +7,15 @@ const isPlainObject = (value) => {
5
7
  const hasValueEntry = (value) => {
6
8
  return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, "value");
7
9
  };
10
+ const hasDtcgValueEntry = (value) => {
11
+ return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, "$value");
12
+ };
8
13
  const createTokenVars = ({ prefix = "", toValue } = {}) => {
9
14
  const resolveValue = toValue ?? ((value) => value == null ? value : String(value));
10
15
  return (input) => {
11
16
  const result = {};
12
17
  if (!input || typeof input !== "object") return result;
18
+ const normalizedInput = normalizeTokens(input);
13
19
  const applyVar = (path, group, value) => {
14
20
  if (!path.length) return;
15
21
  const name = `--${prefix}${path.join("-")}`;
@@ -35,9 +41,16 @@ const createTokenVars = ({ prefix = "", toValue } = {}) => {
35
41
  applyVar(path, group, node.value);
36
42
  return;
37
43
  }
38
- for (const [key, value] of Object.entries(node)) walk(value, [...path, key], group ?? key);
44
+ if (hasDtcgValueEntry(node)) {
45
+ applyVar(path, group, node.$value);
46
+ return;
47
+ }
48
+ for (const [key, value] of Object.entries(node)) {
49
+ if (key.startsWith("$")) continue;
50
+ walk(value, [...path, key], group ?? key);
51
+ }
39
52
  };
40
- walk(input, [], null);
53
+ walk(normalizedInput, [], null);
41
54
  return result;
42
55
  };
43
56
  };