@sarjallab09/figma-intelligence 1.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 (286) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +327 -0
  3. package/bin/cli.js +859 -0
  4. package/design-bridge/.env.example +5 -0
  5. package/design-bridge/bridge.js +196 -0
  6. package/design-bridge/lib/assets.js +367 -0
  7. package/design-bridge/lib/prompt.js +85 -0
  8. package/design-bridge/lib/server.js +66 -0
  9. package/design-bridge/lib/stitch.js +37 -0
  10. package/design-bridge/lib/tokens.js +82 -0
  11. package/design-bridge/package-lock.json +579 -0
  12. package/design-bridge/package.json +19 -0
  13. package/figma-bridge-plugin/README.md +97 -0
  14. package/figma-bridge-plugin/anthropic-chat-runner.js +192 -0
  15. package/figma-bridge-plugin/bridge-relay.js +2363 -0
  16. package/figma-bridge-plugin/chat-runner.js +459 -0
  17. package/figma-bridge-plugin/code.js +1528 -0
  18. package/figma-bridge-plugin/codex-runner.js +505 -0
  19. package/figma-bridge-plugin/component-schemas.js +110 -0
  20. package/figma-bridge-plugin/content-context.js +869 -0
  21. package/figma-bridge-plugin/create-button.js +216 -0
  22. package/figma-bridge-plugin/gemini-cli-runner.js +291 -0
  23. package/figma-bridge-plugin/gemini-runner.js +187 -0
  24. package/figma-bridge-plugin/html-to-figma.js +927 -0
  25. package/figma-bridge-plugin/knowledge-hub/.gitkeep +0 -0
  26. package/figma-bridge-plugin/knowledge-hub/uspec-references/anatomy-spec.md +159 -0
  27. package/figma-bridge-plugin/knowledge-hub/uspec-references/api-spec.md +162 -0
  28. package/figma-bridge-plugin/knowledge-hub/uspec-references/color-spec.md +148 -0
  29. package/figma-bridge-plugin/knowledge-hub/uspec-references/full-spec-template.md +314 -0
  30. package/figma-bridge-plugin/knowledge-hub/uspec-references/property-spec.md +175 -0
  31. package/figma-bridge-plugin/knowledge-hub/uspec-references/screen-reader-spec.md +180 -0
  32. package/figma-bridge-plugin/knowledge-hub/uspec-references/structure-spec.md +165 -0
  33. package/figma-bridge-plugin/manifest.json +21 -0
  34. package/figma-bridge-plugin/package-lock.json +1936 -0
  35. package/figma-bridge-plugin/package.json +20 -0
  36. package/figma-bridge-plugin/perplexity-runner.js +188 -0
  37. package/figma-bridge-plugin/references/SKILL.md +178 -0
  38. package/figma-bridge-plugin/references/anatomy-spec.md +159 -0
  39. package/figma-bridge-plugin/references/api-spec.md +162 -0
  40. package/figma-bridge-plugin/references/color-spec.md +148 -0
  41. package/figma-bridge-plugin/references/full-spec-template.md +314 -0
  42. package/figma-bridge-plugin/references/property-spec.md +175 -0
  43. package/figma-bridge-plugin/references/screen-reader-spec.md +180 -0
  44. package/figma-bridge-plugin/references/structure-spec.md +165 -0
  45. package/figma-bridge-plugin/shared-prompt-config.js +604 -0
  46. package/figma-bridge-plugin/spec-helpers/build-table.js +269 -0
  47. package/figma-bridge-plugin/spec-helpers/classify-elements.js +189 -0
  48. package/figma-bridge-plugin/spec-helpers/index.js +35 -0
  49. package/figma-bridge-plugin/spec-helpers/parse-figma-link.js +49 -0
  50. package/figma-bridge-plugin/spec-helpers/position-markers.js +158 -0
  51. package/figma-bridge-plugin/stitch-auth.js +322 -0
  52. package/figma-bridge-plugin/stitch-runner.js +1427 -0
  53. package/figma-bridge-plugin/token-resolver.js +107 -0
  54. package/figma-bridge-plugin/ui.html +4467 -0
  55. package/figma-intelligence-layer/.env.example +39 -0
  56. package/figma-intelligence-layer/docs/local-image-generation.md +60 -0
  57. package/figma-intelligence-layer/examples/comfyui-workflow-template.example.json +101 -0
  58. package/figma-intelligence-layer/jest.config.js +14 -0
  59. package/figma-intelligence-layer/mcp-config.json +19 -0
  60. package/figma-intelligence-layer/package-lock.json +5892 -0
  61. package/figma-intelligence-layer/package.json +48 -0
  62. package/figma-intelligence-layer/scripts/setup-comfyui-local.sh +67 -0
  63. package/figma-intelligence-layer/scripts/start-comfyui.sh +33 -0
  64. package/figma-intelligence-layer/src/index.ts +2233 -0
  65. package/figma-intelligence-layer/src/shared/auto-layout-validator.ts +404 -0
  66. package/figma-intelligence-layer/src/shared/cache.ts +187 -0
  67. package/figma-intelligence-layer/src/shared/color-operations.ts +533 -0
  68. package/figma-intelligence-layer/src/shared/color-utils.ts +138 -0
  69. package/figma-intelligence-layer/src/shared/component-script-builder.ts +413 -0
  70. package/figma-intelligence-layer/src/shared/component-templates.ts +2767 -0
  71. package/figma-intelligence-layer/src/shared/concept-taxonomy.ts +694 -0
  72. package/figma-intelligence-layer/src/shared/decision-log.ts +128 -0
  73. package/figma-intelligence-layer/src/shared/design-system-context.ts +568 -0
  74. package/figma-intelligence-layer/src/shared/design-system-intelligence.ts +131 -0
  75. package/figma-intelligence-layer/src/shared/design-system-matcher.ts +184 -0
  76. package/figma-intelligence-layer/src/shared/design-system-normalizers.ts +196 -0
  77. package/figma-intelligence-layer/src/shared/design-system-tokens.ts +295 -0
  78. package/figma-intelligence-layer/src/shared/dtcg-validator.ts +530 -0
  79. package/figma-intelligence-layer/src/shared/enrichment-pipeline.ts +671 -0
  80. package/figma-intelligence-layer/src/shared/figma-bridge.ts +1408 -0
  81. package/figma-intelligence-layer/src/shared/font-config.ts +126 -0
  82. package/figma-intelligence-layer/src/shared/icon-catalog.ts +360 -0
  83. package/figma-intelligence-layer/src/shared/icon-fetch.ts +80 -0
  84. package/figma-intelligence-layer/src/shared/prototype-script-builder.ts +162 -0
  85. package/figma-intelligence-layer/src/shared/response-compression.ts +440 -0
  86. package/figma-intelligence-layer/src/shared/semantic-token-catalog.ts +324 -0
  87. package/figma-intelligence-layer/src/shared/token-binder.ts +505 -0
  88. package/figma-intelligence-layer/src/shared/token-math.ts +427 -0
  89. package/figma-intelligence-layer/src/shared/token-naming.ts +468 -0
  90. package/figma-intelligence-layer/src/shared/token-utils.ts +420 -0
  91. package/figma-intelligence-layer/src/shared/types.ts +346 -0
  92. package/figma-intelligence-layer/src/shared/typography-presets.ts +94 -0
  93. package/figma-intelligence-layer/src/shared/unsplash.ts +165 -0
  94. package/figma-intelligence-layer/src/shared/vision-client.ts +607 -0
  95. package/figma-intelligence-layer/src/shared/vision-provider-anthropic.ts +334 -0
  96. package/figma-intelligence-layer/src/shared/vision-provider-openai.ts +446 -0
  97. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-handler.ts +782 -0
  98. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-renderer.ts +496 -0
  99. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotation-kit.ts +230 -0
  100. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/colorblind-sim.ts +66 -0
  101. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/index.ts +810 -0
  102. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-analyzer.ts +1191 -0
  103. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-figma-page.ts +1346 -0
  104. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-handler.ts +148 -0
  105. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-figma-page.ts +499 -0
  106. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-report.ts +910 -0
  107. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-checker.ts +989 -0
  108. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-criteria.ts +1160 -0
  109. package/figma-intelligence-layer/src/tools/phase1-vision/design-from-ref/index.ts +424 -0
  110. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/component-recognizer.ts +38 -0
  111. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/ds-matcher.ts +111 -0
  112. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/font-matcher.ts +114 -0
  113. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/icon-resolver.ts +103 -0
  114. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/index.ts +1060 -0
  115. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/layout-segmenter.ts +18 -0
  116. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/token-inferencer.ts +39 -0
  117. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/vision-pipeline.ts +58 -0
  118. package/figma-intelligence-layer/src/tools/phase1-vision/sketch-to-design/index.ts +298 -0
  119. package/figma-intelligence-layer/src/tools/phase1-vision/visual-audit/index.ts +197 -0
  120. package/figma-intelligence-layer/src/tools/phase2-accuracy/component-audit/index.ts +494 -0
  121. package/figma-intelligence-layer/src/tools/phase2-accuracy/intent-translator/index.ts +356 -0
  122. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/container-patterns.ts +123 -0
  123. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/index.ts +663 -0
  124. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/built-in-rules.yaml +56 -0
  125. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/index.ts +614 -0
  126. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/rule-engine.ts +113 -0
  127. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/color-theory.ts +178 -0
  128. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/index.ts +470 -0
  129. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/index.ts +429 -0
  130. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/token-override-maps.ts +226 -0
  131. package/figma-intelligence-layer/src/tools/phase3-generation/ai-image-insert/index.ts +535 -0
  132. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/index.ts +660 -0
  133. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/pattern-fingerprints.ts +209 -0
  134. package/figma-intelligence-layer/src/tools/phase3-generation/composition-builder/index.ts +540 -0
  135. package/figma-intelligence-layer/src/tools/phase3-generation/figma-animated-build.ts +391 -0
  136. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/index.ts +2019 -0
  137. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/screen-templates.ts +131 -0
  138. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-map/index.ts +381 -0
  139. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-wire/index.ts +565 -0
  140. package/figma-intelligence-layer/src/tools/phase3-generation/swarm-build/index.ts +764 -0
  141. package/figma-intelligence-layer/src/tools/phase3-generation/system-drift/index.ts +535 -0
  142. package/figma-intelligence-layer/src/tools/phase3-generation/unsplash-search/index.ts +84 -0
  143. package/figma-intelligence-layer/src/tools/phase3-generation/url-to-frame/index.ts +401 -0
  144. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/css-animations.ts +68 -0
  145. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/framer-motion.ts +78 -0
  146. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/swift-animations.ts +93 -0
  147. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/index.ts +596 -0
  148. package/figma-intelligence-layer/src/tools/phase4-sync/ci-check/index.ts +462 -0
  149. package/figma-intelligence-layer/src/tools/phase4-sync/export-tokens/index.ts +1470 -0
  150. package/figma-intelligence-layer/src/tools/phase4-sync/generate-component-code/index.ts +829 -0
  151. package/figma-intelligence-layer/src/tools/phase4-sync/handoff-spec/index.ts +702 -0
  152. package/figma-intelligence-layer/src/tools/phase4-sync/icon-library-sync/index.ts +483 -0
  153. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/index.ts +501 -0
  154. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/storybook-parser.ts +106 -0
  155. package/figma-intelligence-layer/src/tools/phase4-sync/watch-docs/index.ts +676 -0
  156. package/figma-intelligence-layer/src/tools/phase4-sync/webhook-listener/index.ts +560 -0
  157. package/figma-intelligence-layer/src/tools/phase5-governance/apg-doc/index.ts +1043 -0
  158. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/component-detection.ts +620 -0
  159. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/anatomy.ts +331 -0
  160. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/color-tokens.ts +77 -0
  161. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/properties.ts +54 -0
  162. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/snapshot.ts +287 -0
  163. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/spacing.ts +71 -0
  164. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/states.ts +43 -0
  165. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/typography.ts +71 -0
  166. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/index.ts +221 -0
  167. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/_default.ts +166 -0
  168. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/accordion.ts +232 -0
  169. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/alert.ts +234 -0
  170. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar-group.ts +270 -0
  171. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar.ts +249 -0
  172. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/badge.ts +231 -0
  173. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/banner.ts +293 -0
  174. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/breadcrumb.ts +240 -0
  175. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/button.ts +243 -0
  176. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/calendar.ts +307 -0
  177. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/card.ts +143 -0
  178. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/checkbox.ts +227 -0
  179. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/chip.ts +233 -0
  180. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/combobox.ts +282 -0
  181. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/datepicker.ts +276 -0
  182. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/divider.ts +223 -0
  183. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/drawer.ts +255 -0
  184. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/dropdown-menu.ts +289 -0
  185. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/empty-state.ts +261 -0
  186. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/file-uploader.ts +290 -0
  187. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/form.ts +265 -0
  188. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/grid.ts +238 -0
  189. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/icon.ts +255 -0
  190. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/index.ts +128 -0
  191. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-edit.ts +286 -0
  192. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-message.ts +255 -0
  193. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/input.ts +330 -0
  194. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/link.ts +247 -0
  195. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/list.ts +250 -0
  196. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/menu.ts +247 -0
  197. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/modal.ts +144 -0
  198. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navbar.ts +264 -0
  199. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navigation.ts +251 -0
  200. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/number-input.ts +261 -0
  201. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/pagination.ts +248 -0
  202. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/popover.ts +270 -0
  203. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/progress.ts +251 -0
  204. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/radio.ts +142 -0
  205. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/range-slider.ts +282 -0
  206. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/rating.ts +250 -0
  207. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/search.ts +258 -0
  208. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/segmented-control.ts +265 -0
  209. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/select.ts +319 -0
  210. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/skeleton.ts +256 -0
  211. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/slider.ts +232 -0
  212. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/spinner.ts +239 -0
  213. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/status-dot.ts +252 -0
  214. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/stepper.ts +270 -0
  215. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/table.ts +244 -0
  216. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tabs.ts +143 -0
  217. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tag.ts +243 -0
  218. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/textarea.ts +259 -0
  219. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/time-picker.ts +293 -0
  220. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toast.ts +144 -0
  221. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toggle.ts +289 -0
  222. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toolbar.ts +267 -0
  223. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tooltip.ts +232 -0
  224. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/treeview.ts +257 -0
  225. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/typography.ts +319 -0
  226. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/legacy-compat.ts +121 -0
  227. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/anatomy-diagram.ts +430 -0
  228. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/figma-page.ts +312 -0
  229. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/json.ts +129 -0
  230. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/markdown.ts +78 -0
  231. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/visual-doc.ts +2333 -0
  232. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/accessibility.ts +100 -0
  233. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/anatomy.ts +32 -0
  234. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/color-tokens.ts +59 -0
  235. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/content-guidance.ts +18 -0
  236. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/design-tokens.ts +53 -0
  237. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/interaction-rules.ts +19 -0
  238. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/overview.ts +91 -0
  239. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/properties-api.ts +71 -0
  240. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/qa-criteria.ts +19 -0
  241. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/related-components.ts +110 -0
  242. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/responsive.ts +19 -0
  243. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/size-specs.ts +67 -0
  244. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/spacing-structure.ts +58 -0
  245. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/state-specs.ts +79 -0
  246. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/states.ts +50 -0
  247. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/type-hierarchy.ts +33 -0
  248. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/typography.ts +55 -0
  249. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/usage-guidelines.ts +73 -0
  250. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/variants.ts +81 -0
  251. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/types.ts +409 -0
  252. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/index.ts +198 -0
  253. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/renderer.ts +701 -0
  254. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/types.ts +88 -0
  255. package/figma-intelligence-layer/src/tools/phase5-governance/decision-log/index.ts +135 -0
  256. package/figma-intelligence-layer/src/tools/phase5-governance/design-decision-log/index.ts +491 -0
  257. package/figma-intelligence-layer/src/tools/phase5-governance/ds-primitives/index.ts +416 -0
  258. package/figma-intelligence-layer/src/tools/phase5-governance/ds-scaffolder/index.ts +722 -0
  259. package/figma-intelligence-layer/src/tools/phase5-governance/ds-variables/index.ts +449 -0
  260. package/figma-intelligence-layer/src/tools/phase5-governance/health-report/index.ts +393 -0
  261. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/index.ts +406 -0
  262. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/figma-page.ts +292 -0
  263. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/json.ts +24 -0
  264. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/markdown.ts +172 -0
  265. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/naming-guide.ts +409 -0
  266. package/figma-intelligence-layer/src/tools/phase5-governance/token-analytics/index.ts +594 -0
  267. package/figma-intelligence-layer/src/tools/phase5-governance/token-docs/index.ts +710 -0
  268. package/figma-intelligence-layer/src/tools/phase5-governance/token-migrate/index.ts +458 -0
  269. package/figma-intelligence-layer/src/tools/phase5-governance/token-naming/index.ts +134 -0
  270. package/figma-intelligence-layer/tests/apg-doc.test.ts +101 -0
  271. package/figma-intelligence-layer/tests/design-system-context.test.ts +152 -0
  272. package/figma-intelligence-layer/tests/design-system-matcher.test.ts +144 -0
  273. package/figma-intelligence-layer/tests/figma-bridge.test.ts +83 -0
  274. package/figma-intelligence-layer/tests/generate-image-and-insert.test.ts +56 -0
  275. package/figma-intelligence-layer/tests/screen-cloner-regression.test.ts +69 -0
  276. package/figma-intelligence-layer/tests/smoke.test.ts +174 -0
  277. package/figma-intelligence-layer/tests/spec-generator.test.ts +127 -0
  278. package/figma-intelligence-layer/tests/token-migrate.test.ts +21 -0
  279. package/figma-intelligence-layer/tests/token-naming.test.ts +30 -0
  280. package/figma-intelligence-layer/tsconfig.json +19 -0
  281. package/package.json +35 -0
  282. package/scripts/clean-existing-chunks.js +179 -0
  283. package/scripts/connect-ai-tool.js +490 -0
  284. package/scripts/convert-hub-pdfs.js +425 -0
  285. package/scripts/figma-mcp-status.js +349 -0
  286. package/scripts/register-codex-mcp.js +96 -0
@@ -0,0 +1,2767 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Component Templates (Blueprints)
3
+ // Data-driven definitions for 51 professional component stubs with internal
4
+ // node trees, auto-layout, variant properties, and semantic token bindings.
5
+ // All dimensions on 4px/8px grid.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+
8
+ export type NodeKind = "frame" | "text" | "rect" | "ellipse" | "vector";
9
+
10
+ export type IconSize = "xs" | "sm" | "md" | "lg" | "xl";
11
+
12
+ export interface IconSlot {
13
+ /** Default icon name from the catalog (e.g. "icon/action/search") */
14
+ defaultIcon?: string;
15
+ /** Whether the slot is required or optional */
16
+ required: boolean;
17
+ /** Default size preset */
18
+ size?: IconSize;
19
+ /** Color semantic token override */
20
+ colorToken?: string;
21
+ /** Whether icon is decorative (aria-hidden) */
22
+ decorative?: boolean;
23
+ }
24
+
25
+ export interface BlueprintNode {
26
+ name: string;
27
+ kind: NodeKind;
28
+ width?: number;
29
+ height?: number;
30
+
31
+ // Auto-layout
32
+ layoutMode?: "HORIZONTAL" | "VERTICAL" | "NONE";
33
+ paddingX?: number;
34
+ paddingY?: number;
35
+ itemSpacing?: number;
36
+ primaryAxisAlign?: "MIN" | "CENTER" | "MAX" | "SPACE_BETWEEN";
37
+ counterAxisAlign?: "MIN" | "CENTER" | "MAX";
38
+ primaryAxisSizing?: "AUTO" | "FIXED";
39
+ counterAxisSizing?: "AUTO" | "FIXED";
40
+
41
+ // Appearance
42
+ cornerRadius?: number;
43
+ fillSemantic?: string; // semantic token name for fill
44
+ strokeSemantic?: string; // semantic token name for stroke
45
+ strokeWeight?: number;
46
+ opacity?: number;
47
+ effects?: Array<{
48
+ type: "DROP_SHADOW";
49
+ color: { r: number; g: number; b: number; a: number };
50
+ offset: { x: number; y: number };
51
+ radius: number;
52
+ spread: number;
53
+ }>;
54
+
55
+ // Text-specific
56
+ textContent?: string;
57
+ textPreset?: string; // typography preset name (e.g. "label/md")
58
+ textFillSemantic?: string; // semantic token for text fill
59
+
60
+ // Icon slot — marks this node as an icon placeholder with swap metadata
61
+ iconSlot?: IconSlot;
62
+
63
+ // Children
64
+ children?: BlueprintNode[];
65
+ }
66
+
67
+ export interface VariantProperty {
68
+ name: string;
69
+ values: string[];
70
+ defaultValue: string;
71
+ }
72
+
73
+ export interface ComponentBlueprint {
74
+ name: string;
75
+ category: "core" | "forms" | "navigation" | "data" | "feedback" | "overlay" | "layout";
76
+ description: string;
77
+ root: BlueprintNode;
78
+ variantProperties: VariantProperty[];
79
+ tokenBindings: Array<{
80
+ nodePath: string; // dot-separated path to child (e.g. "label")
81
+ property: "fills" | "strokes" | "cornerRadius" | "paddingLeft";
82
+ semanticToken: string;
83
+ }>;
84
+ /** Icon slots exposed as swappable properties */
85
+ iconSlots?: Array<{
86
+ nodePath: string; // path to the icon slot node
87
+ propName: string; // property name for the swap
88
+ defaultIcon?: string; // default icon from catalog
89
+ required: boolean;
90
+ }>;
91
+ }
92
+
93
+ // ─── Component definitions ──────────────────────────────────────────────────
94
+
95
+ const BUTTON: ComponentBlueprint = {
96
+ name: "Button",
97
+ category: "core",
98
+ description: "Primary interactive button with icon slot and label",
99
+ root: {
100
+ name: "Button",
101
+ kind: "frame",
102
+ width: 120,
103
+ height: 40,
104
+ layoutMode: "HORIZONTAL",
105
+ primaryAxisAlign: "CENTER",
106
+ counterAxisAlign: "CENTER",
107
+ primaryAxisSizing: "AUTO",
108
+ counterAxisSizing: "FIXED",
109
+ paddingX: 16,
110
+ paddingY: 8,
111
+ itemSpacing: 8,
112
+ cornerRadius: 8,
113
+ fillSemantic: "color/semantic/actions/primary/bg/default",
114
+ children: [
115
+ {
116
+ name: "Icon",
117
+ kind: "frame",
118
+ width: 16,
119
+ height: 16,
120
+ fillSemantic: "color/semantic/icon/inverse",
121
+ iconSlot: { defaultIcon: "icon/action/add", required: false, size: "xs", colorToken: "color/semantic/icon/inverse", decorative: true },
122
+ },
123
+ {
124
+ name: "Label",
125
+ kind: "text",
126
+ textContent: "Button",
127
+ textPreset: "label/md",
128
+ textFillSemantic: "color/semantic/text/on-color",
129
+ },
130
+ ],
131
+ },
132
+ variantProperties: [
133
+ { name: "State", values: ["Default", "Hover", "Pressed", "Focused", "Disabled", "Loading"], defaultValue: "Default" },
134
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
135
+ { name: "Type", values: ["Primary", "Secondary", "Ghost", "Destructive"], defaultValue: "Primary" },
136
+ ],
137
+ tokenBindings: [
138
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
139
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/control/default" },
140
+ { nodePath: "Label", property: "fills", semanticToken: "color/semantic/text/on-color" },
141
+ ],
142
+ iconSlots: [
143
+ { nodePath: "Icon", propName: "leadingIcon", defaultIcon: "icon/action/add", required: false },
144
+ ],
145
+ };
146
+
147
+ const INPUT: ComponentBlueprint = {
148
+ name: "Input",
149
+ category: "forms",
150
+ description: "Text input field with label, icon slot, and trailing action",
151
+ root: {
152
+ name: "Input",
153
+ kind: "frame",
154
+ width: 280,
155
+ layoutMode: "VERTICAL",
156
+ primaryAxisSizing: "AUTO",
157
+ counterAxisSizing: "FIXED",
158
+ itemSpacing: 4,
159
+ children: [
160
+ {
161
+ name: "Label",
162
+ kind: "text",
163
+ textContent: "Label",
164
+ textPreset: "label/sm",
165
+ textFillSemantic: "color/semantic/text/primary",
166
+ },
167
+ {
168
+ name: "Field",
169
+ kind: "frame",
170
+ height: 40,
171
+ layoutMode: "HORIZONTAL",
172
+ primaryAxisAlign: "MIN",
173
+ counterAxisAlign: "CENTER",
174
+ primaryAxisSizing: "AUTO",
175
+ counterAxisSizing: "FIXED",
176
+ paddingX: 12,
177
+ paddingY: 8,
178
+ itemSpacing: 8,
179
+ cornerRadius: 6,
180
+ fillSemantic: "color/semantic/field/bg/default",
181
+ strokeSemantic: "color/semantic/field/border/default",
182
+ strokeWeight: 1,
183
+ children: [
184
+ {
185
+ name: "LeadingIcon",
186
+ kind: "frame",
187
+ width: 16,
188
+ height: 16,
189
+ fillSemantic: "color/semantic/icon/secondary",
190
+ iconSlot: { defaultIcon: "icon/action/search", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true },
191
+ },
192
+ {
193
+ name: "Value",
194
+ kind: "text",
195
+ textContent: "Placeholder text",
196
+ textPreset: "body/md",
197
+ textFillSemantic: "color/semantic/text/tertiary",
198
+ },
199
+ ],
200
+ },
201
+ ],
202
+ },
203
+ variantProperties: [
204
+ { name: "State", values: ["Default", "Focused", "Error", "Disabled"], defaultValue: "Default" },
205
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
206
+ ],
207
+ tokenBindings: [
208
+ { nodePath: "Field", property: "fills", semanticToken: "color/semantic/field/bg/default" },
209
+ { nodePath: "Field", property: "strokes", semanticToken: "color/semantic/field/border/default" },
210
+ { nodePath: "Field", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
211
+ ],
212
+ iconSlots: [
213
+ { nodePath: "Field.LeadingIcon", propName: "leadingIcon", defaultIcon: "icon/action/search", required: false },
214
+ ],
215
+ };
216
+
217
+ const SELECT: ComponentBlueprint = {
218
+ name: "Select",
219
+ category: "forms",
220
+ description: "Dropdown select with chevron indicator",
221
+ root: {
222
+ name: "Select",
223
+ kind: "frame",
224
+ width: 280,
225
+ layoutMode: "VERTICAL",
226
+ primaryAxisSizing: "AUTO",
227
+ counterAxisSizing: "FIXED",
228
+ itemSpacing: 4,
229
+ children: [
230
+ {
231
+ name: "Label",
232
+ kind: "text",
233
+ textContent: "Label",
234
+ textPreset: "label/sm",
235
+ textFillSemantic: "color/semantic/text/primary",
236
+ },
237
+ {
238
+ name: "Field",
239
+ kind: "frame",
240
+ height: 40,
241
+ layoutMode: "HORIZONTAL",
242
+ primaryAxisAlign: "SPACE_BETWEEN",
243
+ counterAxisAlign: "CENTER",
244
+ primaryAxisSizing: "AUTO",
245
+ counterAxisSizing: "FIXED",
246
+ paddingX: 12,
247
+ paddingY: 8,
248
+ cornerRadius: 6,
249
+ fillSemantic: "color/semantic/field/bg/default",
250
+ strokeSemantic: "color/semantic/field/border/default",
251
+ strokeWeight: 1,
252
+ children: [
253
+ {
254
+ name: "Value",
255
+ kind: "text",
256
+ textContent: "Select option",
257
+ textPreset: "body/md",
258
+ textFillSemantic: "color/semantic/text/tertiary",
259
+ },
260
+ {
261
+ name: "Chevron",
262
+ kind: "frame",
263
+ width: 16,
264
+ height: 16,
265
+ fillSemantic: "color/semantic/icon/secondary",
266
+ iconSlot: { defaultIcon: "icon/navigation/expand-more", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true },
267
+ },
268
+ ],
269
+ },
270
+ ],
271
+ },
272
+ variantProperties: [
273
+ { name: "State", values: ["Default", "Focused", "Error", "Disabled"], defaultValue: "Default" },
274
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
275
+ ],
276
+ tokenBindings: [],
277
+ iconSlots: [
278
+ { nodePath: "Field.Chevron", propName: "chevronIcon", defaultIcon: "icon/navigation/expand-more", required: true },
279
+ ],
280
+ };
281
+
282
+ const CHECKBOX: ComponentBlueprint = {
283
+ name: "Checkbox",
284
+ category: "forms",
285
+ description: "Checkbox with label",
286
+ root: {
287
+ name: "Checkbox",
288
+ kind: "frame",
289
+ layoutMode: "HORIZONTAL",
290
+ primaryAxisSizing: "AUTO",
291
+ counterAxisSizing: "AUTO",
292
+ itemSpacing: 8,
293
+ counterAxisAlign: "CENTER",
294
+ children: [
295
+ {
296
+ name: "Box",
297
+ kind: "frame",
298
+ width: 16,
299
+ height: 16,
300
+ cornerRadius: 4,
301
+ strokeSemantic: "color/semantic/border/default",
302
+ strokeWeight: 1.5,
303
+ fillSemantic: "color/semantic/field/bg/default",
304
+ },
305
+ {
306
+ name: "Label",
307
+ kind: "text",
308
+ textContent: "Checkbox label",
309
+ textPreset: "body/md",
310
+ textFillSemantic: "color/semantic/text/primary",
311
+ },
312
+ ],
313
+ },
314
+ variantProperties: [
315
+ { name: "State", values: ["Default", "Checked", "Indeterminate", "Disabled"], defaultValue: "Default" },
316
+ ],
317
+ tokenBindings: [],
318
+ };
319
+
320
+ const TOGGLE: ComponentBlueprint = {
321
+ name: "Toggle",
322
+ category: "forms",
323
+ description: "Toggle switch with track and thumb",
324
+ root: {
325
+ name: "Toggle",
326
+ kind: "frame",
327
+ width: 40,
328
+ height: 24,
329
+ cornerRadius: 12,
330
+ fillSemantic: "color/semantic/border/default",
331
+ children: [
332
+ {
333
+ name: "Thumb",
334
+ kind: "ellipse",
335
+ width: 20,
336
+ height: 20,
337
+ fillSemantic: "color/semantic/surface/default",
338
+ },
339
+ ],
340
+ },
341
+ variantProperties: [
342
+ { name: "State", values: ["Off", "On", "Disabled"], defaultValue: "Off" },
343
+ ],
344
+ tokenBindings: [],
345
+ };
346
+
347
+ const RADIO: ComponentBlueprint = {
348
+ name: "Radio",
349
+ category: "forms",
350
+ description: "Radio button with label",
351
+ root: {
352
+ name: "Radio",
353
+ kind: "frame",
354
+ layoutMode: "HORIZONTAL",
355
+ primaryAxisSizing: "AUTO",
356
+ counterAxisSizing: "AUTO",
357
+ itemSpacing: 8,
358
+ counterAxisAlign: "CENTER",
359
+ children: [
360
+ {
361
+ name: "Circle",
362
+ kind: "ellipse",
363
+ width: 16,
364
+ height: 16,
365
+ strokeSemantic: "color/semantic/border/default",
366
+ strokeWeight: 1.5,
367
+ fillSemantic: "color/semantic/field/bg/default",
368
+ },
369
+ {
370
+ name: "Label",
371
+ kind: "text",
372
+ textContent: "Radio label",
373
+ textPreset: "body/md",
374
+ textFillSemantic: "color/semantic/text/primary",
375
+ },
376
+ ],
377
+ },
378
+ variantProperties: [
379
+ { name: "State", values: ["Default", "Selected", "Disabled"], defaultValue: "Default" },
380
+ ],
381
+ tokenBindings: [],
382
+ };
383
+
384
+ const CARD: ComponentBlueprint = {
385
+ name: "Card",
386
+ category: "core",
387
+ description: "Content card with media slot, heading, body, and footer",
388
+ root: {
389
+ name: "Card",
390
+ kind: "frame",
391
+ width: 320,
392
+ layoutMode: "VERTICAL",
393
+ primaryAxisSizing: "AUTO",
394
+ counterAxisSizing: "FIXED",
395
+ cornerRadius: 12,
396
+ fillSemantic: "color/semantic/surface/raised",
397
+ strokeSemantic: "color/semantic/border/default",
398
+ strokeWeight: 1,
399
+ children: [
400
+ {
401
+ name: "Media",
402
+ kind: "rect",
403
+ width: 320,
404
+ height: 180,
405
+ fillSemantic: "color/semantic/surface/subtle",
406
+ },
407
+ {
408
+ name: "Content",
409
+ kind: "frame",
410
+ layoutMode: "VERTICAL",
411
+ primaryAxisSizing: "AUTO",
412
+ counterAxisSizing: "AUTO",
413
+ paddingX: 16,
414
+ paddingY: 16,
415
+ itemSpacing: 8,
416
+ children: [
417
+ {
418
+ name: "Heading",
419
+ kind: "text",
420
+ textContent: "Card Title",
421
+ textPreset: "heading/h4",
422
+ textFillSemantic: "color/semantic/text/primary",
423
+ },
424
+ {
425
+ name: "Body",
426
+ kind: "text",
427
+ textContent: "Card description text goes here with supporting details.",
428
+ textPreset: "body/md",
429
+ textFillSemantic: "color/semantic/text/secondary",
430
+ },
431
+ ],
432
+ },
433
+ {
434
+ name: "Footer",
435
+ kind: "frame",
436
+ layoutMode: "HORIZONTAL",
437
+ primaryAxisSizing: "AUTO",
438
+ counterAxisSizing: "AUTO",
439
+ paddingX: 16,
440
+ paddingY: 12,
441
+ itemSpacing: 8,
442
+ primaryAxisAlign: "MAX",
443
+ children: [
444
+ {
445
+ name: "Action",
446
+ kind: "text",
447
+ textContent: "Learn more",
448
+ textPreset: "label/md",
449
+ textFillSemantic: "color/semantic/actions/primary/bg/default",
450
+ },
451
+ ],
452
+ },
453
+ ],
454
+ },
455
+ variantProperties: [
456
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
457
+ { name: "Elevated", values: ["true", "false"], defaultValue: "false" },
458
+ ],
459
+ tokenBindings: [
460
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/raised" },
461
+ { nodePath: "", property: "strokes", semanticToken: "color/semantic/border/default" },
462
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/surface/default" },
463
+ ],
464
+ };
465
+
466
+ const MODAL: ComponentBlueprint = {
467
+ name: "Modal",
468
+ category: "overlay",
469
+ description: "Dialog modal with header, content, and footer buttons",
470
+ root: {
471
+ name: "Modal",
472
+ kind: "frame",
473
+ width: 480,
474
+ layoutMode: "VERTICAL",
475
+ primaryAxisSizing: "AUTO",
476
+ counterAxisSizing: "FIXED",
477
+ cornerRadius: 16,
478
+ fillSemantic: "color/semantic/surface/overlay",
479
+ effects: [{
480
+ type: "DROP_SHADOW",
481
+ color: { r: 0, g: 0, b: 0, a: 0.12 },
482
+ offset: { x: 0, y: 8 },
483
+ radius: 24,
484
+ spread: 0,
485
+ }],
486
+ children: [
487
+ {
488
+ name: "Header",
489
+ kind: "frame",
490
+ layoutMode: "HORIZONTAL",
491
+ primaryAxisSizing: "AUTO",
492
+ counterAxisSizing: "AUTO",
493
+ paddingX: 24,
494
+ paddingY: 20,
495
+ primaryAxisAlign: "SPACE_BETWEEN",
496
+ counterAxisAlign: "CENTER",
497
+ children: [
498
+ {
499
+ name: "Title",
500
+ kind: "text",
501
+ textContent: "Modal Title",
502
+ textPreset: "heading/h4",
503
+ textFillSemantic: "color/semantic/text/primary",
504
+ },
505
+ {
506
+ name: "CloseBtn",
507
+ kind: "frame",
508
+ width: 24,
509
+ height: 24,
510
+ cornerRadius: 4,
511
+ fillSemantic: "color/semantic/surface/subtle",
512
+ },
513
+ ],
514
+ },
515
+ {
516
+ name: "Content",
517
+ kind: "frame",
518
+ layoutMode: "VERTICAL",
519
+ primaryAxisSizing: "AUTO",
520
+ counterAxisSizing: "AUTO",
521
+ paddingX: 24,
522
+ paddingY: 16,
523
+ itemSpacing: 12,
524
+ children: [
525
+ {
526
+ name: "Body",
527
+ kind: "text",
528
+ textContent: "Modal content goes here. This is a placeholder for the dialog body.",
529
+ textPreset: "body/md",
530
+ textFillSemantic: "color/semantic/text/secondary",
531
+ },
532
+ ],
533
+ },
534
+ {
535
+ name: "Footer",
536
+ kind: "frame",
537
+ layoutMode: "HORIZONTAL",
538
+ primaryAxisSizing: "AUTO",
539
+ counterAxisSizing: "AUTO",
540
+ paddingX: 24,
541
+ paddingY: 16,
542
+ itemSpacing: 12,
543
+ primaryAxisAlign: "MAX",
544
+ children: [
545
+ {
546
+ name: "SecondaryBtn",
547
+ kind: "frame",
548
+ width: 80,
549
+ height: 36,
550
+ cornerRadius: 8,
551
+ layoutMode: "HORIZONTAL",
552
+ primaryAxisAlign: "CENTER",
553
+ counterAxisAlign: "CENTER",
554
+ strokeSemantic: "color/semantic/border/default",
555
+ strokeWeight: 1,
556
+ fillSemantic: "color/semantic/surface/default",
557
+ children: [{
558
+ name: "SecondaryLabel",
559
+ kind: "text",
560
+ textContent: "Cancel",
561
+ textPreset: "label/md",
562
+ textFillSemantic: "color/semantic/text/primary",
563
+ }],
564
+ },
565
+ {
566
+ name: "PrimaryBtn",
567
+ kind: "frame",
568
+ width: 80,
569
+ height: 36,
570
+ cornerRadius: 8,
571
+ layoutMode: "HORIZONTAL",
572
+ primaryAxisAlign: "CENTER",
573
+ counterAxisAlign: "CENTER",
574
+ fillSemantic: "color/semantic/actions/primary/bg/default",
575
+ children: [{
576
+ name: "PrimaryLabel",
577
+ kind: "text",
578
+ textContent: "Confirm",
579
+ textPreset: "label/md",
580
+ textFillSemantic: "color/semantic/text/on-color",
581
+ }],
582
+ },
583
+ ],
584
+ },
585
+ ],
586
+ },
587
+ variantProperties: [
588
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
589
+ ],
590
+ tokenBindings: [],
591
+ };
592
+
593
+ const TOAST: ComponentBlueprint = {
594
+ name: "Toast",
595
+ category: "feedback",
596
+ description: "Notification toast with status icon, message, and close button",
597
+ root: {
598
+ name: "Toast",
599
+ kind: "frame",
600
+ width: 360,
601
+ height: 56,
602
+ layoutMode: "HORIZONTAL",
603
+ primaryAxisAlign: "MIN",
604
+ counterAxisAlign: "CENTER",
605
+ primaryAxisSizing: "FIXED",
606
+ counterAxisSizing: "FIXED",
607
+ paddingX: 16,
608
+ paddingY: 12,
609
+ itemSpacing: 12,
610
+ cornerRadius: 8,
611
+ fillSemantic: "color/semantic/feedback/success/bg",
612
+ children: [
613
+ {
614
+ name: "StatusIcon",
615
+ kind: "frame",
616
+ width: 20,
617
+ height: 20,
618
+ fillSemantic: "color/semantic/feedback/success/text",
619
+ iconSlot: { defaultIcon: "icon/status/info", required: true, size: "sm", colorToken: "color/semantic/feedback/success/text", decorative: false },
620
+ },
621
+ {
622
+ name: "Message",
623
+ kind: "text",
624
+ textContent: "Operation completed successfully.",
625
+ textPreset: "body/sm",
626
+ textFillSemantic: "color/semantic/feedback/success/text",
627
+ },
628
+ {
629
+ name: "CloseIcon",
630
+ kind: "frame",
631
+ width: 16,
632
+ height: 16,
633
+ fillSemantic: "color/semantic/icon/secondary",
634
+ iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false },
635
+ },
636
+ ],
637
+ },
638
+ variantProperties: [
639
+ { name: "Type", values: ["Success", "Warning", "Error", "Info"], defaultValue: "Success" },
640
+ ],
641
+ tokenBindings: [],
642
+ iconSlots: [
643
+ { nodePath: "StatusIcon", propName: "statusIcon", defaultIcon: "icon/status/info", required: true },
644
+ { nodePath: "CloseIcon", propName: "closeIcon", defaultIcon: "icon/action/close", required: false },
645
+ ],
646
+ };
647
+
648
+ const BADGE: ComponentBlueprint = {
649
+ name: "Badge",
650
+ category: "core",
651
+ description: "Status badge with label",
652
+ root: {
653
+ name: "Badge",
654
+ kind: "frame",
655
+ layoutMode: "HORIZONTAL",
656
+ primaryAxisSizing: "AUTO",
657
+ counterAxisSizing: "AUTO",
658
+ paddingX: 8,
659
+ paddingY: 2,
660
+ cornerRadius: 9999,
661
+ fillSemantic: "color/semantic/actions/primary/bg/default",
662
+ primaryAxisAlign: "CENTER",
663
+ counterAxisAlign: "CENTER",
664
+ children: [
665
+ {
666
+ name: "Label",
667
+ kind: "text",
668
+ textContent: "Badge",
669
+ textPreset: "label/sm",
670
+ textFillSemantic: "color/semantic/text/on-color",
671
+ },
672
+ ],
673
+ },
674
+ variantProperties: [
675
+ { name: "Type", values: ["Default", "Success", "Warning", "Error", "Info"], defaultValue: "Default" },
676
+ { name: "Size", values: ["sm", "md"], defaultValue: "sm" },
677
+ ],
678
+ tokenBindings: [],
679
+ };
680
+
681
+ const AVATAR: ComponentBlueprint = {
682
+ name: "Avatar",
683
+ category: "core",
684
+ description: "Avatar with image placeholder and status indicator",
685
+ root: {
686
+ name: "Avatar",
687
+ kind: "frame",
688
+ width: 40,
689
+ height: 40,
690
+ cornerRadius: 9999,
691
+ fillSemantic: "color/semantic/surface/subtle",
692
+ children: [
693
+ {
694
+ name: "Initials",
695
+ kind: "text",
696
+ textContent: "AB",
697
+ textPreset: "label/md",
698
+ textFillSemantic: "color/semantic/text/secondary",
699
+ },
700
+ {
701
+ name: "StatusDot",
702
+ kind: "ellipse",
703
+ width: 10,
704
+ height: 10,
705
+ fillSemantic: "color/semantic/feedback/success/text",
706
+ },
707
+ ],
708
+ },
709
+ variantProperties: [
710
+ { name: "Size", values: ["sm", "md", "lg", "xl"], defaultValue: "md" },
711
+ ],
712
+ tokenBindings: [],
713
+ };
714
+
715
+ const TOOLTIP: ComponentBlueprint = {
716
+ name: "Tooltip",
717
+ category: "overlay",
718
+ description: "Tooltip with content text and arrow",
719
+ root: {
720
+ name: "Tooltip",
721
+ kind: "frame",
722
+ layoutMode: "HORIZONTAL",
723
+ primaryAxisSizing: "AUTO",
724
+ counterAxisSizing: "AUTO",
725
+ paddingX: 12,
726
+ paddingY: 8,
727
+ cornerRadius: 6,
728
+ fillSemantic: "color/semantic/surface/inverse",
729
+ children: [
730
+ {
731
+ name: "Content",
732
+ kind: "text",
733
+ textContent: "Tooltip text",
734
+ textPreset: "body/sm",
735
+ textFillSemantic: "color/semantic/text/inverse",
736
+ },
737
+ ],
738
+ },
739
+ variantProperties: [],
740
+ tokenBindings: [],
741
+ };
742
+
743
+ const TABS: ComponentBlueprint = {
744
+ name: "Tabs",
745
+ category: "navigation",
746
+ description: "Tab bar with active indicator",
747
+ root: {
748
+ name: "Tabs",
749
+ kind: "frame",
750
+ width: 400,
751
+ height: 40,
752
+ layoutMode: "HORIZONTAL",
753
+ primaryAxisSizing: "FIXED",
754
+ counterAxisSizing: "FIXED",
755
+ itemSpacing: 0,
756
+ strokeSemantic: "color/semantic/border/subtle",
757
+ strokeWeight: 1,
758
+ children: [
759
+ {
760
+ name: "Tab1",
761
+ kind: "frame",
762
+ layoutMode: "HORIZONTAL",
763
+ primaryAxisSizing: "AUTO",
764
+ counterAxisSizing: "AUTO",
765
+ paddingX: 16,
766
+ paddingY: 8,
767
+ primaryAxisAlign: "CENTER",
768
+ counterAxisAlign: "CENTER",
769
+ children: [{
770
+ name: "Tab1Label",
771
+ kind: "text",
772
+ textContent: "Tab One",
773
+ textPreset: "label/md",
774
+ textFillSemantic: "color/semantic/actions/primary/bg/default",
775
+ }],
776
+ },
777
+ {
778
+ name: "Tab2",
779
+ kind: "frame",
780
+ layoutMode: "HORIZONTAL",
781
+ primaryAxisSizing: "AUTO",
782
+ counterAxisSizing: "AUTO",
783
+ paddingX: 16,
784
+ paddingY: 8,
785
+ primaryAxisAlign: "CENTER",
786
+ counterAxisAlign: "CENTER",
787
+ children: [{
788
+ name: "Tab2Label",
789
+ kind: "text",
790
+ textContent: "Tab Two",
791
+ textPreset: "label/md",
792
+ textFillSemantic: "color/semantic/text/secondary",
793
+ }],
794
+ },
795
+ {
796
+ name: "Tab3",
797
+ kind: "frame",
798
+ layoutMode: "HORIZONTAL",
799
+ primaryAxisSizing: "AUTO",
800
+ counterAxisSizing: "AUTO",
801
+ paddingX: 16,
802
+ paddingY: 8,
803
+ primaryAxisAlign: "CENTER",
804
+ counterAxisAlign: "CENTER",
805
+ children: [{
806
+ name: "Tab3Label",
807
+ kind: "text",
808
+ textContent: "Tab Three",
809
+ textPreset: "label/md",
810
+ textFillSemantic: "color/semantic/text/secondary",
811
+ }],
812
+ },
813
+ ],
814
+ },
815
+ variantProperties: [],
816
+ tokenBindings: [],
817
+ };
818
+
819
+ const BREADCRUMB: ComponentBlueprint = {
820
+ name: "Breadcrumb",
821
+ category: "navigation",
822
+ description: "Breadcrumb navigation with separator",
823
+ root: {
824
+ name: "Breadcrumb",
825
+ kind: "frame",
826
+ layoutMode: "HORIZONTAL",
827
+ primaryAxisSizing: "AUTO",
828
+ counterAxisSizing: "AUTO",
829
+ itemSpacing: 8,
830
+ counterAxisAlign: "CENTER",
831
+ children: [
832
+ {
833
+ name: "Crumb1",
834
+ kind: "text",
835
+ textContent: "Home",
836
+ textPreset: "body/sm",
837
+ textFillSemantic: "color/semantic/actions/primary/bg/default",
838
+ },
839
+ {
840
+ name: "Sep1",
841
+ kind: "text",
842
+ textContent: "/",
843
+ textPreset: "body/sm",
844
+ textFillSemantic: "color/semantic/text/tertiary",
845
+ },
846
+ {
847
+ name: "Crumb2",
848
+ kind: "text",
849
+ textContent: "Category",
850
+ textPreset: "body/sm",
851
+ textFillSemantic: "color/semantic/actions/primary/bg/default",
852
+ },
853
+ {
854
+ name: "Sep2",
855
+ kind: "text",
856
+ textContent: "/",
857
+ textPreset: "body/sm",
858
+ textFillSemantic: "color/semantic/text/tertiary",
859
+ },
860
+ {
861
+ name: "Current",
862
+ kind: "text",
863
+ textContent: "Current Page",
864
+ textPreset: "body/sm",
865
+ textFillSemantic: "color/semantic/text/primary",
866
+ },
867
+ ],
868
+ },
869
+ variantProperties: [],
870
+ tokenBindings: [],
871
+ };
872
+
873
+ const TAG: ComponentBlueprint = {
874
+ name: "Tag",
875
+ category: "core",
876
+ description: "Tag/chip with optional icon and remove button",
877
+ root: {
878
+ name: "Tag",
879
+ kind: "frame",
880
+ layoutMode: "HORIZONTAL",
881
+ primaryAxisSizing: "AUTO",
882
+ counterAxisSizing: "AUTO",
883
+ paddingX: 8,
884
+ paddingY: 4,
885
+ itemSpacing: 4,
886
+ cornerRadius: 6,
887
+ counterAxisAlign: "CENTER",
888
+ fillSemantic: "color/semantic/surface/subtle",
889
+ strokeSemantic: "color/semantic/border/default",
890
+ strokeWeight: 1,
891
+ children: [
892
+ {
893
+ name: "Label",
894
+ kind: "text",
895
+ textContent: "Tag",
896
+ textPreset: "label/sm",
897
+ textFillSemantic: "color/semantic/text/primary",
898
+ },
899
+ {
900
+ name: "RemoveIcon",
901
+ kind: "frame",
902
+ width: 12,
903
+ height: 12,
904
+ fillSemantic: "color/semantic/icon/secondary",
905
+ iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false },
906
+ },
907
+ ],
908
+ },
909
+ variantProperties: [
910
+ { name: "Type", values: ["Default", "Success", "Warning"], defaultValue: "Default" },
911
+ { name: "Removable", values: ["true", "false"], defaultValue: "true" },
912
+ ],
913
+ tokenBindings: [],
914
+ iconSlots: [
915
+ { nodePath: "RemoveIcon", propName: "removeIcon", defaultIcon: "icon/action/close", required: false },
916
+ ],
917
+ };
918
+
919
+ const NAVBAR: ComponentBlueprint = {
920
+ name: "NavBar",
921
+ category: "navigation",
922
+ description: "Top navigation bar with logo, nav items, and actions",
923
+ root: {
924
+ name: "NavBar",
925
+ kind: "frame",
926
+ width: 1440,
927
+ height: 64,
928
+ layoutMode: "HORIZONTAL",
929
+ primaryAxisAlign: "SPACE_BETWEEN",
930
+ counterAxisAlign: "CENTER",
931
+ primaryAxisSizing: "FIXED",
932
+ counterAxisSizing: "FIXED",
933
+ paddingX: 32,
934
+ paddingY: 16,
935
+ fillSemantic: "color/semantic/surface/default",
936
+ strokeSemantic: "color/semantic/border/subtle",
937
+ strokeWeight: 1,
938
+ children: [
939
+ {
940
+ name: "Logo",
941
+ kind: "frame",
942
+ width: 120,
943
+ height: 32,
944
+ fillSemantic: "color/semantic/actions/primary/bg/default",
945
+ cornerRadius: 4,
946
+ },
947
+ {
948
+ name: "NavItems",
949
+ kind: "frame",
950
+ layoutMode: "HORIZONTAL",
951
+ primaryAxisSizing: "AUTO",
952
+ counterAxisSizing: "AUTO",
953
+ itemSpacing: 24,
954
+ children: [
955
+ { name: "Nav1", kind: "text", textContent: "Dashboard", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
956
+ { name: "Nav2", kind: "text", textContent: "Projects", textPreset: "label/md", textFillSemantic: "color/semantic/text/secondary" },
957
+ { name: "Nav3", kind: "text", textContent: "Settings", textPreset: "label/md", textFillSemantic: "color/semantic/text/secondary" },
958
+ ],
959
+ },
960
+ {
961
+ name: "Actions",
962
+ kind: "frame",
963
+ layoutMode: "HORIZONTAL",
964
+ primaryAxisSizing: "AUTO",
965
+ counterAxisSizing: "AUTO",
966
+ itemSpacing: 12,
967
+ counterAxisAlign: "CENTER",
968
+ children: [
969
+ {
970
+ name: "AvatarSlot",
971
+ kind: "ellipse",
972
+ width: 32,
973
+ height: 32,
974
+ fillSemantic: "color/semantic/surface/subtle",
975
+ },
976
+ ],
977
+ },
978
+ ],
979
+ },
980
+ variantProperties: [],
981
+ tokenBindings: [],
982
+ };
983
+
984
+ const TABLE: ComponentBlueprint = {
985
+ name: "Table",
986
+ category: "data",
987
+ description: "Data table with header row and body rows",
988
+ root: {
989
+ name: "Table",
990
+ kind: "frame",
991
+ width: 800,
992
+ layoutMode: "VERTICAL",
993
+ primaryAxisSizing: "AUTO",
994
+ counterAxisSizing: "FIXED",
995
+ cornerRadius: 8,
996
+ fillSemantic: "color/semantic/surface/default",
997
+ strokeSemantic: "color/semantic/border/default",
998
+ strokeWeight: 1,
999
+ children: [
1000
+ {
1001
+ name: "HeaderRow",
1002
+ kind: "frame",
1003
+ layoutMode: "HORIZONTAL",
1004
+ primaryAxisSizing: "AUTO",
1005
+ counterAxisSizing: "AUTO",
1006
+ paddingX: 16,
1007
+ paddingY: 12,
1008
+ fillSemantic: "color/semantic/surface/subtle",
1009
+ children: [
1010
+ { name: "Col1H", kind: "text", textContent: "Name", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary", width: 200 },
1011
+ { name: "Col2H", kind: "text", textContent: "Status", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary", width: 120 },
1012
+ { name: "Col3H", kind: "text", textContent: "Date", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary", width: 120 },
1013
+ { name: "Col4H", kind: "text", textContent: "Actions", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary", width: 100 },
1014
+ ],
1015
+ },
1016
+ {
1017
+ name: "Row1",
1018
+ kind: "frame",
1019
+ layoutMode: "HORIZONTAL",
1020
+ primaryAxisSizing: "AUTO",
1021
+ counterAxisSizing: "AUTO",
1022
+ paddingX: 16,
1023
+ paddingY: 12,
1024
+ strokeSemantic: "color/semantic/border/subtle",
1025
+ strokeWeight: 1,
1026
+ children: [
1027
+ { name: "Col1R1", kind: "text", textContent: "Item name", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary", width: 200 },
1028
+ { name: "Col2R1", kind: "text", textContent: "Active", textPreset: "body/sm", textFillSemantic: "color/semantic/feedback/success/text", width: 120 },
1029
+ { name: "Col3R1", kind: "text", textContent: "Mar 21, 2026", textPreset: "body/sm", textFillSemantic: "color/semantic/text/secondary", width: 120 },
1030
+ { name: "Col4R1", kind: "text", textContent: "Edit", textPreset: "body/sm", textFillSemantic: "color/semantic/actions/primary/bg/default", width: 100 },
1031
+ ],
1032
+ },
1033
+ {
1034
+ name: "Row2",
1035
+ kind: "frame",
1036
+ layoutMode: "HORIZONTAL",
1037
+ primaryAxisSizing: "AUTO",
1038
+ counterAxisSizing: "AUTO",
1039
+ paddingX: 16,
1040
+ paddingY: 12,
1041
+ fillSemantic: "color/semantic/surface/subtle",
1042
+ children: [
1043
+ { name: "Col1R2", kind: "text", textContent: "Another item", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary", width: 200 },
1044
+ { name: "Col2R2", kind: "text", textContent: "Pending", textPreset: "body/sm", textFillSemantic: "color/semantic/feedback/warning/text", width: 120 },
1045
+ { name: "Col3R2", kind: "text", textContent: "Mar 20, 2026", textPreset: "body/sm", textFillSemantic: "color/semantic/text/secondary", width: 120 },
1046
+ { name: "Col4R2", kind: "text", textContent: "Edit", textPreset: "body/sm", textFillSemantic: "color/semantic/actions/primary/bg/default", width: 100 },
1047
+ ],
1048
+ },
1049
+ ],
1050
+ },
1051
+ variantProperties: [],
1052
+ tokenBindings: [],
1053
+ };
1054
+
1055
+ // ─── Batch 1: Gap-fill blueprints ───────────────────────────────────────────
1056
+
1057
+ const ACCORDION: ComponentBlueprint = {
1058
+ name: "Accordion",
1059
+ category: "data",
1060
+ description: "Expandable content sections with header triggers",
1061
+ root: {
1062
+ name: "Accordion",
1063
+ kind: "frame",
1064
+ width: 400,
1065
+ layoutMode: "VERTICAL",
1066
+ primaryAxisSizing: "AUTO",
1067
+ counterAxisSizing: "FIXED",
1068
+ cornerRadius: 8,
1069
+ strokeSemantic: "color/semantic/border/default",
1070
+ strokeWeight: 1,
1071
+ children: [
1072
+ {
1073
+ name: "Item1",
1074
+ kind: "frame",
1075
+ layoutMode: "VERTICAL",
1076
+ primaryAxisSizing: "AUTO",
1077
+ counterAxisSizing: "AUTO",
1078
+ children: [
1079
+ {
1080
+ name: "Header",
1081
+ kind: "frame",
1082
+ layoutMode: "HORIZONTAL",
1083
+ primaryAxisAlign: "SPACE_BETWEEN",
1084
+ counterAxisAlign: "CENTER",
1085
+ primaryAxisSizing: "AUTO",
1086
+ counterAxisSizing: "FIXED",
1087
+ height: 48,
1088
+ paddingX: 16,
1089
+ paddingY: 12,
1090
+ fillSemantic: "color/semantic/surface/default",
1091
+ children: [
1092
+ { name: "Title", kind: "text", textContent: "Section title", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
1093
+ { name: "Chevron", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/navigation/expand-more", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1094
+ ],
1095
+ },
1096
+ {
1097
+ name: "Content",
1098
+ kind: "frame",
1099
+ layoutMode: "VERTICAL",
1100
+ primaryAxisSizing: "AUTO",
1101
+ counterAxisSizing: "AUTO",
1102
+ paddingX: 16,
1103
+ paddingY: 12,
1104
+ children: [
1105
+ { name: "Body", kind: "text", textContent: "Accordion content goes here. This area expands and collapses.", textPreset: "body/sm", textFillSemantic: "color/semantic/text/secondary" },
1106
+ ],
1107
+ },
1108
+ ],
1109
+ },
1110
+ ],
1111
+ },
1112
+ variantProperties: [
1113
+ { name: "State", values: ["Collapsed", "Expanded"], defaultValue: "Collapsed" },
1114
+ { name: "Type", values: ["Default", "Bordered", "Flush"], defaultValue: "Default" },
1115
+ ],
1116
+ tokenBindings: [
1117
+ { nodePath: "Item1.Header", property: "fills", semanticToken: "color/semantic/surface/default" },
1118
+ { nodePath: "Item1.Header.Title", property: "fills", semanticToken: "color/semantic/text/primary" },
1119
+ ],
1120
+ iconSlots: [
1121
+ { nodePath: "Item1.Header.Chevron", propName: "chevronIcon", defaultIcon: "icon/navigation/expand-more", required: true },
1122
+ ],
1123
+ };
1124
+
1125
+ const SLIDER: ComponentBlueprint = {
1126
+ name: "Slider",
1127
+ category: "forms",
1128
+ description: "Range input control with track, fill, and draggable thumb",
1129
+ root: {
1130
+ name: "Slider",
1131
+ kind: "frame",
1132
+ width: 280,
1133
+ layoutMode: "VERTICAL",
1134
+ primaryAxisSizing: "AUTO",
1135
+ counterAxisSizing: "FIXED",
1136
+ itemSpacing: 8,
1137
+ children: [
1138
+ {
1139
+ name: "LabelRow",
1140
+ kind: "frame",
1141
+ layoutMode: "HORIZONTAL",
1142
+ primaryAxisAlign: "SPACE_BETWEEN",
1143
+ primaryAxisSizing: "AUTO",
1144
+ counterAxisSizing: "AUTO",
1145
+ children: [
1146
+ { name: "Label", kind: "text", textContent: "Volume", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1147
+ { name: "Value", kind: "text", textContent: "50", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" },
1148
+ ],
1149
+ },
1150
+ {
1151
+ name: "TrackContainer",
1152
+ kind: "frame",
1153
+ height: 24,
1154
+ layoutMode: "HORIZONTAL",
1155
+ counterAxisAlign: "CENTER",
1156
+ primaryAxisSizing: "AUTO",
1157
+ counterAxisSizing: "FIXED",
1158
+ children: [
1159
+ { name: "Track", kind: "rect", width: 280, height: 4, cornerRadius: 2, fillSemantic: "color/semantic/border/default" },
1160
+ { name: "Fill", kind: "rect", width: 140, height: 4, cornerRadius: 2, fillSemantic: "color/semantic/actions/primary/bg/default" },
1161
+ { name: "Thumb", kind: "ellipse", width: 20, height: 20, fillSemantic: "color/semantic/surface/default", strokeSemantic: "color/semantic/actions/primary/bg/default", strokeWeight: 2 },
1162
+ ],
1163
+ },
1164
+ ],
1165
+ },
1166
+ variantProperties: [
1167
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
1168
+ { name: "State", values: ["Default", "Hover", "Active", "Disabled"], defaultValue: "Default" },
1169
+ ],
1170
+ tokenBindings: [
1171
+ { nodePath: "TrackContainer.Fill", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1172
+ { nodePath: "TrackContainer.Thumb", property: "strokes", semanticToken: "color/semantic/actions/primary/bg/default" },
1173
+ { nodePath: "TrackContainer.Track", property: "fills", semanticToken: "color/semantic/border/default" },
1174
+ ],
1175
+ };
1176
+
1177
+ const ALERT: ComponentBlueprint = {
1178
+ name: "Alert",
1179
+ category: "feedback",
1180
+ description: "Contextual feedback message with icon, title, body, and actions",
1181
+ root: {
1182
+ name: "Alert",
1183
+ kind: "frame",
1184
+ width: 400,
1185
+ layoutMode: "HORIZONTAL",
1186
+ primaryAxisSizing: "AUTO",
1187
+ counterAxisSizing: "FIXED",
1188
+ paddingX: 16,
1189
+ paddingY: 12,
1190
+ itemSpacing: 12,
1191
+ cornerRadius: 8,
1192
+ fillSemantic: "color/semantic/feedback/info/bg",
1193
+ strokeSemantic: "color/semantic/border/default",
1194
+ strokeWeight: 1,
1195
+ children: [
1196
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/feedback/info/text", iconSlot: { defaultIcon: "icon/status/info", required: true, size: "sm", colorToken: "color/semantic/feedback/info/text", decorative: false } },
1197
+ {
1198
+ name: "Content",
1199
+ kind: "frame",
1200
+ layoutMode: "VERTICAL",
1201
+ primaryAxisSizing: "AUTO",
1202
+ counterAxisSizing: "AUTO",
1203
+ itemSpacing: 4,
1204
+ children: [
1205
+ { name: "Title", kind: "text", textContent: "Information", textPreset: "label/md", textFillSemantic: "color/semantic/feedback/info/text" },
1206
+ { name: "Message", kind: "text", textContent: "This is an informational alert message.", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" },
1207
+ ],
1208
+ },
1209
+ { name: "Close", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false } },
1210
+ ],
1211
+ },
1212
+ variantProperties: [
1213
+ { name: "Type", values: ["info", "success", "warning", "error"], defaultValue: "info" },
1214
+ { name: "Dismissible", values: ["true", "false"], defaultValue: "true" },
1215
+ ],
1216
+ tokenBindings: [
1217
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/feedback/info/bg" },
1218
+ { nodePath: "Content.Title", property: "fills", semanticToken: "color/semantic/feedback/info/text" },
1219
+ { nodePath: "Icon", property: "fills", semanticToken: "color/semantic/feedback/info/text" },
1220
+ ],
1221
+ iconSlots: [
1222
+ { nodePath: "Icon", propName: "statusIcon", defaultIcon: "icon/status/info", required: true },
1223
+ { nodePath: "Close", propName: "closeIcon", defaultIcon: "icon/action/close", required: false },
1224
+ ],
1225
+ };
1226
+
1227
+ const CHIP: ComponentBlueprint = {
1228
+ name: "Chip",
1229
+ category: "core",
1230
+ description: "Compact interactive element for filtering, selection, or metadata display",
1231
+ root: {
1232
+ name: "Chip",
1233
+ kind: "frame",
1234
+ height: 32,
1235
+ layoutMode: "HORIZONTAL",
1236
+ primaryAxisAlign: "CENTER",
1237
+ counterAxisAlign: "CENTER",
1238
+ primaryAxisSizing: "AUTO",
1239
+ counterAxisSizing: "FIXED",
1240
+ paddingX: 12,
1241
+ itemSpacing: 6,
1242
+ cornerRadius: 16,
1243
+ fillSemantic: "color/semantic/surface/subtle",
1244
+ children: [
1245
+ { name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/settings", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1246
+ { name: "Label", kind: "text", textContent: "Chip label", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1247
+ { name: "Close", kind: "frame", width: 14, height: 14, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false } },
1248
+ ],
1249
+ },
1250
+ variantProperties: [
1251
+ { name: "Type", values: ["Filter", "Input", "Suggestion"], defaultValue: "Filter" },
1252
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
1253
+ { name: "State", values: ["Default", "Selected", "Hover", "Disabled"], defaultValue: "Default" },
1254
+ ],
1255
+ tokenBindings: [
1256
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/subtle" },
1257
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/pill" },
1258
+ { nodePath: "Label", property: "fills", semanticToken: "color/semantic/text/primary" },
1259
+ ],
1260
+ iconSlots: [
1261
+ { nodePath: "Icon", propName: "leadingIcon", defaultIcon: "icon/action/settings", required: false },
1262
+ { nodePath: "Close", propName: "closeIcon", defaultIcon: "icon/action/close", required: false },
1263
+ ],
1264
+ };
1265
+
1266
+ const PROGRESS: ComponentBlueprint = {
1267
+ name: "Progress",
1268
+ category: "feedback",
1269
+ description: "Determinate or indeterminate progress indicator",
1270
+ root: {
1271
+ name: "Progress",
1272
+ kind: "frame",
1273
+ width: 280,
1274
+ layoutMode: "VERTICAL",
1275
+ primaryAxisSizing: "AUTO",
1276
+ counterAxisSizing: "FIXED",
1277
+ itemSpacing: 4,
1278
+ children: [
1279
+ {
1280
+ name: "LabelRow",
1281
+ kind: "frame",
1282
+ layoutMode: "HORIZONTAL",
1283
+ primaryAxisAlign: "SPACE_BETWEEN",
1284
+ primaryAxisSizing: "AUTO",
1285
+ counterAxisSizing: "AUTO",
1286
+ children: [
1287
+ { name: "Label", kind: "text", textContent: "Uploading...", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1288
+ { name: "Percentage", kind: "text", textContent: "65%", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" },
1289
+ ],
1290
+ },
1291
+ {
1292
+ name: "Track",
1293
+ kind: "rect",
1294
+ width: 280,
1295
+ height: 8,
1296
+ cornerRadius: 4,
1297
+ fillSemantic: "color/semantic/surface/subtle",
1298
+ },
1299
+ {
1300
+ name: "Fill",
1301
+ kind: "rect",
1302
+ width: 182,
1303
+ height: 8,
1304
+ cornerRadius: 4,
1305
+ fillSemantic: "color/semantic/actions/primary/bg/default",
1306
+ },
1307
+ ],
1308
+ },
1309
+ variantProperties: [
1310
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1311
+ { name: "Type", values: ["linear", "circular"], defaultValue: "linear" },
1312
+ ],
1313
+ tokenBindings: [
1314
+ { nodePath: "Track", property: "fills", semanticToken: "color/semantic/surface/subtle" },
1315
+ { nodePath: "Fill", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1316
+ ],
1317
+ };
1318
+
1319
+ const SIDENAVIGATION: ComponentBlueprint = {
1320
+ name: "SideNavigation",
1321
+ category: "navigation",
1322
+ description: "Vertical sidebar navigation with collapsible sections",
1323
+ root: {
1324
+ name: "SideNavigation",
1325
+ kind: "frame",
1326
+ width: 240,
1327
+ height: 600,
1328
+ layoutMode: "VERTICAL",
1329
+ primaryAxisSizing: "FIXED",
1330
+ counterAxisSizing: "FIXED",
1331
+ paddingY: 16,
1332
+ itemSpacing: 4,
1333
+ fillSemantic: "color/semantic/surface/default",
1334
+ strokeSemantic: "color/semantic/border/subtle",
1335
+ strokeWeight: 1,
1336
+ children: [
1337
+ {
1338
+ name: "SectionHeader",
1339
+ kind: "text",
1340
+ textContent: "MAIN",
1341
+ textPreset: "label/sm",
1342
+ textFillSemantic: "color/semantic/text/tertiary",
1343
+ },
1344
+ {
1345
+ name: "NavItem1",
1346
+ kind: "frame",
1347
+ layoutMode: "HORIZONTAL",
1348
+ primaryAxisSizing: "AUTO",
1349
+ counterAxisSizing: "AUTO",
1350
+ height: 40,
1351
+ paddingX: 12,
1352
+ counterAxisAlign: "CENTER",
1353
+ itemSpacing: 8,
1354
+ cornerRadius: 8,
1355
+ fillSemantic: "color/semantic/actions/primary/bg/default",
1356
+ children: [
1357
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/inverse", iconSlot: { defaultIcon: "icon/navigation/home", required: true, size: "sm", colorToken: "color/semantic/icon/inverse", decorative: true } },
1358
+ { name: "Label", kind: "text", textContent: "Dashboard", textPreset: "label/md", textFillSemantic: "color/semantic/text/on-color" },
1359
+ ],
1360
+ },
1361
+ {
1362
+ name: "NavItem2",
1363
+ kind: "frame",
1364
+ layoutMode: "HORIZONTAL",
1365
+ primaryAxisSizing: "AUTO",
1366
+ counterAxisSizing: "AUTO",
1367
+ height: 40,
1368
+ paddingX: 12,
1369
+ counterAxisAlign: "CENTER",
1370
+ itemSpacing: 8,
1371
+ cornerRadius: 8,
1372
+ children: [
1373
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/search", required: true, size: "sm", colorToken: "color/semantic/icon/secondary", decorative: true } },
1374
+ { name: "Label", kind: "text", textContent: "Projects", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
1375
+ ],
1376
+ },
1377
+ {
1378
+ name: "NavItem3",
1379
+ kind: "frame",
1380
+ layoutMode: "HORIZONTAL",
1381
+ primaryAxisSizing: "AUTO",
1382
+ counterAxisSizing: "AUTO",
1383
+ height: 40,
1384
+ paddingX: 12,
1385
+ counterAxisAlign: "CENTER",
1386
+ itemSpacing: 8,
1387
+ cornerRadius: 8,
1388
+ children: [
1389
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/social/person", required: true, size: "sm", colorToken: "color/semantic/icon/secondary", decorative: true } },
1390
+ { name: "Label", kind: "text", textContent: "Settings", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
1391
+ ],
1392
+ },
1393
+ ],
1394
+ },
1395
+ variantProperties: [
1396
+ { name: "State", values: ["Expanded", "Collapsed"], defaultValue: "Expanded" },
1397
+ ],
1398
+ tokenBindings: [
1399
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
1400
+ { nodePath: "NavItem1", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1401
+ ],
1402
+ iconSlots: [
1403
+ { nodePath: "NavItem1.Icon", propName: "navItem1Icon", defaultIcon: "icon/navigation/home", required: true },
1404
+ { nodePath: "NavItem2.Icon", propName: "navItem2Icon", defaultIcon: "icon/action/search", required: true },
1405
+ { nodePath: "NavItem3.Icon", propName: "navItem3Icon", defaultIcon: "icon/social/person", required: true },
1406
+ ],
1407
+ };
1408
+
1409
+ const ICON: ComponentBlueprint = {
1410
+ name: "Icon",
1411
+ category: "core",
1412
+ description: "SVG-based vector graphic primitive for visual communication and UI affordances",
1413
+ root: {
1414
+ name: "Icon",
1415
+ kind: "frame",
1416
+ width: 24,
1417
+ height: 24,
1418
+ layoutMode: "HORIZONTAL",
1419
+ primaryAxisAlign: "CENTER",
1420
+ counterAxisAlign: "CENTER",
1421
+ primaryAxisSizing: "FIXED",
1422
+ counterAxisSizing: "FIXED",
1423
+ children: [
1424
+ { name: "Vector", kind: "vector", width: 20, height: 20, fillSemantic: "color/semantic/icon/default" },
1425
+ ],
1426
+ },
1427
+ variantProperties: [
1428
+ { name: "Size", values: ["xs", "sm", "md", "lg", "xl"], defaultValue: "md" },
1429
+ { name: "Type", values: ["Filled", "Outlined"], defaultValue: "Filled" },
1430
+ { name: "Color", values: ["default", "primary", "secondary", "disabled", "inverse", "error", "success"], defaultValue: "default" },
1431
+ ],
1432
+ tokenBindings: [
1433
+ { nodePath: "Vector", property: "fills", semanticToken: "color/semantic/icon/default" },
1434
+ ],
1435
+ iconSlots: [],
1436
+ };
1437
+
1438
+ const LINK: ComponentBlueprint = {
1439
+ name: "Link",
1440
+ category: "core",
1441
+ description: "Navigational text element for routing between pages or external resources",
1442
+ root: {
1443
+ name: "Link",
1444
+ kind: "frame",
1445
+ layoutMode: "HORIZONTAL",
1446
+ primaryAxisSizing: "AUTO",
1447
+ counterAxisSizing: "AUTO",
1448
+ itemSpacing: 4,
1449
+ counterAxisAlign: "CENTER",
1450
+ children: [
1451
+ { name: "Label", kind: "text", textContent: "Learn more", textPreset: "body/md", textFillSemantic: "color/semantic/actions/primary/bg/default" },
1452
+ { name: "ExternalIcon", kind: "frame", width: 14, height: 14, fillSemantic: "color/semantic/actions/primary/bg/default", opacity: 0, iconSlot: { defaultIcon: "icon/action/open-in-new", required: false, size: "xs", colorToken: "color/semantic/actions/primary/bg/default", decorative: true } },
1453
+ ],
1454
+ },
1455
+ variantProperties: [
1456
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1457
+ { name: "Type", values: ["Standalone", "Inline"], defaultValue: "Standalone" },
1458
+ { name: "External", values: ["true", "false"], defaultValue: "false" },
1459
+ ],
1460
+ tokenBindings: [
1461
+ { nodePath: "Label", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1462
+ { nodePath: "ExternalIcon", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1463
+ ],
1464
+ iconSlots: [
1465
+ { nodePath: "ExternalIcon", propName: "externalIcon", defaultIcon: "icon/action/open-in-new", required: false },
1466
+ ],
1467
+ };
1468
+
1469
+ const MENU: ComponentBlueprint = {
1470
+ name: "Menu",
1471
+ category: "overlay",
1472
+ description: "Contextual action list triggered by a button or right-click",
1473
+ root: {
1474
+ name: "Menu",
1475
+ kind: "frame",
1476
+ width: 200,
1477
+ layoutMode: "VERTICAL",
1478
+ primaryAxisSizing: "AUTO",
1479
+ counterAxisSizing: "FIXED",
1480
+ paddingY: 4,
1481
+ cornerRadius: 8,
1482
+ fillSemantic: "color/semantic/surface/raised",
1483
+ strokeSemantic: "color/semantic/border/subtle",
1484
+ strokeWeight: 1,
1485
+ effects: [{ type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.12 }, offset: { x: 0, y: 4 }, radius: 16, spread: -2 }],
1486
+ children: [
1487
+ {
1488
+ name: "MenuItem1",
1489
+ kind: "frame",
1490
+ layoutMode: "HORIZONTAL",
1491
+ primaryAxisAlign: "MIN",
1492
+ counterAxisAlign: "CENTER",
1493
+ primaryAxisSizing: "AUTO",
1494
+ counterAxisSizing: "FIXED",
1495
+ height: 36,
1496
+ paddingX: 12,
1497
+ itemSpacing: 8,
1498
+ children: [
1499
+ { name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/settings", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1500
+ { name: "Label", kind: "text", textContent: "Edit", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" },
1501
+ { name: "Shortcut", kind: "text", textContent: "⌘E", textPreset: "body/sm", textFillSemantic: "color/semantic/text/tertiary" },
1502
+ ],
1503
+ },
1504
+ {
1505
+ name: "Divider",
1506
+ kind: "rect",
1507
+ height: 1,
1508
+ fillSemantic: "color/semantic/border/subtle",
1509
+ },
1510
+ {
1511
+ name: "MenuItem2",
1512
+ kind: "frame",
1513
+ layoutMode: "HORIZONTAL",
1514
+ primaryAxisAlign: "MIN",
1515
+ counterAxisAlign: "CENTER",
1516
+ primaryAxisSizing: "AUTO",
1517
+ counterAxisSizing: "FIXED",
1518
+ height: 36,
1519
+ paddingX: 12,
1520
+ itemSpacing: 8,
1521
+ children: [
1522
+ { name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/settings", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1523
+ { name: "Label", kind: "text", textContent: "Delete", textPreset: "body/sm", textFillSemantic: "color/semantic/feedback/danger/text" },
1524
+ ],
1525
+ },
1526
+ ],
1527
+ },
1528
+ variantProperties: [
1529
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1530
+ ],
1531
+ tokenBindings: [
1532
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/raised" },
1533
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/surface/default" },
1534
+ ],
1535
+ iconSlots: [
1536
+ { nodePath: "MenuItem1.Icon", propName: "menuItem1Icon", defaultIcon: "icon/action/settings", required: false },
1537
+ { nodePath: "MenuItem2.Icon", propName: "menuItem2Icon", defaultIcon: "icon/action/settings", required: false },
1538
+ ],
1539
+ };
1540
+
1541
+ const SPINNER: ComponentBlueprint = {
1542
+ name: "Spinner",
1543
+ category: "feedback",
1544
+ description: "Indeterminate loading indicator with circular animation",
1545
+ root: {
1546
+ name: "Spinner",
1547
+ kind: "frame",
1548
+ width: 32,
1549
+ height: 32,
1550
+ primaryAxisAlign: "CENTER",
1551
+ counterAxisAlign: "CENTER",
1552
+ children: [
1553
+ { name: "Track", kind: "ellipse", width: 32, height: 32, strokeSemantic: "color/semantic/border/default", strokeWeight: 3 },
1554
+ { name: "Indicator", kind: "ellipse", width: 32, height: 32, strokeSemantic: "color/semantic/actions/primary/bg/default", strokeWeight: 3 },
1555
+ ],
1556
+ },
1557
+ variantProperties: [
1558
+ { name: "Size", values: ["xs", "sm", "md", "lg", "xl"], defaultValue: "md" },
1559
+ ],
1560
+ tokenBindings: [
1561
+ { nodePath: "Track", property: "strokes", semanticToken: "color/semantic/border/default" },
1562
+ { nodePath: "Indicator", property: "strokes", semanticToken: "color/semantic/actions/primary/bg/default" },
1563
+ ],
1564
+ };
1565
+
1566
+ // ─── Batch 2: Tier 2 Forms ──────────────────────────────────────────────────
1567
+
1568
+ const TEXTAREA: ComponentBlueprint = {
1569
+ name: "Textarea",
1570
+ category: "forms",
1571
+ description: "Multi-line text input with label, helper text, and character counter",
1572
+ root: {
1573
+ name: "Textarea",
1574
+ kind: "frame",
1575
+ width: 320,
1576
+ layoutMode: "VERTICAL",
1577
+ primaryAxisSizing: "AUTO",
1578
+ counterAxisSizing: "FIXED",
1579
+ itemSpacing: 4,
1580
+ children: [
1581
+ { name: "Label", kind: "text", textContent: "Description", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1582
+ {
1583
+ name: "Field",
1584
+ kind: "frame",
1585
+ height: 120,
1586
+ layoutMode: "VERTICAL",
1587
+ primaryAxisAlign: "MIN",
1588
+ primaryAxisSizing: "FIXED",
1589
+ counterAxisSizing: "AUTO",
1590
+ paddingX: 12,
1591
+ paddingY: 8,
1592
+ cornerRadius: 6,
1593
+ fillSemantic: "color/semantic/field/bg/default",
1594
+ strokeSemantic: "color/semantic/field/border/default",
1595
+ strokeWeight: 1,
1596
+ children: [
1597
+ { name: "Value", kind: "text", textContent: "Enter your message here...", textPreset: "body/md", textFillSemantic: "color/semantic/text/tertiary" },
1598
+ ],
1599
+ },
1600
+ {
1601
+ name: "Footer",
1602
+ kind: "frame",
1603
+ layoutMode: "HORIZONTAL",
1604
+ primaryAxisAlign: "SPACE_BETWEEN",
1605
+ primaryAxisSizing: "AUTO",
1606
+ counterAxisSizing: "AUTO",
1607
+ children: [
1608
+ { name: "HelperText", kind: "text", textContent: "Optional helper text", textPreset: "body/sm", textFillSemantic: "color/semantic/text/tertiary" },
1609
+ { name: "Counter", kind: "text", textContent: "0/500", textPreset: "body/sm", textFillSemantic: "color/semantic/text/tertiary" },
1610
+ ],
1611
+ },
1612
+ ],
1613
+ },
1614
+ variantProperties: [
1615
+ { name: "State", values: ["Default", "Focused", "Filled", "Error", "Disabled", "ReadOnly"], defaultValue: "Default" },
1616
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1617
+ ],
1618
+ tokenBindings: [
1619
+ { nodePath: "Field", property: "fills", semanticToken: "color/semantic/field/bg/default" },
1620
+ { nodePath: "Field", property: "strokes", semanticToken: "color/semantic/field/border/default" },
1621
+ { nodePath: "Field", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
1622
+ ],
1623
+ };
1624
+
1625
+ const SEARCH: ComponentBlueprint = {
1626
+ name: "Search",
1627
+ category: "forms",
1628
+ description: "Search input with icon, clear action, and loading state",
1629
+ root: {
1630
+ name: "Search",
1631
+ kind: "frame",
1632
+ width: 320,
1633
+ layoutMode: "HORIZONTAL",
1634
+ primaryAxisAlign: "MIN",
1635
+ counterAxisAlign: "CENTER",
1636
+ primaryAxisSizing: "AUTO",
1637
+ counterAxisSizing: "FIXED",
1638
+ height: 40,
1639
+ paddingX: 12,
1640
+ itemSpacing: 8,
1641
+ cornerRadius: 8,
1642
+ fillSemantic: "color/semantic/field/bg/default",
1643
+ strokeSemantic: "color/semantic/field/border/default",
1644
+ strokeWeight: 1,
1645
+ children: [
1646
+ { name: "SearchIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/search", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1647
+ { name: "Value", kind: "text", textContent: "Search...", textPreset: "body/md", textFillSemantic: "color/semantic/text/tertiary" },
1648
+ { name: "ClearIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", opacity: 0, iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false } },
1649
+ ],
1650
+ },
1651
+ variantProperties: [
1652
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1653
+ { name: "State", values: ["Default", "Focused", "Searching", "Filled", "Disabled"], defaultValue: "Default" },
1654
+ ],
1655
+ tokenBindings: [
1656
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/field/bg/default" },
1657
+ { nodePath: "", property: "strokes", semanticToken: "color/semantic/field/border/default" },
1658
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
1659
+ ],
1660
+ iconSlots: [
1661
+ { nodePath: "SearchIcon", propName: "searchIcon", defaultIcon: "icon/action/search", required: true },
1662
+ { nodePath: "ClearIcon", propName: "clearIcon", defaultIcon: "icon/action/close", required: false },
1663
+ ],
1664
+ };
1665
+
1666
+ const COMBOBOX: ComponentBlueprint = {
1667
+ name: "Combobox",
1668
+ category: "forms",
1669
+ description: "Text input with dropdown suggestions and autocomplete filtering",
1670
+ root: {
1671
+ name: "Combobox",
1672
+ kind: "frame",
1673
+ width: 280,
1674
+ layoutMode: "VERTICAL",
1675
+ primaryAxisSizing: "AUTO",
1676
+ counterAxisSizing: "FIXED",
1677
+ itemSpacing: 4,
1678
+ children: [
1679
+ { name: "Label", kind: "text", textContent: "Country", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1680
+ {
1681
+ name: "Field",
1682
+ kind: "frame",
1683
+ height: 40,
1684
+ layoutMode: "HORIZONTAL",
1685
+ primaryAxisAlign: "SPACE_BETWEEN",
1686
+ counterAxisAlign: "CENTER",
1687
+ primaryAxisSizing: "AUTO",
1688
+ counterAxisSizing: "FIXED",
1689
+ paddingX: 12,
1690
+ cornerRadius: 6,
1691
+ fillSemantic: "color/semantic/field/bg/default",
1692
+ strokeSemantic: "color/semantic/field/border/default",
1693
+ strokeWeight: 1,
1694
+ children: [
1695
+ { name: "Value", kind: "text", textContent: "Type to search...", textPreset: "body/md", textFillSemantic: "color/semantic/text/tertiary" },
1696
+ { name: "Chevron", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/navigation/expand-more", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1697
+ ],
1698
+ },
1699
+ ],
1700
+ },
1701
+ variantProperties: [
1702
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1703
+ { name: "State", values: ["Default", "Open", "Focused", "Error", "Disabled"], defaultValue: "Default" },
1704
+ ],
1705
+ tokenBindings: [
1706
+ { nodePath: "Field", property: "fills", semanticToken: "color/semantic/field/bg/default" },
1707
+ { nodePath: "Field", property: "strokes", semanticToken: "color/semantic/field/border/default" },
1708
+ { nodePath: "Field", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
1709
+ ],
1710
+ iconSlots: [
1711
+ { nodePath: "Field.Chevron", propName: "chevronIcon", defaultIcon: "icon/navigation/expand-more", required: true },
1712
+ ],
1713
+ };
1714
+
1715
+ const DATEPICKER: ComponentBlueprint = {
1716
+ name: "DatePicker",
1717
+ category: "forms",
1718
+ description: "Date selection input with calendar popup for single or range selection",
1719
+ root: {
1720
+ name: "DatePicker",
1721
+ kind: "frame",
1722
+ width: 280,
1723
+ layoutMode: "VERTICAL",
1724
+ primaryAxisSizing: "AUTO",
1725
+ counterAxisSizing: "FIXED",
1726
+ itemSpacing: 4,
1727
+ children: [
1728
+ { name: "Label", kind: "text", textContent: "Start date", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1729
+ {
1730
+ name: "Trigger",
1731
+ kind: "frame",
1732
+ height: 40,
1733
+ layoutMode: "HORIZONTAL",
1734
+ primaryAxisAlign: "SPACE_BETWEEN",
1735
+ counterAxisAlign: "CENTER",
1736
+ primaryAxisSizing: "AUTO",
1737
+ counterAxisSizing: "FIXED",
1738
+ paddingX: 12,
1739
+ cornerRadius: 6,
1740
+ fillSemantic: "color/semantic/field/bg/default",
1741
+ strokeSemantic: "color/semantic/field/border/default",
1742
+ strokeWeight: 1,
1743
+ children: [
1744
+ { name: "Value", kind: "text", textContent: "MM/DD/YYYY", textPreset: "body/md", textFillSemantic: "color/semantic/text/tertiary" },
1745
+ { name: "CalendarIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/status/pending", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1746
+ ],
1747
+ },
1748
+ ],
1749
+ },
1750
+ variantProperties: [
1751
+ { name: "Type", values: ["single", "range"], defaultValue: "single" },
1752
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1753
+ { name: "State", values: ["Default", "Open", "Focused", "Error", "Disabled"], defaultValue: "Default" },
1754
+ ],
1755
+ tokenBindings: [
1756
+ { nodePath: "Trigger", property: "fills", semanticToken: "color/semantic/field/bg/default" },
1757
+ { nodePath: "Trigger", property: "strokes", semanticToken: "color/semantic/field/border/default" },
1758
+ { nodePath: "Trigger", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
1759
+ ],
1760
+ iconSlots: [
1761
+ { nodePath: "Trigger.CalendarIcon", propName: "calendarIcon", defaultIcon: "icon/status/pending", required: true },
1762
+ ],
1763
+ };
1764
+
1765
+ const NUMBERINPUT: ComponentBlueprint = {
1766
+ name: "NumberInput",
1767
+ category: "forms",
1768
+ description: "Numeric input with increment/decrement stepper buttons",
1769
+ root: {
1770
+ name: "NumberInput",
1771
+ kind: "frame",
1772
+ width: 200,
1773
+ layoutMode: "VERTICAL",
1774
+ primaryAxisSizing: "AUTO",
1775
+ counterAxisSizing: "FIXED",
1776
+ itemSpacing: 4,
1777
+ children: [
1778
+ { name: "Label", kind: "text", textContent: "Quantity", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
1779
+ {
1780
+ name: "Field",
1781
+ kind: "frame",
1782
+ height: 40,
1783
+ layoutMode: "HORIZONTAL",
1784
+ primaryAxisAlign: "SPACE_BETWEEN",
1785
+ counterAxisAlign: "CENTER",
1786
+ primaryAxisSizing: "AUTO",
1787
+ counterAxisSizing: "FIXED",
1788
+ cornerRadius: 6,
1789
+ fillSemantic: "color/semantic/field/bg/default",
1790
+ strokeSemantic: "color/semantic/field/border/default",
1791
+ strokeWeight: 1,
1792
+ children: [
1793
+ { name: "Decrement", kind: "frame", width: 32, height: 40, fillSemantic: "color/semantic/surface/subtle", cornerRadius: 6, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER" },
1794
+ { name: "Value", kind: "text", textContent: "1", textPreset: "body/md", textFillSemantic: "color/semantic/text/primary" },
1795
+ { name: "Increment", kind: "frame", width: 32, height: 40, fillSemantic: "color/semantic/surface/subtle", cornerRadius: 6, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER" },
1796
+ ],
1797
+ },
1798
+ ],
1799
+ },
1800
+ variantProperties: [
1801
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
1802
+ { name: "State", values: ["Default", "Focused", "Error", "Disabled"], defaultValue: "Default" },
1803
+ ],
1804
+ tokenBindings: [
1805
+ { nodePath: "Field", property: "fills", semanticToken: "color/semantic/field/bg/default" },
1806
+ { nodePath: "Field", property: "strokes", semanticToken: "color/semantic/field/border/default" },
1807
+ { nodePath: "Field", property: "cornerRadius", semanticToken: "radius/semantic/field/default" },
1808
+ ],
1809
+ };
1810
+
1811
+ const FORM: ComponentBlueprint = {
1812
+ name: "Form",
1813
+ category: "forms",
1814
+ description: "Form container wrapping field groups with consistent layout and validation",
1815
+ root: {
1816
+ name: "Form",
1817
+ kind: "frame",
1818
+ width: 400,
1819
+ layoutMode: "VERTICAL",
1820
+ primaryAxisSizing: "AUTO",
1821
+ counterAxisSizing: "FIXED",
1822
+ itemSpacing: 16,
1823
+ paddingX: 24,
1824
+ paddingY: 24,
1825
+ cornerRadius: 8,
1826
+ fillSemantic: "color/semantic/surface/default",
1827
+ children: [
1828
+ { name: "FormTitle", kind: "text", textContent: "Create account", textPreset: "label/lg", textFillSemantic: "color/semantic/text/primary" },
1829
+ {
1830
+ name: "FieldGroup",
1831
+ kind: "frame",
1832
+ layoutMode: "VERTICAL",
1833
+ primaryAxisSizing: "AUTO",
1834
+ counterAxisSizing: "AUTO",
1835
+ itemSpacing: 12,
1836
+ children: [
1837
+ { name: "Field1Placeholder", kind: "rect", width: 352, height: 64, cornerRadius: 6, strokeSemantic: "color/semantic/border/subtle", strokeWeight: 1 },
1838
+ { name: "Field2Placeholder", kind: "rect", width: 352, height: 64, cornerRadius: 6, strokeSemantic: "color/semantic/border/subtle", strokeWeight: 1 },
1839
+ ],
1840
+ },
1841
+ {
1842
+ name: "Actions",
1843
+ kind: "frame",
1844
+ layoutMode: "HORIZONTAL",
1845
+ primaryAxisAlign: "MAX",
1846
+ primaryAxisSizing: "AUTO",
1847
+ counterAxisSizing: "AUTO",
1848
+ itemSpacing: 8,
1849
+ children: [
1850
+ { name: "Cancel", kind: "text", textContent: "Cancel", textPreset: "label/md", textFillSemantic: "color/semantic/text/secondary" },
1851
+ {
1852
+ name: "Submit",
1853
+ kind: "frame",
1854
+ width: 100,
1855
+ height: 40,
1856
+ layoutMode: "HORIZONTAL",
1857
+ primaryAxisAlign: "CENTER",
1858
+ counterAxisAlign: "CENTER",
1859
+ cornerRadius: 8,
1860
+ fillSemantic: "color/semantic/actions/primary/bg/default",
1861
+ children: [
1862
+ { name: "SubmitLabel", kind: "text", textContent: "Submit", textPreset: "label/md", textFillSemantic: "color/semantic/text/on-color" },
1863
+ ],
1864
+ },
1865
+ ],
1866
+ },
1867
+ ],
1868
+ },
1869
+ variantProperties: [
1870
+ { name: "Layout", values: ["Vertical", "Horizontal"], defaultValue: "Vertical" },
1871
+ { name: "State", values: ["Default", "Submitting", "Error"], defaultValue: "Default" },
1872
+ ],
1873
+ tokenBindings: [
1874
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
1875
+ { nodePath: "Actions.Submit", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1876
+ ],
1877
+ };
1878
+
1879
+ // ─── Batch 3: Nav + Data + Layout ───────────────────────────────────────────
1880
+
1881
+ const PAGINATION: ComponentBlueprint = {
1882
+ name: "Pagination",
1883
+ category: "navigation",
1884
+ description: "Page navigation with numbered buttons, prev/next controls",
1885
+ root: {
1886
+ name: "Pagination",
1887
+ kind: "frame",
1888
+ layoutMode: "HORIZONTAL",
1889
+ primaryAxisSizing: "AUTO",
1890
+ counterAxisSizing: "AUTO",
1891
+ itemSpacing: 4,
1892
+ counterAxisAlign: "CENTER",
1893
+ children: [
1894
+ { name: "Prev", kind: "frame", width: 36, height: 36, cornerRadius: 8, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", fillSemantic: "color/semantic/surface/subtle", children: [{ name: "Arrow", kind: "text", textContent: "‹", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" }] },
1895
+ { name: "Page1", kind: "frame", width: 36, height: 36, cornerRadius: 8, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", fillSemantic: "color/semantic/actions/primary/bg/default", children: [{ name: "Num", kind: "text", textContent: "1", textPreset: "label/md", textFillSemantic: "color/semantic/text/on-color" }] },
1896
+ { name: "Page2", kind: "frame", width: 36, height: 36, cornerRadius: 8, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Num", kind: "text", textContent: "2", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" }] },
1897
+ { name: "Page3", kind: "frame", width: 36, height: 36, cornerRadius: 8, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Num", kind: "text", textContent: "3", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" }] },
1898
+ { name: "Next", kind: "frame", width: 36, height: 36, cornerRadius: 8, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", fillSemantic: "color/semantic/surface/subtle", children: [{ name: "Arrow", kind: "text", textContent: "›", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" }] },
1899
+ ],
1900
+ },
1901
+ variantProperties: [
1902
+ { name: "Type", values: ["numbered", "loadMore", "compact"], defaultValue: "numbered" },
1903
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
1904
+ ],
1905
+ tokenBindings: [
1906
+ { nodePath: "Page1", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
1907
+ ],
1908
+ };
1909
+
1910
+ const LIST: ComponentBlueprint = {
1911
+ name: "List",
1912
+ category: "data",
1913
+ description: "Vertical list of items with optional icons, secondary text, and dividers",
1914
+ root: {
1915
+ name: "List",
1916
+ kind: "frame",
1917
+ width: 320,
1918
+ layoutMode: "VERTICAL",
1919
+ primaryAxisSizing: "AUTO",
1920
+ counterAxisSizing: "FIXED",
1921
+ fillSemantic: "color/semantic/surface/default",
1922
+ children: [
1923
+ {
1924
+ name: "ListItem1",
1925
+ kind: "frame",
1926
+ layoutMode: "HORIZONTAL",
1927
+ primaryAxisSizing: "AUTO",
1928
+ counterAxisSizing: "FIXED",
1929
+ height: 48,
1930
+ paddingX: 16,
1931
+ counterAxisAlign: "CENTER",
1932
+ itemSpacing: 12,
1933
+ children: [
1934
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/content/flag", required: false, size: "sm", colorToken: "color/semantic/icon/secondary", decorative: true } },
1935
+ { name: "Label", kind: "text", textContent: "List item one", textPreset: "body/md", textFillSemantic: "color/semantic/text/primary" },
1936
+ ],
1937
+ },
1938
+ { name: "Divider", kind: "rect", height: 1, fillSemantic: "color/semantic/border/subtle" },
1939
+ {
1940
+ name: "ListItem2",
1941
+ kind: "frame",
1942
+ layoutMode: "HORIZONTAL",
1943
+ primaryAxisSizing: "AUTO",
1944
+ counterAxisSizing: "FIXED",
1945
+ height: 48,
1946
+ paddingX: 16,
1947
+ counterAxisAlign: "CENTER",
1948
+ itemSpacing: 12,
1949
+ children: [
1950
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/content/flag", required: false, size: "sm", colorToken: "color/semantic/icon/secondary", decorative: true } },
1951
+ { name: "Label", kind: "text", textContent: "List item two", textPreset: "body/md", textFillSemantic: "color/semantic/text/primary" },
1952
+ ],
1953
+ },
1954
+ ],
1955
+ },
1956
+ variantProperties: [
1957
+ { name: "Type", values: ["simple", "interactive", "twoLine", "avatar"], defaultValue: "simple" },
1958
+ { name: "Dividers", values: ["true", "false"], defaultValue: "true" },
1959
+ ],
1960
+ tokenBindings: [
1961
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
1962
+ ],
1963
+ iconSlots: [
1964
+ { nodePath: "ListItem1.Icon", propName: "listItem1Icon", defaultIcon: "icon/content/flag", required: false },
1965
+ { nodePath: "ListItem2.Icon", propName: "listItem2Icon", defaultIcon: "icon/content/flag", required: false },
1966
+ ],
1967
+ };
1968
+
1969
+ const TREEVIEW: ComponentBlueprint = {
1970
+ name: "TreeView",
1971
+ category: "data",
1972
+ description: "Hierarchical expandable tree for navigating nested data",
1973
+ root: {
1974
+ name: "TreeView",
1975
+ kind: "frame",
1976
+ width: 260,
1977
+ layoutMode: "VERTICAL",
1978
+ primaryAxisSizing: "AUTO",
1979
+ counterAxisSizing: "FIXED",
1980
+ children: [
1981
+ {
1982
+ name: "Node1",
1983
+ kind: "frame",
1984
+ layoutMode: "HORIZONTAL",
1985
+ primaryAxisSizing: "AUTO",
1986
+ counterAxisSizing: "FIXED",
1987
+ height: 36,
1988
+ paddingX: 8,
1989
+ counterAxisAlign: "CENTER",
1990
+ itemSpacing: 4,
1991
+ cornerRadius: 6,
1992
+ children: [
1993
+ { name: "ExpandIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/navigation/chevron-right", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1994
+ { name: "FolderIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/file/folder", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
1995
+ { name: "Label", kind: "text", textContent: "Documents", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" },
1996
+ ],
1997
+ },
1998
+ {
1999
+ name: "Node1Child",
2000
+ kind: "frame",
2001
+ layoutMode: "HORIZONTAL",
2002
+ primaryAxisSizing: "AUTO",
2003
+ counterAxisSizing: "FIXED",
2004
+ height: 36,
2005
+ paddingX: 32,
2006
+ counterAxisAlign: "CENTER",
2007
+ itemSpacing: 4,
2008
+ cornerRadius: 6,
2009
+ fillSemantic: "color/semantic/actions/primary/bg/default",
2010
+ children: [
2011
+ { name: "FileIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/inverse", iconSlot: { defaultIcon: "icon/file/file", required: true, size: "xs", colorToken: "color/semantic/icon/inverse", decorative: true } },
2012
+ { name: "Label", kind: "text", textContent: "Report.pdf", textPreset: "body/sm", textFillSemantic: "color/semantic/text/on-color" },
2013
+ ],
2014
+ },
2015
+ ],
2016
+ },
2017
+ variantProperties: [
2018
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
2019
+ { name: "Selection", values: ["single", "multi", "none"], defaultValue: "single" },
2020
+ ],
2021
+ tokenBindings: [
2022
+ { nodePath: "Node1Child", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2023
+ ],
2024
+ iconSlots: [
2025
+ { nodePath: "Node1.ExpandIcon", propName: "expandIcon", defaultIcon: "icon/navigation/chevron-right", required: true },
2026
+ { nodePath: "Node1.FolderIcon", propName: "folderIcon", defaultIcon: "icon/file/folder", required: true },
2027
+ { nodePath: "Node1Child.FileIcon", propName: "fileIcon", defaultIcon: "icon/file/file", required: true },
2028
+ ],
2029
+ };
2030
+
2031
+ const TYPOGRAPHY: ComponentBlueprint = {
2032
+ name: "Typography",
2033
+ category: "core",
2034
+ description: "Text display component for headings, body text, labels, and captions",
2035
+ root: {
2036
+ name: "Typography",
2037
+ kind: "frame",
2038
+ width: 400,
2039
+ layoutMode: "VERTICAL",
2040
+ primaryAxisSizing: "AUTO",
2041
+ counterAxisSizing: "FIXED",
2042
+ itemSpacing: 8,
2043
+ children: [
2044
+ { name: "Display", kind: "text", textContent: "Display Text", textPreset: "display/lg", textFillSemantic: "color/semantic/text/primary" },
2045
+ { name: "Heading", kind: "text", textContent: "Heading Text", textPreset: "heading/md", textFillSemantic: "color/semantic/text/primary" },
2046
+ { name: "Body", kind: "text", textContent: "Body text for paragraphs and content.", textPreset: "body/md", textFillSemantic: "color/semantic/text/secondary" },
2047
+ { name: "Label", kind: "text", textContent: "Label Text", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
2048
+ { name: "Caption", kind: "text", textContent: "Caption text", textPreset: "body/sm", textFillSemantic: "color/semantic/text/tertiary" },
2049
+ ],
2050
+ },
2051
+ variantProperties: [
2052
+ { name: "Variant", values: ["display", "heading", "body", "label", "caption"], defaultValue: "body" },
2053
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2054
+ ],
2055
+ tokenBindings: [],
2056
+ };
2057
+
2058
+ const DIVIDER: ComponentBlueprint = {
2059
+ name: "Divider",
2060
+ category: "layout",
2061
+ description: "Visual separator line between content sections",
2062
+ root: {
2063
+ name: "Divider",
2064
+ kind: "rect",
2065
+ width: 400,
2066
+ height: 1,
2067
+ fillSemantic: "color/semantic/border/subtle",
2068
+ },
2069
+ variantProperties: [
2070
+ { name: "Orientation", values: ["horizontal", "vertical"], defaultValue: "horizontal" },
2071
+ { name: "Type", values: ["solid", "dashed"], defaultValue: "solid" },
2072
+ ],
2073
+ tokenBindings: [
2074
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/border/subtle" },
2075
+ ],
2076
+ };
2077
+
2078
+ const SKELETON: ComponentBlueprint = {
2079
+ name: "Skeleton",
2080
+ category: "layout",
2081
+ description: "Loading placeholder mimicking content layout while data loads",
2082
+ root: {
2083
+ name: "Skeleton",
2084
+ kind: "frame",
2085
+ width: 320,
2086
+ layoutMode: "VERTICAL",
2087
+ primaryAxisSizing: "AUTO",
2088
+ counterAxisSizing: "FIXED",
2089
+ itemSpacing: 12,
2090
+ children: [
2091
+ { name: "ImagePlaceholder", kind: "rect", width: 320, height: 180, cornerRadius: 8, fillSemantic: "color/semantic/surface/subtle" },
2092
+ { name: "TitleLine", kind: "rect", width: 240, height: 16, cornerRadius: 4, fillSemantic: "color/semantic/surface/subtle" },
2093
+ { name: "BodyLine1", kind: "rect", width: 320, height: 12, cornerRadius: 4, fillSemantic: "color/semantic/surface/subtle" },
2094
+ { name: "BodyLine2", kind: "rect", width: 280, height: 12, cornerRadius: 4, fillSemantic: "color/semantic/surface/subtle" },
2095
+ ],
2096
+ },
2097
+ variantProperties: [
2098
+ { name: "Type", values: ["text", "circle", "rect", "card"], defaultValue: "card" },
2099
+ { name: "Animation", values: ["shimmer", "pulse"], defaultValue: "shimmer" },
2100
+ ],
2101
+ tokenBindings: [
2102
+ { nodePath: "ImagePlaceholder", property: "fills", semanticToken: "color/semantic/surface/subtle" },
2103
+ { nodePath: "TitleLine", property: "fills", semanticToken: "color/semantic/surface/subtle" },
2104
+ ],
2105
+ };
2106
+
2107
+ // ─── Batch 4: Overlay + Remaining ───────────────────────────────────────────
2108
+
2109
+ const POPOVER: ComponentBlueprint = {
2110
+ name: "Popover",
2111
+ category: "overlay",
2112
+ description: "Interactive floating panel with rich content triggered by click",
2113
+ root: {
2114
+ name: "Popover",
2115
+ kind: "frame",
2116
+ width: 280,
2117
+ layoutMode: "VERTICAL",
2118
+ primaryAxisSizing: "AUTO",
2119
+ counterAxisSizing: "FIXED",
2120
+ paddingX: 16,
2121
+ paddingY: 12,
2122
+ cornerRadius: 12,
2123
+ fillSemantic: "color/semantic/surface/raised",
2124
+ strokeSemantic: "color/semantic/border/subtle",
2125
+ strokeWeight: 1,
2126
+ effects: [{ type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.12 }, offset: { x: 0, y: 8 }, radius: 24, spread: -4 }],
2127
+ itemSpacing: 8,
2128
+ children: [
2129
+ {
2130
+ name: "Header",
2131
+ kind: "frame",
2132
+ layoutMode: "HORIZONTAL",
2133
+ primaryAxisAlign: "SPACE_BETWEEN",
2134
+ primaryAxisSizing: "AUTO",
2135
+ counterAxisSizing: "AUTO",
2136
+ children: [
2137
+ { name: "Title", kind: "text", textContent: "Popover title", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
2138
+ { name: "Close", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: false } },
2139
+ ],
2140
+ },
2141
+ { name: "Body", kind: "text", textContent: "Popover content with interactive elements.", textPreset: "body/sm", textFillSemantic: "color/semantic/text/secondary" },
2142
+ ],
2143
+ },
2144
+ variantProperties: [
2145
+ { name: "Placement", values: ["top", "bottom", "left", "right"], defaultValue: "bottom" },
2146
+ { name: "HasArrow", values: ["true", "false"], defaultValue: "true" },
2147
+ ],
2148
+ tokenBindings: [
2149
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/raised" },
2150
+ { nodePath: "", property: "cornerRadius", semanticToken: "radius/semantic/surface/default" },
2151
+ ],
2152
+ iconSlots: [
2153
+ { nodePath: "Header.Close", propName: "closeIcon", defaultIcon: "icon/action/close", required: false },
2154
+ ],
2155
+ };
2156
+
2157
+ const DROPDOWNMENU: ComponentBlueprint = {
2158
+ name: "DropdownMenu",
2159
+ category: "overlay",
2160
+ description: "Button-triggered menu with action items and keyboard navigation",
2161
+ root: {
2162
+ name: "DropdownMenu",
2163
+ kind: "frame",
2164
+ width: 200,
2165
+ layoutMode: "VERTICAL",
2166
+ primaryAxisSizing: "AUTO",
2167
+ counterAxisSizing: "FIXED",
2168
+ paddingY: 4,
2169
+ cornerRadius: 8,
2170
+ fillSemantic: "color/semantic/surface/raised",
2171
+ strokeSemantic: "color/semantic/border/subtle",
2172
+ strokeWeight: 1,
2173
+ effects: [{ type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.1 }, offset: { x: 0, y: 4 }, radius: 12, spread: -2 }],
2174
+ children: [
2175
+ { name: "Item1", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisSizing: "AUTO", counterAxisSizing: "FIXED", height: 36, paddingX: 12, counterAxisAlign: "CENTER", itemSpacing: 8, children: [{ name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/settings", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } }, { name: "Label", kind: "text", textContent: "Action one", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" }] },
2176
+ { name: "Item2", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisSizing: "AUTO", counterAxisSizing: "FIXED", height: 36, paddingX: 12, counterAxisAlign: "CENTER", itemSpacing: 8, children: [{ name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/settings", required: false, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } }, { name: "Label", kind: "text", textContent: "Action two", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" }] },
2177
+ ],
2178
+ },
2179
+ variantProperties: [
2180
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2181
+ { name: "Alignment", values: ["start", "end"], defaultValue: "start" },
2182
+ ],
2183
+ tokenBindings: [
2184
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/raised" },
2185
+ ],
2186
+ iconSlots: [
2187
+ { nodePath: "Item1.Icon", propName: "item1Icon", defaultIcon: "icon/action/settings", required: false },
2188
+ { nodePath: "Item2.Icon", propName: "item2Icon", defaultIcon: "icon/action/settings", required: false },
2189
+ ],
2190
+ };
2191
+
2192
+ const AVATARGROUP: ComponentBlueprint = {
2193
+ name: "AvatarGroup",
2194
+ category: "core",
2195
+ description: "Overlapping row of avatars with overflow indicator",
2196
+ root: {
2197
+ name: "AvatarGroup",
2198
+ kind: "frame",
2199
+ layoutMode: "HORIZONTAL",
2200
+ primaryAxisSizing: "AUTO",
2201
+ counterAxisSizing: "AUTO",
2202
+ children: [
2203
+ { name: "Avatar1", kind: "ellipse", width: 32, height: 32, fillSemantic: "color/semantic/surface/subtle", strokeSemantic: "color/semantic/surface/default", strokeWeight: 2 },
2204
+ { name: "Avatar2", kind: "ellipse", width: 32, height: 32, fillSemantic: "color/semantic/surface/subtle", strokeSemantic: "color/semantic/surface/default", strokeWeight: 2 },
2205
+ { name: "Avatar3", kind: "ellipse", width: 32, height: 32, fillSemantic: "color/semantic/surface/subtle", strokeSemantic: "color/semantic/surface/default", strokeWeight: 2 },
2206
+ { name: "Overflow", kind: "ellipse", width: 32, height: 32, fillSemantic: "color/semantic/surface/subtle", strokeSemantic: "color/semantic/surface/default", strokeWeight: 2 },
2207
+ ],
2208
+ },
2209
+ variantProperties: [
2210
+ { name: "Size", values: ["sm", "md", "lg", "xl"], defaultValue: "md" },
2211
+ { name: "MaxVisible", values: ["3", "4", "5"], defaultValue: "3" },
2212
+ ],
2213
+ tokenBindings: [],
2214
+ };
2215
+
2216
+ const GRID: ComponentBlueprint = {
2217
+ name: "Grid",
2218
+ category: "layout",
2219
+ description: "CSS Grid-based responsive layout container",
2220
+ root: {
2221
+ name: "Grid",
2222
+ kind: "frame",
2223
+ width: 800,
2224
+ layoutMode: "HORIZONTAL",
2225
+ primaryAxisSizing: "AUTO",
2226
+ counterAxisSizing: "FIXED",
2227
+ itemSpacing: 16,
2228
+ children: [
2229
+ { name: "Cell1", kind: "rect", width: 180, height: 120, cornerRadius: 8, fillSemantic: "color/semantic/surface/subtle" },
2230
+ { name: "Cell2", kind: "rect", width: 180, height: 120, cornerRadius: 8, fillSemantic: "color/semantic/surface/subtle" },
2231
+ { name: "Cell3", kind: "rect", width: 180, height: 120, cornerRadius: 8, fillSemantic: "color/semantic/surface/subtle" },
2232
+ { name: "Cell4", kind: "rect", width: 180, height: 120, cornerRadius: 8, fillSemantic: "color/semantic/surface/subtle" },
2233
+ ],
2234
+ },
2235
+ variantProperties: [
2236
+ { name: "Columns", values: ["1", "2", "3", "4", "6", "12"], defaultValue: "4" },
2237
+ { name: "Gap", values: ["sm", "md", "lg"], defaultValue: "md" },
2238
+ ],
2239
+ tokenBindings: [],
2240
+ };
2241
+
2242
+ const EMPTYSTATE: ComponentBlueprint = {
2243
+ name: "EmptyState",
2244
+ category: "layout",
2245
+ description: "Placeholder for zero-data views with illustration, message, and action",
2246
+ root: {
2247
+ name: "EmptyState",
2248
+ kind: "frame",
2249
+ width: 400,
2250
+ layoutMode: "VERTICAL",
2251
+ primaryAxisAlign: "CENTER",
2252
+ counterAxisAlign: "CENTER",
2253
+ primaryAxisSizing: "AUTO",
2254
+ counterAxisSizing: "FIXED",
2255
+ itemSpacing: 16,
2256
+ paddingY: 48,
2257
+ children: [
2258
+ { name: "Illustration", kind: "rect", width: 160, height: 120, cornerRadius: 12, fillSemantic: "color/semantic/surface/subtle" },
2259
+ { name: "Heading", kind: "text", textContent: "No items found", textPreset: "heading/md", textFillSemantic: "color/semantic/text/primary" },
2260
+ { name: "Description", kind: "text", textContent: "Get started by creating your first item.", textPreset: "body/md", textFillSemantic: "color/semantic/text/secondary" },
2261
+ {
2262
+ name: "Action",
2263
+ kind: "frame",
2264
+ width: 140,
2265
+ height: 40,
2266
+ layoutMode: "HORIZONTAL",
2267
+ primaryAxisAlign: "CENTER",
2268
+ counterAxisAlign: "CENTER",
2269
+ cornerRadius: 8,
2270
+ fillSemantic: "color/semantic/actions/primary/bg/default",
2271
+ children: [
2272
+ { name: "ActionLabel", kind: "text", textContent: "Create item", textPreset: "label/md", textFillSemantic: "color/semantic/text/on-color" },
2273
+ ],
2274
+ },
2275
+ ],
2276
+ },
2277
+ variantProperties: [
2278
+ { name: "Size", values: ["compact", "default", "full"], defaultValue: "default" },
2279
+ ],
2280
+ tokenBindings: [
2281
+ { nodePath: "Action", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2282
+ ],
2283
+ };
2284
+
2285
+ const BANNER: ComponentBlueprint = {
2286
+ name: "Banner",
2287
+ category: "feedback",
2288
+ description: "Full-width persistent notification bar for system-level messages",
2289
+ root: {
2290
+ name: "Banner",
2291
+ kind: "frame",
2292
+ width: 800,
2293
+ height: 48,
2294
+ layoutMode: "HORIZONTAL",
2295
+ primaryAxisAlign: "CENTER",
2296
+ counterAxisAlign: "CENTER",
2297
+ primaryAxisSizing: "AUTO",
2298
+ counterAxisSizing: "FIXED",
2299
+ paddingX: 16,
2300
+ itemSpacing: 12,
2301
+ fillSemantic: "color/semantic/feedback/info/bg",
2302
+ children: [
2303
+ { name: "Icon", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/feedback/info/text", iconSlot: { defaultIcon: "icon/status/info", required: true, size: "sm", colorToken: "color/semantic/feedback/info/text", decorative: false } },
2304
+ { name: "Message", kind: "text", textContent: "New version available. Update now for the latest features.", textPreset: "body/sm", textFillSemantic: "color/semantic/feedback/info/text" },
2305
+ { name: "Action", kind: "text", textContent: "Update", textPreset: "label/sm", textFillSemantic: "color/semantic/actions/primary/bg/default" },
2306
+ { name: "Close", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/feedback/info/text", iconSlot: { defaultIcon: "icon/action/close", required: false, size: "xs", colorToken: "color/semantic/feedback/info/text", decorative: false } },
2307
+ ],
2308
+ },
2309
+ variantProperties: [
2310
+ { name: "Type", values: ["info", "success", "warning", "error"], defaultValue: "info" },
2311
+ { name: "Dismissible", values: ["true", "false"], defaultValue: "true" },
2312
+ ],
2313
+ tokenBindings: [
2314
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/feedback/info/bg" },
2315
+ ],
2316
+ iconSlots: [
2317
+ { nodePath: "Icon", propName: "statusIcon", defaultIcon: "icon/status/info", required: true },
2318
+ { nodePath: "Close", propName: "closeIcon", defaultIcon: "icon/action/close", required: false },
2319
+ ],
2320
+ };
2321
+
2322
+ // ─── Batch 5: Tier 3 ───────────────────────────────────────────────────────
2323
+
2324
+ const DRAWER: ComponentBlueprint = {
2325
+ name: "Drawer",
2326
+ category: "overlay",
2327
+ description: "Slide-in panel from screen edge for secondary content or navigation",
2328
+ root: {
2329
+ name: "Drawer",
2330
+ kind: "frame",
2331
+ width: 360,
2332
+ height: 600,
2333
+ layoutMode: "VERTICAL",
2334
+ primaryAxisSizing: "FIXED",
2335
+ counterAxisSizing: "FIXED",
2336
+ fillSemantic: "color/semantic/surface/default",
2337
+ effects: [{ type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.16 }, offset: { x: -4, y: 0 }, radius: 24, spread: 0 }],
2338
+ children: [
2339
+ { name: "Header", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisAlign: "SPACE_BETWEEN", counterAxisAlign: "CENTER", primaryAxisSizing: "AUTO", counterAxisSizing: "FIXED", height: 56, paddingX: 20, strokeSemantic: "color/semantic/border/subtle", strokeWeight: 1, children: [{ name: "Title", kind: "text", textContent: "Drawer Title", textPreset: "heading/sm", textFillSemantic: "color/semantic/text/primary" }, { name: "Close", kind: "frame", width: 20, height: 20, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/action/close", required: true, size: "sm", colorToken: "color/semantic/icon/secondary", decorative: false } }] },
2340
+ { name: "Body", kind: "frame", layoutMode: "VERTICAL", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", paddingX: 20, paddingY: 16, itemSpacing: 12, children: [{ name: "Content", kind: "text", textContent: "Drawer content goes here.", textPreset: "body/md", textFillSemantic: "color/semantic/text/secondary" }] },
2341
+ ],
2342
+ },
2343
+ variantProperties: [
2344
+ { name: "Side", values: ["left", "right", "bottom"], defaultValue: "right" },
2345
+ { name: "Size", values: ["sm", "md", "lg", "full"], defaultValue: "md" },
2346
+ ],
2347
+ tokenBindings: [
2348
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
2349
+ ],
2350
+ iconSlots: [
2351
+ { nodePath: "Header.Close", propName: "closeIcon", defaultIcon: "icon/action/close", required: true },
2352
+ ],
2353
+ };
2354
+
2355
+ const SEGMENTEDCONTROL: ComponentBlueprint = {
2356
+ name: "SegmentedControl",
2357
+ category: "core",
2358
+ description: "Button group for single-selection between mutually exclusive options",
2359
+ root: {
2360
+ name: "SegmentedControl",
2361
+ kind: "frame",
2362
+ layoutMode: "HORIZONTAL",
2363
+ primaryAxisSizing: "AUTO",
2364
+ counterAxisSizing: "AUTO",
2365
+ cornerRadius: 8,
2366
+ fillSemantic: "color/semantic/surface/subtle",
2367
+ paddingX: 4,
2368
+ paddingY: 4,
2369
+ itemSpacing: 2,
2370
+ children: [
2371
+ { name: "Segment1", kind: "frame", width: 80, height: 32, layoutMode: "HORIZONTAL", primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", cornerRadius: 6, fillSemantic: "color/semantic/surface/default", effects: [{ type: "DROP_SHADOW", color: { r: 0, g: 0, b: 0, a: 0.06 }, offset: { x: 0, y: 1 }, radius: 2, spread: 0 }], children: [{ name: "Label", kind: "text", textContent: "Day", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" }] },
2372
+ { name: "Segment2", kind: "frame", width: 80, height: 32, layoutMode: "HORIZONTAL", primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", cornerRadius: 6, children: [{ name: "Label", kind: "text", textContent: "Week", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" }] },
2373
+ { name: "Segment3", kind: "frame", width: 80, height: 32, layoutMode: "HORIZONTAL", primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", cornerRadius: 6, children: [{ name: "Label", kind: "text", textContent: "Month", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" }] },
2374
+ ],
2375
+ },
2376
+ variantProperties: [
2377
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2378
+ { name: "Type", values: ["text", "icon", "both"], defaultValue: "text" },
2379
+ ],
2380
+ tokenBindings: [
2381
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/subtle" },
2382
+ { nodePath: "Segment1", property: "fills", semanticToken: "color/semantic/surface/default" },
2383
+ ],
2384
+ };
2385
+
2386
+ const STEPPER: ComponentBlueprint = {
2387
+ name: "Stepper",
2388
+ category: "navigation",
2389
+ description: "Multi-step progress indicator showing workflow completion status",
2390
+ root: {
2391
+ name: "Stepper",
2392
+ kind: "frame",
2393
+ width: 600,
2394
+ layoutMode: "HORIZONTAL",
2395
+ primaryAxisAlign: "SPACE_BETWEEN",
2396
+ counterAxisAlign: "CENTER",
2397
+ primaryAxisSizing: "FIXED",
2398
+ counterAxisSizing: "AUTO",
2399
+ children: [
2400
+ { name: "Step1", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", itemSpacing: 8, counterAxisAlign: "CENTER", children: [{ name: "Circle", kind: "ellipse", width: 32, height: 32, fillSemantic: "color/semantic/actions/primary/bg/default" }, { name: "Label", kind: "text", textContent: "Details", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" }] },
2401
+ { name: "Connector1", kind: "rect", width: 80, height: 2, fillSemantic: "color/semantic/actions/primary/bg/default" },
2402
+ { name: "Step2", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", itemSpacing: 8, counterAxisAlign: "CENTER", children: [{ name: "Circle", kind: "ellipse", width: 32, height: 32, strokeSemantic: "color/semantic/actions/primary/bg/default", strokeWeight: 2 }, { name: "Label", kind: "text", textContent: "Review", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" }] },
2403
+ { name: "Connector2", kind: "rect", width: 80, height: 2, fillSemantic: "color/semantic/border/default" },
2404
+ { name: "Step3", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", itemSpacing: 8, counterAxisAlign: "CENTER", children: [{ name: "Circle", kind: "ellipse", width: 32, height: 32, strokeSemantic: "color/semantic/border/default", strokeWeight: 2 }, { name: "Label", kind: "text", textContent: "Confirm", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }] },
2405
+ ],
2406
+ },
2407
+ variantProperties: [
2408
+ { name: "Orientation", values: ["horizontal", "vertical"], defaultValue: "horizontal" },
2409
+ { name: "Type", values: ["numbered", "icon"], defaultValue: "numbered" },
2410
+ ],
2411
+ tokenBindings: [
2412
+ { nodePath: "Step1.Circle", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2413
+ { nodePath: "Connector1", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2414
+ ],
2415
+ };
2416
+
2417
+ const FILEUPLOADER: ComponentBlueprint = {
2418
+ name: "FileUploader",
2419
+ category: "forms",
2420
+ description: "File upload via drag-and-drop zone or button trigger",
2421
+ root: {
2422
+ name: "FileUploader",
2423
+ kind: "frame",
2424
+ width: 400,
2425
+ height: 160,
2426
+ layoutMode: "VERTICAL",
2427
+ primaryAxisAlign: "CENTER",
2428
+ counterAxisAlign: "CENTER",
2429
+ primaryAxisSizing: "FIXED",
2430
+ counterAxisSizing: "FIXED",
2431
+ itemSpacing: 8,
2432
+ cornerRadius: 8,
2433
+ strokeSemantic: "color/semantic/border/default",
2434
+ strokeWeight: 2,
2435
+ fillSemantic: "color/semantic/surface/subtle",
2436
+ children: [
2437
+ { name: "Icon", kind: "frame", width: 32, height: 32, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/content/inbox", required: true, size: "lg", colorToken: "color/semantic/icon/secondary", decorative: true } },
2438
+ { name: "Title", kind: "text", textContent: "Drag & drop files here", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" },
2439
+ { name: "Subtitle", kind: "text", textContent: "or click to browse (max 10MB)", textPreset: "body/sm", textFillSemantic: "color/semantic/text/tertiary" },
2440
+ ],
2441
+ },
2442
+ variantProperties: [
2443
+ { name: "Type", values: ["dropzone", "button"], defaultValue: "dropzone" },
2444
+ { name: "State", values: ["Idle", "DragOver", "Uploading", "Complete", "Error"], defaultValue: "Idle" },
2445
+ ],
2446
+ tokenBindings: [
2447
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/subtle" },
2448
+ { nodePath: "", property: "strokes", semanticToken: "color/semantic/border/default" },
2449
+ ],
2450
+ iconSlots: [
2451
+ { nodePath: "Icon", propName: "uploadIcon", defaultIcon: "icon/content/inbox", required: true },
2452
+ ],
2453
+ };
2454
+
2455
+ const INLINEMESSAGE: ComponentBlueprint = {
2456
+ name: "InlineMessage",
2457
+ category: "feedback",
2458
+ description: "Contextual helper or error message associated with a form field",
2459
+ root: {
2460
+ name: "InlineMessage",
2461
+ kind: "frame",
2462
+ layoutMode: "HORIZONTAL",
2463
+ primaryAxisSizing: "AUTO",
2464
+ counterAxisSizing: "AUTO",
2465
+ itemSpacing: 4,
2466
+ counterAxisAlign: "CENTER",
2467
+ children: [
2468
+ { name: "Icon", kind: "frame", width: 14, height: 14, fillSemantic: "color/semantic/feedback/info/text", iconSlot: { defaultIcon: "icon/status/info", required: true, size: "xs", colorToken: "color/semantic/feedback/info/text", decorative: false } },
2469
+ { name: "Message", kind: "text", textContent: "This field is required", textPreset: "body/sm", textFillSemantic: "color/semantic/feedback/info/text" },
2470
+ ],
2471
+ },
2472
+ variantProperties: [
2473
+ { name: "Type", values: ["info", "success", "warning", "error"], defaultValue: "info" },
2474
+ ],
2475
+ tokenBindings: [
2476
+ { nodePath: "Icon", property: "fills", semanticToken: "color/semantic/feedback/info/text" },
2477
+ { nodePath: "Message", property: "fills", semanticToken: "color/semantic/feedback/info/text" },
2478
+ ],
2479
+ iconSlots: [
2480
+ { nodePath: "Icon", propName: "statusIcon", defaultIcon: "icon/status/info", required: true },
2481
+ ],
2482
+ };
2483
+
2484
+ const TOOLBAR: ComponentBlueprint = {
2485
+ name: "Toolbar",
2486
+ category: "navigation",
2487
+ description: "Horizontal action bar with grouped icon buttons and controls",
2488
+ root: {
2489
+ name: "Toolbar",
2490
+ kind: "frame",
2491
+ layoutMode: "HORIZONTAL",
2492
+ primaryAxisSizing: "AUTO",
2493
+ counterAxisSizing: "FIXED",
2494
+ height: 44,
2495
+ paddingX: 8,
2496
+ itemSpacing: 4,
2497
+ counterAxisAlign: "CENTER",
2498
+ fillSemantic: "color/semantic/surface/default",
2499
+ strokeSemantic: "color/semantic/border/subtle",
2500
+ strokeWeight: 1,
2501
+ cornerRadius: 8,
2502
+ children: [
2503
+ { name: "Action1", kind: "frame", width: 32, height: 32, cornerRadius: 6, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/default", iconSlot: { defaultIcon: "icon/action/edit", required: true, size: "xs", colorToken: "color/semantic/icon/default", decorative: true } }] },
2504
+ { name: "Action2", kind: "frame", width: 32, height: 32, cornerRadius: 6, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/default", iconSlot: { defaultIcon: "icon/editor/format-bold", required: true, size: "xs", colorToken: "color/semantic/icon/default", decorative: true } }] },
2505
+ { name: "Separator", kind: "rect", width: 1, height: 20, fillSemantic: "color/semantic/border/subtle" },
2506
+ { name: "Action3", kind: "frame", width: 32, height: 32, cornerRadius: 6, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Icon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/default", iconSlot: { defaultIcon: "icon/editor/format-italic", required: true, size: "xs", colorToken: "color/semantic/icon/default", decorative: true } }] },
2507
+ ],
2508
+ },
2509
+ variantProperties: [
2510
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
2511
+ { name: "Overflow", values: ["visible", "menu"], defaultValue: "visible" },
2512
+ ],
2513
+ tokenBindings: [
2514
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
2515
+ ],
2516
+ iconSlots: [
2517
+ { nodePath: "Action1.Icon", propName: "action1Icon", defaultIcon: "icon/action/edit", required: true },
2518
+ { nodePath: "Action2.Icon", propName: "action2Icon", defaultIcon: "icon/editor/format-bold", required: true },
2519
+ { nodePath: "Action3.Icon", propName: "action3Icon", defaultIcon: "icon/editor/format-italic", required: true },
2520
+ ],
2521
+ };
2522
+
2523
+ const CALENDAR: ComponentBlueprint = {
2524
+ name: "Calendar",
2525
+ category: "data",
2526
+ description: "Month-view calendar grid for date selection",
2527
+ root: {
2528
+ name: "Calendar",
2529
+ kind: "frame",
2530
+ width: 280,
2531
+ layoutMode: "VERTICAL",
2532
+ primaryAxisSizing: "AUTO",
2533
+ counterAxisSizing: "FIXED",
2534
+ paddingX: 12,
2535
+ paddingY: 12,
2536
+ itemSpacing: 8,
2537
+ cornerRadius: 12,
2538
+ fillSemantic: "color/semantic/surface/default",
2539
+ strokeSemantic: "color/semantic/border/subtle",
2540
+ strokeWeight: 1,
2541
+ children: [
2542
+ { name: "MonthNav", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisAlign: "SPACE_BETWEEN", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", counterAxisAlign: "CENTER", children: [{ name: "Prev", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/text/secondary" }, { name: "MonthYear", kind: "text", textContent: "April 2026", textPreset: "label/md", textFillSemantic: "color/semantic/text/primary" }, { name: "Next", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/text/secondary" }] },
2543
+ { name: "WeekHeaders", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisAlign: "SPACE_BETWEEN", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", children: [{ name: "Sun", kind: "text", textContent: "S", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Mon", kind: "text", textContent: "M", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Tue", kind: "text", textContent: "T", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Wed", kind: "text", textContent: "W", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Thu", kind: "text", textContent: "T", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Fri", kind: "text", textContent: "F", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }, { name: "Sat", kind: "text", textContent: "S", textPreset: "label/sm", textFillSemantic: "color/semantic/text/tertiary" }] },
2544
+ { name: "DayGrid", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisAlign: "SPACE_BETWEEN", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", children: [{ name: "Day1", kind: "frame", width: 32, height: 32, cornerRadius: 16, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", fillSemantic: "color/semantic/actions/primary/bg/default", children: [{ name: "Num", kind: "text", textContent: "1", textPreset: "body/sm", textFillSemantic: "color/semantic/text/on-color" }] }, { name: "Day2", kind: "frame", width: 32, height: 32, cornerRadius: 16, primaryAxisAlign: "CENTER", counterAxisAlign: "CENTER", children: [{ name: "Num", kind: "text", textContent: "2", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" }] }] },
2545
+ ],
2546
+ },
2547
+ variantProperties: [
2548
+ { name: "Type", values: ["single", "range"], defaultValue: "single" },
2549
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
2550
+ ],
2551
+ tokenBindings: [
2552
+ { nodePath: "", property: "fills", semanticToken: "color/semantic/surface/default" },
2553
+ { nodePath: "DayGrid.Day1", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2554
+ ],
2555
+ };
2556
+
2557
+ const TIMEPICKER: ComponentBlueprint = {
2558
+ name: "TimePicker",
2559
+ category: "forms",
2560
+ description: "Time selection input with dropdown of time slots",
2561
+ root: {
2562
+ name: "TimePicker",
2563
+ kind: "frame",
2564
+ width: 200,
2565
+ layoutMode: "VERTICAL",
2566
+ primaryAxisSizing: "AUTO",
2567
+ counterAxisSizing: "FIXED",
2568
+ itemSpacing: 4,
2569
+ children: [
2570
+ { name: "Label", kind: "text", textContent: "Time", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" },
2571
+ {
2572
+ name: "Trigger",
2573
+ kind: "frame",
2574
+ height: 40,
2575
+ layoutMode: "HORIZONTAL",
2576
+ primaryAxisAlign: "SPACE_BETWEEN",
2577
+ counterAxisAlign: "CENTER",
2578
+ primaryAxisSizing: "AUTO",
2579
+ counterAxisSizing: "FIXED",
2580
+ paddingX: 12,
2581
+ cornerRadius: 6,
2582
+ fillSemantic: "color/semantic/field/bg/default",
2583
+ strokeSemantic: "color/semantic/field/border/default",
2584
+ strokeWeight: 1,
2585
+ children: [
2586
+ { name: "Value", kind: "text", textContent: "09:00 AM", textPreset: "body/md", textFillSemantic: "color/semantic/text/primary" },
2587
+ { name: "ClockIcon", kind: "frame", width: 16, height: 16, fillSemantic: "color/semantic/icon/secondary", iconSlot: { defaultIcon: "icon/status/pending", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
2588
+ ],
2589
+ },
2590
+ ],
2591
+ },
2592
+ variantProperties: [
2593
+ { name: "Format", values: ["12h", "24h"], defaultValue: "12h" },
2594
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2595
+ { name: "State", values: ["Default", "Open", "Focused", "Error", "Disabled"], defaultValue: "Default" },
2596
+ ],
2597
+ tokenBindings: [
2598
+ { nodePath: "Trigger", property: "fills", semanticToken: "color/semantic/field/bg/default" },
2599
+ { nodePath: "Trigger", property: "strokes", semanticToken: "color/semantic/field/border/default" },
2600
+ ],
2601
+ iconSlots: [
2602
+ { nodePath: "Trigger.ClockIcon", propName: "clockIcon", defaultIcon: "icon/status/pending", required: true },
2603
+ ],
2604
+ };
2605
+
2606
+ const RANGESLIDER: ComponentBlueprint = {
2607
+ name: "RangeSlider",
2608
+ category: "forms",
2609
+ description: "Dual-thumb slider for selecting a value range",
2610
+ root: {
2611
+ name: "RangeSlider",
2612
+ kind: "frame",
2613
+ width: 280,
2614
+ layoutMode: "VERTICAL",
2615
+ primaryAxisSizing: "AUTO",
2616
+ counterAxisSizing: "FIXED",
2617
+ itemSpacing: 8,
2618
+ children: [
2619
+ { name: "LabelRow", kind: "frame", layoutMode: "HORIZONTAL", primaryAxisAlign: "SPACE_BETWEEN", primaryAxisSizing: "AUTO", counterAxisSizing: "AUTO", children: [{ name: "Label", kind: "text", textContent: "Price range", textPreset: "label/sm", textFillSemantic: "color/semantic/text/primary" }, { name: "Values", kind: "text", textContent: "$20 – $80", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" }] },
2620
+ { name: "TrackContainer", kind: "frame", height: 24, layoutMode: "HORIZONTAL", counterAxisAlign: "CENTER", primaryAxisSizing: "AUTO", counterAxisSizing: "FIXED", children: [{ name: "Track", kind: "rect", width: 280, height: 4, cornerRadius: 2, fillSemantic: "color/semantic/border/default" }, { name: "Fill", kind: "rect", width: 168, height: 4, cornerRadius: 2, fillSemantic: "color/semantic/actions/primary/bg/default" }, { name: "ThumbMin", kind: "ellipse", width: 20, height: 20, fillSemantic: "color/semantic/surface/default", strokeSemantic: "color/semantic/actions/primary/bg/default", strokeWeight: 2 }, { name: "ThumbMax", kind: "ellipse", width: 20, height: 20, fillSemantic: "color/semantic/surface/default", strokeSemantic: "color/semantic/actions/primary/bg/default", strokeWeight: 2 }] },
2621
+ ],
2622
+ },
2623
+ variantProperties: [
2624
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
2625
+ { name: "State", values: ["Default", "Hover", "Active", "Disabled"], defaultValue: "Default" },
2626
+ ],
2627
+ tokenBindings: [
2628
+ { nodePath: "TrackContainer.Fill", property: "fills", semanticToken: "color/semantic/actions/primary/bg/default" },
2629
+ { nodePath: "TrackContainer.ThumbMin", property: "strokes", semanticToken: "color/semantic/actions/primary/bg/default" },
2630
+ { nodePath: "TrackContainer.ThumbMax", property: "strokes", semanticToken: "color/semantic/actions/primary/bg/default" },
2631
+ ],
2632
+ };
2633
+
2634
+ const INLINEEDIT: ComponentBlueprint = {
2635
+ name: "InlineEdit",
2636
+ category: "data",
2637
+ description: "Click-to-edit text field that toggles between read and edit modes",
2638
+ root: {
2639
+ name: "InlineEdit",
2640
+ kind: "frame",
2641
+ layoutMode: "HORIZONTAL",
2642
+ primaryAxisSizing: "AUTO",
2643
+ counterAxisSizing: "AUTO",
2644
+ itemSpacing: 4,
2645
+ counterAxisAlign: "CENTER",
2646
+ paddingX: 4,
2647
+ paddingY: 4,
2648
+ cornerRadius: 4,
2649
+ children: [
2650
+ { name: "Value", kind: "text", textContent: "Click to edit", textPreset: "body/md", textFillSemantic: "color/semantic/text/primary" },
2651
+ { name: "EditIcon", kind: "frame", width: 14, height: 14, fillSemantic: "color/semantic/icon/secondary", opacity: 0, iconSlot: { defaultIcon: "icon/action/edit", required: true, size: "xs", colorToken: "color/semantic/icon/secondary", decorative: true } },
2652
+ ],
2653
+ },
2654
+ variantProperties: [
2655
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2656
+ { name: "State", values: ["ReadMode", "EditMode", "Saving", "Error"], defaultValue: "ReadMode" },
2657
+ ],
2658
+ tokenBindings: [],
2659
+ iconSlots: [
2660
+ { nodePath: "EditIcon", propName: "editIcon", defaultIcon: "icon/action/edit", required: true },
2661
+ ],
2662
+ };
2663
+
2664
+ // ─── Batch 6: Final ─────────────────────────────────────────────────────────
2665
+
2666
+ const STATUSDOT: ComponentBlueprint = {
2667
+ name: "StatusDot",
2668
+ category: "core",
2669
+ description: "Colored dot indicator for status with required text label",
2670
+ root: {
2671
+ name: "StatusDot",
2672
+ kind: "frame",
2673
+ layoutMode: "HORIZONTAL",
2674
+ primaryAxisSizing: "AUTO",
2675
+ counterAxisSizing: "AUTO",
2676
+ itemSpacing: 6,
2677
+ counterAxisAlign: "CENTER",
2678
+ children: [
2679
+ { name: "Dot", kind: "ellipse", width: 10, height: 10, fillSemantic: "color/semantic/feedback/success/text" },
2680
+ { name: "Label", kind: "text", textContent: "Online", textPreset: "body/sm", textFillSemantic: "color/semantic/text/primary" },
2681
+ ],
2682
+ },
2683
+ variantProperties: [
2684
+ { name: "Status", values: ["success", "warning", "error", "info", "neutral", "offline", "online"], defaultValue: "success" },
2685
+ { name: "Size", values: ["sm", "md"], defaultValue: "md" },
2686
+ ],
2687
+ tokenBindings: [
2688
+ { nodePath: "Dot", property: "fills", semanticToken: "color/semantic/feedback/success/text" },
2689
+ ],
2690
+ };
2691
+
2692
+ const RATING: ComponentBlueprint = {
2693
+ name: "Rating",
2694
+ category: "forms",
2695
+ description: "Star-based rating input for user feedback or read-only display",
2696
+ root: {
2697
+ name: "Rating",
2698
+ kind: "frame",
2699
+ layoutMode: "HORIZONTAL",
2700
+ primaryAxisSizing: "AUTO",
2701
+ counterAxisSizing: "AUTO",
2702
+ itemSpacing: 4,
2703
+ counterAxisAlign: "CENTER",
2704
+ children: [
2705
+ { name: "Star1", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/feedback/warning/text", iconSlot: { defaultIcon: "icon/toggle/star", required: true, size: "md", colorToken: "color/semantic/feedback/warning/text", decorative: false } },
2706
+ { name: "Star2", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/feedback/warning/text", iconSlot: { defaultIcon: "icon/toggle/star", required: true, size: "md", colorToken: "color/semantic/feedback/warning/text", decorative: false } },
2707
+ { name: "Star3", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/feedback/warning/text", iconSlot: { defaultIcon: "icon/toggle/star", required: true, size: "md", colorToken: "color/semantic/feedback/warning/text", decorative: false } },
2708
+ { name: "Star4", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/border/default", iconSlot: { defaultIcon: "icon/toggle/star", required: true, size: "md", colorToken: "color/semantic/border/default", decorative: false } },
2709
+ { name: "Star5", kind: "frame", width: 24, height: 24, fillSemantic: "color/semantic/border/default", iconSlot: { defaultIcon: "icon/toggle/star", required: true, size: "md", colorToken: "color/semantic/border/default", decorative: false } },
2710
+ { name: "Value", kind: "text", textContent: "3.0", textPreset: "label/sm", textFillSemantic: "color/semantic/text/secondary" },
2711
+ ],
2712
+ },
2713
+ variantProperties: [
2714
+ { name: "Size", values: ["sm", "md", "lg"], defaultValue: "md" },
2715
+ { name: "State", values: ["Interactive", "ReadOnly", "Disabled"], defaultValue: "Interactive" },
2716
+ ],
2717
+ tokenBindings: [
2718
+ { nodePath: "Star1", property: "fills", semanticToken: "color/semantic/feedback/warning/text" },
2719
+ { nodePath: "Star4", property: "fills", semanticToken: "color/semantic/border/default" },
2720
+ ],
2721
+ iconSlots: [
2722
+ { nodePath: "Star1", propName: "star1Icon", defaultIcon: "icon/toggle/star", required: true },
2723
+ { nodePath: "Star2", propName: "star2Icon", defaultIcon: "icon/toggle/star", required: true },
2724
+ { nodePath: "Star3", propName: "star3Icon", defaultIcon: "icon/toggle/star", required: true },
2725
+ { nodePath: "Star4", propName: "star4Icon", defaultIcon: "icon/toggle/star", required: true },
2726
+ { nodePath: "Star5", propName: "star5Icon", defaultIcon: "icon/toggle/star", required: true },
2727
+ ],
2728
+ };
2729
+
2730
+ // ─── Aggregate ──────────────────────────────────────────────────────────────
2731
+
2732
+ export const COMPONENT_BLUEPRINTS: ComponentBlueprint[] = [
2733
+ // Original 17
2734
+ BUTTON, INPUT, SELECT, CHECKBOX, TOGGLE, RADIO,
2735
+ CARD, MODAL, TOAST, BADGE, AVATAR, TOOLTIP,
2736
+ TABS, BREADCRUMB, TAG, NAVBAR, TABLE,
2737
+ // Batch 1: Gap-fill + new Tier 1
2738
+ ACCORDION, SLIDER, ALERT, CHIP, PROGRESS, SIDENAVIGATION,
2739
+ ICON, LINK, MENU, SPINNER,
2740
+ // Batch 2: Tier 2 Forms
2741
+ TEXTAREA, SEARCH, COMBOBOX, DATEPICKER, NUMBERINPUT, FORM,
2742
+ // Batch 3: Nav + Data + Layout
2743
+ PAGINATION, LIST, TREEVIEW, TYPOGRAPHY, DIVIDER, SKELETON,
2744
+ // Batch 4: Overlay + Remaining
2745
+ POPOVER, DROPDOWNMENU, AVATARGROUP, GRID, EMPTYSTATE, BANNER,
2746
+ // Batch 5: Tier 3
2747
+ DRAWER, SEGMENTEDCONTROL, STEPPER, FILEUPLOADER, INLINEMESSAGE,
2748
+ TOOLBAR, CALENDAR, TIMEPICKER, RANGESLIDER, INLINEEDIT,
2749
+ // Batch 6: Final
2750
+ STATUSDOT, RATING,
2751
+ ];
2752
+
2753
+ /**
2754
+ * Get blueprints filtered by category.
2755
+ */
2756
+ export function getBlueprintsByCategory(
2757
+ categories: Array<"core" | "forms" | "navigation" | "data" | "feedback" | "overlay" | "layout">
2758
+ ): ComponentBlueprint[] {
2759
+ return COMPONENT_BLUEPRINTS.filter((b) => categories.includes(b.category));
2760
+ }
2761
+
2762
+ /**
2763
+ * Get a single blueprint by name.
2764
+ */
2765
+ export function getBlueprint(name: string): ComponentBlueprint | undefined {
2766
+ return COMPONENT_BLUEPRINTS.find((b) => b.name.toLowerCase() === name.toLowerCase());
2767
+ }