@helixui/library 1.1.1 → 1.1.2-next.1

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 (620) hide show
  1. package/custom-elements.json +7475 -6560
  2. package/dist/base/helix-element.d.ts +134 -0
  3. package/dist/base/helix-element.d.ts.map +1 -0
  4. package/dist/base/id-counter.d.ts +32 -0
  5. package/dist/base/id-counter.d.ts.map +1 -0
  6. package/dist/base/index.d.ts +4 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/styles.d.ts +19 -0
  9. package/dist/base/styles.d.ts.map +1 -0
  10. package/dist/components/hx-accordion/hx-accordion-item.d.ts +3 -0
  11. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  12. package/dist/components/hx-accordion/hx-accordion.d.ts +4 -1
  13. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  14. package/dist/components/hx-accordion/index.js +1 -1
  15. package/dist/components/hx-action-bar/hx-action-bar.d.ts +1 -1
  16. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  17. package/dist/components/hx-alert/hx-alert.d.ts +18 -10
  18. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  19. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  20. package/dist/components/hx-alert/index.js +1 -1
  21. package/dist/components/hx-avatar/index.js +1 -1
  22. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  23. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  24. package/dist/components/hx-badge/index.js +1 -1
  25. package/dist/components/hx-banner/hx-banner.d.ts +15 -5
  26. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  27. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  28. package/dist/components/hx-banner/index.js +1 -1
  29. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +7 -2
  30. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  31. package/dist/components/hx-breadcrumb/index.js +1 -1
  32. package/dist/components/hx-button/hx-button.d.ts +11 -8
  33. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  34. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  35. package/dist/components/hx-button/index.js +1 -1
  36. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -6
  37. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  38. package/dist/components/hx-button-group/index.js +1 -1
  39. package/dist/components/hx-card/hx-card.d.ts +7 -7
  40. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  41. package/dist/components/hx-card/index.js +1 -1
  42. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  43. package/dist/components/hx-carousel/index.js +1 -1
  44. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -18
  45. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  46. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  47. package/dist/components/hx-checkbox/index.js +1 -1
  48. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +8 -3
  49. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  50. package/dist/components/hx-checkbox-group/index.js +1 -1
  51. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +126 -0
  52. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -0
  53. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts +2 -0
  54. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -0
  55. package/dist/components/hx-clinical-status/index.d.ts +3 -0
  56. package/dist/components/hx-clinical-status/index.d.ts.map +1 -0
  57. package/dist/components/hx-clinical-status/index.js +5 -0
  58. package/dist/components/hx-clinical-status/index.js.map +1 -0
  59. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  60. package/dist/components/hx-code-snippet/index.js +1 -1
  61. package/dist/components/hx-color-picker/color-utils.d.ts +27 -0
  62. package/dist/components/hx-color-picker/color-utils.d.ts.map +1 -0
  63. package/dist/components/hx-color-picker/hx-color-picker.d.ts +16 -4
  64. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  65. package/dist/components/hx-color-picker/index.js +1 -1
  66. package/dist/components/hx-combobox/hx-combobox.d.ts +4 -4
  67. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  68. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  69. package/dist/components/hx-combobox/index.js +1 -1
  70. package/dist/components/hx-container/index.js +1 -1
  71. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -1
  72. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  73. package/dist/components/hx-copy-button/index.js +1 -1
  74. package/dist/components/hx-counter/hx-counter.d.ts +20 -3
  75. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  76. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  77. package/dist/components/hx-counter/index.js +1 -1
  78. package/dist/components/hx-data-table/hx-data-table.d.ts +13 -13
  79. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  80. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  81. package/dist/components/hx-data-table/index.js +1 -1
  82. package/dist/components/hx-date-picker/hx-date-picker.d.ts +70 -13
  83. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  84. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  85. package/dist/components/hx-date-picker/index.js +1 -1
  86. package/dist/components/hx-dialog/hx-dialog.d.ts +4 -1
  87. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  88. package/dist/components/hx-dialog/index.js +1 -1
  89. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  90. package/dist/components/hx-divider/index.js +1 -1
  91. package/dist/components/hx-drawer/hx-drawer.d.ts +4 -8
  92. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  93. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  94. package/dist/components/hx-drawer/index.js +1 -1
  95. package/dist/components/hx-dropdown/hx-dropdown.d.ts +14 -1
  96. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  97. package/dist/components/hx-dropdown/index.js +1 -1
  98. package/dist/components/hx-field/hx-field.d.ts +1 -1
  99. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  100. package/dist/components/hx-field/index.js +1 -1
  101. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  102. package/dist/components/hx-field-label/index.js +1 -1
  103. package/dist/components/hx-file-upload/hx-file-upload.d.ts +8 -9
  104. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  105. package/dist/components/hx-file-upload/index.js +1 -1
  106. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  107. package/dist/components/hx-form/index.js +1 -1
  108. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  109. package/dist/components/hx-format-date/index.js +1 -1
  110. package/dist/components/hx-grid/hx-grid.d.ts +5 -9
  111. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  112. package/dist/components/hx-grid/index.js +1 -1
  113. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  114. package/dist/components/hx-icon/index.js +1 -1
  115. package/dist/components/hx-icon-button/hx-icon-button.d.ts +4 -3
  116. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  117. package/dist/components/hx-icon-button/index.js +1 -1
  118. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  119. package/dist/components/hx-image/index.js +1 -1
  120. package/dist/components/hx-link/hx-link.d.ts +1 -1
  121. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  122. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  123. package/dist/components/hx-link/index.js +1 -1
  124. package/dist/components/hx-meter/hx-meter.d.ts +2 -2
  125. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  126. package/dist/components/hx-meter/index.js +1 -1
  127. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  128. package/dist/components/hx-nav/index.js +1 -1
  129. package/dist/components/hx-number-input/hx-number-input.d.ts +19 -7
  130. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  131. package/dist/components/hx-number-input/index.js +1 -1
  132. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +3 -3
  133. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  134. package/dist/components/hx-overflow-menu/index.js +1 -1
  135. package/dist/components/hx-pagination/hx-pagination.d.ts +26 -12
  136. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  137. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  138. package/dist/components/hx-pagination/index.js +1 -1
  139. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +105 -0
  140. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -0
  141. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts +2 -0
  142. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -0
  143. package/dist/components/hx-patient-banner/index.d.ts +3 -0
  144. package/dist/components/hx-patient-banner/index.d.ts.map +1 -0
  145. package/dist/components/hx-patient-banner/index.js +5 -0
  146. package/dist/components/hx-patient-banner/index.js.map +1 -0
  147. package/dist/components/hx-phi-field/hx-phi-field.d.ts +72 -0
  148. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -0
  149. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts +2 -0
  150. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -0
  151. package/dist/components/hx-phi-field/index.d.ts +3 -0
  152. package/dist/components/hx-phi-field/index.d.ts.map +1 -0
  153. package/dist/components/hx-phi-field/index.js +5 -0
  154. package/dist/components/hx-phi-field/index.js.map +1 -0
  155. package/dist/components/hx-popover/hx-popover.d.ts +25 -9
  156. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  157. package/dist/components/hx-popover/index.js +1 -1
  158. package/dist/components/hx-popup/hx-popup.d.ts +5 -8
  159. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  160. package/dist/components/hx-popup/index.js +1 -1
  161. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +2 -0
  162. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  163. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  164. package/dist/components/hx-progress-bar/index.js +1 -1
  165. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  166. package/dist/components/hx-progress-ring/index.js +1 -1
  167. package/dist/components/hx-prose/hx-prose.d.ts +1 -0
  168. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  169. package/dist/components/hx-radio-group/hx-radio-group.d.ts +3 -7
  170. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  171. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  172. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  173. package/dist/components/hx-radio-group/index.js +1 -1
  174. package/dist/components/hx-rating/hx-rating.d.ts +3 -3
  175. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  176. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  177. package/dist/components/hx-rating/index.js +1 -1
  178. package/dist/components/hx-select/hx-select.d.ts +16 -11
  179. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  180. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  181. package/dist/components/hx-select/index.js +1 -1
  182. package/dist/components/hx-side-nav/hx-nav-item.d.ts +7 -0
  183. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  184. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  185. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  186. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  187. package/dist/components/hx-side-nav/index.js +1 -1
  188. package/dist/components/hx-skeleton/hx-skeleton.d.ts +2 -2
  189. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  190. package/dist/components/hx-slider/hx-slider.d.ts +4 -8
  191. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  192. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  193. package/dist/components/hx-slider/index.js +1 -1
  194. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -1
  195. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  196. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  197. package/dist/components/hx-spinner/index.js +1 -1
  198. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  199. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  200. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  201. package/dist/components/hx-split-button/index.js +1 -1
  202. package/dist/components/hx-split-panel/hx-split-panel.d.ts +13 -9
  203. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  204. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  205. package/dist/components/hx-split-panel/index.js +1 -1
  206. package/dist/components/hx-stat/hx-stat.d.ts +7 -2
  207. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  208. package/dist/components/hx-stat/index.js +1 -1
  209. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +2 -2
  210. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  211. package/dist/components/hx-status-indicator/index.js +1 -1
  212. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  213. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  214. package/dist/components/hx-steps/index.js +1 -1
  215. package/dist/components/hx-structured-list/hx-structured-list.d.ts +10 -3
  216. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  217. package/dist/components/hx-structured-list/index.js +1 -1
  218. package/dist/components/hx-style-scope/hx-style-scope.d.ts +71 -0
  219. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -0
  220. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts +10 -0
  221. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -0
  222. package/dist/components/hx-style-scope/index.d.ts +2 -0
  223. package/dist/components/hx-style-scope/index.d.ts.map +1 -0
  224. package/dist/components/hx-style-scope/index.js +5 -0
  225. package/dist/components/hx-style-scope/index.js.map +1 -0
  226. package/dist/components/hx-switch/hx-switch.d.ts +4 -4
  227. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  228. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  229. package/dist/components/hx-switch/index.js +1 -1
  230. package/dist/components/hx-table/hx-table.d.ts +1 -0
  231. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  232. package/dist/components/hx-table/index.js +1 -1
  233. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  234. package/dist/components/hx-tabs/hx-tab.d.ts +1 -0
  235. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  236. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  237. package/dist/components/hx-tabs/hx-tabs.d.ts +2 -2
  238. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  239. package/dist/components/hx-tabs/index.js +1 -1
  240. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  241. package/dist/components/hx-tag/index.js +1 -1
  242. package/dist/components/hx-text/index.js +1 -1
  243. package/dist/components/hx-text-input/hx-text-input.d.ts +16 -15
  244. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  245. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  246. package/dist/components/hx-text-input/index.js +1 -1
  247. package/dist/components/hx-textarea/hx-textarea.d.ts +4 -4
  248. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  249. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  250. package/dist/components/hx-textarea/index.js +1 -1
  251. package/dist/components/hx-theme/hx-theme.d.ts +82 -3
  252. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  253. package/dist/components/hx-theme/index.js +1 -1
  254. package/dist/components/hx-time-picker/hx-time-picker.d.ts +3 -1
  255. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  256. package/dist/components/hx-time-picker/index.js +1 -1
  257. package/dist/components/hx-toast/hx-toast-stack.d.ts +1 -1
  258. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  259. package/dist/components/hx-toast/hx-toast.d.ts +9 -5
  260. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  261. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  262. package/dist/components/hx-toast/index.js +1 -1
  263. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  264. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -3
  265. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  266. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  267. package/dist/components/hx-toggle-button/index.js +1 -1
  268. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -2
  269. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  270. package/dist/components/hx-tooltip/index.js +1 -1
  271. package/dist/components/hx-tree-view/hx-tree-item.d.ts +7 -0
  272. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  273. package/dist/components/hx-tree-view/hx-tree-view.d.ts +21 -2
  274. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  275. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  276. package/dist/components/hx-tree-view/index.js +1 -1
  277. package/dist/controllers/helix-audit-controller.d.ts +71 -0
  278. package/dist/controllers/helix-audit-controller.d.ts.map +1 -0
  279. package/dist/css/helix-all.css +9581 -0
  280. package/dist/css/helix-core.css +1784 -0
  281. package/dist/css/helix-data.css +639 -0
  282. package/dist/css/helix-feedback.css +1239 -0
  283. package/dist/css/helix-forms.css +2498 -0
  284. package/dist/css/helix-layout.css +380 -0
  285. package/dist/css/helix-media.css +213 -0
  286. package/dist/css/helix-navigation.css +1122 -0
  287. package/dist/css/helix-overlay.css +643 -0
  288. package/dist/css/helix-tokens.css +432 -0
  289. package/dist/css/helix-utility.css +633 -0
  290. package/dist/css/hx-accordion.css +10 -0
  291. package/dist/css/hx-action-bar.css +117 -0
  292. package/dist/css/hx-alert.css +213 -0
  293. package/dist/css/hx-avatar.css +117 -0
  294. package/dist/css/hx-badge.css +174 -0
  295. package/dist/css/hx-banner.css +203 -0
  296. package/dist/css/hx-breadcrumb.css +36 -0
  297. package/dist/css/hx-button-group.css +91 -0
  298. package/dist/css/hx-button.css +262 -0
  299. package/dist/css/hx-card.css +161 -0
  300. package/dist/css/hx-carousel.css +211 -0
  301. package/dist/css/hx-checkbox-group.css +77 -0
  302. package/dist/css/hx-checkbox.css +219 -0
  303. package/dist/css/hx-clinical-status.css +246 -0
  304. package/dist/css/hx-code-snippet.css +179 -0
  305. package/dist/css/hx-color-picker.css +2 -0
  306. package/dist/css/hx-combobox.css +2 -0
  307. package/dist/css/hx-container.css +82 -0
  308. package/dist/css/hx-copy-button.css +121 -0
  309. package/dist/css/hx-counter.css +51 -0
  310. package/dist/css/hx-data-table.css +207 -0
  311. package/dist/css/hx-date-picker.css +2 -0
  312. package/dist/css/hx-dialog.css +190 -0
  313. package/dist/css/hx-divider.css +87 -0
  314. package/dist/css/hx-drawer.css +262 -0
  315. package/dist/css/hx-dropdown.css +46 -0
  316. package/dist/css/hx-field-label.css +38 -0
  317. package/dist/css/hx-field.css +119 -0
  318. package/dist/css/hx-file-upload.css +241 -0
  319. package/dist/css/hx-form.css +2 -0
  320. package/dist/css/hx-format-date.css +10 -0
  321. package/dist/css/hx-grid.css +14 -0
  322. package/dist/css/hx-help-text.css +50 -0
  323. package/dist/css/hx-icon-button.css +152 -0
  324. package/dist/css/hx-icon.css +73 -0
  325. package/dist/css/hx-image.css +41 -0
  326. package/dist/css/hx-link.css +105 -0
  327. package/dist/css/hx-list.css +48 -0
  328. package/dist/css/hx-menu.css +21 -0
  329. package/dist/css/hx-meter.css +113 -0
  330. package/dist/css/hx-nav.css +242 -0
  331. package/dist/css/hx-number-input.css +246 -0
  332. package/dist/css/hx-overflow-menu.css +133 -0
  333. package/dist/css/hx-pagination.css +193 -0
  334. package/dist/css/hx-patient-banner.css +111 -0
  335. package/dist/css/hx-phi-field.css +85 -0
  336. package/dist/css/hx-popover.css +61 -0
  337. package/dist/css/hx-popup.css +31 -0
  338. package/dist/css/hx-progress-bar.css +133 -0
  339. package/dist/css/hx-progress-ring.css +142 -0
  340. package/dist/css/hx-prose.css +2 -0
  341. package/dist/css/hx-radio-group.css +77 -0
  342. package/dist/css/hx-rating.css +96 -0
  343. package/dist/css/hx-select.css +268 -0
  344. package/dist/css/hx-side-nav.css +142 -0
  345. package/dist/css/hx-skeleton.css +82 -0
  346. package/dist/css/hx-slider.css +287 -0
  347. package/dist/css/hx-spinner.css +116 -0
  348. package/dist/css/hx-split-button.css +309 -0
  349. package/dist/css/hx-split-panel.css +168 -0
  350. package/dist/css/hx-stack.css +104 -0
  351. package/dist/css/hx-stat.css +106 -0
  352. package/dist/css/hx-status-indicator.css +97 -0
  353. package/dist/css/hx-steps.css +52 -0
  354. package/dist/css/hx-structured-list.css +75 -0
  355. package/dist/css/hx-style-scope.css +4 -0
  356. package/dist/css/hx-switch.css +169 -0
  357. package/dist/css/hx-table.css +128 -0
  358. package/dist/css/hx-tabs.css +76 -0
  359. package/dist/css/hx-tag.css +146 -0
  360. package/dist/css/hx-text-input.css +214 -0
  361. package/dist/css/hx-text.css +149 -0
  362. package/dist/css/hx-textarea.css +180 -0
  363. package/dist/css/hx-theme.css +23 -0
  364. package/dist/css/hx-time-picker.css +2 -0
  365. package/dist/css/hx-toast.css +230 -0
  366. package/dist/css/hx-toggle-button.css +207 -0
  367. package/dist/css/hx-tooltip.css +51 -0
  368. package/dist/css/hx-top-nav.css +203 -0
  369. package/dist/css/hx-tree-view.css +22 -0
  370. package/dist/css/hx-visually-hidden.css +26 -0
  371. package/dist/css/index.css +84 -0
  372. package/dist/css/manifest.json +2696 -0
  373. package/dist/index.d.ts +14 -0
  374. package/dist/index.d.ts.map +1 -1
  375. package/dist/index.js +266 -176
  376. package/dist/index.js.map +1 -1
  377. package/dist/mixins/FocusMixin.d.ts +49 -0
  378. package/dist/mixins/FocusMixin.d.ts.map +1 -0
  379. package/dist/mixins/FormMixin.d.ts +69 -0
  380. package/dist/mixins/FormMixin.d.ts.map +1 -0
  381. package/dist/mixins/aria-delegation.d.ts +97 -0
  382. package/dist/mixins/aria-delegation.d.ts.map +1 -0
  383. package/dist/mixins/index.d.ts +5 -0
  384. package/dist/mixins/index.d.ts.map +1 -0
  385. package/dist/shared/FormMixin-Bjvw20G5.js +88 -0
  386. package/dist/shared/FormMixin-Bjvw20G5.js.map +1 -0
  387. package/dist/shared/aria-delegation-CBP9eQ0M.js +107 -0
  388. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +1 -0
  389. package/dist/shared/{hx-accordion-D1kFhdeQ.js → hx-accordion-_KeulaQR.js} +83 -55
  390. package/dist/shared/hx-accordion-_KeulaQR.js.map +1 -0
  391. package/dist/shared/hx-action-bar-D4bulGQP.js.map +1 -1
  392. package/dist/shared/{hx-alert-K5F8KeqI.js → hx-alert-DRZYP0Oo.js} +32 -23
  393. package/dist/shared/hx-alert-DRZYP0Oo.js.map +1 -0
  394. package/dist/shared/{hx-avatar-Cun-O99h.js → hx-avatar-7p1cj3lG.js} +2 -2
  395. package/dist/shared/hx-avatar-7p1cj3lG.js.map +1 -0
  396. package/dist/shared/{hx-badge-CsFd2xtw.js → hx-badge-DCxvskdw.js} +23 -18
  397. package/dist/shared/hx-badge-DCxvskdw.js.map +1 -0
  398. package/dist/shared/{hx-banner-BTV-X2xF.js → hx-banner-2RS7Nux4.js} +93 -58
  399. package/dist/shared/hx-banner-2RS7Nux4.js.map +1 -0
  400. package/dist/shared/{hx-breadcrumb-item-4IwaLgaO.js → hx-breadcrumb-item-B2rjepqy.js} +79 -78
  401. package/dist/shared/hx-breadcrumb-item-B2rjepqy.js.map +1 -0
  402. package/dist/shared/{hx-button-7k-KeCYU.js → hx-button-6S3DwuIj.js} +81 -56
  403. package/dist/shared/hx-button-6S3DwuIj.js.map +1 -0
  404. package/dist/shared/{hx-button-group-CWjWv-wS.js → hx-button-group-ChTQsnQj.js} +10 -10
  405. package/dist/shared/hx-button-group-ChTQsnQj.js.map +1 -0
  406. package/dist/shared/{hx-card-0hT3G5hi.js → hx-card-dIKdcMhr.js} +32 -32
  407. package/dist/shared/hx-card-dIKdcMhr.js.map +1 -0
  408. package/dist/shared/{hx-carousel-item-DgeYyYZJ.js → hx-carousel-item-Cm8a1nAi.js} +3 -3
  409. package/dist/shared/hx-carousel-item-Cm8a1nAi.js.map +1 -0
  410. package/dist/shared/{hx-checkbox-BvjO-O41.js → hx-checkbox-_WUiuTo9.js} +68 -71
  411. package/dist/shared/hx-checkbox-_WUiuTo9.js.map +1 -0
  412. package/dist/shared/{hx-checkbox-group-Z5VvWzcj.js → hx-checkbox-group-B-ci-dxp.js} +37 -31
  413. package/dist/shared/hx-checkbox-group-B-ci-dxp.js.map +1 -0
  414. package/dist/shared/hx-clinical-status-De8yrA5I.js +467 -0
  415. package/dist/shared/hx-clinical-status-De8yrA5I.js.map +1 -0
  416. package/dist/shared/{hx-code-snippet-DqzPkH4K.js → hx-code-snippet-CQsyvthi.js} +56 -47
  417. package/dist/shared/hx-code-snippet-CQsyvthi.js.map +1 -0
  418. package/dist/shared/{hx-color-picker-Da8z6AlQ.js → hx-color-picker-Dk2Myvaf.js} +153 -137
  419. package/dist/shared/hx-color-picker-Dk2Myvaf.js.map +1 -0
  420. package/dist/shared/{hx-combobox-CivfelTS.js → hx-combobox-CNAJXIxo.js} +10 -10
  421. package/dist/shared/hx-combobox-CNAJXIxo.js.map +1 -0
  422. package/dist/shared/{hx-container-DLUKnTi9.js → hx-container-7j16VuQE.js} +16 -16
  423. package/dist/shared/hx-container-7j16VuQE.js.map +1 -0
  424. package/dist/shared/{hx-copy-button--0dymSvw.js → hx-copy-button-B_ZHYO7_.js} +47 -40
  425. package/dist/shared/hx-copy-button-B_ZHYO7_.js.map +1 -0
  426. package/dist/shared/hx-counter-D_B7L9Pi.js +185 -0
  427. package/dist/shared/hx-counter-D_B7L9Pi.js.map +1 -0
  428. package/dist/shared/{hx-data-table-DujB9hSE.js → hx-data-table-B1j4n4bm.js} +134 -107
  429. package/dist/shared/hx-data-table-B1j4n4bm.js.map +1 -0
  430. package/dist/shared/{hx-date-picker-C8d2HtRV.js → hx-date-picker-R-0kWFwr.js} +146 -130
  431. package/dist/shared/hx-date-picker-R-0kWFwr.js.map +1 -0
  432. package/dist/shared/{hx-dialog-DkUSnVgw.js → hx-dialog-U5d3s0Ps.js} +98 -89
  433. package/dist/shared/hx-dialog-U5d3s0Ps.js.map +1 -0
  434. package/dist/shared/{hx-divider-DNNs4e8q.js → hx-divider-DdAN-_jB.js} +5 -5
  435. package/dist/shared/hx-divider-DdAN-_jB.js.map +1 -0
  436. package/dist/shared/{hx-drawer-CJcRZcns.js → hx-drawer-e0qeGxAD.js} +117 -77
  437. package/dist/shared/hx-drawer-e0qeGxAD.js.map +1 -0
  438. package/dist/shared/{hx-dropdown-Bo0KTM1A.js → hx-dropdown-DP_DNpEb.js} +56 -41
  439. package/dist/shared/hx-dropdown-DP_DNpEb.js.map +1 -0
  440. package/dist/shared/{hx-field-3MmzJ4kZ.js → hx-field-COM4KvMQ.js} +9 -9
  441. package/dist/shared/hx-field-COM4KvMQ.js.map +1 -0
  442. package/dist/shared/{hx-field-label-Bg-EWvqF.js → hx-field-label-BtZ9H9Yy.js} +8 -11
  443. package/dist/shared/hx-field-label-BtZ9H9Yy.js.map +1 -0
  444. package/dist/shared/{hx-file-upload-ByjAgfNy.js → hx-file-upload-DbECypLe.js} +78 -87
  445. package/dist/shared/hx-file-upload-DbECypLe.js.map +1 -0
  446. package/dist/shared/{hx-form-BpS6v3Iu.js → hx-form-fJE-FJQV.js} +36 -32
  447. package/dist/shared/{hx-form-BpS6v3Iu.js.map → hx-form-fJE-FJQV.js.map} +1 -1
  448. package/dist/shared/{hx-format-date-BdnWV2kX.js → hx-format-date-C030ThSm.js} +14 -12
  449. package/dist/shared/hx-format-date-C030ThSm.js.map +1 -0
  450. package/dist/shared/{hx-grid-gEjuF0cR.js → hx-grid-DE8KM5Gf.js} +7 -7
  451. package/dist/shared/hx-grid-DE8KM5Gf.js.map +1 -0
  452. package/dist/shared/{hx-icon-button-DzH_bRtC.js → hx-icon-button-Et9wq79n.js} +4 -4
  453. package/dist/shared/{hx-icon-button-DzH_bRtC.js.map → hx-icon-button-Et9wq79n.js.map} +1 -1
  454. package/dist/shared/{hx-icon-CP6OnLoM.js → hx-icon-dYvrzvsO.js} +7 -7
  455. package/dist/shared/hx-icon-dYvrzvsO.js.map +1 -0
  456. package/dist/shared/{hx-image-C6pGiI6c.js → hx-image-DUsEi-oN.js} +15 -15
  457. package/dist/shared/hx-image-DUsEi-oN.js.map +1 -0
  458. package/dist/shared/{hx-link-Tmk_YPvW.js → hx-link-Peg2LzOD.js} +43 -41
  459. package/dist/shared/hx-link-Peg2LzOD.js.map +1 -0
  460. package/dist/shared/{hx-meter-uXkTZq-W.js → hx-meter-CVs4A649.js} +13 -13
  461. package/dist/shared/hx-meter-CVs4A649.js.map +1 -0
  462. package/dist/shared/{hx-nav-3JsN2Oak.js → hx-nav-D377Ngz4.js} +23 -24
  463. package/dist/shared/hx-nav-D377Ngz4.js.map +1 -0
  464. package/dist/shared/{hx-nav-item-D3EJatzc.js → hx-nav-item-ByU2N921.js} +49 -37
  465. package/dist/shared/hx-nav-item-ByU2N921.js.map +1 -0
  466. package/dist/shared/{hx-number-input-CAAibZ8X.js → hx-number-input-BPgrlMLN.js} +70 -66
  467. package/dist/shared/hx-number-input-BPgrlMLN.js.map +1 -0
  468. package/dist/shared/{hx-overflow-menu-2kgOJ_ht.js → hx-overflow-menu-Bz02LPPk.js} +15 -11
  469. package/dist/shared/hx-overflow-menu-Bz02LPPk.js.map +1 -0
  470. package/dist/shared/{hx-pagination-DBs-vmSv.js → hx-pagination-DYhYPqDn.js} +68 -63
  471. package/dist/shared/hx-pagination-DYhYPqDn.js.map +1 -0
  472. package/dist/shared/hx-patient-banner-BoJHddAL.js +256 -0
  473. package/dist/shared/hx-patient-banner-BoJHddAL.js.map +1 -0
  474. package/dist/shared/hx-phi-field-EDWna59z.js +261 -0
  475. package/dist/shared/hx-phi-field-EDWna59z.js.map +1 -0
  476. package/dist/shared/{hx-popover-DxE67miP.js → hx-popover-D6kYQkt3.js} +96 -69
  477. package/dist/shared/hx-popover-D6kYQkt3.js.map +1 -0
  478. package/dist/shared/{hx-popup-Dg6n_PbY.js → hx-popup-RQb6HUXc.js} +2 -2
  479. package/dist/shared/hx-popup-RQb6HUXc.js.map +1 -0
  480. package/dist/shared/{hx-progress-bar-Dm_EHyng.js → hx-progress-bar-ByEmxq1V.js} +42 -40
  481. package/dist/shared/hx-progress-bar-ByEmxq1V.js.map +1 -0
  482. package/dist/shared/{hx-progress-ring-DpxBDD5d.js → hx-progress-ring-CtVnNRQx.js} +2 -2
  483. package/dist/shared/{hx-progress-ring-DpxBDD5d.js.map → hx-progress-ring-CtVnNRQx.js.map} +1 -1
  484. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -1
  485. package/dist/shared/{hx-radio-BywgVSEu.js → hx-radio-jgeW92SV.js} +28 -27
  486. package/dist/shared/hx-radio-jgeW92SV.js.map +1 -0
  487. package/dist/shared/{hx-rating-CUWBQ0fZ.js → hx-rating-g_iy-DW_.js} +92 -96
  488. package/dist/shared/hx-rating-g_iy-DW_.js.map +1 -0
  489. package/dist/shared/{hx-select-BwDwxk-M.js → hx-select-4-nHL0vd.js} +73 -61
  490. package/dist/shared/hx-select-4-nHL0vd.js.map +1 -0
  491. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  492. package/dist/shared/{hx-slider-D_0EKJyk.js → hx-slider-7Q-e0_pc.js} +27 -22
  493. package/dist/shared/hx-slider-7Q-e0_pc.js.map +1 -0
  494. package/dist/shared/{hx-spinner-DMn4SChS.js → hx-spinner-DEgrKsUo.js} +3 -2
  495. package/dist/shared/hx-spinner-DEgrKsUo.js.map +1 -0
  496. package/dist/shared/{hx-split-button-CypgLXw1.js → hx-split-button-BA7P_ly5.js} +40 -31
  497. package/dist/shared/hx-split-button-BA7P_ly5.js.map +1 -0
  498. package/dist/shared/{hx-split-panel-BPMWKPGu.js → hx-split-panel-Bss54UN8.js} +28 -28
  499. package/dist/shared/hx-split-panel-Bss54UN8.js.map +1 -0
  500. package/dist/shared/{hx-stat-CHntLHJM.js → hx-stat-CmkCUI8v.js} +40 -32
  501. package/dist/shared/{hx-stat-CHntLHJM.js.map → hx-stat-CmkCUI8v.js.map} +1 -1
  502. package/dist/shared/{hx-status-indicator-C1BwEvUw.js → hx-status-indicator-4ClvA5mU.js} +19 -19
  503. package/dist/shared/hx-status-indicator-4ClvA5mU.js.map +1 -0
  504. package/dist/shared/{hx-step-BIVWSPxd.js → hx-step-DlANlr2A.js} +31 -71
  505. package/dist/shared/hx-step-DlANlr2A.js.map +1 -0
  506. package/dist/shared/{hx-structured-list-CMWllxGg.js → hx-structured-list-Db9rwLI_.js} +26 -23
  507. package/dist/shared/hx-structured-list-Db9rwLI_.js.map +1 -0
  508. package/dist/shared/hx-style-scope-BroUu83L.js +125 -0
  509. package/dist/shared/hx-style-scope-BroUu83L.js.map +1 -0
  510. package/dist/shared/{hx-switch-BgX8kuWt.js → hx-switch-C0Lp5RGy.js} +8 -5
  511. package/dist/shared/hx-switch-C0Lp5RGy.js.map +1 -0
  512. package/dist/shared/{hx-tab-panel-DhOq67jj.js → hx-tab-panel-GGjk6Qg4.js} +129 -118
  513. package/dist/shared/hx-tab-panel-GGjk6Qg4.js.map +1 -0
  514. package/dist/shared/{hx-tag-CzOTDcXI.js → hx-tag-K5fCjfqQ.js} +15 -14
  515. package/dist/shared/hx-tag-K5fCjfqQ.js.map +1 -0
  516. package/dist/shared/{hx-td-h6oeW6YC.js → hx-td-DZuILY3s.js} +43 -40
  517. package/dist/shared/hx-td-DZuILY3s.js.map +1 -0
  518. package/dist/shared/{hx-text-DTXjiviE.js → hx-text-DoEVOf47.js} +29 -29
  519. package/dist/shared/hx-text-DoEVOf47.js.map +1 -0
  520. package/dist/shared/hx-text-input-DTKWPVdy.js +576 -0
  521. package/dist/shared/hx-text-input-DTKWPVdy.js.map +1 -0
  522. package/dist/shared/{hx-textarea-BgX7rxyo.js → hx-textarea-BkSiU8oM.js} +15 -15
  523. package/dist/shared/hx-textarea-BkSiU8oM.js.map +1 -0
  524. package/dist/shared/hx-theme-Aag8QJvT.js +299 -0
  525. package/dist/shared/hx-theme-Aag8QJvT.js.map +1 -0
  526. package/dist/shared/{hx-time-picker-DmLu7WUC.js → hx-time-picker-BpCRsh_z.js} +54 -53
  527. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +1 -0
  528. package/dist/shared/{hx-toggle-button-D1jpDvSA.js → hx-toggle-button-CPFqs3eQ.js} +8 -5
  529. package/dist/shared/hx-toggle-button-CPFqs3eQ.js.map +1 -0
  530. package/dist/shared/{hx-tooltip-kh7QFPKu.js → hx-tooltip-CrO4vzeX.js} +15 -10
  531. package/dist/shared/hx-tooltip-CrO4vzeX.js.map +1 -0
  532. package/dist/shared/{hx-tree-item-BP6UF_H1.js → hx-tree-item-DTDIBRrI.js} +122 -89
  533. package/dist/shared/hx-tree-item-DTDIBRrI.js.map +1 -0
  534. package/dist/shared/id-counter-JhvVCnjh.js +143 -0
  535. package/dist/shared/id-counter-JhvVCnjh.js.map +1 -0
  536. package/dist/shared/{toast-factory-DTy-qN8r.js → toast-factory-f184Gi70.js} +57 -45
  537. package/dist/shared/toast-factory-f184Gi70.js.map +1 -0
  538. package/dist/utilities/adoptedStylesheetRegistry.d.ts +47 -0
  539. package/dist/utilities/adoptedStylesheetRegistry.d.ts.map +1 -0
  540. package/dist/utilities/generateScopedSelectors.d.ts +30 -0
  541. package/dist/utilities/generateScopedSelectors.d.ts.map +1 -0
  542. package/dist/utilities/injectLightStyles.d.ts +37 -0
  543. package/dist/utilities/injectLightStyles.d.ts.map +1 -0
  544. package/dist/utilities/lightStyleRegistry.d.ts +41 -0
  545. package/dist/utilities/lightStyleRegistry.d.ts.map +1 -0
  546. package/dist/utilities/sheetManager.d.ts +62 -0
  547. package/dist/utilities/sheetManager.d.ts.map +1 -0
  548. package/dist/utils/contrast-checker.d.ts +86 -0
  549. package/dist/utils/contrast-checker.d.ts.map +1 -0
  550. package/dist/utils/token-merger.d.ts +24 -0
  551. package/dist/utils/token-merger.d.ts.map +1 -0
  552. package/fouc.css +37 -0
  553. package/package.json +25 -5
  554. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +0 -1
  555. package/dist/shared/hx-alert-K5F8KeqI.js.map +0 -1
  556. package/dist/shared/hx-avatar-Cun-O99h.js.map +0 -1
  557. package/dist/shared/hx-badge-CsFd2xtw.js.map +0 -1
  558. package/dist/shared/hx-banner-BTV-X2xF.js.map +0 -1
  559. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +0 -1
  560. package/dist/shared/hx-button-7k-KeCYU.js.map +0 -1
  561. package/dist/shared/hx-button-group-CWjWv-wS.js.map +0 -1
  562. package/dist/shared/hx-card-0hT3G5hi.js.map +0 -1
  563. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +0 -1
  564. package/dist/shared/hx-checkbox-BvjO-O41.js.map +0 -1
  565. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +0 -1
  566. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +0 -1
  567. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +0 -1
  568. package/dist/shared/hx-combobox-CivfelTS.js.map +0 -1
  569. package/dist/shared/hx-container-DLUKnTi9.js.map +0 -1
  570. package/dist/shared/hx-copy-button--0dymSvw.js.map +0 -1
  571. package/dist/shared/hx-counter-Duf00H7p.js +0 -147
  572. package/dist/shared/hx-counter-Duf00H7p.js.map +0 -1
  573. package/dist/shared/hx-data-table-DujB9hSE.js.map +0 -1
  574. package/dist/shared/hx-date-picker-C8d2HtRV.js.map +0 -1
  575. package/dist/shared/hx-dialog-DkUSnVgw.js.map +0 -1
  576. package/dist/shared/hx-divider-DNNs4e8q.js.map +0 -1
  577. package/dist/shared/hx-drawer-CJcRZcns.js.map +0 -1
  578. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +0 -1
  579. package/dist/shared/hx-field-3MmzJ4kZ.js.map +0 -1
  580. package/dist/shared/hx-field-label-Bg-EWvqF.js.map +0 -1
  581. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +0 -1
  582. package/dist/shared/hx-format-date-BdnWV2kX.js.map +0 -1
  583. package/dist/shared/hx-grid-gEjuF0cR.js.map +0 -1
  584. package/dist/shared/hx-icon-CP6OnLoM.js.map +0 -1
  585. package/dist/shared/hx-image-C6pGiI6c.js.map +0 -1
  586. package/dist/shared/hx-link-Tmk_YPvW.js.map +0 -1
  587. package/dist/shared/hx-meter-uXkTZq-W.js.map +0 -1
  588. package/dist/shared/hx-nav-3JsN2Oak.js.map +0 -1
  589. package/dist/shared/hx-nav-item-D3EJatzc.js.map +0 -1
  590. package/dist/shared/hx-number-input-CAAibZ8X.js.map +0 -1
  591. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +0 -1
  592. package/dist/shared/hx-pagination-DBs-vmSv.js.map +0 -1
  593. package/dist/shared/hx-popover-DxE67miP.js.map +0 -1
  594. package/dist/shared/hx-popup-Dg6n_PbY.js.map +0 -1
  595. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +0 -1
  596. package/dist/shared/hx-radio-BywgVSEu.js.map +0 -1
  597. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +0 -1
  598. package/dist/shared/hx-select-BwDwxk-M.js.map +0 -1
  599. package/dist/shared/hx-slider-D_0EKJyk.js.map +0 -1
  600. package/dist/shared/hx-spinner-DMn4SChS.js.map +0 -1
  601. package/dist/shared/hx-split-button-CypgLXw1.js.map +0 -1
  602. package/dist/shared/hx-split-panel-BPMWKPGu.js.map +0 -1
  603. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +0 -1
  604. package/dist/shared/hx-step-BIVWSPxd.js.map +0 -1
  605. package/dist/shared/hx-structured-list-CMWllxGg.js.map +0 -1
  606. package/dist/shared/hx-switch-BgX8kuWt.js.map +0 -1
  607. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +0 -1
  608. package/dist/shared/hx-tag-CzOTDcXI.js.map +0 -1
  609. package/dist/shared/hx-td-h6oeW6YC.js.map +0 -1
  610. package/dist/shared/hx-text-DTXjiviE.js.map +0 -1
  611. package/dist/shared/hx-text-input-CqEdDHMU.js +0 -461
  612. package/dist/shared/hx-text-input-CqEdDHMU.js.map +0 -1
  613. package/dist/shared/hx-textarea-BgX7rxyo.js.map +0 -1
  614. package/dist/shared/hx-theme-6GDoUG8j.js +0 -176
  615. package/dist/shared/hx-theme-6GDoUG8j.js.map +0 -1
  616. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +0 -1
  617. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +0 -1
  618. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +0 -1
  619. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +0 -1
  620. package/dist/shared/toast-factory-DTy-qN8r.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { css as w, svg as S, LitElement as _, nothing as u, html as E } from "lit";
2
- import { property as h, customElement as $ } from "lit/decorators.js";
1
+ import { css as _, LitElement as E, nothing as y, html as $, svg as O } from "lit";
2
+ import { property as h, customElement as C } from "lit/decorators.js";
3
3
  import { classMap as D } from "lit/directives/class-map.js";
4
4
  import { tokenStyles as k } from "@helixui/tokens/lit";
5
- import { d as A } from "./dev-warn-YlwPHjtX.js";
6
- const L = w`
5
+ import { d as w } from "./dev-warn-YlwPHjtX.js";
6
+ const A = _`
7
7
  :host {
8
8
  display: block;
9
9
  font-family: var(--hx-font-family-sans, sans-serif);
@@ -13,7 +13,7 @@ const L = w`
13
13
  border-radius: var(--hx-accordion-border-radius, var(--hx-border-radius-md, 0.375rem));
14
14
  overflow: hidden;
15
15
  }
16
- `, I = w`
16
+ `, I = _`
17
17
  :host {
18
18
  display: block;
19
19
  }
@@ -73,8 +73,8 @@ const L = w`
73
73
 
74
74
  .icon {
75
75
  flex-shrink: 0;
76
- width: 1.25rem;
77
- height: 1.25rem;
76
+ width: var(--hx-accordion-icon-size, var(--hx-size-5, 1.25rem));
77
+ height: var(--hx-accordion-icon-size, var(--hx-size-5, 1.25rem));
78
78
  display: flex;
79
79
  align-items: center;
80
80
  justify-content: center;
@@ -115,7 +115,7 @@ const L = w`
115
115
 
116
116
  :host([disabled]) {
117
117
  pointer-events: none;
118
- opacity: 0.5;
118
+ opacity: var(--hx-opacity-disabled, 0.5);
119
119
  }
120
120
 
121
121
  /* ─── Reduced motion ─── */
@@ -134,12 +134,12 @@ const L = w`
134
134
  }
135
135
  }
136
136
  `;
137
- var O = Object.defineProperty, P = Object.getOwnPropertyDescriptor, p = (e, r, o, t) => {
138
- for (var n = t > 1 ? void 0 : t ? P(r, o) : r, i = e.length - 1, a; i >= 0; i--)
139
- (a = e[i]) && (n = (t ? a(r, o, n) : a(n)) || n);
140
- return t && n && O(r, o, n), n;
137
+ var L = Object.defineProperty, M = Object.getOwnPropertyDescriptor, p = (e, r, o, t) => {
138
+ for (var n = t > 1 ? void 0 : t ? M(r, o) : r, i = e.length - 1, s; i >= 0; i--)
139
+ (s = e[i]) && (n = (t ? s(r, o, n) : s(n)) || n);
140
+ return t && n && L(r, o, n), n;
141
141
  };
142
- const j = S`
142
+ const j = O`
143
143
  <svg
144
144
  xmlns="http://www.w3.org/2000/svg"
145
145
  width="16"
@@ -155,9 +155,18 @@ const j = S`
155
155
  <polyline points="6 9 12 15 18 9"></polyline>
156
156
  </svg>
157
157
  `;
158
- let s = class extends _ {
158
+ let a = class extends E {
159
159
  constructor() {
160
- super(...arguments), this._uid = `hx-accordion-item-${++s._counter}`, this.expanded = !1, this.disabled = !1, this.level = 3;
160
+ super(...arguments), this._uid = `hx-accordion-item-${++a._counter}`, this.expanded = !1, this.disabled = !1, this.level = 3;
161
+ }
162
+ // ─── Lifecycle ───
163
+ connectedCallback() {
164
+ super.connectedCallback(), this.closest("hx-accordion");
165
+ }
166
+ // ─── Slot Handlers ───
167
+ /** @internal */
168
+ _handleTriggerSlotChange(e) {
169
+ e.target.assignedNodes({ flatten: !0 }).length > 0;
161
170
  }
162
171
  // ─── Heading Level Helper ───
163
172
  /**
@@ -204,7 +213,7 @@ let s = class extends _ {
204
213
  "item--expanded": this.expanded,
205
214
  "item--disabled": this.disabled
206
215
  };
207
- return E`
216
+ return $`
208
217
  <details part="item" class=${D(e)} ?open=${this.expanded}>
209
218
  <summary
210
219
  id=${`${this._uid}-trigger`}
@@ -213,13 +222,13 @@ let s = class extends _ {
213
222
  role="heading"
214
223
  aria-level=${this._headingLevel}
215
224
  tabindex=${this.disabled ? "-1" : "0"}
216
- aria-expanded=${this.expanded ? "true" : u}
217
- aria-disabled=${this.disabled ? "true" : u}
225
+ aria-expanded=${this.expanded ? "true" : "false"}
226
+ aria-disabled=${this.disabled ? "true" : y}
218
227
  aria-controls=${`${this._uid}-content`}
219
228
  @click=${this._handleSummaryClick}
220
229
  @keydown=${this._handleKeyDown}
221
230
  >
222
- <slot name="trigger"></slot>
231
+ <slot name="trigger" @slotchange=${this._handleTriggerSlotChange}></slot>
223
232
  <span part="icon" class="icon">${j}</span>
224
233
  </summary>
225
234
  <div class="content-wrapper">
@@ -230,7 +239,7 @@ let s = class extends _ {
230
239
  class="content"
231
240
  role="region"
232
241
  aria-labelledby=${`${this._uid}-trigger`}
233
- aria-hidden=${this.expanded ? u : "true"}
242
+ aria-hidden=${this.expanded ? y : "true"}
234
243
  >
235
244
  <slot></slot>
236
245
  </div>
@@ -240,56 +249,56 @@ let s = class extends _ {
240
249
  `;
241
250
  }
242
251
  };
243
- s.styles = [k, I];
244
- s._counter = 0;
252
+ a.styles = [k, I];
253
+ a._counter = 0;
245
254
  p([
246
255
  h({ type: Boolean, reflect: !0 })
247
- ], s.prototype, "expanded", 2);
256
+ ], a.prototype, "expanded", 2);
248
257
  p([
249
258
  h({ type: Boolean, reflect: !0 })
250
- ], s.prototype, "disabled", 2);
259
+ ], a.prototype, "disabled", 2);
251
260
  p([
252
261
  h({ type: Number })
253
- ], s.prototype, "level", 2);
254
- s = p([
255
- $("hx-accordion-item")
256
- ], s);
257
- var q = Object.defineProperty, R = Object.getOwnPropertyDescriptor, C = (e, r, o, t) => {
258
- for (var n = t > 1 ? void 0 : t ? R(r, o) : r, i = e.length - 1, a; i >= 0; i--)
259
- (a = e[i]) && (n = (t ? a(r, o, n) : a(n)) || n);
260
- return t && n && q(r, o, n), n;
262
+ ], a.prototype, "level", 2);
263
+ a = p([
264
+ C("hx-accordion-item")
265
+ ], a);
266
+ var z = Object.defineProperty, N = Object.getOwnPropertyDescriptor, S = (e, r, o, t) => {
267
+ for (var n = t > 1 ? void 0 : t ? N(r, o) : r, i = e.length - 1, s; i >= 0; i--)
268
+ (s = e[i]) && (n = (t ? s(r, o, n) : s(n)) || n);
269
+ return t && n && z(r, o, n), n;
261
270
  };
262
- let c = class extends _ {
271
+ let c = class extends E {
263
272
  constructor() {
264
- super(...arguments), this.mode = "single", this._handleChildExpand = (e) => {
273
+ super(...arguments), this.mode = "single", this._mutationObserver = null, this._handleChildExpand = (e) => {
265
274
  if (this.mode !== "single") return;
266
275
  const r = e.composedPath()[0];
267
276
  this.querySelectorAll("hx-accordion-item").forEach((t) => {
268
277
  t !== r && t.expanded && (t.expanded = !1, t._dispatchToggleEvent(!1));
269
278
  });
270
279
  }, this._handleKeyDown = (e) => {
271
- var f, v, x, y;
280
+ var u, f, v, x;
272
281
  if (this._getTriggers().length === 0) return;
273
- const o = ((f = this.shadowRoot) == null ? void 0 : f.activeElement) ?? document.activeElement;
282
+ const o = ((u = this.shadowRoot) == null ? void 0 : u.activeElement) ?? document.activeElement;
274
283
  let t = null;
275
284
  const n = Array.from(this.querySelectorAll("hx-accordion-item"));
276
285
  for (const l of n) {
277
- const b = (v = l.shadowRoot) == null ? void 0 : v.querySelector('[part="trigger"]');
278
- if (b === o || ((x = l.shadowRoot) == null ? void 0 : x.activeElement) === b) {
286
+ const b = (f = l.shadowRoot) == null ? void 0 : f.querySelector('[part="trigger"]');
287
+ if (b === o || ((v = l.shadowRoot) == null ? void 0 : v.activeElement) === b) {
279
288
  t = l;
280
289
  break;
281
290
  }
282
291
  }
283
292
  if (!t) return;
284
- const i = n.filter((l) => !l.disabled), a = i.indexOf(t);
285
- if (a === -1) return;
293
+ const i = n.filter((l) => !l.disabled), s = i.indexOf(t);
294
+ if (s === -1) return;
286
295
  let d = -1;
287
296
  switch (e.key) {
288
297
  case "ArrowDown":
289
- d = (a + 1) % i.length;
298
+ d = (s + 1) % i.length;
290
299
  break;
291
300
  case "ArrowUp":
292
- d = (a - 1 + i.length) % i.length;
301
+ d = (s - 1 + i.length) % i.length;
293
302
  break;
294
303
  case "Home":
295
304
  d = 0;
@@ -301,20 +310,39 @@ let c = class extends _ {
301
310
  return;
302
311
  }
303
312
  e.preventDefault();
304
- const g = i[d], m = (y = g == null ? void 0 : g.shadowRoot) == null ? void 0 : y.querySelector('[part="trigger"]');
305
- m == null || m.focus();
313
+ const m = i[d], g = (x = m == null ? void 0 : m.shadowRoot) == null ? void 0 : x.querySelector('[part="trigger"]');
314
+ g == null || g.focus();
306
315
  };
307
316
  }
308
- // ─── Lifecycle ───
309
317
  connectedCallback() {
310
- super.connectedCallback(), this.addEventListener("hx-expand", this._handleChildExpand), this.addEventListener("keydown", this._handleKeyDown);
318
+ super.connectedCallback(), this.addEventListener("hx-expand", this._handleChildExpand), this.addEventListener("keydown", this._handleKeyDown), this._enforceSingleMode(), typeof MutationObserver < "u" && (this._mutationObserver = new MutationObserver((e) => {
319
+ e.some(
320
+ (o) => Array.from(o.addedNodes).some(
321
+ (t) => t instanceof Element && t.tagName.toLowerCase() === "hx-accordion-item"
322
+ )
323
+ ) && this._enforceSingleMode();
324
+ }), this._mutationObserver.observe(this, { childList: !0 }));
311
325
  }
312
326
  disconnectedCallback() {
313
- super.disconnectedCallback(), this.removeEventListener("hx-expand", this._handleChildExpand), this.removeEventListener("keydown", this._handleKeyDown);
327
+ var e;
328
+ super.disconnectedCallback(), this.removeEventListener("hx-expand", this._handleChildExpand), this.removeEventListener("keydown", this._handleKeyDown), (e = this._mutationObserver) == null || e.disconnect(), this._mutationObserver = null;
314
329
  }
315
330
  firstUpdated() {
316
331
  this._enforceSingleMode();
317
332
  }
333
+ updated(e) {
334
+ if (super.updated(e), e.has("mode")) {
335
+ const r = ["single", "multi"];
336
+ if (!r.includes(this.mode)) {
337
+ w(
338
+ "hx-accordion",
339
+ `Invalid mode "${this.mode}". Expected one of: ${r.join(", ")}. Clamping to "single".`
340
+ ), this.mode = "single";
341
+ return;
342
+ }
343
+ this._enforceSingleMode();
344
+ }
345
+ }
318
346
  // ─── Single-expand coordination ───
319
347
  /** @internal */
320
348
  _enforceSingleMode() {
@@ -340,29 +368,29 @@ let c = class extends _ {
340
368
  const r = e.target;
341
369
  if (!(r instanceof HTMLSlotElement)) return;
342
370
  const o = r.assignedElements().filter((t) => t.tagName.toLowerCase() !== "hx-accordion-item");
343
- o.length > 0 && A(
371
+ o.length > 0 && w(
344
372
  "hx-accordion",
345
373
  `Default slot expects <hx-accordion-item> elements. Found unexpected: ${o.map((t) => `<${t.tagName.toLowerCase()}>`).join(", ")}`
346
374
  );
347
375
  }
348
376
  // ─── Render ───
349
377
  render() {
350
- return E`
378
+ return $`
351
379
  <div part="accordion" class="accordion">
352
380
  <slot @slotchange=${this._handleSlotChange}></slot>
353
381
  </div>
354
382
  `;
355
383
  }
356
384
  };
357
- c.styles = [k, L];
358
- C([
385
+ c.styles = [k, A];
386
+ S([
359
387
  h({ type: String, reflect: !0 })
360
388
  ], c.prototype, "mode", 2);
361
- c = C([
362
- $("hx-accordion")
389
+ c = S([
390
+ C("hx-accordion")
363
391
  ], c);
364
392
  export {
365
393
  c as H,
366
- s as a
394
+ a
367
395
  };
368
- //# sourceMappingURL=hx-accordion-D1kFhdeQ.js.map
396
+ //# sourceMappingURL=hx-accordion-_KeulaQR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-accordion-_KeulaQR.js","sources":["../../src/components/hx-accordion/hx-accordion.styles.ts","../../src/components/hx-accordion/hx-accordion-item.styles.ts","../../src/components/hx-accordion/hx-accordion-item.ts","../../src/components/hx-accordion/hx-accordion.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixAccordionStyles = css`\n :host {\n display: block;\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n .accordion {\n border-radius: var(--hx-accordion-border-radius, var(--hx-border-radius-md, 0.375rem));\n overflow: hidden;\n }\n`;\n","import { css } from 'lit';\n\nexport const helixAccordionItemStyles = css`\n :host {\n display: block;\n }\n\n .item {\n border-bottom: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n :host(:first-child) .item {\n border-top: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n }\n\n /* Remove native details marker */\n .trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--hx-space-3, 0.75rem);\n padding: var(--hx-accordion-trigger-padding, var(--hx-space-4, 1rem));\n cursor: pointer;\n list-style: none;\n font-size: var(--hx-font-size-md, 1rem);\n font-weight: var(--hx-font-weight-semibold, 600);\n color: var(--hx-accordion-trigger-color, var(--hx-color-neutral-800, #212529));\n background-color: var(--hx-accordion-trigger-bg, transparent);\n user-select: none;\n transition: background-color var(--hx-transition-fast, 150ms ease);\n }\n\n /* Hide the native details disclosure triangle */\n .trigger::-webkit-details-marker {\n display: none;\n }\n\n .trigger::marker {\n display: none;\n }\n\n .item--disabled .trigger {\n cursor: not-allowed;\n }\n\n :host(:not([disabled])) .trigger:hover {\n background-color: var(--hx-accordion-trigger-hover-bg, var(--hx-color-neutral-50, #f8f9fa));\n }\n\n .trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, -2px);\n }\n\n /* ─── Icon ─── */\n\n .icon {\n flex-shrink: 0;\n width: var(--hx-accordion-icon-size, var(--hx-size-5, 1.25rem));\n height: var(--hx-accordion-icon-size, var(--hx-size-5, 1.25rem));\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--hx-accordion-icon-color, var(--hx-color-neutral-500, #6c757d));\n transition: transform var(--hx-transition-normal, 250ms ease);\n }\n\n .item--expanded .icon {\n transform: rotate(180deg);\n }\n\n /* ─── Content animation via CSS grid trick ─── */\n\n .content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--hx-transition-normal, 250ms ease);\n overflow: hidden;\n }\n\n .item--expanded .content-wrapper,\n details[open]:not(.item--expanded) .content-wrapper {\n grid-template-rows: 1fr;\n }\n\n .content-inner {\n overflow: hidden;\n }\n\n .content {\n padding: var(--hx-accordion-content-padding, 0 var(--hx-space-4, 1rem) var(--hx-space-4, 1rem));\n font-size: var(--hx-font-size-md, 1rem);\n line-height: var(--hx-line-height-normal, 1.5);\n color: var(--hx-accordion-content-color, var(--hx-color-neutral-600, #495057));\n }\n\n /* ─── Disabled host ─── */\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--hx-opacity-disabled, 0.5);\n }\n\n /* ─── Reduced motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .trigger {\n transition: none;\n }\n\n .icon {\n transition: none;\n }\n\n .content-wrapper {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, svg, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionItemStyles } from './hx-accordion-item.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\nconst chevronIcon = svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n`;\n\n/**\n * An individual accordion item with collapsible content.\n *\n * @summary Collapsible panel that can be expanded or collapsed.\n *\n * @tag hx-accordion-item\n *\n * @slot trigger - The heading/trigger content for this item.\n * @slot - Default slot for the collapsible body content.\n *\n * @attr {number} level - Heading level (1–6) for the trigger via `role=\"heading\" aria-level`.\n * Defaults to 3. Set this to match the document outline — e.g., use `level=\"2\"` when the\n * accordion appears under an `<h1>` landmark.\n *\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-expand - Dispatched when the item is expanded.\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-collapse - Dispatched when the item is collapsed.\n *\n * @csspart item - The outer details element container.\n * @csspart trigger - The summary/trigger element.\n * @csspart content - The collapsible content area.\n * @csspart icon - The expand/collapse icon.\n *\n * @cssprop [--hx-accordion-border-color=var(--hx-color-neutral-200)] - Border color between items.\n * @cssprop [--hx-accordion-trigger-padding=var(--hx-space-4)] - Trigger padding.\n * @cssprop [--hx-accordion-trigger-color=var(--hx-color-neutral-800)] - Trigger text color.\n * @cssprop [--hx-accordion-trigger-bg=transparent] - Trigger background color.\n * @cssprop [--hx-accordion-trigger-hover-bg=var(--hx-color-neutral-50)] - Trigger hover background.\n * @cssprop [--hx-accordion-icon-color=var(--hx-color-neutral-500)] - Icon color.\n * @cssprop [--hx-accordion-content-padding=0 var(--hx-space-4) var(--hx-space-4)] - Content padding.\n * @cssprop [--hx-accordion-content-color=var(--hx-color-neutral-600)] - Content text color.\n */\n@customElement('hx-accordion-item')\nexport class HelixAccordionItem extends LitElement {\n static override styles = [tokenStyles, helixAccordionItemStyles];\n\n /** @internal */\n private static _counter = 0;\n /** @internal */\n private _uid = `hx-accordion-item-${++HelixAccordionItem._counter}`;\n\n /**\n * Whether this item is expanded.\n * @attr expanded\n */\n @property({ type: Boolean, reflect: true })\n expanded = false;\n\n /**\n * Whether this item is disabled (cannot be toggled).\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Heading level (1–6) applied via `role=\"heading\" aria-level` on the summary\n * trigger. Defaults to 3. Set to match the document outline around the\n * accordion so screen readers surface accordion items in the heading list.\n * @attr level\n */\n @property({ type: Number })\n level: 1 | 2 | 3 | 4 | 5 | 6 = 3;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.closest('hx-accordion')) {\n devWarn(\n 'hx-accordion-item',\n 'Used outside hx-accordion. Single-expand coordination will not function.',\n );\n }\n }\n\n // ─── Slot Handlers ───\n\n /** @internal */\n private _handleTriggerSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes({ flatten: true }).length > 0;\n if (!hasContent) {\n devWarn(\n 'hx-accordion-item',\n 'trigger slot is empty — provide a visible label for keyboard and screen reader users.',\n );\n }\n }\n\n // ─── Heading Level Helper ───\n\n /**\n * Returns a clamped heading level (1–6) for use as `aria-level` on the\n * `<summary>` element. Per the WAI-ARIA APG Accordion pattern, the\n * `<summary>` must be a **direct child** of `<details>` for native\n * disclosure behaviour to work. Instead of wrapping `<summary>` inside\n * an `<h3>` (which breaks the native toggle), we apply\n * `role=\"heading\" aria-level=\"N\"` directly on `<summary>`.\n */\n /** @internal */\n private get _headingLevel(): number {\n return Math.max(1, Math.min(6, this.level));\n }\n\n // ─── Toggle Logic ───\n\n /** @internal */\n private _toggle(): void {\n if (this.disabled) return;\n\n const willExpand = !this.expanded;\n this.expanded = willExpand;\n\n this._dispatchToggleEvent(willExpand);\n }\n\n /** @internal */\n _dispatchToggleEvent(expanded: boolean): void {\n const detail = { expanded, itemId: this.id || '' };\n const options = { bubbles: true, composed: true, detail };\n\n if (expanded) {\n this.dispatchEvent(\n new CustomEvent<{ expanded: boolean; itemId: string }>('hx-expand', options),\n );\n } else {\n this.dispatchEvent(\n new CustomEvent<{ expanded: boolean; itemId: string }>('hx-collapse', options),\n );\n }\n }\n\n // ─── Event Handlers ───\n\n /** @internal */\n private _handleSummaryClick(e: MouseEvent): void {\n e.preventDefault();\n this._toggle();\n }\n\n /** @internal */\n private _handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._toggle();\n }\n }\n\n // ─── Render ───\n\n override render() {\n const itemClasses = {\n item: true,\n 'item--expanded': this.expanded,\n 'item--disabled': this.disabled,\n };\n\n return html`\n <details part=\"item\" class=${classMap(itemClasses)} ?open=${this.expanded}>\n <summary\n id=${`${this._uid}-trigger`}\n part=\"trigger\"\n class=\"trigger\"\n role=\"heading\"\n aria-level=${this._headingLevel}\n tabindex=${this.disabled ? '-1' : '0'}\n aria-expanded=${this.expanded ? 'true' : 'false'}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-controls=${`${this._uid}-content`}\n @click=${this._handleSummaryClick}\n @keydown=${this._handleKeyDown}\n >\n <slot name=\"trigger\" @slotchange=${this._handleTriggerSlotChange}></slot>\n <span part=\"icon\" class=\"icon\">${chevronIcon}</span>\n </summary>\n <div class=\"content-wrapper\">\n <div class=\"content-inner\">\n <div\n id=${`${this._uid}-content`}\n part=\"content\"\n class=\"content\"\n role=\"region\"\n aria-labelledby=${`${this._uid}-trigger`}\n aria-hidden=${this.expanded ? nothing : 'true'}\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </details>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion-item': HelixAccordionItem;\n }\n}\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionStyles } from './hx-accordion.styles.js';\nimport './hx-accordion-item.js';\nimport type { HelixAccordionItem } from './hx-accordion-item.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n/**\n * An accordion container that manages collapsible content sections.\n *\n * @summary Collapsible content sections with single or multi-expand modes.\n *\n * @tag hx-accordion\n *\n * @slot - Default slot for hx-accordion-item elements.\n *\n * @csspart accordion - The outer container wrapping all accordion items.\n *\n * @cssprop [--hx-accordion-border-radius=var(--hx-border-radius-md)] - Outer border radius.\n *\n * @example\n * ```html\n * <hx-accordion mode=\"single\">\n * <hx-accordion-item>\n * <span slot=\"trigger\">What is this?</span>\n * <p>Answer content here.</p>\n * </hx-accordion-item>\n * </hx-accordion>\n * ```\n */\n@customElement('hx-accordion')\nexport class HelixAccordion extends LitElement {\n static override styles = [tokenStyles, helixAccordionStyles];\n\n /**\n * Expansion mode: 'single' collapses all other items when one expands.\n * 'multi' allows multiple items open simultaneously.\n * @attr mode\n */\n @property({ type: String, reflect: true })\n mode: 'single' | 'multi' = 'single';\n\n // ─── Lifecycle ───\n\n /** @internal */\n private _mutationObserver: MutationObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('hx-expand', this._handleChildExpand);\n this.addEventListener('keydown', this._handleKeyDown);\n // Re-enforce single mode when reconnected with pre-expanded items\n this._enforceSingleMode();\n // Watch for dynamically added accordion items that may violate single-expand\n if (typeof MutationObserver !== 'undefined') {\n this._mutationObserver = new MutationObserver((mutations) => {\n const hasNewItems = mutations.some((m) =>\n Array.from(m.addedNodes).some(\n (n) => n instanceof Element && n.tagName.toLowerCase() === 'hx-accordion-item',\n ),\n );\n if (hasNewItems) {\n this._enforceSingleMode();\n }\n });\n this._mutationObserver.observe(this, { childList: true });\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('hx-expand', this._handleChildExpand);\n this.removeEventListener('keydown', this._handleKeyDown);\n this._mutationObserver?.disconnect();\n this._mutationObserver = null;\n }\n\n protected override firstUpdated(): void {\n this._enforceSingleMode();\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n if (changedProperties.has('mode')) {\n const validModes: string[] = ['single', 'multi'];\n if (!validModes.includes(this.mode)) {\n devWarn(\n 'hx-accordion',\n `Invalid mode \"${this.mode}\". Expected one of: ${validModes.join(', ')}. Clamping to \"single\".`,\n );\n this.mode = 'single';\n return;\n }\n // When switching from multi to single, enforce single-expand immediately\n this._enforceSingleMode();\n }\n }\n\n // ─── Single-expand coordination ───\n\n /** @internal */\n private _enforceSingleMode(): void {\n if (this.mode !== 'single') return;\n\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n let foundExpanded = false;\n\n items.forEach((item) => {\n if (item.expanded) {\n if (foundExpanded) {\n item.expanded = false;\n } else {\n foundExpanded = true;\n }\n }\n });\n }\n\n /**\n * Handles expand events from child accordion items to enforce single-expand mode.\n * @internal\n */\n private _handleChildExpand = (e: Event): void => {\n if (this.mode !== 'single') return;\n\n const expandedItem = e.composedPath()[0] as HelixAccordionItem;\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n\n items.forEach((item) => {\n if (item !== expandedItem && item.expanded) {\n item.expanded = false;\n item._dispatchToggleEvent(false);\n }\n });\n };\n\n // ─── Arrow key navigation (ARIA APG Accordion pattern) ───\n\n /**\n * Handles keyboard navigation between accordion triggers using arrow, Home, and End keys.\n * @internal\n */\n private _handleKeyDown = (e: KeyboardEvent): void => {\n const triggers = this._getTriggers();\n if (triggers.length === 0) return;\n\n const activeEl = this.shadowRoot?.activeElement ?? document.activeElement;\n let currentItem: HelixAccordionItem | null = null;\n\n const items = Array.from(this.querySelectorAll<HelixAccordionItem>('hx-accordion-item'));\n for (const item of items) {\n const summary = item.shadowRoot?.querySelector('[part=\"trigger\"]');\n if (summary === activeEl || item.shadowRoot?.activeElement === summary) {\n currentItem = item;\n break;\n }\n }\n\n if (!currentItem) return;\n\n const enabledItems = items.filter((item) => !item.disabled);\n const currentIndex = enabledItems.indexOf(currentItem);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n\n switch (e.key) {\n case 'ArrowDown':\n targetIndex = (currentIndex + 1) % enabledItems.length;\n break;\n case 'ArrowUp':\n targetIndex = (currentIndex - 1 + enabledItems.length) % enabledItems.length;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = enabledItems.length - 1;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n const targetItem = enabledItems[targetIndex];\n const targetSummary = targetItem?.shadowRoot?.querySelector<HTMLElement>('[part=\"trigger\"]');\n targetSummary?.focus();\n };\n\n /** @internal */\n private _getTriggers(): HTMLElement[] {\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n const triggers: HTMLElement[] = [];\n items.forEach((item) => {\n const summary = item.shadowRoot?.querySelector<HTMLElement>('[part=\"trigger\"]');\n if (summary) triggers.push(summary);\n });\n return triggers;\n }\n\n // ─── Slot validation ───\n\n /** @internal */\n private _handleSlotChange(e: Event): void {\n const slot = e.target;\n if (!(slot instanceof HTMLSlotElement)) return;\n const invalid = slot\n .assignedElements()\n .filter((el) => el.tagName.toLowerCase() !== 'hx-accordion-item');\n if (invalid.length > 0) {\n devWarn(\n 'hx-accordion',\n `Default slot expects <hx-accordion-item> elements. Found unexpected: ${invalid.map((el) => `<${el.tagName.toLowerCase()}>`).join(', ')}`,\n );\n }\n }\n\n // ─── Render ───\n\n override render() {\n return html`\n <div part=\"accordion\" class=\"accordion\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion': HelixAccordion;\n }\n}\n"],"names":["helixAccordionStyles","css","helixAccordionItemStyles","chevronIcon","svg","HelixAccordionItem","LitElement","willExpand","expanded","options","itemClasses","html","classMap","nothing","tokenStyles","__decorateClass","property","customElement","HelixAccordion","expandedItem","item","activeEl","_a","currentItem","items","summary","_b","_c","enabledItems","currentIndex","targetIndex","targetItem","targetSummary","_d","mutations","m","n","changedProperties","validModes","devWarn","foundExpanded","triggers","slot","invalid","el"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hx-action-bar-D4bulGQP.js","sources":["../../src/components/hx-action-bar/hx-action-bar.styles.ts","../../src/components/hx-action-bar/hx-action-bar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixActionBarStyles = css`\n :host {\n display: block;\n }\n\n /* ─── Base ─── */\n\n .base {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--hx-action-bar-gap, var(--hx-space-2, 0.5rem));\n padding: var(--hx-action-bar-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n background: var(--hx-action-bar-bg, transparent);\n border: var(--hx-action-bar-border, none);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* ─── Sticky (top) ─── */\n\n .base--sticky {\n position: sticky;\n top: 0;\n padding-top: max(var(--hx-action-bar-padding-block-start, 0px), env(safe-area-inset-top, 0px));\n z-index: var(--hx-action-bar-z-index, 10);\n /*\n * Consumers: when this bar is sticky, add scroll-padding-top to the scroll container\n * equal to the bar's rendered height so anchor targets are not hidden behind the bar.\n * Example: .scroll-container { scroll-padding-top: 2.5rem; }\n */\n }\n\n /* ─── Bottom sticky ─── */\n\n .base--bottom {\n position: sticky;\n bottom: 0;\n /*\n * Respect iOS home-indicator safe area on devices with notch/home bar.\n * Falls back to 0px on devices that do not support env().\n */\n padding-bottom: max(\n var(--hx-action-bar-padding-block-end, 0px),\n env(safe-area-inset-bottom, 0px)\n );\n z-index: var(--hx-action-bar-z-index, 10);\n }\n\n /* ─── Variant: outlined ─── */\n\n .base--outlined {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #fff));\n border: var(\n --hx-action-bar-border,\n var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb)\n );\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Variant: filled ─── */\n\n .base--filled {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f9fafb));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Size modifiers ─── */\n\n .base--sm {\n padding: var(--hx-action-bar-padding, var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-1, 0.25rem));\n min-height: var(--hx-size-8, 2rem);\n }\n\n .base--md {\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .base--lg {\n padding: var(--hx-action-bar-padding, var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-3, 0.75rem));\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Sections ─── */\n\n .section {\n display: flex;\n align-items: center;\n gap: inherit;\n }\n\n /*\n * Equal flex-basis on start and end guarantees the center section is visually centered\n * within the full bar width, regardless of how wide start and end content are.\n */\n .section--start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n .section--center {\n flex: 0 0 auto;\n justify-content: center;\n }\n\n .section--end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n\n /* ─── Slotted content ─── */\n\n ::slotted(*) {\n flex-shrink: 0;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixActionBarStyles } from './hx-action-bar.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n// Re-export size type for external consumers.\nexport type ActionBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * A horizontal toolbar container for grouping related action buttons and controls.\n * Implements the ARIA toolbar pattern with roving tabindex keyboard navigation.\n *\n * @summary Horizontal action bar for grouping related controls.\n *\n * @tag hx-action-bar\n *\n * @slot start - Left-aligned actions.\n * @slot - Center content (default slot).\n * @slot end - Right-aligned actions.\n * @slot overflow - Actions revealed when the bar is constrained for space.\n *\n * @csspart base - The root toolbar container element.\n * @csspart start - The start (left) slot wrapper.\n * @csspart center - The center (default) slot wrapper.\n * @csspart end - The end (right) slot wrapper.\n * @csspart overflow - The overflow slot wrapper (hidden when no overflow content).\n *\n * @cssprop [--hx-action-bar-bg=transparent] - Bar background color (default variant).\n * @cssprop [--hx-action-bar-border=none] - Bar border (default variant).\n * @cssprop [--hx-action-bar-padding=var(--hx-space-2,0.5rem) var(--hx-space-3,0.75rem)] - Inner padding.\n * @cssprop [--hx-action-bar-gap=var(--hx-space-2,0.5rem)] - Gap between slotted items.\n * @cssprop [--hx-action-bar-z-index=10] - Z-index when sticky or bottom position.\n *\n * @attr {string} aria-label - Required. Identifies the toolbar to assistive technology.\n * When multiple toolbars appear on the same page, each must have a unique, descriptive label.\n *\n * @example\n * ```html\n * <hx-action-bar aria-label=\"Patient actions\">\n * <hx-button slot=\"start\">Save</hx-button>\n * <hx-button slot=\"end\" variant=\"ghost\">Cancel</hx-button>\n * </hx-action-bar>\n * ```\n */\n@customElement('hx-action-bar')\nexport class HelixActionBar extends LitElement {\n static override styles = [tokenStyles, helixActionBarStyles];\n\n /**\n * Size of the action bar — propagated as a data attribute to slotted children.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: ActionBarSize = 'md';\n\n /**\n * Visual variant controlling the bar background.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'default' | 'outlined' | 'filled' = 'default';\n\n /**\n * Position and sticky behavior of the action bar.\n * - `top` — normal flow (default)\n * - `sticky` — sticks to the top of the scroll container; add `scroll-padding-top` to the\n * scroll container equal to the bar height to prevent anchor targets from scrolling behind it\n * - `bottom` — sticks to the bottom of the scroll container with iOS safe-area-inset support\n * @attr position\n */\n @property({ type: String, reflect: true })\n position: 'top' | 'bottom' | 'sticky' = 'top';\n\n /**\n * @deprecated Use `position=\"sticky\"` instead.\n * When true, the bar sticks to the top of its scroll container.\n * @attr sticky\n */\n @property({ type: Boolean, reflect: true })\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(value: boolean) {\n if (value) {\n devWarn(\n 'hx-action-bar',\n 'The `sticky` property is deprecated. Use `position=\"sticky\"` instead.',\n );\n }\n const old = this._sticky;\n this._sticky = value;\n this.requestUpdate('sticky', old);\n }\n /** @internal */\n private _sticky = false;\n\n /**\n * Accessible label for the toolbar.\n * Required when multiple toolbars appear on the same page.\n * @attr aria-label\n */\n @property({ attribute: 'aria-label' })\n ariaLabel: string = 'Actions';\n\n /** Cached list of focusable items — invalidated on slot change. */\n /** @internal */\n private _focusableCache: HTMLElement[] | null = null;\n\n /** Whether the overflow slot has assigned content. * @internal\n */\n @state()\n private _hasOverflow = false;\n\n // ─── Lifecycle ───\n\n /** Arrow function field — stable reference for add/removeEventListener. */\n /** @internal */\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._moveFocus('next');\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._moveFocus('prev');\n } else if (e.key === 'Home') {\n e.preventDefault();\n // Move directly to first item — do NOT call _moveFocus which would visit other items first.\n const items = this._getFocusableItems();\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n items[0]?.focus();\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n const items = this._getFocusableItems();\n const last = items.length - 1;\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === last ? '0' : '-1'));\n items[last]?.focus();\n }\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Backward compat: accept legacy `size` attribute. When present and `hx-size`\n // is not set, map the value and emit a deprecation warning.\n const legacySize = this.getAttribute('size');\n if (legacySize !== null && !this.hasAttribute('hx-size')) {\n devWarn('hx-action-bar', 'The \"size\" attribute is deprecated. Use \"hx-size\" instead.');\n this.size = legacySize as ActionBarSize;\n }\n // Prevent dual aria-label announcement: the host carries the consumer's\n // aria-label attribute while the inner div[role=\"toolbar\"] receives the\n // same value. Setting role=\"none\" on the host hides it from the\n // accessibility tree so only the toolbar is announced.\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'none');\n } else if (this.getAttribute('role') !== 'none') {\n devWarn(\n 'hx-action-bar',\n `Setting role=\"${this.getAttribute('role')}\" on the host creates a duplicate toolbar announcement. ` +\n 'The shadow DOM already contains role=\"toolbar\". Set role=\"none\" on the host to suppress it.',\n );\n }\n this.addEventListener('keydown', this._handleKeydown);\n }\n\n override firstUpdated(): void {\n // Slot assignments are complete by firstUpdated; initialize roving tabindex\n // immediately rather than waiting for the async slotchange event.\n this._initRovingTabindex();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeydown);\n }\n\n // ─── Focusable item discovery ───\n\n /** @internal */\n private _isFocusable(el: HTMLElement): boolean {\n // Check disabled via DOM attribute (native elements) or property (custom elements)\n if (el.hasAttribute('disabled')) return false;\n const elWithDisabled = el as HTMLElement & { disabled?: boolean };\n if (elWithDisabled.disabled === true) return false;\n\n // Use the IDL tabIndex property — covers both DOM attribute and ElementInternals settings.\n // Custom elements (e.g. hx-button) that set tabIndex via ElementInternals are discoverable.\n if (el.tabIndex >= 0) return true;\n\n const tag = el.tagName.toLowerCase();\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n }\n\n /** @internal */\n private _getFocusableItems(): HTMLElement[] {\n if (this._focusableCache) return this._focusableCache;\n\n const slots = this.shadowRoot?.querySelectorAll('slot') ?? [];\n const items: HTMLElement[] = [];\n\n for (const slot of Array.from(slots)) {\n const assigned = (slot as HTMLSlotElement).assignedElements({ flatten: true });\n for (const el of assigned) {\n if (!(el instanceof HTMLElement)) continue;\n if (this._isFocusable(el)) {\n // Element is itself focusable — include it and do NOT also recurse into its children\n // to prevent double-counting compound components (e.g. <a><button>).\n items.push(el);\n } else {\n // Element is a non-focusable wrapper (e.g. <div>, <span>) — find focusable children.\n const descendants = el.querySelectorAll<HTMLElement>('*');\n for (const d of Array.from(descendants)) {\n if (this._isFocusable(d)) {\n items.push(d);\n }\n }\n }\n }\n }\n\n this._focusableCache = items;\n return items;\n }\n\n // ─── Roving tabindex helpers ───\n\n /** @internal */\n private _initRovingTabindex(): void {\n this._focusableCache = null; // invalidate cache on slot change\n const items = this._getFocusableItems();\n if (!items.length) return;\n const hasActive = items.some((el) => el.getAttribute('tabindex') === '0');\n if (!hasActive) {\n // No item is active yet — make the first item tabbable.\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n } else {\n // An item is already active — ensure new items get tabindex=\"-1\"\n // without disturbing the currently active item.\n items.forEach((el) => {\n if (el.getAttribute('tabindex') === null) el.setAttribute('tabindex', '-1');\n });\n }\n }\n\n /** @internal */\n private _moveFocus(direction: 'next' | 'prev'): void {\n const items = this._getFocusableItems();\n if (!items.length) return;\n\n const focused = document.activeElement as HTMLElement | null;\n const currentIndex = items.indexOf(focused as HTMLElement);\n\n let nextIndex: number;\n if (direction === 'next') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n }\n\n items.forEach((el, i) => {\n el.setAttribute('tabindex', i === nextIndex ? '0' : '-1');\n });\n\n items[nextIndex]?.focus();\n }\n\n // ─── Event Handlers ───\n\n /** @internal */\n private _handleSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n if (slot.name === 'overflow') {\n this._hasOverflow = slot.assignedElements({ flatten: true }).length > 0;\n }\n this._initRovingTabindex();\n }\n\n // ─── Render ───\n\n override render() {\n const isSticky = this.position === 'sticky' || this.sticky;\n const isBottom = this.position === 'bottom';\n const positionClass = isSticky ? ' base--sticky' : isBottom ? ' base--bottom' : '';\n\n return html`\n <div\n part=\"base\"\n role=\"toolbar\"\n aria-label=${this.ariaLabel}\n aria-orientation=\"horizontal\"\n class=\"base base--${this.size} base--${this.variant}${positionClass}\"\n >\n <div part=\"start\" class=\"section section--start\">\n <slot name=\"start\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"center\" class=\"section section--center\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"end\" class=\"section section--end\">\n <slot name=\"end\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"overflow\" class=\"section section--overflow\" ?hidden=${!this._hasOverflow}>\n <slot name=\"overflow\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-action-bar': HelixActionBar;\n }\n}\n"],"names":["helixActionBarStyles","css","HelixActionBar","LitElement","e","items","el","i","_a","last","_b","value","old","legacySize","devWarn","tag","slots","slot","assigned","descendants","d","direction","focused","currentIndex","nextIndex","isSticky","isBottom","positionClass","html","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"hx-action-bar-D4bulGQP.js","sources":["../../src/components/hx-action-bar/hx-action-bar.styles.ts","../../src/components/hx-action-bar/hx-action-bar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixActionBarStyles = css`\n :host {\n display: block;\n }\n\n /* ─── Base ─── */\n\n .base {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--hx-action-bar-gap, var(--hx-space-2, 0.5rem));\n padding: var(--hx-action-bar-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n background: var(--hx-action-bar-bg, transparent);\n border: var(--hx-action-bar-border, none);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* ─── Sticky (top) ─── */\n\n .base--sticky {\n position: sticky;\n top: 0;\n padding-top: max(var(--hx-action-bar-padding-block-start, 0px), env(safe-area-inset-top, 0px));\n z-index: var(--hx-action-bar-z-index, 10);\n /*\n * Consumers: when this bar is sticky, add scroll-padding-top to the scroll container\n * equal to the bar's rendered height so anchor targets are not hidden behind the bar.\n * Example: .scroll-container { scroll-padding-top: 2.5rem; }\n */\n }\n\n /* ─── Bottom sticky ─── */\n\n .base--bottom {\n position: sticky;\n bottom: 0;\n /*\n * Respect iOS home-indicator safe area on devices with notch/home bar.\n * Falls back to 0px on devices that do not support env().\n */\n padding-bottom: max(\n var(--hx-action-bar-padding-block-end, 0px),\n env(safe-area-inset-bottom, 0px)\n );\n z-index: var(--hx-action-bar-z-index, 10);\n }\n\n /* ─── Variant: outlined ─── */\n\n .base--outlined {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #fff));\n border: var(\n --hx-action-bar-border,\n var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb)\n );\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Variant: filled ─── */\n\n .base--filled {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f9fafb));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Size modifiers ─── */\n\n .base--sm {\n padding: var(--hx-action-bar-padding, var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-1, 0.25rem));\n min-height: var(--hx-size-8, 2rem);\n }\n\n .base--md {\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .base--lg {\n padding: var(--hx-action-bar-padding, var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-3, 0.75rem));\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Sections ─── */\n\n .section {\n display: flex;\n align-items: center;\n gap: inherit;\n }\n\n /*\n * Equal flex-basis on start and end guarantees the center section is visually centered\n * within the full bar width, regardless of how wide start and end content are.\n */\n .section--start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n .section--center {\n flex: 0 0 auto;\n justify-content: center;\n }\n\n .section--end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n\n /* ─── Slotted content ─── */\n\n ::slotted(*) {\n flex-shrink: 0;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixActionBarStyles } from './hx-action-bar.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n// Re-export size type for external consumers.\nexport type ActionBarSize = 'sm' | 'md' | 'lg';\n\n/**\n * A horizontal toolbar container for grouping related action buttons and controls.\n * Implements the ARIA toolbar pattern with roving tabindex keyboard navigation.\n *\n * @summary Horizontal action bar for grouping related controls.\n *\n * @tag hx-action-bar\n *\n * @slot start - Left-aligned actions.\n * @slot - Center content (default slot).\n * @slot end - Right-aligned actions.\n * @slot overflow - Actions revealed when the bar is constrained for space.\n *\n * @csspart base - The root toolbar container element.\n * @csspart start - The start (left) slot wrapper.\n * @csspart center - The center (default) slot wrapper.\n * @csspart end - The end (right) slot wrapper.\n * @csspart overflow - The overflow slot wrapper (hidden when no overflow content).\n *\n * @cssprop [--hx-action-bar-bg=transparent] - Bar background color (default variant).\n * @cssprop [--hx-action-bar-border=none] - Bar border (default variant).\n * @cssprop [--hx-action-bar-padding=var(--hx-space-2,0.5rem) var(--hx-space-3,0.75rem)] - Inner padding.\n * @cssprop [--hx-action-bar-gap=var(--hx-space-2,0.5rem)] - Gap between slotted items.\n * @cssprop [--hx-action-bar-z-index=10] - Z-index when sticky or bottom position.\n *\n * @attr {string} aria-label - Required. Identifies the toolbar to assistive technology.\n * When multiple toolbars appear on the same page, each must have a unique, descriptive label.\n *\n * @example\n * ```html\n * <hx-action-bar aria-label=\"Patient actions\">\n * <hx-button slot=\"start\">Save</hx-button>\n * <hx-button slot=\"end\" variant=\"ghost\">Cancel</hx-button>\n * </hx-action-bar>\n * ```\n */\n@customElement('hx-action-bar')\nexport class HelixActionBar extends LitElement {\n static override styles = [tokenStyles, helixActionBarStyles];\n\n /**\n * Size of the action bar — propagated as a data attribute to slotted children.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Visual variant controlling the bar background.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'default' | 'outlined' | 'filled' = 'default';\n\n /**\n * Position and sticky behavior of the action bar.\n * - `top` — normal flow (default)\n * - `sticky` — sticks to the top of the scroll container; add `scroll-padding-top` to the\n * scroll container equal to the bar height to prevent anchor targets from scrolling behind it\n * - `bottom` — sticks to the bottom of the scroll container with iOS safe-area-inset support\n * @attr position\n */\n @property({ type: String, reflect: true })\n position: 'top' | 'bottom' | 'sticky' = 'top';\n\n /**\n * @deprecated Use `position=\"sticky\"` instead.\n * When true, the bar sticks to the top of its scroll container.\n * @attr sticky\n */\n @property({ type: Boolean, reflect: true })\n get sticky(): boolean {\n return this._sticky;\n }\n set sticky(value: boolean) {\n if (value) {\n devWarn(\n 'hx-action-bar',\n 'The `sticky` property is deprecated. Use `position=\"sticky\"` instead.',\n );\n }\n const old = this._sticky;\n this._sticky = value;\n this.requestUpdate('sticky', old);\n }\n /** @internal */\n private _sticky = false;\n\n /**\n * Accessible label for the toolbar.\n * Required when multiple toolbars appear on the same page.\n * @attr aria-label\n */\n @property({ attribute: 'aria-label' })\n ariaLabel: string = 'Actions';\n\n /** Cached list of focusable items — invalidated on slot change. */\n /** @internal */\n private _focusableCache: HTMLElement[] | null = null;\n\n /** Whether the overflow slot has assigned content. * @internal\n */\n @state()\n private _hasOverflow = false;\n\n // ─── Lifecycle ───\n\n /** Arrow function field — stable reference for add/removeEventListener. */\n /** @internal */\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._moveFocus('next');\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._moveFocus('prev');\n } else if (e.key === 'Home') {\n e.preventDefault();\n // Move directly to first item — do NOT call _moveFocus which would visit other items first.\n const items = this._getFocusableItems();\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n items[0]?.focus();\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n const items = this._getFocusableItems();\n const last = items.length - 1;\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === last ? '0' : '-1'));\n items[last]?.focus();\n }\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Backward compat: accept legacy `size` attribute. When present and `hx-size`\n // is not set, map the value and emit a deprecation warning.\n const legacySize = this.getAttribute('size');\n if (legacySize !== null && !this.hasAttribute('hx-size')) {\n devWarn('hx-action-bar', 'The \"size\" attribute is deprecated. Use \"hx-size\" instead.');\n this.size = legacySize as ActionBarSize;\n }\n // Prevent dual aria-label announcement: the host carries the consumer's\n // aria-label attribute while the inner div[role=\"toolbar\"] receives the\n // same value. Setting role=\"none\" on the host hides it from the\n // accessibility tree so only the toolbar is announced.\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'none');\n } else if (this.getAttribute('role') !== 'none') {\n devWarn(\n 'hx-action-bar',\n `Setting role=\"${this.getAttribute('role')}\" on the host creates a duplicate toolbar announcement. ` +\n 'The shadow DOM already contains role=\"toolbar\". Set role=\"none\" on the host to suppress it.',\n );\n }\n this.addEventListener('keydown', this._handleKeydown);\n }\n\n override firstUpdated(): void {\n // Slot assignments are complete by firstUpdated; initialize roving tabindex\n // immediately rather than waiting for the async slotchange event.\n this._initRovingTabindex();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeydown);\n }\n\n // ─── Focusable item discovery ───\n\n /** @internal */\n private _isFocusable(el: HTMLElement): boolean {\n // Check disabled via DOM attribute (native elements) or property (custom elements)\n if (el.hasAttribute('disabled')) return false;\n const elWithDisabled = el as HTMLElement & { disabled?: boolean };\n if (elWithDisabled.disabled === true) return false;\n\n // Use the IDL tabIndex property — covers both DOM attribute and ElementInternals settings.\n // Custom elements (e.g. hx-button) that set tabIndex via ElementInternals are discoverable.\n if (el.tabIndex >= 0) return true;\n\n const tag = el.tagName.toLowerCase();\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n }\n\n /** @internal */\n private _getFocusableItems(): HTMLElement[] {\n if (this._focusableCache) return this._focusableCache;\n\n const slots = this.shadowRoot?.querySelectorAll('slot') ?? [];\n const items: HTMLElement[] = [];\n\n for (const slot of Array.from(slots)) {\n const assigned = (slot as HTMLSlotElement).assignedElements({ flatten: true });\n for (const el of assigned) {\n if (!(el instanceof HTMLElement)) continue;\n if (this._isFocusable(el)) {\n // Element is itself focusable — include it and do NOT also recurse into its children\n // to prevent double-counting compound components (e.g. <a><button>).\n items.push(el);\n } else {\n // Element is a non-focusable wrapper (e.g. <div>, <span>) — find focusable children.\n const descendants = el.querySelectorAll<HTMLElement>('*');\n for (const d of Array.from(descendants)) {\n if (this._isFocusable(d)) {\n items.push(d);\n }\n }\n }\n }\n }\n\n this._focusableCache = items;\n return items;\n }\n\n // ─── Roving tabindex helpers ───\n\n /** @internal */\n private _initRovingTabindex(): void {\n this._focusableCache = null; // invalidate cache on slot change\n const items = this._getFocusableItems();\n if (!items.length) return;\n const hasActive = items.some((el) => el.getAttribute('tabindex') === '0');\n if (!hasActive) {\n // No item is active yet — make the first item tabbable.\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n } else {\n // An item is already active — ensure new items get tabindex=\"-1\"\n // without disturbing the currently active item.\n items.forEach((el) => {\n if (el.getAttribute('tabindex') === null) el.setAttribute('tabindex', '-1');\n });\n }\n }\n\n /** @internal */\n private _moveFocus(direction: 'next' | 'prev'): void {\n const items = this._getFocusableItems();\n if (!items.length) return;\n\n const focused = document.activeElement as HTMLElement | null;\n const currentIndex = items.indexOf(focused as HTMLElement);\n\n let nextIndex: number;\n if (direction === 'next') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n }\n\n items.forEach((el, i) => {\n el.setAttribute('tabindex', i === nextIndex ? '0' : '-1');\n });\n\n items[nextIndex]?.focus();\n }\n\n // ─── Event Handlers ───\n\n /** @internal */\n private _handleSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n if (slot.name === 'overflow') {\n this._hasOverflow = slot.assignedElements({ flatten: true }).length > 0;\n }\n this._initRovingTabindex();\n }\n\n // ─── Render ───\n\n override render() {\n const isSticky = this.position === 'sticky' || this.sticky;\n const isBottom = this.position === 'bottom';\n const positionClass = isSticky ? ' base--sticky' : isBottom ? ' base--bottom' : '';\n\n return html`\n <div\n part=\"base\"\n role=\"toolbar\"\n aria-label=${this.ariaLabel}\n aria-orientation=\"horizontal\"\n class=\"base base--${this.size} base--${this.variant}${positionClass}\"\n >\n <div part=\"start\" class=\"section section--start\">\n <slot name=\"start\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"center\" class=\"section section--center\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"end\" class=\"section section--end\">\n <slot name=\"end\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"overflow\" class=\"section section--overflow\" ?hidden=${!this._hasOverflow}>\n <slot name=\"overflow\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-action-bar': HelixActionBar;\n }\n}\n"],"names":["helixActionBarStyles","css","HelixActionBar","LitElement","e","items","el","i","_a","last","_b","value","old","legacySize","devWarn","tag","slots","slot","assigned","descendants","d","direction","focused","currentIndex","nextIndex","isSticky","isBottom","positionClass","html","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { css as v, LitElement as p, html as i, nothing as d } from "lit";
2
- import { property as s, state as u, customElement as f } from "lit/decorators.js";
1
+ import { css as u, LitElement as p, html as i, nothing as d } from "lit";
2
+ import { property as s, state as v, customElement as f } from "lit/decorators.js";
3
3
  import { classMap as x } from "lit/directives/class-map.js";
4
4
  import { tokenStyles as b } from "@helixui/tokens/lit";
5
- const g = v`
5
+ const g = u`
6
6
  :host {
7
7
  display: block;
8
8
  }
@@ -55,7 +55,7 @@ const g = v`
55
55
 
56
56
  .alert--accent {
57
57
  border-width: 0;
58
- border-left: var(--hx-alert-accent-width, 4px) solid
58
+ border-inline-start: var(--hx-alert-accent-width, 4px) solid
59
59
  var(--hx-alert-border-color, var(--hx-color-info-200, #b3d9ef));
60
60
  border-radius: 0;
61
61
  }
@@ -138,7 +138,7 @@ const g = v`
138
138
  flex-shrink: 0;
139
139
  min-width: var(--hx-touch-target-size, 44px);
140
140
  min-height: var(--hx-touch-target-size, 44px);
141
- margin-left: auto;
141
+ margin-inline-start: auto;
142
142
  padding: 0;
143
143
  border: none;
144
144
  border-radius: var(--hx-border-radius-sm, 0.25rem);
@@ -150,18 +150,19 @@ const g = v`
150
150
  transition:
151
151
  background-color var(--hx-transition-fast, 150ms ease),
152
152
  opacity var(--hx-transition-fast, 150ms ease);
153
- opacity: 0.7;
153
+ opacity: var(--hx-opacity-75, 0.75);
154
154
  }
155
155
 
156
156
  .alert__close-button:hover {
157
- opacity: 1;
157
+ opacity: var(--hx-opacity-100, 1);
158
158
  /* color-mix() is supported in Chrome 111+, Firefox 113+, Safari 16.2+. */
159
159
  /* Falls back to transparent (no hover background) in older environments. */
160
160
  background-color: color-mix(in srgb, currentColor 10%, transparent);
161
161
  }
162
162
 
163
163
  .alert__close-button:focus-visible {
164
- outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);
164
+ outline: var(--hx-focus-ring-width, 2px) solid
165
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa));
165
166
  outline-offset: var(--hx-focus-ring-offset, 2px);
166
167
  opacity: 1;
167
168
  }
@@ -222,14 +223,22 @@ var m = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, o = (e, t, n
222
223
  };
223
224
  let r = class extends p {
224
225
  constructor() {
225
- super(...arguments), this.variant = "info", this.dismissible = !1, this.heading = "", this.open = !1, this.showIcon = !1, this.accent = !1, this.returnFocusTo = null, this.severityLabels = {
226
+ super(...arguments), this.variant = "info", this.dismissible = !1, this.heading = "", this.labelClose = "Close alert", this.open = !1, this.showIcon = !1, this.accent = !1, this.returnFocusTo = null, this._hasActions = !1, this._hasTitle = !1, this._actionsSlotChangeHandler = null, this._titleSlotChangeHandler = null;
227
+ }
228
+ // ─── Private Helpers ───
229
+ /** @internal */
230
+ _defaultSeverityLabel() {
231
+ return {
226
232
  info: "Info:",
227
233
  success: "Success:",
228
234
  warning: "Warning:",
229
235
  error: "Error:"
230
- }, this.closeLabel = "Close alert", this._hasActions = !1, this._hasTitle = !1, this._actionsSlotChangeHandler = null, this._titleSlotChangeHandler = null;
236
+ }[this.variant] ?? "";
237
+ }
238
+ /** @internal */
239
+ get _effectiveSeverityLabel() {
240
+ return this.severityLabel ?? this._defaultSeverityLabel();
231
241
  }
232
- // ─── Private Helpers ───
233
242
  /** Returns true when the variant requires assertive announcement. */
234
243
  /** @internal */
235
244
  get _isAssertive() {
@@ -272,7 +281,7 @@ let r = class extends p {
272
281
  const n = this.renderRoot.querySelector(".sr-only");
273
282
  n && (n.textContent = "", Promise.resolve().then(() => {
274
283
  var c;
275
- const l = this.severityLabels[this.variant] ?? "", a = ((c = this.textContent) == null ? void 0 : c.trim()) ?? "";
284
+ const l = this._effectiveSeverityLabel, a = ((c = this.textContent) == null ? void 0 : c.trim()) ?? "";
276
285
  n.textContent = l ? `${l} ${a}` : a;
277
286
  }));
278
287
  });
@@ -362,7 +371,7 @@ let r = class extends p {
362
371
  alert: !0,
363
372
  [`alert--${this.variant}`]: !0,
364
373
  "alert--accent": this.accent
365
- }, t = this.severityLabels[this.variant] ?? "";
374
+ }, t = this._effectiveSeverityLabel;
366
375
  return i`
367
376
  <div
368
377
  class="sr-only"
@@ -394,7 +403,7 @@ let r = class extends p {
394
403
  <button
395
404
  part="close-button"
396
405
  class="alert__close-button"
397
- aria-label=${this.closeLabel}
406
+ aria-label=${this.labelClose}
398
407
  @click=${this._handleDismiss}
399
408
  >
400
409
  ${this._renderCloseIcon()}
@@ -414,6 +423,9 @@ o([
414
423
  o([
415
424
  s({ type: String })
416
425
  ], r.prototype, "heading", 2);
426
+ o([
427
+ s({ attribute: "label-close" })
428
+ ], r.prototype, "labelClose", 2);
417
429
  o([
418
430
  s({ type: Boolean, reflect: !0 })
419
431
  ], r.prototype, "open", 2);
@@ -423,20 +435,17 @@ o([
423
435
  o([
424
436
  s({ type: Boolean, reflect: !0 })
425
437
  ], r.prototype, "accent", 2);
438
+ o([
439
+ s({ attribute: "severity-label" })
440
+ ], r.prototype, "severityLabel", 2);
426
441
  o([
427
442
  s({ type: String, attribute: "return-focus-to" })
428
443
  ], r.prototype, "returnFocusTo", 2);
429
444
  o([
430
- s({ attribute: !1 })
431
- ], r.prototype, "severityLabels", 2);
432
- o([
433
- s({ type: String, attribute: "close-label" })
434
- ], r.prototype, "closeLabel", 2);
435
- o([
436
- u()
445
+ v()
437
446
  ], r.prototype, "_hasActions", 2);
438
447
  o([
439
- u()
448
+ v()
440
449
  ], r.prototype, "_hasTitle", 2);
441
450
  r = o([
442
451
  f("hx-alert")
@@ -444,4 +453,4 @@ r = o([
444
453
  export {
445
454
  r as H
446
455
  };
447
- //# sourceMappingURL=hx-alert-K5F8KeqI.js.map
456
+ //# sourceMappingURL=hx-alert-DRZYP0Oo.js.map