@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.
Files changed (284) hide show
  1. package/.kiro/agents/ada-prompt.md +80 -132
  2. package/.kiro/agents/ada-prompt.md.attribution.json +45 -0
  3. package/.kiro/agents/ada.json +44 -59
  4. package/.kiro/agents/ada.json.attribution.json +13 -0
  5. package/.kiro/agents/data-prompt.md +83 -74
  6. package/.kiro/agents/data-prompt.md.attribution.json +53 -0
  7. package/.kiro/agents/data.json +31 -38
  8. package/.kiro/agents/data.json.attribution.json +13 -0
  9. package/.kiro/agents/kenya-prompt.md +83 -72
  10. package/.kiro/agents/kenya-prompt.md.attribution.json +53 -0
  11. package/.kiro/agents/kenya.json +27 -35
  12. package/.kiro/agents/kenya.json.attribution.json +13 -0
  13. package/.kiro/agents/leonardo-prompt.md +176 -234
  14. package/.kiro/agents/leonardo-prompt.md.attribution.json +45 -0
  15. package/.kiro/agents/leonardo.json +28 -36
  16. package/.kiro/agents/leonardo.json.attribution.json +13 -0
  17. package/.kiro/agents/lina-prompt.md +110 -151
  18. package/.kiro/agents/lina-prompt.md.attribution.json +53 -0
  19. package/.kiro/agents/lina.json +46 -59
  20. package/.kiro/agents/lina.json.attribution.json +13 -0
  21. package/.kiro/agents/sparky-prompt.md +89 -72
  22. package/.kiro/agents/sparky-prompt.md.attribution.json +53 -0
  23. package/.kiro/agents/sparky.json +37 -37
  24. package/.kiro/agents/sparky.json.attribution.json +13 -0
  25. package/.kiro/agents/stacy-prompt.md +74 -48
  26. package/.kiro/agents/stacy-prompt.md.attribution.json +45 -0
  27. package/.kiro/agents/stacy.json +28 -30
  28. package/.kiro/agents/stacy.json.attribution.json +13 -0
  29. package/.kiro/agents/thurgood-prompt.md +94 -138
  30. package/.kiro/agents/thurgood-prompt.md.attribution.json +45 -0
  31. package/.kiro/agents/thurgood.json +31 -35
  32. package/.kiro/agents/thurgood.json.attribution.json +13 -0
  33. package/.kiro/steering/AI-Collaboration-Principles.md +3 -3
  34. package/.kiro/steering/Civitas-System-Overview.md +7 -16
  35. package/.kiro/steering/DesignerPunk-Systems-Overview.md +6 -6
  36. package/.kiro/steering/Spec-Feedback-Protocol.md +2 -11
  37. package/.kiro/steering/Task-Completion-Protocol.md +98 -17
  38. package/.kiro/steering/core-goals.md +3 -3
  39. package/.kiro/steering/personal-note.md +1 -1
  40. package/.kiro/steering/start-up-tasks.md +17 -6
  41. package/application-mcp-server/src/index.ts +26 -0
  42. package/dist/ComponentTokens.android.kt +12 -12
  43. package/dist/ComponentTokens.ios.swift +12 -12
  44. package/dist/ComponentTokens.web.css +3 -3
  45. package/dist/DesignTokens.android.kt +1 -1
  46. package/dist/DesignTokens.dtcg.json +8 -5
  47. package/dist/DesignTokens.figma.json +2 -2
  48. package/dist/DesignTokens.ios.swift +1 -1
  49. package/dist/DesignTokens.web.css +1 -1
  50. package/dist/android/DesignTokens.android.kt +1 -1
  51. package/dist/blend/OklchBlendCalculator.js +1 -0
  52. package/dist/blend/ThemeAwareBlendUtilities.web.d.ts +13 -2
  53. package/dist/blend/ThemeAwareBlendUtilities.web.js +6 -1
  54. package/dist/browser/designerpunk.esm.js +36 -90
  55. package/dist/browser/designerpunk.esm.min.js +33 -36
  56. package/dist/browser/designerpunk.umd.js +36 -90
  57. package/dist/browser/designerpunk.umd.min.js +47 -50
  58. package/dist/browser/tokens.css +3 -3
  59. package/dist/build/tokens/defineComponentTokens.d.ts +10 -0
  60. package/dist/build/tokens/defineComponentTokens.js +26 -0
  61. package/dist/components/core/Avatar-Base/avatar.tokens.d.ts +21 -26
  62. package/dist/components/core/Avatar-Base/avatar.tokens.js +31 -34
  63. package/dist/components/core/Avatar-Base/index.d.ts +1 -1
  64. package/dist/components/core/Avatar-Base/index.js +2 -2
  65. package/dist/components/core/Avatar-Base/platforms/web/Avatar.web.js +24 -5
  66. package/dist/components/core/Button-CTA/examples/BasicUsage.d.ts +16 -28
  67. package/dist/components/core/Button-CTA/examples/BasicUsage.js +18 -43
  68. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.d.ts +3 -15
  69. package/dist/components/core/Button-CTA/platforms/web/ButtonCTA.web.js +9 -58
  70. package/dist/components/core/Button-CTA/types.d.ts +0 -24
  71. package/dist/components/core/Button-CTA/types.js +6 -0
  72. package/dist/components/core/Button-Icon/buttonIcon.tokens.d.ts +28 -14
  73. package/dist/components/core/Button-Icon/buttonIcon.tokens.js +35 -20
  74. package/dist/components/core/Input-Text-Base/types.d.ts +13 -1
  75. package/dist/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.js +11 -2
  76. package/dist/generators/DTCGFormatGenerator.js +8 -0
  77. package/dist/generators/TokenFileGenerator.js +7 -2
  78. package/dist/integration/BuildErrorHandler.js +2 -2
  79. package/dist/ios/DesignTokens.ios.swift +1 -1
  80. package/dist/mcp/application-mcp.js +24 -0
  81. package/dist/mcp/docs-mcp.js +130 -15
  82. package/dist/mcp/product-mcp.js +25 -0
  83. package/dist/tokens/OpacityTokens.js +1 -1
  84. package/dist/tokens/component/progress.d.ts +65 -5
  85. package/dist/tokens/component/progress.js +79 -18
  86. package/dist/tokens/semantic/BlendTokens.d.ts +10 -3
  87. package/dist/tokens/semantic/BlendTokens.js +17 -5
  88. package/dist/tokens/semantic/OpacityTokens.d.ts +4 -4
  89. package/dist/tokens/semantic/OpacityTokens.js +4 -4
  90. package/dist/types/ComponentTypes.d.ts +1 -1
  91. package/dist/types/generated/TokenTypes.d.ts +1 -1
  92. package/dist/types/generated/TokenTypes.js +1 -1
  93. package/dist/validators/StemmaTokenUsageValidator.js +3 -2
  94. package/dist/web/DesignTokens.web.css +1 -1
  95. package/governance/BUILD-SYSTEM-SETUP.md +1 -2
  96. package/governance/Component-Development-Guide.md +23 -13
  97. package/governance/Component-Development-Standards.md +21 -20
  98. package/governance/Component-Family-Avatar.md +6 -7
  99. package/governance/Component-Family-Badge.md +19 -20
  100. package/governance/Component-Family-Button.md +30 -43
  101. package/governance/Component-Family-Chip.md +14 -15
  102. package/governance/Component-Family-Container.md +12 -13
  103. package/governance/Component-Family-Data-Display.md +1 -2
  104. package/governance/Component-Family-Divider.md +1 -2
  105. package/governance/Component-Family-Form-Inputs.md +65 -65
  106. package/governance/Component-Family-Icon.md +9 -10
  107. package/governance/Component-Family-Loading.md +1 -2
  108. package/governance/Component-Family-Modal.md +1 -2
  109. package/governance/Component-Family-Navigation.md +1 -2
  110. package/governance/Component-Family-Progress.md +0 -1
  111. package/governance/Component-Inheritance-Structures.md +219 -99
  112. package/governance/Component-MCP-Document-Template.md +6 -5
  113. package/governance/Component-Primitive-vs-Semantic-Philosophy.md +1 -1
  114. package/governance/Component-Quick-Reference.md +33 -33
  115. package/governance/Component-Readiness-Status.md +59 -44
  116. package/governance/Component-Templates.md +57 -61
  117. package/governance/Contract-System-Reference.md +7 -7
  118. package/governance/MCP-Integration-Guide.md +1 -1
  119. package/governance/Process-Cross-Reference-Standards.md +31 -13
  120. package/governance/Process-Development-Workflow.md +49 -59
  121. package/governance/Process-File-Organization.md +25 -28
  122. package/governance/Process-Hook-Operations.md +22 -11
  123. package/governance/Process-Orchestration-Model-Selection.md +92 -0
  124. package/governance/Process-Spec-Planning.md +98 -52
  125. package/governance/Process-Task-Type-Definitions.md +80 -4
  126. package/governance/Product-Handoff-Protocol.md +2 -0
  127. package/governance/Rosetta-System-Architecture.md +13 -11
  128. package/governance/Test-Behavioral-Contract-Validation.md +38 -31
  129. package/governance/Test-Failure-Audit-Methodology.md +1 -1
  130. package/governance/Token-Family-Accessibility.md +1 -2
  131. package/governance/Token-Family-Blend.md +18 -16
  132. package/governance/Token-Family-Blur.md +0 -1
  133. package/governance/Token-Family-Border.md +1 -2
  134. package/governance/Token-Family-Color.md +0 -1
  135. package/governance/Token-Family-Glow.md +1 -2
  136. package/governance/Token-Family-Layering.md +0 -1
  137. package/governance/Token-Family-Motion.md +1 -2
  138. package/governance/Token-Family-Opacity.md +0 -1
  139. package/governance/Token-Family-Radius.md +1 -2
  140. package/governance/Token-Family-Responsive.md +1 -2
  141. package/governance/Token-Family-Shadow.md +1 -2
  142. package/governance/Token-Family-Sizing.md +0 -1
  143. package/governance/Token-Family-Spacing.md +1 -2
  144. package/governance/Token-Family-Typography.md +1 -2
  145. package/governance/Token-Governance.md +8 -8
  146. package/governance/Token-Quick-Reference.md +47 -34
  147. package/governance/Token-Resolution-Patterns.md +1 -1
  148. package/governance/Token-Semantic-Structure.md +1 -1
  149. package/governance/Web-Authoring-Standards.md +5 -5
  150. package/governance/browser-distribution-guide.md +1 -4
  151. package/governance/classification-map.md +474 -0
  152. package/governance/completion-documentation-guide.md +23 -37
  153. package/governance/component-meta-authoring-guide.md +1 -1
  154. package/governance/cross-platform-vs-platform-specific-decision-framework.md +1 -1
  155. package/governance/platform-implementation-guidelines.md +2 -3
  156. package/governance/release-management-system.md +28 -63
  157. package/governance/rosetta-system-principles.md +8 -6
  158. package/governance/stemma-system-principles.md +18 -17
  159. package/mcp-server/src/index.ts +24 -6
  160. package/mcp-server/src/indexer/DocumentIndexer.ts +119 -9
  161. package/mcp-server/src/indexer/__tests__/bare-id-crossrefs.test.ts +250 -0
  162. package/mcp-server/src/indexer/cross-ref-parser.ts +29 -1
  163. package/mcp-server/src/indexer/index-health.ts +27 -2
  164. package/mcp-server/src/query/__tests__/find-docs-calibration.test.ts +11 -26
  165. package/mcp-server/src/relocation-integrity-gate/__tests__/relocation-integrity-gate.test.ts +72 -5
  166. package/mcp-server/src/relocation-integrity-gate/relocation-integrity-gate.ts +81 -24
  167. package/mcp-server/src/tools/list-cross-references.ts +2 -2
  168. package/package.json +24 -26
  169. package/src/__tests__/browser-distribution/css-bundling.test.ts +6 -4
  170. package/src/__tests__/console-allowlist.json +14 -0
  171. package/src/__tests__/console-fail-setup.ts +169 -0
  172. package/src/__tests__/integration/Spec107-DesignLanguageContext.test.ts +16 -0
  173. package/src/__tests__/stemma-system/behavioral-contract-validation.test.ts +70 -17
  174. package/src/__tests__/stemma-system/contract-catalog-name-validation.test.ts +28 -0
  175. package/src/__tests__/stemma-system/form-inputs-contracts.test.ts +223 -16
  176. package/src/__tests__/stemma-system/input-text-native-base-call-alignment.test.ts +298 -0
  177. package/src/blend/OklchBlendCalculator.ts +3 -0
  178. package/src/blend/ThemeAwareBlendUtilities.android.kt +3 -0
  179. package/src/blend/ThemeAwareBlendUtilities.ios.swift +3 -0
  180. package/src/blend/ThemeAwareBlendUtilities.web.ts +9 -1
  181. package/src/blend/__tests__/InteractionStateAudit.test.ts +12 -9
  182. package/src/build/errors/__tests__/ErrorHandler.integration.test.ts +8 -0
  183. package/src/build/errors/__tests__/ErrorHandler.test.ts +5 -0
  184. package/src/build/tokens/__tests__/defineComponentTokens.test.ts +113 -0
  185. package/src/build/tokens/defineComponentTokens.ts +43 -1
  186. package/src/build/workflow/__tests__/CICDIntegration.test.ts +12 -1
  187. package/src/cli/__tests__/init.test.ts +45 -11
  188. package/src/components/core/Avatar-Base/Avatar-Base.schema.yaml +1 -1
  189. package/src/components/core/Avatar-Base/__tests__/Avatar.accessibility.test.ts +121 -7
  190. package/src/components/core/Avatar-Base/__tests__/Avatar.image.test.ts +3 -0
  191. package/src/components/core/Avatar-Base/__tests__/Avatar.test.ts +15 -6
  192. package/src/components/core/Avatar-Base/avatar.tokens.ts +31 -34
  193. package/src/components/core/Avatar-Base/contracts.yaml +11 -1
  194. package/src/components/core/Avatar-Base/index.ts +1 -1
  195. package/src/components/core/Avatar-Base/platforms/web/Avatar.web.ts +24 -5
  196. package/src/components/core/Badge-Count-Base/contracts.yaml +1 -1
  197. package/src/components/core/Badge-Label-Base/contracts.yaml +1 -1
  198. package/src/components/core/Button-CTA/Button-CTA.schema.yaml +2 -12
  199. package/src/components/core/Button-CTA/README.md +3 -6
  200. package/src/components/core/Button-CTA/__tests__/ButtonCTA.test.ts +35 -89
  201. package/src/components/core/Button-CTA/__tests__/setup.test.ts +0 -2
  202. package/src/components/core/Button-CTA/__tests__/test-utils.ts +0 -2
  203. package/src/components/core/Button-CTA/contracts.yaml +6 -29
  204. package/src/components/core/Button-CTA/examples/BasicUsage.html +2 -14
  205. package/src/components/core/Button-CTA/examples/BasicUsage.tsx +17 -44
  206. package/src/components/core/Button-CTA/platforms/android/ButtonCTA.android.kt +12 -20
  207. package/src/components/core/Button-CTA/platforms/ios/ButtonCTA.ios.swift +12 -51
  208. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.css +2 -26
  209. package/src/components/core/Button-CTA/platforms/web/ButtonCTA.web.ts +18 -71
  210. package/src/components/core/Button-CTA/types.ts +10 -28
  211. package/src/components/core/Button-Icon/buttonIcon.tokens.ts +43 -27
  212. package/src/components/core/Chip-Base/__tests__/ChipBase.test.ts +13 -0
  213. package/src/components/core/Chip-Filter/__tests__/ChipFilter.test.ts +13 -0
  214. package/src/components/core/Chip-Input/__tests__/ChipInput.test.ts +13 -0
  215. package/src/components/core/Input-Text-Base/Input-Text-Base.schema.yaml +30 -2
  216. package/src/components/core/Input-Text-Base/README.md +25 -2
  217. package/src/components/core/Input-Text-Base/__tests__/focusIndicators.test.ts +16 -15
  218. package/src/components/core/Input-Text-Base/contracts.yaml +90 -0
  219. package/src/components/core/Input-Text-Base/platforms/android/InputTextBase.android.kt +26 -12
  220. package/src/components/core/Input-Text-Base/platforms/ios/InputTextBase.ios.swift +195 -59
  221. package/src/components/core/Input-Text-Base/types.ts +13 -1
  222. package/src/components/core/Input-Text-Email/Input-Text-Email.schema.yaml +5 -1
  223. package/src/components/core/Input-Text-Email/README.md +8 -7
  224. package/src/components/core/Input-Text-Email/platforms/android/InputTextEmail.android.kt +1 -4
  225. package/src/components/core/Input-Text-Email/platforms/ios/InputTextEmail.ios.swift +2 -16
  226. package/src/components/core/Input-Text-Password/Input-Text-Password.schema.yaml +10 -3
  227. package/src/components/core/Input-Text-Password/README.md +9 -8
  228. package/src/components/core/Input-Text-Password/contracts.yaml +5 -0
  229. package/src/components/core/Input-Text-Password/platforms/android/InputTextPassword.android.kt +17 -7
  230. package/src/components/core/Input-Text-Password/platforms/ios/InputTextPassword.ios.swift +22 -20
  231. package/src/components/core/Input-Text-Password/platforms/web/InputTextPassword.web.ts +11 -2
  232. package/src/components/core/Input-Text-PhoneNumber/Input-Text-PhoneNumber.schema.yaml +5 -1
  233. package/src/components/core/Input-Text-PhoneNumber/README.md +9 -8
  234. package/src/components/core/Input-Text-PhoneNumber/platforms/android/InputTextPhoneNumber.android.kt +2 -5
  235. package/src/components/core/Input-Text-PhoneNumber/platforms/ios/InputTextPhoneNumber.ios.swift +3 -17
  236. package/src/components/core/Nav-Header-App/contracts.yaml +1 -1
  237. package/src/components/core/Nav-SegmentedChoice-Base/contracts.yaml +1 -1
  238. package/src/components/core/Progress-Indicator-Connector-Base/contracts.yaml +1 -1
  239. package/src/components/core/Progress-Indicator-Label-Base/contracts.yaml +1 -1
  240. package/src/components/core/Progress-Indicator-Node-Base/contracts.yaml +1 -1
  241. package/src/components/core/Progress-Stepper-Base/__tests__/StepperBase.test.ts +5 -2
  242. package/src/components/core/Progress-Stepper-Detailed/__tests__/StepperDetailed.test.ts +5 -2
  243. package/src/generators/DTCGFormatGenerator.ts +6 -0
  244. package/src/generators/TokenFileGenerator.ts +7 -2
  245. package/src/generators/__tests__/DTCGConfigOptions.test.ts +14 -5
  246. package/src/integration/BuildErrorHandler.ts +2 -2
  247. package/src/tokens/OpacityTokens.ts +1 -1
  248. package/src/tokens/__tests__/OpacityTokens.test.ts +3 -1
  249. package/src/tokens/__tests__/ProgressTokenCompliance.test.ts +5 -3
  250. package/src/tokens/__tests__/ProgressTokenFormulas.test.ts +11 -11
  251. package/src/tokens/__tests__/ProgressTokenTranslation.test.ts +22 -20
  252. package/src/tokens/component/progress.ts +83 -21
  253. package/src/tokens/semantic/BlendTokens.ts +26 -5
  254. package/src/tokens/semantic/OpacityTokens.ts +4 -4
  255. package/src/types/ComponentTypes.ts +1 -1
  256. package/src/types/generated/TokenTypes.ts +1 -1
  257. package/src/validators/StemmaTokenUsageValidator.ts +3 -2
  258. package/token-index/components.yaml +8 -8
  259. package/token-index/semantics.yaml +1 -2
  260. package/src/tools/release/__tests__/ChangeClassifier.test.ts +0 -133
  261. package/src/tools/release/__tests__/ChangeExtractor.test.ts +0 -222
  262. package/src/tools/release/__tests__/GitHubPublisher.test.ts +0 -240
  263. package/src/tools/release/__tests__/NotesRenderer.test.ts +0 -142
  264. package/src/tools/release/__tests__/NpmPublisher.test.ts +0 -289
  265. package/src/tools/release/__tests__/PipelineIntegration.test.ts +0 -188
  266. package/src/tools/release/__tests__/ReleasePipeline.test.ts +0 -192
  267. package/src/tools/release/__tests__/SemanticVersionValidator.test.ts +0 -49
  268. package/src/tools/release/__tests__/SummaryScanner.test.ts +0 -141
  269. package/src/tools/release/__tests__/TagResolver.test.ts +0 -91
  270. package/src/tools/release/__tests__/VersionCalculator.test.ts +0 -270
  271. package/src/tools/release/__tests__/helpers/NpmMockHelper.ts +0 -80
  272. package/src/tools/release/cli/ReleasePipeline.ts +0 -165
  273. package/src/tools/release/cli/release-tool.ts +0 -107
  274. package/src/tools/release/pipeline/ChangeClassifier.ts +0 -61
  275. package/src/tools/release/pipeline/ChangeExtractor.ts +0 -87
  276. package/src/tools/release/pipeline/NotesRenderer.ts +0 -66
  277. package/src/tools/release/pipeline/SummaryScanner.ts +0 -70
  278. package/src/tools/release/pipeline/TagResolver.ts +0 -40
  279. package/src/tools/release/pipeline/VersionCalculator.ts +0 -375
  280. package/src/tools/release/publishers/GitHubPublisher.ts +0 -228
  281. package/src/tools/release/publishers/NpmPublisher.ts +0 -196
  282. package/src/tools/release/release-config.json +0 -5
  283. package/src/tools/release/types/index.ts +0 -282
  284. 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
- /** Disabled state desaturation - blend300 (12%) */
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:not(:disabled) {
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:not(:disabled) {
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", "disabled", "test-id"];
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, disabled, icon).
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
- disabled ? "button-cta--disabled" : ""
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
- disabled ? "button-cta--disabled" : ""
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
- var AvatarTokens = defineComponentTokens({
8096
- component: "Avatar",
8097
- family: "spacing",
8098
- tokens: {
8099
- // Icon size tokens (gap fillers for sizes without existing icon tokens)
8100
- // These fill gaps where no standard icon token exists at the required 50% ratio
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 && !alt && typeof console !== "undefined") {
9128
+ if (type === "human" && src && alt == null && !decorative && typeof console !== "undefined") {
9183
9129
  console.warn(
9184
- 'AvatarBaseElement: "alt" prop is required when "src" is provided for accessibility. Please add an alt attribute describing the image.'
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") {