@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,2094 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: test-development-standards
|
|
3
|
+
inclusion: manual
|
|
4
|
+
name: Test-Development-Standards
|
|
5
|
+
description: Sustainable test development practices — test categories, web component testing patterns, linting and testing integration, behavioral contract testing, and integrated workflow examples. Load when writing tests, debugging test failures, understanding test patterns, or using Stemma System validators.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Test Development Standards
|
|
9
|
+
|
|
10
|
+
**Date**: 2025-12-17
|
|
11
|
+
**Last Reviewed**: 2026-06-26
|
|
12
|
+
**Purpose**: Establish sustainable test development practices that support system evolution
|
|
13
|
+
**Organization**: process-standard
|
|
14
|
+
**Scope**: cross-project
|
|
15
|
+
**Layer**: 2
|
|
16
|
+
**Relevant Tasks**: all-tasks
|
|
17
|
+
|
|
18
|
+
## AI Agent Reading Priorities
|
|
19
|
+
|
|
20
|
+
**This document contains essential testing guidance and specialized patterns. Read strategically based on your current work.**
|
|
21
|
+
|
|
22
|
+
**Layer Context**: This is a Layer 2 (Frameworks and Patterns) document that provides reusable testing standards. It's conditionally loaded and contains sections for different testing scenarios.
|
|
23
|
+
|
|
24
|
+
### WHEN Writing New Tests THEN Read:
|
|
25
|
+
1. ✅ **Test Categories** (understand evergreen vs temporary)
|
|
26
|
+
2. ✅ **Testing Philosophy** (behavior vs implementation)
|
|
27
|
+
3. ✅ **Test Lifecycle Management** (when to write/update/delete)
|
|
28
|
+
4. ✅ **Anti-Patterns** (avoid common mistakes)
|
|
29
|
+
5. ❌ **SKIP**: Web component patterns (unless testing web components)
|
|
30
|
+
6. ❌ **SKIP**: Linting integration (unless using Stemma validators)
|
|
31
|
+
|
|
32
|
+
### WHEN Testing Web Components THEN Read:
|
|
33
|
+
1. ✅ **Web Component Testing Patterns** (JSDOM setup, async lifecycle)
|
|
34
|
+
2. ✅ **Anti-Patterns** (web component specific issues)
|
|
35
|
+
3. ✅ **Examples from Icon** (concrete patterns)
|
|
36
|
+
4. ❌ **SKIP**: Integration testing patterns (unless also doing integration tests)
|
|
37
|
+
|
|
38
|
+
### WHEN Writing Integration Tests THEN Read:
|
|
39
|
+
1. ✅ **Integration Testing Patterns** (contracts vs implementation)
|
|
40
|
+
2. ✅ **Testing Philosophy** (behavior vs philosophical preferences)
|
|
41
|
+
3. ✅ **Anti-Patterns** (integration test specific issues)
|
|
42
|
+
4. ❌ **SKIP**: Web component patterns (unless integrating web components)
|
|
43
|
+
|
|
44
|
+
### WHEN Using Stemma System Validators THEN Read:
|
|
45
|
+
1. ✅ **Linting and Testing Integration** (when to use linting vs testing)
|
|
46
|
+
2. ✅ **Stemma System Validators** (available validators and usage)
|
|
47
|
+
3. ✅ **Decision Framework: Linting vs Testing** (choose validation type)
|
|
48
|
+
4. ✅ **Complementary Validation Patterns** (combine linting and testing)
|
|
49
|
+
5. ✅ **Stemma System Validation Checklist** (complete validation workflow)
|
|
50
|
+
|
|
51
|
+
### WHEN Debugging Test Failures THEN Read:
|
|
52
|
+
1. ✅ **Anti-Patterns** (identify if test has known issues)
|
|
53
|
+
2. ✅ **Examples from Icon** (see how similar issues were resolved)
|
|
54
|
+
3. ✅ **Testing Philosophy** (understand if test is checking wrong things)
|
|
55
|
+
4. ✅ **Relevant pattern section** (web component or integration)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Overview
|
|
60
|
+
|
|
61
|
+
This document establishes standards for writing maintainable, meaningful tests that support system evolution rather than hinder it. The guidance comes from real-world experience fixing 30 failing Icon tests during the Component Token Compliance Audit (Spec 023).
|
|
62
|
+
|
|
63
|
+
**Core Principles**:
|
|
64
|
+
- Test behavior, not implementation details
|
|
65
|
+
- Distinguish evergreen tests from temporary tests
|
|
66
|
+
- Avoid testing philosophical preferences
|
|
67
|
+
- Manage test lifecycle explicitly
|
|
68
|
+
- Use appropriate patterns for web components and integration tests
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Test Categories
|
|
74
|
+
|
|
75
|
+
### Evergreen Tests
|
|
76
|
+
|
|
77
|
+
**Definition**: Tests that should be maintained indefinitely because they verify core behavior and contracts.
|
|
78
|
+
|
|
79
|
+
**Characteristics**:
|
|
80
|
+
- Test public APIs and contracts
|
|
81
|
+
- Verify functional requirements from specs
|
|
82
|
+
- Survive refactoring and implementation changes
|
|
83
|
+
- Provide long-term value
|
|
84
|
+
- Focus on "what" the system does, not "how"
|
|
85
|
+
|
|
86
|
+
**Examples**:
|
|
87
|
+
- `Icon.test.ts` - Tests functional API (`createIcon()`, `Icon` class)
|
|
88
|
+
- `Icon.accessibility.test.ts` - Tests ARIA attributes and screen reader compatibility
|
|
89
|
+
- Component behavior tests that verify requirements
|
|
90
|
+
|
|
91
|
+
**When to Create**:
|
|
92
|
+
- During feature development
|
|
93
|
+
- When implementing new requirements
|
|
94
|
+
- When defining public APIs or contracts
|
|
95
|
+
- When adding accessibility features
|
|
96
|
+
|
|
97
|
+
**Maintenance**:
|
|
98
|
+
- Update when requirements change
|
|
99
|
+
- Update when contracts change
|
|
100
|
+
- Keep passing as implementation evolves
|
|
101
|
+
- Never delete unless feature is removed
|
|
102
|
+
|
|
103
|
+
### Temporary Tests
|
|
104
|
+
|
|
105
|
+
**Definition**: Tests that serve a specific purpose and should be retired after that purpose is fulfilled.
|
|
106
|
+
|
|
107
|
+
**Characteristics**:
|
|
108
|
+
- Verify migration progress or temporary constraints
|
|
109
|
+
- Check specific cleanup or refactoring work
|
|
110
|
+
- Become maintenance burden after purpose served
|
|
111
|
+
- Have explicit retirement criteria
|
|
112
|
+
- Focus on temporary state, not permanent behavior
|
|
113
|
+
|
|
114
|
+
**Examples**:
|
|
115
|
+
- Token compliance tests during migration (retire after all components migrated)
|
|
116
|
+
- Hard-coded value detection tests during cleanup (retire after cleanup complete)
|
|
117
|
+
- Temporary constraint verification during refactoring
|
|
118
|
+
|
|
119
|
+
**When to Create**:
|
|
120
|
+
- During migrations or cleanup work
|
|
121
|
+
- When verifying temporary constraints
|
|
122
|
+
- When tracking progress toward a goal
|
|
123
|
+
- When validating spec-specific work
|
|
124
|
+
|
|
125
|
+
**Retirement Criteria**:
|
|
126
|
+
- Link to spec or task completion
|
|
127
|
+
- Document criteria in test comments
|
|
128
|
+
- Review after each spec completes
|
|
129
|
+
- Delete confidently when criteria met
|
|
130
|
+
|
|
131
|
+
**Example from Spec 017**:
|
|
132
|
+
```typescript
|
|
133
|
+
/**
|
|
134
|
+
* TEMPORARY TEST - Delete after cleanup complete
|
|
135
|
+
* Validates ButtonCTA iOS color token replacements
|
|
136
|
+
*/
|
|
137
|
+
describe('ButtonCTA Token Compliance', () => {
|
|
138
|
+
it('should use color tokens instead of hard-coded values', () => {
|
|
139
|
+
// Test implementation
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
### Decision Framework: Evergreen vs Temporary
|
|
146
|
+
|
|
147
|
+
**Ask these questions**:
|
|
148
|
+
|
|
149
|
+
1. **Does this test verify permanent behavior?**
|
|
150
|
+
- Yes → Evergreen
|
|
151
|
+
- No → Consider temporary
|
|
152
|
+
|
|
153
|
+
2. **Will this test provide value in 6 months?**
|
|
154
|
+
- Yes → Evergreen
|
|
155
|
+
- No → Temporary
|
|
156
|
+
|
|
157
|
+
3. **Is this test checking a temporary constraint?**
|
|
158
|
+
- Yes → Temporary
|
|
159
|
+
- No → Evergreen
|
|
160
|
+
|
|
161
|
+
4. **Does this test track migration or cleanup progress?**
|
|
162
|
+
- Yes → Temporary
|
|
163
|
+
- No → Evergreen
|
|
164
|
+
|
|
165
|
+
5. **Would deleting this test after spec completion cause problems?**
|
|
166
|
+
- Yes → Evergreen
|
|
167
|
+
- No → Temporary
|
|
168
|
+
|
|
169
|
+
**Example Decision Process**:
|
|
170
|
+
|
|
171
|
+
**Test**: "Icon should use token-based sizing"
|
|
172
|
+
- Permanent behavior? Yes (design system principle)
|
|
173
|
+
- Value in 6 months? Yes (always want token compliance)
|
|
174
|
+
- Temporary constraint? No (permanent requirement)
|
|
175
|
+
- **Decision**: Evergreen
|
|
176
|
+
|
|
177
|
+
**Test**: "Icon should not have hard-coded 24px values"
|
|
178
|
+
- Permanent behavior? No (checking absence of specific anti-pattern)
|
|
179
|
+
- Value in 6 months? No (after migration, this is guaranteed)
|
|
180
|
+
- Temporary constraint? Yes (only matters during migration)
|
|
181
|
+
- **Decision**: Temporary (retire after Icon migration complete)
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Testing Philosophy
|
|
186
|
+
|
|
187
|
+
### Test Behavior, Not Implementation
|
|
188
|
+
|
|
189
|
+
**Principle**: Tests should verify what the system does (behavior) rather than how it does it (implementation).
|
|
190
|
+
|
|
191
|
+
**Why This Matters**:
|
|
192
|
+
- Implementation can change while behavior stays the same
|
|
193
|
+
- Tests that check implementation details become brittle
|
|
194
|
+
- Refactoring breaks tests even when behavior is correct
|
|
195
|
+
- Maintenance burden increases unnecessarily
|
|
196
|
+
|
|
197
|
+
**Behavior vs Implementation**:
|
|
198
|
+
|
|
199
|
+
| Behavior (Test This) | Implementation (Don't Test This) |
|
|
200
|
+
|---------------------|----------------------------------|
|
|
201
|
+
| Icon renders at 24px size | Icon has `width="24"` attribute |
|
|
202
|
+
| Button responds to clicks | Button uses specific event handler |
|
|
203
|
+
| Component is accessible | Component uses specific ARIA pattern |
|
|
204
|
+
| Data is validated | Validation uses specific regex |
|
|
205
|
+
|
|
206
|
+
**Example from Icon Tests**:
|
|
207
|
+
|
|
208
|
+
❌ **Bad - Tests Implementation**:
|
|
209
|
+
```typescript
|
|
210
|
+
it('should have width and height attributes', () => {
|
|
211
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
212
|
+
expect(iconHTML).toContain('width="24"');
|
|
213
|
+
expect(iconHTML).toContain('height="24"');
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Problem**: This test assumes Icon uses inline attributes. When Icon switched to CSS classes for token-based sizing, the test failed even though Icon still renders at 24px.
|
|
218
|
+
|
|
219
|
+
✅ **Good - Tests Behavior**:
|
|
220
|
+
```typescript
|
|
221
|
+
it('should render with correct size class', () => {
|
|
222
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
223
|
+
expect(iconHTML).toContain('icon--size-100');
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Better**: This test verifies Icon applies the correct CSS class for 24px sizing, which is the actual contract.
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
### Test Contracts, Not Details
|
|
231
|
+
|
|
232
|
+
**Principle**: Tests should verify the contract (interface, API, behavior) rather than internal details.
|
|
233
|
+
|
|
234
|
+
**Contract**: The agreement between a component and its consumers about what it provides and how to use it.
|
|
235
|
+
|
|
236
|
+
**Internal Details**: Implementation choices that don't affect the contract.
|
|
237
|
+
|
|
238
|
+
**Example from ButtonCTA Integration**:
|
|
239
|
+
|
|
240
|
+
**Contract**: ButtonCTA renders icons at appropriate sizes for button variants
|
|
241
|
+
- Small/medium buttons: 24px icons
|
|
242
|
+
- Large buttons: 32px icons
|
|
243
|
+
|
|
244
|
+
**Internal Detail**: How Icon implements sizing (CSS classes vs inline attributes)
|
|
245
|
+
|
|
246
|
+
❌ **Bad - Tests Internal Detail**:
|
|
247
|
+
```typescript
|
|
248
|
+
it('should use correct icon size for small buttons', () => {
|
|
249
|
+
const button = createButtonCTA({ size: 'small', icon: 'arrow-right' });
|
|
250
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
251
|
+
|
|
252
|
+
// Tests how Icon implements sizing (internal detail)
|
|
253
|
+
expect(iconSpan!.innerHTML).toContain('width="24"');
|
|
254
|
+
expect(iconSpan!.innerHTML).toContain('height="24"');
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
✅ **Good - Tests Contract**:
|
|
259
|
+
```typescript
|
|
260
|
+
it('should use correct icon size for small buttons', () => {
|
|
261
|
+
const button = createButtonCTA({ size: 'small', icon: 'arrow-right' });
|
|
262
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
263
|
+
|
|
264
|
+
// Tests that Icon receives correct size (contract)
|
|
265
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100'); // 24px
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Why This Matters**: When Icon changed from inline attributes to CSS classes, the contract didn't change (still renders 24px icons), but tests checking internal details failed.
|
|
270
|
+
|
|
271
|
+
### Don't Test Philosophical Preferences
|
|
272
|
+
|
|
273
|
+
**Principle**: Avoid tests that check opinions about code structure rather than functional requirements.
|
|
274
|
+
|
|
275
|
+
**Philosophical Preference**: Opinion about how code should be organized or structured
|
|
276
|
+
**Functional Requirement**: Specification of what the system must do
|
|
277
|
+
|
|
278
|
+
**Examples of Philosophical Tests to Avoid**:
|
|
279
|
+
|
|
280
|
+
❌ **"Components must use CSS classes for sizing"**
|
|
281
|
+
- This is a preference about implementation approach
|
|
282
|
+
- Not a functional requirement
|
|
283
|
+
- Becomes brittle if implementation changes
|
|
284
|
+
|
|
285
|
+
❌ **"All values must come from tokens"**
|
|
286
|
+
- After migration, this is guaranteed by architecture
|
|
287
|
+
- Testing it becomes philosophical rather than functional
|
|
288
|
+
- Better to test that values are correct, not their source
|
|
289
|
+
|
|
290
|
+
❌ **"Code must follow specific pattern"**
|
|
291
|
+
- Unless pattern affects behavior, this is preference
|
|
292
|
+
- Tests should verify behavior, not code style
|
|
293
|
+
|
|
294
|
+
**Examples of Functional Tests to Keep**:
|
|
295
|
+
|
|
296
|
+
✅ **"Icon renders at 24px when size prop is 24"**
|
|
297
|
+
- Verifies functional behavior
|
|
298
|
+
- Doesn't care about implementation
|
|
299
|
+
- Survives refactoring
|
|
300
|
+
|
|
301
|
+
✅ **"ButtonCTA icon matches button size variant"**
|
|
302
|
+
- Verifies integration contract
|
|
303
|
+
- Doesn't dictate how sizing is implemented
|
|
304
|
+
- Tests actual requirement
|
|
305
|
+
|
|
306
|
+
✅ **"Components are accessible to screen readers"**
|
|
307
|
+
- Verifies functional requirement
|
|
308
|
+
- Doesn't dictate specific ARIA pattern
|
|
309
|
+
- Tests user-facing behavior
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
**Decision Framework: Functional vs Philosophical**:
|
|
313
|
+
|
|
314
|
+
1. **Is this specified in requirements?**
|
|
315
|
+
- Yes → Functional (test it)
|
|
316
|
+
- No → Might be philosophical
|
|
317
|
+
|
|
318
|
+
2. **Does this affect user-facing behavior?**
|
|
319
|
+
- Yes → Functional (test it)
|
|
320
|
+
- No → Likely philosophical (don't test)
|
|
321
|
+
|
|
322
|
+
3. **Would changing this break the contract?**
|
|
323
|
+
- Yes → Functional (test it)
|
|
324
|
+
- No → Philosophical (don't test)
|
|
325
|
+
|
|
326
|
+
4. **Is this an opinion about code structure?**
|
|
327
|
+
- Yes → Philosophical (don't test)
|
|
328
|
+
- No → Functional (test it)
|
|
329
|
+
|
|
330
|
+
**Example Decision Process**:
|
|
331
|
+
|
|
332
|
+
**Test**: "Icon should use CSS classes for sizing"
|
|
333
|
+
- Specified in requirements? No (requirements say "render at correct size")
|
|
334
|
+
- Affects user behavior? No (users see correct size either way)
|
|
335
|
+
- Breaks contract if changed? No (contract is "render at size X")
|
|
336
|
+
- Opinion about structure? Yes (preference for CSS over attributes)
|
|
337
|
+
- **Decision**: Philosophical - Don't test
|
|
338
|
+
|
|
339
|
+
**Test**: "Icon should render at correct size"
|
|
340
|
+
- Specified in requirements? Yes (size prop requirement)
|
|
341
|
+
- Affects user behavior? Yes (users see wrong size if broken)
|
|
342
|
+
- Breaks contract if changed? Yes (size is part of API contract)
|
|
343
|
+
- Opinion about structure? No (functional requirement)
|
|
344
|
+
- **Decision**: Functional - Test it
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Web Component Testing Patterns
|
|
349
|
+
|
|
350
|
+
### JSDOM and Custom Elements
|
|
351
|
+
|
|
352
|
+
**Challenge**: Web components require proper setup in Jest/JSDOM test environment.
|
|
353
|
+
|
|
354
|
+
**Key Issues**:
|
|
355
|
+
- Custom element registration timing
|
|
356
|
+
- Async lifecycle callbacks (`connectedCallback`, `attributeChangedCallback`)
|
|
357
|
+
- Shadow DOM rendering
|
|
358
|
+
- `customElements.whenDefined()` usage
|
|
359
|
+
|
|
360
|
+
### Pattern: Explicit Custom Element Registration
|
|
361
|
+
|
|
362
|
+
**Problem**: Tests fail because custom element isn't registered or ready when test runs.
|
|
363
|
+
|
|
364
|
+
**Solution**: Explicitly register and wait for custom element definition.
|
|
365
|
+
|
|
366
|
+
**Implementation**:
|
|
367
|
+
|
|
368
|
+
```typescript
|
|
369
|
+
import { IconBaseElement } from '../Icon.web';
|
|
370
|
+
|
|
371
|
+
describe('Icon Web Component Lifecycle', () => {
|
|
372
|
+
beforeAll(() => {
|
|
373
|
+
// Ensure custom element is registered
|
|
374
|
+
if (!customElements.get('icon-base')) {
|
|
375
|
+
customElements.define('icon-base', IconBaseElement);
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
beforeEach(async () => {
|
|
380
|
+
// Wait for custom element to be defined
|
|
381
|
+
await customElements.whenDefined('icon-base');
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('should render icon when added to DOM', async () => {
|
|
385
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
386
|
+
element.setAttribute('name', 'arrow-right');
|
|
387
|
+
element.setAttribute('size', '24');
|
|
388
|
+
|
|
389
|
+
document.body.appendChild(element);
|
|
390
|
+
|
|
391
|
+
// Wait for connectedCallback to fire and render
|
|
392
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
393
|
+
|
|
394
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
395
|
+
expect(svg).toBeTruthy();
|
|
396
|
+
|
|
397
|
+
// Cleanup
|
|
398
|
+
document.body.removeChild(element);
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Key Elements**:
|
|
404
|
+
1. **`beforeAll()`**: Register custom element once for all tests
|
|
405
|
+
2. **`beforeEach()`**: Wait for element definition before each test
|
|
406
|
+
3. **`async/await`**: Make tests async to handle lifecycle timing
|
|
407
|
+
4. **`setTimeout(resolve, 0)`**: Wait one tick for `connectedCallback` to fire
|
|
408
|
+
5. **Cleanup**: Remove elements from DOM after each test
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
### Pattern: Shadow DOM Querying
|
|
412
|
+
|
|
413
|
+
**Problem**: `element.shadowRoot?.querySelector()` returns `undefined` even though element is in DOM.
|
|
414
|
+
|
|
415
|
+
**Root Cause**: Shadow DOM isn't rendered yet because `connectedCallback` hasn't fired or completed.
|
|
416
|
+
|
|
417
|
+
**Solution**: Wait for async lifecycle before querying shadow DOM.
|
|
418
|
+
|
|
419
|
+
**Implementation**:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
it('should render SVG in shadow DOM', async () => {
|
|
423
|
+
await customElements.whenDefined('icon-base');
|
|
424
|
+
|
|
425
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
426
|
+
element.setAttribute('name', 'check');
|
|
427
|
+
document.body.appendChild(element);
|
|
428
|
+
|
|
429
|
+
// Critical: Wait for connectedCallback to complete
|
|
430
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
431
|
+
|
|
432
|
+
// Now shadow DOM is ready
|
|
433
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
434
|
+
expect(svg).toBeTruthy();
|
|
435
|
+
expect(svg?.classList.contains('icon')).toBe(true);
|
|
436
|
+
|
|
437
|
+
document.body.removeChild(element);
|
|
438
|
+
});
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**Why This Works**:
|
|
442
|
+
- `customElements.whenDefined()` ensures element class is registered
|
|
443
|
+
- `appendChild()` triggers `connectedCallback` asynchronously
|
|
444
|
+
- `setTimeout(resolve, 0)` waits one event loop tick for callback to complete
|
|
445
|
+
- Shadow DOM is now rendered and queryable
|
|
446
|
+
|
|
447
|
+
### Pattern: Attribute Change Testing
|
|
448
|
+
|
|
449
|
+
**Problem**: Tests for `attributeChangedCallback` fail because changes don't trigger re-render.
|
|
450
|
+
|
|
451
|
+
**Solution**: Wait after attribute changes for callback to fire.
|
|
452
|
+
|
|
453
|
+
**Implementation**:
|
|
454
|
+
|
|
455
|
+
```typescript
|
|
456
|
+
it('should update when size attribute changes', async () => {
|
|
457
|
+
await customElements.whenDefined('icon-base');
|
|
458
|
+
|
|
459
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
460
|
+
element.setAttribute('name', 'arrow-right');
|
|
461
|
+
element.setAttribute('size', '24');
|
|
462
|
+
document.body.appendChild(element);
|
|
463
|
+
|
|
464
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
465
|
+
|
|
466
|
+
// Verify initial state
|
|
467
|
+
let svg = element.shadowRoot?.querySelector('svg');
|
|
468
|
+
expect(svg?.classList.contains('icon--size-100')).toBe(true);
|
|
469
|
+
|
|
470
|
+
// Change attribute
|
|
471
|
+
element.setAttribute('size', '32');
|
|
472
|
+
|
|
473
|
+
// Wait for attributeChangedCallback to fire
|
|
474
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
475
|
+
|
|
476
|
+
// Verify updated state
|
|
477
|
+
svg = element.shadowRoot?.querySelector('svg');
|
|
478
|
+
expect(svg?.classList.contains('icon--size-200')).toBe(true);
|
|
479
|
+
|
|
480
|
+
document.body.removeChild(element);
|
|
481
|
+
});
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
**Key Points**:
|
|
485
|
+
- Wait after initial `appendChild()` for first render
|
|
486
|
+
- Wait after `setAttribute()` for re-render
|
|
487
|
+
- Query shadow DOM after each wait
|
|
488
|
+
- Verify state changes correctly
|
|
489
|
+
|
|
490
|
+
### Common JSDOM Limitations
|
|
491
|
+
|
|
492
|
+
**What Works**:
|
|
493
|
+
- `customElements.define()` and `customElements.get()`
|
|
494
|
+
- Basic custom element creation with `document.createElement()`
|
|
495
|
+
- Shadow DOM attachment with `attachShadow()`
|
|
496
|
+
- `customElements.whenDefined()` promise
|
|
497
|
+
|
|
498
|
+
**What Has Limitations**:
|
|
499
|
+
- Lifecycle callbacks may not fire reliably without explicit waits
|
|
500
|
+
- Shadow DOM rendering may not work exactly like real browsers
|
|
501
|
+
- Timing issues with when custom elements become "defined"
|
|
502
|
+
- `connectedCallback` may not fire when element is added to document
|
|
503
|
+
|
|
504
|
+
**Best Practices**:
|
|
505
|
+
- Always use `customElements.whenDefined()` before creating elements
|
|
506
|
+
- Always wait after `appendChild()` before querying shadow DOM
|
|
507
|
+
- Always wait after `setAttribute()` before checking for changes
|
|
508
|
+
- Make all web component tests async
|
|
509
|
+
- Clean up elements after each test
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Integration Testing Patterns
|
|
515
|
+
|
|
516
|
+
### What to Verify in Integration Tests
|
|
517
|
+
|
|
518
|
+
**Integration tests** verify that components work together correctly, not that individual components work in isolation.
|
|
519
|
+
|
|
520
|
+
**Focus on**:
|
|
521
|
+
- Component A correctly calls Component B's API
|
|
522
|
+
- Component A passes correct props/parameters to Component B
|
|
523
|
+
- Component A handles Component B's output correctly
|
|
524
|
+
- Integration contract is maintained
|
|
525
|
+
|
|
526
|
+
**Don't focus on**:
|
|
527
|
+
- How Component B implements its functionality
|
|
528
|
+
- Internal details of Component B's rendering
|
|
529
|
+
- Specific implementation choices in Component B
|
|
530
|
+
|
|
531
|
+
### Pattern: Test Integration Contract
|
|
532
|
+
|
|
533
|
+
**Example from ButtonCTA + Icon Integration**:
|
|
534
|
+
|
|
535
|
+
**Contract**: ButtonCTA renders icons at appropriate sizes
|
|
536
|
+
- Small/medium buttons → 24px icons (`iconSizes.size100`)
|
|
537
|
+
- Large buttons → 32px icons (`iconSizes.size125`)
|
|
538
|
+
|
|
539
|
+
✅ **Good - Tests Contract**:
|
|
540
|
+
```typescript
|
|
541
|
+
it('should use correct icon size for small buttons', () => {
|
|
542
|
+
const button = createButtonCTA({
|
|
543
|
+
size: 'small',
|
|
544
|
+
icon: 'arrow-right',
|
|
545
|
+
label: 'Next'
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
549
|
+
|
|
550
|
+
// Verify ButtonCTA called createIcon with correct size
|
|
551
|
+
// Check for CSS class that corresponds to 24px
|
|
552
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
it('should use correct icon size for large buttons', () => {
|
|
556
|
+
const button = createButtonCTA({
|
|
557
|
+
size: 'large',
|
|
558
|
+
icon: 'arrow-right',
|
|
559
|
+
label: 'Next'
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
563
|
+
|
|
564
|
+
// Verify ButtonCTA called createIcon with correct size
|
|
565
|
+
// Check for CSS class that corresponds to 32px
|
|
566
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-200');
|
|
567
|
+
});
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
**What This Tests**:
|
|
571
|
+
- ✅ ButtonCTA imports and calls `createIcon` correctly
|
|
572
|
+
- ✅ ButtonCTA passes correct size parameter based on button size
|
|
573
|
+
- ✅ Icon markup is inserted into button's shadow DOM
|
|
574
|
+
- ✅ Integration contract is maintained
|
|
575
|
+
|
|
576
|
+
**What This Doesn't Test**:
|
|
577
|
+
- ❌ How Icon implements sizing (CSS classes vs attributes)
|
|
578
|
+
- ❌ Icon's internal rendering logic
|
|
579
|
+
- ❌ Specific pixel values in Icon's output
|
|
580
|
+
|
|
581
|
+
### Pattern: Avoid Testing Implementation Details
|
|
582
|
+
|
|
583
|
+
❌ **Bad - Tests Implementation Details**:
|
|
584
|
+
```typescript
|
|
585
|
+
it('should render icon with inline width/height attributes', () => {
|
|
586
|
+
const button = createButtonCTA({
|
|
587
|
+
size: 'small',
|
|
588
|
+
icon: 'arrow-right',
|
|
589
|
+
label: 'Next'
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
593
|
+
|
|
594
|
+
// This tests HOW Icon implements sizing (implementation detail)
|
|
595
|
+
expect(iconSpan!.innerHTML).toContain('width="24"');
|
|
596
|
+
expect(iconSpan!.innerHTML).toContain('height="24"');
|
|
597
|
+
});
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
**Problems**:
|
|
601
|
+
- Test assumes Icon uses inline attributes
|
|
602
|
+
- Test breaks when Icon changes to CSS-based sizing
|
|
603
|
+
- Test doesn't verify the actual contract (correct size)
|
|
604
|
+
- Test is brittle and creates maintenance burden
|
|
605
|
+
|
|
606
|
+
**Why This Failed**: When Icon switched from inline attributes to CSS classes for token-based sizing, these tests failed even though:
|
|
607
|
+
- ButtonCTA still works correctly
|
|
608
|
+
- Icons still render at correct sizes
|
|
609
|
+
- Integration contract is maintained
|
|
610
|
+
- No functional regression occurred
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
### Pattern: Token-Based Design Considerations
|
|
614
|
+
|
|
615
|
+
**Challenge**: When components use token-based design, tests need to verify token usage without checking implementation details.
|
|
616
|
+
|
|
617
|
+
**Approach**: Test that correct token references are used, not specific pixel values.
|
|
618
|
+
|
|
619
|
+
**Example**:
|
|
620
|
+
|
|
621
|
+
✅ **Good - Tests Token Usage**:
|
|
622
|
+
```typescript
|
|
623
|
+
it('should use icon size tokens for sizing', () => {
|
|
624
|
+
const button = createButtonCTA({
|
|
625
|
+
size: 'small',
|
|
626
|
+
icon: 'arrow-right',
|
|
627
|
+
label: 'Next'
|
|
628
|
+
});
|
|
629
|
+
|
|
630
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
631
|
+
|
|
632
|
+
// Verify token-based CSS class is applied
|
|
633
|
+
// This tests the contract: "use token-based sizing"
|
|
634
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
635
|
+
});
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
❌ **Bad - Tests Pixel Values**:
|
|
639
|
+
```typescript
|
|
640
|
+
it('should render 24px icon', () => {
|
|
641
|
+
const button = createButtonCTA({
|
|
642
|
+
size: 'small',
|
|
643
|
+
icon: 'arrow-right',
|
|
644
|
+
label: 'Next'
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
648
|
+
|
|
649
|
+
// This tests specific pixel value (implementation detail)
|
|
650
|
+
expect(iconSpan!.innerHTML).toContain('width="24"');
|
|
651
|
+
});
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
**Why Token-Based Approach is Better**:
|
|
655
|
+
- Tests verify design system compliance
|
|
656
|
+
- Tests survive implementation changes
|
|
657
|
+
- Tests check actual contract (token usage)
|
|
658
|
+
- Tests align with design system principles
|
|
659
|
+
|
|
660
|
+
### Integration Test Checklist
|
|
661
|
+
|
|
662
|
+
When writing integration tests, ask:
|
|
663
|
+
|
|
664
|
+
1. **Am I testing the integration contract?**
|
|
665
|
+
- Yes → Good test
|
|
666
|
+
- No → Might be testing wrong thing
|
|
667
|
+
|
|
668
|
+
2. **Am I testing how Component B works internally?**
|
|
669
|
+
- Yes → Bad test (test Component B directly instead)
|
|
670
|
+
- No → Good test
|
|
671
|
+
|
|
672
|
+
3. **Would this test break if Component B's implementation changed but contract stayed the same?**
|
|
673
|
+
- Yes → Bad test (too brittle)
|
|
674
|
+
- No → Good test
|
|
675
|
+
|
|
676
|
+
4. **Am I checking that Component A correctly uses Component B's API?**
|
|
677
|
+
- Yes → Good test
|
|
678
|
+
- No → Might be missing the point
|
|
679
|
+
|
|
680
|
+
5. **Am I verifying specific implementation details?**
|
|
681
|
+
- Yes → Bad test (too coupled)
|
|
682
|
+
- No → Good test
|
|
683
|
+
|
|
684
|
+
---
|
|
685
|
+
|
|
686
|
+
## Anti-Patterns
|
|
687
|
+
|
|
688
|
+
### Anti-Pattern 1: Testing Implementation Details
|
|
689
|
+
|
|
690
|
+
**Problem**: Tests check how something is implemented rather than what it does.
|
|
691
|
+
|
|
692
|
+
**Example from Icon Tests**:
|
|
693
|
+
|
|
694
|
+
❌ **Bad**:
|
|
695
|
+
```typescript
|
|
696
|
+
it('should have width and height attributes', () => {
|
|
697
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
698
|
+
expect(iconHTML).toContain('width="24"');
|
|
699
|
+
expect(iconHTML).toContain('height="24"');
|
|
700
|
+
});
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
**Why This is Bad**:
|
|
704
|
+
- Assumes specific implementation (inline attributes)
|
|
705
|
+
- Breaks when implementation changes to CSS classes
|
|
706
|
+
- Doesn't test actual requirement (correct size)
|
|
707
|
+
- Creates maintenance burden
|
|
708
|
+
|
|
709
|
+
✅ **Good**:
|
|
710
|
+
```typescript
|
|
711
|
+
it('should apply correct size class', () => {
|
|
712
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
713
|
+
expect(iconHTML).toContain('icon--size-100');
|
|
714
|
+
});
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
**Why This is Better**:
|
|
718
|
+
- Tests actual contract (CSS class for sizing)
|
|
719
|
+
- Survives implementation changes
|
|
720
|
+
- Verifies token-based design
|
|
721
|
+
- Aligns with design system principles
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
### Anti-Pattern 2: Assuming Synchronous Web Component Rendering
|
|
725
|
+
|
|
726
|
+
**Problem**: Tests query shadow DOM immediately after creating element, before `connectedCallback` fires.
|
|
727
|
+
|
|
728
|
+
**Example from Icon Tests**:
|
|
729
|
+
|
|
730
|
+
❌ **Bad**:
|
|
731
|
+
```typescript
|
|
732
|
+
it('should render icon when added to DOM', () => {
|
|
733
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
734
|
+
element.setAttribute('name', 'arrow-right');
|
|
735
|
+
document.body.appendChild(element);
|
|
736
|
+
|
|
737
|
+
// This fails because connectedCallback hasn't fired yet
|
|
738
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
739
|
+
expect(svg).toBeTruthy(); // FAILS - svg is undefined
|
|
740
|
+
});
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
**Why This Fails**:
|
|
744
|
+
- Web component lifecycle is asynchronous
|
|
745
|
+
- `connectedCallback` doesn't fire immediately
|
|
746
|
+
- Shadow DOM isn't rendered yet
|
|
747
|
+
- `querySelector` returns `undefined`
|
|
748
|
+
|
|
749
|
+
✅ **Good**:
|
|
750
|
+
```typescript
|
|
751
|
+
it('should render icon when added to DOM', async () => {
|
|
752
|
+
await customElements.whenDefined('icon-base');
|
|
753
|
+
|
|
754
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
755
|
+
element.setAttribute('name', 'arrow-right');
|
|
756
|
+
document.body.appendChild(element);
|
|
757
|
+
|
|
758
|
+
// Wait for connectedCallback to fire
|
|
759
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
760
|
+
|
|
761
|
+
// Now shadow DOM is ready
|
|
762
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
763
|
+
expect(svg).toBeTruthy(); // PASSES
|
|
764
|
+
|
|
765
|
+
document.body.removeChild(element);
|
|
766
|
+
});
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
**Why This Works**:
|
|
770
|
+
- Uses `customElements.whenDefined()` to ensure element is registered
|
|
771
|
+
- Waits one tick after `appendChild()` for lifecycle to complete
|
|
772
|
+
- Shadow DOM is rendered before querying
|
|
773
|
+
- Cleans up after test
|
|
774
|
+
|
|
775
|
+
### Anti-Pattern 3: Missing Custom Element Registration
|
|
776
|
+
|
|
777
|
+
**Problem**: Tests assume custom element is registered but don't verify or ensure it.
|
|
778
|
+
|
|
779
|
+
**Example from Icon Tests**:
|
|
780
|
+
|
|
781
|
+
❌ **Bad**:
|
|
782
|
+
```typescript
|
|
783
|
+
describe('Icon Web Component', () => {
|
|
784
|
+
it('should render', () => {
|
|
785
|
+
// Assumes icon-base is registered, but doesn't verify
|
|
786
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
787
|
+
// Test fails because element isn't actually an IconBaseElement instance
|
|
788
|
+
});
|
|
789
|
+
});
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
**Why This Fails**:
|
|
793
|
+
- Custom element might not be registered in test environment
|
|
794
|
+
- `document.createElement('icon-base')` returns `HTMLElement`, not `IconBaseElement`
|
|
795
|
+
- Element doesn't have custom element behavior
|
|
796
|
+
- Tests fail with confusing errors
|
|
797
|
+
|
|
798
|
+
✅ **Good**:
|
|
799
|
+
```typescript
|
|
800
|
+
describe('Icon Web Component', () => {
|
|
801
|
+
beforeAll(() => {
|
|
802
|
+
// Explicitly register custom element
|
|
803
|
+
if (!customElements.get('icon-base')) {
|
|
804
|
+
customElements.define('icon-base', IconBaseElement);
|
|
805
|
+
}
|
|
806
|
+
});
|
|
807
|
+
|
|
808
|
+
beforeEach(async () => {
|
|
809
|
+
// Wait for element to be defined
|
|
810
|
+
await customElements.whenDefined('icon-base');
|
|
811
|
+
});
|
|
812
|
+
|
|
813
|
+
it('should render', async () => {
|
|
814
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
815
|
+
// Now element is actually an IconBaseElement instance
|
|
816
|
+
document.body.appendChild(element);
|
|
817
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
818
|
+
|
|
819
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
820
|
+
expect(svg).toBeTruthy();
|
|
821
|
+
|
|
822
|
+
document.body.removeChild(element);
|
|
823
|
+
});
|
|
824
|
+
});
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
**Why This Works**:
|
|
828
|
+
- Explicitly registers custom element before tests
|
|
829
|
+
- Waits for element definition before each test
|
|
830
|
+
- Element has correct type and behavior
|
|
831
|
+
- Tests are reliable and predictable
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
### Anti-Pattern 4: Testing Before Design is Finalized
|
|
835
|
+
|
|
836
|
+
**Problem**: Writing tests based on assumptions about implementation before design is complete.
|
|
837
|
+
|
|
838
|
+
**Example from Icon Tests**:
|
|
839
|
+
|
|
840
|
+
❌ **Bad Timing**:
|
|
841
|
+
```typescript
|
|
842
|
+
// Written during initial development, assuming inline attributes
|
|
843
|
+
it('should have width and height attributes', () => {
|
|
844
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
845
|
+
expect(iconHTML).toContain('width="24"');
|
|
846
|
+
});
|
|
847
|
+
|
|
848
|
+
// Later, design changes to CSS-based sizing
|
|
849
|
+
// Test now fails even though Icon works correctly
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
**Why This is Problematic**:
|
|
853
|
+
- Tests lock in implementation details too early
|
|
854
|
+
- Design evolution breaks tests unnecessarily
|
|
855
|
+
- Tests become maintenance burden
|
|
856
|
+
- Refactoring is harder
|
|
857
|
+
|
|
858
|
+
✅ **Better Approach**:
|
|
859
|
+
```typescript
|
|
860
|
+
// Wait until design is stable, then test contracts
|
|
861
|
+
it('should apply correct size class for token-based sizing', () => {
|
|
862
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
863
|
+
expect(iconHTML).toContain('icon--size-100');
|
|
864
|
+
});
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
**Best Practices**:
|
|
868
|
+
- Write tests after design is finalized
|
|
869
|
+
- Test contracts and behavior, not implementation
|
|
870
|
+
- Update tests when design changes intentionally
|
|
871
|
+
- Delete tests that no longer serve a purpose
|
|
872
|
+
|
|
873
|
+
### Anti-Pattern 5: Checking Wrong Integration Details
|
|
874
|
+
|
|
875
|
+
**Problem**: Integration tests check how integrated component works internally instead of checking integration contract.
|
|
876
|
+
|
|
877
|
+
**Example from ButtonCTA Integration Tests**:
|
|
878
|
+
|
|
879
|
+
❌ **Bad**:
|
|
880
|
+
```typescript
|
|
881
|
+
it('should render icon with inline attributes', () => {
|
|
882
|
+
const button = createButtonCTA({
|
|
883
|
+
size: 'small',
|
|
884
|
+
icon: 'arrow-right',
|
|
885
|
+
label: 'Next'
|
|
886
|
+
});
|
|
887
|
+
|
|
888
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
889
|
+
|
|
890
|
+
// Checks Icon's internal implementation
|
|
891
|
+
expect(iconSpan!.innerHTML).toContain('width="24"');
|
|
892
|
+
expect(iconSpan!.innerHTML).toContain('height="24"');
|
|
893
|
+
});
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
**Why This is Bad**:
|
|
897
|
+
- Tests Icon's implementation, not ButtonCTA's integration
|
|
898
|
+
- Breaks when Icon changes implementation
|
|
899
|
+
- Doesn't verify ButtonCTA's responsibility
|
|
900
|
+
- Creates coupling between tests and Icon internals
|
|
901
|
+
|
|
902
|
+
✅ **Good**:
|
|
903
|
+
```typescript
|
|
904
|
+
it('should use correct icon size for small buttons', () => {
|
|
905
|
+
const button = createButtonCTA({
|
|
906
|
+
size: 'small',
|
|
907
|
+
icon: 'arrow-right',
|
|
908
|
+
label: 'Next'
|
|
909
|
+
});
|
|
910
|
+
|
|
911
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
912
|
+
|
|
913
|
+
// Checks ButtonCTA's integration contract
|
|
914
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
915
|
+
});
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
**Why This is Better**:
|
|
919
|
+
- Tests ButtonCTA's responsibility (passing correct size)
|
|
920
|
+
- Survives Icon implementation changes
|
|
921
|
+
- Verifies integration contract
|
|
922
|
+
- Focuses on what ButtonCTA controls
|
|
923
|
+
|
|
924
|
+
---
|
|
925
|
+
|
|
926
|
+
## Test Lifecycle Management
|
|
927
|
+
|
|
928
|
+
### When to Write Tests
|
|
929
|
+
|
|
930
|
+
**During Feature Development**:
|
|
931
|
+
- Write evergreen tests for new features
|
|
932
|
+
- Test public APIs and contracts
|
|
933
|
+
- Verify functional requirements
|
|
934
|
+
- Add accessibility tests
|
|
935
|
+
|
|
936
|
+
**During Migration/Cleanup**:
|
|
937
|
+
- Write temporary tests to track progress
|
|
938
|
+
- Document retirement criteria in test comments
|
|
939
|
+
- Link tests to spec completion
|
|
940
|
+
- Plan for deletion after spec completes
|
|
941
|
+
|
|
942
|
+
**After Design Changes**:
|
|
943
|
+
- Update existing tests to match new contracts
|
|
944
|
+
- Delete tests that check old implementation details
|
|
945
|
+
- Add tests for new behavior
|
|
946
|
+
- Verify tests still provide value
|
|
947
|
+
|
|
948
|
+
|
|
949
|
+
### When to Update Tests
|
|
950
|
+
|
|
951
|
+
**Requirements Change**:
|
|
952
|
+
- Update tests to match new requirements
|
|
953
|
+
- Verify new behavior is tested
|
|
954
|
+
- Remove tests for removed features
|
|
955
|
+
- Update test documentation
|
|
956
|
+
|
|
957
|
+
**Contracts Change**:
|
|
958
|
+
- Update tests to match new contracts
|
|
959
|
+
- Verify integration tests still work
|
|
960
|
+
- Update API tests for new signatures
|
|
961
|
+
- Document breaking changes
|
|
962
|
+
|
|
963
|
+
**Tests Fail Due to Refactoring**:
|
|
964
|
+
- Evaluate if test is too brittle
|
|
965
|
+
- Check if test tests implementation details
|
|
966
|
+
- Update test to check behavior instead
|
|
967
|
+
- Consider if test should be deleted
|
|
968
|
+
|
|
969
|
+
**Design Evolution**:
|
|
970
|
+
- Update tests to match evolved design
|
|
971
|
+
- Remove tests for old implementation details
|
|
972
|
+
- Add tests for new patterns
|
|
973
|
+
- Verify tests align with current architecture
|
|
974
|
+
|
|
975
|
+
### When to Delete Tests
|
|
976
|
+
|
|
977
|
+
**Temporary Tests After Purpose Served**:
|
|
978
|
+
- Migration complete → Delete migration tests
|
|
979
|
+
- Cleanup complete → Delete cleanup verification tests
|
|
980
|
+
- Spec complete → Delete spec-specific temporary tests
|
|
981
|
+
- Review retirement criteria → Delete if met
|
|
982
|
+
|
|
983
|
+
**Tests That Check Implementation Details**:
|
|
984
|
+
- Implementation changed → Delete tests checking old details
|
|
985
|
+
- Design evolved → Delete tests for old patterns
|
|
986
|
+
- Refactoring complete → Delete tests that were too brittle
|
|
987
|
+
|
|
988
|
+
**Tests That Provide No Value**:
|
|
989
|
+
- Philosophical tests → Delete tests checking opinions
|
|
990
|
+
- Duplicate tests → Delete redundant tests
|
|
991
|
+
- Obsolete tests → Delete tests for removed features
|
|
992
|
+
|
|
993
|
+
**Tests That Create Maintenance Burden**:
|
|
994
|
+
- Brittle tests → Delete tests that break on every refactor
|
|
995
|
+
- Over-specific tests → Delete tests checking too many details
|
|
996
|
+
- Coupled tests → Delete tests too tightly coupled to implementation
|
|
997
|
+
|
|
998
|
+
### Retirement Criteria for Temporary Tests
|
|
999
|
+
|
|
1000
|
+
**Document Criteria in Test Comments**:
|
|
1001
|
+
```typescript
|
|
1002
|
+
/**
|
|
1003
|
+
* TEMPORARY TEST - Delete after Icon token migration complete
|
|
1004
|
+
*
|
|
1005
|
+
* Retirement Criteria:
|
|
1006
|
+
* - All Icon platform implementations use token-based sizing
|
|
1007
|
+
* - Icon README documents token consumption
|
|
1008
|
+
* - Spec 023 Task 2 marked complete
|
|
1009
|
+
*
|
|
1010
|
+
* This test verifies Icon uses CSS classes for sizing during migration.
|
|
1011
|
+
* After migration, this is guaranteed by architecture and doesn't need testing.
|
|
1012
|
+
*/
|
|
1013
|
+
describe('Icon Token Compliance (TEMPORARY)', () => {
|
|
1014
|
+
it('should use token-based CSS classes for sizing', () => {
|
|
1015
|
+
const iconHTML = createIcon({ name: 'arrow-right', size: 24 });
|
|
1016
|
+
expect(iconHTML).toContain('icon--size-100');
|
|
1017
|
+
});
|
|
1018
|
+
});
|
|
1019
|
+
```
|
|
1020
|
+
|
|
1021
|
+
**Review After Spec Completion**:
|
|
1022
|
+
1. Check if retirement criteria are met
|
|
1023
|
+
2. Verify feature is complete and stable
|
|
1024
|
+
3. Confirm tests no longer provide value
|
|
1025
|
+
4. Delete confidently with clear commit message
|
|
1026
|
+
|
|
1027
|
+
**Example Deletion Commit**:
|
|
1028
|
+
```
|
|
1029
|
+
Delete temporary Icon token compliance tests
|
|
1030
|
+
|
|
1031
|
+
Retirement criteria met:
|
|
1032
|
+
- Icon token migration complete (Spec 023 Task 2)
|
|
1033
|
+
- All platforms use token-based sizing
|
|
1034
|
+
- Icon README documents token consumption
|
|
1035
|
+
|
|
1036
|
+
These tests verified migration progress and are no longer needed.
|
|
1037
|
+
Token compliance is now guaranteed by architecture.
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
---
|
|
1042
|
+
|
|
1043
|
+
## Examples from Icon
|
|
1044
|
+
|
|
1045
|
+
### Example 1: Icon.test.ts (Evergreen Tests) ✅
|
|
1046
|
+
|
|
1047
|
+
**What It Tests**: Functional API (`createIcon()`, `Icon` class)
|
|
1048
|
+
|
|
1049
|
+
**Why It's Evergreen**:
|
|
1050
|
+
- Tests public API contracts
|
|
1051
|
+
- Verifies functional requirements
|
|
1052
|
+
- Survives implementation changes
|
|
1053
|
+
- Provides long-term value
|
|
1054
|
+
|
|
1055
|
+
**Key Tests**:
|
|
1056
|
+
```typescript
|
|
1057
|
+
describe('createIcon', () => {
|
|
1058
|
+
it('should create icon with correct name', () => {
|
|
1059
|
+
const result = createIcon({ name: 'arrow-right', size: 24 });
|
|
1060
|
+
expect(result).toContain('icon-arrow-right');
|
|
1061
|
+
});
|
|
1062
|
+
|
|
1063
|
+
it('should apply correct size class', () => {
|
|
1064
|
+
const result = createIcon({ name: 'check', size: 24 });
|
|
1065
|
+
expect(result).toContain('icon--size-100');
|
|
1066
|
+
});
|
|
1067
|
+
});
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
**Lessons**:
|
|
1071
|
+
- Focus on API contracts
|
|
1072
|
+
- Test behavior, not implementation
|
|
1073
|
+
- Keep tests simple and focused
|
|
1074
|
+
- Verify functional requirements
|
|
1075
|
+
|
|
1076
|
+
### Example 2: Icon.lifecycle.test.ts (Fixed) ✅
|
|
1077
|
+
|
|
1078
|
+
**What It Tests**: Web component lifecycle callbacks
|
|
1079
|
+
|
|
1080
|
+
**Original Problem**: Missing async setup, tests failed with `undefined` shadow DOM
|
|
1081
|
+
|
|
1082
|
+
**Fix Applied**:
|
|
1083
|
+
```typescript
|
|
1084
|
+
describe('Icon Web Component Lifecycle', () => {
|
|
1085
|
+
beforeAll(() => {
|
|
1086
|
+
if (!customElements.get('icon-base')) {
|
|
1087
|
+
customElements.define('icon-base', IconBaseElement);
|
|
1088
|
+
}
|
|
1089
|
+
});
|
|
1090
|
+
|
|
1091
|
+
beforeEach(async () => {
|
|
1092
|
+
await customElements.whenDefined('icon-base');
|
|
1093
|
+
});
|
|
1094
|
+
|
|
1095
|
+
it('should render icon when added to DOM', async () => {
|
|
1096
|
+
const element = document.createElement('icon-base') as IconBaseElement;
|
|
1097
|
+
element.setAttribute('name', 'arrow-right');
|
|
1098
|
+
document.body.appendChild(element);
|
|
1099
|
+
|
|
1100
|
+
// Critical: Wait for connectedCallback
|
|
1101
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
1102
|
+
|
|
1103
|
+
const svg = element.shadowRoot?.querySelector('svg');
|
|
1104
|
+
expect(svg).toBeTruthy();
|
|
1105
|
+
|
|
1106
|
+
document.body.removeChild(element);
|
|
1107
|
+
});
|
|
1108
|
+
});
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
**Lessons**:
|
|
1112
|
+
- Explicitly register custom elements
|
|
1113
|
+
- Use `customElements.whenDefined()`
|
|
1114
|
+
- Wait for async lifecycle callbacks
|
|
1115
|
+
- Clean up after each test
|
|
1116
|
+
|
|
1117
|
+
### Example 3: Icon.buttonCTA-integration.test.ts (Fixed) ✅
|
|
1118
|
+
|
|
1119
|
+
**What It Tests**: ButtonCTA + Icon integration
|
|
1120
|
+
|
|
1121
|
+
**Original Problem**: Tests checked for inline attributes instead of CSS classes
|
|
1122
|
+
|
|
1123
|
+
**Fix Applied**:
|
|
1124
|
+
```typescript
|
|
1125
|
+
it('should use correct icon size for small buttons', () => {
|
|
1126
|
+
const button = createButtonCTA({
|
|
1127
|
+
size: 'small',
|
|
1128
|
+
icon: 'arrow-right',
|
|
1129
|
+
label: 'Next'
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1132
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1133
|
+
|
|
1134
|
+
// Changed from: expect(...).toContain('width="24"')
|
|
1135
|
+
// To: Check CSS class for token-based sizing
|
|
1136
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
1137
|
+
});
|
|
1138
|
+
|
|
1139
|
+
it('should use correct icon size for large buttons', () => {
|
|
1140
|
+
const button = createButtonCTA({
|
|
1141
|
+
size: 'large',
|
|
1142
|
+
icon: 'arrow-right',
|
|
1143
|
+
label: 'Next'
|
|
1144
|
+
});
|
|
1145
|
+
|
|
1146
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1147
|
+
|
|
1148
|
+
// Changed from: expect(...).toContain('width="32"')
|
|
1149
|
+
// To: Check CSS class for token-based sizing
|
|
1150
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-200');
|
|
1151
|
+
});
|
|
1152
|
+
```
|
|
1153
|
+
|
|
1154
|
+
**Lessons**:
|
|
1155
|
+
- Test integration contracts, not implementation details
|
|
1156
|
+
- Check for token-based CSS classes, not pixel values
|
|
1157
|
+
- Verify what component controls, not how dependencies work
|
|
1158
|
+
- Update tests when design evolves
|
|
1159
|
+
|
|
1160
|
+
|
|
1161
|
+
### Summary: Icon Test Fixes
|
|
1162
|
+
|
|
1163
|
+
**Total Tests**: 103 (all passing after fixes)
|
|
1164
|
+
|
|
1165
|
+
**Issues Fixed**:
|
|
1166
|
+
1. **Web Component Registration** (24 tests):
|
|
1167
|
+
- Added explicit `customElements.define()`
|
|
1168
|
+
- Added `customElements.whenDefined()` waits
|
|
1169
|
+
- Added async delays for lifecycle callbacks
|
|
1170
|
+
- Fixed `Icon.lifecycle.test.ts` and `Icon.rendering.test.ts`
|
|
1171
|
+
|
|
1172
|
+
2. **Integration Test Expectations** (6 tests):
|
|
1173
|
+
- Changed from checking inline attributes to CSS classes
|
|
1174
|
+
- Updated to verify token-based sizing approach
|
|
1175
|
+
- Fixed `Icon.buttonCTA-integration.test.ts`
|
|
1176
|
+
|
|
1177
|
+
**Key Takeaways**:
|
|
1178
|
+
- Web component tests need explicit async handling
|
|
1179
|
+
- Integration tests should check contracts, not implementation
|
|
1180
|
+
- Tests should align with design system principles
|
|
1181
|
+
- Fixing tests revealed broader patterns worth documenting
|
|
1182
|
+
|
|
1183
|
+
---
|
|
1184
|
+
|
|
1185
|
+
## Linting and Testing Integration
|
|
1186
|
+
|
|
1187
|
+
### Overview
|
|
1188
|
+
|
|
1189
|
+
The Stemma System introduces static analysis validators that complement runtime testing. Understanding when to use linting vs testing is essential for efficient validation without duplicating effort.
|
|
1190
|
+
|
|
1191
|
+
**Dual Validation Approach**:
|
|
1192
|
+
- **Static Analysis (Linting)**: Validates structure, naming, and configuration at development time
|
|
1193
|
+
- **Runtime Testing**: Validates behavior, contracts, and interactions during test execution
|
|
1194
|
+
- **Together**: Comprehensive coverage with minimal redundancy
|
|
1195
|
+
|
|
1196
|
+
### Validation Types
|
|
1197
|
+
|
|
1198
|
+
| Validation Type | Mechanism | When Applied | What It Validates |
|
|
1199
|
+
|-----------------|-----------|--------------|-------------------|
|
|
1200
|
+
| **Static Analysis** | Linting/Validators | During development (IDE) | Structure, naming, configuration |
|
|
1201
|
+
| **Unit Tests** | Runtime | During test execution | Specific examples, edge cases |
|
|
1202
|
+
| **Integration Tests** | Runtime | During test execution | Component interaction, contracts |
|
|
1203
|
+
| **Property Tests** | Runtime | During test execution | Universal properties across inputs |
|
|
1204
|
+
| **Manual Validation** | Human review | During development | Documentation quality, UX |
|
|
1205
|
+
|
|
1206
|
+
### Stemma System Validators
|
|
1207
|
+
|
|
1208
|
+
The Stemma System provides four validators for static analysis:
|
|
1209
|
+
|
|
1210
|
+
| Validator | Purpose | What It Catches |
|
|
1211
|
+
|-----------|---------|-----------------|
|
|
1212
|
+
| **StemmaComponentNamingValidator** | Naming convention compliance | Invalid [Family]-[Type]-[Variant] patterns, missing Base suffix |
|
|
1213
|
+
| **StemmaTokenUsageValidator** | Token usage compliance | Inline styles, hard-coded values, missing token references |
|
|
1214
|
+
| **StemmaPropertyAccessibilityValidator** | Property and accessibility | Missing required properties, WCAG violations |
|
|
1215
|
+
| **StemmaErrorGuidanceSystem** | Error guidance | Provides correction guidance and documentation links |
|
|
1216
|
+
|
|
1217
|
+
**Import Example**:
|
|
1218
|
+
```typescript
|
|
1219
|
+
import {
|
|
1220
|
+
validateComponentName,
|
|
1221
|
+
validateTokenUsage,
|
|
1222
|
+
validatePropertyAndAccessibility,
|
|
1223
|
+
getErrorGuidance
|
|
1224
|
+
} from '../validators';
|
|
1225
|
+
```
|
|
1226
|
+
|
|
1227
|
+
### When to Use Linting vs Testing
|
|
1228
|
+
|
|
1229
|
+
#### Use Linting (Static Analysis) For:
|
|
1230
|
+
|
|
1231
|
+
**Structural Validation**:
|
|
1232
|
+
- Component naming convention compliance
|
|
1233
|
+
- Token usage patterns (detecting inline styles)
|
|
1234
|
+
- Required property presence
|
|
1235
|
+
- Schema compliance
|
|
1236
|
+
- Configuration validation
|
|
1237
|
+
|
|
1238
|
+
**Why Linting is Better**:
|
|
1239
|
+
- Immediate feedback during development
|
|
1240
|
+
- No runtime overhead
|
|
1241
|
+
- Catches issues before tests run
|
|
1242
|
+
- Consistent enforcement across codebase
|
|
1243
|
+
|
|
1244
|
+
**Example - Naming Convention**:
|
|
1245
|
+
```typescript
|
|
1246
|
+
// Linting catches this immediately
|
|
1247
|
+
const result = validateComponentName('ButtonPrimary');
|
|
1248
|
+
// Error: Missing family prefix, should be "Button-CTA-Primary" or similar
|
|
1249
|
+
```
|
|
1250
|
+
|
|
1251
|
+
#### Use Testing (Runtime) For:
|
|
1252
|
+
|
|
1253
|
+
**Behavioral Validation**:
|
|
1254
|
+
- Component renders correctly
|
|
1255
|
+
- User interactions work as expected
|
|
1256
|
+
- Integration contracts are honored
|
|
1257
|
+
- Accessibility features function properly
|
|
1258
|
+
- Cross-platform consistency
|
|
1259
|
+
|
|
1260
|
+
**Why Testing is Better**:
|
|
1261
|
+
- Validates actual behavior
|
|
1262
|
+
- Tests real user scenarios
|
|
1263
|
+
- Catches runtime issues
|
|
1264
|
+
- Verifies integration contracts
|
|
1265
|
+
|
|
1266
|
+
**Example - Behavior**:
|
|
1267
|
+
```typescript
|
|
1268
|
+
// Testing validates actual behavior
|
|
1269
|
+
it('should render icon at correct size', () => {
|
|
1270
|
+
const button = createButtonCTA({ size: 'small', icon: 'arrow-right' });
|
|
1271
|
+
const icon = button.querySelector('.button-cta__icon');
|
|
1272
|
+
expect(icon!.innerHTML).toContain('icon--size-100');
|
|
1273
|
+
});
|
|
1274
|
+
```
|
|
1275
|
+
|
|
1276
|
+
### Decision Framework: Linting vs Testing
|
|
1277
|
+
|
|
1278
|
+
**Ask these questions to determine validation type**:
|
|
1279
|
+
|
|
1280
|
+
1. **Can this be validated without running code?**
|
|
1281
|
+
- Yes → Linting
|
|
1282
|
+
- No → Testing
|
|
1283
|
+
|
|
1284
|
+
2. **Is this about structure or behavior?**
|
|
1285
|
+
- Structure → Linting
|
|
1286
|
+
- Behavior → Testing
|
|
1287
|
+
|
|
1288
|
+
3. **Does this require user interaction simulation?**
|
|
1289
|
+
- Yes → Testing
|
|
1290
|
+
- No → Consider linting
|
|
1291
|
+
|
|
1292
|
+
4. **Is this checking a naming convention or pattern?**
|
|
1293
|
+
- Yes → Linting
|
|
1294
|
+
- No → Testing
|
|
1295
|
+
|
|
1296
|
+
5. **Does this need to verify runtime state?**
|
|
1297
|
+
- Yes → Testing
|
|
1298
|
+
- No → Linting
|
|
1299
|
+
|
|
1300
|
+
**Decision Matrix**:
|
|
1301
|
+
|
|
1302
|
+
| Validation Need | Linting | Testing | Both |
|
|
1303
|
+
|-----------------|---------|---------|------|
|
|
1304
|
+
| Component naming | ✅ | | |
|
|
1305
|
+
| Token usage patterns | ✅ | | |
|
|
1306
|
+
| Required properties present | ✅ | | |
|
|
1307
|
+
| Schema compliance | ✅ | | |
|
|
1308
|
+
| Component renders correctly | | ✅ | |
|
|
1309
|
+
| User interactions work | | ✅ | |
|
|
1310
|
+
| Integration contracts honored | | ✅ | |
|
|
1311
|
+
| Accessibility features work | | ✅ | |
|
|
1312
|
+
| WCAG compliance | ✅ | ✅ | ✅ |
|
|
1313
|
+
| Cross-platform consistency | | ✅ | |
|
|
1314
|
+
| Token values are correct | | ✅ | |
|
|
1315
|
+
|
|
1316
|
+
### CI-Enforced Guards (Spec 118)
|
|
1317
|
+
|
|
1318
|
+
Behavioral and structural guards that protect a system invariant are **enforced via required CI**, not by convention. New guards of this kind **attach to the consumer-guard / test-CI lane** (`.github/workflows/consumer-guard.yml`) so they cannot be skipped. The packed-install consumer guard is the **arbiter** for module-resolution and packaging behavior — in-repo loads can false-green on those surfaces and must not be treated as certification.
|
|
1319
|
+
|
|
1320
|
+
**Close-state integrity (Civitas process guard).** A module-resolution issue cannot close as "Resolved" on a workaround alone — closure requires the **non-skippable consumer-guard CI lane** (`.github/workflows/consumer-guard.yml`, the packed-install arbiter) to certify the end-state. In-repo loads false-green on resolution/packaging surprises and are NOT an acceptable arbiter (the Task-3 false-green lesson). **Spec 118 is the single source of truth for module resolution**; downstream readers are routed there rather than to ad-hoc workarounds.
|
|
1321
|
+
|
|
1322
|
+
### Complementary Validation Patterns
|
|
1323
|
+
|
|
1324
|
+
#### Pattern 1: Linting + Unit Tests
|
|
1325
|
+
|
|
1326
|
+
**Use Case**: Component development with structural and behavioral validation
|
|
1327
|
+
|
|
1328
|
+
**Linting Validates**:
|
|
1329
|
+
- Component name follows [Family]-[Type]-[Variant] pattern
|
|
1330
|
+
- Token references are used (no inline styles)
|
|
1331
|
+
- Required properties are defined in schema
|
|
1332
|
+
|
|
1333
|
+
**Unit Tests Validate**:
|
|
1334
|
+
- Component renders with correct output
|
|
1335
|
+
- Properties affect rendering correctly
|
|
1336
|
+
- Edge cases are handled
|
|
1337
|
+
|
|
1338
|
+
**Example**:
|
|
1339
|
+
```typescript
|
|
1340
|
+
// Linting (static analysis)
|
|
1341
|
+
const namingResult = validateComponentName('Input-Text-Email');
|
|
1342
|
+
// ✅ Valid: Family=Input, Type=Text, Variant=Email
|
|
1343
|
+
|
|
1344
|
+
// Unit Test (runtime)
|
|
1345
|
+
it('should render email input with correct type', () => {
|
|
1346
|
+
const input = createInputTextEmail({ label: 'Email' });
|
|
1347
|
+
expect(input.getAttribute('type')).toBe('email');
|
|
1348
|
+
});
|
|
1349
|
+
```
|
|
1350
|
+
|
|
1351
|
+
#### Pattern 2: Linting + Integration Tests
|
|
1352
|
+
|
|
1353
|
+
**Use Case**: Component integration with contract validation
|
|
1354
|
+
|
|
1355
|
+
**Linting Validates**:
|
|
1356
|
+
- Both components follow naming conventions
|
|
1357
|
+
- Token usage is consistent
|
|
1358
|
+
- Properties match schema contracts
|
|
1359
|
+
|
|
1360
|
+
**Integration Tests Validate**:
|
|
1361
|
+
- Components work together correctly
|
|
1362
|
+
- Integration contracts are honored
|
|
1363
|
+
- Data flows correctly between components
|
|
1364
|
+
|
|
1365
|
+
**Example**:
|
|
1366
|
+
```typescript
|
|
1367
|
+
// Linting (static analysis)
|
|
1368
|
+
const buttonResult = validateComponentName('Button-CTA');
|
|
1369
|
+
const iconResult = validateComponentName('Icon-Base');
|
|
1370
|
+
// ✅ Both valid
|
|
1371
|
+
|
|
1372
|
+
// Integration Test (runtime)
|
|
1373
|
+
it('should render button with icon at correct size', () => {
|
|
1374
|
+
const button = createButtonCTA({ icon: 'arrow-right', size: 'small' });
|
|
1375
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1376
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
1377
|
+
});
|
|
1378
|
+
```
|
|
1379
|
+
|
|
1380
|
+
#### Pattern 3: Linting + Property Tests
|
|
1381
|
+
|
|
1382
|
+
**Use Case**: Universal property validation across inputs
|
|
1383
|
+
|
|
1384
|
+
**Linting Validates**:
|
|
1385
|
+
- Component structure is correct
|
|
1386
|
+
- Token patterns are followed
|
|
1387
|
+
- Schema is valid
|
|
1388
|
+
|
|
1389
|
+
**Property Tests Validate**:
|
|
1390
|
+
- Properties hold for all valid inputs
|
|
1391
|
+
- Invariants are maintained
|
|
1392
|
+
- Contracts are universally honored
|
|
1393
|
+
|
|
1394
|
+
**Example**:
|
|
1395
|
+
```typescript
|
|
1396
|
+
// Linting (static analysis)
|
|
1397
|
+
const schemaResult = validatePropertyAndAccessibility(
|
|
1398
|
+
'Input-Text-Base',
|
|
1399
|
+
{ label: 'Test', value: '' },
|
|
1400
|
+
schema
|
|
1401
|
+
);
|
|
1402
|
+
// ✅ Required properties present
|
|
1403
|
+
|
|
1404
|
+
// Property Test (runtime)
|
|
1405
|
+
it.prop([fc.string().filter(s => s.trim().length > 0)])(
|
|
1406
|
+
'should always render label for non-empty strings',
|
|
1407
|
+
(label) => {
|
|
1408
|
+
const input = createInputTextBase({ label });
|
|
1409
|
+
const labelElement = input.querySelector('label');
|
|
1410
|
+
expect(labelElement?.textContent).toBe(label);
|
|
1411
|
+
}
|
|
1412
|
+
);
|
|
1413
|
+
```
|
|
1414
|
+
|
|
1415
|
+
### Avoiding Validation Duplication
|
|
1416
|
+
|
|
1417
|
+
**Anti-Pattern**: Testing what linting already validates
|
|
1418
|
+
|
|
1419
|
+
❌ **Bad - Duplicates Linting**:
|
|
1420
|
+
```typescript
|
|
1421
|
+
// Linting already validates naming convention
|
|
1422
|
+
it('should have correct component name format', () => {
|
|
1423
|
+
expect(componentName).toMatch(/^[A-Z][a-z]+-[A-Z][a-z]+-[A-Z][a-z]+$/);
|
|
1424
|
+
});
|
|
1425
|
+
```
|
|
1426
|
+
|
|
1427
|
+
✅ **Good - Tests Behavior**:
|
|
1428
|
+
```typescript
|
|
1429
|
+
// Test actual behavior, not naming
|
|
1430
|
+
it('should render with correct accessibility attributes', () => {
|
|
1431
|
+
const input = createInputTextEmail({ label: 'Email' });
|
|
1432
|
+
expect(input.getAttribute('aria-label')).toBe('Email');
|
|
1433
|
+
});
|
|
1434
|
+
```
|
|
1435
|
+
|
|
1436
|
+
**Anti-Pattern**: Linting what requires runtime validation
|
|
1437
|
+
|
|
1438
|
+
❌ **Bad - Can't Lint Behavior**:
|
|
1439
|
+
```typescript
|
|
1440
|
+
// Can't validate rendering without running code
|
|
1441
|
+
const result = validateComponentRendersCorrectly('Button-CTA');
|
|
1442
|
+
```
|
|
1443
|
+
|
|
1444
|
+
✅ **Good - Test Behavior**:
|
|
1445
|
+
```typescript
|
|
1446
|
+
// Test actual rendering behavior
|
|
1447
|
+
it('should render button with correct variant class', () => {
|
|
1448
|
+
const button = createButtonCTA({ variant: 'primary' });
|
|
1449
|
+
expect(button.classList.contains('button-cta--primary')).toBe(true);
|
|
1450
|
+
});
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
### Validation Workflow
|
|
1454
|
+
|
|
1455
|
+
**Recommended Order**:
|
|
1456
|
+
|
|
1457
|
+
1. **Pre-Development**: Schema validation (linting)
|
|
1458
|
+
- Validate component schema structure
|
|
1459
|
+
- Check naming convention compliance
|
|
1460
|
+
- Verify token references
|
|
1461
|
+
|
|
1462
|
+
2. **During Development**: Real-time linting (IDE)
|
|
1463
|
+
- Immediate feedback on naming issues
|
|
1464
|
+
- Token usage validation
|
|
1465
|
+
- Property completeness checks
|
|
1466
|
+
|
|
1467
|
+
3. **Post-Development**: Test execution (runtime)
|
|
1468
|
+
- Unit tests for specific behavior
|
|
1469
|
+
- Integration tests for contracts
|
|
1470
|
+
- Property tests for universal properties
|
|
1471
|
+
|
|
1472
|
+
4. **Pre-Merge**: Complete validation suite
|
|
1473
|
+
- All linting passes
|
|
1474
|
+
- All tests pass
|
|
1475
|
+
- Manual review complete
|
|
1476
|
+
|
|
1477
|
+
### Stemma System Validation Checklist
|
|
1478
|
+
|
|
1479
|
+
**For New Components**:
|
|
1480
|
+
|
|
1481
|
+
- [ ] **Naming**: `validateComponentName()` passes
|
|
1482
|
+
- [ ] **Token Usage**: `validateTokenUsage()` passes
|
|
1483
|
+
- [ ] **Properties**: `validatePropertyAndAccessibility()` passes
|
|
1484
|
+
- [ ] **Unit Tests**: Core behavior tested
|
|
1485
|
+
- [ ] **Integration Tests**: Contracts with dependencies tested
|
|
1486
|
+
- [ ] **Accessibility Tests**: WCAG compliance verified
|
|
1487
|
+
|
|
1488
|
+
**For Component Updates**:
|
|
1489
|
+
|
|
1490
|
+
- [ ] **Linting**: All validators still pass
|
|
1491
|
+
- [ ] **Existing Tests**: All tests still pass
|
|
1492
|
+
- [ ] **New Behavior**: New tests added for new behavior
|
|
1493
|
+
- [ ] **Contracts**: Integration contracts still honored
|
|
1494
|
+
|
|
1495
|
+
### Cross-Reference to Validators
|
|
1496
|
+
|
|
1497
|
+
**Validator Source Files**:
|
|
1498
|
+
- `src/validators/StemmaComponentNamingValidator.ts` - Naming convention validation
|
|
1499
|
+
- `src/validators/StemmaTokenUsageValidator.ts` - Token usage validation
|
|
1500
|
+
- `src/validators/StemmaPropertyAccessibilityValidator.ts` - Property and accessibility validation
|
|
1501
|
+
- `src/validators/StemmaErrorGuidanceSystem.ts` - Error guidance and IDE integration
|
|
1502
|
+
|
|
1503
|
+
**Validator Tests**:
|
|
1504
|
+
- `src/validators/__tests__/StemmaComponentNamingValidator.test.ts`
|
|
1505
|
+
- `src/validators/__tests__/StemmaTokenUsageValidator.test.ts`
|
|
1506
|
+
- `src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts`
|
|
1507
|
+
- `src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts`
|
|
1508
|
+
|
|
1509
|
+
**Behavioral Contract Tests**:
|
|
1510
|
+
- `src/__tests__/stemma-system/behavioral-contract-validation.test.ts`
|
|
1511
|
+
- `src/__tests__/stemma-system/form-inputs-contracts.test.ts`
|
|
1512
|
+
- `src/__tests__/stemma-system/cross-platform-consistency.test.ts`
|
|
1513
|
+
|
|
1514
|
+
---
|
|
1515
|
+
|
|
1516
|
+
## Integrated Workflow Examples
|
|
1517
|
+
|
|
1518
|
+
This section provides concrete examples of combined validation workflows for different development scenarios. Each example shows how linting, unit tests, integration tests, and property tests work together.
|
|
1519
|
+
|
|
1520
|
+
### Example 1: New Component Development Workflow
|
|
1521
|
+
|
|
1522
|
+
**Scenario**: Creating a new semantic component `Input-Text-Search` that inherits from `Input-Text-Base`.
|
|
1523
|
+
|
|
1524
|
+
#### Phase 1: Pre-Development Validation (Linting)
|
|
1525
|
+
|
|
1526
|
+
Before writing any code, validate the component design:
|
|
1527
|
+
|
|
1528
|
+
```typescript
|
|
1529
|
+
import { validateComponentName, validatePropertyAndAccessibility } from '../validators';
|
|
1530
|
+
|
|
1531
|
+
// Step 1: Validate component name follows Stemma conventions
|
|
1532
|
+
const nameResult = validateComponentName('Input-Text-Search');
|
|
1533
|
+
console.log(nameResult);
|
|
1534
|
+
// ✅ { valid: true, family: 'Input', type: 'Text', variant: 'Search' }
|
|
1535
|
+
|
|
1536
|
+
// Step 2: Validate schema structure
|
|
1537
|
+
const schemaResult = validatePropertyAndAccessibility(
|
|
1538
|
+
'Input-Text-Search',
|
|
1539
|
+
{
|
|
1540
|
+
label: 'Search',
|
|
1541
|
+
placeholder: 'Search...',
|
|
1542
|
+
value: '',
|
|
1543
|
+
// Required properties for Input-Text-Base inheritance
|
|
1544
|
+
},
|
|
1545
|
+
inputTextSearchSchema
|
|
1546
|
+
);
|
|
1547
|
+
// ✅ All required properties present
|
|
1548
|
+
```
|
|
1549
|
+
|
|
1550
|
+
**Checkpoint**: All linting validations pass before proceeding to implementation.
|
|
1551
|
+
|
|
1552
|
+
#### Phase 2: Implementation with Real-Time Linting
|
|
1553
|
+
|
|
1554
|
+
During development, IDE linting provides immediate feedback:
|
|
1555
|
+
|
|
1556
|
+
```typescript
|
|
1557
|
+
// src/components/core/Input-Text-Search/platforms/web/InputTextSearch.web.ts
|
|
1558
|
+
|
|
1559
|
+
import { InputTextBase } from '../../Input-Text-Base';
|
|
1560
|
+
import { validateTokenUsage } from '../../../../../validators';
|
|
1561
|
+
|
|
1562
|
+
export class InputTextSearch extends InputTextBase {
|
|
1563
|
+
// IDE linting catches issues immediately:
|
|
1564
|
+
|
|
1565
|
+
// ❌ BAD - Linting error: Inline style detected
|
|
1566
|
+
// this.style.width = '200px';
|
|
1567
|
+
|
|
1568
|
+
// ✅ GOOD - Uses token reference
|
|
1569
|
+
// this.classList.add('input-text-search--width-standard');
|
|
1570
|
+
|
|
1571
|
+
render() {
|
|
1572
|
+
// Token usage validation during development
|
|
1573
|
+
const tokenResult = validateTokenUsage(this.outerHTML);
|
|
1574
|
+
// Catches any inline styles or hard-coded values
|
|
1575
|
+
}
|
|
1576
|
+
}
|
|
1577
|
+
```
|
|
1578
|
+
|
|
1579
|
+
#### Phase 3: Unit Tests (Runtime Validation)
|
|
1580
|
+
|
|
1581
|
+
After implementation, write unit tests for specific behavior:
|
|
1582
|
+
|
|
1583
|
+
```typescript
|
|
1584
|
+
// src/components/core/Input-Text-Search/__tests__/InputTextSearch.test.ts
|
|
1585
|
+
|
|
1586
|
+
describe('Input-Text-Search', () => {
|
|
1587
|
+
// Test 1: Core functionality
|
|
1588
|
+
it('should render search input with correct type', () => {
|
|
1589
|
+
const input = createInputTextSearch({ label: 'Search' });
|
|
1590
|
+
expect(input.getAttribute('type')).toBe('search');
|
|
1591
|
+
});
|
|
1592
|
+
|
|
1593
|
+
// Test 2: Search-specific behavior
|
|
1594
|
+
it('should show clear button when value is present', () => {
|
|
1595
|
+
const input = createInputTextSearch({ label: 'Search', value: 'test' });
|
|
1596
|
+
const clearButton = input.querySelector('.input-text-search__clear');
|
|
1597
|
+
expect(clearButton).toBeTruthy();
|
|
1598
|
+
});
|
|
1599
|
+
|
|
1600
|
+
// Test 3: Inherited behavior from Input-Text-Base
|
|
1601
|
+
it('should apply float label animation', () => {
|
|
1602
|
+
const input = createInputTextSearch({ label: 'Search' });
|
|
1603
|
+
input.focus();
|
|
1604
|
+
expect(input.classList.contains('input-text--label-floated')).toBe(true);
|
|
1605
|
+
});
|
|
1606
|
+
|
|
1607
|
+
// Test 4: Accessibility
|
|
1608
|
+
it('should have correct ARIA attributes', () => {
|
|
1609
|
+
const input = createInputTextSearch({ label: 'Search' });
|
|
1610
|
+
expect(input.getAttribute('role')).toBe('searchbox');
|
|
1611
|
+
expect(input.getAttribute('aria-label')).toBe('Search');
|
|
1612
|
+
});
|
|
1613
|
+
});
|
|
1614
|
+
```
|
|
1615
|
+
|
|
1616
|
+
#### Phase 4: Integration Tests (Contract Validation)
|
|
1617
|
+
|
|
1618
|
+
Test integration with other components:
|
|
1619
|
+
|
|
1620
|
+
```typescript
|
|
1621
|
+
// src/components/core/Input-Text-Search/__tests__/InputTextSearch.integration.test.ts
|
|
1622
|
+
|
|
1623
|
+
describe('Input-Text-Search Integration', () => {
|
|
1624
|
+
// Test 1: Integration with Icon-Base
|
|
1625
|
+
it('should render search icon using Icon-Base', () => {
|
|
1626
|
+
const input = createInputTextSearch({ label: 'Search', showIcon: true });
|
|
1627
|
+
const iconSpan = input.querySelector('.input-text-search__icon');
|
|
1628
|
+
|
|
1629
|
+
// Verify integration contract - Icon-Base CSS class present
|
|
1630
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
1631
|
+
});
|
|
1632
|
+
|
|
1633
|
+
// Test 2: Integration with Button-CTA (clear button)
|
|
1634
|
+
it('should use Button-CTA for clear action', () => {
|
|
1635
|
+
const input = createInputTextSearch({ label: 'Search', value: 'test' });
|
|
1636
|
+
const clearButton = input.querySelector('.input-text-search__clear');
|
|
1637
|
+
|
|
1638
|
+
// Verify Button-CTA integration
|
|
1639
|
+
expect(clearButton!.classList.contains('button-cta')).toBe(true);
|
|
1640
|
+
});
|
|
1641
|
+
|
|
1642
|
+
// Test 3: Form integration
|
|
1643
|
+
it('should work within form submission', () => {
|
|
1644
|
+
const form = document.createElement('form');
|
|
1645
|
+
const input = createInputTextSearch({ label: 'Search', name: 'query' });
|
|
1646
|
+
form.appendChild(input);
|
|
1647
|
+
|
|
1648
|
+
input.value = 'test query';
|
|
1649
|
+
const formData = new FormData(form);
|
|
1650
|
+
expect(formData.get('query')).toBe('test query');
|
|
1651
|
+
});
|
|
1652
|
+
});
|
|
1653
|
+
```
|
|
1654
|
+
|
|
1655
|
+
#### Phase 5: Property Tests (Universal Properties)
|
|
1656
|
+
|
|
1657
|
+
Validate properties that should hold for all inputs:
|
|
1658
|
+
|
|
1659
|
+
```typescript
|
|
1660
|
+
// src/components/core/Input-Text-Search/__tests__/InputTextSearch.property.test.ts
|
|
1661
|
+
|
|
1662
|
+
import * as fc from 'fast-check';
|
|
1663
|
+
|
|
1664
|
+
describe('Input-Text-Search Properties', () => {
|
|
1665
|
+
// Property 1: Label always renders for non-empty strings
|
|
1666
|
+
it.prop([fc.string().filter(s => s.trim().length > 0)])(
|
|
1667
|
+
'should always render label for non-empty strings',
|
|
1668
|
+
(label) => {
|
|
1669
|
+
const input = createInputTextSearch({ label });
|
|
1670
|
+
const labelElement = input.querySelector('label');
|
|
1671
|
+
expect(labelElement?.textContent).toBe(label);
|
|
1672
|
+
}
|
|
1673
|
+
);
|
|
1674
|
+
|
|
1675
|
+
// Property 2: Value round-trip
|
|
1676
|
+
it.prop([fc.string()])(
|
|
1677
|
+
'should preserve value through get/set cycle',
|
|
1678
|
+
(value) => {
|
|
1679
|
+
const input = createInputTextSearch({ label: 'Search' });
|
|
1680
|
+
input.value = value;
|
|
1681
|
+
expect(input.value).toBe(value);
|
|
1682
|
+
}
|
|
1683
|
+
);
|
|
1684
|
+
|
|
1685
|
+
// Property 3: Clear button visibility
|
|
1686
|
+
it.prop([fc.string().filter(s => s.length > 0)])(
|
|
1687
|
+
'should show clear button for any non-empty value',
|
|
1688
|
+
(value) => {
|
|
1689
|
+
const input = createInputTextSearch({ label: 'Search', value });
|
|
1690
|
+
const clearButton = input.querySelector('.input-text-search__clear');
|
|
1691
|
+
expect(clearButton).toBeTruthy();
|
|
1692
|
+
}
|
|
1693
|
+
);
|
|
1694
|
+
});
|
|
1695
|
+
```
|
|
1696
|
+
|
|
1697
|
+
#### Phase 6: Pre-Merge Validation
|
|
1698
|
+
|
|
1699
|
+
Complete validation checklist before merging:
|
|
1700
|
+
|
|
1701
|
+
```bash
|
|
1702
|
+
# 1. Run all linting validators
|
|
1703
|
+
npm run lint:stemma
|
|
1704
|
+
|
|
1705
|
+
# 2. Run unit tests
|
|
1706
|
+
npm test -- src/components/core/Input-Text-Search/__tests__/InputTextSearch.test.ts
|
|
1707
|
+
|
|
1708
|
+
# 3. Run integration tests
|
|
1709
|
+
npm test -- src/components/core/Input-Text-Search/__tests__/InputTextSearch.integration.test.ts
|
|
1710
|
+
|
|
1711
|
+
# 4. Run property tests
|
|
1712
|
+
npm test -- src/components/core/Input-Text-Search/__tests__/InputTextSearch.property.test.ts
|
|
1713
|
+
|
|
1714
|
+
# 5. Run full test suite
|
|
1715
|
+
npm test
|
|
1716
|
+
```
|
|
1717
|
+
|
|
1718
|
+
---
|
|
1719
|
+
|
|
1720
|
+
### Example 2: Component Migration Workflow
|
|
1721
|
+
|
|
1722
|
+
**Scenario**: Migrating existing `SearchInput` component to Stemma System naming (`Input-Text-Search`).
|
|
1723
|
+
|
|
1724
|
+
#### Phase 1: Pre-Migration Analysis
|
|
1725
|
+
|
|
1726
|
+
```typescript
|
|
1727
|
+
import { validateComponentName } from '../validators';
|
|
1728
|
+
|
|
1729
|
+
// Validate old name (expected to fail)
|
|
1730
|
+
const oldNameResult = validateComponentName('SearchInput');
|
|
1731
|
+
// ❌ { valid: false, error: 'Missing family prefix' }
|
|
1732
|
+
|
|
1733
|
+
// Validate new name
|
|
1734
|
+
const newNameResult = validateComponentName('Input-Text-Search');
|
|
1735
|
+
// ✅ { valid: true, family: 'Input', type: 'Text', variant: 'Search' }
|
|
1736
|
+
```
|
|
1737
|
+
|
|
1738
|
+
#### Phase 2: Create Temporary Migration Tests
|
|
1739
|
+
|
|
1740
|
+
```typescript
|
|
1741
|
+
// TEMPORARY TEST - Delete after migration complete
|
|
1742
|
+
// Retirement Criteria: SearchInput fully migrated to Input-Text-Search
|
|
1743
|
+
|
|
1744
|
+
describe('SearchInput Migration (TEMPORARY)', () => {
|
|
1745
|
+
it('should have backward compatibility alias', () => {
|
|
1746
|
+
// Old import still works during migration
|
|
1747
|
+
const { SearchInput } = require('../legacy/SearchInput');
|
|
1748
|
+
const { InputTextSearch } = require('../Input-Text-Search');
|
|
1749
|
+
|
|
1750
|
+
// Both should produce equivalent output
|
|
1751
|
+
const oldInput = new SearchInput({ label: 'Search' });
|
|
1752
|
+
const newInput = new InputTextSearch({ label: 'Search' });
|
|
1753
|
+
|
|
1754
|
+
expect(oldInput.render()).toEqual(newInput.render());
|
|
1755
|
+
});
|
|
1756
|
+
});
|
|
1757
|
+
```
|
|
1758
|
+
|
|
1759
|
+
#### Phase 3: Update Existing Tests
|
|
1760
|
+
|
|
1761
|
+
```typescript
|
|
1762
|
+
// Before: Tests using old component name
|
|
1763
|
+
describe('SearchInput', () => {
|
|
1764
|
+
it('should render search input', () => {
|
|
1765
|
+
const input = createSearchInput({ label: 'Search' });
|
|
1766
|
+
// ...
|
|
1767
|
+
});
|
|
1768
|
+
});
|
|
1769
|
+
|
|
1770
|
+
// After: Tests using new Stemma System name
|
|
1771
|
+
describe('Input-Text-Search', () => {
|
|
1772
|
+
it('should render search input', () => {
|
|
1773
|
+
const input = createInputTextSearch({ label: 'Search' });
|
|
1774
|
+
// ...
|
|
1775
|
+
});
|
|
1776
|
+
});
|
|
1777
|
+
```
|
|
1778
|
+
|
|
1779
|
+
#### Phase 4: Validate Migration Complete
|
|
1780
|
+
|
|
1781
|
+
```typescript
|
|
1782
|
+
// Run linting to verify all references updated
|
|
1783
|
+
import { validateTokenUsage } from '../validators';
|
|
1784
|
+
|
|
1785
|
+
// Check no references to old component name remain
|
|
1786
|
+
const codebaseResult = validateTokenUsage(codebaseContent);
|
|
1787
|
+
// Should not find 'SearchInput' references
|
|
1788
|
+
```
|
|
1789
|
+
|
|
1790
|
+
#### Phase 5: Delete Temporary Tests
|
|
1791
|
+
|
|
1792
|
+
After migration is complete, delete temporary tests with clear commit message:
|
|
1793
|
+
|
|
1794
|
+
```
|
|
1795
|
+
Delete temporary SearchInput migration tests
|
|
1796
|
+
|
|
1797
|
+
Retirement criteria met:
|
|
1798
|
+
- SearchInput fully migrated to Input-Text-Search
|
|
1799
|
+
- All imports updated to new name
|
|
1800
|
+
- Backward compatibility period complete
|
|
1801
|
+
|
|
1802
|
+
These tests verified migration progress and are no longer needed.
|
|
1803
|
+
```
|
|
1804
|
+
|
|
1805
|
+
---
|
|
1806
|
+
|
|
1807
|
+
### Example 3: Integration Contract Update Workflow
|
|
1808
|
+
|
|
1809
|
+
**Scenario**: Updating Button-CTA to use new Icon-Base sizing tokens.
|
|
1810
|
+
|
|
1811
|
+
#### Phase 1: Validate Contract Change
|
|
1812
|
+
|
|
1813
|
+
```typescript
|
|
1814
|
+
import { validateComponentName, validateTokenUsage } from '../validators';
|
|
1815
|
+
|
|
1816
|
+
// Verify both components follow Stemma conventions
|
|
1817
|
+
validateComponentName('Button-CTA'); // ✅
|
|
1818
|
+
validateComponentName('Icon-Base'); // ✅
|
|
1819
|
+
|
|
1820
|
+
// Document the contract change
|
|
1821
|
+
// OLD: Button-CTA passes pixel values to Icon
|
|
1822
|
+
// NEW: Button-CTA passes token references to Icon
|
|
1823
|
+
```
|
|
1824
|
+
|
|
1825
|
+
#### Phase 2: Update Integration Tests
|
|
1826
|
+
|
|
1827
|
+
```typescript
|
|
1828
|
+
// Before: Tests checked pixel values (implementation detail)
|
|
1829
|
+
it('should render 24px icon for small buttons', () => {
|
|
1830
|
+
const button = createButtonCTA({ size: 'small', icon: 'arrow-right' });
|
|
1831
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1832
|
+
// ❌ BAD - Tests implementation detail
|
|
1833
|
+
expect(iconSpan!.innerHTML).toContain('width="24"');
|
|
1834
|
+
});
|
|
1835
|
+
|
|
1836
|
+
// After: Tests check contract (token-based sizing)
|
|
1837
|
+
it('should use correct icon size token for small buttons', () => {
|
|
1838
|
+
const button = createButtonCTA({ size: 'small', icon: 'arrow-right' });
|
|
1839
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1840
|
+
// ✅ GOOD - Tests integration contract
|
|
1841
|
+
expect(iconSpan!.innerHTML).toContain('icon--size-100');
|
|
1842
|
+
});
|
|
1843
|
+
```
|
|
1844
|
+
|
|
1845
|
+
#### Phase 3: Add Contract Property Tests
|
|
1846
|
+
|
|
1847
|
+
```typescript
|
|
1848
|
+
describe('Button-CTA + Icon-Base Contract Properties', () => {
|
|
1849
|
+
// Property: Icon size always matches button size variant
|
|
1850
|
+
it.prop([fc.constantFrom('small', 'medium', 'large')])(
|
|
1851
|
+
'should use correct icon size for button variant',
|
|
1852
|
+
(size) => {
|
|
1853
|
+
const button = createButtonCTA({ size, icon: 'arrow-right' });
|
|
1854
|
+
const iconSpan = button.querySelector('.button-cta__icon');
|
|
1855
|
+
|
|
1856
|
+
const expectedClass = size === 'large' ? 'icon--size-200' : 'icon--size-100';
|
|
1857
|
+
expect(iconSpan!.innerHTML).toContain(expectedClass);
|
|
1858
|
+
}
|
|
1859
|
+
);
|
|
1860
|
+
});
|
|
1861
|
+
```
|
|
1862
|
+
|
|
1863
|
+
#### Phase 4: Validate No Regression
|
|
1864
|
+
|
|
1865
|
+
```bash
|
|
1866
|
+
# Run integration tests
|
|
1867
|
+
npm test -- src/components/core/Button-CTA/__tests__/ButtonCTA.icon-integration.test.ts
|
|
1868
|
+
|
|
1869
|
+
# Run behavioral contract tests
|
|
1870
|
+
npm test -- src/__tests__/stemma-system/behavioral-contract-validation.test.ts
|
|
1871
|
+
|
|
1872
|
+
# Run cross-platform consistency tests
|
|
1873
|
+
npm test -- src/__tests__/stemma-system/cross-platform-consistency.test.ts
|
|
1874
|
+
```
|
|
1875
|
+
|
|
1876
|
+
---
|
|
1877
|
+
|
|
1878
|
+
### Example 4: Cross-Platform Consistency Workflow
|
|
1879
|
+
|
|
1880
|
+
**Scenario**: Ensuring Input-Text-Email behaves consistently across web, iOS, and Android.
|
|
1881
|
+
|
|
1882
|
+
#### Phase 1: Define Behavioral Contracts
|
|
1883
|
+
|
|
1884
|
+
```yaml
|
|
1885
|
+
# Input-Text-Email.schema.yaml
|
|
1886
|
+
behavioral_contracts:
|
|
1887
|
+
- name: email_validation
|
|
1888
|
+
description: Validates email format on blur
|
|
1889
|
+
platforms: [web, ios, android]
|
|
1890
|
+
|
|
1891
|
+
- name: email_autocomplete
|
|
1892
|
+
description: Provides email autocomplete suggestions
|
|
1893
|
+
platforms: [web, ios, android]
|
|
1894
|
+
|
|
1895
|
+
- name: keyboard_type
|
|
1896
|
+
description: Shows email-optimized keyboard
|
|
1897
|
+
platforms: [ios, android]
|
|
1898
|
+
```
|
|
1899
|
+
|
|
1900
|
+
#### Phase 2: Write Cross-Platform Contract Tests
|
|
1901
|
+
|
|
1902
|
+
```typescript
|
|
1903
|
+
// src/__tests__/stemma-system/input-text-email-contracts.test.ts
|
|
1904
|
+
|
|
1905
|
+
describe('Input-Text-Email Cross-Platform Contracts', () => {
|
|
1906
|
+
const platforms = ['web', 'ios', 'android'];
|
|
1907
|
+
|
|
1908
|
+
platforms.forEach(platform => {
|
|
1909
|
+
describe(`${platform} platform`, () => {
|
|
1910
|
+
// Contract 1: Email validation
|
|
1911
|
+
it('should validate email format on blur', () => {
|
|
1912
|
+
const input = createInputTextEmail({ label: 'Email', platform });
|
|
1913
|
+
input.value = 'invalid-email';
|
|
1914
|
+
input.blur();
|
|
1915
|
+
|
|
1916
|
+
expect(input.validity.valid).toBe(false);
|
|
1917
|
+
expect(input.validationMessage).toContain('email');
|
|
1918
|
+
});
|
|
1919
|
+
|
|
1920
|
+
// Contract 2: Email autocomplete
|
|
1921
|
+
it('should have email autocomplete attribute', () => {
|
|
1922
|
+
const input = createInputTextEmail({ label: 'Email', platform });
|
|
1923
|
+
expect(input.getAttribute('autocomplete')).toBe('email');
|
|
1924
|
+
});
|
|
1925
|
+
});
|
|
1926
|
+
});
|
|
1927
|
+
|
|
1928
|
+
// Platform-specific tests (acceptable variations)
|
|
1929
|
+
describe('Platform-specific behavior', () => {
|
|
1930
|
+
it('should show email keyboard on iOS', () => {
|
|
1931
|
+
const input = createInputTextEmail({ label: 'Email', platform: 'ios' });
|
|
1932
|
+
expect(input.keyboardType).toBe('emailAddress');
|
|
1933
|
+
});
|
|
1934
|
+
|
|
1935
|
+
it('should show email keyboard on Android', () => {
|
|
1936
|
+
const input = createInputTextEmail({ label: 'Email', platform: 'android' });
|
|
1937
|
+
expect(input.inputType).toBe('textEmailAddress');
|
|
1938
|
+
});
|
|
1939
|
+
});
|
|
1940
|
+
});
|
|
1941
|
+
```
|
|
1942
|
+
|
|
1943
|
+
#### Phase 3: Validate with Contract Test Reporter
|
|
1944
|
+
|
|
1945
|
+
```typescript
|
|
1946
|
+
import { ContractTestReporter } from '../stemma-system/contract-test-reporter';
|
|
1947
|
+
|
|
1948
|
+
const reporter = new ContractTestReporter();
|
|
1949
|
+
|
|
1950
|
+
// Run contract validation
|
|
1951
|
+
const results = reporter.validateContracts('Input-Text-Email', [
|
|
1952
|
+
'email_validation',
|
|
1953
|
+
'email_autocomplete',
|
|
1954
|
+
'keyboard_type'
|
|
1955
|
+
]);
|
|
1956
|
+
|
|
1957
|
+
// Generate report
|
|
1958
|
+
console.log(reporter.generateReport());
|
|
1959
|
+
// Output:
|
|
1960
|
+
// Input-Text-Email Contract Validation
|
|
1961
|
+
// =====================================
|
|
1962
|
+
// ✅ email_validation: PASS (web, ios, android)
|
|
1963
|
+
// ✅ email_autocomplete: PASS (web, ios, android)
|
|
1964
|
+
// ✅ keyboard_type: PASS (ios, android) - N/A for web
|
|
1965
|
+
```
|
|
1966
|
+
|
|
1967
|
+
---
|
|
1968
|
+
|
|
1969
|
+
### Workflow Summary by Task Type
|
|
1970
|
+
|
|
1971
|
+
| Task Type | Linting | Unit Tests | Integration Tests | Property Tests | Manual Review |
|
|
1972
|
+
|-----------|---------|------------|-------------------|----------------|---------------|
|
|
1973
|
+
| **New Component** | ✅ Pre-dev + During | ✅ Core behavior | ✅ Dependencies | ✅ Universal props | ✅ Accessibility |
|
|
1974
|
+
| **Component Migration** | ✅ Name validation | ✅ Update existing | ✅ Contract preservation | ⚪ If applicable | ✅ Breaking changes |
|
|
1975
|
+
| **Contract Update** | ✅ Token usage | ⚪ If behavior changes | ✅ Contract tests | ✅ Contract props | ✅ API changes |
|
|
1976
|
+
| **Cross-Platform** | ✅ Schema validation | ✅ Platform-specific | ✅ Contract consistency | ✅ Behavioral props | ✅ UX consistency |
|
|
1977
|
+
| **Bug Fix** | ⚪ If structural | ✅ Regression test | ⚪ If integration | ⚪ If universal | ⚪ If UX impact |
|
|
1978
|
+
|
|
1979
|
+
**Legend**: ✅ Required | ⚪ Conditional | ❌ Not needed
|
|
1980
|
+
|
|
1981
|
+
---
|
|
1982
|
+
|
|
1983
|
+
### Quick Reference: Validation Commands
|
|
1984
|
+
|
|
1985
|
+
```bash
|
|
1986
|
+
# Linting validation
|
|
1987
|
+
npm run lint:stemma # Run all Stemma validators
|
|
1988
|
+
npm run lint:stemma:naming # Component naming only
|
|
1989
|
+
npm run lint:stemma:tokens # Token usage only
|
|
1990
|
+
|
|
1991
|
+
# Unit tests
|
|
1992
|
+
npm test -- path/to/component.test.ts # Single test file
|
|
1993
|
+
npm test -- --testPathPattern=Button # Pattern matching
|
|
1994
|
+
|
|
1995
|
+
# Integration tests
|
|
1996
|
+
npm test -- --testPathPattern=integration
|
|
1997
|
+
|
|
1998
|
+
# Property tests
|
|
1999
|
+
npm test -- --testPathPattern=property
|
|
2000
|
+
|
|
2001
|
+
# Stemma system tests
|
|
2002
|
+
npm test -- src/__tests__/stemma-system/
|
|
2003
|
+
|
|
2004
|
+
# Full validation suite
|
|
2005
|
+
npm test # All tests
|
|
2006
|
+
npm run test:all # Including performance tests
|
|
2007
|
+
```
|
|
2008
|
+
|
|
2009
|
+
---
|
|
2010
|
+
|
|
2011
|
+
## Cross-References
|
|
2012
|
+
|
|
2013
|
+
### Behavioral Contract Validation Framework
|
|
2014
|
+
**File**: `.kiro/steering/Test-Behavioral-Contract-Validation.md`
|
|
2015
|
+
|
|
2016
|
+
**Related Content**:
|
|
2017
|
+
- Behavioral contract validation criteria
|
|
2018
|
+
- Cross-platform consistency validation
|
|
2019
|
+
- Contract test patterns
|
|
2020
|
+
|
|
2021
|
+
**When to Reference**: When writing behavioral contract tests or validating cross-platform consistency.
|
|
2022
|
+
|
|
2023
|
+
### Component Development Guide
|
|
2024
|
+
**File**: `.kiro/steering/Component-Development-Guide.md`
|
|
2025
|
+
|
|
2026
|
+
**Related Content**:
|
|
2027
|
+
- Component testing patterns
|
|
2028
|
+
- Token-based design testing considerations
|
|
2029
|
+
- Cross-platform testing strategies
|
|
2030
|
+
|
|
2031
|
+
**When to Reference**: When writing component-specific tests or understanding component architecture.
|
|
2032
|
+
|
|
2033
|
+
### Spec 017 Design Document
|
|
2034
|
+
**File**: `.kiro/specs/017-component-code-quality-sweep/design.md`
|
|
2035
|
+
|
|
2036
|
+
**Related Content**:
|
|
2037
|
+
- Test lifecycle and maintenance philosophy
|
|
2038
|
+
- Temporary vs permanent test distinctions
|
|
2039
|
+
- Three-tier testing strategy (cleanup-specific, evergreen, existing)
|
|
2040
|
+
|
|
2041
|
+
**When to Reference**: When planning cleanup or migration work that requires temporary tests.
|
|
2042
|
+
|
|
2043
|
+
### Development Workflow
|
|
2044
|
+
**File**: `.kiro/steering/Process-Development-Workflow.md`
|
|
2045
|
+
|
|
2046
|
+
**Related Content**:
|
|
2047
|
+
- Test execution practices
|
|
2048
|
+
- Jest command usage
|
|
2049
|
+
- Test validation during task completion
|
|
2050
|
+
|
|
2051
|
+
**When to Reference**: When running tests or validating task completion.
|
|
2052
|
+
|
|
2053
|
+
### Icon Test Investigation
|
|
2054
|
+
**File**: `.kiro/specs/023-component-token-compliance-audit/findings/icon-test-investigation.md`
|
|
2055
|
+
|
|
2056
|
+
**Related Content**:
|
|
2057
|
+
- Detailed root cause analysis of Icon test failures
|
|
2058
|
+
- Complete fix implementation details
|
|
2059
|
+
- JSDOM and custom element compatibility notes
|
|
2060
|
+
|
|
2061
|
+
**When to Reference**: When debugging similar web component test issues or understanding the full context of Icon test fixes.
|
|
2062
|
+
|
|
2063
|
+
---
|
|
2064
|
+
|
|
2065
|
+
## Quality Standards
|
|
2066
|
+
|
|
2067
|
+
**Test Quality Checklist**:
|
|
2068
|
+
|
|
2069
|
+
- ✅ Tests verify behavior, not implementation details
|
|
2070
|
+
- ✅ Tests check contracts, not internal details
|
|
2071
|
+
- ✅ Tests avoid philosophical preferences
|
|
2072
|
+
- ✅ Evergreen tests have long-term value
|
|
2073
|
+
- ✅ Temporary tests have documented retirement criteria
|
|
2074
|
+
- ✅ Web component tests use proper async setup
|
|
2075
|
+
- ✅ Integration tests focus on integration contracts
|
|
2076
|
+
- ✅ Tests survive refactoring and design evolution
|
|
2077
|
+
- ✅ Tests align with design system principles
|
|
2078
|
+
- ✅ Tests are maintainable and provide clear value
|
|
2079
|
+
|
|
2080
|
+
**Review Questions**:
|
|
2081
|
+
|
|
2082
|
+
1. **Does this test verify a functional requirement?**
|
|
2083
|
+
2. **Will this test survive implementation changes?**
|
|
2084
|
+
3. **Is this test checking behavior or implementation?**
|
|
2085
|
+
4. **Should this test be evergreen or temporary?**
|
|
2086
|
+
5. **Does this test provide long-term value?**
|
|
2087
|
+
6. **Is this test properly handling async behavior?**
|
|
2088
|
+
7. **Is this integration test checking the right contract?**
|
|
2089
|
+
8. **Would I want to maintain this test in 6 months?**
|
|
2090
|
+
|
|
2091
|
+
---
|
|
2092
|
+
|
|
2093
|
+
*This document captures lessons learned from fixing 30 failing Icon tests during Spec 023 (Component Token Compliance Audit). The patterns and anti-patterns documented here apply to all component testing in the DesignerPunk design system.*
|
|
2094
|
+
|