@sarjallab09/figma-intelligence 1.0.1 → 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.
- package/README.md +67 -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 -2363
- package/figma-bridge-plugin/chat-runner.js +0 -459
- package/figma-bridge-plugin/code.js +0 -1528
- 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 -604
- 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 -4467
- 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 -1408
- 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
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spacing & Structure section — layout info, dimensions, padding, gaps
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildSpacingSection(data: ExtractionResult): SpecSectionOutput {
|
|
7
|
-
const { spacing, snapshot } = data;
|
|
8
|
-
const blocks: SpecSectionContent[] = [];
|
|
9
|
-
|
|
10
|
-
// Root component structure
|
|
11
|
-
blocks.push({
|
|
12
|
-
kind: "key-value",
|
|
13
|
-
entries: [
|
|
14
|
-
{ label: "Root layout", value: snapshot.layoutMode === "NONE" ? "Absolute (no auto layout)" : `${snapshot.layoutMode} auto layout` },
|
|
15
|
-
{ label: "Dimensions", value: `${Math.round(snapshot.width)} × ${Math.round(snapshot.height)} px` },
|
|
16
|
-
{ label: "Padding", value: `${snapshot.paddingTop} / ${snapshot.paddingRight} / ${snapshot.paddingBottom} / ${snapshot.paddingLeft} (T/R/B/L)` },
|
|
17
|
-
{ label: "Item spacing", value: `${snapshot.itemSpacing}px` },
|
|
18
|
-
],
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
// Child spacing table
|
|
22
|
-
if (spacing.length > 0) {
|
|
23
|
-
blocks.push({
|
|
24
|
-
kind: "table",
|
|
25
|
-
headers: ["Element", "Layout", "W × H", "Padding (T/R/B/L)", "Gap", "Sizing (H/V)"],
|
|
26
|
-
rows: spacing.slice(0, 20).map((entry) => [
|
|
27
|
-
entry.element,
|
|
28
|
-
entry.layoutMode,
|
|
29
|
-
`${entry.width} × ${entry.height}`,
|
|
30
|
-
`${entry.paddingTop}/${entry.paddingRight}/${entry.paddingBottom}/${entry.paddingLeft}`,
|
|
31
|
-
`${entry.itemSpacing}px`,
|
|
32
|
-
`${entry.layoutSizingH} / ${entry.layoutSizingV}`,
|
|
33
|
-
]),
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Layout guidance
|
|
38
|
-
if (snapshot.layoutMode === "NONE") {
|
|
39
|
-
blocks.push({
|
|
40
|
-
kind: "paragraph",
|
|
41
|
-
text: "This component uses absolute positioning instead of auto layout. Consider converting to auto layout for responsive behavior, consistent spacing, and easier maintenance.",
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Knowledge-based structure rules
|
|
46
|
-
if (data.knowledge?.structureRules && data.knowledge.structureRules.length > 0) {
|
|
47
|
-
blocks.push({
|
|
48
|
-
kind: "rules",
|
|
49
|
-
items: data.knowledge.structureRules,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
id: "spacing",
|
|
55
|
-
title: "Structure & Layout",
|
|
56
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
57
|
-
};
|
|
58
|
-
}
|
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/state-specs.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State Specifications section — rich state descriptions merged from knowledge
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildStateSpecsSection(data: ExtractionResult): SpecSectionOutput | null {
|
|
7
|
-
const { states, knowledge } = data;
|
|
8
|
-
if (!knowledge || knowledge.stateSpecifications.length === 0) return null;
|
|
9
|
-
|
|
10
|
-
const blocks: SpecSectionContent[] = [];
|
|
11
|
-
|
|
12
|
-
// Build a lookup from knowledge state entries
|
|
13
|
-
const knowledgeLookup = new Map(
|
|
14
|
-
knowledge.stateSpecifications.map((s) => [s.state.toLowerCase(), s])
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
// If we have detected Figma states, merge with knowledge
|
|
18
|
-
if (states.states.length > 0) {
|
|
19
|
-
const detectedNames = states.states.map((s) => s.name);
|
|
20
|
-
const rows: Record<string, string>[] = [];
|
|
21
|
-
|
|
22
|
-
for (const name of detectedNames) {
|
|
23
|
-
const kEntry = knowledgeLookup.get(name.toLowerCase());
|
|
24
|
-
rows.push({
|
|
25
|
-
state: name,
|
|
26
|
-
visualChange: kEntry?.visualChange ?? "See component definition",
|
|
27
|
-
opacity: kEntry?.opacity ?? "100% (1.0)",
|
|
28
|
-
cursorWeb: kEntry?.cursorWeb ?? "default",
|
|
29
|
-
usage: kEntry?.usage ?? "",
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Add knowledge-only states that were expected but not detected
|
|
34
|
-
for (const kState of knowledge.stateSpecifications) {
|
|
35
|
-
const alreadyIncluded = detectedNames.some(
|
|
36
|
-
(n) => n.toLowerCase() === kState.state.toLowerCase()
|
|
37
|
-
);
|
|
38
|
-
if (!alreadyIncluded) {
|
|
39
|
-
rows.push({
|
|
40
|
-
state: `${kState.state} (expected)`,
|
|
41
|
-
visualChange: kState.visualChange,
|
|
42
|
-
opacity: kState.opacity,
|
|
43
|
-
cursorWeb: kState.cursorWeb,
|
|
44
|
-
usage: kState.usage,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
blocks.push({
|
|
50
|
-
kind: "structured-data",
|
|
51
|
-
columns: ["state", "visualChange", "opacity", "cursorWeb", "usage"],
|
|
52
|
-
rows,
|
|
53
|
-
});
|
|
54
|
-
} else {
|
|
55
|
-
// No Figma states detected — output full knowledge as recommended spec
|
|
56
|
-
blocks.push({
|
|
57
|
-
kind: "structured-data",
|
|
58
|
-
columns: ["state", "visualChange", "opacity", "cursorWeb", "usage"],
|
|
59
|
-
rows: knowledge.stateSpecifications.map((s) => ({
|
|
60
|
-
state: `${s.state} (recommended)`,
|
|
61
|
-
visualChange: s.visualChange,
|
|
62
|
-
opacity: s.opacity,
|
|
63
|
-
cursorWeb: s.cursorWeb,
|
|
64
|
-
usage: s.usage,
|
|
65
|
-
})),
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
blocks.push({
|
|
69
|
-
kind: "paragraph",
|
|
70
|
-
text: "No explicit state variants detected in the Figma component. The states listed above are recommended for this component type.",
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return {
|
|
75
|
-
id: "state-specs",
|
|
76
|
-
title: "State Specifications",
|
|
77
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
78
|
-
};
|
|
79
|
-
}
|
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/states.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* States section — detected interaction states
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildStatesSection(data: ExtractionResult): SpecSectionOutput {
|
|
7
|
-
const { states, snapshot } = data;
|
|
8
|
-
const blocks: SpecSectionContent[] = [];
|
|
9
|
-
|
|
10
|
-
if (states.states.length > 0) {
|
|
11
|
-
blocks.push({
|
|
12
|
-
kind: "table",
|
|
13
|
-
headers: ["State", "Source", "Axis / Property"],
|
|
14
|
-
rows: states.states.map((s) => [s.name, s.source, s.axisName || "—"]),
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Generate expected states based on component type
|
|
19
|
-
const isInteractive = /button|btn|input|field|toggle|switch|checkbox|radio|tab|link|select|slider/i.test(snapshot.name);
|
|
20
|
-
if (isInteractive) {
|
|
21
|
-
const expectedStates = ["Default", "Hover", "Pressed", "Focused", "Disabled"];
|
|
22
|
-
const detectedNames = states.states.map((s) => s.name.toLowerCase());
|
|
23
|
-
const missing = expectedStates.filter((s) => !detectedNames.some((d) => d.includes(s.toLowerCase())));
|
|
24
|
-
|
|
25
|
-
if (missing.length > 0 && states.states.length > 0) {
|
|
26
|
-
blocks.push({
|
|
27
|
-
kind: "paragraph",
|
|
28
|
-
text: `Potentially missing states for an interactive component: ${missing.join(", ")}. Review whether these states are needed for this component.`,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (states.states.length === 0) {
|
|
33
|
-
blocks.push({
|
|
34
|
-
kind: "paragraph",
|
|
35
|
-
text: `This appears to be an interactive component but no explicit state variants were detected. Expected states for interactive components include: ${expectedStates.join(", ")}. Consider adding a "State" variant axis to support these interaction states.`,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
} else if (states.states.length === 0) {
|
|
39
|
-
blocks.push({
|
|
40
|
-
kind: "paragraph",
|
|
41
|
-
text: "No explicit interaction states detected. This component appears to be a static/presentational element. If it needs interaction states, add a variant axis named \"State\" with values like Default, Hover, Pressed, Focused, Disabled.",
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
id: "states",
|
|
47
|
-
title: "States",
|
|
48
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
49
|
-
};
|
|
50
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type Hierarchy & Emphasis section — typography rules from knowledge + extracted data
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildTypeHierarchySection(data: ExtractionResult): SpecSectionOutput | null {
|
|
7
|
-
const { knowledge, typography } = data;
|
|
8
|
-
if (!knowledge || knowledge.typeHierarchyRules.length === 0) return null;
|
|
9
|
-
|
|
10
|
-
const blocks: SpecSectionContent[] = [];
|
|
11
|
-
|
|
12
|
-
blocks.push({
|
|
13
|
-
kind: "rules",
|
|
14
|
-
items: knowledge.typeHierarchyRules,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
// Add observed typography summary if available
|
|
18
|
-
if (typography.length > 0) {
|
|
19
|
-
const fontFamilies = [...new Set(typography.map((t) => `${t.fontFamily} ${t.fontStyle}`))];
|
|
20
|
-
const fontSizes = [...new Set(typography.map((t) => t.fontSize))].sort((a, b) => a - b);
|
|
21
|
-
|
|
22
|
-
blocks.push({
|
|
23
|
-
kind: "paragraph",
|
|
24
|
-
text: `Observed in component: ${fontFamilies.join(", ")}. Size range: ${fontSizes[0]}px–${fontSizes[fontSizes.length - 1]}px.`,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
id: "type-hierarchy",
|
|
30
|
-
title: "Type Hierarchy & Emphasis",
|
|
31
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
32
|
-
};
|
|
33
|
-
}
|
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/typography.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typography section — text style specifications with guidance
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildTypographySection(data: ExtractionResult): SpecSectionOutput {
|
|
7
|
-
const { typography, snapshot } = data;
|
|
8
|
-
const blocks: SpecSectionContent[] = [];
|
|
9
|
-
|
|
10
|
-
if (typography.length > 0) {
|
|
11
|
-
blocks.push({
|
|
12
|
-
kind: "table",
|
|
13
|
-
headers: ["Element", "Content", "Font", "Size", "Line Height", "Token"],
|
|
14
|
-
rows: typography.map((entry) => [
|
|
15
|
-
entry.element,
|
|
16
|
-
entry.characters.length > 40 ? entry.characters.slice(0, 37) + "…" : entry.characters || "—",
|
|
17
|
-
`${entry.fontFamily} ${entry.fontStyle}`,
|
|
18
|
-
`${entry.fontSize}px`,
|
|
19
|
-
entry.lineHeightPx ? `${Math.round(entry.lineHeightPx)}px` : "Auto",
|
|
20
|
-
entry.tokenName || "—",
|
|
21
|
-
]),
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// Font summary
|
|
25
|
-
const fonts = [...new Set(typography.map((t) => `${t.fontFamily} ${t.fontStyle}`))];
|
|
26
|
-
const sizes = [...new Set(typography.map((t) => t.fontSize))].sort((a, b) => a - b);
|
|
27
|
-
blocks.push({
|
|
28
|
-
kind: "paragraph",
|
|
29
|
-
text: `Font families used: ${fonts.join(", ")}. Size range: ${sizes[0]}px–${sizes[sizes.length - 1]}px across ${typography.length} text layer(s).`,
|
|
30
|
-
});
|
|
31
|
-
} else if (snapshot.textLayers.length > 0) {
|
|
32
|
-
// Use snapshot text layers as fallback
|
|
33
|
-
blocks.push({
|
|
34
|
-
kind: "table",
|
|
35
|
-
headers: ["Layer", "Content", "Font", "Size"],
|
|
36
|
-
rows: snapshot.textLayers.map((t) => [
|
|
37
|
-
t.name,
|
|
38
|
-
t.characters.length > 40 ? t.characters.slice(0, 37) + "…" : t.characters || "—",
|
|
39
|
-
`${t.fontFamily} ${t.fontStyle}`,
|
|
40
|
-
`${t.fontSize}px`,
|
|
41
|
-
]),
|
|
42
|
-
});
|
|
43
|
-
} else {
|
|
44
|
-
blocks.push({
|
|
45
|
-
kind: "paragraph",
|
|
46
|
-
text: `No text layers detected in "${snapshot.name}". This component is either icon-only, purely structural, or all text is inside nested sub-components.`,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
id: "typography",
|
|
52
|
-
title: "Typography",
|
|
53
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
54
|
-
};
|
|
55
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Usage Guidelines section — do's and don'ts derived from component structure
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildUsageSection(data: ExtractionResult): SpecSectionOutput {
|
|
7
|
-
const { snapshot, properties, anatomy, states, colorTokens, knowledge } = data;
|
|
8
|
-
|
|
9
|
-
// If knowledge provides curated dos/donts, use those as the base
|
|
10
|
-
const dos: string[] = knowledge?.dos ? [...knowledge.dos] : [];
|
|
11
|
-
const donts: string[] = knowledge?.donts ? [...knowledge.donts] : [];
|
|
12
|
-
|
|
13
|
-
// Only add generated guidance when knowledge doesn't provide curated content
|
|
14
|
-
if (!knowledge?.dos || knowledge.dos.length === 0) {
|
|
15
|
-
// Token-based guidance
|
|
16
|
-
const hasTokens = colorTokens.some((t) => t.tokenName);
|
|
17
|
-
if (hasTokens) {
|
|
18
|
-
dos.push("Use the bound design tokens for all colors — never hardcode hex values.");
|
|
19
|
-
} else if (colorTokens.length > 0) {
|
|
20
|
-
donts.push("Hardcoded colors detected — bind all fills and strokes to design tokens before publishing.");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Variant-based guidance
|
|
24
|
-
if (properties.variantAxes.length > 0) {
|
|
25
|
-
dos.push(`Use the variant properties (${properties.variantAxes.map((a) => a.name).join(", ")}) to configure the component. Don't detach instances to create custom variations.`);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Boolean toggle guidance
|
|
29
|
-
if (properties.booleanToggles.length > 0) {
|
|
30
|
-
dos.push(`Use boolean toggles (${properties.booleanToggles.map((t) => t.name).join(", ")}) to show/hide optional elements instead of deleting layers.`);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Anatomy-based guidance
|
|
34
|
-
const requiredElements = anatomy.elements.filter((e) => e.role === "content-element");
|
|
35
|
-
if (requiredElements.length > 0) {
|
|
36
|
-
dos.push(`Keep required elements intact: ${requiredElements.map((e) => e.name).join(", ")}.`);
|
|
37
|
-
donts.push("Don't remove or hide required child elements — this breaks the component's semantic structure.");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const optionalSlots = anatomy.elements.filter((e) => e.role === "optional-slot");
|
|
41
|
-
if (optionalSlots.length > 0) {
|
|
42
|
-
dos.push(`Toggle optional elements (${optionalSlots.map((e) => e.name).join(", ")}) via boolean properties instead of deleting them.`);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// State-based guidance
|
|
46
|
-
if (states.states.length > 0) {
|
|
47
|
-
dos.push(`Support all defined states (${states.states.map((s) => s.name).join(", ")}) in your implementation.`);
|
|
48
|
-
donts.push("Don't create undocumented state variations — extend the variant set formally if new states are needed.");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Layout-based guidance
|
|
52
|
-
if (snapshot.layoutMode !== "NONE") {
|
|
53
|
-
dos.push("Preserve auto layout settings when overriding content — don't switch to absolute positioning.");
|
|
54
|
-
dos.push(`Maintain the ${snapshot.itemSpacing}px gap between child elements.`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Instance swap guidance
|
|
58
|
-
if (properties.instanceSwaps.length > 0) {
|
|
59
|
-
dos.push(`Use instance swap properties for ${properties.instanceSwaps.map((s) => s.name).join(", ")} — only swap in compatible component types.`);
|
|
60
|
-
donts.push("Don't replace swap slots with unrelated components that break the visual or semantic contract.");
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// General best practices
|
|
64
|
-
dos.push("Test the component in both light and dark themes before publishing.");
|
|
65
|
-
donts.push("Don't override internal padding or spacing values — use the component's built-in sizing properties.");
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
id: "usage",
|
|
70
|
-
title: "Usage Guidelines",
|
|
71
|
-
content: { kind: "do-dont", dos, donts },
|
|
72
|
-
};
|
|
73
|
-
}
|
package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/variants.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Variants section — variant axes, boolean toggles, instance swaps, variant matrix
|
|
3
|
-
*/
|
|
4
|
-
import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export function buildVariantsSection(data: ExtractionResult): SpecSectionOutput | null {
|
|
7
|
-
const { properties, snapshot } = data;
|
|
8
|
-
const blocks: SpecSectionContent[] = [];
|
|
9
|
-
|
|
10
|
-
// Variant axes table
|
|
11
|
-
if (properties.variantAxes.length > 0) {
|
|
12
|
-
blocks.push({
|
|
13
|
-
kind: "table",
|
|
14
|
-
headers: ["Axis", "Values", "Default", "Count"],
|
|
15
|
-
rows: properties.variantAxes.map((axis) => [
|
|
16
|
-
axis.name,
|
|
17
|
-
axis.values.join(", "),
|
|
18
|
-
axis.defaultValue || axis.values[0] || "—",
|
|
19
|
-
String(axis.values.length),
|
|
20
|
-
]),
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Boolean toggles
|
|
25
|
-
if (properties.booleanToggles.length > 0) {
|
|
26
|
-
blocks.push({
|
|
27
|
-
kind: "table",
|
|
28
|
-
headers: ["Toggle", "Default", "Controls Element"],
|
|
29
|
-
rows: properties.booleanToggles.map((t) => [
|
|
30
|
-
t.name,
|
|
31
|
-
t.defaultValue ? "true" : "false",
|
|
32
|
-
t.controlsElement || "—",
|
|
33
|
-
]),
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Instance swaps
|
|
38
|
-
if (properties.instanceSwaps.length > 0) {
|
|
39
|
-
blocks.push({
|
|
40
|
-
kind: "table",
|
|
41
|
-
headers: ["Swap Slot", "Current Component"],
|
|
42
|
-
rows: properties.instanceSwaps.map((s) => [s.name, s.currentComponentName || "—"]),
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Variant combination summary
|
|
47
|
-
if (properties.variantAxes.length > 0) {
|
|
48
|
-
const totalCombinations = properties.variantAxes.reduce((acc, a) => acc * a.values.length, 1);
|
|
49
|
-
const boolMultiplier = properties.booleanToggles.length > 0 ? Math.pow(2, properties.booleanToggles.length) : 1;
|
|
50
|
-
blocks.push({
|
|
51
|
-
kind: "paragraph",
|
|
52
|
-
text: `Total possible configurations: ${totalCombinations * boolMultiplier} (${properties.variantAxes.length} variant axes × ${properties.booleanToggles.length} boolean toggles). Defined variants in file: ${snapshot.variants.length}.`,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Variant list (first few names)
|
|
57
|
-
if (snapshot.variants.length > 0 && snapshot.variants.length <= 20) {
|
|
58
|
-
blocks.push({
|
|
59
|
-
kind: "list",
|
|
60
|
-
items: snapshot.variants.map((v) => v.name),
|
|
61
|
-
});
|
|
62
|
-
} else if (snapshot.variants.length > 20) {
|
|
63
|
-
const items = snapshot.variants.slice(0, 15).map((v) => v.name);
|
|
64
|
-
items.push(`... and ${snapshot.variants.length - 15} more variants`);
|
|
65
|
-
blocks.push({ kind: "list", items });
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (blocks.length === 0) {
|
|
69
|
-
// Always produce content
|
|
70
|
-
blocks.push({
|
|
71
|
-
kind: "paragraph",
|
|
72
|
-
text: "This component has no variant axes, boolean toggles, or instance swap slots defined. It is a single-configuration component. Consider adding variant properties (e.g., Size, State, Style) if this component needs multiple configurations for different use cases.",
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
id: "variants",
|
|
78
|
-
title: "Variants",
|
|
79
|
-
content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
|
|
80
|
-
};
|
|
81
|
-
}
|