@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,232 @@
1
+ /**
2
+ * tooltip.ts — Gold-standard design knowledge for Tooltip components
3
+ */
4
+ import type { ComponentKnowledge } from "../types.js";
5
+
6
+ export const tooltipKnowledge: ComponentKnowledge = {
7
+ description:
8
+ "Contextual hint | Hover-triggered information overlay | Supplementary label",
9
+
10
+ stateSpecifications: [
11
+ {
12
+ state: "Hidden",
13
+ visualChange: "Tooltip is not rendered in the DOM or has opacity 0 and pointer-events none",
14
+ opacity: "0",
15
+ cursorWeb: "default",
16
+ usage: "Default state — tooltip is invisible until triggered by hover or focus",
17
+ },
18
+ {
19
+ state: "Visible",
20
+ visualChange: "Tooltip fades in with arrow pointer anchored to the trigger element; positioned above/below/left/right",
21
+ opacity: "1",
22
+ cursorWeb: "default",
23
+ usage: "User hovers or focuses the trigger element after the configured delay",
24
+ },
25
+ {
26
+ state: "Entering",
27
+ visualChange: "Tooltip fades in over 150ms with a subtle scale-up from 0.95 to 1.0",
28
+ opacity: "0 → 1",
29
+ cursorWeb: "default",
30
+ usage: "Transition state during the show animation after delay completes",
31
+ },
32
+ {
33
+ state: "Exiting",
34
+ visualChange: "Tooltip fades out over 100ms; faster than entry for responsive feel",
35
+ opacity: "1 → 0",
36
+ cursorWeb: "default",
37
+ usage: "Mouse leaves the trigger or focus moves away",
38
+ },
39
+ {
40
+ state: "Repositioned",
41
+ visualChange: "Tooltip flips to an alternate placement when clipped by viewport edge",
42
+ opacity: "1",
43
+ cursorWeb: "default",
44
+ usage: "Automatic collision detection repositions the tooltip to stay fully visible",
45
+ },
46
+ {
47
+ state: "Persistent (Focus)",
48
+ visualChange: "Tooltip remains visible while the trigger element retains keyboard focus",
49
+ opacity: "1",
50
+ cursorWeb: "default",
51
+ usage: "Keyboard user tabs to the trigger — tooltip stays until focus leaves",
52
+ },
53
+ ],
54
+
55
+ propertyDescriptions: {
56
+ content: "Plain text string displayed inside the tooltip; must be concise and non-interactive",
57
+ placement: "Preferred position relative to the trigger — top, bottom, left, or right; auto-flips on collision",
58
+ delayShow: "Milliseconds to wait after hover/focus before showing the tooltip (default 300ms)",
59
+ delayHide: "Milliseconds to wait after hover/focus leaves before hiding (default 100ms)",
60
+ hasArrow: "When true, a triangular pointer connects the tooltip bubble to its trigger element",
61
+ maxWidth: "Maximum width before text wraps; prevents overly wide tooltips (default 240px)",
62
+ triggerElement: "The interactive element that activates the tooltip on hover or focus",
63
+ },
64
+
65
+ sizeSpecifications: [
66
+ {
67
+ size: "Small",
68
+ height: "24px",
69
+ paddingLR: "8px",
70
+ fontSize: "11px",
71
+ iconSize: "12px",
72
+ borderRadius: "4px",
73
+ },
74
+ {
75
+ size: "Medium",
76
+ height: "32px",
77
+ paddingLR: "12px",
78
+ fontSize: "12px",
79
+ iconSize: "14px",
80
+ borderRadius: "6px",
81
+ },
82
+ {
83
+ size: "Large",
84
+ height: "auto",
85
+ paddingLR: "16px",
86
+ fontSize: "13px",
87
+ iconSize: "16px",
88
+ borderRadius: "8px",
89
+ },
90
+ ],
91
+
92
+ designTokenBindings: [
93
+ {
94
+ property: "Background",
95
+ tokenName: "$tooltip-bg",
96
+ role: "Dark fill for the tooltip bubble ensuring contrast with light pages",
97
+ fallback: "#1D2939",
98
+ },
99
+ {
100
+ property: "Text Color",
101
+ tokenName: "$tooltip-text",
102
+ role: "Light text on dark background for readability",
103
+ fallback: "#FFFFFF",
104
+ },
105
+ {
106
+ property: "Arrow Fill",
107
+ tokenName: "$tooltip-arrow",
108
+ role: "Matches the tooltip background to create a seamless pointer",
109
+ fallback: "#1D2939",
110
+ },
111
+ {
112
+ property: "Border Radius",
113
+ tokenName: "$radius-tooltip",
114
+ role: "Corner rounding for the tooltip bubble",
115
+ fallback: "6px",
116
+ },
117
+ {
118
+ property: "Shadow",
119
+ tokenName: "$shadow-tooltip",
120
+ role: "Subtle elevation shadow to lift tooltip above content",
121
+ fallback: "0 4px 12px rgba(0,0,0,0.15)",
122
+ },
123
+ {
124
+ property: "Font Family",
125
+ tokenName: "$font-family-sans",
126
+ role: "Tooltip text typeface matching the system font stack",
127
+ fallback: "Inter, system-ui, sans-serif",
128
+ },
129
+ {
130
+ property: "Z-Index",
131
+ tokenName: "$z-tooltip",
132
+ role: "Stacking order above all page content and below modals",
133
+ fallback: "1070",
134
+ },
135
+ ],
136
+
137
+ structureRules: [
138
+ "Tooltip renders in a portal at the document root to avoid clipping by parent overflow",
139
+ "Arrow element is a rotated square (45°) positioned at the tooltip edge closest to the trigger",
140
+ "Tooltip bubble uses padding on all four sides; vertical padding matches $spacing-xs (4px)",
141
+ "Text content is a single inline element — no block-level children or interactive elements",
142
+ "Positioning is calculated dynamically based on trigger element rect and viewport boundaries",
143
+ "Collision detection auto-flips placement (e.g., top → bottom) when space is insufficient",
144
+ "Tooltip width is auto-sized to content up to maxWidth, then text wraps",
145
+ ],
146
+
147
+ typeHierarchyRules: [
148
+ "Font size is one step below body text (12px default) — tooltips are supplementary",
149
+ "Font weight is Regular (400) — no bold or emphasis within tooltip text",
150
+ "Text uses sentence case — capitalize only the first word",
151
+ "Line height is 1.4 for comfortable reading when text wraps to multiple lines",
152
+ "No rich formatting (bold, italic, links) inside tooltip text — keep it plain",
153
+ ],
154
+
155
+ interactionRules: [
156
+ { event: "Mouse Enter", trigger: "pointerenter on trigger element", action: "Start show delay timer; show tooltip after delayShow ms" },
157
+ { event: "Mouse Leave", trigger: "pointerleave from trigger element", action: "Start hide delay timer; hide tooltip after delayHide ms" },
158
+ { event: "Focus", trigger: "focusin on trigger element", action: "Show tooltip immediately (no delay) for keyboard users" },
159
+ { event: "Blur", trigger: "focusout from trigger element", action: "Hide tooltip immediately" },
160
+ { event: "Escape", trigger: "Escape key while tooltip visible", action: "Dismiss tooltip immediately without waiting for delay" },
161
+ { event: "Scroll", trigger: "Scroll event on ancestor", action: "Reposition tooltip to maintain alignment; hide if trigger scrolls out of view" },
162
+ { event: "Touch", trigger: "Long press on mobile", action: "Show tooltip after 500ms hold; hide on release" },
163
+ ],
164
+
165
+ contentGuidance: [
166
+ "Tooltip text should be a brief label or description — 1 to 2 short sentences maximum",
167
+ "Never put essential information in a tooltip — it may be inaccessible to touch and screen reader users",
168
+ "Use tooltips for icon-only buttons, truncated text, or supplementary definitions",
169
+ "Avoid duplicating the trigger element's visible label — add new information only",
170
+ "Do not include interactive content (links, buttons, form fields) inside tooltips",
171
+ "Keep text under 80 characters; use a popover for longer content",
172
+ ],
173
+
174
+ responsiveBehaviour: [
175
+ { breakpoint: "Mobile (<768px)", behavior: "Tooltips on hover are inaccessible; use long-press or replace with inline hints" },
176
+ { breakpoint: "Tablet (768-1023px)", behavior: "Tooltips work on hover with stylus; ensure touch fallback is available" },
177
+ { breakpoint: "Desktop (1024-1439px)", behavior: "Standard hover/focus tooltip behavior; preferred placement honored" },
178
+ { breakpoint: "Ultra-wide (>=1440px)", behavior: "Tooltip positioning unchanged; max-width prevents overly wide bubbles" },
179
+ ],
180
+
181
+ accessibilitySpec: {
182
+ intro:
183
+ "Tooltips provide supplementary information and must be accessible via keyboard and screen readers without requiring hover.",
184
+ requirements: [
185
+ { requirement: "aria-describedby", level: "A", notes: "Trigger element must reference the tooltip ID via aria-describedby so screen readers announce the hint" },
186
+ { requirement: "role='tooltip'", level: "A", notes: "The tooltip container must have role='tooltip' for proper semantic identification" },
187
+ { requirement: "Keyboard Dismissal", level: "A", notes: "Escape key must dismiss the tooltip without moving focus" },
188
+ { requirement: "Focus Trigger", level: "A", notes: "Tooltip must appear on focus (not just hover) for keyboard-only users" },
189
+ { requirement: "Contrast", level: "AA", notes: "Tooltip text to background must meet 4.5:1; tooltip boundary to page must meet 3:1" },
190
+ { requirement: "Timing", level: "A", notes: "Tooltip must remain visible while trigger is hovered or focused — no auto-dismiss timer" },
191
+ { requirement: "No Interactive Content", level: "A", notes: "Tooltip must not contain focusable or interactive elements; use a popover instead" },
192
+ ],
193
+ outro: [
194
+ "Screen readers should announce the tooltip text as a description of the trigger element",
195
+ "Ensure the tooltip does not obscure the trigger element or other critical content",
196
+ ],
197
+ },
198
+
199
+ qaAcceptanceCriteria: [
200
+ { check: "Show Delay", platform: "Web", expectedResult: "Tooltip appears after configured delayShow (default 300ms); no instant flash" },
201
+ { check: "Hide Delay", platform: "Web", expectedResult: "Tooltip disappears after delayHide (default 100ms) once hover/focus leaves" },
202
+ { check: "Placement", platform: "Web", expectedResult: "Tooltip renders at the specified placement (top/bottom/left/right) relative to trigger" },
203
+ { check: "Collision Flip", platform: "Web", expectedResult: "Tooltip auto-flips when preferred placement would clip the viewport" },
204
+ { check: "Arrow Alignment", platform: "All", expectedResult: "Arrow pointer points directly at the trigger center and matches tooltip background" },
205
+ { check: "Keyboard Access", platform: "Web", expectedResult: "Tooltip shows on focus; Escape dismisses; does not trap focus" },
206
+ { check: "Screen Reader", platform: "Web", expectedResult: "Announces tooltip text as description of the trigger via aria-describedby" },
207
+ { check: "Max Width Wrap", platform: "Web", expectedResult: "Text wraps at maxWidth; tooltip height grows to accommodate wrapped lines" },
208
+ { check: "Portal Rendering", platform: "Web", expectedResult: "Tooltip renders in document root portal; not clipped by parent overflow:hidden" },
209
+ { check: "Touch Devices", platform: "Mobile", expectedResult: "Long press shows tooltip; release hides it; no hover dependency" },
210
+ { check: "Reduced Motion", platform: "Web", expectedResult: "Fade animation disabled when prefers-reduced-motion is set" },
211
+ ],
212
+
213
+ dos: [
214
+ "Use tooltips for short, supplementary hints that clarify an element's purpose",
215
+ "Provide tooltips on icon-only buttons with matching aria-label text",
216
+ "Keep tooltip text concise — under 80 characters or two short sentences",
217
+ "Include a visible arrow pointer connecting the tooltip to its trigger",
218
+ "Use a dark background with light text for strong contrast",
219
+ "Allow Escape key to dismiss the tooltip at any time",
220
+ "Test tooltip positioning near viewport edges to verify collision handling",
221
+ ],
222
+
223
+ donts: [
224
+ "Do not put essential or actionable information inside tooltips",
225
+ "Do not include links, buttons, or form elements inside tooltip content",
226
+ "Do not use tooltips as a substitute for visible labels or helper text",
227
+ "Do not set show delay below 200ms — accidental triggers are disruptive",
228
+ "Do not auto-dismiss tooltips on a timer — let the user control visibility",
229
+ "Do not rely on hover-only triggers — keyboard and touch users cannot hover",
230
+ "Do not allow tooltips to obscure the content they describe",
231
+ ],
232
+ };
@@ -0,0 +1,257 @@
1
+ /**
2
+ * treeview.ts — Gold-standard design knowledge for Treeview components
3
+ */
4
+ import type { ComponentKnowledge } from "../types.js";
5
+
6
+ export const treeviewKnowledge: ComponentKnowledge = {
7
+ description:
8
+ "Hierarchical expandable tree | Displays nested parent-child relationships | Supports single and multi-selection with full keyboard navigation",
9
+
10
+ stateSpecifications: [
11
+ {
12
+ state: "Expanded",
13
+ visualChange: "Chevron icon rotates 90 degrees clockwise; child nodes are revealed with indented layout below the parent",
14
+ opacity: "1",
15
+ cursorWeb: "pointer",
16
+ usage: "Parent node has been opened to show its children — aria-expanded='true'",
17
+ },
18
+ {
19
+ state: "Collapsed",
20
+ visualChange: "Chevron icon points to the right (0 degrees); child nodes are hidden from view",
21
+ opacity: "1",
22
+ cursorWeb: "pointer",
23
+ usage: "Parent node is closed — its children are not rendered or are display-none; aria-expanded='false'",
24
+ },
25
+ {
26
+ state: "Selected",
27
+ visualChange: "Node row has a tinted background using $treeview-selected-bg; text may use primary accent color",
28
+ opacity: "1",
29
+ cursorWeb: "pointer",
30
+ usage: "Node has been chosen by the user; in multi-select mode a checkbox indicator is shown",
31
+ },
32
+ {
33
+ state: "Disabled",
34
+ visualChange: "Node text and icons use muted/disabled tokens; expand/collapse still works but selection is blocked",
35
+ opacity: "0.4",
36
+ cursorWeb: "not-allowed",
37
+ usage: "Individual node is non-selectable due to permissions or unavailability; children may still be accessible",
38
+ },
39
+ {
40
+ state: "Focus",
41
+ visualChange: "2px focus ring around the focused node row using $focus-ring token; background may subtly highlight",
42
+ opacity: "1",
43
+ cursorWeb: "pointer",
44
+ usage: "Node receives keyboard focus via Tab entry or arrow key navigation within the tree",
45
+ },
46
+ ],
47
+
48
+ propertyDescriptions: {
49
+ data: "Nested array of tree node objects; each node has an id, label, optional icon, optional children array, and optional disabled flag",
50
+ selection: "Selection mode — 'single' allows one node selected at a time, 'multi' allows multiple with checkboxes, 'none' disables selection entirely",
51
+ expandedKeys: "Controlled array of node IDs that are currently expanded; used for controlled expand/collapse behavior",
52
+ onExpand: "Callback fired when a node is expanded or collapsed; receives the node ID and new expanded state",
53
+ onSelect: "Callback fired when a node is selected or deselected; receives the node ID and selection state",
54
+ size: "Dimensional preset controlling node row height, indent depth, font-size, and icon-size (sm, md, lg)",
55
+ defaultExpandedKeys: "Array of node IDs that should be expanded on initial render (uncontrolled mode)",
56
+ draggable: "When true, nodes can be reordered via drag-and-drop; fires onMove callback with source and target",
57
+ showLines: "When true, renders vertical indent guide lines connecting parent to children for visual hierarchy",
58
+ loadOnExpand: "When true, children are loaded asynchronously on expand; shows a spinner in place of children while loading",
59
+ },
60
+
61
+ sizeSpecifications: [
62
+ {
63
+ size: "Small",
64
+ height: "28px per node",
65
+ paddingLR: "8px",
66
+ fontSize: "12px",
67
+ iconSize: "14px",
68
+ borderRadius: "4px",
69
+ },
70
+ {
71
+ size: "Medium",
72
+ height: "36px per node",
73
+ paddingLR: "12px",
74
+ fontSize: "14px",
75
+ iconSize: "18px",
76
+ borderRadius: "6px",
77
+ },
78
+ {
79
+ size: "Large",
80
+ height: "44px per node",
81
+ paddingLR: "16px",
82
+ fontSize: "16px",
83
+ iconSize: "22px",
84
+ borderRadius: "8px",
85
+ },
86
+ ],
87
+
88
+ designTokenBindings: [
89
+ {
90
+ property: "Node Background",
91
+ tokenName: "$treeview-node-bg",
92
+ role: "Default background for each tree node row",
93
+ fallback: "transparent",
94
+ },
95
+ {
96
+ property: "Hover Background",
97
+ tokenName: "$treeview-hover-bg",
98
+ role: "Background applied on hover for interactive nodes",
99
+ fallback: "#F2F4F7",
100
+ },
101
+ {
102
+ property: "Selected Background",
103
+ tokenName: "$treeview-selected-bg",
104
+ role: "Background tint for selected nodes",
105
+ fallback: "#EFF8FF",
106
+ },
107
+ {
108
+ property: "Node Text",
109
+ tokenName: "$treeview-node-text",
110
+ role: "Primary text color for node labels",
111
+ fallback: "#101828",
112
+ },
113
+ {
114
+ property: "Expand Icon",
115
+ tokenName: "$treeview-expand-icon",
116
+ role: "Color of the chevron/expand toggle icon",
117
+ fallback: "#667085",
118
+ },
119
+ {
120
+ property: "Indent Guide",
121
+ tokenName: "$treeview-indent-line",
122
+ role: "Color of the vertical indent guide lines between parent and children",
123
+ fallback: "#E4E7EC",
124
+ },
125
+ {
126
+ property: "Selected Accent",
127
+ tokenName: "$treeview-selected-accent",
128
+ role: "Accent color for selection indicator (checkmark or left border)",
129
+ fallback: "#2563EB",
130
+ },
131
+ {
132
+ property: "Focus Ring",
133
+ tokenName: "$focus-ring",
134
+ role: "Keyboard focus indicator ring on focused node",
135
+ fallback: "0 0 0 2px #FFFFFF, 0 0 0 4px #2E90FA",
136
+ },
137
+ {
138
+ property: "Indent Width",
139
+ tokenName: "$treeview-indent",
140
+ role: "Horizontal indent per nesting level",
141
+ fallback: "24px",
142
+ },
143
+ {
144
+ property: "Font Family",
145
+ tokenName: "$font-family-sans",
146
+ role: "Typeface for node labels",
147
+ fallback: "Inter, system-ui, sans-serif",
148
+ },
149
+ ],
150
+
151
+ structureRules: [
152
+ "Root container has role='tree' and uses vertical Auto Layout with no gap — spacing is handled by node row padding",
153
+ "Each node row is a horizontal Auto Layout: indent spacer, expand icon (if parent), optional node icon, label text, optional trailing content",
154
+ "Indent spacer width equals nesting depth multiplied by the $treeview-indent token (e.g. depth 2 = 48px)",
155
+ "Expand/collapse icon is only rendered for nodes with children; leaf nodes replace it with an equal-width spacer",
156
+ "Child nodes are nested inside the parent's vertical stack and are conditionally rendered based on expanded state",
157
+ "Multi-select mode adds a checkbox component before the node label; checkbox state mirrors selection state",
158
+ "Indent guide lines are absolutely positioned 1px-wide vertical lines from parent expand icon to last child",
159
+ "Drag handle appears as a leading grip icon when draggable is true; visible on hover only",
160
+ ],
161
+
162
+ typeHierarchyRules: [
163
+ "Node labels use Regular (400) weight for all items; selected nodes may use Medium (500) for emphasis",
164
+ "Font size is consistent across all nesting depths — do not reduce font-size for deeper nodes",
165
+ "Labels truncate with ellipsis on overflow; tooltip shows full label on hover for truncated text",
166
+ "Expand/collapse icon uses a consistent size regardless of the node label font-size",
167
+ ],
168
+
169
+ interactionRules: [
170
+ { event: "Click Expand Icon", trigger: "pointerup on the chevron/expand toggle", action: "Toggle expanded state of the node; fire onExpand callback" },
171
+ { event: "Click Node Label", trigger: "pointerup on the node label or row", action: "Select/deselect the node; fire onSelect callback (if selection != 'none')" },
172
+ { event: "Hover", trigger: "pointerenter on a node row", action: "Apply hover background token to the full-width row" },
173
+ { event: "Focus", trigger: "Tab enters the tree or arrow key moves focus", action: "Show focus ring on the focused node row" },
174
+ { event: "Keydown Arrow Down", trigger: "Down arrow while a node is focused", action: "Move focus to the next visible node (skips collapsed children)" },
175
+ { event: "Keydown Arrow Up", trigger: "Up arrow while a node is focused", action: "Move focus to the previous visible node" },
176
+ { event: "Keydown Arrow Right", trigger: "Right arrow on a collapsed parent node", action: "Expand the node; if already expanded, move focus to first child" },
177
+ { event: "Keydown Arrow Left", trigger: "Left arrow on an expanded parent node", action: "Collapse the node; if already collapsed or on leaf, move focus to parent" },
178
+ { event: "Keydown Enter", trigger: "Enter key while a node is focused", action: "Select/activate the focused node (same as click on label)" },
179
+ { event: "Keydown Space", trigger: "Space key while a node is focused", action: "Toggle selection on the focused node in multi-select mode" },
180
+ { event: "Keydown Home", trigger: "Home key while in tree", action: "Move focus to the first visible node in the tree" },
181
+ { event: "Keydown End", trigger: "End key while in tree", action: "Move focus to the last visible node in the tree" },
182
+ { event: "Keydown Asterisk", trigger: "* key while a parent node is focused", action: "Expand all sibling nodes at the same level" },
183
+ ],
184
+
185
+ contentGuidance: [
186
+ "Node labels should be concise and descriptive — represent the item clearly (file name, category, section title)",
187
+ "Use icons consistently: either all nodes at a level have icons, or none do — avoid mixing",
188
+ "Limit nesting depth to 4-5 levels for usability; deeper hierarchies become difficult to navigate",
189
+ "Parent nodes with loadable children should show a loading indicator (spinner) during async fetch",
190
+ "Use clear expand/collapse affordance — the chevron icon is the standard convention",
191
+ "For file-tree patterns, use distinct icons for folders (parent nodes) and files (leaf nodes)",
192
+ "Group related items under meaningful parent labels that describe the category or section",
193
+ ],
194
+
195
+ responsiveBehaviour: [
196
+ { breakpoint: "Mobile (<768px)", behavior: "Consider replacing tree with a drill-down navigation pattern; if tree is used, reduce indent width and allow horizontal scroll" },
197
+ { breakpoint: "Tablet (768-1023px)", behavior: "Tree fits in sidebar panels; ensure touch targets are at least 44px; indent guides help distinguish depth" },
198
+ { breakpoint: "Desktop (1024-1439px)", behavior: "Full tree with standard indent width; ideal for file browsers, settings panels, and navigation sidebars" },
199
+ { breakpoint: "Ultra-wide (>=1440px)", behavior: "Tree width should be constrained in a sidebar; do not allow the tree to stretch to fill wide content areas" },
200
+ ],
201
+
202
+ accessibilitySpec: {
203
+ intro:
204
+ "Treeview is one of the most complex ARIA patterns. It requires precise role assignment, keyboard navigation following the WAI-ARIA TreeView pattern, and correct state management for expanded, selected, and disabled nodes.",
205
+ requirements: [
206
+ { requirement: "Tree Role", level: "A", notes: "Root container must have role='tree'; each node must have role='treeitem'" },
207
+ { requirement: "Expanded State", level: "A", notes: "Parent nodes must have aria-expanded='true' or 'false'; leaf nodes must not have aria-expanded" },
208
+ { requirement: "Arrow Key Navigation", level: "A", notes: "Up/Down moves focus between visible nodes; Right expands or enters children; Left collapses or moves to parent" },
209
+ { requirement: "Home/End Keys", level: "A", notes: "Home moves focus to first node; End moves to last visible node in the tree" },
210
+ { requirement: "Selection State", level: "A", notes: "Selected nodes must have aria-selected='true'; multi-select trees use aria-multiselectable='true' on the root" },
211
+ { requirement: "Nesting Structure", level: "A", notes: "Child nodes must be grouped in a role='group' container nested inside the parent treeitem" },
212
+ { requirement: "Contrast Ratio", level: "AA", notes: "Node text: 4.5:1; expand icon: 3:1 non-text; selected indicator: 3:1 non-text contrast" },
213
+ { requirement: "Touch Target", level: "AA", notes: "Each node row must have at least 44px height for touch interaction; expand icon target at least 24x24px" },
214
+ ],
215
+ outro: [
216
+ "Focus must remain on the correct node after expand/collapse operations — do not reset focus to the root",
217
+ "When nodes are loaded asynchronously, use aria-busy='true' on the parent node during loading",
218
+ "Type-ahead is recommended: typing a character should move focus to the next node whose label starts with that character",
219
+ ],
220
+ },
221
+
222
+ qaAcceptanceCriteria: [
223
+ { check: "Visual Regression", platform: "All", expectedResult: "Tree renders pixel-perfect against baseline for each size variant and nesting depth" },
224
+ { check: "Expand/Collapse", platform: "All", expectedResult: "Chevron rotates; children appear/disappear smoothly; aria-expanded updates correctly" },
225
+ { check: "Selection State", platform: "All", expectedResult: "Selected nodes show tinted background; aria-selected is true; deselection works" },
226
+ { check: "Multi-select", platform: "Web", expectedResult: "Checkboxes appear; Space toggles selection; Ctrl+Click extends selection" },
227
+ { check: "Disabled Nodes", platform: "All", expectedResult: "Muted visuals; expand still works; selection is blocked; aria-disabled='true'" },
228
+ { check: "Keyboard Down/Up", platform: "Web", expectedResult: "Arrow keys move focus to next/previous visible node; skips collapsed children" },
229
+ { check: "Keyboard Right/Left", platform: "Web", expectedResult: "Right expands or enters children; Left collapses or moves to parent; works on all depths" },
230
+ { check: "Keyboard Home/End", platform: "Web", expectedResult: "Home focuses first node; End focuses last visible node" },
231
+ { check: "Focus Ring", platform: "Web", expectedResult: "Focus ring visible on keyboard navigation; hidden on mouse click (focus-visible)" },
232
+ { check: "Screen Reader", platform: "Web", expectedResult: "Announces role 'tree'/'treeitem', expanded state, selected state, level, set size, and position" },
233
+ { check: "Indent Guide Lines", platform: "All", expectedResult: "Lines connect parent to children when showLines=true; hidden when false" },
234
+ { check: "Async Loading", platform: "Web", expectedResult: "Spinner shown while children load; aria-busy on parent; children appear after fetch" },
235
+ { check: "RTL Support", platform: "Web", expectedResult: "Indent direction mirrors; chevron direction swaps; layout alignment correct" },
236
+ ],
237
+
238
+ dos: [
239
+ "Use treeview for hierarchical data: file systems, nested categories, organizational structures",
240
+ "Always provide the expand/collapse chevron affordance for parent nodes — do not rely on double-click alone",
241
+ "Implement full WAI-ARIA TreeView keyboard pattern including arrow keys, Home, End, and type-ahead",
242
+ "Use indent guide lines (showLines) for deep hierarchies to help users track parent-child relationships",
243
+ "Pre-expand the most relevant branch on initial load so users see useful content immediately",
244
+ "Keep node labels concise and scannable — the hierarchy itself provides context",
245
+ "Use consistent icons across the same level of nesting",
246
+ ],
247
+
248
+ donts: [
249
+ "Do not use treeview for flat lists — use a list or menu component instead",
250
+ "Do not nest deeper than 5 levels — consider a different navigation pattern for deeply nested data",
251
+ "Do not auto-collapse sibling nodes when expanding a node unless explicitly required (accordion tree)",
252
+ "Do not use different font sizes for different nesting depths — keep typography consistent",
253
+ "Do not render hundreds of nodes without virtualization — performance will degrade significantly",
254
+ "Do not make leaf nodes appear as if they are expandable (no chevron on leaf nodes)",
255
+ "Do not remove focus from the tree during expand/collapse transitions — focus must remain stable",
256
+ ],
257
+ };