@helixui/library 3.1.0 → 3.2.0-next.102

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 (616) hide show
  1. package/custom-elements.json +6407 -339
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  3. package/dist/components/hx-accordion/hx-accordion-item.styles.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion.d.ts +3 -0
  5. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/index.js +1 -1
  7. package/dist/components/hx-action-bar/hx-action-bar.d.ts +14 -0
  8. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  9. package/dist/components/hx-action-bar/index.js +1 -1
  10. package/dist/components/hx-alert/hx-alert.d.ts +36 -0
  11. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  12. package/dist/components/hx-alert/hx-alert.styles.d.ts +12 -0
  13. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  14. package/dist/components/hx-alert/index.js +1 -1
  15. package/dist/components/hx-avatar/hx-avatar.d.ts +17 -0
  16. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  17. package/dist/components/hx-avatar/index.js +1 -1
  18. package/dist/components/hx-badge/hx-badge.d.ts +35 -0
  19. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  20. package/dist/components/hx-badge/index.js +1 -1
  21. package/dist/components/hx-banner/hx-banner.d.ts +34 -0
  22. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  23. package/dist/components/hx-banner/hx-banner.styles.d.ts +12 -0
  24. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  25. package/dist/components/hx-banner/index.js +1 -1
  26. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  27. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  28. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +3 -0
  29. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  30. package/dist/components/hx-breadcrumb/index.js +1 -1
  31. package/dist/components/hx-button/hx-button.d.ts +44 -7
  32. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  33. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  34. package/dist/components/hx-button/index.js +1 -1
  35. package/dist/components/hx-button-group/hx-button-group.d.ts +2 -0
  36. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  37. package/dist/components/hx-button-group/hx-button-group.styles.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 +28 -0
  40. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  41. package/dist/components/hx-card/hx-card.styles.d.ts +9 -0
  42. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  43. package/dist/components/hx-card/index.js +1 -1
  44. package/dist/components/hx-carousel/hx-carousel.d.ts +25 -0
  45. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  46. package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
  47. package/dist/components/hx-carousel/index.js +1 -1
  48. package/dist/components/hx-checkbox/hx-checkbox.d.ts +38 -7
  49. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  50. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  51. package/dist/components/hx-checkbox/index.js +1 -1
  52. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +16 -2
  53. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  54. package/dist/components/hx-checkbox-group/index.js +1 -1
  55. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +37 -0
  56. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  57. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  58. package/dist/components/hx-clinical-status/index.js +1 -1
  59. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +35 -0
  60. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  61. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  62. package/dist/components/hx-code-snippet/index.js +1 -1
  63. package/dist/components/hx-color-picker/hx-color-picker.d.ts +29 -0
  64. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  65. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  66. package/dist/components/hx-color-picker/index.js +1 -1
  67. package/dist/components/hx-combobox/hx-combobox.d.ts +49 -0
  68. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  69. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  70. package/dist/components/hx-combobox/index.js +1 -1
  71. package/dist/components/hx-container/hx-container.d.ts +5 -0
  72. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  73. package/dist/components/hx-copy-button/hx-copy-button.d.ts +24 -0
  74. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  75. package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
  76. package/dist/components/hx-copy-button/index.js +1 -1
  77. package/dist/components/hx-counter/hx-counter.d.ts +7 -0
  78. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  79. package/dist/components/hx-counter/index.js +1 -1
  80. package/dist/components/hx-data-table/hx-data-table.d.ts +29 -0
  81. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  82. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  83. package/dist/components/hx-data-table/index.js +1 -1
  84. package/dist/components/hx-date-picker/hx-date-picker.d.ts +44 -0
  85. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  86. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  87. package/dist/components/hx-date-picker/index.js +1 -1
  88. package/dist/components/hx-dialog/hx-dialog.d.ts +31 -0
  89. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  90. package/dist/components/hx-dialog/hx-dialog.styles.d.ts +10 -0
  91. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  92. package/dist/components/hx-dialog/index.js +1 -1
  93. package/dist/components/hx-divider/hx-divider.d.ts +9 -0
  94. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  95. package/dist/components/hx-divider/index.js +1 -1
  96. package/dist/components/hx-drawer/hx-drawer.d.ts +30 -0
  97. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  98. package/dist/components/hx-drawer/hx-drawer.styles.d.ts +10 -0
  99. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  100. package/dist/components/hx-drawer/index.js +1 -1
  101. package/dist/components/hx-dropdown/hx-dropdown.d.ts +6 -0
  102. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  103. package/dist/components/hx-dropdown/index.js +1 -1
  104. package/dist/components/hx-field/hx-field.d.ts +15 -0
  105. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  106. package/dist/components/hx-field/index.js +1 -1
  107. package/dist/components/hx-field-label/hx-field-label.d.ts +11 -0
  108. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  109. package/dist/components/hx-field-label/index.js +1 -1
  110. package/dist/components/hx-file-upload/hx-file-upload.d.ts +35 -0
  111. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  112. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  113. package/dist/components/hx-file-upload/index.js +1 -1
  114. package/dist/components/hx-form/index.js +1 -1
  115. package/dist/components/hx-grid/hx-grid.d.ts +5 -0
  116. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  117. package/dist/components/hx-help-text/hx-help-text.d.ts +8 -0
  118. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  119. package/dist/components/hx-help-text/index.js +1 -1
  120. package/dist/components/hx-icon/hx-icon.d.ts +5 -0
  121. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  122. package/dist/components/hx-icon/index.js +1 -1
  123. package/dist/components/hx-icon-button/hx-icon-button.d.ts +27 -0
  124. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  125. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  126. package/dist/components/hx-icon-button/index.js +1 -1
  127. package/dist/components/hx-image/hx-image.d.ts +4 -0
  128. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  129. package/dist/components/hx-image/index.js +1 -1
  130. package/dist/components/hx-link/hx-link.d.ts +15 -0
  131. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  132. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  133. package/dist/components/hx-link/index.js +1 -1
  134. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  135. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  136. package/dist/components/hx-list/hx-list.d.ts +3 -0
  137. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  138. package/dist/components/hx-list/index.js +1 -1
  139. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  140. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  141. package/dist/components/hx-menu/hx-menu.d.ts +6 -0
  142. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  143. package/dist/components/hx-menu/index.js +1 -1
  144. package/dist/components/hx-meter/hx-meter.d.ts +23 -0
  145. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  146. package/dist/components/hx-meter/index.js +1 -1
  147. package/dist/components/hx-nav/hx-nav.d.ts +29 -0
  148. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  149. package/dist/components/hx-nav/index.js +1 -1
  150. package/dist/components/hx-number-input/hx-number-input.d.ts +34 -0
  151. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  152. package/dist/components/hx-number-input/index.js +1 -1
  153. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +26 -0
  154. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  155. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  156. package/dist/components/hx-overflow-menu/index.js +1 -1
  157. package/dist/components/hx-pagination/hx-pagination.d.ts +21 -0
  158. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  159. package/dist/components/hx-pagination/index.js +1 -1
  160. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +23 -0
  161. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
  162. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
  163. package/dist/components/hx-patient-banner/index.js +1 -1
  164. package/dist/components/hx-phi-field/hx-phi-field.d.ts +19 -5
  165. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  166. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
  167. package/dist/components/hx-phi-field/index.js +1 -1
  168. package/dist/components/hx-popover/hx-popover.d.ts +15 -0
  169. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  170. package/dist/components/hx-popover/hx-popover.styles.d.ts +9 -0
  171. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  172. package/dist/components/hx-popover/index.js +1 -1
  173. package/dist/components/hx-popup/hx-popup.d.ts +1 -0
  174. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  175. package/dist/components/hx-popup/hx-popup.styles.d.ts +9 -0
  176. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  177. package/dist/components/hx-popup/index.js +1 -1
  178. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +17 -0
  179. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  180. package/dist/components/hx-progress-bar/index.js +1 -1
  181. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +15 -0
  182. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  183. package/dist/components/hx-progress-ring/index.js +1 -1
  184. package/dist/components/hx-prose/hx-prose.d.ts +2 -0
  185. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  186. package/dist/components/hx-prose/index.js +1 -1
  187. package/dist/components/hx-radio-group/hx-radio-group.d.ts +17 -3
  188. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  189. package/dist/components/hx-radio-group/hx-radio.d.ts +5 -5
  190. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  191. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  192. package/dist/components/hx-radio-group/index.js +1 -1
  193. package/dist/components/hx-rating/hx-rating.d.ts +13 -0
  194. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  195. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  196. package/dist/components/hx-rating/index.js +1 -1
  197. package/dist/components/hx-select/hx-select.d.ts +43 -0
  198. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  199. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  200. package/dist/components/hx-select/index.js +1 -1
  201. package/dist/components/hx-side-nav/hx-nav-item.d.ts +7 -5
  202. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  203. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  204. package/dist/components/hx-side-nav/hx-side-nav.d.ts +9 -4
  205. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  206. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  207. package/dist/components/hx-side-nav/index.js +1 -1
  208. package/dist/components/hx-skeleton/hx-skeleton.d.ts +5 -0
  209. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  210. package/dist/components/hx-skeleton/index.js +1 -1
  211. package/dist/components/hx-slider/hx-slider.d.ts +38 -0
  212. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  213. package/dist/components/hx-slider/index.js +1 -1
  214. package/dist/components/hx-spinner/hx-spinner.d.ts +10 -0
  215. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  216. package/dist/components/hx-spinner/index.js +1 -1
  217. package/dist/components/hx-split-button/hx-split-button.d.ts +40 -1
  218. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  219. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  220. package/dist/components/hx-split-button/index.js +1 -1
  221. package/dist/components/hx-split-panel/hx-split-panel.d.ts +12 -0
  222. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  223. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  224. package/dist/components/hx-split-panel/index.js +1 -1
  225. package/dist/components/hx-stack/hx-stack.d.ts +5 -0
  226. package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
  227. package/dist/components/hx-stat/hx-stat.d.ts +24 -0
  228. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  229. package/dist/components/hx-stat/index.js +1 -1
  230. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +13 -0
  231. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  232. package/dist/components/hx-status-indicator/index.js +1 -1
  233. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  234. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  235. package/dist/components/hx-steps/hx-steps.d.ts +15 -0
  236. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  237. package/dist/components/hx-steps/index.js +1 -1
  238. package/dist/components/hx-structured-list/hx-structured-list.d.ts +7 -0
  239. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  240. package/dist/components/hx-structured-list/index.js +1 -1
  241. package/dist/components/hx-switch/hx-switch.d.ts +42 -0
  242. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  243. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  244. package/dist/components/hx-switch/index.js +1 -1
  245. package/dist/components/hx-table/hx-table.d.ts +20 -6
  246. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  247. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  248. package/dist/components/hx-table/hx-td.d.ts +1 -1
  249. package/dist/components/hx-table/index.js +1 -1
  250. package/dist/components/hx-tabs/hx-tab-panel.d.ts +2 -2
  251. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  252. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  253. package/dist/components/hx-tabs/hx-tab.d.ts +6 -6
  254. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  255. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  256. package/dist/components/hx-tabs/hx-tabs.d.ts +12 -8
  257. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  258. package/dist/components/hx-tabs/index.js +1 -1
  259. package/dist/components/hx-tag/hx-tag.d.ts +36 -0
  260. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  261. package/dist/components/hx-tag/index.js +1 -1
  262. package/dist/components/hx-text/hx-text.d.ts +22 -0
  263. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  264. package/dist/components/hx-text/hx-text.styles.d.ts.map +1 -1
  265. package/dist/components/hx-text/index.js +1 -1
  266. package/dist/components/hx-text-input/hx-text-input.d.ts +18 -5
  267. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  268. package/dist/components/hx-text-input/hx-text-input.styles.d.ts +12 -0
  269. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  270. package/dist/components/hx-text-input/index.js +1 -1
  271. package/dist/components/hx-textarea/hx-textarea.d.ts +27 -0
  272. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  273. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  274. package/dist/components/hx-textarea/index.js +1 -1
  275. package/dist/components/hx-theme/hx-theme.d.ts +3 -0
  276. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  277. package/dist/components/hx-theme/index.js +1 -1
  278. package/dist/components/hx-time-picker/hx-time-picker.d.ts +32 -0
  279. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  280. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  281. package/dist/components/hx-time-picker/index.js +1 -1
  282. package/dist/components/hx-toast/hx-toast.d.ts +30 -2
  283. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  284. package/dist/components/hx-toast/hx-toast.styles.d.ts +10 -0
  285. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  286. package/dist/components/hx-toast/index.js +1 -1
  287. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +35 -0
  288. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  289. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  290. package/dist/components/hx-toggle-button/index.js +1 -1
  291. package/dist/components/hx-tooltip/hx-tooltip.d.ts +13 -0
  292. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  293. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts +8 -0
  294. package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
  295. package/dist/components/hx-tooltip/index.js +1 -1
  296. package/dist/components/hx-top-nav/hx-top-nav.d.ts +21 -0
  297. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  298. package/dist/components/hx-top-nav/index.js +1 -1
  299. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  300. package/dist/components/hx-tree-view/hx-tree-view.d.ts +6 -0
  301. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  302. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  303. package/dist/components/hx-tree-view/index.js +1 -1
  304. package/dist/css/helix-all.css +1273 -939
  305. package/dist/css/helix-core.css +327 -170
  306. package/dist/css/helix-data.css +54 -48
  307. package/dist/css/helix-feedback.css +123 -95
  308. package/dist/css/helix-forms.css +490 -387
  309. package/dist/css/helix-layout.css +9 -12
  310. package/dist/css/helix-media.css +16 -12
  311. package/dist/css/helix-navigation.css +86 -67
  312. package/dist/css/helix-overlay.css +62 -56
  313. package/dist/css/helix-tokens.css +173 -106
  314. package/dist/css/helix-utility.css +57 -46
  315. package/dist/css/hx-action-bar.css +5 -5
  316. package/dist/css/hx-alert.css +24 -23
  317. package/dist/css/hx-avatar.css +3 -3
  318. package/dist/css/hx-badge.css +22 -22
  319. package/dist/css/hx-banner.css +25 -24
  320. package/dist/css/hx-button-group.css +31 -14
  321. package/dist/css/hx-button.css +156 -34
  322. package/dist/css/hx-card.css +23 -12
  323. package/dist/css/hx-carousel.css +16 -12
  324. package/dist/css/hx-checkbox-group.css +5 -5
  325. package/dist/css/hx-checkbox.css +19 -22
  326. package/dist/css/hx-clinical-status.css +28 -30
  327. package/dist/css/hx-code-snippet.css +26 -20
  328. package/dist/css/hx-color-picker.css +20 -13
  329. package/dist/css/hx-combobox.css +31 -37
  330. package/dist/css/hx-copy-button.css +6 -3
  331. package/dist/css/hx-counter.css +1 -1
  332. package/dist/css/hx-data-table.css +16 -15
  333. package/dist/css/hx-date-picker.css +34 -50
  334. package/dist/css/hx-dialog.css +31 -27
  335. package/dist/css/hx-divider.css +2 -2
  336. package/dist/css/hx-drawer.css +18 -18
  337. package/dist/css/hx-dropdown.css +2 -2
  338. package/dist/css/hx-field-label.css +3 -3
  339. package/dist/css/hx-field.css +6 -6
  340. package/dist/css/hx-file-upload.css +21 -30
  341. package/dist/css/hx-help-text.css +5 -5
  342. package/dist/css/hx-icon-button.css +46 -38
  343. package/dist/css/hx-image.css +3 -3
  344. package/dist/css/hx-link.css +9 -12
  345. package/dist/css/hx-list.css +1 -1
  346. package/dist/css/hx-menu.css +2 -2
  347. package/dist/css/hx-meter.css +10 -10
  348. package/dist/css/hx-nav.css +11 -11
  349. package/dist/css/hx-number-input.css +18 -18
  350. package/dist/css/hx-overflow-menu.css +18 -15
  351. package/dist/css/hx-pagination.css +15 -15
  352. package/dist/css/hx-patient-banner.css +17 -9
  353. package/dist/css/hx-phi-field.css +4 -7
  354. package/dist/css/hx-popover.css +7 -6
  355. package/dist/css/hx-progress-bar.css +7 -7
  356. package/dist/css/hx-progress-ring.css +6 -6
  357. package/dist/css/hx-radio-group.css +5 -5
  358. package/dist/css/hx-rating.css +5 -6
  359. package/dist/css/hx-select.css +18 -19
  360. package/dist/css/hx-side-nav.css +28 -11
  361. package/dist/css/hx-skeleton.css +1 -1
  362. package/dist/css/hx-slider.css +15 -15
  363. package/dist/css/hx-spinner.css +4 -4
  364. package/dist/css/hx-split-button.css +45 -37
  365. package/dist/css/hx-split-panel.css +9 -12
  366. package/dist/css/hx-stat.css +8 -8
  367. package/dist/css/hx-status-indicator.css +7 -7
  368. package/dist/css/hx-structured-list.css +5 -5
  369. package/dist/css/hx-switch.css +16 -11
  370. package/dist/css/hx-table.css +6 -7
  371. package/dist/css/hx-tabs.css +3 -3
  372. package/dist/css/hx-tag.css +18 -18
  373. package/dist/css/hx-text-input.css +133 -61
  374. package/dist/css/hx-text.css +9 -7
  375. package/dist/css/hx-textarea.css +63 -27
  376. package/dist/css/hx-time-picker.css +27 -21
  377. package/dist/css/hx-toast.css +36 -10
  378. package/dist/css/hx-toggle-button.css +46 -33
  379. package/dist/css/hx-tooltip.css +4 -3
  380. package/dist/css/hx-top-nav.css +8 -8
  381. package/dist/css/hx-tree-view.css +1 -2
  382. package/dist/css/index.css +1 -1
  383. package/dist/css/manifest.json +332 -230
  384. package/dist/index.js +75 -75
  385. package/dist/shared/forced-colors-CTEDFRGa.js +117 -0
  386. package/dist/shared/forced-colors-CTEDFRGa.js.map +1 -0
  387. package/dist/shared/{hx-accordion-Wt52OOZD.js → hx-accordion-ZVzgDzTG.js} +29 -29
  388. package/dist/shared/hx-accordion-ZVzgDzTG.js.map +1 -0
  389. package/dist/shared/{hx-action-bar-BKMADbHj.js → hx-action-bar-CitgcpGv.js} +38 -37
  390. package/dist/shared/hx-action-bar-CitgcpGv.js.map +1 -0
  391. package/dist/shared/{hx-alert-D7n94HwI.js → hx-alert-CLn7CstP.js} +33 -31
  392. package/dist/shared/hx-alert-CLn7CstP.js.map +1 -0
  393. package/dist/shared/{hx-avatar-iLYzu8MJ.js → hx-avatar-C9hOmlAb.js} +19 -18
  394. package/dist/shared/hx-avatar-C9hOmlAb.js.map +1 -0
  395. package/dist/shared/{hx-badge-CVCmMPyW.js → hx-badge-CQXgOXJM.js} +65 -64
  396. package/dist/shared/hx-badge-CQXgOXJM.js.map +1 -0
  397. package/dist/shared/{hx-banner-C_He7Tr4.js → hx-banner-D3DzpfcP.js} +39 -37
  398. package/dist/shared/hx-banner-D3DzpfcP.js.map +1 -0
  399. package/dist/shared/{hx-breadcrumb-item-CldCwD1d.js → hx-breadcrumb-item-3tKppF9h.js} +24 -26
  400. package/dist/shared/hx-breadcrumb-item-3tKppF9h.js.map +1 -0
  401. package/dist/shared/{hx-button-Ddl-T6T-.js → hx-button-CHlkRQTe.js} +183 -61
  402. package/dist/shared/hx-button-CHlkRQTe.js.map +1 -0
  403. package/dist/shared/{hx-button-group-BJOGWoMa.js → hx-button-group-BI-QBqmO.js} +45 -27
  404. package/dist/shared/hx-button-group-BI-QBqmO.js.map +1 -0
  405. package/dist/shared/{hx-card-ycveujjL.js → hx-card-qNAM2QNV.js} +49 -37
  406. package/dist/shared/hx-card-qNAM2QNV.js.map +1 -0
  407. package/dist/shared/{hx-carousel-item-D_dCv61-.js → hx-carousel-item-z1Lc24op.js} +41 -36
  408. package/dist/shared/hx-carousel-item-z1Lc24op.js.map +1 -0
  409. package/dist/shared/{hx-checkbox-DkkoWoye.js → hx-checkbox-D7xma9YH.js} +38 -40
  410. package/dist/shared/hx-checkbox-D7xma9YH.js.map +1 -0
  411. package/dist/shared/{hx-checkbox-group-C3poJ-Zw.js → hx-checkbox-group-C9n315Ju.js} +20 -19
  412. package/dist/shared/hx-checkbox-group-C9n315Ju.js.map +1 -0
  413. package/dist/shared/{hx-clinical-status-BS5lcddT.js → hx-clinical-status-D3XQIOqX.js} +55 -56
  414. package/dist/shared/hx-clinical-status-D3XQIOqX.js.map +1 -0
  415. package/dist/shared/{hx-code-snippet-B7wUKzyb.js → hx-code-snippet-Bi-arDKH.js} +41 -34
  416. package/dist/shared/hx-code-snippet-Bi-arDKH.js.map +1 -0
  417. package/dist/shared/{hx-color-picker-DBaKTVLr.js → hx-color-picker-uRc865FJ.js} +54 -46
  418. package/dist/shared/hx-color-picker-uRc865FJ.js.map +1 -0
  419. package/dist/shared/{hx-combobox-BmgYT7Ar.js → hx-combobox-DDzqNKEW.js} +43 -48
  420. package/dist/shared/hx-combobox-DDzqNKEW.js.map +1 -0
  421. package/dist/shared/hx-container-DVI7sxfX.js.map +1 -1
  422. package/dist/shared/{hx-copy-button-8deNUdwP.js → hx-copy-button-sUVuikyH.js} +23 -19
  423. package/dist/shared/hx-copy-button-sUVuikyH.js.map +1 -0
  424. package/dist/shared/{hx-counter-CKfl_g8K.js → hx-counter-0zYapFhf.js} +10 -9
  425. package/dist/shared/hx-counter-0zYapFhf.js.map +1 -0
  426. package/dist/shared/{hx-data-table-B6h0RPn0.js → hx-data-table-CLqVqdxr.js} +49 -47
  427. package/dist/shared/hx-data-table-CLqVqdxr.js.map +1 -0
  428. package/dist/shared/{hx-date-picker-Dq2Nb68_.js → hx-date-picker-2iRG1p74.js} +51 -66
  429. package/dist/shared/hx-date-picker-2iRG1p74.js.map +1 -0
  430. package/dist/shared/{hx-dialog-CvIlY0Tc.js → hx-dialog-DRN_1-Y-.js} +68 -63
  431. package/dist/shared/hx-dialog-DRN_1-Y-.js.map +1 -0
  432. package/dist/shared/{hx-divider-DwpOrzMW.js → hx-divider-CYfcUjcr.js} +18 -17
  433. package/dist/shared/hx-divider-CYfcUjcr.js.map +1 -0
  434. package/dist/shared/{hx-drawer-Cx2ZJhBe.js → hx-drawer-Y1Ui2IWJ.js} +31 -30
  435. package/dist/shared/hx-drawer-Y1Ui2IWJ.js.map +1 -0
  436. package/dist/shared/{hx-dropdown-BjDrPUq5.js → hx-dropdown-LyaRc8Rf.js} +16 -15
  437. package/dist/shared/hx-dropdown-LyaRc8Rf.js.map +1 -0
  438. package/dist/shared/{hx-field-Dp3qQMut.js → hx-field-B3Qo8OLS.js} +15 -15
  439. package/dist/shared/hx-field-B3Qo8OLS.js.map +1 -0
  440. package/dist/shared/{hx-field-label-BC8QViXv.js → hx-field-label-BVRyyKeh.js} +8 -7
  441. package/dist/shared/hx-field-label-BVRyyKeh.js.map +1 -0
  442. package/dist/shared/{hx-file-upload-B6Yl1u0i.js → hx-file-upload-D3rKROK5.js} +51 -59
  443. package/dist/shared/hx-file-upload-D3rKROK5.js.map +1 -0
  444. package/dist/shared/hx-form-CkChEATa.js +257 -0
  445. package/dist/shared/hx-form-CkChEATa.js.map +1 -0
  446. package/dist/shared/hx-grid-CXZf3jeK.js.map +1 -1
  447. package/dist/shared/{hx-help-text-D7eytSim.js → hx-help-text-Xb2Yr8x2.js} +30 -29
  448. package/dist/shared/hx-help-text-Xb2Yr8x2.js.map +1 -0
  449. package/dist/shared/{hx-icon-button-BHneqPCU.js → hx-icon-button-CGNdQSFM.js} +78 -69
  450. package/dist/shared/hx-icon-button-CGNdQSFM.js.map +1 -0
  451. package/dist/shared/{hx-icon-CcyDPDYY.js → hx-icon-fuVm4-bk.js} +15 -14
  452. package/dist/shared/hx-icon-fuVm4-bk.js.map +1 -0
  453. package/dist/shared/{hx-image-2gt14zZd.js → hx-image-Ben_4yM5.js} +18 -17
  454. package/dist/shared/hx-image-Ben_4yM5.js.map +1 -0
  455. package/dist/shared/{hx-link-BESrWK8M.js → hx-link-C-O6vq0Q.js} +20 -22
  456. package/dist/shared/hx-link-C-O6vq0Q.js.map +1 -0
  457. package/dist/shared/{hx-list-_9qVv02L.js → hx-list-MyEhh8c7.js} +22 -23
  458. package/dist/shared/hx-list-MyEhh8c7.js.map +1 -0
  459. package/dist/shared/{hx-menu-divider-Ck-9Os1t.js → hx-menu-divider-C2omnPtj.js} +50 -49
  460. package/dist/shared/hx-menu-divider-C2omnPtj.js.map +1 -0
  461. package/dist/shared/{hx-meter-TbROk-dw.js → hx-meter-BPscsw5t.js} +41 -40
  462. package/dist/shared/{hx-meter-TbROk-dw.js.map → hx-meter-BPscsw5t.js.map} +1 -1
  463. package/dist/shared/{hx-nav-item-pqPasRUm.js → hx-nav-item-Dap3DYgB.js} +143 -81
  464. package/dist/shared/hx-nav-item-Dap3DYgB.js.map +1 -0
  465. package/dist/shared/{hx-nav-BcYDmjf7.js → hx-nav-ldFM3Fle.js} +54 -53
  466. package/dist/shared/hx-nav-ldFM3Fle.js.map +1 -0
  467. package/dist/shared/{hx-number-input-mOIZ3-46.js → hx-number-input-yUzFOSC1.js} +68 -67
  468. package/dist/shared/hx-number-input-yUzFOSC1.js.map +1 -0
  469. package/dist/shared/{hx-overflow-menu-Dprb9lnT.js → hx-overflow-menu-DCLsdIBy.js} +33 -29
  470. package/dist/shared/hx-overflow-menu-DCLsdIBy.js.map +1 -0
  471. package/dist/shared/{hx-pagination-AguTQjYC.js → hx-pagination-C7y8GVyU.js} +43 -42
  472. package/dist/shared/hx-pagination-C7y8GVyU.js.map +1 -0
  473. package/dist/shared/{hx-patient-banner-uE6gqLpT.js → hx-patient-banner-CkS-Lmj4.js} +29 -20
  474. package/dist/shared/hx-patient-banner-CkS-Lmj4.js.map +1 -0
  475. package/dist/shared/{hx-phi-field-BC_XowhC.js → hx-phi-field-C19oxlrr.js} +13 -15
  476. package/dist/shared/hx-phi-field-C19oxlrr.js.map +1 -0
  477. package/dist/shared/{hx-popover-B2_203ct.js → hx-popover-B-FP3-wW.js} +31 -29
  478. package/dist/shared/hx-popover-B-FP3-wW.js.map +1 -0
  479. package/dist/shared/{hx-popup-DZXpsJ1R.js → hx-popup-COUXXZ9X.js} +8 -7
  480. package/dist/shared/hx-popup-COUXXZ9X.js.map +1 -0
  481. package/dist/shared/{hx-progress-bar-KjEkEJLy.js → hx-progress-bar-Bn3JEPUf.js} +28 -27
  482. package/dist/shared/hx-progress-bar-Bn3JEPUf.js.map +1 -0
  483. package/dist/shared/{hx-progress-ring-3zMwvrwD.js → hx-progress-ring-TwHyXeEp.js} +15 -14
  484. package/dist/shared/hx-progress-ring-TwHyXeEp.js.map +1 -0
  485. package/dist/shared/{hx-prose-BCtK7YL6.js → hx-prose-BThYcASV.js} +12 -12
  486. package/dist/shared/{hx-prose-BCtK7YL6.js.map → hx-prose-BThYcASV.js.map} +1 -1
  487. package/dist/shared/{hx-radio-BBC5qZgE.js → hx-radio-CJvNU2yP.js} +38 -40
  488. package/dist/shared/hx-radio-CJvNU2yP.js.map +1 -0
  489. package/dist/shared/{hx-rating-C3E3ENJb.js → hx-rating-C3QP53k9.js} +38 -38
  490. package/dist/shared/hx-rating-C3QP53k9.js.map +1 -0
  491. package/dist/shared/{hx-select-CixTo7jp.js → hx-select-C8fEHQhC.js} +64 -64
  492. package/dist/shared/hx-select-C8fEHQhC.js.map +1 -0
  493. package/dist/shared/{hx-skeleton-LxkI0pxr.js → hx-skeleton-Cnieh5Uc.js} +14 -13
  494. package/dist/shared/hx-skeleton-Cnieh5Uc.js.map +1 -0
  495. package/dist/shared/{hx-slider-DFHuzF3N.js → hx-slider-Blmv_rwS.js} +70 -69
  496. package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -0
  497. package/dist/shared/{hx-spinner-BKjuCdZB.js → hx-spinner-DL5AYr16.js} +18 -17
  498. package/dist/shared/hx-spinner-DL5AYr16.js.map +1 -0
  499. package/dist/shared/{hx-split-button-CGcJMmCG.js → hx-split-button-Djnc5Aeg.js} +74 -65
  500. package/dist/shared/hx-split-button-Djnc5Aeg.js.map +1 -0
  501. package/dist/shared/{hx-split-panel-C-1R10Mc.js → hx-split-panel-B-u0Z3mm.js} +16 -18
  502. package/dist/shared/hx-split-panel-B-u0Z3mm.js.map +1 -0
  503. package/dist/shared/hx-stack-DGfcOfWJ.js.map +1 -1
  504. package/dist/shared/{hx-stat-BTpykQAt.js → hx-stat-WOcNV1Ry.js} +16 -15
  505. package/dist/shared/hx-stat-WOcNV1Ry.js.map +1 -0
  506. package/dist/shared/{hx-status-indicator-X2QEWNFt.js → hx-status-indicator-BlQyen43.js} +17 -16
  507. package/dist/shared/hx-status-indicator-BlQyen43.js.map +1 -0
  508. package/dist/shared/{hx-step-CRNQlmSo.js → hx-step-R2rjp1fT.js} +60 -50
  509. package/dist/shared/hx-step-R2rjp1fT.js.map +1 -0
  510. package/dist/shared/{hx-structured-list-CqNbaEXg.js → hx-structured-list-m_-dMJbC.js} +18 -17
  511. package/dist/shared/hx-structured-list-m_-dMJbC.js.map +1 -0
  512. package/dist/shared/{hx-switch-DqOD9JR7.js → hx-switch-BrZFaRue.js} +31 -25
  513. package/dist/shared/hx-switch-BrZFaRue.js.map +1 -0
  514. package/dist/shared/{hx-tab-panel-BIzKfW5i.js → hx-tab-panel-DspCrKqo.js} +45 -50
  515. package/dist/shared/hx-tab-panel-DspCrKqo.js.map +1 -0
  516. package/dist/shared/{hx-tag-CgnrNnte.js → hx-tag-CNSmdyaK.js} +63 -62
  517. package/dist/shared/hx-tag-CNSmdyaK.js.map +1 -0
  518. package/dist/shared/{hx-td-Bra35cH4.js → hx-td-DnnEMIuA.js} +62 -62
  519. package/dist/shared/hx-td-DnnEMIuA.js.map +1 -0
  520. package/dist/shared/{hx-text-DMC2CPlL.js → hx-text-Bz_9fJ3J.js} +28 -25
  521. package/dist/shared/hx-text-Bz_9fJ3J.js.map +1 -0
  522. package/dist/shared/{hx-text-input--q0GH78x.js → hx-text-input-D6FlOZM-.js} +144 -72
  523. package/dist/shared/{hx-text-input--q0GH78x.js.map → hx-text-input-D6FlOZM-.js.map} +1 -1
  524. package/dist/shared/{hx-textarea-CK621vSL.js → hx-textarea-CNG590KY.js} +107 -70
  525. package/dist/shared/hx-textarea-CNG590KY.js.map +1 -0
  526. package/dist/shared/{hx-theme-DfEy-SJA.js → hx-theme-BiyQ7UUK.js} +46 -35
  527. package/dist/shared/hx-theme-BiyQ7UUK.js.map +1 -0
  528. package/dist/shared/{hx-time-picker-tPUfgElQ.js → hx-time-picker-BoEIZwzv.js} +59 -52
  529. package/dist/shared/hx-time-picker-BoEIZwzv.js.map +1 -0
  530. package/dist/shared/{hx-toggle-button-L-uBJr-a.js → hx-toggle-button-iLiYrMbD.js} +86 -72
  531. package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +1 -0
  532. package/dist/shared/{hx-tooltip-B_zfKvwc.js → hx-tooltip-nYOv9OLu.js} +18 -16
  533. package/dist/shared/hx-tooltip-nYOv9OLu.js.map +1 -0
  534. package/dist/shared/{hx-top-nav-CATbRvIv.js → hx-top-nav-DP6OFS8C.js} +31 -30
  535. package/dist/shared/hx-top-nav-DP6OFS8C.js.map +1 -0
  536. package/dist/shared/{hx-tree-item-A45WCiBu.js → hx-tree-item-C2CiWuDE.js} +29 -29
  537. package/dist/shared/hx-tree-item-C2CiWuDE.js.map +1 -0
  538. package/dist/shared/{toast-factory-BPPnG3mM.js → toast-factory-YSznocIV.js} +98 -72
  539. package/dist/shared/toast-factory-YSznocIV.js.map +1 -0
  540. package/dist/styles/forced-colors.d.ts +60 -0
  541. package/dist/styles/forced-colors.d.ts.map +1 -0
  542. package/figma-inventory.json +8690 -827
  543. package/package.json +2 -2
  544. package/dist/shared/hx-accordion-Wt52OOZD.js.map +0 -1
  545. package/dist/shared/hx-action-bar-BKMADbHj.js.map +0 -1
  546. package/dist/shared/hx-alert-D7n94HwI.js.map +0 -1
  547. package/dist/shared/hx-avatar-iLYzu8MJ.js.map +0 -1
  548. package/dist/shared/hx-badge-CVCmMPyW.js.map +0 -1
  549. package/dist/shared/hx-banner-C_He7Tr4.js.map +0 -1
  550. package/dist/shared/hx-breadcrumb-item-CldCwD1d.js.map +0 -1
  551. package/dist/shared/hx-button-Ddl-T6T-.js.map +0 -1
  552. package/dist/shared/hx-button-group-BJOGWoMa.js.map +0 -1
  553. package/dist/shared/hx-card-ycveujjL.js.map +0 -1
  554. package/dist/shared/hx-carousel-item-D_dCv61-.js.map +0 -1
  555. package/dist/shared/hx-checkbox-DkkoWoye.js.map +0 -1
  556. package/dist/shared/hx-checkbox-group-C3poJ-Zw.js.map +0 -1
  557. package/dist/shared/hx-clinical-status-BS5lcddT.js.map +0 -1
  558. package/dist/shared/hx-code-snippet-B7wUKzyb.js.map +0 -1
  559. package/dist/shared/hx-color-picker-DBaKTVLr.js.map +0 -1
  560. package/dist/shared/hx-combobox-BmgYT7Ar.js.map +0 -1
  561. package/dist/shared/hx-copy-button-8deNUdwP.js.map +0 -1
  562. package/dist/shared/hx-counter-CKfl_g8K.js.map +0 -1
  563. package/dist/shared/hx-data-table-B6h0RPn0.js.map +0 -1
  564. package/dist/shared/hx-date-picker-Dq2Nb68_.js.map +0 -1
  565. package/dist/shared/hx-dialog-CvIlY0Tc.js.map +0 -1
  566. package/dist/shared/hx-divider-DwpOrzMW.js.map +0 -1
  567. package/dist/shared/hx-drawer-Cx2ZJhBe.js.map +0 -1
  568. package/dist/shared/hx-dropdown-BjDrPUq5.js.map +0 -1
  569. package/dist/shared/hx-field-Dp3qQMut.js.map +0 -1
  570. package/dist/shared/hx-field-label-BC8QViXv.js.map +0 -1
  571. package/dist/shared/hx-file-upload-B6Yl1u0i.js.map +0 -1
  572. package/dist/shared/hx-form-ButQFt9A.js +0 -257
  573. package/dist/shared/hx-form-ButQFt9A.js.map +0 -1
  574. package/dist/shared/hx-help-text-D7eytSim.js.map +0 -1
  575. package/dist/shared/hx-icon-CcyDPDYY.js.map +0 -1
  576. package/dist/shared/hx-icon-button-BHneqPCU.js.map +0 -1
  577. package/dist/shared/hx-image-2gt14zZd.js.map +0 -1
  578. package/dist/shared/hx-link-BESrWK8M.js.map +0 -1
  579. package/dist/shared/hx-list-_9qVv02L.js.map +0 -1
  580. package/dist/shared/hx-menu-divider-Ck-9Os1t.js.map +0 -1
  581. package/dist/shared/hx-nav-BcYDmjf7.js.map +0 -1
  582. package/dist/shared/hx-nav-item-pqPasRUm.js.map +0 -1
  583. package/dist/shared/hx-number-input-mOIZ3-46.js.map +0 -1
  584. package/dist/shared/hx-overflow-menu-Dprb9lnT.js.map +0 -1
  585. package/dist/shared/hx-pagination-AguTQjYC.js.map +0 -1
  586. package/dist/shared/hx-patient-banner-uE6gqLpT.js.map +0 -1
  587. package/dist/shared/hx-phi-field-BC_XowhC.js.map +0 -1
  588. package/dist/shared/hx-popover-B2_203ct.js.map +0 -1
  589. package/dist/shared/hx-popup-DZXpsJ1R.js.map +0 -1
  590. package/dist/shared/hx-progress-bar-KjEkEJLy.js.map +0 -1
  591. package/dist/shared/hx-progress-ring-3zMwvrwD.js.map +0 -1
  592. package/dist/shared/hx-radio-BBC5qZgE.js.map +0 -1
  593. package/dist/shared/hx-rating-C3E3ENJb.js.map +0 -1
  594. package/dist/shared/hx-select-CixTo7jp.js.map +0 -1
  595. package/dist/shared/hx-skeleton-LxkI0pxr.js.map +0 -1
  596. package/dist/shared/hx-slider-DFHuzF3N.js.map +0 -1
  597. package/dist/shared/hx-spinner-BKjuCdZB.js.map +0 -1
  598. package/dist/shared/hx-split-button-CGcJMmCG.js.map +0 -1
  599. package/dist/shared/hx-split-panel-C-1R10Mc.js.map +0 -1
  600. package/dist/shared/hx-stat-BTpykQAt.js.map +0 -1
  601. package/dist/shared/hx-status-indicator-X2QEWNFt.js.map +0 -1
  602. package/dist/shared/hx-step-CRNQlmSo.js.map +0 -1
  603. package/dist/shared/hx-structured-list-CqNbaEXg.js.map +0 -1
  604. package/dist/shared/hx-switch-DqOD9JR7.js.map +0 -1
  605. package/dist/shared/hx-tab-panel-BIzKfW5i.js.map +0 -1
  606. package/dist/shared/hx-tag-CgnrNnte.js.map +0 -1
  607. package/dist/shared/hx-td-Bra35cH4.js.map +0 -1
  608. package/dist/shared/hx-text-DMC2CPlL.js.map +0 -1
  609. package/dist/shared/hx-textarea-CK621vSL.js.map +0 -1
  610. package/dist/shared/hx-theme-DfEy-SJA.js.map +0 -1
  611. package/dist/shared/hx-time-picker-tPUfgElQ.js.map +0 -1
  612. package/dist/shared/hx-toggle-button-L-uBJr-a.js.map +0 -1
  613. package/dist/shared/hx-tooltip-B_zfKvwc.js.map +0 -1
  614. package/dist/shared/hx-top-nav-CATbRvIv.js.map +0 -1
  615. package/dist/shared/hx-tree-item-A45WCiBu.js.map +0 -1
  616. package/dist/shared/toast-factory-BPPnG3mM.js.map +0 -1
@@ -1,32 +1,33 @@
1
- import { css as x, html as c, nothing as u } from "lit";
2
- import { property as e, customElement as p } from "lit/decorators.js";
1
+ import { css as f, html as c, nothing as u } from "lit";
2
+ import { property as e, customElement as x } from "lit/decorators.js";
3
3
  import { classMap as d } from "lit/directives/class-map.js";
4
4
  import { ifDefined as b } from "lit/directives/if-defined.js";
5
- import { H as v } from "./helix-element-BNEYeiys.js";
6
- const m = x`
5
+ import { f as p } from "./forced-colors-CTEDFRGa.js";
6
+ import { H as m } from "./helix-element-BNEYeiys.js";
7
+ const v = f`
7
8
  :host {
8
9
  display: inline-block;
9
10
  }
10
11
 
11
12
  :host([disabled]) {
12
13
  pointer-events: none;
13
- opacity: var(--hx-opacity-disabled);
14
+ opacity: var(--hx-opacity-disabled, 0.5);
14
15
  }
15
16
 
16
17
  .button {
17
18
  display: inline-flex;
18
19
  align-items: center;
19
20
  justify-content: center;
20
- border: var(--hx-border-width-thin) solid var(--hx-icon-button-border-color);
21
- border-radius: var(--hx-icon-button-border-radius, var(--hx-border-radius-md));
22
- background-color: var(--hx-icon-button-bg);
23
- color: var(--hx-icon-button-color, var(--hx-color-primary-500));
21
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-icon-button-border-color, transparent);
22
+ border-radius: var(--hx-icon-button-border-radius, var(--hx-border-radius-md, 0.375rem));
23
+ background-color: var(--hx-icon-button-bg, transparent);
24
+ color: var(--hx-icon-button-color, var(--hx-color-primary-500, #429797));
24
25
  cursor: pointer;
25
26
  transition:
26
- background-color var(--hx-transition-fast),
27
- color var(--hx-transition-fast),
28
- border-color var(--hx-transition-fast),
29
- box-shadow var(--hx-transition-fast);
27
+ background-color var(--hx-transition-fast, 150ms ease),
28
+ color var(--hx-transition-fast, 150ms ease),
29
+ border-color var(--hx-transition-fast, 150ms ease),
30
+ box-shadow var(--hx-transition-fast, 150ms ease);
30
31
  text-decoration: none;
31
32
  user-select: none;
32
33
  -webkit-user-select: none;
@@ -34,9 +35,9 @@ const m = x`
34
35
  }
35
36
 
36
37
  .button:focus-visible {
37
- outline: var(--hx-focus-ring-width) solid
38
- var(--hx-icon-button-focus-ring-color, var(--hx-focus-ring-color));
39
- outline-offset: var(--hx-focus-ring-offset);
38
+ outline: var(--hx-focus-ring-width, 2px) solid
39
+ var(--hx-icon-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
40
+ outline-offset: var(--hx-focus-ring-offset, 2px);
40
41
  }
41
42
 
42
43
  .button:active {
@@ -50,82 +51,90 @@ const m = x`
50
51
  the 2.75rem (44px) threshold, preserving the visual icon size via font-size. */
51
52
 
52
53
  .button--sm {
53
- padding: var(--hx-space-1);
54
- width: var(--hx-icon-button-size, var(--hx-size-8));
55
- height: var(--hx-icon-button-size, var(--hx-size-8));
54
+ padding: var(--hx-space-1, 0.25rem);
55
+ width: var(--hx-icon-button-size, var(--hx-size-8, 2rem));
56
+ height: var(--hx-icon-button-size, var(--hx-size-8, 2rem));
56
57
  min-width: var(--hx-touch-target-min, 2.75rem);
57
58
  min-height: var(--hx-touch-target-min, 2.75rem);
58
- font-size: var(--hx-font-size-sm);
59
+ font-size: var(--hx-font-size-sm, 0.875rem);
59
60
  }
60
61
 
61
62
  .button--md {
62
- padding: var(--hx-space-2);
63
- width: var(--hx-icon-button-size, var(--hx-size-10));
64
- height: var(--hx-icon-button-size, var(--hx-size-10));
63
+ padding: var(--hx-space-2, 0.5rem);
64
+ width: var(--hx-icon-button-size, var(--hx-size-10, 2.5rem));
65
+ height: var(--hx-icon-button-size, var(--hx-size-10, 2.5rem));
65
66
  min-width: var(--hx-touch-target-min, 2.75rem);
66
67
  min-height: var(--hx-touch-target-min, 2.75rem);
67
- font-size: var(--hx-font-size-md);
68
+ font-size: var(--hx-font-size-md, 1rem);
68
69
  }
69
70
 
70
71
  .button--lg {
71
- padding: var(--hx-space-3);
72
- width: var(--hx-icon-button-size, var(--hx-size-12));
73
- height: var(--hx-icon-button-size, var(--hx-size-12));
72
+ padding: var(--hx-space-3, 0.75rem);
73
+ width: var(--hx-icon-button-size, var(--hx-size-12, 3rem));
74
+ height: var(--hx-icon-button-size, var(--hx-size-12, 3rem));
74
75
  min-width: var(--hx-touch-target-min, 2.75rem);
75
76
  min-height: var(--hx-touch-target-min, 2.75rem);
76
- font-size: var(--hx-font-size-lg);
77
+ font-size: var(--hx-font-size-lg, 1.125rem);
77
78
  }
78
79
 
79
80
  /* ─── Style Variants ─── */
80
81
 
81
82
  .button--primary {
82
- --hx-icon-button-bg: var(--hx-color-primary-500);
83
- --hx-icon-button-color: var(--hx-color-neutral-0);
83
+ --hx-icon-button-bg: var(--hx-color-primary-500, #429797);
84
+ --hx-icon-button-color: var(--hx-color-text-on-primary, #ffffff);
84
85
  --hx-icon-button-border-color: transparent;
85
86
  }
86
87
 
88
+ /* on-primary tokens are tuned for primary-500. primary-600 + on-primary
89
+ drops icon contrast to 3.07:1 — fails the 4.5:1 floor for meaningful
90
+ icons. Pin fg at neutral-0 (5.82:1 on primary-600). Mirrors hx-button. */
87
91
  .button--primary:hover {
88
- --hx-icon-button-bg: var(--hx-color-primary-600);
92
+ --hx-icon-button-bg: var(--hx-color-primary-600, #0f7078);
93
+ --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);
89
94
  }
90
95
 
91
96
  .button--secondary {
92
97
  --hx-icon-button-bg: transparent;
93
- --hx-icon-button-color: var(--hx-color-primary-500);
94
- --hx-icon-button-border-color: var(--hx-color-primary-500);
98
+ --hx-icon-button-color: var(--hx-color-primary-500, #429797);
99
+ --hx-icon-button-border-color: var(--hx-color-primary-500, #429797);
95
100
  }
96
101
 
97
102
  .button--secondary:hover {
98
- --hx-icon-button-bg: var(--hx-color-primary-50);
103
+ --hx-icon-button-bg: var(--hx-color-primary-50, #ebf8f8);
99
104
  }
100
105
 
101
106
  .button--tertiary {
102
107
  --hx-icon-button-bg: transparent;
103
- --hx-icon-button-color: var(--hx-color-neutral-700);
104
- --hx-icon-button-border-color: var(--hx-color-neutral-300);
108
+ --hx-icon-button-color: var(--hx-color-text-strong, #202b39);
109
+ --hx-icon-button-border-color: var(--hx-color-border-strong, #66787b);
105
110
  }
106
111
 
107
112
  .button--tertiary:hover {
108
- --hx-icon-button-bg: var(--hx-color-neutral-100);
113
+ --hx-icon-button-bg: var(--hx-color-surface-sunken, #ebeee9);
109
114
  }
110
115
 
111
116
  .button--danger {
112
- --hx-icon-button-bg: var(--hx-color-error-500);
113
- --hx-icon-button-color: var(--hx-color-neutral-0);
117
+ --hx-icon-button-bg: var(--hx-color-error-500, #e5493e);
118
+ --hx-icon-button-color: var(--hx-color-text-on-error, #ffffff);
114
119
  --hx-icon-button-border-color: transparent;
115
120
  }
116
121
 
122
+ /* on-error tokens are tuned for error-500. error-600 + on-error drops
123
+ icon contrast to 2.25:1 — fails AA. Pin fg at neutral-0
124
+ (6.47:1 on error-600). Mirrors hx-button danger:hover. */
117
125
  .button--danger:hover {
118
- --hx-icon-button-bg: var(--hx-color-error-600);
126
+ --hx-icon-button-bg: var(--hx-color-error-600, #c92a2a);
127
+ --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);
119
128
  }
120
129
 
121
130
  .button--ghost {
122
131
  --hx-icon-button-bg: transparent;
123
- --hx-icon-button-color: var(--hx-color-primary-500);
132
+ --hx-icon-button-color: var(--hx-color-primary-500, #429797);
124
133
  --hx-icon-button-border-color: transparent;
125
134
  }
126
135
 
127
136
  .button--ghost:hover {
128
- --hx-icon-button-bg: var(--hx-color-neutral-100);
137
+ --hx-icon-button-bg: var(--hx-color-surface-raised, #f5f8f3);
129
138
  }
130
139
 
131
140
  /* ─── Icon Container ─── */
@@ -183,12 +192,12 @@ const m = x`
183
192
  }
184
193
  }
185
194
  `;
186
- var f = Object.defineProperty, g = Object.getOwnPropertyDescriptor, r = (t, n, s, a) => {
187
- for (var i = a > 1 ? void 0 : a ? g(n, s) : n, h = t.length - 1, l; h >= 0; h--)
195
+ var g = Object.defineProperty, y = Object.getOwnPropertyDescriptor, o = (t, n, s, a) => {
196
+ for (var i = a > 1 ? void 0 : a ? y(n, s) : n, h = t.length - 1, l; h >= 0; h--)
188
197
  (l = t[h]) && (i = (a ? l(n, s, i) : l(i)) || i);
189
- return a && i && f(n, s, i), i;
198
+ return a && i && g(n, s, i), i;
190
199
  };
191
- let o = class extends v {
200
+ let r = class extends m {
192
201
  constructor() {
193
202
  super(...arguments), this.label = "", this.variant = "ghost", this.size = "md", this.type = "button", this.disabled = !1, this.href = void 0, this.name = void 0, this.value = void 0;
194
203
  }
@@ -260,36 +269,36 @@ let o = class extends v {
260
269
  ` : u;
261
270
  }
262
271
  };
263
- o.styles = [m];
264
- o.formAssociated = !0;
265
- r([
272
+ r.styles = [v, p];
273
+ r.formAssociated = !0;
274
+ o([
266
275
  e({ type: String })
267
- ], o.prototype, "label", 2);
268
- r([
276
+ ], r.prototype, "label", 2);
277
+ o([
269
278
  e({ type: String, reflect: !0 })
270
- ], o.prototype, "variant", 2);
271
- r([
279
+ ], r.prototype, "variant", 2);
280
+ o([
272
281
  e({ type: String, reflect: !0, attribute: "hx-size" })
273
- ], o.prototype, "size", 2);
274
- r([
282
+ ], r.prototype, "size", 2);
283
+ o([
275
284
  e({ type: String })
276
- ], o.prototype, "type", 2);
277
- r([
285
+ ], r.prototype, "type", 2);
286
+ o([
278
287
  e({ type: Boolean, reflect: !0 })
279
- ], o.prototype, "disabled", 2);
280
- r([
288
+ ], r.prototype, "disabled", 2);
289
+ o([
281
290
  e({ type: String })
282
- ], o.prototype, "href", 2);
283
- r([
291
+ ], r.prototype, "href", 2);
292
+ o([
284
293
  e({ type: String })
285
- ], o.prototype, "name", 2);
286
- r([
294
+ ], r.prototype, "name", 2);
295
+ o([
287
296
  e({ type: String })
288
- ], o.prototype, "value", 2);
289
- o = r([
290
- p("hx-icon-button")
291
- ], o);
297
+ ], r.prototype, "value", 2);
298
+ r = o([
299
+ x("hx-icon-button")
300
+ ], r);
292
301
  export {
293
- o as H
302
+ r as H
294
303
  };
295
- //# sourceMappingURL=hx-icon-button-BHneqPCU.js.map
304
+ //# sourceMappingURL=hx-icon-button-CGNdQSFM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-icon-button-CGNdQSFM.js","sources":["../../src/components/hx-icon-button/hx-icon-button.styles.ts","../../src/components/hx-icon-button/hx-icon-button.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixIconButtonStyles = css`\n :host {\n display: inline-block;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--hx-opacity-disabled, 0.5);\n }\n\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: var(--hx-border-width-thin, 1px) solid var(--hx-icon-button-border-color, transparent);\n border-radius: var(--hx-icon-button-border-radius, var(--hx-border-radius-md, 0.375rem));\n background-color: var(--hx-icon-button-bg, transparent);\n color: var(--hx-icon-button-color, var(--hx-color-primary-500, #429797));\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n color var(--hx-transition-fast, 150ms ease),\n border-color var(--hx-transition-fast, 150ms ease),\n box-shadow var(--hx-transition-fast, 150ms ease);\n text-decoration: none;\n user-select: none;\n -webkit-user-select: none;\n flex-shrink: 0;\n }\n\n .button:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-icon-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .button:active {\n filter: brightness(var(--hx-filter-brightness-active, 0.8));\n }\n\n /* ─── Size Variants ─── */\n\n /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target for all sizes.\n min-width/min-height override the explicit size tokens when they fall below\n the 2.75rem (44px) threshold, preserving the visual icon size via font-size. */\n\n .button--sm {\n padding: var(--hx-space-1, 0.25rem);\n width: var(--hx-icon-button-size, var(--hx-size-8, 2rem));\n height: var(--hx-icon-button-size, var(--hx-size-8, 2rem));\n min-width: var(--hx-touch-target-min, 2.75rem);\n min-height: var(--hx-touch-target-min, 2.75rem);\n font-size: var(--hx-font-size-sm, 0.875rem);\n }\n\n .button--md {\n padding: var(--hx-space-2, 0.5rem);\n width: var(--hx-icon-button-size, var(--hx-size-10, 2.5rem));\n height: var(--hx-icon-button-size, var(--hx-size-10, 2.5rem));\n min-width: var(--hx-touch-target-min, 2.75rem);\n min-height: var(--hx-touch-target-min, 2.75rem);\n font-size: var(--hx-font-size-md, 1rem);\n }\n\n .button--lg {\n padding: var(--hx-space-3, 0.75rem);\n width: var(--hx-icon-button-size, var(--hx-size-12, 3rem));\n height: var(--hx-icon-button-size, var(--hx-size-12, 3rem));\n min-width: var(--hx-touch-target-min, 2.75rem);\n min-height: var(--hx-touch-target-min, 2.75rem);\n font-size: var(--hx-font-size-lg, 1.125rem);\n }\n\n /* ─── Style Variants ─── */\n\n .button--primary {\n --hx-icon-button-bg: var(--hx-color-primary-500, #429797);\n --hx-icon-button-color: var(--hx-color-text-on-primary, #ffffff);\n --hx-icon-button-border-color: transparent;\n }\n\n /* on-primary tokens are tuned for primary-500. primary-600 + on-primary\n drops icon contrast to 3.07:1 — fails the 4.5:1 floor for meaningful\n icons. Pin fg at neutral-0 (5.82:1 on primary-600). Mirrors hx-button. */\n .button--primary:hover {\n --hx-icon-button-bg: var(--hx-color-primary-600, #0f7078);\n --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);\n }\n\n .button--secondary {\n --hx-icon-button-bg: transparent;\n --hx-icon-button-color: var(--hx-color-primary-500, #429797);\n --hx-icon-button-border-color: var(--hx-color-primary-500, #429797);\n }\n\n .button--secondary:hover {\n --hx-icon-button-bg: var(--hx-color-primary-50, #ebf8f8);\n }\n\n .button--tertiary {\n --hx-icon-button-bg: transparent;\n --hx-icon-button-color: var(--hx-color-text-strong, #202b39);\n --hx-icon-button-border-color: var(--hx-color-border-strong, #66787b);\n }\n\n .button--tertiary:hover {\n --hx-icon-button-bg: var(--hx-color-surface-sunken, #ebeee9);\n }\n\n .button--danger {\n --hx-icon-button-bg: var(--hx-color-error-500, #e5493e);\n --hx-icon-button-color: var(--hx-color-text-on-error, #ffffff);\n --hx-icon-button-border-color: transparent;\n }\n\n /* on-error tokens are tuned for error-500. error-600 + on-error drops\n icon contrast to 2.25:1 — fails AA. Pin fg at neutral-0\n (6.47:1 on error-600). Mirrors hx-button danger:hover. */\n .button--danger:hover {\n --hx-icon-button-bg: var(--hx-color-error-600, #c92a2a);\n --hx-icon-button-color: var(--hx-color-neutral-0, #ffffff);\n }\n\n .button--ghost {\n --hx-icon-button-bg: transparent;\n --hx-icon-button-color: var(--hx-color-primary-500, #429797);\n --hx-icon-button-border-color: transparent;\n }\n\n .button--ghost:hover {\n --hx-icon-button-bg: var(--hx-color-surface-raised, #f5f8f3);\n }\n\n /* ─── Icon Container ─── */\n\n .icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1em;\n height: 1em;\n line-height: 1;\n pointer-events: none;\n }\n\n /* ─── Disabled ─── */\n\n .button[disabled] {\n cursor: not-allowed;\n /* P1-02 fix: opacity is set only on :host([disabled]) above to prevent\n multiplicative stacking (0.5 * 0.5 = 0.25). Do not add opacity here. */\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .button {\n transition: none;\n }\n }\n\n /* ─── High Contrast Mode (forced-colors) ─── */\n\n @media (forced-colors: active) {\n .button {\n forced-color-adjust: none;\n background-color: ButtonFace;\n color: ButtonText;\n border: 2px solid ButtonText;\n }\n\n .button:focus-visible {\n outline: 3px solid Highlight;\n outline-offset: 2px;\n }\n\n .button[disabled] {\n background-color: ButtonFace;\n color: GrayText;\n border-color: GrayText;\n opacity: 1;\n }\n\n :host([disabled]) {\n opacity: 1;\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { HelixElement } from '../../base/index.js';\nimport { helixIconButtonStyles } from './hx-icon-button.styles.js';\nimport { forcedColorsInteractive } from '../../styles/forced-colors.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n/**\n * An icon-only button component for compact, accessible actions.\n * Renders a square button or anchor element containing a single icon.\n * The `label` property is required and provides the accessible name\n * via `aria-label` and a native tooltip via the `title` attribute.\n *\n * @summary Icon-only action button with full accessibility support.\n *\n * @tag hx-icon-button\n *\n * @slot - Icon element to display (hx-icon, svg, or img).\n *\n * @fires {CustomEvent<{originalEvent: MouseEvent}>} hx-click - Dispatched when the button is clicked (not disabled).\n *\n * @csspart button - The native button or anchor element.\n * @csspart icon - The icon container span wrapping the default slot.\n *\n * @cssprop [--hx-icon-button-bg=transparent] - Button background color.\n * @cssprop [--hx-icon-button-color=var(--hx-color-primary-500)] - Icon color.\n * @cssprop [--hx-icon-button-border-color=transparent] - Button border color.\n * @cssprop [--hx-icon-button-border-radius=var(--hx-border-radius-md)] - Button border radius.\n * @cssprop [--hx-icon-button-size] - Explicit width and height override for the button.\n * @cssprop [--hx-icon-button-focus-ring-color=var(--hx-focus-ring-color)] - Focus ring color.\n * @cssprop [--hx-opacity-disabled] - Opacity.\n * @cssprop [--hx-border-width-thin] - Width.\n * @cssprop [--hx-border-radius-md] - CSS custom property.\n * @cssprop [--hx-color-primary-500] - Color.\n * @cssprop [--hx-transition-fast] - Transition timing.\n * @cssprop [--hx-focus-ring-width] - Width.\n * @cssprop [--hx-focus-ring-color] - Color.\n * @cssprop [--hx-focus-ring-offset] - CSS custom property.\n * @cssprop [--hx-filter-brightness-active] - CSS filter.\n * @cssprop [--hx-space-1] - Spacing token.\n * @cssprop [--hx-size-8] - Size token.\n * @cssprop [--hx-touch-target-min] - Minimum touch target size.\n * @cssprop [--hx-font-size-sm] - Font size.\n * @cssprop [--hx-space-2] - Spacing token.\n * @cssprop [--hx-size-10] - Size token.\n * @cssprop [--hx-font-size-md] - Font size.\n * @cssprop [--hx-space-3] - Spacing token.\n * @cssprop [--hx-size-12] - Size token.\n * @cssprop [--hx-font-size-lg] - Font size.\n * @cssprop [--hx-color-neutral-0] - Color.\n * @cssprop [--hx-color-primary-600] - Color.\n * @cssprop [--hx-color-primary-50] - Color.\n * @cssprop [--hx-color-neutral-700] - Color.\n * @cssprop [--hx-color-neutral-300] - Color.\n * @cssprop [--hx-color-neutral-100] - Color.\n * @cssprop [--hx-color-error-500] - Color.\n * @cssprop [--hx-color-error-600] - Color.\n */\n@customElement('hx-icon-button')\nexport class HelixIconButton extends HelixElement {\n static override styles = [helixIconButtonStyles, forcedColorsInteractive];\n\n /**\n * Accessible name for the button. Required. Rendered as `aria-label` and\n * `title` on the underlying element. The component renders nothing when absent,\n * and a console warning is emitted to alert developers during authoring.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * Visual style variant of the button.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost' = 'ghost';\n\n /**\n * Size of the button.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * The type attribute for the underlying button element.\n * Has no effect when `href` is set.\n * @attr type\n */\n @property({ type: String })\n type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * When set, renders an `<a>` element instead of a `<button>`.\n * @attr href\n */\n @property({ type: String })\n href: string | undefined = undefined;\n\n /**\n * Name submitted with form data. Only applicable when rendering as a button.\n * @attr name\n */\n @property({ type: String })\n name: string | undefined = undefined;\n\n /**\n * Value submitted with form data. Only applicable when rendering as a button.\n * @attr value\n */\n @property({ type: String })\n value: string | undefined = undefined;\n\n // ─── Form Association ───\n\n /** Marks this element as form-associated for ElementInternals support. @internal */\n static override formAssociated = true;\n\n protected override _onFormDisabled(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleClick(e: MouseEvent): void {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n /**\n * Dispatched when the button is clicked.\n * @event hx-click\n */\n this.dispatchEvent(\n new CustomEvent<{ originalEvent: MouseEvent }>('hx-click', {\n bubbles: true,\n composed: true,\n detail: { originalEvent: e },\n }),\n );\n\n // Handle form submission/reset if form-associated and not in href/link mode\n if (!this.href) {\n if (this.type === 'submit' && this._internals.form) {\n this._internals.form.requestSubmit();\n } else if (this.type === 'reset' && this._internals.form) {\n this._internals.form.reset();\n }\n }\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _normalizedLabel(): string {\n return this.label.trim();\n }\n\n /** @internal */\n private _classes() {\n return {\n button: true,\n [`button--${this.variant}`]: true,\n [`button--${this.size}`]: true,\n };\n }\n\n /** @internal */\n private _iconSlot() {\n return html`<span part=\"icon\" class=\"icon\"><slot></slot></span>`;\n }\n\n // ─── Render ───\n\n override render() {\n const normalizedLabel = this._normalizedLabel();\n if (!normalizedLabel) {\n devWarn(\n 'hx-icon-button',\n 'The `label` property is required for accessibility. Render suppressed.',\n );\n return nothing;\n }\n\n if (this.href !== undefined) {\n // P1-03 fix: disabled anchor must set tabindex=\"-1\" explicitly — an <a>\n // without href is non-focusable by default in most browsers, but this is\n // browser-dependent. Explicit tabindex=\"-1\" guarantees keyboard exclusion\n // across all conforming browsers.\n // P1-07 note: aria-disabled IS required on the anchor branch because\n // <a> elements have no native disabled attribute; aria-disabled is the\n // only AT signal available.\n return html`\n <a\n part=\"button\"\n class=${classMap(this._classes())}\n href=${ifDefined(this.disabled ? undefined : this.href)}\n aria-label=${normalizedLabel}\n title=${normalizedLabel}\n aria-disabled=${this.disabled ? 'true' : nothing}\n tabindex=${this.disabled ? '-1' : nothing}\n @click=${this._handleClick}\n >\n ${this._iconSlot()}\n </a>\n `;\n }\n\n // P1-07 fix: aria-disabled is redundant on a natively disabled <button>.\n // The native disabled attribute already exposes aria-disabled=\"true\"\n // implicitly in the accessibility tree. Duplicate explicit aria-disabled\n // creates ambiguity about design intent. Keep only native ?disabled.\n return html`\n <button\n part=\"button\"\n class=${classMap(this._classes())}\n ?disabled=${this.disabled}\n type=${this.type}\n aria-label=${normalizedLabel}\n title=${normalizedLabel}\n name=${ifDefined(this.name)}\n value=${ifDefined(this.value)}\n @click=${this._handleClick}\n >\n ${this._iconSlot()}\n </button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-icon-button': HelixIconButton;\n }\n interface HTMLElementEventMap {\n 'hx-click': CustomEvent<{ originalEvent: MouseEvent }>;\n }\n}\n"],"names":["helixIconButtonStyles","css","HelixIconButton","HelixElement","disabled","e","html","normalizedLabel","classMap","ifDefined","nothing","forcedColorsInteractive","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { css as _, nothing as o, html as g } from "lit";
1
+ import { css as _, nothing as o, html as m } from "lit";
2
2
  import { property as c, state as u, customElement as S } from "lit/decorators.js";
3
3
  import { unsafeHTML as x } from "lit/directives/unsafe-html.js";
4
- import { H as y } from "./helix-element-BNEYeiys.js";
5
- const b = _`
4
+ import { a as y } from "./forced-colors-CTEDFRGa.js";
5
+ import { H as b } from "./helix-element-BNEYeiys.js";
6
+ const z = _`
6
7
  :host {
7
8
  display: inline-flex;
8
9
  align-items: center;
@@ -84,12 +85,12 @@ const b = _`
84
85
  }
85
86
  }
86
87
  `;
87
- var z = Object.defineProperty, $ = Object.getOwnPropertyDescriptor, a = (e, i, r, n) => {
88
- for (var t = n > 1 ? void 0 : n ? $(i, r) : i, l = e.length - 1, f; l >= 0; l--)
88
+ var $ = Object.defineProperty, A = Object.getOwnPropertyDescriptor, a = (e, i, r, n) => {
89
+ for (var t = n > 1 ? void 0 : n ? A(i, r) : i, l = e.length - 1, f; l >= 0; l--)
89
90
  (f = e[l]) && (t = (n ? f(i, r, t) : f(t)) || t);
90
- return n && t && z(i, r, t), t;
91
+ return n && t && $(i, r, t), t;
91
92
  };
92
- let s = class extends y {
93
+ let s = class extends b {
93
94
  constructor() {
94
95
  super(...arguments), this.name = "", this.src = void 0, this.spriteUrl = void 0, this.size = "md", this.label = "", this.allowedOrigins = "", this._inlineSvg = "", this._fetchedSrc = void 0, this._fetchSeq = 0;
95
96
  }
@@ -187,8 +188,8 @@ let s = class extends y {
187
188
  return;
188
189
  }
189
190
  if (f.has(v)) {
190
- const m = p.value.replace(/\s/g, "").toLowerCase();
191
- (m.startsWith("javascript:") || m.startsWith("data:")) && h.removeAttribute(p.name);
191
+ const g = p.value.replace(/\s/g, "").toLowerCase();
192
+ (g.startsWith("javascript:") || g.startsWith("data:")) && h.removeAttribute(p.name);
192
193
  }
193
194
  });
194
195
  }), w.forEach((h) => t.removeAttribute(h)), t.setAttribute("focusable", "false"), t.outerHTML;
@@ -209,7 +210,7 @@ let s = class extends y {
209
210
  /** @internal */
210
211
  _renderSprite() {
211
212
  const e = !this.label.trim();
212
- return g`
213
+ return m`
213
214
  <svg
214
215
  part="svg"
215
216
  class="icon__svg"
@@ -220,7 +221,7 @@ let s = class extends y {
220
221
  aria-hidden=${e ? "true" : o}
221
222
  focusable="false"
222
223
  >
223
- ${e ? o : g`<title>${this.label}</title>`}
224
+ ${e ? o : m`<title>${this.label}</title>`}
224
225
  <use href=${this._spriteHref()}></use>
225
226
  </svg>
226
227
  `;
@@ -230,7 +231,7 @@ let s = class extends y {
230
231
  if (!this._inlineSvg)
231
232
  return o;
232
233
  const e = !this.label.trim();
233
- return g`
234
+ return m`
234
235
  <span
235
236
  part="svg"
236
237
  class="icon__inline"
@@ -247,7 +248,7 @@ let s = class extends y {
247
248
  return typeof this.src == "string" && this.src.trim().length > 0 ? this._renderInline() : this.name ? this._renderSprite() : o;
248
249
  }
249
250
  };
250
- s.styles = [b];
251
+ s.styles = [z, y];
251
252
  a([
252
253
  c({ type: String })
253
254
  ], s.prototype, "name", 2);
@@ -279,4 +280,4 @@ const d = /* @__PURE__ */ new Map();
279
280
  export {
280
281
  s as H
281
282
  };
282
- //# sourceMappingURL=hx-icon-CcyDPDYY.js.map
283
+ //# sourceMappingURL=hx-icon-fuVm4-bk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-icon-fuVm4-bk.js","sources":["../../src/components/hx-icon/hx-icon.styles.ts","../../src/components/hx-icon/hx-icon.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixIconStyles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* vertical-align: middle ensures the icon aligns to the visual centre of\n adjacent inline text rather than the text baseline. */\n vertical-align: middle;\n /* overflow: hidden prevents malformed or oversized icons from painting\n outside the component boundary. The inner SVG may still set\n overflow: visible for its own viewBox content. */\n overflow: hidden;\n width: var(--hx-icon-size, var(--hx-size-6, 1.5rem));\n height: var(--hx-icon-size, var(--hx-size-6, 1.5rem));\n color: var(--hx-icon-color, currentColor);\n flex-shrink: 0;\n }\n\n /* ─── Size Variants ───\n Fallback pixel values mirror the design token values at time of writing.\n If token values are updated the fallbacks should be updated to match. */\n\n :host([hx-size='xs']) {\n --hx-icon-size: var(--hx-size-4, 1rem);\n }\n\n :host([hx-size='sm']) {\n --hx-icon-size: var(--hx-size-5, 1.25rem);\n }\n\n :host([hx-size='md']) {\n --hx-icon-size: var(--hx-size-6, 1.5rem);\n }\n\n :host([hx-size='lg']) {\n --hx-icon-size: var(--hx-size-8, 2rem);\n }\n\n :host([hx-size='xl']) {\n --hx-icon-size: var(--hx-size-10, 2.5rem);\n }\n\n /* ─── SVG (sprite mode) ───\n In sprite mode [part=\"svg\"] is an actual <svg> element. The selector\n targets it specifically. In inline mode the part is applied to a <span>\n wrapper — see .icon__inline below. */\n\n svg[part='svg'] {\n width: 100%;\n height: 100%;\n fill: currentColor;\n display: block;\n overflow: visible;\n }\n\n /* ─── Inline SVG wrapper ───\n In inline mode [part=\"svg\"] is a <span> that wraps the fetched SVG.\n The inner <svg> is sized to fill the wrapper. */\n\n .icon__inline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .icon__inline svg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n display: block;\n }\n\n /* ─── Forced Colors (Windows High Contrast) ─── */\n\n @media (forced-colors: active) {\n :host {\n color: CanvasText;\n }\n }\n`;\n","import { html, nothing, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { HelixElement } from '../../base/index.js';\nimport { helixIconStyles } from './hx-icon.styles.js';\nimport { forcedColorsSurface } from '../../styles/forced-colors.js';\n\n/**\n * An icon component that supports inline SVG fetching and SVG sprite sheet references.\n * Decorative icons are automatically hidden from assistive technology.\n * When a label is provided the icon is announced as an image with that label.\n *\n * **Render modes:**\n * - **Sprite mode** (recommended for Drupal/SSR): Set `name` and optionally `sprite-url`.\n * Renders an `<svg><use href=\"...#name\">` — works server-side without JavaScript.\n * - **Inline mode**: Set `src` to a URL of a standalone SVG file. The component fetches,\n * sanitizes, and embeds the SVG markup. Requires JavaScript; not server-side renderable.\n * For Drupal/Twig templates use sprite mode to avoid content shift before hydration.\n *\n * @summary SVG icon with sprite and inline fetch modes for healthcare applications.\n *\n * @tag hx-icon\n *\n * @csspart svg - The SVG element rendered in sprite mode, or the inline SVG container\n * in inline mode. In sprite mode this is an `<svg>` element; in inline mode it is a\n * `<span>` element wrapping the fetched SVG. Both expose the same `part` name for\n * consistent external styling via `::part(svg)`.\n *\n * @cssprop [--hx-icon-size=var(--hx-size-6,1.5rem)] - Width and height of the icon.\n * @cssprop [--hx-icon-color=currentColor] - Icon color.\n * @cssprop [--hx-size-4] - Size token.\n * @cssprop [--hx-size-5] - Size token.\n * @cssprop [--hx-size-6] - Size token.\n * @cssprop [--hx-size-8] - Size token.\n * @cssprop [--hx-size-10] - Size token.\n */\n@customElement('hx-icon')\nexport class HelixIcon extends HelixElement {\n static override styles = [helixIconStyles, forcedColorsSurface];\n\n /**\n * Icon name used as the fragment identifier when referencing a sprite sheet.\n * For sprite mode provide the bare symbol id (e.g. `check`). The component\n * will build the full href as `${spriteUrl}#${name}`. If `name` already\n * starts with `#` it is used as-is (inline sprite reference without a base\n * URL).\n * @attr name\n */\n @property({ type: String })\n name = '';\n\n /**\n * URL of a standalone SVG file to fetch and render inline. Takes precedence\n * over sprite mode when both `src` and `spriteUrl`/`name` are set.\n *\n * **Note:** Inline mode requires browser JavaScript (`fetch` + `DOMParser`).\n * It is not server-side renderable. For Drupal/Twig use sprite mode instead.\n * @attr src\n */\n @property({ type: String })\n src: string | undefined = undefined;\n\n /**\n * Base URL of the SVG sprite sheet. Used together with `name` to construct\n * the `<use>` href: `${spriteUrl}#${name}`.\n * @attr sprite-url\n */\n @property({ type: String, attribute: 'sprite-url' })\n spriteUrl: string | undefined = undefined;\n\n /**\n * Size variant of the icon.\n *\n * Set via the `hx-size` HTML attribute (e.g. `hx-size=\"lg\"`) or via the\n * `size` JavaScript property (e.g. `el.size = 'lg'`). Both are equivalent —\n * the `attribute: 'hx-size'` mapping is used to avoid colliding with the\n * native `<input>` `size` attribute in Drupal attribute-passthrough scenarios.\n * The CEM exposes both the JS property name (`size`) and the HTML attribute\n * name (`hx-size`).\n *\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\n\n /**\n * Accessible label for the icon. When non-empty, `role=\"img\"` and\n * `aria-label` are applied so assistive technology announces the icon.\n * When empty the icon is treated as decorative and `aria-hidden=\"true\"` is\n * applied.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * Comma-separated list of allowed origins for cross-origin SVG fetches.\n * By default, only same-origin URLs are permitted. Set this to allow\n * specific CDN or asset server origins (e.g., \"https://cdn.example.com,https://assets.example.com\").\n * @attr allowed-origins\n */\n @property({ type: String, attribute: 'allowed-origins' })\n allowedOrigins = '';\n\n /**\n * Stores the sanitized inner markup of an externally fetched SVG.\n * @internal\n */\n @state()\n private _inlineSvg = '';\n\n /**\n * Tracks the `src` URL that was last successfully fetched so that we only\n * refetch when it genuinely changes.\n * @internal\n */\n @state()\n private _fetchedSrc: string | undefined = undefined;\n\n /**\n * Monotonically-increasing sequence number. Incremented before each fetch so\n * that stale out-of-order responses can be discarded.\n */\n /** @internal */\n private _fetchSeq = 0;\n\n // ─── Lifecycle ───\n\n override updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n if (changed.has('src') && this.src !== this._fetchedSrc) {\n void this._fetchInlineSvg(this.src);\n }\n }\n\n // ─── Inline SVG Fetch ───\n\n /** @internal */\n private async _fetchInlineSvg(url: string | undefined): Promise<void> {\n const seq = ++this._fetchSeq;\n\n if (!url) {\n this._inlineSvg = '';\n this._fetchedSrc = undefined;\n return;\n }\n\n // Validate URL origin — only allow same-origin or data: URIs by default.\n // Cross-origin SVGs are blocked unless explicitly allowed via allowedOrigins.\n if (!this._isAllowedOrigin(url)) {\n console.warn(\n `[hx-icon] Blocked cross-origin SVG fetch: \"${url}\". ` +\n 'Only same-origin URLs are allowed by default. ' +\n 'Set the allowed-origins attribute to permit specific external origins.',\n );\n this._inlineSvg = '';\n this._fetchedSrc = undefined;\n return;\n }\n\n // Use module-level cache to avoid duplicate network requests for the same URL.\n // Multiple hx-icon instances sharing the same src will share one in-flight fetch.\n try {\n let pending = _svgCache.get(url);\n if (!pending) {\n pending = fetch(url).then(async (response) => {\n if (!response.ok) {\n _svgCache.delete(url);\n return '';\n }\n return response.text();\n });\n _svgCache.set(url, pending);\n }\n\n const text = await pending;\n if (seq !== this._fetchSeq) return;\n\n if (!text) {\n this._inlineSvg = '';\n this._fetchedSrc = undefined;\n return;\n }\n\n const sanitized = this._sanitizeSvg(text);\n this._inlineSvg = sanitized;\n this._fetchedSrc = url;\n } catch {\n if (seq !== this._fetchSeq) return;\n _svgCache.delete(url);\n this._inlineSvg = '';\n this._fetchedSrc = undefined;\n }\n }\n\n /**\n * Checks whether a URL is same-origin or matches the configured allowedOrigins.\n * Relative URLs and data: URIs are always allowed. Cross-origin URLs are blocked\n * unless their origin appears in the allowedOrigins list.\n * @internal\n */\n private _isAllowedOrigin(url: string): boolean {\n // Relative URLs are always same-origin\n if (url.startsWith('/') || url.startsWith('./') || url.startsWith('../')) {\n return true;\n }\n\n try {\n const parsed = new URL(url, window.location.href);\n\n // Same-origin is always allowed\n if (parsed.origin === window.location.origin) {\n return true;\n }\n\n // Check configured allowlist\n if (this.allowedOrigins) {\n const allowed = this.allowedOrigins\n .split(',')\n .map((o) => o.trim().toLowerCase())\n .filter(Boolean);\n return allowed.includes(parsed.origin.toLowerCase());\n }\n\n return false;\n } catch {\n // Unparseable URL — block it\n return false;\n }\n }\n\n /**\n * Parses the raw SVG text, strips dangerous content (script elements,\n * foreignObject, on* event-handler attributes, javascript:/data: URIs,\n * and style attributes that could carry CSS injection payloads), and\n * returns the outer SVG markup safe for rendering via `unsafeHTML`.\n *\n * Additionally injects `focusable=\"false\"` on the root SVG element to\n * prevent IE11/old-Edge from making the SVG keyboard-focusable, and strips\n * any ARIA attributes from the inner SVG to prevent conflicts with the\n * wrapper's own ARIA semantics.\n */\n /** @internal */\n private _sanitizeSvg(raw: string): string {\n const parser = new DOMParser();\n const doc = parser.parseFromString(raw, 'image/svg+xml');\n\n const parseError = doc.querySelector('parsererror');\n if (parseError) {\n return '';\n }\n\n const svgEl = doc.querySelector('svg');\n if (!svgEl) {\n return '';\n }\n\n // Remove dangerous embedded elements:\n // - script: arbitrary code execution\n // - foreignObject: can embed arbitrary HTML including scripts\n // - style: CSS injection (url() payloads, expression(), external references)\n // - animate, animateTransform, animateMotion, set: SMIL animation elements\n // can trigger event handlers and modify attributes to bypass sanitization\n const dangerousElements = [\n 'script',\n 'foreignObject',\n 'style',\n 'animate',\n 'animateTransform',\n 'animateMotion',\n 'set',\n ];\n svgEl.querySelectorAll(dangerousElements.join(', ')).forEach((s) => {\n s.remove();\n });\n\n // URL-bearing attributes that can carry javascript:/data: payloads.\n const urlAttrs = new Set(['href', 'xlink:href', 'src', 'action', 'formaction']);\n\n // ARIA attributes that may conflict with the wrapper element's own semantics.\n // The wrapper <span part=\"svg\"> owns role/aria-label/aria-hidden — the inner\n // SVG must not duplicate or contradict these.\n const ariaAttrs = new Set(['role', 'aria-label', 'aria-labelledby', 'aria-hidden']);\n\n // Sanitize every element including the root svg.\n const allElements: Element[] = [svgEl, ...Array.from(svgEl.querySelectorAll('*'))];\n allElements.forEach((el) => {\n const attrs = Array.from(el.attributes);\n attrs.forEach((attr) => {\n const attrName = attr.name.toLowerCase();\n // Strip event-handler attributes.\n if (attrName.startsWith('on')) {\n el.removeAttribute(attr.name);\n return;\n }\n // Strip style attributes — CSS can carry injection payloads via\n // url(javascript:...), expression(), or external filter/clip-path references.\n if (attrName === 'style') {\n el.removeAttribute(attr.name);\n return;\n }\n // Strip javascript: and data: URIs from URL-bearing attributes.\n if (urlAttrs.has(attrName)) {\n const val = attr.value.replace(/\\s/g, '').toLowerCase();\n if (val.startsWith('javascript:') || val.startsWith('data:')) {\n el.removeAttribute(attr.name);\n }\n }\n });\n });\n\n // Strip ARIA attributes from the root SVG only — they conflict with the\n // wrapper element's ARIA. Child elements' ARIA is left intact.\n ariaAttrs.forEach((a) => svgEl.removeAttribute(a));\n\n // Inject focusable=\"false\" so IE11/old-Edge do not tab into the SVG.\n svgEl.setAttribute('focusable', 'false');\n\n return svgEl.outerHTML;\n }\n\n // ─── Render Helpers ───\n\n /**\n * Returns the href used in the `<use>` element for sprite mode.\n * If `name` already begins with `#` it is treated as an inline reference.\n */\n /** @internal */\n private _spriteHref(): string {\n const n = this.name;\n if (n.startsWith('#')) {\n return n;\n }\n const base = this.spriteUrl ?? '';\n return base ? `${base}#${n}` : `#${n}`;\n }\n\n /** @internal */\n private _renderSprite() {\n const isDecorative = !this.label.trim();\n\n return html`\n <svg\n part=\"svg\"\n class=\"icon__svg\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=${isDecorative ? nothing : 'img'}\n aria-label=${isDecorative ? nothing : this.label}\n aria-hidden=${isDecorative ? 'true' : nothing}\n focusable=\"false\"\n >\n ${isDecorative ? nothing : html`<title>${this.label}</title>`}\n <use href=${this._spriteHref()}></use>\n </svg>\n `;\n }\n\n /** @internal */\n private _renderInline() {\n if (!this._inlineSvg) {\n return nothing;\n }\n\n const isDecorative = !this.label.trim();\n\n // The fetched SVG is rendered inside a wrapper span that carries the\n // csspart and ARIA semantics. The inner SVG from unsafeHTML fills the\n // container via the `.icon__inline svg` CSS rule. ARIA attributes and\n // focusable=\"false\" are injected into the inner SVG by _sanitizeSvg.\n return html`\n <span\n part=\"svg\"\n class=\"icon__inline\"\n role=${isDecorative ? nothing : 'img'}\n aria-label=${isDecorative ? nothing : this.label}\n aria-hidden=${isDecorative ? 'true' : nothing}\n >\n ${unsafeHTML(this._inlineSvg)}\n </span>\n `;\n }\n\n // ─── Render ───\n\n override render() {\n // Inline fetch mode takes precedence when src is a non-empty string.\n if (typeof this.src === 'string' && this.src.trim().length > 0) {\n return this._renderInline();\n }\n\n // Sprite mode: requires at least a name.\n if (this.name) {\n return this._renderSprite();\n }\n\n return nothing;\n }\n}\n\n/**\n * Module-level SVG fetch cache. Shared across all `hx-icon` instances so that\n * multiple icons sharing the same `src` URL issue only one network request.\n * The cache stores in-flight `Promise<string>` values — resolved entries remain\n * cached for the lifetime of the page to prevent redundant re-fetches.\n */\nconst _svgCache = new Map<string, Promise<string>>();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-icon': HelixIcon;\n }\n}\n"],"names":["helixIconStyles","css","HelixIcon","HelixElement","changed","url","seq","pending","_svgCache","response","text","sanitized","parsed","o","raw","doc","svgEl","dangerousElements","s","urlAttrs","ariaAttrs","el","attr","attrName","val","a","n","base","isDecorative","html","nothing","unsafeHTML","forcedColorsSurface","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -2,8 +2,9 @@ import { css as g, html as p, nothing as h } from "lit";
2
2
  import { property as r, state as d, customElement as f } from "lit/decorators.js";
3
3
  import { classMap as m } from "lit/directives/class-map.js";
4
4
  import { styleMap as u } from "lit/directives/style-map.js";
5
- import { H as _ } from "./helix-element-BNEYeiys.js";
6
- const v = g`
5
+ import { a as _ } from "./forced-colors-CTEDFRGa.js";
6
+ import { H as v } from "./helix-element-BNEYeiys.js";
7
+ const b = g`
7
8
  :host {
8
9
  display: block;
9
10
  }
@@ -23,8 +24,8 @@ const v = g`
23
24
  align-items: center;
24
25
  justify-content: center;
25
26
  min-height: var(--hx-image-fallback-min-height, 3rem);
26
- background-color: var(--hx-color-neutral-100, #f1f5f9);
27
- color: var(--hx-color-neutral-500, #64748b);
27
+ background-color: var(--hx-image-fallback-bg, var(--hx-color-neutral-100, #ebeee9));
28
+ color: var(--hx-image-fallback-color, var(--hx-color-neutral-500, #66787b));
28
29
  }
29
30
 
30
31
  .image__img {
@@ -37,7 +38,7 @@ const v = g`
37
38
  .image__caption {
38
39
  display: none;
39
40
  padding: var(--hx-image-caption-padding, 0.5rem 0 0);
40
- color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #475569));
41
+ color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #4a5362));
41
42
  font-size: var(--hx-image-caption-font-size, 0.875rem);
42
43
  }
43
44
 
@@ -53,12 +54,12 @@ const v = g`
53
54
  }
54
55
  }
55
56
  `;
56
- var y = Object.defineProperty, b = Object.getOwnPropertyDescriptor, e = (s, o, a, l) => {
57
- for (var i = l > 1 ? void 0 : l ? b(o, a) : o, n = s.length - 1, c; n >= 0; n--)
58
- (c = s[n]) && (i = (l ? c(o, a, i) : c(i)) || i);
59
- return l && i && y(o, a, i), i;
57
+ var y = Object.defineProperty, S = Object.getOwnPropertyDescriptor, e = (a, o, s, l) => {
58
+ for (var i = l > 1 ? void 0 : l ? S(o, s) : o, n = a.length - 1, c; n >= 0; n--)
59
+ (c = a[n]) && (i = (l ? c(o, s, i) : c(i)) || i);
60
+ return l && i && y(o, s, i), i;
60
61
  };
61
- let t = class extends _ {
62
+ let t = class extends v {
62
63
  constructor() {
63
64
  super(...arguments), this.src = "", this.alt = void 0, this.decorative = !1, this.width = void 0, this.height = void 0, this.loading = "lazy", this.fit = void 0, this.ratio = void 0, this.rounded = void 0, this.fallbackSrc = void 0, this.srcset = void 0, this.sizes = void 0, this._error = !1, this._usedFallbackSrc = !1, this._hasCaptionSlot = !1;
64
65
  }
@@ -75,8 +76,8 @@ let t = class extends _ {
75
76
  this._error = !0, this.dispatchEvent(new CustomEvent("hx-error", { bubbles: !0, composed: !0 }));
76
77
  }
77
78
  /** @internal */
78
- _onCaptionSlotChange(s) {
79
- const o = s.target;
79
+ _onCaptionSlotChange(a) {
80
+ const o = a.target;
80
81
  this._hasCaptionSlot = o.assignedNodes({ flatten: !0 }).length > 0;
81
82
  }
82
83
  /** @internal */
@@ -92,10 +93,10 @@ let t = class extends _ {
92
93
  }
93
94
  render() {
94
95
  !this.decorative && this.alt;
95
- const s = this.decorative || this.alt === "", o = s ? "" : this.alt ?? "", a = this._computeBorderRadius(), l = this._hasCaptionSlot, i = {
96
+ const a = this.decorative || this.alt === "", o = a ? "" : this.alt ?? "", s = this._computeBorderRadius(), l = this._hasCaptionSlot, i = {
96
97
  ...this.ratio ? { "--_ratio": this.ratio } : {},
97
98
  ...this.fit ? { "--_fit": this.fit } : {},
98
- ...a ? { "--_radius": a } : {},
99
+ ...s ? { "--_radius": s } : {},
99
100
  ...this.width != null ? { width: typeof this.width == "number" ? `${this.width}px` : this.width } : {},
100
101
  ...this.height != null ? { height: typeof this.height == "number" ? `${this.height}px` : this.height } : {}
101
102
  };
@@ -114,7 +115,7 @@ let t = class extends _ {
114
115
  class="image__img"
115
116
  src=${this._currentSrc() || h}
116
117
  alt=${o}
117
- role=${s ? "presentation" : h}
118
+ role=${a ? "presentation" : h}
118
119
  loading=${this.loading}
119
120
  width=${this.width != null ? this.width : h}
120
121
  height=${this.height != null ? this.height : h}
@@ -133,7 +134,7 @@ let t = class extends _ {
133
134
  `;
134
135
  }
135
136
  };
136
- t.styles = [v];
137
+ t.styles = [b, _];
137
138
  e([
138
139
  r({ type: String, reflect: !0 })
139
140
  ], t.prototype, "src", 2);
@@ -185,4 +186,4 @@ t = e([
185
186
  export {
186
187
  t as H
187
188
  };
188
- //# sourceMappingURL=hx-image-2gt14zZd.js.map
189
+ //# sourceMappingURL=hx-image-Ben_4yM5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-image-Ben_4yM5.js","sources":["../../src/components/hx-image/hx-image.styles.ts","../../src/components/hx-image/hx-image.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixImageStyles = css`\n :host {\n display: block;\n }\n\n .image__container {\n position: relative;\n display: block;\n overflow: hidden;\n margin: 0;\n padding: 0;\n aspect-ratio: var(--_ratio, var(--hx-image-aspect-ratio));\n border-radius: var(--_radius, var(--hx-image-border-radius, 0));\n }\n\n .image__container--error {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--hx-image-fallback-min-height, 3rem);\n background-color: var(--hx-image-fallback-bg, var(--hx-color-neutral-100, #ebeee9));\n color: var(--hx-image-fallback-color, var(--hx-color-neutral-500, #66787b));\n }\n\n .image__img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: var(--_fit, var(--hx-image-object-fit, cover));\n }\n\n .image__caption {\n display: none;\n padding: var(--hx-image-caption-padding, 0.5rem 0 0);\n color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #4a5362));\n font-size: var(--hx-image-caption-font-size, 0.875rem);\n }\n\n .image__caption--visible {\n display: block;\n }\n\n /* ─── Forced Colors (Windows High Contrast) ─── */\n\n @media (forced-colors: active) {\n .image__container--error {\n border: 1px solid GrayText;\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { HelixElement } from '../../base/index.js';\nimport { helixImageStyles } from './hx-image.styles.js';\nimport { forcedColorsSurface } from '../../styles/forced-colors.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n/**\n * An accessible image wrapper with lazy loading, fallback support, aspect ratio control,\n * responsive image (srcset/sizes) support, and optional caption.\n *\n * @summary Accessible image wrapper with lazy loading, fallback, srcset, and aspect ratio control.\n *\n * @tag hx-image\n *\n * @slot fallback - Custom content shown when the image fails to load and no fallback-src is set.\n * @slot caption - Optional caption content rendered in a figcaption element below the image.\n *\n * @csspart base - The inner img element.\n * @csspart caption - The figcaption element (visible only when caption content is present).\n *\n * @cssprop [--hx-image-object-fit] - Controls how the image fills its container. Maps to object-fit.\n * @cssprop [--hx-image-border-radius] - Border radius of the image. Overridden by the `rounded` prop.\n * @cssprop [--hx-image-aspect-ratio] - Aspect ratio of the image container. Overridden by the `ratio` prop.\n * @cssprop [--hx-image-caption-color] - Text color for the caption.\n * @cssprop [--hx-image-caption-font-size] - Font size for the caption.\n * @cssprop [--hx-image-caption-padding] - Padding for the caption.\n * @cssprop [--hx-image-fallback-min-height] - Minimum height of the error/fallback container.\n *\n * @fires hx-load - Dispatched when the image has successfully loaded.\n * @fires hx-error - Dispatched when the image fails to load (including after fallback-src also fails).\n * @cssprop [--hx-color-neutral-100] - Color.\n * @cssprop [--hx-color-neutral-500] - Color.\n * @cssprop [--hx-color-neutral-600] - Color.\n * @cssprop [--hx-border-radius-md] - CSS custom property.\n */\n@customElement('hx-image')\nexport class HelixImage extends HelixElement {\n static override styles = [helixImageStyles, forcedColorsSurface];\n\n /**\n * The URL of the image to display.\n * @attr src\n */\n @property({ type: String, reflect: true })\n src = '';\n\n /**\n * Accessible text description of the image.\n * Required for informative images. Use the `decorative` prop for decorative images\n * instead of setting this to an empty string — explicit decorative intent is preferred.\n * @attr alt\n */\n @property({ type: String, reflect: true })\n alt: string | undefined = undefined;\n\n /**\n * Marks the image as decorative (hidden from screen readers).\n * Use this instead of `alt=\"\"` to make decorative intent explicit in markup.\n * When set, the inner img receives `alt=\"\"` and `role=\"presentation\"`.\n * @attr decorative\n */\n @property({ type: Boolean, reflect: true })\n decorative = false;\n\n /**\n * Width of the image element.\n * @attr width\n */\n @property({ reflect: true })\n width: number | string | undefined = undefined;\n\n /**\n * Height of the image element.\n * @attr height\n */\n @property({ reflect: true })\n height: number | string | undefined = undefined;\n\n /**\n * Loading strategy for the image.\n * @attr loading\n */\n @property({ type: String, reflect: true })\n loading: 'lazy' | 'eager' = 'lazy';\n\n /**\n * How the image should be resized to fit its container.\n * Maps to CSS object-fit.\n * @attr fit\n */\n @property({ type: String, reflect: true })\n fit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' | undefined = undefined;\n\n /**\n * CSS aspect-ratio value (e.g. \"16/9\", \"1\", \"4/3\").\n * When set, the container maintains this ratio.\n * @attr ratio\n */\n @property({ type: String, reflect: true })\n ratio: string | undefined = undefined;\n\n /**\n * Border radius for the image.\n * Boolean attribute (or `true`) applies the theme's medium radius token.\n * A string value is used directly as a CSS border-radius value (e.g. \"1rem\", \"50%\").\n *\n * Note: When set as an HTML attribute (`<hx-image rounded>`), Lit receives the value as\n * an empty string (`''`). When set programmatically (`el.rounded = true`), it receives\n * a boolean. Both forms apply the theme radius token.\n *\n * @attr rounded\n */\n @property({ type: String, reflect: true })\n rounded: boolean | string | undefined = undefined;\n\n /**\n * Fallback image URL shown when the primary src fails to load.\n * @attr fallback-src\n */\n @property({ type: String, attribute: 'fallback-src', reflect: true })\n fallbackSrc: string | undefined = undefined;\n\n /**\n * A comma-separated list of image candidates for responsive images.\n * Passed directly to the inner img's srcset attribute.\n * Enables Drupal responsive image styles and browser-native image selection.\n * @attr srcset\n */\n @property({ type: String, reflect: true })\n srcset: string | undefined = undefined;\n\n /**\n * Media conditions indicating which image size to use alongside srcset.\n * Works in conjunction with the `srcset` attribute.\n * @attr sizes\n */\n @property({ type: String, reflect: true })\n sizes: string | undefined = undefined;\n\n /** @internal */\n @state()\n private _error = false;\n\n /** @internal */\n @state()\n private _usedFallbackSrc = false;\n\n /** @internal */\n @state()\n private _hasCaptionSlot = false;\n\n /** @internal */\n private _handleLoad(): void {\n this.dispatchEvent(new CustomEvent<void>('hx-load', { bubbles: true, composed: true }));\n }\n\n /** @internal */\n private _handleError(): void {\n if (!this._error && this.fallbackSrc && !this._usedFallbackSrc) {\n // Try the fallback-src before showing the fallback slot\n this._usedFallbackSrc = true;\n return;\n }\n this._error = true;\n this.dispatchEvent(new CustomEvent<void>('hx-error', { bubbles: true, composed: true }));\n }\n\n /** @internal */\n private _onCaptionSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasCaptionSlot = slot.assignedNodes({ flatten: true }).length > 0;\n }\n\n /** @internal */\n private _computeBorderRadius(): string | undefined {\n if (this.rounded === true || this.rounded === '' || this.rounded === 'true') {\n return 'var(--hx-border-radius-md, 0.375rem)';\n }\n if (typeof this.rounded === 'string' && this.rounded.length > 0 && this.rounded !== 'false') {\n return this.rounded;\n }\n return undefined;\n }\n\n /** @internal */\n private _currentSrc(): string {\n if (this._usedFallbackSrc && this.fallbackSrc) {\n return this.fallbackSrc;\n }\n return this.src;\n }\n\n override render() {\n if (!this.decorative && !this.alt) {\n devWarn(\n 'hx-image',\n 'Informative images require an `alt` attribute for accessibility (WCAG 1.1.1). ' +\n 'Provide a descriptive `alt` value, or set the `decorative` attribute if the image is decorative.',\n );\n }\n const isDecorative = this.decorative || this.alt === '';\n const altText = isDecorative ? '' : (this.alt ?? '');\n const borderRadius = this._computeBorderRadius();\n const showCaption = this._hasCaptionSlot;\n\n const containerStyles = {\n ...(this.ratio ? { '--_ratio': this.ratio } : {}),\n ...(this.fit ? { '--_fit': this.fit } : {}),\n ...(borderRadius ? { '--_radius': borderRadius } : {}),\n ...(this.width != null\n ? { width: typeof this.width === 'number' ? `${this.width}px` : this.width }\n : {}),\n ...(this.height != null\n ? { height: typeof this.height === 'number' ? `${this.height}px` : this.height }\n : {}),\n };\n\n if (this._error) {\n return html`\n <figure\n class=\"image__container image__container--error\"\n style=${styleMap(containerStyles)}\n role=\"alert\"\n >\n <slot name=\"fallback\"></slot>\n </figure>\n `;\n }\n\n return html`\n <figure class=\"image__container\" style=${styleMap(containerStyles)}>\n <img\n part=\"base\"\n class=\"image__img\"\n src=${this._currentSrc() || nothing}\n alt=${altText}\n role=${isDecorative ? 'presentation' : nothing}\n loading=${this.loading}\n width=${this.width != null ? this.width : nothing}\n height=${this.height != null ? this.height : nothing}\n srcset=${this.srcset ?? nothing}\n sizes=${this.sizes ?? nothing}\n @load=${this._handleLoad}\n @error=${this._handleError}\n />\n <figcaption\n part=\"caption\"\n class=${classMap({ image__caption: true, 'image__caption--visible': showCaption })}\n >\n <slot name=\"caption\" @slotchange=${this._onCaptionSlotChange}></slot>\n </figcaption>\n </figure>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-image': HelixImage;\n }\n}\n"],"names":["helixImageStyles","css","HelixImage","HelixElement","e","slot","isDecorative","altText","borderRadius","showCaption","containerStyles","html","styleMap","nothing","classMap","forcedColorsSurface","__decorateClass","property","state","customElement"],"mappings":"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"}