@helixui/library 1.1.1 → 1.1.2-next.2

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 (623) hide show
  1. package/custom-elements.json +8089 -7072
  2. package/dist/base/helix-element.d.ts +134 -0
  3. package/dist/base/helix-element.d.ts.map +1 -0
  4. package/dist/base/id-counter.d.ts +32 -0
  5. package/dist/base/id-counter.d.ts.map +1 -0
  6. package/dist/base/index.d.ts +4 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/styles.d.ts +19 -0
  9. package/dist/base/styles.d.ts.map +1 -0
  10. package/dist/components/hx-accordion/hx-accordion-item.d.ts +3 -0
  11. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  12. package/dist/components/hx-accordion/hx-accordion.d.ts +4 -1
  13. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  14. package/dist/components/hx-accordion/index.js +1 -1
  15. package/dist/components/hx-action-bar/hx-action-bar.d.ts +1 -1
  16. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  17. package/dist/components/hx-action-bar/index.js +1 -1
  18. package/dist/components/hx-alert/hx-alert.d.ts +18 -10
  19. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  20. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  21. package/dist/components/hx-alert/index.js +1 -1
  22. package/dist/components/hx-avatar/index.js +1 -1
  23. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  24. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  25. package/dist/components/hx-badge/index.js +1 -1
  26. package/dist/components/hx-banner/hx-banner.d.ts +15 -5
  27. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  28. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  29. package/dist/components/hx-banner/index.js +1 -1
  30. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +32 -3
  31. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  32. package/dist/components/hx-breadcrumb/index.js +1 -1
  33. package/dist/components/hx-button/hx-button.d.ts +11 -8
  34. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  35. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  36. package/dist/components/hx-button/index.js +1 -1
  37. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -6
  38. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  39. package/dist/components/hx-button-group/index.js +1 -1
  40. package/dist/components/hx-card/hx-card.d.ts +7 -7
  41. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  42. package/dist/components/hx-card/index.js +1 -1
  43. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  44. package/dist/components/hx-carousel/index.js +1 -1
  45. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -18
  46. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  47. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  48. package/dist/components/hx-checkbox/index.js +1 -1
  49. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +8 -3
  50. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  51. package/dist/components/hx-checkbox-group/index.js +1 -1
  52. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +126 -0
  53. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -0
  54. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts +2 -0
  55. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -0
  56. package/dist/components/hx-clinical-status/index.d.ts +3 -0
  57. package/dist/components/hx-clinical-status/index.d.ts.map +1 -0
  58. package/dist/components/hx-clinical-status/index.js +5 -0
  59. package/dist/components/hx-clinical-status/index.js.map +1 -0
  60. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  61. package/dist/components/hx-code-snippet/index.js +1 -1
  62. package/dist/components/hx-color-picker/color-utils.d.ts +27 -0
  63. package/dist/components/hx-color-picker/color-utils.d.ts.map +1 -0
  64. package/dist/components/hx-color-picker/hx-color-picker.d.ts +16 -4
  65. package/dist/components/hx-color-picker/hx-color-picker.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 +9 -4
  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/index.js +1 -1
  72. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -1
  73. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  74. package/dist/components/hx-copy-button/index.js +1 -1
  75. package/dist/components/hx-counter/hx-counter.d.ts +20 -3
  76. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  77. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  78. package/dist/components/hx-counter/index.js +1 -1
  79. package/dist/components/hx-data-table/hx-data-table.d.ts +13 -13
  80. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  81. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  82. package/dist/components/hx-data-table/index.js +1 -1
  83. package/dist/components/hx-date-picker/hx-date-picker.d.ts +70 -13
  84. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  85. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  86. package/dist/components/hx-date-picker/index.js +1 -1
  87. package/dist/components/hx-dialog/hx-dialog.d.ts +4 -1
  88. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  89. package/dist/components/hx-dialog/index.js +1 -1
  90. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  91. package/dist/components/hx-divider/index.js +1 -1
  92. package/dist/components/hx-drawer/hx-drawer.d.ts +5 -8
  93. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  94. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  95. package/dist/components/hx-drawer/index.js +1 -1
  96. package/dist/components/hx-dropdown/hx-dropdown.d.ts +14 -1
  97. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  98. package/dist/components/hx-dropdown/index.js +1 -1
  99. package/dist/components/hx-field/hx-field.d.ts +1 -1
  100. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  101. package/dist/components/hx-field/index.js +1 -1
  102. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  103. package/dist/components/hx-field-label/index.js +1 -1
  104. package/dist/components/hx-file-upload/hx-file-upload.d.ts +8 -9
  105. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  106. package/dist/components/hx-file-upload/index.js +1 -1
  107. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  108. package/dist/components/hx-form/index.js +1 -1
  109. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  110. package/dist/components/hx-format-date/index.js +1 -1
  111. package/dist/components/hx-grid/hx-grid.d.ts +5 -9
  112. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  113. package/dist/components/hx-grid/index.js +1 -1
  114. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  115. package/dist/components/hx-icon/index.js +1 -1
  116. package/dist/components/hx-icon-button/hx-icon-button.d.ts +4 -3
  117. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  118. package/dist/components/hx-icon-button/index.js +1 -1
  119. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  120. package/dist/components/hx-image/index.js +1 -1
  121. package/dist/components/hx-link/hx-link.d.ts +1 -1
  122. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  123. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  124. package/dist/components/hx-link/index.js +1 -1
  125. package/dist/components/hx-meter/hx-meter.d.ts +2 -2
  126. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  127. package/dist/components/hx-meter/index.js +1 -1
  128. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  129. package/dist/components/hx-nav/index.js +1 -1
  130. package/dist/components/hx-number-input/hx-number-input.d.ts +19 -7
  131. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  132. package/dist/components/hx-number-input/index.js +1 -1
  133. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +3 -3
  134. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  135. package/dist/components/hx-overflow-menu/index.js +1 -1
  136. package/dist/components/hx-pagination/hx-pagination.d.ts +26 -12
  137. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  138. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  139. package/dist/components/hx-pagination/index.js +1 -1
  140. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +105 -0
  141. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -0
  142. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts +2 -0
  143. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -0
  144. package/dist/components/hx-patient-banner/index.d.ts +3 -0
  145. package/dist/components/hx-patient-banner/index.d.ts.map +1 -0
  146. package/dist/components/hx-patient-banner/index.js +5 -0
  147. package/dist/components/hx-patient-banner/index.js.map +1 -0
  148. package/dist/components/hx-phi-field/hx-phi-field.d.ts +72 -0
  149. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -0
  150. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts +2 -0
  151. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -0
  152. package/dist/components/hx-phi-field/index.d.ts +3 -0
  153. package/dist/components/hx-phi-field/index.d.ts.map +1 -0
  154. package/dist/components/hx-phi-field/index.js +5 -0
  155. package/dist/components/hx-phi-field/index.js.map +1 -0
  156. package/dist/components/hx-popover/hx-popover.d.ts +25 -9
  157. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  158. package/dist/components/hx-popover/index.js +1 -1
  159. package/dist/components/hx-popup/hx-popup.d.ts +5 -8
  160. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  161. package/dist/components/hx-popup/index.js +1 -1
  162. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +2 -0
  163. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  164. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  165. package/dist/components/hx-progress-bar/index.js +1 -1
  166. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  167. package/dist/components/hx-progress-ring/index.js +1 -1
  168. package/dist/components/hx-prose/hx-prose.d.ts +1 -0
  169. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  170. package/dist/components/hx-radio-group/hx-radio-group.d.ts +3 -7
  171. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  172. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  173. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  174. package/dist/components/hx-radio-group/index.js +1 -1
  175. package/dist/components/hx-rating/hx-rating.d.ts +3 -3
  176. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  177. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  178. package/dist/components/hx-rating/index.js +1 -1
  179. package/dist/components/hx-select/hx-select.d.ts +16 -11
  180. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  181. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  182. package/dist/components/hx-select/index.js +1 -1
  183. package/dist/components/hx-side-nav/hx-nav-item.d.ts +7 -0
  184. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  185. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  186. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  187. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  188. package/dist/components/hx-side-nav/index.js +1 -1
  189. package/dist/components/hx-skeleton/hx-skeleton.d.ts +2 -2
  190. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  191. package/dist/components/hx-slider/hx-slider.d.ts +5 -8
  192. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  193. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  194. package/dist/components/hx-slider/index.js +1 -1
  195. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -1
  196. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  197. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  198. package/dist/components/hx-spinner/index.js +1 -1
  199. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  200. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  201. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  202. package/dist/components/hx-split-button/index.js +1 -1
  203. package/dist/components/hx-split-panel/hx-split-panel.d.ts +13 -9
  204. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  205. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  206. package/dist/components/hx-split-panel/index.js +1 -1
  207. package/dist/components/hx-stat/hx-stat.d.ts +7 -2
  208. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  209. package/dist/components/hx-stat/index.js +1 -1
  210. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +2 -2
  211. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  212. package/dist/components/hx-status-indicator/index.js +1 -1
  213. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  214. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  215. package/dist/components/hx-steps/index.js +1 -1
  216. package/dist/components/hx-structured-list/hx-structured-list.d.ts +10 -3
  217. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  218. package/dist/components/hx-structured-list/index.js +1 -1
  219. package/dist/components/hx-style-scope/hx-style-scope.d.ts +71 -0
  220. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -0
  221. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts +10 -0
  222. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -0
  223. package/dist/components/hx-style-scope/index.d.ts +2 -0
  224. package/dist/components/hx-style-scope/index.d.ts.map +1 -0
  225. package/dist/components/hx-style-scope/index.js +5 -0
  226. package/dist/components/hx-style-scope/index.js.map +1 -0
  227. package/dist/components/hx-switch/hx-switch.d.ts +4 -4
  228. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  229. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  230. package/dist/components/hx-switch/index.js +1 -1
  231. package/dist/components/hx-table/hx-table.d.ts +1 -0
  232. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  233. package/dist/components/hx-table/index.js +1 -1
  234. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  235. package/dist/components/hx-tabs/hx-tab.d.ts +1 -0
  236. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  237. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  238. package/dist/components/hx-tabs/hx-tabs.d.ts +2 -2
  239. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  240. package/dist/components/hx-tabs/index.js +1 -1
  241. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  242. package/dist/components/hx-tag/index.js +1 -1
  243. package/dist/components/hx-text/index.js +1 -1
  244. package/dist/components/hx-text-input/hx-text-input.d.ts +16 -15
  245. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  246. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  247. package/dist/components/hx-text-input/index.js +1 -1
  248. package/dist/components/hx-textarea/hx-textarea.d.ts +4 -4
  249. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  250. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  251. package/dist/components/hx-textarea/index.js +1 -1
  252. package/dist/components/hx-theme/hx-theme.d.ts +82 -3
  253. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  254. package/dist/components/hx-theme/index.js +1 -1
  255. package/dist/components/hx-time-picker/hx-time-picker.d.ts +6 -1
  256. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  257. package/dist/components/hx-time-picker/index.js +1 -1
  258. package/dist/components/hx-toast/hx-toast-stack.d.ts +1 -1
  259. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  260. package/dist/components/hx-toast/hx-toast.d.ts +9 -5
  261. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  262. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  263. package/dist/components/hx-toast/index.js +1 -1
  264. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  265. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -3
  266. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  267. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  268. package/dist/components/hx-toggle-button/index.js +1 -1
  269. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -2
  270. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  271. package/dist/components/hx-tooltip/index.js +1 -1
  272. package/dist/components/hx-tree-view/hx-tree-item.d.ts +7 -0
  273. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  274. package/dist/components/hx-tree-view/hx-tree-view.d.ts +21 -2
  275. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  276. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  277. package/dist/components/hx-tree-view/index.js +1 -1
  278. package/dist/controllers/helix-audit-controller.d.ts +71 -0
  279. package/dist/controllers/helix-audit-controller.d.ts.map +1 -0
  280. package/dist/css/helix-all.css +9592 -0
  281. package/dist/css/helix-core.css +1788 -0
  282. package/dist/css/helix-data.css +639 -0
  283. package/dist/css/helix-feedback.css +1239 -0
  284. package/dist/css/helix-forms.css +2498 -0
  285. package/dist/css/helix-layout.css +380 -0
  286. package/dist/css/helix-media.css +213 -0
  287. package/dist/css/helix-navigation.css +1129 -0
  288. package/dist/css/helix-overlay.css +643 -0
  289. package/dist/css/helix-tokens.css +432 -0
  290. package/dist/css/helix-utility.css +633 -0
  291. package/dist/css/hx-accordion.css +10 -0
  292. package/dist/css/hx-action-bar.css +117 -0
  293. package/dist/css/hx-alert.css +213 -0
  294. package/dist/css/hx-avatar.css +117 -0
  295. package/dist/css/hx-badge.css +178 -0
  296. package/dist/css/hx-banner.css +203 -0
  297. package/dist/css/hx-breadcrumb.css +36 -0
  298. package/dist/css/hx-button-group.css +91 -0
  299. package/dist/css/hx-button.css +262 -0
  300. package/dist/css/hx-card.css +161 -0
  301. package/dist/css/hx-carousel.css +211 -0
  302. package/dist/css/hx-checkbox-group.css +77 -0
  303. package/dist/css/hx-checkbox.css +219 -0
  304. package/dist/css/hx-clinical-status.css +246 -0
  305. package/dist/css/hx-code-snippet.css +179 -0
  306. package/dist/css/hx-color-picker.css +2 -0
  307. package/dist/css/hx-combobox.css +2 -0
  308. package/dist/css/hx-container.css +82 -0
  309. package/dist/css/hx-copy-button.css +121 -0
  310. package/dist/css/hx-counter.css +51 -0
  311. package/dist/css/hx-data-table.css +207 -0
  312. package/dist/css/hx-date-picker.css +2 -0
  313. package/dist/css/hx-dialog.css +190 -0
  314. package/dist/css/hx-divider.css +87 -0
  315. package/dist/css/hx-drawer.css +262 -0
  316. package/dist/css/hx-dropdown.css +46 -0
  317. package/dist/css/hx-field-label.css +38 -0
  318. package/dist/css/hx-field.css +119 -0
  319. package/dist/css/hx-file-upload.css +241 -0
  320. package/dist/css/hx-form.css +2 -0
  321. package/dist/css/hx-format-date.css +10 -0
  322. package/dist/css/hx-grid.css +14 -0
  323. package/dist/css/hx-help-text.css +50 -0
  324. package/dist/css/hx-icon-button.css +152 -0
  325. package/dist/css/hx-icon.css +73 -0
  326. package/dist/css/hx-image.css +41 -0
  327. package/dist/css/hx-link.css +105 -0
  328. package/dist/css/hx-list.css +48 -0
  329. package/dist/css/hx-menu.css +21 -0
  330. package/dist/css/hx-meter.css +113 -0
  331. package/dist/css/hx-nav.css +242 -0
  332. package/dist/css/hx-number-input.css +246 -0
  333. package/dist/css/hx-overflow-menu.css +133 -0
  334. package/dist/css/hx-pagination.css +193 -0
  335. package/dist/css/hx-patient-banner.css +111 -0
  336. package/dist/css/hx-phi-field.css +85 -0
  337. package/dist/css/hx-popover.css +61 -0
  338. package/dist/css/hx-popup.css +31 -0
  339. package/dist/css/hx-progress-bar.css +133 -0
  340. package/dist/css/hx-progress-ring.css +142 -0
  341. package/dist/css/hx-prose.css +2 -0
  342. package/dist/css/hx-radio-group.css +77 -0
  343. package/dist/css/hx-rating.css +96 -0
  344. package/dist/css/hx-select.css +268 -0
  345. package/dist/css/hx-side-nav.css +149 -0
  346. package/dist/css/hx-skeleton.css +82 -0
  347. package/dist/css/hx-slider.css +287 -0
  348. package/dist/css/hx-spinner.css +116 -0
  349. package/dist/css/hx-split-button.css +309 -0
  350. package/dist/css/hx-split-panel.css +168 -0
  351. package/dist/css/hx-stack.css +104 -0
  352. package/dist/css/hx-stat.css +106 -0
  353. package/dist/css/hx-status-indicator.css +97 -0
  354. package/dist/css/hx-steps.css +52 -0
  355. package/dist/css/hx-structured-list.css +75 -0
  356. package/dist/css/hx-style-scope.css +4 -0
  357. package/dist/css/hx-switch.css +169 -0
  358. package/dist/css/hx-table.css +128 -0
  359. package/dist/css/hx-tabs.css +76 -0
  360. package/dist/css/hx-tag.css +146 -0
  361. package/dist/css/hx-text-input.css +214 -0
  362. package/dist/css/hx-text.css +149 -0
  363. package/dist/css/hx-textarea.css +180 -0
  364. package/dist/css/hx-theme.css +23 -0
  365. package/dist/css/hx-time-picker.css +2 -0
  366. package/dist/css/hx-toast.css +230 -0
  367. package/dist/css/hx-toggle-button.css +207 -0
  368. package/dist/css/hx-tooltip.css +51 -0
  369. package/dist/css/hx-top-nav.css +203 -0
  370. package/dist/css/hx-tree-view.css +22 -0
  371. package/dist/css/hx-visually-hidden.css +26 -0
  372. package/dist/css/index.css +84 -0
  373. package/dist/css/manifest.json +2696 -0
  374. package/dist/index.d.ts +14 -0
  375. package/dist/index.d.ts.map +1 -1
  376. package/dist/index.js +266 -176
  377. package/dist/index.js.map +1 -1
  378. package/dist/mixins/FocusMixin.d.ts +49 -0
  379. package/dist/mixins/FocusMixin.d.ts.map +1 -0
  380. package/dist/mixins/FormMixin.d.ts +69 -0
  381. package/dist/mixins/FormMixin.d.ts.map +1 -0
  382. package/dist/mixins/aria-delegation.d.ts +97 -0
  383. package/dist/mixins/aria-delegation.d.ts.map +1 -0
  384. package/dist/mixins/index.d.ts +5 -0
  385. package/dist/mixins/index.d.ts.map +1 -0
  386. package/dist/shared/FormMixin-Bjvw20G5.js +88 -0
  387. package/dist/shared/FormMixin-Bjvw20G5.js.map +1 -0
  388. package/dist/shared/aria-delegation-CBP9eQ0M.js +107 -0
  389. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +1 -0
  390. package/dist/shared/{hx-accordion-D1kFhdeQ.js → hx-accordion-_KeulaQR.js} +83 -55
  391. package/dist/shared/hx-accordion-_KeulaQR.js.map +1 -0
  392. package/dist/shared/{hx-action-bar-D4bulGQP.js → hx-action-bar-vGFnNwNY.js} +33 -34
  393. package/dist/shared/hx-action-bar-vGFnNwNY.js.map +1 -0
  394. package/dist/shared/{hx-alert-K5F8KeqI.js → hx-alert-DRZYP0Oo.js} +32 -23
  395. package/dist/shared/hx-alert-DRZYP0Oo.js.map +1 -0
  396. package/dist/shared/{hx-avatar-Cun-O99h.js → hx-avatar-7p1cj3lG.js} +2 -2
  397. package/dist/shared/hx-avatar-7p1cj3lG.js.map +1 -0
  398. package/dist/shared/{hx-badge-CsFd2xtw.js → hx-badge-Xg7zoh4Q.js} +46 -37
  399. package/dist/shared/hx-badge-Xg7zoh4Q.js.map +1 -0
  400. package/dist/shared/{hx-banner-BTV-X2xF.js → hx-banner-2RS7Nux4.js} +93 -58
  401. package/dist/shared/hx-banner-2RS7Nux4.js.map +1 -0
  402. package/dist/shared/{hx-breadcrumb-item-4IwaLgaO.js → hx-breadcrumb-item-B2rjepqy.js} +79 -78
  403. package/dist/shared/hx-breadcrumb-item-B2rjepqy.js.map +1 -0
  404. package/dist/shared/{hx-button-7k-KeCYU.js → hx-button-6S3DwuIj.js} +81 -56
  405. package/dist/shared/hx-button-6S3DwuIj.js.map +1 -0
  406. package/dist/shared/{hx-button-group-CWjWv-wS.js → hx-button-group-ChTQsnQj.js} +10 -10
  407. package/dist/shared/hx-button-group-ChTQsnQj.js.map +1 -0
  408. package/dist/shared/{hx-card-0hT3G5hi.js → hx-card-dIKdcMhr.js} +32 -32
  409. package/dist/shared/hx-card-dIKdcMhr.js.map +1 -0
  410. package/dist/shared/{hx-carousel-item-DgeYyYZJ.js → hx-carousel-item-Cm8a1nAi.js} +3 -3
  411. package/dist/shared/hx-carousel-item-Cm8a1nAi.js.map +1 -0
  412. package/dist/shared/{hx-checkbox-BvjO-O41.js → hx-checkbox-_WUiuTo9.js} +68 -71
  413. package/dist/shared/hx-checkbox-_WUiuTo9.js.map +1 -0
  414. package/dist/shared/{hx-checkbox-group-Z5VvWzcj.js → hx-checkbox-group-B-ci-dxp.js} +37 -31
  415. package/dist/shared/hx-checkbox-group-B-ci-dxp.js.map +1 -0
  416. package/dist/shared/hx-clinical-status-De8yrA5I.js +467 -0
  417. package/dist/shared/hx-clinical-status-De8yrA5I.js.map +1 -0
  418. package/dist/shared/{hx-code-snippet-DqzPkH4K.js → hx-code-snippet-CQsyvthi.js} +56 -47
  419. package/dist/shared/hx-code-snippet-CQsyvthi.js.map +1 -0
  420. package/dist/shared/{hx-color-picker-Da8z6AlQ.js → hx-color-picker-Dk2Myvaf.js} +153 -137
  421. package/dist/shared/hx-color-picker-Dk2Myvaf.js.map +1 -0
  422. package/dist/shared/{hx-combobox-CivfelTS.js → hx-combobox-CNAJXIxo.js} +10 -10
  423. package/dist/shared/hx-combobox-CNAJXIxo.js.map +1 -0
  424. package/dist/shared/{hx-container-DLUKnTi9.js → hx-container-7j16VuQE.js} +16 -16
  425. package/dist/shared/hx-container-7j16VuQE.js.map +1 -0
  426. package/dist/shared/{hx-copy-button--0dymSvw.js → hx-copy-button-B_ZHYO7_.js} +47 -40
  427. package/dist/shared/hx-copy-button-B_ZHYO7_.js.map +1 -0
  428. package/dist/shared/hx-counter-D_B7L9Pi.js +185 -0
  429. package/dist/shared/hx-counter-D_B7L9Pi.js.map +1 -0
  430. package/dist/shared/{hx-data-table-DujB9hSE.js → hx-data-table-B1j4n4bm.js} +134 -107
  431. package/dist/shared/hx-data-table-B1j4n4bm.js.map +1 -0
  432. package/dist/shared/{hx-date-picker-C8d2HtRV.js → hx-date-picker-R-0kWFwr.js} +146 -130
  433. package/dist/shared/hx-date-picker-R-0kWFwr.js.map +1 -0
  434. package/dist/shared/{hx-dialog-DkUSnVgw.js → hx-dialog-U5d3s0Ps.js} +98 -89
  435. package/dist/shared/hx-dialog-U5d3s0Ps.js.map +1 -0
  436. package/dist/shared/{hx-divider-DNNs4e8q.js → hx-divider-DdAN-_jB.js} +5 -5
  437. package/dist/shared/hx-divider-DdAN-_jB.js.map +1 -0
  438. package/dist/shared/{hx-drawer-CJcRZcns.js → hx-drawer-e0qeGxAD.js} +117 -77
  439. package/dist/shared/hx-drawer-e0qeGxAD.js.map +1 -0
  440. package/dist/shared/{hx-dropdown-Bo0KTM1A.js → hx-dropdown-DP_DNpEb.js} +56 -41
  441. package/dist/shared/hx-dropdown-DP_DNpEb.js.map +1 -0
  442. package/dist/shared/{hx-field-3MmzJ4kZ.js → hx-field-COM4KvMQ.js} +9 -9
  443. package/dist/shared/hx-field-COM4KvMQ.js.map +1 -0
  444. package/dist/shared/{hx-field-label-Bg-EWvqF.js → hx-field-label-BtZ9H9Yy.js} +8 -11
  445. package/dist/shared/hx-field-label-BtZ9H9Yy.js.map +1 -0
  446. package/dist/shared/{hx-file-upload-ByjAgfNy.js → hx-file-upload-DbECypLe.js} +78 -87
  447. package/dist/shared/hx-file-upload-DbECypLe.js.map +1 -0
  448. package/dist/shared/{hx-form-BpS6v3Iu.js → hx-form-fJE-FJQV.js} +36 -32
  449. package/dist/shared/{hx-form-BpS6v3Iu.js.map → hx-form-fJE-FJQV.js.map} +1 -1
  450. package/dist/shared/{hx-format-date-BdnWV2kX.js → hx-format-date-C030ThSm.js} +14 -12
  451. package/dist/shared/hx-format-date-C030ThSm.js.map +1 -0
  452. package/dist/shared/{hx-grid-gEjuF0cR.js → hx-grid-DE8KM5Gf.js} +7 -7
  453. package/dist/shared/hx-grid-DE8KM5Gf.js.map +1 -0
  454. package/dist/shared/{hx-icon-button-DzH_bRtC.js → hx-icon-button-Et9wq79n.js} +4 -4
  455. package/dist/shared/{hx-icon-button-DzH_bRtC.js.map → hx-icon-button-Et9wq79n.js.map} +1 -1
  456. package/dist/shared/{hx-icon-CP6OnLoM.js → hx-icon-dYvrzvsO.js} +7 -7
  457. package/dist/shared/hx-icon-dYvrzvsO.js.map +1 -0
  458. package/dist/shared/{hx-image-C6pGiI6c.js → hx-image-DUsEi-oN.js} +15 -15
  459. package/dist/shared/hx-image-DUsEi-oN.js.map +1 -0
  460. package/dist/shared/{hx-link-Tmk_YPvW.js → hx-link-Peg2LzOD.js} +43 -41
  461. package/dist/shared/hx-link-Peg2LzOD.js.map +1 -0
  462. package/dist/shared/{hx-meter-uXkTZq-W.js → hx-meter-CVs4A649.js} +13 -13
  463. package/dist/shared/hx-meter-CVs4A649.js.map +1 -0
  464. package/dist/shared/{hx-nav-3JsN2Oak.js → hx-nav-D377Ngz4.js} +23 -24
  465. package/dist/shared/hx-nav-D377Ngz4.js.map +1 -0
  466. package/dist/shared/{hx-nav-item-D3EJatzc.js → hx-nav-item-CuGiJPAf.js} +75 -49
  467. package/dist/shared/hx-nav-item-CuGiJPAf.js.map +1 -0
  468. package/dist/shared/{hx-number-input-CAAibZ8X.js → hx-number-input-BPgrlMLN.js} +70 -66
  469. package/dist/shared/hx-number-input-BPgrlMLN.js.map +1 -0
  470. package/dist/shared/{hx-overflow-menu-2kgOJ_ht.js → hx-overflow-menu-Bz02LPPk.js} +15 -11
  471. package/dist/shared/hx-overflow-menu-Bz02LPPk.js.map +1 -0
  472. package/dist/shared/{hx-pagination-DBs-vmSv.js → hx-pagination-DYhYPqDn.js} +68 -63
  473. package/dist/shared/hx-pagination-DYhYPqDn.js.map +1 -0
  474. package/dist/shared/hx-patient-banner-BoJHddAL.js +256 -0
  475. package/dist/shared/hx-patient-banner-BoJHddAL.js.map +1 -0
  476. package/dist/shared/hx-phi-field-EDWna59z.js +261 -0
  477. package/dist/shared/hx-phi-field-EDWna59z.js.map +1 -0
  478. package/dist/shared/{hx-popover-DxE67miP.js → hx-popover-D6kYQkt3.js} +96 -69
  479. package/dist/shared/hx-popover-D6kYQkt3.js.map +1 -0
  480. package/dist/shared/{hx-popup-Dg6n_PbY.js → hx-popup-RQb6HUXc.js} +2 -2
  481. package/dist/shared/hx-popup-RQb6HUXc.js.map +1 -0
  482. package/dist/shared/{hx-progress-bar-Dm_EHyng.js → hx-progress-bar-ByEmxq1V.js} +42 -40
  483. package/dist/shared/hx-progress-bar-ByEmxq1V.js.map +1 -0
  484. package/dist/shared/{hx-progress-ring-DpxBDD5d.js → hx-progress-ring-CtVnNRQx.js} +2 -2
  485. package/dist/shared/{hx-progress-ring-DpxBDD5d.js.map → hx-progress-ring-CtVnNRQx.js.map} +1 -1
  486. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -1
  487. package/dist/shared/{hx-radio-BywgVSEu.js → hx-radio-jgeW92SV.js} +28 -27
  488. package/dist/shared/hx-radio-jgeW92SV.js.map +1 -0
  489. package/dist/shared/{hx-rating-CUWBQ0fZ.js → hx-rating-g_iy-DW_.js} +92 -96
  490. package/dist/shared/hx-rating-g_iy-DW_.js.map +1 -0
  491. package/dist/shared/{hx-select-BwDwxk-M.js → hx-select-4-nHL0vd.js} +73 -61
  492. package/dist/shared/hx-select-4-nHL0vd.js.map +1 -0
  493. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  494. package/dist/shared/{hx-slider-D_0EKJyk.js → hx-slider-7Q-e0_pc.js} +27 -22
  495. package/dist/shared/hx-slider-7Q-e0_pc.js.map +1 -0
  496. package/dist/shared/{hx-spinner-DMn4SChS.js → hx-spinner-DEgrKsUo.js} +3 -2
  497. package/dist/shared/hx-spinner-DEgrKsUo.js.map +1 -0
  498. package/dist/shared/{hx-split-button-CypgLXw1.js → hx-split-button-BA7P_ly5.js} +40 -31
  499. package/dist/shared/hx-split-button-BA7P_ly5.js.map +1 -0
  500. package/dist/shared/{hx-split-panel-BPMWKPGu.js → hx-split-panel-Bss54UN8.js} +28 -28
  501. package/dist/shared/hx-split-panel-Bss54UN8.js.map +1 -0
  502. package/dist/shared/{hx-stat-CHntLHJM.js → hx-stat-CmkCUI8v.js} +40 -32
  503. package/dist/shared/{hx-stat-CHntLHJM.js.map → hx-stat-CmkCUI8v.js.map} +1 -1
  504. package/dist/shared/{hx-status-indicator-C1BwEvUw.js → hx-status-indicator-4ClvA5mU.js} +19 -19
  505. package/dist/shared/hx-status-indicator-4ClvA5mU.js.map +1 -0
  506. package/dist/shared/{hx-step-BIVWSPxd.js → hx-step-DlANlr2A.js} +31 -71
  507. package/dist/shared/hx-step-DlANlr2A.js.map +1 -0
  508. package/dist/shared/{hx-structured-list-CMWllxGg.js → hx-structured-list-Db9rwLI_.js} +26 -23
  509. package/dist/shared/hx-structured-list-Db9rwLI_.js.map +1 -0
  510. package/dist/shared/hx-style-scope-BroUu83L.js +125 -0
  511. package/dist/shared/hx-style-scope-BroUu83L.js.map +1 -0
  512. package/dist/shared/{hx-switch-BgX8kuWt.js → hx-switch-C0Lp5RGy.js} +8 -5
  513. package/dist/shared/hx-switch-C0Lp5RGy.js.map +1 -0
  514. package/dist/shared/{hx-tab-panel-DhOq67jj.js → hx-tab-panel-GGjk6Qg4.js} +129 -118
  515. package/dist/shared/hx-tab-panel-GGjk6Qg4.js.map +1 -0
  516. package/dist/shared/{hx-tag-CzOTDcXI.js → hx-tag-K5fCjfqQ.js} +15 -14
  517. package/dist/shared/hx-tag-K5fCjfqQ.js.map +1 -0
  518. package/dist/shared/{hx-td-h6oeW6YC.js → hx-td-DZuILY3s.js} +43 -40
  519. package/dist/shared/hx-td-DZuILY3s.js.map +1 -0
  520. package/dist/shared/{hx-text-DTXjiviE.js → hx-text-DoEVOf47.js} +29 -29
  521. package/dist/shared/hx-text-DoEVOf47.js.map +1 -0
  522. package/dist/shared/hx-text-input-DTKWPVdy.js +576 -0
  523. package/dist/shared/hx-text-input-DTKWPVdy.js.map +1 -0
  524. package/dist/shared/{hx-textarea-BgX7rxyo.js → hx-textarea-BkSiU8oM.js} +15 -15
  525. package/dist/shared/hx-textarea-BkSiU8oM.js.map +1 -0
  526. package/dist/shared/hx-theme-Aag8QJvT.js +299 -0
  527. package/dist/shared/hx-theme-Aag8QJvT.js.map +1 -0
  528. package/dist/shared/{hx-time-picker-DmLu7WUC.js → hx-time-picker-BpCRsh_z.js} +54 -53
  529. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +1 -0
  530. package/dist/shared/{hx-toggle-button-D1jpDvSA.js → hx-toggle-button-CPFqs3eQ.js} +8 -5
  531. package/dist/shared/hx-toggle-button-CPFqs3eQ.js.map +1 -0
  532. package/dist/shared/{hx-tooltip-kh7QFPKu.js → hx-tooltip-CrO4vzeX.js} +15 -10
  533. package/dist/shared/hx-tooltip-CrO4vzeX.js.map +1 -0
  534. package/dist/shared/{hx-tree-item-BP6UF_H1.js → hx-tree-item-DTDIBRrI.js} +122 -89
  535. package/dist/shared/hx-tree-item-DTDIBRrI.js.map +1 -0
  536. package/dist/shared/id-counter-JhvVCnjh.js +143 -0
  537. package/dist/shared/id-counter-JhvVCnjh.js.map +1 -0
  538. package/dist/shared/{toast-factory-DTy-qN8r.js → toast-factory-f184Gi70.js} +57 -45
  539. package/dist/shared/toast-factory-f184Gi70.js.map +1 -0
  540. package/dist/utilities/adoptedStylesheetRegistry.d.ts +47 -0
  541. package/dist/utilities/adoptedStylesheetRegistry.d.ts.map +1 -0
  542. package/dist/utilities/generateScopedSelectors.d.ts +30 -0
  543. package/dist/utilities/generateScopedSelectors.d.ts.map +1 -0
  544. package/dist/utilities/injectLightStyles.d.ts +37 -0
  545. package/dist/utilities/injectLightStyles.d.ts.map +1 -0
  546. package/dist/utilities/lightStyleRegistry.d.ts +41 -0
  547. package/dist/utilities/lightStyleRegistry.d.ts.map +1 -0
  548. package/dist/utilities/sheetManager.d.ts +62 -0
  549. package/dist/utilities/sheetManager.d.ts.map +1 -0
  550. package/dist/utils/contrast-checker.d.ts +86 -0
  551. package/dist/utils/contrast-checker.d.ts.map +1 -0
  552. package/dist/utils/token-merger.d.ts +24 -0
  553. package/dist/utils/token-merger.d.ts.map +1 -0
  554. package/fouc.css +37 -0
  555. package/package.json +26 -6
  556. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +0 -1
  557. package/dist/shared/hx-action-bar-D4bulGQP.js.map +0 -1
  558. package/dist/shared/hx-alert-K5F8KeqI.js.map +0 -1
  559. package/dist/shared/hx-avatar-Cun-O99h.js.map +0 -1
  560. package/dist/shared/hx-badge-CsFd2xtw.js.map +0 -1
  561. package/dist/shared/hx-banner-BTV-X2xF.js.map +0 -1
  562. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +0 -1
  563. package/dist/shared/hx-button-7k-KeCYU.js.map +0 -1
  564. package/dist/shared/hx-button-group-CWjWv-wS.js.map +0 -1
  565. package/dist/shared/hx-card-0hT3G5hi.js.map +0 -1
  566. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +0 -1
  567. package/dist/shared/hx-checkbox-BvjO-O41.js.map +0 -1
  568. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +0 -1
  569. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +0 -1
  570. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +0 -1
  571. package/dist/shared/hx-combobox-CivfelTS.js.map +0 -1
  572. package/dist/shared/hx-container-DLUKnTi9.js.map +0 -1
  573. package/dist/shared/hx-copy-button--0dymSvw.js.map +0 -1
  574. package/dist/shared/hx-counter-Duf00H7p.js +0 -147
  575. package/dist/shared/hx-counter-Duf00H7p.js.map +0 -1
  576. package/dist/shared/hx-data-table-DujB9hSE.js.map +0 -1
  577. package/dist/shared/hx-date-picker-C8d2HtRV.js.map +0 -1
  578. package/dist/shared/hx-dialog-DkUSnVgw.js.map +0 -1
  579. package/dist/shared/hx-divider-DNNs4e8q.js.map +0 -1
  580. package/dist/shared/hx-drawer-CJcRZcns.js.map +0 -1
  581. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +0 -1
  582. package/dist/shared/hx-field-3MmzJ4kZ.js.map +0 -1
  583. package/dist/shared/hx-field-label-Bg-EWvqF.js.map +0 -1
  584. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +0 -1
  585. package/dist/shared/hx-format-date-BdnWV2kX.js.map +0 -1
  586. package/dist/shared/hx-grid-gEjuF0cR.js.map +0 -1
  587. package/dist/shared/hx-icon-CP6OnLoM.js.map +0 -1
  588. package/dist/shared/hx-image-C6pGiI6c.js.map +0 -1
  589. package/dist/shared/hx-link-Tmk_YPvW.js.map +0 -1
  590. package/dist/shared/hx-meter-uXkTZq-W.js.map +0 -1
  591. package/dist/shared/hx-nav-3JsN2Oak.js.map +0 -1
  592. package/dist/shared/hx-nav-item-D3EJatzc.js.map +0 -1
  593. package/dist/shared/hx-number-input-CAAibZ8X.js.map +0 -1
  594. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +0 -1
  595. package/dist/shared/hx-pagination-DBs-vmSv.js.map +0 -1
  596. package/dist/shared/hx-popover-DxE67miP.js.map +0 -1
  597. package/dist/shared/hx-popup-Dg6n_PbY.js.map +0 -1
  598. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +0 -1
  599. package/dist/shared/hx-radio-BywgVSEu.js.map +0 -1
  600. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +0 -1
  601. package/dist/shared/hx-select-BwDwxk-M.js.map +0 -1
  602. package/dist/shared/hx-slider-D_0EKJyk.js.map +0 -1
  603. package/dist/shared/hx-spinner-DMn4SChS.js.map +0 -1
  604. package/dist/shared/hx-split-button-CypgLXw1.js.map +0 -1
  605. package/dist/shared/hx-split-panel-BPMWKPGu.js.map +0 -1
  606. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +0 -1
  607. package/dist/shared/hx-step-BIVWSPxd.js.map +0 -1
  608. package/dist/shared/hx-structured-list-CMWllxGg.js.map +0 -1
  609. package/dist/shared/hx-switch-BgX8kuWt.js.map +0 -1
  610. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +0 -1
  611. package/dist/shared/hx-tag-CzOTDcXI.js.map +0 -1
  612. package/dist/shared/hx-td-h6oeW6YC.js.map +0 -1
  613. package/dist/shared/hx-text-DTXjiviE.js.map +0 -1
  614. package/dist/shared/hx-text-input-CqEdDHMU.js +0 -461
  615. package/dist/shared/hx-text-input-CqEdDHMU.js.map +0 -1
  616. package/dist/shared/hx-textarea-BgX7rxyo.js.map +0 -1
  617. package/dist/shared/hx-theme-6GDoUG8j.js +0 -176
  618. package/dist/shared/hx-theme-6GDoUG8j.js.map +0 -1
  619. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +0 -1
  620. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +0 -1
  621. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +0 -1
  622. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +0 -1
  623. package/dist/shared/toast-factory-DTy-qN8r.js.map +0 -1
@@ -0,0 +1,1788 @@
1
+ /* helix-core.css — 15 components */
2
+
3
+ /* ── hx-avatar ── */
4
+ :host {
5
+ display: inline-block;
6
+ }
7
+
8
+ /* P2-5: Respect the HTML hidden attribute — custom elements with explicit display ignore it otherwise. */
9
+ :host([hidden]) {
10
+ display: none !important;
11
+ }
12
+
13
+ /* P0-2: Wrapper provides the positioning context for the badge slot, outside overflow: hidden. */
14
+ .avatar-wrapper {
15
+ position: relative;
16
+ display: inline-flex;
17
+ }
18
+
19
+ .avatar {
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ overflow: hidden;
24
+ width: var(--hx-avatar-size);
25
+ height: var(--hx-avatar-size);
26
+ background-color: var(--hx-avatar-bg, var(--hx-color-primary-100));
27
+ color: var(--hx-avatar-color, var(--hx-color-primary-700));
28
+ border-radius: var(--hx-avatar-border-radius);
29
+ flex-shrink: 0;
30
+ }
31
+
32
+ /* ─── Size Variants ─── */
33
+
34
+ .avatar--xs {
35
+ --hx-avatar-size: var(--hx-size-6, 1.5rem);
36
+ --hx-avatar-font-size: var(--hx-font-size-2xs, 0.625rem);
37
+ }
38
+
39
+ .avatar--sm {
40
+ --hx-avatar-size: var(--hx-size-8, 2rem);
41
+ --hx-avatar-font-size: var(--hx-font-size-xs, 0.75rem);
42
+ }
43
+
44
+ .avatar--md {
45
+ --hx-avatar-size: var(--hx-size-10, 2.5rem);
46
+ --hx-avatar-font-size: var(--hx-font-size-sm, 0.875rem);
47
+ }
48
+
49
+ .avatar--lg {
50
+ --hx-avatar-size: var(--hx-size-12, 3rem);
51
+ --hx-avatar-font-size: var(--hx-font-size-md, 1rem);
52
+ }
53
+
54
+ .avatar--xl {
55
+ --hx-avatar-size: var(--hx-size-16, 4rem);
56
+ --hx-avatar-font-size: var(--hx-font-size-lg, 1.125rem);
57
+ }
58
+
59
+ /* ─── Shape Variants ─── */
60
+
61
+ .avatar--circle {
62
+ --hx-avatar-border-radius: 50%;
63
+ }
64
+
65
+ .avatar--square {
66
+ --hx-avatar-border-radius: var(--hx-border-radius-md, 0.375rem);
67
+ }
68
+
69
+ /* ─── Image ─── */
70
+
71
+ .avatar__image {
72
+ width: 100%;
73
+ height: 100%;
74
+ object-fit: cover;
75
+ display: block;
76
+ }
77
+
78
+ /* ─── Initials ─── */
79
+
80
+ .avatar__initials {
81
+ font-family: var(--hx-font-family-sans, sans-serif);
82
+ font-size: var(--hx-avatar-font-size);
83
+ font-weight: var(--hx-font-weight-semibold, 600);
84
+ line-height: 1;
85
+ text-transform: uppercase;
86
+ letter-spacing: var(--hx-letter-spacing-wide, 0.025em);
87
+ user-select: none;
88
+ }
89
+
90
+ /* ─── Fallback Icon ─── */
91
+
92
+ .avatar__fallback-icon {
93
+ width: 60%;
94
+ height: 60%;
95
+ color: var(--hx-avatar-color, var(--hx-color-primary-700));
96
+ }
97
+
98
+ /* ─── Badge Slot ─── */
99
+
100
+ /* P0-2: Positioned relative to .avatar-wrapper — outside the overflow: hidden on .avatar. */
101
+ .avatar__badge {
102
+ position: absolute;
103
+ bottom: 0;
104
+ right: 0;
105
+ }
106
+
107
+ /* P2-2: Hide the badge wrapper when no slot content is present, preserving slotchange detection. */
108
+ .avatar__badge--hidden {
109
+ display: none;
110
+ }
111
+
112
+ /* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,
113
+ leaving no visual boundary. Add a border so the avatar remains perceivable.
114
+ WCAG 1.4.11 Non-text Contrast (Level AA). */
115
+ @media (forced-colors: active) {
116
+ .avatar {
117
+ border: 2px solid ButtonText;
118
+ }
119
+ }
120
+ /* ── hx-badge ── */
121
+ :host {
122
+ display: inline-block;
123
+ }
124
+
125
+ .badge {
126
+ display: inline-flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ gap: var(--hx-space-1, 0.25rem);
130
+ border-radius: var(--hx-badge-border-radius, var(--hx-border-radius-md, 0.375rem));
131
+ background-color: var(--hx-badge-bg, var(--hx-color-primary-500, #2563eb));
132
+ color: var(--hx-badge-color, var(--hx-color-neutral-0, #ffffff));
133
+ font-family: var(--hx-badge-font-family, var(--hx-font-family-sans, sans-serif));
134
+ font-weight: var(--hx-badge-font-weight, var(--hx-font-weight-semibold, 600));
135
+ line-height: var(--hx-line-height-tight, 1.25);
136
+ white-space: nowrap;
137
+ vertical-align: middle;
138
+ position: relative;
139
+ }
140
+
141
+ /* ─── Size Variants ─── */
142
+
143
+ .badge--sm {
144
+ font-size: var(--hx-badge-font-size, var(--hx-font-size-2xs, 0.625rem));
145
+ padding: var(--hx-badge-padding-y, var(--hx-space-0-5, 0.125rem))
146
+ var(--hx-badge-padding-x, var(--hx-space-1-5, 0.375rem));
147
+ }
148
+
149
+ .badge--md {
150
+ font-size: var(--hx-badge-font-size, var(--hx-font-size-xs, 0.75rem));
151
+ padding: var(--hx-badge-padding-y, var(--hx-space-1, 0.25rem))
152
+ var(--hx-badge-padding-x, var(--hx-space-2, 0.5rem));
153
+ }
154
+
155
+ .badge--lg {
156
+ font-size: var(--hx-badge-font-size, var(--hx-font-size-sm, 0.875rem));
157
+ padding: var(--hx-badge-padding-y, var(--hx-space-1, 0.25rem))
158
+ var(--hx-badge-padding-x, var(--hx-space-3, 0.75rem));
159
+ }
160
+
161
+ /* ─── Style Variants ─── */
162
+
163
+ .badge--primary {
164
+ --hx-badge-bg: var(--hx-color-primary-500, #2563eb);
165
+ --hx-badge-color: var(--hx-color-neutral-0, #ffffff);
166
+ --hx-badge-pulse-color: var(--hx-color-primary-500, #2563eb);
167
+ }
168
+
169
+ .badge--secondary {
170
+ --hx-badge-bg: var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f3f4f6));
171
+ --hx-badge-color: var(--hx-badge-secondary-color, var(--hx-color-neutral-700, #374151));
172
+ --hx-badge-pulse-color: var(--hx-badge-secondary-bg, var(--hx-color-neutral-100, #f3f4f6));
173
+ }
174
+
175
+ .badge--success {
176
+ --hx-badge-bg: var(--hx-color-success-700, #15803d);
177
+ --hx-badge-color: var(--hx-color-neutral-0, #ffffff);
178
+ --hx-badge-pulse-color: var(--hx-color-success-700, #15803d);
179
+ }
180
+
181
+ .badge--warning {
182
+ --hx-badge-bg: var(--hx-color-warning-500, #eab308);
183
+ --hx-badge-color: var(--hx-color-neutral-900, #1a1a1a);
184
+ --hx-badge-pulse-color: var(--hx-color-warning-500, #eab308);
185
+ }
186
+
187
+ .badge--error {
188
+ --hx-badge-bg: var(--hx-color-error-500, #dc2626);
189
+ --hx-badge-color: var(--hx-color-neutral-0, #ffffff);
190
+ --hx-badge-pulse-color: var(--hx-color-error-500, #dc2626);
191
+ }
192
+
193
+ .badge--neutral {
194
+ --hx-badge-bg: var(--hx-color-neutral-200, #e5e7eb);
195
+ --hx-badge-color: var(--hx-color-neutral-700, #374151);
196
+ --hx-badge-pulse-color: var(--hx-color-neutral-200, #e5e7eb);
197
+ }
198
+
199
+ .badge--info {
200
+ --hx-badge-bg: var(--hx-badge-info-bg, var(--hx-color-info-700, #0369a1));
201
+ --hx-badge-color: var(--hx-badge-info-color, var(--hx-color-neutral-0, #ffffff));
202
+ --hx-badge-pulse-color: var(--hx-badge-info-bg, var(--hx-color-info-700, #0369a1));
203
+ }
204
+
205
+ /* ─── Semantic Variant Label (WCAG 1.4.1) ─── */
206
+ /* Visually hidden text prefix for semantic variants (success/warning/error/info). */
207
+ /* Ensures the variant is not conveyed by color alone. */
208
+
209
+ .badge__variant-label {
210
+ position: absolute;
211
+ width: 1px;
212
+ height: 1px;
213
+ padding: 0;
214
+ margin: -1px;
215
+ overflow: hidden;
216
+ clip: rect(0, 0, 0, 0);
217
+ white-space: nowrap;
218
+ border: 0;
219
+ }
220
+
221
+ /* ─── Pill Mode ─── */
222
+
223
+ .badge--pill {
224
+ border-radius: var(--hx-badge-border-radius, var(--hx-border-radius-full, 9999px));
225
+ }
226
+
227
+ /* ─── Dot Indicator (empty + pulse) ─── */
228
+
229
+ .badge--dot {
230
+ width: var(--hx-badge-dot-size, var(--hx-space-2, 0.5rem));
231
+ height: var(--hx-badge-dot-size, var(--hx-space-2, 0.5rem));
232
+ padding: 0;
233
+ border-radius: var(--hx-border-radius-full, 9999px);
234
+ }
235
+
236
+ /* Guard: hide prefix slot and slotted content in dot mode to prevent overflow */
237
+ .badge--dot ::slotted(*) {
238
+ display: none;
239
+ }
240
+
241
+ .badge--dot slot[name='prefix'] {
242
+ display: none;
243
+ }
244
+
245
+ /* ─── Pulse Animation ─── */
246
+
247
+ @keyframes hx-badge-pulse {
248
+ 0%,
249
+ 100% {
250
+ opacity: 1;
251
+ box-shadow: 0 0 0 2px var(--hx-badge-pulse-color, currentColor);
252
+ }
253
+ 50% {
254
+ opacity: var(--hx-opacity-75, 0.75);
255
+ box-shadow: 0 0 0 6px transparent;
256
+ }
257
+ }
258
+
259
+ .badge--pulse {
260
+ animation: hx-badge-pulse var(--hx-badge-pulse-duration, var(--hx-duration-slow, 2s))
261
+ var(--hx-badge-pulse-easing, var(--hx-easing-in-out, ease-in-out)) infinite;
262
+ }
263
+
264
+ @media (prefers-reduced-motion: reduce) {
265
+ .badge--pulse {
266
+ animation: none;
267
+ }
268
+ }
269
+
270
+ /* ─── Remove Button ─── */
271
+
272
+ .badge__remove-button {
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ background: none;
277
+ border: none;
278
+ padding: 0;
279
+ margin-inline-start: var(--hx-space-1, 0.25rem);
280
+ cursor: pointer;
281
+ color: inherit;
282
+ opacity: var(--hx-opacity-75, 0.75);
283
+ border-radius: var(--hx-border-radius-sm, 0.125rem);
284
+ line-height: 0;
285
+ /* WCAG 2.5.5: minimum 44×44px touch target */
286
+ min-width: var(--hx-touch-target-min, 2.75rem);
287
+ min-height: var(--hx-touch-target-min, 2.75rem);
288
+ }
289
+
290
+ .badge__remove-button:hover {
291
+ opacity: var(--hx-opacity-100, 1);
292
+ }
293
+
294
+ .badge__remove-button:focus-visible {
295
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
296
+ outline-offset: var(--hx-focus-ring-offset, 1px);
297
+ }
298
+ /* ── hx-button ── */
299
+ :host {
300
+ display: inline-block;
301
+ }
302
+
303
+ :host([disabled]) {
304
+ pointer-events: none;
305
+ opacity: var(--hx-opacity-disabled, 0.5);
306
+ }
307
+
308
+ :host([full]) {
309
+ display: block;
310
+ width: 100%;
311
+ }
312
+
313
+ :host([full]) .button {
314
+ width: 100%;
315
+ justify-content: center;
316
+ }
317
+
318
+ /* ─── Base Button ─── */
319
+
320
+ .button {
321
+ display: inline-flex;
322
+ align-items: center;
323
+ justify-content: center;
324
+ gap: var(--hx-space-2, 0.5rem);
325
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-button-border-color, transparent);
326
+ border-radius: var(--hx-button-border-radius, var(--hx-border-radius-md, 0.375rem));
327
+ background-color: var(--hx-button-bg, var(--hx-color-primary-500, #2563eb));
328
+ color: var(--hx-button-color, var(--hx-color-neutral-0, #ffffff));
329
+ font-family: var(--hx-button-font-family, var(--hx-font-family-sans, sans-serif));
330
+ font-weight: var(--hx-button-font-weight, var(--hx-font-weight-semibold, 600));
331
+ line-height: var(--hx-line-height-tight, 1.25);
332
+ cursor: pointer;
333
+ transition:
334
+ background-color var(--hx-transition-fast, 150ms ease),
335
+ color var(--hx-transition-fast, 150ms ease),
336
+ border-color var(--hx-transition-fast, 150ms ease),
337
+ box-shadow var(--hx-transition-fast, 150ms ease);
338
+ text-decoration: none;
339
+ white-space: nowrap;
340
+ user-select: none;
341
+ -webkit-user-select: none;
342
+ }
343
+
344
+ .button:focus-visible {
345
+ outline: var(--hx-focus-ring-width, 2px) solid
346
+ var(--hx-button-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
347
+ outline-offset: var(--hx-focus-ring-offset, 2px);
348
+ }
349
+
350
+ .button:hover {
351
+ filter: brightness(var(--hx-filter-brightness-hover, 0.9));
352
+ }
353
+
354
+ .button:active {
355
+ filter: brightness(var(--hx-filter-brightness-active, 0.8));
356
+ }
357
+
358
+ /* ─── Size Variants ─── */
359
+
360
+ .button--sm {
361
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
362
+ font-size: var(--hx-font-size-sm, 0.875rem);
363
+ min-height: var(--hx-size-8, 2rem);
364
+ }
365
+
366
+ .button--md {
367
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
368
+ font-size: var(--hx-font-size-md, 1rem);
369
+ min-height: var(--hx-size-10, 2.5rem);
370
+ }
371
+
372
+ .button--lg {
373
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-6, 1.5rem);
374
+ font-size: var(--hx-font-size-lg, 1.125rem);
375
+ min-height: var(--hx-size-12, 3rem);
376
+ }
377
+
378
+ /* ─── Style Variants ─── */
379
+
380
+ .button--primary {
381
+ --hx-button-bg: var(--hx-color-primary-500);
382
+ --hx-button-color: var(--hx-color-neutral-0);
383
+ --hx-button-border-color: transparent;
384
+ }
385
+
386
+ .button--secondary {
387
+ --hx-button-bg: transparent;
388
+ --hx-button-color: var(--hx-color-primary-500);
389
+ --hx-button-border-color: var(--hx-color-primary-500);
390
+ }
391
+
392
+ .button--secondary:hover {
393
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-primary-50));
394
+ }
395
+
396
+ .button--tertiary {
397
+ --hx-button-bg: var(--hx-color-neutral-100);
398
+ --hx-button-color: var(--hx-color-neutral-900);
399
+ --hx-button-border-color: transparent;
400
+ }
401
+
402
+ .button--tertiary:hover {
403
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-neutral-200));
404
+ }
405
+
406
+ .button--danger {
407
+ --hx-button-bg: var(--hx-color-error-500);
408
+ --hx-button-color: var(--hx-color-neutral-0);
409
+ --hx-button-border-color: transparent;
410
+ }
411
+
412
+ .button--danger:hover {
413
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-error-600));
414
+ }
415
+
416
+ .button--ghost {
417
+ --hx-button-bg: transparent;
418
+ --hx-button-color: var(--hx-color-primary-500);
419
+ --hx-button-border-color: transparent;
420
+ }
421
+
422
+ .button--ghost:hover {
423
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-neutral-100));
424
+ }
425
+
426
+ .button--outline {
427
+ --hx-button-bg: transparent;
428
+ --hx-button-color: var(--hx-color-neutral-900);
429
+ --hx-button-border-color: var(--hx-color-neutral-300);
430
+ }
431
+
432
+ .button--outline:hover {
433
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-neutral-50));
434
+ }
435
+
436
+ .button--primary:hover {
437
+ --hx-button-bg: var(--hx-button-hover-bg, var(--hx-color-primary-500));
438
+ }
439
+
440
+ /* ─── Disabled ─── */
441
+
442
+ /* Note: opacity is applied on :host([disabled]) above — do NOT add opacity here.
443
+ Stacking opacity on both :host and .button[disabled] would multiply to 0.25. */
444
+ .button[disabled] {
445
+ cursor: not-allowed;
446
+ }
447
+
448
+ /* ─── Loading State ─── */
449
+
450
+ .button--loading {
451
+ position: relative;
452
+ cursor: wait;
453
+ }
454
+
455
+ .button__spinner {
456
+ width: 1em;
457
+ height: 1em;
458
+ flex-shrink: 0;
459
+ animation: hx-spin var(--hx-duration-spinner, 750ms) linear infinite;
460
+ }
461
+
462
+ @keyframes hx-spin {
463
+ to {
464
+ transform: rotate(360deg);
465
+ }
466
+ }
467
+
468
+ @media (prefers-reduced-motion: reduce) {
469
+ .button {
470
+ transition: none;
471
+ }
472
+
473
+ .button__spinner {
474
+ animation: none;
475
+ opacity: var(--hx-opacity-muted, 0.6);
476
+ }
477
+ }
478
+
479
+ /* ─── Inverted Mode ─── */
480
+
481
+ /* Override text color and filter-based hover/active for all variants */
482
+ :host([inverted]) .button {
483
+ color: var(--hx-button-inverted-color, var(--hx-color-neutral-0));
484
+ filter: none;
485
+ }
486
+
487
+ :host([inverted]) .button:hover {
488
+ filter: none;
489
+ }
490
+
491
+ :host([inverted]) .button:active {
492
+ filter: none;
493
+ }
494
+
495
+ :host([inverted]) .button:focus-visible {
496
+ outline-color: var(
497
+ --hx-button-inverted-focus-ring-color,
498
+ var(--hx-overlay-white-50, rgba(255, 255, 255, 0.5))
499
+ );
500
+ }
501
+
502
+ /* Primary inverted — slight transparent white overlay on hover */
503
+ :host([inverted]) .button--primary:hover {
504
+ --hx-button-bg: var(--hx-color-primary-400, #3b82f6);
505
+ }
506
+
507
+ /* Secondary inverted — white border and text */
508
+ :host([inverted]) .button--secondary {
509
+ --hx-button-border-color: var(--hx-overlay-white-70, rgba(255, 255, 255, 0.7));
510
+ }
511
+
512
+ :host([inverted]) .button--secondary:hover {
513
+ --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
514
+ }
515
+
516
+ /* Tertiary inverted */
517
+ :host([inverted]) .button--tertiary {
518
+ --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
519
+ --hx-button-border-color: transparent;
520
+ }
521
+
522
+ :host([inverted]) .button--tertiary:hover {
523
+ --hx-button-bg: var(--hx-overlay-white-25, rgba(255, 255, 255, 0.25));
524
+ }
525
+
526
+ /* Ghost inverted — transparent base, white hover bg */
527
+ :host([inverted]) .button--ghost {
528
+ --hx-button-bg: transparent;
529
+ --hx-button-border-color: transparent;
530
+ }
531
+
532
+ :host([inverted]) .button--ghost:hover {
533
+ --hx-button-bg: var(
534
+ --hx-button-inverted-ghost-hover-bg,
535
+ var(--hx-overlay-white-20, rgba(255, 255, 255, 0.2))
536
+ );
537
+ }
538
+
539
+ /* Outline inverted — white border */
540
+ :host([inverted]) .button--outline {
541
+ --hx-button-border-color: var(--hx-overlay-white-70, rgba(255, 255, 255, 0.7));
542
+ }
543
+
544
+ :host([inverted]) .button--outline:hover {
545
+ --hx-button-bg: var(--hx-overlay-white-15, rgba(255, 255, 255, 0.15));
546
+ }
547
+
548
+ /* ─── Prefix / Suffix / Label ─── */
549
+
550
+ .button__prefix,
551
+ .button__suffix {
552
+ display: inline-flex;
553
+ align-items: center;
554
+ flex-shrink: 0;
555
+ }
556
+
557
+ .button__label {
558
+ flex: 1 1 auto;
559
+ }
560
+ /* ── hx-button-group ── */
561
+ :host {
562
+ display: inline-flex;
563
+ contain: layout style;
564
+ }
565
+
566
+ .group {
567
+ display: inline-flex;
568
+ align-items: stretch;
569
+ }
570
+
571
+ /* ─── Orientation Variants ─── */
572
+
573
+ .group--horizontal {
574
+ flex-direction: row;
575
+ }
576
+
577
+ .group--vertical {
578
+ flex-direction: column;
579
+ }
580
+
581
+ /* ─── No Double Borders: Horizontal ─── */
582
+
583
+ .group--horizontal ::slotted(*:not(:first-child)) {
584
+ margin-inline-start: calc(-1 * var(--hx-border-width-thin, 1px));
585
+ }
586
+
587
+ /* ─── No Double Borders: Vertical ─── */
588
+
589
+ .group--vertical ::slotted(*:not(:first-child)) {
590
+ margin-top: calc(-1 * var(--hx-border-width-thin, 1px));
591
+ }
592
+
593
+ /* ─── Border Radius: Horizontal — Single child keeps all corners ─── */
594
+
595
+ .group--horizontal ::slotted(:only-child) {
596
+ --hx-button-border-radius: var(--hx-border-radius-md, 0.375rem);
597
+ }
598
+
599
+ /* ─── Border Radius: Horizontal — First child keeps left corners ─── */
600
+
601
+ .group--horizontal ::slotted(:first-child:not(:only-child)) {
602
+ --hx-button-border-radius: var(--hx-border-radius-md, 0.375rem) 0 0
603
+ var(--hx-border-radius-md, 0.375rem);
604
+ }
605
+
606
+ /* ─── Border Radius: Horizontal — Last child keeps right corners ─── */
607
+
608
+ .group--horizontal ::slotted(:last-child:not(:only-child)) {
609
+ --hx-button-border-radius: 0 var(--hx-border-radius-md, 0.375rem)
610
+ var(--hx-border-radius-md, 0.375rem) 0;
611
+ }
612
+
613
+ /* ─── Border Radius: Horizontal — Middle children have no radius ─── */
614
+
615
+ .group--horizontal ::slotted(:not(:first-child):not(:last-child)) {
616
+ --hx-button-border-radius: 0;
617
+ }
618
+
619
+ /* ─── Border Radius: Vertical — Single child keeps all corners ─── */
620
+
621
+ .group--vertical ::slotted(:only-child) {
622
+ --hx-button-border-radius: var(--hx-border-radius-md, 0.375rem);
623
+ }
624
+
625
+ /* ─── Border Radius: Vertical — First child keeps top corners ─── */
626
+
627
+ .group--vertical ::slotted(:first-child:not(:only-child)) {
628
+ --hx-button-border-radius: var(--hx-border-radius-md, 0.375rem)
629
+ var(--hx-border-radius-md, 0.375rem) 0 0;
630
+ }
631
+
632
+ /* ─── Border Radius: Vertical — Last child keeps bottom corners ─── */
633
+
634
+ .group--vertical ::slotted(:last-child:not(:only-child)) {
635
+ --hx-button-border-radius: 0 0 var(--hx-border-radius-md, 0.375rem)
636
+ var(--hx-border-radius-md, 0.375rem);
637
+ }
638
+
639
+ /* ─── Border Radius: Vertical — Middle children have no radius ─── */
640
+
641
+ .group--vertical ::slotted(:not(:first-child):not(:last-child)) {
642
+ --hx-button-border-radius: 0;
643
+ }
644
+
645
+ /* ─── Z-index: Raise focused child above siblings to show full focus ring ─── */
646
+
647
+ .group ::slotted(:focus-within) {
648
+ z-index: 1;
649
+ position: relative;
650
+ }
651
+ /* ── hx-card ── */
652
+ :host {
653
+ display: block;
654
+ color: var(--hx-card-color, inherit);
655
+ background-color: var(--hx-card-bg, var(--hx-color-neutral-0, #ffffff));
656
+ }
657
+
658
+ .card {
659
+ display: flex;
660
+ flex-direction: column;
661
+ gap: var(--hx-card-gap, var(--hx-space-4, 1rem));
662
+ background-color: var(--hx-card-bg, var(--hx-color-neutral-0, #ffffff));
663
+ color: var(--hx-card-color, var(--hx-color-neutral-800, #212529));
664
+ border: var(--hx-border-width-thin, 1px) solid
665
+ var(--hx-card-border-color, var(--hx-color-neutral-200, #dee2e6));
666
+ border-radius: var(--hx-card-border-radius, var(--hx-border-radius-lg, 0.5rem));
667
+ overflow: hidden;
668
+ font-family: var(--hx-font-family-sans, sans-serif);
669
+ transition:
670
+ box-shadow var(--hx-transition-normal, 250ms ease),
671
+ transform var(--hx-transition-normal, 250ms ease);
672
+ }
673
+
674
+ /* ─── Elevation Variants ─── */
675
+
676
+ .card--flat {
677
+ box-shadow: none;
678
+ }
679
+
680
+ .card--raised {
681
+ box-shadow: var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
682
+ }
683
+
684
+ .card--floating {
685
+ box-shadow: var(--hx-shadow-xl, 0 20px 25px -5px rgb(0 0 0 / 0.1));
686
+ }
687
+
688
+ /* ─── Style Variants ─── */
689
+
690
+ .card--default {
691
+ /* Default styling — uses base styles */
692
+ }
693
+
694
+ .card--featured {
695
+ border-color: var(--hx-color-primary-500, #2563eb);
696
+ border-width: var(--hx-border-width-medium, 2px);
697
+ }
698
+
699
+ .card--compact .card__body {
700
+ padding: var(--hx-space-3, 0.75rem);
701
+ }
702
+
703
+ .card--compact .card__heading {
704
+ padding-top: var(--hx-space-3, 0.75rem);
705
+ padding-inline-end: var(--hx-space-3, 0.75rem);
706
+ padding-inline-start: var(--hx-space-3, 0.75rem);
707
+ }
708
+
709
+ .card--compact .card__footer {
710
+ padding-inline-end: var(--hx-space-3, 0.75rem);
711
+ padding-bottom: var(--hx-space-3, 0.75rem);
712
+ padding-inline-start: var(--hx-space-3, 0.75rem);
713
+ }
714
+
715
+ .card--compact .card__actions {
716
+ padding-inline-end: var(--hx-space-3, 0.75rem);
717
+ padding-bottom: var(--hx-space-3, 0.75rem);
718
+ padding-inline-start: var(--hx-space-3, 0.75rem);
719
+ }
720
+
721
+ /* ─── Interactive ─── */
722
+
723
+ .card--interactive {
724
+ cursor: pointer;
725
+ }
726
+
727
+ .card--interactive:hover {
728
+ box-shadow: var(--hx-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
729
+ transform: translateY(var(--hx-lift-md, -2px));
730
+ }
731
+
732
+ .card--interactive:focus-visible {
733
+ outline: var(--hx-focus-ring-width, 2px) solid
734
+ var(--hx-card-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
735
+ outline-offset: var(--hx-focus-ring-offset, 2px);
736
+ }
737
+
738
+ .card--interactive:active {
739
+ transform: translateY(0);
740
+ }
741
+
742
+ @media (prefers-reduced-motion: reduce) {
743
+ .card {
744
+ transition: none;
745
+ }
746
+
747
+ .card--interactive:hover {
748
+ transform: none;
749
+ }
750
+
751
+ .card--interactive:active {
752
+ transform: none;
753
+ }
754
+ }
755
+
756
+ /* ─── Hidden empty slot wrappers ─── */
757
+
758
+ [hidden] {
759
+ display: none !important;
760
+ }
761
+
762
+ /* ─── Sections ─── */
763
+
764
+ .card__image {
765
+ overflow: hidden;
766
+ line-height: 0;
767
+ }
768
+
769
+ .card__image ::slotted(img) {
770
+ width: 100%;
771
+ aspect-ratio: var(--hx-card-image-aspect-ratio, 16 / 9);
772
+ display: block;
773
+ object-fit: cover;
774
+ }
775
+
776
+ .card__heading {
777
+ padding-top: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
778
+ padding-inline-end: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
779
+ padding-bottom: 0;
780
+ padding-inline-start: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
781
+ font-size: var(--hx-font-size-xl, 1.25rem);
782
+ font-weight: var(--hx-font-weight-semibold, 600);
783
+ line-height: var(--hx-line-height-tight, 1.25);
784
+ }
785
+
786
+ .card__body {
787
+ padding: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
788
+ flex: 1;
789
+ font-size: var(--hx-font-size-md, 1rem);
790
+ line-height: var(--hx-line-height-normal, 1.5);
791
+ color: var(--hx-card-color, var(--hx-color-neutral-600, #495057));
792
+ }
793
+
794
+ .card__footer {
795
+ padding-top: 0;
796
+ padding-inline-end: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
797
+ padding-bottom: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
798
+ padding-inline-start: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
799
+ }
800
+
801
+ .card__actions {
802
+ display: flex;
803
+ gap: var(--hx-space-2, 0.5rem);
804
+ padding-top: var(--hx-space-4, 1rem);
805
+ padding-inline-end: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
806
+ padding-bottom: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
807
+ padding-inline-start: var(--hx-card-padding, var(--hx-space-6, 1.5rem));
808
+ border-top: var(--hx-border-width-thin, 1px) solid
809
+ var(--hx-card-border-color, var(--hx-color-neutral-200, #dee2e6));
810
+ margin-top: auto;
811
+ }
812
+ /* ── hx-divider ── */
813
+ :host {
814
+ display: block;
815
+ --_divider-color: var(--hx-divider-color, var(--hx-color-neutral-200, #e2e8f0));
816
+ --_divider-width: var(--hx-divider-width, var(--hx-border-width-thin, 1px));
817
+ --_divider-label-color: var(--hx-divider-label-color, var(--hx-color-neutral-500, #64748b));
818
+ --_divider-label-size: var(--hx-divider-label-font-size, var(--hx-font-size-sm, 0.875rem));
819
+ --_divider-label-gap: var(--hx-divider-label-gap, var(--hx-space-3, 0.75rem));
820
+ }
821
+
822
+ /* ─── Spacing Variants ─── */
823
+
824
+ :host([spacing='none']) {
825
+ --_spacing: 0;
826
+ }
827
+
828
+ :host([spacing='sm']) {
829
+ --_spacing: var(--hx-space-2, 0.5rem);
830
+ }
831
+
832
+ :host,
833
+ :host([spacing='md']) {
834
+ --_spacing: var(--hx-space-4, 1rem);
835
+ }
836
+
837
+ :host([spacing='lg']) {
838
+ --_spacing: var(--hx-space-6, 1.5rem);
839
+ }
840
+
841
+ /* ─── Horizontal (default) ─── */
842
+
843
+ :host([orientation='horizontal']) {
844
+ margin-block: var(--_spacing);
845
+ }
846
+
847
+ /* ─── Vertical ─── */
848
+
849
+ :host([orientation='vertical']) {
850
+ display: inline-flex;
851
+ align-self: stretch;
852
+ margin-inline: var(--_spacing);
853
+ }
854
+
855
+ /* ─── Base (hr) — horizontal ─── */
856
+
857
+ .divider {
858
+ display: flex;
859
+ align-items: center;
860
+ gap: var(--_divider-label-gap);
861
+ border: none;
862
+ margin: 0;
863
+ padding: 0;
864
+ }
865
+
866
+ /* ─── Base — vertical ─── */
867
+
868
+ :host([orientation='vertical']) .divider {
869
+ flex-direction: column;
870
+ height: 100%;
871
+ }
872
+
873
+ /* ─── Lines flanking label ─── */
874
+
875
+ .divider__line {
876
+ flex: 1;
877
+ background-color: var(--_divider-color);
878
+ }
879
+
880
+ :host(:not([orientation='vertical'])) .divider__line {
881
+ height: var(--_divider-width);
882
+ }
883
+
884
+ :host([orientation='vertical']) .divider__line {
885
+ width: var(--_divider-width);
886
+ height: auto;
887
+ min-height: 0;
888
+ }
889
+
890
+ /* ─── Label ─── */
891
+
892
+ .divider__label {
893
+ flex-shrink: 0;
894
+ color: var(--_divider-label-color);
895
+ font-size: var(--_divider-label-size);
896
+ line-height: var(--hx-line-height-tight, 1.25);
897
+ white-space: nowrap;
898
+ }
899
+ /* ── hx-icon ── */
900
+ :host {
901
+ display: inline-flex;
902
+ align-items: center;
903
+ justify-content: center;
904
+ /* vertical-align: middle ensures the icon aligns to the visual centre of
905
+ adjacent inline text rather than the text baseline. */
906
+ vertical-align: middle;
907
+ /* overflow: hidden prevents malformed or oversized icons from painting
908
+ outside the component boundary. The inner SVG may still set
909
+ overflow: visible for its own viewBox content. */
910
+ overflow: hidden;
911
+ width: var(--hx-icon-size, var(--hx-size-6, 1.5rem));
912
+ height: var(--hx-icon-size, var(--hx-size-6, 1.5rem));
913
+ color: var(--hx-icon-color, currentColor);
914
+ flex-shrink: 0;
915
+ }
916
+
917
+ /* ─── Size Variants ───
918
+ Fallback pixel values mirror the design token values at time of writing.
919
+ If token values are updated the fallbacks should be updated to match. */
920
+
921
+ :host([hx-size='xs']) {
922
+ --hx-icon-size: var(--hx-size-4, 1rem);
923
+ }
924
+
925
+ :host([hx-size='sm']) {
926
+ --hx-icon-size: var(--hx-size-5, 1.25rem);
927
+ }
928
+
929
+ :host([hx-size='md']) {
930
+ --hx-icon-size: var(--hx-size-6, 1.5rem);
931
+ }
932
+
933
+ :host([hx-size='lg']) {
934
+ --hx-icon-size: var(--hx-size-8, 2rem);
935
+ }
936
+
937
+ :host([hx-size='xl']) {
938
+ --hx-icon-size: var(--hx-size-10, 2.5rem);
939
+ }
940
+
941
+ /* ─── SVG (sprite mode) ───
942
+ In sprite mode [part="svg"] is an actual <svg> element. The selector
943
+ targets it specifically. In inline mode the part is applied to a <span>
944
+ wrapper — see .icon__inline below. */
945
+
946
+ svg[part='svg'] {
947
+ width: 100%;
948
+ height: 100%;
949
+ fill: currentColor;
950
+ display: block;
951
+ overflow: visible;
952
+ }
953
+
954
+ /* ─── Inline SVG wrapper ───
955
+ In inline mode [part="svg"] is a <span> that wraps the fetched SVG.
956
+ The inner <svg> is sized to fill the wrapper. */
957
+
958
+ .icon__inline {
959
+ display: inline-flex;
960
+ align-items: center;
961
+ justify-content: center;
962
+ width: 100%;
963
+ height: 100%;
964
+ }
965
+
966
+ .icon__inline svg {
967
+ width: 100%;
968
+ height: 100%;
969
+ fill: currentColor;
970
+ display: block;
971
+ }
972
+ /* ── hx-icon-button ── */
973
+ :host {
974
+ display: inline-block;
975
+ }
976
+
977
+ :host([disabled]) {
978
+ pointer-events: none;
979
+ opacity: var(--hx-opacity-disabled);
980
+ }
981
+
982
+ .button {
983
+ display: inline-flex;
984
+ align-items: center;
985
+ justify-content: center;
986
+ border: var(--hx-border-width-thin) solid var(--hx-icon-button-border-color);
987
+ border-radius: var(--hx-icon-button-border-radius, var(--hx-border-radius-md));
988
+ background-color: var(--hx-icon-button-bg);
989
+ color: var(--hx-icon-button-color, var(--hx-color-primary-500));
990
+ cursor: pointer;
991
+ transition:
992
+ background-color var(--hx-transition-fast),
993
+ color var(--hx-transition-fast),
994
+ border-color var(--hx-transition-fast),
995
+ box-shadow var(--hx-transition-fast);
996
+ text-decoration: none;
997
+ user-select: none;
998
+ -webkit-user-select: none;
999
+ flex-shrink: 0;
1000
+ }
1001
+
1002
+ .button:focus-visible {
1003
+ outline: var(--hx-focus-ring-width) solid
1004
+ var(--hx-icon-button-focus-ring-color, var(--hx-focus-ring-color));
1005
+ outline-offset: var(--hx-focus-ring-offset);
1006
+ }
1007
+
1008
+ .button:active {
1009
+ filter: brightness(var(--hx-filter-brightness-active, 0.8));
1010
+ }
1011
+
1012
+ /* ─── Size Variants ─── */
1013
+
1014
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target for all sizes.
1015
+ min-width/min-height override the explicit size tokens when they fall below
1016
+ the 2.75rem (44px) threshold, preserving the visual icon size via font-size. */
1017
+
1018
+ .button--sm {
1019
+ padding: var(--hx-space-1);
1020
+ width: var(--hx-icon-button-size, var(--hx-size-8));
1021
+ height: var(--hx-icon-button-size, var(--hx-size-8));
1022
+ min-width: var(--hx-touch-target-min, 2.75rem);
1023
+ min-height: var(--hx-touch-target-min, 2.75rem);
1024
+ font-size: var(--hx-font-size-sm);
1025
+ }
1026
+
1027
+ .button--md {
1028
+ padding: var(--hx-space-2);
1029
+ width: var(--hx-icon-button-size, var(--hx-size-10));
1030
+ height: var(--hx-icon-button-size, var(--hx-size-10));
1031
+ min-width: var(--hx-touch-target-min, 2.75rem);
1032
+ min-height: var(--hx-touch-target-min, 2.75rem);
1033
+ font-size: var(--hx-font-size-md);
1034
+ }
1035
+
1036
+ .button--lg {
1037
+ padding: var(--hx-space-3);
1038
+ width: var(--hx-icon-button-size, var(--hx-size-12));
1039
+ height: var(--hx-icon-button-size, var(--hx-size-12));
1040
+ min-width: var(--hx-touch-target-min, 2.75rem);
1041
+ min-height: var(--hx-touch-target-min, 2.75rem);
1042
+ font-size: var(--hx-font-size-lg);
1043
+ }
1044
+
1045
+ /* ─── Style Variants ─── */
1046
+
1047
+ .button--primary {
1048
+ --hx-icon-button-bg: var(--hx-color-primary-500);
1049
+ --hx-icon-button-color: var(--hx-color-neutral-0);
1050
+ --hx-icon-button-border-color: transparent;
1051
+ }
1052
+
1053
+ .button--primary:hover {
1054
+ --hx-icon-button-bg: var(--hx-color-primary-600);
1055
+ }
1056
+
1057
+ .button--secondary {
1058
+ --hx-icon-button-bg: transparent;
1059
+ --hx-icon-button-color: var(--hx-color-primary-500);
1060
+ --hx-icon-button-border-color: var(--hx-color-primary-500);
1061
+ }
1062
+
1063
+ .button--secondary:hover {
1064
+ --hx-icon-button-bg: var(--hx-color-primary-50);
1065
+ }
1066
+
1067
+ .button--tertiary {
1068
+ --hx-icon-button-bg: transparent;
1069
+ --hx-icon-button-color: var(--hx-color-neutral-700);
1070
+ --hx-icon-button-border-color: var(--hx-color-neutral-300);
1071
+ }
1072
+
1073
+ .button--tertiary:hover {
1074
+ --hx-icon-button-bg: var(--hx-color-neutral-100);
1075
+ }
1076
+
1077
+ .button--danger {
1078
+ --hx-icon-button-bg: var(--hx-color-error-500);
1079
+ --hx-icon-button-color: var(--hx-color-neutral-0);
1080
+ --hx-icon-button-border-color: transparent;
1081
+ }
1082
+
1083
+ .button--danger:hover {
1084
+ --hx-icon-button-bg: var(--hx-color-error-600);
1085
+ }
1086
+
1087
+ .button--ghost {
1088
+ --hx-icon-button-bg: transparent;
1089
+ --hx-icon-button-color: var(--hx-color-primary-500);
1090
+ --hx-icon-button-border-color: transparent;
1091
+ }
1092
+
1093
+ .button--ghost:hover {
1094
+ --hx-icon-button-bg: var(--hx-color-neutral-100);
1095
+ }
1096
+
1097
+ /* ─── Icon Container ─── */
1098
+
1099
+ .icon {
1100
+ display: inline-flex;
1101
+ align-items: center;
1102
+ justify-content: center;
1103
+ width: 1em;
1104
+ height: 1em;
1105
+ line-height: 1;
1106
+ pointer-events: none;
1107
+ }
1108
+
1109
+ /* ─── Disabled ─── */
1110
+
1111
+ .button[disabled] {
1112
+ cursor: not-allowed;
1113
+ /* P1-02 fix: opacity is set only on :host([disabled]) above to prevent
1114
+ multiplicative stacking (0.5 * 0.5 = 0.25). Do not add opacity here. */
1115
+ }
1116
+
1117
+ /* ─── Reduced Motion ─── */
1118
+
1119
+ @media (prefers-reduced-motion: reduce) {
1120
+ .button {
1121
+ transition: none;
1122
+ }
1123
+ }
1124
+ /* ── hx-image ── */
1125
+ :host {
1126
+ display: block;
1127
+ }
1128
+
1129
+ .image__container {
1130
+ position: relative;
1131
+ display: block;
1132
+ overflow: hidden;
1133
+ margin: 0;
1134
+ padding: 0;
1135
+ aspect-ratio: var(--_ratio, var(--hx-image-aspect-ratio));
1136
+ border-radius: var(--_radius, var(--hx-image-border-radius, 0));
1137
+ }
1138
+
1139
+ .image__container--error {
1140
+ display: flex;
1141
+ align-items: center;
1142
+ justify-content: center;
1143
+ min-height: var(--hx-image-fallback-min-height, 3rem);
1144
+ background-color: var(--hx-color-neutral-100, #f3f4f6);
1145
+ color: var(--hx-color-neutral-500, #6b7280);
1146
+ }
1147
+
1148
+ .image__img {
1149
+ display: block;
1150
+ width: 100%;
1151
+ height: 100%;
1152
+ object-fit: var(--_fit, var(--hx-image-object-fit, cover));
1153
+ }
1154
+
1155
+ .image__caption {
1156
+ display: none;
1157
+ padding: var(--hx-image-caption-padding, 0.5rem 0 0);
1158
+ color: var(--hx-image-caption-color, var(--hx-color-neutral-600, #4b5563));
1159
+ font-size: var(--hx-image-caption-font-size, 0.875rem);
1160
+ }
1161
+
1162
+ .image__caption--visible {
1163
+ display: block;
1164
+ }
1165
+ /* ── hx-link ── */
1166
+ :host {
1167
+ display: inline;
1168
+ }
1169
+
1170
+ :host([disabled]) {
1171
+ cursor: not-allowed;
1172
+ }
1173
+
1174
+ /* --- Base Link --- */
1175
+
1176
+ .link {
1177
+ display: inline-flex;
1178
+ align-items: center;
1179
+ gap: var(--hx-space-1, 0.25rem);
1180
+ color: var(--hx-link-color, var(--hx-color-primary-500, #2563eb));
1181
+ font-family: var(--hx-link-font-family, var(--hx-font-family-sans, inherit));
1182
+ font-size: inherit;
1183
+ line-height: inherit;
1184
+ text-decoration: var(--hx-link-text-decoration, underline);
1185
+ text-underline-offset: var(--hx-link-underline-offset, 2px);
1186
+ cursor: pointer;
1187
+ outline: 0;
1188
+ transition:
1189
+ color var(--hx-transition-fast, 150ms ease),
1190
+ text-decoration-color var(--hx-transition-fast, 150ms ease);
1191
+ }
1192
+
1193
+ .link:hover {
1194
+ color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1d4ed8));
1195
+ text-decoration: var(--hx-link-text-decoration-hover, underline);
1196
+ }
1197
+
1198
+ .link:active {
1199
+ color: var(--hx-link-color-active, var(--hx-color-primary-800, #1e40af));
1200
+ }
1201
+
1202
+ .link:focus-visible {
1203
+ outline: var(--hx-focus-ring-width, 2px) solid
1204
+ var(
1205
+ --hx-link-focus-ring-color,
1206
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1207
+ );
1208
+ outline-offset: var(--hx-focus-ring-offset, 2px);
1209
+ border-radius: var(--hx-border-radius-sm, 0.125rem);
1210
+ }
1211
+
1212
+ /* --- Variant: subtle --- */
1213
+
1214
+ .link--subtle {
1215
+ color: var(--hx-link-color-subtle, var(--hx-color-neutral-600, #475569));
1216
+ text-decoration: none;
1217
+ }
1218
+
1219
+ .link--subtle:hover {
1220
+ color: var(--hx-link-color-hover, var(--hx-color-primary-700, #1d4ed8));
1221
+ text-decoration: underline;
1222
+ }
1223
+
1224
+ /* --- Variant: danger --- */
1225
+
1226
+ .link--danger {
1227
+ color: var(--hx-link-color-danger, var(--hx-color-error-text, #b91c1c));
1228
+ }
1229
+
1230
+ .link--danger:hover {
1231
+ color: var(--hx-link-color-danger-hover, var(--hx-color-error-700, #b91c1c));
1232
+ }
1233
+
1234
+ /* --- Disabled --- */
1235
+
1236
+ .link--disabled {
1237
+ color: var(--hx-link-color-disabled, var(--hx-color-neutral-400, #94a3b8));
1238
+ text-decoration: none;
1239
+ pointer-events: none;
1240
+ }
1241
+
1242
+ /* --- External link icon --- */
1243
+
1244
+ .link__external-icon {
1245
+ display: inline-flex;
1246
+ width: 0.75em;
1247
+ height: 0.75em;
1248
+ flex-shrink: 0;
1249
+ }
1250
+
1251
+ @media (prefers-reduced-motion: reduce) {
1252
+ .link {
1253
+ transition: none;
1254
+ }
1255
+ }
1256
+
1257
+ /* --- Visually hidden (sr-only) --- */
1258
+
1259
+ .sr-only {
1260
+ position: absolute;
1261
+ width: 1px;
1262
+ height: 1px;
1263
+ padding: 0;
1264
+ margin: -1px;
1265
+ overflow: hidden;
1266
+ clip-path: inset(50%);
1267
+ white-space: nowrap;
1268
+ border: 0;
1269
+ }
1270
+ /* ── hx-skeleton ── */
1271
+ :host {
1272
+ display: block;
1273
+ }
1274
+
1275
+ :host([loaded]) {
1276
+ display: none;
1277
+ }
1278
+
1279
+ /* ─── Base ─── */
1280
+
1281
+ .skeleton {
1282
+ display: block;
1283
+ background-color: var(--hx-skeleton-bg, var(--hx-color-neutral-200, #e2e8f0));
1284
+ overflow: hidden;
1285
+ position: relative;
1286
+ width: var(--_width, 100%);
1287
+ height: var(--_height, auto);
1288
+ }
1289
+
1290
+ /* ─── Variant Shapes ─── */
1291
+
1292
+ .skeleton--text {
1293
+ border-radius: var(--hx-skeleton-text-radius, var(--hx-border-radius-full, 9999px));
1294
+ height: var(--_height, 1em);
1295
+ }
1296
+
1297
+ .skeleton--circle {
1298
+ border-radius: var(--hx-skeleton-circle-radius, 50%);
1299
+ aspect-ratio: var(--_circle-aspect-ratio, 1);
1300
+ width: var(--_width, 2.5rem);
1301
+ height: var(--_height, var(--_width, 2.5rem));
1302
+ }
1303
+
1304
+ .skeleton--rect {
1305
+ border-radius: var(--hx-skeleton-rect-radius, var(--hx-border-radius-sm, 0.25rem));
1306
+ height: var(--_height, 1rem);
1307
+ }
1308
+
1309
+ .skeleton--button {
1310
+ border-radius: var(--hx-skeleton-button-radius, var(--hx-border-radius-md, 0.375rem));
1311
+ height: var(--_height, 2.5rem);
1312
+ }
1313
+
1314
+ .skeleton--paragraph {
1315
+ border-radius: var(--hx-skeleton-text-radius, var(--hx-border-radius-full, 9999px));
1316
+ height: var(--_height, auto);
1317
+ display: flex;
1318
+ flex-direction: column;
1319
+ gap: 0.5em;
1320
+ }
1321
+
1322
+ /* ─── Shimmer Animation ─── */
1323
+
1324
+ .skeleton--animated::after {
1325
+ content: '';
1326
+ position: absolute;
1327
+ inset: 0;
1328
+ background: linear-gradient(
1329
+ 90deg,
1330
+ transparent 0%,
1331
+ var(--hx-skeleton-shimmer-color, var(--hx-overlay-white-40, rgba(255, 255, 255, 0.4))) 50%,
1332
+ transparent 100%
1333
+ );
1334
+ background-size: var(--hx-skeleton-shimmer-width, 200%) 100%;
1335
+ animation: hx-skeleton-shimmer var(--hx-skeleton-duration, 1.5s) ease-in-out infinite;
1336
+ }
1337
+
1338
+ @keyframes hx-skeleton-shimmer {
1339
+ from {
1340
+ background-position: 200% center;
1341
+ }
1342
+ to {
1343
+ background-position: -200% center;
1344
+ }
1345
+ }
1346
+
1347
+ @media (prefers-reduced-motion: reduce) {
1348
+ .skeleton--animated::after {
1349
+ display: none;
1350
+ }
1351
+ }
1352
+ /* ── hx-spinner ── */
1353
+ :host {
1354
+ display: inline-flex;
1355
+ align-items: center;
1356
+ justify-content: center;
1357
+ }
1358
+
1359
+ .spinner {
1360
+ display: inline-flex;
1361
+ align-items: center;
1362
+ justify-content: center;
1363
+ width: var(--_spinner-size);
1364
+ height: var(--_spinner-size);
1365
+ flex-shrink: 0;
1366
+ }
1367
+
1368
+ .spinner__svg {
1369
+ width: 100%;
1370
+ height: 100%;
1371
+ animation: hx-spinner-rotate var(--hx-duration-spinner, 750ms) linear infinite;
1372
+ }
1373
+
1374
+ .spinner__track {
1375
+ stroke: var(--_spinner-track-color);
1376
+ }
1377
+
1378
+ .spinner__arc {
1379
+ stroke: var(--_spinner-color);
1380
+ /* SVG arc math: viewBox is 24×24, r=10, circumference = 2π × 10 ≈ 62.83.
1381
+ stroke-dasharray: 56 creates a visible arc of ~89% of circumference.
1382
+ stroke-dashoffset: 14 shifts the arc start to produce the ~75% visible gap aesthetic.
1383
+ Adjust both proportionally if r or viewBox dimensions change. */
1384
+ stroke-dasharray: 56;
1385
+ stroke-dashoffset: 14;
1386
+ animation: hx-spinner-dash var(--hx-duration-spinner, 750ms)
1387
+ var(--hx-easing-in-out, ease-in-out) infinite;
1388
+ transform-origin: center;
1389
+ }
1390
+
1391
+ @keyframes hx-spinner-rotate {
1392
+ to {
1393
+ transform: rotate(360deg);
1394
+ }
1395
+ }
1396
+
1397
+ @keyframes hx-spinner-dash {
1398
+ 0% {
1399
+ stroke-dashoffset: 50;
1400
+ }
1401
+ 50% {
1402
+ stroke-dashoffset: 14;
1403
+ }
1404
+ 100% {
1405
+ stroke-dashoffset: 50;
1406
+ }
1407
+ }
1408
+
1409
+ @media (prefers-reduced-motion: reduce) {
1410
+ .spinner__svg {
1411
+ animation: none;
1412
+ }
1413
+
1414
+ .spinner__arc {
1415
+ animation: none;
1416
+ /* Maintain the static partial arc at full opacity so the loading state remains
1417
+ clearly communicated without motion. A faded arc looks broken; full opacity
1418
+ alongside the track ring unambiguously signals "in progress". */
1419
+ stroke-dashoffset: 14;
1420
+ opacity: 1;
1421
+ }
1422
+ }
1423
+
1424
+ /* ─── Size Variants ─── */
1425
+
1426
+ :host([size='sm']) {
1427
+ --_spinner-size: var(--hx-size-4, 1rem);
1428
+ }
1429
+
1430
+ :host([size='md']) {
1431
+ --_spinner-size: var(--hx-size-6, 1.5rem);
1432
+ }
1433
+
1434
+ :host([size='lg']) {
1435
+ --_spinner-size: var(--hx-size-8, 2rem);
1436
+ }
1437
+
1438
+ /* ─── Variant Colors ─── */
1439
+
1440
+ :host([variant='default']) {
1441
+ --_spinner-color: var(--hx-spinner-color, var(--hx-color-neutral-600, #475569));
1442
+ --_spinner-track-color: var(--hx-spinner-track-color, var(--hx-color-neutral-200, #e2e8f0));
1443
+ }
1444
+
1445
+ :host([variant='primary']) {
1446
+ --_spinner-color: var(--hx-spinner-color, var(--hx-color-primary-500, #2563eb));
1447
+ --_spinner-track-color: var(--hx-spinner-track-color, var(--hx-color-primary-100, #dbeafe));
1448
+ }
1449
+
1450
+ :host([variant='inverted']) {
1451
+ --_spinner-color: var(--hx-spinner-color, var(--hx-color-neutral-0, #ffffff));
1452
+ /* Fallback for browsers without color-mix() support (Chrome < 111, Firefox < 113, Safari < 16.2).
1453
+ rgba(255, 255, 255, 0.3) approximates the intended 30% white track color. */
1454
+ --_spinner-track-color: var(
1455
+ --hx-spinner-track-color,
1456
+ var(--hx-overlay-white-30, rgba(255, 255, 255, 0.3))
1457
+ );
1458
+ }
1459
+
1460
+ @supports (color: color-mix(in srgb, white 30%, transparent)) {
1461
+ :host([variant='inverted']) {
1462
+ --_spinner-track-color: var(
1463
+ --hx-spinner-track-color,
1464
+ color-mix(in srgb, var(--hx-color-neutral-0, #ffffff) 30%, transparent)
1465
+ );
1466
+ }
1467
+ }
1468
+ /* ── hx-tag ── */
1469
+ :host {
1470
+ display: inline-block;
1471
+ }
1472
+
1473
+ :host([disabled]) {
1474
+ opacity: var(--hx-opacity-disabled, 0.5);
1475
+ pointer-events: none;
1476
+ /* cursor: not-allowed is intentionally omitted — pointer-events: none prevents cursor display */
1477
+ }
1478
+
1479
+ .tag {
1480
+ display: inline-flex;
1481
+ align-items: center;
1482
+ gap: var(--hx-space-1, 0.25rem);
1483
+ border-radius: var(--hx-tag-border-radius, var(--hx-border-radius-sm, 0.25rem));
1484
+ background-color: var(--hx-tag-bg, var(--hx-color-neutral-100, #f3f4f6));
1485
+ color: var(--hx-tag-color, var(--hx-color-neutral-700, #374151));
1486
+ font-family: var(--hx-tag-font-family, var(--hx-font-family-sans, sans-serif));
1487
+ font-weight: var(--hx-tag-font-weight, var(--hx-font-weight-medium, 500));
1488
+ line-height: var(--hx-line-height-tight, 1.25);
1489
+ white-space: nowrap;
1490
+ vertical-align: middle;
1491
+ border: var(--hx-border-width-thin, 1px) solid
1492
+ var(--hx-tag-border-color, var(--hx-color-neutral-200, #e5e7eb));
1493
+ }
1494
+
1495
+ /* ─── Size Variants ─── */
1496
+
1497
+ .tag--sm {
1498
+ font-size: var(--hx-tag-font-size, var(--hx-font-size-xs, 0.75rem));
1499
+ padding: var(--hx-tag-padding-y, var(--hx-space-0-5, 0.125rem))
1500
+ var(--hx-tag-padding-x, var(--hx-space-1-5, 0.375rem));
1501
+ }
1502
+
1503
+ .tag--md {
1504
+ font-size: var(--hx-tag-font-size, var(--hx-font-size-sm, 0.875rem));
1505
+ padding: var(--hx-tag-padding-y, var(--hx-space-1, 0.25rem))
1506
+ var(--hx-tag-padding-x, var(--hx-space-2, 0.5rem));
1507
+ }
1508
+
1509
+ .tag--lg {
1510
+ font-size: var(--hx-tag-font-size, var(--hx-font-size-md, 1rem));
1511
+ padding: var(--hx-tag-padding-y, var(--hx-space-1-5, 0.375rem))
1512
+ var(--hx-tag-padding-x, var(--hx-space-3, 0.75rem));
1513
+ }
1514
+
1515
+ /* ─── Color Variants ─── */
1516
+
1517
+ .tag--default {
1518
+ --hx-tag-bg: var(--hx-color-neutral-100, #f3f4f6);
1519
+ --hx-tag-color: var(--hx-color-neutral-700, #374151);
1520
+ --hx-tag-border-color: var(--hx-color-neutral-200, #e5e7eb);
1521
+ }
1522
+
1523
+ .tag--primary {
1524
+ --hx-tag-bg: var(--hx-color-primary-50, #eff6ff);
1525
+ --hx-tag-color: var(--hx-color-primary-700, #1d4ed8);
1526
+ --hx-tag-border-color: var(--hx-color-primary-200, #bfdbfe);
1527
+ }
1528
+
1529
+ .tag--success {
1530
+ --hx-tag-bg: var(--hx-color-success-50, #f0fdf4);
1531
+ --hx-tag-color: var(--hx-color-success-700, #15803d);
1532
+ --hx-tag-border-color: var(--hx-color-success-200, #bbf7d0);
1533
+ }
1534
+
1535
+ .tag--warning {
1536
+ --hx-tag-bg: var(--hx-color-warning-50, #fffbeb);
1537
+ --hx-tag-color: var(--hx-color-warning-700, #b45309);
1538
+ --hx-tag-border-color: var(--hx-color-warning-200, #fde68a);
1539
+ }
1540
+
1541
+ .tag--danger {
1542
+ --hx-tag-bg: var(--hx-color-error-50, #fef2f2);
1543
+ --hx-tag-color: var(--hx-color-error-700, #b91c1c);
1544
+ --hx-tag-border-color: var(--hx-color-error-200, #fecaca);
1545
+ }
1546
+
1547
+ /* ─── Semantic Variant Label (WCAG 1.4.1) ─── */
1548
+ /* Visually hidden text prefix for semantic variants (success/warning/danger). */
1549
+ /* Ensures the variant state is not conveyed by color alone. */
1550
+
1551
+ .tag__variant-label {
1552
+ position: absolute;
1553
+ width: 1px;
1554
+ height: 1px;
1555
+ padding: 0;
1556
+ margin: -1px;
1557
+ overflow: hidden;
1558
+ clip: rect(0, 0, 0, 0);
1559
+ white-space: nowrap;
1560
+ border: 0;
1561
+ }
1562
+
1563
+ /* ─── Pill Mode ─── */
1564
+
1565
+ /* Uses --hx-tag-border-radius-pill (separate from --hx-tag-border-radius) so consumer
1566
+ overrides to --hx-tag-border-radius don't break pill shape. */
1567
+ .tag--pill {
1568
+ border-radius: var(--hx-tag-border-radius-pill, var(--hx-border-radius-full, 9999px));
1569
+ }
1570
+
1571
+ /* ─── Prefix / Suffix slots ─── */
1572
+
1573
+ .tag__prefix,
1574
+ .tag__suffix {
1575
+ display: inline-flex;
1576
+ align-items: center;
1577
+ flex-shrink: 0;
1578
+ }
1579
+
1580
+ /* Hide wrappers when slots have no assigned content */
1581
+ .tag__prefix--hidden,
1582
+ .tag__suffix--hidden {
1583
+ display: none;
1584
+ }
1585
+
1586
+ /* ─── Remove Button ─── */
1587
+
1588
+ .tag__remove-button {
1589
+ display: inline-flex;
1590
+ align-items: center;
1591
+ justify-content: center;
1592
+ background: none;
1593
+ border: none;
1594
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */
1595
+ min-width: var(--hx-touch-target-min, 2.75rem);
1596
+ min-height: var(--hx-touch-target-min, 2.75rem);
1597
+ padding: 0;
1598
+ margin-inline-start: var(--hx-space-1, 0.25rem);
1599
+ cursor: pointer;
1600
+ color: inherit;
1601
+ opacity: var(--hx-opacity-75, 0.75);
1602
+ border-radius: var(--hx-border-radius-sm, 0.125rem);
1603
+ line-height: 0;
1604
+ }
1605
+
1606
+ .tag__remove-button:hover {
1607
+ opacity: var(--hx-opacity-100, 1);
1608
+ }
1609
+
1610
+ .tag__remove-button:focus-visible {
1611
+ outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, currentColor);
1612
+ outline-offset: var(--hx-focus-ring-offset, 1px);
1613
+ }
1614
+ /* ── hx-text ── */
1615
+ :host {
1616
+ display: inline;
1617
+ }
1618
+
1619
+ /* ─── Base ─── */
1620
+
1621
+ .text {
1622
+ display: inline;
1623
+ font-family: var(--hx-font-family-sans, sans-serif);
1624
+ font-size: var(--hx-text-font-size);
1625
+ font-weight: var(--hx-text-font-weight);
1626
+ line-height: var(--hx-text-line-height);
1627
+ letter-spacing: var(--hx-text-letter-spacing);
1628
+ color: var(--hx-text-color);
1629
+ margin: 0;
1630
+ padding: 0;
1631
+ }
1632
+
1633
+ /* ─── Variants ─── */
1634
+
1635
+ .text--body {
1636
+ --hx-text-font-size: var(--hx-font-size-md, 1rem);
1637
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1638
+ --hx-text-line-height: var(--hx-line-height-normal, 1.5);
1639
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1640
+ }
1641
+
1642
+ .text--body-sm {
1643
+ --hx-text-font-size: var(--hx-font-size-sm, 0.875rem);
1644
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1645
+ --hx-text-line-height: var(--hx-line-height-normal, 1.5);
1646
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1647
+ }
1648
+
1649
+ .text--body-lg {
1650
+ --hx-text-font-size: var(--hx-font-size-lg, 1.125rem);
1651
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1652
+ --hx-text-line-height: var(--hx-line-height-normal, 1.5);
1653
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1654
+ }
1655
+
1656
+ .text--label {
1657
+ --hx-text-font-size: var(--hx-font-size-md, 1rem);
1658
+ --hx-text-font-weight: var(--hx-font-weight-medium, 500);
1659
+ --hx-text-line-height: var(--hx-line-height-tight, 1.25);
1660
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1661
+ }
1662
+
1663
+ .text--label-sm {
1664
+ --hx-text-font-size: var(--hx-font-size-sm, 0.875rem);
1665
+ --hx-text-font-weight: var(--hx-font-weight-medium, 500);
1666
+ --hx-text-line-height: var(--hx-line-height-tight, 1.25);
1667
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1668
+ }
1669
+
1670
+ .text--caption {
1671
+ --hx-text-font-size: var(--hx-font-size-xs, 0.75rem);
1672
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1673
+ --hx-text-line-height: var(--hx-line-height-normal, 1.5);
1674
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1675
+ }
1676
+
1677
+ .text--code {
1678
+ --hx-text-font-size: var(--hx-font-size-sm, 0.875rem);
1679
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1680
+ --hx-text-line-height: var(--hx-line-height-normal, 1.5);
1681
+ --hx-text-letter-spacing: var(--hx-letter-spacing-normal, 0);
1682
+ font-family: var(--hx-font-family-mono, monospace);
1683
+ }
1684
+
1685
+ .text--overline {
1686
+ --hx-text-font-size: var(--hx-font-size-xs, 0.75rem);
1687
+ --hx-text-font-weight: var(--hx-font-weight-semibold, 600);
1688
+ --hx-text-line-height: var(--hx-line-height-tight, 1.25);
1689
+ --hx-text-letter-spacing: var(--hx-letter-spacing-wide, 0.05em);
1690
+ text-transform: uppercase;
1691
+ }
1692
+
1693
+ /* ─── Colors ─── */
1694
+
1695
+ .text--color-default {
1696
+ --hx-text-color: var(--hx-color-neutral-900, #0f172a);
1697
+ }
1698
+
1699
+ .text--color-subtle {
1700
+ --hx-text-color: var(--hx-color-neutral-500, #64748b);
1701
+ }
1702
+
1703
+ .text--color-disabled {
1704
+ --hx-text-color: var(--hx-color-neutral-400, #94a3b8);
1705
+ }
1706
+
1707
+ .text--color-inverse {
1708
+ --hx-text-color: var(--hx-color-neutral-0, #ffffff);
1709
+ }
1710
+
1711
+ .text--color-danger {
1712
+ --hx-text-color: var(--hx-color-error-600, #dc2626);
1713
+ }
1714
+
1715
+ .text--color-success {
1716
+ --hx-text-color: var(--hx-color-success-600, #16a34a);
1717
+ }
1718
+
1719
+ .text--color-warning {
1720
+ --hx-text-color: var(--hx-color-warning-600, #d97706);
1721
+ }
1722
+
1723
+ /* ─── Weight Overrides ─── */
1724
+
1725
+ .text--weight-regular {
1726
+ --hx-text-font-weight: var(--hx-font-weight-normal, 400);
1727
+ }
1728
+
1729
+ .text--weight-medium {
1730
+ --hx-text-font-weight: var(--hx-font-weight-medium, 500);
1731
+ }
1732
+
1733
+ .text--weight-semibold {
1734
+ --hx-text-font-weight: var(--hx-font-weight-semibold, 600);
1735
+ }
1736
+
1737
+ .text--weight-bold {
1738
+ --hx-text-font-weight: var(--hx-font-weight-bold, 700);
1739
+ }
1740
+
1741
+ /* ─── Truncation ─── */
1742
+
1743
+ .text--truncate {
1744
+ display: block;
1745
+ overflow: hidden;
1746
+ text-overflow: ellipsis;
1747
+ white-space: nowrap;
1748
+ }
1749
+
1750
+ .text--clamp {
1751
+ display: -webkit-box;
1752
+ -webkit-box-orient: vertical;
1753
+ overflow: hidden;
1754
+ }
1755
+
1756
+ :host([truncate]) {
1757
+ display: block;
1758
+ }
1759
+
1760
+ :host([lines]:not([lines='0'])) {
1761
+ display: block;
1762
+ }
1763
+ /* ── hx-visually-hidden ── */
1764
+ :host {
1765
+ position: absolute !important;
1766
+ width: 1px !important;
1767
+ height: 1px !important;
1768
+ padding: 0 !important;
1769
+ margin: -1px !important;
1770
+ overflow: hidden !important;
1771
+ clip: rect(0, 0, 0, 0) !important;
1772
+ clip-path: inset(50%) !important;
1773
+ white-space: nowrap !important;
1774
+ border: 0 !important;
1775
+ }
1776
+
1777
+ :host([focusable]:focus-within) {
1778
+ position: static !important;
1779
+ width: auto !important;
1780
+ height: auto !important;
1781
+ padding: 0 !important;
1782
+ margin: 0 !important;
1783
+ overflow: visible !important;
1784
+ clip: auto !important;
1785
+ clip-path: none !important;
1786
+ white-space: normal !important;
1787
+ border: 0 !important;
1788
+ }