@3fn/core 14.1.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1380) hide show
  1. package/.kiro/steering/AI-Collaboration-Principles.md +9 -3
  2. package/.kiro/steering/Agent-Directory.md +31 -7
  3. package/.kiro/steering/Civitas-System-Overview.md +3 -3
  4. package/.kiro/steering/DesignerPunk-Systems-Overview.md +3 -3
  5. package/.kiro/steering/Task-Completion-Protocol.md +12 -11
  6. package/.kiro/steering/start-up-tasks.md +12 -4
  7. package/CHANGELOG.md +74 -0
  8. package/README.md +26 -21
  9. package/application-mcp-server/src/__tests__/consumerRootLiveReindex.test.ts +118 -0
  10. package/application-mcp-server/src/__tests__/errorCatalogWiring.test.ts +73 -0
  11. package/application-mcp-server/src/__tests__/mcpDataRootsDeclaration.test.ts +107 -0
  12. package/application-mcp-server/src/__tests__/tool-boundary.contract.test.ts +55 -0
  13. package/application-mcp-server/src/index.ts +249 -59
  14. package/application-mcp-server/src/indexer/ComponentIndexer.ts +273 -46
  15. package/application-mcp-server/src/indexer/ModeClassifier.ts +23 -16
  16. package/application-mcp-server/src/indexer/SemanticOverrideReader.ts +113 -0
  17. package/application-mcp-server/src/indexer/TokenIndexer.ts +195 -3
  18. package/application-mcp-server/src/indexer/__tests__/MultiRootIndexing.test.ts +134 -0
  19. package/application-mcp-server/src/indexer/__tests__/ThemeResolution.test.ts +241 -0
  20. package/application-mcp-server/src/indexer/__tests__/ThemeRootFollowsIndex.test.ts +216 -0
  21. package/application-mcp-server/src/indexer/__tests__/fixtures/consumerFixture.ts +84 -0
  22. package/application-mcp-server/src/indexer/resolveThemeTierRoot.ts +61 -0
  23. package/application-mcp-server/src/watcher/FileWatcher.ts +20 -7
  24. package/dist/ComponentTokens.android.kt +1 -1
  25. package/dist/ComponentTokens.ios.swift +1 -1
  26. package/dist/ComponentTokens.web.css +1 -1
  27. package/dist/DesignTokens.android.kt +1 -5
  28. package/dist/DesignTokens.dtcg.json +388 -122
  29. package/dist/DesignTokens.figma.json +281 -941
  30. package/dist/DesignTokens.ios.swift +1 -5
  31. package/dist/DesignTokens.web.css +5 -5
  32. package/dist/browser/designerpunk.esm.js +160 -94
  33. package/dist/browser/designerpunk.esm.min.js +58 -55
  34. package/dist/browser/designerpunk.umd.js +160 -94
  35. package/dist/browser/designerpunk.umd.min.js +57 -54
  36. package/dist/browser/tokens.css +5 -5
  37. package/dist/build/platforms/AndroidMotionTokenFormatter.d.ts +101 -0
  38. package/dist/build/platforms/AndroidMotionTokenFormatter.js +220 -0
  39. package/dist/build/platforms/WebMotionTokenFormatter.d.ts +85 -0
  40. package/dist/build/platforms/WebMotionTokenFormatter.js +167 -0
  41. package/dist/build/platforms/iOSMotionTokenFormatter.d.ts +99 -0
  42. package/dist/build/platforms/iOSMotionTokenFormatter.js +221 -0
  43. package/dist/build/validation/index.d.ts +0 -4
  44. package/dist/build/validation/index.js +1 -8
  45. package/dist/cli/attach.d.ts +153 -0
  46. package/dist/cli/attach.js +423 -0
  47. package/dist/cli/designerpunk.d.ts +46 -0
  48. package/dist/cli/designerpunk.js +171 -34
  49. package/dist/cli/figma-extract.js +10 -1
  50. package/dist/cli/figma-push.js +11 -2
  51. package/dist/cli/init.d.ts +36 -5
  52. package/dist/cli/init.js +348 -143
  53. package/dist/cli/loadComponentTokens.d.ts +25 -0
  54. package/dist/cli/loadComponentTokens.js +87 -8
  55. package/dist/cli/shared/bornRepo.d.ts +50 -0
  56. package/dist/cli/shared/bornRepo.js +199 -0
  57. package/dist/cli/shared/errorCatalog.d.ts +130 -0
  58. package/dist/cli/shared/errorCatalog.js +148 -0
  59. package/dist/cli/shared/mcpConfig/cc.d.ts +25 -0
  60. package/dist/cli/shared/mcpConfig/cc.js +156 -0
  61. package/dist/cli/shared/mcpConfig/kiro.d.ts +53 -0
  62. package/dist/cli/shared/mcpConfig/kiro.js +140 -0
  63. package/dist/cli/shared/mcpDataRoots.d.ts +88 -1
  64. package/dist/cli/shared/mcpDataRoots.js +76 -2
  65. package/dist/cli/shared/transforms.d.ts +64 -0
  66. package/dist/cli/shared/transforms.js +138 -0
  67. package/dist/cli/shared/vocabulary.d.ts +50 -0
  68. package/dist/cli/shared/vocabulary.js +62 -0
  69. package/dist/cli/sync/Applier.d.ts +25 -26
  70. package/dist/cli/sync/Applier.js +37 -73
  71. package/dist/cli/sync/Classifier.d.ts +70 -6
  72. package/dist/cli/sync/Classifier.js +123 -84
  73. package/dist/cli/sync/FileScanner.d.ts +19 -10
  74. package/dist/cli/sync/FileScanner.js +33 -25
  75. package/dist/cli/sync/KeyGrain.d.ts +106 -0
  76. package/dist/cli/sync/KeyGrain.js +301 -0
  77. package/dist/cli/sync/Manifest.d.ts +147 -12
  78. package/dist/cli/sync/Manifest.js +276 -21
  79. package/dist/cli/sync/Migration.d.ts +271 -0
  80. package/dist/cli/sync/Migration.js +764 -0
  81. package/dist/cli/sync/NameContract.d.ts +169 -0
  82. package/dist/cli/sync/NameContract.js +246 -0
  83. package/dist/cli/sync/RegionGrain.d.ts +118 -0
  84. package/dist/cli/sync/RegionGrain.js +167 -0
  85. package/dist/cli/sync/Reporter.d.ts +33 -4
  86. package/dist/cli/sync/Reporter.js +112 -53
  87. package/dist/cli/sync/SteeringDirCheck.d.ts +32 -4
  88. package/dist/cli/sync/SteeringDirCheck.js +62 -14
  89. package/dist/cli/sync/index.d.ts +125 -6
  90. package/dist/cli/sync/index.js +716 -66
  91. package/dist/color/OklchValidator.d.ts +43 -3
  92. package/dist/color/OklchValidator.js +46 -8
  93. package/dist/components/core/Button-CTA/Button-CTA.refs.d.ts +83 -0
  94. package/dist/components/core/Button-CTA/Button-CTA.refs.js +86 -0
  95. package/dist/components/core/Button-CTA/Button-CTA.tokens.d.ts +20 -10
  96. package/dist/components/core/Button-CTA/Button-CTA.tokens.js +21 -10
  97. package/dist/components/core/Button-CTA/index.d.ts +2 -2
  98. package/dist/components/core/Button-CTA/index.js +3 -3
  99. package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.d.ts +11 -30
  100. package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.js +16 -49
  101. package/dist/components/core/Container-Base/Container-Base.refs.d.ts +181 -0
  102. package/dist/components/core/Container-Base/Container-Base.refs.js +223 -0
  103. package/dist/components/core/Container-Base/index.d.ts +2 -2
  104. package/dist/components/core/Container-Base/index.js +10 -10
  105. package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.js +1 -1
  106. package/dist/components/core/Container-Base/platforms/web/token-mapping.d.ts +27 -9
  107. package/dist/components/core/Container-Base/platforms/web/token-mapping.js +50 -22
  108. package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.d.ts +149 -0
  109. package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.js +207 -0
  110. package/dist/components/core/Container-Card-Base/index.d.ts +1 -1
  111. package/dist/components/core/Container-Card-Base/index.js +19 -19
  112. package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.js +7 -6
  113. package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.d.ts +15 -0
  114. package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.js +41 -1
  115. package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.d.ts +331 -0
  116. package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.js +164 -0
  117. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.js +1 -1
  118. package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.d.ts +20 -0
  119. package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.js +34 -0
  120. package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.d.ts +20 -0
  121. package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.js +34 -0
  122. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.d.ts +30 -0
  123. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +72 -3
  124. package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.d.ts +20 -0
  125. package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.js +34 -0
  126. package/dist/consumer-canonical/agents/ada.md +331 -0
  127. package/dist/consumer-canonical/agents/data.md +429 -0
  128. package/dist/consumer-canonical/agents/kenya.md +400 -0
  129. package/dist/consumer-canonical/agents/leonardo.md +524 -0
  130. package/dist/consumer-canonical/agents/lina.md +501 -0
  131. package/dist/consumer-canonical/agents/sparky.md +395 -0
  132. package/dist/consumer-canonical/agents/stacy.md +515 -0
  133. package/dist/consumer-canonical/agents/thurgood.md +463 -0
  134. package/dist/consumer-canonical/always-set/agent-directory.dispositions.yaml +21 -0
  135. package/dist/consumer-canonical/always-set/agent-directory.overlay.md +51 -0
  136. package/dist/consumer-canonical/always-set/ai-collaboration-principles.dispositions.yaml +15 -0
  137. package/dist/consumer-canonical/always-set/ai-collaboration-principles.overlay.md +26 -0
  138. package/dist/consumer-canonical/always-set/civitas-system-overview.dispositions.yaml +15 -0
  139. package/dist/consumer-canonical/always-set/civitas-system-overview.overlay.md +70 -0
  140. package/dist/consumer-canonical/always-set/core-goals.dispositions.yaml +9 -0
  141. package/dist/consumer-canonical/always-set/core-goals.overlay.md +74 -0
  142. package/dist/consumer-canonical/always-set/designerpunk-systems-overview.dispositions.yaml +16 -0
  143. package/dist/consumer-canonical/always-set/designerpunk-systems-overview.overlay.md +44 -0
  144. package/dist/consumer-canonical/always-set/spec-feedback-protocol.dispositions.yaml +21 -0
  145. package/dist/consumer-canonical/always-set/spec-feedback-protocol.overlay.md +44 -0
  146. package/dist/consumer-canonical/always-set/start-up-tasks.dispositions.yaml +15 -0
  147. package/dist/consumer-canonical/always-set/start-up-tasks.overlay.md +25 -0
  148. package/dist/consumer-canonical/always-set/task-completion-protocol.dispositions.yaml +19 -0
  149. package/dist/consumer-canonical/always-set/task-completion-protocol.overlay.md +116 -0
  150. package/dist/consumer-canonical/consumer-profile.yaml +9 -0
  151. package/dist/consumer-canonical/shared/always-set.yaml +113 -0
  152. package/dist/consumer-canonical/shared/field-dispositions.yaml +85 -0
  153. package/dist/consumer-canonical/shared/shared-catalog.yaml +19 -0
  154. package/dist/consumer-canonical/shared/skills-map.yaml +33 -0
  155. package/dist/consumer-canonical/skills/adaptive/SKILL.md +301 -0
  156. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  157. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  158. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  159. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  160. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +238 -0
  161. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  162. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  163. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +168 -0
  164. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +329 -0
  165. package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  166. package/dist/consumer-canonical/skills/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  167. package/dist/consumer-canonical/skills/edge-to-edge/SKILL.md +426 -0
  168. package/dist/consumer-canonical/skills/impeccable/SKILL.md +237 -0
  169. package/dist/consumer-canonical/skills/impeccable/detector-exclusions.md +42 -0
  170. package/dist/consumer-canonical/skills/impeccable/reference/adapt.md +190 -0
  171. package/dist/consumer-canonical/skills/impeccable/reference/animate.md +194 -0
  172. package/dist/consumer-canonical/skills/impeccable/reference/audit.md +150 -0
  173. package/dist/consumer-canonical/skills/impeccable/reference/bolder.md +113 -0
  174. package/dist/consumer-canonical/skills/impeccable/reference/brand-dp.md +103 -0
  175. package/dist/consumer-canonical/skills/impeccable/reference/clarify.md +174 -0
  176. package/dist/consumer-canonical/skills/impeccable/reference/codex.md +105 -0
  177. package/dist/consumer-canonical/skills/impeccable/reference/cognitive-load.md +106 -0
  178. package/dist/consumer-canonical/skills/impeccable/reference/color-and-contrast.md +122 -0
  179. package/dist/consumer-canonical/skills/impeccable/reference/colorize.md +155 -0
  180. package/dist/consumer-canonical/skills/impeccable/reference/craft.md +123 -0
  181. package/dist/consumer-canonical/skills/impeccable/reference/critique.md +245 -0
  182. package/dist/consumer-canonical/skills/impeccable/reference/delight.md +302 -0
  183. package/dist/consumer-canonical/skills/impeccable/reference/distill.md +111 -0
  184. package/dist/consumer-canonical/skills/impeccable/reference/extract-dp.md +43 -0
  185. package/dist/consumer-canonical/skills/impeccable/reference/harden.md +347 -0
  186. package/dist/consumer-canonical/skills/impeccable/reference/heuristics-scoring.md +234 -0
  187. package/dist/consumer-canonical/skills/impeccable/reference/interaction-design.md +195 -0
  188. package/dist/consumer-canonical/skills/impeccable/reference/layout.md +141 -0
  189. package/dist/consumer-canonical/skills/impeccable/reference/live.md +622 -0
  190. package/dist/consumer-canonical/skills/impeccable/reference/motion-design.md +109 -0
  191. package/dist/consumer-canonical/skills/impeccable/reference/onboard.md +234 -0
  192. package/dist/consumer-canonical/skills/impeccable/reference/optimize.md +258 -0
  193. package/dist/consumer-canonical/skills/impeccable/reference/overdrive.md +130 -0
  194. package/dist/consumer-canonical/skills/impeccable/reference/personas.md +179 -0
  195. package/dist/consumer-canonical/skills/impeccable/reference/polish.md +242 -0
  196. package/dist/consumer-canonical/skills/impeccable/reference/product-dp.md +79 -0
  197. package/dist/consumer-canonical/skills/impeccable/reference/quieter.md +99 -0
  198. package/dist/consumer-canonical/skills/impeccable/reference/responsive-design.md +114 -0
  199. package/dist/consumer-canonical/skills/impeccable/reference/shape.md +165 -0
  200. package/dist/consumer-canonical/skills/impeccable/reference/spatial-design.md +100 -0
  201. package/dist/consumer-canonical/skills/impeccable/reference/typeset.md +126 -0
  202. package/dist/consumer-canonical/skills/impeccable/reference/typography.md +159 -0
  203. package/dist/consumer-canonical/skills/impeccable/reference/ux-writing.md +107 -0
  204. package/dist/consumer-canonical/skills/impeccable/scripts/detect.mjs +21 -0
  205. package/dist/consumer-canonical/skills/impeccable/scripts/detector/browser/injected/index.mjs +1725 -0
  206. package/dist/consumer-canonical/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
  207. package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4567 -0
  208. package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
  209. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
  210. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
  211. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
  212. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
  213. package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  214. package/dist/consumer-canonical/skills/impeccable/scripts/detector/findings.mjs +12 -0
  215. package/dist/consumer-canonical/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
  216. package/dist/consumer-canonical/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  217. package/dist/consumer-canonical/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
  218. package/dist/consumer-canonical/skills/impeccable/scripts/detector/rules/checks.mjs +2316 -0
  219. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/color.mjs +156 -0
  220. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
  221. package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  222. package/dist/consumer-canonical/skills/navigation-3/SKILL.md +110 -0
  223. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/index.md +38 -0
  224. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +498 -0
  225. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  226. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  227. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  228. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  229. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  230. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  231. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  232. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-advanced.md +155 -0
  233. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-basic.md +744 -0
  234. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  235. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  236. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  237. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  238. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  239. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +436 -0
  240. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  241. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +272 -0
  242. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  243. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  244. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  245. package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  246. package/dist/consumer-canonical/skills/theming-styles/SKILL.md +220 -0
  247. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  248. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/fundamentals.md +420 -0
  249. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  250. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  251. package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/theming.md +257 -0
  252. package/dist/generator/consumer-entry.js +5939 -0
  253. package/dist/generators/DTCGFormatGenerator.d.ts +14 -4
  254. package/dist/generators/DTCGFormatGenerator.js +35 -18
  255. package/dist/generators/TokenFileGenerator.js +13 -13
  256. package/dist/generators/generateTokenIndex.d.ts +14 -0
  257. package/dist/generators/generateTokenIndex.js +23 -0
  258. package/dist/generators/transformers/FigmaTransformer.d.ts +35 -0
  259. package/dist/generators/transformers/FigmaTransformer.js +101 -13
  260. package/dist/generators/types/DTCGTypes.d.ts +10 -0
  261. package/dist/mcp/application-mcp.js +1062 -261
  262. package/dist/mcp/docs-mcp.js +93 -13
  263. package/dist/mcp/product-mcp.js +539 -41
  264. package/dist/mcp/tool-manifest.json +184 -0
  265. package/dist/name-contract.json +4283 -0
  266. package/dist/tokens/BlurTokens.d.ts +3 -1
  267. package/dist/tokens/BlurTokens.js +6 -4
  268. package/dist/tokens/ShadowOffsetTokens.js +14 -14
  269. package/dist/tokens/SizingTokens.js +3 -3
  270. package/dist/tokens/TapAreaTokens.d.ts +13 -2
  271. package/dist/tokens/TapAreaTokens.js +19 -8
  272. package/dist/tokens/semantic/ColorTokens.js +50 -5
  273. package/dist/tokens/semantic/TypographyTokens.js +10 -10
  274. package/dist/tokens/themes/dark/SemanticOverrides.js +21 -4
  275. package/dist/tools/integrity/Invariants.d.ts +23 -8
  276. package/dist/tools/integrity/Invariants.js +27 -8
  277. package/dist/tools/integrity/cli/run-audit.js +1 -1
  278. package/dist/types/PrimitiveToken.d.ts +15 -1
  279. package/dist/types/generated/TokenTypes.d.ts +1 -1
  280. package/dist/types/generated/TokenTypes.js +1 -1
  281. package/dist/types/index.d.ts +1 -0
  282. package/governance/AI-Collaboration-Framework.md +19 -10
  283. package/governance/Component-Family-Navigation.md +2 -2
  284. package/governance/DTCG-Integration-Guide.md +63 -36
  285. package/governance/DesignerPunk-Integration-Guide.md +57 -61
  286. package/governance/Figma-Workflow-Guide.md +15 -8
  287. package/governance/Process-Integration-Methodology.md +5 -5
  288. package/governance/Process-Spec-Planning.md +179 -54
  289. package/governance/Product-Handoff-Protocol.md +27 -2
  290. package/governance/Test-Behavioral-Contract-Validation.md +5 -0
  291. package/governance/Test-Development-Standards.md +4 -4
  292. package/governance/Token-Family-Accessibility.md +18 -14
  293. package/governance/Token-Family-Blend.md +5 -4
  294. package/governance/Token-Family-Blur.md +8 -8
  295. package/governance/Token-Family-Color.md +40 -22
  296. package/governance/Token-Family-Glow.md +26 -24
  297. package/governance/Token-Family-Layering.md +1 -0
  298. package/governance/Token-Family-Motion.md +22 -13
  299. package/governance/Token-Family-Opacity.md +20 -34
  300. package/governance/Token-Family-Radius.md +4 -2
  301. package/governance/Token-Family-Responsive.md +4 -4
  302. package/governance/Token-Family-Shadow.md +69 -46
  303. package/governance/Token-Family-Spacing.md +22 -12
  304. package/governance/Token-Family-Typography.md +86 -85
  305. package/governance/Token-Governance.md +5 -1
  306. package/governance/Token-Quick-Reference.md +67 -63
  307. package/governance/Transformer-Development-Guide.md +5 -4
  308. package/governance/classification-map.md +597 -7
  309. package/governance/completion-documentation-guide.md +284 -2
  310. package/governance/platform-implementation-guidelines.md +2 -1
  311. package/mcp-server/src/index.ts +16 -12
  312. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +3 -3
  313. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +70 -49
  314. package/mcp-server/src/tools/find-docs.ts +1 -0
  315. package/mcp-server/src/tools/get-document-full.ts +1 -0
  316. package/mcp-server/src/tools/get-document-summary.ts +1 -0
  317. package/mcp-server/src/tools/get-index-health.ts +1 -0
  318. package/mcp-server/src/tools/get-section.ts +1 -0
  319. package/mcp-server/src/tools/list-cross-references.ts +1 -0
  320. package/mcp-server/src/tools/rebuild-index.ts +1 -0
  321. package/mcp-server/src/tools/validate-metadata.ts +1 -0
  322. package/package.json +75 -11
  323. package/src/cli/templates/mcp-config.json.template +15 -20
  324. package/src/components/core/Avatar-Base/platforms/android/AvatarPreview.kt +9 -2
  325. package/src/components/core/Container-Base/Container-Base.schema.yaml +9 -11
  326. package/src/components/core/Container-Base/platforms/android/ContainerBase.android.kt +5 -5
  327. package/src/components/core/Container-Base/platforms/ios/ContainerBase.ios.swift +5 -5
  328. package/src/components/core/Container-Card-Base/platforms/android/ContainerCardBase.android.kt +3 -3
  329. package/src/components/core/Container-Card-Base/platforms/ios/ContainerCardBase.ios.swift +2 -2
  330. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  331. package/src/components/core/Nav-Header-Base/component-meta.yaml +0 -1
  332. package/src/components/core/Nav-Header-Base/contracts.yaml +1 -1
  333. package/src/components/core/Nav-Header-Page/contracts.yaml +1 -1
  334. package/src/components/core/Nav-TabBar-Base/contracts.yaml +1 -1
  335. package/src/components/core/Progress-Bar-Base/contracts.yaml +1 -1
  336. package/src/tokens/BlurTokens.ts +6 -4
  337. package/src/tokens/ShadowOffsetTokens.ts +14 -14
  338. package/src/tokens/SizingTokens.ts +3 -3
  339. package/src/tokens/TapAreaTokens.ts +20 -8
  340. package/src/tokens/__tests__/BaselineGridAlignmentFlag.test.ts +116 -0
  341. package/src/tokens/__tests__/BlurTokens.test.ts +10 -2
  342. package/src/tokens/__tests__/SemanticColorContrast.test.ts +339 -0
  343. package/src/tokens/__tests__/ShadowOffsetTokens.test.ts +8 -7
  344. package/src/tokens/__tests__/SizingTokens.test.ts +10 -2
  345. package/src/tokens/__tests__/TokenCategories.test.ts +1 -1
  346. package/src/tokens/__tests__/neutral-partition.test.ts +28 -0
  347. package/src/tokens/semantic/AccessibilityTokens.README.md +2 -2
  348. package/src/tokens/semantic/ColorTokens.ts +50 -5
  349. package/src/tokens/semantic/TypographyTokens.ts +10 -10
  350. package/src/tokens/semantic/__tests__/ColorTokens.test.ts +8 -4
  351. package/src/tokens/themes/dark/SemanticOverrides.ts +23 -4
  352. package/src/types/PrimitiveToken.ts +15 -1
  353. package/token-index/meta.json +3 -0
  354. package/token-index/semantics.yaml +21 -15
  355. package/.kiro/agents/ada-prompt.md +0 -213
  356. package/.kiro/agents/ada-prompt.md.attribution.json +0 -45
  357. package/.kiro/agents/ada.json +0 -72
  358. package/.kiro/agents/ada.json.attribution.json +0 -13
  359. package/.kiro/agents/data-prompt.md +0 -324
  360. package/.kiro/agents/data-prompt.md.attribution.json +0 -53
  361. package/.kiro/agents/data.json +0 -51
  362. package/.kiro/agents/data.json.attribution.json +0 -13
  363. package/.kiro/agents/kenya-prompt.md +0 -309
  364. package/.kiro/agents/kenya-prompt.md.attribution.json +0 -53
  365. package/.kiro/agents/kenya.json +0 -46
  366. package/.kiro/agents/kenya.json.attribution.json +0 -13
  367. package/.kiro/agents/leonardo-prompt.md +0 -359
  368. package/.kiro/agents/leonardo-prompt.md.attribution.json +0 -45
  369. package/.kiro/agents/leonardo.json +0 -47
  370. package/.kiro/agents/leonardo.json.attribution.json +0 -13
  371. package/.kiro/agents/lina-prompt.md +0 -344
  372. package/.kiro/agents/lina-prompt.md.attribution.json +0 -53
  373. package/.kiro/agents/lina.json +0 -64
  374. package/.kiro/agents/lina.json.attribution.json +0 -13
  375. package/.kiro/agents/sparky-prompt.md +0 -312
  376. package/.kiro/agents/sparky-prompt.md.attribution.json +0 -53
  377. package/.kiro/agents/sparky.json +0 -56
  378. package/.kiro/agents/sparky.json.attribution.json +0 -13
  379. package/.kiro/agents/stacy-prompt.md +0 -304
  380. package/.kiro/agents/stacy-prompt.md.attribution.json +0 -45
  381. package/.kiro/agents/stacy.json +0 -46
  382. package/.kiro/agents/stacy.json.attribution.json +0 -13
  383. package/.kiro/agents/thurgood-prompt.md +0 -363
  384. package/.kiro/agents/thurgood-prompt.md.attribution.json +0 -45
  385. package/.kiro/agents/thurgood.json +0 -47
  386. package/.kiro/agents/thurgood.json.attribution.json +0 -13
  387. package/.kiro/steering/personal-note.md +0 -35
  388. package/designerpunk.config.ts +0 -27
  389. package/dist/android/DesignTokens.android.kt +0 -695
  390. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.d.ts +0 -26
  391. package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.js +0 -224
  392. package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.d.ts +0 -30
  393. package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.js +0 -254
  394. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.d.ts +0 -44
  395. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.js +0 -376
  396. package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.d.ts +0 -38
  397. package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.js +0 -328
  398. package/dist/ios/DesignTokens.ios.swift +0 -697
  399. package/dist/web/DesignTokens.web.css +0 -929
  400. package/product-template/agents/README.md +0 -73
  401. package/product-template/agents/ada-prompt.md +0 -83
  402. package/product-template/agents/data-prompt.md +0 -74
  403. package/product-template/agents/kenya-prompt.md +0 -74
  404. package/product-template/agents/leonardo-prompt.md +0 -99
  405. package/product-template/agents/lina-prompt.md +0 -61
  406. package/product-template/agents/sparky-prompt.md +0 -66
  407. package/product-template/agents/stacy-prompt.md +0 -51
  408. package/product-template/agents/thurgood-prompt.md +0 -64
  409. package/src/TokenEngine.ts +0 -628
  410. package/src/__tests__/BuildSystemIntegration.test.ts +0 -485
  411. package/src/__tests__/ProductMCPIntegration.test.ts +0 -204
  412. package/src/__tests__/__mocks__/styleMock.js +0 -18
  413. package/src/__tests__/browser-distribution/build-error-handling.test.ts +0 -143
  414. package/src/__tests__/browser-distribution/bundle-loading.test.ts +0 -353
  415. package/src/__tests__/browser-distribution/bundler-resolution.test.ts +0 -223
  416. package/src/__tests__/browser-distribution/component-registration.test.ts +0 -217
  417. package/src/__tests__/browser-distribution/css-bundling.test.ts +0 -233
  418. package/src/__tests__/browser-distribution/demo-system.test.ts +0 -588
  419. package/src/__tests__/browser-distribution/mcp-format-compliance.property.test.ts +0 -379
  420. package/src/__tests__/browser-distribution/mcp-queryability.test.ts +0 -342
  421. package/src/__tests__/browser-distribution/minification-effectiveness.property.test.ts +0 -188
  422. package/src/__tests__/browser-distribution/registration-idempotency.property.test.ts +0 -372
  423. package/src/__tests__/browser-distribution/soft-ceiling-warning.test.ts +0 -161
  424. package/src/__tests__/browser-distribution/token-completeness.property.test.ts +0 -412
  425. package/src/__tests__/browser-distribution/token-loading.test.ts +0 -344
  426. package/src/__tests__/browser-distribution/umd-bundle-loading.test.ts +0 -169
  427. package/src/__tests__/console-allowlist.json +0 -14
  428. package/src/__tests__/console-fail-setup.ts +0 -169
  429. package/src/__tests__/examples/improved-test-example.test.ts +0 -120
  430. package/src/__tests__/expected-exports.json +0 -66
  431. package/src/__tests__/export-contracts.test.ts +0 -83
  432. package/src/__tests__/fixtures/acknowledged-differences.json +0 -127
  433. package/src/__tests__/fixtures/acknowledged-differences.schema.json +0 -113
  434. package/src/__tests__/fixtures/acknowledged-differences.types.ts +0 -230
  435. package/src/__tests__/fixtures/tokenFixtures.ts +0 -248
  436. package/src/__tests__/helpers/configModuleLoader.ts +0 -20
  437. package/src/__tests__/helpers/tsModuleLoader.ts +0 -24
  438. package/src/__tests__/helpers/web-component-test-utils.ts +0 -39
  439. package/src/__tests__/integration/BlendCrossPlatformConsistency.test.ts +0 -505
  440. package/src/__tests__/integration/BuildSystemCompatibility.test.ts +0 -551
  441. package/src/__tests__/integration/CrossPlatformConsistency.test.ts +0 -855
  442. package/src/__tests__/integration/EndToEndWorkflow.test.ts +0 -601
  443. package/src/__tests__/integration/ErrorHandling.test.ts +0 -459
  444. package/src/__tests__/integration/OpacityPlatformTranslation.test.ts +0 -364
  445. package/src/__tests__/integration/PerformanceValidation.test.ts +0 -887
  446. package/src/__tests__/integration/SemanticTokenGeneration.test.ts +0 -451
  447. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +0 -139
  448. package/src/__tests__/integration/TokenSystemIntegration.test.ts +0 -890
  449. package/src/__tests__/integration/ValidationPipeline.test.ts +0 -404
  450. package/src/__tests__/package-drift-validation.test.ts +0 -249
  451. package/src/__tests__/performance/GenerationPerformance.test.ts +0 -409
  452. package/src/__tests__/performance/OptimizationValidation.test.ts +0 -509
  453. package/src/__tests__/platform-parity/ProgressPlatformParity.test.ts +0 -546
  454. package/src/__tests__/spec073-opacity-architecture.test.ts +0 -344
  455. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +0 -520
  456. package/src/__tests__/stemma-system/composition-compliance-validation.test.ts +0 -162
  457. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +0 -184
  458. package/src/__tests__/stemma-system/contract-existence-validation.test.ts +0 -43
  459. package/src/__tests__/stemma-system/contract-test-reporter.ts +0 -269
  460. package/src/__tests__/stemma-system/cross-platform-consistency.test.ts +0 -564
  461. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +0 -710
  462. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +0 -298
  463. package/src/__tests__/stemma-system/mcp-component-integration.test.ts +0 -445
  464. package/src/analytics/PrimitiveTokenFallbackTracker.ts +0 -228
  465. package/src/analytics/SemanticTokenUsageTracker.ts +0 -193
  466. package/src/analytics/StrategicFlexibilityTracker.ts +0 -226
  467. package/src/analytics/TokenUsageTracker.ts +0 -177
  468. package/src/analytics/UsagePatternAnalyzer.ts +0 -177
  469. package/src/analytics/__tests__/UsageTracking.test.ts +0 -647
  470. package/src/analytics/index.ts +0 -42
  471. package/src/assets/fonts/__tests__/androidFontLoadingValidation.test.ts +0 -600
  472. package/src/assets/fonts/__tests__/fontLoading.test.ts +0 -341
  473. package/src/assets/fonts/__tests__/iosFontConfiguration.test.ts +0 -256
  474. package/src/assets/fonts/__tests__/iosFontLoadingValidation.test.ts +0 -465
  475. package/src/assets/fonts/inter/Inter-Bold.ttf +0 -0
  476. package/src/assets/fonts/inter/Inter-Bold.woff2 +0 -0
  477. package/src/assets/fonts/inter/Inter-Medium.ttf +0 -0
  478. package/src/assets/fonts/inter/Inter-Medium.woff2 +0 -0
  479. package/src/assets/fonts/inter/Inter-Regular.ttf +0 -0
  480. package/src/assets/fonts/inter/Inter-Regular.woff2 +0 -0
  481. package/src/assets/fonts/inter/Inter-SemiBold.ttf +0 -0
  482. package/src/assets/fonts/inter/Inter-SemiBold.woff2 +0 -0
  483. package/src/assets/fonts/inter/inter.css +0 -49
  484. package/src/blend/BlendCalculator.ts +0 -120
  485. package/src/blend/ColorSpaceUtils.ts +0 -325
  486. package/src/blend/OklchBlendCalculator.ts +0 -82
  487. package/src/blend/ThemeAwareBlendUtilities.web.ts +0 -323
  488. package/src/blend/__tests__/BlendCalculator.test.ts +0 -393
  489. package/src/blend/__tests__/BlendUtilities.property.test.ts +0 -600
  490. package/src/blend/__tests__/ColorSpaceUtils.test.ts +0 -885
  491. package/src/blend/__tests__/InteractionStateAudit.test.ts +0 -238
  492. package/src/blend/__tests__/OklchBlendCalculator.test.ts +0 -134
  493. package/src/blend/__tests__/ThemeAwareBlendUtilities.test.ts +0 -200
  494. package/src/blend/__tests__/ThemeSwitching.test.ts +0 -508
  495. package/src/blend/index.ts +0 -37
  496. package/src/browser-entry.ts +0 -270
  497. package/src/build/.gitkeep +0 -1
  498. package/src/build/BuildOrchestrator.ts +0 -663
  499. package/src/build/__tests__/AndroidBuildIntegration.test.ts +0 -437
  500. package/src/build/__tests__/AndroidMotionTokenGeneration.test.ts +0 -256
  501. package/src/build/__tests__/BuildOrchestrator.test.ts +0 -562
  502. package/src/build/__tests__/MotionTokenCrossPlatformIntegration.test.ts +0 -424
  503. package/src/build/__tests__/WebCSSTokenGeneration.test.ts +0 -271
  504. package/src/build/__tests__/WebMotionTokenGeneration.test.ts +0 -305
  505. package/src/build/__tests__/WebNPMPackageStructure.test.ts +0 -447
  506. package/src/build/__tests__/iOSMotionTokenGeneration.test.ts +0 -298
  507. package/src/build/errors/BuildError.ts +0 -140
  508. package/src/build/errors/ErrorDocumentation.ts +0 -638
  509. package/src/build/errors/ErrorHandler.ts +0 -406
  510. package/src/build/errors/ErrorReporter.ts +0 -573
  511. package/src/build/errors/PlatformGenerationError.ts +0 -201
  512. package/src/build/errors/README.md +0 -486
  513. package/src/build/errors/RecoveryStrategy.ts +0 -393
  514. package/src/build/errors/TokenGenerationError.ts +0 -196
  515. package/src/build/errors/TokenReferenceError.ts +0 -204
  516. package/src/build/errors/__tests__/BuildError.test.ts +0 -212
  517. package/src/build/errors/__tests__/ErrorDocumentation.example.ts +0 -272
  518. package/src/build/errors/__tests__/ErrorDocumentation.test.ts +0 -458
  519. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +0 -303
  520. package/src/build/errors/__tests__/ErrorHandler.test.ts +0 -502
  521. package/src/build/errors/__tests__/ErrorReporter.test.ts +0 -581
  522. package/src/build/errors/__tests__/MotionTokenErrors.test.ts +0 -392
  523. package/src/build/errors/__tests__/RecoveryStrategy.test.ts +0 -643
  524. package/src/build/errors/index.ts +0 -90
  525. package/src/build/index.ts +0 -73
  526. package/src/build/orchestration/IncrementalBuilder.ts +0 -532
  527. package/src/build/orchestration/ParallelExecutor.ts +0 -336
  528. package/src/build/orchestration/ProgressTracker.ts +0 -582
  529. package/src/build/orchestration/SequentialExecutor.ts +0 -305
  530. package/src/build/orchestration/__tests__/IncrementalBuilder.test.ts +0 -354
  531. package/src/build/orchestration/__tests__/ParallelExecutor.integration.test.ts +0 -295
  532. package/src/build/orchestration/__tests__/ParallelExecutor.test.ts +0 -493
  533. package/src/build/orchestration/__tests__/ProgressTracker.test.ts +0 -529
  534. package/src/build/orchestration/__tests__/SequentialExecutor.integration.test.ts +0 -202
  535. package/src/build/orchestration/__tests__/SequentialExecutor.test.ts +0 -232
  536. package/src/build/orchestration/index.ts +0 -35
  537. package/src/build/platforms/.gitkeep +0 -1
  538. package/src/build/platforms/AndroidBuilder.ts +0 -1366
  539. package/src/build/platforms/AndroidShadowGenerator.ts +0 -394
  540. package/src/build/platforms/IOSShadowGenerator.ts +0 -324
  541. package/src/build/platforms/PlatformBuilder.ts +0 -131
  542. package/src/build/platforms/WebBuilder.ts +0 -1414
  543. package/src/build/platforms/WebShadowGenerator.ts +0 -288
  544. package/src/build/platforms/__tests__/AndroidBuilder.tokenGeneration.test.ts +0 -146
  545. package/src/build/platforms/__tests__/AndroidShadowGenerator.test.ts +0 -195
  546. package/src/build/platforms/__tests__/IOSShadowGenerator.test.ts +0 -156
  547. package/src/build/platforms/__tests__/WebShadowGenerator.test.ts +0 -123
  548. package/src/build/platforms/__tests__/iOSBuilder.test.ts +0 -1599
  549. package/src/build/platforms/iOSBuilder.ts +0 -1746
  550. package/src/build/platforms/index.ts +0 -9
  551. package/src/build/product/ProductTokenGenerator.ts +0 -162
  552. package/src/build/product/TokenIndexReader.ts +0 -78
  553. package/src/build/product/__tests__/KotlinEmitter.test.ts +0 -109
  554. package/src/build/product/__tests__/ProductTokenGenerator.test.ts +0 -135
  555. package/src/build/product/__tests__/SwiftEmitter.test.ts +0 -90
  556. package/src/build/product/__tests__/TokenIndexReader.test.ts +0 -85
  557. package/src/build/product/__tests__/WebEmitter.test.ts +0 -111
  558. package/src/build/product/__tests__/fixtures/tokens/layout.yaml +0 -21
  559. package/src/build/product/__tests__/fixtures/tokens/motion.yaml +0 -11
  560. package/src/build/product/__tests__/fixtures/tokens/visualization.yaml +0 -8
  561. package/src/build/product/emitters/KotlinEmitter.ts +0 -83
  562. package/src/build/product/emitters/SwiftEmitter.ts +0 -95
  563. package/src/build/product/emitters/WebEmitter.ts +0 -69
  564. package/src/build/tokens/.gitkeep +0 -1
  565. package/src/build/tokens/__tests__/ClassInvariantGuard.test.ts +0 -167
  566. package/src/build/tokens/__tests__/ComponentTokenGenerator.test.ts +0 -285
  567. package/src/build/tokens/__tests__/TokenIntegrator.test.ts +0 -319
  568. package/src/build/tokens/__tests__/TokenSelector.test.ts +0 -264
  569. package/src/build/tokens/__tests__/UnitConverter.applyScaleWithRounding.test.ts +0 -160
  570. package/src/build/tokens/__tests__/UnitConverter.test.ts +0 -331
  571. package/src/build/tokens/__tests__/brand-dual-instance.test.ts +0 -135
  572. package/src/build/tokens/__tests__/defineComponentTokens.test.ts +0 -553
  573. package/src/build/types/.gitkeep +0 -1
  574. package/src/build/types/BuildConfig.ts +0 -123
  575. package/src/build/types/BuildOrchestrator.ts +0 -114
  576. package/src/build/types/BuildResult.ts +0 -125
  577. package/src/build/types/index.ts +0 -39
  578. package/src/build/validation/.gitkeep +0 -1
  579. package/src/build/validation/AndroidBuildValidator.ts +0 -630
  580. package/src/build/validation/CrossPlatformValidationReporter.ts +0 -1267
  581. package/src/build/validation/InterfaceContractValidator.ts +0 -417
  582. package/src/build/validation/InterfaceValidator.ts +0 -326
  583. package/src/build/validation/MathematicalConsistencyValidator.ts +0 -874
  584. package/src/build/validation/MethodSignatureValidator.ts +0 -374
  585. package/src/build/validation/PropertyTypeValidator.ts +0 -312
  586. package/src/build/validation/TokenComparator.ts +0 -796
  587. package/src/build/validation/ValidationReporter.example.ts +0 -310
  588. package/src/build/validation/ValidationReporter.ts +0 -745
  589. package/src/build/validation/WebBuildValidator.ts +0 -583
  590. package/src/build/validation/__tests__/AndroidBuildValidator.test.ts +0 -522
  591. package/src/build/validation/__tests__/CrossPlatformValidationReporter.test.ts +0 -593
  592. package/src/build/validation/__tests__/InterfaceContractValidator.test.ts +0 -647
  593. package/src/build/validation/__tests__/InterfaceValidation.functional.test.ts +0 -360
  594. package/src/build/validation/__tests__/InterfaceValidator.test.ts +0 -318
  595. package/src/build/validation/__tests__/MethodSignatureValidator.test.ts +0 -625
  596. package/src/build/validation/__tests__/MotionTokenCrossPlatformValidation.test.ts +0 -305
  597. package/src/build/validation/__tests__/MotionTokenValidation.test.ts +0 -309
  598. package/src/build/validation/__tests__/PropertyTypeValidator.test.ts +0 -557
  599. package/src/build/validation/__tests__/TokenComparator.test.ts +0 -358
  600. package/src/build/validation/__tests__/ValidationReporter.integration.test.ts +0 -424
  601. package/src/build/validation/__tests__/ValidationReporter.test.ts +0 -793
  602. package/src/build/validation/__tests__/WebBuildValidator.test.ts +0 -495
  603. package/src/build/validation/iOSBuildValidator.ts +0 -783
  604. package/src/build/validation/index.ts +0 -74
  605. package/src/build/validation/types/InterfaceDefinition.ts +0 -101
  606. package/src/build/validation/types/ValidationResult.ts +0 -114
  607. package/src/build/workflow/BuildMode.ts +0 -336
  608. package/src/build/workflow/CICDIntegration.ts +0 -503
  609. package/src/build/workflow/ConfigHelpers.example.ts +0 -317
  610. package/src/build/workflow/ConfigHelpers.ts +0 -834
  611. package/src/build/workflow/README.md +0 -327
  612. package/src/build/workflow/SourceMapGenerator.ts +0 -362
  613. package/src/build/workflow/__tests__/BuildMode.test.ts +0 -544
  614. package/src/build/workflow/__tests__/CICDIntegration.test.ts +0 -602
  615. package/src/build/workflow/__tests__/ConfigHelpers.test.ts +0 -559
  616. package/src/build/workflow/__tests__/SourceMapGenerator.test.ts +0 -421
  617. package/src/build/workflow/index.ts +0 -42
  618. package/src/cli/__tests__/Applier.test.ts +0 -202
  619. package/src/cli/__tests__/Classifier.test.ts +0 -187
  620. package/src/cli/__tests__/FileScanner.test.ts +0 -108
  621. package/src/cli/__tests__/IgnoreFilter.test.ts +0 -92
  622. package/src/cli/__tests__/Manifest.test.ts +0 -107
  623. package/src/cli/__tests__/PackageResolver.test.ts +0 -66
  624. package/src/cli/__tests__/Prompter.test.ts +0 -165
  625. package/src/cli/__tests__/Reporter.test.ts +0 -128
  626. package/src/cli/__tests__/backward-compat.test.ts +0 -142
  627. package/src/cli/__tests__/figma-extract.test.ts +0 -342
  628. package/src/cli/__tests__/figma-push.test.ts +0 -350
  629. package/src/cli/__tests__/init.test.ts +0 -293
  630. package/src/cli/__tests__/loadComponentTokens.test.ts +0 -187
  631. package/src/cli/__tests__/pipeline-independence.test.ts +0 -127
  632. package/src/cli/__tests__/product-only.test.ts +0 -130
  633. package/src/cli/__tests__/resolveTokens.test.ts +0 -88
  634. package/src/cli/__tests__/staleness.test.ts +0 -132
  635. package/src/cli/__tests__/sync.test.ts +0 -199
  636. package/src/cli/__tests__/validate.test.ts +0 -69
  637. package/src/cli/designerpunk.ts +0 -410
  638. package/src/cli/figma-extract.ts +0 -331
  639. package/src/cli/figma-push.ts +0 -288
  640. package/src/cli/generateProductTokens.ts +0 -69
  641. package/src/cli/init.ts +0 -481
  642. package/src/cli/loadComponentTokens.ts +0 -145
  643. package/src/cli/resolveTokens.ts +0 -123
  644. package/src/cli/shared/mcpDataRoots.ts +0 -122
  645. package/src/cli/shared/resolvePackageRoot.ts +0 -58
  646. package/src/cli/shared/transforms.ts +0 -18
  647. package/src/cli/staleness.ts +0 -81
  648. package/src/cli/sync/Applier.ts +0 -128
  649. package/src/cli/sync/Classifier.ts +0 -130
  650. package/src/cli/sync/FileScanner.ts +0 -64
  651. package/src/cli/sync/IgnoreFilter.ts +0 -44
  652. package/src/cli/sync/Manifest.ts +0 -64
  653. package/src/cli/sync/PackageResolver.ts +0 -40
  654. package/src/cli/sync/Prompter.ts +0 -173
  655. package/src/cli/sync/Reporter.ts +0 -78
  656. package/src/cli/sync/SteeringDirCheck.ts +0 -166
  657. package/src/cli/sync/index.ts +0 -115
  658. package/src/cli/validate.ts +0 -135
  659. package/src/cli/validateProductTokens.ts +0 -55
  660. package/src/color/OklchConverter.ts +0 -284
  661. package/src/color/OklchValidator.ts +0 -186
  662. package/src/color/__tests__/OklchConverter.test.ts +0 -232
  663. package/src/color/__tests__/OklchRegression.test.ts +0 -101
  664. package/src/color/__tests__/OklchValidator.test.ts +0 -199
  665. package/src/color/__tests__/WcagContrast.test.ts +0 -76
  666. package/src/components/__tests__/BlendTokenUsageValidation.test.ts +0 -726
  667. package/src/components/__tests__/DynamicImportGuard.test.ts +0 -226
  668. package/src/components/__tests__/ExtensionLintPolicy.test.ts +0 -113
  669. package/src/components/__tests__/TokenCompliance.test.ts +0 -921
  670. package/src/components/__tests__/colorInheritanceValidation.test.ts +0 -267
  671. package/src/components/__tests__/componentTypographyInheritance.test.ts +0 -326
  672. package/src/components/core/Avatar-Base/README.md +0 -366
  673. package/src/components/core/Avatar-Base/__tests__/.gitkeep +0 -3
  674. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +0 -597
  675. package/src/components/core/Avatar-Base/__tests__/Avatar.icon-integration.test.ts +0 -656
  676. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +0 -396
  677. package/src/components/core/Avatar-Base/__tests__/Avatar.lifecycle.test.ts +0 -545
  678. package/src/components/core/Avatar-Base/__tests__/Avatar.rendering.test.ts +0 -505
  679. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +0 -701
  680. package/src/components/core/Avatar-Base/avatar.tokens.ts +0 -373
  681. package/src/components/core/Avatar-Base/index.ts +0 -25
  682. package/src/components/core/Avatar-Base/platforms/ios/.gitkeep +0 -3
  683. package/src/components/core/Avatar-Base/platforms/web/.gitkeep +0 -3
  684. package/src/components/core/Avatar-Base/platforms/web/Avatar.styles.css +0 -595
  685. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +0 -892
  686. package/src/components/core/Avatar-Base/platforms/web/hexagon-clip.svg +0 -87
  687. package/src/components/core/Avatar-Base/tokens/.gitkeep +0 -4
  688. package/src/components/core/Avatar-Base/types.ts +0 -86
  689. package/src/components/core/Badge-Count-Base/README.md +0 -323
  690. package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.stemma.test.ts +0 -548
  691. package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.test.ts +0 -452
  692. package/src/components/core/Badge-Count-Base/__tests__/test-utils.ts +0 -244
  693. package/src/components/core/Badge-Count-Base/index.ts +0 -37
  694. package/src/components/core/Badge-Count-Base/platforms/ios/.gitkeep +0 -1
  695. package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.styles.css +0 -148
  696. package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.ts +0 -363
  697. package/src/components/core/Badge-Count-Base/types.ts +0 -150
  698. package/src/components/core/Badge-Count-Notification/README.md +0 -396
  699. package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.stemma.test.ts +0 -571
  700. package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.test.ts +0 -490
  701. package/src/components/core/Badge-Count-Notification/__tests__/test-utils.ts +0 -256
  702. package/src/components/core/Badge-Count-Notification/index.ts +0 -60
  703. package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.styles.css +0 -182
  704. package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.ts +0 -401
  705. package/src/components/core/Badge-Count-Notification/tokens.ts +0 -124
  706. package/src/components/core/Badge-Count-Notification/types.ts +0 -119
  707. package/src/components/core/Badge-Label-Base/README.md +0 -251
  708. package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.stemma.test.ts +0 -549
  709. package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.test.ts +0 -439
  710. package/src/components/core/Badge-Label-Base/__tests__/test-utils.ts +0 -269
  711. package/src/components/core/Badge-Label-Base/__tests__/tokens.test.ts +0 -88
  712. package/src/components/core/Badge-Label-Base/index.ts +0 -41
  713. package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.styles.css +0 -166
  714. package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.ts +0 -340
  715. package/src/components/core/Badge-Label-Base/tokens.ts +0 -80
  716. package/src/components/core/Badge-Label-Base/types.ts +0 -148
  717. package/src/components/core/Button-CTA/Button-CTA.tokens.ts +0 -79
  718. package/src/components/core/Button-CTA/README.md +0 -293
  719. package/src/components/core/Button-CTA/__tests__/ButtonCTA.alignment.test.ts +0 -355
  720. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +0 -698
  721. package/src/components/core/Button-CTA/__tests__/ButtonCTA.tokens.test.ts +0 -89
  722. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -209
  723. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -185
  724. package/src/components/core/Button-CTA/examples/BasicUsage.html +0 -133
  725. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +0 -219
  726. package/src/components/core/Button-CTA/examples/Variants.html +0 -263
  727. package/src/components/core/Button-CTA/examples/WithIcon.html +0 -166
  728. package/src/components/core/Button-CTA/index.ts +0 -20
  729. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +0 -395
  730. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +0 -644
  731. package/src/components/core/Button-CTA/platforms/web/__tests__/ButtonCTA.icon-integration.test.ts +0 -476
  732. package/src/components/core/Button-CTA/types.ts +0 -239
  733. package/src/components/core/Button-Icon/README.md +0 -371
  734. package/src/components/core/Button-Icon/__tests__/ButtonIcon.alignment.test.ts +0 -358
  735. package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties-8-13.test.ts +0 -953
  736. package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties.test.ts +0 -920
  737. package/src/components/core/Button-Icon/__tests__/ButtonIcon.stemma.test.ts +0 -622
  738. package/src/components/core/Button-Icon/__tests__/ButtonIcon.unit.test.ts +0 -560
  739. package/src/components/core/Button-Icon/__tests__/setup.test.ts +0 -361
  740. package/src/components/core/Button-Icon/__tests__/test-utils.ts +0 -248
  741. package/src/components/core/Button-Icon/buttonIcon.tokens.ts +0 -218
  742. package/src/components/core/Button-Icon/platforms/web/.gitkeep +0 -4
  743. package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.css +0 -600
  744. package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.ts +0 -625
  745. package/src/components/core/Button-Icon/types.ts +0 -186
  746. package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.ts +0 -112
  747. package/src/components/core/Button-VerticalList-Item/README.md +0 -450
  748. package/src/components/core/Button-VerticalList-Item/__tests__/.gitkeep +0 -2
  749. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.alignment.test.ts +0 -271
  750. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.failLoudly.test.ts +0 -106
  751. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.integration.test.ts +0 -480
  752. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.properties.test.ts +0 -634
  753. package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.unit.test.ts +0 -746
  754. package/src/components/core/Button-VerticalList-Item/__tests__/rtlSupport.test.ts +0 -206
  755. package/src/components/core/Button-VerticalList-Item/__tests__/test-utils.ts +0 -297
  756. package/src/components/core/Button-VerticalList-Item/__tests__/visualStateMapping.test.ts +0 -419
  757. package/src/components/core/Button-VerticalList-Item/index.ts +0 -49
  758. package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItemTest.kt +0 -1109
  759. package/src/components/core/Button-VerticalList-Item/platforms/ios/.gitkeep +0 -2
  760. package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItemTests.swift +0 -794
  761. package/src/components/core/Button-VerticalList-Item/platforms/web/.gitkeep +0 -2
  762. package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.styles.css +0 -459
  763. package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts +0 -1030
  764. package/src/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.ts +0 -411
  765. package/src/components/core/Button-VerticalList-Item/types.ts +0 -338
  766. package/src/components/core/Button-VerticalList-Set/README.md +0 -578
  767. package/src/components/core/Button-VerticalList-Set/__tests__/.gitkeep +0 -5
  768. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.integration.test.ts +0 -676
  769. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property.test.ts +0 -786
  770. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property2.test.ts +0 -1109
  771. package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.unit.test.ts +0 -924
  772. package/src/components/core/Button-VerticalList-Set/__tests__/animationTiming.test.ts +0 -182
  773. package/src/components/core/Button-VerticalList-Set/__tests__/crossPlatformConsistency.test.ts +0 -685
  774. package/src/components/core/Button-VerticalList-Set/__tests__/deriveItemStates.test.ts +0 -179
  775. package/src/components/core/Button-VerticalList-Set/__tests__/validation.test.ts +0 -275
  776. package/src/components/core/Button-VerticalList-Set/index.ts +0 -32
  777. package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetTest.kt +0 -961
  778. package/src/components/core/Button-VerticalList-Set/platforms/ios/.gitkeep +0 -0
  779. package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetTests.swift +0 -475
  780. package/src/components/core/Button-VerticalList-Set/platforms/web/.gitkeep +0 -4
  781. package/src/components/core/Button-VerticalList-Set/platforms/web/Button-VerticalList-Set.styles.css +0 -167
  782. package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts +0 -1446
  783. package/src/components/core/Button-VerticalList-Set/types.ts +0 -788
  784. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +0 -534
  785. package/src/components/core/Chip-Base/index.ts +0 -40
  786. package/src/components/core/Chip-Base/platforms/ios/.gitkeep +0 -3
  787. package/src/components/core/Chip-Base/platforms/web/.gitkeep +0 -5
  788. package/src/components/core/Chip-Base/platforms/web/ChipBase.styles.css +0 -280
  789. package/src/components/core/Chip-Base/platforms/web/ChipBase.web.ts +0 -480
  790. package/src/components/core/Chip-Base/types.ts +0 -189
  791. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +0 -592
  792. package/src/components/core/Chip-Filter/index.ts +0 -34
  793. package/src/components/core/Chip-Filter/platforms/web/ChipFilter.styles.css +0 -105
  794. package/src/components/core/Chip-Filter/platforms/web/ChipFilter.web.ts +0 -539
  795. package/src/components/core/Chip-Filter/types.ts +0 -47
  796. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +0 -472
  797. package/src/components/core/Chip-Input/index.ts +0 -35
  798. package/src/components/core/Chip-Input/platforms/ios/.gitkeep +0 -3
  799. package/src/components/core/Chip-Input/platforms/web/ChipInput.styles.css +0 -99
  800. package/src/components/core/Chip-Input/platforms/web/ChipInput.web.ts +0 -485
  801. package/src/components/core/Chip-Input/types.ts +0 -35
  802. package/src/components/core/Container-Base/README.md +0 -450
  803. package/src/components/core/Container-Base/__tests__/ContainerBase.test.ts +0 -712
  804. package/src/components/core/Container-Base/index.ts +0 -47
  805. package/src/components/core/Container-Base/platforms/web/ContainerBase.web.ts +0 -405
  806. package/src/components/core/Container-Base/platforms/web/styles.css +0 -198
  807. package/src/components/core/Container-Base/platforms/web/token-mapping.ts +0 -573
  808. package/src/components/core/Container-Base/tokens.ts +0 -241
  809. package/src/components/core/Container-Base/types.ts +0 -307
  810. package/src/components/core/Container-Card-Base/README.md +0 -506
  811. package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.composition.test.ts +0 -167
  812. package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.test.ts +0 -646
  813. package/src/components/core/Container-Card-Base/index.ts +0 -64
  814. package/src/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.ts +0 -373
  815. package/src/components/core/Container-Card-Base/tokens.ts +0 -224
  816. package/src/components/core/Container-Card-Base/types.ts +0 -332
  817. package/src/components/core/Icon-Base/README.md +0 -168
  818. package/src/components/core/Icon-Base/__tests__/IconBase.test.ts +0 -192
  819. package/src/components/core/Icon-Base/index.ts +0 -34
  820. package/src/components/core/Icon-Base/platforms/ios/ASSET_CATALOG_SETUP.md +0 -239
  821. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Contents.json +0 -6
  822. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/Contents.json +0 -9
  823. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/Contents.json +0 -15
  824. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/alert-circle.svg +0 -1
  825. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/Contents.json +0 -15
  826. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/arrow-down.svg +0 -1
  827. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/Contents.json +0 -15
  828. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/arrow-left.svg +0 -1
  829. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/Contents.json +0 -15
  830. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/arrow-right.svg +0 -1
  831. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/Contents.json +0 -15
  832. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/arrow-up.svg +0 -1
  833. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/Contents.json +0 -15
  834. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/award.svg +0 -1
  835. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/Contents.json +0 -15
  836. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/bell.svg +0 -1
  837. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/Contents.json +0 -15
  838. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/briefcase.svg +0 -1
  839. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/Contents.json +0 -15
  840. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/calendar.svg +0 -1
  841. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/Contents.json +0 -15
  842. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/check-circle.svg +0 -1
  843. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/Contents.json +0 -15
  844. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/check.svg +0 -1
  845. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/Contents.json +0 -15
  846. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/chevron-down.svg +0 -1
  847. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/Contents.json +0 -15
  848. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/chevron-left.svg +0 -1
  849. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/Contents.json +0 -15
  850. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/chevron-right.svg +0 -1
  851. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/Contents.json +0 -15
  852. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/circle.svg +0 -1
  853. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/Contents.json +0 -15
  854. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/clock.svg +0 -1
  855. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/Contents.json +0 -15
  856. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/credit-card.svg +0 -1
  857. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/Contents.json +0 -15
  858. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/dollar-sign.svg +0 -1
  859. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/Contents.json +0 -15
  860. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/external-link.svg +0 -1
  861. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/Contents.json +0 -15
  862. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/eye-off.svg +0 -1
  863. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/Contents.json +0 -15
  864. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/eye.svg +0 -1
  865. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/Contents.json +0 -15
  866. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/file-text.svg +0 -1
  867. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/Contents.json +0 -15
  868. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/filter.svg +0 -1
  869. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/Contents.json +0 -15
  870. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/globe.svg +0 -1
  871. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/Contents.json +0 -15
  872. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/heart.svg +0 -1
  873. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/Contents.json +0 -15
  874. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/info.svg +0 -1
  875. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/Contents.json +0 -15
  876. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/mail.svg +0 -1
  877. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/Contents.json +0 -15
  878. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/map-pin.svg +0 -1
  879. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/Contents.json +0 -15
  880. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/minus.svg +0 -1
  881. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/Contents.json +0 -15
  882. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/more-horizontal.svg +0 -1
  883. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/Contents.json +0 -15
  884. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/more-vertical.svg +0 -1
  885. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/Contents.json +0 -15
  886. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/phone.svg +0 -1
  887. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/Contents.json +0 -15
  888. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/plus.svg +0 -1
  889. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/Contents.json +0 -15
  890. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/refresh-cw.svg +0 -1
  891. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/Contents.json +0 -15
  892. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/save.svg +0 -1
  893. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/Contents.json +0 -15
  894. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/search.svg +0 -1
  895. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/Contents.json +0 -15
  896. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/settings.svg +0 -1
  897. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/Contents.json +0 -15
  898. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/share-2.svg +0 -1
  899. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/Contents.json +0 -15
  900. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/share.svg +0 -1
  901. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/Contents.json +0 -15
  902. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/shield.svg +0 -1
  903. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/Contents.json +0 -15
  904. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/smartphone.svg +0 -1
  905. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/Contents.json +0 -15
  906. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/smile.svg +0 -1
  907. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/Contents.json +0 -15
  908. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/star.svg +0 -1
  909. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/Contents.json +0 -15
  910. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/trending-up.svg +0 -1
  911. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/Contents.json +0 -15
  912. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/user-check.svg +0 -1
  913. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/Contents.json +0 -15
  914. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/user-x.svg +0 -1
  915. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/Contents.json +0 -15
  916. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/user.svg +0 -1
  917. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/Contents.json +0 -15
  918. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/users.svg +0 -1
  919. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/Contents.json +0 -15
  920. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/wifi.svg +0 -1
  921. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/Contents.json +0 -15
  922. package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/x.svg +0 -1
  923. package/src/components/core/Icon-Base/platforms/web/IconBase.web.ts +0 -553
  924. package/src/components/core/Icon-Base/platforms/web/assets/alert-circle.svg +0 -1
  925. package/src/components/core/Icon-Base/platforms/web/assets/arrow-down.svg +0 -1
  926. package/src/components/core/Icon-Base/platforms/web/assets/arrow-left.svg +0 -1
  927. package/src/components/core/Icon-Base/platforms/web/assets/arrow-right.svg +0 -1
  928. package/src/components/core/Icon-Base/platforms/web/assets/arrow-up.svg +0 -1
  929. package/src/components/core/Icon-Base/platforms/web/assets/award.svg +0 -1
  930. package/src/components/core/Icon-Base/platforms/web/assets/bell.svg +0 -1
  931. package/src/components/core/Icon-Base/platforms/web/assets/briefcase.svg +0 -1
  932. package/src/components/core/Icon-Base/platforms/web/assets/calendar.svg +0 -1
  933. package/src/components/core/Icon-Base/platforms/web/assets/check-circle.svg +0 -1
  934. package/src/components/core/Icon-Base/platforms/web/assets/check.svg +0 -1
  935. package/src/components/core/Icon-Base/platforms/web/assets/chevron-down.svg +0 -1
  936. package/src/components/core/Icon-Base/platforms/web/assets/chevron-left.svg +0 -1
  937. package/src/components/core/Icon-Base/platforms/web/assets/chevron-right.svg +0 -1
  938. package/src/components/core/Icon-Base/platforms/web/assets/circle.svg +0 -1
  939. package/src/components/core/Icon-Base/platforms/web/assets/clock.svg +0 -1
  940. package/src/components/core/Icon-Base/platforms/web/assets/credit-card.svg +0 -1
  941. package/src/components/core/Icon-Base/platforms/web/assets/dollar-sign.svg +0 -1
  942. package/src/components/core/Icon-Base/platforms/web/assets/external-link.svg +0 -1
  943. package/src/components/core/Icon-Base/platforms/web/assets/eye-off.svg +0 -1
  944. package/src/components/core/Icon-Base/platforms/web/assets/eye.svg +0 -1
  945. package/src/components/core/Icon-Base/platforms/web/assets/file-text.svg +0 -1
  946. package/src/components/core/Icon-Base/platforms/web/assets/filter.svg +0 -1
  947. package/src/components/core/Icon-Base/platforms/web/assets/globe.svg +0 -1
  948. package/src/components/core/Icon-Base/platforms/web/assets/heart.svg +0 -1
  949. package/src/components/core/Icon-Base/platforms/web/assets/info.svg +0 -1
  950. package/src/components/core/Icon-Base/platforms/web/assets/mail.svg +0 -1
  951. package/src/components/core/Icon-Base/platforms/web/assets/map-pin.svg +0 -1
  952. package/src/components/core/Icon-Base/platforms/web/assets/minus.svg +0 -1
  953. package/src/components/core/Icon-Base/platforms/web/assets/more-horizontal.svg +0 -1
  954. package/src/components/core/Icon-Base/platforms/web/assets/more-vertical.svg +0 -1
  955. package/src/components/core/Icon-Base/platforms/web/assets/phone.svg +0 -1
  956. package/src/components/core/Icon-Base/platforms/web/assets/plus.svg +0 -1
  957. package/src/components/core/Icon-Base/platforms/web/assets/refresh-cw.svg +0 -1
  958. package/src/components/core/Icon-Base/platforms/web/assets/save.svg +0 -1
  959. package/src/components/core/Icon-Base/platforms/web/assets/search.svg +0 -1
  960. package/src/components/core/Icon-Base/platforms/web/assets/settings.svg +0 -1
  961. package/src/components/core/Icon-Base/platforms/web/assets/share-2.svg +0 -1
  962. package/src/components/core/Icon-Base/platforms/web/assets/share.svg +0 -1
  963. package/src/components/core/Icon-Base/platforms/web/assets/shield.svg +0 -1
  964. package/src/components/core/Icon-Base/platforms/web/assets/smartphone.svg +0 -1
  965. package/src/components/core/Icon-Base/platforms/web/assets/smile.svg +0 -1
  966. package/src/components/core/Icon-Base/platforms/web/assets/star.svg +0 -1
  967. package/src/components/core/Icon-Base/platforms/web/assets/trending-up.svg +0 -1
  968. package/src/components/core/Icon-Base/platforms/web/assets/user-check.svg +0 -1
  969. package/src/components/core/Icon-Base/platforms/web/assets/user-x.svg +0 -1
  970. package/src/components/core/Icon-Base/platforms/web/assets/user.svg +0 -1
  971. package/src/components/core/Icon-Base/platforms/web/assets/users.svg +0 -1
  972. package/src/components/core/Icon-Base/platforms/web/assets/wifi.svg +0 -1
  973. package/src/components/core/Icon-Base/platforms/web/assets/x.svg +0 -1
  974. package/src/components/core/Icon-Base/platforms/web/styles.css +0 -203
  975. package/src/components/core/Icon-Base/types.ts +0 -338
  976. package/src/components/core/Input-Checkbox-Base/README.md +0 -390
  977. package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.stemma.test.ts +0 -552
  978. package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.test.ts +0 -878
  979. package/src/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.ts +0 -37
  980. package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.css +0 -477
  981. package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.ts +0 -561
  982. package/src/components/core/Input-Checkbox-Base/types.ts +0 -399
  983. package/src/components/core/Input-Checkbox-Legal/README.md +0 -554
  984. package/src/components/core/Input-Checkbox-Legal/__tests__/InputCheckboxLegal.test.ts +0 -727
  985. package/src/components/core/Input-Checkbox-Legal/platforms/ios/.gitkeep +0 -2
  986. package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.css +0 -112
  987. package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.ts +0 -505
  988. package/src/components/core/Input-Checkbox-Legal/types.ts +0 -348
  989. package/src/components/core/Input-Radio-Base/.gitkeep +0 -2
  990. package/src/components/core/Input-Radio-Base/README.md +0 -427
  991. package/src/components/core/Input-Radio-Base/__tests__/.gitkeep +0 -1
  992. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.form.test.ts +0 -299
  993. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.stemma.test.ts +0 -543
  994. package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.test.ts +0 -429
  995. package/src/components/core/Input-Radio-Base/platforms/ios/.gitkeep +0 -1
  996. package/src/components/core/Input-Radio-Base/platforms/web/.gitkeep +0 -1
  997. package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.css +0 -504
  998. package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.ts +0 -648
  999. package/src/components/core/Input-Radio-Base/radio-sizing.tokens.ts +0 -37
  1000. package/src/components/core/Input-Radio-Base/types.ts +0 -362
  1001. package/src/components/core/Input-Radio-Set/README.md +0 -373
  1002. package/src/components/core/Input-Radio-Set/__tests__/.gitkeep +0 -0
  1003. package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.stemma.test.ts +0 -493
  1004. package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.test.ts +0 -499
  1005. package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.css +0 -99
  1006. package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.ts +0 -790
  1007. package/src/components/core/Input-Radio-Set/types.ts +0 -301
  1008. package/src/components/core/Input-Text-Base/README.md +0 -258
  1009. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +0 -311
  1010. package/src/components/core/Input-Text-Base/__tests__/keyboardNavigation.test.ts +0 -444
  1011. package/src/components/core/Input-Text-Base/__tests__/labelAssociation.test.ts +0 -418
  1012. package/src/components/core/Input-Text-Base/__tests__/screenReaderSupport.test.ts +0 -405
  1013. package/src/components/core/Input-Text-Base/__tests__/setup.ts +0 -17
  1014. package/src/components/core/Input-Text-Base/__tests__/stateManagement.test.ts +0 -718
  1015. package/src/components/core/Input-Text-Base/__tests__/test-utils.ts +0 -81
  1016. package/src/components/core/Input-Text-Base/__tests__/touchTargetSizing.test.ts +0 -319
  1017. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.ts +0 -241
  1018. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.css +0 -293
  1019. package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.ts +0 -448
  1020. package/src/components/core/Input-Text-Base/stateManagement.ts +0 -267
  1021. package/src/components/core/Input-Text-Base/tokens.ts +0 -210
  1022. package/src/components/core/Input-Text-Base/types.ts +0 -114
  1023. package/src/components/core/Input-Text-Email/README.md +0 -252
  1024. package/src/components/core/Input-Text-Email/__tests__/validation.test.ts +0 -127
  1025. package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.ts +0 -276
  1026. package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.ts +0 -319
  1027. package/src/components/core/Input-Text-Email/stateManagement.ts +0 -160
  1028. package/src/components/core/Input-Text-Email/tokens.ts +0 -33
  1029. package/src/components/core/Input-Text-Email/types.ts +0 -72
  1030. package/src/components/core/Input-Text-Email/validation.ts +0 -130
  1031. package/src/components/core/Input-Text-Password/README.md +0 -360
  1032. package/src/components/core/Input-Text-Password/__tests__/validation.test.ts +0 -362
  1033. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.ts +0 -434
  1034. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +0 -512
  1035. package/src/components/core/Input-Text-Password/stateManagement.ts +0 -244
  1036. package/src/components/core/Input-Text-Password/tokens.ts +0 -32
  1037. package/src/components/core/Input-Text-Password/types.ts +0 -177
  1038. package/src/components/core/Input-Text-Password/validation.ts +0 -207
  1039. package/src/components/core/Input-Text-PhoneNumber/README.md +0 -276
  1040. package/src/components/core/Input-Text-PhoneNumber/__tests__/validation.test.ts +0 -301
  1041. package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.ts +0 -370
  1042. package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.ts +0 -393
  1043. package/src/components/core/Input-Text-PhoneNumber/stateManagement.ts +0 -250
  1044. package/src/components/core/Input-Text-PhoneNumber/tokens.ts +0 -33
  1045. package/src/components/core/Input-Text-PhoneNumber/types.ts +0 -135
  1046. package/src/components/core/Input-Text-PhoneNumber/validation.ts +0 -302
  1047. package/src/components/core/Nav-Header-App/README.md +0 -29
  1048. package/src/components/core/Nav-Header-App/index.ts +0 -5
  1049. package/src/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.ts +0 -37
  1050. package/src/components/core/Nav-Header-App/types.ts +0 -32
  1051. package/src/components/core/Nav-Header-Base/README.md +0 -21
  1052. package/src/components/core/Nav-Header-Base/index.ts +0 -12
  1053. package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.styles.css +0 -75
  1054. package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.ts +0 -120
  1055. package/src/components/core/Nav-Header-Base/types.ts +0 -63
  1056. package/src/components/core/Nav-Header-Page/README.md +0 -34
  1057. package/src/components/core/Nav-Header-Page/__tests__/NavHeaderPage.test.ts +0 -250
  1058. package/src/components/core/Nav-Header-Page/index.ts +0 -12
  1059. package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.styles.css +0 -90
  1060. package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.ts +0 -169
  1061. package/src/components/core/Nav-Header-Page/types.ts +0 -55
  1062. package/src/components/core/Nav-SegmentedChoice-Base/README.md +0 -327
  1063. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.android.test.ts +0 -218
  1064. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.interaction.test.ts +0 -419
  1065. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.ios.test.ts +0 -207
  1066. package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.visual.test.ts +0 -371
  1067. package/src/components/core/Nav-SegmentedChoice-Base/index.ts +0 -38
  1068. package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.styles.css +0 -160
  1069. package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.ts +0 -477
  1070. package/src/components/core/Nav-SegmentedChoice-Base/types.ts +0 -65
  1071. package/src/components/core/Nav-TabBar-Base/README.md +0 -264
  1072. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.android.test.ts +0 -270
  1073. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.ios.test.ts +0 -221
  1074. package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.test.ts +0 -421
  1075. package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.html +0 -2
  1076. package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.tsx +0 -2
  1077. package/src/components/core/Nav-TabBar-Base/index.ts +0 -20
  1078. package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.styles.css +0 -281
  1079. package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.ts +0 -420
  1080. package/src/components/core/Nav-TabBar-Base/types.ts +0 -43
  1081. package/src/components/core/Progress-Bar-Base/README.md +0 -31
  1082. package/src/components/core/Progress-Bar-Base/__tests__/ProgressBarBase.test.ts +0 -202
  1083. package/src/components/core/Progress-Bar-Base/index.ts +0 -6
  1084. package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.styles.css +0 -52
  1085. package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.ts +0 -135
  1086. package/src/components/core/Progress-Bar-Base/types.ts +0 -46
  1087. package/src/components/core/Progress-Indicator-Connector-Base/README.md +0 -169
  1088. package/src/components/core/Progress-Indicator-Connector-Base/index.ts +0 -33
  1089. package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.styles.css +0 -50
  1090. package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.ts +0 -141
  1091. package/src/components/core/Progress-Indicator-Connector-Base/types.ts +0 -67
  1092. package/src/components/core/Progress-Indicator-Label-Base/README.md +0 -191
  1093. package/src/components/core/Progress-Indicator-Label-Base/index.ts +0 -28
  1094. package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.styles.css +0 -81
  1095. package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.ts +0 -174
  1096. package/src/components/core/Progress-Indicator-Label-Base/types.ts +0 -64
  1097. package/src/components/core/Progress-Indicator-Node-Base/README.md +0 -206
  1098. package/src/components/core/Progress-Indicator-Node-Base/__tests__/VisualStates.test.ts +0 -259
  1099. package/src/components/core/Progress-Indicator-Node-Base/index.ts +0 -36
  1100. package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.styles.css +0 -193
  1101. package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.ts +0 -226
  1102. package/src/components/core/Progress-Indicator-Node-Base/types.ts +0 -142
  1103. package/src/components/core/Progress-Pagination-Base/README.md +0 -290
  1104. package/src/components/core/Progress-Pagination-Base/__tests__/PaginationBase.test.ts +0 -290
  1105. package/src/components/core/Progress-Pagination-Base/index.ts +0 -40
  1106. package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.styles.css +0 -80
  1107. package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.ts +0 -293
  1108. package/src/components/core/Progress-Pagination-Base/types.ts +0 -112
  1109. package/src/components/core/Progress-Stepper-Base/README.md +0 -311
  1110. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +0 -345
  1111. package/src/components/core/Progress-Stepper-Base/index.ts +0 -43
  1112. package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.styles.css +0 -49
  1113. package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.ts +0 -288
  1114. package/src/components/core/Progress-Stepper-Base/types.ts +0 -175
  1115. package/src/components/core/Progress-Stepper-Detailed/README.md +0 -401
  1116. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +0 -481
  1117. package/src/components/core/Progress-Stepper-Detailed/index.ts +0 -48
  1118. package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.styles.css +0 -106
  1119. package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.ts +0 -336
  1120. package/src/components/core/Progress-Stepper-Detailed/types.ts +0 -195
  1121. package/src/composition/BlendComposition.ts +0 -46
  1122. package/src/composition/BlendCompositionParser.ts +0 -215
  1123. package/src/composition/OpacityComposition.ts +0 -62
  1124. package/src/composition/OpacityCompositionParser.ts +0 -308
  1125. package/src/composition/__tests__/BlendCompositionParser.test.ts +0 -431
  1126. package/src/composition/__tests__/OpacityCompositionParser.test.ts +0 -539
  1127. package/src/composition/index.ts +0 -20
  1128. package/src/config/ConfigLoader.ts +0 -143
  1129. package/src/config/__resolution-matrix__/README.md +0 -76
  1130. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/compiled/defineConfig.js +0 -9
  1131. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/designerpunk.config.ts +0 -20
  1132. package/src/config/__resolution-matrix__/fixtures/faithful-cjs/my-overrides.ts +0 -8
  1133. package/src/config/__resolution-matrix__/fixtures/faithful-esm/compiled/defineConfig.js +0 -11
  1134. package/src/config/__resolution-matrix__/fixtures/faithful-esm/designerpunk.config.ts +0 -23
  1135. package/src/config/__resolution-matrix__/fixtures/faithful-esm/my-overrides.ts +0 -6
  1136. package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/designerpunk.config.ts +0 -11
  1137. package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/src/config/index.ts +0 -15
  1138. package/src/config/__resolution-matrix__/fixtures/source-dir-esm/designerpunk.config.ts +0 -15
  1139. package/src/config/__resolution-matrix__/fixtures/source-dir-esm/src/config/index.ts +0 -13
  1140. package/src/config/__resolution-matrix__/run-matrix.js +0 -107
  1141. package/src/config/__resolution-matrix__/runner.js +0 -153
  1142. package/src/config/__resolution-matrix__/verify-real-loadconfig.js +0 -122
  1143. package/src/config/__tests__/ConfigLoader.test.ts +0 -115
  1144. package/src/config/defineConfig.ts +0 -71
  1145. package/src/config/index.ts +0 -7
  1146. package/src/config/scopedTsRequire.ts +0 -62
  1147. package/src/constants/BaselineGrid.ts +0 -41
  1148. package/src/constants/SpacingTokens.ts +0 -55
  1149. package/src/figma/ComponentAnalysis.ts +0 -292
  1150. package/src/figma/ComponentAnalysisGenerator.ts +0 -444
  1151. package/src/figma/ConsoleMCPClient.ts +0 -168
  1152. package/src/figma/ConsoleMCPClientImpl.ts +0 -1034
  1153. package/src/figma/DesignExtractor.ts +0 -3620
  1154. package/src/figma/TokenSyncWorkflow.ts +0 -915
  1155. package/src/figma/TokenTranslator.ts +0 -891
  1156. package/src/figma/VariantAnalyzer.ts +0 -712
  1157. package/src/figma/__tests__/ComponentAnalysisGenerator.json.test.ts +0 -429
  1158. package/src/figma/__tests__/ComponentAnalysisGenerator.markdown.test.ts +0 -428
  1159. package/src/figma/__tests__/ConsoleMCPClient.bugfix.test.ts +0 -261
  1160. package/src/figma/__tests__/ConsoleMCPClient.preservation.test.ts +0 -395
  1161. package/src/figma/__tests__/ConsoleMCPClient.test.ts +0 -375
  1162. package/src/figma/__tests__/DesignExtractor.boundVariableResolution.test.ts +0 -580
  1163. package/src/figma/__tests__/DesignExtractor.buildNodeTree.test.ts +0 -535
  1164. package/src/figma/__tests__/DesignExtractor.captureComponentScreenshot.test.ts +0 -176
  1165. package/src/figma/__tests__/DesignExtractor.detectBehavioralContracts.test.ts +0 -263
  1166. package/src/figma/__tests__/DesignExtractor.detectComponentTokenDecisions.test.ts +0 -379
  1167. package/src/figma/__tests__/DesignExtractor.detectCompositionPatterns.test.ts +0 -507
  1168. package/src/figma/__tests__/DesignExtractor.detectPlatformParity.test.ts +0 -406
  1169. package/src/figma/__tests__/DesignExtractor.queryContext.test.ts +0 -214
  1170. package/src/figma/__tests__/DesignExtractor.readFigmaComponent.test.ts +0 -431
  1171. package/src/figma/__tests__/DesignExtractor.readStyles.test.ts +0 -204
  1172. package/src/figma/__tests__/DesignExtractor.readTokenBindings.test.ts +0 -268
  1173. package/src/figma/__tests__/DesignExtractor.reconstructCompositeTokens.test.ts +0 -403
  1174. package/src/figma/__tests__/DesignExtractor.resolveUnknownVariableIds.test.ts +0 -259
  1175. package/src/figma/__tests__/DesignExtractor.translateTokens.test.ts +0 -433
  1176. package/src/figma/__tests__/DesignExtractor.validateModes.test.ts +0 -350
  1177. package/src/figma/__tests__/TokenSyncWorkflow.batch.test.ts +0 -277
  1178. package/src/figma/__tests__/TokenSyncWorkflow.drift.test.ts +0 -187
  1179. package/src/figma/__tests__/TokenSyncWorkflow.preservation.test.ts +0 -544
  1180. package/src/figma/__tests__/TokenSyncWorkflow.styles.test.ts +0 -245
  1181. package/src/figma/__tests__/TokenSyncWorkflow.sync.test.ts +0 -217
  1182. package/src/figma/__tests__/TokenTranslator.test.ts +0 -757
  1183. package/src/figma/__tests__/VariantAnalyzer.detectConflicts.test.ts +0 -126
  1184. package/src/figma/__tests__/VariantAnalyzer.test.ts +0 -633
  1185. package/src/figma/__tests__/error-reporting.test.ts +0 -254
  1186. package/src/figma/__tests__/preflight.test.ts +0 -94
  1187. package/src/figma/error-reporting.ts +0 -260
  1188. package/src/figma/index.ts +0 -98
  1189. package/src/figma/portCleanup.ts +0 -86
  1190. package/src/figma/preflight.ts +0 -120
  1191. package/src/generators/BlendUtilityGenerator.ts +0 -847
  1192. package/src/generators/BlendValueGenerator.ts +0 -198
  1193. package/src/generators/DTCGFormatGenerator.ts +0 -1355
  1194. package/src/generators/DTCGGeneratorConfig.ts +0 -46
  1195. package/src/generators/ModeResolvedTokens.ts +0 -58
  1196. package/src/generators/ResponsiveGridGenerator.ts +0 -273
  1197. package/src/generators/TokenFileGenerator.ts +0 -2075
  1198. package/src/generators/__tests__/AccessibilityTokenGeneration.test.ts +0 -350
  1199. package/src/generators/__tests__/BlendUtilityGenerator.test.ts +0 -829
  1200. package/src/generators/__tests__/BlendValueGenerator.test.ts +0 -200
  1201. package/src/generators/__tests__/BreakpointTokenGeneration.test.ts +0 -172
  1202. package/src/generators/__tests__/CSSThemeScoping.test.ts +0 -153
  1203. package/src/generators/__tests__/DTCGConfigOptions.test.ts +0 -271
  1204. package/src/generators/__tests__/DTCGErrorHandling.test.ts +0 -139
  1205. package/src/generators/__tests__/DTCGFormatGenerator.integration.test.ts +0 -346
  1206. package/src/generators/__tests__/DTCGFormatGenerator.property.test.ts +0 -497
  1207. package/src/generators/__tests__/DTCGFormatGenerator.test.ts +0 -469
  1208. package/src/generators/__tests__/FigmaTransformer.styles.test.ts +0 -398
  1209. package/src/generators/__tests__/FigmaTransformer.variables.test.ts +0 -540
  1210. package/src/generators/__tests__/GridSpacingTokenGeneration.test.ts +0 -254
  1211. package/src/generators/__tests__/IconTokenGeneration.test.ts +0 -452
  1212. package/src/generators/__tests__/KotlinThemeTypes.test.ts +0 -110
  1213. package/src/generators/__tests__/ModeAwareGeneration.test.ts +0 -160
  1214. package/src/generators/__tests__/NativeOklchOutput.test.ts +0 -56
  1215. package/src/generators/__tests__/OklchExport.test.ts +0 -71
  1216. package/src/generators/__tests__/ProductRepoSimulation.test.ts +0 -91
  1217. package/src/generators/__tests__/ResponsiveGridGeneration.test.ts +0 -291
  1218. package/src/generators/__tests__/Spec076TokenMigration.test.ts +0 -106
  1219. package/src/generators/__tests__/Spec077ModesVerification.test.ts +0 -52
  1220. package/src/generators/__tests__/SwiftThemeTypes.test.ts +0 -122
  1221. package/src/generators/__tests__/TokenFileGenerator.test.ts +0 -914
  1222. package/src/generators/__tests__/TransformerRegistry.test.ts +0 -118
  1223. package/src/generators/__tests__/WcagValueExportSupport.test.ts +0 -84
  1224. package/src/generators/__tests__/WcagValueInfrastructure.test.ts +0 -122
  1225. package/src/generators/__tests__/WebOklchOutput.test.ts +0 -72
  1226. package/src/generators/__tests__/generateTokenIndex.test.ts +0 -204
  1227. package/src/generators/__tests__/helpers/defaultSemanticOptions.ts +0 -24
  1228. package/src/generators/generateTokenFiles.ts +0 -337
  1229. package/src/generators/generateTokenIndex.ts +0 -258
  1230. package/src/generators/oklch/OklchExportUtils.ts +0 -57
  1231. package/src/generators/oklch/OklchTokenIndexMetadata.ts +0 -30
  1232. package/src/generators/transformers/FigmaTransformer.ts +0 -912
  1233. package/src/generators/transformers/ITokenTransformer.ts +0 -56
  1234. package/src/generators/transformers/TransformerRegistry.ts +0 -63
  1235. package/src/generators/transformers/index.ts +0 -52
  1236. package/src/generators/types/DTCGTypes.ts +0 -101
  1237. package/src/integration/BuildErrorHandler.ts +0 -440
  1238. package/src/integration/BuildSystemInterface.ts +0 -338
  1239. package/src/integration/PlatformFileSelector.ts +0 -288
  1240. package/src/integration/RegistryCoordinator.ts +0 -404
  1241. package/src/integration/TranslationCoordinator.ts +0 -458
  1242. package/src/integration/TreeShakingOptimizer.ts +0 -350
  1243. package/src/integration/ValidationCoordinator.ts +0 -780
  1244. package/src/integration/__tests__/ComponentTokenValidation.test.ts +0 -762
  1245. package/src/integration/__tests__/ValidationCoordinator.test.ts +0 -609
  1246. package/src/integration/__tests__/performance/ComponentTokenValidationPerformance.test.ts +0 -161
  1247. package/src/integration/index.ts +0 -55
  1248. package/src/naming/NamingConventionManager.ts +0 -318
  1249. package/src/naming/PlatformNamingRules.ts +0 -278
  1250. package/src/naming/__tests__/NamingConventions.test.ts +0 -224
  1251. package/src/naming/index.ts +0 -23
  1252. package/src/parent-completion.md +0 -1
  1253. package/src/performance/CachingStrategy.ts +0 -426
  1254. package/src/performance/FileGenerationOptimizer.ts +0 -294
  1255. package/src/performance/PerformanceMonitor.ts +0 -185
  1256. package/src/performance/PerformanceOptimizer.ts +0 -348
  1257. package/src/performance/index.ts +0 -30
  1258. package/src/providers/AndroidFileOrganizer.ts +0 -241
  1259. package/src/providers/AndroidFormatGenerator.ts +0 -750
  1260. package/src/providers/AndroidUnitConverter.ts +0 -177
  1261. package/src/providers/FormatProvider.ts +0 -187
  1262. package/src/providers/PathProvider.ts +0 -197
  1263. package/src/providers/UnitProvider.ts +0 -106
  1264. package/src/providers/WebFileOrganizer.ts +0 -121
  1265. package/src/providers/WebFormatGenerator.ts +0 -611
  1266. package/src/providers/WebUnitConverter.ts +0 -116
  1267. package/src/providers/__tests__/AndroidAccessibilityTokens.test.ts +0 -86
  1268. package/src/providers/__tests__/AndroidFormatGenerator-semantic.test.ts +0 -494
  1269. package/src/providers/__tests__/FormatProviders.test.ts +0 -828
  1270. package/src/providers/__tests__/InsetTokenGeneration.test.ts +0 -627
  1271. package/src/providers/__tests__/PathProviders.test.ts +0 -512
  1272. package/src/providers/__tests__/PlatformOutputFormat.test.ts +0 -252
  1273. package/src/providers/__tests__/UnitProviders.test.ts +0 -721
  1274. package/src/providers/__tests__/WebFormatGenerator-semantic.test.ts +0 -293
  1275. package/src/providers/__tests__/iOSFormatGenerator-semantic.test.ts +0 -410
  1276. package/src/providers/iOSFileOrganizer.ts +0 -162
  1277. package/src/providers/iOSFormatGenerator.ts +0 -599
  1278. package/src/providers/iOSUnitConverter.ts +0 -125
  1279. package/src/providers/index.ts +0 -26
  1280. package/src/registries/ComponentTokenRegistry.ts +0 -292
  1281. package/src/registries/IRegistry.ts +0 -170
  1282. package/src/registries/__tests__/ComponentTokenRegistry.test.ts +0 -446
  1283. package/src/registries/__tests__/IRegistry.test.ts +0 -250
  1284. package/src/registries/__tests__/PrimitiveTokenRegistry.test.ts +0 -342
  1285. package/src/registries/__tests__/SemanticTokenRegistry.test.ts +0 -444
  1286. package/src/resolvers/AndroidColorResolver.ts +0 -333
  1287. package/src/resolvers/ModeThemeResolver.ts +0 -152
  1288. package/src/resolvers/SemanticOverrideResolver.ts +0 -155
  1289. package/src/resolvers/SemanticValueResolver.ts +0 -133
  1290. package/src/resolvers/WebColorResolver.ts +0 -240
  1291. package/src/resolvers/__tests__/AndroidColorResolver.test.ts +0 -507
  1292. package/src/resolvers/__tests__/ModeThemeResolver.test.ts +0 -411
  1293. package/src/resolvers/__tests__/SemanticOverrideResolver.test.ts +0 -186
  1294. package/src/resolvers/__tests__/WebColorResolver.test.ts +0 -405
  1295. package/src/resolvers/__tests__/iOSColorResolver.test.ts +0 -432
  1296. package/src/resolvers/iOSColorResolver.ts +0 -224
  1297. package/src/resolvers/index.ts +0 -11
  1298. package/src/security/AIAgentRestrictions.ts +0 -298
  1299. package/src/security/ContaminationAuditor.ts +0 -393
  1300. package/src/security/ContaminationPrevention.ts +0 -275
  1301. package/src/security/DocumentationGuard.ts +0 -258
  1302. package/src/security/FlexibilityTokenGuard.ts +0 -256
  1303. package/src/security/HumanApprovalWorkflow.ts +0 -319
  1304. package/src/security/__tests__/AIAgentRestrictions.test.ts +0 -482
  1305. package/src/security/__tests__/ContaminationPrevention.test.ts +0 -424
  1306. package/src/security/__tests__/SecurityIntegration.test.ts +0 -505
  1307. package/src/security/index.ts +0 -48
  1308. package/src/testing/__tests__/utilities.test.ts +0 -175
  1309. package/src/testing/index.ts +0 -154
  1310. package/src/testing/jest-preset.ts +0 -62
  1311. package/src/testing/style-mock.ts +0 -7
  1312. package/src/testing/validators.ts +0 -10
  1313. package/src/themes/ResolvedThemeSet.ts +0 -22
  1314. package/src/themes/ThemeRegistry.ts +0 -97
  1315. package/src/themes/__tests__/ThemeRegistry.test.ts +0 -162
  1316. package/src/tools/ThemeFileGenerator.ts +0 -109
  1317. package/src/tools/integrity/DiskFreshGenerator.ts +0 -36
  1318. package/src/tools/integrity/GenerationIntegrityCheck.ts +0 -132
  1319. package/src/tools/integrity/Invariants.ts +0 -228
  1320. package/src/tools/integrity/Normalizer.ts +0 -94
  1321. package/src/tools/integrity/SemanticComparator.ts +0 -127
  1322. package/src/tools/integrity/__tests__/GenerationIntegrityCheck.test.ts +0 -132
  1323. package/src/tools/integrity/__tests__/Invariants.test.ts +0 -142
  1324. package/src/tools/integrity/__tests__/Normalizer.test.ts +0 -65
  1325. package/src/tools/integrity/__tests__/SemanticComparator.test.ts +0 -62
  1326. package/src/tools/integrity/__tests__/consumer-package-mode.test.ts +0 -205
  1327. package/src/tools/integrity/cli/run-audit.ts +0 -150
  1328. package/src/tools/integrity/inventory.ts +0 -51
  1329. package/src/tools/integrity/manifest.ts +0 -56
  1330. package/src/tools/integrity/types/index.ts +0 -183
  1331. package/src/types/ComponentTypes.ts +0 -76
  1332. package/src/types/TranslationOutput.ts +0 -105
  1333. package/src/types/ValidationResult.ts +0 -74
  1334. package/src/types/__tests__/ComponentTypes.test.ts +0 -73
  1335. package/src/types/css.d.ts +0 -35
  1336. package/src/types/generated/TokenTypes.ts +0 -142
  1337. package/src/types/index.ts +0 -42
  1338. package/src/validators/BaselineGridValidator.ts +0 -119
  1339. package/src/validators/CompositionPatternValidator.ts +0 -259
  1340. package/src/validators/CrossPlatformConsistencyValidator.ts +0 -498
  1341. package/src/validators/ErrorValidator.ts +0 -998
  1342. package/src/validators/IValidator.ts +0 -273
  1343. package/src/validators/MathematicalRelationshipParser.ts +0 -434
  1344. package/src/validators/ModeParity.ts +0 -123
  1345. package/src/validators/PassValidator.ts +0 -533
  1346. package/src/validators/PlatformConstraintHandler.ts +0 -453
  1347. package/src/validators/PrimitiveReferenceValidator.ts +0 -284
  1348. package/src/validators/SemanticTokenValidator.ts +0 -496
  1349. package/src/validators/StemmaComponentNamingValidator.ts +0 -524
  1350. package/src/validators/StemmaErrorGuidanceSystem.ts +0 -1600
  1351. package/src/validators/StemmaPropertyAccessibilityValidator.ts +0 -823
  1352. package/src/validators/StemmaTokenUsageValidator.ts +0 -651
  1353. package/src/validators/SyntaxValidator.ts +0 -537
  1354. package/src/validators/ThreeTierValidator.ts +0 -822
  1355. package/src/validators/ToleranceCalculator.ts +0 -324
  1356. package/src/validators/ValidationReasoning.ts +0 -464
  1357. package/src/validators/WCAGValidator.ts +0 -219
  1358. package/src/validators/WarningValidator.ts +0 -626
  1359. package/src/validators/__tests__/BaselineGridValidator.test.ts +0 -292
  1360. package/src/validators/__tests__/BorderWidthValidation.test.ts +0 -595
  1361. package/src/validators/__tests__/CompositionPatterns.test.ts +0 -463
  1362. package/src/validators/__tests__/CrossPlatformConsistency.test.ts +0 -834
  1363. package/src/validators/__tests__/IValidator.test.ts +0 -258
  1364. package/src/validators/__tests__/MathematicalRelationshipParser.test.ts +0 -465
  1365. package/src/validators/__tests__/PlatformConstraints.test.ts +0 -486
  1366. package/src/validators/__tests__/SemanticTokenValidator.test.ts +0 -723
  1367. package/src/validators/__tests__/StemmaComponentNamingValidator.test.ts +0 -597
  1368. package/src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts +0 -717
  1369. package/src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts +0 -349
  1370. package/src/validators/__tests__/StemmaTokenUsageValidator.test.ts +0 -432
  1371. package/src/validators/__tests__/SyntaxValidator.test.ts +0 -360
  1372. package/src/validators/__tests__/ThreeTierValidator.test.ts +0 -906
  1373. package/src/validators/__tests__/ValidationReasoning.test.ts +0 -636
  1374. package/src/validators/__tests__/WCAGValidator.test.ts +0 -243
  1375. package/src/validators/buildValidation.ts +0 -170
  1376. package/src/validators/index.ts +0 -144
  1377. package/src/workflows/ConsistencyValidator.ts +0 -339
  1378. package/src/workflows/TokenGenerationWorkflow.ts +0 -460
  1379. package/src/workflows/ValidationPipeline.ts +0 -284
  1380. package/src/workflows/WorkflowErrorHandler.ts +0 -441
@@ -1,2075 +0,0 @@
1
- /**
2
- * Token File Generator
3
- *
4
- * Orchestrates the generation of platform-specific token constant files.
5
- * Generates DesignTokens.web.css, DesignTokens.ios.swift, and DesignTokens.android.kt
6
- * with mathematical consistency across all platforms.
7
- *
8
- * Also generates BlendUtilities for each platform via BlendUtilityGenerator integration.
9
- */
10
-
11
- import { PrimitiveToken, TokenCategory } from '../types/PrimitiveToken';
12
- import { SemanticToken, SemanticCategory } from '../types/SemanticToken';
13
- import { WebFormatGenerator } from '../providers/WebFormatGenerator';
14
- import { iOSFormatGenerator } from '../providers/iOSFormatGenerator';
15
- import { AndroidFormatGenerator } from '../providers/AndroidFormatGenerator';
16
- import { FileMetadata } from '../providers/FormatProvider';
17
- import { getAllPrimitiveTokens, durationTokens, easingTokens, scaleTokens } from '../tokens';
18
- import { getAllSemanticTokens, getAllZIndexTokens, getAllElevationTokens, motionTokens } from '../tokens/semantic';
19
- import { BlendUtilityGenerator, BlendUtilityGenerationOptions } from './BlendUtilityGenerator';
20
- import { ComponentTokenRegistry, RegisteredComponentToken } from '../registries/ComponentTokenRegistry';
21
- import { allComposedColors } from '../tokens/color';
22
- import { colorHues, neutralHue } from '../tokens/color/channels/hues';
23
- import {
24
- pinkLightness, orangeLightness, yellowLightness, greenLightness,
25
- cyanLightness, tealLightness, purpleLightness,
26
- } from '../tokens/color/channels/lightness/chromatic';
27
- import {
28
- pinkChroma, orangeChroma, yellowChroma, greenChroma,
29
- cyanChroma, tealChroma, purpleChroma,
30
- } from '../tokens/color/channels/chroma/chromatic';
31
- import { whiteLightness, grayLightness, blackLightness } from '../tokens/color/channels/lightness/neutral';
32
- import { whiteChroma, grayChroma, blackChroma } from '../tokens/color/channels/chroma/neutral';
33
-
34
- export interface BaseGenerationOptions {
35
- outputDir?: string;
36
- version?: string;
37
- includeComments?: boolean;
38
- groupByCategory?: boolean;
39
- }
40
-
41
- export interface GenerationOptions extends BaseGenerationOptions {
42
- /** Resolved primitive tokens from the configured source. When omitted, loads from package. */
43
- primitiveTokens?: PrimitiveToken[];
44
- /** Pre-resolved semantic tokens (light-base context). Generators require externally-resolved tokens (D9 Option B). */
45
- semanticTokens: Array<Omit<SemanticToken, 'primitiveTokens'>>;
46
- /** Pre-resolved semantic tokens (dark-base context). Used with semanticTokens to produce mode-aware output. */
47
- darkSemanticTokens: Array<Omit<SemanticToken, 'primitiveTokens'>>;
48
- /** Pre-resolved semantic tokens (light-wcag context). When provided, generates WCAG theme overrides. */
49
- wcagSemanticTokens?: Array<Omit<SemanticToken, 'primitiveTokens'>>;
50
- /** Pre-resolved semantic tokens (dark-wcag context). Used with wcagSemanticTokens for mode-aware WCAG output. */
51
- darkWcagSemanticTokens?: Array<Omit<SemanticToken, 'primitiveTokens'>>;
52
- /** Token names that have WCAG semantic overrides (Level 2). Only these appear in the WCAG override block. */
53
- wcagOverrideKeys?: Set<string>;
54
- /** Registered theme override sets for generalized theme block generation (Spec 094). */
55
- themeOverrides?: ThemeOverrideSet[];
56
- /** Token names that have moved to theme types — excluded from static iOS/Android output (Spec 094). */
57
- themeVaryingTokens?: Set<string>;
58
- }
59
-
60
- /**
61
- * A resolved theme override set for generation.
62
- * Generalizes the WCAG-specific fields to support any registered theme.
63
- *
64
- * @see Spec 094 design.md § "Platform Generators (Modified)"
65
- */
66
- export interface ThemeOverrideSet {
67
- /** Theme name used in CSS `data-theme` attribute and generated type names. */
68
- name: string;
69
- /** Theme mode: 'dark' = dark-only, 'light' = light-only, 'both' = light-dark(). */
70
- mode: 'dark' | 'light' | 'both';
71
- /** Resolved light tokens for this theme (or the only tokens if mode is 'light'). */
72
- lightTokens: Array<Omit<SemanticToken, 'primitiveTokens'>>;
73
- /** Resolved dark tokens for this theme (or the only tokens if mode is 'dark'). */
74
- darkTokens: Array<Omit<SemanticToken, 'primitiveTokens'>>;
75
- /** Token names that have overrides in this theme. Only these appear in the override block. */
76
- overrideKeys: Set<string>;
77
- }
78
-
79
- export interface GenerationResult {
80
- platform: 'web' | 'ios' | 'android';
81
- filePath: string;
82
- content: string;
83
- tokenCount: number;
84
- semanticTokenCount: number;
85
- valid: boolean;
86
- errors?: string[];
87
- warnings?: string[];
88
- }
89
-
90
- export interface BlendUtilityResult {
91
- platform: 'web' | 'ios' | 'android';
92
- filePath: string;
93
- content: string;
94
- valid: boolean;
95
- errors?: string[];
96
- }
97
-
98
- export interface AllGenerationResults {
99
- tokens: GenerationResult[];
100
- blendUtilities: BlendUtilityResult[];
101
- }
102
-
103
- /**
104
- * Result of component token generation for a single platform
105
- */
106
- export interface ComponentTokenGenerationResult {
107
- platform: 'web' | 'ios' | 'android';
108
- filePath: string;
109
- content: string;
110
- tokenCount: number;
111
- componentCount: number;
112
- valid: boolean;
113
- errors?: string[];
114
- warnings?: string[];
115
- }
116
-
117
- /**
118
- * Token File Generator
119
- * Generates platform-specific token constant files with mathematical consistency
120
- */
121
- export class TokenFileGenerator {
122
- private webGenerator: WebFormatGenerator;
123
- private iosGenerator: iOSFormatGenerator;
124
- private androidGenerator: AndroidFormatGenerator;
125
- private blendUtilityGenerator: BlendUtilityGenerator;
126
-
127
- constructor() {
128
- this.webGenerator = new WebFormatGenerator();
129
- this.iosGenerator = new iOSFormatGenerator();
130
- this.androidGenerator = new AndroidFormatGenerator('kotlin');
131
- this.blendUtilityGenerator = new BlendUtilityGenerator();
132
- }
133
-
134
- /**
135
- * Generate all platform-specific token files
136
- */
137
- generateAll(options: GenerationOptions): GenerationResult[] {
138
- const results: GenerationResult[] = [];
139
-
140
- results.push(this.generateWebTokens(options));
141
- results.push(this.generateiOSTokens(options));
142
- results.push(this.generateAndroidTokens(options));
143
-
144
- return results;
145
- }
146
-
147
- /**
148
- * Generate all platform-specific token files AND blend utilities
149
- * This is the comprehensive generation method that produces all artifacts
150
- */
151
- generateAllWithBlendUtilities(options: GenerationOptions): AllGenerationResults {
152
- const tokenResults = this.generateAll(options);
153
- const blendResults = this.generateBlendUtilities(options);
154
-
155
- return {
156
- tokens: tokenResults,
157
- blendUtilities: blendResults
158
- };
159
- }
160
-
161
- /**
162
- * Generate blend utilities for all platforms
163
- *
164
- * @param options - Generation options
165
- * @returns Array of blend utility generation results
166
- */
167
- generateBlendUtilities(options: BaseGenerationOptions = {}): BlendUtilityResult[] {
168
- const { outputDir = 'output', includeComments = true } = options;
169
- const blendOptions: BlendUtilityGenerationOptions = { includeComments };
170
- const results: BlendUtilityResult[] = [];
171
-
172
- // Generate Web blend utilities
173
- try {
174
- const webContent = this.blendUtilityGenerator.generateWebBlendUtilities(blendOptions);
175
- results.push({
176
- platform: 'web',
177
- filePath: `${outputDir}/BlendUtilities.web.ts`,
178
- content: webContent,
179
- valid: this.validateWebBlendUtilitySyntax(webContent)
180
- });
181
- } catch (error) {
182
- results.push({
183
- platform: 'web',
184
- filePath: `${outputDir}/BlendUtilities.web.ts`,
185
- content: '',
186
- valid: false,
187
- errors: [`Web blend utility generation failed: ${error instanceof Error ? error.message : String(error)}`]
188
- });
189
- }
190
-
191
- // Generate iOS blend utilities
192
- try {
193
- const iosContent = this.blendUtilityGenerator.generateiOSBlendUtilities(blendOptions);
194
- results.push({
195
- platform: 'ios',
196
- filePath: `${outputDir}/BlendUtilities.ios.swift`,
197
- content: iosContent,
198
- valid: this.validateiOSBlendUtilitySyntax(iosContent)
199
- });
200
- } catch (error) {
201
- results.push({
202
- platform: 'ios',
203
- filePath: `${outputDir}/BlendUtilities.ios.swift`,
204
- content: '',
205
- valid: false,
206
- errors: [`iOS blend utility generation failed: ${error instanceof Error ? error.message : String(error)}`]
207
- });
208
- }
209
-
210
- // Generate Android blend utilities
211
- try {
212
- const androidContent = this.blendUtilityGenerator.generateAndroidBlendUtilities(blendOptions);
213
- results.push({
214
- platform: 'android',
215
- filePath: `${outputDir}/BlendUtilities.android.kt`,
216
- content: androidContent,
217
- valid: this.validateAndroidBlendUtilitySyntax(androidContent)
218
- });
219
- } catch (error) {
220
- results.push({
221
- platform: 'android',
222
- filePath: `${outputDir}/BlendUtilities.android.kt`,
223
- content: '',
224
- valid: false,
225
- errors: [`Android blend utility generation failed: ${error instanceof Error ? error.message : String(error)}`]
226
- });
227
- }
228
-
229
- return results;
230
- }
231
-
232
- /**
233
- * Generate component tokens for all platforms
234
- *
235
- * Queries ComponentTokenRegistry.getAll() for tokens to generate.
236
- * Generates output grouped by component.
237
- * Maintains primitive token references in output (not inline values).
238
- *
239
- * @param options - Generation options
240
- * @returns Array of component token generation results for each platform
241
- *
242
- * @see Requirements 5.1, 5.2, 5.3, 5.4 in .kiro/specs/037-component-token-generation-pipeline/requirements.md
243
- */
244
- generateComponentTokens(options: BaseGenerationOptions = {}): ComponentTokenGenerationResult[] {
245
- const { outputDir = 'dist', version = '1.0.0', includeComments = true } = options;
246
- const results: ComponentTokenGenerationResult[] = [];
247
-
248
- // Get all registered component tokens
249
- const allTokens = ComponentTokenRegistry.getAll();
250
-
251
- // Group tokens by component
252
- const tokensByComponent = this.groupTokensByComponent(allTokens);
253
- const componentCount = Object.keys(tokensByComponent).length;
254
-
255
- // Generate for each platform
256
- results.push(this.generateWebComponentTokens(tokensByComponent, outputDir, version, includeComments));
257
- results.push(this.generateiOSComponentTokens(tokensByComponent, outputDir, version, includeComments));
258
- results.push(this.generateAndroidComponentTokens(tokensByComponent, outputDir, version, includeComments));
259
-
260
- return results;
261
- }
262
-
263
- /**
264
- * Group component tokens by component name
265
- *
266
- * @param tokens - Array of registered component tokens
267
- * @returns Map of component name to tokens
268
- */
269
- private groupTokensByComponent(tokens: RegisteredComponentToken[]): Record<string, RegisteredComponentToken[]> {
270
- const grouped: Record<string, RegisteredComponentToken[]> = {};
271
-
272
- for (const token of tokens) {
273
- if (!grouped[token.component]) {
274
- grouped[token.component] = [];
275
- }
276
- grouped[token.component].push(token);
277
- }
278
-
279
- return grouped;
280
- }
281
-
282
- /**
283
- * Generate Web CSS component tokens
284
- *
285
- * Generates CSS custom properties referencing primitive tokens.
286
- * Format: --button-icon-inset-large: var(--space-150);
287
- *
288
- * @param tokensByComponent - Tokens grouped by component
289
- * @param outputDir - Output directory
290
- * @param version - Version string
291
- * @param includeComments - Whether to include comments
292
- * @returns Generation result for web platform
293
- */
294
- private generateWebComponentTokens(
295
- tokensByComponent: Record<string, RegisteredComponentToken[]>,
296
- outputDir: string,
297
- version: string,
298
- includeComments: boolean
299
- ): ComponentTokenGenerationResult {
300
- const lines: string[] = [];
301
- const timestamp = new Date().toISOString();
302
- let tokenCount = 0;
303
-
304
- // Header
305
- lines.push('/**');
306
- lines.push(' * DesignerPunk Design System - Component Tokens');
307
- lines.push(` * Generated: ${timestamp}`);
308
- lines.push(` * Version: ${version}`);
309
- lines.push(' * Platform: Web (CSS Custom Properties)');
310
- lines.push(' *');
311
- lines.push(' * Component-specific tokens that reference primitive tokens.');
312
- lines.push(' * Use these for component-level styling consistency.');
313
- lines.push(' */');
314
- lines.push('');
315
- lines.push(':root {');
316
-
317
- // Generate tokens grouped by component
318
- const components = Object.keys(tokensByComponent).sort();
319
-
320
- for (const component of components) {
321
- const tokens = tokensByComponent[component];
322
-
323
- if (includeComments) {
324
- lines.push('');
325
- lines.push(` /* ${component} Component Tokens */`);
326
- }
327
-
328
- for (const token of tokens) {
329
- const cssTokenName = this.formatWebComponentTokenName(token);
330
- const cssValue = this.formatWebComponentTokenValue(token);
331
-
332
- if (includeComments && token.reasoning) {
333
- lines.push(` /* ${token.reasoning} */`);
334
- }
335
-
336
- lines.push(` ${cssTokenName}: ${cssValue};`);
337
- tokenCount++;
338
- }
339
- }
340
-
341
- lines.push('}');
342
-
343
- const content = lines.join('\n');
344
- const validation = this.validateWebComponentTokenSyntax(content);
345
-
346
- return {
347
- platform: 'web',
348
- filePath: `${outputDir}/ComponentTokens.web.css`,
349
- content,
350
- tokenCount,
351
- componentCount: components.length,
352
- valid: validation.valid,
353
- errors: validation.errors
354
- };
355
- }
356
-
357
- /**
358
- * Generate iOS Swift component tokens
359
- *
360
- * Generates Swift constants referencing primitive tokens.
361
- * Format: public static let insetLarge: CGFloat = SpacingTokens.space150
362
- *
363
- * @param tokensByComponent - Tokens grouped by component
364
- * @param outputDir - Output directory
365
- * @param version - Version string
366
- * @param includeComments - Whether to include comments
367
- * @returns Generation result for iOS platform
368
- */
369
- private generateiOSComponentTokens(
370
- tokensByComponent: Record<string, RegisteredComponentToken[]>,
371
- outputDir: string,
372
- version: string,
373
- includeComments: boolean
374
- ): ComponentTokenGenerationResult {
375
- const lines: string[] = [];
376
- const timestamp = new Date().toISOString();
377
- let tokenCount = 0;
378
-
379
- // Header
380
- lines.push('///');
381
- lines.push('/// DesignerPunk Design System - Component Tokens');
382
- lines.push(`/// Generated: ${timestamp}`);
383
- lines.push(`/// Version: ${version}`);
384
- lines.push('/// Platform: iOS (Swift Constants)');
385
- lines.push('///');
386
- lines.push('/// Component-specific tokens that reference primitive tokens.');
387
- lines.push('/// Use these for component-level styling consistency.');
388
- lines.push('///');
389
- lines.push('');
390
- lines.push('import UIKit');
391
- lines.push('');
392
-
393
- // Generate tokens grouped by component (each component as an enum)
394
- const components = Object.keys(tokensByComponent).sort();
395
-
396
- for (const component of components) {
397
- const tokens = tokensByComponent[component];
398
- const enumName = `${component}Tokens`;
399
-
400
- if (includeComments) {
401
- lines.push(`/// ${component} Component Tokens`);
402
- }
403
- lines.push(`public enum ${enumName} {`);
404
-
405
- for (const token of tokens) {
406
- const swiftConstName = this.formatiOSComponentTokenName(token);
407
- const swiftType = this.getiOSComponentTokenType(token);
408
- const swiftValue = this.formatiOSComponentTokenValue(token);
409
-
410
- if (includeComments && token.reasoning) {
411
- lines.push(` /// ${token.reasoning}`);
412
- }
413
-
414
- lines.push(` public static let ${swiftConstName}: ${swiftType} = ${swiftValue}`);
415
- tokenCount++;
416
- }
417
-
418
- lines.push('}');
419
- lines.push('');
420
- }
421
-
422
- const content = lines.join('\n');
423
- const validation = this.validateiOSComponentTokenSyntax(content);
424
-
425
- return {
426
- platform: 'ios',
427
- filePath: `${outputDir}/ComponentTokens.ios.swift`,
428
- content,
429
- tokenCount,
430
- componentCount: components.length,
431
- valid: validation.valid,
432
- errors: validation.errors
433
- };
434
- }
435
-
436
- /**
437
- * Generate Android Kotlin component tokens
438
- *
439
- * Generates Kotlin constants referencing primitive tokens.
440
- * Format: val insetLarge = SpacingTokens.space150
441
- *
442
- * @param tokensByComponent - Tokens grouped by component
443
- * @param outputDir - Output directory
444
- * @param version - Version string
445
- * @param includeComments - Whether to include comments
446
- * @returns Generation result for Android platform
447
- */
448
- private generateAndroidComponentTokens(
449
- tokensByComponent: Record<string, RegisteredComponentToken[]>,
450
- outputDir: string,
451
- version: string,
452
- includeComments: boolean
453
- ): ComponentTokenGenerationResult {
454
- const lines: string[] = [];
455
- const timestamp = new Date().toISOString();
456
- let tokenCount = 0;
457
-
458
- // Header
459
- lines.push('/**');
460
- lines.push(' * DesignerPunk Design System - Component Tokens');
461
- lines.push(` * Generated: ${timestamp}`);
462
- lines.push(` * Version: ${version}`);
463
- lines.push(' * Platform: Android (Kotlin Constants)');
464
- lines.push(' *');
465
- lines.push(' * Component-specific tokens that reference primitive tokens.');
466
- lines.push(' * Use these for component-level styling consistency.');
467
- lines.push(' */');
468
- lines.push('');
469
- lines.push('package com.designerpunk.tokens');
470
- lines.push('');
471
-
472
- // Generate tokens grouped by component (each component as an object)
473
- const components = Object.keys(tokensByComponent).sort();
474
-
475
- for (const component of components) {
476
- const tokens = tokensByComponent[component];
477
- const objectName = `${component}Tokens`;
478
-
479
- if (includeComments) {
480
- lines.push(`/** ${component} Component Tokens */`);
481
- }
482
- lines.push(`object ${objectName} {`);
483
-
484
- for (const token of tokens) {
485
- const kotlinConstName = this.formatAndroidComponentTokenName(token);
486
- const kotlinValue = this.formatAndroidComponentTokenValue(token);
487
-
488
- if (includeComments && token.reasoning) {
489
- lines.push(` // ${token.reasoning}`);
490
- }
491
-
492
- lines.push(` val ${kotlinConstName} = ${kotlinValue}`);
493
- tokenCount++;
494
- }
495
-
496
- lines.push('}');
497
- lines.push('');
498
- }
499
-
500
- const content = lines.join('\n');
501
- const validation = this.validateAndroidComponentTokenSyntax(content);
502
-
503
- return {
504
- platform: 'android',
505
- filePath: `${outputDir}/ComponentTokens.android.kt`,
506
- content,
507
- tokenCount,
508
- componentCount: components.length,
509
- valid: validation.valid,
510
- errors: validation.errors
511
- };
512
- }
513
-
514
- /**
515
- * Format component token name for Web CSS
516
- * Converts 'buttonicon.inset.large' to '--button-icon-inset-large'
517
- */
518
- private formatWebComponentTokenName(token: RegisteredComponentToken): string {
519
- // Convert component.property.variant to kebab-case CSS custom property
520
- const parts = token.name.split('.');
521
- const kebabName = parts.map(part =>
522
- part.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
523
- ).join('-');
524
- return `--${kebabName}`;
525
- }
526
-
527
- /**
528
- * Format component token value for Web CSS
529
- * Returns var(--space-150) for primitive references, or raw value
530
- */
531
- private formatWebComponentTokenValue(token: RegisteredComponentToken): string {
532
- if (token.primitiveReference) {
533
- // Convert primitive reference to CSS custom property reference
534
- // e.g., 'space150' -> 'var(--space-150)'
535
- const cssRef = token.primitiveReference
536
- .replace(/([a-z])([A-Z])/g, '$1-$2')
537
- .replace(/([a-zA-Z])(\d)/g, '$1-$2')
538
- .toLowerCase();
539
- return `var(--${cssRef})`;
540
- }
541
- // Return raw value for non-reference tokens
542
- return String(token.value);
543
- }
544
-
545
- /**
546
- * Format component token name for iOS Swift
547
- * Converts 'buttonicon.inset.large' to 'insetLarge'
548
- */
549
- private formatiOSComponentTokenName(token: RegisteredComponentToken): string {
550
- // Extract property name from full token name (remove component prefix)
551
- const parts = token.name.split('.');
552
- // Skip the component name (first part), join remaining parts in camelCase
553
- const propertyParts = parts.slice(1);
554
- if (propertyParts.length === 0) {
555
- return parts[0];
556
- }
557
- return propertyParts.map((part, index) =>
558
- index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)
559
- ).join('');
560
- }
561
-
562
- /**
563
- * Get Swift type for component token based on family
564
- */
565
- private getiOSComponentTokenType(token: RegisteredComponentToken): string {
566
- switch (token.family) {
567
- case 'spacing':
568
- case 'sizing':
569
- case 'radius':
570
- case 'fontSize':
571
- case 'tapArea':
572
- case 'borderWidth':
573
- return 'CGFloat';
574
- case 'color':
575
- return 'UIColor';
576
- default:
577
- return 'CGFloat';
578
- }
579
- }
580
-
581
- /**
582
- * Format component token value for iOS Swift
583
- * Returns SpacingTokens.space150 for primitive references, or raw value
584
- */
585
- private formatiOSComponentTokenValue(token: RegisteredComponentToken): string {
586
- if (token.primitiveReference) {
587
- // Convert primitive reference to Swift constant reference
588
- // e.g., 'space150' -> 'SpacingTokens.space150'
589
- const familyClass = this.getFamilyClassName(token.family);
590
- return `${familyClass}.${token.primitiveReference}`;
591
- }
592
- // Return raw value for non-reference tokens
593
- return String(token.value);
594
- }
595
-
596
- /**
597
- * Format component token name for Android Kotlin
598
- * Converts 'buttonicon.inset.large' to 'insetLarge'
599
- */
600
- private formatAndroidComponentTokenName(token: RegisteredComponentToken): string {
601
- // Same as iOS - extract property name from full token name
602
- const parts = token.name.split('.');
603
- const propertyParts = parts.slice(1);
604
- if (propertyParts.length === 0) {
605
- return parts[0];
606
- }
607
- return propertyParts.map((part, index) =>
608
- index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)
609
- ).join('');
610
- }
611
-
612
- /**
613
- * Format component token value for Android Kotlin
614
- * Returns SpacingTokens.space150 for primitive references, or raw value
615
- */
616
- private formatAndroidComponentTokenValue(token: RegisteredComponentToken): string {
617
- if (token.primitiveReference) {
618
- // Convert primitive reference to Kotlin constant reference
619
- // e.g., 'space150' -> 'SpacingTokens.space150'
620
- const familyClass = this.getFamilyClassName(token.family);
621
- return `${familyClass}.${token.primitiveReference}`;
622
- }
623
- // Dimensional families need .dp suffix to match primitive token output (Task 1.4).
624
- // 'sizing' is dimensional (component width/height) and belongs here: without it, a
625
- // value-path sizing token emits a bare Int, which fails to compile against consumers
626
- // that type the member as Dp (e.g. Avatar.android.kt's
627
- // `val iconSizeXs: Dp = GeneratedAvatarTokens.iconSizeXs`).
628
- const dimensionalFamilies = ['spacing', 'sizing', 'radius', 'tapArea', 'fontSize', 'borderWidth'];
629
- if (dimensionalFamilies.includes(token.family)) {
630
- return `${token.value}.dp`;
631
- }
632
- return String(token.value);
633
- }
634
-
635
- /**
636
- * Get the class name for a token family
637
- * Used for generating primitive token references
638
- */
639
- private getFamilyClassName(family: string): string {
640
- const familyClassMap: Record<string, string> = {
641
- 'spacing': 'SpacingTokens',
642
- 'sizing': 'SizingTokens',
643
- 'radius': 'RadiusTokens',
644
- 'fontSize': 'FontSizeTokens',
645
- 'color': 'ColorTokens',
646
- 'tapArea': 'TapAreaTokens',
647
- 'borderWidth': 'BorderWidthTokens',
648
- 'lineHeight': 'LineHeightTokens',
649
- 'fontWeight': 'FontWeightTokens',
650
- 'fontFamily': 'FontFamilyTokens'
651
- };
652
- return familyClassMap[family] || `${family.charAt(0).toUpperCase() + family.slice(1)}Tokens`;
653
- }
654
-
655
- /**
656
- * Validate Web component token CSS syntax
657
- */
658
- private validateWebComponentTokenSyntax(content: string): { valid: boolean; errors?: string[] } {
659
- const errors: string[] = [];
660
-
661
- // Check for :root selector
662
- if (!content.includes(':root {')) {
663
- errors.push('Missing :root selector');
664
- }
665
-
666
- // Check for balanced braces
667
- const openBraces = (content.match(/{/g) || []).length;
668
- const closeBraces = (content.match(/}/g) || []).length;
669
- if (openBraces !== closeBraces) {
670
- errors.push('Unbalanced braces in CSS');
671
- }
672
-
673
- return {
674
- valid: errors.length === 0,
675
- errors: errors.length > 0 ? errors : undefined
676
- };
677
- }
678
-
679
- /**
680
- * Validate iOS component token Swift syntax
681
- */
682
- private validateiOSComponentTokenSyntax(content: string): { valid: boolean; errors?: string[] } {
683
- const errors: string[] = [];
684
-
685
- // Check for UIKit import
686
- if (!content.includes('import UIKit')) {
687
- errors.push('Missing UIKit import');
688
- }
689
-
690
- // Check for balanced braces
691
- const openBraces = (content.match(/{/g) || []).length;
692
- const closeBraces = (content.match(/}/g) || []).length;
693
- if (openBraces !== closeBraces) {
694
- errors.push('Unbalanced braces in Swift');
695
- }
696
-
697
- return {
698
- valid: errors.length === 0,
699
- errors: errors.length > 0 ? errors : undefined
700
- };
701
- }
702
-
703
- /**
704
- * Validate Android component token Kotlin syntax
705
- */
706
- private validateAndroidComponentTokenSyntax(content: string): { valid: boolean; errors?: string[] } {
707
- const errors: string[] = [];
708
-
709
- // Check for package declaration
710
- if (!content.includes('package com.designerpunk.tokens')) {
711
- errors.push('Missing package declaration');
712
- }
713
-
714
- // Check for balanced braces
715
- const openBraces = (content.match(/{/g) || []).length;
716
- const closeBraces = (content.match(/}/g) || []).length;
717
- if (openBraces !== closeBraces) {
718
- errors.push('Unbalanced braces in Kotlin');
719
- }
720
-
721
- return {
722
- valid: errors.length === 0,
723
- errors: errors.length > 0 ? errors : undefined
724
- };
725
- }
726
-
727
- /**
728
- * Validate Web blend utility TypeScript syntax
729
- * Basic validation to ensure generated code has expected structure
730
- */
731
- private validateWebBlendUtilitySyntax(content: string): boolean {
732
- // Check for required function exports
733
- const requiredFunctions = ['darkerBlend', 'lighterBlend', 'saturate', 'desaturate'];
734
- const hasAllFunctions = requiredFunctions.every(fn =>
735
- content.includes(`export function ${fn}`)
736
- );
737
-
738
- // Check for required type definitions
739
- const hasRgbInterface = content.includes('interface RGB');
740
- const hasHslInterface = content.includes('interface HSL');
741
-
742
- // Check for required utility functions
743
- const hasHexToRgb = content.includes('function hexToRgb');
744
- const hasRgbToHex = content.includes('function rgbToHex');
745
-
746
- return hasAllFunctions && hasRgbInterface && hasHslInterface && hasHexToRgb && hasRgbToHex;
747
- }
748
-
749
- /**
750
- * Validate iOS blend utility Swift syntax
751
- * Basic validation to ensure generated code has expected structure
752
- */
753
- private validateiOSBlendUtilitySyntax(content: string): boolean {
754
- // Check for required imports
755
- const hasSwiftUIImport = content.includes('import SwiftUI');
756
-
757
- // Check for Color extension
758
- const hasColorExtension = content.includes('extension Color');
759
-
760
- // Check for required methods
761
- const requiredMethods = ['darkerBlend', 'lighterBlend', 'saturate', 'desaturate'];
762
- const hasAllMethods = requiredMethods.every(method =>
763
- content.includes(`func ${method}`)
764
- );
765
-
766
- // Check for required structs
767
- const hasRgbStruct = content.includes('struct RGB');
768
- const hasHslStruct = content.includes('struct HSL');
769
-
770
- return hasSwiftUIImport && hasColorExtension && hasAllMethods && hasRgbStruct && hasHslStruct;
771
- }
772
-
773
- /**
774
- * Validate Android blend utility Kotlin syntax
775
- * Basic validation to ensure generated code has expected structure
776
- */
777
- private validateAndroidBlendUtilitySyntax(content: string): boolean {
778
- // Check for required package and imports
779
- const hasPackage = content.includes('package com.designerpunk.tokens');
780
- const hasColorImport = content.includes('import androidx.compose.ui.graphics.Color');
781
-
782
- // Check for required extension functions
783
- const requiredFunctions = ['darkerBlend', 'lighterBlend', 'saturate', 'desaturate'];
784
- const hasAllFunctions = requiredFunctions.every(fn =>
785
- content.includes(`fun Color.${fn}`)
786
- );
787
-
788
- // Check for required data classes
789
- const hasRgbClass = content.includes('data class RGB');
790
- const hasHslClass = content.includes('data class HSL');
791
-
792
- return hasPackage && hasColorImport && hasAllFunctions && hasRgbClass && hasHslClass;
793
- }
794
-
795
- /**
796
- * Generate semantic token section for specified platform
797
- * Handles both single-reference and multi-reference tokens
798
- *
799
- * @param semantics - Array of semantic tokens to generate
800
- * @param platform - Target platform ('web', 'ios', or 'android')
801
- * @returns Array of formatted token strings
802
- */
803
- private generateSemanticSection(
804
- semantics: Array<Omit<SemanticToken, 'primitiveTokens'>>,
805
- platform: 'web' | 'ios' | 'android',
806
- darkSemantics?: Array<Omit<SemanticToken, 'primitiveTokens'>>,
807
- excludeTokenNames?: Set<string>
808
- ): string[] {
809
- const lines: string[] = [];
810
-
811
- // Select appropriate generator based on platform
812
- let generator: WebFormatGenerator | iOSFormatGenerator | AndroidFormatGenerator;
813
-
814
- switch (platform) {
815
- case 'web':
816
- generator = this.webGenerator;
817
- break;
818
- case 'ios':
819
- generator = this.iosGenerator;
820
- break;
821
- case 'android':
822
- generator = this.androidGenerator;
823
- break;
824
- default:
825
- return lines;
826
- }
827
-
828
- // Build dark token lookup for mode-aware output
829
- const darkMap = new Map<string, Omit<SemanticToken, 'primitiveTokens'>>();
830
- if (darkSemantics) {
831
- for (const dt of darkSemantics) {
832
- darkMap.set(dt.name, dt);
833
- }
834
- }
835
-
836
- // Iterate over semantic tokens
837
- for (const semantic of semantics) {
838
- // Skip tokens without primitiveReferences (e.g., semantic-only layering tokens)
839
- if (!semantic.primitiveReferences) {
840
- continue;
841
- }
842
-
843
- // Skip tokens that have moved to theme types (Spec 094 — prevents dual-pattern consumption)
844
- if (excludeTokenNames && excludeTokenNames.has(semantic.name)) {
845
- continue;
846
- }
847
-
848
- // Special handling for ICON category tokens with fontSize/multiplier (icon sizes)
849
- // Icon property tokens (like strokeWidth) are handled as single-reference tokens below
850
- if (semantic.category === 'icon' && semantic.primitiveReferences.fontSize && semantic.primitiveReferences.multiplier) {
851
- const iconLine = this.generateIconSizeToken(semantic, platform, generator);
852
- if (iconLine) {
853
- lines.push(iconLine);
854
- }
855
- continue;
856
- }
857
-
858
- // Detect single-reference vs multi-reference tokens
859
- // Single-reference tokens have:
860
- // - Only one key in primitiveReferences, OR
861
- // - A 'value' or 'default' key (standard single-reference pattern), OR
862
- // - 'color' and 'opacity' keys (opacity composition pattern)
863
- const refs = Object.keys(semantic.primitiveReferences);
864
- const isOpacityComposition = refs.includes('color') && refs.includes('opacity') && refs.length === 2;
865
- const isSingleReference = refs.length === 1 ||
866
- refs.includes('value') ||
867
- refs.includes('default') ||
868
- isOpacityComposition;
869
-
870
- // Call appropriate formatter method for each token based on reference type
871
- let lightLine: string;
872
- if (isSingleReference) {
873
- lightLine = generator.formatSingleReferenceToken(semantic as SemanticToken);
874
- } else {
875
- lightLine = generator.formatMultiReferenceToken(semantic as SemanticToken);
876
- }
877
-
878
- // Mode-aware output: wrap in light-dark() when dark value differs (web only)
879
- const darkToken = darkMap.get(semantic.name);
880
- if (darkToken) {
881
- let darkLine: string;
882
- if (isSingleReference) {
883
- darkLine = generator.formatSingleReferenceToken(darkToken as SemanticToken);
884
- } else {
885
- darkLine = generator.formatMultiReferenceToken(darkToken as SemanticToken);
886
- }
887
-
888
- const lightParts = this.extractFormattedParts(lightLine);
889
- const darkParts = this.extractFormattedParts(darkLine);
890
-
891
- if (lightParts && darkParts && lightParts.value !== darkParts.value) {
892
- if (platform === 'web') {
893
- lines.push(` ${lightParts.name}: light-dark(${lightParts.value}, ${darkParts.value});`);
894
- continue;
895
- }
896
- if (platform === 'ios') {
897
- lines.push(
898
- ` public static let ${lightParts.name}: UIColor = UIColor { $0.userInterfaceStyle == .dark ? ${darkParts.value} : ${lightParts.value} }`
899
- );
900
- continue;
901
- }
902
- if (platform === 'android') {
903
- lines.push(
904
- ` val ${lightParts.name}_light = ${lightParts.value}`
905
- );
906
- lines.push(
907
- ` val ${lightParts.name}_dark = ${darkParts.value}`
908
- );
909
- continue;
910
- }
911
- }
912
- }
913
-
914
- lines.push(lightLine);
915
- }
916
-
917
- return lines;
918
- }
919
-
920
- /**
921
- * Generate WCAG theme override block from 4-context resolved token sets (Spec 080 Phase 2).
922
- * Compares base vs wcag tokens — emits overrides only where values differ.
923
- */
924
- private generateWcagOverrideBlock(
925
- lightBase: Array<Omit<SemanticToken, 'primitiveTokens'>>,
926
- darkBase: Array<Omit<SemanticToken, 'primitiveTokens'>>,
927
- lightWcag: Array<Omit<SemanticToken, 'primitiveTokens'>>,
928
- darkWcag: Array<Omit<SemanticToken, 'primitiveTokens'>>,
929
- platform: 'web' | 'ios' | 'android',
930
- wcagKeys?: Set<string>
931
- ): string[] {
932
- const lines: string[] = [];
933
-
934
- // Build lookup maps
935
- const lbMap = new Map(lightBase.map(t => [t.name, t]));
936
- const dbMap = new Map(darkBase.map(t => [t.name, t]));
937
- const lwMap = new Map(lightWcag.map(t => [t.name, t]));
938
- const dwMap = new Map(darkWcag.map(t => [t.name, t]));
939
-
940
- // Find color tokens where wcag override changes the primitive reference (Level 2 only).
941
- // Tokens where only the primitive's own wcag slot differs are handled by the primitive layer.
942
- const overrides: Array<{ token: Omit<SemanticToken, 'primitiveTokens'>; lwVal: string; dwVal: string; lbVal: string; dbVal: string }> = [];
943
- for (const [name, lbToken] of lbMap) {
944
- if (lbToken.category !== SemanticCategory.COLOR) continue;
945
- if (wcagKeys && !wcagKeys.has(name)) continue;
946
- const lwToken = lwMap.get(name);
947
- const dbToken = dbMap.get(name);
948
- const dwToken = dwMap.get(name);
949
- if (!lwToken || !dbToken || !dwToken) continue;
950
-
951
- const getVal = (t: Omit<SemanticToken, 'primitiveTokens'>) =>
952
- t.primitiveReferences?.value ?? t.primitiveReferences?.default ?? Object.values(t.primitiveReferences || {})[0] ?? '';
953
-
954
- overrides.push({ token: lbToken, lwVal: getVal(lwToken), dwVal: getVal(dwToken), lbVal: getVal(lbToken), dbVal: getVal(dbToken) });
955
- }
956
-
957
- if (overrides.length === 0) return lines;
958
-
959
- // Helper: rgba string → iOS UIColor
960
- const toIOS = (rgba: string) => {
961
- const m = rgba.match(/rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/);
962
- if (!m) return rgba;
963
- return `UIColor(red: ${(+m[1]/255).toFixed(2)}, green: ${(+m[2]/255).toFixed(2)}, blue: ${(+m[3]/255).toFixed(2)}, alpha: ${(+m[4]).toFixed(2)})`;
964
- };
965
-
966
- // Helper: rgba string → Android Color.argb
967
- const toAndroid = (rgba: string) => {
968
- const m = rgba.match(/rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/);
969
- if (!m) return rgba;
970
- return `Color.argb(${Math.round(+m[4] * 255)}, ${m[1]}, ${m[2]}, ${m[3]})`;
971
- };
972
-
973
- switch (platform) {
974
- case 'web': {
975
- lines.push('');
976
- lines.push('/* WCAG Theme: Semantic token overrides from theme files (Spec 080 Phase 2) */');
977
- lines.push(':root[data-theme="wcag"] {');
978
- for (const o of overrides) {
979
- const name = this.webGenerator.getTokenName(o.token.name, o.token.category);
980
- const cssName = name.startsWith('--') ? name : `--${name}`;
981
- const value = o.lwVal !== o.dwVal
982
- ? `light-dark(${o.lwVal}, ${o.dwVal})`
983
- : o.lwVal;
984
- lines.push(` ${cssName}: ${value};`);
985
- }
986
- lines.push('}');
987
- break;
988
- }
989
- case 'ios': {
990
- lines.push('');
991
- lines.push(' // MARK: - WCAG Theme Semantic Overrides (Spec 080 Phase 2)');
992
- for (const o of overrides) {
993
- const name = this.iosGenerator.getTokenName(o.token.name, o.token.category);
994
- if (o.lwVal !== o.dwVal) {
995
- lines.push(` public static let ${name}_wcag: UIColor = UIColor { $0.userInterfaceStyle == .dark ? ${toIOS(o.dwVal)} : ${toIOS(o.lwVal)} }`);
996
- } else {
997
- lines.push(` public static let ${name}_wcag: UIColor = ${toIOS(o.lwVal)}`);
998
- }
999
- }
1000
- break;
1001
- }
1002
- case 'android': {
1003
- lines.push('');
1004
- lines.push(' // WCAG Theme Semantic Overrides (Spec 080 Phase 2)');
1005
- for (const o of overrides) {
1006
- const name = this.androidGenerator.getTokenName(o.token.name, o.token.category);
1007
- if (o.lwVal !== o.dwVal) {
1008
- lines.push(` val ${name}_wcag_light = ${toAndroid(o.lwVal)}`);
1009
- lines.push(` val ${name}_wcag_dark = ${toAndroid(o.dwVal)}`);
1010
- } else {
1011
- lines.push(` val ${name}_wcag = ${toAndroid(o.lwVal)}`);
1012
- }
1013
- }
1014
- break;
1015
- }
1016
- }
1017
-
1018
- return lines;
1019
- }
1020
-
1021
- /**
1022
- * Generate theme override blocks for any registered theme (Spec 094).
1023
- * Generalizes the WCAG-specific block to work with any ThemeOverrideSet.
1024
- *
1025
- * Web: produces `[data-theme="name"] { ... }` blocks after `:root` footer.
1026
- * iOS/Android: stub — full implementation in subtasks 2.3/2.4.
1027
- */
1028
- generateThemeOverrideBlocks(
1029
- platform: 'web' | 'ios' | 'android',
1030
- baseLight: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1031
- baseDark: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1032
- themeOverrides: ThemeOverrideSet[],
1033
- name: string = 'DesignerPunk',
1034
- abbreviation: string = 'DP'
1035
- ): string[] {
1036
- const lines: string[] = [];
1037
- switch (platform) {
1038
- case 'web':
1039
- for (const theme of themeOverrides) {
1040
- lines.push(...this.generateWebThemeBlock(baseLight, baseDark, theme));
1041
- }
1042
- break;
1043
- case 'ios':
1044
- lines.push(...this.generateSwiftThemeTypes(baseLight, baseDark, themeOverrides, name, abbreviation));
1045
- break;
1046
- case 'android':
1047
- lines.push(...this.generateKotlinThemeTypes(baseLight, baseDark, themeOverrides, name, abbreviation));
1048
- break;
1049
- }
1050
- return lines;
1051
- }
1052
-
1053
- /**
1054
- * Generate a single web CSS theme override block.
1055
- * Produces `:root[data-theme="name"] { ... }` with overridden tokens.
1056
- * Dark-only themes include `color-scheme: dark` and use static values (no light-dark()).
1057
- */
1058
- private generateWebThemeBlock(
1059
- baseLight: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1060
- baseDark: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1061
- theme: ThemeOverrideSet
1062
- ): string[] {
1063
- const lines: string[] = [];
1064
-
1065
- const lbMap = new Map(baseLight.map(t => [t.name, t]));
1066
- const dbMap = new Map(baseDark.map(t => [t.name, t]));
1067
- const ltMap = new Map(theme.lightTokens.map(t => [t.name, t]));
1068
- const dtMap = new Map(theme.darkTokens.map(t => [t.name, t]));
1069
-
1070
- const overrides: Array<{ token: Omit<SemanticToken, 'primitiveTokens'>; lightVal: string; darkVal: string }> = [];
1071
-
1072
- for (const [name] of lbMap) {
1073
- const lbToken = lbMap.get(name)!;
1074
- if (lbToken.category !== SemanticCategory.COLOR) continue;
1075
- if (!theme.overrideKeys.has(name)) continue;
1076
-
1077
- const ltToken = ltMap.get(name);
1078
- const dtToken = dtMap.get(name);
1079
- if (!ltToken || !dtToken) continue;
1080
-
1081
- const getVal = (t: Omit<SemanticToken, 'primitiveTokens'>) =>
1082
- t.primitiveReferences?.value ?? t.primitiveReferences?.default ?? Object.values(t.primitiveReferences || {})[0] ?? '';
1083
-
1084
- overrides.push({ token: lbToken, lightVal: getVal(ltToken), darkVal: getVal(dtToken) });
1085
- }
1086
-
1087
- if (overrides.length === 0) return lines;
1088
-
1089
- lines.push('');
1090
- lines.push(`/* ${theme.name.charAt(0).toUpperCase() + theme.name.slice(1)} Theme: Semantic token overrides (Spec 094) */`);
1091
- lines.push(`:root[data-theme="${theme.name}"] {`);
1092
-
1093
- if (theme.mode === 'dark') {
1094
- lines.push(' color-scheme: dark;');
1095
- }
1096
-
1097
- for (const o of overrides) {
1098
- const name = this.webGenerator.getTokenName(o.token.name, o.token.category);
1099
- const cssName = name.startsWith('--') ? name : `--${name}`;
1100
-
1101
- if (theme.mode === 'dark') {
1102
- // Dark-only: static value, no light-dark()
1103
- lines.push(` ${cssName}: ${o.darkVal};`);
1104
- } else if (theme.mode === 'light') {
1105
- // Light-only: static value
1106
- lines.push(` ${cssName}: ${o.lightVal};`);
1107
- } else {
1108
- // Both modes: light-dark() wrapping when values differ
1109
- const value = o.lightVal !== o.darkVal
1110
- ? `light-dark(${o.lightVal}, ${o.darkVal})`
1111
- : o.lightVal;
1112
- lines.push(` ${cssName}: ${value};`);
1113
- }
1114
- }
1115
-
1116
- lines.push('}');
1117
- return lines;
1118
- }
1119
-
1120
- /**
1121
- * Generate Swift theme types: protocol, concrete structs, and EnvironmentKey.
1122
- * Uses SwiftUI Color type directly (not UIColor) for clean consumption.
1123
- *
1124
- * Output structure:
1125
- * - `{Name}Theme` protocol with theme-varying color properties
1126
- * - Concrete struct per theme context (light+dark for 'both', single for 'dark'/'light')
1127
- * - `{Abbreviation}ThemeKey: EnvironmentKey` with base light default
1128
- * - `EnvironmentValues` extension for `.{abbreviation}Theme` access
1129
- */
1130
- private generateSwiftThemeTypes(
1131
- baseLight: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1132
- baseDark: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1133
- themeOverrides: ThemeOverrideSet[],
1134
- name: string,
1135
- abbreviation: string
1136
- ): string[] {
1137
- // Collect all theme-varying token names
1138
- const varyingNames = new Set<string>();
1139
- for (const theme of themeOverrides) {
1140
- for (const key of theme.overrideKeys) {
1141
- varyingNames.add(key);
1142
- }
1143
- }
1144
- // Also include tokens that differ between base light and dark
1145
- const baseDarkMap = new Map(baseDark.map(t => [t.name, t]));
1146
- for (const lt of baseLight) {
1147
- if (lt.category !== SemanticCategory.COLOR) continue;
1148
- const dt = baseDarkMap.get(lt.name);
1149
- if (!dt) continue;
1150
- const lv = this.getResolvedValue(lt);
1151
- const dv = this.getResolvedValue(dt);
1152
- if (lv !== dv) varyingNames.add(lt.name);
1153
- }
1154
-
1155
- if (varyingNames.size === 0) return [];
1156
-
1157
- const lines: string[] = [];
1158
- const lowerAbbr = abbreviation.toLowerCase();
1159
-
1160
- // Sort for deterministic output
1161
- const sortedNames = Array.from(varyingNames).sort();
1162
-
1163
- // --- Protocol ---
1164
- lines.push('');
1165
- lines.push(`// MARK: - ${name} Theme System (Spec 094)`);
1166
- lines.push('');
1167
- lines.push('import SwiftUI');
1168
- lines.push('');
1169
- lines.push(`public protocol ${name}Theme {`);
1170
- for (const tokenName of sortedNames) {
1171
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1172
- lines.push(` var ${propName}: Color { get }`);
1173
- }
1174
- lines.push('}');
1175
-
1176
- // --- Base light struct ---
1177
- lines.push('');
1178
- lines.push(`public struct ${name}BaseLight: ${name}Theme {`);
1179
- for (const tokenName of sortedNames) {
1180
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1181
- const token = baseLight.find(t => t.name === tokenName);
1182
- const value = token ? this.rgbaToSwiftUIColor(this.getResolvedValue(token)) : 'Color.clear';
1183
- lines.push(` public let ${propName}: Color = ${value}`);
1184
- }
1185
- lines.push('}');
1186
-
1187
- // --- Base dark struct ---
1188
- lines.push('');
1189
- lines.push(`public struct ${name}BaseDark: ${name}Theme {`);
1190
- for (const tokenName of sortedNames) {
1191
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1192
- const dt = baseDark.find(t => t.name === tokenName);
1193
- const value = dt ? this.rgbaToSwiftUIColor(this.getResolvedValue(dt)) : 'Color.clear';
1194
- lines.push(` public let ${propName}: Color = ${value}`);
1195
- }
1196
- lines.push('}');
1197
-
1198
- // --- Theme override structs ---
1199
- for (const theme of themeOverrides) {
1200
- const themeName = theme.name.charAt(0).toUpperCase() + theme.name.slice(1);
1201
- if (theme.mode === 'both') {
1202
- // Light variant
1203
- lines.push('');
1204
- lines.push(`public struct ${name}${themeName}Light: ${name}Theme {`);
1205
- for (const tokenName of sortedNames) {
1206
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1207
- const token = theme.lightTokens.find(t => t.name === tokenName)
1208
- || baseLight.find(t => t.name === tokenName);
1209
- const value = token ? this.rgbaToSwiftUIColor(this.getResolvedValue(token)) : 'Color.clear';
1210
- lines.push(` public let ${propName}: Color = ${value}`);
1211
- }
1212
- lines.push('}');
1213
- // Dark variant
1214
- lines.push('');
1215
- lines.push(`public struct ${name}${themeName}Dark: ${name}Theme {`);
1216
- for (const tokenName of sortedNames) {
1217
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1218
- const token = theme.darkTokens.find(t => t.name === tokenName)
1219
- || baseDark.find(t => t.name === tokenName);
1220
- const value = token ? this.rgbaToSwiftUIColor(this.getResolvedValue(token)) : 'Color.clear';
1221
- lines.push(` public let ${propName}: Color = ${value}`);
1222
- }
1223
- lines.push('}');
1224
- } else {
1225
- // Single-mode (dark or light)
1226
- const tokens = theme.mode === 'dark' ? theme.darkTokens : theme.lightTokens;
1227
- const fallback = theme.mode === 'dark' ? baseDark : baseLight;
1228
- lines.push('');
1229
- lines.push(`public struct ${name}${themeName}: ${name}Theme {`);
1230
- for (const tokenName of sortedNames) {
1231
- const propName = this.iosGenerator.getTokenName(tokenName, SemanticCategory.COLOR);
1232
- const token = tokens.find(t => t.name === tokenName)
1233
- || fallback.find(t => t.name === tokenName);
1234
- const value = token ? this.rgbaToSwiftUIColor(this.getResolvedValue(token)) : 'Color.clear';
1235
- lines.push(` public let ${propName}: Color = ${value}`);
1236
- }
1237
- lines.push('}');
1238
- }
1239
- }
1240
-
1241
- // --- EnvironmentKey ---
1242
- lines.push('');
1243
- lines.push(`public struct ${abbreviation}ThemeKey: EnvironmentKey {`);
1244
- lines.push(` public static let defaultValue: any ${name}Theme = ${name}BaseLight()`);
1245
- lines.push('}');
1246
- lines.push('');
1247
- lines.push('public extension EnvironmentValues {');
1248
- lines.push(` var ${lowerAbbr}Theme: any ${name}Theme {`);
1249
- lines.push(` get { self[${abbreviation}ThemeKey.self] }`);
1250
- lines.push(` set { self[${abbreviation}ThemeKey.self] = newValue }`);
1251
- lines.push(' }');
1252
- lines.push('}');
1253
-
1254
- return lines;
1255
- }
1256
-
1257
- /** Extract the resolved value string from a semantic token's primitiveReferences. */
1258
- private getResolvedValue(token: Omit<SemanticToken, 'primitiveTokens'>): string {
1259
- return token.primitiveReferences?.value
1260
- ?? token.primitiveReferences?.default
1261
- ?? Object.values(token.primitiveReferences || {})[0]
1262
- ?? '';
1263
- }
1264
-
1265
- /** Convert an rgba() string to SwiftUI Color initializer. */
1266
- private rgbaToSwiftUIColor(rgba: string): string {
1267
- const m = rgba.match(/rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/);
1268
- if (!m) return `Color.clear /* unresolved: ${rgba} */`;
1269
- const r = (+m[1] / 255).toFixed(2);
1270
- const g = (+m[2] / 255).toFixed(2);
1271
- const b = (+m[3] / 255).toFixed(2);
1272
- const a = (+m[4]).toFixed(2);
1273
- return `Color(red: ${r}, green: ${g}, blue: ${b}, opacity: ${a})`;
1274
- }
1275
-
1276
- /**
1277
- * Generate Kotlin theme types: data class, named instances, and CompositionLocal.
1278
- * Uses Compose `Color` directly for clean consumption.
1279
- *
1280
- * Output structure:
1281
- * - `{Name}Theme` data class with theme-varying color properties
1282
- * - `{Name}Themes` object with named instances per theme context
1283
- * - `Local{Abbreviation}Theme` CompositionLocal with base light default
1284
- */
1285
- private generateKotlinThemeTypes(
1286
- baseLight: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1287
- baseDark: Array<Omit<SemanticToken, 'primitiveTokens'>>,
1288
- themeOverrides: ThemeOverrideSet[],
1289
- name: string,
1290
- abbreviation: string
1291
- ): string[] {
1292
- // Collect theme-varying token names (same logic as Swift)
1293
- const varyingNames = new Set<string>();
1294
- for (const theme of themeOverrides) {
1295
- for (const key of theme.overrideKeys) {
1296
- varyingNames.add(key);
1297
- }
1298
- }
1299
- const baseDarkMap = new Map(baseDark.map(t => [t.name, t]));
1300
- for (const lt of baseLight) {
1301
- if (lt.category !== SemanticCategory.COLOR) continue;
1302
- const dt = baseDarkMap.get(lt.name);
1303
- if (!dt) continue;
1304
- if (this.getResolvedValue(lt) !== this.getResolvedValue(dt)) varyingNames.add(lt.name);
1305
- }
1306
-
1307
- if (varyingNames.size === 0) return [];
1308
-
1309
- const lines: string[] = [];
1310
- const sortedNames = Array.from(varyingNames).sort();
1311
-
1312
- // --- Imports ---
1313
- lines.push('');
1314
- lines.push(`// ${name} Theme System (Spec 094)`);
1315
- lines.push('');
1316
- lines.push('import androidx.compose.runtime.compositionLocalOf');
1317
- lines.push('import androidx.compose.ui.graphics.Color');
1318
-
1319
- // --- Data class ---
1320
- lines.push('');
1321
- lines.push(`data class ${name}Theme(`);
1322
- for (let i = 0; i < sortedNames.length; i++) {
1323
- const propName = this.androidGenerator.getTokenName(sortedNames[i], SemanticCategory.COLOR);
1324
- const comma = i < sortedNames.length - 1 ? ',' : '';
1325
- lines.push(` val ${propName}: Color${comma}`);
1326
- }
1327
- lines.push(')');
1328
-
1329
- // --- Themes object with instances ---
1330
- lines.push('');
1331
- lines.push(`object ${name}Themes {`);
1332
-
1333
- // Base light
1334
- lines.push(` val BaseLight = ${name}Theme(`);
1335
- for (let i = 0; i < sortedNames.length; i++) {
1336
- const token = baseLight.find(t => t.name === sortedNames[i]);
1337
- const value = token ? this.rgbaToComposeColor(this.getResolvedValue(token)) : 'Color.Unspecified';
1338
- const comma = i < sortedNames.length - 1 ? ',' : '';
1339
- lines.push(` ${this.androidGenerator.getTokenName(sortedNames[i], SemanticCategory.COLOR)} = ${value}${comma}`);
1340
- }
1341
- lines.push(' )');
1342
-
1343
- // Base dark
1344
- lines.push(` val BaseDark = ${name}Theme(`);
1345
- for (let i = 0; i < sortedNames.length; i++) {
1346
- const dt = baseDark.find(t => t.name === sortedNames[i]);
1347
- const value = dt ? this.rgbaToComposeColor(this.getResolvedValue(dt)) : 'Color.Unspecified';
1348
- const comma = i < sortedNames.length - 1 ? ',' : '';
1349
- lines.push(` ${this.androidGenerator.getTokenName(sortedNames[i], SemanticCategory.COLOR)} = ${value}${comma}`);
1350
- }
1351
- lines.push(' )');
1352
-
1353
- // Theme override instances
1354
- for (const theme of themeOverrides) {
1355
- const themeName = theme.name.charAt(0).toUpperCase() + theme.name.slice(1);
1356
- if (theme.mode === 'both') {
1357
- for (const variant of ['Light', 'Dark'] as const) {
1358
- const tokens = variant === 'Light' ? theme.lightTokens : theme.darkTokens;
1359
- const fallback = variant === 'Light' ? baseLight : baseDark;
1360
- lines.push(` val ${themeName}${variant} = ${name}Theme(`);
1361
- for (let i = 0; i < sortedNames.length; i++) {
1362
- const token = tokens.find(t => t.name === sortedNames[i])
1363
- || fallback.find(t => t.name === sortedNames[i]);
1364
- const value = token ? this.rgbaToComposeColor(this.getResolvedValue(token)) : 'Color.Unspecified';
1365
- const comma = i < sortedNames.length - 1 ? ',' : '';
1366
- lines.push(` ${this.androidGenerator.getTokenName(sortedNames[i], SemanticCategory.COLOR)} = ${value}${comma}`);
1367
- }
1368
- lines.push(' )');
1369
- }
1370
- } else {
1371
- const tokens = theme.mode === 'dark' ? theme.darkTokens : theme.lightTokens;
1372
- const fallback = theme.mode === 'dark' ? baseDark : baseLight;
1373
- lines.push(` val ${themeName} = ${name}Theme(`);
1374
- for (let i = 0; i < sortedNames.length; i++) {
1375
- const token = tokens.find(t => t.name === sortedNames[i])
1376
- || fallback.find(t => t.name === sortedNames[i]);
1377
- const value = token ? this.rgbaToComposeColor(this.getResolvedValue(token)) : 'Color.Unspecified';
1378
- const comma = i < sortedNames.length - 1 ? ',' : '';
1379
- lines.push(` ${this.androidGenerator.getTokenName(sortedNames[i], SemanticCategory.COLOR)} = ${value}${comma}`);
1380
- }
1381
- lines.push(' )');
1382
- }
1383
- }
1384
-
1385
- lines.push('}');
1386
-
1387
- // --- CompositionLocal ---
1388
- lines.push('');
1389
- lines.push(`val Local${abbreviation}Theme = compositionLocalOf { ${name}Themes.BaseLight }`);
1390
-
1391
- return lines;
1392
- }
1393
-
1394
- /** Convert an rgba() string to Compose Color initializer. */
1395
- private rgbaToComposeColor(rgba: string): string {
1396
- const m = rgba.match(/rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/);
1397
- if (!m) return `Color.Unspecified /* unresolved: ${rgba} */`;
1398
- return `Color(${m[1]}, ${m[2]}, ${m[3]}, ${Math.round(+m[4] * 255)})`;
1399
- }
1400
-
1401
- /**
1402
- * Generate icon size token with calculated value.
1403
- * Resolves fontSize and lineHeight primitives and applies formula: fontSize × lineHeight
1404
- *
1405
- * @param semantic - Icon size semantic token
1406
- * @param platform - Target platform
1407
- * @param generator - Platform-specific generator
1408
- * @returns Formatted token string with calculated value
1409
- */
1410
- private generateIconSizeToken(
1411
- semantic: Omit<SemanticToken, 'primitiveTokens'>,
1412
- platform: 'web' | 'ios' | 'android',
1413
- generator: WebFormatGenerator | iOSFormatGenerator | AndroidFormatGenerator
1414
- ): string | null {
1415
- // Get fontSize and multiplier primitive references
1416
- const fontSizeRef = semantic.primitiveReferences.fontSize;
1417
- const multiplierRef = semantic.primitiveReferences.multiplier;
1418
-
1419
- if (!fontSizeRef || !multiplierRef) {
1420
- console.warn(`Icon token ${semantic.name} missing fontSize or multiplier reference`);
1421
- return null;
1422
- }
1423
-
1424
- // Import primitive tokens and parsing utilities
1425
- const { fontSizeTokens } = require('../tokens/FontSizeTokens');
1426
- const { lineHeightTokens } = require('../tokens/LineHeightTokens');
1427
- const { parseMultiplier, CUSTOM_MULTIPLIER_PREFIX } = require('../tokens/semantic/IconTokens');
1428
-
1429
- // Resolve fontSize primitive token
1430
- const fontSizeToken = fontSizeTokens[fontSizeRef];
1431
-
1432
- if (!fontSizeToken) {
1433
- console.warn(`Icon token ${semantic.name} references invalid fontSize: ${fontSizeRef}`);
1434
- return null;
1435
- }
1436
-
1437
- // Resolve multiplier - can be a lineHeight token reference or 'custom:X.XXX'
1438
- let multiplierValue: number;
1439
- try {
1440
- multiplierValue = parseMultiplier(multiplierRef);
1441
- } catch (error) {
1442
- console.warn(`Icon token ${semantic.name} has invalid multiplier: ${multiplierRef}`);
1443
- return null;
1444
- }
1445
-
1446
- // Calculate icon size: fontSize × multiplier (rounded)
1447
- const calculatedSize = Math.round(fontSizeToken.baseValue * multiplierValue);
1448
-
1449
- // Generate platform-specific token with calculated value, description, and context
1450
- return generator.formatIconSizeToken(
1451
- semantic.name,
1452
- calculatedSize,
1453
- semantic.category,
1454
- semantic.description,
1455
- semantic.context
1456
- );
1457
- }
1458
-
1459
- /**
1460
- * Generate motion token section for specified platform
1461
- * Handles primitive motion tokens (duration, easing, scale) and semantic motion tokens
1462
- *
1463
- * @param platform - Target platform ('web', 'ios', or 'android')
1464
- * @returns Array of formatted token strings
1465
- */
1466
- private generateMotionSection(platform: 'web' | 'ios' | 'android'): string[] {
1467
- const lines: string[] = [];
1468
-
1469
- // Import platform builders for motion token generation
1470
- const { WebBuilder } = require('../build/platforms/WebBuilder');
1471
- const { iOSBuilder } = require('../build/platforms/iOSBuilder');
1472
- const { AndroidBuilder } = require('../build/platforms/AndroidBuilder');
1473
-
1474
- // Select appropriate builder based on platform
1475
- let builder: any;
1476
-
1477
- switch (platform) {
1478
- case 'web':
1479
- builder = new WebBuilder();
1480
- break;
1481
- case 'ios':
1482
- builder = new iOSBuilder();
1483
- break;
1484
- case 'android':
1485
- builder = new AndroidBuilder();
1486
- break;
1487
- default:
1488
- return lines;
1489
- }
1490
-
1491
- // Generate primitive motion tokens
1492
- const durationLines = builder.generateDurationTokens(durationTokens);
1493
- const easingLines = builder.generateEasingTokens(easingTokens);
1494
- const scaleLines = builder.generateScaleTokens(scaleTokens);
1495
-
1496
- lines.push(durationLines);
1497
- lines.push(easingLines);
1498
- lines.push(scaleLines);
1499
-
1500
- // Generate semantic motion tokens
1501
- const semanticMotionLines = builder.generateSemanticMotionTokens(motionTokens);
1502
- lines.push(semanticMotionLines);
1503
-
1504
- return lines;
1505
- }
1506
-
1507
- /**
1508
- * Generate layering token section for specified platform
1509
- * Handles semantic-only layering tokens (z-index and elevation)
1510
- *
1511
- * @param platform - Target platform ('web', 'ios', or 'android')
1512
- * @returns Array of formatted token strings
1513
- */
1514
- private generateLayeringSection(platform: 'web' | 'ios' | 'android'): string[] {
1515
- const lines: string[] = [];
1516
-
1517
- // Route z-index tokens to web/iOS, elevation tokens to Android
1518
- if (platform === 'web' || platform === 'ios') {
1519
- // Get z-index tokens for web and iOS
1520
- const zIndexTokens = getAllZIndexTokens();
1521
-
1522
- for (const token of zIndexTokens) {
1523
- // Format z-index token based on platform
1524
- if (platform === 'web') {
1525
- // Web: CSS custom property format
1526
- // --z-index-modal: 400;
1527
- const kebabName = token.name.replace('zIndex.', 'z-index-');
1528
- lines.push(` --${kebabName}: ${token.value};`);
1529
- } else {
1530
- // iOS: Swift constant format with scaled value
1531
- // static let zIndexModal: CGFloat = 4
1532
- const suffix = token.name.replace('zIndex.', '');
1533
- const camelSuffix = suffix.charAt(0).toUpperCase() + suffix.slice(1);
1534
- const camelName = 'zIndex' + camelSuffix;
1535
- const scaledValue = token.value / 100; // Scale down from 100-600 to 1-6
1536
- lines.push(` static let ${camelName}: CGFloat = ${scaledValue}`);
1537
- }
1538
- }
1539
- } else if (platform === 'android') {
1540
- // Get elevation tokens for Android
1541
- const elevationTokens = getAllElevationTokens();
1542
-
1543
- for (const token of elevationTokens) {
1544
- // Use AndroidFormatGenerator to format elevation tokens
1545
- lines.push(this.androidGenerator.formatElevationToken(token.name, token.value));
1546
- }
1547
- }
1548
-
1549
- return lines;
1550
- }
1551
-
1552
- // ---------------------------------------------------------------------------
1553
- // Platform token generation
1554
- //
1555
- // All three platforms follow the same generation flow. Platform-specific
1556
- // formatting is handled by the generator instances (WebFormatGenerator,
1557
- // iOSFormatGenerator, AndroidFormatGenerator). This consolidated method
1558
- // ensures filtering logic, section ordering, and structural decisions
1559
- // stay in sync across platforms.
1560
- // ---------------------------------------------------------------------------
1561
-
1562
- /** Platform-specific configuration for the consolidated generation flow. */
1563
- private static readonly PLATFORM_CONFIG: Record<'web' | 'ios' | 'android', {
1564
- fileName: string;
1565
- motionComment: string;
1566
- layeringComment: string;
1567
- /** Web closes :root before WCAG overrides; iOS/Android put WCAG inside the struct. */
1568
- wcagAfterFooter: boolean;
1569
- }> = {
1570
- web: {
1571
- fileName: 'DesignTokens.web.css',
1572
- motionComment: ' /* Motion Tokens */',
1573
- layeringComment: ' /* Layering Tokens (Z-Index) */',
1574
- wcagAfterFooter: true,
1575
- },
1576
- ios: {
1577
- fileName: 'DesignTokens.ios.swift',
1578
- motionComment: ' // MARK: - Motion Tokens',
1579
- layeringComment: ' // MARK: - Layering Tokens (Z-Index)',
1580
- wcagAfterFooter: false,
1581
- },
1582
- android: {
1583
- fileName: 'DesignTokens.android.kt',
1584
- motionComment: ' // Motion Tokens',
1585
- layeringComment: ' // Layering Tokens (Elevation)',
1586
- wcagAfterFooter: false,
1587
- },
1588
- };
1589
-
1590
- /**
1591
- * Categories handled by dedicated sections (generateMotionSection),
1592
- * excluded from the generic primitive pass to prevent duplicates.
1593
- */
1594
- private static readonly DEDICATED_PRIMITIVE_CATEGORIES = new Set([
1595
- TokenCategory.EASING, TokenCategory.DURATION, TokenCategory.SCALE,
1596
- ]);
1597
-
1598
- /**
1599
- * Semantic name prefixes handled by dedicated sections
1600
- * (generateMotionSection, generateLayeringSection),
1601
- * excluded from the generic semantic pass.
1602
- */
1603
- private static readonly DEDICATED_SEMANTIC_PREFIXES = ['zIndex.', 'elevation.', 'motion.'];
1604
-
1605
- /** Get primitive tokens for the generic pass (excludes dedicated-section categories). */
1606
- private getGenerationPrimitives(primitiveTokens: PrimitiveToken[]): PrimitiveToken[] {
1607
- return primitiveTokens.filter(
1608
- t => !TokenFileGenerator.DEDICATED_PRIMITIVE_CATEGORIES.has(t.category)
1609
- );
1610
- }
1611
-
1612
- /** Filter semantics for the generic pass (excludes dedicated-section prefixes). */
1613
- private filterGenerationSemantics(
1614
- tokens: Array<Omit<SemanticToken, 'primitiveTokens'>>
1615
- ): Array<Omit<SemanticToken, 'primitiveTokens'>> {
1616
- return tokens.filter(s =>
1617
- TokenFileGenerator.DEDICATED_SEMANTIC_PREFIXES.every(p => !s.name.startsWith(p))
1618
- );
1619
- }
1620
-
1621
- /** Get the format generator instance for a platform. */
1622
- private getGenerator(platform: 'web' | 'ios' | 'android'): WebFormatGenerator | iOSFormatGenerator | AndroidFormatGenerator {
1623
- switch (platform) {
1624
- case 'web': return this.webGenerator;
1625
- case 'ios': return this.iosGenerator;
1626
- case 'android': return this.androidGenerator;
1627
- }
1628
- }
1629
-
1630
- /**
1631
- * Generate token file for a specific platform.
1632
- *
1633
- * Shared flow: header → primitives → semantics → motion → layering → WCAG → footer.
1634
- * Web places footer before WCAG (overrides live outside :root);
1635
- * iOS/Android place WCAG before footer (overrides live inside the struct).
1636
- */
1637
- private generatePlatformTokens(
1638
- platform: 'web' | 'ios' | 'android',
1639
- options: GenerationOptions
1640
- ): GenerationResult {
1641
- const {
1642
- outputDir = 'output',
1643
- version = '1.0.0',
1644
- includeComments = true,
1645
- groupByCategory = true,
1646
- semanticTokens,
1647
- darkSemanticTokens,
1648
- } = options;
1649
-
1650
- const config = TokenFileGenerator.PLATFORM_CONFIG[platform];
1651
- const generator = this.getGenerator(platform);
1652
- const metadata: FileMetadata = { version, generatedAt: new Date() };
1653
-
1654
- const tokens = this.getGenerationPrimitives(options.primitiveTokens || getAllPrimitiveTokens());
1655
- const semantics = this.filterGenerationSemantics(semanticTokens);
1656
- const darkSemantics = this.filterGenerationSemantics(darkSemanticTokens);
1657
-
1658
- const lines: string[] = [];
1659
- let semanticTokenCount = 0;
1660
-
1661
- // --- Header ---
1662
- lines.push(generator.generateHeader(metadata));
1663
- if (platform === 'web') {
1664
- lines.push(' color-scheme: light dark;');
1665
- }
1666
-
1667
- // --- Primitive tokens ---
1668
- if (includeComments) {
1669
- lines.push(generator.generateSectionComment('primitive'));
1670
- }
1671
-
1672
- if (groupByCategory) {
1673
- const categories = this.getUniqueCategories(tokens);
1674
- for (const category of categories) {
1675
- if (category === TokenCategory.COLOR) {
1676
- // OKLCH color output — uses composed colors instead of old RGBA PrimitiveTokens
1677
- if (includeComments) {
1678
- lines.push((generator as any).generateCategoryComment(category));
1679
- }
1680
- if (platform === 'web') {
1681
- lines.push(...this.generateOklchWebColors());
1682
- } else if (platform === 'ios') {
1683
- lines.push(...this.generateOklchNativeColors('ios'));
1684
- } else {
1685
- lines.push(...this.generateOklchNativeColors('android'));
1686
- }
1687
- continue;
1688
- }
1689
- const categoryTokens = tokens.filter(t => t.category === category);
1690
- if (includeComments) {
1691
- lines.push((generator as any).generateCategoryComment(category));
1692
- }
1693
- for (const token of categoryTokens) {
1694
- if (includeComments && 'mathematicalRelationship' in token) {
1695
- lines.push((generator as any).generateMathematicalComment(token as PrimitiveToken));
1696
- }
1697
- lines.push(generator.formatToken(token));
1698
- }
1699
- }
1700
- } else {
1701
- for (const token of tokens) {
1702
- lines.push(generator.formatToken(token));
1703
- }
1704
- }
1705
-
1706
- // --- Semantic tokens ---
1707
- if (includeComments) {
1708
- lines.push(generator.generateSectionComment('semantic'));
1709
- }
1710
- const semanticLines = this.generateSemanticSection(
1711
- semantics, platform, darkSemantics,
1712
- platform !== 'web' ? options.themeVaryingTokens : undefined
1713
- );
1714
- lines.push(...semanticLines);
1715
- semanticTokenCount = semantics.length;
1716
-
1717
- // --- Motion tokens (dedicated section) ---
1718
- if (includeComments) {
1719
- lines.push('');
1720
- lines.push(config.motionComment);
1721
- }
1722
- const motionLines = this.generateMotionSection(platform);
1723
- lines.push(...motionLines);
1724
- semanticTokenCount += motionLines.length;
1725
-
1726
- // --- Layering tokens (dedicated section) ---
1727
- if (includeComments) {
1728
- lines.push('');
1729
- lines.push(config.layeringComment);
1730
- }
1731
- const layeringLines = this.generateLayeringSection(platform);
1732
- lines.push(...layeringLines);
1733
- semanticTokenCount += layeringLines.length;
1734
-
1735
- // --- WCAG overrides + Footer ---
1736
- // Web: footer first (closes :root), then WCAG outside it.
1737
- // iOS/Android: WCAG inside the struct, then footer closes it.
1738
- const wcagLines = this.maybeGenerateWcagBlock(platform, options);
1739
-
1740
- if (config.wcagAfterFooter) {
1741
- lines.push(generator.generateFooter());
1742
- lines.push(...wcagLines);
1743
- } else {
1744
- lines.push(...wcagLines);
1745
- lines.push(generator.generateFooter());
1746
- }
1747
-
1748
- const content = lines.join('\n');
1749
- const validation = generator.validateSyntax(content);
1750
-
1751
- return {
1752
- platform,
1753
- filePath: `${outputDir}/${config.fileName}`,
1754
- content,
1755
- tokenCount: (options.primitiveTokens || getAllPrimitiveTokens()).length,
1756
- semanticTokenCount,
1757
- valid: validation.valid,
1758
- errors: validation.errors,
1759
- };
1760
- }
1761
-
1762
- /** Generate WCAG override block if WCAG tokens are provided. */
1763
- private maybeGenerateWcagBlock(
1764
- platform: 'web' | 'ios' | 'android',
1765
- options: GenerationOptions
1766
- ): string[] {
1767
- if (options.wcagSemanticTokens && options.darkWcagSemanticTokens) {
1768
- const wcagLines = this.generateWcagOverrideBlock(
1769
- options.semanticTokens, options.darkSemanticTokens,
1770
- options.wcagSemanticTokens, options.darkWcagSemanticTokens,
1771
- platform, options.wcagOverrideKeys
1772
- );
1773
- if (wcagLines.length > 0) return wcagLines;
1774
- }
1775
- return [];
1776
- }
1777
-
1778
- /** Generate web token file (CSS). */
1779
- generateWebTokens(options: GenerationOptions): GenerationResult {
1780
- return this.generatePlatformTokens('web', options);
1781
- }
1782
-
1783
- /** Generate iOS token file (Swift). */
1784
- generateiOSTokens(options: GenerationOptions): GenerationResult {
1785
- return this.generatePlatformTokens('ios', options);
1786
- }
1787
-
1788
- /** Generate Android token file (Kotlin). */
1789
- generateAndroidTokens(options: GenerationOptions): GenerationResult {
1790
- return this.generatePlatformTokens('android', options);
1791
- }
1792
-
1793
- /**
1794
- * Extract name and value from a formatted token line (any platform).
1795
- * Web: ` --color-text-default: rgba(38, 50, 58, 1);` → { name: '--color-text-default', value: 'rgba(38, 50, 58, 1)' }
1796
- * iOS: ` public static let colorTextDefault: UIColor = UIColor(...)` → { name: 'colorTextDefault', value: 'UIColor(...)' }
1797
- * Android: ` val color_text_default = Color.argb(255, 38, 50, 58)` → { name: 'color_text_default', value: 'Color.argb(255, 38, 50, 58)' }
1798
- */
1799
- private extractFormattedParts(line: string): { name: string; value: string } | null {
1800
- const lastLine = line.includes('\n') ? line.split('\n').pop()! : line;
1801
- // Web: --prop-name: value;
1802
- const cssMatch = lastLine.match(/^\s*(--[\w-]+):\s*(.+);$/);
1803
- if (cssMatch) return { name: cssMatch[1], value: cssMatch[2].trim() };
1804
- // iOS: public static let name: Type = value
1805
- const swiftMatch = lastLine.match(/public static let (\w+).*?=\s*(.+)$/);
1806
- if (swiftMatch) return { name: swiftMatch[1], value: swiftMatch[2].trim() };
1807
- // Android (Kotlin): val name = value
1808
- const kotlinMatch = lastLine.match(/^\s*val\s+([\w_]+)\s*=\s*(.+)$/);
1809
- if (kotlinMatch) return { name: kotlinMatch[1], value: kotlinMatch[2].trim() };
1810
- return null;
1811
- }
1812
-
1813
- /**
1814
- * Get unique categories from token list
1815
- */
1816
- private getUniqueCategories(tokens: PrimitiveToken[]): TokenCategory[] {
1817
- const categories = new Set<TokenCategory>();
1818
- tokens.forEach(token => categories.add(token.category));
1819
- return Array.from(categories).sort();
1820
- }
1821
-
1822
-
1823
-
1824
- /**
1825
- * Validate mathematical consistency across platforms
1826
- * Extended to include semantic token validation with nuanced platform-specific token handling
1827
- *
1828
- * Platform-specific tokens (documented in acknowledged-differences.json) are excluded from
1829
- * count comparisons. For example, Android has elevation.none (0dp baseline) while web/iOS
1830
- * don't need a "zero" z-index token.
1831
- */
1832
- validateCrossPlatformConsistency(results: GenerationResult[]): {
1833
- consistent: boolean;
1834
- issues: string[];
1835
- platformSpecificTokens?: { platform: string; tokens: string[] }[];
1836
- } {
1837
- const issues: string[] = [];
1838
- const platformSpecificInfo: { platform: string; tokens: string[] }[] = [];
1839
-
1840
- // Check that all platforms generated successfully FIRST (most critical)
1841
- const invalidPlatforms = results.filter(r => !r.valid);
1842
- if (invalidPlatforms.length > 0) {
1843
- invalidPlatforms.forEach(r => {
1844
- issues.push(`${r.platform} generation failed: ${r.errors?.join(', ')}`);
1845
- });
1846
- }
1847
-
1848
- // Load acknowledged differences registry for platform-specific token handling
1849
- let acknowledgedDifferences: any = null;
1850
- try {
1851
- // Try multiple paths since this file may be run from different locations
1852
- try {
1853
- acknowledgedDifferences = require('../__tests__/fixtures/acknowledged-differences.json');
1854
- } catch {
1855
- acknowledgedDifferences = require('../../__tests__/fixtures/acknowledged-differences.json');
1856
- }
1857
- } catch (e) {
1858
- // Registry not available, proceed with strict validation
1859
- }
1860
-
1861
- // Get platform-specific token counts from registry
1862
- const platformSpecificCounts: Record<string, number> = {};
1863
- if (acknowledgedDifferences?.platformSpecificTokens?.tokens) {
1864
- for (const token of acknowledgedDifferences.platformSpecificTokens.tokens) {
1865
- platformSpecificCounts[token.platform] = (platformSpecificCounts[token.platform] || 0) + 1;
1866
-
1867
- // Track for reporting
1868
- const existing = platformSpecificInfo.find(p => p.platform === token.platform);
1869
- if (existing) {
1870
- existing.tokens.push(token.token);
1871
- } else {
1872
- platformSpecificInfo.push({ platform: token.platform, tokens: [token.token] });
1873
- }
1874
- }
1875
- }
1876
-
1877
- // Check that all platforms have the same primitive token count
1878
- const tokenCounts = results.map(r => r.tokenCount);
1879
- const uniqueCounts = new Set(tokenCounts);
1880
-
1881
- if (uniqueCounts.size > 1) {
1882
- issues.push(`Primitive token count mismatch across platforms: ${Array.from(uniqueCounts).join(', ')}`);
1883
- }
1884
-
1885
- // Check semantic token counts with platform-specific token adjustment
1886
- // Only apply adjustment if the raw counts suggest platform-specific tokens are present
1887
- // (i.e., the difference between platforms matches the expected platform-specific count)
1888
- const semanticTokenCounts = results.map(r => r.semanticTokenCount);
1889
- const uniqueRawCounts = new Set(semanticTokenCounts);
1890
-
1891
- // First check if raw counts are already consistent
1892
- if (uniqueRawCounts.size === 1) {
1893
- // All platforms have same count - no adjustment needed
1894
- // This handles mock data and cases where platform-specific tokens aren't present
1895
- } else {
1896
- // Raw counts differ - check if the difference matches platform-specific tokens
1897
- const normalizedSemanticCounts = results.map(r => {
1898
- const platformSpecificCount = platformSpecificCounts[r.platform] || 0;
1899
- return {
1900
- platform: r.platform,
1901
- original: r.semanticTokenCount,
1902
- normalized: r.semanticTokenCount - platformSpecificCount,
1903
- platformSpecific: platformSpecificCount
1904
- };
1905
- });
1906
-
1907
- const uniqueNormalizedCounts = new Set(normalizedSemanticCounts.map(c => c.normalized));
1908
-
1909
- if (uniqueNormalizedCounts.size > 1) {
1910
- // Still mismatched after adjustment - report the issue
1911
- const countDetails = normalizedSemanticCounts
1912
- .map(c => `${c.platform}=${c.original}${c.platformSpecific > 0 ? ` (${c.platformSpecific} platform-specific)` : ''}`)
1913
- .join(', ');
1914
- issues.push(`Semantic token count mismatch across platforms (after excluding platform-specific tokens): ${countDetails}`);
1915
- }
1916
- // If normalized counts are consistent, the difference was due to documented platform-specific tokens
1917
- }
1918
-
1919
- // Verify all platforms have same semantic token names (excluding platform-specific)
1920
- const semanticTokenNames = this.extractSemanticTokenNames(results);
1921
-
1922
- if (semanticTokenNames.length > 0) {
1923
- const referenceNames = semanticTokenNames[0].names;
1924
- const referencePlatform = semanticTokenNames[0].platform;
1925
-
1926
- for (let i = 1; i < semanticTokenNames.length; i++) {
1927
- const current = semanticTokenNames[i];
1928
-
1929
- const missingInCurrent = referenceNames.filter(name => !current.names.includes(name));
1930
- const extraInCurrent = current.names.filter(name => !referenceNames.includes(name));
1931
-
1932
- if (missingInCurrent.length > 0) {
1933
- issues.push(`${current.platform} missing semantic tokens present in ${referencePlatform}: ${missingInCurrent.join(', ')}`);
1934
- }
1935
-
1936
- if (extraInCurrent.length > 0) {
1937
- issues.push(`${current.platform} has extra semantic tokens not in ${referencePlatform}: ${extraInCurrent.join(', ')}`);
1938
- }
1939
- }
1940
- }
1941
-
1942
- // Verify all platforms maintain same primitive→semantic relationships
1943
- const relationships = this.extractPrimitiveSemanticRelationships(results);
1944
-
1945
- if (relationships.length > 0) {
1946
- const referenceRelationships = relationships[0].relationships;
1947
- const referencePlatform = relationships[0].platform;
1948
-
1949
- for (let i = 1; i < relationships.length; i++) {
1950
- const current = relationships[i];
1951
-
1952
- for (const [semanticName, primitiveRefs] of Object.entries(referenceRelationships)) {
1953
- const currentRefs = current.relationships[semanticName];
1954
-
1955
- if (!currentRefs) {
1956
- issues.push(`${current.platform} missing semantic token '${semanticName}' present in ${referencePlatform}`);
1957
- continue;
1958
- }
1959
-
1960
- const refKeys = Object.keys(primitiveRefs).sort();
1961
- const currKeys = Object.keys(currentRefs).sort();
1962
-
1963
- if (JSON.stringify(refKeys) !== JSON.stringify(currKeys)) {
1964
- issues.push(`${current.platform} has different primitive references for '${semanticName}' compared to ${referencePlatform}`);
1965
- } else {
1966
- for (const key of refKeys) {
1967
- if (primitiveRefs[key] !== currentRefs[key]) {
1968
- issues.push(`${current.platform} semantic token '${semanticName}' references '${currentRefs[key]}' for ${key}, but ${referencePlatform} references '${primitiveRefs[key]}'`);
1969
- }
1970
- }
1971
- }
1972
- }
1973
- }
1974
- }
1975
-
1976
- return {
1977
- consistent: issues.length === 0,
1978
- issues,
1979
- platformSpecificTokens: platformSpecificInfo.length > 0 ? platformSpecificInfo : undefined
1980
- };
1981
- }
1982
-
1983
- /**
1984
- * Extract semantic token names from generated content
1985
- * Parses the generated files to extract semantic token names
1986
- *
1987
- * @param results - Generation results for all platforms
1988
- * @returns Array of platform token names
1989
- */
1990
- private extractSemanticTokenNames(results: GenerationResult[]): Array<{
1991
- platform: string;
1992
- names: string[];
1993
- }> {
1994
- const semantics = getAllSemanticTokens();
1995
- const semanticNames = semantics.map(s => s.name);
1996
-
1997
- return results.map(result => ({
1998
- platform: result.platform,
1999
- names: semanticNames
2000
- }));
2001
- }
2002
-
2003
- /**
2004
- * Extract primitive→semantic relationships from generated content
2005
- * Analyzes semantic tokens to extract their primitive references
2006
- *
2007
- * @param results - Generation results for all platforms
2008
- * @returns Array of platform relationships
2009
- */
2010
- private extractPrimitiveSemanticRelationships(results: GenerationResult[]): Array<{
2011
- platform: string;
2012
- relationships: Record<string, Record<string, string>>;
2013
- }> {
2014
- const semantics = getAllSemanticTokens();
2015
-
2016
- // Build relationships map from semantic tokens
2017
- const relationships: Record<string, Record<string, string>> = {};
2018
-
2019
- for (const semantic of semantics) {
2020
- relationships[semantic.name] = { ...semantic.primitiveReferences };
2021
- }
2022
-
2023
- // Return same relationships for all platforms (they should be identical)
2024
- return results.map(result => ({
2025
- platform: result.platform,
2026
- relationships: { ...relationships }
2027
- }));
2028
- }
2029
-
2030
- // --- OKLCH Color Generation Helpers (Spec 112) ---
2031
-
2032
- private generateOklchWebColors(): string[] {
2033
- const lines: string[] = [];
2034
-
2035
- // Channel custom properties
2036
- const families: Array<{ name: string; hue: number; lightness: Record<number, number>; chroma: Record<number, number> }> = [
2037
- { name: 'pink', hue: colorHues.pink, lightness: pinkLightness, chroma: pinkChroma },
2038
- { name: 'orange', hue: colorHues.orange, lightness: orangeLightness, chroma: orangeChroma },
2039
- { name: 'yellow', hue: colorHues.yellow, lightness: yellowLightness, chroma: yellowChroma },
2040
- { name: 'green', hue: colorHues.green, lightness: greenLightness, chroma: greenChroma },
2041
- { name: 'cyan', hue: colorHues.cyan, lightness: cyanLightness, chroma: cyanChroma },
2042
- { name: 'teal', hue: colorHues.teal, lightness: tealLightness, chroma: tealChroma },
2043
- { name: 'purple', hue: colorHues.purple, lightness: purpleLightness, chroma: purpleChroma },
2044
- ];
2045
-
2046
- // Emit channel primitives
2047
- for (const family of families) {
2048
- lines.push(...this.webGenerator.formatOklchChannels(family.name, family.hue, family.lightness, family.chroma));
2049
- }
2050
- // Neutral hue
2051
- lines.push(` --neutral-hue: ${neutralHue};`);
2052
- // Neutral channels
2053
- lines.push(...this.webGenerator.formatOklchChannels('white', neutralHue, whiteLightness as any, whiteChroma as any));
2054
- lines.push(...this.webGenerator.formatOklchChannels('gray', neutralHue, grayLightness as any, grayChroma as any));
2055
- lines.push(...this.webGenerator.formatOklchChannels('black', neutralHue, blackLightness as any, blackChroma as any));
2056
-
2057
- // Emit composed colors
2058
- for (const color of allComposedColors) {
2059
- lines.push(this.webGenerator.formatOklchColor(color.name, color.resolved.l, color.resolved.c, color.resolved.h));
2060
- }
2061
-
2062
- return lines;
2063
- }
2064
-
2065
- private generateOklchNativeColors(platform: 'ios' | 'android'): string[] {
2066
- const lines: string[] = [];
2067
- const gen = platform === 'ios' ? this.iosGenerator : this.androidGenerator;
2068
-
2069
- for (const color of allComposedColors) {
2070
- lines.push(gen.formatOklchColor(color.name, color.resolved.l, color.resolved.c, color.resolved.h));
2071
- }
2072
-
2073
- return lines;
2074
- }
2075
- }