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