@3fn/core 13.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/agents/ada-prompt.md +265 -0
- package/.kiro/agents/ada.json +87 -0
- package/.kiro/agents/data-prompt.md +315 -0
- package/.kiro/agents/data.json +58 -0
- package/.kiro/agents/kenya-prompt.md +298 -0
- package/.kiro/agents/kenya.json +54 -0
- package/.kiro/agents/leonardo-prompt.md +417 -0
- package/.kiro/agents/leonardo.json +55 -0
- package/.kiro/agents/lina-prompt.md +385 -0
- package/.kiro/agents/lina.json +77 -0
- package/.kiro/agents/sparky-prompt.md +295 -0
- package/.kiro/agents/sparky.json +56 -0
- package/.kiro/agents/stacy-prompt.md +278 -0
- package/.kiro/agents/stacy.json +48 -0
- package/.kiro/agents/thurgood-prompt.md +407 -0
- package/.kiro/agents/thurgood.json +51 -0
- package/.kiro/steering/AI-Collaboration-Principles.md +105 -0
- package/.kiro/steering/Agent-Directory.md +141 -0
- package/.kiro/steering/Civitas-System-Overview.md +134 -0
- package/.kiro/steering/DesignerPunk-Systems-Overview.md +318 -0
- package/.kiro/steering/Spec-Feedback-Protocol.md +242 -0
- package/.kiro/steering/Task-Completion-Protocol.md +73 -0
- package/.kiro/steering/core-goals.md +91 -0
- package/.kiro/steering/personal-note.md +35 -0
- package/.kiro/steering/start-up-tasks.md +114 -0
- package/LICENSE +201 -0
- package/README.md +184 -0
- package/application-mcp-server/package.json +34 -0
- package/application-mcp-server/src/__tests__/__mocks__/mcp-sdk-server.js +25 -0
- package/application-mcp-server/src/__tests__/__mocks__/mcp-sdk-stdio.js +11 -0
- package/application-mcp-server/src/__tests__/__mocks__/mcp-sdk-types.js +14 -0
- package/application-mcp-server/src/__tests__/tool-boundary.contract.test.ts +1086 -0
- package/application-mcp-server/src/index.ts +607 -0
- package/application-mcp-server/src/indexer/ComponentIndexer.ts +631 -0
- package/application-mcp-server/src/indexer/CompositionChecker.ts +109 -0
- package/application-mcp-server/src/indexer/ContractTokenDeriver.ts +68 -0
- package/application-mcp-server/src/indexer/DesignPhilosophyIndexer.ts +114 -0
- package/application-mcp-server/src/indexer/FamilyGuidanceIndexer.ts +248 -0
- package/application-mcp-server/src/indexer/InheritanceResolver.ts +154 -0
- package/application-mcp-server/src/indexer/LayoutTemplateIndexer.ts +254 -0
- package/application-mcp-server/src/indexer/ModeClassifier.ts +102 -0
- package/application-mcp-server/src/indexer/PatternIndexer.ts +195 -0
- package/application-mcp-server/src/indexer/TokenIndexer.ts +210 -0
- package/application-mcp-server/src/indexer/TokenRefResolver.ts +187 -0
- package/application-mcp-server/src/indexer/__tests__/ComponentIndexer.test.ts +141 -0
- package/application-mcp-server/src/indexer/__tests__/CompositionChecker.test.ts +148 -0
- package/application-mcp-server/src/indexer/__tests__/ContractTokenDeriver.test.ts +111 -0
- package/application-mcp-server/src/indexer/__tests__/CoverageDrift.test.ts +53 -0
- package/application-mcp-server/src/indexer/__tests__/DesignPhilosophyIndexer.test.ts +102 -0
- package/application-mcp-server/src/indexer/__tests__/FamilyGuidanceIndexer.test.ts +316 -0
- package/application-mcp-server/src/indexer/__tests__/FamilyNameValidation.test.ts +98 -0
- package/application-mcp-server/src/indexer/__tests__/GuidanceCompleteness.test.ts +63 -0
- package/application-mcp-server/src/indexer/__tests__/HealthStates.test.ts +129 -0
- package/application-mcp-server/src/indexer/__tests__/InheritanceResolver.test.ts +145 -0
- package/application-mcp-server/src/indexer/__tests__/LayoutTemplateIndexer.test.ts +378 -0
- package/application-mcp-server/src/indexer/__tests__/PatternIndexer.test.ts +323 -0
- package/application-mcp-server/src/indexer/__tests__/ReadinessCompliance.test.ts +212 -0
- package/application-mcp-server/src/indexer/__tests__/TokenIndexer.test.ts +131 -0
- package/application-mcp-server/src/indexer/__tests__/fixtures/design-philosophy.yaml +40 -0
- package/application-mcp-server/src/indexer/__tests__/parsers.test.ts +102 -0
- package/application-mcp-server/src/indexer/parsers.ts +284 -0
- package/application-mcp-server/src/models/index.ts +449 -0
- package/application-mcp-server/src/query/QueryEngine.ts +477 -0
- package/application-mcp-server/src/query/__tests__/QueryEngine.test.ts +282 -0
- package/application-mcp-server/src/query/__tests__/deriveMatchConfidence.test.ts +83 -0
- package/application-mcp-server/src/staleness/StalenessGate.ts +112 -0
- package/application-mcp-server/src/staleness/__tests__/GateIntegration.test.ts +141 -0
- package/application-mcp-server/src/staleness/__tests__/StalenessGate.test.ts +214 -0
- package/application-mcp-server/src/validation/AccessibilityChecker.ts +72 -0
- package/application-mcp-server/src/validation/AssemblyValidator.ts +77 -0
- package/application-mcp-server/src/validation/__tests__/AccessibilityChecker.test.ts +105 -0
- package/application-mcp-server/src/validation/__tests__/AssemblyValidator.test.ts +140 -0
- package/application-mcp-server/src/watcher/FileWatcher.ts +104 -0
- package/application-mcp-server/src/watcher/__tests__/FileWatcher.test.ts +59 -0
- package/application-mcp-server/tsconfig.json +24 -0
- package/bin/designerpunk.js +45 -0
- package/design-language/design-philosophy.yaml +139 -0
- package/designerpunk.config.ts +27 -0
- package/dist/ComponentTokens.android.kt +105 -0
- package/dist/ComponentTokens.ios.swift +105 -0
- package/dist/ComponentTokens.web.css +92 -0
- package/dist/DesignTokens.android.kt +696 -0
- package/dist/DesignTokens.dtcg.json +5759 -0
- package/dist/DesignTokens.figma.json +5053 -0
- package/dist/DesignTokens.ios.swift +696 -0
- package/dist/DesignTokens.web.css +940 -0
- package/dist/TokenEngine.d.ts +200 -0
- package/dist/TokenEngine.js +480 -0
- package/dist/__tests__/fixtures/acknowledged-differences.json +127 -0
- package/dist/analytics/PrimitiveTokenFallbackTracker.d.ts +91 -0
- package/dist/analytics/PrimitiveTokenFallbackTracker.js +168 -0
- package/dist/analytics/SemanticTokenUsageTracker.d.ts +79 -0
- package/dist/analytics/SemanticTokenUsageTracker.js +142 -0
- package/dist/analytics/StrategicFlexibilityTracker.d.ts +99 -0
- package/dist/analytics/StrategicFlexibilityTracker.js +165 -0
- package/dist/analytics/TokenUsageTracker.d.ts +87 -0
- package/dist/analytics/TokenUsageTracker.js +128 -0
- package/dist/analytics/UsagePatternAnalyzer.d.ts +64 -0
- package/dist/analytics/UsagePatternAnalyzer.js +126 -0
- package/dist/analytics/index.d.ts +15 -0
- package/dist/analytics/index.js +27 -0
- package/dist/android/DesignTokens.android.kt +695 -0
- package/dist/blend/BlendCalculator.d.ts +65 -0
- package/dist/blend/BlendCalculator.js +98 -0
- package/dist/blend/ColorSpaceUtils.d.ts +164 -0
- package/dist/blend/ColorSpaceUtils.js +292 -0
- package/dist/blend/OklchBlendCalculator.d.ts +64 -0
- package/dist/blend/OklchBlendCalculator.js +77 -0
- package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +202 -0
- package/dist/blend/ThemeAwareBlendUtilities.web.js +212 -0
- package/dist/blend/index.d.ts +12 -0
- package/dist/blend/index.js +30 -0
- package/dist/browser/demo-styles.css +492 -0
- package/dist/browser/designerpunk.esm.js +18472 -0
- package/dist/browser/designerpunk.esm.min.js +705 -0
- package/dist/browser/designerpunk.umd.js +18540 -0
- package/dist/browser/designerpunk.umd.min.js +705 -0
- package/dist/browser/tokens.css +1028 -0
- package/dist/browser-entry.d.ts +82 -0
- package/dist/browser-entry.js +297 -0
- package/dist/build/BuildOrchestrator.d.ts +89 -0
- package/dist/build/BuildOrchestrator.js +583 -0
- package/dist/build/errors/BuildError.d.ts +87 -0
- package/dist/build/errors/BuildError.js +67 -0
- package/dist/build/errors/ErrorDocumentation.d.ts +66 -0
- package/dist/build/errors/ErrorDocumentation.js +557 -0
- package/dist/build/errors/ErrorHandler.d.ts +120 -0
- package/dist/build/errors/ErrorHandler.js +299 -0
- package/dist/build/errors/ErrorReporter.d.ts +102 -0
- package/dist/build/errors/ErrorReporter.js +397 -0
- package/dist/build/errors/PlatformGenerationError.d.ts +73 -0
- package/dist/build/errors/PlatformGenerationError.js +163 -0
- package/dist/build/errors/RecoveryStrategy.d.ts +145 -0
- package/dist/build/errors/RecoveryStrategy.js +297 -0
- package/dist/build/errors/TokenGenerationError.d.ts +65 -0
- package/dist/build/errors/TokenGenerationError.js +161 -0
- package/dist/build/errors/TokenReferenceError.d.ts +65 -0
- package/dist/build/errors/TokenReferenceError.js +168 -0
- package/dist/build/errors/index.d.ts +18 -0
- package/dist/build/errors/index.js +63 -0
- package/dist/build/index.d.ts +19 -0
- package/dist/build/index.js +26 -0
- package/dist/build/orchestration/IncrementalBuilder.d.ts +180 -0
- package/dist/build/orchestration/IncrementalBuilder.js +393 -0
- package/dist/build/orchestration/ParallelExecutor.d.ts +87 -0
- package/dist/build/orchestration/ParallelExecutor.js +242 -0
- package/dist/build/orchestration/ProgressTracker.d.ts +181 -0
- package/dist/build/orchestration/ProgressTracker.js +371 -0
- package/dist/build/orchestration/SequentialExecutor.d.ts +96 -0
- package/dist/build/orchestration/SequentialExecutor.js +211 -0
- package/dist/build/orchestration/index.d.ts +10 -0
- package/dist/build/orchestration/index.js +17 -0
- package/dist/build/platforms/AndroidBuilder.d.ts +288 -0
- package/dist/build/platforms/AndroidBuilder.js +1134 -0
- package/dist/build/platforms/AndroidShadowGenerator.d.ts +101 -0
- package/dist/build/platforms/AndroidShadowGenerator.js +298 -0
- package/dist/build/platforms/IOSShadowGenerator.d.ts +84 -0
- package/dist/build/platforms/IOSShadowGenerator.js +254 -0
- package/dist/build/platforms/PlatformBuilder.d.ts +111 -0
- package/dist/build/platforms/PlatformBuilder.js +10 -0
- package/dist/build/platforms/WebBuilder.d.ts +294 -0
- package/dist/build/platforms/WebBuilder.js +1133 -0
- package/dist/build/platforms/WebShadowGenerator.d.ts +78 -0
- package/dist/build/platforms/WebShadowGenerator.js +226 -0
- package/dist/build/platforms/iOSBuilder.d.ts +352 -0
- package/dist/build/platforms/iOSBuilder.js +1461 -0
- package/dist/build/platforms/index.d.ts +8 -0
- package/dist/build/platforms/index.js +24 -0
- package/dist/build/product/ProductTokenGenerator.d.ts +62 -0
- package/dist/build/product/ProductTokenGenerator.js +141 -0
- package/dist/build/product/TokenIndexReader.d.ts +28 -0
- package/dist/build/product/TokenIndexReader.js +101 -0
- package/dist/build/product/emitters/KotlinEmitter.d.ts +8 -0
- package/dist/build/product/emitters/KotlinEmitter.js +80 -0
- package/dist/build/product/emitters/SwiftEmitter.d.ts +8 -0
- package/dist/build/product/emitters/SwiftEmitter.js +87 -0
- package/dist/build/product/emitters/WebEmitter.d.ts +8 -0
- package/dist/build/product/emitters/WebEmitter.js +66 -0
- package/dist/build/tokens/ComponentToken.d.ts +239 -0
- package/dist/build/tokens/ComponentToken.js +51 -0
- package/dist/build/tokens/ComponentTokenGenerator.d.ts +117 -0
- package/dist/build/tokens/ComponentTokenGenerator.js +324 -0
- package/dist/build/tokens/PlatformTokens.d.ts +144 -0
- package/dist/build/tokens/PlatformTokens.js +9 -0
- package/dist/build/tokens/TokenIntegrator.d.ts +156 -0
- package/dist/build/tokens/TokenIntegrator.js +259 -0
- package/dist/build/tokens/TokenSelection.d.ts +105 -0
- package/dist/build/tokens/TokenSelection.js +9 -0
- package/dist/build/tokens/TokenSelector.d.ts +73 -0
- package/dist/build/tokens/TokenSelector.js +336 -0
- package/dist/build/tokens/UnitConverter.d.ts +126 -0
- package/dist/build/tokens/UnitConverter.js +222 -0
- package/dist/build/tokens/defineComponentTokens.d.ts +186 -0
- package/dist/build/tokens/defineComponentTokens.js +193 -0
- package/dist/build/tokens/index.d.ts +18 -0
- package/dist/build/tokens/index.js +23 -0
- package/dist/build/tokens/types.d.ts +24 -0
- package/dist/build/tokens/types.js +8 -0
- package/dist/build/types/BuildConfig.d.ts +92 -0
- package/dist/build/types/BuildConfig.js +28 -0
- package/dist/build/types/BuildOrchestrator.d.ts +95 -0
- package/dist/build/types/BuildOrchestrator.js +9 -0
- package/dist/build/types/BuildResult.d.ts +91 -0
- package/dist/build/types/BuildResult.js +10 -0
- package/dist/build/types/Platform.d.ts +25 -0
- package/dist/build/types/Platform.js +39 -0
- package/dist/build/types/index.d.ts +14 -0
- package/dist/build/types/index.js +15 -0
- package/dist/build/validation/AndroidBuildValidator.d.ts +77 -0
- package/dist/build/validation/AndroidBuildValidator.js +562 -0
- package/dist/build/validation/CrossPlatformValidationReporter.d.ts +295 -0
- package/dist/build/validation/CrossPlatformValidationReporter.js +817 -0
- package/dist/build/validation/InterfaceContractValidator.d.ts +102 -0
- package/dist/build/validation/InterfaceContractValidator.js +303 -0
- package/dist/build/validation/InterfaceValidator.d.ts +48 -0
- package/dist/build/validation/InterfaceValidator.js +214 -0
- package/dist/build/validation/MathematicalConsistencyValidator.d.ts +194 -0
- package/dist/build/validation/MathematicalConsistencyValidator.js +656 -0
- package/dist/build/validation/MethodSignatureValidator.d.ts +72 -0
- package/dist/build/validation/MethodSignatureValidator.js +283 -0
- package/dist/build/validation/PropertyTypeValidator.d.ts +73 -0
- package/dist/build/validation/PropertyTypeValidator.js +241 -0
- package/dist/build/validation/TokenComparator.d.ts +221 -0
- package/dist/build/validation/TokenComparator.js +478 -0
- package/dist/build/validation/ValidationReporter.d.ts +173 -0
- package/dist/build/validation/ValidationReporter.example.d.ts +17 -0
- package/dist/build/validation/ValidationReporter.example.js +259 -0
- package/dist/build/validation/ValidationReporter.js +517 -0
- package/dist/build/validation/WebBuildValidator.d.ts +112 -0
- package/dist/build/validation/WebBuildValidator.js +470 -0
- package/dist/build/validation/iOSBuildValidator.d.ts +155 -0
- package/dist/build/validation/iOSBuildValidator.js +670 -0
- package/dist/build/validation/index.d.ts +26 -0
- package/dist/build/validation/index.js +34 -0
- package/dist/build/validation/types/InterfaceDefinition.d.ts +74 -0
- package/dist/build/validation/types/InterfaceDefinition.js +9 -0
- package/dist/build/validation/types/ValidationResult.d.ts +74 -0
- package/dist/build/validation/types/ValidationResult.js +9 -0
- package/dist/build/workflow/BuildMode.d.ts +147 -0
- package/dist/build/workflow/BuildMode.js +205 -0
- package/dist/build/workflow/CICDIntegration.d.ts +179 -0
- package/dist/build/workflow/CICDIntegration.js +347 -0
- package/dist/build/workflow/ConfigHelpers.d.ts +139 -0
- package/dist/build/workflow/ConfigHelpers.example.d.ts +8 -0
- package/dist/build/workflow/ConfigHelpers.example.js +269 -0
- package/dist/build/workflow/ConfigHelpers.js +714 -0
- package/dist/build/workflow/SourceMapGenerator.d.ts +89 -0
- package/dist/build/workflow/SourceMapGenerator.js +268 -0
- package/dist/build/workflow/index.d.ts +13 -0
- package/dist/build/workflow/index.js +23 -0
- package/dist/cli/designerpunk.d.ts +20 -0
- package/dist/cli/designerpunk.js +416 -0
- package/dist/cli/figma-extract.d.ts +64 -0
- package/dist/cli/figma-extract.js +338 -0
- package/dist/cli/figma-push.d.ts +63 -0
- package/dist/cli/figma-push.js +292 -0
- package/dist/cli/generateProductTokens.d.ts +11 -0
- package/dist/cli/generateProductTokens.js +96 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.js +385 -0
- package/dist/cli/loadComponentTokens.d.ts +46 -0
- package/dist/cli/loadComponentTokens.js +163 -0
- package/dist/cli/resolveTokens.d.ts +40 -0
- package/dist/cli/resolveTokens.js +94 -0
- package/dist/cli/shared/mcpDataRoots.d.ts +38 -0
- package/dist/cli/shared/mcpDataRoots.js +75 -0
- package/dist/cli/shared/resolvePackageRoot.d.ts +2 -0
- package/dist/cli/shared/resolvePackageRoot.js +50 -0
- package/dist/cli/shared/transforms.d.ts +13 -0
- package/dist/cli/shared/transforms.js +18 -0
- package/dist/cli/staleness.d.ts +23 -0
- package/dist/cli/staleness.js +113 -0
- package/dist/cli/sync/Applier.d.ts +32 -0
- package/dist/cli/sync/Applier.js +127 -0
- package/dist/cli/sync/Classifier.d.ts +27 -0
- package/dist/cli/sync/Classifier.js +103 -0
- package/dist/cli/sync/FileScanner.d.ts +19 -0
- package/dist/cli/sync/FileScanner.js +82 -0
- package/dist/cli/sync/IgnoreFilter.d.ts +10 -0
- package/dist/cli/sync/IgnoreFilter.js +70 -0
- package/dist/cli/sync/Manifest.d.ts +24 -0
- package/dist/cli/sync/Manifest.js +85 -0
- package/dist/cli/sync/PackageResolver.d.ts +14 -0
- package/dist/cli/sync/PackageResolver.js +67 -0
- package/dist/cli/sync/Prompter.d.ts +22 -0
- package/dist/cli/sync/Prompter.js +169 -0
- package/dist/cli/sync/Reporter.d.ts +11 -0
- package/dist/cli/sync/Reporter.js +66 -0
- package/dist/cli/sync/SteeringDirCheck.d.ts +50 -0
- package/dist/cli/sync/SteeringDirCheck.js +174 -0
- package/dist/cli/sync/index.d.ts +14 -0
- package/dist/cli/sync/index.js +94 -0
- package/dist/cli/validate.d.ts +18 -0
- package/dist/cli/validate.js +147 -0
- package/dist/cli/validateProductTokens.d.ts +10 -0
- package/dist/cli/validateProductTokens.js +84 -0
- package/dist/color/OklchConverter.d.ts +50 -0
- package/dist/color/OklchConverter.js +242 -0
- package/dist/color/OklchValidator.d.ts +49 -0
- package/dist/color/OklchValidator.js +147 -0
- package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +327 -0
- package/dist/components/core/Avatar-Base/avatar.tokens.js +344 -0
- package/dist/components/core/Avatar-Base/index.d.ts +12 -0
- package/dist/components/core/Avatar-Base/index.js +24 -0
- package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.d.ts +315 -0
- package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.js +803 -0
- package/dist/components/core/Avatar-Base/types.d.ts +72 -0
- package/dist/components/core/Avatar-Base/types.js +21 -0
- package/dist/components/core/Badge-Count-Base/index.d.ts +24 -0
- package/dist/components/core/Badge-Count-Base/index.js +36 -0
- package/dist/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.d.ts +192 -0
- package/dist/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.js +337 -0
- package/dist/components/core/Badge-Count-Base/types.d.ts +137 -0
- package/dist/components/core/Badge-Count-Base/types.js +67 -0
- package/dist/components/core/Badge-Count-Notification/index.d.ts +33 -0
- package/dist/components/core/Badge-Count-Notification/index.js +56 -0
- package/dist/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.d.ts +179 -0
- package/dist/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.js +365 -0
- package/dist/components/core/Badge-Count-Notification/tokens.d.ts +118 -0
- package/dist/components/core/Badge-Count-Notification/tokens.js +120 -0
- package/dist/components/core/Badge-Count-Notification/types.d.ts +112 -0
- package/dist/components/core/Badge-Count-Notification/types.js +33 -0
- package/dist/components/core/Badge-Label-Base/index.d.ts +24 -0
- package/dist/components/core/Badge-Label-Base/index.js +39 -0
- package/dist/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.d.ts +178 -0
- package/dist/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.js +315 -0
- package/dist/components/core/Badge-Label-Base/tokens.d.ts +69 -0
- package/dist/components/core/Badge-Label-Base/tokens.js +81 -0
- package/dist/components/core/Badge-Label-Base/types.d.ts +139 -0
- package/dist/components/core/Badge-Label-Base/types.js +61 -0
- package/dist/components/core/Button-CTA/Button-CTA.tokens.d.ts +73 -0
- package/dist/components/core/Button-CTA/Button-CTA.tokens.js +75 -0
- package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +146 -0
- package/dist/components/core/Button-CTA/examples/BasicUsage.js +231 -0
- package/dist/components/core/Button-CTA/index.d.ts +14 -0
- package/dist/components/core/Button-CTA/index.js +20 -0
- package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +273 -0
- package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +635 -0
- package/dist/components/core/Button-CTA/types.d.ts +247 -0
- package/dist/components/core/Button-CTA/types.js +14 -0
- package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +171 -0
- package/dist/components/core/Button-Icon/buttonIcon.tokens.js +188 -0
- package/dist/components/core/Button-Icon/platforms/web/ButtonIcon.web.d.ts +267 -0
- package/dist/components/core/Button-Icon/platforms/web/ButtonIcon.web.js +570 -0
- package/dist/components/core/Button-Icon/types.d.ts +177 -0
- package/dist/components/core/Button-Icon/types.js +35 -0
- package/dist/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.d.ts +96 -0
- package/dist/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.js +107 -0
- package/dist/components/core/Button-VerticalList-Item/index.d.ts +19 -0
- package/dist/components/core/Button-VerticalList-Item/index.js +39 -0
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.d.ts +378 -0
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.js +916 -0
- package/dist/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.d.ts +227 -0
- package/dist/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.js +370 -0
- package/dist/components/core/Button-VerticalList-Item/types.d.ts +301 -0
- package/dist/components/core/Button-VerticalList-Item/types.js +16 -0
- package/dist/components/core/Button-VerticalList-Set/index.d.ts +16 -0
- package/dist/components/core/Button-VerticalList-Set/index.js +26 -0
- package/dist/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.d.ts +492 -0
- package/dist/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.js +1263 -0
- package/dist/components/core/Button-VerticalList-Set/types.d.ts +586 -0
- package/dist/components/core/Button-VerticalList-Set/types.js +375 -0
- package/dist/components/core/Chip-Base/index.d.ts +28 -0
- package/dist/components/core/Chip-Base/index.js +40 -0
- package/dist/components/core/Chip-Base/platforms/web/ChipBase.web.d.ts +214 -0
- package/dist/components/core/Chip-Base/platforms/web/ChipBase.web.js +434 -0
- package/dist/components/core/Chip-Base/types.d.ts +174 -0
- package/dist/components/core/Chip-Base/types.js +34 -0
- package/dist/components/core/Chip-Filter/index.d.ts +22 -0
- package/dist/components/core/Chip-Filter/index.js +31 -0
- package/dist/components/core/Chip-Filter/platforms/web/ChipFilter.web.d.ts +222 -0
- package/dist/components/core/Chip-Filter/platforms/web/ChipFilter.web.js +467 -0
- package/dist/components/core/Chip-Filter/types.d.ts +45 -0
- package/dist/components/core/Chip-Filter/types.js +19 -0
- package/dist/components/core/Chip-Input/index.d.ts +22 -0
- package/dist/components/core/Chip-Input/index.js +31 -0
- package/dist/components/core/Chip-Input/platforms/web/ChipInput.web.d.ts +205 -0
- package/dist/components/core/Chip-Input/platforms/web/ChipInput.web.js +419 -0
- package/dist/components/core/Chip-Input/types.d.ts +34 -0
- package/dist/components/core/Chip-Input/types.js +19 -0
- package/dist/components/core/Container-Base/index.d.ts +19 -0
- package/dist/components/core/Container-Base/index.js +34 -0
- package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.d.ts +128 -0
- package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.js +349 -0
- package/dist/components/core/Container-Base/platforms/web/token-mapping.d.ts +357 -0
- package/dist/components/core/Container-Base/platforms/web/token-mapping.js +518 -0
- package/dist/components/core/Container-Base/tokens.d.ts +179 -0
- package/dist/components/core/Container-Base/tokens.js +221 -0
- package/dist/components/core/Container-Base/types.d.ts +237 -0
- package/dist/components/core/Container-Base/types.js +50 -0
- package/dist/components/core/Container-Card-Base/index.d.ts +18 -0
- package/dist/components/core/Container-Card-Base/index.js +49 -0
- package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.d.ts +58 -0
- package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.js +324 -0
- package/dist/components/core/Container-Card-Base/tokens.d.ts +149 -0
- package/dist/components/core/Container-Card-Base/tokens.js +207 -0
- package/dist/components/core/Container-Card-Base/types.d.ts +268 -0
- package/dist/components/core/Container-Card-Base/types.js +85 -0
- package/dist/components/core/Icon-Base/index.d.ts +14 -0
- package/dist/components/core/Icon-Base/index.js +27 -0
- package/dist/components/core/Icon-Base/platforms/web/IconBase.web.d.ts +175 -0
- package/dist/components/core/Icon-Base/platforms/web/IconBase.web.js +503 -0
- package/dist/components/core/Icon-Base/types.d.ts +276 -0
- package/dist/components/core/Icon-Base/types.js +69 -0
- package/dist/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.d.ts +30 -0
- package/dist/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.js +39 -0
- package/dist/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.d.ts +147 -0
- package/dist/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.js +486 -0
- package/dist/components/core/Input-Checkbox-Base/types.d.ts +357 -0
- package/dist/components/core/Input-Checkbox-Base/types.js +60 -0
- package/dist/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.d.ts +110 -0
- package/dist/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.js +423 -0
- package/dist/components/core/Input-Checkbox-Legal/types.d.ts +311 -0
- package/dist/components/core/Input-Checkbox-Legal/types.js +69 -0
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.d.ts +250 -0
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.js +564 -0
- package/dist/components/core/Input-Radio-Base/radio-sizing.tokens.d.ts +30 -0
- package/dist/components/core/Input-Radio-Base/radio-sizing.tokens.js +39 -0
- package/dist/components/core/Input-Radio-Base/types.d.ts +327 -0
- package/dist/components/core/Input-Radio-Base/types.js +63 -0
- package/dist/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.d.ts +304 -0
- package/dist/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.js +691 -0
- package/dist/components/core/Input-Radio-Set/types.d.ts +275 -0
- package/dist/components/core/Input-Radio-Set/types.js +70 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.d.ts +26 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.js +224 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.d.ts +116 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.js +394 -0
- package/dist/components/core/Input-Text-Base/stateManagement.d.ts +172 -0
- package/dist/components/core/Input-Text-Base/stateManagement.js +224 -0
- package/dist/components/core/Input-Text-Base/tokens.d.ts +331 -0
- package/dist/components/core/Input-Text-Base/tokens.js +164 -0
- package/dist/components/core/Input-Text-Base/types.d.ts +77 -0
- package/dist/components/core/Input-Text-Base/types.js +13 -0
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.d.ts +30 -0
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.js +254 -0
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.d.ts +105 -0
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.js +279 -0
- package/dist/components/core/Input-Text-Email/stateManagement.d.ts +79 -0
- package/dist/components/core/Input-Text-Email/stateManagement.js +136 -0
- package/dist/components/core/Input-Text-Email/tokens.d.ts +20 -0
- package/dist/components/core/Input-Text-Email/tokens.js +34 -0
- package/dist/components/core/Input-Text-Email/types.d.ts +63 -0
- package/dist/components/core/Input-Text-Email/types.js +13 -0
- package/dist/components/core/Input-Text-Email/validation.d.ts +68 -0
- package/dist/components/core/Input-Text-Email/validation.js +115 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.d.ts +44 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.js +376 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.d.ts +137 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +447 -0
- package/dist/components/core/Input-Text-Password/stateManagement.d.ts +119 -0
- package/dist/components/core/Input-Text-Password/stateManagement.js +200 -0
- package/dist/components/core/Input-Text-Password/tokens.d.ts +20 -0
- package/dist/components/core/Input-Text-Password/tokens.js +34 -0
- package/dist/components/core/Input-Text-Password/types.d.ts +145 -0
- package/dist/components/core/Input-Text-Password/types.js +13 -0
- package/dist/components/core/Input-Text-Password/validation.d.ts +81 -0
- package/dist/components/core/Input-Text-Password/validation.js +170 -0
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.d.ts +38 -0
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.js +328 -0
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.d.ts +125 -0
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.js +334 -0
- package/dist/components/core/Input-Text-PhoneNumber/stateManagement.d.ts +114 -0
- package/dist/components/core/Input-Text-PhoneNumber/stateManagement.js +200 -0
- package/dist/components/core/Input-Text-PhoneNumber/tokens.d.ts +20 -0
- package/dist/components/core/Input-Text-PhoneNumber/tokens.js +34 -0
- package/dist/components/core/Input-Text-PhoneNumber/types.d.ts +111 -0
- package/dist/components/core/Input-Text-PhoneNumber/types.js +13 -0
- package/dist/components/core/Input-Text-PhoneNumber/validation.d.ts +120 -0
- package/dist/components/core/Input-Text-PhoneNumber/validation.js +278 -0
- package/dist/components/core/Nav-Header-App/index.d.ts +6 -0
- package/dist/components/core/Nav-Header-App/index.js +3 -0
- package/dist/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.d.ts +12 -0
- package/dist/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.js +34 -0
- package/dist/components/core/Nav-Header-App/types.d.ts +27 -0
- package/dist/components/core/Nav-Header-App/types.js +15 -0
- package/dist/components/core/Nav-Header-Base/index.d.ts +7 -0
- package/dist/components/core/Nav-Header-Base/index.js +8 -0
- package/dist/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.d.ts +26 -0
- package/dist/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.js +105 -0
- package/dist/components/core/Nav-Header-Base/types.d.ts +63 -0
- package/dist/components/core/Nav-Header-Base/types.js +17 -0
- package/dist/components/core/Nav-Header-Page/index.d.ts +7 -0
- package/dist/components/core/Nav-Header-Page/index.js +8 -0
- package/dist/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.d.ts +31 -0
- package/dist/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.js +148 -0
- package/dist/components/core/Nav-Header-Page/types.d.ts +46 -0
- package/dist/components/core/Nav-Header-Page/types.js +16 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/index.d.ts +25 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/index.js +33 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.d.ts +112 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.js +421 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/types.d.ts +54 -0
- package/dist/components/core/Nav-SegmentedChoice-Base/types.js +22 -0
- package/dist/components/core/Nav-TabBar-Base/examples/BasicUsage.d.ts +1 -0
- package/dist/components/core/Nav-TabBar-Base/examples/BasicUsage.js +4 -0
- package/dist/components/core/Nav-TabBar-Base/index.d.ts +14 -0
- package/dist/components/core/Nav-TabBar-Base/index.js +18 -0
- package/dist/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.d.ts +82 -0
- package/dist/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.js +372 -0
- package/dist/components/core/Nav-TabBar-Base/types.d.ts +38 -0
- package/dist/components/core/Nav-TabBar-Base/types.js +17 -0
- package/dist/components/core/Progress-Bar-Base/index.d.ts +7 -0
- package/dist/components/core/Progress-Bar-Base/index.js +6 -0
- package/dist/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.d.ts +24 -0
- package/dist/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.js +121 -0
- package/dist/components/core/Progress-Bar-Base/types.d.ts +44 -0
- package/dist/components/core/Progress-Bar-Base/types.js +23 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/index.d.ts +23 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/index.js +32 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.d.ts +61 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.js +128 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/types.d.ts +64 -0
- package/dist/components/core/Progress-Indicator-Connector-Base/types.js +26 -0
- package/dist/components/core/Progress-Indicator-Label-Base/index.d.ts +22 -0
- package/dist/components/core/Progress-Indicator-Label-Base/index.js +29 -0
- package/dist/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.d.ts +71 -0
- package/dist/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.js +160 -0
- package/dist/components/core/Progress-Indicator-Label-Base/types.d.ts +61 -0
- package/dist/components/core/Progress-Indicator-Label-Base/types.js +18 -0
- package/dist/components/core/Progress-Indicator-Node-Base/index.d.ts +23 -0
- package/dist/components/core/Progress-Indicator-Node-Base/index.js +33 -0
- package/dist/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.d.ts +85 -0
- package/dist/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.js +206 -0
- package/dist/components/core/Progress-Indicator-Node-Base/types.d.ts +141 -0
- package/dist/components/core/Progress-Indicator-Node-Base/types.js +46 -0
- package/dist/components/core/Progress-Pagination-Base/index.d.ts +26 -0
- package/dist/components/core/Progress-Pagination-Base/index.js +37 -0
- package/dist/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.d.ts +86 -0
- package/dist/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.js +256 -0
- package/dist/components/core/Progress-Pagination-Base/types.d.ts +97 -0
- package/dist/components/core/Progress-Pagination-Base/types.js +57 -0
- package/dist/components/core/Progress-Stepper-Base/index.d.ts +26 -0
- package/dist/components/core/Progress-Stepper-Base/index.js +40 -0
- package/dist/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.d.ts +93 -0
- package/dist/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.js +247 -0
- package/dist/components/core/Progress-Stepper-Base/types.d.ts +138 -0
- package/dist/components/core/Progress-Stepper-Base/types.js +98 -0
- package/dist/components/core/Progress-Stepper-Detailed/index.d.ts +27 -0
- package/dist/components/core/Progress-Stepper-Detailed/index.js +41 -0
- package/dist/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.d.ts +97 -0
- package/dist/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.js +290 -0
- package/dist/components/core/Progress-Stepper-Detailed/types.d.ts +152 -0
- package/dist/components/core/Progress-Stepper-Detailed/types.js +102 -0
- package/dist/composition/BlendComposition.d.ts +39 -0
- package/dist/composition/BlendComposition.js +15 -0
- package/dist/composition/BlendCompositionParser.d.ts +63 -0
- package/dist/composition/BlendCompositionParser.js +185 -0
- package/dist/composition/OpacityComposition.d.ts +52 -0
- package/dist/composition/OpacityComposition.js +14 -0
- package/dist/composition/OpacityCompositionParser.d.ts +82 -0
- package/dist/composition/OpacityCompositionParser.js +267 -0
- package/dist/composition/index.d.ts +10 -0
- package/dist/composition/index.js +13 -0
- package/dist/config/ConfigLoader.d.ts +71 -0
- package/dist/config/ConfigLoader.js +140 -0
- package/dist/config/defineConfig.d.ts +66 -0
- package/dist/config/defineConfig.js +35 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.js +11 -0
- package/dist/config/scopedTsRequire.d.ts +45 -0
- package/dist/config/scopedTsRequire.js +50 -0
- package/dist/constants/BaselineGrid.d.ts +31 -0
- package/dist/constants/BaselineGrid.js +39 -0
- package/dist/constants/SpacingTokens.d.ts +45 -0
- package/dist/constants/SpacingTokens.js +56 -0
- package/dist/constants/StrategicFlexibilityTokens.d.ts +121 -0
- package/dist/constants/StrategicFlexibilityTokens.js +93 -0
- package/dist/figma/ComponentAnalysis.d.ts +233 -0
- package/dist/figma/ComponentAnalysis.js +15 -0
- package/dist/figma/ComponentAnalysisGenerator.d.ts +79 -0
- package/dist/figma/ComponentAnalysisGenerator.js +391 -0
- package/dist/figma/ConsoleMCPClient.d.ts +147 -0
- package/dist/figma/ConsoleMCPClient.js +12 -0
- package/dist/figma/ConsoleMCPClientImpl.d.ts +159 -0
- package/dist/figma/ConsoleMCPClientImpl.js +918 -0
- package/dist/figma/DesignExtractor.d.ts +971 -0
- package/dist/figma/DesignExtractor.js +2838 -0
- package/dist/figma/TokenSyncWorkflow.d.ts +277 -0
- package/dist/figma/TokenSyncWorkflow.js +678 -0
- package/dist/figma/TokenTranslator.d.ts +261 -0
- package/dist/figma/TokenTranslator.js +713 -0
- package/dist/figma/VariantAnalyzer.d.ts +233 -0
- package/dist/figma/VariantAnalyzer.js +505 -0
- package/dist/figma/error-reporting.d.ts +89 -0
- package/dist/figma/error-reporting.js +189 -0
- package/dist/figma/index.d.ts +26 -0
- package/dist/figma/index.js +37 -0
- package/dist/figma/portCleanup.d.ts +21 -0
- package/dist/figma/portCleanup.js +76 -0
- package/dist/figma/preflight.d.ts +34 -0
- package/dist/figma/preflight.js +105 -0
- package/dist/generators/BlendUtilityGenerator.d.ts +80 -0
- package/dist/generators/BlendUtilityGenerator.js +788 -0
- package/dist/generators/BlendValueGenerator.d.ts +52 -0
- package/dist/generators/BlendValueGenerator.js +159 -0
- package/dist/generators/DTCGFormatGenerator.d.ts +332 -0
- package/dist/generators/DTCGFormatGenerator.js +1224 -0
- package/dist/generators/DTCGGeneratorConfig.d.ts +41 -0
- package/dist/generators/DTCGGeneratorConfig.js +29 -0
- package/dist/generators/ModeResolvedTokens.d.ts +53 -0
- package/dist/generators/ModeResolvedTokens.js +14 -0
- package/dist/generators/ResponsiveGridGenerator.d.ts +64 -0
- package/dist/generators/ResponsiveGridGenerator.js +234 -0
- package/dist/generators/TokenFileGenerator.d.ts +401 -0
- package/dist/generators/TokenFileGenerator.js +1666 -0
- package/dist/generators/generateTokenFiles.d.ts +24 -0
- package/dist/generators/generateTokenFiles.js +343 -0
- package/dist/generators/generateTokenIndex.d.ts +47 -0
- package/dist/generators/generateTokenIndex.js +226 -0
- package/dist/generators/oklch/OklchExportUtils.d.ts +34 -0
- package/dist/generators/oklch/OklchExportUtils.js +48 -0
- package/dist/generators/oklch/OklchTokenIndexMetadata.d.ts +23 -0
- package/dist/generators/oklch/OklchTokenIndexMetadata.js +21 -0
- package/dist/generators/transformers/FigmaTransformer.d.ts +263 -0
- package/dist/generators/transformers/FigmaTransformer.js +681 -0
- package/dist/generators/transformers/ITokenTransformer.d.ts +51 -0
- package/dist/generators/transformers/ITokenTransformer.js +13 -0
- package/dist/generators/transformers/TransformerRegistry.d.ts +33 -0
- package/dist/generators/transformers/TransformerRegistry.js +59 -0
- package/dist/generators/transformers/index.d.ts +39 -0
- package/dist/generators/transformers/index.js +45 -0
- package/dist/generators/types/DTCGTypes.d.ts +101 -0
- package/dist/generators/types/DTCGTypes.js +12 -0
- package/dist/integration/BuildErrorHandler.d.ts +140 -0
- package/dist/integration/BuildErrorHandler.js +277 -0
- package/dist/integration/BuildSystemInterface.d.ts +107 -0
- package/dist/integration/BuildSystemInterface.js +205 -0
- package/dist/integration/PlatformFileSelector.d.ts +84 -0
- package/dist/integration/PlatformFileSelector.js +215 -0
- package/dist/integration/RegistryCoordinator.d.ts +133 -0
- package/dist/integration/RegistryCoordinator.js +298 -0
- package/dist/integration/TranslationCoordinator.d.ts +118 -0
- package/dist/integration/TranslationCoordinator.js +352 -0
- package/dist/integration/TreeShakingOptimizer.d.ts +111 -0
- package/dist/integration/TreeShakingOptimizer.js +224 -0
- package/dist/integration/ValidationCoordinator.d.ts +268 -0
- package/dist/integration/ValidationCoordinator.js +567 -0
- package/dist/integration/index.d.ts +21 -0
- package/dist/integration/index.js +28 -0
- package/dist/ios/DesignTokens.ios.swift +697 -0
- package/dist/mcp/application-mcp.js +19434 -0
- package/dist/mcp/docs-mcp.js +16895 -0
- package/dist/mcp/product-mcp.js +24828 -0
- package/dist/naming/NamingConventionManager.d.ts +94 -0
- package/dist/naming/NamingConventionManager.js +193 -0
- package/dist/naming/PlatformNamingRules.d.ts +62 -0
- package/dist/naming/PlatformNamingRules.js +174 -0
- package/dist/naming/index.d.ts +9 -0
- package/dist/naming/index.js +18 -0
- package/dist/performance/CachingStrategy.d.ts +131 -0
- package/dist/performance/CachingStrategy.js +348 -0
- package/dist/performance/FileGenerationOptimizer.d.ts +91 -0
- package/dist/performance/FileGenerationOptimizer.js +201 -0
- package/dist/performance/PerformanceMonitor.d.ts +79 -0
- package/dist/performance/PerformanceMonitor.js +142 -0
- package/dist/performance/PerformanceOptimizer.d.ts +106 -0
- package/dist/performance/PerformanceOptimizer.js +241 -0
- package/dist/performance/index.d.ts +14 -0
- package/dist/performance/index.js +17 -0
- package/dist/providers/AndroidFileOrganizer.d.ts +56 -0
- package/dist/providers/AndroidFileOrganizer.js +225 -0
- package/dist/providers/AndroidFormatGenerator.d.ts +151 -0
- package/dist/providers/AndroidFormatGenerator.js +673 -0
- package/dist/providers/AndroidUnitConverter.d.ts +54 -0
- package/dist/providers/AndroidUnitConverter.js +151 -0
- package/dist/providers/FormatProvider.d.ts +103 -0
- package/dist/providers/FormatProvider.js +67 -0
- package/dist/providers/PathProvider.d.ts +114 -0
- package/dist/providers/PathProvider.js +64 -0
- package/dist/providers/UnitProvider.d.ts +65 -0
- package/dist/providers/UnitProvider.js +46 -0
- package/dist/providers/WebFileOrganizer.d.ts +35 -0
- package/dist/providers/WebFileOrganizer.js +113 -0
- package/dist/providers/WebFormatGenerator.d.ts +146 -0
- package/dist/providers/WebFormatGenerator.js +522 -0
- package/dist/providers/WebUnitConverter.d.ts +29 -0
- package/dist/providers/WebUnitConverter.js +99 -0
- package/dist/providers/iOSFileOrganizer.d.ts +42 -0
- package/dist/providers/iOSFileOrganizer.js +148 -0
- package/dist/providers/iOSFormatGenerator.d.ts +130 -0
- package/dist/providers/iOSFormatGenerator.js +512 -0
- package/dist/providers/iOSUnitConverter.d.ts +35 -0
- package/dist/providers/iOSUnitConverter.js +108 -0
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.js +35 -0
- package/dist/registries/ComponentTokenRegistry.d.ts +176 -0
- package/dist/registries/ComponentTokenRegistry.js +222 -0
- package/dist/registries/IRegistry.d.ts +166 -0
- package/dist/registries/IRegistry.js +3 -0
- package/dist/registries/PrimitiveTokenRegistry.d.ts +83 -0
- package/dist/registries/PrimitiveTokenRegistry.js +158 -0
- package/dist/registries/SemanticTokenRegistry.d.ts +92 -0
- package/dist/registries/SemanticTokenRegistry.js +188 -0
- package/dist/resolvers/AndroidColorResolver.d.ts +111 -0
- package/dist/resolvers/AndroidColorResolver.js +255 -0
- package/dist/resolvers/ModeThemeResolver.d.ts +82 -0
- package/dist/resolvers/ModeThemeResolver.js +113 -0
- package/dist/resolvers/SemanticOverrideResolver.d.ts +59 -0
- package/dist/resolvers/SemanticOverrideResolver.js +124 -0
- package/dist/resolvers/SemanticValueResolver.d.ts +20 -0
- package/dist/resolvers/SemanticValueResolver.js +122 -0
- package/dist/resolvers/WebColorResolver.d.ts +63 -0
- package/dist/resolvers/WebColorResolver.js +181 -0
- package/dist/resolvers/iOSColorResolver.d.ts +67 -0
- package/dist/resolvers/iOSColorResolver.js +175 -0
- package/dist/resolvers/index.d.ts +11 -0
- package/dist/resolvers/index.js +18 -0
- package/dist/security/AIAgentRestrictions.d.ts +115 -0
- package/dist/security/AIAgentRestrictions.js +185 -0
- package/dist/security/ContaminationAuditor.d.ts +96 -0
- package/dist/security/ContaminationAuditor.js +293 -0
- package/dist/security/ContaminationPrevention.d.ts +73 -0
- package/dist/security/ContaminationPrevention.js +222 -0
- package/dist/security/DocumentationGuard.d.ts +76 -0
- package/dist/security/DocumentationGuard.js +199 -0
- package/dist/security/FlexibilityTokenGuard.d.ts +136 -0
- package/dist/security/FlexibilityTokenGuard.js +187 -0
- package/dist/security/HumanApprovalWorkflow.d.ts +129 -0
- package/dist/security/HumanApprovalWorkflow.js +213 -0
- package/dist/security/index.d.ts +19 -0
- package/dist/security/index.js +23 -0
- package/dist/testing/index.d.ts +74 -0
- package/dist/testing/index.js +142 -0
- package/dist/testing/jest-preset.d.ts +27 -0
- package/dist/testing/jest-preset.js +94 -0
- package/dist/testing/style-mock.d.ts +1 -0
- package/dist/testing/style-mock.js +9 -0
- package/dist/testing/validators.d.ts +10 -0
- package/dist/testing/validators.js +26 -0
- package/dist/themes/ResolvedThemeSet.d.ts +21 -0
- package/dist/themes/ResolvedThemeSet.js +8 -0
- package/dist/themes/ThemeRegistry.d.ts +52 -0
- package/dist/themes/ThemeRegistry.js +77 -0
- package/dist/tokens/BlendTokens.d.ts +45 -0
- package/dist/tokens/BlendTokens.js +127 -0
- package/dist/tokens/BlurTokens.d.ts +28 -0
- package/dist/tokens/BlurTokens.js +153 -0
- package/dist/tokens/BorderWidthTokens.d.ts +29 -0
- package/dist/tokens/BorderWidthTokens.js +97 -0
- package/dist/tokens/BreakpointTokens.d.ts +29 -0
- package/dist/tokens/BreakpointTokens.js +97 -0
- package/dist/tokens/ColorTokens.d.ts +270 -0
- package/dist/tokens/ColorTokens.js +2085 -0
- package/dist/tokens/DensityTokens.d.ts +36 -0
- package/dist/tokens/DensityTokens.js +113 -0
- package/dist/tokens/DurationTokens.d.ts +47 -0
- package/dist/tokens/DurationTokens.js +108 -0
- package/dist/tokens/EasingTokens.d.ts +47 -0
- package/dist/tokens/EasingTokens.js +159 -0
- package/dist/tokens/FontFamilyTokens.d.ts +24 -0
- package/dist/tokens/FontFamilyTokens.js +92 -0
- package/dist/tokens/FontSizeTokens.d.ts +33 -0
- package/dist/tokens/FontSizeTokens.js +185 -0
- package/dist/tokens/FontWeightTokens.d.ts +29 -0
- package/dist/tokens/FontWeightTokens.js +157 -0
- package/dist/tokens/GlowOpacityTokens.d.ts +41 -0
- package/dist/tokens/GlowOpacityTokens.js +109 -0
- package/dist/tokens/LetterSpacingTokens.d.ts +29 -0
- package/dist/tokens/LetterSpacingTokens.js +109 -0
- package/dist/tokens/LineHeightTokens.d.ts +34 -0
- package/dist/tokens/LineHeightTokens.js +189 -0
- package/dist/tokens/OpacityTokens.d.ts +30 -0
- package/dist/tokens/OpacityTokens.js +219 -0
- package/dist/tokens/RadiusTokens.d.ts +37 -0
- package/dist/tokens/RadiusTokens.js +223 -0
- package/dist/tokens/ScaleTokens.d.ts +62 -0
- package/dist/tokens/ScaleTokens.js +161 -0
- package/dist/tokens/ShadowOffsetTokens.d.ts +69 -0
- package/dist/tokens/ShadowOffsetTokens.js +264 -0
- package/dist/tokens/ShadowOpacityTokens.d.ts +22 -0
- package/dist/tokens/ShadowOpacityTokens.js +112 -0
- package/dist/tokens/SizingTokens.d.ts +35 -0
- package/dist/tokens/SizingTokens.js +220 -0
- package/dist/tokens/SpacingTokens.d.ts +29 -0
- package/dist/tokens/SpacingTokens.js +239 -0
- package/dist/tokens/TapAreaTokens.d.ts +38 -0
- package/dist/tokens/TapAreaTokens.js +115 -0
- package/dist/tokens/color/channels/chroma/chromatic.d.ts +61 -0
- package/dist/tokens/color/channels/chroma/chromatic.js +64 -0
- package/dist/tokens/color/channels/chroma/neutral.d.ts +33 -0
- package/dist/tokens/color/channels/chroma/neutral.js +36 -0
- package/dist/tokens/color/channels/hues.d.ts +27 -0
- package/dist/tokens/color/channels/hues.js +29 -0
- package/dist/tokens/color/channels/index.d.ts +11 -0
- package/dist/tokens/color/channels/index.js +36 -0
- package/dist/tokens/color/channels/lightness/chromatic.d.ts +62 -0
- package/dist/tokens/color/channels/lightness/chromatic.js +65 -0
- package/dist/tokens/color/channels/lightness/neutral.d.ts +34 -0
- package/dist/tokens/color/channels/lightness/neutral.js +37 -0
- package/dist/tokens/color/index.d.ts +16 -0
- package/dist/tokens/color/index.js +47 -0
- package/dist/tokens/color/primitives/chromatic.d.ts +24 -0
- package/dist/tokens/color/primitives/chromatic.js +42 -0
- package/dist/tokens/color/primitives/neutral.d.ts +12 -0
- package/dist/tokens/color/primitives/neutral.js +37 -0
- package/dist/tokens/component/progress.d.ts +101 -0
- package/dist/tokens/component/progress.js +145 -0
- package/dist/tokens/index.d.ts +167 -0
- package/dist/tokens/index.js +341 -0
- package/dist/tokens/semantic/AccessibilityTokens.d.ts +112 -0
- package/dist/tokens/semantic/AccessibilityTokens.js +175 -0
- package/dist/tokens/semantic/BlendTokens.d.ts +112 -0
- package/dist/tokens/semantic/BlendTokens.js +191 -0
- package/dist/tokens/semantic/BorderWidthTokens.d.ts +156 -0
- package/dist/tokens/semantic/BorderWidthTokens.js +147 -0
- package/dist/tokens/semantic/ColorTokens.d.ts +157 -0
- package/dist/tokens/semantic/ColorTokens.js +791 -0
- package/dist/tokens/semantic/ElevationTokens.d.ts +98 -0
- package/dist/tokens/semantic/ElevationTokens.js +158 -0
- package/dist/tokens/semantic/GridSpacingTokens.d.ts +36 -0
- package/dist/tokens/semantic/GridSpacingTokens.js +139 -0
- package/dist/tokens/semantic/IconTokens.d.ts +70 -0
- package/dist/tokens/semantic/IconTokens.js +309 -0
- package/dist/tokens/semantic/LayeringTokens.d.ts +135 -0
- package/dist/tokens/semantic/LayeringTokens.js +163 -0
- package/dist/tokens/semantic/MotionTokens.d.ts +74 -0
- package/dist/tokens/semantic/MotionTokens.js +131 -0
- package/dist/tokens/semantic/OpacityTokens.d.ts +40 -0
- package/dist/tokens/semantic/OpacityTokens.js +87 -0
- package/dist/tokens/semantic/RadiusTokens.d.ts +233 -0
- package/dist/tokens/semantic/RadiusTokens.js +224 -0
- package/dist/tokens/semantic/ShadowTokens.d.ts +55 -0
- package/dist/tokens/semantic/ShadowTokens.js +409 -0
- package/dist/tokens/semantic/SpacingTokens.d.ts +397 -0
- package/dist/tokens/semantic/SpacingTokens.js +243 -0
- package/dist/tokens/semantic/StyleTokens.d.ts +19 -0
- package/dist/tokens/semantic/StyleTokens.js +25 -0
- package/dist/tokens/semantic/TypographyTokens.d.ts +32 -0
- package/dist/tokens/semantic/TypographyTokens.js +376 -0
- package/dist/tokens/semantic/ZIndexTokens.d.ts +61 -0
- package/dist/tokens/semantic/ZIndexTokens.js +107 -0
- package/dist/tokens/semantic/index.d.ts +94 -0
- package/dist/tokens/semantic/index.js +547 -0
- package/dist/tokens/themes/dark/SemanticOverrides.d.ts +16 -0
- package/dist/tokens/themes/dark/SemanticOverrides.js +149 -0
- package/dist/tokens/themes/dark-wcag/SemanticOverrides.d.ts +14 -0
- package/dist/tokens/themes/dark-wcag/SemanticOverrides.js +21 -0
- package/dist/tokens/themes/types.d.ts +22 -0
- package/dist/tokens/themes/types.js +10 -0
- package/dist/tokens/themes/wcag/SemanticOverrides.d.ts +12 -0
- package/dist/tokens/themes/wcag/SemanticOverrides.js +26 -0
- package/dist/tools/ThemeFileGenerator.d.ts +16 -0
- package/dist/tools/ThemeFileGenerator.js +103 -0
- package/dist/tools/integrity/DiskFreshGenerator.d.ts +19 -0
- package/dist/tools/integrity/DiskFreshGenerator.js +68 -0
- package/dist/tools/integrity/GenerationIntegrityCheck.d.ts +31 -0
- package/dist/tools/integrity/GenerationIntegrityCheck.js +137 -0
- package/dist/tools/integrity/Invariants.d.ts +82 -0
- package/dist/tools/integrity/Invariants.js +231 -0
- package/dist/tools/integrity/Normalizer.d.ts +28 -0
- package/dist/tools/integrity/Normalizer.js +122 -0
- package/dist/tools/integrity/ParityNormalizationRules.d.ts +55 -0
- package/dist/tools/integrity/ParityNormalizationRules.js +163 -0
- package/dist/tools/integrity/ParityOrchestrator.d.ts +97 -0
- package/dist/tools/integrity/ParityOrchestrator.js +234 -0
- package/dist/tools/integrity/SemanticComparator.d.ts +24 -0
- package/dist/tools/integrity/SemanticComparator.js +108 -0
- package/dist/tools/integrity/cli/run-audit.d.ts +21 -0
- package/dist/tools/integrity/cli/run-audit.js +178 -0
- package/dist/tools/integrity/inventory.d.ts +26 -0
- package/dist/tools/integrity/inventory.js +48 -0
- package/dist/tools/integrity/manifest.d.ts +44 -0
- package/dist/tools/integrity/manifest.js +54 -0
- package/dist/tools/integrity/types/index.d.ts +146 -0
- package/dist/tools/integrity/types/index.js +21 -0
- package/dist/tools/release/cli/ReleasePipeline.d.ts +28 -0
- package/dist/tools/release/cli/ReleasePipeline.js +184 -0
- package/dist/tools/release/cli/release-tool.d.ts +11 -0
- package/dist/tools/release/cli/release-tool.js +98 -0
- package/dist/tools/release/pipeline/ChangeClassifier.d.ts +13 -0
- package/dist/tools/release/pipeline/ChangeClassifier.js +53 -0
- package/dist/tools/release/pipeline/ChangeExtractor.d.ts +16 -0
- package/dist/tools/release/pipeline/ChangeExtractor.js +80 -0
- package/dist/tools/release/pipeline/NotesRenderer.d.ts +15 -0
- package/dist/tools/release/pipeline/NotesRenderer.js +62 -0
- package/dist/tools/release/pipeline/SummaryScanner.d.ts +16 -0
- package/dist/tools/release/pipeline/SummaryScanner.js +94 -0
- package/dist/tools/release/pipeline/TagResolver.d.ts +15 -0
- package/dist/tools/release/pipeline/TagResolver.js +37 -0
- package/dist/tools/release/pipeline/VersionCalculator.d.ts +34 -0
- package/dist/tools/release/pipeline/VersionCalculator.js +325 -0
- package/dist/tools/release/publishers/GitHubPublisher.d.ts +33 -0
- package/dist/tools/release/publishers/GitHubPublisher.js +239 -0
- package/dist/tools/release/publishers/NpmPublisher.d.ts +49 -0
- package/dist/tools/release/publishers/NpmPublisher.js +226 -0
- package/dist/tools/release/types/index.d.ts +239 -0
- package/dist/tools/release/types/index.js +11 -0
- package/dist/tools/release/validators/SemanticVersionValidator.d.ts +18 -0
- package/dist/tools/release/validators/SemanticVersionValidator.js +56 -0
- package/dist/types/ComponentTypes.d.ts +70 -0
- package/dist/types/ComponentTypes.js +12 -0
- package/dist/types/PrimitiveToken.d.ts +105 -0
- package/dist/types/PrimitiveToken.js +38 -0
- package/dist/types/SemanticToken.d.ts +79 -0
- package/dist/types/SemanticToken.js +27 -0
- package/dist/types/TranslationOutput.d.ts +80 -0
- package/dist/types/TranslationOutput.js +9 -0
- package/dist/types/ValidationResult.d.ts +58 -0
- package/dist/types/ValidationResult.js +9 -0
- package/dist/types/generated/TokenTypes.d.ts +48 -0
- package/dist/types/generated/TokenTypes.js +35 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.js +14 -0
- package/dist/validators/BaselineGridValidator.d.ts +55 -0
- package/dist/validators/BaselineGridValidator.js +96 -0
- package/dist/validators/CompositionPatternValidator.d.ts +75 -0
- package/dist/validators/CompositionPatternValidator.js +178 -0
- package/dist/validators/CrossPlatformConsistencyValidator.d.ts +112 -0
- package/dist/validators/CrossPlatformConsistencyValidator.js +313 -0
- package/dist/validators/ErrorValidator.d.ts +161 -0
- package/dist/validators/ErrorValidator.js +652 -0
- package/dist/validators/IValidator.d.ts +260 -0
- package/dist/validators/IValidator.js +43 -0
- package/dist/validators/MathematicalRelationshipParser.d.ts +112 -0
- package/dist/validators/MathematicalRelationshipParser.js +325 -0
- package/dist/validators/ModeParity.d.ts +37 -0
- package/dist/validators/ModeParity.js +133 -0
- package/dist/validators/PassValidator.d.ts +100 -0
- package/dist/validators/PassValidator.js +400 -0
- package/dist/validators/PlatformConstraintHandler.d.ts +103 -0
- package/dist/validators/PlatformConstraintHandler.js +309 -0
- package/dist/validators/PrimitiveReferenceValidator.d.ts +68 -0
- package/dist/validators/PrimitiveReferenceValidator.js +244 -0
- package/dist/validators/SemanticTokenValidator.d.ts +120 -0
- package/dist/validators/SemanticTokenValidator.js +382 -0
- package/dist/validators/StemmaComponentNamingValidator.d.ts +145 -0
- package/dist/validators/StemmaComponentNamingValidator.js +392 -0
- package/dist/validators/StemmaErrorGuidanceSystem.d.ts +292 -0
- package/dist/validators/StemmaErrorGuidanceSystem.js +1287 -0
- package/dist/validators/StemmaPropertyAccessibilityValidator.d.ts +250 -0
- package/dist/validators/StemmaPropertyAccessibilityValidator.js +642 -0
- package/dist/validators/StemmaTokenUsageValidator.d.ts +135 -0
- package/dist/validators/StemmaTokenUsageValidator.js +503 -0
- package/dist/validators/SyntaxValidator.d.ts +116 -0
- package/dist/validators/SyntaxValidator.js +369 -0
- package/dist/validators/ThreeTierValidator.d.ts +289 -0
- package/dist/validators/ThreeTierValidator.js +533 -0
- package/dist/validators/ToleranceCalculator.d.ts +104 -0
- package/dist/validators/ToleranceCalculator.js +222 -0
- package/dist/validators/ValidationReasoning.d.ts +104 -0
- package/dist/validators/ValidationReasoning.js +307 -0
- package/dist/validators/WCAGValidator.d.ts +108 -0
- package/dist/validators/WCAGValidator.js +188 -0
- package/dist/validators/WarningValidator.d.ts +125 -0
- package/dist/validators/WarningValidator.js +383 -0
- package/dist/validators/buildValidation.d.ts +34 -0
- package/dist/validators/buildValidation.js +135 -0
- package/dist/validators/index.d.ts +32 -0
- package/dist/validators/index.js +105 -0
- package/dist/web/DesignTokens.web.css +929 -0
- package/dist/workflows/ConsistencyValidator.d.ts +91 -0
- package/dist/workflows/ConsistencyValidator.js +272 -0
- package/dist/workflows/TokenGenerationWorkflow.d.ts +129 -0
- package/dist/workflows/TokenGenerationWorkflow.js +316 -0
- package/dist/workflows/ValidationPipeline.d.ts +103 -0
- package/dist/workflows/ValidationPipeline.js +213 -0
- package/dist/workflows/WorkflowErrorHandler.d.ts +141 -0
- package/dist/workflows/WorkflowErrorHandler.js +357 -0
- package/experience-patterns/README.md +160 -0
- package/experience-patterns/content-preview.yaml +48 -0
- package/experience-patterns/dashboard.yaml +97 -0
- package/experience-patterns/empty-state.yaml +50 -0
- package/experience-patterns/multi-section-form.yaml +105 -0
- package/experience-patterns/notification-list.yaml +109 -0
- package/experience-patterns/onboarding.yaml +197 -0
- package/experience-patterns/settings.yaml +98 -0
- package/experience-patterns/simple-form.yaml +41 -0
- package/experience-patterns/view-edit-screen.yaml +125 -0
- package/family-guidance/README.md +115 -0
- package/family-guidance/avatars.yaml +63 -0
- package/family-guidance/badges.yaml +76 -0
- package/family-guidance/button.yaml +108 -0
- package/family-guidance/chips.yaml +82 -0
- package/family-guidance/container.yaml +69 -0
- package/family-guidance/form-inputs.yaml +104 -0
- package/family-guidance/icons.yaml +87 -0
- package/family-guidance/navigation.yaml +96 -0
- package/family-guidance/progress.yaml +85 -0
- package/family-registry.yaml +49 -0
- package/governance/AI-Collaboration-Framework.md +305 -0
- package/governance/BUILD-SYSTEM-SETUP.md +233 -0
- package/governance/Component-Development-Guide.md +1876 -0
- package/governance/Component-Development-Standards.md +1189 -0
- package/governance/Component-Family-Avatar.md +290 -0
- package/governance/Component-Family-Badge.md +479 -0
- package/governance/Component-Family-Button.md +671 -0
- package/governance/Component-Family-Chip.md +431 -0
- package/governance/Component-Family-Container.md +671 -0
- package/governance/Component-Family-Data-Display.md +149 -0
- package/governance/Component-Family-Divider.md +138 -0
- package/governance/Component-Family-Form-Inputs.md +1365 -0
- package/governance/Component-Family-Icon.md +364 -0
- package/governance/Component-Family-Loading.md +143 -0
- package/governance/Component-Family-Modal.md +151 -0
- package/governance/Component-Family-Navigation.md +266 -0
- package/governance/Component-Family-Progress.md +488 -0
- package/governance/Component-Inheritance-Structures.md +687 -0
- package/governance/Component-MCP-Document-Template.md +722 -0
- package/governance/Component-Meta-Data-Shapes-Governance.md +120 -0
- package/governance/Component-Primitive-vs-Semantic-Philosophy.md +404 -0
- package/governance/Component-Quick-Reference.md +304 -0
- package/governance/Component-Readiness-Status.md +660 -0
- package/governance/Component-Schema-Format.md +379 -0
- package/governance/Component-Templates.md +1118 -0
- package/governance/Contract-System-Reference.md +255 -0
- package/governance/DTCG-Integration-Guide.md +573 -0
- package/governance/DesignerPunk-Integration-Guide.md +1005 -0
- package/governance/Figma-Workflow-Guide.md +479 -0
- package/governance/Layout-Specification-Vocabulary.md +550 -0
- package/governance/MCP-Evolution-Roadmap.md +228 -0
- package/governance/MCP-Integration-Guide.md +509 -0
- package/governance/MCP-Relationship-Model.md +363 -0
- package/governance/Platform-Resource-Map.md +70 -0
- package/governance/Process-Cross-Reference-Standards.md +665 -0
- package/governance/Process-Development-Workflow.md +310 -0
- package/governance/Process-File-Organization.md +693 -0
- package/governance/Process-Hook-Operations.md +1196 -0
- package/governance/Process-Integration-Methodology.md +142 -0
- package/governance/Process-Spec-Planning.md +2988 -0
- package/governance/Process-Task-Type-Definitions.md +378 -0
- package/governance/Product-Handoff-Protocol.md +258 -0
- package/governance/Product-Token-Governance.md +307 -0
- package/governance/Rosetta-System-Architecture.md +648 -0
- package/governance/Steering-Addressing-Conventions.md +105 -0
- package/governance/Test-Behavioral-Contract-Validation.md +638 -0
- package/governance/Test-Development-Standards.md +2094 -0
- package/governance/Test-Failure-Audit-Methodology.md +1475 -0
- package/governance/Token-Family-Accessibility.md +656 -0
- package/governance/Token-Family-Blend.md +503 -0
- package/governance/Token-Family-Blur.md +115 -0
- package/governance/Token-Family-Border.md +477 -0
- package/governance/Token-Family-Color.md +317 -0
- package/governance/Token-Family-Glow.md +473 -0
- package/governance/Token-Family-Layering.md +685 -0
- package/governance/Token-Family-Motion.md +690 -0
- package/governance/Token-Family-Opacity.md +578 -0
- package/governance/Token-Family-Radius.md +428 -0
- package/governance/Token-Family-Responsive.md +798 -0
- package/governance/Token-Family-Shadow.md +758 -0
- package/governance/Token-Family-Sizing.md +102 -0
- package/governance/Token-Family-Spacing.md +632 -0
- package/governance/Token-Family-Typography.md +598 -0
- package/governance/Token-Governance.md +658 -0
- package/governance/Token-Quick-Reference.md +382 -0
- package/governance/Token-Resolution-Patterns.md +537 -0
- package/governance/Token-Semantic-Structure.md +776 -0
- package/governance/Transformer-Development-Guide.md +490 -0
- package/governance/Web-Authoring-Standards.md +403 -0
- package/governance/a-vision-of-the-future.md +686 -0
- package/governance/browser-distribution-guide.md +580 -0
- package/governance/completion-documentation-guide.md +371 -0
- package/governance/component-mcp-query-guide.md +500 -0
- package/governance/component-meta-authoring-guide.md +235 -0
- package/governance/component-metadata-schema-reference.md +227 -0
- package/governance/cross-platform-vs-platform-specific-decision-framework.md +355 -0
- package/governance/platform-implementation-guidelines.md +818 -0
- package/governance/release-management-system.md +89 -0
- package/governance/rosetta-system-principles.md +593 -0
- package/governance/stemma-system-principles.md +900 -0
- package/governance/technology-stack.md +97 -0
- package/layout-templates/centered-content-page.yaml +26 -0
- package/layout-templates/full-width-page.yaml +24 -0
- package/layout-templates/multi-zone-page.yaml +56 -0
- package/layout-templates/sidebar-page.yaml +41 -0
- package/mcp-server/package.json +33 -0
- package/mcp-server/src/discovery-dry-run/__tests__/discovery-dry-run.test.ts +210 -0
- package/mcp-server/src/discovery-dry-run/discovery-dry-run.ts +224 -0
- package/mcp-server/src/id-guard/__tests__/backfill-doc-ids.test.ts +123 -0
- package/mcp-server/src/id-guard/__tests__/check-id-uniqueness.test.ts +138 -0
- package/mcp-server/src/id-guard/backfill-doc-ids.ts +180 -0
- package/mcp-server/src/id-guard/check-id-uniqueness.ts +165 -0
- package/mcp-server/src/id-guard/manifest-consistency.ts +77 -0
- package/mcp-server/src/index.ts +439 -0
- package/mcp-server/src/indexer/DocumentIndexer.ts +808 -0
- package/mcp-server/src/indexer/__tests__/DocumentIndexer.resolver.test.ts +298 -0
- package/mcp-server/src/indexer/__tests__/DocumentIndexer.test.ts +682 -0
- package/mcp-server/src/indexer/__tests__/conditional-filter.test.ts +367 -0
- package/mcp-server/src/indexer/__tests__/cross-ref-parser.test.ts +331 -0
- package/mcp-server/src/indexer/__tests__/frontmatter-parser.test.ts +192 -0
- package/mcp-server/src/indexer/__tests__/heading-parser.test.ts +227 -0
- package/mcp-server/src/indexer/__tests__/index-health.test.ts +393 -0
- package/mcp-server/src/indexer/__tests__/metadata-parser.test.ts +234 -0
- package/mcp-server/src/indexer/__tests__/section-parser.test.ts +494 -0
- package/mcp-server/src/indexer/conditional-filter.ts +282 -0
- package/mcp-server/src/indexer/cross-ref-parser.ts +65 -0
- package/mcp-server/src/indexer/frontmatter-parser.ts +192 -0
- package/mcp-server/src/indexer/heading-parser.ts +65 -0
- package/mcp-server/src/indexer/index-health.ts +228 -0
- package/mcp-server/src/indexer/metadata-parser.ts +81 -0
- package/mcp-server/src/indexer/section-parser.ts +296 -0
- package/mcp-server/src/legacy-path/__tests__/generate-manifest.test.ts +188 -0
- package/mcp-server/src/legacy-path/__tests__/reseed-integration.test.ts +113 -0
- package/mcp-server/src/legacy-path/generate-manifest.ts +214 -0
- package/mcp-server/src/legacy-path/index.ts +48 -0
- package/mcp-server/src/legacy-path/legacy-path-manifest.ts +160 -0
- package/mcp-server/src/models/CrossReference.ts +19 -0
- package/mcp-server/src/models/DocumentFull.ts +26 -0
- package/mcp-server/src/models/DocumentSummary.ts +53 -0
- package/mcp-server/src/models/DocumentationMap.ts +90 -0
- package/mcp-server/src/models/IndexHealth.ts +44 -0
- package/mcp-server/src/models/LegacyPathManifest.ts +37 -0
- package/mcp-server/src/models/MetadataValidation.ts +30 -0
- package/mcp-server/src/models/Section.ts +38 -0
- package/mcp-server/src/models/index.ts +14 -0
- package/mcp-server/src/query/QueryEngine.ts +860 -0
- package/mcp-server/src/query/__tests__/QueryEngine.test.ts +438 -0
- package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +406 -0
- package/mcp-server/src/query/__tests__/find-docs-rubric.test.ts +227 -0
- package/mcp-server/src/query/__tests__/stop-words.test.ts +40 -0
- package/mcp-server/src/query/stop-words.ts +74 -0
- package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +236 -0
- package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +637 -0
- package/mcp-server/src/rules/workflow-rules.ts +105 -0
- package/mcp-server/src/staleness/StalenessGate.ts +112 -0
- package/mcp-server/src/staleness/__tests__/StalenessGate.test.ts +214 -0
- package/mcp-server/src/tools/__tests__/get-document-full.test.ts +256 -0
- package/mcp-server/src/tools/__tests__/get-document-summary.test.ts +273 -0
- package/mcp-server/src/tools/__tests__/get-documentation-map.test.ts +357 -0
- package/mcp-server/src/tools/__tests__/get-health-status.test.ts +223 -0
- package/mcp-server/src/tools/__tests__/get-index-health.test.ts +184 -0
- package/mcp-server/src/tools/__tests__/get-section.test.ts +457 -0
- package/mcp-server/src/tools/__tests__/list-cross-references.test.ts +279 -0
- package/mcp-server/src/tools/__tests__/rebuild-index.test.ts +214 -0
- package/mcp-server/src/tools/__tests__/validate-metadata.test.ts +296 -0
- package/mcp-server/src/tools/find-docs.ts +154 -0
- package/mcp-server/src/tools/get-document-full.ts +165 -0
- package/mcp-server/src/tools/get-document-summary.ts +198 -0
- package/mcp-server/src/tools/get-health-status.ts +137 -0
- package/mcp-server/src/tools/get-index-health.ts +100 -0
- package/mcp-server/src/tools/get-section.ts +308 -0
- package/mcp-server/src/tools/index.ts +106 -0
- package/mcp-server/src/tools/list-cross-references.ts +167 -0
- package/mcp-server/src/tools/rebuild-index.ts +101 -0
- package/mcp-server/src/tools/validate-metadata.ts +167 -0
- package/mcp-server/src/utils/__tests__/error-handler.test.ts +256 -0
- package/mcp-server/src/utils/__tests__/token-estimator.test.ts +87 -0
- package/mcp-server/src/utils/error-handler.ts +261 -0
- package/mcp-server/src/utils/token-estimator.ts +35 -0
- package/mcp-server/src/watcher/FileWatcher.ts +156 -0
- package/mcp-server/src/watcher/__tests__/FileWatcher.test.ts +293 -0
- package/mcp-server/src/watcher/index.ts +1 -0
- package/mcp-server/tsconfig.json +24 -0
- package/package.json +167 -0
- package/product-template/agents/README.md +73 -0
- package/product-template/agents/ada-prompt.md +83 -0
- package/product-template/agents/data-prompt.md +74 -0
- package/product-template/agents/kenya-prompt.md +74 -0
- package/product-template/agents/leonardo-prompt.md +99 -0
- package/product-template/agents/lina-prompt.md +61 -0
- package/product-template/agents/sparky-prompt.md +66 -0
- package/product-template/agents/stacy-prompt.md +51 -0
- package/product-template/agents/thurgood-prompt.md +64 -0
- package/src/TokenEngine.ts +628 -0
- package/src/__tests__/BuildSystemIntegration.test.ts +485 -0
- package/src/__tests__/ProductMCPIntegration.test.ts +204 -0
- package/src/__tests__/__mocks__/styleMock.js +18 -0
- package/src/__tests__/browser-distribution/build-error-handling.test.ts +143 -0
- package/src/__tests__/browser-distribution/bundle-loading.test.ts +353 -0
- package/src/__tests__/browser-distribution/bundler-resolution.test.ts +223 -0
- package/src/__tests__/browser-distribution/component-registration.test.ts +217 -0
- package/src/__tests__/browser-distribution/css-bundling.test.ts +231 -0
- package/src/__tests__/browser-distribution/demo-system.test.ts +588 -0
- package/src/__tests__/browser-distribution/mcp-format-compliance.property.test.ts +379 -0
- package/src/__tests__/browser-distribution/mcp-queryability.test.ts +342 -0
- package/src/__tests__/browser-distribution/minification-effectiveness.property.test.ts +188 -0
- package/src/__tests__/browser-distribution/registration-idempotency.property.test.ts +372 -0
- package/src/__tests__/browser-distribution/soft-ceiling-warning.test.ts +161 -0
- package/src/__tests__/browser-distribution/token-completeness.property.test.ts +412 -0
- package/src/__tests__/browser-distribution/token-loading.test.ts +344 -0
- package/src/__tests__/browser-distribution/umd-bundle-loading.test.ts +169 -0
- package/src/__tests__/examples/improved-test-example.test.ts +120 -0
- package/src/__tests__/expected-exports.json +66 -0
- package/src/__tests__/export-contracts.test.ts +83 -0
- package/src/__tests__/fixtures/acknowledged-differences.json +127 -0
- package/src/__tests__/fixtures/acknowledged-differences.schema.json +113 -0
- package/src/__tests__/fixtures/acknowledged-differences.types.ts +230 -0
- package/src/__tests__/fixtures/tokenFixtures.ts +248 -0
- package/src/__tests__/helpers/configModuleLoader.ts +20 -0
- package/src/__tests__/helpers/tsModuleLoader.ts +24 -0
- package/src/__tests__/helpers/web-component-test-utils.ts +39 -0
- package/src/__tests__/integration/BlendCrossPlatformConsistency.test.ts +505 -0
- package/src/__tests__/integration/BuildSystemCompatibility.test.ts +551 -0
- package/src/__tests__/integration/CrossPlatformConsistency.test.ts +855 -0
- package/src/__tests__/integration/EndToEndWorkflow.test.ts +601 -0
- package/src/__tests__/integration/ErrorHandling.test.ts +459 -0
- package/src/__tests__/integration/OpacityPlatformTranslation.test.ts +364 -0
- package/src/__tests__/integration/PerformanceValidation.test.ts +887 -0
- package/src/__tests__/integration/SemanticTokenGeneration.test.ts +451 -0
- package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +123 -0
- package/src/__tests__/integration/TokenSystemIntegration.test.ts +890 -0
- package/src/__tests__/integration/ValidationPipeline.test.ts +404 -0
- package/src/__tests__/package-drift-validation.test.ts +249 -0
- package/src/__tests__/performance/GenerationPerformance.test.ts +409 -0
- package/src/__tests__/performance/OptimizationValidation.test.ts +509 -0
- package/src/__tests__/platform-parity/ProgressPlatformParity.test.ts +546 -0
- package/src/__tests__/spec073-opacity-architecture.test.ts +344 -0
- package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +467 -0
- package/src/__tests__/stemma-system/composition-compliance-validation.test.ts +162 -0
- package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +156 -0
- package/src/__tests__/stemma-system/contract-existence-validation.test.ts +43 -0
- package/src/__tests__/stemma-system/contract-test-reporter.ts +269 -0
- package/src/__tests__/stemma-system/cross-platform-consistency.test.ts +564 -0
- package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +503 -0
- package/src/__tests__/stemma-system/mcp-component-integration.test.ts +445 -0
- package/src/analytics/PrimitiveTokenFallbackTracker.ts +228 -0
- package/src/analytics/SemanticTokenUsageTracker.ts +193 -0
- package/src/analytics/StrategicFlexibilityTracker.ts +226 -0
- package/src/analytics/TokenUsageTracker.ts +177 -0
- package/src/analytics/UsagePatternAnalyzer.ts +177 -0
- package/src/analytics/__tests__/UsageTracking.test.ts +647 -0
- package/src/analytics/index.ts +42 -0
- package/src/assets/fonts/__tests__/androidFontLoadingValidation.test.ts +600 -0
- package/src/assets/fonts/__tests__/fontLoading.test.ts +341 -0
- package/src/assets/fonts/__tests__/iosFontConfiguration.test.ts +256 -0
- package/src/assets/fonts/__tests__/iosFontLoadingValidation.test.ts +465 -0
- package/src/assets/fonts/commit-mono/CommitMono-400-Italic.otf +0 -0
- package/src/assets/fonts/commit-mono/CommitMono-400-Regular.otf +0 -0
- package/src/assets/fonts/commit-mono/CommitMono-700-Italic.otf +0 -0
- package/src/assets/fonts/commit-mono/CommitMono-700-Regular.otf +0 -0
- package/src/assets/fonts/commit-mono/commit-mono.css +45 -0
- package/src/assets/fonts/commit-mono/custom-settings.json +1 -0
- package/src/assets/fonts/commit-mono/installation.txt +11 -0
- package/src/assets/fonts/commit-mono/license.txt +92 -0
- package/src/assets/fonts/figtree/Figtree-Italic-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/figtree/Figtree-VariableFont_wght.ttf +0 -0
- package/src/assets/fonts/figtree/OFL.txt +93 -0
- package/src/assets/fonts/figtree/README.txt +77 -0
- package/src/assets/fonts/figtree/figtree.css +27 -0
- package/src/assets/fonts/figtree/static/Figtree-Black.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-BlackItalic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-Bold.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-BoldItalic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-ExtraBold.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-ExtraBoldItalic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-Italic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-Light.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-LightItalic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-Medium.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-MediumItalic.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-Regular.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-SemiBold.ttf +0 -0
- package/src/assets/fonts/figtree/static/Figtree-SemiBoldItalic.ttf +0 -0
- 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 +49 -0
- package/src/assets/fonts/rajdhani/OFL.txt +91 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Bold.ttf +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Bold.woff +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Bold.woff2 +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Light.ttf +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Medium.ttf +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Medium.woff +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Medium.woff2 +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Regular.ttf +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Regular.woff +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-Regular.woff2 +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-SemiBold.ttf +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-SemiBold.woff +0 -0
- package/src/assets/fonts/rajdhani/Rajdhani-SemiBold.woff2 +0 -0
- package/src/assets/fonts/rajdhani/rajdhani.css +53 -0
- package/src/blend/BlendCalculator.ts +120 -0
- package/src/blend/ColorSpaceUtils.ts +325 -0
- package/src/blend/OklchBlendCalculator.ts +79 -0
- package/src/blend/ThemeAwareBlendUtilities.android.kt +367 -0
- package/src/blend/ThemeAwareBlendUtilities.ios.swift +325 -0
- package/src/blend/ThemeAwareBlendUtilities.web.ts +315 -0
- package/src/blend/__tests__/BlendCalculator.test.ts +393 -0
- package/src/blend/__tests__/BlendUtilities.property.test.ts +600 -0
- package/src/blend/__tests__/ColorSpaceUtils.test.ts +885 -0
- package/src/blend/__tests__/InteractionStateAudit.test.ts +235 -0
- package/src/blend/__tests__/OklchBlendCalculator.test.ts +134 -0
- package/src/blend/__tests__/ThemeAwareBlendUtilities.test.ts +200 -0
- package/src/blend/__tests__/ThemeSwitching.test.ts +508 -0
- package/src/blend/index.ts +37 -0
- package/src/browser-entry.ts +270 -0
- package/src/build/.gitkeep +1 -0
- package/src/build/BuildOrchestrator.ts +663 -0
- package/src/build/__tests__/AndroidBuildIntegration.test.ts +437 -0
- package/src/build/__tests__/AndroidMotionTokenGeneration.test.ts +256 -0
- package/src/build/__tests__/BuildOrchestrator.test.ts +562 -0
- package/src/build/__tests__/MotionTokenCrossPlatformIntegration.test.ts +424 -0
- package/src/build/__tests__/WebCSSTokenGeneration.test.ts +271 -0
- package/src/build/__tests__/WebMotionTokenGeneration.test.ts +305 -0
- package/src/build/__tests__/WebNPMPackageStructure.test.ts +447 -0
- package/src/build/__tests__/iOSMotionTokenGeneration.test.ts +298 -0
- package/src/build/errors/BuildError.ts +140 -0
- package/src/build/errors/ErrorDocumentation.ts +638 -0
- package/src/build/errors/ErrorHandler.ts +406 -0
- package/src/build/errors/ErrorReporter.ts +573 -0
- package/src/build/errors/PlatformGenerationError.ts +201 -0
- package/src/build/errors/README.md +486 -0
- package/src/build/errors/RecoveryStrategy.ts +393 -0
- package/src/build/errors/TokenGenerationError.ts +196 -0
- package/src/build/errors/TokenReferenceError.ts +204 -0
- package/src/build/errors/__tests__/BuildError.test.ts +212 -0
- package/src/build/errors/__tests__/ErrorDocumentation.example.ts +272 -0
- package/src/build/errors/__tests__/ErrorDocumentation.test.ts +458 -0
- package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +295 -0
- package/src/build/errors/__tests__/ErrorHandler.test.ts +497 -0
- package/src/build/errors/__tests__/ErrorReporter.test.ts +581 -0
- package/src/build/errors/__tests__/MotionTokenErrors.test.ts +392 -0
- package/src/build/errors/__tests__/RecoveryStrategy.test.ts +643 -0
- package/src/build/errors/index.ts +90 -0
- package/src/build/index.ts +73 -0
- package/src/build/orchestration/IncrementalBuilder.ts +532 -0
- package/src/build/orchestration/ParallelExecutor.ts +336 -0
- package/src/build/orchestration/ProgressTracker.ts +582 -0
- package/src/build/orchestration/SequentialExecutor.ts +305 -0
- package/src/build/orchestration/__tests__/IncrementalBuilder.test.ts +354 -0
- package/src/build/orchestration/__tests__/ParallelExecutor.integration.test.ts +295 -0
- package/src/build/orchestration/__tests__/ParallelExecutor.test.ts +493 -0
- package/src/build/orchestration/__tests__/ProgressTracker.test.ts +529 -0
- package/src/build/orchestration/__tests__/SequentialExecutor.integration.test.ts +202 -0
- package/src/build/orchestration/__tests__/SequentialExecutor.test.ts +232 -0
- package/src/build/orchestration/index.ts +35 -0
- package/src/build/platforms/.gitkeep +1 -0
- package/src/build/platforms/AndroidBuilder.ts +1366 -0
- package/src/build/platforms/AndroidShadowGenerator.ts +394 -0
- package/src/build/platforms/IOSShadowGenerator.ts +324 -0
- package/src/build/platforms/PlatformBuilder.ts +131 -0
- package/src/build/platforms/WebBuilder.ts +1414 -0
- package/src/build/platforms/WebShadowGenerator.ts +288 -0
- package/src/build/platforms/__tests__/AndroidBuilder.tokenGeneration.test.ts +146 -0
- package/src/build/platforms/__tests__/AndroidShadowGenerator.test.ts +195 -0
- package/src/build/platforms/__tests__/IOSShadowGenerator.test.ts +156 -0
- package/src/build/platforms/__tests__/WebShadowGenerator.test.ts +123 -0
- package/src/build/platforms/__tests__/iOSBuilder.test.ts +1599 -0
- package/src/build/platforms/iOSBuilder.ts +1746 -0
- package/src/build/platforms/index.ts +9 -0
- package/src/build/product/ProductTokenGenerator.ts +162 -0
- package/src/build/product/TokenIndexReader.ts +78 -0
- package/src/build/product/__tests__/KotlinEmitter.test.ts +109 -0
- package/src/build/product/__tests__/ProductTokenGenerator.test.ts +135 -0
- package/src/build/product/__tests__/SwiftEmitter.test.ts +90 -0
- package/src/build/product/__tests__/TokenIndexReader.test.ts +85 -0
- package/src/build/product/__tests__/WebEmitter.test.ts +111 -0
- package/src/build/product/__tests__/fixtures/tokens/layout.yaml +21 -0
- package/src/build/product/__tests__/fixtures/tokens/motion.yaml +11 -0
- package/src/build/product/__tests__/fixtures/tokens/visualization.yaml +8 -0
- package/src/build/product/emitters/KotlinEmitter.ts +83 -0
- package/src/build/product/emitters/SwiftEmitter.ts +95 -0
- package/src/build/product/emitters/WebEmitter.ts +69 -0
- package/src/build/tokens/.gitkeep +1 -0
- package/src/build/tokens/ComponentToken.ts +285 -0
- package/src/build/tokens/ComponentTokenGenerator.ts +376 -0
- package/src/build/tokens/PlatformTokens.ts +188 -0
- package/src/build/tokens/TokenIntegrator.ts +410 -0
- package/src/build/tokens/TokenSelection.ts +130 -0
- package/src/build/tokens/TokenSelector.ts +394 -0
- package/src/build/tokens/UnitConverter.ts +320 -0
- package/src/build/tokens/__tests__/ClassInvariantGuard.test.ts +167 -0
- package/src/build/tokens/__tests__/ComponentTokenGenerator.test.ts +285 -0
- package/src/build/tokens/__tests__/TokenIntegrator.test.ts +319 -0
- package/src/build/tokens/__tests__/TokenSelector.test.ts +264 -0
- package/src/build/tokens/__tests__/UnitConverter.applyScaleWithRounding.test.ts +160 -0
- package/src/build/tokens/__tests__/UnitConverter.test.ts +331 -0
- package/src/build/tokens/__tests__/brand-dual-instance.test.ts +135 -0
- package/src/build/tokens/__tests__/defineComponentTokens.test.ts +440 -0
- package/src/build/tokens/defineComponentTokens.ts +286 -0
- package/src/build/tokens/index.ts +44 -0
- package/src/build/tokens/types.ts +26 -0
- package/src/build/types/.gitkeep +1 -0
- package/src/build/types/BuildConfig.ts +123 -0
- package/src/build/types/BuildOrchestrator.ts +114 -0
- package/src/build/types/BuildResult.ts +125 -0
- package/src/build/types/Platform.ts +49 -0
- package/src/build/types/index.ts +39 -0
- package/src/build/validation/.gitkeep +1 -0
- package/src/build/validation/AndroidBuildValidator.ts +630 -0
- package/src/build/validation/CrossPlatformValidationReporter.ts +1267 -0
- package/src/build/validation/InterfaceContractValidator.ts +417 -0
- package/src/build/validation/InterfaceValidator.ts +326 -0
- package/src/build/validation/MathematicalConsistencyValidator.ts +874 -0
- package/src/build/validation/MethodSignatureValidator.ts +374 -0
- package/src/build/validation/PropertyTypeValidator.ts +312 -0
- package/src/build/validation/TokenComparator.ts +796 -0
- package/src/build/validation/ValidationReporter.example.ts +310 -0
- package/src/build/validation/ValidationReporter.ts +745 -0
- package/src/build/validation/WebBuildValidator.ts +583 -0
- package/src/build/validation/__tests__/AndroidBuildValidator.test.ts +522 -0
- package/src/build/validation/__tests__/CrossPlatformValidationReporter.test.ts +593 -0
- package/src/build/validation/__tests__/InterfaceContractValidator.test.ts +647 -0
- package/src/build/validation/__tests__/InterfaceValidation.functional.test.ts +360 -0
- package/src/build/validation/__tests__/InterfaceValidator.test.ts +318 -0
- package/src/build/validation/__tests__/MethodSignatureValidator.test.ts +625 -0
- package/src/build/validation/__tests__/MotionTokenCrossPlatformValidation.test.ts +305 -0
- package/src/build/validation/__tests__/MotionTokenValidation.test.ts +309 -0
- package/src/build/validation/__tests__/PropertyTypeValidator.test.ts +557 -0
- package/src/build/validation/__tests__/TokenComparator.test.ts +358 -0
- package/src/build/validation/__tests__/ValidationReporter.integration.test.ts +424 -0
- package/src/build/validation/__tests__/ValidationReporter.test.ts +793 -0
- package/src/build/validation/__tests__/WebBuildValidator.test.ts +495 -0
- package/src/build/validation/iOSBuildValidator.ts +783 -0
- package/src/build/validation/index.ts +74 -0
- package/src/build/validation/types/InterfaceDefinition.ts +101 -0
- package/src/build/validation/types/ValidationResult.ts +114 -0
- package/src/build/workflow/BuildMode.ts +336 -0
- package/src/build/workflow/CICDIntegration.ts +503 -0
- package/src/build/workflow/ConfigHelpers.example.ts +317 -0
- package/src/build/workflow/ConfigHelpers.ts +834 -0
- package/src/build/workflow/README.md +327 -0
- package/src/build/workflow/SourceMapGenerator.ts +362 -0
- package/src/build/workflow/__tests__/BuildMode.test.ts +544 -0
- package/src/build/workflow/__tests__/CICDIntegration.test.ts +591 -0
- package/src/build/workflow/__tests__/ConfigHelpers.test.ts +559 -0
- package/src/build/workflow/__tests__/SourceMapGenerator.test.ts +421 -0
- package/src/build/workflow/index.ts +42 -0
- package/src/cli/__tests__/Applier.test.ts +202 -0
- package/src/cli/__tests__/Classifier.test.ts +187 -0
- package/src/cli/__tests__/FileScanner.test.ts +108 -0
- package/src/cli/__tests__/IgnoreFilter.test.ts +92 -0
- package/src/cli/__tests__/Manifest.test.ts +107 -0
- package/src/cli/__tests__/PackageResolver.test.ts +66 -0
- package/src/cli/__tests__/Prompter.test.ts +165 -0
- package/src/cli/__tests__/Reporter.test.ts +128 -0
- package/src/cli/__tests__/backward-compat.test.ts +142 -0
- package/src/cli/__tests__/figma-extract.test.ts +342 -0
- package/src/cli/__tests__/figma-push.test.ts +350 -0
- package/src/cli/__tests__/init.test.ts +259 -0
- package/src/cli/__tests__/loadComponentTokens.test.ts +187 -0
- package/src/cli/__tests__/pipeline-independence.test.ts +127 -0
- package/src/cli/__tests__/product-only.test.ts +130 -0
- package/src/cli/__tests__/resolveTokens.test.ts +88 -0
- package/src/cli/__tests__/staleness.test.ts +132 -0
- package/src/cli/__tests__/sync.test.ts +199 -0
- package/src/cli/__tests__/validate.test.ts +69 -0
- package/src/cli/designerpunk.ts +410 -0
- package/src/cli/figma-extract.ts +331 -0
- package/src/cli/figma-push.ts +288 -0
- package/src/cli/generateProductTokens.ts +69 -0
- package/src/cli/init.ts +481 -0
- package/src/cli/loadComponentTokens.ts +145 -0
- package/src/cli/resolveTokens.ts +123 -0
- package/src/cli/shared/mcpDataRoots.ts +122 -0
- package/src/cli/shared/resolvePackageRoot.ts +58 -0
- package/src/cli/shared/transforms.ts +18 -0
- package/src/cli/staleness.ts +81 -0
- package/src/cli/sync/Applier.ts +128 -0
- package/src/cli/sync/Classifier.ts +130 -0
- package/src/cli/sync/FileScanner.ts +64 -0
- package/src/cli/sync/IgnoreFilter.ts +44 -0
- package/src/cli/sync/Manifest.ts +64 -0
- package/src/cli/sync/PackageResolver.ts +40 -0
- package/src/cli/sync/Prompter.ts +173 -0
- package/src/cli/sync/Reporter.ts +78 -0
- package/src/cli/sync/SteeringDirCheck.ts +166 -0
- package/src/cli/sync/index.ts +115 -0
- package/src/cli/templates/mcp-config.json.template +46 -0
- package/src/cli/validate.ts +135 -0
- package/src/cli/validateProductTokens.ts +55 -0
- package/src/color/OklchConverter.ts +284 -0
- package/src/color/OklchValidator.ts +186 -0
- package/src/color/__tests__/OklchConverter.test.ts +232 -0
- package/src/color/__tests__/OklchRegression.test.ts +101 -0
- package/src/color/__tests__/OklchValidator.test.ts +199 -0
- package/src/color/__tests__/WcagContrast.test.ts +76 -0
- package/src/components/__tests__/BlendTokenUsageValidation.test.ts +726 -0
- package/src/components/__tests__/DynamicImportGuard.test.ts +226 -0
- package/src/components/__tests__/ExtensionLintPolicy.test.ts +113 -0
- package/src/components/__tests__/TokenCompliance.test.ts +921 -0
- package/src/components/__tests__/colorInheritanceValidation.test.ts +267 -0
- package/src/components/__tests__/componentTypographyInheritance.test.ts +326 -0
- package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +113 -0
- package/src/components/core/Avatar-Base/README.md +366 -0
- package/src/components/core/Avatar-Base/__tests__/.gitkeep +3 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +483 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.icon-integration.test.ts +656 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +393 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.lifecycle.test.ts +545 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.rendering.test.ts +505 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +692 -0
- package/src/components/core/Avatar-Base/avatar.tokens.ts +376 -0
- package/src/components/core/Avatar-Base/component-meta.yaml +20 -0
- package/src/components/core/Avatar-Base/contracts.yaml +212 -0
- package/src/components/core/Avatar-Base/index.ts +25 -0
- package/src/components/core/Avatar-Base/platforms/android/.gitkeep +3 -0
- package/src/components/core/Avatar-Base/platforms/android/Avatar.android.kt +593 -0
- package/src/components/core/Avatar-Base/platforms/android/AvatarPreview.kt +1106 -0
- package/src/components/core/Avatar-Base/platforms/android/HexagonShape.kt +297 -0
- package/src/components/core/Avatar-Base/platforms/ios/.gitkeep +3 -0
- package/src/components/core/Avatar-Base/platforms/ios/Avatar.ios.swift +815 -0
- package/src/components/core/Avatar-Base/platforms/ios/AvatarPreview.swift +773 -0
- package/src/components/core/Avatar-Base/platforms/ios/RoundedPointyTopHexagon.swift +360 -0
- package/src/components/core/Avatar-Base/platforms/web/.gitkeep +3 -0
- package/src/components/core/Avatar-Base/platforms/web/Avatar.styles.css +595 -0
- package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +873 -0
- package/src/components/core/Avatar-Base/platforms/web/hexagon-clip.svg +87 -0
- package/src/components/core/Avatar-Base/tokens/.gitkeep +4 -0
- package/src/components/core/Avatar-Base/types.ts +86 -0
- package/src/components/core/Badge-Count-Base/Badge-Count-Base.schema.yaml +122 -0
- package/src/components/core/Badge-Count-Base/README.md +323 -0
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.stemma.test.ts +548 -0
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.test.ts +452 -0
- package/src/components/core/Badge-Count-Base/__tests__/test-utils.ts +244 -0
- package/src/components/core/Badge-Count-Base/component-meta.yaml +23 -0
- package/src/components/core/Badge-Count-Base/contracts.yaml +173 -0
- package/src/components/core/Badge-Count-Base/index.ts +37 -0
- package/src/components/core/Badge-Count-Base/platforms/android/.gitkeep +1 -0
- package/src/components/core/Badge-Count-Base/platforms/android/BadgeCountBase.android.kt +581 -0
- package/src/components/core/Badge-Count-Base/platforms/ios/.gitkeep +1 -0
- package/src/components/core/Badge-Count-Base/platforms/ios/BadgeCountBase.ios.swift +502 -0
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.styles.css +148 -0
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.ts +363 -0
- package/src/components/core/Badge-Count-Base/types.ts +150 -0
- package/src/components/core/Badge-Count-Notification/Badge-Count-Notification.schema.yaml +108 -0
- package/src/components/core/Badge-Count-Notification/README.md +396 -0
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.stemma.test.ts +571 -0
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.test.ts +490 -0
- package/src/components/core/Badge-Count-Notification/__tests__/test-utils.ts +256 -0
- package/src/components/core/Badge-Count-Notification/component-meta.yaml +20 -0
- package/src/components/core/Badge-Count-Notification/contracts.yaml +92 -0
- package/src/components/core/Badge-Count-Notification/index.ts +60 -0
- package/src/components/core/Badge-Count-Notification/platforms/android/.gitkeep +2 -0
- package/src/components/core/Badge-Count-Notification/platforms/android/BadgeCountNotification.android.kt +818 -0
- package/src/components/core/Badge-Count-Notification/platforms/ios/BadgeCountNotification.ios.swift +660 -0
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.styles.css +182 -0
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.ts +401 -0
- package/src/components/core/Badge-Count-Notification/tokens.ts +124 -0
- package/src/components/core/Badge-Count-Notification/types.ts +119 -0
- package/src/components/core/Badge-Label-Base/Badge-Label-Base.schema.yaml +131 -0
- package/src/components/core/Badge-Label-Base/README.md +251 -0
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.stemma.test.ts +549 -0
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.test.ts +439 -0
- package/src/components/core/Badge-Label-Base/__tests__/test-utils.ts +269 -0
- package/src/components/core/Badge-Label-Base/__tests__/tokens.test.ts +88 -0
- package/src/components/core/Badge-Label-Base/component-meta.yaml +21 -0
- package/src/components/core/Badge-Label-Base/contracts.yaml +148 -0
- package/src/components/core/Badge-Label-Base/index.ts +41 -0
- package/src/components/core/Badge-Label-Base/platforms/android/BadgeLabelBase.android.kt +452 -0
- package/src/components/core/Badge-Label-Base/platforms/ios/BadgeLabelBase.ios.swift +483 -0
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.styles.css +166 -0
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.ts +340 -0
- package/src/components/core/Badge-Label-Base/tokens.ts +80 -0
- package/src/components/core/Badge-Label-Base/types.ts +148 -0
- package/src/components/core/Button-CTA/Button-CTA.schema.yaml +259 -0
- package/src/components/core/Button-CTA/Button-CTA.tokens.ts +79 -0
- package/src/components/core/Button-CTA/README.md +296 -0
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.alignment.test.ts +355 -0
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +752 -0
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.tokens.test.ts +89 -0
- package/src/components/core/Button-CTA/__tests__/setup.test.ts +211 -0
- package/src/components/core/Button-CTA/__tests__/test-utils.ts +187 -0
- package/src/components/core/Button-CTA/component-meta.yaml +25 -0
- package/src/components/core/Button-CTA/contracts.yaml +140 -0
- package/src/components/core/Button-CTA/examples/BasicUsage.html +145 -0
- package/src/components/core/Button-CTA/examples/BasicUsage.tsx +246 -0
- package/src/components/core/Button-CTA/examples/Variants.html +263 -0
- package/src/components/core/Button-CTA/examples/WithIcon.html +166 -0
- package/src/components/core/Button-CTA/index.ts +20 -0
- package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +405 -0
- package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +552 -0
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +419 -0
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +697 -0
- package/src/components/core/Button-CTA/platforms/web/__tests__/ButtonCTA.icon-integration.test.ts +476 -0
- package/src/components/core/Button-CTA/types.ts +257 -0
- package/src/components/core/Button-Icon/Button-Icon.schema.yaml +114 -0
- package/src/components/core/Button-Icon/README.md +371 -0
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.alignment.test.ts +358 -0
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties-8-13.test.ts +953 -0
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties.test.ts +920 -0
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.stemma.test.ts +622 -0
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.unit.test.ts +560 -0
- package/src/components/core/Button-Icon/__tests__/setup.test.ts +361 -0
- package/src/components/core/Button-Icon/__tests__/test-utils.ts +248 -0
- package/src/components/core/Button-Icon/buttonIcon.tokens.ts +202 -0
- package/src/components/core/Button-Icon/component-meta.yaml +24 -0
- package/src/components/core/Button-Icon/contracts.yaml +228 -0
- package/src/components/core/Button-Icon/platforms/android/ButtonIcon.android.kt +548 -0
- package/src/components/core/Button-Icon/platforms/ios/ButtonIcon.ios.swift +482 -0
- package/src/components/core/Button-Icon/platforms/web/.gitkeep +4 -0
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.css +600 -0
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.ts +625 -0
- package/src/components/core/Button-Icon/types.ts +186 -0
- package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.schema.yaml +138 -0
- package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.ts +112 -0
- package/src/components/core/Button-VerticalList-Item/README.md +450 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/.gitkeep +2 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.alignment.test.ts +271 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.failLoudly.test.ts +106 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.integration.test.ts +480 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.properties.test.ts +634 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.unit.test.ts +746 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/rtlSupport.test.ts +206 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/test-utils.ts +297 -0
- package/src/components/core/Button-VerticalList-Item/__tests__/visualStateMapping.test.ts +419 -0
- package/src/components/core/Button-VerticalList-Item/component-meta.yaml +24 -0
- package/src/components/core/Button-VerticalList-Item/contracts.yaml +138 -0
- package/src/components/core/Button-VerticalList-Item/index.ts +49 -0
- package/src/components/core/Button-VerticalList-Item/platforms/android/.gitkeep +2 -0
- package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItem.android.kt +594 -0
- package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItemTest.kt +1109 -0
- package/src/components/core/Button-VerticalList-Item/platforms/android/VisualStateStyles.kt +585 -0
- package/src/components/core/Button-VerticalList-Item/platforms/ios/.gitkeep +2 -0
- package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItem.ios.swift +853 -0
- package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItemTests.swift +794 -0
- package/src/components/core/Button-VerticalList-Item/platforms/ios/VisualStateStyles.swift +453 -0
- package/src/components/core/Button-VerticalList-Item/platforms/web/.gitkeep +2 -0
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.styles.css +459 -0
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts +1030 -0
- package/src/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.ts +411 -0
- package/src/components/core/Button-VerticalList-Item/types.ts +338 -0
- package/src/components/core/Button-VerticalList-Set/Button-VerticalList-Set.schema.yaml +110 -0
- package/src/components/core/Button-VerticalList-Set/README.md +578 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/.gitkeep +5 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.integration.test.ts +676 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property.test.ts +786 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property2.test.ts +1109 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.unit.test.ts +924 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/animationTiming.test.ts +182 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/crossPlatformConsistency.test.ts +685 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/deriveItemStates.test.ts +179 -0
- package/src/components/core/Button-VerticalList-Set/__tests__/validation.test.ts +275 -0
- package/src/components/core/Button-VerticalList-Set/component-meta.yaml +22 -0
- package/src/components/core/Button-VerticalList-Set/contracts.yaml +170 -0
- package/src/components/core/Button-VerticalList-Set/index.ts +32 -0
- package/src/components/core/Button-VerticalList-Set/platforms/android/.gitkeep +0 -0
- package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSet.android.kt +805 -0
- package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetPreview.kt +390 -0
- package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetTest.kt +961 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/.gitkeep +0 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSet.ios.swift +1127 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetPreview.swift +664 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetTests.swift +475 -0
- package/src/components/core/Button-VerticalList-Set/platforms/web/.gitkeep +4 -0
- package/src/components/core/Button-VerticalList-Set/platforms/web/Button-VerticalList-Set.styles.css +167 -0
- package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts +1446 -0
- package/src/components/core/Button-VerticalList-Set/types.ts +788 -0
- package/src/components/core/Chip-Base/Chip-Base.schema.yaml +214 -0
- package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +521 -0
- package/src/components/core/Chip-Base/component-meta.yaml +25 -0
- package/src/components/core/Chip-Base/contracts.yaml +201 -0
- package/src/components/core/Chip-Base/index.ts +40 -0
- package/src/components/core/Chip-Base/platforms/android/ChipBase.android.kt +379 -0
- package/src/components/core/Chip-Base/platforms/ios/.gitkeep +3 -0
- package/src/components/core/Chip-Base/platforms/ios/ChipBase.ios.swift +420 -0
- package/src/components/core/Chip-Base/platforms/web/.gitkeep +5 -0
- package/src/components/core/Chip-Base/platforms/web/ChipBase.styles.css +280 -0
- package/src/components/core/Chip-Base/platforms/web/ChipBase.web.ts +480 -0
- package/src/components/core/Chip-Base/types.ts +189 -0
- package/src/components/core/Chip-Filter/Chip-Filter.schema.yaml +181 -0
- package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +579 -0
- package/src/components/core/Chip-Filter/component-meta.yaml +20 -0
- package/src/components/core/Chip-Filter/contracts.yaml +76 -0
- package/src/components/core/Chip-Filter/index.ts +34 -0
- package/src/components/core/Chip-Filter/platforms/android/ChipFilter.android.kt +484 -0
- package/src/components/core/Chip-Filter/platforms/ios/ChipFilter.ios.swift +510 -0
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.styles.css +105 -0
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.web.ts +539 -0
- package/src/components/core/Chip-Filter/types.ts +47 -0
- package/src/components/core/Chip-Input/Chip-Input.schema.yaml +173 -0
- package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +459 -0
- package/src/components/core/Chip-Input/component-meta.yaml +20 -0
- package/src/components/core/Chip-Input/contracts.yaml +75 -0
- package/src/components/core/Chip-Input/index.ts +35 -0
- package/src/components/core/Chip-Input/platforms/android/.gitkeep +3 -0
- package/src/components/core/Chip-Input/platforms/android/ChipInput.android.kt +409 -0
- package/src/components/core/Chip-Input/platforms/ios/.gitkeep +3 -0
- package/src/components/core/Chip-Input/platforms/ios/ChipInput.ios.swift +449 -0
- package/src/components/core/Chip-Input/platforms/web/ChipInput.styles.css +99 -0
- package/src/components/core/Chip-Input/platforms/web/ChipInput.web.ts +485 -0
- package/src/components/core/Chip-Input/types.ts +35 -0
- package/src/components/core/Container-Base/Container-Base.schema.yaml +411 -0
- package/src/components/core/Container-Base/README.md +450 -0
- package/src/components/core/Container-Base/__tests__/ContainerBase.test.ts +712 -0
- package/src/components/core/Container-Base/component-meta.yaml +22 -0
- package/src/components/core/Container-Base/contracts.yaml +118 -0
- package/src/components/core/Container-Base/index.ts +47 -0
- package/src/components/core/Container-Base/platforms/android/ContainerBase.android.kt +654 -0
- package/src/components/core/Container-Base/platforms/android/TokenMapping.kt +558 -0
- package/src/components/core/Container-Base/platforms/ios/ContainerBase.ios.swift +699 -0
- package/src/components/core/Container-Base/platforms/ios/TokenMapping.swift +493 -0
- package/src/components/core/Container-Base/platforms/web/ContainerBase.web.ts +405 -0
- package/src/components/core/Container-Base/platforms/web/styles.css +198 -0
- package/src/components/core/Container-Base/platforms/web/token-mapping.ts +573 -0
- package/src/components/core/Container-Base/tokens.ts +241 -0
- package/src/components/core/Container-Base/types.ts +307 -0
- package/src/components/core/Container-Card-Base/Container-Card-Base.schema.yaml +374 -0
- package/src/components/core/Container-Card-Base/README.md +506 -0
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.composition.test.ts +167 -0
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.test.ts +646 -0
- package/src/components/core/Container-Card-Base/component-meta.yaml +21 -0
- package/src/components/core/Container-Card-Base/contracts.yaml +129 -0
- package/src/components/core/Container-Card-Base/index.ts +64 -0
- package/src/components/core/Container-Card-Base/platforms/android/ContainerCardBase.android.kt +800 -0
- package/src/components/core/Container-Card-Base/platforms/ios/ContainerCardBase.ios.swift +962 -0
- package/src/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.ts +373 -0
- package/src/components/core/Container-Card-Base/tokens.ts +224 -0
- package/src/components/core/Container-Card-Base/types.ts +332 -0
- package/src/components/core/Icon-Base/Icon-Base.schema.yaml +206 -0
- package/src/components/core/Icon-Base/README.md +168 -0
- package/src/components/core/Icon-Base/__tests__/IconBase.test.ts +192 -0
- package/src/components/core/Icon-Base/component-meta.yaml +22 -0
- package/src/components/core/Icon-Base/contracts.yaml +89 -0
- package/src/components/core/Icon-Base/index.ts +34 -0
- package/src/components/core/Icon-Base/platforms/android/IconBase.android.kt +240 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/README.md +255 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/alert_circle.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/arrow_down.xml +17 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/arrow_left.xml +17 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/arrow_right.xml +17 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/arrow_up.xml +17 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/award.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/bell.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/briefcase.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/calendar.xml +34 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/check.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/check_circle.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/chevron_down.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/chevron_left.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/chevron_right.xml +12 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/circle.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/clock.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/credit_card.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/dollar_sign.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/external_link.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/eye.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/eye_off.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/file_text.xml +41 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/filter.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/globe.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/heart.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/info.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/mail.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/map_pin.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/minus.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/more_horizontal.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/more_vertical.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/phone.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/plus.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/refresh_cw.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/save.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/search.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/settings.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/share.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/share_2.xml +41 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/shield.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/smartphone.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/smile.xml +34 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/star.xml +13 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/trending_up.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/user.xml +20 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/user_check.xml +27 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/user_x.xml +34 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/users.xml +34 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/wifi.xml +34 -0
- package/src/components/core/Icon-Base/platforms/android/res/drawable/x.xml +20 -0
- package/src/components/core/Icon-Base/platforms/ios/ASSET_CATALOG_SETUP.md +239 -0
- package/src/components/core/Icon-Base/platforms/ios/IconBase.ios.swift +296 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Contents.json +6 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/Contents.json +9 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/alert-circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/arrow-down.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/arrow-left.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/arrow-right.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/arrow-up.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/award.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/bell.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/briefcase.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/calendar.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/check-circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/check.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/chevron-down.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/chevron-left.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/chevron-right.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/clock.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/credit-card.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/dollar-sign.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/external-link.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/eye-off.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/eye.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/file-text.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/filter.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/globe.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/heart.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/info.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/mail.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/map-pin.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/minus.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/more-horizontal.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/more-vertical.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/phone.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/plus.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/refresh-cw.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/save.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/search.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/settings.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/share-2.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/share.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/shield.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/smartphone.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/smile.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/star.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/trending-up.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/user-check.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/user-x.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/user.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/users.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/wifi.svg +1 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/Contents.json +15 -0
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/x.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/IconBase.web.ts +553 -0
- package/src/components/core/Icon-Base/platforms/web/assets/alert-circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-down.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-left.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-right.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-up.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/award.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/bell.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/briefcase.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/calendar.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/check-circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/check.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-down.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-left.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-right.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/circle.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/clock.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/credit-card.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/dollar-sign.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/external-link.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/eye-off.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/eye.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/file-text.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/filter.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/globe.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/heart.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/info.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/mail.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/map-pin.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/minus.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/more-horizontal.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/more-vertical.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/phone.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/plus.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/refresh-cw.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/save.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/search.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/settings.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/share-2.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/share.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/shield.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/smartphone.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/smile.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/star.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/trending-up.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/user-check.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/user-x.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/user.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/users.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/wifi.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/assets/x.svg +1 -0
- package/src/components/core/Icon-Base/platforms/web/styles.css +203 -0
- package/src/components/core/Icon-Base/types.ts +338 -0
- package/src/components/core/Input-Checkbox-Base/Input-Checkbox-Base.schema.yaml +147 -0
- package/src/components/core/Input-Checkbox-Base/README.md +390 -0
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.stemma.test.ts +552 -0
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.test.ts +878 -0
- package/src/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.ts +37 -0
- package/src/components/core/Input-Checkbox-Base/component-meta.yaml +39 -0
- package/src/components/core/Input-Checkbox-Base/contracts.yaml +165 -0
- package/src/components/core/Input-Checkbox-Base/platforms/android/InputCheckboxBase.android.kt +777 -0
- package/src/components/core/Input-Checkbox-Base/platforms/ios/InputCheckboxBase.ios.swift +612 -0
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.css +477 -0
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.ts +561 -0
- package/src/components/core/Input-Checkbox-Base/types.ts +399 -0
- package/src/components/core/Input-Checkbox-Legal/Input-Checkbox-Legal.schema.yaml +81 -0
- package/src/components/core/Input-Checkbox-Legal/README.md +554 -0
- package/src/components/core/Input-Checkbox-Legal/__tests__/InputCheckboxLegal.test.ts +727 -0
- package/src/components/core/Input-Checkbox-Legal/component-meta.yaml +39 -0
- package/src/components/core/Input-Checkbox-Legal/contracts.yaml +55 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/android/.gitkeep +2 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/android/InputCheckboxLegal.android.kt +408 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/ios/.gitkeep +2 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/ios/InputCheckboxLegal.ios.swift +387 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.css +112 -0
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.ts +505 -0
- package/src/components/core/Input-Checkbox-Legal/types.ts +348 -0
- package/src/components/core/Input-Radio-Base/.gitkeep +2 -0
- package/src/components/core/Input-Radio-Base/Input-Radio-Base.schema.yaml +139 -0
- package/src/components/core/Input-Radio-Base/README.md +427 -0
- package/src/components/core/Input-Radio-Base/__tests__/.gitkeep +1 -0
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.form.test.ts +299 -0
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.stemma.test.ts +543 -0
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.test.ts +429 -0
- package/src/components/core/Input-Radio-Base/component-meta.yaml +28 -0
- package/src/components/core/Input-Radio-Base/contracts.yaml +140 -0
- package/src/components/core/Input-Radio-Base/platforms/android/InputRadioBase.android.kt +685 -0
- package/src/components/core/Input-Radio-Base/platforms/ios/.gitkeep +1 -0
- package/src/components/core/Input-Radio-Base/platforms/ios/InputRadioBase.ios.swift +567 -0
- package/src/components/core/Input-Radio-Base/platforms/web/.gitkeep +1 -0
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.css +504 -0
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.ts +648 -0
- package/src/components/core/Input-Radio-Base/radio-sizing.tokens.ts +37 -0
- package/src/components/core/Input-Radio-Base/types.ts +362 -0
- package/src/components/core/Input-Radio-Set/Input-Radio-Set.schema.yaml +92 -0
- package/src/components/core/Input-Radio-Set/README.md +373 -0
- package/src/components/core/Input-Radio-Set/__tests__/.gitkeep +0 -0
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.stemma.test.ts +493 -0
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.test.ts +499 -0
- package/src/components/core/Input-Radio-Set/component-meta.yaml +44 -0
- package/src/components/core/Input-Radio-Set/contracts.yaml +100 -0
- package/src/components/core/Input-Radio-Set/platforms/android/.gitkeep +0 -0
- package/src/components/core/Input-Radio-Set/platforms/android/InputRadioSet.android.kt +363 -0
- package/src/components/core/Input-Radio-Set/platforms/ios/InputRadioSet.ios.swift +330 -0
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.css +99 -0
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.ts +790 -0
- package/src/components/core/Input-Radio-Set/types.ts +301 -0
- package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +219 -0
- package/src/components/core/Input-Text-Base/README.md +235 -0
- package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +310 -0
- package/src/components/core/Input-Text-Base/__tests__/keyboardNavigation.test.ts +444 -0
- package/src/components/core/Input-Text-Base/__tests__/labelAssociation.test.ts +418 -0
- package/src/components/core/Input-Text-Base/__tests__/screenReaderSupport.test.ts +405 -0
- package/src/components/core/Input-Text-Base/__tests__/setup.ts +17 -0
- package/src/components/core/Input-Text-Base/__tests__/stateManagement.test.ts +718 -0
- package/src/components/core/Input-Text-Base/__tests__/test-utils.ts +81 -0
- package/src/components/core/Input-Text-Base/__tests__/touchTargetSizing.test.ts +319 -0
- package/src/components/core/Input-Text-Base/component-meta.yaml +38 -0
- package/src/components/core/Input-Text-Base/contracts.yaml +149 -0
- package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +481 -0
- package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +507 -0
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.ts +241 -0
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.css +293 -0
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.ts +448 -0
- package/src/components/core/Input-Text-Base/stateManagement.ts +267 -0
- package/src/components/core/Input-Text-Base/tokens.ts +210 -0
- package/src/components/core/Input-Text-Base/types.ts +102 -0
- package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +247 -0
- package/src/components/core/Input-Text-Email/README.md +251 -0
- package/src/components/core/Input-Text-Email/__tests__/validation.test.ts +127 -0
- package/src/components/core/Input-Text-Email/component-meta.yaml +27 -0
- package/src/components/core/Input-Text-Email/contracts.yaml +47 -0
- package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +197 -0
- package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +291 -0
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.ts +276 -0
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.ts +319 -0
- package/src/components/core/Input-Text-Email/stateManagement.ts +160 -0
- package/src/components/core/Input-Text-Email/tokens.ts +33 -0
- package/src/components/core/Input-Text-Email/types.ts +72 -0
- package/src/components/core/Input-Text-Email/validation.ts +130 -0
- package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +300 -0
- package/src/components/core/Input-Text-Password/README.md +359 -0
- package/src/components/core/Input-Text-Password/__tests__/validation.test.ts +362 -0
- package/src/components/core/Input-Text-Password/component-meta.yaml +28 -0
- package/src/components/core/Input-Text-Password/contracts.yaml +63 -0
- package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +318 -0
- package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +446 -0
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.ts +434 -0
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +503 -0
- package/src/components/core/Input-Text-Password/stateManagement.ts +244 -0
- package/src/components/core/Input-Text-Password/tokens.ts +32 -0
- package/src/components/core/Input-Text-Password/types.ts +177 -0
- package/src/components/core/Input-Text-Password/validation.ts +207 -0
- package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +326 -0
- package/src/components/core/Input-Text-PhoneNumber/README.md +275 -0
- package/src/components/core/Input-Text-PhoneNumber/__tests__/validation.test.ts +301 -0
- package/src/components/core/Input-Text-PhoneNumber/component-meta.yaml +28 -0
- package/src/components/core/Input-Text-PhoneNumber/contracts.yaml +62 -0
- package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +315 -0
- package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +419 -0
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.ts +370 -0
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.ts +393 -0
- package/src/components/core/Input-Text-PhoneNumber/stateManagement.ts +250 -0
- package/src/components/core/Input-Text-PhoneNumber/tokens.ts +33 -0
- package/src/components/core/Input-Text-PhoneNumber/types.ts +135 -0
- package/src/components/core/Input-Text-PhoneNumber/validation.ts +302 -0
- package/src/components/core/Nav-Header-App/Nav-Header-App.schema.yaml +87 -0
- package/src/components/core/Nav-Header-App/README.md +29 -0
- package/src/components/core/Nav-Header-App/component-meta.yaml +19 -0
- package/src/components/core/Nav-Header-App/contracts.yaml +27 -0
- package/src/components/core/Nav-Header-App/index.ts +5 -0
- package/src/components/core/Nav-Header-App/platforms/android/NavHeaderApp.android.kt +28 -0
- package/src/components/core/Nav-Header-App/platforms/ios/NavHeaderApp.ios.swift +27 -0
- package/src/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.ts +37 -0
- package/src/components/core/Nav-Header-App/types.ts +32 -0
- package/src/components/core/Nav-Header-Base/Nav-Header-Base.schema.yaml +150 -0
- package/src/components/core/Nav-Header-Base/README.md +21 -0
- package/src/components/core/Nav-Header-Base/component-meta.yaml +15 -0
- package/src/components/core/Nav-Header-Base/contracts.yaml +178 -0
- package/src/components/core/Nav-Header-Base/index.ts +12 -0
- package/src/components/core/Nav-Header-Base/platforms/android/NavHeaderBase.android.kt +127 -0
- package/src/components/core/Nav-Header-Base/platforms/ios/NavHeaderBase.ios.swift +99 -0
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.styles.css +75 -0
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.ts +120 -0
- package/src/components/core/Nav-Header-Base/types.ts +63 -0
- package/src/components/core/Nav-Header-Page/Nav-Header-Page.schema.yaml +175 -0
- package/src/components/core/Nav-Header-Page/README.md +34 -0
- package/src/components/core/Nav-Header-Page/__tests__/NavHeaderPage.test.ts +250 -0
- package/src/components/core/Nav-Header-Page/component-meta.yaml +23 -0
- package/src/components/core/Nav-Header-Page/contracts.yaml +196 -0
- package/src/components/core/Nav-Header-Page/index.ts +12 -0
- package/src/components/core/Nav-Header-Page/platforms/android/NavHeaderPage.android.kt +169 -0
- package/src/components/core/Nav-Header-Page/platforms/ios/NavHeaderPage.ios.swift +196 -0
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.styles.css +90 -0
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.ts +169 -0
- package/src/components/core/Nav-Header-Page/types.ts +55 -0
- package/src/components/core/Nav-SegmentedChoice-Base/Nav-SegmentedChoice-Base.schema.yaml +203 -0
- package/src/components/core/Nav-SegmentedChoice-Base/README.md +327 -0
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.android.test.ts +218 -0
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.interaction.test.ts +419 -0
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.ios.test.ts +207 -0
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.visual.test.ts +371 -0
- package/src/components/core/Nav-SegmentedChoice-Base/component-meta.yaml +20 -0
- package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +435 -0
- package/src/components/core/Nav-SegmentedChoice-Base/index.ts +38 -0
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/android/NavSegmentedChoiceBase.android.kt +389 -0
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/ios/NavSegmentedChoiceBase.ios.swift +373 -0
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.styles.css +160 -0
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.ts +477 -0
- package/src/components/core/Nav-SegmentedChoice-Base/types.ts +65 -0
- package/src/components/core/Nav-TabBar-Base/Nav-TabBar-Base.schema.yaml +196 -0
- package/src/components/core/Nav-TabBar-Base/README.md +264 -0
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.android.test.ts +270 -0
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.ios.test.ts +221 -0
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.test.ts +421 -0
- package/src/components/core/Nav-TabBar-Base/component-meta.yaml +20 -0
- package/src/components/core/Nav-TabBar-Base/contracts.yaml +412 -0
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.html +2 -0
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.tsx +2 -0
- package/src/components/core/Nav-TabBar-Base/index.ts +20 -0
- package/src/components/core/Nav-TabBar-Base/platforms/android/NavTabBarBase.android.kt +375 -0
- package/src/components/core/Nav-TabBar-Base/platforms/ios/NavTabBarBase.ios.swift +377 -0
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.styles.css +281 -0
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.ts +420 -0
- package/src/components/core/Nav-TabBar-Base/types.ts +43 -0
- package/src/components/core/Progress-Bar-Base/Progress-Bar-Base.schema.yaml +101 -0
- package/src/components/core/Progress-Bar-Base/README.md +31 -0
- package/src/components/core/Progress-Bar-Base/__tests__/ProgressBarBase.test.ts +202 -0
- package/src/components/core/Progress-Bar-Base/component-meta.yaml +24 -0
- package/src/components/core/Progress-Bar-Base/contracts.yaml +132 -0
- package/src/components/core/Progress-Bar-Base/index.ts +6 -0
- package/src/components/core/Progress-Bar-Base/platforms/android/ProgressBarBase.android.kt +181 -0
- package/src/components/core/Progress-Bar-Base/platforms/ios/ProgressBarBase.ios.swift +141 -0
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.styles.css +52 -0
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.ts +135 -0
- package/src/components/core/Progress-Bar-Base/types.ts +46 -0
- package/src/components/core/Progress-Indicator-Connector-Base/Progress-Indicator-Connector-Base.schema.yaml +69 -0
- package/src/components/core/Progress-Indicator-Connector-Base/README.md +169 -0
- package/src/components/core/Progress-Indicator-Connector-Base/component-meta.yaml +18 -0
- package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +70 -0
- package/src/components/core/Progress-Indicator-Connector-Base/index.ts +33 -0
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/android/ProgressIndicatorConnectorBase.android.kt +163 -0
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/ios/ProgressIndicatorConnectorBase.ios.swift +154 -0
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.styles.css +50 -0
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.ts +141 -0
- package/src/components/core/Progress-Indicator-Connector-Base/types.ts +67 -0
- package/src/components/core/Progress-Indicator-Label-Base/Progress-Indicator-Label-Base.schema.yaml +78 -0
- package/src/components/core/Progress-Indicator-Label-Base/README.md +191 -0
- package/src/components/core/Progress-Indicator-Label-Base/component-meta.yaml +18 -0
- package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +76 -0
- package/src/components/core/Progress-Indicator-Label-Base/index.ts +28 -0
- package/src/components/core/Progress-Indicator-Label-Base/platforms/android/ProgressIndicatorLabelBase.android.kt +153 -0
- package/src/components/core/Progress-Indicator-Label-Base/platforms/ios/ProgressIndicatorLabelBase.ios.swift +153 -0
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.styles.css +81 -0
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.ts +174 -0
- package/src/components/core/Progress-Indicator-Label-Base/types.ts +64 -0
- package/src/components/core/Progress-Indicator-Node-Base/Progress-Indicator-Node-Base.schema.yaml +113 -0
- package/src/components/core/Progress-Indicator-Node-Base/README.md +206 -0
- package/src/components/core/Progress-Indicator-Node-Base/__tests__/VisualStates.test.ts +259 -0
- package/src/components/core/Progress-Indicator-Node-Base/component-meta.yaml +18 -0
- package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +96 -0
- package/src/components/core/Progress-Indicator-Node-Base/index.ts +36 -0
- package/src/components/core/Progress-Indicator-Node-Base/platforms/android/ProgressIndicatorNodeBase.android.kt +294 -0
- package/src/components/core/Progress-Indicator-Node-Base/platforms/ios/ProgressIndicatorNodeBase.ios.swift +260 -0
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.styles.css +193 -0
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.ts +226 -0
- package/src/components/core/Progress-Indicator-Node-Base/types.ts +142 -0
- package/src/components/core/Progress-Pagination-Base/Progress-Pagination-Base.schema.yaml +106 -0
- package/src/components/core/Progress-Pagination-Base/README.md +290 -0
- package/src/components/core/Progress-Pagination-Base/__tests__/PaginationBase.test.ts +290 -0
- package/src/components/core/Progress-Pagination-Base/component-meta.yaml +22 -0
- package/src/components/core/Progress-Pagination-Base/contracts.yaml +103 -0
- package/src/components/core/Progress-Pagination-Base/index.ts +40 -0
- package/src/components/core/Progress-Pagination-Base/platforms/android/ProgressPaginationBase.android.kt +215 -0
- package/src/components/core/Progress-Pagination-Base/platforms/ios/ProgressPaginationBase.ios.swift +214 -0
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.styles.css +80 -0
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.ts +293 -0
- package/src/components/core/Progress-Pagination-Base/types.ts +112 -0
- package/src/components/core/Progress-Stepper-Base/Progress-Stepper-Base.schema.yaml +105 -0
- package/src/components/core/Progress-Stepper-Base/README.md +311 -0
- package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +342 -0
- package/src/components/core/Progress-Stepper-Base/component-meta.yaml +22 -0
- package/src/components/core/Progress-Stepper-Base/contracts.yaml +101 -0
- package/src/components/core/Progress-Stepper-Base/index.ts +43 -0
- package/src/components/core/Progress-Stepper-Base/platforms/android/ProgressStepperBase.android.kt +244 -0
- package/src/components/core/Progress-Stepper-Base/platforms/ios/ProgressStepperBase.ios.swift +240 -0
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.styles.css +49 -0
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.ts +288 -0
- package/src/components/core/Progress-Stepper-Base/types.ts +175 -0
- package/src/components/core/Progress-Stepper-Detailed/Progress-Stepper-Detailed.schema.yaml +107 -0
- package/src/components/core/Progress-Stepper-Detailed/README.md +401 -0
- package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +478 -0
- package/src/components/core/Progress-Stepper-Detailed/component-meta.yaml +22 -0
- package/src/components/core/Progress-Stepper-Detailed/contracts.yaml +122 -0
- package/src/components/core/Progress-Stepper-Detailed/index.ts +48 -0
- package/src/components/core/Progress-Stepper-Detailed/platforms/android/ProgressStepperDetailed.android.kt +352 -0
- package/src/components/core/Progress-Stepper-Detailed/platforms/ios/ProgressStepperDetailed.ios.swift +353 -0
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.styles.css +106 -0
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.ts +336 -0
- package/src/components/core/Progress-Stepper-Detailed/types.ts +195 -0
- package/src/composition/BlendComposition.ts +46 -0
- package/src/composition/BlendCompositionParser.ts +215 -0
- package/src/composition/OpacityComposition.ts +62 -0
- package/src/composition/OpacityCompositionParser.ts +308 -0
- package/src/composition/__tests__/BlendCompositionParser.test.ts +431 -0
- package/src/composition/__tests__/OpacityCompositionParser.test.ts +539 -0
- package/src/composition/index.ts +20 -0
- package/src/config/ConfigLoader.ts +143 -0
- package/src/config/__resolution-matrix__/README.md +76 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/compiled/defineConfig.js +9 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/designerpunk.config.ts +20 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/my-overrides.ts +8 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/compiled/defineConfig.js +11 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/designerpunk.config.ts +23 -0
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/my-overrides.ts +6 -0
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/designerpunk.config.ts +11 -0
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/src/config/index.ts +15 -0
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/designerpunk.config.ts +15 -0
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/src/config/index.ts +13 -0
- package/src/config/__resolution-matrix__/run-matrix.js +107 -0
- package/src/config/__resolution-matrix__/runner.js +153 -0
- package/src/config/__resolution-matrix__/verify-real-loadconfig.js +122 -0
- package/src/config/__tests__/ConfigLoader.test.ts +115 -0
- package/src/config/defineConfig.ts +71 -0
- package/src/config/index.ts +7 -0
- package/src/config/scopedTsRequire.ts +62 -0
- package/src/constants/BaselineGrid.ts +41 -0
- package/src/constants/SpacingTokens.ts +55 -0
- package/src/constants/StrategicFlexibilityTokens.ts +98 -0
- package/src/figma/ComponentAnalysis.ts +292 -0
- package/src/figma/ComponentAnalysisGenerator.ts +444 -0
- package/src/figma/ConsoleMCPClient.ts +168 -0
- package/src/figma/ConsoleMCPClientImpl.ts +1034 -0
- package/src/figma/DesignExtractor.ts +3620 -0
- package/src/figma/TokenSyncWorkflow.ts +915 -0
- package/src/figma/TokenTranslator.ts +891 -0
- package/src/figma/VariantAnalyzer.ts +712 -0
- package/src/figma/__tests__/ComponentAnalysisGenerator.json.test.ts +429 -0
- package/src/figma/__tests__/ComponentAnalysisGenerator.markdown.test.ts +428 -0
- package/src/figma/__tests__/ConsoleMCPClient.bugfix.test.ts +261 -0
- package/src/figma/__tests__/ConsoleMCPClient.preservation.test.ts +395 -0
- package/src/figma/__tests__/ConsoleMCPClient.test.ts +375 -0
- package/src/figma/__tests__/DesignExtractor.boundVariableResolution.test.ts +580 -0
- package/src/figma/__tests__/DesignExtractor.buildNodeTree.test.ts +535 -0
- package/src/figma/__tests__/DesignExtractor.captureComponentScreenshot.test.ts +176 -0
- package/src/figma/__tests__/DesignExtractor.detectBehavioralContracts.test.ts +263 -0
- package/src/figma/__tests__/DesignExtractor.detectComponentTokenDecisions.test.ts +379 -0
- package/src/figma/__tests__/DesignExtractor.detectCompositionPatterns.test.ts +507 -0
- package/src/figma/__tests__/DesignExtractor.detectPlatformParity.test.ts +406 -0
- package/src/figma/__tests__/DesignExtractor.queryContext.test.ts +214 -0
- package/src/figma/__tests__/DesignExtractor.readFigmaComponent.test.ts +431 -0
- package/src/figma/__tests__/DesignExtractor.readStyles.test.ts +204 -0
- package/src/figma/__tests__/DesignExtractor.readTokenBindings.test.ts +268 -0
- package/src/figma/__tests__/DesignExtractor.reconstructCompositeTokens.test.ts +403 -0
- package/src/figma/__tests__/DesignExtractor.resolveUnknownVariableIds.test.ts +259 -0
- package/src/figma/__tests__/DesignExtractor.translateTokens.test.ts +433 -0
- package/src/figma/__tests__/DesignExtractor.validateModes.test.ts +350 -0
- package/src/figma/__tests__/TokenSyncWorkflow.batch.test.ts +277 -0
- package/src/figma/__tests__/TokenSyncWorkflow.drift.test.ts +187 -0
- package/src/figma/__tests__/TokenSyncWorkflow.preservation.test.ts +544 -0
- package/src/figma/__tests__/TokenSyncWorkflow.styles.test.ts +245 -0
- package/src/figma/__tests__/TokenSyncWorkflow.sync.test.ts +217 -0
- package/src/figma/__tests__/TokenTranslator.test.ts +757 -0
- package/src/figma/__tests__/VariantAnalyzer.detectConflicts.test.ts +126 -0
- package/src/figma/__tests__/VariantAnalyzer.test.ts +633 -0
- package/src/figma/__tests__/error-reporting.test.ts +254 -0
- package/src/figma/__tests__/preflight.test.ts +94 -0
- package/src/figma/error-reporting.ts +260 -0
- package/src/figma/index.ts +98 -0
- package/src/figma/portCleanup.ts +86 -0
- package/src/figma/preflight.ts +120 -0
- package/src/generators/BlendUtilityGenerator.ts +847 -0
- package/src/generators/BlendValueGenerator.ts +198 -0
- package/src/generators/DTCGFormatGenerator.ts +1349 -0
- package/src/generators/DTCGGeneratorConfig.ts +46 -0
- package/src/generators/ModeResolvedTokens.ts +58 -0
- package/src/generators/ResponsiveGridGenerator.ts +273 -0
- package/src/generators/TokenFileGenerator.ts +2070 -0
- package/src/generators/__tests__/AccessibilityTokenGeneration.test.ts +350 -0
- package/src/generators/__tests__/BlendUtilityGenerator.test.ts +829 -0
- package/src/generators/__tests__/BlendValueGenerator.test.ts +200 -0
- package/src/generators/__tests__/BreakpointTokenGeneration.test.ts +172 -0
- package/src/generators/__tests__/CSSThemeScoping.test.ts +153 -0
- package/src/generators/__tests__/DTCGConfigOptions.test.ts +262 -0
- package/src/generators/__tests__/DTCGErrorHandling.test.ts +139 -0
- package/src/generators/__tests__/DTCGFormatGenerator.integration.test.ts +346 -0
- package/src/generators/__tests__/DTCGFormatGenerator.property.test.ts +497 -0
- package/src/generators/__tests__/DTCGFormatGenerator.test.ts +469 -0
- package/src/generators/__tests__/FigmaTransformer.styles.test.ts +398 -0
- package/src/generators/__tests__/FigmaTransformer.variables.test.ts +540 -0
- package/src/generators/__tests__/GridSpacingTokenGeneration.test.ts +254 -0
- package/src/generators/__tests__/IconTokenGeneration.test.ts +452 -0
- package/src/generators/__tests__/KotlinThemeTypes.test.ts +110 -0
- package/src/generators/__tests__/ModeAwareGeneration.test.ts +160 -0
- package/src/generators/__tests__/NativeOklchOutput.test.ts +56 -0
- package/src/generators/__tests__/OklchExport.test.ts +71 -0
- package/src/generators/__tests__/ProductRepoSimulation.test.ts +91 -0
- package/src/generators/__tests__/ResponsiveGridGeneration.test.ts +291 -0
- package/src/generators/__tests__/Spec076TokenMigration.test.ts +106 -0
- package/src/generators/__tests__/Spec077ModesVerification.test.ts +52 -0
- package/src/generators/__tests__/SwiftThemeTypes.test.ts +122 -0
- package/src/generators/__tests__/TokenFileGenerator.test.ts +914 -0
- package/src/generators/__tests__/TransformerRegistry.test.ts +118 -0
- package/src/generators/__tests__/WcagValueExportSupport.test.ts +84 -0
- package/src/generators/__tests__/WcagValueInfrastructure.test.ts +122 -0
- package/src/generators/__tests__/WebOklchOutput.test.ts +72 -0
- package/src/generators/__tests__/generateTokenIndex.test.ts +204 -0
- package/src/generators/__tests__/helpers/defaultSemanticOptions.ts +24 -0
- package/src/generators/generateTokenFiles.ts +337 -0
- package/src/generators/generateTokenIndex.ts +258 -0
- package/src/generators/oklch/OklchExportUtils.ts +57 -0
- package/src/generators/oklch/OklchTokenIndexMetadata.ts +30 -0
- package/src/generators/transformers/FigmaTransformer.ts +912 -0
- package/src/generators/transformers/ITokenTransformer.ts +56 -0
- package/src/generators/transformers/TransformerRegistry.ts +63 -0
- package/src/generators/transformers/index.ts +52 -0
- package/src/generators/types/DTCGTypes.ts +101 -0
- package/src/integration/BuildErrorHandler.ts +440 -0
- package/src/integration/BuildSystemInterface.ts +338 -0
- package/src/integration/PlatformFileSelector.ts +288 -0
- package/src/integration/RegistryCoordinator.ts +404 -0
- package/src/integration/TranslationCoordinator.ts +458 -0
- package/src/integration/TreeShakingOptimizer.ts +350 -0
- package/src/integration/ValidationCoordinator.ts +780 -0
- package/src/integration/__tests__/ComponentTokenValidation.test.ts +762 -0
- package/src/integration/__tests__/ValidationCoordinator.test.ts +609 -0
- package/src/integration/__tests__/performance/ComponentTokenValidationPerformance.test.ts +161 -0
- package/src/integration/index.ts +55 -0
- package/src/naming/NamingConventionManager.ts +318 -0
- package/src/naming/PlatformNamingRules.ts +278 -0
- package/src/naming/__tests__/NamingConventions.test.ts +224 -0
- package/src/naming/index.ts +23 -0
- package/src/parent-completion.md +1 -0
- package/src/performance/CachingStrategy.ts +426 -0
- package/src/performance/FileGenerationOptimizer.ts +294 -0
- package/src/performance/PerformanceMonitor.ts +185 -0
- package/src/performance/PerformanceOptimizer.ts +348 -0
- package/src/performance/index.ts +30 -0
- package/src/providers/AndroidFileOrganizer.ts +241 -0
- package/src/providers/AndroidFormatGenerator.ts +750 -0
- package/src/providers/AndroidUnitConverter.ts +177 -0
- package/src/providers/FormatProvider.ts +187 -0
- package/src/providers/PathProvider.ts +197 -0
- package/src/providers/UnitProvider.ts +106 -0
- package/src/providers/WebFileOrganizer.ts +121 -0
- package/src/providers/WebFormatGenerator.ts +611 -0
- package/src/providers/WebUnitConverter.ts +116 -0
- package/src/providers/__tests__/AndroidAccessibilityTokens.test.ts +86 -0
- package/src/providers/__tests__/AndroidFormatGenerator-semantic.test.ts +494 -0
- package/src/providers/__tests__/FormatProviders.test.ts +828 -0
- package/src/providers/__tests__/InsetTokenGeneration.test.ts +627 -0
- package/src/providers/__tests__/PathProviders.test.ts +512 -0
- package/src/providers/__tests__/PlatformOutputFormat.test.ts +252 -0
- package/src/providers/__tests__/UnitProviders.test.ts +721 -0
- package/src/providers/__tests__/WebFormatGenerator-semantic.test.ts +293 -0
- package/src/providers/__tests__/iOSFormatGenerator-semantic.test.ts +410 -0
- package/src/providers/iOSFileOrganizer.ts +162 -0
- package/src/providers/iOSFormatGenerator.ts +599 -0
- package/src/providers/iOSUnitConverter.ts +125 -0
- package/src/providers/index.ts +26 -0
- package/src/registries/ComponentTokenRegistry.ts +292 -0
- package/src/registries/IRegistry.ts +170 -0
- package/src/registries/PrimitiveTokenRegistry.ts +200 -0
- package/src/registries/SemanticTokenRegistry.ts +237 -0
- package/src/registries/__tests__/ComponentTokenRegistry.test.ts +446 -0
- package/src/registries/__tests__/IRegistry.test.ts +250 -0
- package/src/registries/__tests__/PrimitiveTokenRegistry.test.ts +342 -0
- package/src/registries/__tests__/SemanticTokenRegistry.test.ts +444 -0
- package/src/resolvers/AndroidColorResolver.ts +333 -0
- package/src/resolvers/ModeThemeResolver.ts +152 -0
- package/src/resolvers/SemanticOverrideResolver.ts +155 -0
- package/src/resolvers/SemanticValueResolver.ts +133 -0
- package/src/resolvers/WebColorResolver.ts +240 -0
- package/src/resolvers/__tests__/AndroidColorResolver.test.ts +507 -0
- package/src/resolvers/__tests__/ModeThemeResolver.test.ts +411 -0
- package/src/resolvers/__tests__/SemanticOverrideResolver.test.ts +186 -0
- package/src/resolvers/__tests__/WebColorResolver.test.ts +405 -0
- package/src/resolvers/__tests__/iOSColorResolver.test.ts +432 -0
- package/src/resolvers/iOSColorResolver.ts +224 -0
- package/src/resolvers/index.ts +11 -0
- package/src/security/AIAgentRestrictions.ts +298 -0
- package/src/security/ContaminationAuditor.ts +393 -0
- package/src/security/ContaminationPrevention.ts +275 -0
- package/src/security/DocumentationGuard.ts +258 -0
- package/src/security/FlexibilityTokenGuard.ts +256 -0
- package/src/security/HumanApprovalWorkflow.ts +319 -0
- package/src/security/__tests__/AIAgentRestrictions.test.ts +482 -0
- package/src/security/__tests__/ContaminationPrevention.test.ts +424 -0
- package/src/security/__tests__/SecurityIntegration.test.ts +505 -0
- package/src/security/index.ts +48 -0
- package/src/styles/responsive-grid-usage.md +992 -0
- package/src/styles/responsive-grid.css +200 -0
- package/src/testing/__tests__/utilities.test.ts +175 -0
- package/src/testing/index.ts +154 -0
- package/src/testing/jest-preset.ts +62 -0
- package/src/testing/style-mock.ts +7 -0
- package/src/testing/validators.ts +10 -0
- package/src/themes/ResolvedThemeSet.ts +22 -0
- package/src/themes/ThemeRegistry.ts +97 -0
- package/src/themes/__tests__/ThemeRegistry.test.ts +162 -0
- package/src/tokens/BlendTokens.ts +132 -0
- package/src/tokens/BlurTokens.ts +154 -0
- package/src/tokens/BorderWidthTokens.ts +101 -0
- package/src/tokens/BreakpointTokens.ts +101 -0
- package/src/tokens/ColorTokens.ts +2162 -0
- package/src/tokens/DensityTokens.ts +119 -0
- package/src/tokens/DurationTokens.ts +111 -0
- package/src/tokens/EasingTokens.ts +163 -0
- package/src/tokens/FontFamilyTokens.ts +95 -0
- package/src/tokens/FontSizeTokens.ts +197 -0
- package/src/tokens/FontWeightTokens.ts +166 -0
- package/src/tokens/GlowOpacityTokens.ts +113 -0
- package/src/tokens/LetterSpacingTokens.ts +114 -0
- package/src/tokens/LineHeightTokens.ts +200 -0
- package/src/tokens/OpacityTokens.ts +233 -0
- package/src/tokens/RadiusTokens.ts +236 -0
- package/src/tokens/ScaleTokens.ts +167 -0
- package/src/tokens/ShadowOffsetTokens.ts +279 -0
- package/src/tokens/ShadowOpacityTokens.ts +118 -0
- package/src/tokens/SizingTokens.ts +221 -0
- package/src/tokens/SpacingTokens.ts +255 -0
- package/src/tokens/TapAreaTokens.ts +124 -0
- package/src/tokens/__tests__/AIReadableMathematicalRelationships.test.ts +298 -0
- package/src/tokens/__tests__/BlendTokens.test.ts +357 -0
- package/src/tokens/__tests__/BlurTokens.test.ts +109 -0
- package/src/tokens/__tests__/BorderWidthTokens.test.ts +394 -0
- package/src/tokens/__tests__/ColorTokens.test.ts +847 -0
- package/src/tokens/__tests__/FontFamilyTokens.test.ts +308 -0
- package/src/tokens/__tests__/FontSizeTokensFormulaValidation.test.ts +176 -0
- package/src/tokens/__tests__/FontWeightTokens.test.ts +336 -0
- package/src/tokens/__tests__/LetterSpacingTokens.test.ts +359 -0
- package/src/tokens/__tests__/LineHeightTokensFormulaValidation.test.ts +235 -0
- package/src/tokens/__tests__/MotionTokens.property.test.ts +638 -0
- package/src/tokens/__tests__/MotionTokens.test.ts +431 -0
- package/src/tokens/__tests__/OpacityTokens.test.ts +370 -0
- package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +163 -0
- package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +93 -0
- package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +170 -0
- package/src/tokens/__tests__/RadiusStrategicFlexibilityValidation.test.ts +133 -0
- package/src/tokens/__tests__/RadiusTokensFormulaValidation.test.ts +240 -0
- package/src/tokens/__tests__/ShadowOffsetTokens.test.ts +407 -0
- package/src/tokens/__tests__/SizingTokens.test.ts +132 -0
- package/src/tokens/__tests__/SpacingTokensFormulaValidation.test.ts +205 -0
- package/src/tokens/__tests__/TokenCategories.test.ts +602 -0
- package/src/tokens/__tests__/chromatic-channels.test.ts +57 -0
- package/src/tokens/__tests__/composed-colors.test.ts +62 -0
- package/src/tokens/__tests__/neutral-partition.test.ts +119 -0
- package/src/tokens/__tests__/portability-boundary.test.ts +60 -0
- package/src/tokens/color/channels/chroma/chromatic.ts +67 -0
- package/src/tokens/color/channels/chroma/neutral.ts +35 -0
- package/src/tokens/color/channels/hues.ts +29 -0
- package/src/tokens/color/channels/index.ts +21 -0
- package/src/tokens/color/channels/lightness/chromatic.ts +68 -0
- package/src/tokens/color/channels/lightness/neutral.ts +36 -0
- package/src/tokens/color/index.ts +31 -0
- package/src/tokens/color/primitives/chromatic.ts +64 -0
- package/src/tokens/color/primitives/neutral.ts +45 -0
- package/src/tokens/component/progress.ts +153 -0
- package/src/tokens/index.ts +383 -0
- package/src/tokens/platforms/android/MotionTokens.kt +322 -0
- package/src/tokens/platforms/android/MotionTokens.md +0 -0
- package/src/tokens/platforms/ios/MotionTokens.md +322 -0
- package/src/tokens/platforms/ios/MotionTokens.swift +253 -0
- package/src/tokens/semantic/AccessibilityTokens.README.md +1070 -0
- package/src/tokens/semantic/AccessibilityTokens.ts +219 -0
- package/src/tokens/semantic/BlendTokens.ts +225 -0
- package/src/tokens/semantic/BorderWidthTokens.ts +162 -0
- package/src/tokens/semantic/ColorTokens.ts +866 -0
- package/src/tokens/semantic/ElevationTokens.ts +177 -0
- package/src/tokens/semantic/GridSpacingTokens.ts +147 -0
- package/src/tokens/semantic/IconTokens.ts +342 -0
- package/src/tokens/semantic/LayeringTokens.ts +167 -0
- package/src/tokens/semantic/MotionTokens.ts +143 -0
- package/src/tokens/semantic/OpacityTokens.ts +89 -0
- package/src/tokens/semantic/RadiusTokens.ts +242 -0
- package/src/tokens/semantic/ShadowTokens.ts +442 -0
- package/src/tokens/semantic/SpacingTokens.ts +274 -0
- package/src/tokens/semantic/StyleTokens.ts +22 -0
- package/src/tokens/semantic/TypographyTokens.ts +399 -0
- package/src/tokens/semantic/ZIndexTokens.ts +124 -0
- package/src/tokens/semantic/__tests__/AccessibilityTokens.test.ts +222 -0
- package/src/tokens/semantic/__tests__/BlendTokens.test.ts +377 -0
- package/src/tokens/semantic/__tests__/BorderWidthTokens.test.ts +141 -0
- package/src/tokens/semantic/__tests__/ColorTokens.test.ts +1391 -0
- package/src/tokens/semantic/__tests__/IconTokens.test.ts +769 -0
- package/src/tokens/semantic/__tests__/MotionTokens.test.ts +313 -0
- package/src/tokens/semantic/__tests__/OpacityTokens.test.ts +183 -0
- package/src/tokens/semantic/__tests__/SemanticTokenIntegration.test.ts +426 -0
- package/src/tokens/semantic/__tests__/ValidatePrimitiveReferences.test.ts +382 -0
- package/src/tokens/semantic/index.ts +611 -0
- package/src/tokens/themes/dark/SemanticOverrides.ts +168 -0
- package/src/tokens/themes/dark-wcag/SemanticOverrides.ts +21 -0
- package/src/tokens/themes/types.ts +26 -0
- package/src/tokens/themes/wcag/SemanticOverrides.ts +28 -0
- package/src/tools/ThemeFileGenerator.ts +109 -0
- package/src/tools/integrity/DiskFreshGenerator.ts +36 -0
- package/src/tools/integrity/GenerationIntegrityCheck.ts +132 -0
- package/src/tools/integrity/Invariants.ts +228 -0
- package/src/tools/integrity/Normalizer.ts +94 -0
- package/src/tools/integrity/SemanticComparator.ts +127 -0
- package/src/tools/integrity/__tests__/GenerationIntegrityCheck.test.ts +132 -0
- package/src/tools/integrity/__tests__/Invariants.test.ts +142 -0
- package/src/tools/integrity/__tests__/Normalizer.test.ts +65 -0
- package/src/tools/integrity/__tests__/SemanticComparator.test.ts +62 -0
- package/src/tools/integrity/__tests__/consumer-package-mode.test.ts +205 -0
- package/src/tools/integrity/cli/run-audit.ts +150 -0
- package/src/tools/integrity/inventory.ts +51 -0
- package/src/tools/integrity/manifest.ts +56 -0
- package/src/tools/integrity/types/index.ts +183 -0
- package/src/tools/release/__tests__/ChangeClassifier.test.ts +133 -0
- package/src/tools/release/__tests__/ChangeExtractor.test.ts +222 -0
- package/src/tools/release/__tests__/GitHubPublisher.test.ts +240 -0
- package/src/tools/release/__tests__/NotesRenderer.test.ts +142 -0
- package/src/tools/release/__tests__/NpmPublisher.test.ts +289 -0
- package/src/tools/release/__tests__/PipelineIntegration.test.ts +188 -0
- package/src/tools/release/__tests__/ReleasePipeline.test.ts +192 -0
- package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +49 -0
- package/src/tools/release/__tests__/SummaryScanner.test.ts +141 -0
- package/src/tools/release/__tests__/TagResolver.test.ts +91 -0
- package/src/tools/release/__tests__/VersionCalculator.test.ts +270 -0
- package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +80 -0
- package/src/tools/release/cli/ReleasePipeline.ts +165 -0
- package/src/tools/release/cli/release-tool.ts +107 -0
- package/src/tools/release/pipeline/ChangeClassifier.ts +61 -0
- package/src/tools/release/pipeline/ChangeExtractor.ts +87 -0
- package/src/tools/release/pipeline/NotesRenderer.ts +66 -0
- package/src/tools/release/pipeline/SummaryScanner.ts +70 -0
- package/src/tools/release/pipeline/TagResolver.ts +40 -0
- package/src/tools/release/pipeline/VersionCalculator.ts +375 -0
- package/src/tools/release/publishers/GitHubPublisher.ts +228 -0
- package/src/tools/release/publishers/NpmPublisher.ts +196 -0
- package/src/tools/release/release-config.json +5 -0
- package/src/tools/release/types/index.ts +282 -0
- package/src/tools/release/validators/SemanticVersionValidator.ts +67 -0
- package/src/types/ComponentTypes.ts +76 -0
- package/src/types/PrimitiveToken.ts +112 -0
- package/src/types/SemanticToken.ts +91 -0
- package/src/types/TranslationOutput.ts +105 -0
- package/src/types/ValidationResult.ts +74 -0
- package/src/types/__tests__/ComponentTypes.test.ts +73 -0
- package/src/types/css.d.ts +35 -0
- package/src/types/generated/TokenTypes.ts +142 -0
- package/src/types/index.ts +42 -0
- package/src/validators/BaselineGridValidator.ts +119 -0
- package/src/validators/CompositionPatternValidator.ts +259 -0
- package/src/validators/CrossPlatformConsistencyValidator.ts +498 -0
- package/src/validators/ErrorValidator.ts +998 -0
- package/src/validators/IValidator.ts +273 -0
- package/src/validators/MathematicalRelationshipParser.ts +434 -0
- package/src/validators/ModeParity.ts +123 -0
- package/src/validators/PassValidator.ts +533 -0
- package/src/validators/PlatformConstraintHandler.ts +453 -0
- package/src/validators/PrimitiveReferenceValidator.ts +284 -0
- package/src/validators/SemanticTokenValidator.ts +496 -0
- package/src/validators/StemmaComponentNamingValidator.ts +524 -0
- package/src/validators/StemmaErrorGuidanceSystem.ts +1600 -0
- package/src/validators/StemmaPropertyAccessibilityValidator.ts +823 -0
- package/src/validators/StemmaTokenUsageValidator.ts +650 -0
- package/src/validators/SyntaxValidator.ts +537 -0
- package/src/validators/ThreeTierValidator.ts +822 -0
- package/src/validators/ToleranceCalculator.ts +324 -0
- package/src/validators/ValidationReasoning.ts +464 -0
- package/src/validators/WCAGValidator.ts +219 -0
- package/src/validators/WarningValidator.ts +626 -0
- package/src/validators/__tests__/BaselineGridValidator.test.ts +292 -0
- package/src/validators/__tests__/BorderWidthValidation.test.ts +595 -0
- package/src/validators/__tests__/CompositionPatterns.test.ts +463 -0
- package/src/validators/__tests__/CrossPlatformConsistency.test.ts +834 -0
- package/src/validators/__tests__/IValidator.test.ts +258 -0
- package/src/validators/__tests__/MathematicalRelationshipParser.test.ts +465 -0
- package/src/validators/__tests__/PlatformConstraints.test.ts +486 -0
- package/src/validators/__tests__/SemanticTokenValidator.test.ts +723 -0
- package/src/validators/__tests__/StemmaComponentNamingValidator.test.ts +597 -0
- package/src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts +717 -0
- package/src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts +349 -0
- package/src/validators/__tests__/StemmaTokenUsageValidator.test.ts +432 -0
- package/src/validators/__tests__/SyntaxValidator.test.ts +360 -0
- package/src/validators/__tests__/ThreeTierValidator.test.ts +906 -0
- package/src/validators/__tests__/ValidationReasoning.test.ts +636 -0
- package/src/validators/__tests__/WCAGValidator.test.ts +243 -0
- package/src/validators/buildValidation.ts +170 -0
- package/src/validators/index.ts +144 -0
- package/src/workflows/ConsistencyValidator.ts +339 -0
- package/src/workflows/TokenGenerationWorkflow.ts +460 -0
- package/src/workflows/ValidationPipeline.ts +284 -0
- package/src/workflows/WorkflowErrorHandler.ts +441 -0
- package/token-index/README.md +32 -0
- package/token-index/components.yaml +265 -0
- package/token-index/primitives.yaml +2761 -0
- package/token-index/semantics.yaml +2421 -0
|
@@ -0,0 +1,1876 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: component-development-guide
|
|
3
|
+
inclusion: manual
|
|
4
|
+
name: Component-Development-Guide
|
|
5
|
+
aliases: how do i scaffold a new component, scaffold a new component from scratch, focus management keyboard navigation, keyboard navigation focus management component
|
|
6
|
+
description: Guide for building components with appropriate token usage, True Native Architecture, demo maintenance, and effective collaboration practices. Load when implementing components, selecting tokens, integrating icons, or maintaining demo pages.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Component Development and Practices Guide
|
|
10
|
+
|
|
11
|
+
**Date**: 2025-11-17
|
|
12
|
+
**Last Reviewed**: 2026-05-06
|
|
13
|
+
**Purpose**: Guide AI agents in building components with appropriate token usage, True Native Architecture, and effective collaboration practices
|
|
14
|
+
**Organization**: process-standard
|
|
15
|
+
**Scope**: cross-project
|
|
16
|
+
**Layer**: 3
|
|
17
|
+
**Relevant Tasks**: coding, accessibility-development, icon-integration
|
|
18
|
+
|
|
19
|
+
## AI Agent Reading Priorities
|
|
20
|
+
|
|
21
|
+
**Note**: This section intentionally uses the same heading as other steering documents because each document provides reading priorities specific to its content. This structural pattern enables progressive disclosure and helps AI agents navigate to relevant sections efficiently.
|
|
22
|
+
|
|
23
|
+
**Layer Context**: This is a Layer 3 (Specific Implementations) document that provides domain-specific guidance for component development. It's conditionally loaded when building or modifying components and contains detailed technical implementation patterns.
|
|
24
|
+
|
|
25
|
+
**WHEN building new components THEN read:**
|
|
26
|
+
1. ✅ **Token Selection Decision Framework** (Step 1-4)
|
|
27
|
+
2. ✅ **Semantic tokens**: Read `src/tokens/semantic/index.ts` for available tokens
|
|
28
|
+
3. ✅ **Component Structure Pattern** (file organization)
|
|
29
|
+
4. ✅ **True Native Architecture**: `preserved-knowledge/true-native-architecture-concepts.md`
|
|
30
|
+
5. ✅ **Contract System Reference**: `Contract-System-Reference.md` (taxonomy, naming, format for contracts.yaml)
|
|
31
|
+
6. ✅ **Icon System Integration** (if component uses icons)
|
|
32
|
+
7. ✅ **Validation Checklist** (before implementation)
|
|
33
|
+
|
|
34
|
+
**WHEN selecting tokens for components THEN read:**
|
|
35
|
+
1. ✅ **Token Selection Decision Framework** (all steps)
|
|
36
|
+
2. ✅ **System-Specific Terminology Glossary** (understand naming conventions)
|
|
37
|
+
3. ✅ **Common Component Patterns** (button, input, container patterns)
|
|
38
|
+
4. ✅ **Anti-Patterns to Avoid** (what NOT to do)
|
|
39
|
+
|
|
40
|
+
**WHEN creating component-level tokens THEN read:**
|
|
41
|
+
1. ✅ **Step 3: Create Component-Level Tokens for Variants**
|
|
42
|
+
2. ✅ **Component Token Files** section
|
|
43
|
+
3. ✅ **Component sizing guide**: `.kiro/specs/responsive-layout-system/component-sizing-token-guide.md`
|
|
44
|
+
|
|
45
|
+
**WHEN creating semantic tokens THEN read:**
|
|
46
|
+
1. ✅ **Step 4: Propose Semantic Token Elevation**
|
|
47
|
+
2. ✅ **Primitive tokens**: Read `src/tokens/*.ts` for primitive token foundation
|
|
48
|
+
3. ✅ **Token architecture**: `preserved-knowledge/token-architecture-2-0-mathematics.md`
|
|
49
|
+
|
|
50
|
+
**WHEN implementing cross-platform components THEN read:**
|
|
51
|
+
1. ✅ **Component Structure Pattern** (True Native Architecture)
|
|
52
|
+
2. ✅ **Component Token Files** (platform-agnostic token references)
|
|
53
|
+
3. ✅ **Cross-Platform Token Consumption** (how tokens work per platform)
|
|
54
|
+
4. ✅ **Icon System Integration** (if component uses icons)
|
|
55
|
+
5. ✅ **Platform-Specific Nuances** (iOS/Android/Web differences)
|
|
56
|
+
|
|
57
|
+
**WHEN adding icons to components THEN read:**
|
|
58
|
+
1. ✅ **Icon System Integration** (when to use Icon component vs. direct platform icons)
|
|
59
|
+
2. ✅ **Icon Size Tokens** (token-to-pixel mapping and typography pairing)
|
|
60
|
+
3. ✅ **Platform-Specific Icon Usage** (Web, iOS, Android patterns)
|
|
61
|
+
4. ✅ **Icon Integration Anti-Patterns** (what NOT to do)
|
|
62
|
+
5. ✅ **Icon Integration Checklist** (verification steps)
|
|
63
|
+
|
|
64
|
+
**WHEN implementing interaction states (hover, pressed, focus, disabled) THEN read:**
|
|
65
|
+
1. ✅ **Blend Utility Integration** (how to use blend utilities for state colors)
|
|
66
|
+
2. ✅ **Semantic Blend Token Reference** (which token/function for each state)
|
|
67
|
+
3. ✅ **Blend Utility Anti-Patterns** (what NOT to do - no opacity, no filters)
|
|
68
|
+
4. ✅ **Blend Tokens Guide**: `.kiro/steering/Token-Family-Blend.md` (complete reference)
|
|
69
|
+
|
|
70
|
+
**WHEN implementing components with CSS transitions THEN read:**
|
|
71
|
+
1. ✅ **Incremental DOM Update Pattern** (architecture for preserving element identity)
|
|
72
|
+
2. ✅ **Key Implementation Details** (DOM creation flag, element caching, conditional updates)
|
|
73
|
+
3. ✅ **Incremental DOM Anti-Patterns** (what NOT to do - no innerHTML replacement)
|
|
74
|
+
4. ✅ **Button-VerticalList-Item Implementation** - canonical example
|
|
75
|
+
|
|
76
|
+
**WHEN defining CSS custom properties in components THEN read:**
|
|
77
|
+
1. ✅ **CSS Custom Property Naming Convention** (the `--_[abbrev]-*` pattern)
|
|
78
|
+
2. ✅ **Component Abbreviation Reference** (standard abbreviations for each component)
|
|
79
|
+
3. ✅ **When to Use Each Type** (design tokens vs component-scoped properties)
|
|
80
|
+
4. ✅ **CSS Custom Property Naming Anti-Patterns** (what NOT to do)
|
|
81
|
+
|
|
82
|
+
**WHEN troubleshooting component issues THEN read:**
|
|
83
|
+
1. ✅ **Anti-Patterns to Avoid** (common mistakes)
|
|
84
|
+
2. ✅ **Validation Checklist** (what to verify)
|
|
85
|
+
3. ✅ **WCAG Theme Architecture** (if accessibility issues)
|
|
86
|
+
|
|
87
|
+
**SKIP when:**
|
|
88
|
+
- Updating component documentation only
|
|
89
|
+
- Fixing typos or formatting
|
|
90
|
+
- Running tests without implementation changes
|
|
91
|
+
- Working on non-component code (tokens, build system, etc.)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Collaboration Practices and FAQs
|
|
96
|
+
|
|
97
|
+
### When to Pause and Ask
|
|
98
|
+
|
|
99
|
+
AI agents should pause implementation and ask Peter for clarification when:
|
|
100
|
+
|
|
101
|
+
- **Token gaps:** "I need [semantic token] but it doesn't exist. Should I use [primitive token] as fallback, or should we create the semantic token first?"
|
|
102
|
+
- **Design ambiguity:** "Design doc specifies fixed heights but calculated sizing seems more appropriate. Which approach should I use?"
|
|
103
|
+
- **Platform idioms:** "Platform-native animation pattern conflicts with motion token usage. Should I prioritize platform UX or token compliance?"
|
|
104
|
+
- **Judgment calls:** "I'm about to make a judgment call about [decision]. Should I proceed or get clarification first?"
|
|
105
|
+
|
|
106
|
+
**Key Principle:** Pausing to ask is the correct behavior, not a failure. We lose more time correcting assumptive solutions than calling a timeout for clarity.
|
|
107
|
+
|
|
108
|
+
### Clear Policies
|
|
109
|
+
|
|
110
|
+
#### Icon Usage Policy
|
|
111
|
+
|
|
112
|
+
- **Always use the Icon component** when displaying icons
|
|
113
|
+
- **Never reference icon assets directly**
|
|
114
|
+
- **Rationale:** Ensures consistent sizing via icon.size tokens, proper accessibility attributes, platform-appropriate rendering, and centralized icon management
|
|
115
|
+
|
|
116
|
+
#### Sizing Strategy Policy
|
|
117
|
+
|
|
118
|
+
- **Default to calculated sizing** (padding + content) unless explicitly told otherwise
|
|
119
|
+
- **If design doc specifies fixed heights**, clarify whether calculated heights would work better
|
|
120
|
+
- **Document sizing strategy** in component design docs
|
|
121
|
+
|
|
122
|
+
#### Token Gap Policy
|
|
123
|
+
|
|
124
|
+
- **When semantic tokens don't exist**, pause and ask for guidance
|
|
125
|
+
- **Never assume primitive tokens are acceptable fallbacks**
|
|
126
|
+
- **Document token gaps** in design docs for tracking
|
|
127
|
+
|
|
128
|
+
#### Placeholder Policy
|
|
129
|
+
|
|
130
|
+
- **Never use placeholder implementations** in production code
|
|
131
|
+
- **Tooling will enforce this** through TypeScript types and tests
|
|
132
|
+
- **If placeholders are needed during development**, pause and ask for guidance
|
|
133
|
+
|
|
134
|
+
**For strategic guidance on cross-platform decisions**, see [Cross-Platform vs Platform-Specific Decision Framework](cross-platform-vs-platform-specific-decision-framework)
|
|
135
|
+
|
|
136
|
+
**For strategic guidance on token resolution**, see [Token Resolution Patterns](token-resolution-patterns)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Token Selection Decision Framework
|
|
141
|
+
|
|
142
|
+
### Step 1: Check Semantic Tokens First
|
|
143
|
+
|
|
144
|
+
**ALWAYS start by reading semantic token files** to see what exists:
|
|
145
|
+
- `src/tokens/semantic/ColorTokens.ts` - Brand, status, text, surface colors
|
|
146
|
+
- `src/tokens/semantic/TypographyTokens.ts` - Body, heading, UI, specialized text
|
|
147
|
+
- `src/tokens/semantic/SpacingTokens.ts` - Layout and inset spacing
|
|
148
|
+
- `src/tokens/semantic/ShadowTokens.ts` - Elevation shadows
|
|
149
|
+
- `src/tokens/semantic/index.ts` - Complete semantic token exports
|
|
150
|
+
|
|
151
|
+
**Example**: Button needs text color
|
|
152
|
+
- ❌ DON'T: Use primitive `blue500`
|
|
153
|
+
- ✅ DO: Read `ColorTokens.ts`, find `color.primary`
|
|
154
|
+
|
|
155
|
+
### Step 2: Use Primitives Only When Unavoidable
|
|
156
|
+
|
|
157
|
+
**If no semantic token exists**, use primitives and document why:
|
|
158
|
+
- Read `src/tokens/*.ts` to find appropriate primitive
|
|
159
|
+
- Add comment explaining why semantic token doesn't exist
|
|
160
|
+
- Consider proposing semantic token elevation if pattern emerges
|
|
161
|
+
|
|
162
|
+
**Example**: Custom brand color not in semantic tokens
|
|
163
|
+
- ✅ OK: Use `purple300` with comment: `// TODO: Evaluate for semantic token elevation`
|
|
164
|
+
|
|
165
|
+
### What If Tokens Don't Exist?
|
|
166
|
+
|
|
167
|
+
**When you need a token that doesn't exist:**
|
|
168
|
+
|
|
169
|
+
1. **Pause and ask**: "I need [semantic token] for [use case]. Should I use [primitive token] as fallback, or should we create the semantic token first?"
|
|
170
|
+
2. **Document the gap**: Add to design doc's "Token Gaps" section
|
|
171
|
+
3. **Never assume**: Don't assume primitive tokens are acceptable fallbacks
|
|
172
|
+
4. **Wait for guidance**: Let Peter decide whether to create token or use alternative approach
|
|
173
|
+
|
|
174
|
+
**Why this matters**: Token gaps often indicate design system opportunities. Pausing to discuss prevents premature decisions and helps the design system evolve intentionally.
|
|
175
|
+
|
|
176
|
+
**For strategic guidance on token resolution**, see [Token Resolution Patterns](token-resolution-patterns)
|
|
177
|
+
|
|
178
|
+
### Step 3: Create Component-Level Tokens for Variants
|
|
179
|
+
|
|
180
|
+
**If component needs multiple variants**, create component-level tokens:
|
|
181
|
+
- Reference: `.kiro/specs/responsive-layout-system/component-sizing-token-guide.md`
|
|
182
|
+
- Component tokens should reference semantic or primitive tokens
|
|
183
|
+
- Never use hard-coded values
|
|
184
|
+
|
|
185
|
+
**Example**: Button sizing variants
|
|
186
|
+
```typescript
|
|
187
|
+
// ButtonCTA/tokens.ts
|
|
188
|
+
export const buttonCTATokens = {
|
|
189
|
+
small: {
|
|
190
|
+
paddingX: 'space.inset.tight',
|
|
191
|
+
paddingY: 'space.grouped.minimal',
|
|
192
|
+
typography: 'typography.buttonSm'
|
|
193
|
+
},
|
|
194
|
+
medium: {
|
|
195
|
+
paddingX: 'space.inset.normal',
|
|
196
|
+
paddingY: 'space.inset.tight',
|
|
197
|
+
typography: 'typography.buttonMd'
|
|
198
|
+
},
|
|
199
|
+
large: {
|
|
200
|
+
paddingX: 'space.inset.comfortable',
|
|
201
|
+
paddingY: 'space.inset.normal',
|
|
202
|
+
typography: 'typography.buttonLg'
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Step 4: Propose Semantic Token Elevation
|
|
208
|
+
|
|
209
|
+
**If 3+ components use same pattern**, propose semantic token elevation:
|
|
210
|
+
- Document the pattern in component completion notes
|
|
211
|
+
- Suggest semantic token name and structure
|
|
212
|
+
- Reference component-sizing-token-guide.md for elevation criteria
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## System-Specific Terminology Glossary
|
|
217
|
+
|
|
218
|
+
### Component Naming
|
|
219
|
+
|
|
220
|
+
**Container (not Card)**
|
|
221
|
+
- **Use**: "Container" for generic content wrappers
|
|
222
|
+
- **Avoid**: "Card" (conflicts with payment/gaming domains)
|
|
223
|
+
- **Rationale**: Domain clarity - "Container" is unambiguous across contexts
|
|
224
|
+
|
|
225
|
+
**True Native Architecture**
|
|
226
|
+
- **Meaning**: Build-time platform separation (not runtime detection)
|
|
227
|
+
- **Implementation**: Separate files per platform (Button.web.ts, Button.ios.swift, Button.android.kt)
|
|
228
|
+
- **Benefit**: No runtime overhead, platform-specific optimizations
|
|
229
|
+
|
|
230
|
+
**Semantic Tokens**
|
|
231
|
+
- **Meaning**: Tokens with contextual meaning (color.primary, typography.button)
|
|
232
|
+
- **Purpose**: Express design intent, not implementation details
|
|
233
|
+
- **Usage**: Always prefer semantic over primitive tokens in components
|
|
234
|
+
|
|
235
|
+
**Strategic Flexibility**
|
|
236
|
+
- **Meaning**: Mathematically-derived exceptions to 8px baseline grid
|
|
237
|
+
- **Tokens**: space075 (6px), space125 (10px), space250 (20px)
|
|
238
|
+
- **Usage**: Component-level spacing when baseline grid is too rigid
|
|
239
|
+
- **Validation**: Three-tier system (Pass/Warning/Error)
|
|
240
|
+
|
|
241
|
+
**Compositional Architecture**
|
|
242
|
+
- **Meaning**: Tokens compose primitives rather than including all properties
|
|
243
|
+
- **Example**: Typography tokens don't include color (color applied separately)
|
|
244
|
+
- **Benefit**: Same token works with different colors in different contexts
|
|
245
|
+
|
|
246
|
+
### Token Hierarchy
|
|
247
|
+
|
|
248
|
+
**Primitive Tokens**
|
|
249
|
+
- **Location**: `src/tokens/*.ts`
|
|
250
|
+
- **Examples**: `space100`, `fontSize100`, `blue500`
|
|
251
|
+
- **Usage**: Foundation for semantic tokens, rarely used directly in components
|
|
252
|
+
|
|
253
|
+
**Semantic Tokens**
|
|
254
|
+
- **Location**: `src/tokens/semantic/*.ts`
|
|
255
|
+
- **Examples**: `color.primary`, `typography.button`, `space.inset.normal`
|
|
256
|
+
- **Usage**: Primary token layer for component development
|
|
257
|
+
|
|
258
|
+
**Component-Level Tokens**
|
|
259
|
+
- **Location**: Within component directory (e.g., `ButtonCTA/tokens.ts`)
|
|
260
|
+
- **Examples**: Button sizing variants, state-specific colors
|
|
261
|
+
- **Usage**: When component needs variants not covered by semantic tokens
|
|
262
|
+
|
|
263
|
+
### WCAG Theme Architecture
|
|
264
|
+
|
|
265
|
+
**Dual-Theme Support**
|
|
266
|
+
|
|
267
|
+
The DesignerPunk token system includes built-in dual-theme support for color tokens:
|
|
268
|
+
- **Base theme**: Prioritizes aesthetic design and brand expression
|
|
269
|
+
- **WCAG theme**: Ensures WCAG 2.1 AA accessibility compliance
|
|
270
|
+
|
|
271
|
+
**How It Works**
|
|
272
|
+
|
|
273
|
+
Each primitive color token has both `base` and `wcag` theme values:
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
// Example from ColorTokens.ts
|
|
277
|
+
gray200: {
|
|
278
|
+
platforms: {
|
|
279
|
+
web: {
|
|
280
|
+
value: {
|
|
281
|
+
light: { base: '#68658A', wcag: '#8A879E' },
|
|
282
|
+
dark: { base: '#68658A', wcag: '#8A879E' }
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Theme Selection**
|
|
290
|
+
|
|
291
|
+
- **Base theme** (default): Used for aesthetic design where brand expression is prioritized
|
|
292
|
+
- **WCAG theme**: Used when accessibility compliance is required or when base theme fails contrast requirements
|
|
293
|
+
|
|
294
|
+
**Important Notes**
|
|
295
|
+
|
|
296
|
+
1. **Not Automatic**: The WCAG theme doesn't automatically solve accessibility issues - it's a tool that requires Human-AI collaboration to use effectively
|
|
297
|
+
2. **Component-Specific**: Accessibility testing must consider the specific context of each component and how elements pair together
|
|
298
|
+
3. **Contrast Testing**: Proper accessibility testing checks element pairings in context (e.g., text on background, border on background) with appropriate WCAG standards based on element criticality
|
|
299
|
+
4. **Design Feedback**: Accessibility decisions often require design feedback to balance aesthetic goals with accessibility requirements
|
|
300
|
+
|
|
301
|
+
**When to Consider WCAG Theme**
|
|
302
|
+
|
|
303
|
+
- When base theme colors fail WCAG contrast requirements
|
|
304
|
+
- When component needs to meet specific accessibility standards
|
|
305
|
+
- When design feedback indicates accessibility improvements are needed
|
|
306
|
+
- When building components for accessibility-critical contexts
|
|
307
|
+
|
|
308
|
+
**Accessibility Testing Philosophy**
|
|
309
|
+
|
|
310
|
+
Accessibility testing requires understanding:
|
|
311
|
+
- **Element Pairings**: Contrast happens between elements (text on background, border on surface)
|
|
312
|
+
- **Criticality Standards**: Different elements have different contrast requirements (4.5:1 for text, 3:1 for non-text)
|
|
313
|
+
- **Context Matters**: The same color may be accessible in one context but not another
|
|
314
|
+
- **Human-AI Collaboration**: Accessibility decisions require design judgment, not just automated testing
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Family Naming Convention
|
|
319
|
+
|
|
320
|
+
### Authoritative Source
|
|
321
|
+
|
|
322
|
+
`family-registry.yaml` (project root) is the single source of truth for component family identity. It defines three fields per family:
|
|
323
|
+
|
|
324
|
+
- **`canonical`**: Machine identifier — singular PascalCase, no spaces, no hyphens (e.g., `FormInput`, `ProgressIndicator`)
|
|
325
|
+
- **`displayName`**: Human-facing label for docs and MCP responses (e.g., "Form Inputs", "Progress Indicators")
|
|
326
|
+
- **`prefix`**: Primary component name prefix (e.g., `Input-`, `Progress-`)
|
|
327
|
+
|
|
328
|
+
All schema.yaml `family:` fields and guidance YAML `family:` fields MUST use the canonical name from the registry.
|
|
329
|
+
|
|
330
|
+
### Canonical Family Names
|
|
331
|
+
|
|
332
|
+
| Canonical | Display Name | Prefix | Notes |
|
|
333
|
+
|-----------|-------------|--------|-------|
|
|
334
|
+
| `Avatar` | "Avatars" | `Avatar-` | |
|
|
335
|
+
| `Badge` | "Badges" | `Badge-` | |
|
|
336
|
+
| `Button` | "Buttons" | `Button-` | |
|
|
337
|
+
| `Chip` | "Chips" | `Chip-` | |
|
|
338
|
+
| `Container` | "Containers" | `Container-` | |
|
|
339
|
+
| `FormInput` | "Form Inputs" | `Input-` | ⚠️ Legacy prefix omits `Form` |
|
|
340
|
+
| `Icon` | "Icons" | `Icon-` | |
|
|
341
|
+
| `Navigation` | "Navigation" | `Nav-` | ⚠️ Legacy abbreviated prefix |
|
|
342
|
+
| `ProgressIndicator` | "Progress Indicators" | `Progress-` | ⚠️ Dual prefix — primitives use `Progress-Indicator-`, semantic variants use `Progress-` |
|
|
343
|
+
|
|
344
|
+
### Legacy Prefix Mapping
|
|
345
|
+
|
|
346
|
+
Three families have component name prefixes that don't match their canonical family name. These are documented, not changed — component names are stable identifiers with deep references across the codebase.
|
|
347
|
+
|
|
348
|
+
An agent encountering `Input-Text-Base` should know it belongs to the `FormInput` family. An agent encountering `Nav-TabBar-Base` should know it belongs to the `Navigation` family. The mapping above is the authoritative reference.
|
|
349
|
+
|
|
350
|
+
### Forward-Looking Rule
|
|
351
|
+
|
|
352
|
+
**New families MUST use the canonical family name as the component prefix.** No abbreviations, no divergence. If the canonical name is `DataDisplay`, the component prefix is `DataDisplay-`, not `DD-` or `Data-`.
|
|
353
|
+
|
|
354
|
+
### Guidance YAML Filenames
|
|
355
|
+
|
|
356
|
+
Guidance YAML filenames (e.g., `button.yaml`, `form-inputs.yaml`) are filesystem identifiers independent of the canonical family name. A file named `form-inputs.yaml` contains `family: FormInput`. This is expected — the filename convention predates the canonical naming convention and is not worth renaming.
|
|
357
|
+
|
|
358
|
+
### Enforcement
|
|
359
|
+
|
|
360
|
+
The `FamilyNameValidation.test.ts` test validates that every schema `family:` value matches a canonical name in `family-registry.yaml`. Adding a new family requires registering it in the registry first — the test will fail with a clear message if an unregistered family name appears.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Family Guidance Standards
|
|
365
|
+
|
|
366
|
+
When a component family reaches production readiness, its guidance YAML must meet minimum quality standards. These standards ensure that product agents (Leonardo) can select the right component for the right context from day one — not just find that guidance exists, but find guidance that's *useful*.
|
|
367
|
+
|
|
368
|
+
### Minimum Quality Bar
|
|
369
|
+
|
|
370
|
+
| Standard | Rationale | Enforcement |
|
|
371
|
+
|----------|-----------|-------------|
|
|
372
|
+
| Every production component appears in at least one `selectionRule` | An unreachable component is invisible to agents querying `getGuidance()` — it exists in the catalog but can't be selected through guidance | `GuidanceCompleteness.test.ts` — hard failure |
|
|
373
|
+
| `whenToUse` is non-empty | Agents need to know what problem this family solves before selecting from it | `GuidanceCompleteness.test.ts` — hard failure |
|
|
374
|
+
| `whenNotToUse` is non-empty | The most common guidance failure is selecting a component for the wrong use case. Explicit anti-patterns prevent this | `GuidanceCompleteness.test.ts` — hard failure |
|
|
375
|
+
| `accessibilityNotes` is non-empty | Every production family has accessibility implications. Notes ensure agents don't produce inaccessible compositions | `GuidanceCompleteness.test.ts` — hard failure |
|
|
376
|
+
| `displayName` is present | Human-facing label for docs and MCP responses. Falls back to `family` value if omitted | `FamilyNameValidation.test.ts` (Spec 082) |
|
|
377
|
+
|
|
378
|
+
### Resolution Path
|
|
379
|
+
|
|
380
|
+
When `GuidanceCompleteness.test.ts` fails, the error message identifies the specific family or component and points to this section. To resolve:
|
|
381
|
+
|
|
382
|
+
1. **Component not reachable**: Add the component to a `selectionRule` in the family's guidance YAML. Every `selectionRule` needs a `scenario` (when to use it), `recommend` (the component name), and `rationale` (why this component fits).
|
|
383
|
+
2. **Empty `whenToUse`**: Add at least one entry describing what problem this family solves. Be specific — "Use for forms" is less useful than "Use for capturing structured user input with validation feedback."
|
|
384
|
+
3. **Empty `whenNotToUse`**: Add at least one entry describing the common misuse. What do agents reach for this family when they should reach for something else?
|
|
385
|
+
4. **Empty `accessibilityNotes`**: Add at least one entry covering the family's key accessibility consideration — keyboard navigation, screen reader behavior, focus management, or ARIA requirements.
|
|
386
|
+
|
|
387
|
+
### Enforcement
|
|
388
|
+
|
|
389
|
+
Quality enforcement lives in `application-mcp-server/src/indexer/__tests__/GuidanceCompleteness.test.ts`. This file is the dedicated home for guidance *quality* checks — distinct from `CoverageDrift.test.ts` (guidance *existence*) and `FamilyNameValidation.test.ts` (family *naming*).
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Component Attribute Standards
|
|
394
|
+
|
|
395
|
+
### Variant Attribute Naming
|
|
396
|
+
|
|
397
|
+
**Standard**: Use `variant` attribute for component variations, not `style`
|
|
398
|
+
|
|
399
|
+
**Rationale**:
|
|
400
|
+
- **IDE Warnings**: The `style` attribute conflicts with the standard HTML `style` attribute, causing IDE warnings and potential confusion
|
|
401
|
+
- **Industry Standards**: Leading design systems use `variant` for component variations:
|
|
402
|
+
- Material Design: `<Button variant="contained">`
|
|
403
|
+
- Shoelace: `<sl-button variant="primary">`
|
|
404
|
+
- Adobe Spectrum: `<sp-button variant="accent">`
|
|
405
|
+
- **Web Component Best Practices**: Custom elements should avoid attribute names that conflict with standard HTML attributes
|
|
406
|
+
- **Developer Experience**: Clear, unambiguous attribute names improve code readability and reduce errors
|
|
407
|
+
|
|
408
|
+
**Correct Usage**:
|
|
409
|
+
```html
|
|
410
|
+
<!-- ✅ CORRECT: Use variant attribute -->
|
|
411
|
+
<button-cta variant="primary" label="Submit"></button-cta>
|
|
412
|
+
<button-cta variant="secondary" label="Cancel"></button-cta>
|
|
413
|
+
<button-cta variant="danger" label="Delete"></button-cta>
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Anti-Pattern**:
|
|
417
|
+
```html
|
|
418
|
+
<!-- ❌ WRONG: Don't use style attribute for variants -->
|
|
419
|
+
<button-cta style="primary" label="Submit"></button-cta>
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Why This Matters**:
|
|
423
|
+
- IDEs will show warnings when `style` is used for non-CSS purposes
|
|
424
|
+
- Developers familiar with web standards expect `style` to contain CSS
|
|
425
|
+
- Using `variant` aligns with industry conventions and improves code clarity
|
|
426
|
+
- Future-proofs components against potential conflicts with HTML standards
|
|
427
|
+
|
|
428
|
+
**TypeScript Interface Pattern**:
|
|
429
|
+
```typescript
|
|
430
|
+
// Component props interface
|
|
431
|
+
export interface ButtonCTAProps {
|
|
432
|
+
label: string;
|
|
433
|
+
variant?: 'primary' | 'secondary' | 'danger'; // ✅ Use variant
|
|
434
|
+
size?: 'small' | 'medium' | 'large';
|
|
435
|
+
icon?: string;
|
|
436
|
+
disabled?: boolean;
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**Web Component Implementation Pattern**:
|
|
441
|
+
```typescript
|
|
442
|
+
// Web component attribute reading
|
|
443
|
+
class ButtonCTA extends HTMLElement {
|
|
444
|
+
connectedCallback() {
|
|
445
|
+
const variant = this.getAttribute('variant') || 'primary'; // ✅ Read variant
|
|
446
|
+
// Apply styling based on variant
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Component Structure Pattern
|
|
454
|
+
|
|
455
|
+
### File Organization
|
|
456
|
+
|
|
457
|
+
```
|
|
458
|
+
src/components/
|
|
459
|
+
core/ # Core, reusable components
|
|
460
|
+
[ComponentName]/
|
|
461
|
+
README.md # Component documentation
|
|
462
|
+
types.ts # Shared TypeScript interfaces
|
|
463
|
+
tokens.ts # Component-level tokens (if needed)
|
|
464
|
+
__tests__/ # Cross-platform tests
|
|
465
|
+
examples/ # Usage examples
|
|
466
|
+
platforms/ # Platform-specific implementations
|
|
467
|
+
web/
|
|
468
|
+
[ComponentName].web.ts
|
|
469
|
+
ios/
|
|
470
|
+
[ComponentName].ios.swift
|
|
471
|
+
android/
|
|
472
|
+
[ComponentName].android.kt
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### Directory Purpose
|
|
476
|
+
|
|
477
|
+
- **README.md**: Component documentation, usage guidelines, token consumption
|
|
478
|
+
- **types.ts**: Shared TypeScript interfaces and types
|
|
479
|
+
- **tokens.ts**: Component-level token references (platform-agnostic)
|
|
480
|
+
- **__tests__/**: Component tests (unit, integration, accessibility)
|
|
481
|
+
- **examples/**: Usage examples demonstrating component variants
|
|
482
|
+
- **platforms/**: Platform-specific implementations following True Native Architecture
|
|
483
|
+
|
|
484
|
+
---
|
|
485
|
+
|
|
486
|
+
## Behavioral Contracts Workflow
|
|
487
|
+
|
|
488
|
+
Behavioral contracts (`contracts.yaml`) define what a component guarantees to its consumers. They are core Stemma — not a separate governance layer.
|
|
489
|
+
|
|
490
|
+
### When to Author Contracts
|
|
491
|
+
|
|
492
|
+
Author `contracts.yaml` after `types.ts` and before platform implementation. Contracts are the specification; platform code is the implementation.
|
|
493
|
+
|
|
494
|
+
### Naming Convention
|
|
495
|
+
|
|
496
|
+
All contract names follow `{category}_{concept}` in `snake_case`:
|
|
497
|
+
- `interaction_focusable`, `state_disabled`, `accessibility_reduced_motion`
|
|
498
|
+
- 10 categories: accessibility, animation, composition, content, interaction, layout, performance, state, validation, visual
|
|
499
|
+
|
|
500
|
+
### Concept Catalog Consultation
|
|
501
|
+
|
|
502
|
+
Before naming a contract, query the Concept Catalog via MCP:
|
|
503
|
+
```
|
|
504
|
+
get_section({ path: ".kiro/steering/Contract-System-Reference.md", heading: "Concept Catalog" })
|
|
505
|
+
```
|
|
506
|
+
- Use existing catalog concepts whenever possible
|
|
507
|
+
- If a behavior needs a new concept, propose a catalog addition (ballot measure) before using it
|
|
508
|
+
- Non-catalog concept names will fail the automated validation test (`npm test`)
|
|
509
|
+
|
|
510
|
+
### Relationship to Platform Implementation
|
|
511
|
+
|
|
512
|
+
- Each platform implementation satisfies the same set of contracts
|
|
513
|
+
- Spec task subtasks for platform implementation should include `_Contracts:` lines mapping to the contracts they satisfy
|
|
514
|
+
- The automated existence check verifies every component with `platforms/` has `contracts.yaml`
|
|
515
|
+
|
|
516
|
+
### Reference
|
|
517
|
+
|
|
518
|
+
For the full contract system (taxonomy, canonical format, classification rules, inheritance patterns):
|
|
519
|
+
```
|
|
520
|
+
get_document_full({ path: ".kiro/steering/Contract-System-Reference.md" })
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## What If Design Doc Is Unclear?
|
|
526
|
+
|
|
527
|
+
**When design documentation leaves questions unanswered:**
|
|
528
|
+
|
|
529
|
+
1. **Pause and ask**: "Design doc specifies [X] but [Y] seems more appropriate. Which approach should I use?"
|
|
530
|
+
2. **Provide context**: Explain why you're uncertain and what alternatives you're considering
|
|
531
|
+
3. **Don't assume**: Never make judgment calls on ambiguous design decisions
|
|
532
|
+
4. **Document the question**: Add to design doc as an open question if it affects other components
|
|
533
|
+
|
|
534
|
+
**Common ambiguities:**
|
|
535
|
+
- Fixed heights vs calculated sizing
|
|
536
|
+
- Platform-specific behavior vs cross-platform consistency
|
|
537
|
+
- Token usage when multiple tokens could apply
|
|
538
|
+
- Variant naming and organization
|
|
539
|
+
|
|
540
|
+
**Why this matters**: Design ambiguity often reveals opportunities to improve the design system. Pausing to clarify prevents rework and ensures components align with design intent.
|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## Component Token Files
|
|
545
|
+
|
|
546
|
+
### Purpose of tokens.ts
|
|
547
|
+
|
|
548
|
+
The `tokens.ts` file at component root defines **which tokens** the component uses, not **how** they're implemented per platform.
|
|
549
|
+
|
|
550
|
+
**This file is platform-agnostic** - it references semantic or primitive token names that will be generated into platform-specific values by the build system.
|
|
551
|
+
|
|
552
|
+
**Example**:
|
|
553
|
+
```typescript
|
|
554
|
+
// ButtonCTA/tokens.ts
|
|
555
|
+
// Platform-agnostic token references
|
|
556
|
+
export const buttonCTATokens = {
|
|
557
|
+
// Sizing - references semantic tokens
|
|
558
|
+
paddingX: 'space.inset.normal',
|
|
559
|
+
paddingY: 'space.inset.tight',
|
|
560
|
+
minWidth: 'space400',
|
|
561
|
+
|
|
562
|
+
// Colors - references semantic tokens
|
|
563
|
+
background: 'color.primary',
|
|
564
|
+
text: 'color.text.default',
|
|
565
|
+
|
|
566
|
+
// Typography - references semantic token
|
|
567
|
+
typography: 'typography.buttonMd',
|
|
568
|
+
|
|
569
|
+
// Border - references primitive token
|
|
570
|
+
borderRadius: 'radius100'
|
|
571
|
+
};
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
### Platform-Specific Token Usage
|
|
575
|
+
|
|
576
|
+
Each platform implementation uses **generated platform-specific tokens** from the build system:
|
|
577
|
+
|
|
578
|
+
**Web**: CSS custom properties
|
|
579
|
+
```typescript
|
|
580
|
+
// platforms/web/ButtonCTA.web.ts
|
|
581
|
+
static styles = css`
|
|
582
|
+
:host {
|
|
583
|
+
padding: var(--space-inset-tight) var(--space-inset-normal);
|
|
584
|
+
background: var(--color-primary);
|
|
585
|
+
color: var(--color-text-default);
|
|
586
|
+
font: var(--typography-button-md);
|
|
587
|
+
border-radius: var(--radius-100);
|
|
588
|
+
}
|
|
589
|
+
`;
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
**iOS**: Swift constants
|
|
593
|
+
```swift
|
|
594
|
+
// platforms/ios/ButtonCTA.ios.swift
|
|
595
|
+
Button(action: action) {
|
|
596
|
+
Text(label)
|
|
597
|
+
.font(typographyButtonMd)
|
|
598
|
+
.foregroundColor(colorTextDefault)
|
|
599
|
+
}
|
|
600
|
+
.padding(.horizontal, spaceInsetNormal)
|
|
601
|
+
.padding(.vertical, spaceInsetTight)
|
|
602
|
+
.background(colorPrimary)
|
|
603
|
+
.cornerRadius(radius100)
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
**Android**: Kotlin constants
|
|
607
|
+
```kotlin
|
|
608
|
+
// platforms/android/ButtonCTA.android.kt
|
|
609
|
+
Button(
|
|
610
|
+
onClick = onClick,
|
|
611
|
+
modifier = modifier
|
|
612
|
+
.padding(horizontal = spaceInsetNormal.dp, vertical = spaceInsetTight.dp)
|
|
613
|
+
) {
|
|
614
|
+
Text(
|
|
615
|
+
text = label,
|
|
616
|
+
style = typographyButtonMd,
|
|
617
|
+
color = colorTextDefault
|
|
618
|
+
)
|
|
619
|
+
}
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
**Key Point**: The build system generates platform-specific token values (CSS custom properties, Swift constants, Kotlin constants) from the semantic token references in `tokens.ts`.
|
|
623
|
+
|
|
624
|
+
### What If Platform Requirements Don't Fit in Token Files?
|
|
625
|
+
|
|
626
|
+
Platform implementations handle platform-specific requirements that are **not** in the component tokens file:
|
|
627
|
+
|
|
628
|
+
**iOS Example**: Minimum touch target height (WCAG requirement)
|
|
629
|
+
```swift
|
|
630
|
+
.frame(minHeight: 44) // iOS-specific accessibility requirement
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
**Android Example**: Material ripple effect
|
|
634
|
+
```kotlin
|
|
635
|
+
.clickable(
|
|
636
|
+
indication = rememberRipple(), // Android-specific interaction
|
|
637
|
+
interactionSource = remember { MutableInteractionSource() }
|
|
638
|
+
)
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
**Web Example**: Focus visible styles
|
|
642
|
+
```css
|
|
643
|
+
:host(:focus-visible) {
|
|
644
|
+
outline: 2px solid var(--color-primary);
|
|
645
|
+
outline-offset: 2px;
|
|
646
|
+
}
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
**These nuances are handled by platform implementations**, not defined in the component tokens file. The component tokens file only defines which design system tokens the component uses.
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## Icon System Integration
|
|
654
|
+
|
|
655
|
+
### Overview
|
|
656
|
+
|
|
657
|
+
The Icon component provides a unified API for displaying vector icons across web, iOS, and Android platforms. This section documents when to use the Icon component system versus direct platform icons, and how to properly use icon size tokens.
|
|
658
|
+
|
|
659
|
+
### When to Use Icon Component
|
|
660
|
+
|
|
661
|
+
**Use the Icon component when**:
|
|
662
|
+
- Icon is part of component's public API (user can specify icon name)
|
|
663
|
+
- Icon needs to be swappable or configurable
|
|
664
|
+
- Icon should follow consistent sizing and coloring patterns
|
|
665
|
+
- Component is cross-platform and needs unified icon handling
|
|
666
|
+
|
|
667
|
+
**Example - ButtonCTA with Icon**:
|
|
668
|
+
```typescript
|
|
669
|
+
// Web component using Icon system
|
|
670
|
+
<button-cta icon="arrow-right" label="Next"></button-cta>
|
|
671
|
+
|
|
672
|
+
// Component internally uses Icon component
|
|
673
|
+
const iconElement = createIcon({
|
|
674
|
+
name: this.getAttribute('icon'),
|
|
675
|
+
size: iconSize100, // Token-based sizing
|
|
676
|
+
color: 'currentColor'
|
|
677
|
+
});
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### When Direct Platform Icons Are Acceptable
|
|
681
|
+
|
|
682
|
+
**Direct platform icons are acceptable when**:
|
|
683
|
+
- Icon is internal implementation detail (not exposed to component API)
|
|
684
|
+
- Icon is platform-specific UI convention (iOS SF Symbols for system UI)
|
|
685
|
+
- Icon is tightly coupled to platform behavior
|
|
686
|
+
|
|
687
|
+
**However**: Even internal icons MUST use icon size tokens for sizing.
|
|
688
|
+
|
|
689
|
+
**Example - Input-Text-Base Status Icons**:
|
|
690
|
+
```swift
|
|
691
|
+
// iOS: SF Symbols for status indicators (internal implementation)
|
|
692
|
+
// ✅ CORRECT: Use icon size token
|
|
693
|
+
Image(systemName: "exclamationmark.circle.fill")
|
|
694
|
+
.font(.system(size: iconSize075))
|
|
695
|
+
|
|
696
|
+
// ❌ WRONG: Hard-coded size
|
|
697
|
+
Image(systemName: "exclamationmark.circle.fill")
|
|
698
|
+
.font(.system(size: 16))
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
**When bypassing the Icon system**, document the rationale in the component README:
|
|
702
|
+
```markdown
|
|
703
|
+
## Icon Usage
|
|
704
|
+
|
|
705
|
+
This component uses direct SF Symbols for status indicators because:
|
|
706
|
+
- Icons are internal implementation details (not exposed to API)
|
|
707
|
+
- SF Symbols provide platform-native visual consistency
|
|
708
|
+
- Status icons follow iOS Human Interface Guidelines
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
### Icon Size Tokens
|
|
712
|
+
|
|
713
|
+
**All icon sizing MUST use icon size tokens**:
|
|
714
|
+
|
|
715
|
+
| Token | Pixels | Typography Pairing | Use Cases |
|
|
716
|
+
|-------|--------|-------------------|-----------|
|
|
717
|
+
| `iconSize050` | 12px | caption, legal, labelXs | Smallest text, fine print |
|
|
718
|
+
| `iconSize075` | 16px | bodySm, buttonSm, labelSm | Compact layouts, small UI |
|
|
719
|
+
| `iconSize100` | 24px | bodyMd, buttonMd, labelMd | Standard UI (default) |
|
|
720
|
+
| `iconSize125` | 32px | bodyLg, buttonLg, labelLg | Large UI elements |
|
|
721
|
+
| `iconSize150` | 40px | h2 | Large headings |
|
|
722
|
+
|
|
723
|
+
**Size Selection Guidelines**:
|
|
724
|
+
- **Default to `iconSize100` (24px)**: Use when in doubt
|
|
725
|
+
- **Match typography context**: Use icon size that pairs with the text typography
|
|
726
|
+
- **Consider visual hierarchy**: Larger icons create stronger visual presence
|
|
727
|
+
|
|
728
|
+
### Platform-Specific Icon Usage
|
|
729
|
+
|
|
730
|
+
#### Web Platform
|
|
731
|
+
|
|
732
|
+
**Using Icon Component**:
|
|
733
|
+
```html
|
|
734
|
+
<!-- Web component API (recommended) -->
|
|
735
|
+
<icon-base name="arrow-right" size="24"></icon-base>
|
|
736
|
+
|
|
737
|
+
<!-- With color override -->
|
|
738
|
+
<icon-base name="check" size="24" color="color-success"></icon-base>
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
**Using Icon Size Tokens in CSS**:
|
|
742
|
+
```css
|
|
743
|
+
.icon-container {
|
|
744
|
+
width: var(--icon-size-100); /* 24px */
|
|
745
|
+
height: var(--icon-size-100); /* 24px */
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
.small-icon {
|
|
749
|
+
width: var(--icon-size-075); /* 16px */
|
|
750
|
+
height: var(--icon-size-075); /* 16px */
|
|
751
|
+
}
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
**Using Icon Size Tokens in JavaScript**:
|
|
755
|
+
```typescript
|
|
756
|
+
import { createIcon } from '@/components/core/Icon/platforms/web/Icon.web';
|
|
757
|
+
|
|
758
|
+
// ✅ CORRECT: Use token reference
|
|
759
|
+
const icon = createIcon({
|
|
760
|
+
name: 'check',
|
|
761
|
+
size: iconSize100 // Token-based sizing
|
|
762
|
+
});
|
|
763
|
+
|
|
764
|
+
// ❌ WRONG: Hard-coded size
|
|
765
|
+
const icon = createIcon({
|
|
766
|
+
name: 'check',
|
|
767
|
+
size: 24 // Hard-coded value
|
|
768
|
+
});
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
#### iOS Platform (SwiftUI)
|
|
772
|
+
|
|
773
|
+
**Using Icon Component**:
|
|
774
|
+
```swift
|
|
775
|
+
// Icon component with token-based sizing
|
|
776
|
+
Icon(name: "arrow-right", size: iconSize100)
|
|
777
|
+
|
|
778
|
+
// With custom color
|
|
779
|
+
Icon(name: "check", size: iconSize100)
|
|
780
|
+
.foregroundColor(colorSuccess)
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
**Using Direct SF Symbols with Tokens**:
|
|
784
|
+
```swift
|
|
785
|
+
// ✅ CORRECT: SF Symbol with icon size token
|
|
786
|
+
Image(systemName: "exclamationmark.circle.fill")
|
|
787
|
+
.font(.system(size: iconSize075))
|
|
788
|
+
|
|
789
|
+
// ✅ CORRECT: SF Symbol with frame using token
|
|
790
|
+
Image(systemName: "checkmark.circle.fill")
|
|
791
|
+
.frame(width: iconSize100, height: iconSize100)
|
|
792
|
+
|
|
793
|
+
// ❌ WRONG: Hard-coded size
|
|
794
|
+
Image(systemName: "exclamationmark.circle.fill")
|
|
795
|
+
.font(.system(size: 16))
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
**When to Use SF Symbols Directly**:
|
|
799
|
+
- Status indicators (error, success, warning icons)
|
|
800
|
+
- System UI elements following iOS conventions
|
|
801
|
+
- Platform-specific accessibility features
|
|
802
|
+
|
|
803
|
+
#### Android Platform (Jetpack Compose)
|
|
804
|
+
|
|
805
|
+
**Using Icon Component**:
|
|
806
|
+
```kotlin
|
|
807
|
+
// Icon component with token-based sizing
|
|
808
|
+
Icon(name = "arrow_right", size = iconSize100)
|
|
809
|
+
|
|
810
|
+
// With custom color
|
|
811
|
+
Icon(
|
|
812
|
+
name = "check",
|
|
813
|
+
size = iconSize100,
|
|
814
|
+
tint = colorSuccess
|
|
815
|
+
)
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
**Using Direct Material Icons with Tokens**:
|
|
819
|
+
```kotlin
|
|
820
|
+
// ✅ CORRECT: Material Icon with size token
|
|
821
|
+
Icon(
|
|
822
|
+
imageVector = Icons.Default.CheckCircle,
|
|
823
|
+
contentDescription = "Success",
|
|
824
|
+
modifier = Modifier.size(iconSize100)
|
|
825
|
+
)
|
|
826
|
+
|
|
827
|
+
// ✅ CORRECT: Custom drawable with size token
|
|
828
|
+
Icon(
|
|
829
|
+
painter = painterResource(id = R.drawable.ic_status),
|
|
830
|
+
contentDescription = "Status",
|
|
831
|
+
modifier = Modifier.size(iconSize075)
|
|
832
|
+
)
|
|
833
|
+
|
|
834
|
+
// ❌ WRONG: Hard-coded size
|
|
835
|
+
Icon(
|
|
836
|
+
imageVector = Icons.Default.CheckCircle,
|
|
837
|
+
contentDescription = "Success",
|
|
838
|
+
modifier = Modifier.size(24.dp)
|
|
839
|
+
)
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
**When to Use Material Icons Directly**:
|
|
843
|
+
- Status indicators following Material Design guidelines
|
|
844
|
+
- System UI elements following Android conventions
|
|
845
|
+
- Platform-specific interaction patterns
|
|
846
|
+
|
|
847
|
+
### Icon Integration Anti-Patterns
|
|
848
|
+
|
|
849
|
+
#### ❌ Hard-Coded Icon Sizes
|
|
850
|
+
```swift
|
|
851
|
+
// DON'T: Hard-coded pixel values
|
|
852
|
+
Image(systemName: "icon-name")
|
|
853
|
+
.font(.system(size: 16))
|
|
854
|
+
|
|
855
|
+
// DO: Use icon size tokens
|
|
856
|
+
Image(systemName: "icon-name")
|
|
857
|
+
.font(.system(size: iconSize075))
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
#### ❌ Inconsistent Icon Usage Within Component
|
|
861
|
+
```typescript
|
|
862
|
+
// DON'T: Mix Icon component and direct assets inconsistently
|
|
863
|
+
class MyComponent {
|
|
864
|
+
render() {
|
|
865
|
+
// Some icons use Icon component
|
|
866
|
+
const navIcon = createIcon({ name: 'arrow-right', size: iconSize100 });
|
|
867
|
+
|
|
868
|
+
// Other icons use direct SVG (inconsistent)
|
|
869
|
+
const statusIcon = '<svg width="16" height="16">...</svg>';
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// DO: Use consistent approach throughout component
|
|
874
|
+
class MyComponent {
|
|
875
|
+
render() {
|
|
876
|
+
// All icons use Icon component
|
|
877
|
+
const navIcon = createIcon({ name: 'arrow-right', size: iconSize100 });
|
|
878
|
+
const statusIcon = createIcon({ name: 'check', size: iconSize075 });
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
#### ❌ Missing Documentation for Direct Platform Icons
|
|
884
|
+
```swift
|
|
885
|
+
// DON'T: Use direct platform icons without documentation
|
|
886
|
+
Image(systemName: "exclamationmark.circle.fill")
|
|
887
|
+
.font(.system(size: iconSize075))
|
|
888
|
+
|
|
889
|
+
// DO: Document rationale in component README
|
|
890
|
+
// See "When Direct Platform Icons Are Acceptable" section above
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
### Icon Integration Checklist
|
|
894
|
+
|
|
895
|
+
Before implementing icons in a component, verify:
|
|
896
|
+
|
|
897
|
+
- [ ] Decided whether to use Icon component or direct platform icons
|
|
898
|
+
- [ ] Documented rationale if bypassing Icon component system
|
|
899
|
+
- [ ] All icon sizes use icon size tokens (no hard-coded values)
|
|
900
|
+
- [ ] Icon sizing matches typography context (see token pairing table)
|
|
901
|
+
- [ ] Consistent icon approach throughout the component
|
|
902
|
+
- [ ] Component README documents icon usage patterns
|
|
903
|
+
|
|
904
|
+
---
|
|
905
|
+
|
|
906
|
+
## What If Platform Idioms Conflict with Tokens?
|
|
907
|
+
|
|
908
|
+
**When platform-native patterns conflict with token usage:**
|
|
909
|
+
|
|
910
|
+
1. **Pause and ask**: "Platform-native [animation/interaction] conflicts with [token]. Should I prioritize platform UX or token compliance?"
|
|
911
|
+
2. **Explain the conflict**: Describe the platform idiom and why it conflicts with tokens
|
|
912
|
+
3. **Propose options**: Suggest alternatives (use tokens, use platform idiom, hybrid approach)
|
|
913
|
+
4. **Wait for guidance**: Let Peter decide based on design system goals
|
|
914
|
+
|
|
915
|
+
**Common conflicts:**
|
|
916
|
+
- Motion tokens vs platform-native animations (iOS springs, Android ripples)
|
|
917
|
+
- Sizing tokens vs platform accessibility requirements (44pt iOS touch targets)
|
|
918
|
+
- Color tokens vs platform-specific UI conventions (system colors, semantic colors)
|
|
919
|
+
|
|
920
|
+
**Decision framework**: See [Cross-Platform vs Platform-Specific Decision Framework](cross-platform-vs-platform-specific-decision-framework) for strategic guidance on when to prioritize cross-platform consistency vs platform-appropriate UX.
|
|
921
|
+
|
|
922
|
+
**Why this matters**: Platform idioms often provide superior UX, but deviating from tokens affects design system consistency. These decisions require design judgment, not assumptions.
|
|
923
|
+
|
|
924
|
+
---
|
|
925
|
+
|
|
926
|
+
## Cross-Platform Token Consumption
|
|
927
|
+
|
|
928
|
+
### How Token Generation Works
|
|
929
|
+
|
|
930
|
+
**1. Component defines token references** (platform-agnostic):
|
|
931
|
+
```typescript
|
|
932
|
+
// tokens.ts
|
|
933
|
+
paddingX: 'space.inset.normal'
|
|
934
|
+
```
|
|
935
|
+
|
|
936
|
+
**2. Build system generates platform-specific values**:
|
|
937
|
+
|
|
938
|
+
**Web Output** (CSS):
|
|
939
|
+
```css
|
|
940
|
+
--space-inset-normal: 8px;
|
|
941
|
+
```
|
|
942
|
+
|
|
943
|
+
**iOS Output** (Swift):
|
|
944
|
+
```swift
|
|
945
|
+
let spaceInsetNormal: CGFloat = 8
|
|
946
|
+
```
|
|
947
|
+
|
|
948
|
+
**Android Output** (Kotlin):
|
|
949
|
+
```kotlin
|
|
950
|
+
val spaceInsetNormal = 8.dp
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
**3. Platform implementations use generated tokens**:
|
|
954
|
+
|
|
955
|
+
Each platform uses its native syntax to consume the generated token values. The mathematical relationships are preserved across all platforms — only the syntax differs.
|
|
956
|
+
|
|
957
|
+
### Token Consumption by Platform (Spec 094)
|
|
958
|
+
|
|
959
|
+
Tokens are split into two categories: **static tokens** (spacing, sizing, radius, typography, motion) that don't vary by theme, and **theme-varying tokens** (colors, color-dependent shadows/glows) that change per theme.
|
|
960
|
+
|
|
961
|
+
**Web** — CSS custom properties, no code changes needed for theming:
|
|
962
|
+
```css
|
|
963
|
+
/* Static and theme-varying tokens both consumed as custom properties */
|
|
964
|
+
var(--space-inset-100) /* Static — same in all themes */
|
|
965
|
+
var(--color-action-primary) /* Theme-varying — changes with data-theme attribute */
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
**iOS** — Static tokens via `DesignTokens`, theme-varying via `@Environment`:
|
|
969
|
+
```swift
|
|
970
|
+
// Static tokens — unchanged
|
|
971
|
+
DesignTokens.spaceInset100
|
|
972
|
+
|
|
973
|
+
// Theme-varying tokens — read from environment
|
|
974
|
+
@Environment(\.{abbreviation}Theme) var theme
|
|
975
|
+
theme.colorActionPrimary
|
|
976
|
+
```
|
|
977
|
+
|
|
978
|
+
**Android** — Static tokens via `DesignTokens`, theme-varying via `CompositionLocal`:
|
|
979
|
+
```kotlin
|
|
980
|
+
// Static tokens — unchanged
|
|
981
|
+
DesignTokens.space_inset_100
|
|
982
|
+
|
|
983
|
+
// Theme-varying tokens — read from CompositionLocal
|
|
984
|
+
val theme = Local{Abbreviation}Theme.current
|
|
985
|
+
theme.colorActionPrimary
|
|
986
|
+
```
|
|
987
|
+
|
|
988
|
+
**Key rule**: Components should NOT mix static and theme-aware access for the same token. If a token is in the theme-varying set (determined by the ThemeRegistry), always use the theme-aware access pattern on iOS/Android. On web, all tokens use CSS custom properties regardless.
|
|
989
|
+
|
|
990
|
+
### Token Reference Format
|
|
991
|
+
|
|
992
|
+
**In component tokens.ts**, use dot notation for semantic tokens:
|
|
993
|
+
```typescript
|
|
994
|
+
'space.inset.normal' // Semantic spacing token
|
|
995
|
+
'color.primary' // Semantic color token
|
|
996
|
+
'typography.buttonMd' // Semantic typography token
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
**Or direct primitive token names**:
|
|
1000
|
+
```typescript
|
|
1001
|
+
'space100' // Primitive spacing token
|
|
1002
|
+
'blue500' // Primitive color token
|
|
1003
|
+
'fontSize100' // Primitive font size token
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
**Build system resolves these references** to platform-specific generated values.
|
|
1007
|
+
|
|
1008
|
+
---
|
|
1009
|
+
|
|
1010
|
+
## Common Component Patterns
|
|
1011
|
+
|
|
1012
|
+
### Button Components
|
|
1013
|
+
- **Text**: `typography.buttonSm/Md/Lg`
|
|
1014
|
+
- **Background**: `color.primary` (primary), or use primitive colors directly for variants
|
|
1015
|
+
- **Padding**: `space.inset.normal` or `space.inset.comfortable`
|
|
1016
|
+
- **Border radius**: `radius100` or `radius150`
|
|
1017
|
+
- **Min width**: `space400` (128px minimum for accessibility)
|
|
1018
|
+
|
|
1019
|
+
### Input Components
|
|
1020
|
+
- **Text**: `typography.input`
|
|
1021
|
+
- **Label**: `typography.labelSm/Md/Lg`
|
|
1022
|
+
- **Padding**: `space.inset.normal`
|
|
1023
|
+
- **Border**: `border.default`, `color.border`
|
|
1024
|
+
- **Sizing**: Follow component-sizing-token-guide.md
|
|
1025
|
+
|
|
1026
|
+
### Container Components
|
|
1027
|
+
- **Background**: `color.surface`
|
|
1028
|
+
- **Padding**: `space.inset.comfortable` or `space.inset.spacious`
|
|
1029
|
+
- **Spacing**: `space.separated.normal` between containers
|
|
1030
|
+
- **Shadow**: `shadow.dusk` or `shadow.sunrise`
|
|
1031
|
+
- **Border radius**: `radius100` or `radius150`
|
|
1032
|
+
|
|
1033
|
+
---
|
|
1034
|
+
|
|
1035
|
+
## Blend Utility Integration
|
|
1036
|
+
|
|
1037
|
+
### Overview
|
|
1038
|
+
|
|
1039
|
+
Blend utilities enable components to create new opaque colors for interaction states (hover, pressed, focus, disabled) rather than using opacity-based workarounds. All components should use blend utilities for state color modifications.
|
|
1040
|
+
|
|
1041
|
+
### Why Blend Utilities Over CSS Filters
|
|
1042
|
+
|
|
1043
|
+
**CSS `filter: brightness()` has significant limitations** that make it unsuitable for production design systems:
|
|
1044
|
+
|
|
1045
|
+
1. **Affects entire element, not just target property**: CSS filters apply to the entire element including text, icons, borders, and shadows. When you want to darken only the background on hover, `filter: brightness(0.92)` also darkens the text and any icons, creating unintended visual effects.
|
|
1046
|
+
|
|
1047
|
+
2. **Not cross-platform consistent**: CSS filters are web-only. iOS and Android have different approaches to color manipulation, making it impossible to achieve visual consistency across platforms with filter-based solutions.
|
|
1048
|
+
|
|
1049
|
+
3. **Produces transparency artifacts**: Brightness filters can create unexpected transparency or color shifts, especially with semi-transparent elements or complex backgrounds.
|
|
1050
|
+
|
|
1051
|
+
4. **No design token integration**: Filter values like `brightness(0.92)` are arbitrary numbers that don't connect to the design token system. Blend utilities use semantic tokens (`blend.hoverDarker = 8%`) that can be updated system-wide.
|
|
1052
|
+
|
|
1053
|
+
5. **Accessibility concerns**: Filter-based color changes may not maintain WCAG contrast ratios predictably, while blend utilities calculate mathematically correct color values that preserve accessibility compliance.
|
|
1054
|
+
|
|
1055
|
+
**Blend utilities solve these problems by**:
|
|
1056
|
+
- Calculating new opaque colors that affect only the target property
|
|
1057
|
+
- Using the same mathematical formulas across web, iOS, and Android
|
|
1058
|
+
- Integrating with the design token system for consistent, maintainable values
|
|
1059
|
+
- Producing predictable, accessible color values
|
|
1060
|
+
|
|
1061
|
+
### Canonical Implementation Example
|
|
1062
|
+
|
|
1063
|
+
**Button-CTA** (`src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts`) serves as the canonical implementation example for blend utility integration. It demonstrates:
|
|
1064
|
+
|
|
1065
|
+
- Importing `getBlendUtilities()` from the theme-aware blend utilities module
|
|
1066
|
+
- Initializing blend utilities in the constructor
|
|
1067
|
+
- Calculating state colors (hover, pressed, disabled, icon) in `connectedCallback()`
|
|
1068
|
+
- Applying calculated colors via CSS custom properties
|
|
1069
|
+
- Retry pattern for handling CSS custom property timing
|
|
1070
|
+
|
|
1071
|
+
**Reference this implementation** when adding blend utilities to new components.
|
|
1072
|
+
|
|
1073
|
+
### When to Use Blend Utilities
|
|
1074
|
+
|
|
1075
|
+
**Use blend utilities for**:
|
|
1076
|
+
- Hover state colors (darken or lighten based on background)
|
|
1077
|
+
- Pressed state colors (stronger darkening than hover)
|
|
1078
|
+
- Focus state colors (increased saturation for emphasis)
|
|
1079
|
+
- Disabled state colors (desaturation for muted appearance)
|
|
1080
|
+
- Icon optical balance (lightening for visual weight compensation)
|
|
1081
|
+
|
|
1082
|
+
### Web Platform Usage
|
|
1083
|
+
|
|
1084
|
+
```typescript
|
|
1085
|
+
import { getBlendUtilities } from '@3fn/core/ThemeAwareBlendUtilities';
|
|
1086
|
+
|
|
1087
|
+
class MyComponent extends HTMLElement {
|
|
1088
|
+
connectedCallback() {
|
|
1089
|
+
// Read theme color from CSS custom properties
|
|
1090
|
+
const computedStyle = getComputedStyle(document.documentElement);
|
|
1091
|
+
const primaryColor = computedStyle.getPropertyValue('--color-primary').trim();
|
|
1092
|
+
|
|
1093
|
+
// Get blend utilities
|
|
1094
|
+
const blendUtils = getBlendUtilities();
|
|
1095
|
+
|
|
1096
|
+
// Calculate state colors
|
|
1097
|
+
this._hoverColor = blendUtils.hoverColor(primaryColor); // 8% darker
|
|
1098
|
+
this._pressedColor = blendUtils.pressedColor(primaryColor); // 12% darker
|
|
1099
|
+
this._disabledColor = blendUtils.disabledColor(primaryColor); // 12% desaturated
|
|
1100
|
+
this._focusColor = blendUtils.focusColor(primaryColor); // 8% more saturated
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
### iOS Platform Usage
|
|
1106
|
+
|
|
1107
|
+
```swift
|
|
1108
|
+
struct MyComponent: View {
|
|
1109
|
+
let primaryColor: Color
|
|
1110
|
+
|
|
1111
|
+
var body: some View {
|
|
1112
|
+
Button(action: {}) {
|
|
1113
|
+
Text(label)
|
|
1114
|
+
}
|
|
1115
|
+
.background(isPressed ? primaryColor.pressedBlend() :
|
|
1116
|
+
isHovered ? primaryColor.hoverBlend() :
|
|
1117
|
+
primaryColor)
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
```
|
|
1121
|
+
|
|
1122
|
+
### Android Platform Usage
|
|
1123
|
+
|
|
1124
|
+
```kotlin
|
|
1125
|
+
@Composable
|
|
1126
|
+
fun MyComponent(primaryColor: Color) {
|
|
1127
|
+
val interactionSource = remember { MutableInteractionSource() }
|
|
1128
|
+
val isPressed by interactionSource.collectIsPressedAsState()
|
|
1129
|
+
|
|
1130
|
+
Button(
|
|
1131
|
+
colors = ButtonDefaults.buttonColors(
|
|
1132
|
+
containerColor = if (isPressed) primaryColor.pressedBlend() else primaryColor
|
|
1133
|
+
)
|
|
1134
|
+
) {
|
|
1135
|
+
Text(label)
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
```
|
|
1139
|
+
|
|
1140
|
+
### Semantic Blend Token Reference
|
|
1141
|
+
|
|
1142
|
+
| State | Token | Function | Value |
|
|
1143
|
+
|-------|-------|----------|-------|
|
|
1144
|
+
| Hover (light bg) | `blend.hoverDarker` | `hoverColor()` | 8% darker |
|
|
1145
|
+
| Hover (dark bg) | `blend.hoverLighter` | `lighterBlend(color, 0.08)` | 8% lighter |
|
|
1146
|
+
| Pressed | `blend.pressedDarker` | `pressedColor()` | 12% darker |
|
|
1147
|
+
| Focus | `blend.focusSaturate` | `focusColor()` | 8% more saturated |
|
|
1148
|
+
| Disabled | `blend.disabledDesaturate` | `disabledColor()` | 12% desaturated |
|
|
1149
|
+
| Container hover | `blend.containerHoverDarker` | `darkerBlend(color, 0.04)` | 4% darker |
|
|
1150
|
+
| Icon optical | `color.icon.opticalBalance` | `iconColor()` | 8% lighter |
|
|
1151
|
+
|
|
1152
|
+
### Blend Utility Anti-Patterns
|
|
1153
|
+
|
|
1154
|
+
**❌ Don't use opacity for state colors**:
|
|
1155
|
+
```typescript
|
|
1156
|
+
// WRONG: Opacity creates transparency, not new colors
|
|
1157
|
+
const hoverStyle = { opacity: 0.92 };
|
|
1158
|
+
```
|
|
1159
|
+
|
|
1160
|
+
**❌ Don't use CSS filters for color modification**:
|
|
1161
|
+
```typescript
|
|
1162
|
+
// WRONG: Filters are not cross-platform consistent
|
|
1163
|
+
const iconStyle = { filter: 'brightness(1.08)' };
|
|
1164
|
+
```
|
|
1165
|
+
|
|
1166
|
+
**❌ Don't use platform-specific workarounds**:
|
|
1167
|
+
```swift
|
|
1168
|
+
// WRONG: iOS scaleEffect as pressed state workaround
|
|
1169
|
+
.scaleEffect(isPressed ? 0.96 : 1.0)
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
**✅ Do use blend utilities**:
|
|
1173
|
+
```typescript
|
|
1174
|
+
// CORRECT: Blend utilities produce consistent opaque colors
|
|
1175
|
+
const hoverColor = blendUtils.hoverColor(primaryColor);
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
### Related Documentation
|
|
1179
|
+
|
|
1180
|
+
- [Blend Tokens Guide](token-family-blend) - Complete blend token reference
|
|
1181
|
+
- [Blend Infrastructure Design](../specs/031-blend-infrastructure-implementation/design.md) - Architecture decisions
|
|
1182
|
+
|
|
1183
|
+
---
|
|
1184
|
+
|
|
1185
|
+
## Incremental DOM Update Pattern
|
|
1186
|
+
|
|
1187
|
+
### Overview
|
|
1188
|
+
|
|
1189
|
+
The incremental DOM update pattern enables CSS transitions to work correctly by preserving DOM element identity across attribute changes. Instead of replacing the entire shadow DOM on every update, components create the DOM structure once and then update existing elements directly.
|
|
1190
|
+
|
|
1191
|
+
### Why Incremental DOM Over Full Re-renders
|
|
1192
|
+
|
|
1193
|
+
**Full `innerHTML` replacement breaks CSS transitions** because:
|
|
1194
|
+
|
|
1195
|
+
1. **Element identity is lost**: When you replace `innerHTML`, the browser destroys existing DOM elements and creates new ones. CSS transitions require the same element to exist before and after a property change—new elements have no "before" state to transition from.
|
|
1196
|
+
|
|
1197
|
+
2. **Transition timing is reset**: Even if the new element has the same classes and styles, the browser treats it as a fresh element. Any in-progress transitions are cancelled, and new transitions start from scratch.
|
|
1198
|
+
|
|
1199
|
+
3. **Performance overhead**: Full DOM replacement is more expensive than targeted property updates. The browser must parse HTML, create elements, attach event listeners, and recalculate styles for the entire subtree.
|
|
1200
|
+
|
|
1201
|
+
4. **Event listener management**: Full replacement requires detaching and reattaching event listeners on every update, which is error-prone and inefficient.
|
|
1202
|
+
|
|
1203
|
+
**Incremental DOM solves these problems by**:
|
|
1204
|
+
- Creating DOM elements once and caching references
|
|
1205
|
+
- Updating only the properties that changed via direct DOM APIs
|
|
1206
|
+
- Preserving element identity so CSS transitions animate smoothly
|
|
1207
|
+
- Reducing DOM manipulation overhead
|
|
1208
|
+
|
|
1209
|
+
### Canonical Implementation Example
|
|
1210
|
+
|
|
1211
|
+
**Button-VerticalList-Item** (`src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts`) serves as the canonical implementation example for the incremental DOM pattern. It demonstrates:
|
|
1212
|
+
|
|
1213
|
+
- `_domCreated` flag to track initial render state
|
|
1214
|
+
- `_createDOM()` method for one-time DOM structure creation
|
|
1215
|
+
- `_updateDOM()` method for targeted property updates
|
|
1216
|
+
- Cached element references (`_button`, `_labelEl`, `_iconEl`, etc.)
|
|
1217
|
+
- CSS custom property updates via `element.style.setProperty()`
|
|
1218
|
+
- Direct DOM API usage (`element.textContent`, `element.className`)
|
|
1219
|
+
|
|
1220
|
+
**Reference this implementation** when adding incremental DOM updates to new components.
|
|
1221
|
+
|
|
1222
|
+
### Architecture Pattern
|
|
1223
|
+
|
|
1224
|
+
```typescript
|
|
1225
|
+
class MyComponent extends HTMLElement {
|
|
1226
|
+
private _shadowRoot: ShadowRoot;
|
|
1227
|
+
private _domCreated: boolean = false;
|
|
1228
|
+
|
|
1229
|
+
// Cached DOM element references
|
|
1230
|
+
private _button: HTMLButtonElement | null = null;
|
|
1231
|
+
private _labelEl: HTMLSpanElement | null = null;
|
|
1232
|
+
private _iconEl: HTMLElement | null = null;
|
|
1233
|
+
|
|
1234
|
+
constructor() {
|
|
1235
|
+
super();
|
|
1236
|
+
this._shadowRoot = this.attachShadow({ mode: 'open' });
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
connectedCallback(): void {
|
|
1240
|
+
this._render();
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {
|
|
1244
|
+
// Only update if connected, value changed, and DOM exists
|
|
1245
|
+
if (oldValue !== newValue && this.isConnected && this._domCreated) {
|
|
1246
|
+
this._updateDOM();
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
/**
|
|
1251
|
+
* Main render entry point.
|
|
1252
|
+
* Routes to _createDOM() for first render or _updateDOM() for subsequent updates.
|
|
1253
|
+
*/
|
|
1254
|
+
private _render(): void {
|
|
1255
|
+
if (!this._domCreated) {
|
|
1256
|
+
this._createDOM();
|
|
1257
|
+
this._domCreated = true;
|
|
1258
|
+
} else {
|
|
1259
|
+
this._updateDOM();
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
/**
|
|
1264
|
+
* Create the initial DOM structure (called once).
|
|
1265
|
+
* Creates all elements including containers that may be hidden.
|
|
1266
|
+
*/
|
|
1267
|
+
private _createDOM(): void {
|
|
1268
|
+
this._shadowRoot.innerHTML = `
|
|
1269
|
+
<style>${styles}</style>
|
|
1270
|
+
<button class="my-component">
|
|
1271
|
+
<span class="my-component__icon"></span>
|
|
1272
|
+
<span class="my-component__label"></span>
|
|
1273
|
+
</button>
|
|
1274
|
+
`;
|
|
1275
|
+
|
|
1276
|
+
// Cache element references for incremental updates
|
|
1277
|
+
this._button = this._shadowRoot.querySelector('button');
|
|
1278
|
+
this._labelEl = this._shadowRoot.querySelector('.my-component__label');
|
|
1279
|
+
this._iconEl = this._shadowRoot.querySelector('.my-component__icon');
|
|
1280
|
+
|
|
1281
|
+
// Apply initial state
|
|
1282
|
+
this._updateDOM();
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
/**
|
|
1286
|
+
* Update existing DOM elements (called on attribute changes).
|
|
1287
|
+
* Only updates properties that need to change, preserving element identity.
|
|
1288
|
+
*/
|
|
1289
|
+
private _updateDOM(): void {
|
|
1290
|
+
if (!this._button || !this._labelEl) return;
|
|
1291
|
+
|
|
1292
|
+
// Direct DOM updates (preserves element identity for CSS transitions)
|
|
1293
|
+
this._labelEl.textContent = this.label;
|
|
1294
|
+
this._button.className = `my-component ${this._getStateClass()}`;
|
|
1295
|
+
|
|
1296
|
+
// CSS custom property updates for dynamic styling
|
|
1297
|
+
this._button.style.setProperty('--_mc-hover-bg', this._hoverColor);
|
|
1298
|
+
this._button.style.setProperty('--_mc-pressed-bg', this._pressedColor);
|
|
1299
|
+
|
|
1300
|
+
// Show/hide elements via display property
|
|
1301
|
+
if (this._iconEl) {
|
|
1302
|
+
this._iconEl.style.display = this.icon ? '' : 'none';
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
```
|
|
1307
|
+
|
|
1308
|
+
### Key Implementation Details
|
|
1309
|
+
|
|
1310
|
+
#### 1. DOM Creation Flag
|
|
1311
|
+
|
|
1312
|
+
```typescript
|
|
1313
|
+
private _domCreated: boolean = false;
|
|
1314
|
+
```
|
|
1315
|
+
|
|
1316
|
+
This flag ensures `_createDOM()` runs exactly once. All subsequent renders route through `_updateDOM()`.
|
|
1317
|
+
|
|
1318
|
+
#### 2. Element Reference Caching
|
|
1319
|
+
|
|
1320
|
+
```typescript
|
|
1321
|
+
// Cache references after DOM creation
|
|
1322
|
+
this._button = this._shadowRoot.querySelector('button');
|
|
1323
|
+
this._labelEl = this._shadowRoot.querySelector('.my-component__label');
|
|
1324
|
+
```
|
|
1325
|
+
|
|
1326
|
+
Caching element references avoids repeated `querySelector` calls and provides type-safe access to DOM elements.
|
|
1327
|
+
|
|
1328
|
+
#### 3. Conditional Updates in attributeChangedCallback
|
|
1329
|
+
|
|
1330
|
+
```typescript
|
|
1331
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {
|
|
1332
|
+
if (oldValue !== newValue && this.isConnected && this._domCreated) {
|
|
1333
|
+
this._updateDOM();
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
```
|
|
1337
|
+
|
|
1338
|
+
Only call `_updateDOM()` when:
|
|
1339
|
+
- The value actually changed (`oldValue !== newValue`)
|
|
1340
|
+
- The element is connected to the DOM (`this.isConnected`)
|
|
1341
|
+
- The DOM has been created (`this._domCreated`)
|
|
1342
|
+
|
|
1343
|
+
#### 4. CSS Custom Property Updates
|
|
1344
|
+
|
|
1345
|
+
```typescript
|
|
1346
|
+
this._button.style.setProperty('--_mc-hover-bg', this._hoverColor);
|
|
1347
|
+
```
|
|
1348
|
+
|
|
1349
|
+
Use `style.setProperty()` for CSS custom properties. This enables CSS transitions on properties driven by JavaScript-calculated values (like blend colors).
|
|
1350
|
+
|
|
1351
|
+
#### 5. Show/Hide via Display Property
|
|
1352
|
+
|
|
1353
|
+
```typescript
|
|
1354
|
+
this._iconEl.style.display = this.icon ? '' : 'none';
|
|
1355
|
+
```
|
|
1356
|
+
|
|
1357
|
+
Toggle visibility using `display` property rather than removing/adding elements. This preserves element identity and enables fade transitions.
|
|
1358
|
+
|
|
1359
|
+
### When to Use Incremental DOM
|
|
1360
|
+
|
|
1361
|
+
**Use incremental DOM when**:
|
|
1362
|
+
- Component has CSS transitions on any property
|
|
1363
|
+
- Component updates frequently (e.g., on user interaction)
|
|
1364
|
+
- Component has complex DOM structure with many elements
|
|
1365
|
+
- Component uses blend utilities (calculated colors need to update smoothly)
|
|
1366
|
+
|
|
1367
|
+
**All interactive components should use incremental DOM** to ensure CSS transitions work correctly.
|
|
1368
|
+
|
|
1369
|
+
### Incremental DOM Anti-Patterns
|
|
1370
|
+
|
|
1371
|
+
**❌ Don't replace innerHTML on attribute changes**:
|
|
1372
|
+
```typescript
|
|
1373
|
+
// WRONG: Breaks CSS transitions
|
|
1374
|
+
attributeChangedCallback() {
|
|
1375
|
+
this._shadowRoot.innerHTML = this._generateHTML();
|
|
1376
|
+
}
|
|
1377
|
+
```
|
|
1378
|
+
|
|
1379
|
+
**❌ Don't query elements on every update**:
|
|
1380
|
+
```typescript
|
|
1381
|
+
// WRONG: Inefficient and error-prone
|
|
1382
|
+
private _updateDOM(): void {
|
|
1383
|
+
const button = this._shadowRoot.querySelector('button');
|
|
1384
|
+
const label = this._shadowRoot.querySelector('.label');
|
|
1385
|
+
// ...
|
|
1386
|
+
}
|
|
1387
|
+
```
|
|
1388
|
+
|
|
1389
|
+
**❌ Don't remove and recreate elements for visibility**:
|
|
1390
|
+
```typescript
|
|
1391
|
+
// WRONG: Loses element identity
|
|
1392
|
+
if (showIcon) {
|
|
1393
|
+
this._button.appendChild(this._createIcon());
|
|
1394
|
+
} else {
|
|
1395
|
+
this._iconEl?.remove();
|
|
1396
|
+
}
|
|
1397
|
+
```
|
|
1398
|
+
|
|
1399
|
+
**✅ Do cache element references**:
|
|
1400
|
+
```typescript
|
|
1401
|
+
// CORRECT: Cache once, reuse always
|
|
1402
|
+
private _createDOM(): void {
|
|
1403
|
+
// ...
|
|
1404
|
+
this._button = this._shadowRoot.querySelector('button');
|
|
1405
|
+
this._labelEl = this._shadowRoot.querySelector('.label');
|
|
1406
|
+
}
|
|
1407
|
+
```
|
|
1408
|
+
|
|
1409
|
+
**✅ Do use display property for visibility**:
|
|
1410
|
+
```typescript
|
|
1411
|
+
// CORRECT: Preserves element identity
|
|
1412
|
+
this._iconEl.style.display = showIcon ? '' : 'none';
|
|
1413
|
+
```
|
|
1414
|
+
|
|
1415
|
+
### Related Documentation
|
|
1416
|
+
|
|
1417
|
+
- [Button-VerticalList-Item Implementation](../src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts) - Canonical example
|
|
1418
|
+
- [Blend Utility Integration](#blend-utility-integration) - State color calculation (often used with incremental DOM)
|
|
1419
|
+
|
|
1420
|
+
---
|
|
1421
|
+
|
|
1422
|
+
## CSS Custom Property Naming Convention
|
|
1423
|
+
|
|
1424
|
+
### Overview
|
|
1425
|
+
|
|
1426
|
+
CSS custom properties in components fall into two distinct categories that require different naming conventions to clearly communicate their purpose and scope:
|
|
1427
|
+
|
|
1428
|
+
1. **Design system tokens**: Shared across all components, part of the public API
|
|
1429
|
+
2. **Component-scoped properties**: Internal to one component, calculated values or local overrides
|
|
1430
|
+
|
|
1431
|
+
Without a clear naming convention, it's difficult to distinguish at a glance whether a property is safe to override externally (design token) or an internal implementation detail (component-scoped).
|
|
1432
|
+
|
|
1433
|
+
### The `--_[abbrev]-*` Pattern
|
|
1434
|
+
|
|
1435
|
+
All component-scoped CSS custom properties MUST use the `--_[abbrev]-*` naming pattern:
|
|
1436
|
+
|
|
1437
|
+
```css
|
|
1438
|
+
/* Component-scoped (internal) - use underscore prefix */
|
|
1439
|
+
--_cta-hover-bg: #...; /* Button-CTA internal */
|
|
1440
|
+
--_vlbi-background: #...; /* Button-VerticalList-Item internal */
|
|
1441
|
+
--_itb-focus-color: #...; /* Input-Text-Base internal */
|
|
1442
|
+
--_bi-icon-color: #...; /* ButtonIcon internal */
|
|
1443
|
+
|
|
1444
|
+
/* Design system tokens (external) - no underscore */
|
|
1445
|
+
--color-primary: #...;
|
|
1446
|
+
--motion-button-press-duration: 150ms;
|
|
1447
|
+
--space-inset-200: 16px;
|
|
1448
|
+
```
|
|
1449
|
+
|
|
1450
|
+
### Why This Pattern
|
|
1451
|
+
|
|
1452
|
+
1. **Underscore signals "private"**: Borrowed from programming conventions (Python, JavaScript), the leading underscore indicates "internal implementation detail, don't depend on this externally"
|
|
1453
|
+
|
|
1454
|
+
2. **Abbreviation keeps names readable**: Component names can be long; abbreviations keep CSS scannable while maintaining clarity
|
|
1455
|
+
|
|
1456
|
+
3. **Clear visual distinction**: Easy to scan CSS and immediately identify which properties are component-internal vs design system tokens
|
|
1457
|
+
|
|
1458
|
+
4. **Prevents external dependencies**: External code should never depend on component-scoped properties—they may change without notice
|
|
1459
|
+
|
|
1460
|
+
### Component Abbreviation Reference
|
|
1461
|
+
|
|
1462
|
+
| Component | Abbreviation | Example Properties |
|
|
1463
|
+
|-----------|--------------|-------------------|
|
|
1464
|
+
| Button-CTA | `_cta` | `--_cta-hover-bg`, `--_cta-pressed-bg` |
|
|
1465
|
+
| Button-VerticalList-Item | `_vlbi` | `--_vlbi-background`, `--_vlbi-border-color` |
|
|
1466
|
+
| ButtonIcon | `_bi` | `--_bi-hover-bg`, `--_bi-icon-color` |
|
|
1467
|
+
| Input-Text-Base | `_itb` | `--_itb-focus-color`, `--_itb-disabled-color` |
|
|
1468
|
+
|
|
1469
|
+
### When to Use Each Type
|
|
1470
|
+
|
|
1471
|
+
**Use design system tokens (`--token-name`) when**:
|
|
1472
|
+
- The value comes from the token system (colors, spacing, typography)
|
|
1473
|
+
- The property should be themeable or overridable
|
|
1474
|
+
- The value is shared across multiple components
|
|
1475
|
+
- External consumers might need to reference the value
|
|
1476
|
+
|
|
1477
|
+
**Use component-scoped properties (`--_abbrev-name`) when**:
|
|
1478
|
+
- The value is calculated at runtime (blend colors, dynamic sizing)
|
|
1479
|
+
- The property is an internal implementation detail
|
|
1480
|
+
- The value is specific to one component's internal logic
|
|
1481
|
+
- External code should NOT depend on or override the value
|
|
1482
|
+
|
|
1483
|
+
### Implementation Example
|
|
1484
|
+
|
|
1485
|
+
```css
|
|
1486
|
+
/* Button-CTA CSS showing both types */
|
|
1487
|
+
:host {
|
|
1488
|
+
/* Design system tokens - external, themeable */
|
|
1489
|
+
--color-primary: var(--color-primary);
|
|
1490
|
+
--motion-button-press-duration: var(--motion-button-press-duration);
|
|
1491
|
+
|
|
1492
|
+
/* Component-scoped properties - internal, calculated */
|
|
1493
|
+
--_cta-hover-bg: /* calculated by blend utilities */;
|
|
1494
|
+
--_cta-pressed-bg: /* calculated by blend utilities */;
|
|
1495
|
+
--_cta-disabled-bg: /* calculated by blend utilities */;
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
.button-cta {
|
|
1499
|
+
background-color: var(--color-primary);
|
|
1500
|
+
transition: background-color var(--motion-button-press-duration) ease-out;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
.button-cta:hover {
|
|
1504
|
+
background-color: var(--_cta-hover-bg);
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
.button-cta:active {
|
|
1508
|
+
background-color: var(--_cta-pressed-bg);
|
|
1509
|
+
}
|
|
1510
|
+
```
|
|
1511
|
+
|
|
1512
|
+
### CSS Custom Property Naming Anti-Patterns
|
|
1513
|
+
|
|
1514
|
+
**❌ Don't use full component names for internal properties**:
|
|
1515
|
+
```css
|
|
1516
|
+
/* WRONG: Too verbose, hard to scan */
|
|
1517
|
+
--button-vertical-list-item-hover-background: #...;
|
|
1518
|
+
|
|
1519
|
+
/* CORRECT: Use abbreviation */
|
|
1520
|
+
--_vlbi-hover-bg: #...;
|
|
1521
|
+
```
|
|
1522
|
+
|
|
1523
|
+
**❌ Don't omit underscore for internal properties**:
|
|
1524
|
+
```css
|
|
1525
|
+
/* WRONG: Looks like a design token, may be overridden externally */
|
|
1526
|
+
--cta-hover-bg: #...;
|
|
1527
|
+
|
|
1528
|
+
/* CORRECT: Underscore signals internal */
|
|
1529
|
+
--_cta-hover-bg: #...;
|
|
1530
|
+
```
|
|
1531
|
+
|
|
1532
|
+
**❌ Don't use component-scoped naming for design tokens**:
|
|
1533
|
+
```css
|
|
1534
|
+
/* WRONG: Design tokens shouldn't have component prefix */
|
|
1535
|
+
--_cta-primary-color: var(--color-primary);
|
|
1536
|
+
|
|
1537
|
+
/* CORRECT: Reference design token directly */
|
|
1538
|
+
background-color: var(--color-primary);
|
|
1539
|
+
```
|
|
1540
|
+
|
|
1541
|
+
**❌ Don't expose calculated values as design tokens**:
|
|
1542
|
+
```css
|
|
1543
|
+
/* WRONG: Calculated values are implementation details */
|
|
1544
|
+
--color-primary-hover: /* blend calculation */;
|
|
1545
|
+
|
|
1546
|
+
/* CORRECT: Keep calculated values component-scoped */
|
|
1547
|
+
--_cta-hover-bg: /* blend calculation */;
|
|
1548
|
+
```
|
|
1549
|
+
|
|
1550
|
+
### Documentation in CSS Files
|
|
1551
|
+
|
|
1552
|
+
When using component-scoped properties, add a documentation comment explaining the naming convention:
|
|
1553
|
+
|
|
1554
|
+
```css
|
|
1555
|
+
/**
|
|
1556
|
+
* Component-scoped CSS custom properties
|
|
1557
|
+
*
|
|
1558
|
+
* These properties are internal implementation details:
|
|
1559
|
+
* - --_vlbi-background: Current background color for visual state
|
|
1560
|
+
* - --_vlbi-border-color: Current border color for visual state
|
|
1561
|
+
* - --_vlbi-icon-color: Icon color for current visual state
|
|
1562
|
+
*
|
|
1563
|
+
* Naming Convention: --_[abbrev]-* pattern signals component-scoped (internal) properties
|
|
1564
|
+
* @see Component Development Guide - CSS Custom Property Naming Convention
|
|
1565
|
+
*/
|
|
1566
|
+
```
|
|
1567
|
+
|
|
1568
|
+
### Related Documentation
|
|
1569
|
+
|
|
1570
|
+
- [Blend Utility Integration](#blend-utility-integration) - Calculated colors use component-scoped properties
|
|
1571
|
+
- [Incremental DOM Update Pattern](#incremental-dom-update-pattern) - CSS custom properties enable smooth transitions
|
|
1572
|
+
|
|
1573
|
+
---
|
|
1574
|
+
|
|
1575
|
+
## Anti-Patterns to Avoid
|
|
1576
|
+
|
|
1577
|
+
**Note**: This section intentionally uses the same heading as other steering documents because each document addresses anti-patterns specific to its domain. Component Development and Practices Guide focuses on token usage anti-patterns, while other documents cover their respective domains.
|
|
1578
|
+
|
|
1579
|
+
### ❌ Using Primitives When Semantics Exist
|
|
1580
|
+
```typescript
|
|
1581
|
+
// DON'T
|
|
1582
|
+
background: blue500
|
|
1583
|
+
|
|
1584
|
+
// DO
|
|
1585
|
+
background: color.primary
|
|
1586
|
+
```
|
|
1587
|
+
|
|
1588
|
+
### ❌ Hard-Coded Values
|
|
1589
|
+
```typescript
|
|
1590
|
+
// DON'T
|
|
1591
|
+
padding: 16px
|
|
1592
|
+
|
|
1593
|
+
// DO
|
|
1594
|
+
padding: space.inset.normal
|
|
1595
|
+
```
|
|
1596
|
+
|
|
1597
|
+
### ❌ Creating Semantic Tokens Prematurely
|
|
1598
|
+
```typescript
|
|
1599
|
+
// DON'T: Create semantic token for single component
|
|
1600
|
+
export const buttonWidthMin = space400;
|
|
1601
|
+
|
|
1602
|
+
// DO: Use component-level tokens, elevate when pattern emerges (3+ components)
|
|
1603
|
+
```
|
|
1604
|
+
|
|
1605
|
+
### ❌ Skipping Token Files
|
|
1606
|
+
```typescript
|
|
1607
|
+
// DON'T: Guess what tokens exist
|
|
1608
|
+
|
|
1609
|
+
// DO: Read semantic token files to discover available tokens
|
|
1610
|
+
```
|
|
1611
|
+
|
|
1612
|
+
### ❌ Platform-Specific Values in tokens.ts
|
|
1613
|
+
```typescript
|
|
1614
|
+
// DON'T: Put platform-specific values in tokens.ts
|
|
1615
|
+
export const buttonTokens = {
|
|
1616
|
+
paddingX: '8px', // Platform-specific CSS value
|
|
1617
|
+
paddingY: 4 // Hard-coded number
|
|
1618
|
+
};
|
|
1619
|
+
|
|
1620
|
+
// DO: Reference semantic or primitive tokens
|
|
1621
|
+
export const buttonTokens = {
|
|
1622
|
+
paddingX: 'space.inset.normal', // Token reference
|
|
1623
|
+
paddingY: 'space.inset.tight' // Token reference
|
|
1624
|
+
};
|
|
1625
|
+
```
|
|
1626
|
+
|
|
1627
|
+
### ❌ Using `style` Attribute for Variants
|
|
1628
|
+
```html
|
|
1629
|
+
<!-- DON'T: Use style attribute for component variants -->
|
|
1630
|
+
<button-cta style="primary" label="Submit"></button-cta>
|
|
1631
|
+
|
|
1632
|
+
<!-- DO: Use variant attribute -->
|
|
1633
|
+
<button-cta variant="primary" label="Submit"></button-cta>
|
|
1634
|
+
```
|
|
1635
|
+
|
|
1636
|
+
```typescript
|
|
1637
|
+
// DON'T: Use style property in TypeScript interfaces
|
|
1638
|
+
export interface ButtonProps {
|
|
1639
|
+
style?: 'primary' | 'secondary'; // Conflicts with HTML style attribute
|
|
1640
|
+
}
|
|
1641
|
+
|
|
1642
|
+
// DO: Use variant property
|
|
1643
|
+
export interface ButtonProps {
|
|
1644
|
+
variant?: 'primary' | 'secondary'; // Clear, unambiguous
|
|
1645
|
+
}
|
|
1646
|
+
```
|
|
1647
|
+
|
|
1648
|
+
### ❌ Nested Containers with Same Border Radius
|
|
1649
|
+
|
|
1650
|
+
```html
|
|
1651
|
+
<!-- DON'T: Same radius creates awkward visual overlap -->
|
|
1652
|
+
<container-base borderRadius="normal" padding="200">
|
|
1653
|
+
<container-base borderRadius="normal">
|
|
1654
|
+
Awkward corner overlap
|
|
1655
|
+
</container-base>
|
|
1656
|
+
</container-base>
|
|
1657
|
+
|
|
1658
|
+
<!-- DO: Reduce inner radius by padding amount -->
|
|
1659
|
+
<container-base borderRadius="normal" padding="200">
|
|
1660
|
+
<container-base borderRadius="none">
|
|
1661
|
+
Harmonious corner alignment
|
|
1662
|
+
</container-base>
|
|
1663
|
+
</container-base>
|
|
1664
|
+
```
|
|
1665
|
+
|
|
1666
|
+
**Mathematical relationship**: `inner borderRadius = outer borderRadius - padding`
|
|
1667
|
+
|
|
1668
|
+
**Why this matters**: Padding creates visual space between containers. Reducing the inner radius maintains consistent visual curvature and prevents awkward overlapping corners.
|
|
1669
|
+
|
|
1670
|
+
**For detailed guidance**: See Container component README "Nested Containers" section for visual examples, token value reference table, platform-specific considerations, and common use cases.
|
|
1671
|
+
|
|
1672
|
+
### ❌ Hard-Coded Fallback Values
|
|
1673
|
+
|
|
1674
|
+
**Problem**: Using fallback values masks token system issues and prevents early detection of problems.
|
|
1675
|
+
|
|
1676
|
+
**Anti-Pattern Examples**:
|
|
1677
|
+
|
|
1678
|
+
```typescript
|
|
1679
|
+
// DON'T: Silent fallback to hard-coded value
|
|
1680
|
+
const duration = this.getAttribute('duration') || '250ms';
|
|
1681
|
+
const spacing = tokenValue || 8;
|
|
1682
|
+
const color = getToken('color.primary') ?? '#3B82F6';
|
|
1683
|
+
```
|
|
1684
|
+
|
|
1685
|
+
**Why This is Wrong**:
|
|
1686
|
+
- Masks missing tokens - component appears to work but token system is broken
|
|
1687
|
+
- Prevents early detection - issues discovered in production instead of development
|
|
1688
|
+
- Inconsistent behavior - some components use tokens, others use fallbacks
|
|
1689
|
+
- Maintenance burden - fallback values can drift from token values
|
|
1690
|
+
|
|
1691
|
+
**Correct Approach**:
|
|
1692
|
+
|
|
1693
|
+
```typescript
|
|
1694
|
+
// DO: Fail loudly when token is missing
|
|
1695
|
+
const duration = this.getAttribute('duration');
|
|
1696
|
+
if (!duration) {
|
|
1697
|
+
throw new Error('Component: duration attribute is required');
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
// Or for non-critical values
|
|
1701
|
+
const spacing = tokenValue;
|
|
1702
|
+
if (!spacing) {
|
|
1703
|
+
console.error('Component: spacing token missing, layout may be incorrect');
|
|
1704
|
+
}
|
|
1705
|
+
```
|
|
1706
|
+
|
|
1707
|
+
**When Fallback is Genuinely Optional**:
|
|
1708
|
+
|
|
1709
|
+
```typescript
|
|
1710
|
+
// DO: Explicit optional handling with documentation
|
|
1711
|
+
/**
|
|
1712
|
+
* Helper text (optional)
|
|
1713
|
+
* Provides additional context below the input
|
|
1714
|
+
*/
|
|
1715
|
+
const helperText = this.getAttribute('helper-text') || undefined;
|
|
1716
|
+
if (helperText !== undefined) {
|
|
1717
|
+
// Render helper text
|
|
1718
|
+
}
|
|
1719
|
+
```
|
|
1720
|
+
|
|
1721
|
+
**Benefits of Failing Loudly**:
|
|
1722
|
+
- ✅ Immediate detection of token system issues
|
|
1723
|
+
- ✅ Clear error messages guide developers to fix
|
|
1724
|
+
- ✅ Prevents silent failures in production
|
|
1725
|
+
- ✅ Maintains token system integrity
|
|
1726
|
+
|
|
1727
|
+
---
|
|
1728
|
+
|
|
1729
|
+
## Validation Checklist
|
|
1730
|
+
|
|
1731
|
+
Before implementing a component, verify:
|
|
1732
|
+
|
|
1733
|
+
- [ ] Read semantic token files to discover available tokens
|
|
1734
|
+
- [ ] Used semantic tokens for all styling (color, typography, spacing)
|
|
1735
|
+
- [ ] Created component-level tokens only when variants needed
|
|
1736
|
+
- [ ] Component tokens reference semantic or primitive tokens (no hard-coded values)
|
|
1737
|
+
- [ ] Component tokens.ts is platform-agnostic (token references, not values)
|
|
1738
|
+
- [ ] Platform implementations use generated platform-specific tokens
|
|
1739
|
+
- [ ] Platform implementations handle platform-specific nuances
|
|
1740
|
+
- [ ] Followed True Native Architecture (separate files per platform)
|
|
1741
|
+
- [ ] Used system-specific terminology (Container not Card)
|
|
1742
|
+
- [ ] Used `variant` attribute for component variations (not `style`)
|
|
1743
|
+
- [ ] Documented any primitive token usage with rationale
|
|
1744
|
+
|
|
1745
|
+
---
|
|
1746
|
+
|
|
1747
|
+
## Demo Maintenance Checklist
|
|
1748
|
+
|
|
1749
|
+
When modifying a component's API, adding new variants, or changing behavior, update the corresponding demo page to keep it in sync. Demos load components via the browser bundle, so API changes that break a demo are immediately visible when loading the page — but new features won't appear unless the demo is updated.
|
|
1750
|
+
|
|
1751
|
+
### When to Update Demos
|
|
1752
|
+
|
|
1753
|
+
- Component API changes (new props, renamed attributes, removed features)
|
|
1754
|
+
- New variants or sizes added
|
|
1755
|
+
- New states added (e.g., loading, error)
|
|
1756
|
+
- Event handling changes (new events, changed event detail shape)
|
|
1757
|
+
- Accessibility improvements (new ARIA attributes, keyboard interactions)
|
|
1758
|
+
- Visual changes that affect how the component renders
|
|
1759
|
+
|
|
1760
|
+
### Component Change Checklist
|
|
1761
|
+
|
|
1762
|
+
When making changes to a component with a web implementation:
|
|
1763
|
+
|
|
1764
|
+
- [ ] Update component README with new API
|
|
1765
|
+
- [ ] Update component demo page (if demo exists in `demos/`)
|
|
1766
|
+
- [ ] Run demo locally to verify all examples still work
|
|
1767
|
+
- [ ] Update `demos/index.html` if component description changed
|
|
1768
|
+
|
|
1769
|
+
### How to Verify Demo Health
|
|
1770
|
+
|
|
1771
|
+
1. Build the browser distribution: `npm run build`
|
|
1772
|
+
2. Start a local server: `npx http-server dist/browser -p 8080`
|
|
1773
|
+
3. Open the demo page in a browser
|
|
1774
|
+
4. Verify all variant examples render correctly
|
|
1775
|
+
5. Verify interactive examples respond to user input
|
|
1776
|
+
6. Verify token verification section shows expected values
|
|
1777
|
+
7. Check browser console for errors or warnings
|
|
1778
|
+
|
|
1779
|
+
### Demo Location
|
|
1780
|
+
|
|
1781
|
+
All demo source files live in `demos/` at the project root. The build process copies them to `dist/browser/`. See `demos/README.md` for full guidelines on creating and maintaining demo pages.
|
|
1782
|
+
|
|
1783
|
+
---
|
|
1784
|
+
|
|
1785
|
+
## Component Spec Development Workflow
|
|
1786
|
+
|
|
1787
|
+
Components come with their own unique properties that might include, but are not limited to, multiple variants, states, or platform considerations. Use this workflow to create clearer, more precise specifications to fully understand their complexity.
|
|
1788
|
+
|
|
1789
|
+
### Design Outline Before Requirements
|
|
1790
|
+
|
|
1791
|
+
**When to use**: All components benefit from upfront exploration to understand their extensibility to support planned use cases. Identifying aspects such as sizing variants, interaction states, token dependencies, platform-specific considerations, and more are critical to creating sustainable, appropiately scaled components.
|
|
1792
|
+
|
|
1793
|
+
**Purpose**: Explore component design space before committing to formal requirements. Captures decision-making process, token needs, and open questions in an informal document.
|
|
1794
|
+
|
|
1795
|
+
**What to include**:
|
|
1796
|
+
- Component overview and variant specifications (tables work well)
|
|
1797
|
+
- Token requirements (existing tokens used + new tokens needed)
|
|
1798
|
+
- Design decisions with rationale and alternatives considered
|
|
1799
|
+
- Open questions and checkpoints for resolution
|
|
1800
|
+
- Observations and learnings for future reference
|
|
1801
|
+
|
|
1802
|
+
**What NOT to include**:
|
|
1803
|
+
- Full EARS requirements (save for requirements.md)
|
|
1804
|
+
- Implementation details (save for design.md)
|
|
1805
|
+
- Task breakdowns (save for tasks.md)
|
|
1806
|
+
|
|
1807
|
+
**Key principle**: This is a thinking document, not a template to copy-paste. Use it to explore and document your design reasoning.
|
|
1808
|
+
|
|
1809
|
+
**Reference example**: `.kiro/specs/005-cta-button-component/design-outline.md` - Shows informal exploration of button sizing, token usage, and design decisions before creating formal spec.
|
|
1810
|
+
|
|
1811
|
+
### README-First Documentation
|
|
1812
|
+
|
|
1813
|
+
**Purpose**: Create living documentation that serves as both component guide and validation target. Documentation that can't drift from implementation.
|
|
1814
|
+
|
|
1815
|
+
**Required sections**:
|
|
1816
|
+
- Overview (what it is, key features)
|
|
1817
|
+
- Related Documentation (cross-links to spec docs, related components)
|
|
1818
|
+
- Usage (code examples showing variants and states)
|
|
1819
|
+
- API Reference (props table with types)
|
|
1820
|
+
- Token Consumption (which tokens the component uses)
|
|
1821
|
+
- Accessibility (WCAG compliance notes)
|
|
1822
|
+
- Platform-Specific Notes (if applicable)
|
|
1823
|
+
- Validation (link to validation files with disclaimer)
|
|
1824
|
+
|
|
1825
|
+
**Cross-reference pattern**:
|
|
1826
|
+
- Link to spec documents (requirements.md, design.md)
|
|
1827
|
+
- Link to related components (dependencies)
|
|
1828
|
+
- Link to validation files with clear disclaimer
|
|
1829
|
+
|
|
1830
|
+
**Validation file disclaimer**: Always note that validation files are automated tests, not documentation source of truth.
|
|
1831
|
+
|
|
1832
|
+
**Reference example**: `src/components/core/ButtonCTA/README.md` - Shows comprehensive component documentation with cross-links and validation disclaimer.
|
|
1833
|
+
|
|
1834
|
+
### HTML Canary Validation
|
|
1835
|
+
|
|
1836
|
+
**Purpose**: Create living examples that validate component behavior and accuracy of the README documentation. Examples that must stay functional as component evolves.
|
|
1837
|
+
|
|
1838
|
+
**Required elements**:
|
|
1839
|
+
- Warning comment at top: `<!-- VALIDATION FILE - NOT DOCUMENTATION -->`
|
|
1840
|
+
- Purpose comment explaining what's being validated
|
|
1841
|
+
- Actual component usage (not mock HTML)
|
|
1842
|
+
- Can be run as automated tests via validation script
|
|
1843
|
+
- Must remain functional (breaking changes break validation)
|
|
1844
|
+
|
|
1845
|
+
**Key principle**: These are executable tests that validate the component's implementation and documentation are actually working and in alignemnt.
|
|
1846
|
+
|
|
1847
|
+
**Validation script pattern**: Create `scripts/validate-examples.js` to check:
|
|
1848
|
+
- Presence of component elements
|
|
1849
|
+
- Required attributes
|
|
1850
|
+
- Valid attribute values
|
|
1851
|
+
- Proper HTML structure
|
|
1852
|
+
- Warning comments present
|
|
1853
|
+
|
|
1854
|
+
**Reference examples**:
|
|
1855
|
+
- `src/components/core/ButtonCTA/examples/BasicUsage.html` - Validates basic button functionality
|
|
1856
|
+
- `src/components/core/ButtonCTA/examples/WithIcon.html` - Validates icon integration
|
|
1857
|
+
- `src/components/core/ButtonCTA/examples/Variants.html` - Validates all size/style combinations
|
|
1858
|
+
- `scripts/validate-examples.js` - Validation script that checks HTML examples
|
|
1859
|
+
|
|
1860
|
+
### Workflow Summary
|
|
1861
|
+
|
|
1862
|
+
1. **Design Outline** (required) - Explore design space informally
|
|
1863
|
+
2. **Requirements** (required) - Formalize requirements using EARS format
|
|
1864
|
+
3. **Design** (required) - Document architecture and token integration
|
|
1865
|
+
4. **Tasks** (required) - Break down implementation steps
|
|
1866
|
+
5. **README** (required) - Create comprehensive component documentation
|
|
1867
|
+
6. **HTML Canaries** (required) - Create validation examples
|
|
1868
|
+
7. **Implementation** (required) - Build component across platforms
|
|
1869
|
+
8. **Dark Mode Token Population** (if component has dark mode differentiation) - Coordinate with Ada to populate the component's semantic color token entries in the dark theme file (`src/tokens/themes/dark/SemanticOverrides.ts`). Identify which tokens need Level 2 overrides (different primitive name in dark mode) and populate those entries. Leave Level 1 tokens (same primitive name, different value per mode) as commented-out — they resolve automatically via primitive dark values. Without this step, the component will silently render light-mode fallback values in dark mode for any tokens that need Level 2 overrides. *(Added by Spec 080, Lina R2 F36)*
|
|
1870
|
+
9. **Demo Page** (if web implementation) - Create or update demo in `demos/` (see Demo Maintenance Checklist)
|
|
1871
|
+
|
|
1872
|
+
This workflow produces clearer requirements, better documentation, and validation that ensures documentation stays accurate.
|
|
1873
|
+
|
|
1874
|
+
---
|
|
1875
|
+
|
|
1876
|
+
*This guide provides minimal, sustainable guidance for AI agents building components while pointing to source files for detailed token information and maintaining True Native Architecture principles.*
|