@helixui/library 3.7.0 → 3.8.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 (248) hide show
  1. package/custom-elements.json +1926 -303
  2. package/dist/components/hx-action-bar/hx-action-bar.d.ts +18 -0
  3. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  4. package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
  5. package/dist/components/hx-action-bar/index.js +1 -1
  6. package/dist/components/hx-banner/hx-banner.d.ts +19 -0
  7. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  8. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  9. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  10. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +18 -0
  11. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  12. package/dist/components/hx-breadcrumb/index.js +1 -1
  13. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  14. package/dist/components/hx-button/index.js +1 -1
  15. package/dist/components/hx-button-group/hx-button-group.d.ts +47 -0
  16. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  17. package/dist/components/hx-button-group/index.js +1 -1
  18. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  19. package/dist/components/hx-checkbox/index.js +1 -1
  20. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +36 -0
  21. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  22. package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
  23. package/dist/components/hx-checkbox-group/index.js +1 -1
  24. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +19 -0
  25. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  26. package/dist/components/hx-color-picker/hx-color-picker.d.ts +18 -0
  27. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  28. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  29. package/dist/components/hx-color-picker/index.js +1 -1
  30. package/dist/components/hx-combobox/hx-combobox.d.ts +18 -0
  31. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  32. package/dist/components/hx-copy-button/hx-copy-button.d.ts +18 -0
  33. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  34. package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
  35. package/dist/components/hx-copy-button/index.js +1 -1
  36. package/dist/components/hx-date-picker/hx-date-picker.d.ts +18 -0
  37. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  38. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  39. package/dist/components/hx-date-picker/index.js +1 -1
  40. package/dist/components/hx-drawer/hx-drawer.d.ts +18 -0
  41. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  42. package/dist/components/hx-dropdown/hx-dropdown.d.ts +18 -0
  43. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  44. package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
  45. package/dist/components/hx-dropdown/index.js +1 -1
  46. package/dist/components/hx-field/hx-field.d.ts +17 -0
  47. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  48. package/dist/components/hx-field-label/hx-field-label.d.ts +17 -0
  49. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  50. package/dist/components/hx-file-upload/hx-file-upload.d.ts +18 -0
  51. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  52. package/dist/components/hx-form/hx-form.d.ts +19 -0
  53. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  54. package/dist/components/hx-help-text/hx-help-text.d.ts +17 -0
  55. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  56. package/dist/components/hx-icon-button/hx-icon-button.d.ts +18 -0
  57. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  58. package/dist/components/hx-menu/hx-menu.d.ts +18 -0
  59. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  60. package/dist/components/hx-nav/hx-nav.d.ts +18 -0
  61. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  62. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  63. package/dist/components/hx-nav/index.js +1 -1
  64. package/dist/components/hx-number-input/hx-number-input.d.ts +18 -0
  65. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  66. package/dist/components/hx-number-input/index.js +1 -1
  67. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +18 -0
  68. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  69. package/dist/components/hx-popover/hx-popover.d.ts +18 -0
  70. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  71. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  72. package/dist/components/hx-popover/index.js +1 -1
  73. package/dist/components/hx-popup/hx-popup.d.ts +18 -0
  74. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  75. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  76. package/dist/components/hx-popup/index.js +1 -1
  77. package/dist/components/hx-radio-group/hx-radio-group.d.ts +18 -0
  78. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  79. package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +1 -1
  80. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  81. package/dist/components/hx-radio-group/index.js +1 -1
  82. package/dist/components/hx-rating/hx-rating.d.ts +19 -0
  83. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  84. package/dist/components/hx-select/hx-select.d.ts +18 -0
  85. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  86. package/dist/components/hx-side-nav/hx-side-nav.d.ts +18 -0
  87. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  88. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  89. package/dist/components/hx-side-nav/index.js +1 -1
  90. package/dist/components/hx-slider/hx-slider.d.ts +19 -0
  91. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  92. package/dist/components/hx-split-button/hx-split-button.d.ts +18 -0
  93. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  94. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  95. package/dist/components/hx-split-button/index.js +1 -1
  96. package/dist/components/hx-switch/hx-switch.d.ts +18 -0
  97. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  98. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  99. package/dist/components/hx-switch/index.js +1 -1
  100. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  101. package/dist/components/hx-tabs/hx-tabs.d.ts +18 -0
  102. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  103. package/dist/components/hx-tabs/index.js +1 -1
  104. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  105. package/dist/components/hx-text-input/index.js +1 -1
  106. package/dist/components/hx-textarea/hx-textarea.d.ts +18 -0
  107. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  108. package/dist/components/hx-time-picker/hx-time-picker.d.ts +18 -0
  109. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  110. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  111. package/dist/components/hx-time-picker/index.js +1 -1
  112. package/dist/components/hx-toast/hx-toast.d.ts +19 -0
  113. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  114. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +18 -0
  115. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  116. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  117. package/dist/components/hx-toggle-button/index.js +1 -1
  118. package/dist/components/hx-tooltip/hx-tooltip.d.ts +18 -0
  119. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  120. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
  121. package/dist/components/hx-tooltip/index.js +1 -1
  122. package/dist/components/hx-top-nav/hx-top-nav.d.ts +18 -0
  123. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  124. package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
  125. package/dist/components/hx-top-nav/index.js +1 -1
  126. package/dist/css/helix-all.css +239 -30
  127. package/dist/css/helix-core.css +4 -1
  128. package/dist/css/helix-forms.css +100 -15
  129. package/dist/css/helix-navigation.css +43 -2
  130. package/dist/css/helix-overlay.css +53 -0
  131. package/dist/css/helix-tokens.css +13 -12
  132. package/dist/css/helix-utility.css +39 -12
  133. package/dist/css/hx-action-bar.css +12 -0
  134. package/dist/css/hx-button.css +4 -1
  135. package/dist/css/hx-checkbox-group.css +11 -0
  136. package/dist/css/hx-checkbox.css +10 -0
  137. package/dist/css/hx-color-picker.css +14 -1
  138. package/dist/css/hx-copy-button.css +5 -2
  139. package/dist/css/hx-date-picker.css +6 -1
  140. package/dist/css/hx-dropdown.css +13 -0
  141. package/dist/css/hx-nav.css +24 -2
  142. package/dist/css/hx-number-input.css +8 -8
  143. package/dist/css/hx-popover.css +13 -0
  144. package/dist/css/hx-popup.css +14 -0
  145. package/dist/css/hx-radio-group.css +10 -0
  146. package/dist/css/hx-side-nav.css +7 -0
  147. package/dist/css/hx-split-button.css +22 -10
  148. package/dist/css/hx-switch.css +19 -1
  149. package/dist/css/hx-text-input.css +4 -1
  150. package/dist/css/hx-time-picker.css +7 -2
  151. package/dist/css/hx-toggle-button.css +11 -1
  152. package/dist/css/hx-tooltip.css +13 -0
  153. package/dist/css/hx-top-nav.css +12 -0
  154. package/dist/css/index.css +1 -1
  155. package/dist/css/manifest.json +40 -12
  156. package/dist/index.js +24 -24
  157. package/dist/shared/{hx-action-bar-CitgcpGv.js → hx-action-bar-BlEG4aZv.js} +41 -29
  158. package/dist/shared/hx-action-bar-BlEG4aZv.js.map +1 -0
  159. package/dist/shared/hx-banner-fpRnciIO.js.map +1 -1
  160. package/dist/shared/{hx-breadcrumb-item-3tKppF9h.js → hx-breadcrumb-item-D8xYqe3s.js} +56 -43
  161. package/dist/shared/hx-breadcrumb-item-D8xYqe3s.js.map +1 -0
  162. package/dist/shared/{hx-button-rRNmD4fd.js → hx-button-DOZTZnz-.js} +18 -15
  163. package/dist/shared/hx-button-DOZTZnz-.js.map +1 -0
  164. package/dist/shared/hx-button-group-D3QUmSzl.js +248 -0
  165. package/dist/shared/hx-button-group-D3QUmSzl.js.map +1 -0
  166. package/dist/shared/{hx-checkbox-hPlIw6Lb.js → hx-checkbox-DcgyGS9V.js} +30 -20
  167. package/dist/shared/hx-checkbox-DcgyGS9V.js.map +1 -0
  168. package/dist/shared/{hx-checkbox-group-D5piJLY8.js → hx-checkbox-group-C0q6HDqn.js} +101 -58
  169. package/dist/shared/hx-checkbox-group-C0q6HDqn.js.map +1 -0
  170. package/dist/shared/hx-clinical-status-D3XQIOqX.js.map +1 -1
  171. package/dist/shared/{hx-color-picker-DBwJzT5f.js → hx-color-picker-CYjx8i8R.js} +97 -84
  172. package/dist/shared/hx-color-picker-CYjx8i8R.js.map +1 -0
  173. package/dist/shared/hx-combobox-NgJaLbs2.js.map +1 -1
  174. package/dist/shared/{hx-copy-button-sUVuikyH.js → hx-copy-button-DJirFCUL.js} +18 -15
  175. package/dist/shared/hx-copy-button-DJirFCUL.js.map +1 -0
  176. package/dist/shared/{hx-date-picker-DSKDkCy1.js → hx-date-picker-0PtEav0K.js} +66 -61
  177. package/dist/shared/hx-date-picker-0PtEav0K.js.map +1 -0
  178. package/dist/shared/hx-drawer-CM_upadk.js.map +1 -1
  179. package/dist/shared/{hx-dropdown-D626S2ZG.js → hx-dropdown-xHwTJecv.js} +44 -31
  180. package/dist/shared/hx-dropdown-xHwTJecv.js.map +1 -0
  181. package/dist/shared/hx-field-label-BVRyyKeh.js.map +1 -1
  182. package/dist/shared/hx-field-zw0U1KVi.js.map +1 -1
  183. package/dist/shared/hx-file-upload-D3rKROK5.js.map +1 -1
  184. package/dist/shared/hx-form-CkChEATa.js.map +1 -1
  185. package/dist/shared/hx-help-text-Xb2Yr8x2.js.map +1 -1
  186. package/dist/shared/hx-icon-button-B2BdVdyK.js.map +1 -1
  187. package/dist/shared/hx-menu-divider-A6Guuzi_.js.map +1 -1
  188. package/dist/shared/{hx-nav-ldFM3Fle.js → hx-nav-ChMTfn7o.js} +66 -44
  189. package/dist/shared/hx-nav-ChMTfn7o.js.map +1 -0
  190. package/dist/shared/{hx-nav-item-CODtUlew.js → hx-nav-item-ClN17f1y.js} +62 -55
  191. package/dist/shared/hx-nav-item-ClN17f1y.js.map +1 -0
  192. package/dist/shared/{hx-number-input-yUzFOSC1.js → hx-number-input-MggsT7F0.js} +13 -13
  193. package/dist/shared/hx-number-input-MggsT7F0.js.map +1 -0
  194. package/dist/shared/hx-overflow-menu-DFjJAziP.js.map +1 -1
  195. package/dist/shared/{hx-popover-BAlAFOH9.js → hx-popover-BjB0nkcq.js} +51 -38
  196. package/dist/shared/hx-popover-BjB0nkcq.js.map +1 -0
  197. package/dist/shared/{hx-popup-COUXXZ9X.js → hx-popup-BiV_2evC.js} +59 -45
  198. package/dist/shared/hx-popup-BiV_2evC.js.map +1 -0
  199. package/dist/shared/{hx-radio-CY4kQfZw.js → hx-radio-BY4zpwdh.js} +45 -27
  200. package/dist/shared/hx-radio-BY4zpwdh.js.map +1 -0
  201. package/dist/shared/hx-rating-C3QP53k9.js.map +1 -1
  202. package/dist/shared/hx-select-DahFehiZ.js.map +1 -1
  203. package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -1
  204. package/dist/shared/{hx-split-button-Ddle8iVx.js → hx-split-button-CdNz1XAu.js} +62 -50
  205. package/dist/shared/hx-split-button-CdNz1XAu.js.map +1 -0
  206. package/dist/shared/{hx-switch-TvKGvZJz.js → hx-switch-BCXuNxEH.js} +42 -24
  207. package/dist/shared/hx-switch-BCXuNxEH.js.map +1 -0
  208. package/dist/shared/{hx-tab-panel-DzsX8BHV.js → hx-tab-panel-BfisavKo.js} +47 -32
  209. package/dist/shared/hx-tab-panel-BfisavKo.js.map +1 -0
  210. package/dist/shared/{hx-text-input-D6FlOZM-.js → hx-text-input-V5sQOpDh.js} +5 -2
  211. package/dist/shared/hx-text-input-V5sQOpDh.js.map +1 -0
  212. package/dist/shared/hx-textarea-CNG590KY.js.map +1 -1
  213. package/dist/shared/{hx-time-picker-Bo7FWzmf.js → hx-time-picker-DfJkBwcX.js} +41 -36
  214. package/dist/shared/hx-time-picker-DfJkBwcX.js.map +1 -0
  215. package/dist/shared/{hx-toggle-button-DSJeFlb0.js → hx-toggle-button-xNVYeA3X.js} +37 -27
  216. package/dist/shared/hx-toggle-button-xNVYeA3X.js.map +1 -0
  217. package/dist/shared/{hx-tooltip-DVqtKPCD.js → hx-tooltip-CamO-9nd.js} +24 -11
  218. package/dist/shared/hx-tooltip-CamO-9nd.js.map +1 -0
  219. package/dist/shared/{hx-top-nav-DP6OFS8C.js → hx-top-nav-CsTxOtVI.js} +26 -14
  220. package/dist/shared/hx-top-nav-CsTxOtVI.js.map +1 -0
  221. package/dist/shared/toast-factory-Dht3pVsw.js.map +1 -1
  222. package/figma-inventory.json +1121 -345
  223. package/package.json +2 -2
  224. package/dist/shared/hx-action-bar-CitgcpGv.js.map +0 -1
  225. package/dist/shared/hx-breadcrumb-item-3tKppF9h.js.map +0 -1
  226. package/dist/shared/hx-button-group-4NUBpkyC.js +0 -181
  227. package/dist/shared/hx-button-group-4NUBpkyC.js.map +0 -1
  228. package/dist/shared/hx-button-rRNmD4fd.js.map +0 -1
  229. package/dist/shared/hx-checkbox-group-D5piJLY8.js.map +0 -1
  230. package/dist/shared/hx-checkbox-hPlIw6Lb.js.map +0 -1
  231. package/dist/shared/hx-color-picker-DBwJzT5f.js.map +0 -1
  232. package/dist/shared/hx-copy-button-sUVuikyH.js.map +0 -1
  233. package/dist/shared/hx-date-picker-DSKDkCy1.js.map +0 -1
  234. package/dist/shared/hx-dropdown-D626S2ZG.js.map +0 -1
  235. package/dist/shared/hx-nav-item-CODtUlew.js.map +0 -1
  236. package/dist/shared/hx-nav-ldFM3Fle.js.map +0 -1
  237. package/dist/shared/hx-number-input-yUzFOSC1.js.map +0 -1
  238. package/dist/shared/hx-popover-BAlAFOH9.js.map +0 -1
  239. package/dist/shared/hx-popup-COUXXZ9X.js.map +0 -1
  240. package/dist/shared/hx-radio-CY4kQfZw.js.map +0 -1
  241. package/dist/shared/hx-split-button-Ddle8iVx.js.map +0 -1
  242. package/dist/shared/hx-switch-TvKGvZJz.js.map +0 -1
  243. package/dist/shared/hx-tab-panel-DzsX8BHV.js.map +0 -1
  244. package/dist/shared/hx-text-input-D6FlOZM-.js.map +0 -1
  245. package/dist/shared/hx-time-picker-Bo7FWzmf.js.map +0 -1
  246. package/dist/shared/hx-toggle-button-DSJeFlb0.js.map +0 -1
  247. package/dist/shared/hx-tooltip-DVqtKPCD.js.map +0 -1
  248. package/dist/shared/hx-top-nav-DP6OFS8C.js.map +0 -1
@@ -55,10 +55,13 @@
55
55
  font-size: var(--hx-font-size-sm);
56
56
  }
57
57
 
58
+ /* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
59
+ Bound to --hx-touch-target-min so the default md variant clears the
60
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
58
61
  .button--md {
59
62
  padding: var(--hx-space-2);
60
- min-width: var(--hx-size-10);
61
- height: var(--hx-size-10);
63
+ min-width: var(--hx-touch-target-min, 2.75rem);
64
+ min-height: var(--hx-touch-target-min, 2.75rem);
62
65
  font-size: var(--hx-font-size-md);
63
66
  }
64
67
 
@@ -105,7 +105,8 @@
105
105
  font-size: var(--hx-font-size-md, 1rem);
106
106
  color: var(--hx-date-picker-color, var(--hx-color-text-strong, #202b39));
107
107
  line-height: var(--hx-line-height-normal, 1.5);
108
- min-height: var(--hx-size-10, 2.5rem);
108
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
109
+ min-height: var(--hx-touch-target-min, 2.75rem);
109
110
  width: 100%;
110
111
  cursor: default;
111
112
  }
@@ -126,6 +127,10 @@
126
127
  display: flex;
127
128
  align-items: center;
128
129
  justify-content: center;
130
+ /* WCAG 2.5.5 (Enhanced) AAA — calendar trigger must clear 44×44.
131
+ Without min-width the icon button collapses to ~41 px wide. */
132
+ min-width: var(--hx-touch-target-min, 2.75rem);
133
+ min-height: var(--hx-touch-target-min, 2.75rem);
129
134
  padding: 0 var(--hx-space-3, 0.75rem);
130
135
  border: none;
131
136
  border-left: var(--hx-border-width-thin, 1px) solid
@@ -13,6 +13,19 @@
13
13
  display: inline-block;
14
14
  }
15
15
 
16
+ /*
17
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
18
+ * trigger (typically <hx-button>, <button>, or <hx-icon-button>). The host
19
+ * is a popover-container; the interactive surface is the slotted trigger.
20
+ */
21
+ ::slotted([slot='trigger']:focus-visible),
22
+ ::slotted(button:focus-visible),
23
+ ::slotted(a:focus-visible) {
24
+ outline: var(--hx-focus-ring-width, 2px) solid
25
+ var(--hx-dropdown-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
26
+ outline-offset: var(--hx-focus-ring-offset, 2px);
27
+ }
28
+
16
29
  [part='panel'] {
17
30
  position: fixed;
18
31
  z-index: var(--hx-dropdown-panel-z-index, 1000);
@@ -70,6 +70,16 @@
70
70
  align-items: center;
71
71
  gap: var(--hx-space-1, 0.25rem);
72
72
  padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
73
+ /*
74
+ * WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding
75
+ * land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link
76
+ * content is first-party (rendered via consumer-supplied props on
77
+ * <hx-nav-item>), so the slotted-content carve-out does not apply —
78
+ * this is a real component obligation. Bind --hx-nav-link-min-height
79
+ * to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive
80
+ * area without enlarging the visible label.
81
+ */
82
+ min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));
73
83
  color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));
74
84
  text-decoration: none;
75
85
  border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
@@ -98,8 +108,20 @@
98
108
  }
99
109
 
100
110
  .nav__link--active {
101
- background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #0f7078));
102
- color: var(--hx-nav-link-active-color, var(--hx-color-neutral-0, #ffffff));
111
+ background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));
112
+ /* Use --hx-color-text-on-primary so the active-link text inherits the
113
+ * action-surface AAA-strict pairing (white on primary-700 in default
114
+ * themes; black on lighter primary-700 in the high-contrast theme).
115
+ * Pre-3.4.0 this consumed --hx-color-primary-600 directly which
116
+ * resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA
117
+ * normal fail under WCAG 1.4.6 for body-text-sized link labels. The
118
+ * Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700
119
+ * (Apex 7.03:1 with white) and consuming the action semantic here
120
+ * picks up the AAA-strict pairing across the full 6-brand matrix.
121
+ * Hardcoding white previously failed AAA-large in high-contrast
122
+ * (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly
123
+ * in HC mode. */
124
+ color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));
103
125
  }
104
126
 
105
127
  /* ─── Chevron Icon ─── */
@@ -58,13 +58,13 @@
58
58
  .field__input-wrapper:focus-within {
59
59
  border-color: var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
60
60
  /* Fallback for Safari < 16.2 (no color-mix support) */
61
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
61
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
62
62
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
63
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
63
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
64
64
  color-mix(
65
65
  in srgb,
66
66
  var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color))
67
- calc(var(--hx-focus-ring-opacity) * 100%),
67
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
68
68
  transparent
69
69
  );
70
70
  }
@@ -78,13 +78,13 @@
78
78
  .field--error .field__input-wrapper:focus-within {
79
79
  border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
80
80
  /* Fallback for Safari < 16.2 (no color-mix support) */
81
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
81
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
82
82
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
83
- box-shadow: 0 0 0 var(--hx-focus-ring-width)
83
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
84
84
  color-mix(
85
85
  in srgb,
86
86
  var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e))
87
- calc(var(--hx-focus-ring-opacity) * 100%),
87
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
88
88
  transparent
89
89
  );
90
90
  }
@@ -111,10 +111,10 @@
111
111
  color: var(--hx-number-input-color, var(--hx-color-text-strong));
112
112
  line-height: var(--hx-line-height-normal);
113
113
  width: 100%;
114
- /* Size: md (default) */
114
+ /* Size: md (default) — WCAG 2.5.5 (Enhanced) AAA touch target. */
115
115
  padding: var(--hx-space-2) var(--hx-space-3);
116
116
  font-size: var(--hx-font-size-md);
117
- min-height: var(--hx-size-10);
117
+ min-height: var(--hx-touch-target-min, 2.75rem);
118
118
  }
119
119
 
120
120
  .field__input::placeholder {
@@ -9,6 +9,19 @@
9
9
  display: inline-block;
10
10
  }
11
11
 
12
+ /*
13
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
14
+ * trigger so consumers who slot bare HTML controls inherit the same ring
15
+ * width as <hx-button>. Token-driven: --hx-focus-ring-width (default 2px).
16
+ */
17
+ ::slotted([slot='trigger']:focus-visible),
18
+ ::slotted(button:focus-visible),
19
+ ::slotted(a:focus-visible) {
20
+ outline: var(--hx-focus-ring-width, 2px) solid
21
+ var(--hx-popover-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
22
+ outline-offset: var(--hx-focus-ring-offset, 2px);
23
+ }
24
+
12
25
  [part='body'] {
13
26
  position: fixed;
14
27
  z-index: var(--hx-popover-z-index, 9999);
@@ -3,6 +3,20 @@
3
3
  display: inline-block;
4
4
  }
5
5
 
6
+ /*
7
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
8
+ * trigger / anchor controls. hx-popup is a positioning primitive: it
9
+ * paints no surface itself, but slotted natives (<button>, <a>) must
10
+ * still meet the AAA ring threshold. Token-driven.
11
+ */
12
+ ::slotted([slot='anchor']:focus-visible),
13
+ ::slotted(button:focus-visible),
14
+ ::slotted(a:focus-visible) {
15
+ outline: var(--hx-focus-ring-width, 2px) solid
16
+ var(--hx-popup-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
17
+ outline-offset: var(--hx-focus-ring-offset, 2px);
18
+ }
19
+
6
20
  [part='popup'] {
7
21
  position: fixed;
8
22
  z-index: var(--hx-popup-z-index, 9000);
@@ -8,6 +8,16 @@
8
8
  pointer-events: none;
9
9
  }
10
10
 
11
+ /*
12
+ * AAA 2.4.13 Focus Appearance — host-level focus ring for the group host
13
+ * when it carries focus via roving tabindex. Token-driven: ≥2px width.
14
+ */
15
+ :host(:focus-visible) {
16
+ outline: var(--hx-focus-ring-width, 2px) solid
17
+ var(--hx-radio-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
18
+ outline-offset: var(--hx-focus-ring-offset, 2px);
19
+ }
20
+
11
21
  * {
12
22
  box-sizing: border-box;
13
23
  }
@@ -96,8 +96,15 @@
96
96
  display: flex;
97
97
  align-items: center;
98
98
  justify-content: center;
99
+ /* Visual icon area stays 2rem (32px) — preserves the side-nav header
100
+ silhouette while the wrapping touch target grows to 44×44 to meet
101
+ WCAG 2.5.5 (Enhanced) AAA. min-width/min-height own the hit area;
102
+ width/height drive the visual painted area, but the button's
103
+ intrinsic size always matches the hit-area floor. */
99
104
  width: var(--hx-space-8, 2rem);
100
105
  height: var(--hx-space-8, 2rem);
106
+ min-width: var(--hx-touch-target-min, 2.75rem);
107
+ min-height: var(--hx-touch-target-min, 2.75rem);
101
108
  margin-inline-start: auto;
102
109
  flex-shrink: 0;
103
110
  padding: 0;
@@ -135,16 +135,22 @@
135
135
  min-height: var(--hx-size-8, 2rem);
136
136
  }
137
137
 
138
- /* md */
138
+ /* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
139
+ Bound to --hx-touch-target-min so the default md variant clears the
140
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
139
141
  .split-button--md .split-button__primary {
140
142
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
141
143
  font-size: var(--hx-font-size-md, 1rem);
142
- min-height: var(--hx-size-10, 2.5rem);
144
+ min-height: var(--hx-touch-target-min, 2.75rem);
143
145
  }
144
146
 
145
147
  .split-button--md .split-button__trigger {
146
148
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
147
- min-height: var(--hx-size-10, 2.5rem);
149
+ /* WCAG 2.5.5 (Enhanced) AAA — chevron trigger must clear 44×44 in
150
+ BOTH dimensions. Without min-width, the trigger collapses to its
151
+ icon width (~38 px) and fails the brand-theme matrix audit. */
152
+ min-width: var(--hx-touch-target-min, 2.75rem);
153
+ min-height: var(--hx-touch-target-min, 2.75rem);
148
154
  }
149
155
 
150
156
  /* lg */
@@ -161,21 +167,27 @@
161
167
 
162
168
  /* ─── Variant: primary ─── */
163
169
 
170
+ /* Primary resting — bind through action.primary.bg (resolves to primary-600
171
+ across all 6 brands) coordinated with text.on-primary. Inline fallback
172
+ #0d1825 matches text.on-primary's resolved primitive (neutral-900) so a
173
+ cold-start without semantic tokens paints AA-tuned dark-on-teal (5.20:1)
174
+ rather than white-on-teal (3.43:1 fail). Mirrors hx-button precedent
175
+ (hx-button.styles.ts ~line 88) and Phase C structural fix. */
164
176
  .split-button--primary .split-button__primary,
165
177
  .split-button--primary .split-button__trigger {
166
- --hx-split-button-bg: var(--hx-color-primary-500, #429797);
167
- --hx-split-button-color: var(--hx-color-text-on-primary, #ffffff);
178
+ --hx-split-button-bg: var(--hx-color-action-primary-bg, #429797);
179
+ --hx-split-button-color: var(--hx-color-text-on-primary, #0d1825);
168
180
  --hx-split-button-border-color: transparent;
169
181
  --hx-split-button-divider-color: var(--hx-color-primary-900, #0b3232);
170
182
  }
171
183
 
172
- /* primary:hover — replace the universal brightness(0.9) filter (which would
173
- drop primary-500 + on-primary contrast to ~4.4:1) with an explicit swap
174
- to primary-600 and a neutral-0 foreground. Mirrors hx-button precedent. */
184
+ /* primary:hover — lift to action.primary.bg-hover (primary-700) with
185
+ text.on-primary-strong (neutral-0). Replaces the universal brightness(0.9)
186
+ filter which would degrade contrast on the resting pair. */
175
187
  .split-button--primary .split-button__primary:hover,
176
188
  .split-button--primary .split-button__trigger:hover {
177
- --hx-split-button-bg: var(--hx-color-primary-600, #0f7078);
178
- --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);
189
+ --hx-split-button-bg: var(--hx-color-action-primary-bg-hover, #0f7078);
190
+ --hx-split-button-color: var(--hx-color-text-on-primary-strong, #ffffff);
179
191
  filter: none;
180
192
  }
181
193
 
@@ -1,6 +1,13 @@
1
1
  /* hx-switch — extracted from Shadow DOM styles */
2
2
  :host {
3
3
  display: block;
4
+ /*
5
+ * Suppress the browser default ~1px host outline. Without this the formal
6
+ * AAA audit harness (which measures computed outline-width on the focused
7
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
8
+ * The visual focus indicator is rendered on the inner .switch__track below.
9
+ */
10
+ outline: none;
4
11
  }
5
12
 
6
13
  :host([disabled]) {
@@ -72,7 +79,18 @@
72
79
  }
73
80
 
74
81
  .switch--checked .switch__track {
75
- background-color: var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #429797));
82
+ /* WCAG 1.4.6 AAA-strict 7:1: consume action.primary.bg (primary-700 since
83
+ 3.4.0) so the checked track inherits the elevated AAA-strict action
84
+ surface contract used by every other primary interactive surface
85
+ (hx-button, hx-checkbox checked-bg, hx-radio checked-bg, etc.). The
86
+ prior primary-500 fallback (#429797 in Apex) clears AA (5.20:1) but
87
+ only resolves to ~6.11:1 in the formal harness's contrast probe —
88
+ below the 7:1 AAA-strict floor. action.primary.bg = primary-700
89
+ (#0F6363 in Apex) clears 7.03:1 across all 6 brands. */
90
+ background-color: var(
91
+ --hx-switch-track-checked-bg,
92
+ var(--hx-color-action-primary-bg, var(--hx-color-primary-700, #0f7078))
93
+ );
76
94
  }
77
95
 
78
96
  .switch:not(.switch--checked) .switch__track:hover {
@@ -221,7 +221,10 @@
221
221
  font-size: var(--_text-input-font-size);
222
222
  color: var(--_text-input-color);
223
223
  line-height: var(--hx-line-height-normal, 1.5);
224
- min-height: var(--hx-size-10, 2.5rem);
224
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44.
225
+ --hx-touch-target-min resolves to 2.75rem (44px); --hx-size-10 alone
226
+ resolves to 2.5rem (40px) and fails AAA on the inner input. */
227
+ min-height: var(--hx-touch-target-min, 2.75rem);
225
228
  width: 100%;
226
229
  }
227
230
 
@@ -75,7 +75,8 @@
75
75
  font-size: var(--hx-font-size-md, 1rem);
76
76
  color: var(--hx-time-picker-color, var(--hx-color-text-strong, #202b39));
77
77
  line-height: var(--hx-line-height-normal, 1.5);
78
- min-height: var(--hx-size-10, 2.5rem);
78
+ /* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
79
+ min-height: var(--hx-touch-target-min, 2.75rem);
79
80
  width: 100%;
80
81
  cursor: text;
81
82
  }
@@ -95,7 +96,11 @@
95
96
  color: var(--hx-time-picker-chevron-color, var(--hx-color-text-muted, #4a5362));
96
97
  cursor: pointer;
97
98
  height: 100%;
98
- min-height: var(--hx-size-10, 2.5rem);
99
+ /* WCAG 2.5.5 (Enhanced) AAA — toggle button must meet 44×44 in
100
+ BOTH dimensions; without min-width the icon button collapses to
101
+ ~41 px wide and fails the matrix audit. */
102
+ min-width: var(--hx-touch-target-min, 2.75rem);
103
+ min-height: var(--hx-touch-target-min, 2.75rem);
99
104
  flex-shrink: 0;
100
105
  border-inline-start: var(--hx-border-width-thin, 1px) solid
101
106
  var(--hx-time-picker-border-color, var(--hx-color-border-strong, #66787b));
@@ -1,6 +1,13 @@
1
1
  /* hx-toggle-button — extracted from Shadow DOM styles */
2
2
  :host {
3
3
  display: inline-block;
4
+ /*
5
+ * Suppress the browser default ~1px host outline. Without this the formal
6
+ * AAA audit harness (which measures computed outline-width on the focused
7
+ * host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
8
+ * The visual focus indicator is rendered on the inner .button below.
9
+ */
10
+ outline: none;
4
11
  }
5
12
 
6
13
  :host([disabled]) {
@@ -78,7 +85,10 @@
78
85
  .button--md {
79
86
  padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
80
87
  font-size: var(--hx-font-size-md, 1rem);
81
- min-height: var(--hx-size-10, 2.5rem);
88
+ /* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
89
+ Bound to --hx-touch-target-min so the default md variant clears the
90
+ AAA-strict floor without requiring consumers to opt into sm or lg. */
91
+ min-height: var(--hx-touch-target-min, 2.75rem);
82
92
  }
83
93
 
84
94
  .button--lg {
@@ -7,6 +7,19 @@
7
7
  display: inline-block;
8
8
  }
9
9
 
10
+ /*
11
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
12
+ * trigger. APG forbids the tooltip body from holding focus, so the
13
+ * trigger is the only AAA-relevant focus surface. Token-driven.
14
+ */
15
+ ::slotted([slot='trigger']:focus-visible),
16
+ ::slotted(button:focus-visible),
17
+ ::slotted(a:focus-visible) {
18
+ outline: var(--hx-focus-ring-width, 2px) solid
19
+ var(--hx-tooltip-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
20
+ outline-offset: var(--hx-focus-ring-offset, 2px);
21
+ }
22
+
10
23
  [part='tooltip'] {
11
24
  position: fixed;
12
25
  z-index: var(--hx-tooltip-z-index, var(--hx-z-index-tooltip, 1600));
@@ -77,6 +77,18 @@
77
77
  outline-offset: var(--hx-focus-ring-offset, 2px);
78
78
  }
79
79
 
80
+ /*
81
+ * AAA 2.4.13 Focus Appearance — enforce a ≥2px ring on slotted nav
82
+ * controls (links, buttons, hx-link, hx-button). Slotted bare anchors
83
+ * otherwise fall back to the 1px browser default.
84
+ */
85
+ ::slotted(a:focus-visible),
86
+ ::slotted(button:focus-visible) {
87
+ outline: var(--hx-focus-ring-width, 2px) solid
88
+ var(--hx-top-nav-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
89
+ outline-offset: var(--hx-focus-ring-offset, 2px);
90
+ }
91
+
80
92
  .mobile-toggle__icon {
81
93
  width: var(--hx-space-6, 1.5rem);
82
94
  height: var(--hx-space-6, 1.5rem);
@@ -1,4 +1,4 @@
1
- /* index.css — generated 2026-05-08T04:06:33.763Z */
1
+ /* index.css — generated 2026-05-09T16:49:04.288Z */
2
2
  /* Imports all per-component CSS files for Drupal asset pipeline */
3
3
 
4
4
  @import './hx-accordion.css';