@helixui/library 1.1.2 → 2.0.0

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