@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
@@ -193,7 +193,11 @@ var BlendTokenValues = {
193
193
  pressedDarker: 0.12,
194
194
  /** Focus state saturation increase - blend200 (8%) */
195
195
  focusSaturate: 0.08,
196
- /** Disabled state desaturation - blend300 (12%) */
196
+ /**
197
+ * Disabled state desaturation - blend300 (12%)
198
+ * @deprecated 2026-07-15 — DesignerPunk does not support disabled states; if an action
199
+ * is unavailable, do not render the component. Scheduled for removal at the next major.
200
+ */
197
201
  disabledDesaturate: 0.12,
198
202
  /** Icon optical balance lightening - blend200 (8%) */
199
203
  iconLighter: 0.08
@@ -240,6 +244,7 @@ function createBlendUtilities() {
240
244
  hoverColor: (baseColor) => darkerBlend(baseColor, BlendTokenValues.hoverDarker),
241
245
  pressedColor: (baseColor) => darkerBlend(baseColor, BlendTokenValues.pressedDarker),
242
246
  focusColor: (baseColor) => saturate(baseColor, BlendTokenValues.focusSaturate),
247
+ // deprecated 2026-07-15 (no-disabled-states philosophy) — removal at next major
243
248
  disabledColor: (baseColor) => desaturate(baseColor, BlendTokenValues.disabledDesaturate),
244
249
  iconColor: (baseColor) => lighterBlend(baseColor, BlendTokenValues.iconLighter),
245
250
  // Generic blend functions for custom usage
@@ -1697,6 +1702,9 @@ var InputTextPassword = class extends HTMLElement {
1697
1702
  "error-message",
1698
1703
  "is-success",
1699
1704
  "show-info-icon",
1705
+ // read-only is accepted for API stability but IGNORED — readOnly is
1706
+ // contracted out of Input-Text-Password (see render(), and
1707
+ // contracts.yaml excludes.state_readonly).
1700
1708
  "read-only",
1701
1709
  "required",
1702
1710
  "max-length",
@@ -1766,7 +1774,6 @@ var InputTextPassword = class extends HTMLElement {
1766
1774
  const propsErrorMessage = this.getAttribute("error-message") || "";
1767
1775
  const isSuccess = this.getAttribute("is-success") === "true";
1768
1776
  const showInfoIcon = this.getAttribute("show-info-icon") === "true";
1769
- const readOnly = this.hasAttribute("read-only");
1770
1777
  const required = this.hasAttribute("required");
1771
1778
  const maxLength = this.getAttribute("max-length");
1772
1779
  const showToggle = this.getAttribute("show-toggle") !== "false";
@@ -1801,7 +1808,6 @@ var InputTextPassword = class extends HTMLElement {
1801
1808
  ${errorMessage ? `error-message="${errorMessage}"` : ""}
1802
1809
  ${isSuccess ? 'is-success="true"' : ""}
1803
1810
  ${showInfoIcon ? 'show-info-icon="true"' : ""}
1804
- ${readOnly ? "read-only" : ""}
1805
1811
  ${required ? "required" : ""}
1806
1812
  ${maxLength ? `max-length="${maxLength}"` : ""}
1807
1813
  ></input-text-base>
@@ -2663,7 +2669,7 @@ var ButtonCTA_web_default = `/**
2663
2669
  * The --_cta-hover-bg custom property is set by the component
2664
2670
  * using darkerBlend(color.primary, blend.hoverDarker) = 8% darker.
2665
2671
  */
2666
- .button-cta--primary:hover:not(:disabled) {
2672
+ .button-cta--primary:hover {
2667
2673
  background-color: var(--_cta-hover-bg);
2668
2674
  }
2669
2675
 
@@ -2676,7 +2682,7 @@ var ButtonCTA_web_default = `/**
2676
2682
  * The --_cta-pressed-bg custom property is set by the component
2677
2683
  * using darkerBlend(color.primary, blend.pressedDarker) = 12% darker.
2678
2684
  */
2679
- .button-cta--primary:active:not(:disabled) {
2685
+ .button-cta--primary:active {
2680
2686
  background-color: var(--_cta-pressed-bg);
2681
2687
  }
2682
2688
 
@@ -2706,30 +2712,6 @@ var ButtonCTA_web_default = `/**
2706
2712
  outline: none;
2707
2713
  }
2708
2714
 
2709
- /**
2710
- * Disabled state.
2711
- *
2712
- * Uses blend utility calculated color (desaturate with blend.disabledDesaturate)
2713
- * instead of opacity workaround for cross-platform consistency.
2714
- *
2715
- * The --button-disabled-color custom property is set by the component
2716
- * using desaturate(color.primary, blend.disabledDesaturate) = 12% less saturated.
2717
- *
2718
- * - Cursor changes to not-allowed
2719
- * - Prevents interaction
2720
- * - Maintains color contrast for accessibility
2721
- */
2722
- .button-cta:disabled,
2723
- .button-cta--disabled {
2724
- cursor: not-allowed;
2725
- pointer-events: none;
2726
- }
2727
-
2728
- .button-cta--primary:disabled,
2729
- .button-cta--primary.button-cta--disabled {
2730
- background-color: var(--_cta-disabled-bg);
2731
- }
2732
-
2733
2715
  /* ==========================================================================
2734
2716
  Responsive Behavior
2735
2717
  ========================================================================== */
@@ -2844,7 +2826,6 @@ var ButtonCTA = class extends HTMLElement {
2844
2826
  // Cached blend colors for state styling
2845
2827
  this._hoverColor = "";
2846
2828
  this._pressedColor = "";
2847
- this._disabledColor = "";
2848
2829
  this._iconColor = "";
2849
2830
  this._iconOpticalBalanceColor = "";
2850
2831
  /**
@@ -2853,11 +2834,6 @@ var ButtonCTA = class extends HTMLElement {
2853
2834
  * Dispatches a custom 'press' event that bubbles up to parent elements.
2854
2835
  */
2855
2836
  this._handleClick = (event) => {
2856
- if (this.disabled) {
2857
- event.preventDefault();
2858
- event.stopPropagation();
2859
- return;
2860
- }
2861
2837
  this.dispatchEvent(new CustomEvent("press", {
2862
2838
  bubbles: true,
2863
2839
  composed: true,
@@ -2874,9 +2850,6 @@ var ButtonCTA = class extends HTMLElement {
2874
2850
  * @param event - The keyboard event
2875
2851
  */
2876
2852
  this._handleKeyDown = (event) => {
2877
- if (this.disabled) {
2878
- return;
2879
- }
2880
2853
  if (event.key === "Enter" || event.key === " ") {
2881
2854
  event.preventDefault();
2882
2855
  this.dispatchEvent(new CustomEvent("press", {
@@ -2895,7 +2868,7 @@ var ButtonCTA = class extends HTMLElement {
2895
2868
  * When these attributes change, attributeChangedCallback is invoked.
2896
2869
  */
2897
2870
  static get observedAttributes() {
2898
- return ["label", "size", "variant", "icon", "no-wrap", "disabled", "test-id"];
2871
+ return ["label", "size", "variant", "icon", "no-wrap", "test-id"];
2899
2872
  }
2900
2873
  /**
2901
2874
  * Called when the element is added to the DOM.
@@ -2942,15 +2915,14 @@ var ButtonCTA = class extends HTMLElement {
2942
2915
  * Calculate blend colors from CSS custom properties.
2943
2916
  *
2944
2917
  * Reads base colors from CSS custom properties and applies theme-aware blend
2945
- * utilities to generate state colors (hover, pressed, disabled, icon).
2946
- *
2918
+ * utilities to generate state colors (hover, pressed, icon).
2919
+ *
2947
2920
  * Uses getBlendUtilities() factory functions instead of direct blend calculations
2948
2921
  * for cross-platform consistency with iOS and Android implementations.
2949
- *
2922
+ *
2950
2923
  * State color mappings:
2951
2924
  * - Hover: darkerBlend(color.action.primary, blend.hoverDarker) - 8% darker
2952
2925
  * - Pressed: darkerBlend(color.action.primary, blend.pressedDarker) - 12% darker
2953
- * - Disabled: desaturate(color.action.primary, blend.disabledDesaturate) - 12% less saturated
2954
2926
  * - Icon: lighterBlend(color.contrast.onAction, blend.iconLighter) - 8% lighter
2955
2927
  *
2956
2928
  * @see Requirements: 7.1, 7.2, 7.3, 7.4 - Button-CTA state colors
@@ -2969,7 +2941,6 @@ var ButtonCTA = class extends HTMLElement {
2969
2941
  }
2970
2942
  this._hoverColor = this._blendUtils.hoverColor(primaryColor);
2971
2943
  this._pressedColor = this._blendUtils.pressedColor(primaryColor);
2972
- this._disabledColor = this._blendUtils.disabledColor(primaryColor);
2973
2944
  this._iconColor = this._blendUtils.iconColor(onActionColor);
2974
2945
  this._iconOpticalBalanceColor = this._blendUtils.iconColor(primaryColor);
2975
2946
  }
@@ -3061,22 +3032,6 @@ var ButtonCTA = class extends HTMLElement {
3061
3032
  set noWrap(value) {
3062
3033
  this.setAttribute("no-wrap", value.toString());
3063
3034
  }
3064
- /**
3065
- * Get the disabled state.
3066
- */
3067
- get disabled() {
3068
- return this.hasAttribute("disabled");
3069
- }
3070
- /**
3071
- * Set the disabled state.
3072
- */
3073
- set disabled(value) {
3074
- if (value) {
3075
- this.setAttribute("disabled", "");
3076
- } else {
3077
- this.removeAttribute("disabled");
3078
- }
3079
- }
3080
3035
  /**
3081
3036
  * Get the test ID.
3082
3037
  */
@@ -3135,31 +3090,27 @@ var ButtonCTA = class extends HTMLElement {
3135
3090
  const variant = this.buttonVariant;
3136
3091
  const icon = this.icon;
3137
3092
  const noWrap = this.noWrap;
3138
- const disabled = this.disabled;
3139
3093
  const testID = this.testID;
3140
3094
  const buttonClasses = [
3141
3095
  "button-cta",
3142
3096
  `button-cta--${size}`,
3143
- `button-cta--${variant}`,
3144
- disabled ? "button-cta--disabled" : ""
3145
- ].filter(Boolean).join(" ");
3097
+ `button-cta--${variant}`
3098
+ ].join(" ");
3146
3099
  const iconSize = getIconSizeForButton(size);
3147
3100
  const labelClass = noWrap ? "button-cta__label--no-wrap" : "button-cta__label";
3148
3101
  const testIDAttr = testID ? ` data-testid="${testID}"` : "";
3149
3102
  const blendColorStyles = `
3150
3103
  --_cta-hover-bg: ${this._hoverColor};
3151
3104
  --_cta-pressed-bg: ${this._pressedColor};
3152
- --_cta-disabled-bg: ${this._disabledColor};
3153
3105
  --_cta-icon-color: ${this._iconColor};
3154
3106
  --_cta-icon-optical: ${this._iconOpticalBalanceColor};
3155
3107
  `;
3156
3108
  this._shadowRoot.innerHTML = `
3157
3109
  <style>${ButtonCTA_web_default}</style>
3158
- <button
3110
+ <button
3159
3111
  class="${buttonClasses}"
3160
3112
  type="button"
3161
3113
  role="button"
3162
- ${disabled ? 'disabled aria-disabled="true"' : 'aria-disabled="false"'}
3163
3114
  ${testIDAttr}
3164
3115
  aria-label="${label}"
3165
3116
  style="${blendColorStyles}"
@@ -3195,23 +3146,14 @@ var ButtonCTA = class extends HTMLElement {
3195
3146
  const variant = this.buttonVariant;
3196
3147
  const icon = this.icon;
3197
3148
  const noWrap = this.noWrap;
3198
- const disabled = this.disabled;
3199
3149
  const testID = this.testID;
3200
3150
  const iconSize = getIconSizeForButton(size);
3201
3151
  const buttonClasses = [
3202
3152
  "button-cta",
3203
3153
  `button-cta--${size}`,
3204
- `button-cta--${variant}`,
3205
- disabled ? "button-cta--disabled" : ""
3206
- ].filter(Boolean).join(" ");
3154
+ `button-cta--${variant}`
3155
+ ].join(" ");
3207
3156
  this._button.className = buttonClasses;
3208
- if (disabled) {
3209
- this._button.setAttribute("disabled", "");
3210
- this._button.setAttribute("aria-disabled", "true");
3211
- } else {
3212
- this._button.removeAttribute("disabled");
3213
- this._button.setAttribute("aria-disabled", "false");
3214
- }
3215
3157
  this._button.setAttribute("aria-label", label);
3216
3158
  if (testID) {
3217
3159
  this._button.setAttribute("data-testid", testID);
@@ -3220,7 +3162,6 @@ var ButtonCTA = class extends HTMLElement {
3220
3162
  }
3221
3163
  this._button.style.setProperty("--_cta-hover-bg", this._hoverColor);
3222
3164
  this._button.style.setProperty("--_cta-pressed-bg", this._pressedColor);
3223
- this._button.style.setProperty("--_cta-disabled-bg", this._disabledColor);
3224
3165
  this._button.style.setProperty("--_cta-icon-color", this._iconColor);
3225
3166
  this._button.style.setProperty("--_cta-icon-optical", this._iconOpticalBalanceColor);
3226
3167
  this._labelEl.textContent = label;
@@ -4889,6 +4830,11 @@ function defineComponentTokens(config) {
4889
4830
  const tokenName = `${component.toLowerCase()}.${key}`;
4890
4831
  if (isTokenWithReference(definition)) {
4891
4832
  const primitiveToken = definition.reference;
4833
+ if (typeof primitiveToken.category === "string" && primitiveToken.category !== family) {
4834
+ throw new Error(
4835
+ `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.`
4836
+ );
4837
+ }
4892
4838
  const value = primitiveToken.baseValue;
4893
4839
  values[key] = value;
4894
4840
  registeredTokens.push({
@@ -7975,15 +7921,15 @@ var AvatarSizingTokens = defineComponentTokens({
7975
7921
  "size.xxl": {
7976
7922
  reference: sizingTokens.size1600,
7977
7923
  reasoning: "Extra extra large avatar (128px). Full profile view, onboarding."
7978
- }
7979
- }
7980
- });
7981
- var AvatarTokens = defineComponentTokens({
7982
- component: "Avatar",
7983
- family: "spacing",
7984
- tokens: {
7985
- // Icon size tokens (gap fillers for sizes without existing icon tokens)
7986
- // These fill gaps where no standard icon token exists at the required 50% ratio
7924
+ },
7925
+ // Icon size tokens (gap fillers for sizes without an existing icon token).
7926
+ // Kept on the VALUE path deliberately: sizing primitives exist at both values
7927
+ // (size150 = 12, size800 = 64), but the reference path currently emits a
7928
+ // fabricated `SizingTokens.<name>` class on iOS/Android that no generated or
7929
+ // hand-written platform file defines. Switching these to `reference:` would
7930
+ // trade compiling output (`12.dp`) for non-compiling output and break
7931
+ // Avatar.android.kt's `val iconSizeXs: Dp = GeneratedAvatarTokens.iconSizeXs`.
7932
+ // Revisit once TokenFileGenerator.getFamilyClassName emits a real platform type.
7987
7933
  "icon.size.xs": {
7988
7934
  value: SIZING_BASE_VALUE * 1.5,
7989
7935
  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."
@@ -9065,9 +9011,9 @@ var AvatarBaseElement = class extends HTMLElement {
9065
9011
  ].filter(Boolean).join(" ");
9066
9012
  const testIDAttr = testID ? ` data-testid="${this.escapeHtml(testID)}"` : "";
9067
9013
  const ariaHiddenAttr = decorative ? ' aria-hidden="true"' : "";
9068
- if (src && !alt && typeof console !== "undefined") {
9014
+ if (type === "human" && src && alt == null && !decorative && typeof console !== "undefined") {
9069
9015
  console.warn(
9070
- 'AvatarBaseElement: "alt" prop is required when "src" is provided for accessibility. Please add an alt attribute describing the image.'
9016
+ '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.'
9071
9017
  );
9072
9018
  }
9073
9019
  if (type === "agent") {