@3fn/core 14.1.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.kiro/steering/AI-Collaboration-Principles.md +9 -3
- package/.kiro/steering/Agent-Directory.md +31 -7
- package/.kiro/steering/Civitas-System-Overview.md +3 -3
- package/.kiro/steering/DesignerPunk-Systems-Overview.md +3 -3
- package/.kiro/steering/Task-Completion-Protocol.md +12 -11
- package/.kiro/steering/start-up-tasks.md +12 -4
- package/CHANGELOG.md +74 -0
- package/README.md +26 -21
- package/application-mcp-server/src/__tests__/consumerRootLiveReindex.test.ts +118 -0
- package/application-mcp-server/src/__tests__/errorCatalogWiring.test.ts +73 -0
- package/application-mcp-server/src/__tests__/mcpDataRootsDeclaration.test.ts +107 -0
- package/application-mcp-server/src/__tests__/tool-boundary.contract.test.ts +55 -0
- package/application-mcp-server/src/index.ts +249 -59
- package/application-mcp-server/src/indexer/ComponentIndexer.ts +273 -46
- package/application-mcp-server/src/indexer/ModeClassifier.ts +23 -16
- package/application-mcp-server/src/indexer/SemanticOverrideReader.ts +113 -0
- package/application-mcp-server/src/indexer/TokenIndexer.ts +195 -3
- package/application-mcp-server/src/indexer/__tests__/MultiRootIndexing.test.ts +134 -0
- package/application-mcp-server/src/indexer/__tests__/ThemeResolution.test.ts +241 -0
- package/application-mcp-server/src/indexer/__tests__/ThemeRootFollowsIndex.test.ts +216 -0
- package/application-mcp-server/src/indexer/__tests__/fixtures/consumerFixture.ts +84 -0
- package/application-mcp-server/src/indexer/resolveThemeTierRoot.ts +61 -0
- package/application-mcp-server/src/watcher/FileWatcher.ts +20 -7
- package/dist/ComponentTokens.android.kt +1 -1
- package/dist/ComponentTokens.ios.swift +1 -1
- package/dist/ComponentTokens.web.css +1 -1
- package/dist/DesignTokens.android.kt +1 -5
- package/dist/DesignTokens.dtcg.json +388 -122
- package/dist/DesignTokens.figma.json +281 -941
- package/dist/DesignTokens.ios.swift +1 -5
- package/dist/DesignTokens.web.css +5 -5
- package/dist/browser/designerpunk.esm.js +160 -94
- package/dist/browser/designerpunk.esm.min.js +58 -55
- package/dist/browser/designerpunk.umd.js +160 -94
- package/dist/browser/designerpunk.umd.min.js +57 -54
- package/dist/browser/tokens.css +5 -5
- package/dist/build/platforms/AndroidMotionTokenFormatter.d.ts +101 -0
- package/dist/build/platforms/AndroidMotionTokenFormatter.js +220 -0
- package/dist/build/platforms/WebMotionTokenFormatter.d.ts +85 -0
- package/dist/build/platforms/WebMotionTokenFormatter.js +167 -0
- package/dist/build/platforms/iOSMotionTokenFormatter.d.ts +99 -0
- package/dist/build/platforms/iOSMotionTokenFormatter.js +221 -0
- package/dist/build/validation/index.d.ts +0 -4
- package/dist/build/validation/index.js +1 -8
- package/dist/cli/attach.d.ts +153 -0
- package/dist/cli/attach.js +423 -0
- package/dist/cli/designerpunk.d.ts +46 -0
- package/dist/cli/designerpunk.js +171 -34
- package/dist/cli/figma-extract.js +10 -1
- package/dist/cli/figma-push.js +11 -2
- package/dist/cli/init.d.ts +36 -5
- package/dist/cli/init.js +348 -143
- package/dist/cli/loadComponentTokens.d.ts +25 -0
- package/dist/cli/loadComponentTokens.js +87 -8
- package/dist/cli/shared/bornRepo.d.ts +50 -0
- package/dist/cli/shared/bornRepo.js +199 -0
- package/dist/cli/shared/errorCatalog.d.ts +130 -0
- package/dist/cli/shared/errorCatalog.js +148 -0
- package/dist/cli/shared/mcpConfig/cc.d.ts +25 -0
- package/dist/cli/shared/mcpConfig/cc.js +156 -0
- package/dist/cli/shared/mcpConfig/kiro.d.ts +53 -0
- package/dist/cli/shared/mcpConfig/kiro.js +140 -0
- package/dist/cli/shared/mcpDataRoots.d.ts +88 -1
- package/dist/cli/shared/mcpDataRoots.js +76 -2
- package/dist/cli/shared/transforms.d.ts +64 -0
- package/dist/cli/shared/transforms.js +138 -0
- package/dist/cli/shared/vocabulary.d.ts +50 -0
- package/dist/cli/shared/vocabulary.js +62 -0
- package/dist/cli/sync/Applier.d.ts +25 -26
- package/dist/cli/sync/Applier.js +37 -73
- package/dist/cli/sync/Classifier.d.ts +70 -6
- package/dist/cli/sync/Classifier.js +123 -84
- package/dist/cli/sync/FileScanner.d.ts +19 -10
- package/dist/cli/sync/FileScanner.js +33 -25
- package/dist/cli/sync/KeyGrain.d.ts +106 -0
- package/dist/cli/sync/KeyGrain.js +301 -0
- package/dist/cli/sync/Manifest.d.ts +147 -12
- package/dist/cli/sync/Manifest.js +276 -21
- package/dist/cli/sync/Migration.d.ts +271 -0
- package/dist/cli/sync/Migration.js +764 -0
- package/dist/cli/sync/NameContract.d.ts +169 -0
- package/dist/cli/sync/NameContract.js +246 -0
- package/dist/cli/sync/RegionGrain.d.ts +118 -0
- package/dist/cli/sync/RegionGrain.js +167 -0
- package/dist/cli/sync/Reporter.d.ts +33 -4
- package/dist/cli/sync/Reporter.js +112 -53
- package/dist/cli/sync/SteeringDirCheck.d.ts +32 -4
- package/dist/cli/sync/SteeringDirCheck.js +62 -14
- package/dist/cli/sync/index.d.ts +125 -6
- package/dist/cli/sync/index.js +716 -66
- package/dist/color/OklchValidator.d.ts +43 -3
- package/dist/color/OklchValidator.js +46 -8
- package/dist/components/core/Button-CTA/Button-CTA.refs.d.ts +83 -0
- package/dist/components/core/Button-CTA/Button-CTA.refs.js +86 -0
- package/dist/components/core/Button-CTA/Button-CTA.tokens.d.ts +20 -10
- package/dist/components/core/Button-CTA/Button-CTA.tokens.js +21 -10
- package/dist/components/core/Button-CTA/index.d.ts +2 -2
- package/dist/components/core/Button-CTA/index.js +3 -3
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.d.ts +11 -30
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.js +16 -49
- package/dist/components/core/Container-Base/Container-Base.refs.d.ts +181 -0
- package/dist/components/core/Container-Base/Container-Base.refs.js +223 -0
- package/dist/components/core/Container-Base/index.d.ts +2 -2
- package/dist/components/core/Container-Base/index.js +10 -10
- package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.js +1 -1
- package/dist/components/core/Container-Base/platforms/web/token-mapping.d.ts +27 -9
- package/dist/components/core/Container-Base/platforms/web/token-mapping.js +50 -22
- package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.d.ts +149 -0
- package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.js +207 -0
- package/dist/components/core/Container-Card-Base/index.d.ts +1 -1
- package/dist/components/core/Container-Card-Base/index.js +19 -19
- package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.js +7 -6
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.d.ts +15 -0
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.js +41 -1
- package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.d.ts +331 -0
- package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.js +164 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.js +1 -1
- package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.js +34 -0
- package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.js +34 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.d.ts +30 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +72 -3
- package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.js +34 -0
- package/dist/consumer-canonical/agents/ada.md +331 -0
- package/dist/consumer-canonical/agents/data.md +429 -0
- package/dist/consumer-canonical/agents/kenya.md +400 -0
- package/dist/consumer-canonical/agents/leonardo.md +524 -0
- package/dist/consumer-canonical/agents/lina.md +501 -0
- package/dist/consumer-canonical/agents/sparky.md +395 -0
- package/dist/consumer-canonical/agents/stacy.md +515 -0
- package/dist/consumer-canonical/agents/thurgood.md +463 -0
- package/dist/consumer-canonical/always-set/agent-directory.dispositions.yaml +21 -0
- package/dist/consumer-canonical/always-set/agent-directory.overlay.md +51 -0
- package/dist/consumer-canonical/always-set/ai-collaboration-principles.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/ai-collaboration-principles.overlay.md +26 -0
- package/dist/consumer-canonical/always-set/civitas-system-overview.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/civitas-system-overview.overlay.md +70 -0
- package/dist/consumer-canonical/always-set/core-goals.dispositions.yaml +9 -0
- package/dist/consumer-canonical/always-set/core-goals.overlay.md +74 -0
- package/dist/consumer-canonical/always-set/designerpunk-systems-overview.dispositions.yaml +16 -0
- package/dist/consumer-canonical/always-set/designerpunk-systems-overview.overlay.md +44 -0
- package/dist/consumer-canonical/always-set/spec-feedback-protocol.dispositions.yaml +21 -0
- package/dist/consumer-canonical/always-set/spec-feedback-protocol.overlay.md +44 -0
- package/dist/consumer-canonical/always-set/start-up-tasks.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/start-up-tasks.overlay.md +25 -0
- package/dist/consumer-canonical/always-set/task-completion-protocol.dispositions.yaml +19 -0
- package/dist/consumer-canonical/always-set/task-completion-protocol.overlay.md +116 -0
- package/dist/consumer-canonical/consumer-profile.yaml +9 -0
- package/dist/consumer-canonical/shared/always-set.yaml +113 -0
- package/dist/consumer-canonical/shared/field-dispositions.yaml +85 -0
- package/dist/consumer-canonical/shared/shared-catalog.yaml +19 -0
- package/dist/consumer-canonical/shared/skills-map.yaml +33 -0
- package/dist/consumer-canonical/skills/adaptive/SKILL.md +301 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +238 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +168 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +329 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/dist/consumer-canonical/skills/edge-to-edge/SKILL.md +426 -0
- package/dist/consumer-canonical/skills/impeccable/SKILL.md +237 -0
- package/dist/consumer-canonical/skills/impeccable/detector-exclusions.md +42 -0
- package/dist/consumer-canonical/skills/impeccable/reference/adapt.md +190 -0
- package/dist/consumer-canonical/skills/impeccable/reference/animate.md +194 -0
- package/dist/consumer-canonical/skills/impeccable/reference/audit.md +150 -0
- package/dist/consumer-canonical/skills/impeccable/reference/bolder.md +113 -0
- package/dist/consumer-canonical/skills/impeccable/reference/brand-dp.md +103 -0
- package/dist/consumer-canonical/skills/impeccable/reference/clarify.md +174 -0
- package/dist/consumer-canonical/skills/impeccable/reference/codex.md +105 -0
- package/dist/consumer-canonical/skills/impeccable/reference/cognitive-load.md +106 -0
- package/dist/consumer-canonical/skills/impeccable/reference/color-and-contrast.md +122 -0
- package/dist/consumer-canonical/skills/impeccable/reference/colorize.md +155 -0
- package/dist/consumer-canonical/skills/impeccable/reference/craft.md +123 -0
- package/dist/consumer-canonical/skills/impeccable/reference/critique.md +245 -0
- package/dist/consumer-canonical/skills/impeccable/reference/delight.md +302 -0
- package/dist/consumer-canonical/skills/impeccable/reference/distill.md +111 -0
- package/dist/consumer-canonical/skills/impeccable/reference/extract-dp.md +43 -0
- package/dist/consumer-canonical/skills/impeccable/reference/harden.md +347 -0
- package/dist/consumer-canonical/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/dist/consumer-canonical/skills/impeccable/reference/interaction-design.md +195 -0
- package/dist/consumer-canonical/skills/impeccable/reference/layout.md +141 -0
- package/dist/consumer-canonical/skills/impeccable/reference/live.md +622 -0
- package/dist/consumer-canonical/skills/impeccable/reference/motion-design.md +109 -0
- package/dist/consumer-canonical/skills/impeccable/reference/onboard.md +234 -0
- package/dist/consumer-canonical/skills/impeccable/reference/optimize.md +258 -0
- package/dist/consumer-canonical/skills/impeccable/reference/overdrive.md +130 -0
- package/dist/consumer-canonical/skills/impeccable/reference/personas.md +179 -0
- package/dist/consumer-canonical/skills/impeccable/reference/polish.md +242 -0
- package/dist/consumer-canonical/skills/impeccable/reference/product-dp.md +79 -0
- package/dist/consumer-canonical/skills/impeccable/reference/quieter.md +99 -0
- package/dist/consumer-canonical/skills/impeccable/reference/responsive-design.md +114 -0
- package/dist/consumer-canonical/skills/impeccable/reference/shape.md +165 -0
- package/dist/consumer-canonical/skills/impeccable/reference/spatial-design.md +100 -0
- package/dist/consumer-canonical/skills/impeccable/reference/typeset.md +126 -0
- package/dist/consumer-canonical/skills/impeccable/reference/typography.md +159 -0
- package/dist/consumer-canonical/skills/impeccable/reference/ux-writing.md +107 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detect.mjs +21 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/browser/injected/index.mjs +1725 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4567 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/rules/checks.mjs +2316 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/color.mjs +156 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/dist/consumer-canonical/skills/navigation-3/SKILL.md +110 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/index.md +38 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +498 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-advanced.md +155 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-basic.md +744 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +436 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +272 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/dist/consumer-canonical/skills/theming-styles/SKILL.md +220 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/fundamentals.md +420 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/theming.md +257 -0
- package/dist/generator/consumer-entry.js +5939 -0
- package/dist/generators/DTCGFormatGenerator.d.ts +14 -4
- package/dist/generators/DTCGFormatGenerator.js +35 -18
- package/dist/generators/TokenFileGenerator.js +13 -13
- package/dist/generators/generateTokenIndex.d.ts +14 -0
- package/dist/generators/generateTokenIndex.js +23 -0
- package/dist/generators/transformers/FigmaTransformer.d.ts +35 -0
- package/dist/generators/transformers/FigmaTransformer.js +101 -13
- package/dist/generators/types/DTCGTypes.d.ts +10 -0
- package/dist/mcp/application-mcp.js +1062 -261
- package/dist/mcp/docs-mcp.js +93 -13
- package/dist/mcp/product-mcp.js +539 -41
- package/dist/mcp/tool-manifest.json +184 -0
- package/dist/name-contract.json +4283 -0
- package/dist/tokens/BlurTokens.d.ts +3 -1
- package/dist/tokens/BlurTokens.js +6 -4
- package/dist/tokens/ShadowOffsetTokens.js +14 -14
- package/dist/tokens/SizingTokens.js +3 -3
- package/dist/tokens/TapAreaTokens.d.ts +13 -2
- package/dist/tokens/TapAreaTokens.js +19 -8
- package/dist/tokens/semantic/ColorTokens.js +50 -5
- package/dist/tokens/semantic/TypographyTokens.js +10 -10
- package/dist/tokens/themes/dark/SemanticOverrides.js +21 -4
- package/dist/tools/integrity/Invariants.d.ts +23 -8
- package/dist/tools/integrity/Invariants.js +27 -8
- package/dist/tools/integrity/cli/run-audit.js +1 -1
- package/dist/types/PrimitiveToken.d.ts +15 -1
- package/dist/types/generated/TokenTypes.d.ts +1 -1
- package/dist/types/generated/TokenTypes.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/governance/AI-Collaboration-Framework.md +19 -10
- package/governance/Component-Family-Navigation.md +2 -2
- package/governance/DTCG-Integration-Guide.md +63 -36
- package/governance/DesignerPunk-Integration-Guide.md +57 -61
- package/governance/Figma-Workflow-Guide.md +15 -8
- package/governance/Process-Integration-Methodology.md +5 -5
- package/governance/Process-Spec-Planning.md +179 -54
- package/governance/Product-Handoff-Protocol.md +27 -2
- package/governance/Test-Behavioral-Contract-Validation.md +5 -0
- package/governance/Test-Development-Standards.md +4 -4
- package/governance/Token-Family-Accessibility.md +18 -14
- package/governance/Token-Family-Blend.md +5 -4
- package/governance/Token-Family-Blur.md +8 -8
- package/governance/Token-Family-Color.md +40 -22
- package/governance/Token-Family-Glow.md +26 -24
- package/governance/Token-Family-Layering.md +1 -0
- package/governance/Token-Family-Motion.md +22 -13
- package/governance/Token-Family-Opacity.md +20 -34
- package/governance/Token-Family-Radius.md +4 -2
- package/governance/Token-Family-Responsive.md +4 -4
- package/governance/Token-Family-Shadow.md +69 -46
- package/governance/Token-Family-Spacing.md +22 -12
- package/governance/Token-Family-Typography.md +86 -85
- package/governance/Token-Governance.md +5 -1
- package/governance/Token-Quick-Reference.md +67 -63
- package/governance/Transformer-Development-Guide.md +5 -4
- package/governance/classification-map.md +597 -7
- package/governance/completion-documentation-guide.md +284 -2
- package/governance/platform-implementation-guidelines.md +2 -1
- package/mcp-server/src/index.ts +16 -12
- package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +3 -3
- package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +70 -49
- package/mcp-server/src/tools/find-docs.ts +1 -0
- package/mcp-server/src/tools/get-document-full.ts +1 -0
- package/mcp-server/src/tools/get-document-summary.ts +1 -0
- package/mcp-server/src/tools/get-index-health.ts +1 -0
- package/mcp-server/src/tools/get-section.ts +1 -0
- package/mcp-server/src/tools/list-cross-references.ts +1 -0
- package/mcp-server/src/tools/rebuild-index.ts +1 -0
- package/mcp-server/src/tools/validate-metadata.ts +1 -0
- package/package.json +75 -11
- package/src/cli/templates/mcp-config.json.template +15 -20
- package/src/components/core/Avatar-Base/platforms/android/AvatarPreview.kt +9 -2
- package/src/components/core/Container-Base/Container-Base.schema.yaml +9 -11
- package/src/components/core/Container-Base/platforms/android/ContainerBase.android.kt +5 -5
- package/src/components/core/Container-Base/platforms/ios/ContainerBase.ios.swift +5 -5
- package/src/components/core/Container-Card-Base/platforms/android/ContainerCardBase.android.kt +3 -3
- package/src/components/core/Container-Card-Base/platforms/ios/ContainerCardBase.ios.swift +2 -2
- package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
- package/src/components/core/Nav-Header-Base/component-meta.yaml +0 -1
- package/src/components/core/Nav-Header-Base/contracts.yaml +1 -1
- package/src/components/core/Nav-Header-Page/contracts.yaml +1 -1
- package/src/components/core/Nav-TabBar-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Bar-Base/contracts.yaml +1 -1
- package/src/tokens/BlurTokens.ts +6 -4
- package/src/tokens/ShadowOffsetTokens.ts +14 -14
- package/src/tokens/SizingTokens.ts +3 -3
- package/src/tokens/TapAreaTokens.ts +20 -8
- package/src/tokens/__tests__/BaselineGridAlignmentFlag.test.ts +116 -0
- package/src/tokens/__tests__/BlurTokens.test.ts +10 -2
- package/src/tokens/__tests__/SemanticColorContrast.test.ts +339 -0
- package/src/tokens/__tests__/ShadowOffsetTokens.test.ts +8 -7
- package/src/tokens/__tests__/SizingTokens.test.ts +10 -2
- package/src/tokens/__tests__/TokenCategories.test.ts +1 -1
- package/src/tokens/__tests__/neutral-partition.test.ts +28 -0
- package/src/tokens/semantic/AccessibilityTokens.README.md +2 -2
- package/src/tokens/semantic/ColorTokens.ts +50 -5
- package/src/tokens/semantic/TypographyTokens.ts +10 -10
- package/src/tokens/semantic/__tests__/ColorTokens.test.ts +8 -4
- package/src/tokens/themes/dark/SemanticOverrides.ts +23 -4
- package/src/types/PrimitiveToken.ts +15 -1
- package/token-index/meta.json +3 -0
- package/token-index/semantics.yaml +21 -15
- package/.kiro/agents/ada-prompt.md +0 -213
- package/.kiro/agents/ada-prompt.md.attribution.json +0 -45
- package/.kiro/agents/ada.json +0 -72
- package/.kiro/agents/ada.json.attribution.json +0 -13
- package/.kiro/agents/data-prompt.md +0 -324
- package/.kiro/agents/data-prompt.md.attribution.json +0 -53
- package/.kiro/agents/data.json +0 -51
- package/.kiro/agents/data.json.attribution.json +0 -13
- package/.kiro/agents/kenya-prompt.md +0 -309
- package/.kiro/agents/kenya-prompt.md.attribution.json +0 -53
- package/.kiro/agents/kenya.json +0 -46
- package/.kiro/agents/kenya.json.attribution.json +0 -13
- package/.kiro/agents/leonardo-prompt.md +0 -359
- package/.kiro/agents/leonardo-prompt.md.attribution.json +0 -45
- package/.kiro/agents/leonardo.json +0 -47
- package/.kiro/agents/leonardo.json.attribution.json +0 -13
- package/.kiro/agents/lina-prompt.md +0 -344
- package/.kiro/agents/lina-prompt.md.attribution.json +0 -53
- package/.kiro/agents/lina.json +0 -64
- package/.kiro/agents/lina.json.attribution.json +0 -13
- package/.kiro/agents/sparky-prompt.md +0 -312
- package/.kiro/agents/sparky-prompt.md.attribution.json +0 -53
- package/.kiro/agents/sparky.json +0 -56
- package/.kiro/agents/sparky.json.attribution.json +0 -13
- package/.kiro/agents/stacy-prompt.md +0 -304
- package/.kiro/agents/stacy-prompt.md.attribution.json +0 -45
- package/.kiro/agents/stacy.json +0 -46
- package/.kiro/agents/stacy.json.attribution.json +0 -13
- package/.kiro/agents/thurgood-prompt.md +0 -363
- package/.kiro/agents/thurgood-prompt.md.attribution.json +0 -45
- package/.kiro/agents/thurgood.json +0 -47
- package/.kiro/agents/thurgood.json.attribution.json +0 -13
- package/.kiro/steering/personal-note.md +0 -35
- package/designerpunk.config.ts +0 -27
- package/dist/android/DesignTokens.android.kt +0 -695
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.d.ts +0 -26
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.js +0 -224
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.d.ts +0 -30
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.js +0 -254
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.d.ts +0 -44
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.js +0 -376
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.d.ts +0 -38
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.js +0 -328
- package/dist/ios/DesignTokens.ios.swift +0 -697
- package/dist/web/DesignTokens.web.css +0 -929
- package/product-template/agents/README.md +0 -73
- package/product-template/agents/ada-prompt.md +0 -83
- package/product-template/agents/data-prompt.md +0 -74
- package/product-template/agents/kenya-prompt.md +0 -74
- package/product-template/agents/leonardo-prompt.md +0 -99
- package/product-template/agents/lina-prompt.md +0 -61
- package/product-template/agents/sparky-prompt.md +0 -66
- package/product-template/agents/stacy-prompt.md +0 -51
- package/product-template/agents/thurgood-prompt.md +0 -64
- package/src/TokenEngine.ts +0 -628
- package/src/__tests__/BuildSystemIntegration.test.ts +0 -485
- package/src/__tests__/ProductMCPIntegration.test.ts +0 -204
- package/src/__tests__/__mocks__/styleMock.js +0 -18
- package/src/__tests__/browser-distribution/build-error-handling.test.ts +0 -143
- package/src/__tests__/browser-distribution/bundle-loading.test.ts +0 -353
- package/src/__tests__/browser-distribution/bundler-resolution.test.ts +0 -223
- package/src/__tests__/browser-distribution/component-registration.test.ts +0 -217
- package/src/__tests__/browser-distribution/css-bundling.test.ts +0 -233
- package/src/__tests__/browser-distribution/demo-system.test.ts +0 -588
- package/src/__tests__/browser-distribution/mcp-format-compliance.property.test.ts +0 -379
- package/src/__tests__/browser-distribution/mcp-queryability.test.ts +0 -342
- package/src/__tests__/browser-distribution/minification-effectiveness.property.test.ts +0 -188
- package/src/__tests__/browser-distribution/registration-idempotency.property.test.ts +0 -372
- package/src/__tests__/browser-distribution/soft-ceiling-warning.test.ts +0 -161
- package/src/__tests__/browser-distribution/token-completeness.property.test.ts +0 -412
- package/src/__tests__/browser-distribution/token-loading.test.ts +0 -344
- package/src/__tests__/browser-distribution/umd-bundle-loading.test.ts +0 -169
- package/src/__tests__/console-allowlist.json +0 -14
- package/src/__tests__/console-fail-setup.ts +0 -169
- package/src/__tests__/examples/improved-test-example.test.ts +0 -120
- package/src/__tests__/expected-exports.json +0 -66
- package/src/__tests__/export-contracts.test.ts +0 -83
- package/src/__tests__/fixtures/acknowledged-differences.json +0 -127
- package/src/__tests__/fixtures/acknowledged-differences.schema.json +0 -113
- package/src/__tests__/fixtures/acknowledged-differences.types.ts +0 -230
- package/src/__tests__/fixtures/tokenFixtures.ts +0 -248
- package/src/__tests__/helpers/configModuleLoader.ts +0 -20
- package/src/__tests__/helpers/tsModuleLoader.ts +0 -24
- package/src/__tests__/helpers/web-component-test-utils.ts +0 -39
- package/src/__tests__/integration/BlendCrossPlatformConsistency.test.ts +0 -505
- package/src/__tests__/integration/BuildSystemCompatibility.test.ts +0 -551
- package/src/__tests__/integration/CrossPlatformConsistency.test.ts +0 -855
- package/src/__tests__/integration/EndToEndWorkflow.test.ts +0 -601
- package/src/__tests__/integration/ErrorHandling.test.ts +0 -459
- package/src/__tests__/integration/OpacityPlatformTranslation.test.ts +0 -364
- package/src/__tests__/integration/PerformanceValidation.test.ts +0 -887
- package/src/__tests__/integration/SemanticTokenGeneration.test.ts +0 -451
- package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +0 -139
- package/src/__tests__/integration/TokenSystemIntegration.test.ts +0 -890
- package/src/__tests__/integration/ValidationPipeline.test.ts +0 -404
- package/src/__tests__/package-drift-validation.test.ts +0 -249
- package/src/__tests__/performance/GenerationPerformance.test.ts +0 -409
- package/src/__tests__/performance/OptimizationValidation.test.ts +0 -509
- package/src/__tests__/platform-parity/ProgressPlatformParity.test.ts +0 -546
- package/src/__tests__/spec073-opacity-architecture.test.ts +0 -344
- package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +0 -520
- package/src/__tests__/stemma-system/composition-compliance-validation.test.ts +0 -162
- package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +0 -184
- package/src/__tests__/stemma-system/contract-existence-validation.test.ts +0 -43
- package/src/__tests__/stemma-system/contract-test-reporter.ts +0 -269
- package/src/__tests__/stemma-system/cross-platform-consistency.test.ts +0 -564
- package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +0 -710
- package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +0 -298
- package/src/__tests__/stemma-system/mcp-component-integration.test.ts +0 -445
- package/src/analytics/PrimitiveTokenFallbackTracker.ts +0 -228
- package/src/analytics/SemanticTokenUsageTracker.ts +0 -193
- package/src/analytics/StrategicFlexibilityTracker.ts +0 -226
- package/src/analytics/TokenUsageTracker.ts +0 -177
- package/src/analytics/UsagePatternAnalyzer.ts +0 -177
- package/src/analytics/__tests__/UsageTracking.test.ts +0 -647
- package/src/analytics/index.ts +0 -42
- package/src/assets/fonts/__tests__/androidFontLoadingValidation.test.ts +0 -600
- package/src/assets/fonts/__tests__/fontLoading.test.ts +0 -341
- package/src/assets/fonts/__tests__/iosFontConfiguration.test.ts +0 -256
- package/src/assets/fonts/__tests__/iosFontLoadingValidation.test.ts +0 -465
- package/src/assets/fonts/inter/Inter-Bold.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Bold.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Medium.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Medium.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Regular.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Regular.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.ttf +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/src/assets/fonts/inter/inter.css +0 -49
- package/src/blend/BlendCalculator.ts +0 -120
- package/src/blend/ColorSpaceUtils.ts +0 -325
- package/src/blend/OklchBlendCalculator.ts +0 -82
- package/src/blend/ThemeAwareBlendUtilities.web.ts +0 -323
- package/src/blend/__tests__/BlendCalculator.test.ts +0 -393
- package/src/blend/__tests__/BlendUtilities.property.test.ts +0 -600
- package/src/blend/__tests__/ColorSpaceUtils.test.ts +0 -885
- package/src/blend/__tests__/InteractionStateAudit.test.ts +0 -238
- package/src/blend/__tests__/OklchBlendCalculator.test.ts +0 -134
- package/src/blend/__tests__/ThemeAwareBlendUtilities.test.ts +0 -200
- package/src/blend/__tests__/ThemeSwitching.test.ts +0 -508
- package/src/blend/index.ts +0 -37
- package/src/browser-entry.ts +0 -270
- package/src/build/.gitkeep +0 -1
- package/src/build/BuildOrchestrator.ts +0 -663
- package/src/build/__tests__/AndroidBuildIntegration.test.ts +0 -437
- package/src/build/__tests__/AndroidMotionTokenGeneration.test.ts +0 -256
- package/src/build/__tests__/BuildOrchestrator.test.ts +0 -562
- package/src/build/__tests__/MotionTokenCrossPlatformIntegration.test.ts +0 -424
- package/src/build/__tests__/WebCSSTokenGeneration.test.ts +0 -271
- package/src/build/__tests__/WebMotionTokenGeneration.test.ts +0 -305
- package/src/build/__tests__/WebNPMPackageStructure.test.ts +0 -447
- package/src/build/__tests__/iOSMotionTokenGeneration.test.ts +0 -298
- package/src/build/errors/BuildError.ts +0 -140
- package/src/build/errors/ErrorDocumentation.ts +0 -638
- package/src/build/errors/ErrorHandler.ts +0 -406
- package/src/build/errors/ErrorReporter.ts +0 -573
- package/src/build/errors/PlatformGenerationError.ts +0 -201
- package/src/build/errors/README.md +0 -486
- package/src/build/errors/RecoveryStrategy.ts +0 -393
- package/src/build/errors/TokenGenerationError.ts +0 -196
- package/src/build/errors/TokenReferenceError.ts +0 -204
- package/src/build/errors/__tests__/BuildError.test.ts +0 -212
- package/src/build/errors/__tests__/ErrorDocumentation.example.ts +0 -272
- package/src/build/errors/__tests__/ErrorDocumentation.test.ts +0 -458
- package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +0 -303
- package/src/build/errors/__tests__/ErrorHandler.test.ts +0 -502
- package/src/build/errors/__tests__/ErrorReporter.test.ts +0 -581
- package/src/build/errors/__tests__/MotionTokenErrors.test.ts +0 -392
- package/src/build/errors/__tests__/RecoveryStrategy.test.ts +0 -643
- package/src/build/errors/index.ts +0 -90
- package/src/build/index.ts +0 -73
- package/src/build/orchestration/IncrementalBuilder.ts +0 -532
- package/src/build/orchestration/ParallelExecutor.ts +0 -336
- package/src/build/orchestration/ProgressTracker.ts +0 -582
- package/src/build/orchestration/SequentialExecutor.ts +0 -305
- package/src/build/orchestration/__tests__/IncrementalBuilder.test.ts +0 -354
- package/src/build/orchestration/__tests__/ParallelExecutor.integration.test.ts +0 -295
- package/src/build/orchestration/__tests__/ParallelExecutor.test.ts +0 -493
- package/src/build/orchestration/__tests__/ProgressTracker.test.ts +0 -529
- package/src/build/orchestration/__tests__/SequentialExecutor.integration.test.ts +0 -202
- package/src/build/orchestration/__tests__/SequentialExecutor.test.ts +0 -232
- package/src/build/orchestration/index.ts +0 -35
- package/src/build/platforms/.gitkeep +0 -1
- package/src/build/platforms/AndroidBuilder.ts +0 -1366
- package/src/build/platforms/AndroidShadowGenerator.ts +0 -394
- package/src/build/platforms/IOSShadowGenerator.ts +0 -324
- package/src/build/platforms/PlatformBuilder.ts +0 -131
- package/src/build/platforms/WebBuilder.ts +0 -1414
- package/src/build/platforms/WebShadowGenerator.ts +0 -288
- package/src/build/platforms/__tests__/AndroidBuilder.tokenGeneration.test.ts +0 -146
- package/src/build/platforms/__tests__/AndroidShadowGenerator.test.ts +0 -195
- package/src/build/platforms/__tests__/IOSShadowGenerator.test.ts +0 -156
- package/src/build/platforms/__tests__/WebShadowGenerator.test.ts +0 -123
- package/src/build/platforms/__tests__/iOSBuilder.test.ts +0 -1599
- package/src/build/platforms/iOSBuilder.ts +0 -1746
- package/src/build/platforms/index.ts +0 -9
- package/src/build/product/ProductTokenGenerator.ts +0 -162
- package/src/build/product/TokenIndexReader.ts +0 -78
- package/src/build/product/__tests__/KotlinEmitter.test.ts +0 -109
- package/src/build/product/__tests__/ProductTokenGenerator.test.ts +0 -135
- package/src/build/product/__tests__/SwiftEmitter.test.ts +0 -90
- package/src/build/product/__tests__/TokenIndexReader.test.ts +0 -85
- package/src/build/product/__tests__/WebEmitter.test.ts +0 -111
- package/src/build/product/__tests__/fixtures/tokens/layout.yaml +0 -21
- package/src/build/product/__tests__/fixtures/tokens/motion.yaml +0 -11
- package/src/build/product/__tests__/fixtures/tokens/visualization.yaml +0 -8
- package/src/build/product/emitters/KotlinEmitter.ts +0 -83
- package/src/build/product/emitters/SwiftEmitter.ts +0 -95
- package/src/build/product/emitters/WebEmitter.ts +0 -69
- package/src/build/tokens/.gitkeep +0 -1
- package/src/build/tokens/__tests__/ClassInvariantGuard.test.ts +0 -167
- package/src/build/tokens/__tests__/ComponentTokenGenerator.test.ts +0 -285
- package/src/build/tokens/__tests__/TokenIntegrator.test.ts +0 -319
- package/src/build/tokens/__tests__/TokenSelector.test.ts +0 -264
- package/src/build/tokens/__tests__/UnitConverter.applyScaleWithRounding.test.ts +0 -160
- package/src/build/tokens/__tests__/UnitConverter.test.ts +0 -331
- package/src/build/tokens/__tests__/brand-dual-instance.test.ts +0 -135
- package/src/build/tokens/__tests__/defineComponentTokens.test.ts +0 -553
- package/src/build/types/.gitkeep +0 -1
- package/src/build/types/BuildConfig.ts +0 -123
- package/src/build/types/BuildOrchestrator.ts +0 -114
- package/src/build/types/BuildResult.ts +0 -125
- package/src/build/types/index.ts +0 -39
- package/src/build/validation/.gitkeep +0 -1
- package/src/build/validation/AndroidBuildValidator.ts +0 -630
- package/src/build/validation/CrossPlatformValidationReporter.ts +0 -1267
- package/src/build/validation/InterfaceContractValidator.ts +0 -417
- package/src/build/validation/InterfaceValidator.ts +0 -326
- package/src/build/validation/MathematicalConsistencyValidator.ts +0 -874
- package/src/build/validation/MethodSignatureValidator.ts +0 -374
- package/src/build/validation/PropertyTypeValidator.ts +0 -312
- package/src/build/validation/TokenComparator.ts +0 -796
- package/src/build/validation/ValidationReporter.example.ts +0 -310
- package/src/build/validation/ValidationReporter.ts +0 -745
- package/src/build/validation/WebBuildValidator.ts +0 -583
- package/src/build/validation/__tests__/AndroidBuildValidator.test.ts +0 -522
- package/src/build/validation/__tests__/CrossPlatformValidationReporter.test.ts +0 -593
- package/src/build/validation/__tests__/InterfaceContractValidator.test.ts +0 -647
- package/src/build/validation/__tests__/InterfaceValidation.functional.test.ts +0 -360
- package/src/build/validation/__tests__/InterfaceValidator.test.ts +0 -318
- package/src/build/validation/__tests__/MethodSignatureValidator.test.ts +0 -625
- package/src/build/validation/__tests__/MotionTokenCrossPlatformValidation.test.ts +0 -305
- package/src/build/validation/__tests__/MotionTokenValidation.test.ts +0 -309
- package/src/build/validation/__tests__/PropertyTypeValidator.test.ts +0 -557
- package/src/build/validation/__tests__/TokenComparator.test.ts +0 -358
- package/src/build/validation/__tests__/ValidationReporter.integration.test.ts +0 -424
- package/src/build/validation/__tests__/ValidationReporter.test.ts +0 -793
- package/src/build/validation/__tests__/WebBuildValidator.test.ts +0 -495
- package/src/build/validation/iOSBuildValidator.ts +0 -783
- package/src/build/validation/index.ts +0 -74
- package/src/build/validation/types/InterfaceDefinition.ts +0 -101
- package/src/build/validation/types/ValidationResult.ts +0 -114
- package/src/build/workflow/BuildMode.ts +0 -336
- package/src/build/workflow/CICDIntegration.ts +0 -503
- package/src/build/workflow/ConfigHelpers.example.ts +0 -317
- package/src/build/workflow/ConfigHelpers.ts +0 -834
- package/src/build/workflow/README.md +0 -327
- package/src/build/workflow/SourceMapGenerator.ts +0 -362
- package/src/build/workflow/__tests__/BuildMode.test.ts +0 -544
- package/src/build/workflow/__tests__/CICDIntegration.test.ts +0 -602
- package/src/build/workflow/__tests__/ConfigHelpers.test.ts +0 -559
- package/src/build/workflow/__tests__/SourceMapGenerator.test.ts +0 -421
- package/src/build/workflow/index.ts +0 -42
- package/src/cli/__tests__/Applier.test.ts +0 -202
- package/src/cli/__tests__/Classifier.test.ts +0 -187
- package/src/cli/__tests__/FileScanner.test.ts +0 -108
- package/src/cli/__tests__/IgnoreFilter.test.ts +0 -92
- package/src/cli/__tests__/Manifest.test.ts +0 -107
- package/src/cli/__tests__/PackageResolver.test.ts +0 -66
- package/src/cli/__tests__/Prompter.test.ts +0 -165
- package/src/cli/__tests__/Reporter.test.ts +0 -128
- package/src/cli/__tests__/backward-compat.test.ts +0 -142
- package/src/cli/__tests__/figma-extract.test.ts +0 -342
- package/src/cli/__tests__/figma-push.test.ts +0 -350
- package/src/cli/__tests__/init.test.ts +0 -293
- package/src/cli/__tests__/loadComponentTokens.test.ts +0 -187
- package/src/cli/__tests__/pipeline-independence.test.ts +0 -127
- package/src/cli/__tests__/product-only.test.ts +0 -130
- package/src/cli/__tests__/resolveTokens.test.ts +0 -88
- package/src/cli/__tests__/staleness.test.ts +0 -132
- package/src/cli/__tests__/sync.test.ts +0 -199
- package/src/cli/__tests__/validate.test.ts +0 -69
- package/src/cli/designerpunk.ts +0 -410
- package/src/cli/figma-extract.ts +0 -331
- package/src/cli/figma-push.ts +0 -288
- package/src/cli/generateProductTokens.ts +0 -69
- package/src/cli/init.ts +0 -481
- package/src/cli/loadComponentTokens.ts +0 -145
- package/src/cli/resolveTokens.ts +0 -123
- package/src/cli/shared/mcpDataRoots.ts +0 -122
- package/src/cli/shared/resolvePackageRoot.ts +0 -58
- package/src/cli/shared/transforms.ts +0 -18
- package/src/cli/staleness.ts +0 -81
- package/src/cli/sync/Applier.ts +0 -128
- package/src/cli/sync/Classifier.ts +0 -130
- package/src/cli/sync/FileScanner.ts +0 -64
- package/src/cli/sync/IgnoreFilter.ts +0 -44
- package/src/cli/sync/Manifest.ts +0 -64
- package/src/cli/sync/PackageResolver.ts +0 -40
- package/src/cli/sync/Prompter.ts +0 -173
- package/src/cli/sync/Reporter.ts +0 -78
- package/src/cli/sync/SteeringDirCheck.ts +0 -166
- package/src/cli/sync/index.ts +0 -115
- package/src/cli/validate.ts +0 -135
- package/src/cli/validateProductTokens.ts +0 -55
- package/src/color/OklchConverter.ts +0 -284
- package/src/color/OklchValidator.ts +0 -186
- package/src/color/__tests__/OklchConverter.test.ts +0 -232
- package/src/color/__tests__/OklchRegression.test.ts +0 -101
- package/src/color/__tests__/OklchValidator.test.ts +0 -199
- package/src/color/__tests__/WcagContrast.test.ts +0 -76
- package/src/components/__tests__/BlendTokenUsageValidation.test.ts +0 -726
- package/src/components/__tests__/DynamicImportGuard.test.ts +0 -226
- package/src/components/__tests__/ExtensionLintPolicy.test.ts +0 -113
- package/src/components/__tests__/TokenCompliance.test.ts +0 -921
- package/src/components/__tests__/colorInheritanceValidation.test.ts +0 -267
- package/src/components/__tests__/componentTypographyInheritance.test.ts +0 -326
- package/src/components/core/Avatar-Base/README.md +0 -366
- package/src/components/core/Avatar-Base/__tests__/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +0 -597
- package/src/components/core/Avatar-Base/__tests__/Avatar.icon-integration.test.ts +0 -656
- package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +0 -396
- package/src/components/core/Avatar-Base/__tests__/Avatar.lifecycle.test.ts +0 -545
- package/src/components/core/Avatar-Base/__tests__/Avatar.rendering.test.ts +0 -505
- package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +0 -701
- package/src/components/core/Avatar-Base/avatar.tokens.ts +0 -373
- package/src/components/core/Avatar-Base/index.ts +0 -25
- package/src/components/core/Avatar-Base/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/platforms/web/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/platforms/web/Avatar.styles.css +0 -595
- package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +0 -892
- package/src/components/core/Avatar-Base/platforms/web/hexagon-clip.svg +0 -87
- package/src/components/core/Avatar-Base/tokens/.gitkeep +0 -4
- package/src/components/core/Avatar-Base/types.ts +0 -86
- package/src/components/core/Badge-Count-Base/README.md +0 -323
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.stemma.test.ts +0 -548
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.test.ts +0 -452
- package/src/components/core/Badge-Count-Base/__tests__/test-utils.ts +0 -244
- package/src/components/core/Badge-Count-Base/index.ts +0 -37
- package/src/components/core/Badge-Count-Base/platforms/ios/.gitkeep +0 -1
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.styles.css +0 -148
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.ts +0 -363
- package/src/components/core/Badge-Count-Base/types.ts +0 -150
- package/src/components/core/Badge-Count-Notification/README.md +0 -396
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.stemma.test.ts +0 -571
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.test.ts +0 -490
- package/src/components/core/Badge-Count-Notification/__tests__/test-utils.ts +0 -256
- package/src/components/core/Badge-Count-Notification/index.ts +0 -60
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.styles.css +0 -182
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.ts +0 -401
- package/src/components/core/Badge-Count-Notification/tokens.ts +0 -124
- package/src/components/core/Badge-Count-Notification/types.ts +0 -119
- package/src/components/core/Badge-Label-Base/README.md +0 -251
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.stemma.test.ts +0 -549
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.test.ts +0 -439
- package/src/components/core/Badge-Label-Base/__tests__/test-utils.ts +0 -269
- package/src/components/core/Badge-Label-Base/__tests__/tokens.test.ts +0 -88
- package/src/components/core/Badge-Label-Base/index.ts +0 -41
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.styles.css +0 -166
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.ts +0 -340
- package/src/components/core/Badge-Label-Base/tokens.ts +0 -80
- package/src/components/core/Badge-Label-Base/types.ts +0 -148
- package/src/components/core/Button-CTA/Button-CTA.tokens.ts +0 -79
- package/src/components/core/Button-CTA/README.md +0 -293
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.alignment.test.ts +0 -355
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +0 -698
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.tokens.test.ts +0 -89
- package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -209
- package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -185
- package/src/components/core/Button-CTA/examples/BasicUsage.html +0 -133
- package/src/components/core/Button-CTA/examples/BasicUsage.tsx +0 -219
- package/src/components/core/Button-CTA/examples/Variants.html +0 -263
- package/src/components/core/Button-CTA/examples/WithIcon.html +0 -166
- package/src/components/core/Button-CTA/index.ts +0 -20
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +0 -395
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +0 -644
- package/src/components/core/Button-CTA/platforms/web/__tests__/ButtonCTA.icon-integration.test.ts +0 -476
- package/src/components/core/Button-CTA/types.ts +0 -239
- package/src/components/core/Button-Icon/README.md +0 -371
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.alignment.test.ts +0 -358
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties-8-13.test.ts +0 -953
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties.test.ts +0 -920
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.stemma.test.ts +0 -622
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.unit.test.ts +0 -560
- package/src/components/core/Button-Icon/__tests__/setup.test.ts +0 -361
- package/src/components/core/Button-Icon/__tests__/test-utils.ts +0 -248
- package/src/components/core/Button-Icon/buttonIcon.tokens.ts +0 -218
- package/src/components/core/Button-Icon/platforms/web/.gitkeep +0 -4
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.css +0 -600
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.ts +0 -625
- package/src/components/core/Button-Icon/types.ts +0 -186
- package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.ts +0 -112
- package/src/components/core/Button-VerticalList-Item/README.md +0 -450
- package/src/components/core/Button-VerticalList-Item/__tests__/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.alignment.test.ts +0 -271
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.failLoudly.test.ts +0 -106
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.integration.test.ts +0 -480
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.properties.test.ts +0 -634
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.unit.test.ts +0 -746
- package/src/components/core/Button-VerticalList-Item/__tests__/rtlSupport.test.ts +0 -206
- package/src/components/core/Button-VerticalList-Item/__tests__/test-utils.ts +0 -297
- package/src/components/core/Button-VerticalList-Item/__tests__/visualStateMapping.test.ts +0 -419
- package/src/components/core/Button-VerticalList-Item/index.ts +0 -49
- package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItemTest.kt +0 -1109
- package/src/components/core/Button-VerticalList-Item/platforms/ios/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItemTests.swift +0 -794
- package/src/components/core/Button-VerticalList-Item/platforms/web/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.styles.css +0 -459
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts +0 -1030
- package/src/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.ts +0 -411
- package/src/components/core/Button-VerticalList-Item/types.ts +0 -338
- package/src/components/core/Button-VerticalList-Set/README.md +0 -578
- package/src/components/core/Button-VerticalList-Set/__tests__/.gitkeep +0 -5
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.integration.test.ts +0 -676
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property.test.ts +0 -786
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property2.test.ts +0 -1109
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.unit.test.ts +0 -924
- package/src/components/core/Button-VerticalList-Set/__tests__/animationTiming.test.ts +0 -182
- package/src/components/core/Button-VerticalList-Set/__tests__/crossPlatformConsistency.test.ts +0 -685
- package/src/components/core/Button-VerticalList-Set/__tests__/deriveItemStates.test.ts +0 -179
- package/src/components/core/Button-VerticalList-Set/__tests__/validation.test.ts +0 -275
- package/src/components/core/Button-VerticalList-Set/index.ts +0 -32
- package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetTest.kt +0 -961
- package/src/components/core/Button-VerticalList-Set/platforms/ios/.gitkeep +0 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetTests.swift +0 -475
- package/src/components/core/Button-VerticalList-Set/platforms/web/.gitkeep +0 -4
- package/src/components/core/Button-VerticalList-Set/platforms/web/Button-VerticalList-Set.styles.css +0 -167
- package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts +0 -1446
- package/src/components/core/Button-VerticalList-Set/types.ts +0 -788
- package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +0 -534
- package/src/components/core/Chip-Base/index.ts +0 -40
- package/src/components/core/Chip-Base/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Chip-Base/platforms/web/.gitkeep +0 -5
- package/src/components/core/Chip-Base/platforms/web/ChipBase.styles.css +0 -280
- package/src/components/core/Chip-Base/platforms/web/ChipBase.web.ts +0 -480
- package/src/components/core/Chip-Base/types.ts +0 -189
- package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +0 -592
- package/src/components/core/Chip-Filter/index.ts +0 -34
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.styles.css +0 -105
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.web.ts +0 -539
- package/src/components/core/Chip-Filter/types.ts +0 -47
- package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +0 -472
- package/src/components/core/Chip-Input/index.ts +0 -35
- package/src/components/core/Chip-Input/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Chip-Input/platforms/web/ChipInput.styles.css +0 -99
- package/src/components/core/Chip-Input/platforms/web/ChipInput.web.ts +0 -485
- package/src/components/core/Chip-Input/types.ts +0 -35
- package/src/components/core/Container-Base/README.md +0 -450
- package/src/components/core/Container-Base/__tests__/ContainerBase.test.ts +0 -712
- package/src/components/core/Container-Base/index.ts +0 -47
- package/src/components/core/Container-Base/platforms/web/ContainerBase.web.ts +0 -405
- package/src/components/core/Container-Base/platforms/web/styles.css +0 -198
- package/src/components/core/Container-Base/platforms/web/token-mapping.ts +0 -573
- package/src/components/core/Container-Base/tokens.ts +0 -241
- package/src/components/core/Container-Base/types.ts +0 -307
- package/src/components/core/Container-Card-Base/README.md +0 -506
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.composition.test.ts +0 -167
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.test.ts +0 -646
- package/src/components/core/Container-Card-Base/index.ts +0 -64
- package/src/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.ts +0 -373
- package/src/components/core/Container-Card-Base/tokens.ts +0 -224
- package/src/components/core/Container-Card-Base/types.ts +0 -332
- package/src/components/core/Icon-Base/README.md +0 -168
- package/src/components/core/Icon-Base/__tests__/IconBase.test.ts +0 -192
- package/src/components/core/Icon-Base/index.ts +0 -34
- package/src/components/core/Icon-Base/platforms/ios/ASSET_CATALOG_SETUP.md +0 -239
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Contents.json +0 -6
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/Contents.json +0 -9
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/alert-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/arrow-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/arrow-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/arrow-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/arrow-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/award.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/bell.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/briefcase.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/calendar.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/check-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/chevron-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/chevron-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/chevron-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/clock.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/credit-card.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/dollar-sign.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/external-link.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/eye-off.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/eye.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/file-text.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/filter.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/globe.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/heart.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/info.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/mail.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/map-pin.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/minus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/more-horizontal.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/more-vertical.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/phone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/plus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/refresh-cw.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/save.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/search.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/settings.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/share-2.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/share.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/shield.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/smartphone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/smile.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/star.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/trending-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/user-check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/user-x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/user.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/users.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/wifi.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/IconBase.web.ts +0 -553
- package/src/components/core/Icon-Base/platforms/web/assets/alert-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/award.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/bell.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/briefcase.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/calendar.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/check-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/clock.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/credit-card.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/dollar-sign.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/external-link.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/eye-off.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/eye.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/file-text.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/filter.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/globe.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/heart.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/info.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/mail.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/map-pin.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/minus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/more-horizontal.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/more-vertical.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/phone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/plus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/refresh-cw.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/save.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/search.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/settings.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/share-2.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/share.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/shield.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/smartphone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/smile.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/star.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/trending-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user-check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user-x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/users.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/wifi.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/styles.css +0 -203
- package/src/components/core/Icon-Base/types.ts +0 -338
- package/src/components/core/Input-Checkbox-Base/README.md +0 -390
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.stemma.test.ts +0 -552
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.test.ts +0 -878
- package/src/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.ts +0 -37
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.css +0 -477
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.ts +0 -561
- package/src/components/core/Input-Checkbox-Base/types.ts +0 -399
- package/src/components/core/Input-Checkbox-Legal/README.md +0 -554
- package/src/components/core/Input-Checkbox-Legal/__tests__/InputCheckboxLegal.test.ts +0 -727
- package/src/components/core/Input-Checkbox-Legal/platforms/ios/.gitkeep +0 -2
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.css +0 -112
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.ts +0 -505
- package/src/components/core/Input-Checkbox-Legal/types.ts +0 -348
- package/src/components/core/Input-Radio-Base/.gitkeep +0 -2
- package/src/components/core/Input-Radio-Base/README.md +0 -427
- package/src/components/core/Input-Radio-Base/__tests__/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.form.test.ts +0 -299
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.stemma.test.ts +0 -543
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.test.ts +0 -429
- package/src/components/core/Input-Radio-Base/platforms/ios/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/platforms/web/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.css +0 -504
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.ts +0 -648
- package/src/components/core/Input-Radio-Base/radio-sizing.tokens.ts +0 -37
- package/src/components/core/Input-Radio-Base/types.ts +0 -362
- package/src/components/core/Input-Radio-Set/README.md +0 -373
- package/src/components/core/Input-Radio-Set/__tests__/.gitkeep +0 -0
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.stemma.test.ts +0 -493
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.test.ts +0 -499
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.css +0 -99
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.ts +0 -790
- package/src/components/core/Input-Radio-Set/types.ts +0 -301
- package/src/components/core/Input-Text-Base/README.md +0 -258
- package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +0 -311
- package/src/components/core/Input-Text-Base/__tests__/keyboardNavigation.test.ts +0 -444
- package/src/components/core/Input-Text-Base/__tests__/labelAssociation.test.ts +0 -418
- package/src/components/core/Input-Text-Base/__tests__/screenReaderSupport.test.ts +0 -405
- package/src/components/core/Input-Text-Base/__tests__/setup.ts +0 -17
- package/src/components/core/Input-Text-Base/__tests__/stateManagement.test.ts +0 -718
- package/src/components/core/Input-Text-Base/__tests__/test-utils.ts +0 -81
- package/src/components/core/Input-Text-Base/__tests__/touchTargetSizing.test.ts +0 -319
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.ts +0 -241
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.css +0 -293
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.ts +0 -448
- package/src/components/core/Input-Text-Base/stateManagement.ts +0 -267
- package/src/components/core/Input-Text-Base/tokens.ts +0 -210
- package/src/components/core/Input-Text-Base/types.ts +0 -114
- package/src/components/core/Input-Text-Email/README.md +0 -252
- package/src/components/core/Input-Text-Email/__tests__/validation.test.ts +0 -127
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.ts +0 -276
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.ts +0 -319
- package/src/components/core/Input-Text-Email/stateManagement.ts +0 -160
- package/src/components/core/Input-Text-Email/tokens.ts +0 -33
- package/src/components/core/Input-Text-Email/types.ts +0 -72
- package/src/components/core/Input-Text-Email/validation.ts +0 -130
- package/src/components/core/Input-Text-Password/README.md +0 -360
- package/src/components/core/Input-Text-Password/__tests__/validation.test.ts +0 -362
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.ts +0 -434
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +0 -512
- package/src/components/core/Input-Text-Password/stateManagement.ts +0 -244
- package/src/components/core/Input-Text-Password/tokens.ts +0 -32
- package/src/components/core/Input-Text-Password/types.ts +0 -177
- package/src/components/core/Input-Text-Password/validation.ts +0 -207
- package/src/components/core/Input-Text-PhoneNumber/README.md +0 -276
- package/src/components/core/Input-Text-PhoneNumber/__tests__/validation.test.ts +0 -301
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.ts +0 -370
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.ts +0 -393
- package/src/components/core/Input-Text-PhoneNumber/stateManagement.ts +0 -250
- package/src/components/core/Input-Text-PhoneNumber/tokens.ts +0 -33
- package/src/components/core/Input-Text-PhoneNumber/types.ts +0 -135
- package/src/components/core/Input-Text-PhoneNumber/validation.ts +0 -302
- package/src/components/core/Nav-Header-App/README.md +0 -29
- package/src/components/core/Nav-Header-App/index.ts +0 -5
- package/src/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.ts +0 -37
- package/src/components/core/Nav-Header-App/types.ts +0 -32
- package/src/components/core/Nav-Header-Base/README.md +0 -21
- package/src/components/core/Nav-Header-Base/index.ts +0 -12
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.styles.css +0 -75
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.ts +0 -120
- package/src/components/core/Nav-Header-Base/types.ts +0 -63
- package/src/components/core/Nav-Header-Page/README.md +0 -34
- package/src/components/core/Nav-Header-Page/__tests__/NavHeaderPage.test.ts +0 -250
- package/src/components/core/Nav-Header-Page/index.ts +0 -12
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.styles.css +0 -90
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.ts +0 -169
- package/src/components/core/Nav-Header-Page/types.ts +0 -55
- package/src/components/core/Nav-SegmentedChoice-Base/README.md +0 -327
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.android.test.ts +0 -218
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.interaction.test.ts +0 -419
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.ios.test.ts +0 -207
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.visual.test.ts +0 -371
- package/src/components/core/Nav-SegmentedChoice-Base/index.ts +0 -38
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.styles.css +0 -160
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.ts +0 -477
- package/src/components/core/Nav-SegmentedChoice-Base/types.ts +0 -65
- package/src/components/core/Nav-TabBar-Base/README.md +0 -264
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.android.test.ts +0 -270
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.ios.test.ts +0 -221
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.test.ts +0 -421
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.html +0 -2
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.tsx +0 -2
- package/src/components/core/Nav-TabBar-Base/index.ts +0 -20
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.styles.css +0 -281
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.ts +0 -420
- package/src/components/core/Nav-TabBar-Base/types.ts +0 -43
- package/src/components/core/Progress-Bar-Base/README.md +0 -31
- package/src/components/core/Progress-Bar-Base/__tests__/ProgressBarBase.test.ts +0 -202
- package/src/components/core/Progress-Bar-Base/index.ts +0 -6
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.styles.css +0 -52
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.ts +0 -135
- package/src/components/core/Progress-Bar-Base/types.ts +0 -46
- package/src/components/core/Progress-Indicator-Connector-Base/README.md +0 -169
- package/src/components/core/Progress-Indicator-Connector-Base/index.ts +0 -33
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.styles.css +0 -50
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.ts +0 -141
- package/src/components/core/Progress-Indicator-Connector-Base/types.ts +0 -67
- package/src/components/core/Progress-Indicator-Label-Base/README.md +0 -191
- package/src/components/core/Progress-Indicator-Label-Base/index.ts +0 -28
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.styles.css +0 -81
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.ts +0 -174
- package/src/components/core/Progress-Indicator-Label-Base/types.ts +0 -64
- package/src/components/core/Progress-Indicator-Node-Base/README.md +0 -206
- package/src/components/core/Progress-Indicator-Node-Base/__tests__/VisualStates.test.ts +0 -259
- package/src/components/core/Progress-Indicator-Node-Base/index.ts +0 -36
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.styles.css +0 -193
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.ts +0 -226
- package/src/components/core/Progress-Indicator-Node-Base/types.ts +0 -142
- package/src/components/core/Progress-Pagination-Base/README.md +0 -290
- package/src/components/core/Progress-Pagination-Base/__tests__/PaginationBase.test.ts +0 -290
- package/src/components/core/Progress-Pagination-Base/index.ts +0 -40
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.styles.css +0 -80
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.ts +0 -293
- package/src/components/core/Progress-Pagination-Base/types.ts +0 -112
- package/src/components/core/Progress-Stepper-Base/README.md +0 -311
- package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +0 -345
- package/src/components/core/Progress-Stepper-Base/index.ts +0 -43
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.styles.css +0 -49
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.ts +0 -288
- package/src/components/core/Progress-Stepper-Base/types.ts +0 -175
- package/src/components/core/Progress-Stepper-Detailed/README.md +0 -401
- package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +0 -481
- package/src/components/core/Progress-Stepper-Detailed/index.ts +0 -48
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.styles.css +0 -106
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.ts +0 -336
- package/src/components/core/Progress-Stepper-Detailed/types.ts +0 -195
- package/src/composition/BlendComposition.ts +0 -46
- package/src/composition/BlendCompositionParser.ts +0 -215
- package/src/composition/OpacityComposition.ts +0 -62
- package/src/composition/OpacityCompositionParser.ts +0 -308
- package/src/composition/__tests__/BlendCompositionParser.test.ts +0 -431
- package/src/composition/__tests__/OpacityCompositionParser.test.ts +0 -539
- package/src/composition/index.ts +0 -20
- package/src/config/ConfigLoader.ts +0 -143
- package/src/config/__resolution-matrix__/README.md +0 -76
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/compiled/defineConfig.js +0 -9
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/designerpunk.config.ts +0 -20
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/my-overrides.ts +0 -8
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/compiled/defineConfig.js +0 -11
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/designerpunk.config.ts +0 -23
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/my-overrides.ts +0 -6
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/designerpunk.config.ts +0 -11
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/src/config/index.ts +0 -15
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/designerpunk.config.ts +0 -15
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/src/config/index.ts +0 -13
- package/src/config/__resolution-matrix__/run-matrix.js +0 -107
- package/src/config/__resolution-matrix__/runner.js +0 -153
- package/src/config/__resolution-matrix__/verify-real-loadconfig.js +0 -122
- package/src/config/__tests__/ConfigLoader.test.ts +0 -115
- package/src/config/defineConfig.ts +0 -71
- package/src/config/index.ts +0 -7
- package/src/config/scopedTsRequire.ts +0 -62
- package/src/constants/BaselineGrid.ts +0 -41
- package/src/constants/SpacingTokens.ts +0 -55
- package/src/figma/ComponentAnalysis.ts +0 -292
- package/src/figma/ComponentAnalysisGenerator.ts +0 -444
- package/src/figma/ConsoleMCPClient.ts +0 -168
- package/src/figma/ConsoleMCPClientImpl.ts +0 -1034
- package/src/figma/DesignExtractor.ts +0 -3620
- package/src/figma/TokenSyncWorkflow.ts +0 -915
- package/src/figma/TokenTranslator.ts +0 -891
- package/src/figma/VariantAnalyzer.ts +0 -712
- package/src/figma/__tests__/ComponentAnalysisGenerator.json.test.ts +0 -429
- package/src/figma/__tests__/ComponentAnalysisGenerator.markdown.test.ts +0 -428
- package/src/figma/__tests__/ConsoleMCPClient.bugfix.test.ts +0 -261
- package/src/figma/__tests__/ConsoleMCPClient.preservation.test.ts +0 -395
- package/src/figma/__tests__/ConsoleMCPClient.test.ts +0 -375
- package/src/figma/__tests__/DesignExtractor.boundVariableResolution.test.ts +0 -580
- package/src/figma/__tests__/DesignExtractor.buildNodeTree.test.ts +0 -535
- package/src/figma/__tests__/DesignExtractor.captureComponentScreenshot.test.ts +0 -176
- package/src/figma/__tests__/DesignExtractor.detectBehavioralContracts.test.ts +0 -263
- package/src/figma/__tests__/DesignExtractor.detectComponentTokenDecisions.test.ts +0 -379
- package/src/figma/__tests__/DesignExtractor.detectCompositionPatterns.test.ts +0 -507
- package/src/figma/__tests__/DesignExtractor.detectPlatformParity.test.ts +0 -406
- package/src/figma/__tests__/DesignExtractor.queryContext.test.ts +0 -214
- package/src/figma/__tests__/DesignExtractor.readFigmaComponent.test.ts +0 -431
- package/src/figma/__tests__/DesignExtractor.readStyles.test.ts +0 -204
- package/src/figma/__tests__/DesignExtractor.readTokenBindings.test.ts +0 -268
- package/src/figma/__tests__/DesignExtractor.reconstructCompositeTokens.test.ts +0 -403
- package/src/figma/__tests__/DesignExtractor.resolveUnknownVariableIds.test.ts +0 -259
- package/src/figma/__tests__/DesignExtractor.translateTokens.test.ts +0 -433
- package/src/figma/__tests__/DesignExtractor.validateModes.test.ts +0 -350
- package/src/figma/__tests__/TokenSyncWorkflow.batch.test.ts +0 -277
- package/src/figma/__tests__/TokenSyncWorkflow.drift.test.ts +0 -187
- package/src/figma/__tests__/TokenSyncWorkflow.preservation.test.ts +0 -544
- package/src/figma/__tests__/TokenSyncWorkflow.styles.test.ts +0 -245
- package/src/figma/__tests__/TokenSyncWorkflow.sync.test.ts +0 -217
- package/src/figma/__tests__/TokenTranslator.test.ts +0 -757
- package/src/figma/__tests__/VariantAnalyzer.detectConflicts.test.ts +0 -126
- package/src/figma/__tests__/VariantAnalyzer.test.ts +0 -633
- package/src/figma/__tests__/error-reporting.test.ts +0 -254
- package/src/figma/__tests__/preflight.test.ts +0 -94
- package/src/figma/error-reporting.ts +0 -260
- package/src/figma/index.ts +0 -98
- package/src/figma/portCleanup.ts +0 -86
- package/src/figma/preflight.ts +0 -120
- package/src/generators/BlendUtilityGenerator.ts +0 -847
- package/src/generators/BlendValueGenerator.ts +0 -198
- package/src/generators/DTCGFormatGenerator.ts +0 -1355
- package/src/generators/DTCGGeneratorConfig.ts +0 -46
- package/src/generators/ModeResolvedTokens.ts +0 -58
- package/src/generators/ResponsiveGridGenerator.ts +0 -273
- package/src/generators/TokenFileGenerator.ts +0 -2075
- package/src/generators/__tests__/AccessibilityTokenGeneration.test.ts +0 -350
- package/src/generators/__tests__/BlendUtilityGenerator.test.ts +0 -829
- package/src/generators/__tests__/BlendValueGenerator.test.ts +0 -200
- package/src/generators/__tests__/BreakpointTokenGeneration.test.ts +0 -172
- package/src/generators/__tests__/CSSThemeScoping.test.ts +0 -153
- package/src/generators/__tests__/DTCGConfigOptions.test.ts +0 -271
- package/src/generators/__tests__/DTCGErrorHandling.test.ts +0 -139
- package/src/generators/__tests__/DTCGFormatGenerator.integration.test.ts +0 -346
- package/src/generators/__tests__/DTCGFormatGenerator.property.test.ts +0 -497
- package/src/generators/__tests__/DTCGFormatGenerator.test.ts +0 -469
- package/src/generators/__tests__/FigmaTransformer.styles.test.ts +0 -398
- package/src/generators/__tests__/FigmaTransformer.variables.test.ts +0 -540
- package/src/generators/__tests__/GridSpacingTokenGeneration.test.ts +0 -254
- package/src/generators/__tests__/IconTokenGeneration.test.ts +0 -452
- package/src/generators/__tests__/KotlinThemeTypes.test.ts +0 -110
- package/src/generators/__tests__/ModeAwareGeneration.test.ts +0 -160
- package/src/generators/__tests__/NativeOklchOutput.test.ts +0 -56
- package/src/generators/__tests__/OklchExport.test.ts +0 -71
- package/src/generators/__tests__/ProductRepoSimulation.test.ts +0 -91
- package/src/generators/__tests__/ResponsiveGridGeneration.test.ts +0 -291
- package/src/generators/__tests__/Spec076TokenMigration.test.ts +0 -106
- package/src/generators/__tests__/Spec077ModesVerification.test.ts +0 -52
- package/src/generators/__tests__/SwiftThemeTypes.test.ts +0 -122
- package/src/generators/__tests__/TokenFileGenerator.test.ts +0 -914
- package/src/generators/__tests__/TransformerRegistry.test.ts +0 -118
- package/src/generators/__tests__/WcagValueExportSupport.test.ts +0 -84
- package/src/generators/__tests__/WcagValueInfrastructure.test.ts +0 -122
- package/src/generators/__tests__/WebOklchOutput.test.ts +0 -72
- package/src/generators/__tests__/generateTokenIndex.test.ts +0 -204
- package/src/generators/__tests__/helpers/defaultSemanticOptions.ts +0 -24
- package/src/generators/generateTokenFiles.ts +0 -337
- package/src/generators/generateTokenIndex.ts +0 -258
- package/src/generators/oklch/OklchExportUtils.ts +0 -57
- package/src/generators/oklch/OklchTokenIndexMetadata.ts +0 -30
- package/src/generators/transformers/FigmaTransformer.ts +0 -912
- package/src/generators/transformers/ITokenTransformer.ts +0 -56
- package/src/generators/transformers/TransformerRegistry.ts +0 -63
- package/src/generators/transformers/index.ts +0 -52
- package/src/generators/types/DTCGTypes.ts +0 -101
- package/src/integration/BuildErrorHandler.ts +0 -440
- package/src/integration/BuildSystemInterface.ts +0 -338
- package/src/integration/PlatformFileSelector.ts +0 -288
- package/src/integration/RegistryCoordinator.ts +0 -404
- package/src/integration/TranslationCoordinator.ts +0 -458
- package/src/integration/TreeShakingOptimizer.ts +0 -350
- package/src/integration/ValidationCoordinator.ts +0 -780
- package/src/integration/__tests__/ComponentTokenValidation.test.ts +0 -762
- package/src/integration/__tests__/ValidationCoordinator.test.ts +0 -609
- package/src/integration/__tests__/performance/ComponentTokenValidationPerformance.test.ts +0 -161
- package/src/integration/index.ts +0 -55
- package/src/naming/NamingConventionManager.ts +0 -318
- package/src/naming/PlatformNamingRules.ts +0 -278
- package/src/naming/__tests__/NamingConventions.test.ts +0 -224
- package/src/naming/index.ts +0 -23
- package/src/parent-completion.md +0 -1
- package/src/performance/CachingStrategy.ts +0 -426
- package/src/performance/FileGenerationOptimizer.ts +0 -294
- package/src/performance/PerformanceMonitor.ts +0 -185
- package/src/performance/PerformanceOptimizer.ts +0 -348
- package/src/performance/index.ts +0 -30
- package/src/providers/AndroidFileOrganizer.ts +0 -241
- package/src/providers/AndroidFormatGenerator.ts +0 -750
- package/src/providers/AndroidUnitConverter.ts +0 -177
- package/src/providers/FormatProvider.ts +0 -187
- package/src/providers/PathProvider.ts +0 -197
- package/src/providers/UnitProvider.ts +0 -106
- package/src/providers/WebFileOrganizer.ts +0 -121
- package/src/providers/WebFormatGenerator.ts +0 -611
- package/src/providers/WebUnitConverter.ts +0 -116
- package/src/providers/__tests__/AndroidAccessibilityTokens.test.ts +0 -86
- package/src/providers/__tests__/AndroidFormatGenerator-semantic.test.ts +0 -494
- package/src/providers/__tests__/FormatProviders.test.ts +0 -828
- package/src/providers/__tests__/InsetTokenGeneration.test.ts +0 -627
- package/src/providers/__tests__/PathProviders.test.ts +0 -512
- package/src/providers/__tests__/PlatformOutputFormat.test.ts +0 -252
- package/src/providers/__tests__/UnitProviders.test.ts +0 -721
- package/src/providers/__tests__/WebFormatGenerator-semantic.test.ts +0 -293
- package/src/providers/__tests__/iOSFormatGenerator-semantic.test.ts +0 -410
- package/src/providers/iOSFileOrganizer.ts +0 -162
- package/src/providers/iOSFormatGenerator.ts +0 -599
- package/src/providers/iOSUnitConverter.ts +0 -125
- package/src/providers/index.ts +0 -26
- package/src/registries/ComponentTokenRegistry.ts +0 -292
- package/src/registries/IRegistry.ts +0 -170
- package/src/registries/__tests__/ComponentTokenRegistry.test.ts +0 -446
- package/src/registries/__tests__/IRegistry.test.ts +0 -250
- package/src/registries/__tests__/PrimitiveTokenRegistry.test.ts +0 -342
- package/src/registries/__tests__/SemanticTokenRegistry.test.ts +0 -444
- package/src/resolvers/AndroidColorResolver.ts +0 -333
- package/src/resolvers/ModeThemeResolver.ts +0 -152
- package/src/resolvers/SemanticOverrideResolver.ts +0 -155
- package/src/resolvers/SemanticValueResolver.ts +0 -133
- package/src/resolvers/WebColorResolver.ts +0 -240
- package/src/resolvers/__tests__/AndroidColorResolver.test.ts +0 -507
- package/src/resolvers/__tests__/ModeThemeResolver.test.ts +0 -411
- package/src/resolvers/__tests__/SemanticOverrideResolver.test.ts +0 -186
- package/src/resolvers/__tests__/WebColorResolver.test.ts +0 -405
- package/src/resolvers/__tests__/iOSColorResolver.test.ts +0 -432
- package/src/resolvers/iOSColorResolver.ts +0 -224
- package/src/resolvers/index.ts +0 -11
- package/src/security/AIAgentRestrictions.ts +0 -298
- package/src/security/ContaminationAuditor.ts +0 -393
- package/src/security/ContaminationPrevention.ts +0 -275
- package/src/security/DocumentationGuard.ts +0 -258
- package/src/security/FlexibilityTokenGuard.ts +0 -256
- package/src/security/HumanApprovalWorkflow.ts +0 -319
- package/src/security/__tests__/AIAgentRestrictions.test.ts +0 -482
- package/src/security/__tests__/ContaminationPrevention.test.ts +0 -424
- package/src/security/__tests__/SecurityIntegration.test.ts +0 -505
- package/src/security/index.ts +0 -48
- package/src/testing/__tests__/utilities.test.ts +0 -175
- package/src/testing/index.ts +0 -154
- package/src/testing/jest-preset.ts +0 -62
- package/src/testing/style-mock.ts +0 -7
- package/src/testing/validators.ts +0 -10
- package/src/themes/ResolvedThemeSet.ts +0 -22
- package/src/themes/ThemeRegistry.ts +0 -97
- package/src/themes/__tests__/ThemeRegistry.test.ts +0 -162
- package/src/tools/ThemeFileGenerator.ts +0 -109
- package/src/tools/integrity/DiskFreshGenerator.ts +0 -36
- package/src/tools/integrity/GenerationIntegrityCheck.ts +0 -132
- package/src/tools/integrity/Invariants.ts +0 -228
- package/src/tools/integrity/Normalizer.ts +0 -94
- package/src/tools/integrity/SemanticComparator.ts +0 -127
- package/src/tools/integrity/__tests__/GenerationIntegrityCheck.test.ts +0 -132
- package/src/tools/integrity/__tests__/Invariants.test.ts +0 -142
- package/src/tools/integrity/__tests__/Normalizer.test.ts +0 -65
- package/src/tools/integrity/__tests__/SemanticComparator.test.ts +0 -62
- package/src/tools/integrity/__tests__/consumer-package-mode.test.ts +0 -205
- package/src/tools/integrity/cli/run-audit.ts +0 -150
- package/src/tools/integrity/inventory.ts +0 -51
- package/src/tools/integrity/manifest.ts +0 -56
- package/src/tools/integrity/types/index.ts +0 -183
- package/src/types/ComponentTypes.ts +0 -76
- package/src/types/TranslationOutput.ts +0 -105
- package/src/types/ValidationResult.ts +0 -74
- package/src/types/__tests__/ComponentTypes.test.ts +0 -73
- package/src/types/css.d.ts +0 -35
- package/src/types/generated/TokenTypes.ts +0 -142
- package/src/types/index.ts +0 -42
- package/src/validators/BaselineGridValidator.ts +0 -119
- package/src/validators/CompositionPatternValidator.ts +0 -259
- package/src/validators/CrossPlatformConsistencyValidator.ts +0 -498
- package/src/validators/ErrorValidator.ts +0 -998
- package/src/validators/IValidator.ts +0 -273
- package/src/validators/MathematicalRelationshipParser.ts +0 -434
- package/src/validators/ModeParity.ts +0 -123
- package/src/validators/PassValidator.ts +0 -533
- package/src/validators/PlatformConstraintHandler.ts +0 -453
- package/src/validators/PrimitiveReferenceValidator.ts +0 -284
- package/src/validators/SemanticTokenValidator.ts +0 -496
- package/src/validators/StemmaComponentNamingValidator.ts +0 -524
- package/src/validators/StemmaErrorGuidanceSystem.ts +0 -1600
- package/src/validators/StemmaPropertyAccessibilityValidator.ts +0 -823
- package/src/validators/StemmaTokenUsageValidator.ts +0 -651
- package/src/validators/SyntaxValidator.ts +0 -537
- package/src/validators/ThreeTierValidator.ts +0 -822
- package/src/validators/ToleranceCalculator.ts +0 -324
- package/src/validators/ValidationReasoning.ts +0 -464
- package/src/validators/WCAGValidator.ts +0 -219
- package/src/validators/WarningValidator.ts +0 -626
- package/src/validators/__tests__/BaselineGridValidator.test.ts +0 -292
- package/src/validators/__tests__/BorderWidthValidation.test.ts +0 -595
- package/src/validators/__tests__/CompositionPatterns.test.ts +0 -463
- package/src/validators/__tests__/CrossPlatformConsistency.test.ts +0 -834
- package/src/validators/__tests__/IValidator.test.ts +0 -258
- package/src/validators/__tests__/MathematicalRelationshipParser.test.ts +0 -465
- package/src/validators/__tests__/PlatformConstraints.test.ts +0 -486
- package/src/validators/__tests__/SemanticTokenValidator.test.ts +0 -723
- package/src/validators/__tests__/StemmaComponentNamingValidator.test.ts +0 -597
- package/src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts +0 -717
- package/src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts +0 -349
- package/src/validators/__tests__/StemmaTokenUsageValidator.test.ts +0 -432
- package/src/validators/__tests__/SyntaxValidator.test.ts +0 -360
- package/src/validators/__tests__/ThreeTierValidator.test.ts +0 -906
- package/src/validators/__tests__/ValidationReasoning.test.ts +0 -636
- package/src/validators/__tests__/WCAGValidator.test.ts +0 -243
- package/src/validators/buildValidation.ts +0 -170
- package/src/validators/index.ts +0 -144
- package/src/workflows/ConsistencyValidator.ts +0 -339
- package/src/workflows/TokenGenerationWorkflow.ts +0 -460
- package/src/workflows/ValidationPipeline.ts +0 -284
- package/src/workflows/WorkflowErrorHandler.ts +0 -441
|
@@ -1,1355 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DTCG Token Format Generator
|
|
3
|
-
*
|
|
4
|
-
* Transforms DesignerPunk Rosetta System tokens into DTCG (Design Tokens Community Group)
|
|
5
|
-
* Format Module 2025.10 compliant JSON output. Enables integration with industry-standard
|
|
6
|
-
* design tools (Figma, Style Dictionary, Tokens Studio, Terrazzo) while preserving
|
|
7
|
-
* DesignerPunk's mathematical foundations and governance rules through extensions.
|
|
8
|
-
*
|
|
9
|
-
* Key Principle: DTCG output is a parallel export for external tools.
|
|
10
|
-
* DesignerPunk components continue importing tokens from TypeScript sources.
|
|
11
|
-
* Code (Rosetta) remains the source of truth.
|
|
12
|
-
*
|
|
13
|
-
* @see https://tr.designtokens.org/format/
|
|
14
|
-
* @requirements 7.1, 10.1-10.5
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import * as fs from 'fs';
|
|
18
|
-
import * as path from 'path';
|
|
19
|
-
import { DTCGGeneratorConfig, DEFAULT_DTCG_GENERATOR_CONFIG } from './DTCGGeneratorConfig';
|
|
20
|
-
import type { DTCGTokenFile, DTCGGroup, DTCGToken, DTCGType, DesignerPunkExtensions } from './types/DTCGTypes';
|
|
21
|
-
import { getAllPrimitiveTokens } from '../tokens/index';
|
|
22
|
-
import { getAllSemanticTokens } from '../tokens/semantic/index';
|
|
23
|
-
import type { SemanticToken } from '../types/SemanticToken';
|
|
24
|
-
import type { PrimitiveToken, ColorTokenValue } from '../types/PrimitiveToken';
|
|
25
|
-
|
|
26
|
-
// Primitive token imports
|
|
27
|
-
import { spacingTokens, SPACING_BASE_VALUE } from '../tokens/SpacingTokens';
|
|
28
|
-
import { colorTokens } from '../tokens/ColorTokens';
|
|
29
|
-
import { fontSizeTokens, FONT_SIZE_BASE_VALUE } from '../tokens/FontSizeTokens';
|
|
30
|
-
import { fontWeightTokens, FONT_WEIGHT_BASE_VALUE } from '../tokens/FontWeightTokens';
|
|
31
|
-
import { fontFamilyTokens } from '../tokens/FontFamilyTokens';
|
|
32
|
-
import { lineHeightTokens, LINE_HEIGHT_BASE_VALUE } from '../tokens/LineHeightTokens';
|
|
33
|
-
import { letterSpacingTokens, LETTER_SPACING_BASE_VALUE } from '../tokens/LetterSpacingTokens';
|
|
34
|
-
import { radiusTokens, RADIUS_BASE_VALUE } from '../tokens/RadiusTokens';
|
|
35
|
-
import { borderWidthTokens, BORDER_WIDTH_BASE_VALUE } from '../tokens/BorderWidthTokens';
|
|
36
|
-
import { tapAreaTokens, TAP_AREA_BASE_VALUE } from '../tokens/TapAreaTokens';
|
|
37
|
-
import { densityTokens, DENSITY_BASE_VALUE } from '../tokens/DensityTokens';
|
|
38
|
-
import { breakpointTokens, BREAKPOINT_BASE_VALUE } from '../tokens/BreakpointTokens';
|
|
39
|
-
import { opacityTokens, OPACITY_BASE_VALUE } from '../tokens/OpacityTokens';
|
|
40
|
-
import { durationTokens, DURATION_BASE_VALUE } from '../tokens/DurationTokens';
|
|
41
|
-
import { easingTokens } from '../tokens/EasingTokens';
|
|
42
|
-
import { scaleTokens, SCALE_BASE_VALUE } from '../tokens/ScaleTokens';
|
|
43
|
-
import { blendTokens, BLEND_BASE_VALUE } from '../tokens/BlendTokens';
|
|
44
|
-
|
|
45
|
-
// Shadow primitive token imports
|
|
46
|
-
import { blur as blurTokens, BLUR_BASE_VALUE } from '../tokens/BlurTokens';
|
|
47
|
-
import { sizingTokens, SIZING_BASE_VALUE } from '../tokens/SizingTokens';
|
|
48
|
-
import { shadowOffsetX, shadowOffsetY, SHADOW_OFFSET_BASE_VALUE } from '../tokens/ShadowOffsetTokens';
|
|
49
|
-
import { shadowOpacityTokens, SHADOW_OPACITY_BASE_VALUE } from '../tokens/ShadowOpacityTokens';
|
|
50
|
-
|
|
51
|
-
// Glow primitive token imports
|
|
52
|
-
import { glowOpacity, GLOW_OPACITY_BASE_VALUE } from '../tokens/GlowOpacityTokens';
|
|
53
|
-
|
|
54
|
-
// Semantic token imports
|
|
55
|
-
import { colorTokens as semanticColorTokens } from '../tokens/semantic/ColorTokens';
|
|
56
|
-
import { spacingTokens as semanticSpacingTokens } from '../tokens/semantic/SpacingTokens';
|
|
57
|
-
import { SemanticBorderWidthTokens } from '../tokens/semantic/BorderWidthTokens';
|
|
58
|
-
import { SemanticRadiusTokens } from '../tokens/semantic/RadiusTokens';
|
|
59
|
-
import { opacityTokens as semanticOpacityTokens } from '../tokens/semantic/OpacityTokens';
|
|
60
|
-
import { blendTokens as semanticBlendTokens } from '../tokens/semantic/BlendTokens';
|
|
61
|
-
import { zIndexTokens } from '../tokens/semantic/ZIndexTokens';
|
|
62
|
-
import { elevationTokens } from '../tokens/semantic/ElevationTokens';
|
|
63
|
-
import { gridSpacingTokens } from '../tokens/semantic/GridSpacingTokens';
|
|
64
|
-
import { iconTokens } from '../tokens/semantic/IconTokens';
|
|
65
|
-
import { accessibilityTokens } from '../tokens/semantic/AccessibilityTokens';
|
|
66
|
-
import { motionTokens as semanticMotionTokens } from '../tokens/semantic/MotionTokens';
|
|
67
|
-
import { typographyTokens } from '../tokens/semantic/TypographyTokens';
|
|
68
|
-
import { progressColorTokens } from '../tokens/semantic/ColorTokens';
|
|
69
|
-
import { shadowTokens as semanticShadowTokens } from '../tokens/semantic/ShadowTokens';
|
|
70
|
-
import { darkSemanticOverrides } from '../tokens/themes/dark/SemanticOverrides';
|
|
71
|
-
import { resolveSemanticTokenValue } from '../resolvers/SemanticValueResolver';
|
|
72
|
-
import type { ThemeOverrideSet } from './TokenFileGenerator';
|
|
73
|
-
|
|
74
|
-
/** Set of valid DTCG types for validation (Format Module 2025.10) */
|
|
75
|
-
const VALID_DTCG_TYPES: ReadonlySet<string> = new Set([
|
|
76
|
-
'color', 'dimension', 'fontFamily', 'fontWeight', 'duration',
|
|
77
|
-
'cubicBezier', 'linearEasing', 'number', 'shadow', 'typography', 'transition',
|
|
78
|
-
]);
|
|
79
|
-
|
|
80
|
-
/** Minimum expected primitive token count (programmatic validation threshold) */
|
|
81
|
-
const MIN_PRIMITIVE_TOKEN_COUNT = 200;
|
|
82
|
-
|
|
83
|
-
/** Minimum expected semantic token count (programmatic validation threshold) */
|
|
84
|
-
const MIN_SEMANTIC_TOKEN_COUNT = 180;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* DTCGFormatGenerator — Main generator class that orchestrates token transformation
|
|
88
|
-
* from Rosetta System tokens to DTCG Format Module 2025.10 compliant JSON.
|
|
89
|
-
*
|
|
90
|
-
* Usage:
|
|
91
|
-
* ```typescript
|
|
92
|
-
* const generator = new DTCGFormatGenerator();
|
|
93
|
-
* const output = generator.generate();
|
|
94
|
-
* generator.writeToFile('dist/DesignTokens.dtcg.json');
|
|
95
|
-
* ```
|
|
96
|
-
*/
|
|
97
|
-
export class DTCGFormatGenerator {
|
|
98
|
-
private readonly config: DTCGGeneratorConfig;
|
|
99
|
-
|
|
100
|
-
constructor(config: Partial<DTCGGeneratorConfig> = {}) {
|
|
101
|
-
this.config = { ...DEFAULT_DTCG_GENERATOR_CONFIG, ...config };
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Generate DTCG-compliant JSON from Rosetta tokens.
|
|
106
|
-
*
|
|
107
|
-
* Orchestrates all token generation methods, adds root-level metadata,
|
|
108
|
-
* and validates token counts before returning the complete DTCG output.
|
|
109
|
-
*
|
|
110
|
-
* @returns Complete DTCGTokenFile ready for serialization
|
|
111
|
-
* @throws Error if token count validation fails
|
|
112
|
-
*/
|
|
113
|
-
generate(): DTCGTokenFile {
|
|
114
|
-
const output: DTCGTokenFile = {
|
|
115
|
-
$schema: this.config.schemaUrl,
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// Add root-level DesignerPunk extensions (version, generatedAt, rosettaVersion)
|
|
119
|
-
if (this.config.includeExtensions) {
|
|
120
|
-
output.$extensions = {
|
|
121
|
-
designerpunk: this.generateRootExtensions(),
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// --- Primitive token groups ---
|
|
126
|
-
// Each method will be implemented in Task 2.2
|
|
127
|
-
output.space = this.generateSpacingTokens();
|
|
128
|
-
output.color = this.generateColorTokens();
|
|
129
|
-
output.fontSize = this.generateFontSizeTokens();
|
|
130
|
-
output.fontWeight = this.generateFontWeightTokens();
|
|
131
|
-
output.fontFamily = this.generateFontFamilyTokens();
|
|
132
|
-
output.lineHeight = this.generateLineHeightTokens();
|
|
133
|
-
output.letterSpacing = this.generateLetterSpacingTokens();
|
|
134
|
-
output.radius = this.generateRadiusTokens();
|
|
135
|
-
output.borderWidth = this.generateBorderWidthTokens();
|
|
136
|
-
output.tapArea = this.generateTapAreaTokens();
|
|
137
|
-
output.density = this.generateDensityTokens();
|
|
138
|
-
output.breakpoint = this.generateBreakpointTokens();
|
|
139
|
-
output.opacity = this.generateOpacityTokens();
|
|
140
|
-
output.duration = this.generateDurationTokens();
|
|
141
|
-
output.easing = this.generateEasingTokens();
|
|
142
|
-
output.scale = this.generateScaleTokens();
|
|
143
|
-
output.blend = this.generateBlendTokens();
|
|
144
|
-
output.blur = this.generateBlurTokens();
|
|
145
|
-
output.sizing = this.generateSizingTokens();
|
|
146
|
-
|
|
147
|
-
// --- Semantic token groups ---
|
|
148
|
-
output.semanticColor = this.generateSemanticColorTokens();
|
|
149
|
-
output.semanticSpace = this.generateSemanticSpacingTokens();
|
|
150
|
-
output.semanticBorderWidth = this.generateSemanticBorderWidthTokens();
|
|
151
|
-
output.semanticRadius = this.generateSemanticRadiusTokens();
|
|
152
|
-
output.semanticOpacity = this.generateSemanticOpacityTokens();
|
|
153
|
-
output.semanticBlend = this.generateSemanticBlendTokens();
|
|
154
|
-
output.gridSpacing = this.generateGridSpacingTokens();
|
|
155
|
-
output.icon = this.generateIconTokens();
|
|
156
|
-
output.accessibility = this.generateAccessibilityTokens();
|
|
157
|
-
output.progressColor = this.generateProgressColorTokens();
|
|
158
|
-
output.zIndex = this.generateZIndexTokens();
|
|
159
|
-
output.elevation = this.generateElevationTokens();
|
|
160
|
-
|
|
161
|
-
// --- Shadow & glow token groups (Tasks 2.4, 2.5) ---
|
|
162
|
-
output.shadow = this.generateShadowTokens();
|
|
163
|
-
output.glow = this.generateGlowTokens();
|
|
164
|
-
|
|
165
|
-
// --- Composite token groups (Task 2.6) ---
|
|
166
|
-
output.typography = this.generateTypographyTokens();
|
|
167
|
-
output.motion = this.generateMotionTokens();
|
|
168
|
-
|
|
169
|
-
// Validate token counts against expected minimums
|
|
170
|
-
this.validateTokenCounts(output);
|
|
171
|
-
|
|
172
|
-
// Post-processing: strip deprecated tokens if configured
|
|
173
|
-
if (!this.config.includeDeprecated) {
|
|
174
|
-
this.stripDeprecatedTokens(output);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return output;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Write generated DTCG output to a JSON file.
|
|
182
|
-
*
|
|
183
|
-
* Creates the output directory if it doesn't exist. Overwrites existing files
|
|
184
|
-
* without prompting (generation is idempotent).
|
|
185
|
-
*
|
|
186
|
-
* @param outputPath - File path for the output (e.g., 'dist/DesignTokens.dtcg.json')
|
|
187
|
-
* @throws Error if file write fails (permissions, disk full, etc.)
|
|
188
|
-
*/
|
|
189
|
-
writeToFile(outputPath: string): void {
|
|
190
|
-
const output = this.generate();
|
|
191
|
-
const indent = this.config.prettyPrint ? 2 : undefined;
|
|
192
|
-
const json = JSON.stringify(output, null, indent);
|
|
193
|
-
|
|
194
|
-
try {
|
|
195
|
-
const dir = path.dirname(outputPath);
|
|
196
|
-
if (!fs.existsSync(dir)) {
|
|
197
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
198
|
-
}
|
|
199
|
-
fs.writeFileSync(outputPath, json, 'utf-8');
|
|
200
|
-
|
|
201
|
-
// Log generation summary
|
|
202
|
-
const primitiveCount = getAllPrimitiveTokens().length;
|
|
203
|
-
const semanticCount = getAllSemanticTokens().length;
|
|
204
|
-
console.log(
|
|
205
|
-
`✅ DTCG output written to ${outputPath} — Generated ${primitiveCount} primitive tokens, ${semanticCount} semantic tokens`
|
|
206
|
-
);
|
|
207
|
-
} catch (error: unknown) {
|
|
208
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
209
|
-
throw new Error(`Failed to write DTCG output to ${outputPath}: ${message}`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// ---------------------------------------------------------------------------
|
|
214
|
-
// Private helpers
|
|
215
|
-
// ---------------------------------------------------------------------------
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Generate root-level DesignerPunk extension metadata.
|
|
219
|
-
*
|
|
220
|
-
* Includes generator version, generation timestamp, and Rosetta system version
|
|
221
|
-
* for traceability and debugging.
|
|
222
|
-
*/
|
|
223
|
-
private generateRootExtensions(): NonNullable<NonNullable<DTCGTokenFile['$extensions']>['designerpunk']> {
|
|
224
|
-
// Read version from package.json at runtime
|
|
225
|
-
let rosettaVersion = 'unknown';
|
|
226
|
-
try {
|
|
227
|
-
const pkgPath = path.resolve(__dirname, '../../package.json');
|
|
228
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
229
|
-
rosettaVersion = pkg.version || 'unknown';
|
|
230
|
-
} catch {
|
|
231
|
-
// Fallback — package.json not found or unreadable
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const extensions: NonNullable<NonNullable<DTCGTokenFile['$extensions']>['designerpunk']> = {
|
|
235
|
-
version: '1.0.0',
|
|
236
|
-
generatedAt: new Date().toISOString(),
|
|
237
|
-
rosettaVersion,
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
// Include registered theme metadata when themes are configured (Spec 094)
|
|
241
|
-
if (this.config.registeredThemes.length > 0) {
|
|
242
|
-
extensions.themes = this.config.registeredThemes;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
return extensions;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Validate that generated token counts meet expected minimums.
|
|
250
|
-
*
|
|
251
|
-
* Uses programmatic counting via getAllPrimitiveTokens() and getAllSemanticTokens()
|
|
252
|
-
* rather than hard-coded values, so validation stays current as the token system grows.
|
|
253
|
-
*
|
|
254
|
-
* @param _output - The generated DTCGTokenFile (reserved for future per-group validation)
|
|
255
|
-
* @throws Error if primitive or semantic token counts fall below minimum thresholds
|
|
256
|
-
*/
|
|
257
|
-
private validateTokenCounts(_output: DTCGTokenFile): void {
|
|
258
|
-
const primitiveCount = getAllPrimitiveTokens().length;
|
|
259
|
-
const semanticCount = getAllSemanticTokens().length;
|
|
260
|
-
|
|
261
|
-
if (primitiveCount < MIN_PRIMITIVE_TOKEN_COUNT) {
|
|
262
|
-
throw new Error(
|
|
263
|
-
`Token count validation failed. Expected at least ${MIN_PRIMITIVE_TOKEN_COUNT} primitive tokens, got ${primitiveCount}. ` +
|
|
264
|
-
`This may indicate a missing token category in the generator.`
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (semanticCount < MIN_SEMANTIC_TOKEN_COUNT) {
|
|
269
|
-
throw new Error(
|
|
270
|
-
`Token count validation failed. Expected at least ${MIN_SEMANTIC_TOKEN_COUNT} semantic tokens, got ${semanticCount}. ` +
|
|
271
|
-
`This may indicate a missing semantic token category in the generator.`
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Remove deprecated tokens from the output when includeDeprecated is false.
|
|
278
|
-
*
|
|
279
|
-
* Recursively walks the DTCG output tree and removes any token that has
|
|
280
|
-
* `$extensions.designerpunk.deprecated: true`. This preserves the group structure
|
|
281
|
-
* while filtering out individual deprecated tokens.
|
|
282
|
-
*
|
|
283
|
-
* @param obj - The DTCG output object to filter (mutated in place)
|
|
284
|
-
*/
|
|
285
|
-
private stripDeprecatedTokens(obj: Record<string, unknown>): void {
|
|
286
|
-
for (const key of Object.keys(obj)) {
|
|
287
|
-
if (key.startsWith('$')) continue; // Skip DTCG meta-properties
|
|
288
|
-
const value = obj[key];
|
|
289
|
-
if (value && typeof value === 'object') {
|
|
290
|
-
const token = value as Record<string, unknown>;
|
|
291
|
-
// Check if this is a token with deprecated extension
|
|
292
|
-
const extensions = token.$extensions as { designerpunk?: DesignerPunkExtensions } | undefined;
|
|
293
|
-
if (extensions?.designerpunk?.deprecated) {
|
|
294
|
-
delete obj[key];
|
|
295
|
-
} else {
|
|
296
|
-
// Recurse into groups
|
|
297
|
-
this.stripDeprecatedTokens(token);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ---------------------------------------------------------------------------
|
|
304
|
-
// Token generation stubs — implemented in Tasks 2.2–2.6
|
|
305
|
-
// ---------------------------------------------------------------------------
|
|
306
|
-
|
|
307
|
-
// ---------------------------------------------------------------------------
|
|
308
|
-
// Primitive token generation (Task 2.2)
|
|
309
|
-
// ---------------------------------------------------------------------------
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Generate spacing primitive tokens as DTCG dimension type.
|
|
313
|
-
* Maps spacing baseValue to `{value}px` dimension format.
|
|
314
|
-
*/
|
|
315
|
-
private generateSpacingTokens(): DTCGGroup {
|
|
316
|
-
return this.generateDimensionGroup(spacingTokens, 'spacing', SPACING_BASE_VALUE);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Generate color primitive tokens as DTCG color type.
|
|
321
|
-
* Resolves mode-aware RGBA values using light.base as default.
|
|
322
|
-
*/
|
|
323
|
-
private generateColorTokens(): DTCGGroup {
|
|
324
|
-
const group: DTCGGroup = { $type: 'color' };
|
|
325
|
-
for (const [key, token] of Object.entries(colorTokens)) {
|
|
326
|
-
const colorValue = this.resolveColorValue(token, key);
|
|
327
|
-
const extensions = this.buildPrimitiveExtensions(token, 'color');
|
|
328
|
-
group[key] = this.toDTCGToken(colorValue, 'color', token.description, extensions);
|
|
329
|
-
}
|
|
330
|
-
return group;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Generate font size primitive tokens as DTCG dimension type.
|
|
335
|
-
* Uses baseValue (unitless) converted to `{value}px`.
|
|
336
|
-
*/
|
|
337
|
-
private generateFontSizeTokens(): DTCGGroup {
|
|
338
|
-
return this.generateDimensionGroup(fontSizeTokens, 'fontSize', FONT_SIZE_BASE_VALUE);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Generate font weight primitive tokens as DTCG fontWeight type.
|
|
343
|
-
* Font weights are numeric values (100–900).
|
|
344
|
-
*/
|
|
345
|
-
private generateFontWeightTokens(): DTCGGroup {
|
|
346
|
-
const group: DTCGGroup = { $type: 'fontWeight' };
|
|
347
|
-
for (const [key, token] of Object.entries(fontWeightTokens)) {
|
|
348
|
-
const extensions = this.buildPrimitiveExtensions(token, 'fontWeight', FONT_WEIGHT_BASE_VALUE);
|
|
349
|
-
group[key] = this.toDTCGToken(token.baseValue, 'fontWeight', token.description, extensions);
|
|
350
|
-
}
|
|
351
|
-
return group;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Generate font family primitive tokens as DTCG fontFamily type.
|
|
356
|
-
* DTCG fontFamily expects an array of font names.
|
|
357
|
-
*/
|
|
358
|
-
private generateFontFamilyTokens(): DTCGGroup {
|
|
359
|
-
const group: DTCGGroup = { $type: 'fontFamily' };
|
|
360
|
-
for (const [key, token] of Object.entries(fontFamilyTokens)) {
|
|
361
|
-
const fontStack = String(token.platforms.web.value);
|
|
362
|
-
const families = fontStack.split(',').map(f => f.trim().replace(/^["']|["']$/g, ''));
|
|
363
|
-
const extensions = this.buildPrimitiveExtensions(token, 'fontFamily');
|
|
364
|
-
group[key] = this.toDTCGToken(families, 'fontFamily', token.description, extensions);
|
|
365
|
-
}
|
|
366
|
-
return group;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Generate line height primitive tokens as DTCG number type.
|
|
371
|
-
* Line heights are unitless multipliers.
|
|
372
|
-
*/
|
|
373
|
-
private generateLineHeightTokens(): DTCGGroup {
|
|
374
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
375
|
-
for (const [key, token] of Object.entries(lineHeightTokens)) {
|
|
376
|
-
const extensions = this.buildPrimitiveExtensions(token, 'lineHeight', LINE_HEIGHT_BASE_VALUE);
|
|
377
|
-
group[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
378
|
-
}
|
|
379
|
-
return group;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Generate letter spacing primitive tokens as DTCG dimension type.
|
|
384
|
-
* Letter spacing uses em units.
|
|
385
|
-
*/
|
|
386
|
-
private generateLetterSpacingTokens(): DTCGGroup {
|
|
387
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
388
|
-
for (const [key, token] of Object.entries(letterSpacingTokens)) {
|
|
389
|
-
const extensions = this.buildPrimitiveExtensions(token, 'letterSpacing', LETTER_SPACING_BASE_VALUE);
|
|
390
|
-
group[key] = this.toDTCGToken(`${token.baseValue}em`, 'dimension', token.description, extensions);
|
|
391
|
-
}
|
|
392
|
-
return group;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Generate radius primitive tokens as DTCG dimension type.
|
|
397
|
-
* Handles special cases: radiusMax (9999px), radiusHalf (50%).
|
|
398
|
-
*/
|
|
399
|
-
private generateRadiusTokens(): DTCGGroup {
|
|
400
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
401
|
-
for (const [key, token] of Object.entries(radiusTokens)) {
|
|
402
|
-
let value: string;
|
|
403
|
-
if (token.name === 'radiusHalf') {
|
|
404
|
-
value = '50%';
|
|
405
|
-
} else {
|
|
406
|
-
value = `${token.baseValue}px`;
|
|
407
|
-
}
|
|
408
|
-
const extensions = this.buildPrimitiveExtensions(token, 'radius', RADIUS_BASE_VALUE);
|
|
409
|
-
group[key] = this.toDTCGToken(value, 'dimension', token.description, extensions);
|
|
410
|
-
}
|
|
411
|
-
return group;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
/**
|
|
415
|
-
* Generate border width primitive tokens as DTCG dimension type.
|
|
416
|
-
*/
|
|
417
|
-
private generateBorderWidthTokens(): DTCGGroup {
|
|
418
|
-
return this.generateDimensionGroup(borderWidthTokens, 'borderWidth', BORDER_WIDTH_BASE_VALUE);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
/**
|
|
422
|
-
* Generate tap area primitive tokens as DTCG dimension type.
|
|
423
|
-
*/
|
|
424
|
-
private generateTapAreaTokens(): DTCGGroup {
|
|
425
|
-
return this.generateDimensionGroup(tapAreaTokens, 'tapArea', TAP_AREA_BASE_VALUE);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* Generate density primitive tokens as DTCG number type.
|
|
430
|
-
* Density values are unitless multipliers.
|
|
431
|
-
*/
|
|
432
|
-
private generateDensityTokens(): DTCGGroup {
|
|
433
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
434
|
-
for (const [key, token] of Object.entries(densityTokens)) {
|
|
435
|
-
const extensions = this.buildPrimitiveExtensions(token, 'density', DENSITY_BASE_VALUE);
|
|
436
|
-
group[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
437
|
-
}
|
|
438
|
-
return group;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Generate breakpoint primitive tokens as DTCG dimension type.
|
|
443
|
-
*/
|
|
444
|
-
private generateBreakpointTokens(): DTCGGroup {
|
|
445
|
-
return this.generateDimensionGroup(breakpointTokens, 'breakpoint', BREAKPOINT_BASE_VALUE);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
/**
|
|
449
|
-
* Generate opacity primitive tokens as DTCG number type.
|
|
450
|
-
* Opacity values are unitless (0–1).
|
|
451
|
-
*/
|
|
452
|
-
private generateOpacityTokens(): DTCGGroup {
|
|
453
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
454
|
-
for (const [key, token] of Object.entries(opacityTokens)) {
|
|
455
|
-
const extensions = this.buildPrimitiveExtensions(token, 'opacity', OPACITY_BASE_VALUE);
|
|
456
|
-
group[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
457
|
-
}
|
|
458
|
-
return group;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Generate duration primitive tokens as DTCG duration type.
|
|
463
|
-
* DTCG duration format: `{value}ms`.
|
|
464
|
-
*/
|
|
465
|
-
private generateDurationTokens(): DTCGGroup {
|
|
466
|
-
const group: DTCGGroup = { $type: 'duration' };
|
|
467
|
-
for (const [key, token] of Object.entries(durationTokens)) {
|
|
468
|
-
const extensions = this.buildPrimitiveExtensions(token, 'duration', DURATION_BASE_VALUE);
|
|
469
|
-
group[key] = this.toDTCGToken(`${token.baseValue}ms`, 'duration', token.description, extensions);
|
|
470
|
-
}
|
|
471
|
-
return group;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Generate easing primitive tokens as DTCG cubicBezier type.
|
|
476
|
-
* Parses cubic-bezier CSS string into [p1, p2, p3, p4] array.
|
|
477
|
-
*/
|
|
478
|
-
private generateEasingTokens(): DTCGGroup {
|
|
479
|
-
const group: DTCGGroup = {};
|
|
480
|
-
for (const [key, token] of Object.entries(easingTokens)) {
|
|
481
|
-
const extensions = this.buildPrimitiveExtensions(token, 'easing');
|
|
482
|
-
if (token.easingType === 'linear' && token.stops) {
|
|
483
|
-
group[key] = this.toDTCGToken(token.stops, 'linearEasing', token.description, extensions);
|
|
484
|
-
} else {
|
|
485
|
-
const bezierStr = String(token.platforms.web.value);
|
|
486
|
-
const match = bezierStr.match(/cubic-bezier\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)/);
|
|
487
|
-
if (!match) {
|
|
488
|
-
throw new Error(`Invalid easing value for ${token.name}: ${bezierStr}. Expected cubic-bezier(p1, p2, p3, p4) format.`);
|
|
489
|
-
}
|
|
490
|
-
const bezierArray = [parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4])];
|
|
491
|
-
group[key] = this.toDTCGToken(bezierArray, 'cubicBezier', token.description, extensions);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
return group;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
498
|
-
* Generate scale primitive tokens as DTCG number type.
|
|
499
|
-
* Scale values are unitless multipliers.
|
|
500
|
-
*/
|
|
501
|
-
private generateScaleTokens(): DTCGGroup {
|
|
502
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
503
|
-
for (const [key, token] of Object.entries(scaleTokens)) {
|
|
504
|
-
const extensions = this.buildPrimitiveExtensions(token, 'scale', SCALE_BASE_VALUE);
|
|
505
|
-
group[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
506
|
-
}
|
|
507
|
-
return group;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
/**
|
|
511
|
-
* Generate blur primitive tokens as DTCG dimension type.
|
|
512
|
-
*/
|
|
513
|
-
private generateBlurTokens(): DTCGGroup {
|
|
514
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
515
|
-
for (const [key, token] of Object.entries(blurTokens)) {
|
|
516
|
-
const extensions = this.buildPrimitiveExtensions(token, 'blur', BLUR_BASE_VALUE);
|
|
517
|
-
group[key] = this.toDTCGToken(`${token.baseValue}px`, 'dimension', token.description, extensions);
|
|
518
|
-
}
|
|
519
|
-
return group;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
/**
|
|
523
|
-
* Generate sizing primitive tokens as DTCG dimension type.
|
|
524
|
-
*/
|
|
525
|
-
private generateSizingTokens(): DTCGGroup {
|
|
526
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
527
|
-
for (const [key, token] of Object.entries(sizingTokens)) {
|
|
528
|
-
const extensions = this.buildPrimitiveExtensions(token, 'sizing', SIZING_BASE_VALUE);
|
|
529
|
-
group[key] = this.toDTCGToken(`${token.baseValue}px`, 'dimension', token.description, extensions);
|
|
530
|
-
}
|
|
531
|
-
return group;
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
/**
|
|
535
|
-
* Generate blend primitive tokens as DTCG number type with blendType extension.
|
|
536
|
-
* Blend values are unitless (0–1) with blendType metadata.
|
|
537
|
-
*/
|
|
538
|
-
private generateBlendTokens(): DTCGGroup {
|
|
539
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
540
|
-
for (const [key, token] of Object.entries(blendTokens)) {
|
|
541
|
-
const extensions = this.buildPrimitiveExtensions(token, 'blend', BLEND_BASE_VALUE);
|
|
542
|
-
group[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
543
|
-
}
|
|
544
|
-
return group;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
// ---------------------------------------------------------------------------
|
|
548
|
-
// Semantic token generation (Task 2.3)
|
|
549
|
-
// ---------------------------------------------------------------------------
|
|
550
|
-
|
|
551
|
-
/**
|
|
552
|
-
* Generate semantic color tokens with alias references to primitive colors.
|
|
553
|
-
* Uses `{color.primitiveRef}` syntax to preserve primitive→semantic hierarchy.
|
|
554
|
-
*/
|
|
555
|
-
private generateSemanticColorTokens(): DTCGGroup {
|
|
556
|
-
const group: DTCGGroup = { $type: 'color' };
|
|
557
|
-
for (const [key, token] of Object.entries(semanticColorTokens)) {
|
|
558
|
-
const refs = token.primitiveReferences;
|
|
559
|
-
|
|
560
|
-
// Determine alias value — use {color.primitiveRef} syntax
|
|
561
|
-
const primaryRef = refs.value || refs.color;
|
|
562
|
-
if (!primaryRef) continue;
|
|
563
|
-
|
|
564
|
-
const aliasValue = this.config.resolveAliases
|
|
565
|
-
? this.resolvePrimitiveColorAlias(primaryRef)
|
|
566
|
-
: `{color.${primaryRef}}`;
|
|
567
|
-
|
|
568
|
-
const extensions: DesignerPunkExtensions = {
|
|
569
|
-
family: 'color',
|
|
570
|
-
};
|
|
571
|
-
|
|
572
|
-
// Spec 080: emit mode contexts for Level 2 overrides or Level 1 primitive differences
|
|
573
|
-
const override = darkSemanticOverrides[key];
|
|
574
|
-
if (override) {
|
|
575
|
-
// Level 2: semantic override swaps primitive name in dark mode
|
|
576
|
-
// Resolve both modes to concrete rgba values
|
|
577
|
-
const lightResolved = resolveSemanticTokenValue(token as any, 'light');
|
|
578
|
-
const darkToken = { ...token, primitiveReferences: override.primitiveReferences } as any;
|
|
579
|
-
const darkResolved = resolveSemanticTokenValue(darkToken, 'dark');
|
|
580
|
-
const lightVal = lightResolved.primitiveReferences?.value;
|
|
581
|
-
const darkVal = darkResolved.primitiveReferences?.value;
|
|
582
|
-
if (lightVal && darkVal && lightVal !== darkVal) {
|
|
583
|
-
if (!extensions.modes) extensions.modes = {};
|
|
584
|
-
extensions.modes.light = lightVal;
|
|
585
|
-
extensions.modes.dark = darkVal;
|
|
586
|
-
}
|
|
587
|
-
} else {
|
|
588
|
-
// Level 1: check if primitive itself has distinct light/dark values
|
|
589
|
-
const primitiveToken = (colorTokens as Record<string, PrimitiveToken>)[primaryRef];
|
|
590
|
-
if (primitiveToken) {
|
|
591
|
-
const colorVal = primitiveToken.platforms.web.value as ColorTokenValue;
|
|
592
|
-
if (colorVal?.light?.base && colorVal?.dark?.base && colorVal.light.base !== colorVal.dark.base) {
|
|
593
|
-
if (!extensions.modes) extensions.modes = {};
|
|
594
|
-
extensions.modes.light = colorVal.light.base;
|
|
595
|
-
extensions.modes.dark = colorVal.dark.base;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
// If token has separate color + opacity composition, note it
|
|
600
|
-
if (refs.color && refs.opacity) {
|
|
601
|
-
extensions.primitiveRefs = { color: refs.color, opacity: refs.opacity };
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
// If token has modifier-based opacity composition, note it
|
|
605
|
-
const semanticToken = token as unknown as SemanticToken;
|
|
606
|
-
if (semanticToken.modifiers?.length) {
|
|
607
|
-
const opacityMod = semanticToken.modifiers.find((m: { type: string }) => m.type === 'opacity');
|
|
608
|
-
if (opacityMod) {
|
|
609
|
-
extensions.primitiveRefs = { color: refs.value, opacity: opacityMod.reference };
|
|
610
|
-
extensions.modifiers = semanticToken.modifiers;
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
group[key] = this.toDTCGToken(aliasValue, 'color', token.description, extensions);
|
|
615
|
-
}
|
|
616
|
-
return group;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* Generate semantic spacing tokens with alias references to primitive spacing.
|
|
621
|
-
* Preserves hierarchical structure: grouped/related/separated/sectioned + inset.
|
|
622
|
-
*/
|
|
623
|
-
private generateSemanticSpacingTokens(): DTCGGroup {
|
|
624
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
625
|
-
for (const [category, levels] of Object.entries(semanticSpacingTokens)) {
|
|
626
|
-
const subGroup: DTCGGroup = { $type: 'dimension' };
|
|
627
|
-
for (const [level, token] of Object.entries(levels as Record<string, { value: string }>)) {
|
|
628
|
-
const aliasValue = this.config.resolveAliases
|
|
629
|
-
? this.resolvePrimitiveDimensionAlias(token.value, spacingTokens)
|
|
630
|
-
: `{space.${token.value}}`;
|
|
631
|
-
|
|
632
|
-
const extensions: DesignerPunkExtensions = {
|
|
633
|
-
family: 'spacing',
|
|
634
|
-
primitiveRefs: { value: token.value },
|
|
635
|
-
};
|
|
636
|
-
|
|
637
|
-
subGroup[level] = this.toDTCGToken(aliasValue, 'dimension', `Semantic spacing: ${category}.${level}`, extensions);
|
|
638
|
-
}
|
|
639
|
-
group[category] = subGroup;
|
|
640
|
-
}
|
|
641
|
-
return group;
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
/**
|
|
645
|
-
* Generate semantic border width tokens with alias references to primitive border widths.
|
|
646
|
-
*/
|
|
647
|
-
private generateSemanticBorderWidthTokens(): DTCGGroup {
|
|
648
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
649
|
-
for (const [key, token] of Object.entries(SemanticBorderWidthTokens)) {
|
|
650
|
-
const aliasValue = this.config.resolveAliases
|
|
651
|
-
? this.resolvePrimitiveDimensionAlias(token.value, borderWidthTokens)
|
|
652
|
-
: `{borderWidth.${token.value}}`;
|
|
653
|
-
|
|
654
|
-
const extensions: DesignerPunkExtensions = {
|
|
655
|
-
family: 'borderWidth',
|
|
656
|
-
primitiveRefs: { value: token.value },
|
|
657
|
-
};
|
|
658
|
-
|
|
659
|
-
group[key] = this.toDTCGToken(aliasValue, 'dimension', `Semantic border width: ${key}`, extensions);
|
|
660
|
-
}
|
|
661
|
-
return group;
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
/**
|
|
665
|
-
* Generate semantic radius tokens with alias references to primitive radius.
|
|
666
|
-
*/
|
|
667
|
-
private generateSemanticRadiusTokens(): DTCGGroup {
|
|
668
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
669
|
-
for (const [key, token] of Object.entries(SemanticRadiusTokens)) {
|
|
670
|
-
const aliasValue = this.config.resolveAliases
|
|
671
|
-
? this.resolvePrimitiveDimensionAlias(token.value, radiusTokens)
|
|
672
|
-
: `{radius.${token.value}}`;
|
|
673
|
-
|
|
674
|
-
const extensions: DesignerPunkExtensions = {
|
|
675
|
-
family: 'radius',
|
|
676
|
-
primitiveRefs: { value: token.value },
|
|
677
|
-
};
|
|
678
|
-
|
|
679
|
-
group[key] = this.toDTCGToken(aliasValue, 'dimension', `Semantic radius: ${key}`, extensions);
|
|
680
|
-
}
|
|
681
|
-
return group;
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
/**
|
|
685
|
-
* Generate semantic opacity tokens with alias references to primitive opacity.
|
|
686
|
-
*/
|
|
687
|
-
private generateSemanticOpacityTokens(): DTCGGroup {
|
|
688
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
689
|
-
for (const [key, token] of Object.entries(semanticOpacityTokens)) {
|
|
690
|
-
const ref = token.primitiveReferences.value;
|
|
691
|
-
const aliasValue = this.config.resolveAliases
|
|
692
|
-
? this.resolvePrimitiveNumberAlias(ref, opacityTokens)
|
|
693
|
-
: `{opacity.${ref}}`;
|
|
694
|
-
|
|
695
|
-
const extensions: DesignerPunkExtensions = {
|
|
696
|
-
family: 'opacity',
|
|
697
|
-
primitiveRefs: { value: ref },
|
|
698
|
-
};
|
|
699
|
-
|
|
700
|
-
group[key] = this.toDTCGToken(aliasValue, 'number', token.description, extensions);
|
|
701
|
-
}
|
|
702
|
-
return group;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
/**
|
|
706
|
-
* Generate semantic blend tokens with alias references to primitive blend values.
|
|
707
|
-
* Includes blendType extension for blend direction.
|
|
708
|
-
*/
|
|
709
|
-
private generateSemanticBlendTokens(): DTCGGroup {
|
|
710
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
711
|
-
for (const [key, token] of Object.entries(semanticBlendTokens)) {
|
|
712
|
-
const ref = token.primitiveReferences.value;
|
|
713
|
-
const aliasValue = this.config.resolveAliases
|
|
714
|
-
? this.resolvePrimitiveNumberAlias(ref, blendTokens)
|
|
715
|
-
: `{blend.${ref}}`;
|
|
716
|
-
|
|
717
|
-
const extensions: DesignerPunkExtensions = {
|
|
718
|
-
family: 'blend',
|
|
719
|
-
primitiveRefs: { value: ref },
|
|
720
|
-
};
|
|
721
|
-
// Map BlendDirection to DesignerPunk blendType extension
|
|
722
|
-
if (token.direction === 'darker') {
|
|
723
|
-
extensions.blendType = 'darkerBlend';
|
|
724
|
-
} else if (token.direction === 'lighter') {
|
|
725
|
-
extensions.blendType = 'lighterBlend';
|
|
726
|
-
}
|
|
727
|
-
// Deprecation metadata (e.g. blend.disabledDesaturate) — lets includeDeprecated: false strip it
|
|
728
|
-
if (token.deprecated) {
|
|
729
|
-
extensions.deprecated = true;
|
|
730
|
-
if (token.deprecatedSince) extensions.deprecatedSince = token.deprecatedSince;
|
|
731
|
-
if (token.deprecatedReason) extensions.deprecatedReason = token.deprecatedReason;
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
group[key] = this.toDTCGToken(aliasValue, 'number', token.description, extensions);
|
|
735
|
-
}
|
|
736
|
-
return group;
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
/**
|
|
740
|
-
* Generate z-index tokens as DTCG number type.
|
|
741
|
-
* Z-index tokens are semantic-only (no primitive layer).
|
|
742
|
-
*/
|
|
743
|
-
private generateZIndexTokens(): DTCGGroup {
|
|
744
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
745
|
-
for (const [key, token] of Object.entries(zIndexTokens)) {
|
|
746
|
-
const extensions: DesignerPunkExtensions = {
|
|
747
|
-
family: 'zIndex',
|
|
748
|
-
platforms: {
|
|
749
|
-
web: { supported: true },
|
|
750
|
-
ios: { supported: true },
|
|
751
|
-
android: { supported: false, note: 'Use elevation tokens instead' },
|
|
752
|
-
},
|
|
753
|
-
};
|
|
754
|
-
|
|
755
|
-
group[key] = this.toDTCGToken(token.value, 'number', token.description, extensions);
|
|
756
|
-
}
|
|
757
|
-
return group;
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
/**
|
|
761
|
-
* Generate elevation tokens as DTCG number type with platform extensions.
|
|
762
|
-
* Elevation tokens are Android-only semantic tokens.
|
|
763
|
-
*/
|
|
764
|
-
private generateElevationTokens(): DTCGGroup {
|
|
765
|
-
const group: DTCGGroup = { $type: 'number' };
|
|
766
|
-
for (const [key, token] of Object.entries(elevationTokens)) {
|
|
767
|
-
const extensions: DesignerPunkExtensions = {
|
|
768
|
-
family: 'elevation',
|
|
769
|
-
platforms: {
|
|
770
|
-
web: { supported: false, note: 'Use z-index + shadow tokens instead' },
|
|
771
|
-
ios: { supported: false, note: 'Use z-index + shadow tokens instead' },
|
|
772
|
-
android: { supported: true, elevation: token.value },
|
|
773
|
-
},
|
|
774
|
-
};
|
|
775
|
-
|
|
776
|
-
group[key] = this.toDTCGToken(token.value, 'number', token.description, extensions);
|
|
777
|
-
}
|
|
778
|
-
return group;
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
/**
|
|
782
|
-
* Generate grid spacing tokens with alias references to primitive spacing.
|
|
783
|
-
*/
|
|
784
|
-
private generateGridSpacingTokens(): DTCGGroup {
|
|
785
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
786
|
-
for (const [key, token] of Object.entries(gridSpacingTokens)) {
|
|
787
|
-
const ref = token.primitiveReferences.spacing;
|
|
788
|
-
const aliasValue = this.config.resolveAliases
|
|
789
|
-
? this.resolvePrimitiveDimensionAlias(ref, spacingTokens)
|
|
790
|
-
: `{space.${ref}}`;
|
|
791
|
-
|
|
792
|
-
const extensions: DesignerPunkExtensions = {
|
|
793
|
-
family: 'gridSpacing',
|
|
794
|
-
primitiveRefs: { spacing: ref },
|
|
795
|
-
};
|
|
796
|
-
|
|
797
|
-
group[key] = this.toDTCGToken(aliasValue, 'dimension', token.description, extensions);
|
|
798
|
-
}
|
|
799
|
-
return group;
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
/**
|
|
803
|
-
* Generate icon tokens as DTCG dimension type.
|
|
804
|
-
* Icon sizes are calculated from fontSize × multiplier.
|
|
805
|
-
*/
|
|
806
|
-
private generateIconTokens(): DTCGGroup {
|
|
807
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
808
|
-
for (const [key, token] of Object.entries(iconTokens)) {
|
|
809
|
-
const refs = token.primitiveReferences;
|
|
810
|
-
|
|
811
|
-
// icon.strokeWidth references a borderWidth primitive
|
|
812
|
-
if (refs.value) {
|
|
813
|
-
const aliasValue = this.config.resolveAliases
|
|
814
|
-
? this.resolvePrimitiveDimensionAlias(refs.value, borderWidthTokens)
|
|
815
|
-
: `{borderWidth.${refs.value}}`;
|
|
816
|
-
|
|
817
|
-
const extensions: DesignerPunkExtensions = {
|
|
818
|
-
family: 'icon',
|
|
819
|
-
primitiveRefs: { value: refs.value },
|
|
820
|
-
};
|
|
821
|
-
|
|
822
|
-
group[key] = this.toDTCGToken(aliasValue, 'dimension', token.description, extensions);
|
|
823
|
-
} else if (refs.fontSize && refs.multiplier) {
|
|
824
|
-
// Icon size tokens — calculated value, include formula in extensions
|
|
825
|
-
const extensions: DesignerPunkExtensions = {
|
|
826
|
-
family: 'icon',
|
|
827
|
-
primitiveRefs: { fontSize: refs.fontSize, multiplier: refs.multiplier },
|
|
828
|
-
};
|
|
829
|
-
|
|
830
|
-
// For icon sizes, use the alias to fontSize as the value
|
|
831
|
-
const aliasValue = this.config.resolveAliases
|
|
832
|
-
? this.resolvePrimitiveDimensionAlias(refs.fontSize, fontSizeTokens)
|
|
833
|
-
: `{fontSize.${refs.fontSize}}`;
|
|
834
|
-
|
|
835
|
-
group[key] = this.toDTCGToken(aliasValue, 'dimension', token.description, extensions);
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
return group;
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
/**
|
|
842
|
-
* Generate accessibility tokens with alias references to their primitive sources.
|
|
843
|
-
*/
|
|
844
|
-
private generateAccessibilityTokens(): DTCGGroup {
|
|
845
|
-
const group: DTCGGroup = {};
|
|
846
|
-
for (const [key, token] of Object.entries(accessibilityTokens)) {
|
|
847
|
-
const ref = token.primitiveReferences.value;
|
|
848
|
-
|
|
849
|
-
// Determine DTCG type based on what the token references
|
|
850
|
-
let dtcgType: DTCGType;
|
|
851
|
-
let aliasValue: string;
|
|
852
|
-
if (key.includes('color')) {
|
|
853
|
-
dtcgType = 'color';
|
|
854
|
-
aliasValue = this.config.resolveAliases
|
|
855
|
-
? this.resolvePrimitiveColorAlias(ref)
|
|
856
|
-
: `{color.${ref}}`;
|
|
857
|
-
} else if (key.includes('width')) {
|
|
858
|
-
dtcgType = 'dimension';
|
|
859
|
-
aliasValue = this.config.resolveAliases
|
|
860
|
-
? this.resolvePrimitiveDimensionAlias(ref, borderWidthTokens)
|
|
861
|
-
: `{borderWidth.${ref}}`;
|
|
862
|
-
} else {
|
|
863
|
-
// offset references a spacing primitive
|
|
864
|
-
dtcgType = 'dimension';
|
|
865
|
-
aliasValue = this.config.resolveAliases
|
|
866
|
-
? this.resolvePrimitiveDimensionAlias(ref, spacingTokens)
|
|
867
|
-
: `{space.${ref}}`;
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
const extensions: DesignerPunkExtensions = {
|
|
871
|
-
family: 'accessibility',
|
|
872
|
-
primitiveRefs: { value: ref },
|
|
873
|
-
};
|
|
874
|
-
|
|
875
|
-
group[key] = this.toDTCGToken(aliasValue, dtcgType, token.description, extensions);
|
|
876
|
-
}
|
|
877
|
-
return group;
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
/**
|
|
881
|
-
* Generate progress color tokens with alias references to primitive colors.
|
|
882
|
-
*/
|
|
883
|
-
private generateProgressColorTokens(): DTCGGroup {
|
|
884
|
-
const group: DTCGGroup = { $type: 'color' };
|
|
885
|
-
for (const [key, token] of Object.entries(progressColorTokens)) {
|
|
886
|
-
const ref = token.primitiveReferences.value;
|
|
887
|
-
const aliasValue = this.config.resolveAliases
|
|
888
|
-
? this.resolvePrimitiveColorAlias(ref)
|
|
889
|
-
: `{color.${ref}}`;
|
|
890
|
-
|
|
891
|
-
const extensions: DesignerPunkExtensions = {
|
|
892
|
-
family: 'color',
|
|
893
|
-
primitiveRefs: { value: ref },
|
|
894
|
-
};
|
|
895
|
-
|
|
896
|
-
group[key] = this.toDTCGToken(aliasValue, 'color', token.description, extensions);
|
|
897
|
-
}
|
|
898
|
-
return group;
|
|
899
|
-
}
|
|
900
|
-
|
|
901
|
-
/**
|
|
902
|
-
* Resolve a primitive color alias to its actual value.
|
|
903
|
-
* Used when resolveAliases is true.
|
|
904
|
-
*/
|
|
905
|
-
private resolvePrimitiveColorAlias(primitiveName: string): string {
|
|
906
|
-
const primitiveToken = (colorTokens as Record<string, PrimitiveToken>)[primitiveName];
|
|
907
|
-
if (primitiveToken) {
|
|
908
|
-
return this.resolveColorValue(primitiveToken, primitiveName);
|
|
909
|
-
}
|
|
910
|
-
// Fallback: return alias syntax if primitive not found
|
|
911
|
-
return `{color.${primitiveName}}`;
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
/**
|
|
915
|
-
* Resolve a primitive dimension alias to its actual `{value}px` value.
|
|
916
|
-
* Used when resolveAliases is true.
|
|
917
|
-
*/
|
|
918
|
-
private resolvePrimitiveDimensionAlias(primitiveName: string, registry: Record<string, PrimitiveToken>): string {
|
|
919
|
-
const primitiveToken = registry[primitiveName];
|
|
920
|
-
if (primitiveToken) {
|
|
921
|
-
return `${primitiveToken.baseValue}px`;
|
|
922
|
-
}
|
|
923
|
-
// Fallback: return alias syntax if primitive not found
|
|
924
|
-
return `{${primitiveName}}`;
|
|
925
|
-
}
|
|
926
|
-
|
|
927
|
-
/**
|
|
928
|
-
* Resolve a primitive number alias to its actual numeric value.
|
|
929
|
-
* Used when resolveAliases is true for unitless tokens (opacity, blend, etc.).
|
|
930
|
-
*/
|
|
931
|
-
private resolvePrimitiveNumberAlias(primitiveName: string, registry: Record<string, PrimitiveToken>): number {
|
|
932
|
-
const primitiveToken = registry[primitiveName];
|
|
933
|
-
if (primitiveToken) {
|
|
934
|
-
return primitiveToken.baseValue;
|
|
935
|
-
}
|
|
936
|
-
return 0;
|
|
937
|
-
}
|
|
938
|
-
|
|
939
|
-
// Shadow token generation (Task 2.4)
|
|
940
|
-
|
|
941
|
-
/**
|
|
942
|
-
* Generate shadow composition tokens as DTCG shadow type.
|
|
943
|
-
*
|
|
944
|
-
* Each semantic shadow token references primitives for offsetX, offsetY, blur,
|
|
945
|
-
* opacity, and color. The generator resolves these primitives, merges color+opacity
|
|
946
|
-
* into a single RGBA value (shadow opacity replaces color alpha per Design Decision 3),
|
|
947
|
-
* and outputs a DTCG shadow composite value.
|
|
948
|
-
*
|
|
949
|
-
* @requirements 5.1-5.5
|
|
950
|
-
*/
|
|
951
|
-
private generateShadowTokens(): DTCGGroup {
|
|
952
|
-
const group: DTCGGroup = { $type: 'shadow' };
|
|
953
|
-
|
|
954
|
-
for (const [key, token] of Object.entries(semanticShadowTokens)) {
|
|
955
|
-
const refs = token.primitiveReferences;
|
|
956
|
-
|
|
957
|
-
// Resolve primitive values
|
|
958
|
-
const offsetXToken = this.resolveShadowPrimitive(refs.offsetX, shadowOffsetX);
|
|
959
|
-
const offsetYToken = this.resolveShadowPrimitive(refs.offsetY, shadowOffsetY);
|
|
960
|
-
const blurToken = this.resolveShadowPrimitive(refs.blur, blurTokens);
|
|
961
|
-
const opacityToken = this.resolveShadowPrimitive(refs.opacity, shadowOpacityTokens);
|
|
962
|
-
const colorToken = (colorTokens as Record<string, PrimitiveToken>)[refs.color];
|
|
963
|
-
|
|
964
|
-
if (!offsetXToken || !offsetYToken || !blurToken || !opacityToken || !colorToken) {
|
|
965
|
-
throw new Error(
|
|
966
|
-
`Shadow token "${key}" has unresolvable primitive references. ` +
|
|
967
|
-
`Missing: ${[
|
|
968
|
-
!offsetXToken && `offsetX(${refs.offsetX})`,
|
|
969
|
-
!offsetYToken && `offsetY(${refs.offsetY})`,
|
|
970
|
-
!blurToken && `blur(${refs.blur})`,
|
|
971
|
-
!opacityToken && `opacity(${refs.opacity})`,
|
|
972
|
-
!colorToken && `color(${refs.color})`,
|
|
973
|
-
].filter(Boolean).join(', ')}`
|
|
974
|
-
);
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
// Resolve color RGBA and merge with shadow opacity (replace alpha, don't multiply)
|
|
978
|
-
const colorRgba = this.resolveColorValue(colorToken, `shadow.${key}.color`);
|
|
979
|
-
const opacityValue = opacityToken.baseValue;
|
|
980
|
-
const mergedColor = this.mergeShadowColor(colorRgba, opacityValue, key);
|
|
981
|
-
|
|
982
|
-
// Build DTCG shadow composite value
|
|
983
|
-
const shadowValue = {
|
|
984
|
-
offsetX: `${offsetXToken.baseValue}px`,
|
|
985
|
-
offsetY: `${offsetYToken.baseValue}px`,
|
|
986
|
-
blur: `${blurToken.baseValue}px`,
|
|
987
|
-
spread: '0px',
|
|
988
|
-
color: mergedColor,
|
|
989
|
-
};
|
|
990
|
-
|
|
991
|
-
// Build extensions
|
|
992
|
-
const extensions: DesignerPunkExtensions = {
|
|
993
|
-
family: 'shadow',
|
|
994
|
-
primitiveRefs: {
|
|
995
|
-
offsetX: refs.offsetX,
|
|
996
|
-
offsetY: refs.offsetY,
|
|
997
|
-
blur: refs.blur,
|
|
998
|
-
opacity: refs.opacity,
|
|
999
|
-
color: refs.color,
|
|
1000
|
-
},
|
|
1001
|
-
};
|
|
1002
|
-
|
|
1003
|
-
// Include Android elevation
|
|
1004
|
-
if (token.platforms?.android?.elevation !== undefined) {
|
|
1005
|
-
extensions.platforms = {
|
|
1006
|
-
android: {
|
|
1007
|
-
supported: true,
|
|
1008
|
-
elevation: token.platforms.android.elevation,
|
|
1009
|
-
},
|
|
1010
|
-
};
|
|
1011
|
-
}
|
|
1012
|
-
|
|
1013
|
-
// Use dot-separated key for DTCG group (shadow.container → container)
|
|
1014
|
-
const dtcgKey = key.startsWith('shadow.') ? key.slice('shadow.'.length) : key;
|
|
1015
|
-
group[dtcgKey] = this.toDTCGToken(shadowValue, 'shadow', token.description, extensions);
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
|
-
return group;
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
/**
|
|
1022
|
-
* Resolve a shadow primitive token from its registry.
|
|
1023
|
-
* Handles dot-notation names (e.g., 'shadowOffsetX.000' → key '000').
|
|
1024
|
-
*/
|
|
1025
|
-
private resolveShadowPrimitive(
|
|
1026
|
-
tokenName: string,
|
|
1027
|
-
registry: Record<string, PrimitiveToken>
|
|
1028
|
-
): PrimitiveToken | null {
|
|
1029
|
-
// Try direct lookup first
|
|
1030
|
-
if (registry[tokenName]) {
|
|
1031
|
-
return registry[tokenName];
|
|
1032
|
-
}
|
|
1033
|
-
// Handle dot notation (e.g., 'shadowOffsetX.000' → '000')
|
|
1034
|
-
const dotIndex = tokenName.lastIndexOf('.');
|
|
1035
|
-
if (dotIndex !== -1) {
|
|
1036
|
-
const shortKey = tokenName.slice(dotIndex + 1);
|
|
1037
|
-
if (registry[shortKey]) {
|
|
1038
|
-
return registry[shortKey];
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
return null;
|
|
1042
|
-
}
|
|
1043
|
-
/**
|
|
1044
|
-
* Generate glow primitive tokens as individual DTCG tokens.
|
|
1045
|
-
*
|
|
1046
|
-
* Glow primitives (blur, opacity) are exported individually — composed glow tokens
|
|
1047
|
-
* are not yet implemented. Glows share offset primitives with shadows (shadowOffsetX,
|
|
1048
|
-
* shadowOffsetY) and use the same color primitives.
|
|
1049
|
-
*
|
|
1050
|
-
* All glow tokens include:
|
|
1051
|
-
* - `$extensions.designerpunk.glowType: "emission"` — identifies glow effect type
|
|
1052
|
-
* - `$extensions.designerpunk.status: "partial"` — composed glows not yet implemented
|
|
1053
|
-
*
|
|
1054
|
-
* @requirements 5.6, 5.7
|
|
1055
|
-
*/
|
|
1056
|
-
private generateGlowTokens(): DTCGGroup {
|
|
1057
|
-
const group: DTCGGroup = {
|
|
1058
|
-
$description: 'Glow effect primitives. Composed glows not yet implemented — glows share offset primitives with shadows (shadowOffsetX, shadowOffsetY).',
|
|
1059
|
-
};
|
|
1060
|
-
|
|
1061
|
-
// Glow blur tokens → DTCG dimension type (blur050–blur250 from unified blur family)
|
|
1062
|
-
const blur: DTCGGroup = { $type: 'dimension' };
|
|
1063
|
-
const glowBlurRange = ['blur050', 'blur100', 'blur150', 'blur200', 'blur250'];
|
|
1064
|
-
for (const key of glowBlurRange) {
|
|
1065
|
-
const token = blurTokens[key];
|
|
1066
|
-
if (!token) continue;
|
|
1067
|
-
const extensions = this.buildPrimitiveExtensions(token, 'glow', BLUR_BASE_VALUE);
|
|
1068
|
-
extensions.glowType = 'emission';
|
|
1069
|
-
extensions.status = 'partial';
|
|
1070
|
-
blur[key] = this.toDTCGToken(`${token.baseValue}px`, 'dimension', token.description, extensions);
|
|
1071
|
-
}
|
|
1072
|
-
group.blur = blur;
|
|
1073
|
-
|
|
1074
|
-
// Glow opacity tokens → DTCG number type
|
|
1075
|
-
const opacity: DTCGGroup = { $type: 'number' };
|
|
1076
|
-
for (const [key, token] of Object.entries(glowOpacity)) {
|
|
1077
|
-
const extensions = this.buildPrimitiveExtensions(token, 'glow', GLOW_OPACITY_BASE_VALUE);
|
|
1078
|
-
extensions.glowType = 'emission';
|
|
1079
|
-
extensions.status = 'partial';
|
|
1080
|
-
opacity[key] = this.toDTCGToken(token.baseValue, 'number', token.description, extensions);
|
|
1081
|
-
}
|
|
1082
|
-
group.opacity = opacity;
|
|
1083
|
-
|
|
1084
|
-
return group;
|
|
1085
|
-
}
|
|
1086
|
-
|
|
1087
|
-
/**
|
|
1088
|
-
* Generate typography composition tokens as DTCG typography type.
|
|
1089
|
-
*
|
|
1090
|
-
* Typography tokens compose primitive references (fontFamily, fontSize, fontWeight,
|
|
1091
|
-
* lineHeight, letterSpacing) into DTCG typography composite values using alias syntax.
|
|
1092
|
-
*
|
|
1093
|
-
* @requirements 6.1, 6.5
|
|
1094
|
-
*/
|
|
1095
|
-
private generateTypographyTokens(): DTCGGroup {
|
|
1096
|
-
const group: DTCGGroup = { $type: 'typography' };
|
|
1097
|
-
|
|
1098
|
-
for (const [key, token] of Object.entries(typographyTokens)) {
|
|
1099
|
-
const refs = token.primitiveReferences;
|
|
1100
|
-
|
|
1101
|
-
// Build DTCG typography composite value — resolve or alias based on config
|
|
1102
|
-
let typographyValue: Record<string, unknown>;
|
|
1103
|
-
if (this.config.resolveAliases) {
|
|
1104
|
-
const ffToken = (fontFamilyTokens as Record<string, PrimitiveToken>)[refs.fontFamily];
|
|
1105
|
-
const fontStack = ffToken ? String(ffToken.platforms.web.value) : refs.fontFamily;
|
|
1106
|
-
const families = fontStack.split(',').map(f => f.trim().replace(/^["']|["']$/g, ''));
|
|
1107
|
-
|
|
1108
|
-
typographyValue = {
|
|
1109
|
-
fontFamily: families,
|
|
1110
|
-
fontSize: this.resolvePrimitiveDimensionAlias(refs.fontSize, fontSizeTokens),
|
|
1111
|
-
fontWeight: (fontWeightTokens as Record<string, PrimitiveToken>)[refs.fontWeight]?.baseValue ?? refs.fontWeight,
|
|
1112
|
-
lineHeight: (lineHeightTokens as Record<string, PrimitiveToken>)[refs.lineHeight]?.baseValue ?? refs.lineHeight,
|
|
1113
|
-
letterSpacing: (letterSpacingTokens as Record<string, PrimitiveToken>)[refs.letterSpacing]
|
|
1114
|
-
? `${(letterSpacingTokens as Record<string, PrimitiveToken>)[refs.letterSpacing].baseValue}em`
|
|
1115
|
-
: refs.letterSpacing,
|
|
1116
|
-
};
|
|
1117
|
-
} else {
|
|
1118
|
-
typographyValue = {
|
|
1119
|
-
fontFamily: `{fontFamily.${refs.fontFamily}}`,
|
|
1120
|
-
fontSize: `{fontSize.${refs.fontSize}}`,
|
|
1121
|
-
fontWeight: `{fontWeight.${refs.fontWeight}}`,
|
|
1122
|
-
lineHeight: `{lineHeight.${refs.lineHeight}}`,
|
|
1123
|
-
letterSpacing: `{letterSpacing.${refs.letterSpacing}}`,
|
|
1124
|
-
};
|
|
1125
|
-
}
|
|
1126
|
-
|
|
1127
|
-
// Build extensions with primitive references
|
|
1128
|
-
const extensions: DesignerPunkExtensions = {
|
|
1129
|
-
family: 'typography',
|
|
1130
|
-
primitiveRefs: { ...refs },
|
|
1131
|
-
};
|
|
1132
|
-
|
|
1133
|
-
// Use dot-separated key for DTCG group (typography.bodyMd → bodyMd)
|
|
1134
|
-
const dtcgKey = key.startsWith('typography.') ? key.slice('typography.'.length) : key;
|
|
1135
|
-
group[dtcgKey] = this.toDTCGToken(typographyValue, 'typography', token.description, extensions);
|
|
1136
|
-
}
|
|
1137
|
-
|
|
1138
|
-
return group;
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
/**
|
|
1142
|
-
* Generate motion composition tokens as DTCG transition type.
|
|
1143
|
-
*
|
|
1144
|
-
* Motion tokens compose primitive duration and easing references into DTCG transition
|
|
1145
|
-
* composite values. Delay defaults to '0ms' when not defined. Scale is included in
|
|
1146
|
-
* extensions when present.
|
|
1147
|
-
*
|
|
1148
|
-
* @requirements 6.2, 6.3, 6.4, 6.5
|
|
1149
|
-
*/
|
|
1150
|
-
private generateMotionTokens(): DTCGGroup {
|
|
1151
|
-
const group: DTCGGroup = { $type: 'transition' };
|
|
1152
|
-
|
|
1153
|
-
for (const [key, token] of Object.entries(semanticMotionTokens)) {
|
|
1154
|
-
const refs = token.primitiveReferences;
|
|
1155
|
-
|
|
1156
|
-
// Build DTCG transition composite value — resolve or alias based on config
|
|
1157
|
-
let transitionValue: Record<string, unknown>;
|
|
1158
|
-
if (this.config.resolveAliases) {
|
|
1159
|
-
const durToken = (durationTokens as Record<string, PrimitiveToken>)[refs.duration];
|
|
1160
|
-
const easToken = (easingTokens as Record<string, PrimitiveToken>)[refs.easing];
|
|
1161
|
-
|
|
1162
|
-
// Resolve easing to cubicBezier array
|
|
1163
|
-
let timingFunction: unknown = refs.easing;
|
|
1164
|
-
if (easToken) {
|
|
1165
|
-
const bezierStr = String(easToken.platforms.web.value);
|
|
1166
|
-
const match = bezierStr.match(/cubic-bezier\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)/);
|
|
1167
|
-
if (match) {
|
|
1168
|
-
timingFunction = [parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4])];
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
|
-
transitionValue = {
|
|
1173
|
-
duration: durToken ? `${durToken.baseValue}ms` : `{duration.${refs.duration}}`,
|
|
1174
|
-
timingFunction,
|
|
1175
|
-
delay: '0ms',
|
|
1176
|
-
};
|
|
1177
|
-
} else {
|
|
1178
|
-
transitionValue = {
|
|
1179
|
-
duration: `{duration.${refs.duration}}`,
|
|
1180
|
-
timingFunction: `{easing.${refs.easing}}`,
|
|
1181
|
-
delay: '0ms',
|
|
1182
|
-
};
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
|
-
// Build extensions with primitive references
|
|
1186
|
-
const extensions: DesignerPunkExtensions = {
|
|
1187
|
-
family: 'motion',
|
|
1188
|
-
primitiveRefs: {
|
|
1189
|
-
duration: refs.duration,
|
|
1190
|
-
easing: refs.easing,
|
|
1191
|
-
},
|
|
1192
|
-
};
|
|
1193
|
-
|
|
1194
|
-
// Include scale in extensions when present (Requirement 6.4)
|
|
1195
|
-
if (refs.scale) {
|
|
1196
|
-
extensions.primitiveRefs!.scale = refs.scale;
|
|
1197
|
-
(extensions as Record<string, unknown>).scale = this.config.resolveAliases
|
|
1198
|
-
? (scaleTokens as Record<string, PrimitiveToken>)[refs.scale]?.baseValue ?? `{scale.${refs.scale}}`
|
|
1199
|
-
: `{scale.${refs.scale}}`;
|
|
1200
|
-
}
|
|
1201
|
-
|
|
1202
|
-
// Use dot-separated key for DTCG group (motion.floatLabel → floatLabel)
|
|
1203
|
-
const dtcgKey = key.startsWith('motion.') ? key.slice('motion.'.length) : key;
|
|
1204
|
-
group[dtcgKey] = this.toDTCGToken(transitionValue, 'transition', token.description, extensions);
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
return group;
|
|
1208
|
-
}
|
|
1209
|
-
|
|
1210
|
-
// ---------------------------------------------------------------------------
|
|
1211
|
-
// Shared helpers for primitive token generation
|
|
1212
|
-
// ---------------------------------------------------------------------------
|
|
1213
|
-
|
|
1214
|
-
/**
|
|
1215
|
-
* Generate a DTCG group of dimension tokens from a record of PrimitiveTokens.
|
|
1216
|
-
* Converts baseValue to `{value}px` format.
|
|
1217
|
-
*/
|
|
1218
|
-
private generateDimensionGroup(
|
|
1219
|
-
tokens: Record<string, PrimitiveToken>,
|
|
1220
|
-
family: string,
|
|
1221
|
-
familyBase?: number
|
|
1222
|
-
): DTCGGroup {
|
|
1223
|
-
const group: DTCGGroup = { $type: 'dimension' };
|
|
1224
|
-
for (const [key, token] of Object.entries(tokens)) {
|
|
1225
|
-
const extensions = this.buildPrimitiveExtensions(token, family, familyBase);
|
|
1226
|
-
group[key] = this.toDTCGToken(`${token.baseValue}px`, 'dimension', token.description, extensions);
|
|
1227
|
-
}
|
|
1228
|
-
return group;
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
|
-
/**
|
|
1232
|
-
* Resolve a color token's RGBA value from its mode/theme structure.
|
|
1233
|
-
* Uses light.base as the default resolved value for DTCG output.
|
|
1234
|
-
*
|
|
1235
|
-
* @param token - The primitive color token to resolve
|
|
1236
|
-
* @param tokenName - Optional token name for error messages
|
|
1237
|
-
* @returns Resolved color string (e.g., "rgba(255, 0, 0, 1)")
|
|
1238
|
-
* @throws Error if the resolved color value is not a valid color format
|
|
1239
|
-
*/
|
|
1240
|
-
private resolveColorValue(token: PrimitiveToken, tokenName?: string): string {
|
|
1241
|
-
const webValue = token.platforms.web.value;
|
|
1242
|
-
let resolved: string;
|
|
1243
|
-
if (typeof webValue === 'string') {
|
|
1244
|
-
resolved = webValue;
|
|
1245
|
-
} else {
|
|
1246
|
-
// ColorTokenValue structure: { light: { base, wcag }, dark: { base, wcag } }
|
|
1247
|
-
const colorVal = webValue as ColorTokenValue;
|
|
1248
|
-
resolved = colorVal.light.base;
|
|
1249
|
-
}
|
|
1250
|
-
|
|
1251
|
-
// Validate the resolved color is a recognizable format
|
|
1252
|
-
if (!resolved || typeof resolved !== 'string') {
|
|
1253
|
-
const name = tokenName || token.name || 'unknown';
|
|
1254
|
-
throw new Error(
|
|
1255
|
-
`Invalid token value for "${name}": ${String(resolved)}. Expected valid color format (hex, rgb, rgba).`
|
|
1256
|
-
);
|
|
1257
|
-
}
|
|
1258
|
-
|
|
1259
|
-
const isValidColor =
|
|
1260
|
-
/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(resolved) ||
|
|
1261
|
-
/^rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*(,\s*[\d.]+\s*)?\)$/.test(resolved);
|
|
1262
|
-
|
|
1263
|
-
if (!isValidColor) {
|
|
1264
|
-
const name = tokenName || token.name || 'unknown';
|
|
1265
|
-
throw new Error(
|
|
1266
|
-
`Invalid token value for "${name}": ${resolved}. Expected valid color format (hex, rgb, rgba).`
|
|
1267
|
-
);
|
|
1268
|
-
}
|
|
1269
|
-
|
|
1270
|
-
return resolved;
|
|
1271
|
-
}
|
|
1272
|
-
|
|
1273
|
-
/**
|
|
1274
|
-
* Build DesignerPunk extension metadata for a primitive token.
|
|
1275
|
-
* Includes formula, family, and baseValue when includeExtensions is true.
|
|
1276
|
-
*/
|
|
1277
|
-
private buildPrimitiveExtensions(
|
|
1278
|
-
token: PrimitiveToken,
|
|
1279
|
-
family: string,
|
|
1280
|
-
familyBase?: number
|
|
1281
|
-
): DesignerPunkExtensions {
|
|
1282
|
-
const ext: DesignerPunkExtensions = {
|
|
1283
|
-
formula: token.mathematicalRelationship,
|
|
1284
|
-
family,
|
|
1285
|
-
};
|
|
1286
|
-
if (familyBase !== undefined && familyBase !== 0) {
|
|
1287
|
-
ext.baseValue = familyBase;
|
|
1288
|
-
}
|
|
1289
|
-
return ext;
|
|
1290
|
-
}
|
|
1291
|
-
|
|
1292
|
-
/**
|
|
1293
|
-
* Merge shadow color and opacity into a single RGBA value.
|
|
1294
|
-
*
|
|
1295
|
-
* Replaces the color's alpha channel with the shadow's opacity value
|
|
1296
|
-
* (does NOT multiply). Shadow opacity is authoritative per Design Decision 3.
|
|
1297
|
-
*
|
|
1298
|
-
* @param colorRgba - Color in rgba(r, g, b, a) format
|
|
1299
|
-
* @param opacity - Shadow opacity value (0–1)
|
|
1300
|
-
* @param shadowName - Optional shadow token name for error messages
|
|
1301
|
-
* @returns Merged rgba string with shadow opacity as alpha
|
|
1302
|
-
* @throws Error if colorRgba is not in valid rgba format
|
|
1303
|
-
*/
|
|
1304
|
-
mergeShadowColor(colorRgba: string, opacity: number, shadowName?: string): string {
|
|
1305
|
-
const match = colorRgba.match(/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*[\d.eE+-]+\s*)?\)$/);
|
|
1306
|
-
if (!match) {
|
|
1307
|
-
const context = shadowName ? ` for "${shadowName}"` : '';
|
|
1308
|
-
throw new Error(
|
|
1309
|
-
`Shadow color merge failed${context}: ${colorRgba}. Expected rgba(r, g, b, a) format.`
|
|
1310
|
-
);
|
|
1311
|
-
}
|
|
1312
|
-
const [, r, g, b] = match;
|
|
1313
|
-
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
1314
|
-
}
|
|
1315
|
-
|
|
1316
|
-
/**
|
|
1317
|
-
* Convert a Rosetta primitive token to a DTCG token with optional extensions.
|
|
1318
|
-
*
|
|
1319
|
-
* @param value - The token value in DTCG format
|
|
1320
|
-
* @param type - The DTCG type for this token
|
|
1321
|
-
* @param description - Optional token description
|
|
1322
|
-
* @param extensions - Optional DesignerPunk extension metadata
|
|
1323
|
-
* @returns A DTCGToken object
|
|
1324
|
-
* @throws Error if the type is not a valid DTCG type
|
|
1325
|
-
*/
|
|
1326
|
-
toDTCGToken(
|
|
1327
|
-
value: unknown,
|
|
1328
|
-
type: DTCGType,
|
|
1329
|
-
description?: string,
|
|
1330
|
-
extensions?: DesignerPunkExtensions
|
|
1331
|
-
): DTCGToken {
|
|
1332
|
-
// Validate DTCG type
|
|
1333
|
-
if (!VALID_DTCG_TYPES.has(type)) {
|
|
1334
|
-
throw new Error(
|
|
1335
|
-
`Invalid token type: "${type}". No DTCG mapping exists. ` +
|
|
1336
|
-
`Valid types: ${Array.from(VALID_DTCG_TYPES).join(', ')}.`
|
|
1337
|
-
);
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
|
-
const token: DTCGToken = {
|
|
1341
|
-
$value: value,
|
|
1342
|
-
$type: type,
|
|
1343
|
-
};
|
|
1344
|
-
|
|
1345
|
-
if (description) {
|
|
1346
|
-
token.$description = description;
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
if (this.config.includeExtensions && extensions && Object.keys(extensions).length > 0) {
|
|
1350
|
-
token.$extensions = { designerpunk: extensions };
|
|
1351
|
-
}
|
|
1352
|
-
|
|
1353
|
-
return token;
|
|
1354
|
-
}
|
|
1355
|
-
}
|