@helixui/library 3.3.1-next.118 → 3.4.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 (249) hide show
  1. package/custom-elements.json +422 -322
  2. package/dist/components/hx-alert/hx-alert.d.ts +11 -0
  3. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  4. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  5. package/dist/components/hx-alert/index.js +1 -1
  6. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  7. package/dist/components/hx-badge/index.js +1 -1
  8. package/dist/components/hx-banner/hx-banner.d.ts +9 -1
  9. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  10. package/dist/components/hx-banner/index.js +1 -1
  11. package/dist/components/hx-button/hx-button.d.ts +11 -1
  12. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  13. package/dist/components/hx-button/index.js +1 -1
  14. package/dist/components/hx-button-group/hx-button-group.d.ts +13 -0
  15. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  16. package/dist/components/hx-button-group/index.js +1 -1
  17. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  18. package/dist/components/hx-checkbox/index.js +1 -1
  19. package/dist/components/hx-checkbox-group/index.js +1 -1
  20. package/dist/components/hx-color-picker/index.js +1 -1
  21. package/dist/components/hx-combobox/index.js +1 -1
  22. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  23. package/dist/components/hx-data-table/index.js +1 -1
  24. package/dist/components/hx-date-picker/index.js +1 -1
  25. package/dist/components/hx-dialog/index.js +1 -1
  26. package/dist/components/hx-drawer/hx-drawer.d.ts +201 -0
  27. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  28. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  29. package/dist/components/hx-drawer/index.js +1 -1
  30. package/dist/components/hx-dropdown/hx-dropdown.d.ts +96 -8
  31. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  32. package/dist/components/hx-dropdown/index.js +1 -1
  33. package/dist/components/hx-icon-button/hx-icon-button.d.ts +16 -3
  34. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  35. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  36. package/dist/components/hx-icon-button/index.js +1 -1
  37. package/dist/components/hx-link/hx-link.d.ts +10 -1
  38. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  39. package/dist/components/hx-link/index.js +1 -1
  40. package/dist/components/hx-list/hx-list-item.d.ts +27 -1
  41. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  42. package/dist/components/hx-list/hx-list.d.ts +28 -0
  43. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  44. package/dist/components/hx-list/index.js +1 -1
  45. package/dist/components/hx-menu/hx-menu-divider.d.ts +10 -0
  46. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  47. package/dist/components/hx-menu/hx-menu-item.d.ts +99 -2
  48. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  49. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  50. package/dist/components/hx-menu/hx-menu.d.ts +117 -2
  51. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  52. package/dist/components/hx-menu/index.js +1 -1
  53. package/dist/components/hx-meter/hx-meter.d.ts +39 -0
  54. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  55. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  56. package/dist/components/hx-meter/index.js +1 -1
  57. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +132 -1
  58. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  59. package/dist/components/hx-overflow-menu/index.js +1 -1
  60. package/dist/components/hx-phi-field/hx-phi-field.d.ts +0 -1
  61. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  62. package/dist/components/hx-popover/index.js +1 -1
  63. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +33 -0
  64. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  65. package/dist/components/hx-progress-bar/index.js +1 -1
  66. package/dist/components/hx-radio-group/index.js +1 -1
  67. package/dist/components/hx-select/hx-select.d.ts +1 -0
  68. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  69. package/dist/components/hx-select/index.js +1 -1
  70. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -0
  71. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  72. package/dist/components/hx-spinner/index.js +1 -1
  73. package/dist/components/hx-split-button/hx-split-button.d.ts +94 -7
  74. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  75. package/dist/components/hx-split-button/index.js +1 -1
  76. package/dist/components/hx-stat/hx-stat.d.ts +28 -0
  77. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  78. package/dist/components/hx-stat/index.js +1 -1
  79. package/dist/components/hx-switch/index.js +1 -1
  80. package/dist/components/hx-table/hx-td.d.ts +30 -3
  81. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  82. package/dist/components/hx-table/hx-th.d.ts +39 -3
  83. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  84. package/dist/components/hx-table/hx-tr.d.ts +26 -0
  85. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  86. package/dist/components/hx-table/index.js +1 -1
  87. package/dist/components/hx-tabs/hx-tab-panel.d.ts +34 -0
  88. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  89. package/dist/components/hx-tabs/hx-tab.d.ts +45 -2
  90. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  91. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  92. package/dist/components/hx-tabs/hx-tabs.d.ts +32 -2
  93. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  94. package/dist/components/hx-tabs/index.js +1 -1
  95. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  96. package/dist/components/hx-tag/index.js +1 -1
  97. package/dist/components/hx-theme/hx-theme.d.ts +10 -5
  98. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  99. package/dist/components/hx-time-picker/hx-time-picker.d.ts +210 -2
  100. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  101. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  102. package/dist/components/hx-time-picker/index.js +1 -1
  103. package/dist/components/hx-toast/hx-toast-stack.d.ts +14 -0
  104. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  105. package/dist/components/hx-toast/hx-toast.d.ts +22 -3
  106. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  107. package/dist/components/hx-toast/index.js +1 -1
  108. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  109. package/dist/components/hx-toggle-button/index.js +1 -1
  110. package/dist/components/hx-tree-view/hx-tree-item.d.ts +117 -12
  111. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  112. package/dist/components/hx-tree-view/hx-tree-view.d.ts +87 -7
  113. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  114. package/dist/components/hx-tree-view/index.js +1 -1
  115. package/dist/css/helix-all.css +123 -0
  116. package/dist/css/helix-core.css +81 -0
  117. package/dist/css/helix-feedback.css +14 -0
  118. package/dist/css/helix-forms.css +11 -0
  119. package/dist/css/helix-overlay.css +17 -0
  120. package/dist/css/hx-alert.css +9 -0
  121. package/dist/css/hx-badge.css +28 -0
  122. package/dist/css/hx-drawer.css +17 -0
  123. package/dist/css/hx-icon-button.css +30 -0
  124. package/dist/css/hx-meter.css +5 -0
  125. package/dist/css/hx-tag.css +23 -0
  126. package/dist/css/hx-time-picker.css +11 -0
  127. package/dist/css/index.css +1 -1
  128. package/dist/css/manifest.json +3 -1
  129. package/dist/index.js +35 -35
  130. package/dist/shared/aria-idref-CxvyzfQS.js +126 -0
  131. package/dist/shared/aria-idref-CxvyzfQS.js.map +1 -0
  132. package/dist/shared/{hx-alert-CLn7CstP.js → hx-alert-Bto8-TIi.js} +55 -37
  133. package/dist/shared/hx-alert-Bto8-TIi.js.map +1 -0
  134. package/dist/shared/{hx-badge-CQXgOXJM.js → hx-badge-JlFtAdxS.js} +37 -9
  135. package/dist/shared/hx-badge-JlFtAdxS.js.map +1 -0
  136. package/dist/shared/{hx-banner-D3DzpfcP.js → hx-banner-fpRnciIO.js} +13 -5
  137. package/dist/shared/hx-banner-fpRnciIO.js.map +1 -0
  138. package/dist/shared/{hx-button-DPY6SPVT.js → hx-button-BOwAEcF1.js} +108 -85
  139. package/dist/shared/{hx-button-DPY6SPVT.js.map → hx-button-BOwAEcF1.js.map} +1 -1
  140. package/dist/shared/{hx-button-group-BI-QBqmO.js → hx-button-group-DcHP5MBv.js} +15 -16
  141. package/dist/shared/{hx-button-group-BI-QBqmO.js.map → hx-button-group-DcHP5MBv.js.map} +1 -1
  142. package/dist/shared/{hx-checkbox-BdgoUeWi.js → hx-checkbox-C48KYKFq.js} +87 -87
  143. package/dist/shared/hx-checkbox-C48KYKFq.js.map +1 -0
  144. package/dist/shared/{hx-checkbox-group-LWezHrvS.js → hx-checkbox-group-BJIAX3zU.js} +2 -2
  145. package/dist/shared/{hx-checkbox-group-LWezHrvS.js.map → hx-checkbox-group-BJIAX3zU.js.map} +1 -1
  146. package/dist/shared/{hx-color-picker-DVhZl88b.js → hx-color-picker-Dk4cBwYQ.js} +2 -2
  147. package/dist/shared/{hx-color-picker-DVhZl88b.js.map → hx-color-picker-Dk4cBwYQ.js.map} +1 -1
  148. package/dist/shared/{hx-combobox-DvlezcDV.js → hx-combobox-BTLO9qiK.js} +2 -2
  149. package/dist/shared/{hx-combobox-DvlezcDV.js.map → hx-combobox-BTLO9qiK.js.map} +1 -1
  150. package/dist/shared/{hx-data-table-CLqVqdxr.js → hx-data-table-Ct3gQ6ya.js} +3 -2
  151. package/dist/shared/{hx-data-table-CLqVqdxr.js.map → hx-data-table-Ct3gQ6ya.js.map} +1 -1
  152. package/dist/shared/{hx-date-picker-N-0aG5XL.js → hx-date-picker-CiR7FVnR.js} +2 -2
  153. package/dist/shared/{hx-date-picker-N-0aG5XL.js.map → hx-date-picker-CiR7FVnR.js.map} +1 -1
  154. package/dist/shared/{hx-dialog-DzB7VytW.js → hx-dialog-AOZpHSuF.js} +2 -2
  155. package/dist/shared/{hx-dialog-DzB7VytW.js.map → hx-dialog-AOZpHSuF.js.map} +1 -1
  156. package/dist/shared/{hx-drawer-Y1Ui2IWJ.js → hx-drawer-DH6CdAN1.js} +300 -98
  157. package/dist/shared/hx-drawer-DH6CdAN1.js.map +1 -0
  158. package/dist/shared/hx-dropdown-DiLd40Lm.js +401 -0
  159. package/dist/shared/hx-dropdown-DiLd40Lm.js.map +1 -0
  160. package/dist/shared/{hx-icon-button-CGNdQSFM.js → hx-icon-button-a6OpeQz5.js} +149 -68
  161. package/dist/shared/hx-icon-button-a6OpeQz5.js.map +1 -0
  162. package/dist/shared/{hx-link-C-O6vq0Q.js → hx-link-CMnZRUtQ.js} +55 -43
  163. package/dist/shared/hx-link-CMnZRUtQ.js.map +1 -0
  164. package/dist/shared/{hx-list-MyEhh8c7.js → hx-list-De66EtAP.js} +163 -107
  165. package/dist/shared/hx-list-De66EtAP.js.map +1 -0
  166. package/dist/shared/hx-menu-divider-BjiRIWKq.js +797 -0
  167. package/dist/shared/hx-menu-divider-BjiRIWKq.js.map +1 -0
  168. package/dist/shared/{hx-meter-BPscsw5t.js → hx-meter-BJdh6nrF.js} +105 -64
  169. package/dist/shared/hx-meter-BJdh6nrF.js.map +1 -0
  170. package/dist/shared/hx-overflow-menu-BQ4fiMYu.js +492 -0
  171. package/dist/shared/hx-overflow-menu-BQ4fiMYu.js.map +1 -0
  172. package/dist/shared/hx-phi-field-C19oxlrr.js.map +1 -1
  173. package/dist/shared/{hx-popover-CHxWY_cd.js → hx-popover-B9W8-tC0.js} +2 -2
  174. package/dist/shared/{hx-popover-CHxWY_cd.js.map → hx-popover-B9W8-tC0.js.map} +1 -1
  175. package/dist/shared/hx-progress-bar-C8nDMdYa.js +290 -0
  176. package/dist/shared/hx-progress-bar-C8nDMdYa.js.map +1 -0
  177. package/dist/shared/{hx-radio-CeGzARNk.js → hx-radio-Z1lV1zTO.js} +2 -2
  178. package/dist/shared/{hx-radio-CeGzARNk.js.map → hx-radio-Z1lV1zTO.js.map} +1 -1
  179. package/dist/shared/{hx-select-DrcS-YRJ.js → hx-select-D18CnJ0e.js} +2 -2
  180. package/dist/shared/hx-select-D18CnJ0e.js.map +1 -0
  181. package/dist/shared/{hx-spinner-DL5AYr16.js → hx-spinner-BB0h2hKZ.js} +62 -34
  182. package/dist/shared/hx-spinner-BB0h2hKZ.js.map +1 -0
  183. package/dist/shared/{hx-split-button-Djnc5Aeg.js → hx-split-button-BoABoEm5.js} +153 -82
  184. package/dist/shared/hx-split-button-BoABoEm5.js.map +1 -0
  185. package/dist/shared/{hx-stat-WOcNV1Ry.js → hx-stat-Dtf9lz-O.js} +77 -47
  186. package/dist/shared/hx-stat-Dtf9lz-O.js.map +1 -0
  187. package/dist/shared/{hx-switch-BX_8uNUs.js → hx-switch-B6kr-EwE.js} +2 -2
  188. package/dist/shared/{hx-switch-BX_8uNUs.js.map → hx-switch-B6kr-EwE.js.map} +1 -1
  189. package/dist/shared/{hx-tab-panel-DspCrKqo.js → hx-tab-panel-BQtBXKLD.js} +255 -131
  190. package/dist/shared/hx-tab-panel-BQtBXKLD.js.map +1 -0
  191. package/dist/shared/{hx-tag-CNSmdyaK.js → hx-tag-C5aCUpVi.js} +63 -40
  192. package/dist/shared/hx-tag-C5aCUpVi.js.map +1 -0
  193. package/dist/shared/{hx-td-DnnEMIuA.js → hx-td-BGkFOJEK.js} +267 -123
  194. package/dist/shared/hx-td-BGkFOJEK.js.map +1 -0
  195. package/dist/shared/hx-theme-BsefFWTO.js.map +1 -1
  196. package/dist/shared/hx-time-picker-iwCD7rzW.js +1038 -0
  197. package/dist/shared/hx-time-picker-iwCD7rzW.js.map +1 -0
  198. package/dist/shared/{hx-toggle-button-Dcz9IlUm.js → hx-toggle-button-BQ81EDkl.js} +2 -2
  199. package/dist/shared/{hx-toggle-button-Dcz9IlUm.js.map → hx-toggle-button-BQ81EDkl.js.map} +1 -1
  200. package/dist/shared/hx-tree-item-CHrUhuZL.js +925 -0
  201. package/dist/shared/hx-tree-item-CHrUhuZL.js.map +1 -0
  202. package/dist/shared/menu-roving-DmMnzJhn.js +14 -0
  203. package/dist/shared/menu-roving-DmMnzJhn.js.map +1 -0
  204. package/dist/shared/menu-tree-BNM0SYYq.js +42 -0
  205. package/dist/shared/menu-tree-BNM0SYYq.js.map +1 -0
  206. package/dist/shared/{toast-factory-YSznocIV.js → toast-factory-CL2BzdSB.js} +128 -77
  207. package/dist/shared/toast-factory-CL2BzdSB.js.map +1 -0
  208. package/dist/utils/aria-idref.d.ts.map +1 -1
  209. package/dist/utils/menu-label.d.ts +18 -0
  210. package/dist/utils/menu-label.d.ts.map +1 -0
  211. package/dist/utils/menu-roving.d.ts +28 -0
  212. package/dist/utils/menu-roving.d.ts.map +1 -0
  213. package/dist/utils/menu-tree.d.ts +41 -0
  214. package/dist/utils/menu-tree.d.ts.map +1 -0
  215. package/dist/utils/tree-walk.d.ts +53 -0
  216. package/dist/utils/tree-walk.d.ts.map +1 -0
  217. package/figma-inventory.json +69 -20
  218. package/package.json +2 -2
  219. package/dist/shared/aria-idref-Q0yiSR3p.js +0 -104
  220. package/dist/shared/aria-idref-Q0yiSR3p.js.map +0 -1
  221. package/dist/shared/hx-alert-CLn7CstP.js.map +0 -1
  222. package/dist/shared/hx-badge-CQXgOXJM.js.map +0 -1
  223. package/dist/shared/hx-banner-D3DzpfcP.js.map +0 -1
  224. package/dist/shared/hx-checkbox-BdgoUeWi.js.map +0 -1
  225. package/dist/shared/hx-drawer-Y1Ui2IWJ.js.map +0 -1
  226. package/dist/shared/hx-dropdown-DJWlF94E.js +0 -316
  227. package/dist/shared/hx-dropdown-DJWlF94E.js.map +0 -1
  228. package/dist/shared/hx-icon-button-CGNdQSFM.js.map +0 -1
  229. package/dist/shared/hx-link-C-O6vq0Q.js.map +0 -1
  230. package/dist/shared/hx-list-MyEhh8c7.js.map +0 -1
  231. package/dist/shared/hx-menu-divider-C2omnPtj.js +0 -558
  232. package/dist/shared/hx-menu-divider-C2omnPtj.js.map +0 -1
  233. package/dist/shared/hx-meter-BPscsw5t.js.map +0 -1
  234. package/dist/shared/hx-overflow-menu-DCLsdIBy.js +0 -374
  235. package/dist/shared/hx-overflow-menu-DCLsdIBy.js.map +0 -1
  236. package/dist/shared/hx-progress-bar-Bn3JEPUf.js +0 -258
  237. package/dist/shared/hx-progress-bar-Bn3JEPUf.js.map +0 -1
  238. package/dist/shared/hx-select-DrcS-YRJ.js.map +0 -1
  239. package/dist/shared/hx-spinner-DL5AYr16.js.map +0 -1
  240. package/dist/shared/hx-split-button-Djnc5Aeg.js.map +0 -1
  241. package/dist/shared/hx-stat-WOcNV1Ry.js.map +0 -1
  242. package/dist/shared/hx-tab-panel-DspCrKqo.js.map +0 -1
  243. package/dist/shared/hx-tag-CNSmdyaK.js.map +0 -1
  244. package/dist/shared/hx-td-DnnEMIuA.js.map +0 -1
  245. package/dist/shared/hx-time-picker-BoEIZwzv.js +0 -688
  246. package/dist/shared/hx-time-picker-BoEIZwzv.js.map +0 -1
  247. package/dist/shared/hx-tree-item-C2CiWuDE.js +0 -703
  248. package/dist/shared/hx-tree-item-C2CiWuDE.js.map +0 -1
  249. package/dist/shared/toast-factory-YSznocIV.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hx-tree-item.d.ts","sourceRoot":"","sources":["../../../src/components/hx-tree-view/hx-tree-item.ts"],"names":[],"mappings":"AACA,OAAO,4CAA4C,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBACa,aAAc,SAAQ,YAAY;IAC7C,OAAgB,MAAM,4BAA8C;IAIpE;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,QAAQ,UAAS;IAIjB;;;OAGG;IACM,OAAO,CAAC,YAAY,CAAS;IAEtC;;;OAGG;IACM,OAAO,CAAC,aAAa,CAAS;IAEvC;;;OAGG;IACM,OAAO,CAAC,UAAU,CAAM;IAEjC;;;;OAIG;IACM,OAAO,CAAC,MAAM,CAAK;IAC5B;;;OAGG;IACM,OAAO,CAAC,SAAS,CAAK;IAC/B;;;OAGG;IACM,OAAO,CAAC,QAAQ,CAAK;IAC9B;;;OAGG;IACM,OAAO,CAAC,WAAW,CAAS;IAErC,gBAAgB;IACI,OAAO,CAAC,UAAU,CAAsB;IAI5D;;;OAGG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IASnF,iBAAiB,IAAI,IAAI;IAOlC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAMjC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgCtB;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAItC,iDAAiD;IACxC,KAAK,IAAI,IAAI;IAMtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmBhB,MAAM;CA0ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,aAAa,CAAC;KAC/B;CACF;AAED,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"hx-tree-item.d.ts","sourceRoot":"","sources":["../../../src/components/hx-tree-view/hx-tree-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAYnD,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,qBACa,aAAc,SAAQ,YAAY;IAC7C,OAAgB,MAAM,4BAA8C;IAEpE;;;;;;;;;;OAUG;IACH,MAAM,CAAC,+BAA+B,EAAE,OAAO,GAAG,IAAI,CAAQ;IAI9D;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,QAAQ,UAAS;IAIjB;;;OAGG;IACM,OAAO,CAAC,YAAY,CAAS;IAEtC;;;OAGG;IACM,OAAO,CAAC,aAAa,CAAS;IAEvC;;;OAGG;IACM,OAAO,CAAC,UAAU,CAAM;IAEjC;;;;OAIG;IACM,OAAO,CAAC,MAAM,CAAK;IAC5B;;;OAGG;IACM,OAAO,CAAC,SAAS,CAAK;IAC/B;;;OAGG;IACM,OAAO,CAAC,QAAQ,CAAK;IAC9B;;;OAGG;IACM,OAAO,CAAC,WAAW,CAAS;IAErC,gBAAgB;IACI,OAAO,CAAC,UAAU,CAAsB;IAI5D,gBAAgB;IAChB,OAAO,CAAC,kBAAkB,CAAQ;IAElC,gBAAgB;IAChB,OAAO,CAAC,WAAW,CAAsC;IAEzD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB,CAAM;IAIrC;;;OAGG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IASnF,iBAAiB,IAAI,IAAI;IA0BzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAsB/D;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,sBAAsB;IA2E9B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,WAAW;IAYnB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAWjB,gBAAgB;IAChB,OAAO,CAAC,YAAY,CAsBlB;IAEF,gBAAgB;IAChB,OAAO,CAAC,cAAc,CAiCpB;IAIF;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKtC;;;;;OAKG;IACM,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAU5C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmBhB,MAAM;CA6EhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,aAAa,CAAC;KAC/B;CACF;AAED,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { PropertyValues } from 'lit';
1
2
  import { HelixElement } from '../../base/index.js';
2
3
  import { HelixTreeItem } from './hx-tree-item.js';
3
4
  /** Selection mode for the tree. */
@@ -13,10 +14,20 @@ export interface HxSelectDetail {
13
14
  * A hierarchical tree component for navigating nested data structures.
14
15
  * Used in healthcare applications for org charts, ICD-10 code hierarchies, and department navigation.
15
16
  *
16
- * Implements WAI-ARIA tree view pattern with `role="tree"` on the container
17
- * and `role="treeitem"` on each item. Supports `aria-label` via the `label` property
18
- * for screen reader identification. Full keyboard navigation: Arrow keys for movement,
19
- * Enter/Space for selection, Home/End for first/last item.
17
+ * Group 5c host-canonical: `role="tree"` lives on the **host** via
18
+ * `_internals.role` on the modern path. The host carries the announced
19
+ * surface so AT walks `<hx-tree-view>` (role=tree) slotted
20
+ * `<hx-tree-item>` (role=treeitem on host) directly without two layers of
21
+ * indirection. Consumer-supplied `aria-label` / `aria-labelledby` on the
22
+ * host are resolved via the shared IDREF mirror; cross-shadow naming uses
23
+ * `ariaLabelledByElements` (modern) with a flattened-string fallback
24
+ * (legacy). On the legacy fallback path the inner `[role="tree"]` carries
25
+ * the role + accessible name and the host role is suppressed so AT only
26
+ * sees one tree per logical surface (mirrors `hx-menu` round-8).
27
+ *
28
+ * Full keyboard navigation: Arrow keys for movement, Enter/Space for
29
+ * selection, Home/End for first/last item, ArrowRight/Left for
30
+ * expand/collapse + parent/child traversal, typeahead.
20
31
  *
21
32
  * ## Scale Limits
22
33
  *
@@ -35,7 +46,7 @@ export interface HxSelectDetail {
35
46
  *
36
47
  * @fires {CustomEvent<HxSelectDetail>} hx-select - Dispatched when a tree item is selected or deselected.
37
48
  *
38
- * @csspart tree - The tree container element with role="tree".
49
+ * @csspart tree - The tree container element with role="tree" (legacy fallback path) or the inner shadow surface (modern path; role lives on the host).
39
50
  *
40
51
  * @cssprop [--hx-tree-font-family=var(--hx-font-family-sans)] - Tree font family.
41
52
  * @cssprop [--hx-font-family-sans] - Font family.
@@ -48,8 +59,11 @@ export interface HxSelectDetail {
48
59
  export declare class HelixTreeView extends HelixElement {
49
60
  static styles: import('lit').CSSResult[];
50
61
  /**
51
- * Accessible label for the tree. Applied as `aria-label` on the tree container.
52
- * Provides context to screen readers about the tree's purpose.
62
+ * Accessible label for the tree. Used as a fallback when no
63
+ * consumer-supplied `aria-label` / `aria-labelledby` is present on the
64
+ * host. On the modern host-canonical path this projects onto
65
+ * `internals.ariaLabel`; on the legacy fallback path it appears as
66
+ * `aria-label` on the inner `[role="tree"]` element.
53
67
  * @attr label
54
68
  */
55
69
  label: string;
@@ -66,6 +80,32 @@ export declare class HelixTreeView extends HelixElement {
66
80
  /** Tracks whether the tree has any visible items, to decide the container tabindex. */
67
81
  /** @internal */
68
82
  private _hasVisibleItems;
83
+ /**
84
+ * Test seam (codex push-gate round-1 lift from group 5b): when set to
85
+ * `true` or `false`, overrides the platform `supportsIdrefElementReferences`
86
+ * probe before `connectedCallback` seeds `_supportsIdrefRefs`. Mirrors the
87
+ * hx-menu / hx-menu-item / hx-select seam — required so tests can
88
+ * deterministically exercise the legacy fallback render branch.
89
+ *
90
+ * Production code MUST NOT touch this field. It is `static` so the test
91
+ * stub cleanup is global and obvious.
92
+ * @internal
93
+ */
94
+ static __testSupportsIdrefRefsOverride: boolean | null;
95
+ /** @internal */
96
+ private _supportsIdrefRefs;
97
+ /** @internal */
98
+ private _ariaMirror;
99
+ /**
100
+ * Resolved accessible name for the tree — the single source of truth read
101
+ * by `_syncHostAriaSemantics()` (modern path: writes to
102
+ * `internals.ariaLabel`) and the fallback `render()` branch (legacy path:
103
+ * writes to inner `div[role="tree"]` `aria-label`). AccName 1.2 §4.3.1
104
+ * precedence: consumer host `aria-labelledby` (resolved + flattened) >
105
+ * consumer host `aria-label` > `label` property > literal "Tree".
106
+ * @internal
107
+ */
108
+ private _resolvedAccessibleName;
69
109
  /**
70
110
  * Cached flat list of visible items (depth-first, respects collapsed nodes).
71
111
  * Set to null to invalidate; rebuilt on next access.
@@ -98,8 +138,28 @@ export declare class HelixTreeView extends HelixElement {
98
138
  private _focusItem;
99
139
  /** @internal */
100
140
  private _handleTreeItemSelect;
141
+ /**
142
+ * Codex push-gate round-1 lift (mirrors hx-menu round-7 finding 2):
143
+ * `hx-tree-item-select` bubbles composed through every enclosing
144
+ * `hx-tree-view`. The outer tree would otherwise corrupt `_currentIndex`
145
+ * to `-1` (the bubbled item is not in its top-level list) and re-emit a
146
+ * duplicate `hx-select`. Only act when THIS tree is the closest
147
+ * enclosing tree of the dispatching item.
148
+ * @internal
149
+ */
150
+ private _handleItemSelectHost;
101
151
  /** @internal */
102
152
  private _handleKeyDown;
153
+ /**
154
+ * Codex push-gate round-1 lift (mirrors hx-menu round-7 finding 1):
155
+ * keydown bound on the host receives events bubbled out of nested
156
+ * tree-views. Without this guard the outer tree would run `_focusItem`
157
+ * over its own top-level items and steal focus back out of the inner
158
+ * tree. Only act when THIS tree is the closest enclosing tree of the
159
+ * keydown target.
160
+ * @internal
161
+ */
162
+ private _handleHostKeyDown;
103
163
  /**
104
164
  * Finds the next visible item (starting after `currentIndex`, wrapping around) whose
105
165
  * label text begins with the given lowercase character. Returns -1 if no match.
@@ -124,7 +184,27 @@ export declare class HelixTreeView extends HelixElement {
124
184
  */
125
185
  /** @internal */
126
186
  private _handleSlotChange;
187
+ connectedCallback(): void;
188
+ disconnectedCallback(): void;
189
+ updated(changedProperties: PropertyValues<this>): void;
127
190
  firstUpdated(): void;
191
+ /**
192
+ * Mirror tree semantics onto the host via ElementInternals so consumer-
193
+ * supplied `aria-label`, `aria-labelledby`, and the `label` property all
194
+ * reach the announced control. Falls back to a flattened-string label on
195
+ * engines that do not implement `ariaLabelledByElements`.
196
+ *
197
+ * Codex push-gate round-1 lift (mirrors hx-menu round-8 finding 1): on
198
+ * the legacy fallback path the inner `<div role="tree" aria-label="…">`
199
+ * is the announced surface. If we ALSO write `internals.role = 'tree'`
200
+ * onto the host, AT sees TWO trees for one logical surface — the
201
+ * duplicate-surface problem host-canonical migration is meant to
202
+ * eliminate. Suppress host role + label writes on the fallback path; the
203
+ * inner element is the canonical announced surface there. Modern path
204
+ * keeps the host as the canonical surface and clears the inner role.
205
+ * @internal
206
+ */
207
+ private _syncHostAriaSemantics;
128
208
  render(): import('lit').TemplateResult<1>;
129
209
  }
130
210
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"hx-tree-view.d.ts","sourceRoot":"","sources":["../../../src/components/hx-tree-view/hx-tree-view.ts"],"names":[],"mappings":"AACA,OAAO,4CAA4C,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAC;AAG/E,mCAAmC;AACnC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3D,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,IAAI,EAAE,aAAa,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBACa,aAAc,SAAQ,YAAY;IAC7C,OAAgB,MAAM,4BAA8C;IAIpE;;;;OAIG;IAEH,KAAK,SAAM;IAEX;;;;;;OAMG;IAEH,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAU;IAInD,gBAAgB;IACP,OAAO,CAAC,aAAa,CAAK;IAEnC,uFAAuF;IACvF,gBAAgB;IACP,OAAO,CAAC,gBAAgB,CAAS;IAI1C;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAgC;IAE3D;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;;OAGG;IACH,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAOxB,gBAAgB;IAChB,OAAO,CAAC,oBAAoB;IAgB5B,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAIzB;;;;OAIG;IACH,gBAAgB;IAChB,OAAO,CAAC,qBAAqB;IAM7B,gBAAgB;IAChB,OAAO,CAAC,UAAU;IAWlB,gBAAgB;IAChB,OAAO,CAAC,qBAAqB;IA0B7B,gBAAgB;IAChB,OAAO,CAAC,cAAc;IA0FtB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAYtB;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAavC;;;;;;OAMG;IACH,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAehB,YAAY,IAAI,IAAI;IAWpB,MAAM;CA2BhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,aAAa,CAAC;KAC/B;CACF;AAED,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"hx-tree-view.d.ts","sourceRoot":"","sources":["../../../src/components/hx-tree-view/hx-tree-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,mBAAmB,CAAC;AAW/E,mCAAmC;AACnC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3D,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,IAAI,EAAE,aAAa,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,aAAc,SAAQ,YAAY;IAC7C,OAAgB,MAAM,4BAA8C;IAIpE;;;;;;;OAOG;IAEH,KAAK,SAAM;IAEX;;;;;;OAMG;IAEH,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAU;IAInD,gBAAgB;IACP,OAAO,CAAC,aAAa,CAAK;IAEnC,uFAAuF;IACvF,gBAAgB;IACP,OAAO,CAAC,gBAAgB,CAAS;IAI1C;;;;;;;;;;OAUG;IACH,MAAM,CAAC,+BAA+B,EAAE,OAAO,GAAG,IAAI,CAAQ;IAE9D,gBAAgB;IAChB,OAAO,CAAC,kBAAkB,CAAQ;IAElC,gBAAgB;IAChB,OAAO,CAAC,WAAW,CAAsC;IAEzD;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB,CAAM;IAIrC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAgC;IAE3D;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAMpC;;;OAGG;IACH,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAOxB,gBAAgB;IAChB,OAAO,CAAC,oBAAoB;IAgB5B,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAIzB;;;;OAIG;IACH,gBAAgB;IAChB,OAAO,CAAC,qBAAqB;IAM7B,gBAAgB;IAChB,OAAO,CAAC,UAAU;IAWlB,gBAAgB;IAChB,OAAO,CAAC,qBAAqB;IA0B7B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB,CAQ3B;IAEF,gBAAgB;IAChB,OAAO,CAAC,cAAc;IA4FtB;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB,CAMxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAa3B,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAYtB;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAavC;;;;;;OAMG;IACH,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAehB,iBAAiB,IAAI,IAAI;IAyBzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAiBtD,YAAY,IAAI,IAAI;IAa7B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,sBAAsB;IAqErB,MAAM;CA0ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,aAAa,CAAC;KAC/B;CACF;AAED,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import { H as a, a as i } from "../../shared/hx-tree-item-C2CiWuDE.js";
1
+ import { H as a, a as i } from "../../shared/hx-tree-item-CHrUhuZL.js";
2
2
  export {
3
3
  a as HelixTreeItem,
4
4
  i as HelixTreeView
@@ -258,6 +258,15 @@
258
258
  min-width: 0;
259
259
  }
260
260
 
261
+ /* (group-6 5.1) Wrapper around the default slot. Carries aria-hidden=true
262
+ so the visible message text is not double-announced alongside the
263
+ sr-only announcer. display:contents keeps the wrapper visually
264
+ transparent so children participate in the parent flex layout as if
265
+ the wrapper were not there. */
266
+ .alert__default-slot {
267
+ display: contents;
268
+ }
269
+
261
270
  /* ─── Actions ─── */
262
271
  /* Hidden by default; shown via JS slotchange detection to avoid invisible */
263
272
  /* margin-top spacing when no actions are slotted. */
@@ -721,6 +730,9 @@
721
730
  @media (forced-colors: active) {
722
731
  .badge {
723
732
  border: 1px solid CanvasText;
733
+ forced-color-adjust: none;
734
+ background-color: Canvas;
735
+ color: CanvasText;
724
736
  }
725
737
 
726
738
  .badge--pulse {
@@ -730,6 +742,31 @@
730
742
  .badge__remove-button {
731
743
  color: ButtonText;
732
744
  }
745
+
746
+ /* Per-semantic-variant forced-colors fallbacks. The visually-hidden
747
+ semantic variant label (.badge__variant-label) keeps AT users
748
+ informed; these blocks restore visual semantic distinction for
749
+ sighted users in HCM where bg/color collapse to system defaults.
750
+ Pattern: distinct border-style per variant. */
751
+ .badge--success {
752
+ border-style: solid;
753
+ border-width: 2px;
754
+ }
755
+
756
+ .badge--warning {
757
+ border-style: dashed;
758
+ border-width: 2px;
759
+ }
760
+
761
+ .badge--error {
762
+ border-style: double;
763
+ border-width: 3px;
764
+ }
765
+
766
+ .badge--info {
767
+ border-style: dotted;
768
+ border-width: 2px;
769
+ }
733
770
  }
734
771
  /* ── hx-banner ── */
735
772
  :host {
@@ -5106,6 +5143,23 @@
5106
5143
  margin: 0;
5107
5144
  }
5108
5145
 
5146
+ /* ─── Synthesized consumer-description span ─── */
5147
+ /* Visually hidden mirror of consumer-resolved aria-describedby text used by */
5148
+ /* the host-canonical ARIA pipeline. Always present in the shadow tree so AT */
5149
+ /* can resolve the same-root id even when the description is currently empty. */
5150
+
5151
+ .drawer-sr-only {
5152
+ position: absolute;
5153
+ width: 1px;
5154
+ height: 1px;
5155
+ padding: 0;
5156
+ margin: -1px;
5157
+ overflow: hidden;
5158
+ clip: rect(0, 0, 0, 0);
5159
+ white-space: nowrap;
5160
+ border: 0;
5161
+ }
5162
+
5109
5163
  /* ─── Body ─── */
5110
5164
 
5111
5165
  .drawer-body {
@@ -6041,12 +6095,37 @@ export const helixGridItemStyles = css`
6041
6095
  multiplicative stacking (0.5 * 0.5 = 0.25). Do not add opacity here. */
6042
6096
  }
6043
6097
 
6098
+ /* ─── Loading State ─── */
6099
+
6100
+ .button--loading {
6101
+ position: relative;
6102
+ cursor: wait;
6103
+ }
6104
+
6105
+ .button__spinner {
6106
+ width: 1em;
6107
+ height: 1em;
6108
+ flex-shrink: 0;
6109
+ animation: hx-icon-button-spin var(--hx-duration-spinner, 750ms) linear infinite;
6110
+ }
6111
+
6112
+ @keyframes hx-icon-button-spin {
6113
+ to {
6114
+ transform: rotate(360deg);
6115
+ }
6116
+ }
6117
+
6044
6118
  /* ─── Reduced Motion ─── */
6045
6119
 
6046
6120
  @media (prefers-reduced-motion: reduce) {
6047
6121
  .button {
6048
6122
  transition: none;
6049
6123
  }
6124
+
6125
+ .button__spinner {
6126
+ animation: none;
6127
+ opacity: var(--hx-opacity-muted, 0.6);
6128
+ }
6050
6129
  }
6051
6130
 
6052
6131
  /* ─── High Contrast Mode (forced-colors) ─── */
@@ -6074,6 +6153,11 @@ export const helixGridItemStyles = css`
6074
6153
  :host([disabled]) {
6075
6154
  opacity: 1;
6076
6155
  }
6156
+
6157
+ .button--loading .button__spinner {
6158
+ stroke: ButtonText;
6159
+ forced-color-adjust: none;
6160
+ }
6077
6161
  }
6078
6162
  /* ── hx-image ── */
6079
6163
  :host {
@@ -6451,6 +6535,11 @@ export const helixGridItemStyles = css`
6451
6535
  /* ─── Forced Colors (Windows High Contrast) ─── */
6452
6536
 
6453
6537
  @media (forced-colors: active) {
6538
+ .meter:focus-visible {
6539
+ outline: 2px solid Highlight;
6540
+ outline-offset: var(--hx-focus-ring-offset, 2px);
6541
+ }
6542
+
6454
6543
  .meter__track {
6455
6544
  border: 1px solid CanvasText;
6456
6545
  }
@@ -11184,11 +11273,34 @@ export const helixTableSectionBaseStyles = css`
11184
11273
  @media (forced-colors: active) {
11185
11274
  .tag {
11186
11275
  border-color: CanvasText;
11276
+ forced-color-adjust: none;
11277
+ background-color: Canvas;
11278
+ color: CanvasText;
11187
11279
  }
11188
11280
 
11189
11281
  .tag__remove-button {
11190
11282
  color: ButtonText;
11191
11283
  }
11284
+
11285
+ /* Per-semantic-variant forced-colors fallbacks. The visually-hidden
11286
+ semantic variant label (.tag__variant-label) keeps AT users
11287
+ informed; these blocks restore visual semantic distinction for
11288
+ sighted users in HCM where bg/color collapse to system defaults.
11289
+ Pattern: distinct border-style per variant (matches hx-badge). */
11290
+ .tag--success {
11291
+ border-style: solid;
11292
+ border-width: 2px;
11293
+ }
11294
+
11295
+ .tag--warning {
11296
+ border-style: dashed;
11297
+ border-width: 2px;
11298
+ }
11299
+
11300
+ .tag--danger {
11301
+ border-style: double;
11302
+ border-width: 3px;
11303
+ }
11192
11304
  }
11193
11305
  /* ── hx-text ── */
11194
11306
  :host {
@@ -12218,6 +12330,17 @@ export const helixTableSectionBaseStyles = css`
12218
12330
  .field__error {
12219
12331
  color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #c92a2a));
12220
12332
  }
12333
+ .field__sr-only {
12334
+ position: absolute;
12335
+ width: 1px;
12336
+ height: 1px;
12337
+ padding: 0;
12338
+ margin: -1px;
12339
+ overflow: hidden;
12340
+ clip: rect(0, 0, 0, 0);
12341
+ white-space: nowrap;
12342
+ border: 0;
12343
+ }
12221
12344
  @media (forced-colors: active) {
12222
12345
  .field__combobox {
12223
12346
  border-color: ButtonText;
@@ -337,6 +337,9 @@
337
337
  @media (forced-colors: active) {
338
338
  .badge {
339
339
  border: 1px solid CanvasText;
340
+ forced-color-adjust: none;
341
+ background-color: Canvas;
342
+ color: CanvasText;
340
343
  }
341
344
 
342
345
  .badge--pulse {
@@ -346,6 +349,31 @@
346
349
  .badge__remove-button {
347
350
  color: ButtonText;
348
351
  }
352
+
353
+ /* Per-semantic-variant forced-colors fallbacks. The visually-hidden
354
+ semantic variant label (.badge__variant-label) keeps AT users
355
+ informed; these blocks restore visual semantic distinction for
356
+ sighted users in HCM where bg/color collapse to system defaults.
357
+ Pattern: distinct border-style per variant. */
358
+ .badge--success {
359
+ border-style: solid;
360
+ border-width: 2px;
361
+ }
362
+
363
+ .badge--warning {
364
+ border-style: dashed;
365
+ border-width: 2px;
366
+ }
367
+
368
+ .badge--error {
369
+ border-style: double;
370
+ border-width: 3px;
371
+ }
372
+
373
+ .badge--info {
374
+ border-style: dotted;
375
+ border-width: 2px;
376
+ }
349
377
  }
350
378
  /* ── hx-button ── */
351
379
  :host {
@@ -1430,12 +1458,37 @@
1430
1458
  multiplicative stacking (0.5 * 0.5 = 0.25). Do not add opacity here. */
1431
1459
  }
1432
1460
 
1461
+ /* ─── Loading State ─── */
1462
+
1463
+ .button--loading {
1464
+ position: relative;
1465
+ cursor: wait;
1466
+ }
1467
+
1468
+ .button__spinner {
1469
+ width: 1em;
1470
+ height: 1em;
1471
+ flex-shrink: 0;
1472
+ animation: hx-icon-button-spin var(--hx-duration-spinner, 750ms) linear infinite;
1473
+ }
1474
+
1475
+ @keyframes hx-icon-button-spin {
1476
+ to {
1477
+ transform: rotate(360deg);
1478
+ }
1479
+ }
1480
+
1433
1481
  /* ─── Reduced Motion ─── */
1434
1482
 
1435
1483
  @media (prefers-reduced-motion: reduce) {
1436
1484
  .button {
1437
1485
  transition: none;
1438
1486
  }
1487
+
1488
+ .button__spinner {
1489
+ animation: none;
1490
+ opacity: var(--hx-opacity-muted, 0.6);
1491
+ }
1439
1492
  }
1440
1493
 
1441
1494
  /* ─── High Contrast Mode (forced-colors) ─── */
@@ -1463,6 +1516,11 @@
1463
1516
  :host([disabled]) {
1464
1517
  opacity: 1;
1465
1518
  }
1519
+
1520
+ .button--loading .button__spinner {
1521
+ stroke: ButtonText;
1522
+ forced-color-adjust: none;
1523
+ }
1466
1524
  }
1467
1525
  /* ── hx-image ── */
1468
1526
  :host {
@@ -2007,11 +2065,34 @@
2007
2065
  @media (forced-colors: active) {
2008
2066
  .tag {
2009
2067
  border-color: CanvasText;
2068
+ forced-color-adjust: none;
2069
+ background-color: Canvas;
2070
+ color: CanvasText;
2010
2071
  }
2011
2072
 
2012
2073
  .tag__remove-button {
2013
2074
  color: ButtonText;
2014
2075
  }
2076
+
2077
+ /* Per-semantic-variant forced-colors fallbacks. The visually-hidden
2078
+ semantic variant label (.tag__variant-label) keeps AT users
2079
+ informed; these blocks restore visual semantic distinction for
2080
+ sighted users in HCM where bg/color collapse to system defaults.
2081
+ Pattern: distinct border-style per variant (matches hx-badge). */
2082
+ .tag--success {
2083
+ border-style: solid;
2084
+ border-width: 2px;
2085
+ }
2086
+
2087
+ .tag--warning {
2088
+ border-style: dashed;
2089
+ border-width: 2px;
2090
+ }
2091
+
2092
+ .tag--danger {
2093
+ border-style: double;
2094
+ border-width: 3px;
2095
+ }
2015
2096
  }
2016
2097
  /* ── hx-text ── */
2017
2098
  :host {
@@ -109,6 +109,15 @@
109
109
  min-width: 0;
110
110
  }
111
111
 
112
+ /* (group-6 5.1) Wrapper around the default slot. Carries aria-hidden=true
113
+ so the visible message text is not double-announced alongside the
114
+ sr-only announcer. display:contents keeps the wrapper visually
115
+ transparent so children participate in the parent flex layout as if
116
+ the wrapper were not there. */
117
+ .alert__default-slot {
118
+ display: contents;
119
+ }
120
+
112
121
  /* ─── Actions ─── */
113
122
  /* Hidden by default; shown via JS slotchange detection to avoid invisible */
114
123
  /* margin-top spacing when no actions are slotted. */
@@ -574,6 +583,11 @@
574
583
  /* ─── Forced Colors (Windows High Contrast) ─── */
575
584
 
576
585
  @media (forced-colors: active) {
586
+ .meter:focus-visible {
587
+ outline: 2px solid Highlight;
588
+ outline-offset: var(--hx-focus-ring-offset, 2px);
589
+ }
590
+
577
591
  .meter__track {
578
592
  border: 1px solid CanvasText;
579
593
  }
@@ -4403,6 +4403,17 @@
4403
4403
  .field__error {
4404
4404
  color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #c92a2a));
4405
4405
  }
4406
+ .field__sr-only {
4407
+ position: absolute;
4408
+ width: 1px;
4409
+ height: 1px;
4410
+ padding: 0;
4411
+ margin: -1px;
4412
+ overflow: hidden;
4413
+ clip: rect(0, 0, 0, 0);
4414
+ white-space: nowrap;
4415
+ border: 0;
4416
+ }
4406
4417
  @media (forced-colors: active) {
4407
4418
  .field__combobox {
4408
4419
  border-color: ButtonText;
@@ -456,6 +456,23 @@
456
456
  margin: 0;
457
457
  }
458
458
 
459
+ /* ─── Synthesized consumer-description span ─── */
460
+ /* Visually hidden mirror of consumer-resolved aria-describedby text used by */
461
+ /* the host-canonical ARIA pipeline. Always present in the shadow tree so AT */
462
+ /* can resolve the same-root id even when the description is currently empty. */
463
+
464
+ .drawer-sr-only {
465
+ position: absolute;
466
+ width: 1px;
467
+ height: 1px;
468
+ padding: 0;
469
+ margin: -1px;
470
+ overflow: hidden;
471
+ clip: rect(0, 0, 0, 0);
472
+ white-space: nowrap;
473
+ border: 0;
474
+ }
475
+
459
476
  /* ─── Body ─── */
460
477
 
461
478
  .drawer-body {
@@ -107,6 +107,15 @@
107
107
  min-width: 0;
108
108
  }
109
109
 
110
+ /* (group-6 5.1) Wrapper around the default slot. Carries aria-hidden=true
111
+ so the visible message text is not double-announced alongside the
112
+ sr-only announcer. display:contents keeps the wrapper visually
113
+ transparent so children participate in the parent flex layout as if
114
+ the wrapper were not there. */
115
+ .alert__default-slot {
116
+ display: contents;
117
+ }
118
+
110
119
  /* ─── Actions ─── */
111
120
  /* Hidden by default; shown via JS slotchange detection to avoid invisible */
112
121
  /* margin-top spacing when no actions are slotted. */
@@ -201,6 +201,9 @@
201
201
  @media (forced-colors: active) {
202
202
  .badge {
203
203
  border: 1px solid CanvasText;
204
+ forced-color-adjust: none;
205
+ background-color: Canvas;
206
+ color: CanvasText;
204
207
  }
205
208
 
206
209
  .badge--pulse {
@@ -210,4 +213,29 @@
210
213
  .badge__remove-button {
211
214
  color: ButtonText;
212
215
  }
216
+
217
+ /* Per-semantic-variant forced-colors fallbacks. The visually-hidden
218
+ semantic variant label (.badge__variant-label) keeps AT users
219
+ informed; these blocks restore visual semantic distinction for
220
+ sighted users in HCM where bg/color collapse to system defaults.
221
+ Pattern: distinct border-style per variant. */
222
+ .badge--success {
223
+ border-style: solid;
224
+ border-width: 2px;
225
+ }
226
+
227
+ .badge--warning {
228
+ border-style: dashed;
229
+ border-width: 2px;
230
+ }
231
+
232
+ .badge--error {
233
+ border-style: double;
234
+ border-width: 3px;
235
+ }
236
+
237
+ .badge--info {
238
+ border-style: dotted;
239
+ border-width: 2px;
240
+ }
213
241
  }
@@ -239,6 +239,23 @@
239
239
  margin: 0;
240
240
  }
241
241
 
242
+ /* ─── Synthesized consumer-description span ─── */
243
+ /* Visually hidden mirror of consumer-resolved aria-describedby text used by */
244
+ /* the host-canonical ARIA pipeline. Always present in the shadow tree so AT */
245
+ /* can resolve the same-root id even when the description is currently empty. */
246
+
247
+ .drawer-sr-only {
248
+ position: absolute;
249
+ width: 1px;
250
+ height: 1px;
251
+ padding: 0;
252
+ margin: -1px;
253
+ overflow: hidden;
254
+ clip: rect(0, 0, 0, 0);
255
+ white-space: nowrap;
256
+ border: 0;
257
+ }
258
+
242
259
  /* ─── Body ─── */
243
260
 
244
261
  .drawer-body {
@@ -151,12 +151,37 @@
151
151
  multiplicative stacking (0.5 * 0.5 = 0.25). Do not add opacity here. */
152
152
  }
153
153
 
154
+ /* ─── Loading State ─── */
155
+
156
+ .button--loading {
157
+ position: relative;
158
+ cursor: wait;
159
+ }
160
+
161
+ .button__spinner {
162
+ width: 1em;
163
+ height: 1em;
164
+ flex-shrink: 0;
165
+ animation: hx-icon-button-spin var(--hx-duration-spinner, 750ms) linear infinite;
166
+ }
167
+
168
+ @keyframes hx-icon-button-spin {
169
+ to {
170
+ transform: rotate(360deg);
171
+ }
172
+ }
173
+
154
174
  /* ─── Reduced Motion ─── */
155
175
 
156
176
  @media (prefers-reduced-motion: reduce) {
157
177
  .button {
158
178
  transition: none;
159
179
  }
180
+
181
+ .button__spinner {
182
+ animation: none;
183
+ opacity: var(--hx-opacity-muted, 0.6);
184
+ }
160
185
  }
161
186
 
162
187
  /* ─── High Contrast Mode (forced-colors) ─── */
@@ -184,4 +209,9 @@
184
209
  :host([disabled]) {
185
210
  opacity: 1;
186
211
  }
212
+
213
+ .button--loading .button__spinner {
214
+ stroke: ButtonText;
215
+ forced-color-adjust: none;
216
+ }
187
217
  }