@3fn/core 13.0.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.kiro/agents/ada-prompt.md +80 -132
- package/.kiro/agents/ada-prompt.md.attribution.json +45 -0
- package/.kiro/agents/ada.json +44 -59
- package/.kiro/agents/ada.json.attribution.json +13 -0
- package/.kiro/agents/data-prompt.md +83 -74
- package/.kiro/agents/data-prompt.md.attribution.json +53 -0
- package/.kiro/agents/data.json +31 -38
- package/.kiro/agents/data.json.attribution.json +13 -0
- package/.kiro/agents/kenya-prompt.md +83 -72
- package/.kiro/agents/kenya-prompt.md.attribution.json +53 -0
- package/.kiro/agents/kenya.json +27 -35
- package/.kiro/agents/kenya.json.attribution.json +13 -0
- package/.kiro/agents/leonardo-prompt.md +176 -234
- package/.kiro/agents/leonardo-prompt.md.attribution.json +45 -0
- package/.kiro/agents/leonardo.json +28 -36
- package/.kiro/agents/leonardo.json.attribution.json +13 -0
- package/.kiro/agents/lina-prompt.md +110 -151
- package/.kiro/agents/lina-prompt.md.attribution.json +53 -0
- package/.kiro/agents/lina.json +46 -59
- package/.kiro/agents/lina.json.attribution.json +13 -0
- package/.kiro/agents/sparky-prompt.md +89 -72
- package/.kiro/agents/sparky-prompt.md.attribution.json +53 -0
- package/.kiro/agents/sparky.json +37 -37
- package/.kiro/agents/sparky.json.attribution.json +13 -0
- package/.kiro/agents/stacy-prompt.md +74 -48
- package/.kiro/agents/stacy-prompt.md.attribution.json +45 -0
- package/.kiro/agents/stacy.json +28 -30
- package/.kiro/agents/stacy.json.attribution.json +13 -0
- package/.kiro/agents/thurgood-prompt.md +94 -138
- package/.kiro/agents/thurgood-prompt.md.attribution.json +45 -0
- package/.kiro/agents/thurgood.json +31 -35
- package/.kiro/agents/thurgood.json.attribution.json +13 -0
- package/.kiro/steering/AI-Collaboration-Principles.md +3 -3
- package/.kiro/steering/Civitas-System-Overview.md +7 -16
- package/.kiro/steering/DesignerPunk-Systems-Overview.md +6 -6
- package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
- package/.kiro/steering/Task-Completion-Protocol.md +98 -17
- package/.kiro/steering/core-goals.md +3 -3
- package/.kiro/steering/personal-note.md +1 -1
- package/.kiro/steering/start-up-tasks.md +17 -6
- package/application-mcp-server/src/index.ts +26 -0
- 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 -1
- package/dist/DesignTokens.dtcg.json +8 -5
- package/dist/DesignTokens.figma.json +2 -2
- package/dist/DesignTokens.ios.swift +1 -1
- package/dist/DesignTokens.web.css +1 -1
- package/dist/android/DesignTokens.android.kt +1 -1
- package/dist/blend/OklchBlendCalculator.js +1 -0
- package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +13 -2
- package/dist/blend/ThemeAwareBlendUtilities.web.js +6 -1
- package/dist/browser/designerpunk.esm.js +36 -90
- package/dist/browser/designerpunk.esm.min.js +33 -36
- package/dist/browser/designerpunk.umd.js +36 -90
- package/dist/browser/designerpunk.umd.min.js +47 -50
- package/dist/browser/tokens.css +3 -3
- package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
- package/dist/build/tokens/defineComponentTokens.js +26 -0
- 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/Avatar-Base/platforms/web/Avatar.web.js +24 -5
- package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +16 -28
- package/dist/components/core/Button-CTA/examples/BasicUsage.js +18 -43
- package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +3 -15
- package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +9 -58
- package/dist/components/core/Button-CTA/types.d.ts +0 -24
- package/dist/components/core/Button-CTA/types.js +6 -0
- 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/Input-Text-Base/types.d.ts +13 -1
- package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +11 -2
- package/dist/generators/DTCGFormatGenerator.js +8 -0
- package/dist/generators/TokenFileGenerator.js +7 -2
- package/dist/integration/BuildErrorHandler.js +2 -2
- package/dist/ios/DesignTokens.ios.swift +1 -1
- package/dist/mcp/application-mcp.js +24 -0
- package/dist/mcp/docs-mcp.js +130 -15
- package/dist/mcp/product-mcp.js +25 -0
- package/dist/tokens/OpacityTokens.js +1 -1
- package/dist/tokens/component/progress.d.ts +65 -5
- package/dist/tokens/component/progress.js +79 -18
- package/dist/tokens/semantic/BlendTokens.d.ts +10 -3
- package/dist/tokens/semantic/BlendTokens.js +17 -5
- package/dist/tokens/semantic/OpacityTokens.d.ts +4 -4
- package/dist/tokens/semantic/OpacityTokens.js +4 -4
- package/dist/types/ComponentTypes.d.ts +1 -1
- package/dist/types/generated/TokenTypes.d.ts +1 -1
- package/dist/types/generated/TokenTypes.js +1 -1
- package/dist/validators/StemmaTokenUsageValidator.js +3 -2
- package/dist/web/DesignTokens.web.css +1 -1
- package/governance/BUILD-SYSTEM-SETUP.md +1 -2
- package/governance/Component-Development-Guide.md +23 -13
- package/governance/Component-Development-Standards.md +21 -20
- package/governance/Component-Family-Avatar.md +6 -7
- package/governance/Component-Family-Badge.md +19 -20
- package/governance/Component-Family-Button.md +30 -43
- package/governance/Component-Family-Chip.md +14 -15
- package/governance/Component-Family-Container.md +12 -13
- package/governance/Component-Family-Data-Display.md +1 -2
- package/governance/Component-Family-Divider.md +1 -2
- package/governance/Component-Family-Form-Inputs.md +65 -65
- package/governance/Component-Family-Icon.md +9 -10
- package/governance/Component-Family-Loading.md +1 -2
- package/governance/Component-Family-Modal.md +1 -2
- package/governance/Component-Family-Navigation.md +1 -2
- package/governance/Component-Family-Progress.md +0 -1
- package/governance/Component-Inheritance-Structures.md +219 -99
- package/governance/Component-MCP-Document-Template.md +6 -5
- package/governance/Component-Primitive-vs-Semantic-Philosophy.md +1 -1
- package/governance/Component-Quick-Reference.md +33 -33
- package/governance/Component-Readiness-Status.md +59 -44
- package/governance/Component-Templates.md +57 -61
- package/governance/Contract-System-Reference.md +7 -7
- package/governance/MCP-Integration-Guide.md +1 -1
- package/governance/Process-Cross-Reference-Standards.md +31 -13
- package/governance/Process-Development-Workflow.md +49 -59
- package/governance/Process-File-Organization.md +25 -28
- package/governance/Process-Hook-Operations.md +22 -11
- package/governance/Process-Orchestration-Model-Selection.md +92 -0
- package/governance/Process-Spec-Planning.md +98 -52
- package/governance/Process-Task-Type-Definitions.md +80 -4
- package/governance/Product-Handoff-Protocol.md +2 -0
- package/governance/Rosetta-System-Architecture.md +13 -11
- package/governance/Test-Behavioral-Contract-Validation.md +38 -31
- package/governance/Test-Failure-Audit-Methodology.md +1 -1
- package/governance/Token-Family-Accessibility.md +1 -2
- package/governance/Token-Family-Blend.md +18 -16
- package/governance/Token-Family-Blur.md +0 -1
- package/governance/Token-Family-Border.md +1 -2
- package/governance/Token-Family-Color.md +0 -1
- package/governance/Token-Family-Glow.md +1 -2
- package/governance/Token-Family-Layering.md +0 -1
- package/governance/Token-Family-Motion.md +1 -2
- package/governance/Token-Family-Opacity.md +0 -1
- package/governance/Token-Family-Radius.md +1 -2
- package/governance/Token-Family-Responsive.md +1 -2
- package/governance/Token-Family-Shadow.md +1 -2
- package/governance/Token-Family-Sizing.md +0 -1
- package/governance/Token-Family-Spacing.md +1 -2
- package/governance/Token-Family-Typography.md +1 -2
- package/governance/Token-Governance.md +8 -8
- package/governance/Token-Quick-Reference.md +47 -34
- package/governance/Token-Resolution-Patterns.md +1 -1
- package/governance/Token-Semantic-Structure.md +1 -1
- package/governance/Web-Authoring-Standards.md +5 -5
- package/governance/browser-distribution-guide.md +1 -4
- package/governance/classification-map.md +474 -0
- package/governance/completion-documentation-guide.md +23 -37
- package/governance/component-meta-authoring-guide.md +1 -1
- package/governance/cross-platform-vs-platform-specific-decision-framework.md +1 -1
- package/governance/platform-implementation-guidelines.md +2 -3
- package/governance/release-management-system.md +28 -63
- package/governance/rosetta-system-principles.md +8 -6
- package/governance/stemma-system-principles.md +18 -17
- package/mcp-server/src/index.ts +24 -6
- package/mcp-server/src/indexer/DocumentIndexer.ts +119 -9
- package/mcp-server/src/indexer/__tests__/bare-id-crossrefs.test.ts +250 -0
- package/mcp-server/src/indexer/cross-ref-parser.ts +29 -1
- package/mcp-server/src/indexer/index-health.ts +27 -2
- package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +11 -26
- package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +72 -5
- package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +81 -24
- package/mcp-server/src/tools/list-cross-references.ts +2 -2
- package/package.json +24 -26
- package/src/__tests__/browser-distribution/css-bundling.test.ts +6 -4
- package/src/__tests__/console-allowlist.json +14 -0
- package/src/__tests__/console-fail-setup.ts +169 -0
- package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +16 -0
- package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +70 -17
- package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +28 -0
- package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +223 -16
- package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +298 -0
- package/src/blend/OklchBlendCalculator.ts +3 -0
- package/src/blend/ThemeAwareBlendUtilities.android.kt +3 -0
- package/src/blend/ThemeAwareBlendUtilities.ios.swift +3 -0
- package/src/blend/ThemeAwareBlendUtilities.web.ts +9 -1
- package/src/blend/__tests__/InteractionStateAudit.test.ts +12 -9
- package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +8 -0
- package/src/build/errors/__tests__/ErrorHandler.test.ts +5 -0
- package/src/build/tokens/__tests__/defineComponentTokens.test.ts +113 -0
- package/src/build/tokens/defineComponentTokens.ts +43 -1
- package/src/build/workflow/__tests__/CICDIntegration.test.ts +12 -1
- package/src/cli/__tests__/init.test.ts +45 -11
- package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +1 -1
- package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +121 -7
- package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +3 -0
- package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +15 -6
- package/src/components/core/Avatar-Base/avatar.tokens.ts +31 -34
- package/src/components/core/Avatar-Base/contracts.yaml +11 -1
- package/src/components/core/Avatar-Base/index.ts +1 -1
- package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +24 -5
- package/src/components/core/Badge-Count-Base/contracts.yaml +1 -1
- package/src/components/core/Badge-Label-Base/contracts.yaml +1 -1
- package/src/components/core/Button-CTA/Button-CTA.schema.yaml +2 -12
- package/src/components/core/Button-CTA/README.md +3 -6
- package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +35 -89
- package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -2
- package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -2
- package/src/components/core/Button-CTA/contracts.yaml +6 -29
- package/src/components/core/Button-CTA/examples/BasicUsage.html +2 -14
- package/src/components/core/Button-CTA/examples/BasicUsage.tsx +17 -44
- package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +12 -20
- package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +12 -51
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +2 -26
- package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +18 -71
- package/src/components/core/Button-CTA/types.ts +10 -28
- package/src/components/core/Button-Icon/buttonIcon.tokens.ts +43 -27
- package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +13 -0
- package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +13 -0
- package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +13 -0
- package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +30 -2
- package/src/components/core/Input-Text-Base/README.md +25 -2
- package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +16 -15
- package/src/components/core/Input-Text-Base/contracts.yaml +90 -0
- package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +26 -12
- package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +195 -59
- package/src/components/core/Input-Text-Base/types.ts +13 -1
- package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +5 -1
- package/src/components/core/Input-Text-Email/README.md +8 -7
- package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +1 -4
- package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +2 -16
- package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +10 -3
- package/src/components/core/Input-Text-Password/README.md +9 -8
- package/src/components/core/Input-Text-Password/contracts.yaml +5 -0
- package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +17 -7
- package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +22 -20
- package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +11 -2
- package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +5 -1
- package/src/components/core/Input-Text-PhoneNumber/README.md +9 -8
- package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +2 -5
- package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +3 -17
- package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
- package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +1 -1
- package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +5 -2
- package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +5 -2
- package/src/generators/DTCGFormatGenerator.ts +6 -0
- package/src/generators/TokenFileGenerator.ts +7 -2
- package/src/generators/__tests__/DTCGConfigOptions.test.ts +14 -5
- package/src/integration/BuildErrorHandler.ts +2 -2
- package/src/tokens/OpacityTokens.ts +1 -1
- package/src/tokens/__tests__/OpacityTokens.test.ts +3 -1
- 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/component/progress.ts +83 -21
- package/src/tokens/semantic/BlendTokens.ts +26 -5
- package/src/tokens/semantic/OpacityTokens.ts +4 -4
- package/src/types/ComponentTypes.ts +1 -1
- package/src/types/generated/TokenTypes.ts +1 -1
- package/src/validators/StemmaTokenUsageValidator.ts +3 -2
- package/token-index/components.yaml +8 -8
- package/token-index/semantics.yaml +1 -2
- 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
|
@@ -302,7 +302,11 @@ var DesignerPunk = (() => {
|
|
|
302
302
|
pressedDarker: 0.12,
|
|
303
303
|
/** Focus state saturation increase - blend200 (8%) */
|
|
304
304
|
focusSaturate: 0.08,
|
|
305
|
-
/**
|
|
305
|
+
/**
|
|
306
|
+
* Disabled state desaturation - blend300 (12%)
|
|
307
|
+
* @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
|
|
308
|
+
* is unavailable, do not render the component. Scheduled for removal at the next major.
|
|
309
|
+
*/
|
|
306
310
|
disabledDesaturate: 0.12,
|
|
307
311
|
/** Icon optical balance lightening - blend200 (8%) */
|
|
308
312
|
iconLighter: 0.08
|
|
@@ -349,6 +353,7 @@ var DesignerPunk = (() => {
|
|
|
349
353
|
hoverColor: (baseColor) => darkerBlend(baseColor, BlendTokenValues.hoverDarker),
|
|
350
354
|
pressedColor: (baseColor) => darkerBlend(baseColor, BlendTokenValues.pressedDarker),
|
|
351
355
|
focusColor: (baseColor) => saturate(baseColor, BlendTokenValues.focusSaturate),
|
|
356
|
+
// deprecated 2026-07-15 (no-disabled-states philosophy) — removal at next major
|
|
352
357
|
disabledColor: (baseColor) => desaturate(baseColor, BlendTokenValues.disabledDesaturate),
|
|
353
358
|
iconColor: (baseColor) => lighterBlend(baseColor, BlendTokenValues.iconLighter),
|
|
354
359
|
// Generic blend functions for custom usage
|
|
@@ -1805,6 +1810,9 @@ var DesignerPunk = (() => {
|
|
|
1805
1810
|
"error-message",
|
|
1806
1811
|
"is-success",
|
|
1807
1812
|
"show-info-icon",
|
|
1813
|
+
// read-only is accepted for API stability but IGNORED — readOnly is
|
|
1814
|
+
// contracted out of Input-Text-Password (see render(), and
|
|
1815
|
+
// contracts.yaml excludes.state_readonly).
|
|
1808
1816
|
"read-only",
|
|
1809
1817
|
"required",
|
|
1810
1818
|
"max-length",
|
|
@@ -1874,7 +1882,6 @@ var DesignerPunk = (() => {
|
|
|
1874
1882
|
const propsErrorMessage = this.getAttribute("error-message") || "";
|
|
1875
1883
|
const isSuccess = this.getAttribute("is-success") === "true";
|
|
1876
1884
|
const showInfoIcon = this.getAttribute("show-info-icon") === "true";
|
|
1877
|
-
const readOnly = this.hasAttribute("read-only");
|
|
1878
1885
|
const required = this.hasAttribute("required");
|
|
1879
1886
|
const maxLength = this.getAttribute("max-length");
|
|
1880
1887
|
const showToggle = this.getAttribute("show-toggle") !== "false";
|
|
@@ -1909,7 +1916,6 @@ var DesignerPunk = (() => {
|
|
|
1909
1916
|
${errorMessage ? `error-message="${errorMessage}"` : ""}
|
|
1910
1917
|
${isSuccess ? 'is-success="true"' : ""}
|
|
1911
1918
|
${showInfoIcon ? 'show-info-icon="true"' : ""}
|
|
1912
|
-
${readOnly ? "read-only" : ""}
|
|
1913
1919
|
${required ? "required" : ""}
|
|
1914
1920
|
${maxLength ? `max-length="${maxLength}"` : ""}
|
|
1915
1921
|
></input-text-base>
|
|
@@ -2771,7 +2777,7 @@ var DesignerPunk = (() => {
|
|
|
2771
2777
|
* The --_cta-hover-bg custom property is set by the component
|
|
2772
2778
|
* using darkerBlend(color.primary, blend.hoverDarker) = 8% darker.
|
|
2773
2779
|
*/
|
|
2774
|
-
.button-cta--primary:hover
|
|
2780
|
+
.button-cta--primary:hover {
|
|
2775
2781
|
background-color: var(--_cta-hover-bg);
|
|
2776
2782
|
}
|
|
2777
2783
|
|
|
@@ -2784,7 +2790,7 @@ var DesignerPunk = (() => {
|
|
|
2784
2790
|
* The --_cta-pressed-bg custom property is set by the component
|
|
2785
2791
|
* using darkerBlend(color.primary, blend.pressedDarker) = 12% darker.
|
|
2786
2792
|
*/
|
|
2787
|
-
.button-cta--primary:active
|
|
2793
|
+
.button-cta--primary:active {
|
|
2788
2794
|
background-color: var(--_cta-pressed-bg);
|
|
2789
2795
|
}
|
|
2790
2796
|
|
|
@@ -2814,30 +2820,6 @@ var DesignerPunk = (() => {
|
|
|
2814
2820
|
outline: none;
|
|
2815
2821
|
}
|
|
2816
2822
|
|
|
2817
|
-
/**
|
|
2818
|
-
* Disabled state.
|
|
2819
|
-
*
|
|
2820
|
-
* Uses blend utility calculated color (desaturate with blend.disabledDesaturate)
|
|
2821
|
-
* instead of opacity workaround for cross-platform consistency.
|
|
2822
|
-
*
|
|
2823
|
-
* The --button-disabled-color custom property is set by the component
|
|
2824
|
-
* using desaturate(color.primary, blend.disabledDesaturate) = 12% less saturated.
|
|
2825
|
-
*
|
|
2826
|
-
* - Cursor changes to not-allowed
|
|
2827
|
-
* - Prevents interaction
|
|
2828
|
-
* - Maintains color contrast for accessibility
|
|
2829
|
-
*/
|
|
2830
|
-
.button-cta:disabled,
|
|
2831
|
-
.button-cta--disabled {
|
|
2832
|
-
cursor: not-allowed;
|
|
2833
|
-
pointer-events: none;
|
|
2834
|
-
}
|
|
2835
|
-
|
|
2836
|
-
.button-cta--primary:disabled,
|
|
2837
|
-
.button-cta--primary.button-cta--disabled {
|
|
2838
|
-
background-color: var(--_cta-disabled-bg);
|
|
2839
|
-
}
|
|
2840
|
-
|
|
2841
2823
|
/* ==========================================================================
|
|
2842
2824
|
Responsive Behavior
|
|
2843
2825
|
========================================================================== */
|
|
@@ -2952,7 +2934,6 @@ var DesignerPunk = (() => {
|
|
|
2952
2934
|
// Cached blend colors for state styling
|
|
2953
2935
|
this._hoverColor = "";
|
|
2954
2936
|
this._pressedColor = "";
|
|
2955
|
-
this._disabledColor = "";
|
|
2956
2937
|
this._iconColor = "";
|
|
2957
2938
|
this._iconOpticalBalanceColor = "";
|
|
2958
2939
|
/**
|
|
@@ -2961,11 +2942,6 @@ var DesignerPunk = (() => {
|
|
|
2961
2942
|
* Dispatches a custom 'press' event that bubbles up to parent elements.
|
|
2962
2943
|
*/
|
|
2963
2944
|
this._handleClick = (event) => {
|
|
2964
|
-
if (this.disabled) {
|
|
2965
|
-
event.preventDefault();
|
|
2966
|
-
event.stopPropagation();
|
|
2967
|
-
return;
|
|
2968
|
-
}
|
|
2969
2945
|
this.dispatchEvent(new CustomEvent("press", {
|
|
2970
2946
|
bubbles: true,
|
|
2971
2947
|
composed: true,
|
|
@@ -2982,9 +2958,6 @@ var DesignerPunk = (() => {
|
|
|
2982
2958
|
* @param event - The keyboard event
|
|
2983
2959
|
*/
|
|
2984
2960
|
this._handleKeyDown = (event) => {
|
|
2985
|
-
if (this.disabled) {
|
|
2986
|
-
return;
|
|
2987
|
-
}
|
|
2988
2961
|
if (event.key === "Enter" || event.key === " ") {
|
|
2989
2962
|
event.preventDefault();
|
|
2990
2963
|
this.dispatchEvent(new CustomEvent("press", {
|
|
@@ -3003,7 +2976,7 @@ var DesignerPunk = (() => {
|
|
|
3003
2976
|
* When these attributes change, attributeChangedCallback is invoked.
|
|
3004
2977
|
*/
|
|
3005
2978
|
static get observedAttributes() {
|
|
3006
|
-
return ["label", "size", "variant", "icon", "no-wrap", "
|
|
2979
|
+
return ["label", "size", "variant", "icon", "no-wrap", "test-id"];
|
|
3007
2980
|
}
|
|
3008
2981
|
/**
|
|
3009
2982
|
* Called when the element is added to the DOM.
|
|
@@ -3050,15 +3023,14 @@ var DesignerPunk = (() => {
|
|
|
3050
3023
|
* Calculate blend colors from CSS custom properties.
|
|
3051
3024
|
*
|
|
3052
3025
|
* Reads base colors from CSS custom properties and applies theme-aware blend
|
|
3053
|
-
* utilities to generate state colors (hover, pressed,
|
|
3054
|
-
*
|
|
3026
|
+
* utilities to generate state colors (hover, pressed, icon).
|
|
3027
|
+
*
|
|
3055
3028
|
* Uses getBlendUtilities() factory functions instead of direct blend calculations
|
|
3056
3029
|
* for cross-platform consistency with iOS and Android implementations.
|
|
3057
|
-
*
|
|
3030
|
+
*
|
|
3058
3031
|
* State color mappings:
|
|
3059
3032
|
* - Hover: darkerBlend(color.action.primary, blend.hoverDarker) - 8% darker
|
|
3060
3033
|
* - Pressed: darkerBlend(color.action.primary, blend.pressedDarker) - 12% darker
|
|
3061
|
-
* - Disabled: desaturate(color.action.primary, blend.disabledDesaturate) - 12% less saturated
|
|
3062
3034
|
* - Icon: lighterBlend(color.contrast.onAction, blend.iconLighter) - 8% lighter
|
|
3063
3035
|
*
|
|
3064
3036
|
* @see Requirements: 7.1, 7.2, 7.3, 7.4 - Button-CTA state colors
|
|
@@ -3077,7 +3049,6 @@ var DesignerPunk = (() => {
|
|
|
3077
3049
|
}
|
|
3078
3050
|
this._hoverColor = this._blendUtils.hoverColor(primaryColor);
|
|
3079
3051
|
this._pressedColor = this._blendUtils.pressedColor(primaryColor);
|
|
3080
|
-
this._disabledColor = this._blendUtils.disabledColor(primaryColor);
|
|
3081
3052
|
this._iconColor = this._blendUtils.iconColor(onActionColor);
|
|
3082
3053
|
this._iconOpticalBalanceColor = this._blendUtils.iconColor(primaryColor);
|
|
3083
3054
|
}
|
|
@@ -3169,22 +3140,6 @@ var DesignerPunk = (() => {
|
|
|
3169
3140
|
set noWrap(value) {
|
|
3170
3141
|
this.setAttribute("no-wrap", value.toString());
|
|
3171
3142
|
}
|
|
3172
|
-
/**
|
|
3173
|
-
* Get the disabled state.
|
|
3174
|
-
*/
|
|
3175
|
-
get disabled() {
|
|
3176
|
-
return this.hasAttribute("disabled");
|
|
3177
|
-
}
|
|
3178
|
-
/**
|
|
3179
|
-
* Set the disabled state.
|
|
3180
|
-
*/
|
|
3181
|
-
set disabled(value) {
|
|
3182
|
-
if (value) {
|
|
3183
|
-
this.setAttribute("disabled", "");
|
|
3184
|
-
} else {
|
|
3185
|
-
this.removeAttribute("disabled");
|
|
3186
|
-
}
|
|
3187
|
-
}
|
|
3188
3143
|
/**
|
|
3189
3144
|
* Get the test ID.
|
|
3190
3145
|
*/
|
|
@@ -3244,31 +3199,27 @@ var DesignerPunk = (() => {
|
|
|
3244
3199
|
const variant = this.buttonVariant;
|
|
3245
3200
|
const icon = this.icon;
|
|
3246
3201
|
const noWrap = this.noWrap;
|
|
3247
|
-
const disabled = this.disabled;
|
|
3248
3202
|
const testID = this.testID;
|
|
3249
3203
|
const buttonClasses = [
|
|
3250
3204
|
"button-cta",
|
|
3251
3205
|
`button-cta--${size}`,
|
|
3252
|
-
`button-cta--${variant}
|
|
3253
|
-
|
|
3254
|
-
].filter(Boolean).join(" ");
|
|
3206
|
+
`button-cta--${variant}`
|
|
3207
|
+
].join(" ");
|
|
3255
3208
|
const iconSize = getIconSizeForButton(size);
|
|
3256
3209
|
const labelClass = noWrap ? "button-cta__label--no-wrap" : "button-cta__label";
|
|
3257
3210
|
const testIDAttr = testID ? ` data-testid="${testID}"` : "";
|
|
3258
3211
|
const blendColorStyles = `
|
|
3259
3212
|
--_cta-hover-bg: ${this._hoverColor};
|
|
3260
3213
|
--_cta-pressed-bg: ${this._pressedColor};
|
|
3261
|
-
--_cta-disabled-bg: ${this._disabledColor};
|
|
3262
3214
|
--_cta-icon-color: ${this._iconColor};
|
|
3263
3215
|
--_cta-icon-optical: ${this._iconOpticalBalanceColor};
|
|
3264
3216
|
`;
|
|
3265
3217
|
this._shadowRoot.innerHTML = `
|
|
3266
3218
|
<style>${ButtonCTA_web_default}</style>
|
|
3267
|
-
<button
|
|
3219
|
+
<button
|
|
3268
3220
|
class="${buttonClasses}"
|
|
3269
3221
|
type="button"
|
|
3270
3222
|
role="button"
|
|
3271
|
-
${disabled ? 'disabled aria-disabled="true"' : 'aria-disabled="false"'}
|
|
3272
3223
|
${testIDAttr}
|
|
3273
3224
|
aria-label="${label}"
|
|
3274
3225
|
style="${blendColorStyles}"
|
|
@@ -3304,23 +3255,14 @@ var DesignerPunk = (() => {
|
|
|
3304
3255
|
const variant = this.buttonVariant;
|
|
3305
3256
|
const icon = this.icon;
|
|
3306
3257
|
const noWrap = this.noWrap;
|
|
3307
|
-
const disabled = this.disabled;
|
|
3308
3258
|
const testID = this.testID;
|
|
3309
3259
|
const iconSize = getIconSizeForButton(size);
|
|
3310
3260
|
const buttonClasses = [
|
|
3311
3261
|
"button-cta",
|
|
3312
3262
|
`button-cta--${size}`,
|
|
3313
|
-
`button-cta--${variant}
|
|
3314
|
-
|
|
3315
|
-
].filter(Boolean).join(" ");
|
|
3263
|
+
`button-cta--${variant}`
|
|
3264
|
+
].join(" ");
|
|
3316
3265
|
this._button.className = buttonClasses;
|
|
3317
|
-
if (disabled) {
|
|
3318
|
-
this._button.setAttribute("disabled", "");
|
|
3319
|
-
this._button.setAttribute("aria-disabled", "true");
|
|
3320
|
-
} else {
|
|
3321
|
-
this._button.removeAttribute("disabled");
|
|
3322
|
-
this._button.setAttribute("aria-disabled", "false");
|
|
3323
|
-
}
|
|
3324
3266
|
this._button.setAttribute("aria-label", label);
|
|
3325
3267
|
if (testID) {
|
|
3326
3268
|
this._button.setAttribute("data-testid", testID);
|
|
@@ -3329,7 +3271,6 @@ var DesignerPunk = (() => {
|
|
|
3329
3271
|
}
|
|
3330
3272
|
this._button.style.setProperty("--_cta-hover-bg", this._hoverColor);
|
|
3331
3273
|
this._button.style.setProperty("--_cta-pressed-bg", this._pressedColor);
|
|
3332
|
-
this._button.style.setProperty("--_cta-disabled-bg", this._disabledColor);
|
|
3333
3274
|
this._button.style.setProperty("--_cta-icon-color", this._iconColor);
|
|
3334
3275
|
this._button.style.setProperty("--_cta-icon-optical", this._iconOpticalBalanceColor);
|
|
3335
3276
|
this._labelEl.textContent = label;
|
|
@@ -4998,6 +4939,11 @@ var DesignerPunk = (() => {
|
|
|
4998
4939
|
const tokenName = `${component.toLowerCase()}.${key}`;
|
|
4999
4940
|
if (isTokenWithReference(definition)) {
|
|
5000
4941
|
const primitiveToken = definition.reference;
|
|
4942
|
+
if (typeof primitiveToken.category === "string" && primitiveToken.category !== family) {
|
|
4943
|
+
throw new Error(
|
|
4944
|
+
`Token family mismatch in defineComponentTokens() for component '${component}': token '${key}' is declared in a '${family}' family call but references primitive '${primitiveToken.name}' from the '${primitiveToken.category}' family. Every token in a call is stamped with that call's family, which drives platform output (e.g. the generated '${family.charAt(0).toUpperCase() + family.slice(1)}Tokens' class reference), so this would emit a non-existent platform member. Fix: move '${key}' into a separate defineComponentTokens() call with family: '${primitiveToken.category}', or use the value path if no token-chain relationship is intended.`
|
|
4945
|
+
);
|
|
4946
|
+
}
|
|
5001
4947
|
const value = primitiveToken.baseValue;
|
|
5002
4948
|
values[key] = value;
|
|
5003
4949
|
registeredTokens.push({
|
|
@@ -8089,15 +8035,15 @@ var DesignerPunk = (() => {
|
|
|
8089
8035
|
"size.xxl": {
|
|
8090
8036
|
reference: sizingTokens.size1600,
|
|
8091
8037
|
reasoning: "Extra extra large avatar (128px). Full profile view, onboarding."
|
|
8092
|
-
}
|
|
8093
|
-
|
|
8094
|
-
|
|
8095
|
-
|
|
8096
|
-
|
|
8097
|
-
|
|
8098
|
-
|
|
8099
|
-
//
|
|
8100
|
-
//
|
|
8038
|
+
},
|
|
8039
|
+
// Icon size tokens (gap fillers for sizes without an existing icon token).
|
|
8040
|
+
// Kept on the VALUE path deliberately: sizing primitives exist at both values
|
|
8041
|
+
// (size150 = 12, size800 = 64), but the reference path currently emits a
|
|
8042
|
+
// fabricated `SizingTokens.<name>` class on iOS/Android that no generated or
|
|
8043
|
+
// hand-written platform file defines. Switching these to `reference:` would
|
|
8044
|
+
// trade compiling output (`12.dp`) for non-compiling output and break
|
|
8045
|
+
// Avatar.android.kt's `val iconSizeXs: Dp = GeneratedAvatarTokens.iconSizeXs`.
|
|
8046
|
+
// Revisit once TokenFileGenerator.getFamilyClassName emits a real platform type.
|
|
8101
8047
|
"icon.size.xs": {
|
|
8102
8048
|
value: SIZING_BASE_VALUE * 1.5,
|
|
8103
8049
|
reasoning: "Icon size for xs avatar (12px = 1.5\xD7 base) maintains 50% ratio (12/24). No existing icon token at this size, so component token fills the gap."
|
|
@@ -9179,9 +9125,9 @@ var DesignerPunk = (() => {
|
|
|
9179
9125
|
].filter(Boolean).join(" ");
|
|
9180
9126
|
const testIDAttr = testID ? ` data-testid="${this.escapeHtml(testID)}"` : "";
|
|
9181
9127
|
const ariaHiddenAttr = decorative ? ' aria-hidden="true"' : "";
|
|
9182
|
-
if (src &&
|
|
9128
|
+
if (type === "human" && src && alt == null && !decorative && typeof console !== "undefined") {
|
|
9183
9129
|
console.warn(
|
|
9184
|
-
'AvatarBaseElement: "alt"
|
|
9130
|
+
'AvatarBaseElement: "alt" is required when "src" is provided. Add an alt description of the image; or, if this avatar is purely decorative (non-informative), set the "decorative" prop to hide it from screen readers.'
|
|
9185
9131
|
);
|
|
9186
9132
|
}
|
|
9187
9133
|
if (type === "agent") {
|