@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,289 @@
1
+ /**
2
+ * Knowledge: Toggle Switch
3
+ */
4
+ import type { ComponentKnowledge } from "../types.js";
5
+
6
+ export const toggleKnowledge: ComponentKnowledge = {
7
+ description:
8
+ "Binary switch control | Immediate state change | On/Off preference toggle",
9
+
10
+ stateSpecifications: [
11
+ {
12
+ state: "Off",
13
+ visualChange: "Track is neutral/muted; thumb is positioned to the left",
14
+ opacity: "1",
15
+ cursorWeb: "pointer",
16
+ usage: "Default inactive state — the associated setting is disabled",
17
+ },
18
+ {
19
+ state: "On",
20
+ visualChange:
21
+ "Track fills with primary color; thumb slides to the right",
22
+ opacity: "1",
23
+ cursorWeb: "pointer",
24
+ usage: "Active state — the associated setting is enabled",
25
+ },
26
+ {
27
+ state: "Disabled (off)",
28
+ visualChange:
29
+ "Track and thumb are muted; no pointer events; off position",
30
+ opacity: "0.4",
31
+ cursorWeb: "not-allowed",
32
+ usage: "Toggle is inactive and cannot be changed by the user",
33
+ },
34
+ {
35
+ state: "Disabled (on)",
36
+ visualChange:
37
+ "Track shows muted primary; thumb on right; no pointer events",
38
+ opacity: "0.4",
39
+ cursorWeb: "not-allowed",
40
+ usage: "Toggle is active but locked and cannot be changed",
41
+ },
42
+ {
43
+ state: "Focus",
44
+ visualChange: "Focus ring appears around the track or thumb",
45
+ opacity: "1",
46
+ cursorWeb: "pointer",
47
+ usage: "Toggle has keyboard focus and can be operated with Space",
48
+ },
49
+ {
50
+ state: "Hover",
51
+ visualChange: "Subtle background tint or shadow on the track",
52
+ opacity: "1",
53
+ cursorWeb: "pointer",
54
+ usage: "Pointer is over the toggle, indicating interactivity",
55
+ },
56
+ ],
57
+
58
+ propertyDescriptions: {
59
+ checked: "Boolean indicating whether the toggle is on (true) or off (false)",
60
+ disabled: "Prevents interaction and visually mutes the component",
61
+ label: "Descriptive text adjacent to the toggle explaining its purpose",
62
+ labelPosition:
63
+ "Placement of the label relative to the toggle: 'start' (left/above) or 'end' (right/below)",
64
+ size: "Visual size variant: small, medium, or large",
65
+ },
66
+
67
+ sizeSpecifications: [
68
+ {
69
+ size: "Small",
70
+ height: "16px",
71
+ paddingLR: "2px",
72
+ fontSize: "12px",
73
+ iconSize: "12px",
74
+ borderRadius: "8px",
75
+ },
76
+ {
77
+ size: "Medium",
78
+ height: "20px",
79
+ paddingLR: "2px",
80
+ fontSize: "14px",
81
+ iconSize: "14px",
82
+ borderRadius: "10px",
83
+ },
84
+ {
85
+ size: "Large",
86
+ height: "24px",
87
+ paddingLR: "3px",
88
+ fontSize: "16px",
89
+ iconSize: "16px",
90
+ borderRadius: "12px",
91
+ },
92
+ ],
93
+
94
+ designTokenBindings: [
95
+ {
96
+ property: "background-color (track off)",
97
+ tokenName: "toggle/track/bg/off",
98
+ role: "Track background when toggle is off",
99
+ fallback: "#C6C6C6",
100
+ },
101
+ {
102
+ property: "background-color (track on)",
103
+ tokenName: "toggle/track/bg/on",
104
+ role: "Track background when toggle is on",
105
+ fallback: "#0F62FE",
106
+ },
107
+ {
108
+ property: "background-color (thumb)",
109
+ tokenName: "toggle/thumb/bg",
110
+ role: "Thumb circle fill color",
111
+ fallback: "#FFFFFF",
112
+ },
113
+ {
114
+ property: "box-shadow (focus)",
115
+ tokenName: "toggle/focus-ring",
116
+ role: "Focus ring outline on keyboard focus",
117
+ fallback: "0 0 0 2px #0F62FE",
118
+ },
119
+ {
120
+ property: "color (label)",
121
+ tokenName: "toggle/label/color",
122
+ role: "Label text color adjacent to the toggle",
123
+ fallback: "#161616",
124
+ },
125
+ ],
126
+
127
+ structureRules: [
128
+ "The toggle consists of a track (pill shape) and a thumb (circle) that slides between left and right positions",
129
+ "The label is a sibling element positioned to the start or end of the track depending on labelPosition",
130
+ "Track width is approximately 1.75x its height to allow clear thumb travel",
131
+ "The thumb diameter equals the track height minus internal padding on both sides",
132
+ "No additional icons or text are placed inside the track by default",
133
+ ],
134
+
135
+ typeHierarchyRules: [
136
+ "Label uses the component's base font size at regular weight",
137
+ "If a description or sub-label is present, it uses one step smaller font size at regular weight",
138
+ "Label and toggle are vertically center-aligned",
139
+ ],
140
+
141
+ interactionRules: [
142
+ {
143
+ event: "click",
144
+ trigger: "User clicks the track, thumb, or label",
145
+ action:
146
+ "Toggle state flips immediately (on to off or off to on); onChange fires",
147
+ },
148
+ {
149
+ event: "keydown (Space)",
150
+ trigger: "User presses Space while the toggle is focused",
151
+ action: "Toggle state flips; same behavior as click",
152
+ },
153
+ {
154
+ event: "drag",
155
+ trigger: "User drags the thumb horizontally across the track",
156
+ action:
157
+ "Thumb follows the pointer; state commits when released past the midpoint",
158
+ },
159
+ {
160
+ event: "change",
161
+ trigger: "Toggle state changes by any method",
162
+ action:
163
+ "Effect takes place immediately — no form submission required",
164
+ },
165
+ ],
166
+
167
+ contentGuidance: [
168
+ "Label should clearly describe the setting being controlled (e.g. 'Enable notifications')",
169
+ "Use positive framing — the label describes what happens when the toggle is on",
170
+ "Avoid double negatives (e.g. 'Disable auto-save' is confusing when toggled off)",
171
+ "If the toggle controls a destructive or irreversible action, pair it with a confirmation dialog",
172
+ "Toggles imply an immediate effect — do not use them for choices that require a Save button",
173
+ ],
174
+
175
+ responsiveBehaviour: [
176
+ {
177
+ breakpoint: "< 480px",
178
+ behavior:
179
+ "Toggle and label are placed on a single row; label may wrap to a second line if needed",
180
+ },
181
+ {
182
+ breakpoint: "480px – 1024px",
183
+ behavior:
184
+ "Toggle and label sit inline within settings cards or form rows",
185
+ },
186
+ {
187
+ breakpoint: "> 1024px",
188
+ behavior:
189
+ "Toggle may appear in dense settings panels; size stays consistent across breakpoints",
190
+ },
191
+ ],
192
+
193
+ accessibilitySpec: {
194
+ intro:
195
+ "The toggle must use role=\"switch\" so assistive technology announces it as a binary on/off control with immediate effect.",
196
+ requirements: [
197
+ {
198
+ requirement:
199
+ "Element has role=\"switch\" with aria-checked reflecting the current state (true/false)",
200
+ level: "A",
201
+ notes: "WCAG 4.1.2 – Name, Role, Value",
202
+ },
203
+ {
204
+ requirement:
205
+ "An accessible name is provided via a visible label linked by htmlFor/id or aria-labelledby",
206
+ level: "A",
207
+ notes: "WCAG 1.3.1 – Info and Relationships",
208
+ },
209
+ {
210
+ requirement:
211
+ "State change is announced immediately by screen readers when toggled",
212
+ level: "A",
213
+ notes: "WCAG 4.1.2 – users must perceive the state change",
214
+ },
215
+ {
216
+ requirement:
217
+ "Focus indicator is visible with at least 3:1 contrast against adjacent colors",
218
+ level: "AA",
219
+ notes: "WCAG 2.4.7 – Focus Visible",
220
+ },
221
+ {
222
+ requirement:
223
+ "Track and thumb contrast meet 3:1 non-text UI requirement in both on and off states",
224
+ level: "AA",
225
+ notes: "WCAG 1.4.11 – Non-text Contrast",
226
+ },
227
+ ],
228
+ outro: [
229
+ "Test with VoiceOver and NVDA: focus the toggle, press Space, and verify the state announcement changes",
230
+ "Ensure the change takes effect immediately without requiring a separate submit action",
231
+ "Verify that disabled toggles are announced as dimmed/unavailable and cannot be operated",
232
+ ],
233
+ },
234
+
235
+ qaAcceptanceCriteria: [
236
+ {
237
+ check: "Toggle animation",
238
+ platform: "Web / Mobile",
239
+ expectedResult:
240
+ "Thumb slides smoothly between on and off positions; track color transitions within 150ms",
241
+ },
242
+ {
243
+ check: "Disabled state",
244
+ platform: "Web / Mobile",
245
+ expectedResult:
246
+ "Clicking or pressing Space on a disabled toggle has no effect; cursor shows not-allowed",
247
+ },
248
+ {
249
+ check: "Keyboard operation",
250
+ platform: "Web",
251
+ expectedResult:
252
+ "Space key toggles the state; Tab moves focus to/from the toggle",
253
+ },
254
+ {
255
+ check: "Screen reader announcement",
256
+ platform: "Web",
257
+ expectedResult:
258
+ "VoiceOver/NVDA reads label, role as 'switch', and current state ('on' or 'off')",
259
+ },
260
+ {
261
+ check: "Drag behavior",
262
+ platform: "Web / Mobile",
263
+ expectedResult:
264
+ "Dragging the thumb past the midpoint commits the state change; releasing before midpoint reverts",
265
+ },
266
+ {
267
+ check: "Immediate effect",
268
+ platform: "Web / Mobile",
269
+ expectedResult:
270
+ "Toggling fires the onChange callback immediately without waiting for form submission",
271
+ },
272
+ ],
273
+
274
+ dos: [
275
+ "Use toggles for binary settings that take effect immediately",
276
+ "Provide a clear label that describes the 'on' state",
277
+ "Animate the thumb transition for visual feedback",
278
+ "Maintain consistent sizing with adjacent form controls",
279
+ "Ensure both on and off track colors have sufficient contrast against the background",
280
+ ],
281
+
282
+ donts: [
283
+ "Do not use a toggle when a checkbox with a Save button is more appropriate",
284
+ "Do not use a toggle for multi-option choices — use radio buttons or a select instead",
285
+ "Do not place the toggle inside a scrollable container where drag conflicts with scroll",
286
+ "Do not remove the label — a standalone toggle without text is not self-explanatory",
287
+ "Do not change the toggle's semantics to behave like a button that triggers navigation",
288
+ ],
289
+ };
@@ -0,0 +1,267 @@
1
+ /**
2
+ * toolbar.ts — Gold-standard design knowledge for Toolbar components
3
+ */
4
+ import type { ComponentKnowledge } from "../types.js";
5
+
6
+ export const toolbarKnowledge: ComponentKnowledge = {
7
+ description:
8
+ "Horizontal action bar | Grouped controls container | Provides quick access to contextual actions and tools",
9
+
10
+ stateSpecifications: [
11
+ {
12
+ state: "Default",
13
+ visualChange: "Toolbar renders as a horizontal bar with evenly spaced action items in their resting state",
14
+ opacity: "1",
15
+ cursorWeb: "default",
16
+ usage: "Standard resting state — all toolbar items are interactive and ready for activation",
17
+ },
18
+ {
19
+ state: "Item Hover",
20
+ visualChange: "Individual toolbar item background shifts to a subtle hover tint; icon/text color may intensify",
21
+ opacity: "1",
22
+ cursorWeb: "pointer",
23
+ usage: "Mouse cursor enters a specific toolbar item's hit area",
24
+ },
25
+ {
26
+ state: "Item Active/Pressed",
27
+ visualChange: "Item background darkens further; slight depression effect for tactile feedback",
28
+ opacity: "1",
29
+ cursorWeb: "pointer",
30
+ usage: "Mouse button is held down on a toolbar item",
31
+ },
32
+ {
33
+ state: "Item Selected/Toggled",
34
+ visualChange: "Item has filled background or bottom indicator bar; icon/text uses active/primary color",
35
+ opacity: "1",
36
+ cursorWeb: "default",
37
+ usage: "A toggle-type toolbar item is in its active/on state (e.g. Bold, Italic formatting)",
38
+ },
39
+ {
40
+ state: "Item Disabled",
41
+ visualChange: "Individual item icon and text are muted; no hover or click response",
42
+ opacity: "0.4",
43
+ cursorWeb: "not-allowed",
44
+ usage: "A specific action is unavailable in the current context (e.g. Undo with no history)",
45
+ },
46
+ {
47
+ state: "Item Focus",
48
+ visualChange: "2px focus ring around the focused item; achieved via arrow key or Tab navigation",
49
+ opacity: "1",
50
+ cursorWeb: "pointer",
51
+ usage: "A toolbar item receives keyboard focus via the roving tabindex pattern",
52
+ },
53
+ {
54
+ state: "Overflow",
55
+ visualChange: "Items that do not fit are hidden; an overflow menu button (three dots) appears at the end",
56
+ opacity: "1",
57
+ cursorWeb: "pointer",
58
+ usage: "Container is too narrow to display all items — excess items move to an overflow dropdown",
59
+ },
60
+ ],
61
+
62
+ propertyDescriptions: {
63
+ items: "Array of toolbar item objects, each with a label, icon, onClick handler, type (button/toggle/separator), and optional disabled flag",
64
+ size: "Dimensional preset — Small, Medium, or Large — controlling item height, icon size, and padding",
65
+ overflow: "Overflow behavior — 'visible' keeps all items visible (may overflow container) or 'menu' moves excess items to a dropdown",
66
+ orientation: "Layout direction — 'horizontal' (default) for standard toolbars or 'vertical' for sidebar tool palettes",
67
+ ariaLabel: "Accessible label for the toolbar — describes the toolbar purpose (e.g. 'Text formatting', 'Drawing tools')",
68
+ variant: "Visual style — 'solid' with background fill, 'subtle' with transparent background, or 'outlined' with border",
69
+ groupSeparator: "When true, renders visual dividers between logical groups of toolbar items",
70
+ },
71
+
72
+ sizeSpecifications: [
73
+ {
74
+ size: "Small",
75
+ height: "32px",
76
+ paddingLR: "4px",
77
+ fontSize: "12px",
78
+ iconSize: "16px",
79
+ borderRadius: "6px",
80
+ },
81
+ {
82
+ size: "Medium",
83
+ height: "40px",
84
+ paddingLR: "6px",
85
+ fontSize: "14px",
86
+ iconSize: "20px",
87
+ borderRadius: "8px",
88
+ },
89
+ {
90
+ size: "Large",
91
+ height: "48px",
92
+ paddingLR: "8px",
93
+ fontSize: "16px",
94
+ iconSize: "24px",
95
+ borderRadius: "10px",
96
+ },
97
+ ],
98
+
99
+ designTokenBindings: [
100
+ {
101
+ property: "Toolbar Background",
102
+ tokenName: "$toolbar-bg",
103
+ role: "Background fill of the toolbar container",
104
+ fallback: "#FFFFFF",
105
+ },
106
+ {
107
+ property: "Toolbar Border",
108
+ tokenName: "$toolbar-border",
109
+ role: "Border around or below the toolbar for definition",
110
+ fallback: "#E4E7EC",
111
+ },
112
+ {
113
+ property: "Item Default Color",
114
+ tokenName: "$toolbar-item-color",
115
+ role: "Icon and text color for toolbar items in default state",
116
+ fallback: "#667085",
117
+ },
118
+ {
119
+ property: "Item Hover Background",
120
+ tokenName: "$toolbar-item-hover-bg",
121
+ role: "Background tint on individual item hover",
122
+ fallback: "#F2F4F7",
123
+ },
124
+ {
125
+ property: "Item Active Background",
126
+ tokenName: "$toolbar-item-active-bg",
127
+ role: "Background fill when an item is pressed or actively toggled",
128
+ fallback: "#E4E7EC",
129
+ },
130
+ {
131
+ property: "Item Selected Color",
132
+ tokenName: "$toolbar-item-selected-color",
133
+ role: "Icon and text color for a selected/toggled-on item",
134
+ fallback: "#2563EB",
135
+ },
136
+ {
137
+ property: "Item Selected Background",
138
+ tokenName: "$toolbar-item-selected-bg",
139
+ role: "Background fill for a selected/toggled-on item",
140
+ fallback: "#EFF8FF",
141
+ },
142
+ {
143
+ property: "Separator",
144
+ tokenName: "$toolbar-separator",
145
+ role: "Color of the vertical divider line between item groups",
146
+ fallback: "#E4E7EC",
147
+ },
148
+ {
149
+ property: "Focus Ring",
150
+ tokenName: "$focus-ring",
151
+ role: "Keyboard focus indicator around the focused toolbar item",
152
+ fallback: "0 0 0 2px #FFFFFF, 0 0 0 4px #2E90FA",
153
+ },
154
+ {
155
+ property: "Shadow",
156
+ tokenName: "$shadow-toolbar",
157
+ role: "Optional subtle shadow for floating toolbar variants",
158
+ fallback: "0 1px 3px rgba(0, 0, 0, 0.1)",
159
+ },
160
+ ],
161
+
162
+ structureRules: [
163
+ "Toolbar container uses horizontal Auto Layout (or vertical for sidebar variant) with items as direct children",
164
+ "Items within a logical group have $spacing-2xs (2px) gap; groups are separated by a visual divider",
165
+ "Separators are 1px vertical lines (horizontal toolbar) or 1px horizontal lines (vertical toolbar) using the separator token",
166
+ "Each item is a square or near-square button containing an icon centered both horizontally and vertically",
167
+ "Items with labels render the label below (horizontal) or beside (vertical) the icon in a compact arrangement",
168
+ "Overflow menu button is always the last visible item and uses a three-dot (ellipsis) icon",
169
+ "Overflow dropdown menu inherits the menu component pattern with the hidden items listed as menu items",
170
+ "Toolbar container has minimal internal padding (4-8px) to keep it compact",
171
+ "Toolbar should not wrap to multiple lines — use the overflow pattern when items exceed container width",
172
+ ],
173
+
174
+ typeHierarchyRules: [
175
+ "Item labels (when shown) use Medium weight (500) at one size smaller than the size preset fontSize",
176
+ "Labels are optional — icon-only toolbars are the most common pattern",
177
+ "Tooltip text for icon-only items uses Regular weight (400) at 12px",
178
+ "Overflow menu item text uses Regular weight (400) at the standard menu item font size",
179
+ ],
180
+
181
+ interactionRules: [
182
+ { event: "Click (Button Item)", trigger: "Pointer up on a button-type toolbar item", action: "Fire the item's onClick handler; provide brief visual active feedback" },
183
+ { event: "Click (Toggle Item)", trigger: "Pointer up on a toggle-type toolbar item", action: "Toggle the item's selected state; update visual treatment; fire onChange" },
184
+ { event: "Hover", trigger: "Pointer enters a toolbar item", action: "Item background transitions to hover tint; tooltip appears after delay" },
185
+ { event: "Focus (Tab)", trigger: "Tab key reaches the toolbar", action: "Focus lands on the first (or last-focused) item in the toolbar; focus ring appears" },
186
+ { event: "Arrow Right", trigger: "Right arrow while focused (horizontal)", action: "Move focus to the next item; skip separators; wrap from last to first" },
187
+ { event: "Arrow Left", trigger: "Left arrow while focused (horizontal)", action: "Move focus to the previous item; skip separators; wrap from first to last" },
188
+ { event: "Arrow Down", trigger: "Down arrow while focused (vertical)", action: "Move focus to the next item in a vertical toolbar" },
189
+ { event: "Arrow Up", trigger: "Up arrow while focused (vertical)", action: "Move focus to the previous item in a vertical toolbar" },
190
+ { event: "Home", trigger: "Home key while focused", action: "Move focus to the first interactive item in the toolbar" },
191
+ { event: "End", trigger: "End key while focused", action: "Move focus to the last interactive item in the toolbar" },
192
+ { event: "Overflow Toggle", trigger: "Click on the overflow menu button", action: "Open a dropdown menu containing the hidden overflow items" },
193
+ ],
194
+
195
+ contentGuidance: [
196
+ "Group related actions together — separate groups with visual dividers",
197
+ "Limit toolbar to 5-12 visible items — use overflow for additional actions",
198
+ "Icon-only toolbars must have tooltips on every item for discoverability",
199
+ "Use familiar, standard icons — avoid custom icons that require learning",
200
+ "Place the most frequently used actions at the beginning (left for horizontal, top for vertical)",
201
+ "Toggle items should have a clear selected vs. unselected visual distinction",
202
+ "Overflow menu should preserve the same item order as the visible toolbar",
203
+ ],
204
+
205
+ responsiveBehaviour: [
206
+ { breakpoint: "Mobile (<768px)", behavior: "Toolbar items collapse aggressively into overflow menu; only 3-4 most important items remain visible" },
207
+ { breakpoint: "Tablet (768-1023px)", behavior: "Most items visible; overflow handles 2-3 least-used items; touch targets are 44px minimum" },
208
+ { breakpoint: "Desktop (1024-1439px)", behavior: "All items visible in most cases; overflow activates only for very dense toolbars" },
209
+ { breakpoint: "Ultra-wide (>=1440px)", behavior: "Toolbar width remains capped at container width; items do not spread to fill extra space" },
210
+ ],
211
+
212
+ accessibilitySpec: {
213
+ intro:
214
+ "Toolbars group related controls for quick access. The WAI-ARIA toolbar pattern requires proper role assignment, arrow key navigation, and accessible names for all items.",
215
+ requirements: [
216
+ { requirement: "Role", level: "A", notes: "Container must have role='toolbar' with aria-label or aria-labelledby describing the toolbar purpose" },
217
+ { requirement: "Orientation", level: "A", notes: "Use aria-orientation='horizontal' or 'vertical' to inform screen readers of the navigation axis" },
218
+ { requirement: "Roving Tabindex", level: "A", notes: "Only one item has tabindex='0' at a time; arrow keys move focus; Tab exits the toolbar" },
219
+ { requirement: "Item Labels", level: "A", notes: "Icon-only items require aria-label; toggle items need aria-pressed='true'/'false'" },
220
+ { requirement: "Disabled Items", level: "A", notes: "Disabled items have aria-disabled='true'; they remain in the arrow key navigation but are not activatable" },
221
+ { requirement: "Keyboard Activation", level: "A", notes: "Enter and Space activate the focused toolbar item; toggle items change aria-pressed" },
222
+ { requirement: "Contrast", level: "AA", notes: "All item icons meet 3:1 non-text contrast; labels meet 4.5:1 text contrast" },
223
+ { requirement: "Touch Target", level: "AA", notes: "Each toolbar item has a minimum 44x44px touch area" },
224
+ ],
225
+ outro: [
226
+ "Test with screen readers to verify role='toolbar' is announced, along with the toolbar label and item count",
227
+ "Verify arrow keys navigate between items and wrap at boundaries",
228
+ "Ensure overflow menu items are announced with their original labels and states",
229
+ ],
230
+ },
231
+
232
+ qaAcceptanceCriteria: [
233
+ { check: "Default Render", platform: "All", expectedResult: "Toolbar displays all items in a horizontal row with correct spacing and separators" },
234
+ { check: "Item Hover", platform: "Web", expectedResult: "Individual items show hover background tint on pointer enter" },
235
+ { check: "Item Click", platform: "All", expectedResult: "Button items fire onClick; toggle items change selected state and fire onChange" },
236
+ { check: "Toggle State", platform: "All", expectedResult: "Toggled-on items show filled/selected visual; toggled-off items show default treatment" },
237
+ { check: "Arrow Key Navigation", platform: "Web", expectedResult: "Left/Right arrows move focus between items; Home/End jump to first/last" },
238
+ { check: "Tab Behavior", platform: "Web", expectedResult: "Tab enters toolbar on the last-focused item; next Tab exits to the next focusable element" },
239
+ { check: "Disabled Item", platform: "All", expectedResult: "Disabled items show muted visuals; not clickable; included in arrow key navigation but not activatable" },
240
+ { check: "Overflow Menu", platform: "Web", expectedResult: "Excess items move to overflow dropdown; dropdown opens on overflow button click" },
241
+ { check: "Separator Rendering", platform: "All", expectedResult: "Visual dividers appear between groups; correct color and spacing" },
242
+ { check: "Tooltip", platform: "Web", expectedResult: "Tooltips appear on hover/focus for icon-only items with correct label text" },
243
+ { check: "Screen Reader", platform: "Web", expectedResult: "Announces toolbar role, label, item labels, toggle states, and disabled states" },
244
+ { check: "Vertical Orientation", platform: "All", expectedResult: "Items stack vertically; Up/Down arrows navigate; aria-orientation is 'vertical'" },
245
+ { check: "RTL Support", platform: "Web", expectedResult: "Item order mirrors; arrow key direction reverses; separators position correctly" },
246
+ ],
247
+
248
+ dos: [
249
+ "Use role='toolbar' with a descriptive aria-label for the toolbar container",
250
+ "Group related actions and separate groups with visual dividers",
251
+ "Implement roving tabindex for single-Tab-stop keyboard navigation",
252
+ "Provide tooltips for all icon-only toolbar items",
253
+ "Use the overflow pattern when items exceed the available container width",
254
+ "Give toggle items a clear selected/unselected visual distinction with aria-pressed",
255
+ "Place the most frequently used actions first (leftmost or topmost)",
256
+ ],
257
+
258
+ donts: [
259
+ "Do not use a toolbar for navigation — use a navbar or tab bar instead",
260
+ "Do not allow the toolbar to wrap to multiple rows — use overflow instead",
261
+ "Do not make toolbar items smaller than the 44x44px minimum touch target",
262
+ "Do not use text-only toolbar items without icons — toolbars are primarily icon-driven",
263
+ "Do not mix unrelated actions in the same toolbar — separate into distinct toolbars",
264
+ "Do not use the toolbar pattern for a simple button group — toolbars imply the WAI-ARIA toolbar pattern",
265
+ "Do not hide the overflow indicator when items are clipped — users need to discover hidden actions",
266
+ ],
267
+ };