@sarjallab09/figma-intelligence 1.1.0 → 1.2.1
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.
- package/README.md +69 -36
- package/dist/bin/cli.js +2 -0
- package/dist/design-bridge/bridge.js +2 -0
- package/dist/figma-bridge-plugin/bridge-relay.js +2 -0
- package/dist/figma-bridge-plugin/code.js +1 -0
- package/{figma-bridge-plugin → dist/figma-bridge-plugin}/package-lock.json +0 -3
- package/dist/figma-bridge-plugin/ui.html +4970 -0
- package/dist/figma-intelligence-layer/dist/index.js +2 -0
- package/dist/scripts/clean-existing-chunks.js +2 -0
- package/dist/scripts/connect-ai-tool.js +2 -0
- package/dist/scripts/convert-hub-pdfs.js +2 -0
- package/dist/scripts/figma-mcp-status.js +2 -0
- package/dist/scripts/register-codex-mcp.js +2 -0
- package/dist/scripts/test-copilot-chat.js +2 -0
- package/package.json +11 -8
- package/bin/cli.js +0 -859
- package/design-bridge/bridge.js +0 -196
- package/design-bridge/lib/assets.js +0 -367
- package/design-bridge/lib/prompt.js +0 -85
- package/design-bridge/lib/server.js +0 -66
- package/design-bridge/lib/stitch.js +0 -37
- package/design-bridge/lib/tokens.js +0 -82
- package/design-bridge/package-lock.json +0 -579
- package/figma-bridge-plugin/README.md +0 -97
- package/figma-bridge-plugin/anthropic-chat-runner.js +0 -192
- package/figma-bridge-plugin/bridge-relay.js +0 -2505
- package/figma-bridge-plugin/chat-runner.js +0 -485
- package/figma-bridge-plugin/code.js +0 -1534
- package/figma-bridge-plugin/codex-runner.js +0 -505
- package/figma-bridge-plugin/component-schemas.js +0 -110
- package/figma-bridge-plugin/content-context.js +0 -869
- package/figma-bridge-plugin/create-button.js +0 -216
- package/figma-bridge-plugin/gemini-cli-runner.js +0 -291
- package/figma-bridge-plugin/gemini-runner.js +0 -187
- package/figma-bridge-plugin/html-to-figma.js +0 -927
- package/figma-bridge-plugin/knowledge-hub/.gitkeep +0 -0
- package/figma-bridge-plugin/knowledge-hub/uspec-references/anatomy-spec.md +0 -159
- package/figma-bridge-plugin/knowledge-hub/uspec-references/api-spec.md +0 -162
- package/figma-bridge-plugin/knowledge-hub/uspec-references/color-spec.md +0 -148
- package/figma-bridge-plugin/knowledge-hub/uspec-references/full-spec-template.md +0 -314
- package/figma-bridge-plugin/knowledge-hub/uspec-references/property-spec.md +0 -175
- package/figma-bridge-plugin/knowledge-hub/uspec-references/screen-reader-spec.md +0 -180
- package/figma-bridge-plugin/knowledge-hub/uspec-references/structure-spec.md +0 -165
- package/figma-bridge-plugin/perplexity-runner.js +0 -188
- package/figma-bridge-plugin/references/SKILL.md +0 -178
- package/figma-bridge-plugin/references/anatomy-spec.md +0 -159
- package/figma-bridge-plugin/references/api-spec.md +0 -162
- package/figma-bridge-plugin/references/color-spec.md +0 -148
- package/figma-bridge-plugin/references/full-spec-template.md +0 -314
- package/figma-bridge-plugin/references/property-spec.md +0 -175
- package/figma-bridge-plugin/references/screen-reader-spec.md +0 -180
- package/figma-bridge-plugin/references/structure-spec.md +0 -165
- package/figma-bridge-plugin/shared-prompt-config.js +0 -645
- package/figma-bridge-plugin/spec-helpers/build-table.js +0 -269
- package/figma-bridge-plugin/spec-helpers/classify-elements.js +0 -189
- package/figma-bridge-plugin/spec-helpers/index.js +0 -35
- package/figma-bridge-plugin/spec-helpers/parse-figma-link.js +0 -49
- package/figma-bridge-plugin/spec-helpers/position-markers.js +0 -158
- package/figma-bridge-plugin/stitch-auth.js +0 -322
- package/figma-bridge-plugin/stitch-runner.js +0 -1427
- package/figma-bridge-plugin/token-resolver.js +0 -107
- package/figma-bridge-plugin/ui.html +0 -4542
- package/figma-intelligence-layer/.env.example +0 -39
- package/figma-intelligence-layer/docs/local-image-generation.md +0 -60
- package/figma-intelligence-layer/examples/comfyui-workflow-template.example.json +0 -101
- package/figma-intelligence-layer/jest.config.js +0 -14
- package/figma-intelligence-layer/mcp-config.json +0 -19
- package/figma-intelligence-layer/package-lock.json +0 -5892
- package/figma-intelligence-layer/scripts/setup-comfyui-local.sh +0 -67
- package/figma-intelligence-layer/scripts/start-comfyui.sh +0 -33
- package/figma-intelligence-layer/src/index.ts +0 -2233
- package/figma-intelligence-layer/src/shared/auto-layout-validator.ts +0 -404
- package/figma-intelligence-layer/src/shared/cache.ts +0 -187
- package/figma-intelligence-layer/src/shared/color-operations.ts +0 -533
- package/figma-intelligence-layer/src/shared/color-utils.ts +0 -138
- package/figma-intelligence-layer/src/shared/component-script-builder.ts +0 -413
- package/figma-intelligence-layer/src/shared/component-templates.ts +0 -2767
- package/figma-intelligence-layer/src/shared/concept-taxonomy.ts +0 -694
- package/figma-intelligence-layer/src/shared/decision-log.ts +0 -128
- package/figma-intelligence-layer/src/shared/design-system-context.ts +0 -568
- package/figma-intelligence-layer/src/shared/design-system-intelligence.ts +0 -131
- package/figma-intelligence-layer/src/shared/design-system-matcher.ts +0 -184
- package/figma-intelligence-layer/src/shared/design-system-normalizers.ts +0 -196
- package/figma-intelligence-layer/src/shared/design-system-tokens.ts +0 -295
- package/figma-intelligence-layer/src/shared/dtcg-validator.ts +0 -530
- package/figma-intelligence-layer/src/shared/enrichment-pipeline.ts +0 -671
- package/figma-intelligence-layer/src/shared/figma-bridge.ts +0 -1418
- package/figma-intelligence-layer/src/shared/font-config.ts +0 -126
- package/figma-intelligence-layer/src/shared/icon-catalog.ts +0 -360
- package/figma-intelligence-layer/src/shared/icon-fetch.ts +0 -80
- package/figma-intelligence-layer/src/shared/prototype-script-builder.ts +0 -162
- package/figma-intelligence-layer/src/shared/response-compression.ts +0 -440
- package/figma-intelligence-layer/src/shared/semantic-token-catalog.ts +0 -324
- package/figma-intelligence-layer/src/shared/token-binder.ts +0 -505
- package/figma-intelligence-layer/src/shared/token-math.ts +0 -427
- package/figma-intelligence-layer/src/shared/token-naming.ts +0 -468
- package/figma-intelligence-layer/src/shared/token-utils.ts +0 -420
- package/figma-intelligence-layer/src/shared/types.ts +0 -346
- package/figma-intelligence-layer/src/shared/typography-presets.ts +0 -94
- package/figma-intelligence-layer/src/shared/unsplash.ts +0 -165
- package/figma-intelligence-layer/src/shared/vision-client.ts +0 -607
- package/figma-intelligence-layer/src/shared/vision-provider-anthropic.ts +0 -334
- package/figma-intelligence-layer/src/shared/vision-provider-openai.ts +0 -446
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-handler.ts +0 -782
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-renderer.ts +0 -496
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotation-kit.ts +0 -230
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/colorblind-sim.ts +0 -66
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/index.ts +0 -810
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-analyzer.ts +0 -1191
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-figma-page.ts +0 -1346
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-handler.ts +0 -148
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-figma-page.ts +0 -499
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-report.ts +0 -910
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-checker.ts +0 -989
- package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-criteria.ts +0 -1160
- package/figma-intelligence-layer/src/tools/phase1-vision/design-from-ref/index.ts +0 -424
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/component-recognizer.ts +0 -38
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/ds-matcher.ts +0 -111
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/font-matcher.ts +0 -114
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/icon-resolver.ts +0 -103
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/index.ts +0 -1060
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/layout-segmenter.ts +0 -18
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/token-inferencer.ts +0 -39
- package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/vision-pipeline.ts +0 -58
- package/figma-intelligence-layer/src/tools/phase1-vision/sketch-to-design/index.ts +0 -298
- package/figma-intelligence-layer/src/tools/phase1-vision/visual-audit/index.ts +0 -197
- package/figma-intelligence-layer/src/tools/phase2-accuracy/component-audit/index.ts +0 -494
- package/figma-intelligence-layer/src/tools/phase2-accuracy/intent-translator/index.ts +0 -356
- package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/container-patterns.ts +0 -123
- package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/index.ts +0 -663
- package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/built-in-rules.yaml +0 -56
- package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/index.ts +0 -614
- package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/rule-engine.ts +0 -113
- package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/color-theory.ts +0 -178
- package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/index.ts +0 -470
- package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/index.ts +0 -429
- package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/token-override-maps.ts +0 -226
- package/figma-intelligence-layer/src/tools/phase3-generation/ai-image-insert/index.ts +0 -535
- package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/index.ts +0 -660
- package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/pattern-fingerprints.ts +0 -209
- package/figma-intelligence-layer/src/tools/phase3-generation/composition-builder/index.ts +0 -540
- package/figma-intelligence-layer/src/tools/phase3-generation/figma-animated-build.ts +0 -391
- package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/index.ts +0 -2019
- package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/screen-templates.ts +0 -131
- package/figma-intelligence-layer/src/tools/phase3-generation/prototype-map/index.ts +0 -381
- package/figma-intelligence-layer/src/tools/phase3-generation/prototype-wire/index.ts +0 -565
- package/figma-intelligence-layer/src/tools/phase3-generation/swarm-build/index.ts +0 -764
- package/figma-intelligence-layer/src/tools/phase3-generation/system-drift/index.ts +0 -535
- package/figma-intelligence-layer/src/tools/phase3-generation/unsplash-search/index.ts +0 -84
- package/figma-intelligence-layer/src/tools/phase3-generation/url-to-frame/index.ts +0 -401
- package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/css-animations.ts +0 -68
- package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/framer-motion.ts +0 -78
- package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/swift-animations.ts +0 -93
- package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/index.ts +0 -596
- package/figma-intelligence-layer/src/tools/phase4-sync/ci-check/index.ts +0 -462
- package/figma-intelligence-layer/src/tools/phase4-sync/export-tokens/index.ts +0 -1470
- package/figma-intelligence-layer/src/tools/phase4-sync/generate-component-code/index.ts +0 -829
- package/figma-intelligence-layer/src/tools/phase4-sync/handoff-spec/index.ts +0 -702
- package/figma-intelligence-layer/src/tools/phase4-sync/icon-library-sync/index.ts +0 -483
- package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/index.ts +0 -501
- package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/storybook-parser.ts +0 -106
- package/figma-intelligence-layer/src/tools/phase4-sync/watch-docs/index.ts +0 -676
- package/figma-intelligence-layer/src/tools/phase4-sync/webhook-listener/index.ts +0 -560
- package/figma-intelligence-layer/src/tools/phase5-governance/apg-doc/index.ts +0 -1043
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/component-detection.ts +0 -620
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/anatomy.ts +0 -331
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/color-tokens.ts +0 -77
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/properties.ts +0 -54
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/snapshot.ts +0 -287
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/spacing.ts +0 -71
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/states.ts +0 -43
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/typography.ts +0 -71
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/index.ts +0 -221
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/_default.ts +0 -166
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/accordion.ts +0 -232
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/alert.ts +0 -234
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar-group.ts +0 -270
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar.ts +0 -249
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/badge.ts +0 -231
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/banner.ts +0 -293
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/breadcrumb.ts +0 -240
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/button.ts +0 -243
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/calendar.ts +0 -307
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/card.ts +0 -143
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/checkbox.ts +0 -227
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/chip.ts +0 -233
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/combobox.ts +0 -282
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/datepicker.ts +0 -276
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/divider.ts +0 -223
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/drawer.ts +0 -255
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/dropdown-menu.ts +0 -289
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/empty-state.ts +0 -261
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/file-uploader.ts +0 -290
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/form.ts +0 -265
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/grid.ts +0 -238
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/icon.ts +0 -255
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/index.ts +0 -128
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-edit.ts +0 -286
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-message.ts +0 -255
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/input.ts +0 -330
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/link.ts +0 -247
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/list.ts +0 -250
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/menu.ts +0 -247
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/modal.ts +0 -144
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navbar.ts +0 -264
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navigation.ts +0 -251
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/number-input.ts +0 -261
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/pagination.ts +0 -248
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/popover.ts +0 -270
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/progress.ts +0 -251
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/radio.ts +0 -142
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/range-slider.ts +0 -282
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/rating.ts +0 -250
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/search.ts +0 -258
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/segmented-control.ts +0 -265
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/select.ts +0 -319
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/skeleton.ts +0 -256
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/slider.ts +0 -232
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/spinner.ts +0 -239
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/status-dot.ts +0 -252
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/stepper.ts +0 -270
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/table.ts +0 -244
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tabs.ts +0 -143
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tag.ts +0 -243
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/textarea.ts +0 -259
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/time-picker.ts +0 -293
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toast.ts +0 -144
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toggle.ts +0 -289
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toolbar.ts +0 -267
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tooltip.ts +0 -232
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/treeview.ts +0 -257
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/typography.ts +0 -319
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/legacy-compat.ts +0 -121
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/anatomy-diagram.ts +0 -430
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/figma-page.ts +0 -312
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/json.ts +0 -129
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/markdown.ts +0 -78
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/visual-doc.ts +0 -2333
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/accessibility.ts +0 -100
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/anatomy.ts +0 -32
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/color-tokens.ts +0 -59
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/content-guidance.ts +0 -18
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/design-tokens.ts +0 -53
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/interaction-rules.ts +0 -19
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/overview.ts +0 -91
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/properties-api.ts +0 -71
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/qa-criteria.ts +0 -19
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/related-components.ts +0 -110
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/responsive.ts +0 -19
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/size-specs.ts +0 -67
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/spacing-structure.ts +0 -58
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/state-specs.ts +0 -79
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/states.ts +0 -50
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/type-hierarchy.ts +0 -33
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/typography.ts +0 -55
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/usage-guidelines.ts +0 -73
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/variants.ts +0 -81
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/types.ts +0 -409
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/index.ts +0 -198
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/renderer.ts +0 -701
- package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/types.ts +0 -88
- package/figma-intelligence-layer/src/tools/phase5-governance/decision-log/index.ts +0 -135
- package/figma-intelligence-layer/src/tools/phase5-governance/design-decision-log/index.ts +0 -491
- package/figma-intelligence-layer/src/tools/phase5-governance/ds-primitives/index.ts +0 -416
- package/figma-intelligence-layer/src/tools/phase5-governance/ds-scaffolder/index.ts +0 -722
- package/figma-intelligence-layer/src/tools/phase5-governance/ds-variables/index.ts +0 -449
- package/figma-intelligence-layer/src/tools/phase5-governance/health-report/index.ts +0 -393
- package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/index.ts +0 -406
- package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/figma-page.ts +0 -292
- package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/json.ts +0 -24
- package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/markdown.ts +0 -172
- package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/naming-guide.ts +0 -409
- package/figma-intelligence-layer/src/tools/phase5-governance/token-analytics/index.ts +0 -594
- package/figma-intelligence-layer/src/tools/phase5-governance/token-docs/index.ts +0 -710
- package/figma-intelligence-layer/src/tools/phase5-governance/token-migrate/index.ts +0 -458
- package/figma-intelligence-layer/src/tools/phase5-governance/token-naming/index.ts +0 -134
- package/figma-intelligence-layer/tests/apg-doc.test.ts +0 -101
- package/figma-intelligence-layer/tests/design-system-context.test.ts +0 -152
- package/figma-intelligence-layer/tests/design-system-matcher.test.ts +0 -144
- package/figma-intelligence-layer/tests/figma-bridge.test.ts +0 -83
- package/figma-intelligence-layer/tests/generate-image-and-insert.test.ts +0 -56
- package/figma-intelligence-layer/tests/screen-cloner-regression.test.ts +0 -69
- package/figma-intelligence-layer/tests/smoke.test.ts +0 -174
- package/figma-intelligence-layer/tests/spec-generator.test.ts +0 -127
- package/figma-intelligence-layer/tests/token-migrate.test.ts +0 -21
- package/figma-intelligence-layer/tests/token-naming.test.ts +0 -30
- package/figma-intelligence-layer/tsconfig.json +0 -19
- package/scripts/clean-existing-chunks.js +0 -179
- package/scripts/connect-ai-tool.js +0 -490
- package/scripts/convert-hub-pdfs.js +0 -425
- package/scripts/figma-mcp-status.js +0 -349
- package/scripts/register-codex-mcp.js +0 -96
- /package/{design-bridge → dist/design-bridge}/.env.example +0 -0
- /package/{design-bridge → dist/design-bridge}/package.json +0 -0
- /package/{figma-bridge-plugin → dist/figma-bridge-plugin}/manifest.json +0 -0
- /package/{figma-bridge-plugin → dist/figma-bridge-plugin}/package.json +0 -0
- /package/{figma-intelligence-layer → dist/figma-intelligence-layer}/package.json +0 -0
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar.ts
DELETED
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* avatar.ts — Gold-standard design knowledge for Avatar components
|
|
3
|
-
*/
|
|
4
|
-
import type { ComponentKnowledge } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export const avatarKnowledge: ComponentKnowledge = {
|
|
7
|
-
description:
|
|
8
|
-
"User representation | Identity thumbnail | Profile image display",
|
|
9
|
-
|
|
10
|
-
stateSpecifications: [
|
|
11
|
-
{
|
|
12
|
-
state: "Image Loaded",
|
|
13
|
-
visualChange: "User photo fills the circular container with object-fit cover",
|
|
14
|
-
opacity: "1",
|
|
15
|
-
cursorWeb: "default",
|
|
16
|
-
usage: "Primary state when a valid image source is available",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
state: "Initials Fallback",
|
|
20
|
-
visualChange: "Colored background with 1-2 uppercase initials centered in the circle",
|
|
21
|
-
opacity: "1",
|
|
22
|
-
cursorWeb: "default",
|
|
23
|
-
usage: "Fallback when no image URL is provided or image fails to load",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
state: "Icon Fallback",
|
|
27
|
-
visualChange: "Generic person silhouette icon centered on a neutral background",
|
|
28
|
-
opacity: "1",
|
|
29
|
-
cursorWeb: "default",
|
|
30
|
-
usage: "Final fallback when neither image nor initials data is available",
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
state: "Hover",
|
|
34
|
-
visualChange: "Subtle overlay or ring highlight appears around the avatar",
|
|
35
|
-
opacity: "1",
|
|
36
|
-
cursorWeb: "pointer",
|
|
37
|
-
usage: "Avatar is interactive (links to profile or triggers a popover)",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
state: "Focus",
|
|
41
|
-
visualChange: "2px focus ring offset by 2px from the avatar edge using $focus-ring token",
|
|
42
|
-
opacity: "1",
|
|
43
|
-
cursorWeb: "pointer",
|
|
44
|
-
usage: "Avatar receives keyboard focus when interactive",
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
state: "Loading",
|
|
48
|
-
visualChange: "Skeleton pulse animation in the circular shape while image loads",
|
|
49
|
-
opacity: "0.6",
|
|
50
|
-
cursorWeb: "default",
|
|
51
|
-
usage: "Image is being fetched from a remote source",
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
state: "Error",
|
|
55
|
-
visualChange: "Graceful degradation to initials or icon fallback; no broken image icon shown",
|
|
56
|
-
opacity: "1",
|
|
57
|
-
cursorWeb: "default",
|
|
58
|
-
usage: "Image URL returned a network error or 404",
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
|
|
62
|
-
propertyDescriptions: {
|
|
63
|
-
src: "Image URL for the user photo; triggers the image-loaded state when valid",
|
|
64
|
-
alt: "Accessible alternative text describing the user; required for screen readers",
|
|
65
|
-
initials: "1-2 character string used as the text fallback when no image is available",
|
|
66
|
-
size: "Dimensional preset — Extra Small, Small, Medium, Large, Extra Large — controls diameter and font size",
|
|
67
|
-
shape: "Container shape — Circle (default) or Square with rounded corners",
|
|
68
|
-
status: "Online presence badge — online (green), away (yellow), busy (red), offline (grey)",
|
|
69
|
-
statusPosition: "Badge placement — bottom-right (default) or top-right of the avatar",
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
sizeSpecifications: [
|
|
73
|
-
{
|
|
74
|
-
size: "Extra Small",
|
|
75
|
-
height: "24px",
|
|
76
|
-
paddingLR: "0px",
|
|
77
|
-
fontSize: "10px",
|
|
78
|
-
iconSize: "14px",
|
|
79
|
-
borderRadius: "50%",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
size: "Small",
|
|
83
|
-
height: "32px",
|
|
84
|
-
paddingLR: "0px",
|
|
85
|
-
fontSize: "12px",
|
|
86
|
-
iconSize: "16px",
|
|
87
|
-
borderRadius: "50%",
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
size: "Medium",
|
|
91
|
-
height: "40px",
|
|
92
|
-
paddingLR: "0px",
|
|
93
|
-
fontSize: "14px",
|
|
94
|
-
iconSize: "20px",
|
|
95
|
-
borderRadius: "50%",
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
size: "Large",
|
|
99
|
-
height: "48px",
|
|
100
|
-
paddingLR: "0px",
|
|
101
|
-
fontSize: "16px",
|
|
102
|
-
iconSize: "24px",
|
|
103
|
-
borderRadius: "50%",
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
size: "Extra Large",
|
|
107
|
-
height: "64px",
|
|
108
|
-
paddingLR: "0px",
|
|
109
|
-
fontSize: "20px",
|
|
110
|
-
iconSize: "32px",
|
|
111
|
-
borderRadius: "50%",
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
|
|
115
|
-
designTokenBindings: [
|
|
116
|
-
{
|
|
117
|
-
property: "Background",
|
|
118
|
-
tokenName: "$avatar-bg",
|
|
119
|
-
role: "Fill color for initials and icon fallback states",
|
|
120
|
-
fallback: "#E5E7EB",
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
property: "Initials Color",
|
|
124
|
-
tokenName: "$avatar-initials-text",
|
|
125
|
-
role: "Text color for the initials fallback",
|
|
126
|
-
fallback: "#374151",
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
property: "Border",
|
|
130
|
-
tokenName: "$avatar-border",
|
|
131
|
-
role: "Optional ring around the avatar for grouped/stacked layouts",
|
|
132
|
-
fallback: "2px solid #FFFFFF",
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
property: "Status Online",
|
|
136
|
-
tokenName: "$status-online",
|
|
137
|
-
role: "Green badge color for online presence",
|
|
138
|
-
fallback: "#22C55E",
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
property: "Status Busy",
|
|
142
|
-
tokenName: "$status-busy",
|
|
143
|
-
role: "Red badge color for busy/do-not-disturb presence",
|
|
144
|
-
fallback: "#EF4444",
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
property: "Focus Ring",
|
|
148
|
-
tokenName: "$focus-ring",
|
|
149
|
-
role: "Keyboard focus indicator ring for interactive avatars",
|
|
150
|
-
fallback: "0 0 0 2px #FFFFFF, 0 0 0 4px #2E90FA",
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
property: "Skeleton Pulse",
|
|
154
|
-
tokenName: "$skeleton-bg",
|
|
155
|
-
role: "Animated placeholder color during image loading",
|
|
156
|
-
fallback: "#F3F4F6",
|
|
157
|
-
},
|
|
158
|
-
],
|
|
159
|
-
|
|
160
|
-
structureRules: [
|
|
161
|
-
"Container is a fixed-size frame with clip content enabled and border-radius 50% for circular shape",
|
|
162
|
-
"Image layer fills the container using object-fit cover to prevent distortion",
|
|
163
|
-
"Initials text is absolutely centered within the container using auto layout with center/center alignment",
|
|
164
|
-
"Status badge is positioned as an overlay in the bottom-right corner with a 2px white border ring",
|
|
165
|
-
"Status badge diameter is 25% of the avatar diameter, with a minimum of 8px",
|
|
166
|
-
"In avatar groups, items overlap by 25% of their diameter with a negative margin and a white border ring",
|
|
167
|
-
"Avatar group renders right-to-left stacking order so the first avatar appears on top",
|
|
168
|
-
],
|
|
169
|
-
|
|
170
|
-
typeHierarchyRules: [
|
|
171
|
-
"Initials use Medium weight (500) and are always uppercase",
|
|
172
|
-
"Font size scales proportionally with avatar size — never exceeds 40% of the diameter",
|
|
173
|
-
"Single-character initials are preferred for Extra Small size to avoid clipping",
|
|
174
|
-
"Two-character initials use tighter letter spacing (-0.02em) to fit within the circle",
|
|
175
|
-
"Overflow count in avatar groups ('+3') uses the same font size as the avatar initials",
|
|
176
|
-
],
|
|
177
|
-
|
|
178
|
-
interactionRules: [
|
|
179
|
-
{ event: "Click / Tap", trigger: "pointerup on interactive avatar", action: "Navigate to user profile or open profile popover" },
|
|
180
|
-
{ event: "Hover", trigger: "pointerenter on interactive avatar", action: "Show tooltip with full user name; apply subtle ring highlight" },
|
|
181
|
-
{ event: "Image Error", trigger: "onerror on <img>", action: "Hide image layer; reveal initials fallback; if no initials, show icon fallback" },
|
|
182
|
-
{ event: "Focus", trigger: "Tab key or focus()", action: "Show focus ring around the avatar" },
|
|
183
|
-
{ event: "Blur", trigger: "Focus moves away", action: "Remove focus ring" },
|
|
184
|
-
{ event: "Group Overflow", trigger: "Avatar count exceeds maxVisible", action: "Render a '+N' overflow indicator as the last avatar in the group" },
|
|
185
|
-
],
|
|
186
|
-
|
|
187
|
-
contentGuidance: [
|
|
188
|
-
"Always provide a meaningful alt text — use the person's full name, not 'avatar' or 'user'",
|
|
189
|
-
"Initials should be derived from the user's first and last name (e.g. 'JD' for John Doe)",
|
|
190
|
-
"Use a consistent color-hashing algorithm for initials backgrounds to give each user a stable color",
|
|
191
|
-
"Profile images should be square at source; the component handles circular cropping",
|
|
192
|
-
"Avoid using avatars for decorative purposes — they should always represent a real person or entity",
|
|
193
|
-
"In avatar groups, include a tooltip on the overflow indicator showing the remaining names",
|
|
194
|
-
],
|
|
195
|
-
|
|
196
|
-
responsiveBehaviour: [
|
|
197
|
-
{ breakpoint: "Mobile (<768px)", behavior: "Use Small or Medium sizes; avatar groups show max 3 items with overflow count" },
|
|
198
|
-
{ breakpoint: "Tablet (768-1023px)", behavior: "Medium size is default; avatar groups may show up to 5 items" },
|
|
199
|
-
{ breakpoint: "Desktop (1024-1439px)", behavior: "All sizes available; avatar groups show up to 8 items inline" },
|
|
200
|
-
{ breakpoint: "Ultra-wide (>=1440px)", behavior: "Large and Extra Large sizes for profile headers; groups remain capped at 8" },
|
|
201
|
-
{ breakpoint: "Navigation Bar", behavior: "Use Small (32px) or Extra Small (24px) size to fit within nav height constraints" },
|
|
202
|
-
],
|
|
203
|
-
|
|
204
|
-
accessibilitySpec: {
|
|
205
|
-
intro:
|
|
206
|
-
"Avatars convey user identity and must be accessible to screen readers with meaningful alternative text and proper roles.",
|
|
207
|
-
requirements: [
|
|
208
|
-
{ requirement: "Alt Text", level: "A", notes: "Image avatars require descriptive alt text with the user's name; decorative avatars use alt=''" },
|
|
209
|
-
{ requirement: "Role", level: "A", notes: "Interactive avatars must use role='button' or role='link' with an accessible name" },
|
|
210
|
-
{ requirement: "Focusable", level: "A", notes: "Interactive avatars must be reachable via Tab key with visible focus indicator" },
|
|
211
|
-
{ requirement: "Color Independence", level: "A", notes: "Status badges must not rely solely on color — include aria-label describing presence state" },
|
|
212
|
-
{ requirement: "Contrast Ratio", level: "AA", notes: "Initials text-to-background: 4.5:1 minimum; status badge-to-avatar: 3:1 non-text contrast" },
|
|
213
|
-
{ requirement: "Touch Target", level: "AA", notes: "Interactive avatars must have at least 44x44px touch area, even for Small sizes" },
|
|
214
|
-
],
|
|
215
|
-
outro: [
|
|
216
|
-
"In avatar groups, announce the total count and visible names to screen readers via an aria-label on the group container",
|
|
217
|
-
"Status badges should use aria-label (e.g. 'Online') rather than relying on color alone",
|
|
218
|
-
],
|
|
219
|
-
},
|
|
220
|
-
|
|
221
|
-
qaAcceptanceCriteria: [
|
|
222
|
-
{ check: "Image Rendering", platform: "All", expectedResult: "User photo renders without distortion in a perfect circle with object-fit cover" },
|
|
223
|
-
{ check: "Fallback Chain", platform: "All", expectedResult: "Image error triggers initials; missing initials triggers icon; no broken image icon ever shown" },
|
|
224
|
-
{ check: "Initials Display", platform: "All", expectedResult: "1-2 uppercase characters centered in the circle with correct background color" },
|
|
225
|
-
{ check: "Status Badge", platform: "All", expectedResult: "Badge appears in correct position with white ring; color matches presence state" },
|
|
226
|
-
{ check: "Avatar Group", platform: "All", expectedResult: "Avatars overlap correctly with white border rings; overflow '+N' indicator appears when needed" },
|
|
227
|
-
{ check: "Focus State", platform: "Web", expectedResult: "Focus ring visible on Tab for interactive avatars; hidden for non-interactive ones" },
|
|
228
|
-
{ check: "Screen Reader", platform: "Web", expectedResult: "Announces user name and presence status; group announces total count" },
|
|
229
|
-
],
|
|
230
|
-
|
|
231
|
-
dos: [
|
|
232
|
-
"Use the image-initials-icon fallback chain consistently across the application",
|
|
233
|
-
"Apply a deterministic color-hashing algorithm for initials backgrounds",
|
|
234
|
-
"Include a white border ring when avatars are stacked or placed on colored backgrounds",
|
|
235
|
-
"Use the status badge to indicate real-time presence — keep it updated",
|
|
236
|
-
"Provide alt text with the user's full name for all image avatars",
|
|
237
|
-
"Use consistent sizes within the same context (e.g. all Medium in a comment thread)",
|
|
238
|
-
],
|
|
239
|
-
|
|
240
|
-
donts: [
|
|
241
|
-
"Do not display a broken image icon — always fall back gracefully",
|
|
242
|
-
"Do not use square avatars for user photos — circles are the standard convention",
|
|
243
|
-
"Do not scale avatars beyond Extra Large (64px) without design approval",
|
|
244
|
-
"Do not use status badges on non-interactive or decorative avatars",
|
|
245
|
-
"Do not crop initials — use single characters for Extra Small sizes",
|
|
246
|
-
"Do not stack more than 8 avatars in a group without an overflow indicator",
|
|
247
|
-
"Do not use low-resolution images — minimum 2x the display size for retina screens",
|
|
248
|
-
],
|
|
249
|
-
};
|
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/badge.ts
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* badge.ts — Gold-standard design knowledge for Badge components
|
|
3
|
-
*/
|
|
4
|
-
import type { ComponentKnowledge } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export const badgeKnowledge: ComponentKnowledge = {
|
|
7
|
-
description:
|
|
8
|
-
"Status indicator | Count display | Visual label marker",
|
|
9
|
-
|
|
10
|
-
stateSpecifications: [
|
|
11
|
-
{
|
|
12
|
-
state: "Default",
|
|
13
|
-
visualChange: "Solid pill-shaped fill with contrasting text or numeric count",
|
|
14
|
-
opacity: "1",
|
|
15
|
-
cursorWeb: "default",
|
|
16
|
-
usage: "Badge is visible and displays its value or status — purely presentational",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
state: "Dot Only",
|
|
20
|
-
visualChange: "Small filled circle (8-10px) without any text — minimal presence indicator",
|
|
21
|
-
opacity: "1",
|
|
22
|
-
cursorWeb: "default",
|
|
23
|
-
usage: "Binary indicator showing presence/absence of notifications or status without a count",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
state: "Overflow",
|
|
27
|
-
visualChange: "Count exceeds maximum threshold (e.g., 99+); displays truncated value with '+' suffix",
|
|
28
|
-
opacity: "1",
|
|
29
|
-
cursorWeb: "default",
|
|
30
|
-
usage: "Numeric count exceeds the configured max display value",
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
state: "Hidden",
|
|
34
|
-
visualChange: "Badge scales to 0 and fades out when count reaches 0 or status clears",
|
|
35
|
-
opacity: "0",
|
|
36
|
-
cursorWeb: "default",
|
|
37
|
-
usage: "No items to count or status no longer applies — badge is visually removed",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
state: "Updating",
|
|
41
|
-
visualChange: "Badge pulses or scales briefly (1.0 → 1.15 → 1.0) when count value changes",
|
|
42
|
-
opacity: "1",
|
|
43
|
-
cursorWeb: "default",
|
|
44
|
-
usage: "Count increments or decrements — micro-animation draws attention to the change",
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
state: "Positioned",
|
|
48
|
-
visualChange: "Badge overlaps the top-right corner of its parent element with 50% offset",
|
|
49
|
-
opacity: "1",
|
|
50
|
-
cursorWeb: "default",
|
|
51
|
-
usage: "Badge is anchored to a parent element (icon, avatar, button) as a superscript indicator",
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
|
|
55
|
-
propertyDescriptions: {
|
|
56
|
-
count: "Numeric value displayed inside the badge; values above max are shown as 'max+'",
|
|
57
|
-
max: "Maximum displayable count before overflow truncation (default 99; shows '99+')",
|
|
58
|
-
variant: "Visual style — filled, outlined, or dot — controls background treatment and content visibility",
|
|
59
|
-
color: "Semantic color — neutral, primary, success, warning, error — maps to design tokens for fill and text",
|
|
60
|
-
size: "Dimensional preset controlling diameter (dot), height and padding (count), and font-size",
|
|
61
|
-
showZero: "When true, badge remains visible when count is 0; when false, badge hides at zero",
|
|
62
|
-
anchorOrigin: "Positioning relative to parent element — topRight (default), topLeft, bottomRight, bottomLeft",
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
sizeSpecifications: [
|
|
66
|
-
{
|
|
67
|
-
size: "Small",
|
|
68
|
-
height: "16px",
|
|
69
|
-
paddingLR: "4px",
|
|
70
|
-
fontSize: "10px",
|
|
71
|
-
iconSize: "8px",
|
|
72
|
-
borderRadius: "999px",
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
size: "Medium",
|
|
76
|
-
height: "20px",
|
|
77
|
-
paddingLR: "6px",
|
|
78
|
-
fontSize: "11px",
|
|
79
|
-
iconSize: "10px",
|
|
80
|
-
borderRadius: "999px",
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
size: "Large",
|
|
84
|
-
height: "24px",
|
|
85
|
-
paddingLR: "8px",
|
|
86
|
-
fontSize: "12px",
|
|
87
|
-
iconSize: "12px",
|
|
88
|
-
borderRadius: "999px",
|
|
89
|
-
},
|
|
90
|
-
],
|
|
91
|
-
|
|
92
|
-
designTokenBindings: [
|
|
93
|
-
{
|
|
94
|
-
property: "Primary Fill",
|
|
95
|
-
tokenName: "$badge-primary-bg",
|
|
96
|
-
role: "Background for the primary/default badge variant",
|
|
97
|
-
fallback: "#2563EB",
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
property: "Error Fill",
|
|
101
|
-
tokenName: "$badge-error-bg",
|
|
102
|
-
role: "Background for error/notification badges — typically red",
|
|
103
|
-
fallback: "#F04438",
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
property: "Success Fill",
|
|
107
|
-
tokenName: "$badge-success-bg",
|
|
108
|
-
role: "Background for success/positive status badges",
|
|
109
|
-
fallback: "#12B76A",
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
property: "Warning Fill",
|
|
113
|
-
tokenName: "$badge-warning-bg",
|
|
114
|
-
role: "Background for warning/caution status badges",
|
|
115
|
-
fallback: "#F79009",
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
property: "Text Color",
|
|
119
|
-
tokenName: "$badge-text",
|
|
120
|
-
role: "Label or count text color — white on filled, semantic color on outlined",
|
|
121
|
-
fallback: "#FFFFFF",
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
property: "Border",
|
|
125
|
-
tokenName: "$badge-border",
|
|
126
|
-
role: "White ring separating badge from parent element for visual clarity",
|
|
127
|
-
fallback: "2px solid #FFFFFF",
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
property: "Font Family",
|
|
131
|
-
tokenName: "$font-family-sans",
|
|
132
|
-
role: "Badge count typeface — uses tabular nums for stable width",
|
|
133
|
-
fallback: "Inter, system-ui, sans-serif",
|
|
134
|
-
},
|
|
135
|
-
],
|
|
136
|
-
|
|
137
|
-
structureRules: [
|
|
138
|
-
"Badge is absolutely positioned relative to its parent wrapper element",
|
|
139
|
-
"Parent wrapper has position: relative and overflow: visible to allow badge overlap",
|
|
140
|
-
"Numeric badge uses horizontal Auto Layout with center alignment; min-width equals height for circular single-digit display",
|
|
141
|
-
"Dot variant is a fixed-size circle (8-10px) with no text content",
|
|
142
|
-
"A 2px white border ring separates the badge from the parent element for visual separation",
|
|
143
|
-
"Badge center aligns to the parent's corner based on anchorOrigin (default: top-right at -25% offset)",
|
|
144
|
-
"Single-digit counts render as a perfect circle; multi-digit counts expand horizontally with pill shape",
|
|
145
|
-
],
|
|
146
|
-
|
|
147
|
-
typeHierarchyRules: [
|
|
148
|
-
"Count text uses font-variant: tabular-nums to maintain consistent width as numbers change",
|
|
149
|
-
"Font weight is Semi-Bold (600) for legibility at small sizes",
|
|
150
|
-
"Text is always horizontally and vertically centered within the badge",
|
|
151
|
-
"No letter-spacing adjustment — default tracking at small sizes is sufficient",
|
|
152
|
-
"Overflow text ('99+') uses the same font-size; the '+' is rendered at full size, not superscript",
|
|
153
|
-
],
|
|
154
|
-
|
|
155
|
-
interactionRules: [
|
|
156
|
-
{ event: "Count Change", trigger: "Value prop updates", action: "Badge pulses with a scale animation (1.0 → 1.15 → 1.0) over 200ms" },
|
|
157
|
-
{ event: "Show", trigger: "Count goes from 0 to positive (or status activates)", action: "Badge scales in from 0 to 1 with ease-out over 150ms" },
|
|
158
|
-
{ event: "Hide", trigger: "Count reaches 0 and showZero is false", action: "Badge scales out from 1 to 0 with ease-in over 100ms" },
|
|
159
|
-
{ event: "Parent Hover", trigger: "pointerenter on parent element", action: "No change to badge — badge is static and non-interactive" },
|
|
160
|
-
{ event: "Parent Click", trigger: "pointerup on parent element", action: "Badge itself is not clickable; interaction is on the parent" },
|
|
161
|
-
{ event: "Overflow", trigger: "Count exceeds max value", action: "Display 'max+' text (e.g., '99+'); badge width expands to fit" },
|
|
162
|
-
{ event: "Screen Reader", trigger: "Parent focused", action: "Badge count announced as part of parent's accessible description" },
|
|
163
|
-
],
|
|
164
|
-
|
|
165
|
-
contentGuidance: [
|
|
166
|
-
"Use numeric badges for countable items — unread messages, notifications, cart items",
|
|
167
|
-
"Use dot badges for binary status — online/offline, new/seen, active/inactive",
|
|
168
|
-
"Set a reasonable max (99 is standard) to prevent absurdly wide badges",
|
|
169
|
-
"Keep the badge near its related element — typically overlapping the top-right corner",
|
|
170
|
-
"Use semantic colors consistently: red for errors/urgency, blue for informational, green for success",
|
|
171
|
-
"Do not use badges for arbitrary labels — use a tag or chip component instead",
|
|
172
|
-
],
|
|
173
|
-
|
|
174
|
-
responsiveBehaviour: [
|
|
175
|
-
{ breakpoint: "Mobile (<768px)", behavior: "Badge sizes remain fixed; position may adjust if parent element resizes or stacks" },
|
|
176
|
-
{ breakpoint: "Tablet (768-1023px)", behavior: "Same sizing and positioning as desktop; no responsive changes needed" },
|
|
177
|
-
{ breakpoint: "Desktop (1024-1439px)", behavior: "Standard badge behavior; anchored to parent element corner" },
|
|
178
|
-
{ breakpoint: "Ultra-wide (>=1440px)", behavior: "No scaling — badges are fixed-size elements that do not grow with viewport" },
|
|
179
|
-
],
|
|
180
|
-
|
|
181
|
-
accessibilitySpec: {
|
|
182
|
-
intro:
|
|
183
|
-
"Badges are decorative indicators that must convey their information through the parent element's accessible name or description.",
|
|
184
|
-
requirements: [
|
|
185
|
-
{ requirement: "aria-label on parent", level: "A", notes: "Parent element's aria-label must include the badge count (e.g., 'Notifications, 5 unread')" },
|
|
186
|
-
{ requirement: "aria-hidden on badge", level: "A", notes: "The visual badge element should be aria-hidden='true' since the parent conveys the info" },
|
|
187
|
-
{ requirement: "Color Independence", level: "A", notes: "Status meaning must not rely solely on badge color — pair with parent label text" },
|
|
188
|
-
{ requirement: "Contrast", level: "AA", notes: "Badge text-to-fill: 4.5:1; badge fill-to-parent-background: 3:1" },
|
|
189
|
-
{ requirement: "Live Region", level: "AA", notes: "When count changes dynamically, parent should update aria-label and use aria-live='polite'" },
|
|
190
|
-
{ requirement: "Reduced Motion", level: "AAA", notes: "Pulse and scale animations must be disabled when prefers-reduced-motion is set" },
|
|
191
|
-
],
|
|
192
|
-
outro: [
|
|
193
|
-
"Screen readers should announce the badge count as part of the parent element's description, not as a separate element",
|
|
194
|
-
"Dot badges must have their meaning conveyed entirely through the parent's accessible name",
|
|
195
|
-
],
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
qaAcceptanceCriteria: [
|
|
199
|
-
{ check: "Numeric Display", platform: "All", expectedResult: "Badge shows exact count for values 1-99; shows '99+' for values above max" },
|
|
200
|
-
{ check: "Dot Variant", platform: "All", expectedResult: "Dot badge renders as a small circle with no text content" },
|
|
201
|
-
{ check: "Positioning", platform: "All", expectedResult: "Badge overlaps parent's top-right corner with correct offset; no overflow clipping" },
|
|
202
|
-
{ check: "Color Variants", platform: "All", expectedResult: "Each color (neutral, primary, success, warning, error) renders correct fill and text tokens" },
|
|
203
|
-
{ check: "Show/Hide Animation", platform: "Web", expectedResult: "Badge scales in/out smoothly when count transitions to/from zero" },
|
|
204
|
-
{ check: "Count Update Pulse", platform: "Web", expectedResult: "Badge pulses on count change to draw attention; respects reduced motion" },
|
|
205
|
-
{ check: "Single vs Multi Digit", platform: "All", expectedResult: "Single digit renders as circle; multi-digit expands to pill shape" },
|
|
206
|
-
{ check: "White Border Ring", platform: "All", expectedResult: "2px white border separates badge from parent element visually" },
|
|
207
|
-
{ check: "Screen Reader", platform: "Web", expectedResult: "Badge count announced via parent's aria-label; badge itself is aria-hidden" },
|
|
208
|
-
{ check: "Zero Count", platform: "All", expectedResult: "Badge hides when count=0 and showZero=false; remains visible when showZero=true" },
|
|
209
|
-
{ check: "Contrast", platform: "All", expectedResult: "All color variants pass 4.5:1 text and 3:1 non-text contrast" },
|
|
210
|
-
],
|
|
211
|
-
|
|
212
|
-
dos: [
|
|
213
|
-
"Use numeric badges for countable items like unread messages or pending tasks",
|
|
214
|
-
"Use dot badges for simple binary presence indicators (online/offline)",
|
|
215
|
-
"Set a max count threshold (99) and display overflow as '99+'",
|
|
216
|
-
"Position badges at the top-right corner of their parent element consistently",
|
|
217
|
-
"Include a white border ring to separate the badge from the parent surface",
|
|
218
|
-
"Update the parent element's aria-label when the badge count changes",
|
|
219
|
-
"Use micro-animation on count changes to draw user attention",
|
|
220
|
-
],
|
|
221
|
-
|
|
222
|
-
donts: [
|
|
223
|
-
"Do not use badges as general-purpose labels — use tag or chip components instead",
|
|
224
|
-
"Do not make badges interactive or clickable — they are purely informational",
|
|
225
|
-
"Do not display exact high numbers — truncate at the max threshold with '+'",
|
|
226
|
-
"Do not use color alone to communicate badge meaning — always pair with context",
|
|
227
|
-
"Do not place badges on elements where they obscure critical content",
|
|
228
|
-
"Do not make badges larger than 24px height — they should be subtle indicators",
|
|
229
|
-
"Do not animate badges when prefers-reduced-motion is active",
|
|
230
|
-
],
|
|
231
|
-
};
|