@sarjallab09/figma-intelligence 1.1.0 → 1.2.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 (297) hide show
  1. package/README.md +67 -36
  2. package/dist/bin/cli.js +2 -0
  3. package/dist/design-bridge/bridge.js +2 -0
  4. package/dist/figma-bridge-plugin/bridge-relay.js +2 -0
  5. package/dist/figma-bridge-plugin/code.js +1 -0
  6. package/{figma-bridge-plugin → dist/figma-bridge-plugin}/package-lock.json +0 -3
  7. package/dist/figma-bridge-plugin/ui.html +4970 -0
  8. package/dist/figma-intelligence-layer/dist/index.js +2 -0
  9. package/dist/scripts/clean-existing-chunks.js +2 -0
  10. package/dist/scripts/connect-ai-tool.js +2 -0
  11. package/dist/scripts/convert-hub-pdfs.js +2 -0
  12. package/dist/scripts/figma-mcp-status.js +2 -0
  13. package/dist/scripts/register-codex-mcp.js +2 -0
  14. package/dist/scripts/test-copilot-chat.js +2 -0
  15. package/package.json +11 -8
  16. package/bin/cli.js +0 -859
  17. package/design-bridge/bridge.js +0 -196
  18. package/design-bridge/lib/assets.js +0 -367
  19. package/design-bridge/lib/prompt.js +0 -85
  20. package/design-bridge/lib/server.js +0 -66
  21. package/design-bridge/lib/stitch.js +0 -37
  22. package/design-bridge/lib/tokens.js +0 -82
  23. package/design-bridge/package-lock.json +0 -579
  24. package/figma-bridge-plugin/README.md +0 -97
  25. package/figma-bridge-plugin/anthropic-chat-runner.js +0 -192
  26. package/figma-bridge-plugin/bridge-relay.js +0 -2505
  27. package/figma-bridge-plugin/chat-runner.js +0 -485
  28. package/figma-bridge-plugin/code.js +0 -1534
  29. package/figma-bridge-plugin/codex-runner.js +0 -505
  30. package/figma-bridge-plugin/component-schemas.js +0 -110
  31. package/figma-bridge-plugin/content-context.js +0 -869
  32. package/figma-bridge-plugin/create-button.js +0 -216
  33. package/figma-bridge-plugin/gemini-cli-runner.js +0 -291
  34. package/figma-bridge-plugin/gemini-runner.js +0 -187
  35. package/figma-bridge-plugin/html-to-figma.js +0 -927
  36. package/figma-bridge-plugin/knowledge-hub/.gitkeep +0 -0
  37. package/figma-bridge-plugin/knowledge-hub/uspec-references/anatomy-spec.md +0 -159
  38. package/figma-bridge-plugin/knowledge-hub/uspec-references/api-spec.md +0 -162
  39. package/figma-bridge-plugin/knowledge-hub/uspec-references/color-spec.md +0 -148
  40. package/figma-bridge-plugin/knowledge-hub/uspec-references/full-spec-template.md +0 -314
  41. package/figma-bridge-plugin/knowledge-hub/uspec-references/property-spec.md +0 -175
  42. package/figma-bridge-plugin/knowledge-hub/uspec-references/screen-reader-spec.md +0 -180
  43. package/figma-bridge-plugin/knowledge-hub/uspec-references/structure-spec.md +0 -165
  44. package/figma-bridge-plugin/perplexity-runner.js +0 -188
  45. package/figma-bridge-plugin/references/SKILL.md +0 -178
  46. package/figma-bridge-plugin/references/anatomy-spec.md +0 -159
  47. package/figma-bridge-plugin/references/api-spec.md +0 -162
  48. package/figma-bridge-plugin/references/color-spec.md +0 -148
  49. package/figma-bridge-plugin/references/full-spec-template.md +0 -314
  50. package/figma-bridge-plugin/references/property-spec.md +0 -175
  51. package/figma-bridge-plugin/references/screen-reader-spec.md +0 -180
  52. package/figma-bridge-plugin/references/structure-spec.md +0 -165
  53. package/figma-bridge-plugin/shared-prompt-config.js +0 -645
  54. package/figma-bridge-plugin/spec-helpers/build-table.js +0 -269
  55. package/figma-bridge-plugin/spec-helpers/classify-elements.js +0 -189
  56. package/figma-bridge-plugin/spec-helpers/index.js +0 -35
  57. package/figma-bridge-plugin/spec-helpers/parse-figma-link.js +0 -49
  58. package/figma-bridge-plugin/spec-helpers/position-markers.js +0 -158
  59. package/figma-bridge-plugin/stitch-auth.js +0 -322
  60. package/figma-bridge-plugin/stitch-runner.js +0 -1427
  61. package/figma-bridge-plugin/token-resolver.js +0 -107
  62. package/figma-bridge-plugin/ui.html +0 -4542
  63. package/figma-intelligence-layer/.env.example +0 -39
  64. package/figma-intelligence-layer/docs/local-image-generation.md +0 -60
  65. package/figma-intelligence-layer/examples/comfyui-workflow-template.example.json +0 -101
  66. package/figma-intelligence-layer/jest.config.js +0 -14
  67. package/figma-intelligence-layer/mcp-config.json +0 -19
  68. package/figma-intelligence-layer/package-lock.json +0 -5892
  69. package/figma-intelligence-layer/scripts/setup-comfyui-local.sh +0 -67
  70. package/figma-intelligence-layer/scripts/start-comfyui.sh +0 -33
  71. package/figma-intelligence-layer/src/index.ts +0 -2233
  72. package/figma-intelligence-layer/src/shared/auto-layout-validator.ts +0 -404
  73. package/figma-intelligence-layer/src/shared/cache.ts +0 -187
  74. package/figma-intelligence-layer/src/shared/color-operations.ts +0 -533
  75. package/figma-intelligence-layer/src/shared/color-utils.ts +0 -138
  76. package/figma-intelligence-layer/src/shared/component-script-builder.ts +0 -413
  77. package/figma-intelligence-layer/src/shared/component-templates.ts +0 -2767
  78. package/figma-intelligence-layer/src/shared/concept-taxonomy.ts +0 -694
  79. package/figma-intelligence-layer/src/shared/decision-log.ts +0 -128
  80. package/figma-intelligence-layer/src/shared/design-system-context.ts +0 -568
  81. package/figma-intelligence-layer/src/shared/design-system-intelligence.ts +0 -131
  82. package/figma-intelligence-layer/src/shared/design-system-matcher.ts +0 -184
  83. package/figma-intelligence-layer/src/shared/design-system-normalizers.ts +0 -196
  84. package/figma-intelligence-layer/src/shared/design-system-tokens.ts +0 -295
  85. package/figma-intelligence-layer/src/shared/dtcg-validator.ts +0 -530
  86. package/figma-intelligence-layer/src/shared/enrichment-pipeline.ts +0 -671
  87. package/figma-intelligence-layer/src/shared/figma-bridge.ts +0 -1418
  88. package/figma-intelligence-layer/src/shared/font-config.ts +0 -126
  89. package/figma-intelligence-layer/src/shared/icon-catalog.ts +0 -360
  90. package/figma-intelligence-layer/src/shared/icon-fetch.ts +0 -80
  91. package/figma-intelligence-layer/src/shared/prototype-script-builder.ts +0 -162
  92. package/figma-intelligence-layer/src/shared/response-compression.ts +0 -440
  93. package/figma-intelligence-layer/src/shared/semantic-token-catalog.ts +0 -324
  94. package/figma-intelligence-layer/src/shared/token-binder.ts +0 -505
  95. package/figma-intelligence-layer/src/shared/token-math.ts +0 -427
  96. package/figma-intelligence-layer/src/shared/token-naming.ts +0 -468
  97. package/figma-intelligence-layer/src/shared/token-utils.ts +0 -420
  98. package/figma-intelligence-layer/src/shared/types.ts +0 -346
  99. package/figma-intelligence-layer/src/shared/typography-presets.ts +0 -94
  100. package/figma-intelligence-layer/src/shared/unsplash.ts +0 -165
  101. package/figma-intelligence-layer/src/shared/vision-client.ts +0 -607
  102. package/figma-intelligence-layer/src/shared/vision-provider-anthropic.ts +0 -334
  103. package/figma-intelligence-layer/src/shared/vision-provider-openai.ts +0 -446
  104. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-handler.ts +0 -782
  105. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-renderer.ts +0 -496
  106. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotation-kit.ts +0 -230
  107. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/colorblind-sim.ts +0 -66
  108. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/index.ts +0 -810
  109. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-analyzer.ts +0 -1191
  110. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-figma-page.ts +0 -1346
  111. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-handler.ts +0 -148
  112. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-figma-page.ts +0 -499
  113. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-report.ts +0 -910
  114. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-checker.ts +0 -989
  115. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-criteria.ts +0 -1160
  116. package/figma-intelligence-layer/src/tools/phase1-vision/design-from-ref/index.ts +0 -424
  117. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/component-recognizer.ts +0 -38
  118. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/ds-matcher.ts +0 -111
  119. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/font-matcher.ts +0 -114
  120. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/icon-resolver.ts +0 -103
  121. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/index.ts +0 -1060
  122. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/layout-segmenter.ts +0 -18
  123. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/token-inferencer.ts +0 -39
  124. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/vision-pipeline.ts +0 -58
  125. package/figma-intelligence-layer/src/tools/phase1-vision/sketch-to-design/index.ts +0 -298
  126. package/figma-intelligence-layer/src/tools/phase1-vision/visual-audit/index.ts +0 -197
  127. package/figma-intelligence-layer/src/tools/phase2-accuracy/component-audit/index.ts +0 -494
  128. package/figma-intelligence-layer/src/tools/phase2-accuracy/intent-translator/index.ts +0 -356
  129. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/container-patterns.ts +0 -123
  130. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/index.ts +0 -663
  131. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/built-in-rules.yaml +0 -56
  132. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/index.ts +0 -614
  133. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/rule-engine.ts +0 -113
  134. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/color-theory.ts +0 -178
  135. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/index.ts +0 -470
  136. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/index.ts +0 -429
  137. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/token-override-maps.ts +0 -226
  138. package/figma-intelligence-layer/src/tools/phase3-generation/ai-image-insert/index.ts +0 -535
  139. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/index.ts +0 -660
  140. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/pattern-fingerprints.ts +0 -209
  141. package/figma-intelligence-layer/src/tools/phase3-generation/composition-builder/index.ts +0 -540
  142. package/figma-intelligence-layer/src/tools/phase3-generation/figma-animated-build.ts +0 -391
  143. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/index.ts +0 -2019
  144. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/screen-templates.ts +0 -131
  145. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-map/index.ts +0 -381
  146. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-wire/index.ts +0 -565
  147. package/figma-intelligence-layer/src/tools/phase3-generation/swarm-build/index.ts +0 -764
  148. package/figma-intelligence-layer/src/tools/phase3-generation/system-drift/index.ts +0 -535
  149. package/figma-intelligence-layer/src/tools/phase3-generation/unsplash-search/index.ts +0 -84
  150. package/figma-intelligence-layer/src/tools/phase3-generation/url-to-frame/index.ts +0 -401
  151. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/css-animations.ts +0 -68
  152. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/framer-motion.ts +0 -78
  153. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/swift-animations.ts +0 -93
  154. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/index.ts +0 -596
  155. package/figma-intelligence-layer/src/tools/phase4-sync/ci-check/index.ts +0 -462
  156. package/figma-intelligence-layer/src/tools/phase4-sync/export-tokens/index.ts +0 -1470
  157. package/figma-intelligence-layer/src/tools/phase4-sync/generate-component-code/index.ts +0 -829
  158. package/figma-intelligence-layer/src/tools/phase4-sync/handoff-spec/index.ts +0 -702
  159. package/figma-intelligence-layer/src/tools/phase4-sync/icon-library-sync/index.ts +0 -483
  160. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/index.ts +0 -501
  161. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/storybook-parser.ts +0 -106
  162. package/figma-intelligence-layer/src/tools/phase4-sync/watch-docs/index.ts +0 -676
  163. package/figma-intelligence-layer/src/tools/phase4-sync/webhook-listener/index.ts +0 -560
  164. package/figma-intelligence-layer/src/tools/phase5-governance/apg-doc/index.ts +0 -1043
  165. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/component-detection.ts +0 -620
  166. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/anatomy.ts +0 -331
  167. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/color-tokens.ts +0 -77
  168. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/properties.ts +0 -54
  169. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/snapshot.ts +0 -287
  170. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/spacing.ts +0 -71
  171. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/states.ts +0 -43
  172. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/typography.ts +0 -71
  173. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/index.ts +0 -221
  174. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/_default.ts +0 -166
  175. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/accordion.ts +0 -232
  176. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/alert.ts +0 -234
  177. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar-group.ts +0 -270
  178. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar.ts +0 -249
  179. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/badge.ts +0 -231
  180. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/banner.ts +0 -293
  181. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/breadcrumb.ts +0 -240
  182. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/button.ts +0 -243
  183. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/calendar.ts +0 -307
  184. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/card.ts +0 -143
  185. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/checkbox.ts +0 -227
  186. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/chip.ts +0 -233
  187. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/combobox.ts +0 -282
  188. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/datepicker.ts +0 -276
  189. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/divider.ts +0 -223
  190. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/drawer.ts +0 -255
  191. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/dropdown-menu.ts +0 -289
  192. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/empty-state.ts +0 -261
  193. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/file-uploader.ts +0 -290
  194. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/form.ts +0 -265
  195. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/grid.ts +0 -238
  196. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/icon.ts +0 -255
  197. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/index.ts +0 -128
  198. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-edit.ts +0 -286
  199. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-message.ts +0 -255
  200. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/input.ts +0 -330
  201. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/link.ts +0 -247
  202. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/list.ts +0 -250
  203. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/menu.ts +0 -247
  204. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/modal.ts +0 -144
  205. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navbar.ts +0 -264
  206. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navigation.ts +0 -251
  207. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/number-input.ts +0 -261
  208. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/pagination.ts +0 -248
  209. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/popover.ts +0 -270
  210. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/progress.ts +0 -251
  211. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/radio.ts +0 -142
  212. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/range-slider.ts +0 -282
  213. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/rating.ts +0 -250
  214. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/search.ts +0 -258
  215. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/segmented-control.ts +0 -265
  216. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/select.ts +0 -319
  217. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/skeleton.ts +0 -256
  218. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/slider.ts +0 -232
  219. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/spinner.ts +0 -239
  220. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/status-dot.ts +0 -252
  221. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/stepper.ts +0 -270
  222. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/table.ts +0 -244
  223. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tabs.ts +0 -143
  224. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tag.ts +0 -243
  225. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/textarea.ts +0 -259
  226. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/time-picker.ts +0 -293
  227. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toast.ts +0 -144
  228. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toggle.ts +0 -289
  229. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toolbar.ts +0 -267
  230. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tooltip.ts +0 -232
  231. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/treeview.ts +0 -257
  232. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/typography.ts +0 -319
  233. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/legacy-compat.ts +0 -121
  234. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/anatomy-diagram.ts +0 -430
  235. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/figma-page.ts +0 -312
  236. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/json.ts +0 -129
  237. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/markdown.ts +0 -78
  238. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/visual-doc.ts +0 -2333
  239. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/accessibility.ts +0 -100
  240. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/anatomy.ts +0 -32
  241. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/color-tokens.ts +0 -59
  242. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/content-guidance.ts +0 -18
  243. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/design-tokens.ts +0 -53
  244. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/interaction-rules.ts +0 -19
  245. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/overview.ts +0 -91
  246. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/properties-api.ts +0 -71
  247. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/qa-criteria.ts +0 -19
  248. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/related-components.ts +0 -110
  249. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/responsive.ts +0 -19
  250. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/size-specs.ts +0 -67
  251. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/spacing-structure.ts +0 -58
  252. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/state-specs.ts +0 -79
  253. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/states.ts +0 -50
  254. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/type-hierarchy.ts +0 -33
  255. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/typography.ts +0 -55
  256. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/usage-guidelines.ts +0 -73
  257. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/variants.ts +0 -81
  258. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/types.ts +0 -409
  259. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/index.ts +0 -198
  260. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/renderer.ts +0 -701
  261. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/types.ts +0 -88
  262. package/figma-intelligence-layer/src/tools/phase5-governance/decision-log/index.ts +0 -135
  263. package/figma-intelligence-layer/src/tools/phase5-governance/design-decision-log/index.ts +0 -491
  264. package/figma-intelligence-layer/src/tools/phase5-governance/ds-primitives/index.ts +0 -416
  265. package/figma-intelligence-layer/src/tools/phase5-governance/ds-scaffolder/index.ts +0 -722
  266. package/figma-intelligence-layer/src/tools/phase5-governance/ds-variables/index.ts +0 -449
  267. package/figma-intelligence-layer/src/tools/phase5-governance/health-report/index.ts +0 -393
  268. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/index.ts +0 -406
  269. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/figma-page.ts +0 -292
  270. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/json.ts +0 -24
  271. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/markdown.ts +0 -172
  272. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/naming-guide.ts +0 -409
  273. package/figma-intelligence-layer/src/tools/phase5-governance/token-analytics/index.ts +0 -594
  274. package/figma-intelligence-layer/src/tools/phase5-governance/token-docs/index.ts +0 -710
  275. package/figma-intelligence-layer/src/tools/phase5-governance/token-migrate/index.ts +0 -458
  276. package/figma-intelligence-layer/src/tools/phase5-governance/token-naming/index.ts +0 -134
  277. package/figma-intelligence-layer/tests/apg-doc.test.ts +0 -101
  278. package/figma-intelligence-layer/tests/design-system-context.test.ts +0 -152
  279. package/figma-intelligence-layer/tests/design-system-matcher.test.ts +0 -144
  280. package/figma-intelligence-layer/tests/figma-bridge.test.ts +0 -83
  281. package/figma-intelligence-layer/tests/generate-image-and-insert.test.ts +0 -56
  282. package/figma-intelligence-layer/tests/screen-cloner-regression.test.ts +0 -69
  283. package/figma-intelligence-layer/tests/smoke.test.ts +0 -174
  284. package/figma-intelligence-layer/tests/spec-generator.test.ts +0 -127
  285. package/figma-intelligence-layer/tests/token-migrate.test.ts +0 -21
  286. package/figma-intelligence-layer/tests/token-naming.test.ts +0 -30
  287. package/figma-intelligence-layer/tsconfig.json +0 -19
  288. package/scripts/clean-existing-chunks.js +0 -179
  289. package/scripts/connect-ai-tool.js +0 -490
  290. package/scripts/convert-hub-pdfs.js +0 -425
  291. package/scripts/figma-mcp-status.js +0 -349
  292. package/scripts/register-codex-mcp.js +0 -96
  293. /package/{design-bridge → dist/design-bridge}/.env.example +0 -0
  294. /package/{design-bridge → dist/design-bridge}/package.json +0 -0
  295. /package/{figma-bridge-plugin → dist/figma-bridge-plugin}/manifest.json +0 -0
  296. /package/{figma-bridge-plugin → dist/figma-bridge-plugin}/package.json +0 -0
  297. /package/{figma-intelligence-layer → dist/figma-intelligence-layer}/package.json +0 -0
@@ -1,261 +0,0 @@
1
- /**
2
- * number-input.ts — Gold-standard design knowledge for Number Input components
3
- */
4
- import type { ComponentKnowledge } from "../types.js";
5
-
6
- export const numberInputKnowledge: ComponentKnowledge = {
7
- description:
8
- "Numeric input with stepper buttons | Allows precise numeric value entry | Supports increment/decrement via buttons and keyboard",
9
-
10
- stateSpecifications: [
11
- {
12
- state: "Default",
13
- visualChange: "Input field with current numeric value; stepper buttons visible with default icon color; border uses default token",
14
- opacity: "1",
15
- cursorWeb: "text",
16
- usage: "Resting state — field displays the current value and is ready for interaction",
17
- },
18
- {
19
- state: "Focused",
20
- visualChange: "2px focus ring offset by 2px from the input edge, using $focus-ring token; caret visible in the input field",
21
- opacity: "1",
22
- cursorWeb: "text",
23
- usage: "Input field receives keyboard focus via Tab key or programmatic focus call",
24
- },
25
- {
26
- state: "Error",
27
- visualChange: "Border switches to $color-error token; error icon appears inside the field; error message text displayed below",
28
- opacity: "1",
29
- cursorWeb: "text",
30
- usage: "Value is outside min/max range, not a valid number, or required field is empty on validation",
31
- },
32
- {
33
- state: "Disabled",
34
- visualChange: "Input background and text switch to muted/disabled tokens; stepper buttons are greyed out and non-interactive",
35
- opacity: "0.4",
36
- cursorWeb: "not-allowed",
37
- usage: "Numeric input is unavailable due to form state, permissions, or dependent field conditions",
38
- },
39
- ],
40
-
41
- propertyDescriptions: {
42
- label: "Visible label text rendered above or beside the input; describes the numeric value's purpose (e.g. 'Quantity', 'Amount')",
43
- value: "Current numeric value displayed in the input field; controlled or uncontrolled depending on form framework",
44
- min: "Minimum allowed value; decrement button becomes disabled when value reaches this limit",
45
- max: "Maximum allowed value; increment button becomes disabled when value reaches this limit",
46
- step: "Increment/decrement amount applied when stepper buttons are clicked or Up/Down arrow keys are pressed (default: 1)",
47
- precision: "Number of decimal places to display and enforce (e.g. 0 for integers, 2 for currency amounts)",
48
- size: "Dimensional preset controlling height, padding, font-size, and icon-size (Small, Medium, Large)",
49
- required: "When true the field must have a value before form submission; adds required indicator to the label",
50
- helperText: "Supplementary guidance text rendered below the input in default state (e.g. 'Enter a value between 1 and 100')",
51
- errorMessage: "Validation error text rendered below the input in error state, replacing helper text",
52
- disabled: "When true the input and stepper buttons are non-interactive: muted visuals, pointer-events none, aria-disabled='true'",
53
- },
54
-
55
- sizeSpecifications: [
56
- {
57
- size: "Small",
58
- height: "32px",
59
- paddingLR: "12px",
60
- fontSize: "12px",
61
- iconSize: "16px",
62
- borderRadius: "6px",
63
- },
64
- {
65
- size: "Medium",
66
- height: "40px",
67
- paddingLR: "16px",
68
- fontSize: "14px",
69
- iconSize: "20px",
70
- borderRadius: "8px",
71
- },
72
- {
73
- size: "Large",
74
- height: "48px",
75
- paddingLR: "20px",
76
- fontSize: "16px",
77
- iconSize: "24px",
78
- borderRadius: "10px",
79
- },
80
- ],
81
-
82
- designTokenBindings: [
83
- {
84
- property: "Field Background",
85
- tokenName: "$number-input-field-bg",
86
- role: "Background fill for the numeric input field area",
87
- fallback: "#FFFFFF",
88
- },
89
- {
90
- property: "Field Border",
91
- tokenName: "$number-input-field-border",
92
- role: "Border color for the input field in default state",
93
- fallback: "#D0D5DD",
94
- },
95
- {
96
- property: "Stepper Button Background",
97
- tokenName: "$number-input-stepper-bg",
98
- role: "Background fill for the increment/decrement stepper buttons",
99
- fallback: "#F9FAFB",
100
- },
101
- {
102
- property: "Stepper Button Hover",
103
- tokenName: "$number-input-stepper-hover-bg",
104
- role: "Background fill for stepper buttons on hover",
105
- fallback: "#F2F4F7",
106
- },
107
- {
108
- property: "Stepper Icon",
109
- tokenName: "$number-input-stepper-icon",
110
- role: "Icon color for the plus/minus or chevron icons in stepper buttons",
111
- fallback: "#667085",
112
- },
113
- {
114
- property: "Stepper Icon Disabled",
115
- tokenName: "$number-input-stepper-icon-disabled",
116
- role: "Icon color for stepper buttons when at min/max boundary or component is disabled",
117
- fallback: "#98A2B3",
118
- },
119
- {
120
- property: "Value Text",
121
- tokenName: "$number-input-value-text",
122
- role: "Text color for the numeric value displayed in the input field",
123
- fallback: "#101828",
124
- },
125
- {
126
- property: "Placeholder Text",
127
- tokenName: "$number-input-placeholder-text",
128
- role: "Text color for placeholder text when no value is entered",
129
- fallback: "#98A2B3",
130
- },
131
- {
132
- property: "Focus Ring",
133
- tokenName: "$focus-ring",
134
- role: "Keyboard focus indicator ring on the input field and stepper buttons",
135
- fallback: "0 0 0 2px #FFFFFF, 0 0 0 4px #2E90FA",
136
- },
137
- {
138
- property: "Error Border",
139
- tokenName: "$color-error",
140
- role: "Border color applied to the input field in error state",
141
- fallback: "#F04438",
142
- },
143
- {
144
- property: "Error Text",
145
- tokenName: "$color-error-text",
146
- role: "Text color for the error message below the input",
147
- fallback: "#F04438",
148
- },
149
- ],
150
-
151
- structureRules: [
152
- "Component is a compound structure: input field flanked by increment and decrement stepper buttons",
153
- "Stepper buttons may be placed on the right side (stacked vertically) or on both sides of the input (split layout)",
154
- "Container uses horizontal Auto Layout with center vertical alignment for all children",
155
- "Stepper buttons are direct children of the container — no intermediate wrappers between buttons and input",
156
- "Input field occupies the remaining horizontal space between stepper buttons (fill-container)",
157
- "Stepper button hit area is at least 44x44px regardless of visual size; transparent padding extends the target if needed",
158
- "Label and helper/error text are positioned outside the input container in a vertical stack with $spacing-xs gap",
159
- "Divider lines between stepper buttons and input field use the field border token at 1px width",
160
- "Value text is horizontally centered within the input field for visual balance",
161
- "When value reaches min or max boundary, the corresponding stepper button icon switches to the disabled icon token",
162
- ],
163
-
164
- typeHierarchyRules: [
165
- "Value text uses tabular (monospaced) numerals to prevent layout shift when numbers change width",
166
- "Font weight for the value is Regular (400) — never Bold to avoid visual heaviness at small sizes",
167
- "Label text uses font-weight Medium (500) at the same size as the value text",
168
- "Helper and error text use one step smaller font-size than the value text with Regular weight",
169
- "Text alignment for the value is center-aligned within the input field",
170
- ],
171
-
172
- interactionRules: [
173
- { event: "Click Increment", trigger: "pointerup on increment stepper button", action: "Increase value by step amount; clamp at max; fire onChange handler" },
174
- { event: "Click Decrement", trigger: "pointerup on decrement stepper button", action: "Decrease value by step amount; clamp at min; fire onChange handler" },
175
- { event: "Long Press Stepper", trigger: "pointerdown held for 500ms on stepper button", action: "Begin auto-repeat incrementing/decrementing at 100ms intervals until pointerup" },
176
- { event: "Arrow Up", trigger: "ArrowUp key while input is focused", action: "Increase value by step amount; clamp at max" },
177
- { event: "Arrow Down", trigger: "ArrowDown key while input is focused", action: "Decrease value by step amount; clamp at min" },
178
- { event: "Home", trigger: "Home key while input is focused", action: "Set value to the minimum allowed value" },
179
- { event: "End", trigger: "End key while input is focused", action: "Set value to the maximum allowed value" },
180
- { event: "Direct Input", trigger: "User types a numeric value", action: "Update value on blur or Enter; validate against min/max/precision; show error if invalid" },
181
- { event: "Focus", trigger: "Tab key or click on input", action: "Show focus ring; select all text for easy replacement" },
182
- { event: "Blur", trigger: "Focus moves away from input", action: "Validate value; clamp to min/max if out of bounds; format to precision; fire onBlur handler" },
183
- ],
184
-
185
- contentGuidance: [
186
- "Labels should describe what the number represents: 'Quantity', 'Number of guests', 'Price per unit'",
187
- "Helper text should communicate constraints: 'Min 1, Max 99' or 'Increments of 0.5'",
188
- "Error messages should be specific: 'Value must be between 1 and 100' rather than 'Invalid number'",
189
- "Use appropriate precision for the context: integers for counts, 2 decimals for currency",
190
- "Do not use a number input for values that are not truly numeric (e.g. phone numbers, ZIP codes — use text input with masking)",
191
- "Stepper button icons should use universally understood symbols: plus/minus or up/down chevrons",
192
- ],
193
-
194
- responsiveBehaviour: [
195
- { breakpoint: "Mobile (<768px)", behavior: "Input stretches to full width; stepper buttons maintain minimum 48px touch targets; consider split layout for easier tapping" },
196
- { breakpoint: "Tablet (768-1023px)", behavior: "Input may be full-width or fixed-width depending on form layout; stepper buttons maintain 44px targets" },
197
- { breakpoint: "Desktop (1024-1439px)", behavior: "Standard width following form column grid; stacked stepper buttons on the right side are the default layout" },
198
- { breakpoint: "Ultra-wide (>=1440px)", behavior: "Input width remains capped — does not scale proportionally with viewport" },
199
- ],
200
-
201
- accessibilitySpec: {
202
- intro:
203
- "Number inputs require the spinbutton ARIA pattern with precise value announcements and full keyboard support for screen reader and keyboard-only users.",
204
- requirements: [
205
- { requirement: "Spinbutton Role", level: "A", notes: "Input element uses role='spinbutton' to communicate its purpose to assistive technology" },
206
- { requirement: "Value Attributes", level: "A", notes: "aria-valuemin, aria-valuemax, and aria-valuenow reflect the current min, max, and value at all times" },
207
- { requirement: "Value Text", level: "A", notes: "aria-valuetext provides a human-readable description when the number alone is insufficient (e.g. '$25.00')" },
208
- { requirement: "Keyboard Increment", level: "A", notes: "Up/Down arrow keys change the value by step; Home/End jump to min/max boundaries" },
209
- { requirement: "Label Association", level: "A", notes: "Input has aria-labelledby pointing to the visible label or an explicit <label> element with for attribute" },
210
- { requirement: "Error Association", level: "A", notes: "Error message linked via aria-describedby on the input; aria-invalid='true' in error state" },
211
- { requirement: "Stepper Button Labels", level: "A", notes: "Increment button has aria-label='Increase value'; decrement button has aria-label='Decrease value'" },
212
- { requirement: "Contrast Ratio", level: "AA", notes: "Value text to background: 4.5:1 minimum; stepper button icons to background: 3:1 minimum" },
213
- { requirement: "Touch Target", level: "AA", notes: "Stepper buttons provide at least 44x44px touch target per WCAG 2.5.5" },
214
- { requirement: "Disabled Announcement", level: "A", notes: "Disabled state announced via aria-disabled='true'; stepper buttons at min/max announced as unavailable" },
215
- ],
216
- outro: [
217
- "Ensure screen readers announce the updated value after each increment or decrement action",
218
- "When value is clamped at min or max, provide audible feedback that the boundary has been reached",
219
- "Do not trap keyboard focus within the component — Tab must move to the next form field",
220
- ],
221
- },
222
-
223
- qaAcceptanceCriteria: [
224
- { check: "Visual Regression", platform: "All", expectedResult: "Input and stepper buttons render pixel-perfect against baseline for each size and state" },
225
- { check: "Increment Click", platform: "Web", expectedResult: "Clicking increment button increases value by step; value does not exceed max" },
226
- { check: "Decrement Click", platform: "Web", expectedResult: "Clicking decrement button decreases value by step; value does not go below min" },
227
- { check: "Long Press", platform: "Web", expectedResult: "Holding stepper button auto-repeats after 500ms delay at 100ms intervals" },
228
- { check: "Keyboard Up/Down", platform: "Web", expectedResult: "Arrow Up/Down keys change value by step amount while input is focused" },
229
- { check: "Home/End Keys", platform: "Web", expectedResult: "Home sets value to min; End sets value to max" },
230
- { check: "Direct Input", platform: "Web", expectedResult: "Typing a valid number updates value on blur; invalid input triggers error state" },
231
- { check: "Boundary Clamping", platform: "All", expectedResult: "Value clamps to min/max on blur; stepper icon switches to disabled style at boundaries" },
232
- { check: "Precision", platform: "All", expectedResult: "Value displays correct number of decimal places per precision prop" },
233
- { check: "Focus State", platform: "Web", expectedResult: "Focus ring visible on input via Tab; text selected for easy replacement" },
234
- { check: "Error State", platform: "All", expectedResult: "Error border, icon, and message appear; aria-invalid='true' and aria-describedby set" },
235
- { check: "Disabled State", platform: "All", expectedResult: "Muted visuals; clicks and keyboard input ignored; aria-disabled='true'" },
236
- { check: "Screen Reader", platform: "Web", expectedResult: "Announces role 'spinbutton', label, current value, min, max, and error state correctly" },
237
- { check: "Touch Target Size", platform: "Mobile", expectedResult: "Stepper buttons are at least 44x44px touch targets" },
238
- { check: "Contrast", platform: "All", expectedResult: "Value text passes 4.5:1 contrast; stepper icons pass 3:1 non-text contrast" },
239
- { check: "RTL Support", platform: "Web", expectedResult: "Stepper button positions and text alignment mirror correctly in RTL locales" },
240
- ],
241
-
242
- dos: [
243
- "Use the Number Input for values where precise numeric control is needed (quantities, prices, percentages)",
244
- "Set appropriate min, max, and step values to constrain input to valid ranges",
245
- "Use tabular/monospaced numerals to prevent layout shift when values change",
246
- "Provide clear helper text communicating the allowed range and step increments",
247
- "Disable the corresponding stepper button when the value reaches min or max",
248
- "Select all text on focus so users can quickly type a replacement value",
249
- "Validate and clamp the value on blur to ensure it falls within the valid range",
250
- ],
251
-
252
- donts: [
253
- "Do not use a Number Input for non-numeric values like phone numbers, ZIP codes, or credit card numbers",
254
- "Do not allow the value to exceed min/max bounds — clamp or reject out-of-range input",
255
- "Do not hide the stepper buttons — they provide essential affordance that the field accepts numeric input",
256
- "Do not use proportional fonts for the value — layout will shift as digit widths change",
257
- "Do not remove the focus ring from the input or stepper buttons",
258
- "Do not allow free-text entry of non-numeric characters (letters, special characters except minus and decimal)",
259
- "Do not override design token colors with hardcoded hex values for stepper buttons or field borders",
260
- ],
261
- };
@@ -1,248 +0,0 @@
1
- /**
2
- * pagination.ts — Gold-standard design knowledge for Pagination components
3
- */
4
- import type { ComponentKnowledge } from "../types.js";
5
-
6
- export const paginationKnowledge: ComponentKnowledge = {
7
- description:
8
- "Page navigation control | Enables traversal across paged content | Supports numbered, compact, and load-more patterns",
9
-
10
- stateSpecifications: [
11
- {
12
- state: "Default",
13
- visualChange: "Page numbers displayed as clickable items; navigation arrows enabled; current page highlighted",
14
- opacity: "1",
15
- cursorWeb: "pointer",
16
- usage: "Resting state — pagination is ready for interaction with all navigable pages visible",
17
- },
18
- {
19
- state: "Hover",
20
- visualChange: "Background of hovered page number shifts to hover token; subtle elevation or underline may appear",
21
- opacity: "1",
22
- cursorWeb: "pointer",
23
- usage: "Mouse cursor enters a page number or navigation arrow hit area",
24
- },
25
- {
26
- state: "Active-page",
27
- visualChange: "Current page number uses primary fill with high-contrast text; non-interactive appearance",
28
- opacity: "1",
29
- cursorWeb: "default",
30
- usage: "Indicates the currently displayed page — this item is not clickable",
31
- },
32
- {
33
- state: "Disabled-nav",
34
- visualChange: "Previous/Next arrows use muted color tokens; no hover effect",
35
- opacity: "0.4",
36
- cursorWeb: "not-allowed",
37
- usage: "Navigation arrow is disabled because user is on the first or last page respectively",
38
- },
39
- {
40
- state: "Focus",
41
- visualChange: "2px focus ring offset by 2px around the focused page item, using $focus-ring token",
42
- opacity: "1",
43
- cursorWeb: "pointer",
44
- usage: "Page number or arrow receives keyboard focus via Tab or arrow key navigation",
45
- },
46
- ],
47
-
48
- propertyDescriptions: {
49
- totalPages: "Total number of pages available for navigation; determines the range of page numbers rendered",
50
- currentPage: "The currently active page number; controls which item receives the active-page visual treatment",
51
- type: "Pagination pattern variant — 'numbered' shows page numbers, 'loadMore' shows a single button, 'compact' shows current/total only",
52
- size: "Dimensional preset controlling item height, padding, font-size, and icon-size (sm, md, lg)",
53
- siblingCount: "Number of page numbers to show on each side of the current page before truncation ellipsis appears",
54
- boundaryCount: "Number of page numbers always visible at the start and end of the range regardless of current page",
55
- onPageChange: "Callback fired when a new page is selected; receives the target page number as argument",
56
- disabled: "When true, the entire pagination component is non-interactive; all items appear muted",
57
- showFirstLast: "When true, dedicated first-page and last-page navigation arrows are rendered alongside prev/next",
58
- },
59
-
60
- sizeSpecifications: [
61
- {
62
- size: "Small",
63
- height: "28px",
64
- paddingLR: "6px",
65
- fontSize: "12px",
66
- iconSize: "14px",
67
- borderRadius: "4px",
68
- },
69
- {
70
- size: "Medium",
71
- height: "36px",
72
- paddingLR: "10px",
73
- fontSize: "14px",
74
- iconSize: "18px",
75
- borderRadius: "6px",
76
- },
77
- {
78
- size: "Large",
79
- height: "44px",
80
- paddingLR: "14px",
81
- fontSize: "16px",
82
- iconSize: "22px",
83
- borderRadius: "8px",
84
- },
85
- ],
86
-
87
- designTokenBindings: [
88
- {
89
- property: "Page Item Background",
90
- tokenName: "$pagination-item-bg",
91
- role: "Default background for non-active page number items",
92
- fallback: "transparent",
93
- },
94
- {
95
- property: "Active Page Background",
96
- tokenName: "$pagination-active-bg",
97
- role: "Fill color for the currently selected page number",
98
- fallback: "#2563EB",
99
- },
100
- {
101
- property: "Active Page Text",
102
- tokenName: "$pagination-active-text",
103
- role: "Text color on the active page number for contrast",
104
- fallback: "#FFFFFF",
105
- },
106
- {
107
- property: "Page Item Text",
108
- tokenName: "$pagination-item-text",
109
- role: "Default text color for non-active page numbers",
110
- fallback: "#344054",
111
- },
112
- {
113
- property: "Hover Background",
114
- tokenName: "$pagination-hover-bg",
115
- role: "Background applied on hover for non-active page items",
116
- fallback: "#F2F4F7",
117
- },
118
- {
119
- property: "Disabled Color",
120
- tokenName: "$pagination-disabled",
121
- role: "Muted color for disabled navigation arrows",
122
- fallback: "#D0D5DD",
123
- },
124
- {
125
- property: "Border",
126
- tokenName: "$pagination-border",
127
- role: "Optional border around each page item for outlined variant",
128
- fallback: "#E4E7EC",
129
- },
130
- {
131
- property: "Focus Ring",
132
- tokenName: "$focus-ring",
133
- role: "Keyboard focus indicator ring on focused page item",
134
- fallback: "0 0 0 2px #FFFFFF, 0 0 0 4px #2E90FA",
135
- },
136
- {
137
- property: "Font Family",
138
- tokenName: "$font-family-sans",
139
- role: "Typeface for page number labels",
140
- fallback: "Inter, system-ui, sans-serif",
141
- },
142
- {
143
- property: "Gap",
144
- tokenName: "$spacing-xs",
145
- role: "Spacing between adjacent page items",
146
- fallback: "4px",
147
- },
148
- ],
149
-
150
- structureRules: [
151
- "Container uses horizontal Auto Layout with center vertical alignment",
152
- "Navigation arrows (prev/next) are the outermost children; page number items sit between them",
153
- "Ellipsis truncation indicators are non-interactive text elements inserted when sibling/boundary counts cause omission",
154
- "Each page item has equal width and height to form a square or near-square hit area",
155
- "Active page item uses a different fill but same dimensions as other items — no layout shift on page change",
156
- "Load-more variant replaces the numbered row with a single centered button component",
157
- "Compact variant shows 'Page X of Y' text with prev/next arrows only — no individual page items",
158
- "Touch targets for each item must be at least 44x44px; add transparent padding if visual size is smaller",
159
- ],
160
-
161
- typeHierarchyRules: [
162
- "Page numbers use tabular (monospace) numerals for consistent width across digits",
163
- "Font weight is Medium (500) for the active page, Regular (400) for inactive pages",
164
- "Ellipsis uses the same font-size as page numbers but with reduced opacity",
165
- "Compact variant label ('Page X of Y') uses Regular weight with the same font-size as the selected size preset",
166
- ],
167
-
168
- interactionRules: [
169
- { event: "Click Page Number", trigger: "pointerup on a non-active page item", action: "Fire onPageChange with the clicked page number; update active-page visuals" },
170
- { event: "Click Previous", trigger: "pointerup on prev arrow (when not disabled)", action: "Fire onPageChange with currentPage - 1" },
171
- { event: "Click Next", trigger: "pointerup on next arrow (when not disabled)", action: "Fire onPageChange with currentPage + 1" },
172
- { event: "Hover", trigger: "pointerenter on any interactive page item", action: "Apply hover background token; transition smoothly" },
173
- { event: "Focus", trigger: "Tab or arrow key navigation", action: "Show focus ring on the focused page item" },
174
- { event: "Keydown Enter", trigger: "Enter key while a page item is focused", action: "Fire onPageChange for the focused page number" },
175
- { event: "Keydown Arrow", trigger: "Left/Right arrow keys within the pagination nav", action: "Move focus to the adjacent page item without activating it" },
176
- ],
177
-
178
- contentGuidance: [
179
- "Always pair pagination with a clear indication of total results or total pages so users know the scope",
180
- "Use numbered pagination for content where users need random access to specific pages (e.g. search results)",
181
- "Use load-more for infinite-scroll-like patterns where sequential consumption is expected (e.g. feeds)",
182
- "Use compact pagination when horizontal space is limited (e.g. mobile cards, embedded tables)",
183
- "Navigation arrows should use chevron icons, not text labels, to save space; add aria-label for screen readers",
184
- "Truncation ellipsis should appear when total pages exceed siblingCount + boundaryCount thresholds",
185
- ],
186
-
187
- responsiveBehaviour: [
188
- { breakpoint: "Mobile (<768px)", behavior: "Switch to compact variant or show reduced siblingCount (1); prev/next arrows remain visible" },
189
- { breakpoint: "Tablet (768-1023px)", behavior: "Show abbreviated page range with siblingCount of 1-2; navigation arrows visible" },
190
- { breakpoint: "Desktop (1024-1439px)", behavior: "Full numbered pagination with standard siblingCount and boundaryCount" },
191
- { breakpoint: "Ultra-wide (>=1440px)", behavior: "Pagination size remains capped; do not stretch to fill available width" },
192
- ],
193
-
194
- accessibilitySpec: {
195
- intro:
196
- "Pagination must be navigable by keyboard and clearly announce the current page to assistive technologies. It wraps in a landmark nav element for easy discovery.",
197
- requirements: [
198
- { requirement: "Landmark", level: "A", notes: "Wrap in <nav> element with aria-label='Pagination' for screen reader landmark navigation" },
199
- { requirement: "Current Page", level: "A", notes: "Active page item must have aria-current='page' so screen readers announce it as the current page" },
200
- { requirement: "Keyboard Navigation", level: "A", notes: "All page items and arrows must be focusable via Tab; Enter activates the focused item" },
201
- { requirement: "Disabled State", level: "A", notes: "Disabled arrows use aria-disabled='true' and are excluded from tab order or made inert" },
202
- { requirement: "Page Change Announcement", level: "AA", notes: "When a new page is selected, announce the change via aria-live='polite' region (e.g. 'Page 3 of 10')" },
203
- { requirement: "Contrast Ratio", level: "AA", notes: "Active page indicator must have 3:1 contrast against surrounding surface; text must meet 4.5:1" },
204
- { requirement: "Touch Target", level: "AA", notes: "Each page item must have at least 44x44px touch area per WCAG 2.5.5" },
205
- ],
206
- outro: [
207
- "Ensure focus is not lost when the page list re-renders after a page change — focus should return to the newly active item or a predictable location",
208
- "Truncation ellipsis elements should have aria-hidden='true' since they are not interactive and carry no semantic meaning",
209
- "Screen readers should be able to determine the total number of pages from context (e.g. 'Page 3 of 10')",
210
- ],
211
- },
212
-
213
- qaAcceptanceCriteria: [
214
- { check: "Visual Regression", platform: "All", expectedResult: "Pagination renders pixel-perfect against baseline for each type and size variant" },
215
- { check: "Active Page Highlight", platform: "All", expectedResult: "Current page is visually distinct with primary fill; changes on navigation" },
216
- { check: "Disabled Arrow", platform: "All", expectedResult: "Prev disabled on page 1; Next disabled on last page; muted visuals and no click response" },
217
- { check: "Hover State", platform: "Web", expectedResult: "Non-active page items show hover background on mouse enter; active page does not change" },
218
- { check: "Focus State", platform: "Web", expectedResult: "Focus ring visible on Tab navigation; hidden on mouse click (focus-visible)" },
219
- { check: "Keyboard Navigation", platform: "Web", expectedResult: "Tab moves between page items and arrows; Enter fires page change; arrow keys move focus" },
220
- { check: "Screen Reader", platform: "Web", expectedResult: "Announces nav landmark, current page via aria-current, page change via aria-live" },
221
- { check: "Truncation", platform: "Web", expectedResult: "Ellipsis appears when pages exceed sibling+boundary threshold; not focusable" },
222
- { check: "Compact Variant", platform: "All", expectedResult: "'Page X of Y' label updates correctly; prev/next arrows function properly" },
223
- { check: "Load More Variant", platform: "All", expectedResult: "Button triggers next page load; disabled/loading state during fetch" },
224
- { check: "Touch Target Size", platform: "Mobile", expectedResult: "All interactive items have at least 44x44px hit area" },
225
- { check: "Contrast", platform: "All", expectedResult: "Active page passes 4.5:1 text contrast; non-text indicator passes 3:1" },
226
- { check: "RTL Support", platform: "Web", expectedResult: "Arrow directions swap; page order mirrors; layout alignment correct in RTL locales" },
227
- ],
228
-
229
- dos: [
230
- "Use numbered pagination for data tables and search results where users need direct page access",
231
- "Always show the first and last page numbers (boundaryCount >= 1) to give users a sense of total range",
232
- "Highlight the active page clearly so users always know where they are in the result set",
233
- "Pair pagination with a results summary (e.g. 'Showing 11-20 of 97 results')",
234
- "Use consistent item sizing — each page number item should be the same width and height",
235
- "Disable rather than hide navigation arrows when at the boundary to maintain spatial stability",
236
- "Provide aria-current='page' on the active page item for assistive technology",
237
- ],
238
-
239
- donts: [
240
- "Do not use pagination for fewer than 2 pages — hide the component entirely if totalPages <= 1",
241
- "Do not show all page numbers when totalPages is large — use truncation with ellipsis",
242
- "Do not change the page on hover — only on explicit click or Enter keypress",
243
- "Do not remove disabled arrows from the DOM; keep them visible but inert for layout consistency",
244
- "Do not rely solely on color to indicate the active page — use fill, weight, or shape differences",
245
- "Do not use pagination for infinite scroll content — use load-more or virtual scrolling instead",
246
- "Do not place pagination inside scrollable containers where it might be hidden from view",
247
- ],
248
- };