@3fn/core 14.0.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.kiro/steering/AI-Collaboration-Principles.md +9 -3
- package/.kiro/steering/Agent-Directory.md +31 -7
- package/.kiro/steering/Civitas-System-Overview.md +5 -14
- package/.kiro/steering/DesignerPunk-Systems-Overview.md +3 -3
- package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
- package/.kiro/steering/Task-Completion-Protocol.md +17 -16
- package/.kiro/steering/start-up-tasks.md +15 -7
- package/CHANGELOG.md +74 -0
- package/README.md +26 -21
- package/application-mcp-server/src/__tests__/consumerRootLiveReindex.test.ts +118 -0
- package/application-mcp-server/src/__tests__/errorCatalogWiring.test.ts +73 -0
- package/application-mcp-server/src/__tests__/mcpDataRootsDeclaration.test.ts +107 -0
- package/application-mcp-server/src/__tests__/tool-boundary.contract.test.ts +55 -0
- package/application-mcp-server/src/index.ts +249 -59
- package/application-mcp-server/src/indexer/ComponentIndexer.ts +273 -46
- package/application-mcp-server/src/indexer/ModeClassifier.ts +23 -16
- package/application-mcp-server/src/indexer/SemanticOverrideReader.ts +113 -0
- package/application-mcp-server/src/indexer/TokenIndexer.ts +195 -3
- package/application-mcp-server/src/indexer/__tests__/MultiRootIndexing.test.ts +134 -0
- package/application-mcp-server/src/indexer/__tests__/ThemeResolution.test.ts +241 -0
- package/application-mcp-server/src/indexer/__tests__/ThemeRootFollowsIndex.test.ts +216 -0
- package/application-mcp-server/src/indexer/__tests__/fixtures/consumerFixture.ts +84 -0
- package/application-mcp-server/src/indexer/resolveThemeTierRoot.ts +61 -0
- package/application-mcp-server/src/watcher/FileWatcher.ts +20 -7
- package/dist/ComponentTokens.android.kt +12 -12
- package/dist/ComponentTokens.ios.swift +12 -12
- package/dist/ComponentTokens.web.css +3 -3
- package/dist/DesignTokens.android.kt +1 -5
- package/dist/DesignTokens.dtcg.json +388 -122
- package/dist/DesignTokens.figma.json +281 -941
- package/dist/DesignTokens.ios.swift +1 -5
- package/dist/DesignTokens.web.css +5 -5
- package/dist/browser/designerpunk.esm.js +174 -103
- package/dist/browser/designerpunk.esm.min.js +58 -55
- package/dist/browser/designerpunk.umd.js +174 -103
- package/dist/browser/designerpunk.umd.min.js +58 -55
- package/dist/browser/tokens.css +7 -7
- package/dist/build/platforms/AndroidMotionTokenFormatter.d.ts +101 -0
- package/dist/build/platforms/AndroidMotionTokenFormatter.js +220 -0
- package/dist/build/platforms/WebMotionTokenFormatter.d.ts +85 -0
- package/dist/build/platforms/WebMotionTokenFormatter.js +167 -0
- package/dist/build/platforms/iOSMotionTokenFormatter.d.ts +99 -0
- package/dist/build/platforms/iOSMotionTokenFormatter.js +221 -0
- package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
- package/dist/build/tokens/defineComponentTokens.js +26 -0
- package/dist/build/validation/index.d.ts +0 -4
- package/dist/build/validation/index.js +1 -8
- package/dist/cli/attach.d.ts +153 -0
- package/dist/cli/attach.js +423 -0
- package/dist/cli/designerpunk.d.ts +46 -0
- package/dist/cli/designerpunk.js +171 -34
- package/dist/cli/figma-extract.js +10 -1
- package/dist/cli/figma-push.js +11 -2
- package/dist/cli/init.d.ts +36 -5
- package/dist/cli/init.js +348 -143
- package/dist/cli/loadComponentTokens.d.ts +25 -0
- package/dist/cli/loadComponentTokens.js +87 -8
- package/dist/cli/shared/bornRepo.d.ts +50 -0
- package/dist/cli/shared/bornRepo.js +199 -0
- package/dist/cli/shared/errorCatalog.d.ts +130 -0
- package/dist/cli/shared/errorCatalog.js +148 -0
- package/dist/cli/shared/mcpConfig/cc.d.ts +25 -0
- package/dist/cli/shared/mcpConfig/cc.js +156 -0
- package/dist/cli/shared/mcpConfig/kiro.d.ts +53 -0
- package/dist/cli/shared/mcpConfig/kiro.js +140 -0
- package/dist/cli/shared/mcpDataRoots.d.ts +88 -1
- package/dist/cli/shared/mcpDataRoots.js +76 -2
- package/dist/cli/shared/transforms.d.ts +64 -0
- package/dist/cli/shared/transforms.js +138 -0
- package/dist/cli/shared/vocabulary.d.ts +50 -0
- package/dist/cli/shared/vocabulary.js +62 -0
- package/dist/cli/sync/Applier.d.ts +25 -26
- package/dist/cli/sync/Applier.js +37 -73
- package/dist/cli/sync/Classifier.d.ts +70 -6
- package/dist/cli/sync/Classifier.js +123 -84
- package/dist/cli/sync/FileScanner.d.ts +19 -10
- package/dist/cli/sync/FileScanner.js +33 -25
- package/dist/cli/sync/KeyGrain.d.ts +106 -0
- package/dist/cli/sync/KeyGrain.js +301 -0
- package/dist/cli/sync/Manifest.d.ts +147 -12
- package/dist/cli/sync/Manifest.js +276 -21
- package/dist/cli/sync/Migration.d.ts +271 -0
- package/dist/cli/sync/Migration.js +764 -0
- package/dist/cli/sync/NameContract.d.ts +169 -0
- package/dist/cli/sync/NameContract.js +246 -0
- package/dist/cli/sync/RegionGrain.d.ts +118 -0
- package/dist/cli/sync/RegionGrain.js +167 -0
- package/dist/cli/sync/Reporter.d.ts +33 -4
- package/dist/cli/sync/Reporter.js +112 -53
- package/dist/cli/sync/SteeringDirCheck.d.ts +32 -4
- package/dist/cli/sync/SteeringDirCheck.js +62 -14
- package/dist/cli/sync/index.d.ts +125 -6
- package/dist/cli/sync/index.js +716 -66
- package/dist/color/OklchValidator.d.ts +43 -3
- package/dist/color/OklchValidator.js +46 -8
- package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +21 -26
- package/dist/components/core/Avatar-Base/avatar.tokens.js +31 -34
- package/dist/components/core/Avatar-Base/index.d.ts +1 -1
- package/dist/components/core/Avatar-Base/index.js +2 -2
- package/dist/components/core/Button-CTA/Button-CTA.refs.d.ts +83 -0
- package/dist/components/core/Button-CTA/Button-CTA.refs.js +86 -0
- package/dist/components/core/Button-CTA/Button-CTA.tokens.d.ts +20 -10
- package/dist/components/core/Button-CTA/Button-CTA.tokens.js +21 -10
- package/dist/components/core/Button-CTA/index.d.ts +2 -2
- package/dist/components/core/Button-CTA/index.js +3 -3
- package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +28 -14
- package/dist/components/core/Button-Icon/buttonIcon.tokens.js +35 -20
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.d.ts +11 -30
- package/dist/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.js +16 -49
- package/dist/components/core/Container-Base/Container-Base.refs.d.ts +181 -0
- package/dist/components/core/Container-Base/Container-Base.refs.js +223 -0
- package/dist/components/core/Container-Base/index.d.ts +2 -2
- package/dist/components/core/Container-Base/index.js +10 -10
- package/dist/components/core/Container-Base/platforms/web/ContainerBase.web.js +1 -1
- package/dist/components/core/Container-Base/platforms/web/token-mapping.d.ts +27 -9
- package/dist/components/core/Container-Base/platforms/web/token-mapping.js +50 -22
- package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.d.ts +149 -0
- package/dist/components/core/Container-Card-Base/Container-Card-Base.refs.js +207 -0
- package/dist/components/core/Container-Card-Base/index.d.ts +1 -1
- package/dist/components/core/Container-Card-Base/index.js +19 -19
- package/dist/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.js +7 -6
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.d.ts +15 -0
- package/dist/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.js +41 -1
- package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.d.ts +331 -0
- package/dist/components/core/Input-Text-Base/Input-Text-Base.refs.js +164 -0
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.web.js +1 -1
- package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-Email/Input-Text-Email.refs.js +34 -0
- package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-Password/Input-Text-Password.refs.js +34 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.d.ts +30 -0
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +72 -3
- package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.d.ts +20 -0
- package/dist/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.refs.js +34 -0
- package/dist/consumer-canonical/agents/ada.md +331 -0
- package/dist/consumer-canonical/agents/data.md +429 -0
- package/dist/consumer-canonical/agents/kenya.md +400 -0
- package/dist/consumer-canonical/agents/leonardo.md +524 -0
- package/dist/consumer-canonical/agents/lina.md +501 -0
- package/dist/consumer-canonical/agents/sparky.md +395 -0
- package/dist/consumer-canonical/agents/stacy.md +515 -0
- package/dist/consumer-canonical/agents/thurgood.md +463 -0
- package/dist/consumer-canonical/always-set/agent-directory.dispositions.yaml +21 -0
- package/dist/consumer-canonical/always-set/agent-directory.overlay.md +51 -0
- package/dist/consumer-canonical/always-set/ai-collaboration-principles.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/ai-collaboration-principles.overlay.md +26 -0
- package/dist/consumer-canonical/always-set/civitas-system-overview.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/civitas-system-overview.overlay.md +70 -0
- package/dist/consumer-canonical/always-set/core-goals.dispositions.yaml +9 -0
- package/dist/consumer-canonical/always-set/core-goals.overlay.md +74 -0
- package/dist/consumer-canonical/always-set/designerpunk-systems-overview.dispositions.yaml +16 -0
- package/dist/consumer-canonical/always-set/designerpunk-systems-overview.overlay.md +44 -0
- package/dist/consumer-canonical/always-set/spec-feedback-protocol.dispositions.yaml +21 -0
- package/dist/consumer-canonical/always-set/spec-feedback-protocol.overlay.md +44 -0
- package/dist/consumer-canonical/always-set/start-up-tasks.dispositions.yaml +15 -0
- package/dist/consumer-canonical/always-set/start-up-tasks.overlay.md +25 -0
- package/dist/consumer-canonical/always-set/task-completion-protocol.dispositions.yaml +19 -0
- package/dist/consumer-canonical/always-set/task-completion-protocol.overlay.md +116 -0
- package/dist/consumer-canonical/consumer-profile.yaml +9 -0
- package/dist/consumer-canonical/shared/always-set.yaml +113 -0
- package/dist/consumer-canonical/shared/field-dispositions.yaml +85 -0
- package/dist/consumer-canonical/shared/shared-catalog.yaml +19 -0
- package/dist/consumer-canonical/shared/skills-map.yaml +33 -0
- package/dist/consumer-canonical/skills/adaptive/SKILL.md +301 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +238 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +168 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +329 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/dist/consumer-canonical/skills/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/dist/consumer-canonical/skills/edge-to-edge/SKILL.md +426 -0
- package/dist/consumer-canonical/skills/impeccable/SKILL.md +237 -0
- package/dist/consumer-canonical/skills/impeccable/detector-exclusions.md +42 -0
- package/dist/consumer-canonical/skills/impeccable/reference/adapt.md +190 -0
- package/dist/consumer-canonical/skills/impeccable/reference/animate.md +194 -0
- package/dist/consumer-canonical/skills/impeccable/reference/audit.md +150 -0
- package/dist/consumer-canonical/skills/impeccable/reference/bolder.md +113 -0
- package/dist/consumer-canonical/skills/impeccable/reference/brand-dp.md +103 -0
- package/dist/consumer-canonical/skills/impeccable/reference/clarify.md +174 -0
- package/dist/consumer-canonical/skills/impeccable/reference/codex.md +105 -0
- package/dist/consumer-canonical/skills/impeccable/reference/cognitive-load.md +106 -0
- package/dist/consumer-canonical/skills/impeccable/reference/color-and-contrast.md +122 -0
- package/dist/consumer-canonical/skills/impeccable/reference/colorize.md +155 -0
- package/dist/consumer-canonical/skills/impeccable/reference/craft.md +123 -0
- package/dist/consumer-canonical/skills/impeccable/reference/critique.md +245 -0
- package/dist/consumer-canonical/skills/impeccable/reference/delight.md +302 -0
- package/dist/consumer-canonical/skills/impeccable/reference/distill.md +111 -0
- package/dist/consumer-canonical/skills/impeccable/reference/extract-dp.md +43 -0
- package/dist/consumer-canonical/skills/impeccable/reference/harden.md +347 -0
- package/dist/consumer-canonical/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/dist/consumer-canonical/skills/impeccable/reference/interaction-design.md +195 -0
- package/dist/consumer-canonical/skills/impeccable/reference/layout.md +141 -0
- package/dist/consumer-canonical/skills/impeccable/reference/live.md +622 -0
- package/dist/consumer-canonical/skills/impeccable/reference/motion-design.md +109 -0
- package/dist/consumer-canonical/skills/impeccable/reference/onboard.md +234 -0
- package/dist/consumer-canonical/skills/impeccable/reference/optimize.md +258 -0
- package/dist/consumer-canonical/skills/impeccable/reference/overdrive.md +130 -0
- package/dist/consumer-canonical/skills/impeccable/reference/personas.md +179 -0
- package/dist/consumer-canonical/skills/impeccable/reference/polish.md +242 -0
- package/dist/consumer-canonical/skills/impeccable/reference/product-dp.md +79 -0
- package/dist/consumer-canonical/skills/impeccable/reference/quieter.md +99 -0
- package/dist/consumer-canonical/skills/impeccable/reference/responsive-design.md +114 -0
- package/dist/consumer-canonical/skills/impeccable/reference/shape.md +165 -0
- package/dist/consumer-canonical/skills/impeccable/reference/spatial-design.md +100 -0
- package/dist/consumer-canonical/skills/impeccable/reference/typeset.md +126 -0
- package/dist/consumer-canonical/skills/impeccable/reference/typography.md +159 -0
- package/dist/consumer-canonical/skills/impeccable/reference/ux-writing.md +107 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detect.mjs +21 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/browser/injected/index.mjs +1725 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4567 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/rules/checks.mjs +2316 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/color.mjs +156 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/dist/consumer-canonical/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/dist/consumer-canonical/skills/navigation-3/SKILL.md +110 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/index.md +38 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +498 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-advanced.md +155 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-basic.md +744 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +436 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +272 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/dist/consumer-canonical/skills/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/dist/consumer-canonical/skills/theming-styles/SKILL.md +220 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/fundamentals.md +420 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/dist/consumer-canonical/skills/theming-styles/references/android/develop/ui/compose/styles/theming.md +257 -0
- package/dist/generator/consumer-entry.js +5939 -0
- package/dist/generators/DTCGFormatGenerator.d.ts +14 -4
- package/dist/generators/DTCGFormatGenerator.js +35 -18
- package/dist/generators/TokenFileGenerator.js +20 -15
- package/dist/generators/generateTokenIndex.d.ts +14 -0
- package/dist/generators/generateTokenIndex.js +23 -0
- package/dist/generators/transformers/FigmaTransformer.d.ts +35 -0
- package/dist/generators/transformers/FigmaTransformer.js +101 -13
- package/dist/generators/types/DTCGTypes.d.ts +10 -0
- package/dist/mcp/application-mcp.js +1062 -261
- package/dist/mcp/docs-mcp.js +93 -13
- package/dist/mcp/product-mcp.js +539 -41
- package/dist/mcp/tool-manifest.json +184 -0
- package/dist/name-contract.json +4283 -0
- package/dist/tokens/BlurTokens.d.ts +3 -1
- package/dist/tokens/BlurTokens.js +6 -4
- package/dist/tokens/ShadowOffsetTokens.js +14 -14
- package/dist/tokens/SizingTokens.js +3 -3
- package/dist/tokens/TapAreaTokens.d.ts +13 -2
- package/dist/tokens/TapAreaTokens.js +19 -8
- package/dist/tokens/component/progress.d.ts +65 -5
- package/dist/tokens/component/progress.js +79 -18
- package/dist/tokens/semantic/ColorTokens.js +50 -5
- package/dist/tokens/semantic/TypographyTokens.js +10 -10
- package/dist/tokens/themes/dark/SemanticOverrides.js +21 -4
- package/dist/tools/integrity/Invariants.d.ts +23 -8
- package/dist/tools/integrity/Invariants.js +27 -8
- package/dist/tools/integrity/cli/run-audit.js +1 -1
- package/dist/types/PrimitiveToken.d.ts +15 -1
- package/dist/types/generated/TokenTypes.d.ts +1 -1
- package/dist/types/generated/TokenTypes.js +1 -1
- package/dist/types/index.d.ts +1 -0
- package/governance/AI-Collaboration-Framework.md +19 -10
- package/governance/BUILD-SYSTEM-SETUP.md +1 -2
- package/governance/Component-Development-Guide.md +1 -1
- package/governance/Component-Development-Standards.md +19 -18
- package/governance/Component-Family-Avatar.md +6 -6
- package/governance/Component-Family-Badge.md +19 -19
- package/governance/Component-Family-Button.md +26 -26
- package/governance/Component-Family-Chip.md +14 -14
- package/governance/Component-Family-Container.md +12 -12
- package/governance/Component-Family-Form-Inputs.md +61 -61
- package/governance/Component-Family-Icon.md +8 -8
- package/governance/Component-Family-Navigation.md +3 -3
- package/governance/Component-Inheritance-Structures.md +29 -28
- package/governance/Component-Readiness-Status.md +6 -7
- package/governance/Component-Templates.md +26 -26
- package/governance/Contract-System-Reference.md +1 -1
- package/governance/DTCG-Integration-Guide.md +63 -36
- package/governance/DesignerPunk-Integration-Guide.md +57 -61
- package/governance/Figma-Workflow-Guide.md +15 -8
- package/governance/Process-Development-Workflow.md +4 -4
- package/governance/Process-File-Organization.md +1 -4
- package/governance/Process-Hook-Operations.md +6 -7
- package/governance/Process-Integration-Methodology.md +5 -5
- package/governance/Process-Spec-Planning.md +187 -68
- package/governance/Product-Handoff-Protocol.md +27 -2
- package/governance/Rosetta-System-Architecture.md +7 -5
- package/governance/Test-Behavioral-Contract-Validation.md +5 -0
- package/governance/Test-Development-Standards.md +4 -4
- package/governance/Token-Family-Accessibility.md +18 -14
- package/governance/Token-Family-Blend.md +5 -4
- package/governance/Token-Family-Blur.md +8 -8
- package/governance/Token-Family-Color.md +40 -22
- package/governance/Token-Family-Glow.md +26 -24
- package/governance/Token-Family-Layering.md +1 -0
- package/governance/Token-Family-Motion.md +22 -13
- package/governance/Token-Family-Opacity.md +20 -34
- package/governance/Token-Family-Radius.md +4 -2
- package/governance/Token-Family-Responsive.md +4 -4
- package/governance/Token-Family-Shadow.md +69 -46
- package/governance/Token-Family-Spacing.md +22 -12
- package/governance/Token-Family-Typography.md +86 -85
- package/governance/Token-Governance.md +5 -1
- package/governance/Token-Quick-Reference.md +97 -80
- package/governance/Transformer-Development-Guide.md +5 -4
- package/governance/Web-Authoring-Standards.md +1 -1
- package/governance/classification-map.md +706 -10
- package/governance/completion-documentation-guide.md +298 -33
- package/governance/platform-implementation-guidelines.md +3 -3
- package/governance/release-management-system.md +28 -63
- package/mcp-server/src/index.ts +16 -12
- package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +3 -3
- package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +70 -49
- package/mcp-server/src/tools/find-docs.ts +1 -0
- package/mcp-server/src/tools/get-document-full.ts +1 -0
- package/mcp-server/src/tools/get-document-summary.ts +1 -0
- package/mcp-server/src/tools/get-index-health.ts +1 -0
- package/mcp-server/src/tools/get-section.ts +1 -0
- package/mcp-server/src/tools/list-cross-references.ts +1 -0
- package/mcp-server/src/tools/rebuild-index.ts +1 -0
- package/mcp-server/src/tools/validate-metadata.ts +1 -0
- package/package.json +76 -16
- package/src/build/tokens/defineComponentTokens.ts +43 -1
- package/src/cli/templates/mcp-config.json.template +15 -20
- package/src/components/core/Avatar-Base/platforms/android/AvatarPreview.kt +9 -2
- package/src/components/core/Container-Base/Container-Base.schema.yaml +9 -11
- package/src/components/core/Container-Base/platforms/android/ContainerBase.android.kt +5 -5
- package/src/components/core/Container-Base/platforms/ios/ContainerBase.ios.swift +5 -5
- package/src/components/core/Container-Card-Base/platforms/android/ContainerCardBase.android.kt +3 -3
- package/src/components/core/Container-Card-Base/platforms/ios/ContainerCardBase.ios.swift +2 -2
- package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
- package/src/components/core/Nav-Header-Base/component-meta.yaml +0 -1
- package/src/components/core/Nav-Header-Base/contracts.yaml +1 -1
- package/src/components/core/Nav-Header-Page/contracts.yaml +1 -1
- package/src/components/core/Nav-TabBar-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Bar-Base/contracts.yaml +1 -1
- package/src/tokens/BlurTokens.ts +6 -4
- package/src/tokens/ShadowOffsetTokens.ts +14 -14
- package/src/tokens/SizingTokens.ts +3 -3
- package/src/tokens/TapAreaTokens.ts +20 -8
- package/src/tokens/__tests__/BaselineGridAlignmentFlag.test.ts +116 -0
- package/src/tokens/__tests__/BlurTokens.test.ts +10 -2
- package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +5 -3
- package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +11 -11
- package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +22 -20
- package/src/tokens/__tests__/SemanticColorContrast.test.ts +339 -0
- package/src/tokens/__tests__/ShadowOffsetTokens.test.ts +8 -7
- package/src/tokens/__tests__/SizingTokens.test.ts +10 -2
- package/src/tokens/__tests__/TokenCategories.test.ts +1 -1
- package/src/tokens/__tests__/neutral-partition.test.ts +28 -0
- package/src/tokens/component/progress.ts +83 -21
- package/src/tokens/semantic/AccessibilityTokens.README.md +2 -2
- package/src/tokens/semantic/ColorTokens.ts +50 -5
- package/src/tokens/semantic/TypographyTokens.ts +10 -10
- package/src/tokens/semantic/__tests__/ColorTokens.test.ts +8 -4
- package/src/tokens/themes/dark/SemanticOverrides.ts +23 -4
- package/src/types/PrimitiveToken.ts +15 -1
- package/token-index/components.yaml +8 -8
- package/token-index/meta.json +3 -0
- package/token-index/semantics.yaml +21 -15
- package/.kiro/agents/ada-prompt.md +0 -213
- package/.kiro/agents/ada-prompt.md.attribution.json +0 -45
- package/.kiro/agents/ada.json +0 -72
- package/.kiro/agents/ada.json.attribution.json +0 -13
- package/.kiro/agents/data-prompt.md +0 -324
- package/.kiro/agents/data-prompt.md.attribution.json +0 -53
- package/.kiro/agents/data.json +0 -51
- package/.kiro/agents/data.json.attribution.json +0 -13
- package/.kiro/agents/kenya-prompt.md +0 -309
- package/.kiro/agents/kenya-prompt.md.attribution.json +0 -53
- package/.kiro/agents/kenya.json +0 -46
- package/.kiro/agents/kenya.json.attribution.json +0 -13
- package/.kiro/agents/leonardo-prompt.md +0 -359
- package/.kiro/agents/leonardo-prompt.md.attribution.json +0 -45
- package/.kiro/agents/leonardo.json +0 -47
- package/.kiro/agents/leonardo.json.attribution.json +0 -13
- package/.kiro/agents/lina-prompt.md +0 -344
- package/.kiro/agents/lina-prompt.md.attribution.json +0 -53
- package/.kiro/agents/lina.json +0 -64
- package/.kiro/agents/lina.json.attribution.json +0 -13
- package/.kiro/agents/sparky-prompt.md +0 -312
- package/.kiro/agents/sparky-prompt.md.attribution.json +0 -53
- package/.kiro/agents/sparky.json +0 -56
- package/.kiro/agents/sparky.json.attribution.json +0 -13
- package/.kiro/agents/stacy-prompt.md +0 -304
- package/.kiro/agents/stacy-prompt.md.attribution.json +0 -45
- package/.kiro/agents/stacy.json +0 -46
- package/.kiro/agents/stacy.json.attribution.json +0 -13
- package/.kiro/agents/thurgood-prompt.md +0 -363
- package/.kiro/agents/thurgood-prompt.md.attribution.json +0 -45
- package/.kiro/agents/thurgood.json +0 -47
- package/.kiro/agents/thurgood.json.attribution.json +0 -13
- package/.kiro/steering/personal-note.md +0 -35
- package/designerpunk.config.ts +0 -27
- package/dist/android/DesignTokens.android.kt +0 -695
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.d.ts +0 -26
- package/dist/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.js +0 -224
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.d.ts +0 -30
- package/dist/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.js +0 -254
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.d.ts +0 -44
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.js +0 -376
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.d.ts +0 -38
- package/dist/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.js +0 -328
- package/dist/ios/DesignTokens.ios.swift +0 -697
- package/dist/web/DesignTokens.web.css +0 -929
- package/product-template/agents/README.md +0 -73
- package/product-template/agents/ada-prompt.md +0 -83
- package/product-template/agents/data-prompt.md +0 -74
- package/product-template/agents/kenya-prompt.md +0 -74
- package/product-template/agents/leonardo-prompt.md +0 -99
- package/product-template/agents/lina-prompt.md +0 -61
- package/product-template/agents/sparky-prompt.md +0 -66
- package/product-template/agents/stacy-prompt.md +0 -51
- package/product-template/agents/thurgood-prompt.md +0 -64
- package/src/TokenEngine.ts +0 -628
- package/src/__tests__/BuildSystemIntegration.test.ts +0 -485
- package/src/__tests__/ProductMCPIntegration.test.ts +0 -204
- package/src/__tests__/__mocks__/styleMock.js +0 -18
- package/src/__tests__/browser-distribution/build-error-handling.test.ts +0 -143
- package/src/__tests__/browser-distribution/bundle-loading.test.ts +0 -353
- package/src/__tests__/browser-distribution/bundler-resolution.test.ts +0 -223
- package/src/__tests__/browser-distribution/component-registration.test.ts +0 -217
- package/src/__tests__/browser-distribution/css-bundling.test.ts +0 -233
- package/src/__tests__/browser-distribution/demo-system.test.ts +0 -588
- package/src/__tests__/browser-distribution/mcp-format-compliance.property.test.ts +0 -379
- package/src/__tests__/browser-distribution/mcp-queryability.test.ts +0 -342
- package/src/__tests__/browser-distribution/minification-effectiveness.property.test.ts +0 -188
- package/src/__tests__/browser-distribution/registration-idempotency.property.test.ts +0 -372
- package/src/__tests__/browser-distribution/soft-ceiling-warning.test.ts +0 -161
- package/src/__tests__/browser-distribution/token-completeness.property.test.ts +0 -412
- package/src/__tests__/browser-distribution/token-loading.test.ts +0 -344
- package/src/__tests__/browser-distribution/umd-bundle-loading.test.ts +0 -169
- package/src/__tests__/console-allowlist.json +0 -14
- package/src/__tests__/console-fail-setup.ts +0 -169
- package/src/__tests__/examples/improved-test-example.test.ts +0 -120
- package/src/__tests__/expected-exports.json +0 -66
- package/src/__tests__/export-contracts.test.ts +0 -83
- package/src/__tests__/fixtures/acknowledged-differences.json +0 -127
- package/src/__tests__/fixtures/acknowledged-differences.schema.json +0 -113
- package/src/__tests__/fixtures/acknowledged-differences.types.ts +0 -230
- package/src/__tests__/fixtures/tokenFixtures.ts +0 -248
- package/src/__tests__/helpers/configModuleLoader.ts +0 -20
- package/src/__tests__/helpers/tsModuleLoader.ts +0 -24
- package/src/__tests__/helpers/web-component-test-utils.ts +0 -39
- package/src/__tests__/integration/BlendCrossPlatformConsistency.test.ts +0 -505
- package/src/__tests__/integration/BuildSystemCompatibility.test.ts +0 -551
- package/src/__tests__/integration/CrossPlatformConsistency.test.ts +0 -855
- package/src/__tests__/integration/EndToEndWorkflow.test.ts +0 -601
- package/src/__tests__/integration/ErrorHandling.test.ts +0 -459
- package/src/__tests__/integration/OpacityPlatformTranslation.test.ts +0 -364
- package/src/__tests__/integration/PerformanceValidation.test.ts +0 -887
- package/src/__tests__/integration/SemanticTokenGeneration.test.ts +0 -451
- package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +0 -139
- package/src/__tests__/integration/TokenSystemIntegration.test.ts +0 -890
- package/src/__tests__/integration/ValidationPipeline.test.ts +0 -404
- package/src/__tests__/package-drift-validation.test.ts +0 -249
- package/src/__tests__/performance/GenerationPerformance.test.ts +0 -409
- package/src/__tests__/performance/OptimizationValidation.test.ts +0 -509
- package/src/__tests__/platform-parity/ProgressPlatformParity.test.ts +0 -546
- package/src/__tests__/spec073-opacity-architecture.test.ts +0 -344
- package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +0 -520
- package/src/__tests__/stemma-system/composition-compliance-validation.test.ts +0 -162
- package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +0 -184
- package/src/__tests__/stemma-system/contract-existence-validation.test.ts +0 -43
- package/src/__tests__/stemma-system/contract-test-reporter.ts +0 -269
- package/src/__tests__/stemma-system/cross-platform-consistency.test.ts +0 -564
- package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +0 -710
- package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +0 -298
- package/src/__tests__/stemma-system/mcp-component-integration.test.ts +0 -445
- package/src/analytics/PrimitiveTokenFallbackTracker.ts +0 -228
- package/src/analytics/SemanticTokenUsageTracker.ts +0 -193
- package/src/analytics/StrategicFlexibilityTracker.ts +0 -226
- package/src/analytics/TokenUsageTracker.ts +0 -177
- package/src/analytics/UsagePatternAnalyzer.ts +0 -177
- package/src/analytics/__tests__/UsageTracking.test.ts +0 -647
- package/src/analytics/index.ts +0 -42
- package/src/assets/fonts/__tests__/androidFontLoadingValidation.test.ts +0 -600
- package/src/assets/fonts/__tests__/fontLoading.test.ts +0 -341
- package/src/assets/fonts/__tests__/iosFontConfiguration.test.ts +0 -256
- package/src/assets/fonts/__tests__/iosFontLoadingValidation.test.ts +0 -465
- package/src/assets/fonts/inter/Inter-Bold.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Bold.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Medium.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Medium.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-Regular.ttf +0 -0
- package/src/assets/fonts/inter/Inter-Regular.woff2 +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.ttf +0 -0
- package/src/assets/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/src/assets/fonts/inter/inter.css +0 -49
- package/src/blend/BlendCalculator.ts +0 -120
- package/src/blend/ColorSpaceUtils.ts +0 -325
- package/src/blend/OklchBlendCalculator.ts +0 -82
- package/src/blend/ThemeAwareBlendUtilities.web.ts +0 -323
- package/src/blend/__tests__/BlendCalculator.test.ts +0 -393
- package/src/blend/__tests__/BlendUtilities.property.test.ts +0 -600
- package/src/blend/__tests__/ColorSpaceUtils.test.ts +0 -885
- package/src/blend/__tests__/InteractionStateAudit.test.ts +0 -238
- package/src/blend/__tests__/OklchBlendCalculator.test.ts +0 -134
- package/src/blend/__tests__/ThemeAwareBlendUtilities.test.ts +0 -200
- package/src/blend/__tests__/ThemeSwitching.test.ts +0 -508
- package/src/blend/index.ts +0 -37
- package/src/browser-entry.ts +0 -270
- package/src/build/.gitkeep +0 -1
- package/src/build/BuildOrchestrator.ts +0 -663
- package/src/build/__tests__/AndroidBuildIntegration.test.ts +0 -437
- package/src/build/__tests__/AndroidMotionTokenGeneration.test.ts +0 -256
- package/src/build/__tests__/BuildOrchestrator.test.ts +0 -562
- package/src/build/__tests__/MotionTokenCrossPlatformIntegration.test.ts +0 -424
- package/src/build/__tests__/WebCSSTokenGeneration.test.ts +0 -271
- package/src/build/__tests__/WebMotionTokenGeneration.test.ts +0 -305
- package/src/build/__tests__/WebNPMPackageStructure.test.ts +0 -447
- package/src/build/__tests__/iOSMotionTokenGeneration.test.ts +0 -298
- package/src/build/errors/BuildError.ts +0 -140
- package/src/build/errors/ErrorDocumentation.ts +0 -638
- package/src/build/errors/ErrorHandler.ts +0 -406
- package/src/build/errors/ErrorReporter.ts +0 -573
- package/src/build/errors/PlatformGenerationError.ts +0 -201
- package/src/build/errors/README.md +0 -486
- package/src/build/errors/RecoveryStrategy.ts +0 -393
- package/src/build/errors/TokenGenerationError.ts +0 -196
- package/src/build/errors/TokenReferenceError.ts +0 -204
- package/src/build/errors/__tests__/BuildError.test.ts +0 -212
- package/src/build/errors/__tests__/ErrorDocumentation.example.ts +0 -272
- package/src/build/errors/__tests__/ErrorDocumentation.test.ts +0 -458
- package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +0 -303
- package/src/build/errors/__tests__/ErrorHandler.test.ts +0 -502
- package/src/build/errors/__tests__/ErrorReporter.test.ts +0 -581
- package/src/build/errors/__tests__/MotionTokenErrors.test.ts +0 -392
- package/src/build/errors/__tests__/RecoveryStrategy.test.ts +0 -643
- package/src/build/errors/index.ts +0 -90
- package/src/build/index.ts +0 -73
- package/src/build/orchestration/IncrementalBuilder.ts +0 -532
- package/src/build/orchestration/ParallelExecutor.ts +0 -336
- package/src/build/orchestration/ProgressTracker.ts +0 -582
- package/src/build/orchestration/SequentialExecutor.ts +0 -305
- package/src/build/orchestration/__tests__/IncrementalBuilder.test.ts +0 -354
- package/src/build/orchestration/__tests__/ParallelExecutor.integration.test.ts +0 -295
- package/src/build/orchestration/__tests__/ParallelExecutor.test.ts +0 -493
- package/src/build/orchestration/__tests__/ProgressTracker.test.ts +0 -529
- package/src/build/orchestration/__tests__/SequentialExecutor.integration.test.ts +0 -202
- package/src/build/orchestration/__tests__/SequentialExecutor.test.ts +0 -232
- package/src/build/orchestration/index.ts +0 -35
- package/src/build/platforms/.gitkeep +0 -1
- package/src/build/platforms/AndroidBuilder.ts +0 -1366
- package/src/build/platforms/AndroidShadowGenerator.ts +0 -394
- package/src/build/platforms/IOSShadowGenerator.ts +0 -324
- package/src/build/platforms/PlatformBuilder.ts +0 -131
- package/src/build/platforms/WebBuilder.ts +0 -1414
- package/src/build/platforms/WebShadowGenerator.ts +0 -288
- package/src/build/platforms/__tests__/AndroidBuilder.tokenGeneration.test.ts +0 -146
- package/src/build/platforms/__tests__/AndroidShadowGenerator.test.ts +0 -195
- package/src/build/platforms/__tests__/IOSShadowGenerator.test.ts +0 -156
- package/src/build/platforms/__tests__/WebShadowGenerator.test.ts +0 -123
- package/src/build/platforms/__tests__/iOSBuilder.test.ts +0 -1599
- package/src/build/platforms/iOSBuilder.ts +0 -1746
- package/src/build/platforms/index.ts +0 -9
- package/src/build/product/ProductTokenGenerator.ts +0 -162
- package/src/build/product/TokenIndexReader.ts +0 -78
- package/src/build/product/__tests__/KotlinEmitter.test.ts +0 -109
- package/src/build/product/__tests__/ProductTokenGenerator.test.ts +0 -135
- package/src/build/product/__tests__/SwiftEmitter.test.ts +0 -90
- package/src/build/product/__tests__/TokenIndexReader.test.ts +0 -85
- package/src/build/product/__tests__/WebEmitter.test.ts +0 -111
- package/src/build/product/__tests__/fixtures/tokens/layout.yaml +0 -21
- package/src/build/product/__tests__/fixtures/tokens/motion.yaml +0 -11
- package/src/build/product/__tests__/fixtures/tokens/visualization.yaml +0 -8
- package/src/build/product/emitters/KotlinEmitter.ts +0 -83
- package/src/build/product/emitters/SwiftEmitter.ts +0 -95
- package/src/build/product/emitters/WebEmitter.ts +0 -69
- package/src/build/tokens/.gitkeep +0 -1
- package/src/build/tokens/__tests__/ClassInvariantGuard.test.ts +0 -167
- package/src/build/tokens/__tests__/ComponentTokenGenerator.test.ts +0 -285
- package/src/build/tokens/__tests__/TokenIntegrator.test.ts +0 -319
- package/src/build/tokens/__tests__/TokenSelector.test.ts +0 -264
- package/src/build/tokens/__tests__/UnitConverter.applyScaleWithRounding.test.ts +0 -160
- package/src/build/tokens/__tests__/UnitConverter.test.ts +0 -331
- package/src/build/tokens/__tests__/brand-dual-instance.test.ts +0 -135
- package/src/build/tokens/__tests__/defineComponentTokens.test.ts +0 -440
- package/src/build/types/.gitkeep +0 -1
- package/src/build/types/BuildConfig.ts +0 -123
- package/src/build/types/BuildOrchestrator.ts +0 -114
- package/src/build/types/BuildResult.ts +0 -125
- package/src/build/types/index.ts +0 -39
- package/src/build/validation/.gitkeep +0 -1
- package/src/build/validation/AndroidBuildValidator.ts +0 -630
- package/src/build/validation/CrossPlatformValidationReporter.ts +0 -1267
- package/src/build/validation/InterfaceContractValidator.ts +0 -417
- package/src/build/validation/InterfaceValidator.ts +0 -326
- package/src/build/validation/MathematicalConsistencyValidator.ts +0 -874
- package/src/build/validation/MethodSignatureValidator.ts +0 -374
- package/src/build/validation/PropertyTypeValidator.ts +0 -312
- package/src/build/validation/TokenComparator.ts +0 -796
- package/src/build/validation/ValidationReporter.example.ts +0 -310
- package/src/build/validation/ValidationReporter.ts +0 -745
- package/src/build/validation/WebBuildValidator.ts +0 -583
- package/src/build/validation/__tests__/AndroidBuildValidator.test.ts +0 -522
- package/src/build/validation/__tests__/CrossPlatformValidationReporter.test.ts +0 -593
- package/src/build/validation/__tests__/InterfaceContractValidator.test.ts +0 -647
- package/src/build/validation/__tests__/InterfaceValidation.functional.test.ts +0 -360
- package/src/build/validation/__tests__/InterfaceValidator.test.ts +0 -318
- package/src/build/validation/__tests__/MethodSignatureValidator.test.ts +0 -625
- package/src/build/validation/__tests__/MotionTokenCrossPlatformValidation.test.ts +0 -305
- package/src/build/validation/__tests__/MotionTokenValidation.test.ts +0 -309
- package/src/build/validation/__tests__/PropertyTypeValidator.test.ts +0 -557
- package/src/build/validation/__tests__/TokenComparator.test.ts +0 -358
- package/src/build/validation/__tests__/ValidationReporter.integration.test.ts +0 -424
- package/src/build/validation/__tests__/ValidationReporter.test.ts +0 -793
- package/src/build/validation/__tests__/WebBuildValidator.test.ts +0 -495
- package/src/build/validation/iOSBuildValidator.ts +0 -783
- package/src/build/validation/index.ts +0 -74
- package/src/build/validation/types/InterfaceDefinition.ts +0 -101
- package/src/build/validation/types/ValidationResult.ts +0 -114
- package/src/build/workflow/BuildMode.ts +0 -336
- package/src/build/workflow/CICDIntegration.ts +0 -503
- package/src/build/workflow/ConfigHelpers.example.ts +0 -317
- package/src/build/workflow/ConfigHelpers.ts +0 -834
- package/src/build/workflow/README.md +0 -327
- package/src/build/workflow/SourceMapGenerator.ts +0 -362
- package/src/build/workflow/__tests__/BuildMode.test.ts +0 -544
- package/src/build/workflow/__tests__/CICDIntegration.test.ts +0 -602
- package/src/build/workflow/__tests__/ConfigHelpers.test.ts +0 -559
- package/src/build/workflow/__tests__/SourceMapGenerator.test.ts +0 -421
- package/src/build/workflow/index.ts +0 -42
- package/src/cli/__tests__/Applier.test.ts +0 -202
- package/src/cli/__tests__/Classifier.test.ts +0 -187
- package/src/cli/__tests__/FileScanner.test.ts +0 -108
- package/src/cli/__tests__/IgnoreFilter.test.ts +0 -92
- package/src/cli/__tests__/Manifest.test.ts +0 -107
- package/src/cli/__tests__/PackageResolver.test.ts +0 -66
- package/src/cli/__tests__/Prompter.test.ts +0 -165
- package/src/cli/__tests__/Reporter.test.ts +0 -128
- package/src/cli/__tests__/backward-compat.test.ts +0 -142
- package/src/cli/__tests__/figma-extract.test.ts +0 -342
- package/src/cli/__tests__/figma-push.test.ts +0 -350
- package/src/cli/__tests__/init.test.ts +0 -293
- package/src/cli/__tests__/loadComponentTokens.test.ts +0 -187
- package/src/cli/__tests__/pipeline-independence.test.ts +0 -127
- package/src/cli/__tests__/product-only.test.ts +0 -130
- package/src/cli/__tests__/resolveTokens.test.ts +0 -88
- package/src/cli/__tests__/staleness.test.ts +0 -132
- package/src/cli/__tests__/sync.test.ts +0 -199
- package/src/cli/__tests__/validate.test.ts +0 -69
- package/src/cli/designerpunk.ts +0 -410
- package/src/cli/figma-extract.ts +0 -331
- package/src/cli/figma-push.ts +0 -288
- package/src/cli/generateProductTokens.ts +0 -69
- package/src/cli/init.ts +0 -481
- package/src/cli/loadComponentTokens.ts +0 -145
- package/src/cli/resolveTokens.ts +0 -123
- package/src/cli/shared/mcpDataRoots.ts +0 -122
- package/src/cli/shared/resolvePackageRoot.ts +0 -58
- package/src/cli/shared/transforms.ts +0 -18
- package/src/cli/staleness.ts +0 -81
- package/src/cli/sync/Applier.ts +0 -128
- package/src/cli/sync/Classifier.ts +0 -130
- package/src/cli/sync/FileScanner.ts +0 -64
- package/src/cli/sync/IgnoreFilter.ts +0 -44
- package/src/cli/sync/Manifest.ts +0 -64
- package/src/cli/sync/PackageResolver.ts +0 -40
- package/src/cli/sync/Prompter.ts +0 -173
- package/src/cli/sync/Reporter.ts +0 -78
- package/src/cli/sync/SteeringDirCheck.ts +0 -166
- package/src/cli/sync/index.ts +0 -115
- package/src/cli/validate.ts +0 -135
- package/src/cli/validateProductTokens.ts +0 -55
- package/src/color/OklchConverter.ts +0 -284
- package/src/color/OklchValidator.ts +0 -186
- package/src/color/__tests__/OklchConverter.test.ts +0 -232
- package/src/color/__tests__/OklchRegression.test.ts +0 -101
- package/src/color/__tests__/OklchValidator.test.ts +0 -199
- package/src/color/__tests__/WcagContrast.test.ts +0 -76
- package/src/components/__tests__/BlendTokenUsageValidation.test.ts +0 -726
- package/src/components/__tests__/DynamicImportGuard.test.ts +0 -226
- package/src/components/__tests__/ExtensionLintPolicy.test.ts +0 -113
- package/src/components/__tests__/TokenCompliance.test.ts +0 -921
- package/src/components/__tests__/colorInheritanceValidation.test.ts +0 -267
- package/src/components/__tests__/componentTypographyInheritance.test.ts +0 -326
- package/src/components/core/Avatar-Base/README.md +0 -366
- package/src/components/core/Avatar-Base/__tests__/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +0 -597
- package/src/components/core/Avatar-Base/__tests__/Avatar.icon-integration.test.ts +0 -656
- package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +0 -396
- package/src/components/core/Avatar-Base/__tests__/Avatar.lifecycle.test.ts +0 -545
- package/src/components/core/Avatar-Base/__tests__/Avatar.rendering.test.ts +0 -505
- package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +0 -701
- package/src/components/core/Avatar-Base/avatar.tokens.ts +0 -376
- package/src/components/core/Avatar-Base/index.ts +0 -25
- package/src/components/core/Avatar-Base/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/platforms/web/.gitkeep +0 -3
- package/src/components/core/Avatar-Base/platforms/web/Avatar.styles.css +0 -595
- package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +0 -892
- package/src/components/core/Avatar-Base/platforms/web/hexagon-clip.svg +0 -87
- package/src/components/core/Avatar-Base/tokens/.gitkeep +0 -4
- package/src/components/core/Avatar-Base/types.ts +0 -86
- package/src/components/core/Badge-Count-Base/README.md +0 -323
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.stemma.test.ts +0 -548
- package/src/components/core/Badge-Count-Base/__tests__/BadgeCountBase.test.ts +0 -452
- package/src/components/core/Badge-Count-Base/__tests__/test-utils.ts +0 -244
- package/src/components/core/Badge-Count-Base/index.ts +0 -37
- package/src/components/core/Badge-Count-Base/platforms/ios/.gitkeep +0 -1
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.styles.css +0 -148
- package/src/components/core/Badge-Count-Base/platforms/web/BadgeCountBase.web.ts +0 -363
- package/src/components/core/Badge-Count-Base/types.ts +0 -150
- package/src/components/core/Badge-Count-Notification/README.md +0 -396
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.stemma.test.ts +0 -571
- package/src/components/core/Badge-Count-Notification/__tests__/BadgeCountNotification.test.ts +0 -490
- package/src/components/core/Badge-Count-Notification/__tests__/test-utils.ts +0 -256
- package/src/components/core/Badge-Count-Notification/index.ts +0 -60
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.styles.css +0 -182
- package/src/components/core/Badge-Count-Notification/platforms/web/BadgeCountNotification.web.ts +0 -401
- package/src/components/core/Badge-Count-Notification/tokens.ts +0 -124
- package/src/components/core/Badge-Count-Notification/types.ts +0 -119
- package/src/components/core/Badge-Label-Base/README.md +0 -251
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.stemma.test.ts +0 -549
- package/src/components/core/Badge-Label-Base/__tests__/BadgeLabelBase.test.ts +0 -439
- package/src/components/core/Badge-Label-Base/__tests__/test-utils.ts +0 -269
- package/src/components/core/Badge-Label-Base/__tests__/tokens.test.ts +0 -88
- package/src/components/core/Badge-Label-Base/index.ts +0 -41
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.styles.css +0 -166
- package/src/components/core/Badge-Label-Base/platforms/web/BadgeLabelBase.web.ts +0 -340
- package/src/components/core/Badge-Label-Base/tokens.ts +0 -80
- package/src/components/core/Badge-Label-Base/types.ts +0 -148
- package/src/components/core/Button-CTA/Button-CTA.tokens.ts +0 -79
- package/src/components/core/Button-CTA/README.md +0 -293
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.alignment.test.ts +0 -355
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +0 -698
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.tokens.test.ts +0 -89
- package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -209
- package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -185
- package/src/components/core/Button-CTA/examples/BasicUsage.html +0 -133
- package/src/components/core/Button-CTA/examples/BasicUsage.tsx +0 -219
- package/src/components/core/Button-CTA/examples/Variants.html +0 -263
- package/src/components/core/Button-CTA/examples/WithIcon.html +0 -166
- package/src/components/core/Button-CTA/index.ts +0 -20
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +0 -395
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +0 -644
- package/src/components/core/Button-CTA/platforms/web/__tests__/ButtonCTA.icon-integration.test.ts +0 -476
- package/src/components/core/Button-CTA/types.ts +0 -239
- package/src/components/core/Button-Icon/README.md +0 -371
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.alignment.test.ts +0 -358
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties-8-13.test.ts +0 -953
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.properties.test.ts +0 -920
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.stemma.test.ts +0 -622
- package/src/components/core/Button-Icon/__tests__/ButtonIcon.unit.test.ts +0 -560
- package/src/components/core/Button-Icon/__tests__/setup.test.ts +0 -361
- package/src/components/core/Button-Icon/__tests__/test-utils.ts +0 -248
- package/src/components/core/Button-Icon/buttonIcon.tokens.ts +0 -202
- package/src/components/core/Button-Icon/platforms/web/.gitkeep +0 -4
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.css +0 -600
- package/src/components/core/Button-Icon/platforms/web/ButtonIcon.web.ts +0 -625
- package/src/components/core/Button-Icon/types.ts +0 -186
- package/src/components/core/Button-VerticalList-Item/Button-VerticalList-Item.tokens.ts +0 -112
- package/src/components/core/Button-VerticalList-Item/README.md +0 -450
- package/src/components/core/Button-VerticalList-Item/__tests__/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.alignment.test.ts +0 -271
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.failLoudly.test.ts +0 -106
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.integration.test.ts +0 -480
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.properties.test.ts +0 -634
- package/src/components/core/Button-VerticalList-Item/__tests__/ButtonVerticalListItem.unit.test.ts +0 -746
- package/src/components/core/Button-VerticalList-Item/__tests__/rtlSupport.test.ts +0 -206
- package/src/components/core/Button-VerticalList-Item/__tests__/test-utils.ts +0 -297
- package/src/components/core/Button-VerticalList-Item/__tests__/visualStateMapping.test.ts +0 -419
- package/src/components/core/Button-VerticalList-Item/index.ts +0 -49
- package/src/components/core/Button-VerticalList-Item/platforms/android/VerticalListButtonItemTest.kt +0 -1109
- package/src/components/core/Button-VerticalList-Item/platforms/ios/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/platforms/ios/VerticalListButtonItemTests.swift +0 -794
- package/src/components/core/Button-VerticalList-Item/platforms/web/.gitkeep +0 -2
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.styles.css +0 -459
- package/src/components/core/Button-VerticalList-Item/platforms/web/ButtonVerticalListItem.web.ts +0 -1030
- package/src/components/core/Button-VerticalList-Item/platforms/web/visualStateMapping.ts +0 -411
- package/src/components/core/Button-VerticalList-Item/types.ts +0 -338
- package/src/components/core/Button-VerticalList-Set/README.md +0 -578
- package/src/components/core/Button-VerticalList-Set/__tests__/.gitkeep +0 -5
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.integration.test.ts +0 -676
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property.test.ts +0 -786
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.property2.test.ts +0 -1109
- package/src/components/core/Button-VerticalList-Set/__tests__/ButtonVerticalListSet.unit.test.ts +0 -924
- package/src/components/core/Button-VerticalList-Set/__tests__/animationTiming.test.ts +0 -182
- package/src/components/core/Button-VerticalList-Set/__tests__/crossPlatformConsistency.test.ts +0 -685
- package/src/components/core/Button-VerticalList-Set/__tests__/deriveItemStates.test.ts +0 -179
- package/src/components/core/Button-VerticalList-Set/__tests__/validation.test.ts +0 -275
- package/src/components/core/Button-VerticalList-Set/index.ts +0 -32
- package/src/components/core/Button-VerticalList-Set/platforms/android/ButtonVerticalListSetTest.kt +0 -961
- package/src/components/core/Button-VerticalList-Set/platforms/ios/.gitkeep +0 -0
- package/src/components/core/Button-VerticalList-Set/platforms/ios/ButtonVerticalListSetTests.swift +0 -475
- package/src/components/core/Button-VerticalList-Set/platforms/web/.gitkeep +0 -4
- package/src/components/core/Button-VerticalList-Set/platforms/web/Button-VerticalList-Set.styles.css +0 -167
- package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts +0 -1446
- package/src/components/core/Button-VerticalList-Set/types.ts +0 -788
- package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +0 -534
- package/src/components/core/Chip-Base/index.ts +0 -40
- package/src/components/core/Chip-Base/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Chip-Base/platforms/web/.gitkeep +0 -5
- package/src/components/core/Chip-Base/platforms/web/ChipBase.styles.css +0 -280
- package/src/components/core/Chip-Base/platforms/web/ChipBase.web.ts +0 -480
- package/src/components/core/Chip-Base/types.ts +0 -189
- package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +0 -592
- package/src/components/core/Chip-Filter/index.ts +0 -34
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.styles.css +0 -105
- package/src/components/core/Chip-Filter/platforms/web/ChipFilter.web.ts +0 -539
- package/src/components/core/Chip-Filter/types.ts +0 -47
- package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +0 -472
- package/src/components/core/Chip-Input/index.ts +0 -35
- package/src/components/core/Chip-Input/platforms/ios/.gitkeep +0 -3
- package/src/components/core/Chip-Input/platforms/web/ChipInput.styles.css +0 -99
- package/src/components/core/Chip-Input/platforms/web/ChipInput.web.ts +0 -485
- package/src/components/core/Chip-Input/types.ts +0 -35
- package/src/components/core/Container-Base/README.md +0 -450
- package/src/components/core/Container-Base/__tests__/ContainerBase.test.ts +0 -712
- package/src/components/core/Container-Base/index.ts +0 -47
- package/src/components/core/Container-Base/platforms/web/ContainerBase.web.ts +0 -405
- package/src/components/core/Container-Base/platforms/web/styles.css +0 -198
- package/src/components/core/Container-Base/platforms/web/token-mapping.ts +0 -573
- package/src/components/core/Container-Base/tokens.ts +0 -241
- package/src/components/core/Container-Base/types.ts +0 -307
- package/src/components/core/Container-Card-Base/README.md +0 -506
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.composition.test.ts +0 -167
- package/src/components/core/Container-Card-Base/__tests__/ContainerCardBase.test.ts +0 -646
- package/src/components/core/Container-Card-Base/index.ts +0 -64
- package/src/components/core/Container-Card-Base/platforms/web/ContainerCardBase.web.ts +0 -373
- package/src/components/core/Container-Card-Base/tokens.ts +0 -224
- package/src/components/core/Container-Card-Base/types.ts +0 -332
- package/src/components/core/Icon-Base/README.md +0 -168
- package/src/components/core/Icon-Base/__tests__/IconBase.test.ts +0 -192
- package/src/components/core/Icon-Base/index.ts +0 -34
- package/src/components/core/Icon-Base/platforms/ios/ASSET_CATALOG_SETUP.md +0 -239
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Contents.json +0 -6
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/Contents.json +0 -9
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/alert-circle.imageset/alert-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-down.imageset/arrow-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-left.imageset/arrow-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-right.imageset/arrow-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/arrow-up.imageset/arrow-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/award.imageset/award.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/bell.imageset/bell.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/briefcase.imageset/briefcase.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/calendar.imageset/calendar.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check-circle.imageset/check-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/check.imageset/check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-down.imageset/chevron-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-left.imageset/chevron-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/chevron-right.imageset/chevron-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/circle.imageset/circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/clock.imageset/clock.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/credit-card.imageset/credit-card.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/dollar-sign.imageset/dollar-sign.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/external-link.imageset/external-link.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye-off.imageset/eye-off.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/eye.imageset/eye.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/file-text.imageset/file-text.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/filter.imageset/filter.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/globe.imageset/globe.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/heart.imageset/heart.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/info.imageset/info.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/mail.imageset/mail.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/map-pin.imageset/map-pin.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/minus.imageset/minus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-horizontal.imageset/more-horizontal.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/more-vertical.imageset/more-vertical.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/phone.imageset/phone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/plus.imageset/plus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/refresh-cw.imageset/refresh-cw.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/save.imageset/save.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/search.imageset/search.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/settings.imageset/settings.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share-2.imageset/share-2.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/share.imageset/share.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/shield.imageset/shield.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smartphone.imageset/smartphone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/smile.imageset/smile.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/star.imageset/star.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/trending-up.imageset/trending-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-check.imageset/user-check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user-x.imageset/user-x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/user.imageset/user.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/users.imageset/users.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/wifi.imageset/wifi.svg +0 -1
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/Contents.json +0 -15
- package/src/components/core/Icon-Base/platforms/ios/Icons.xcassets/Icons/x.imageset/x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/IconBase.web.ts +0 -553
- package/src/components/core/Icon-Base/platforms/web/assets/alert-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/arrow-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/award.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/bell.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/briefcase.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/calendar.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/check-circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-down.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-left.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/chevron-right.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/circle.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/clock.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/credit-card.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/dollar-sign.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/external-link.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/eye-off.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/eye.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/file-text.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/filter.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/globe.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/heart.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/info.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/mail.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/map-pin.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/minus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/more-horizontal.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/more-vertical.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/phone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/plus.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/refresh-cw.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/save.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/search.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/settings.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/share-2.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/share.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/shield.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/smartphone.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/smile.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/star.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/trending-up.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user-check.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user-x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/user.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/users.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/wifi.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/assets/x.svg +0 -1
- package/src/components/core/Icon-Base/platforms/web/styles.css +0 -203
- package/src/components/core/Icon-Base/types.ts +0 -338
- package/src/components/core/Input-Checkbox-Base/README.md +0 -390
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.stemma.test.ts +0 -552
- package/src/components/core/Input-Checkbox-Base/__tests__/InputCheckboxBase.test.ts +0 -878
- package/src/components/core/Input-Checkbox-Base/checkbox-sizing.tokens.ts +0 -37
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.css +0 -477
- package/src/components/core/Input-Checkbox-Base/platforms/web/InputCheckboxBase.web.ts +0 -561
- package/src/components/core/Input-Checkbox-Base/types.ts +0 -399
- package/src/components/core/Input-Checkbox-Legal/README.md +0 -554
- package/src/components/core/Input-Checkbox-Legal/__tests__/InputCheckboxLegal.test.ts +0 -727
- package/src/components/core/Input-Checkbox-Legal/platforms/ios/.gitkeep +0 -2
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.css +0 -112
- package/src/components/core/Input-Checkbox-Legal/platforms/web/InputCheckboxLegal.web.ts +0 -505
- package/src/components/core/Input-Checkbox-Legal/types.ts +0 -348
- package/src/components/core/Input-Radio-Base/.gitkeep +0 -2
- package/src/components/core/Input-Radio-Base/README.md +0 -427
- package/src/components/core/Input-Radio-Base/__tests__/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.form.test.ts +0 -299
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.stemma.test.ts +0 -543
- package/src/components/core/Input-Radio-Base/__tests__/InputRadioBase.test.ts +0 -429
- package/src/components/core/Input-Radio-Base/platforms/ios/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/platforms/web/.gitkeep +0 -1
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.css +0 -504
- package/src/components/core/Input-Radio-Base/platforms/web/InputRadioBase.web.ts +0 -648
- package/src/components/core/Input-Radio-Base/radio-sizing.tokens.ts +0 -37
- package/src/components/core/Input-Radio-Base/types.ts +0 -362
- package/src/components/core/Input-Radio-Set/README.md +0 -373
- package/src/components/core/Input-Radio-Set/__tests__/.gitkeep +0 -0
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.stemma.test.ts +0 -493
- package/src/components/core/Input-Radio-Set/__tests__/InputRadioSet.test.ts +0 -499
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.css +0 -99
- package/src/components/core/Input-Radio-Set/platforms/web/InputRadioSet.web.ts +0 -790
- package/src/components/core/Input-Radio-Set/types.ts +0 -301
- package/src/components/core/Input-Text-Base/README.md +0 -258
- package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +0 -311
- package/src/components/core/Input-Text-Base/__tests__/keyboardNavigation.test.ts +0 -444
- package/src/components/core/Input-Text-Base/__tests__/labelAssociation.test.ts +0 -418
- package/src/components/core/Input-Text-Base/__tests__/screenReaderSupport.test.ts +0 -405
- package/src/components/core/Input-Text-Base/__tests__/setup.ts +0 -17
- package/src/components/core/Input-Text-Base/__tests__/stateManagement.test.ts +0 -718
- package/src/components/core/Input-Text-Base/__tests__/test-utils.ts +0 -81
- package/src/components/core/Input-Text-Base/__tests__/touchTargetSizing.test.ts +0 -319
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.browser.ts +0 -241
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.css +0 -293
- package/src/components/core/Input-Text-Base/platforms/web/InputTextBase.web.ts +0 -448
- package/src/components/core/Input-Text-Base/stateManagement.ts +0 -267
- package/src/components/core/Input-Text-Base/tokens.ts +0 -210
- package/src/components/core/Input-Text-Base/types.ts +0 -114
- package/src/components/core/Input-Text-Email/README.md +0 -252
- package/src/components/core/Input-Text-Email/__tests__/validation.test.ts +0 -127
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.browser.ts +0 -276
- package/src/components/core/Input-Text-Email/platforms/web/InputTextEmail.web.ts +0 -319
- package/src/components/core/Input-Text-Email/stateManagement.ts +0 -160
- package/src/components/core/Input-Text-Email/tokens.ts +0 -33
- package/src/components/core/Input-Text-Email/types.ts +0 -72
- package/src/components/core/Input-Text-Email/validation.ts +0 -130
- package/src/components/core/Input-Text-Password/README.md +0 -360
- package/src/components/core/Input-Text-Password/__tests__/validation.test.ts +0 -362
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.browser.ts +0 -434
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +0 -512
- package/src/components/core/Input-Text-Password/stateManagement.ts +0 -244
- package/src/components/core/Input-Text-Password/tokens.ts +0 -32
- package/src/components/core/Input-Text-Password/types.ts +0 -177
- package/src/components/core/Input-Text-Password/validation.ts +0 -207
- package/src/components/core/Input-Text-PhoneNumber/README.md +0 -276
- package/src/components/core/Input-Text-PhoneNumber/__tests__/validation.test.ts +0 -301
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.browser.ts +0 -370
- package/src/components/core/Input-Text-PhoneNumber/platforms/web/InputTextPhoneNumber.web.ts +0 -393
- package/src/components/core/Input-Text-PhoneNumber/stateManagement.ts +0 -250
- package/src/components/core/Input-Text-PhoneNumber/tokens.ts +0 -33
- package/src/components/core/Input-Text-PhoneNumber/types.ts +0 -135
- package/src/components/core/Input-Text-PhoneNumber/validation.ts +0 -302
- package/src/components/core/Nav-Header-App/README.md +0 -29
- package/src/components/core/Nav-Header-App/index.ts +0 -5
- package/src/components/core/Nav-Header-App/platforms/web/NavHeaderApp.web.ts +0 -37
- package/src/components/core/Nav-Header-App/types.ts +0 -32
- package/src/components/core/Nav-Header-Base/README.md +0 -21
- package/src/components/core/Nav-Header-Base/index.ts +0 -12
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.styles.css +0 -75
- package/src/components/core/Nav-Header-Base/platforms/web/NavHeaderBase.web.ts +0 -120
- package/src/components/core/Nav-Header-Base/types.ts +0 -63
- package/src/components/core/Nav-Header-Page/README.md +0 -34
- package/src/components/core/Nav-Header-Page/__tests__/NavHeaderPage.test.ts +0 -250
- package/src/components/core/Nav-Header-Page/index.ts +0 -12
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.styles.css +0 -90
- package/src/components/core/Nav-Header-Page/platforms/web/NavHeaderPage.web.ts +0 -169
- package/src/components/core/Nav-Header-Page/types.ts +0 -55
- package/src/components/core/Nav-SegmentedChoice-Base/README.md +0 -327
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.android.test.ts +0 -218
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.interaction.test.ts +0 -419
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.ios.test.ts +0 -207
- package/src/components/core/Nav-SegmentedChoice-Base/__tests__/NavSegmentedChoiceBase.visual.test.ts +0 -371
- package/src/components/core/Nav-SegmentedChoice-Base/index.ts +0 -38
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.styles.css +0 -160
- package/src/components/core/Nav-SegmentedChoice-Base/platforms/web/NavSegmentedChoiceBase.web.ts +0 -477
- package/src/components/core/Nav-SegmentedChoice-Base/types.ts +0 -65
- package/src/components/core/Nav-TabBar-Base/README.md +0 -264
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.android.test.ts +0 -270
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.ios.test.ts +0 -221
- package/src/components/core/Nav-TabBar-Base/__tests__/NavTabBarBase.test.ts +0 -421
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.html +0 -2
- package/src/components/core/Nav-TabBar-Base/examples/BasicUsage.tsx +0 -2
- package/src/components/core/Nav-TabBar-Base/index.ts +0 -20
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.styles.css +0 -281
- package/src/components/core/Nav-TabBar-Base/platforms/web/NavTabBarBase.web.ts +0 -420
- package/src/components/core/Nav-TabBar-Base/types.ts +0 -43
- package/src/components/core/Progress-Bar-Base/README.md +0 -31
- package/src/components/core/Progress-Bar-Base/__tests__/ProgressBarBase.test.ts +0 -202
- package/src/components/core/Progress-Bar-Base/index.ts +0 -6
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.styles.css +0 -52
- package/src/components/core/Progress-Bar-Base/platforms/web/ProgressBarBase.web.ts +0 -135
- package/src/components/core/Progress-Bar-Base/types.ts +0 -46
- package/src/components/core/Progress-Indicator-Connector-Base/README.md +0 -169
- package/src/components/core/Progress-Indicator-Connector-Base/index.ts +0 -33
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.styles.css +0 -50
- package/src/components/core/Progress-Indicator-Connector-Base/platforms/web/ProgressIndicatorConnectorBase.web.ts +0 -141
- package/src/components/core/Progress-Indicator-Connector-Base/types.ts +0 -67
- package/src/components/core/Progress-Indicator-Label-Base/README.md +0 -191
- package/src/components/core/Progress-Indicator-Label-Base/index.ts +0 -28
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.styles.css +0 -81
- package/src/components/core/Progress-Indicator-Label-Base/platforms/web/ProgressIndicatorLabelBase.web.ts +0 -174
- package/src/components/core/Progress-Indicator-Label-Base/types.ts +0 -64
- package/src/components/core/Progress-Indicator-Node-Base/README.md +0 -206
- package/src/components/core/Progress-Indicator-Node-Base/__tests__/VisualStates.test.ts +0 -259
- package/src/components/core/Progress-Indicator-Node-Base/index.ts +0 -36
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.styles.css +0 -193
- package/src/components/core/Progress-Indicator-Node-Base/platforms/web/ProgressIndicatorNodeBase.web.ts +0 -226
- package/src/components/core/Progress-Indicator-Node-Base/types.ts +0 -142
- package/src/components/core/Progress-Pagination-Base/README.md +0 -290
- package/src/components/core/Progress-Pagination-Base/__tests__/PaginationBase.test.ts +0 -290
- package/src/components/core/Progress-Pagination-Base/index.ts +0 -40
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.styles.css +0 -80
- package/src/components/core/Progress-Pagination-Base/platforms/web/ProgressPaginationBase.web.ts +0 -293
- package/src/components/core/Progress-Pagination-Base/types.ts +0 -112
- package/src/components/core/Progress-Stepper-Base/README.md +0 -311
- package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +0 -345
- package/src/components/core/Progress-Stepper-Base/index.ts +0 -43
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.styles.css +0 -49
- package/src/components/core/Progress-Stepper-Base/platforms/web/ProgressStepperBase.web.ts +0 -288
- package/src/components/core/Progress-Stepper-Base/types.ts +0 -175
- package/src/components/core/Progress-Stepper-Detailed/README.md +0 -401
- package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +0 -481
- package/src/components/core/Progress-Stepper-Detailed/index.ts +0 -48
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.styles.css +0 -106
- package/src/components/core/Progress-Stepper-Detailed/platforms/web/ProgressStepperDetailed.web.ts +0 -336
- package/src/components/core/Progress-Stepper-Detailed/types.ts +0 -195
- package/src/composition/BlendComposition.ts +0 -46
- package/src/composition/BlendCompositionParser.ts +0 -215
- package/src/composition/OpacityComposition.ts +0 -62
- package/src/composition/OpacityCompositionParser.ts +0 -308
- package/src/composition/__tests__/BlendCompositionParser.test.ts +0 -431
- package/src/composition/__tests__/OpacityCompositionParser.test.ts +0 -539
- package/src/composition/index.ts +0 -20
- package/src/config/ConfigLoader.ts +0 -143
- package/src/config/__resolution-matrix__/README.md +0 -76
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/compiled/defineConfig.js +0 -9
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/designerpunk.config.ts +0 -20
- package/src/config/__resolution-matrix__/fixtures/faithful-cjs/my-overrides.ts +0 -8
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/compiled/defineConfig.js +0 -11
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/designerpunk.config.ts +0 -23
- package/src/config/__resolution-matrix__/fixtures/faithful-esm/my-overrides.ts +0 -6
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/designerpunk.config.ts +0 -11
- package/src/config/__resolution-matrix__/fixtures/source-dir-cjs/src/config/index.ts +0 -15
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/designerpunk.config.ts +0 -15
- package/src/config/__resolution-matrix__/fixtures/source-dir-esm/src/config/index.ts +0 -13
- package/src/config/__resolution-matrix__/run-matrix.js +0 -107
- package/src/config/__resolution-matrix__/runner.js +0 -153
- package/src/config/__resolution-matrix__/verify-real-loadconfig.js +0 -122
- package/src/config/__tests__/ConfigLoader.test.ts +0 -115
- package/src/config/defineConfig.ts +0 -71
- package/src/config/index.ts +0 -7
- package/src/config/scopedTsRequire.ts +0 -62
- package/src/constants/BaselineGrid.ts +0 -41
- package/src/constants/SpacingTokens.ts +0 -55
- package/src/figma/ComponentAnalysis.ts +0 -292
- package/src/figma/ComponentAnalysisGenerator.ts +0 -444
- package/src/figma/ConsoleMCPClient.ts +0 -168
- package/src/figma/ConsoleMCPClientImpl.ts +0 -1034
- package/src/figma/DesignExtractor.ts +0 -3620
- package/src/figma/TokenSyncWorkflow.ts +0 -915
- package/src/figma/TokenTranslator.ts +0 -891
- package/src/figma/VariantAnalyzer.ts +0 -712
- package/src/figma/__tests__/ComponentAnalysisGenerator.json.test.ts +0 -429
- package/src/figma/__tests__/ComponentAnalysisGenerator.markdown.test.ts +0 -428
- package/src/figma/__tests__/ConsoleMCPClient.bugfix.test.ts +0 -261
- package/src/figma/__tests__/ConsoleMCPClient.preservation.test.ts +0 -395
- package/src/figma/__tests__/ConsoleMCPClient.test.ts +0 -375
- package/src/figma/__tests__/DesignExtractor.boundVariableResolution.test.ts +0 -580
- package/src/figma/__tests__/DesignExtractor.buildNodeTree.test.ts +0 -535
- package/src/figma/__tests__/DesignExtractor.captureComponentScreenshot.test.ts +0 -176
- package/src/figma/__tests__/DesignExtractor.detectBehavioralContracts.test.ts +0 -263
- package/src/figma/__tests__/DesignExtractor.detectComponentTokenDecisions.test.ts +0 -379
- package/src/figma/__tests__/DesignExtractor.detectCompositionPatterns.test.ts +0 -507
- package/src/figma/__tests__/DesignExtractor.detectPlatformParity.test.ts +0 -406
- package/src/figma/__tests__/DesignExtractor.queryContext.test.ts +0 -214
- package/src/figma/__tests__/DesignExtractor.readFigmaComponent.test.ts +0 -431
- package/src/figma/__tests__/DesignExtractor.readStyles.test.ts +0 -204
- package/src/figma/__tests__/DesignExtractor.readTokenBindings.test.ts +0 -268
- package/src/figma/__tests__/DesignExtractor.reconstructCompositeTokens.test.ts +0 -403
- package/src/figma/__tests__/DesignExtractor.resolveUnknownVariableIds.test.ts +0 -259
- package/src/figma/__tests__/DesignExtractor.translateTokens.test.ts +0 -433
- package/src/figma/__tests__/DesignExtractor.validateModes.test.ts +0 -350
- package/src/figma/__tests__/TokenSyncWorkflow.batch.test.ts +0 -277
- package/src/figma/__tests__/TokenSyncWorkflow.drift.test.ts +0 -187
- package/src/figma/__tests__/TokenSyncWorkflow.preservation.test.ts +0 -544
- package/src/figma/__tests__/TokenSyncWorkflow.styles.test.ts +0 -245
- package/src/figma/__tests__/TokenSyncWorkflow.sync.test.ts +0 -217
- package/src/figma/__tests__/TokenTranslator.test.ts +0 -757
- package/src/figma/__tests__/VariantAnalyzer.detectConflicts.test.ts +0 -126
- package/src/figma/__tests__/VariantAnalyzer.test.ts +0 -633
- package/src/figma/__tests__/error-reporting.test.ts +0 -254
- package/src/figma/__tests__/preflight.test.ts +0 -94
- package/src/figma/error-reporting.ts +0 -260
- package/src/figma/index.ts +0 -98
- package/src/figma/portCleanup.ts +0 -86
- package/src/figma/preflight.ts +0 -120
- package/src/generators/BlendUtilityGenerator.ts +0 -847
- package/src/generators/BlendValueGenerator.ts +0 -198
- package/src/generators/DTCGFormatGenerator.ts +0 -1355
- package/src/generators/DTCGGeneratorConfig.ts +0 -46
- package/src/generators/ModeResolvedTokens.ts +0 -58
- package/src/generators/ResponsiveGridGenerator.ts +0 -273
- package/src/generators/TokenFileGenerator.ts +0 -2070
- package/src/generators/__tests__/AccessibilityTokenGeneration.test.ts +0 -350
- package/src/generators/__tests__/BlendUtilityGenerator.test.ts +0 -829
- package/src/generators/__tests__/BlendValueGenerator.test.ts +0 -200
- package/src/generators/__tests__/BreakpointTokenGeneration.test.ts +0 -172
- package/src/generators/__tests__/CSSThemeScoping.test.ts +0 -153
- package/src/generators/__tests__/DTCGConfigOptions.test.ts +0 -271
- package/src/generators/__tests__/DTCGErrorHandling.test.ts +0 -139
- package/src/generators/__tests__/DTCGFormatGenerator.integration.test.ts +0 -346
- package/src/generators/__tests__/DTCGFormatGenerator.property.test.ts +0 -497
- package/src/generators/__tests__/DTCGFormatGenerator.test.ts +0 -469
- package/src/generators/__tests__/FigmaTransformer.styles.test.ts +0 -398
- package/src/generators/__tests__/FigmaTransformer.variables.test.ts +0 -540
- package/src/generators/__tests__/GridSpacingTokenGeneration.test.ts +0 -254
- package/src/generators/__tests__/IconTokenGeneration.test.ts +0 -452
- package/src/generators/__tests__/KotlinThemeTypes.test.ts +0 -110
- package/src/generators/__tests__/ModeAwareGeneration.test.ts +0 -160
- package/src/generators/__tests__/NativeOklchOutput.test.ts +0 -56
- package/src/generators/__tests__/OklchExport.test.ts +0 -71
- package/src/generators/__tests__/ProductRepoSimulation.test.ts +0 -91
- package/src/generators/__tests__/ResponsiveGridGeneration.test.ts +0 -291
- package/src/generators/__tests__/Spec076TokenMigration.test.ts +0 -106
- package/src/generators/__tests__/Spec077ModesVerification.test.ts +0 -52
- package/src/generators/__tests__/SwiftThemeTypes.test.ts +0 -122
- package/src/generators/__tests__/TokenFileGenerator.test.ts +0 -914
- package/src/generators/__tests__/TransformerRegistry.test.ts +0 -118
- package/src/generators/__tests__/WcagValueExportSupport.test.ts +0 -84
- package/src/generators/__tests__/WcagValueInfrastructure.test.ts +0 -122
- package/src/generators/__tests__/WebOklchOutput.test.ts +0 -72
- package/src/generators/__tests__/generateTokenIndex.test.ts +0 -204
- package/src/generators/__tests__/helpers/defaultSemanticOptions.ts +0 -24
- package/src/generators/generateTokenFiles.ts +0 -337
- package/src/generators/generateTokenIndex.ts +0 -258
- package/src/generators/oklch/OklchExportUtils.ts +0 -57
- package/src/generators/oklch/OklchTokenIndexMetadata.ts +0 -30
- package/src/generators/transformers/FigmaTransformer.ts +0 -912
- package/src/generators/transformers/ITokenTransformer.ts +0 -56
- package/src/generators/transformers/TransformerRegistry.ts +0 -63
- package/src/generators/transformers/index.ts +0 -52
- package/src/generators/types/DTCGTypes.ts +0 -101
- package/src/integration/BuildErrorHandler.ts +0 -440
- package/src/integration/BuildSystemInterface.ts +0 -338
- package/src/integration/PlatformFileSelector.ts +0 -288
- package/src/integration/RegistryCoordinator.ts +0 -404
- package/src/integration/TranslationCoordinator.ts +0 -458
- package/src/integration/TreeShakingOptimizer.ts +0 -350
- package/src/integration/ValidationCoordinator.ts +0 -780
- package/src/integration/__tests__/ComponentTokenValidation.test.ts +0 -762
- package/src/integration/__tests__/ValidationCoordinator.test.ts +0 -609
- package/src/integration/__tests__/performance/ComponentTokenValidationPerformance.test.ts +0 -161
- package/src/integration/index.ts +0 -55
- package/src/naming/NamingConventionManager.ts +0 -318
- package/src/naming/PlatformNamingRules.ts +0 -278
- package/src/naming/__tests__/NamingConventions.test.ts +0 -224
- package/src/naming/index.ts +0 -23
- package/src/parent-completion.md +0 -1
- package/src/performance/CachingStrategy.ts +0 -426
- package/src/performance/FileGenerationOptimizer.ts +0 -294
- package/src/performance/PerformanceMonitor.ts +0 -185
- package/src/performance/PerformanceOptimizer.ts +0 -348
- package/src/performance/index.ts +0 -30
- package/src/providers/AndroidFileOrganizer.ts +0 -241
- package/src/providers/AndroidFormatGenerator.ts +0 -750
- package/src/providers/AndroidUnitConverter.ts +0 -177
- package/src/providers/FormatProvider.ts +0 -187
- package/src/providers/PathProvider.ts +0 -197
- package/src/providers/UnitProvider.ts +0 -106
- package/src/providers/WebFileOrganizer.ts +0 -121
- package/src/providers/WebFormatGenerator.ts +0 -611
- package/src/providers/WebUnitConverter.ts +0 -116
- package/src/providers/__tests__/AndroidAccessibilityTokens.test.ts +0 -86
- package/src/providers/__tests__/AndroidFormatGenerator-semantic.test.ts +0 -494
- package/src/providers/__tests__/FormatProviders.test.ts +0 -828
- package/src/providers/__tests__/InsetTokenGeneration.test.ts +0 -627
- package/src/providers/__tests__/PathProviders.test.ts +0 -512
- package/src/providers/__tests__/PlatformOutputFormat.test.ts +0 -252
- package/src/providers/__tests__/UnitProviders.test.ts +0 -721
- package/src/providers/__tests__/WebFormatGenerator-semantic.test.ts +0 -293
- package/src/providers/__tests__/iOSFormatGenerator-semantic.test.ts +0 -410
- package/src/providers/iOSFileOrganizer.ts +0 -162
- package/src/providers/iOSFormatGenerator.ts +0 -599
- package/src/providers/iOSUnitConverter.ts +0 -125
- package/src/providers/index.ts +0 -26
- package/src/registries/ComponentTokenRegistry.ts +0 -292
- package/src/registries/IRegistry.ts +0 -170
- package/src/registries/__tests__/ComponentTokenRegistry.test.ts +0 -446
- package/src/registries/__tests__/IRegistry.test.ts +0 -250
- package/src/registries/__tests__/PrimitiveTokenRegistry.test.ts +0 -342
- package/src/registries/__tests__/SemanticTokenRegistry.test.ts +0 -444
- package/src/resolvers/AndroidColorResolver.ts +0 -333
- package/src/resolvers/ModeThemeResolver.ts +0 -152
- package/src/resolvers/SemanticOverrideResolver.ts +0 -155
- package/src/resolvers/SemanticValueResolver.ts +0 -133
- package/src/resolvers/WebColorResolver.ts +0 -240
- package/src/resolvers/__tests__/AndroidColorResolver.test.ts +0 -507
- package/src/resolvers/__tests__/ModeThemeResolver.test.ts +0 -411
- package/src/resolvers/__tests__/SemanticOverrideResolver.test.ts +0 -186
- package/src/resolvers/__tests__/WebColorResolver.test.ts +0 -405
- package/src/resolvers/__tests__/iOSColorResolver.test.ts +0 -432
- package/src/resolvers/iOSColorResolver.ts +0 -224
- package/src/resolvers/index.ts +0 -11
- package/src/security/AIAgentRestrictions.ts +0 -298
- package/src/security/ContaminationAuditor.ts +0 -393
- package/src/security/ContaminationPrevention.ts +0 -275
- package/src/security/DocumentationGuard.ts +0 -258
- package/src/security/FlexibilityTokenGuard.ts +0 -256
- package/src/security/HumanApprovalWorkflow.ts +0 -319
- package/src/security/__tests__/AIAgentRestrictions.test.ts +0 -482
- package/src/security/__tests__/ContaminationPrevention.test.ts +0 -424
- package/src/security/__tests__/SecurityIntegration.test.ts +0 -505
- package/src/security/index.ts +0 -48
- package/src/testing/__tests__/utilities.test.ts +0 -175
- package/src/testing/index.ts +0 -154
- package/src/testing/jest-preset.ts +0 -62
- package/src/testing/style-mock.ts +0 -7
- package/src/testing/validators.ts +0 -10
- package/src/themes/ResolvedThemeSet.ts +0 -22
- package/src/themes/ThemeRegistry.ts +0 -97
- package/src/themes/__tests__/ThemeRegistry.test.ts +0 -162
- package/src/tools/ThemeFileGenerator.ts +0 -109
- package/src/tools/integrity/DiskFreshGenerator.ts +0 -36
- package/src/tools/integrity/GenerationIntegrityCheck.ts +0 -132
- package/src/tools/integrity/Invariants.ts +0 -228
- package/src/tools/integrity/Normalizer.ts +0 -94
- package/src/tools/integrity/SemanticComparator.ts +0 -127
- package/src/tools/integrity/__tests__/GenerationIntegrityCheck.test.ts +0 -132
- package/src/tools/integrity/__tests__/Invariants.test.ts +0 -142
- package/src/tools/integrity/__tests__/Normalizer.test.ts +0 -65
- package/src/tools/integrity/__tests__/SemanticComparator.test.ts +0 -62
- package/src/tools/integrity/__tests__/consumer-package-mode.test.ts +0 -205
- package/src/tools/integrity/cli/run-audit.ts +0 -150
- package/src/tools/integrity/inventory.ts +0 -51
- package/src/tools/integrity/manifest.ts +0 -56
- package/src/tools/integrity/types/index.ts +0 -183
- package/src/tools/release/__tests__/ChangeClassifier.test.ts +0 -133
- package/src/tools/release/__tests__/ChangeExtractor.test.ts +0 -222
- package/src/tools/release/__tests__/GitHubPublisher.test.ts +0 -240
- package/src/tools/release/__tests__/NotesRenderer.test.ts +0 -142
- package/src/tools/release/__tests__/NpmPublisher.test.ts +0 -289
- package/src/tools/release/__tests__/PipelineIntegration.test.ts +0 -188
- package/src/tools/release/__tests__/ReleasePipeline.test.ts +0 -192
- package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +0 -49
- package/src/tools/release/__tests__/SummaryScanner.test.ts +0 -141
- package/src/tools/release/__tests__/TagResolver.test.ts +0 -91
- package/src/tools/release/__tests__/VersionCalculator.test.ts +0 -270
- package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +0 -80
- package/src/tools/release/cli/ReleasePipeline.ts +0 -165
- package/src/tools/release/cli/release-tool.ts +0 -107
- package/src/tools/release/pipeline/ChangeClassifier.ts +0 -61
- package/src/tools/release/pipeline/ChangeExtractor.ts +0 -87
- package/src/tools/release/pipeline/NotesRenderer.ts +0 -66
- package/src/tools/release/pipeline/SummaryScanner.ts +0 -70
- package/src/tools/release/pipeline/TagResolver.ts +0 -40
- package/src/tools/release/pipeline/VersionCalculator.ts +0 -375
- package/src/tools/release/publishers/GitHubPublisher.ts +0 -228
- package/src/tools/release/publishers/NpmPublisher.ts +0 -196
- package/src/tools/release/release-config.json +0 -5
- package/src/tools/release/types/index.ts +0 -282
- package/src/tools/release/validators/SemanticVersionValidator.ts +0 -67
- package/src/types/ComponentTypes.ts +0 -76
- package/src/types/TranslationOutput.ts +0 -105
- package/src/types/ValidationResult.ts +0 -74
- package/src/types/__tests__/ComponentTypes.test.ts +0 -73
- package/src/types/css.d.ts +0 -35
- package/src/types/generated/TokenTypes.ts +0 -142
- package/src/types/index.ts +0 -42
- package/src/validators/BaselineGridValidator.ts +0 -119
- package/src/validators/CompositionPatternValidator.ts +0 -259
- package/src/validators/CrossPlatformConsistencyValidator.ts +0 -498
- package/src/validators/ErrorValidator.ts +0 -998
- package/src/validators/IValidator.ts +0 -273
- package/src/validators/MathematicalRelationshipParser.ts +0 -434
- package/src/validators/ModeParity.ts +0 -123
- package/src/validators/PassValidator.ts +0 -533
- package/src/validators/PlatformConstraintHandler.ts +0 -453
- package/src/validators/PrimitiveReferenceValidator.ts +0 -284
- package/src/validators/SemanticTokenValidator.ts +0 -496
- package/src/validators/StemmaComponentNamingValidator.ts +0 -524
- package/src/validators/StemmaErrorGuidanceSystem.ts +0 -1600
- package/src/validators/StemmaPropertyAccessibilityValidator.ts +0 -823
- package/src/validators/StemmaTokenUsageValidator.ts +0 -651
- package/src/validators/SyntaxValidator.ts +0 -537
- package/src/validators/ThreeTierValidator.ts +0 -822
- package/src/validators/ToleranceCalculator.ts +0 -324
- package/src/validators/ValidationReasoning.ts +0 -464
- package/src/validators/WCAGValidator.ts +0 -219
- package/src/validators/WarningValidator.ts +0 -626
- package/src/validators/__tests__/BaselineGridValidator.test.ts +0 -292
- package/src/validators/__tests__/BorderWidthValidation.test.ts +0 -595
- package/src/validators/__tests__/CompositionPatterns.test.ts +0 -463
- package/src/validators/__tests__/CrossPlatformConsistency.test.ts +0 -834
- package/src/validators/__tests__/IValidator.test.ts +0 -258
- package/src/validators/__tests__/MathematicalRelationshipParser.test.ts +0 -465
- package/src/validators/__tests__/PlatformConstraints.test.ts +0 -486
- package/src/validators/__tests__/SemanticTokenValidator.test.ts +0 -723
- package/src/validators/__tests__/StemmaComponentNamingValidator.test.ts +0 -597
- package/src/validators/__tests__/StemmaErrorGuidanceSystem.test.ts +0 -717
- package/src/validators/__tests__/StemmaPropertyAccessibilityValidator.test.ts +0 -349
- package/src/validators/__tests__/StemmaTokenUsageValidator.test.ts +0 -432
- package/src/validators/__tests__/SyntaxValidator.test.ts +0 -360
- package/src/validators/__tests__/ThreeTierValidator.test.ts +0 -906
- package/src/validators/__tests__/ValidationReasoning.test.ts +0 -636
- package/src/validators/__tests__/WCAGValidator.test.ts +0 -243
- package/src/validators/buildValidation.ts +0 -170
- package/src/validators/index.ts +0 -144
- package/src/workflows/ConsistencyValidator.ts +0 -339
- package/src/workflows/TokenGenerationWorkflow.ts +0 -460
- package/src/workflows/ValidationPipeline.ts +0 -284
- package/src/workflows/WorkflowErrorHandler.ts +0 -441
package/src/components/core/Button-VerticalList-Set/platforms/web/ButtonVerticalListSet.web.ts
DELETED
|
@@ -1,1446 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Button-VerticalList-Set Web Component
|
|
3
|
-
*
|
|
4
|
-
* Stemma System: Buttons Family
|
|
5
|
-
* Component Type: Pattern (VerticalList-Set)
|
|
6
|
-
* Custom Element Tag: <button-vertical-list-set>
|
|
7
|
-
*
|
|
8
|
-
* Container/orchestrator component that manages selection behavior,
|
|
9
|
-
* state coordination, animations, keyboard navigation, and accessibility
|
|
10
|
-
* for vertical list button groups.
|
|
11
|
-
*
|
|
12
|
-
* RENDERING ARCHITECTURE:
|
|
13
|
-
* Uses incremental DOM updates rather than full re-renders to enable CSS transitions.
|
|
14
|
-
* - _createDOM(): Called once on first render, creates the full DOM structure
|
|
15
|
-
* - _updateDOM(): Called on attribute changes, updates only changed properties
|
|
16
|
-
* This preserves DOM element identity, allowing CSS transitions to animate smoothly.
|
|
17
|
-
*
|
|
18
|
-
* @module Button-VerticalList-Set/platforms/web
|
|
19
|
-
* @see Requirements: 2.1, 2.6, 11.2
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
/// <reference lib="dom" />
|
|
23
|
-
|
|
24
|
-
import type {
|
|
25
|
-
SelectionMode,
|
|
26
|
-
SetInternalState
|
|
27
|
-
} from '../../types';
|
|
28
|
-
|
|
29
|
-
import {
|
|
30
|
-
deriveItemStates,
|
|
31
|
-
validateSelection,
|
|
32
|
-
canSelectItem,
|
|
33
|
-
calculateStaggeredDelays,
|
|
34
|
-
calculateFirstSelectionDelays,
|
|
35
|
-
calculateDeselectionDelays,
|
|
36
|
-
calculateMultiSelectDelay,
|
|
37
|
-
getCheckmarkTransition
|
|
38
|
-
} from '../../types';
|
|
39
|
-
|
|
40
|
-
// Import CSS as string for browser bundle compatibility
|
|
41
|
-
// The esbuild CSS-as-string plugin transforms this import into a JS string export
|
|
42
|
-
import componentStyles from './Button-VerticalList-Set.styles.css';
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get the ARIA role for the container based on mode.
|
|
46
|
-
*
|
|
47
|
-
* @param mode - The selection mode
|
|
48
|
-
* @returns The appropriate ARIA role
|
|
49
|
-
* @see Requirements: 2.1, 3.4, 4.6, 5.4
|
|
50
|
-
*/
|
|
51
|
-
function getContainerRole(mode: SelectionMode): string {
|
|
52
|
-
switch (mode) {
|
|
53
|
-
case 'tap':
|
|
54
|
-
return 'group';
|
|
55
|
-
case 'select':
|
|
56
|
-
return 'radiogroup';
|
|
57
|
-
case 'multiSelect':
|
|
58
|
-
return 'group';
|
|
59
|
-
default:
|
|
60
|
-
return 'group';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Button-VerticalList-Set Web Component
|
|
66
|
-
*
|
|
67
|
-
* A native web component that orchestrates selection behavior and coordinates
|
|
68
|
-
* visual states across child Button-VerticalList-Item components.
|
|
69
|
-
*
|
|
70
|
-
* @remarks
|
|
71
|
-
* - Uses Shadow DOM for style encapsulation
|
|
72
|
-
* - Follows controlled component pattern (parent manages state)
|
|
73
|
-
* - Coordinates animation timing across children
|
|
74
|
-
* - Manages keyboard navigation with roving tabindex
|
|
75
|
-
* - Provides appropriate ARIA roles based on mode
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```html
|
|
79
|
-
* <!-- Tap mode - action buttons -->
|
|
80
|
-
* <button-vertical-list-set mode="tap">
|
|
81
|
-
* <button-vertical-list-item label="Settings"></button-vertical-list-item>
|
|
82
|
-
* <button-vertical-list-item label="Help"></button-vertical-list-item>
|
|
83
|
-
* </button-vertical-list-set>
|
|
84
|
-
*
|
|
85
|
-
* <!-- Select mode - single selection -->
|
|
86
|
-
* <button-vertical-list-set mode="select" selected-index="0">
|
|
87
|
-
* <button-vertical-list-item label="Option A"></button-vertical-list-item>
|
|
88
|
-
* <button-vertical-list-item label="Option B"></button-vertical-list-item>
|
|
89
|
-
* </button-vertical-list-set>
|
|
90
|
-
*
|
|
91
|
-
* <!-- MultiSelect mode - multiple selections -->
|
|
92
|
-
* <button-vertical-list-set mode="multiSelect" selected-indices="[0,2]">
|
|
93
|
-
* <button-vertical-list-item label="Choice 1"></button-vertical-list-item>
|
|
94
|
-
* <button-vertical-list-item label="Choice 2"></button-vertical-list-item>
|
|
95
|
-
* <button-vertical-list-item label="Choice 3"></button-vertical-list-item>
|
|
96
|
-
* </button-vertical-list-set>
|
|
97
|
-
* ```
|
|
98
|
-
*
|
|
99
|
-
* @see Requirements 2.1, 2.6, 11.2
|
|
100
|
-
*/
|
|
101
|
-
export class ButtonVerticalListSet extends HTMLElement {
|
|
102
|
-
// ─────────────────────────────────────────────────────────────────
|
|
103
|
-
// Static Properties
|
|
104
|
-
// ─────────────────────────────────────────────────────────────────
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Observed attributes for attribute change callbacks.
|
|
108
|
-
*
|
|
109
|
-
* When these attributes change, attributeChangedCallback is invoked.
|
|
110
|
-
*/
|
|
111
|
-
static get observedAttributes(): string[] {
|
|
112
|
-
return [
|
|
113
|
-
'mode',
|
|
114
|
-
'selected-index',
|
|
115
|
-
'selected-indices',
|
|
116
|
-
'required',
|
|
117
|
-
'min-selections',
|
|
118
|
-
'max-selections',
|
|
119
|
-
'error',
|
|
120
|
-
'error-message',
|
|
121
|
-
'test-id'
|
|
122
|
-
];
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// ─────────────────────────────────────────────────────────────────
|
|
126
|
-
// Private Properties
|
|
127
|
-
// ─────────────────────────────────────────────────────────────────
|
|
128
|
-
|
|
129
|
-
/** Shadow root reference */
|
|
130
|
-
private _shadowRoot: ShadowRoot;
|
|
131
|
-
|
|
132
|
-
/** Whether DOM has been created */
|
|
133
|
-
private _domCreated: boolean = false;
|
|
134
|
-
|
|
135
|
-
// Cached DOM element references for incremental updates
|
|
136
|
-
private _container: HTMLDivElement | null = null;
|
|
137
|
-
private _errorMessageEl: HTMLDivElement | null = null;
|
|
138
|
-
|
|
139
|
-
// Props (backed by attributes)
|
|
140
|
-
private _mode: SelectionMode = 'tap';
|
|
141
|
-
private _selectedIndex: number | null = null;
|
|
142
|
-
private _selectedIndices: number[] = [];
|
|
143
|
-
private _required: boolean = false;
|
|
144
|
-
private _minSelections?: number;
|
|
145
|
-
private _maxSelections?: number;
|
|
146
|
-
private _error: boolean = false;
|
|
147
|
-
private _errorMessage?: string;
|
|
148
|
-
private _testID?: string;
|
|
149
|
-
|
|
150
|
-
// Internal state for focus management and animation tracking
|
|
151
|
-
private _internalState: SetInternalState = {
|
|
152
|
-
focusedIndex: 0,
|
|
153
|
-
previousSelectedIndex: null,
|
|
154
|
-
isFirstSelection: true
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
// Callbacks (set via properties, not attributes)
|
|
158
|
-
private _onItemClick?: (index: number) => void;
|
|
159
|
-
private _onSelectionChange?: (index: number | null) => void;
|
|
160
|
-
private _onMultiSelectionChange?: (indices: number[]) => void;
|
|
161
|
-
|
|
162
|
-
// Unique ID for error message element (for aria-describedby)
|
|
163
|
-
private _errorMessageId: string;
|
|
164
|
-
|
|
165
|
-
// ─────────────────────────────────────────────────────────────────
|
|
166
|
-
// Constructor
|
|
167
|
-
// ─────────────────────────────────────────────────────────────────
|
|
168
|
-
|
|
169
|
-
constructor() {
|
|
170
|
-
super();
|
|
171
|
-
|
|
172
|
-
// Attach shadow DOM for style encapsulation
|
|
173
|
-
// delegatesFocus: true enables proper tab navigation
|
|
174
|
-
this._shadowRoot = this.attachShadow({ mode: 'open', delegatesFocus: true });
|
|
175
|
-
|
|
176
|
-
// Generate unique ID for error message element
|
|
177
|
-
this._errorMessageId = `vls-error-${Math.random().toString(36).slice(2, 11)}`;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// ─────────────────────────────────────────────────────────────────
|
|
181
|
-
// Lifecycle Callbacks
|
|
182
|
-
// ─────────────────────────────────────────────────────────────────
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Called when the element is added to the DOM.
|
|
186
|
-
*
|
|
187
|
-
* Performs initial render and sets up event listeners.
|
|
188
|
-
*/
|
|
189
|
-
connectedCallback(): void {
|
|
190
|
-
// Defer rendering until DOM is ready to ensure CSS is applied
|
|
191
|
-
if (document.readyState === 'loading') {
|
|
192
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
193
|
-
this._render();
|
|
194
|
-
}, { once: true });
|
|
195
|
-
} else {
|
|
196
|
-
this._render();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Called when the element is removed from the DOM.
|
|
202
|
-
*
|
|
203
|
-
* Cleans up event listeners to prevent memory leaks.
|
|
204
|
-
*/
|
|
205
|
-
disconnectedCallback(): void {
|
|
206
|
-
this._detachEventListeners();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Called when an observed attribute changes.
|
|
211
|
-
*
|
|
212
|
-
* Triggers incremental DOM update to reflect the new attribute value.
|
|
213
|
-
*
|
|
214
|
-
* @param name - Attribute name
|
|
215
|
-
* @param oldValue - Previous attribute value
|
|
216
|
-
* @param newValue - New attribute value
|
|
217
|
-
*/
|
|
218
|
-
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {
|
|
219
|
-
// Only update if value changed and DOM exists
|
|
220
|
-
if (oldValue === newValue) return;
|
|
221
|
-
|
|
222
|
-
// Parse attribute values into internal properties
|
|
223
|
-
switch (name) {
|
|
224
|
-
case 'mode':
|
|
225
|
-
this._mode = (newValue as SelectionMode) || 'tap';
|
|
226
|
-
break;
|
|
227
|
-
case 'selected-index':
|
|
228
|
-
this._selectedIndex = newValue !== null ? parseInt(newValue, 10) : null;
|
|
229
|
-
if (isNaN(this._selectedIndex as number)) {
|
|
230
|
-
this._selectedIndex = null;
|
|
231
|
-
}
|
|
232
|
-
break;
|
|
233
|
-
case 'selected-indices':
|
|
234
|
-
try {
|
|
235
|
-
this._selectedIndices = newValue ? JSON.parse(newValue) : [];
|
|
236
|
-
} catch {
|
|
237
|
-
this._selectedIndices = [];
|
|
238
|
-
}
|
|
239
|
-
break;
|
|
240
|
-
case 'required':
|
|
241
|
-
this._required = newValue !== null;
|
|
242
|
-
break;
|
|
243
|
-
case 'min-selections':
|
|
244
|
-
this._minSelections = newValue !== null ? parseInt(newValue, 10) : undefined;
|
|
245
|
-
break;
|
|
246
|
-
case 'max-selections':
|
|
247
|
-
this._maxSelections = newValue !== null ? parseInt(newValue, 10) : undefined;
|
|
248
|
-
break;
|
|
249
|
-
case 'error':
|
|
250
|
-
this._error = newValue !== null;
|
|
251
|
-
break;
|
|
252
|
-
case 'error-message':
|
|
253
|
-
this._errorMessage = newValue || undefined;
|
|
254
|
-
break;
|
|
255
|
-
case 'test-id':
|
|
256
|
-
this._testID = newValue || undefined;
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Update DOM if it exists
|
|
261
|
-
if (this.isConnected && this._domCreated) {
|
|
262
|
-
this._updateDOM();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// ─────────────────────────────────────────────────────────────────
|
|
267
|
-
// Public Getters/Setters
|
|
268
|
-
// ─────────────────────────────────────────────────────────────────
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Get the selection mode.
|
|
272
|
-
*/
|
|
273
|
-
get mode(): SelectionMode {
|
|
274
|
-
return this._mode;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Set the selection mode.
|
|
279
|
-
*/
|
|
280
|
-
set mode(value: SelectionMode) {
|
|
281
|
-
this._mode = value;
|
|
282
|
-
this.setAttribute('mode', value);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Get the selected index (Select mode).
|
|
287
|
-
*/
|
|
288
|
-
get selectedIndex(): number | null {
|
|
289
|
-
return this._selectedIndex;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Set the selected index (Select mode).
|
|
294
|
-
*/
|
|
295
|
-
set selectedIndex(value: number | null) {
|
|
296
|
-
this._selectedIndex = value;
|
|
297
|
-
if (value !== null) {
|
|
298
|
-
this.setAttribute('selected-index', String(value));
|
|
299
|
-
} else {
|
|
300
|
-
this.removeAttribute('selected-index');
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Get the selected indices (MultiSelect mode).
|
|
306
|
-
*/
|
|
307
|
-
get selectedIndices(): number[] {
|
|
308
|
-
return this._selectedIndices;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Set the selected indices (MultiSelect mode).
|
|
313
|
-
*/
|
|
314
|
-
set selectedIndices(value: number[]) {
|
|
315
|
-
this._selectedIndices = value;
|
|
316
|
-
this.setAttribute('selected-indices', JSON.stringify(value));
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Get the required flag.
|
|
321
|
-
*/
|
|
322
|
-
get required(): boolean {
|
|
323
|
-
return this._required;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* Set the required flag.
|
|
328
|
-
*/
|
|
329
|
-
set required(value: boolean) {
|
|
330
|
-
this._required = value;
|
|
331
|
-
if (value) {
|
|
332
|
-
this.setAttribute('required', '');
|
|
333
|
-
} else {
|
|
334
|
-
this.removeAttribute('required');
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* Get the minimum selections (MultiSelect mode).
|
|
340
|
-
*/
|
|
341
|
-
get minSelections(): number | undefined {
|
|
342
|
-
return this._minSelections;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Set the minimum selections (MultiSelect mode).
|
|
347
|
-
*/
|
|
348
|
-
set minSelections(value: number | undefined) {
|
|
349
|
-
this._minSelections = value;
|
|
350
|
-
if (value !== undefined) {
|
|
351
|
-
this.setAttribute('min-selections', String(value));
|
|
352
|
-
} else {
|
|
353
|
-
this.removeAttribute('min-selections');
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Get the maximum selections (MultiSelect mode).
|
|
359
|
-
*/
|
|
360
|
-
get maxSelections(): number | undefined {
|
|
361
|
-
return this._maxSelections;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* Set the maximum selections (MultiSelect mode).
|
|
366
|
-
*/
|
|
367
|
-
set maxSelections(value: number | undefined) {
|
|
368
|
-
this._maxSelections = value;
|
|
369
|
-
if (value !== undefined) {
|
|
370
|
-
this.setAttribute('max-selections', String(value));
|
|
371
|
-
} else {
|
|
372
|
-
this.removeAttribute('max-selections');
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Get the error state.
|
|
378
|
-
*/
|
|
379
|
-
get error(): boolean {
|
|
380
|
-
return this._error;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Set the error state.
|
|
385
|
-
*/
|
|
386
|
-
set error(value: boolean) {
|
|
387
|
-
this._error = value;
|
|
388
|
-
if (value) {
|
|
389
|
-
this.setAttribute('error', '');
|
|
390
|
-
} else {
|
|
391
|
-
this.removeAttribute('error');
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Get the error message.
|
|
397
|
-
*/
|
|
398
|
-
get errorMessage(): string | undefined {
|
|
399
|
-
return this._errorMessage;
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Set the error message.
|
|
404
|
-
*/
|
|
405
|
-
set errorMessage(value: string | undefined) {
|
|
406
|
-
this._errorMessage = value;
|
|
407
|
-
if (value) {
|
|
408
|
-
this.setAttribute('error-message', value);
|
|
409
|
-
} else {
|
|
410
|
-
this.removeAttribute('error-message');
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
/**
|
|
415
|
-
* Get the test ID.
|
|
416
|
-
*/
|
|
417
|
-
get testID(): string | undefined {
|
|
418
|
-
return this._testID;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
/**
|
|
422
|
-
* Set the test ID.
|
|
423
|
-
*/
|
|
424
|
-
set testID(value: string | undefined) {
|
|
425
|
-
this._testID = value;
|
|
426
|
-
if (value) {
|
|
427
|
-
this.setAttribute('test-id', value);
|
|
428
|
-
} else {
|
|
429
|
-
this.removeAttribute('test-id');
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// ─────────────────────────────────────────────────────────────────
|
|
434
|
-
// Callback Setters
|
|
435
|
-
// ─────────────────────────────────────────────────────────────────
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* Set the onItemClick callback (Tap mode).
|
|
439
|
-
*/
|
|
440
|
-
set onItemClick(callback: ((index: number) => void) | undefined) {
|
|
441
|
-
this._onItemClick = callback;
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
/**
|
|
445
|
-
* Get the onItemClick callback.
|
|
446
|
-
*/
|
|
447
|
-
get onItemClick(): ((index: number) => void) | undefined {
|
|
448
|
-
return this._onItemClick;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* Set the onSelectionChange callback (Select mode).
|
|
453
|
-
*/
|
|
454
|
-
set onSelectionChange(callback: ((index: number | null) => void) | undefined) {
|
|
455
|
-
this._onSelectionChange = callback;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Get the onSelectionChange callback.
|
|
460
|
-
*/
|
|
461
|
-
get onSelectionChange(): ((index: number | null) => void) | undefined {
|
|
462
|
-
return this._onSelectionChange;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/**
|
|
466
|
-
* Set the onMultiSelectionChange callback (MultiSelect mode).
|
|
467
|
-
*/
|
|
468
|
-
set onMultiSelectionChange(callback: ((indices: number[]) => void) | undefined) {
|
|
469
|
-
this._onMultiSelectionChange = callback;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* Get the onMultiSelectionChange callback.
|
|
474
|
-
*/
|
|
475
|
-
get onMultiSelectionChange(): ((indices: number[]) => void) | undefined {
|
|
476
|
-
return this._onMultiSelectionChange;
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
// ─────────────────────────────────────────────────────────────────
|
|
480
|
-
// Public Methods
|
|
481
|
-
// ─────────────────────────────────────────────────────────────────
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* Validate the current selection state.
|
|
485
|
-
*
|
|
486
|
-
* Checks if the current selection meets the validation requirements
|
|
487
|
-
* based on the mode and configured constraints (required, minSelections, maxSelections).
|
|
488
|
-
*
|
|
489
|
-
* This method can be called externally to validate the selection before
|
|
490
|
-
* form submission or other actions.
|
|
491
|
-
*
|
|
492
|
-
* @returns ValidationResult with isValid flag and optional error message
|
|
493
|
-
*
|
|
494
|
-
* @example
|
|
495
|
-
* ```typescript
|
|
496
|
-
* const set = document.querySelector('button-vertical-list-set');
|
|
497
|
-
* const result = set.validate();
|
|
498
|
-
* if (!result.isValid) {
|
|
499
|
-
* console.log(result.message); // "Please select an option"
|
|
500
|
-
* }
|
|
501
|
-
* ```
|
|
502
|
-
*
|
|
503
|
-
* @see Requirements 7.3, 7.4, 7.5
|
|
504
|
-
*/
|
|
505
|
-
validate(): { isValid: boolean; message: string | null } {
|
|
506
|
-
return validateSelection(
|
|
507
|
-
this._mode,
|
|
508
|
-
this._selectedIndex,
|
|
509
|
-
this._selectedIndices,
|
|
510
|
-
this._required,
|
|
511
|
-
this._minSelections,
|
|
512
|
-
this._maxSelections
|
|
513
|
-
);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
// ─────────────────────────────────────────────────────────────────
|
|
517
|
-
// Rendering (Incremental Update Architecture)
|
|
518
|
-
// ─────────────────────────────────────────────────────────────────
|
|
519
|
-
|
|
520
|
-
/**
|
|
521
|
-
* Main render entry point.
|
|
522
|
-
*
|
|
523
|
-
* Routes to _createDOM() for first render or _updateDOM() for subsequent updates.
|
|
524
|
-
* This architecture enables CSS transitions by preserving DOM element identity.
|
|
525
|
-
*/
|
|
526
|
-
private _render(): void {
|
|
527
|
-
if (!this._domCreated) {
|
|
528
|
-
this._createDOM();
|
|
529
|
-
this._domCreated = true;
|
|
530
|
-
this._attachEventListeners();
|
|
531
|
-
} else {
|
|
532
|
-
this._updateDOM();
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
/**
|
|
537
|
-
* Create the initial DOM structure (called once).
|
|
538
|
-
*
|
|
539
|
-
* Creates the shadow DOM structure with container and slot for children.
|
|
540
|
-
* Error message element is always present but hidden when not needed.
|
|
541
|
-
*
|
|
542
|
-
* @see Requirements 2.1, 11.2
|
|
543
|
-
*/
|
|
544
|
-
private _createDOM(): void {
|
|
545
|
-
// Get initial ARIA role based on mode
|
|
546
|
-
const role = getContainerRole(this._mode);
|
|
547
|
-
const ariaMultiSelectable = this._mode === 'multiSelect' ? 'true' : null;
|
|
548
|
-
|
|
549
|
-
// Create the shadow DOM structure
|
|
550
|
-
// Error message is conditionally rendered (only when errorMessage is provided)
|
|
551
|
-
// Slot receives child Button-VerticalList-Item elements
|
|
552
|
-
this._shadowRoot.innerHTML = `
|
|
553
|
-
<style>${componentStyles}</style>
|
|
554
|
-
<div
|
|
555
|
-
class="vls-container"
|
|
556
|
-
role="${role}"
|
|
557
|
-
${ariaMultiSelectable ? `aria-multiselectable="${ariaMultiSelectable}"` : ''}
|
|
558
|
-
>
|
|
559
|
-
<div
|
|
560
|
-
class="vls-error-message"
|
|
561
|
-
id="${this._errorMessageId}"
|
|
562
|
-
role="alert"
|
|
563
|
-
style="display: none;"
|
|
564
|
-
></div>
|
|
565
|
-
<slot></slot>
|
|
566
|
-
</div>
|
|
567
|
-
`;
|
|
568
|
-
|
|
569
|
-
// Cache element references for incremental updates
|
|
570
|
-
this._container = this._shadowRoot.querySelector('.vls-container');
|
|
571
|
-
this._errorMessageEl = this._shadowRoot.querySelector('.vls-error-message');
|
|
572
|
-
|
|
573
|
-
// Apply initial state
|
|
574
|
-
this._updateDOM();
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
/**
|
|
578
|
-
* Update existing DOM elements (called on attribute changes).
|
|
579
|
-
*
|
|
580
|
-
* Only updates properties that need to change, preserving DOM element identity.
|
|
581
|
-
* This enables CSS transitions to animate smoothly between states.
|
|
582
|
-
*
|
|
583
|
-
* @see Requirements 2.1, 11.2
|
|
584
|
-
*/
|
|
585
|
-
private _updateDOM(): void {
|
|
586
|
-
if (!this._container) return;
|
|
587
|
-
|
|
588
|
-
// Update ARIA role based on mode
|
|
589
|
-
const role = getContainerRole(this._mode);
|
|
590
|
-
this._container.setAttribute('role', role);
|
|
591
|
-
|
|
592
|
-
// Update aria-multiselectable for multiSelect mode
|
|
593
|
-
if (this._mode === 'multiSelect') {
|
|
594
|
-
this._container.setAttribute('aria-multiselectable', 'true');
|
|
595
|
-
} else {
|
|
596
|
-
this._container.removeAttribute('aria-multiselectable');
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
// Update error state accessibility attributes
|
|
600
|
-
if (this._error && this._errorMessage) {
|
|
601
|
-
this._container.setAttribute('aria-invalid', 'true');
|
|
602
|
-
this._container.setAttribute('aria-describedby', this._errorMessageId);
|
|
603
|
-
} else {
|
|
604
|
-
this._container.removeAttribute('aria-invalid');
|
|
605
|
-
this._container.removeAttribute('aria-describedby');
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
// Update test ID
|
|
609
|
-
if (this._testID) {
|
|
610
|
-
this._container.setAttribute('data-testid', this._testID);
|
|
611
|
-
} else {
|
|
612
|
-
this._container.removeAttribute('data-testid');
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
// Update error message
|
|
616
|
-
if (this._errorMessageEl) {
|
|
617
|
-
if (this._error && this._errorMessage) {
|
|
618
|
-
this._errorMessageEl.textContent = this._errorMessage;
|
|
619
|
-
this._errorMessageEl.style.display = '';
|
|
620
|
-
} else {
|
|
621
|
-
this._errorMessageEl.textContent = '';
|
|
622
|
-
this._errorMessageEl.style.display = 'none';
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
// Update child items (will be implemented in Task 3)
|
|
627
|
-
// For now, just propagate error state to children
|
|
628
|
-
this._updateChildItems();
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
/**
|
|
632
|
-
* Update child Button-VerticalList-Item elements.
|
|
633
|
-
*
|
|
634
|
-
* Propagates visual state, transition delay, checkmark transition, error state,
|
|
635
|
-
* and ARIA attributes to children. Uses deriveItemStates() to calculate visual
|
|
636
|
-
* states from controlled props. Also sets up roving tabindex pattern for
|
|
637
|
-
* keyboard navigation.
|
|
638
|
-
*
|
|
639
|
-
* Communication props passed to children:
|
|
640
|
-
* - `visual-state`: Derived from controlled props (mode, selectedIndex, selectedIndices)
|
|
641
|
-
* - `transition-delay`: Animation timing coordination (calculated in Task 6)
|
|
642
|
-
* - `checkmark-transition`: Checkmark animation behavior ('fade' or 'instant')
|
|
643
|
-
* - `error`: Error state propagation to all children
|
|
644
|
-
* - `tabindex`: Roving tabindex for keyboard navigation (0 for focused, -1 for others)
|
|
645
|
-
*
|
|
646
|
-
* @see Requirements 3.1, 4.1, 4.2, 5.1, 6.5, 7.1, 8.6, 9.6
|
|
647
|
-
*/
|
|
648
|
-
private _updateChildItems(): void {
|
|
649
|
-
// Get all slotted children
|
|
650
|
-
const slot = this._shadowRoot.querySelector('slot');
|
|
651
|
-
if (!slot) return;
|
|
652
|
-
|
|
653
|
-
const children = slot.assignedElements() as HTMLElement[];
|
|
654
|
-
const itemCount = children.length;
|
|
655
|
-
|
|
656
|
-
// Derive visual states from controlled props
|
|
657
|
-
// This is the core state derivation logic per design document
|
|
658
|
-
const visualStates = deriveItemStates(
|
|
659
|
-
this._mode,
|
|
660
|
-
this._selectedIndex,
|
|
661
|
-
this._selectedIndices,
|
|
662
|
-
itemCount
|
|
663
|
-
);
|
|
664
|
-
|
|
665
|
-
// Calculate transition delays for animation coordination
|
|
666
|
-
// @see Requirements 6.1, 6.2, 6.3, 6.4: Animation timing coordination
|
|
667
|
-
const transitionDelays = this._calculateTransitionDelays(itemCount, visualStates);
|
|
668
|
-
|
|
669
|
-
// Calculate checkmark transitions for animation coordination
|
|
670
|
-
// @see Requirement 6.5: "checkmarkTransition='instant' on deselecting items in Select mode"
|
|
671
|
-
const checkmarkTransitions = this._calculateCheckmarkTransitions(itemCount, visualStates);
|
|
672
|
-
|
|
673
|
-
// Determine ARIA role for items based on mode
|
|
674
|
-
// @see Requirements 3.4, 4.7, 5.5
|
|
675
|
-
const itemRole = this._getItemRole();
|
|
676
|
-
|
|
677
|
-
// Ensure focused index is within bounds
|
|
678
|
-
// @see Requirement 8.6: Roving tabindex pattern
|
|
679
|
-
if (this._internalState.focusedIndex >= itemCount) {
|
|
680
|
-
this._internalState.focusedIndex = Math.max(0, itemCount - 1);
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
// Update each child with derived state
|
|
684
|
-
children.forEach((child, index) => {
|
|
685
|
-
if (child.tagName.toLowerCase() === 'button-vertical-list-item') {
|
|
686
|
-
// Set visual state derived from controlled props
|
|
687
|
-
// @see Requirements 9.6: "derive child visual states from controlled props"
|
|
688
|
-
const visualState = visualStates[index];
|
|
689
|
-
child.setAttribute('visual-state', visualState);
|
|
690
|
-
|
|
691
|
-
// Set transition delay for animation coordination
|
|
692
|
-
// @see Requirements 6.1, 6.2, 6.3, 6.4: Animation timing coordination
|
|
693
|
-
const transitionDelay = transitionDelays[index];
|
|
694
|
-
child.setAttribute('transition-delay', String(transitionDelay));
|
|
695
|
-
|
|
696
|
-
// Set checkmark transition for animation coordination
|
|
697
|
-
// @see Requirement 6.5: "checkmarkTransition='instant' on deselecting items in Select mode"
|
|
698
|
-
// Note: Map 'animated' to 'fade' for Item component compatibility
|
|
699
|
-
const checkmarkTransition = checkmarkTransitions[index];
|
|
700
|
-
child.setAttribute('checkmark-transition', checkmarkTransition === 'instant' ? 'instant' : 'fade');
|
|
701
|
-
|
|
702
|
-
// Propagate error state to all children
|
|
703
|
-
// @see Requirements 7.1: "pass error={true} to all child items"
|
|
704
|
-
if (this._error) {
|
|
705
|
-
child.setAttribute('error', 'true');
|
|
706
|
-
} else {
|
|
707
|
-
child.setAttribute('error', 'false');
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
// Set ARIA role for the item based on mode
|
|
711
|
-
// @see Requirements 3.4, 4.7, 5.5
|
|
712
|
-
child.setAttribute('role', itemRole);
|
|
713
|
-
|
|
714
|
-
// Set aria-checked for radio and checkbox roles
|
|
715
|
-
// @see Requirements 4.7, 5.5
|
|
716
|
-
if (itemRole === 'radio' || itemRole === 'checkbox') {
|
|
717
|
-
const isChecked = this._getItemAriaChecked(index, visualState);
|
|
718
|
-
child.setAttribute('aria-checked', isChecked ? 'true' : 'false');
|
|
719
|
-
} else {
|
|
720
|
-
// Button role doesn't use aria-checked
|
|
721
|
-
child.removeAttribute('aria-checked');
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
// Set tabindex for roving tabindex pattern
|
|
725
|
-
// @see Requirement 8.6: "focused item has tabindex=0, others have tabindex=-1"
|
|
726
|
-
if (index === this._internalState.focusedIndex) {
|
|
727
|
-
child.setAttribute('tabindex', '0');
|
|
728
|
-
} else {
|
|
729
|
-
child.setAttribute('tabindex', '-1');
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
/**
|
|
736
|
-
* Get the ARIA role for child items based on mode.
|
|
737
|
-
*
|
|
738
|
-
* Role mapping:
|
|
739
|
-
* - Tap mode: 'button' (simple action buttons)
|
|
740
|
-
* - Select mode: 'radio' (single-selection radio-button style)
|
|
741
|
-
* - MultiSelect mode: 'checkbox' (multiple-selection checkbox style)
|
|
742
|
-
*
|
|
743
|
-
* @returns The ARIA role for child items
|
|
744
|
-
* @see Requirements 3.4, 4.7, 5.5
|
|
745
|
-
*/
|
|
746
|
-
private _getItemRole(): 'button' | 'radio' | 'checkbox' {
|
|
747
|
-
switch (this._mode) {
|
|
748
|
-
case 'tap':
|
|
749
|
-
return 'button';
|
|
750
|
-
case 'select':
|
|
751
|
-
return 'radio';
|
|
752
|
-
case 'multiSelect':
|
|
753
|
-
return 'checkbox';
|
|
754
|
-
default:
|
|
755
|
-
return 'button';
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
/**
|
|
760
|
-
* Determine if an item should have aria-checked="true".
|
|
761
|
-
*
|
|
762
|
-
* For Select mode (radio): Item is checked if it's the selected item
|
|
763
|
-
* For MultiSelect mode (checkbox): Item is checked if it's in the selectedIndices array
|
|
764
|
-
*
|
|
765
|
-
* @param index - The index of the item
|
|
766
|
-
* @param visualState - The visual state of the item
|
|
767
|
-
* @returns true if the item should be aria-checked="true"
|
|
768
|
-
* @see Requirements 4.7, 5.5
|
|
769
|
-
*/
|
|
770
|
-
private _getItemAriaChecked(index: number, visualState: string): boolean {
|
|
771
|
-
switch (this._mode) {
|
|
772
|
-
case 'select':
|
|
773
|
-
// In Select mode, item is checked if it's the selected item
|
|
774
|
-
// Visual states 'selected' indicates the item is checked
|
|
775
|
-
return visualState === 'selected';
|
|
776
|
-
case 'multiSelect':
|
|
777
|
-
// In MultiSelect mode, item is checked if it's in the selectedIndices array
|
|
778
|
-
// Visual state 'checked' indicates the item is checked
|
|
779
|
-
return visualState === 'checked';
|
|
780
|
-
default:
|
|
781
|
-
// Tap mode doesn't use aria-checked
|
|
782
|
-
return false;
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
/**
|
|
787
|
-
* Calculate transition delays for animation coordination.
|
|
788
|
-
*
|
|
789
|
-
* This method coordinates animation timing across child items based on
|
|
790
|
-
* the current mode and selection state. It uses the animation timing
|
|
791
|
-
* functions from types.ts to determine appropriate delays.
|
|
792
|
-
*
|
|
793
|
-
* Animation timing rules:
|
|
794
|
-
* - **Select mode - Selection change**: Deselecting item gets 0ms, selecting item gets 125ms (staggered handoff)
|
|
795
|
-
* - **Select mode - First selection**: All items get 0ms (simultaneous)
|
|
796
|
-
* - **Select mode - Deselection**: All items get 0ms (simultaneous)
|
|
797
|
-
* - **MultiSelect mode - Toggle**: Toggled item gets 0ms (independent)
|
|
798
|
-
* - **Tap mode**: All items get 0ms (no selection state)
|
|
799
|
-
*
|
|
800
|
-
* @param itemCount - Number of child items
|
|
801
|
-
* @param visualStates - Array of visual states for each item
|
|
802
|
-
* @returns Array of transition delays in milliseconds
|
|
803
|
-
* @see Requirements 6.1, 6.2, 6.3, 6.4
|
|
804
|
-
*/
|
|
805
|
-
private _calculateTransitionDelays(itemCount: number, visualStates: string[]): number[] {
|
|
806
|
-
// Tap mode: No animation coordination needed
|
|
807
|
-
if (this._mode === 'tap') {
|
|
808
|
-
return Array(itemCount).fill(0);
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
// MultiSelect mode: Independent animation per item
|
|
812
|
-
// Each item animates immediately when toggled
|
|
813
|
-
// @see Requirement 6.4: "WHEN items toggle in MultiSelect mode THEN toggled item gets 0ms"
|
|
814
|
-
if (this._mode === 'multiSelect') {
|
|
815
|
-
// In multiSelect mode, we don't track previous state for staggering
|
|
816
|
-
// Each toggle is independent, so all items get 0ms delay
|
|
817
|
-
return calculateMultiSelectDelay(0, itemCount);
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
// Select mode: Coordinate animation timing based on selection state
|
|
821
|
-
// @see Requirements 6.1, 6.2, 6.3
|
|
822
|
-
if (this._mode === 'select') {
|
|
823
|
-
const previousIndex = this._internalState.previousSelectedIndex;
|
|
824
|
-
const currentIndex = this._selectedIndex;
|
|
825
|
-
const isFirstSelection = this._internalState.isFirstSelection;
|
|
826
|
-
|
|
827
|
-
// Case 1: First selection (no previous selection)
|
|
828
|
-
// All items animate simultaneously
|
|
829
|
-
// @see Requirement 6.2: "WHEN first selection is made THEN all items get 0ms"
|
|
830
|
-
if (isFirstSelection && currentIndex !== null) {
|
|
831
|
-
return calculateFirstSelectionDelays(itemCount);
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
// Case 2: Deselection (clearing selection)
|
|
835
|
-
// All items animate simultaneously back to rest
|
|
836
|
-
// @see Requirement 6.3: "WHEN deselection occurs THEN all items get 0ms"
|
|
837
|
-
if (currentIndex === null && previousIndex !== null) {
|
|
838
|
-
return calculateDeselectionDelays(itemCount);
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
// Case 3: Selection change (from one item to another)
|
|
842
|
-
// Staggered animation: deselecting item starts first, selecting item follows
|
|
843
|
-
// @see Requirement 6.1: "WHEN selection changes THEN deselecting gets 0ms, selecting gets 125ms"
|
|
844
|
-
if (previousIndex !== null && currentIndex !== null && previousIndex !== currentIndex) {
|
|
845
|
-
return calculateStaggeredDelays(previousIndex, currentIndex, itemCount);
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
// Default: No animation coordination needed
|
|
849
|
-
return Array(itemCount).fill(0);
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
// Fallback: No animation coordination
|
|
853
|
-
return Array(itemCount).fill(0);
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
/**
|
|
857
|
-
* Calculate checkmark transitions for animation coordination.
|
|
858
|
-
*
|
|
859
|
-
* This method determines the checkmark transition behavior for each child item
|
|
860
|
-
* based on the current mode and selection state. In Select mode, deselecting
|
|
861
|
-
* items get 'instant' checkmark removal while selecting items get 'animated'.
|
|
862
|
-
*
|
|
863
|
-
* Checkmark transition rules:
|
|
864
|
-
* - **Select mode - Deselecting item**: 'instant' (checkmark hides immediately)
|
|
865
|
-
* - **Select mode - Selecting item**: 'animated' (checkmark fades in)
|
|
866
|
-
* - **Select mode - Other items**: 'animated' (default)
|
|
867
|
-
* - **MultiSelect mode**: 'animated' (all items animate normally)
|
|
868
|
-
* - **Tap mode**: 'animated' (no checkmarks, but default to animated)
|
|
869
|
-
*
|
|
870
|
-
* @param itemCount - Number of child items
|
|
871
|
-
* @param visualStates - Array of visual states for each item
|
|
872
|
-
* @returns Array of checkmark transition values ('animated' | 'instant')
|
|
873
|
-
* @see Requirement 6.5: "checkmarkTransition='instant' on deselecting items in Select mode"
|
|
874
|
-
*/
|
|
875
|
-
private _calculateCheckmarkTransitions(itemCount: number, visualStates: string[]): ('animated' | 'instant')[] {
|
|
876
|
-
// Tap mode: No checkmarks, default to animated
|
|
877
|
-
if (this._mode === 'tap') {
|
|
878
|
-
return Array(itemCount).fill('animated');
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
// MultiSelect mode: All items animate normally
|
|
882
|
-
// @see Requirement 6.5: Only Select mode uses instant checkmark removal
|
|
883
|
-
if (this._mode === 'multiSelect') {
|
|
884
|
-
return Array(itemCount).fill('animated');
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
// Select mode: Determine which item is deselecting
|
|
888
|
-
// @see Requirement 6.5: "checkmarkTransition='instant' on deselecting items in Select mode"
|
|
889
|
-
if (this._mode === 'select') {
|
|
890
|
-
const previousIndex = this._internalState.previousSelectedIndex;
|
|
891
|
-
const currentIndex = this._selectedIndex;
|
|
892
|
-
|
|
893
|
-
// Create array with default 'animated' transitions
|
|
894
|
-
const transitions: ('animated' | 'instant')[] = Array(itemCount).fill('animated');
|
|
895
|
-
|
|
896
|
-
// Case: Selection change (from one item to another)
|
|
897
|
-
// The deselecting item (previousIndex) gets 'instant' checkmark removal
|
|
898
|
-
if (previousIndex !== null && currentIndex !== null && previousIndex !== currentIndex) {
|
|
899
|
-
// Use getCheckmarkTransition to determine the transition for the deselecting item
|
|
900
|
-
transitions[previousIndex] = getCheckmarkTransition(true, this._mode);
|
|
901
|
-
// Selecting item gets animated transition
|
|
902
|
-
transitions[currentIndex] = getCheckmarkTransition(false, this._mode);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
// Case: Deselection (clearing selection by clicking selected item)
|
|
906
|
-
// The deselecting item gets 'instant' checkmark removal
|
|
907
|
-
if (currentIndex === null && previousIndex !== null) {
|
|
908
|
-
transitions[previousIndex] = getCheckmarkTransition(true, this._mode);
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
return transitions;
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
// Fallback: All items animate normally
|
|
915
|
-
return Array(itemCount).fill('animated');
|
|
916
|
-
}
|
|
917
|
-
|
|
918
|
-
// ─────────────────────────────────────────────────────────────────
|
|
919
|
-
// Event Handling
|
|
920
|
-
// ─────────────────────────────────────────────────────────────────
|
|
921
|
-
|
|
922
|
-
/**
|
|
923
|
-
* Attach event listeners.
|
|
924
|
-
*
|
|
925
|
-
* Sets up listeners for child item clicks and keyboard navigation.
|
|
926
|
-
*
|
|
927
|
-
* @see Requirements 8.1, 8.2, 8.3, 8.4, 8.5, 8.6
|
|
928
|
-
*/
|
|
929
|
-
private _attachEventListeners(): void {
|
|
930
|
-
// Listen for slot changes to update child items
|
|
931
|
-
const slot = this._shadowRoot.querySelector('slot');
|
|
932
|
-
if (slot) {
|
|
933
|
-
slot.addEventListener('slotchange', this._handleSlotChange);
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
// Listen for click events from children (bubbles through slot)
|
|
937
|
-
this.addEventListener('click', this._handleChildClick);
|
|
938
|
-
|
|
939
|
-
// Listen for keyboard events for navigation
|
|
940
|
-
// @see Requirements 8.1, 8.2, 8.3, 8.4, 8.5
|
|
941
|
-
this.addEventListener('keydown', this._handleKeyDown);
|
|
942
|
-
|
|
943
|
-
// Listen for focus events to track which item has focus
|
|
944
|
-
// @see Requirement 8.6: Roving tabindex pattern
|
|
945
|
-
this.addEventListener('focusin', this._handleFocusIn);
|
|
946
|
-
}
|
|
947
|
-
|
|
948
|
-
/**
|
|
949
|
-
* Detach event listeners.
|
|
950
|
-
*/
|
|
951
|
-
private _detachEventListeners(): void {
|
|
952
|
-
const slot = this._shadowRoot.querySelector('slot');
|
|
953
|
-
if (slot) {
|
|
954
|
-
slot.removeEventListener('slotchange', this._handleSlotChange);
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
this.removeEventListener('click', this._handleChildClick);
|
|
958
|
-
this.removeEventListener('keydown', this._handleKeyDown);
|
|
959
|
-
this.removeEventListener('focusin', this._handleFocusIn);
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
/**
|
|
963
|
-
* Handle slot change events.
|
|
964
|
-
*
|
|
965
|
-
* Called when children are added or removed from the slot.
|
|
966
|
-
*/
|
|
967
|
-
private _handleSlotChange = (): void => {
|
|
968
|
-
// Update child items when slot content changes
|
|
969
|
-
this._updateChildItems();
|
|
970
|
-
};
|
|
971
|
-
|
|
972
|
-
/**
|
|
973
|
-
* Handle click events from child items.
|
|
974
|
-
*
|
|
975
|
-
* Determines which child was clicked and invokes appropriate callback
|
|
976
|
-
* based on the current mode.
|
|
977
|
-
*
|
|
978
|
-
* Mode behaviors:
|
|
979
|
-
* - **Tap**: Invokes onItemClick callback with clicked index
|
|
980
|
-
* - **Select**: Toggles selection (select new item or deselect if same)
|
|
981
|
-
* - **MultiSelect**: Toggles item in selection array (Task 3.4)
|
|
982
|
-
*
|
|
983
|
-
* @param event - The click event
|
|
984
|
-
* @see Requirements 3.2, 4.2, 4.3, 4.4, 4.5, 9.3, 9.5
|
|
985
|
-
*/
|
|
986
|
-
private _handleChildClick = (event: Event): void => {
|
|
987
|
-
// Find the clicked child item
|
|
988
|
-
const target = event.target as HTMLElement;
|
|
989
|
-
|
|
990
|
-
// Check if the click came from a button-vertical-list-item
|
|
991
|
-
const item = target.closest('button-vertical-list-item');
|
|
992
|
-
if (!item) return;
|
|
993
|
-
|
|
994
|
-
// Get the index of the clicked item
|
|
995
|
-
const slot = this._shadowRoot.querySelector('slot');
|
|
996
|
-
if (!slot) return;
|
|
997
|
-
|
|
998
|
-
const children = slot.assignedElements();
|
|
999
|
-
const index = children.indexOf(item);
|
|
1000
|
-
|
|
1001
|
-
if (index === -1) return;
|
|
1002
|
-
|
|
1003
|
-
// Handle click based on mode
|
|
1004
|
-
switch (this._mode) {
|
|
1005
|
-
case 'tap':
|
|
1006
|
-
// Tap mode: Invoke callback with clicked index
|
|
1007
|
-
// No selection state tracking
|
|
1008
|
-
// @see Requirements 3.2, 9.5
|
|
1009
|
-
if (this._onItemClick) {
|
|
1010
|
-
this._onItemClick(index);
|
|
1011
|
-
}
|
|
1012
|
-
break;
|
|
1013
|
-
|
|
1014
|
-
case 'select':
|
|
1015
|
-
// Select mode: Single-selection (radio-button style)
|
|
1016
|
-
// @see Requirements 4.2, 4.3, 4.4, 4.5, 9.3
|
|
1017
|
-
this._handleSelectModeClick(index);
|
|
1018
|
-
break;
|
|
1019
|
-
|
|
1020
|
-
case 'multiSelect':
|
|
1021
|
-
// MultiSelect mode: Multiple-selection (checkbox style)
|
|
1022
|
-
// @see Requirements 5.2, 5.3, 9.4
|
|
1023
|
-
this._handleMultiSelectModeClick(index);
|
|
1024
|
-
break;
|
|
1025
|
-
}
|
|
1026
|
-
};
|
|
1027
|
-
|
|
1028
|
-
/**
|
|
1029
|
-
* Handle click in Select mode.
|
|
1030
|
-
*
|
|
1031
|
-
* Implements single-selection behavior:
|
|
1032
|
-
* - Clicking an unselected item selects it (and deselects any previous selection)
|
|
1033
|
-
* - Clicking the currently selected item deselects it (returns to null)
|
|
1034
|
-
*
|
|
1035
|
-
* This is a controlled component, so we invoke the callback and let the parent
|
|
1036
|
-
* update the selectedIndex prop. The visual state update happens when the
|
|
1037
|
-
* attribute changes.
|
|
1038
|
-
*
|
|
1039
|
-
* Also handles:
|
|
1040
|
-
* - Error clearing: when a valid selection is made and required is true
|
|
1041
|
-
* - Selection history tracking: updates previousSelectedIndex and isFirstSelection
|
|
1042
|
-
* for animation coordination
|
|
1043
|
-
*
|
|
1044
|
-
* @param clickedIndex - The index of the clicked item
|
|
1045
|
-
* @see Requirements 4.2, 4.3, 4.4, 4.5, 6.1, 6.2, 6.3, 7.3, 9.3
|
|
1046
|
-
*/
|
|
1047
|
-
private _handleSelectModeClick(clickedIndex: number): void {
|
|
1048
|
-
// Determine the new selection state
|
|
1049
|
-
let newSelectedIndex: number | null;
|
|
1050
|
-
|
|
1051
|
-
if (this._selectedIndex === clickedIndex) {
|
|
1052
|
-
// Clicking the currently selected item deselects it
|
|
1053
|
-
// @see Requirement 4.3: "clicking selected item SHALL reset all items to rest state"
|
|
1054
|
-
newSelectedIndex = null;
|
|
1055
|
-
} else {
|
|
1056
|
-
// Clicking a different item selects it
|
|
1057
|
-
// @see Requirement 4.2, 4.4: "selecting an item SHALL set that item to selected state"
|
|
1058
|
-
newSelectedIndex = clickedIndex;
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
// ─────────────────────────────────────────────────────────────────
|
|
1062
|
-
// Selection History Tracking for Animation Coordination
|
|
1063
|
-
// @see Requirements 6.1, 6.2, 6.3
|
|
1064
|
-
// ─────────────────────────────────────────────────────────────────
|
|
1065
|
-
|
|
1066
|
-
// Track previous selection for stagger calculation
|
|
1067
|
-
// @see Requirement 6.1: "WHEN selection changes between items THEN
|
|
1068
|
-
// deselecting item gets 0ms, selecting item gets 125ms"
|
|
1069
|
-
this._internalState.previousSelectedIndex = this._selectedIndex;
|
|
1070
|
-
|
|
1071
|
-
// Handle deselection: reset isFirstSelection flag
|
|
1072
|
-
// @see Requirement 6.3: "WHEN deselection occurs THEN all items get 0ms"
|
|
1073
|
-
if (newSelectedIndex === null) {
|
|
1074
|
-
// Deselection resets the first selection flag
|
|
1075
|
-
// Next selection will be treated as "first selection" again
|
|
1076
|
-
this._internalState.isFirstSelection = true;
|
|
1077
|
-
} else if (this._internalState.isFirstSelection) {
|
|
1078
|
-
// First selection made - clear the flag for future selections
|
|
1079
|
-
// @see Requirement 6.2: "WHEN first selection is made THEN all items get 0ms"
|
|
1080
|
-
// After this selection, subsequent selections will use staggered animation
|
|
1081
|
-
this._internalState.isFirstSelection = false;
|
|
1082
|
-
}
|
|
1083
|
-
|
|
1084
|
-
// Clear error on valid selection
|
|
1085
|
-
// @see Requirement 7.3: "WHEN a valid selection is made AND required is true THEN clear error"
|
|
1086
|
-
if (this._error && this._required && newSelectedIndex !== null) {
|
|
1087
|
-
// Validate the new selection
|
|
1088
|
-
const validation = validateSelection(
|
|
1089
|
-
this._mode,
|
|
1090
|
-
newSelectedIndex,
|
|
1091
|
-
this._selectedIndices,
|
|
1092
|
-
this._required,
|
|
1093
|
-
this._minSelections,
|
|
1094
|
-
this._maxSelections
|
|
1095
|
-
);
|
|
1096
|
-
|
|
1097
|
-
if (validation.isValid) {
|
|
1098
|
-
// Clear error state
|
|
1099
|
-
this._error = false;
|
|
1100
|
-
this._errorMessage = undefined;
|
|
1101
|
-
this.removeAttribute('error');
|
|
1102
|
-
this.removeAttribute('error-message');
|
|
1103
|
-
|
|
1104
|
-
// Update DOM to reflect cleared error
|
|
1105
|
-
if (this._domCreated) {
|
|
1106
|
-
this._updateDOM();
|
|
1107
|
-
}
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1110
|
-
|
|
1111
|
-
// Invoke the callback with the new selection
|
|
1112
|
-
// @see Requirement 4.5, 9.3: "SHALL invoke onSelectionChange callback"
|
|
1113
|
-
if (this._onSelectionChange) {
|
|
1114
|
-
this._onSelectionChange(newSelectedIndex);
|
|
1115
|
-
}
|
|
1116
|
-
}
|
|
1117
|
-
|
|
1118
|
-
/**
|
|
1119
|
-
* Handle click in MultiSelect mode.
|
|
1120
|
-
*
|
|
1121
|
-
* Implements multiple-selection behavior (checkbox style):
|
|
1122
|
-
* - Clicking an unchecked item adds it to the selection (toggles to checked)
|
|
1123
|
-
* - Clicking a checked item removes it from the selection (toggles to unchecked)
|
|
1124
|
-
*
|
|
1125
|
-
* This is a controlled component, so we invoke the callback and let the parent
|
|
1126
|
-
* update the selectedIndices prop. The visual state update happens when the
|
|
1127
|
-
* attribute changes.
|
|
1128
|
-
*
|
|
1129
|
-
* Also handles:
|
|
1130
|
-
* - Max selection enforcement: prevents selecting beyond maxSelections
|
|
1131
|
-
* - Error clearing: clears error when selection becomes valid
|
|
1132
|
-
*
|
|
1133
|
-
* @param clickedIndex - The index of the clicked item
|
|
1134
|
-
* @see Requirements 5.2, 5.3, 7.4, 7.5, 9.4
|
|
1135
|
-
*/
|
|
1136
|
-
private _handleMultiSelectModeClick(clickedIndex: number): void {
|
|
1137
|
-
// Check if the item can be selected (respects maxSelections)
|
|
1138
|
-
// @see Requirement 7.5: "WHEN maxSelections is set THEN prevent selecting more"
|
|
1139
|
-
if (!canSelectItem(clickedIndex, this._selectedIndices, this._maxSelections)) {
|
|
1140
|
-
// At max selections and trying to select a new item - do nothing
|
|
1141
|
-
return;
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
// Create a new array to avoid mutating the existing one
|
|
1145
|
-
let newSelectedIndices: number[];
|
|
1146
|
-
|
|
1147
|
-
if (this._selectedIndices.includes(clickedIndex)) {
|
|
1148
|
-
// Item is currently checked - remove it from selection (toggle to unchecked)
|
|
1149
|
-
// @see Requirement 5.2: "toggling an item SHALL toggle between checked and unchecked"
|
|
1150
|
-
newSelectedIndices = this._selectedIndices.filter(i => i !== clickedIndex);
|
|
1151
|
-
} else {
|
|
1152
|
-
// Item is currently unchecked - add it to selection (toggle to checked)
|
|
1153
|
-
// @see Requirement 5.2: "toggling an item SHALL toggle between checked and unchecked"
|
|
1154
|
-
newSelectedIndices = [...this._selectedIndices, clickedIndex];
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
// Clear error on valid selection
|
|
1158
|
-
// @see Requirement 7.4: "WHEN minSelections is set THEN validate at least that many"
|
|
1159
|
-
if (this._error) {
|
|
1160
|
-
// Validate the new selection
|
|
1161
|
-
const validation = validateSelection(
|
|
1162
|
-
this._mode,
|
|
1163
|
-
this._selectedIndex,
|
|
1164
|
-
newSelectedIndices,
|
|
1165
|
-
this._required,
|
|
1166
|
-
this._minSelections,
|
|
1167
|
-
this._maxSelections
|
|
1168
|
-
);
|
|
1169
|
-
|
|
1170
|
-
if (validation.isValid) {
|
|
1171
|
-
// Clear error state
|
|
1172
|
-
this._error = false;
|
|
1173
|
-
this._errorMessage = undefined;
|
|
1174
|
-
this.removeAttribute('error');
|
|
1175
|
-
this.removeAttribute('error-message');
|
|
1176
|
-
|
|
1177
|
-
// Update DOM to reflect cleared error
|
|
1178
|
-
if (this._domCreated) {
|
|
1179
|
-
this._updateDOM();
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
|
-
// Invoke the callback with the complete array of selected indices
|
|
1185
|
-
// @see Requirement 5.3, 9.4: "SHALL invoke onMultiSelectionChange callback with array of selected indices"
|
|
1186
|
-
if (this._onMultiSelectionChange) {
|
|
1187
|
-
this._onMultiSelectionChange(newSelectedIndices);
|
|
1188
|
-
}
|
|
1189
|
-
}
|
|
1190
|
-
|
|
1191
|
-
// ─────────────────────────────────────────────────────────────────
|
|
1192
|
-
// Keyboard Navigation
|
|
1193
|
-
// ─────────────────────────────────────────────────────────────────
|
|
1194
|
-
|
|
1195
|
-
/**
|
|
1196
|
-
* Handle keyboard events for navigation.
|
|
1197
|
-
*
|
|
1198
|
-
* Implements keyboard navigation per WCAG 2.1 AA requirements:
|
|
1199
|
-
* - Arrow Up/Down: Move focus between items with wrapping
|
|
1200
|
-
* - Home: Move focus to first item
|
|
1201
|
-
* - End: Move focus to last item
|
|
1202
|
-
* - Enter/Space: Activate the focused item based on mode
|
|
1203
|
-
*
|
|
1204
|
-
* @param event - The keyboard event
|
|
1205
|
-
* @see Requirements 8.2, 8.3, 8.4, 8.5
|
|
1206
|
-
*/
|
|
1207
|
-
private _handleKeyDown = (event: KeyboardEvent): void => {
|
|
1208
|
-
// Get all child items
|
|
1209
|
-
const children = this._getChildItems();
|
|
1210
|
-
const itemCount = children.length;
|
|
1211
|
-
|
|
1212
|
-
// No items to navigate
|
|
1213
|
-
if (itemCount === 0) return;
|
|
1214
|
-
|
|
1215
|
-
// Process the key and determine action
|
|
1216
|
-
const result = this._processKeyboardNavigation(event, itemCount);
|
|
1217
|
-
|
|
1218
|
-
// If the key wasn't handled, let it propagate
|
|
1219
|
-
if (!result.handled) return;
|
|
1220
|
-
|
|
1221
|
-
// Prevent default behavior for handled keys
|
|
1222
|
-
event.preventDefault();
|
|
1223
|
-
|
|
1224
|
-
// Update focus if needed
|
|
1225
|
-
if (result.newFocusIndex !== this._internalState.focusedIndex) {
|
|
1226
|
-
this._moveFocusToIndex(result.newFocusIndex, children);
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
// Activate item if needed (Enter/Space)
|
|
1230
|
-
if (result.shouldActivate) {
|
|
1231
|
-
this._activateItem(this._internalState.focusedIndex);
|
|
1232
|
-
}
|
|
1233
|
-
};
|
|
1234
|
-
|
|
1235
|
-
/**
|
|
1236
|
-
* Process keyboard navigation and determine the action to take.
|
|
1237
|
-
*
|
|
1238
|
-
* Implements the key handler logic from the design document:
|
|
1239
|
-
* - Arrow Down: Move focus to next item (wrap to first)
|
|
1240
|
-
* - Arrow Up: Move focus to previous item (wrap to last)
|
|
1241
|
-
* - Home: Move focus to first item
|
|
1242
|
-
* - End: Move focus to last item
|
|
1243
|
-
* - Enter/Space: Activate the focused item
|
|
1244
|
-
*
|
|
1245
|
-
* @param event - The keyboard event
|
|
1246
|
-
* @param itemCount - Number of child items
|
|
1247
|
-
* @returns Object with newFocusIndex, shouldActivate, and handled flags
|
|
1248
|
-
* @see Requirements 8.2, 8.3, 8.4, 8.5
|
|
1249
|
-
*/
|
|
1250
|
-
private _processKeyboardNavigation(
|
|
1251
|
-
event: KeyboardEvent,
|
|
1252
|
-
itemCount: number
|
|
1253
|
-
): { newFocusIndex: number; shouldActivate: boolean; handled: boolean } {
|
|
1254
|
-
const currentIndex = this._internalState.focusedIndex;
|
|
1255
|
-
|
|
1256
|
-
switch (event.key) {
|
|
1257
|
-
case 'ArrowDown':
|
|
1258
|
-
// Move focus to next item, wrap to first if at end
|
|
1259
|
-
// @see Requirement 8.2: "Arrow Down SHALL move focus between items"
|
|
1260
|
-
return {
|
|
1261
|
-
newFocusIndex: (currentIndex + 1) % itemCount,
|
|
1262
|
-
shouldActivate: false,
|
|
1263
|
-
handled: true
|
|
1264
|
-
};
|
|
1265
|
-
|
|
1266
|
-
case 'ArrowUp':
|
|
1267
|
-
// Move focus to previous item, wrap to last if at beginning
|
|
1268
|
-
// @see Requirement 8.2: "Arrow Up SHALL move focus between items"
|
|
1269
|
-
return {
|
|
1270
|
-
newFocusIndex: (currentIndex - 1 + itemCount) % itemCount,
|
|
1271
|
-
shouldActivate: false,
|
|
1272
|
-
handled: true
|
|
1273
|
-
};
|
|
1274
|
-
|
|
1275
|
-
case 'Home':
|
|
1276
|
-
// Move focus to first item
|
|
1277
|
-
// @see Requirement 8.4: "Home SHALL move focus to first item"
|
|
1278
|
-
return {
|
|
1279
|
-
newFocusIndex: 0,
|
|
1280
|
-
shouldActivate: false,
|
|
1281
|
-
handled: true
|
|
1282
|
-
};
|
|
1283
|
-
|
|
1284
|
-
case 'End':
|
|
1285
|
-
// Move focus to last item
|
|
1286
|
-
// @see Requirement 8.5: "End SHALL move focus to last item"
|
|
1287
|
-
return {
|
|
1288
|
-
newFocusIndex: itemCount - 1,
|
|
1289
|
-
shouldActivate: false,
|
|
1290
|
-
handled: true
|
|
1291
|
-
};
|
|
1292
|
-
|
|
1293
|
-
case 'Enter':
|
|
1294
|
-
case ' ':
|
|
1295
|
-
// Activate the focused item
|
|
1296
|
-
// @see Requirement 8.3: "Enter/Space SHALL activate or toggle item based on mode"
|
|
1297
|
-
return {
|
|
1298
|
-
newFocusIndex: currentIndex,
|
|
1299
|
-
shouldActivate: true,
|
|
1300
|
-
handled: true
|
|
1301
|
-
};
|
|
1302
|
-
|
|
1303
|
-
default:
|
|
1304
|
-
// Key not handled
|
|
1305
|
-
return {
|
|
1306
|
-
newFocusIndex: currentIndex,
|
|
1307
|
-
shouldActivate: false,
|
|
1308
|
-
handled: false
|
|
1309
|
-
};
|
|
1310
|
-
}
|
|
1311
|
-
}
|
|
1312
|
-
|
|
1313
|
-
/**
|
|
1314
|
-
* Move focus to a specific item index.
|
|
1315
|
-
*
|
|
1316
|
-
* Updates the internal focused index, updates tabindex values using
|
|
1317
|
-
* roving tabindex pattern, and moves DOM focus to the new item.
|
|
1318
|
-
*
|
|
1319
|
-
* @param newIndex - The index to focus
|
|
1320
|
-
* @param children - Array of child elements (optional, will be fetched if not provided)
|
|
1321
|
-
* @see Requirement 8.6: Roving tabindex pattern
|
|
1322
|
-
*/
|
|
1323
|
-
private _moveFocusToIndex(newIndex: number, children?: HTMLElement[]): void {
|
|
1324
|
-
const items = children || this._getChildItems();
|
|
1325
|
-
|
|
1326
|
-
if (items.length === 0 || newIndex < 0 || newIndex >= items.length) return;
|
|
1327
|
-
|
|
1328
|
-
// Update internal state
|
|
1329
|
-
this._internalState.focusedIndex = newIndex;
|
|
1330
|
-
|
|
1331
|
-
// Update tabindex values (roving tabindex pattern)
|
|
1332
|
-
// @see Requirement 8.6: "focused item has tabindex=0, others have tabindex=-1"
|
|
1333
|
-
this._updateTabIndices(items, newIndex);
|
|
1334
|
-
|
|
1335
|
-
// Move DOM focus to the new item
|
|
1336
|
-
const targetItem = items[newIndex];
|
|
1337
|
-
if (targetItem) {
|
|
1338
|
-
targetItem.focus();
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
|
-
|
|
1342
|
-
/**
|
|
1343
|
-
* Update tabindex values for roving tabindex pattern.
|
|
1344
|
-
*
|
|
1345
|
-
* Sets tabindex="0" on the focused item and tabindex="-1" on all others.
|
|
1346
|
-
* This ensures only one item is in the tab order at a time.
|
|
1347
|
-
*
|
|
1348
|
-
* @param items - Array of child elements
|
|
1349
|
-
* @param focusedIndex - Index of the item that should have tabindex="0"
|
|
1350
|
-
* @see Requirement 8.6: Roving tabindex pattern
|
|
1351
|
-
*/
|
|
1352
|
-
private _updateTabIndices(items: HTMLElement[], focusedIndex: number): void {
|
|
1353
|
-
items.forEach((item, index) => {
|
|
1354
|
-
if (index === focusedIndex) {
|
|
1355
|
-
item.setAttribute('tabindex', '0');
|
|
1356
|
-
} else {
|
|
1357
|
-
item.setAttribute('tabindex', '-1');
|
|
1358
|
-
}
|
|
1359
|
-
});
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
|
-
/**
|
|
1363
|
-
* Activate an item at the specified index.
|
|
1364
|
-
*
|
|
1365
|
-
* Simulates a click on the item, which triggers the appropriate
|
|
1366
|
-
* mode-specific behavior (tap callback, selection change, or toggle).
|
|
1367
|
-
*
|
|
1368
|
-
* @param index - The index of the item to activate
|
|
1369
|
-
* @see Requirement 8.3: "Enter/Space SHALL activate or toggle item based on mode"
|
|
1370
|
-
*/
|
|
1371
|
-
private _activateItem(index: number): void {
|
|
1372
|
-
// Handle activation based on mode (same as click handling)
|
|
1373
|
-
switch (this._mode) {
|
|
1374
|
-
case 'tap':
|
|
1375
|
-
// Tap mode: Invoke callback with index
|
|
1376
|
-
if (this._onItemClick) {
|
|
1377
|
-
this._onItemClick(index);
|
|
1378
|
-
}
|
|
1379
|
-
break;
|
|
1380
|
-
|
|
1381
|
-
case 'select':
|
|
1382
|
-
// Select mode: Toggle selection
|
|
1383
|
-
this._handleSelectModeClick(index);
|
|
1384
|
-
break;
|
|
1385
|
-
|
|
1386
|
-
case 'multiSelect':
|
|
1387
|
-
// MultiSelect mode: Toggle item
|
|
1388
|
-
this._handleMultiSelectModeClick(index);
|
|
1389
|
-
break;
|
|
1390
|
-
}
|
|
1391
|
-
}
|
|
1392
|
-
|
|
1393
|
-
/**
|
|
1394
|
-
* Handle focus-in events to track which item has focus.
|
|
1395
|
-
*
|
|
1396
|
-
* Updates the internal focused index when focus moves to a child item.
|
|
1397
|
-
* This ensures the roving tabindex pattern stays in sync with actual focus.
|
|
1398
|
-
*
|
|
1399
|
-
* @param event - The focus event
|
|
1400
|
-
* @see Requirement 8.6: Roving tabindex pattern
|
|
1401
|
-
*/
|
|
1402
|
-
private _handleFocusIn = (event: FocusEvent): void => {
|
|
1403
|
-
const target = event.target as HTMLElement;
|
|
1404
|
-
|
|
1405
|
-
// Check if the focus target is a child item
|
|
1406
|
-
const item = target.closest('button-vertical-list-item');
|
|
1407
|
-
if (!item) return;
|
|
1408
|
-
|
|
1409
|
-
// Get the index of the focused item
|
|
1410
|
-
const children = this._getChildItems();
|
|
1411
|
-
const index = children.indexOf(item as HTMLElement);
|
|
1412
|
-
|
|
1413
|
-
if (index !== -1 && index !== this._internalState.focusedIndex) {
|
|
1414
|
-
// Update internal state
|
|
1415
|
-
this._internalState.focusedIndex = index;
|
|
1416
|
-
|
|
1417
|
-
// Update tabindex values to reflect new focus
|
|
1418
|
-
this._updateTabIndices(children, index);
|
|
1419
|
-
}
|
|
1420
|
-
};
|
|
1421
|
-
|
|
1422
|
-
/**
|
|
1423
|
-
* Get all child Button-VerticalList-Item elements.
|
|
1424
|
-
*
|
|
1425
|
-
* @returns Array of child elements
|
|
1426
|
-
*/
|
|
1427
|
-
private _getChildItems(): HTMLElement[] {
|
|
1428
|
-
const slot = this._shadowRoot.querySelector('slot');
|
|
1429
|
-
if (!slot) return [];
|
|
1430
|
-
|
|
1431
|
-
return slot.assignedElements().filter(
|
|
1432
|
-
el => el.tagName.toLowerCase() === 'button-vertical-list-item'
|
|
1433
|
-
) as HTMLElement[];
|
|
1434
|
-
}
|
|
1435
|
-
}
|
|
1436
|
-
|
|
1437
|
-
// Register custom element
|
|
1438
|
-
// Uses conditional check for idempotent registration
|
|
1439
|
-
if (typeof customElements !== 'undefined' && !customElements.get('button-vertical-list-set')) {
|
|
1440
|
-
customElements.define('button-vertical-list-set', ButtonVerticalListSet);
|
|
1441
|
-
}
|
|
1442
|
-
|
|
1443
|
-
/**
|
|
1444
|
-
* Default export for convenience.
|
|
1445
|
-
*/
|
|
1446
|
-
export default ButtonVerticalListSet;
|