@helixui/library 1.1.2 → 2.0.0-next.30

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 (691) hide show
  1. package/custom-elements.json +2962 -1965
  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.d.ts.map +1 -1
  23. package/dist/components/hx-avatar/hx-avatar.styles.d.ts.map +1 -1
  24. package/dist/components/hx-avatar/index.js +1 -1
  25. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  26. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  27. package/dist/components/hx-badge/index.js +1 -1
  28. package/dist/components/hx-banner/hx-banner.d.ts +15 -5
  29. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  30. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  31. package/dist/components/hx-banner/index.js +1 -1
  32. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +1 -0
  33. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  34. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +42 -11
  35. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  36. package/dist/components/hx-breadcrumb/index.js +1 -1
  37. package/dist/components/hx-button/hx-button.d.ts +22 -13
  38. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  39. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  40. package/dist/components/hx-button/index.js +1 -1
  41. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -6
  42. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  43. package/dist/components/hx-button-group/index.js +1 -1
  44. package/dist/components/hx-card/hx-card.d.ts +7 -7
  45. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  46. package/dist/components/hx-card/index.js +1 -1
  47. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  48. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  49. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  50. package/dist/components/hx-carousel/index.js +1 -1
  51. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -18
  52. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  53. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  54. package/dist/components/hx-checkbox/index.js +1 -1
  55. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +8 -3
  56. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  57. package/dist/components/hx-checkbox-group/index.js +1 -1
  58. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +134 -0
  59. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -0
  60. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts +2 -0
  61. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -0
  62. package/dist/components/hx-clinical-status/index.d.ts +3 -0
  63. package/dist/components/hx-clinical-status/index.d.ts.map +1 -0
  64. package/dist/components/hx-clinical-status/index.js +5 -0
  65. package/dist/components/hx-clinical-status/index.js.map +1 -0
  66. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  67. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  68. package/dist/components/hx-code-snippet/index.js +1 -1
  69. package/dist/components/hx-color-picker/color-utils.d.ts +27 -0
  70. package/dist/components/hx-color-picker/color-utils.d.ts.map +1 -0
  71. package/dist/components/hx-color-picker/hx-color-picker.d.ts +16 -4
  72. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  73. package/dist/components/hx-color-picker/index.js +1 -1
  74. package/dist/components/hx-combobox/hx-combobox.d.ts +9 -4
  75. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  76. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  77. package/dist/components/hx-combobox/index.js +1 -1
  78. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  79. package/dist/components/hx-container/index.js +1 -1
  80. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -1
  81. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  82. package/dist/components/hx-copy-button/index.js +1 -1
  83. package/dist/components/hx-counter/hx-counter.d.ts +20 -3
  84. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  85. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  86. package/dist/components/hx-counter/index.js +1 -1
  87. package/dist/components/hx-data-table/hx-data-table.d.ts +8 -0
  88. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  89. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  90. package/dist/components/hx-data-table/index.js +1 -1
  91. package/dist/components/hx-date-picker/hx-date-picker.d.ts +40 -3
  92. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  93. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  94. package/dist/components/hx-date-picker/index.js +1 -1
  95. package/dist/components/hx-dialog/hx-dialog.d.ts +4 -1
  96. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  97. package/dist/components/hx-dialog/index.js +1 -1
  98. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  99. package/dist/components/hx-divider/index.js +1 -1
  100. package/dist/components/hx-drawer/hx-drawer.d.ts +5 -8
  101. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  102. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  103. package/dist/components/hx-drawer/index.js +1 -1
  104. package/dist/components/hx-dropdown/hx-dropdown.d.ts +14 -1
  105. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  106. package/dist/components/hx-dropdown/index.js +1 -1
  107. package/dist/components/hx-field/hx-field.d.ts +1 -1
  108. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  109. package/dist/components/hx-field/index.js +1 -1
  110. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  111. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  112. package/dist/components/hx-field-label/index.js +1 -1
  113. package/dist/components/hx-file-upload/hx-file-upload.d.ts +8 -9
  114. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  115. package/dist/components/hx-file-upload/index.js +1 -1
  116. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  117. package/dist/components/hx-form/index.js +1 -1
  118. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  119. package/dist/components/hx-format-date/index.js +1 -1
  120. package/dist/components/hx-grid/hx-grid.d.ts +5 -9
  121. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  122. package/dist/components/hx-grid/index.js +1 -1
  123. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  124. package/dist/components/hx-help-text/index.js +1 -1
  125. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  126. package/dist/components/hx-icon/index.js +1 -1
  127. package/dist/components/hx-icon-button/hx-icon-button.d.ts +4 -3
  128. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  129. package/dist/components/hx-icon-button/index.js +1 -1
  130. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  131. package/dist/components/hx-image/index.js +1 -1
  132. package/dist/components/hx-link/hx-link.d.ts +1 -1
  133. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  134. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  135. package/dist/components/hx-link/index.js +1 -1
  136. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  137. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  138. package/dist/components/hx-list/index.js +1 -1
  139. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  140. package/dist/components/hx-menu/hx-menu-item.d.ts +5 -0
  141. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  142. package/dist/components/hx-menu/hx-menu.d.ts +1 -0
  143. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  144. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  145. package/dist/components/hx-menu/index.js +1 -1
  146. package/dist/components/hx-meter/hx-meter.d.ts +2 -2
  147. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  148. package/dist/components/hx-meter/index.js +1 -1
  149. package/dist/components/hx-nav/hx-nav.d.ts +10 -0
  150. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  151. package/dist/components/hx-nav/index.js +1 -1
  152. package/dist/components/hx-number-input/hx-number-input.d.ts +4 -3
  153. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  154. package/dist/components/hx-number-input/index.js +1 -1
  155. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +3 -3
  156. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  157. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  158. package/dist/components/hx-overflow-menu/index.js +1 -1
  159. package/dist/components/hx-pagination/hx-pagination.d.ts +8 -0
  160. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  161. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  162. package/dist/components/hx-pagination/index.js +1 -1
  163. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +113 -0
  164. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -0
  165. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts +2 -0
  166. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -0
  167. package/dist/components/hx-patient-banner/index.d.ts +3 -0
  168. package/dist/components/hx-patient-banner/index.d.ts.map +1 -0
  169. package/dist/components/hx-patient-banner/index.js +5 -0
  170. package/dist/components/hx-patient-banner/index.js.map +1 -0
  171. package/dist/components/hx-phi-field/hx-phi-field.d.ts +97 -0
  172. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -0
  173. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts +2 -0
  174. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -0
  175. package/dist/components/hx-phi-field/index.d.ts +3 -0
  176. package/dist/components/hx-phi-field/index.d.ts.map +1 -0
  177. package/dist/components/hx-phi-field/index.js +5 -0
  178. package/dist/components/hx-phi-field/index.js.map +1 -0
  179. package/dist/components/hx-popover/hx-popover.d.ts +25 -9
  180. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  181. package/dist/components/hx-popover/index.js +1 -1
  182. package/dist/components/hx-popup/hx-popup.d.ts +5 -8
  183. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  184. package/dist/components/hx-popup/index.js +1 -1
  185. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +2 -0
  186. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  187. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  188. package/dist/components/hx-progress-bar/index.js +1 -1
  189. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  190. package/dist/components/hx-progress-ring/index.js +1 -1
  191. package/dist/components/hx-prose/hx-prose.d.ts +1 -0
  192. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  193. package/dist/components/hx-radio-group/hx-radio-group.d.ts +3 -7
  194. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  195. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  196. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  197. package/dist/components/hx-radio-group/index.js +1 -1
  198. package/dist/components/hx-rating/hx-rating.d.ts +3 -3
  199. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  200. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  201. package/dist/components/hx-rating/index.js +1 -1
  202. package/dist/components/hx-select/hx-select.d.ts +17 -11
  203. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  204. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  205. package/dist/components/hx-select/index.js +1 -1
  206. package/dist/components/hx-side-nav/hx-nav-item.d.ts +12 -0
  207. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  208. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  209. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  210. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  211. package/dist/components/hx-side-nav/index.js +1 -1
  212. package/dist/components/hx-skeleton/hx-skeleton.d.ts +2 -2
  213. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  214. package/dist/components/hx-skeleton/index.js +1 -1
  215. package/dist/components/hx-slider/hx-slider.d.ts +5 -8
  216. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  217. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  218. package/dist/components/hx-slider/index.js +1 -1
  219. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -1
  220. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  221. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  222. package/dist/components/hx-spinner/index.js +1 -1
  223. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  224. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  225. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  226. package/dist/components/hx-split-button/index.js +1 -1
  227. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  228. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  229. package/dist/components/hx-split-panel/index.js +1 -1
  230. package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
  231. package/dist/components/hx-stack/index.js +1 -1
  232. package/dist/components/hx-stat/hx-stat.d.ts +7 -2
  233. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  234. package/dist/components/hx-stat/index.js +1 -1
  235. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +19 -3
  236. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  237. package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
  238. package/dist/components/hx-status-indicator/index.js +1 -1
  239. package/dist/components/hx-steps/hx-step.d.ts +7 -0
  240. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  241. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  242. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  243. package/dist/components/hx-steps/index.js +1 -1
  244. package/dist/components/hx-structured-list/hx-structured-list.d.ts +10 -3
  245. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  246. package/dist/components/hx-structured-list/index.js +1 -1
  247. package/dist/components/hx-style-scope/hx-style-scope.d.ts +71 -0
  248. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -0
  249. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts +10 -0
  250. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -0
  251. package/dist/components/hx-style-scope/index.d.ts +2 -0
  252. package/dist/components/hx-style-scope/index.d.ts.map +1 -0
  253. package/dist/components/hx-style-scope/index.js +5 -0
  254. package/dist/components/hx-style-scope/index.js.map +1 -0
  255. package/dist/components/hx-switch/hx-switch.d.ts +4 -4
  256. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  257. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  258. package/dist/components/hx-switch/index.js +1 -1
  259. package/dist/components/hx-table/hx-table.d.ts +1 -0
  260. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  261. package/dist/components/hx-table/hx-tbody.d.ts.map +1 -1
  262. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  263. package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -1
  264. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  265. package/dist/components/hx-table/hx-thead.d.ts.map +1 -1
  266. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  267. package/dist/components/hx-table/index.js +1 -1
  268. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  269. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  270. package/dist/components/hx-tabs/hx-tab.d.ts +1 -0
  271. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  272. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  273. package/dist/components/hx-tabs/hx-tabs.d.ts +12 -2
  274. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  275. package/dist/components/hx-tabs/index.js +1 -1
  276. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  277. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  278. package/dist/components/hx-tag/index.js +1 -1
  279. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  280. package/dist/components/hx-text/index.js +1 -1
  281. package/dist/components/hx-text-input/hx-text-input.d.ts +16 -15
  282. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  283. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  284. package/dist/components/hx-text-input/index.js +1 -1
  285. package/dist/components/hx-textarea/hx-textarea.d.ts +4 -4
  286. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  287. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  288. package/dist/components/hx-textarea/index.js +1 -1
  289. package/dist/components/hx-theme/hx-theme.d.ts +82 -3
  290. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  291. package/dist/components/hx-theme/index.js +1 -1
  292. package/dist/components/hx-time-picker/hx-time-picker.d.ts +6 -1
  293. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  294. package/dist/components/hx-time-picker/index.js +1 -1
  295. package/dist/components/hx-toast/hx-toast-stack.d.ts +1 -1
  296. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  297. package/dist/components/hx-toast/hx-toast.d.ts +9 -5
  298. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  299. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  300. package/dist/components/hx-toast/index.js +1 -1
  301. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  302. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -3
  303. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  304. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  305. package/dist/components/hx-toggle-button/index.js +1 -1
  306. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -2
  307. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  308. package/dist/components/hx-tooltip/index.js +1 -1
  309. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  310. package/dist/components/hx-top-nav/index.js +1 -1
  311. package/dist/components/hx-tree-view/hx-tree-item.d.ts +12 -0
  312. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  313. package/dist/components/hx-tree-view/hx-tree-view.d.ts +27 -2
  314. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  315. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  316. package/dist/components/hx-tree-view/index.js +1 -1
  317. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts.map +1 -1
  318. package/dist/components/hx-visually-hidden/index.js +1 -1
  319. package/dist/controllers/helix-audit-controller.d.ts +71 -0
  320. package/dist/controllers/helix-audit-controller.d.ts.map +1 -0
  321. package/dist/css/helix-all.css +9743 -0
  322. package/dist/css/helix-core.css +1839 -0
  323. package/dist/css/helix-data.css +639 -0
  324. package/dist/css/helix-feedback.css +1268 -0
  325. package/dist/css/helix-forms.css +2525 -0
  326. package/dist/css/helix-layout.css +380 -0
  327. package/dist/css/helix-media.css +213 -0
  328. package/dist/css/helix-navigation.css +1131 -0
  329. package/dist/css/helix-overlay.css +643 -0
  330. package/dist/css/helix-tokens.css +432 -0
  331. package/dist/css/helix-utility.css +633 -0
  332. package/dist/css/hx-accordion.css +10 -0
  333. package/dist/css/hx-action-bar.css +117 -0
  334. package/dist/css/hx-alert.css +213 -0
  335. package/dist/css/hx-avatar.css +134 -0
  336. package/dist/css/hx-badge.css +178 -0
  337. package/dist/css/hx-banner.css +203 -0
  338. package/dist/css/hx-breadcrumb.css +36 -0
  339. package/dist/css/hx-button-group.css +91 -0
  340. package/dist/css/hx-button.css +296 -0
  341. package/dist/css/hx-card.css +161 -0
  342. package/dist/css/hx-carousel.css +211 -0
  343. package/dist/css/hx-checkbox-group.css +77 -0
  344. package/dist/css/hx-checkbox.css +219 -0
  345. package/dist/css/hx-clinical-status.css +248 -0
  346. package/dist/css/hx-code-snippet.css +179 -0
  347. package/dist/css/hx-color-picker.css +2 -0
  348. package/dist/css/hx-combobox.css +2 -0
  349. package/dist/css/hx-container.css +82 -0
  350. package/dist/css/hx-copy-button.css +121 -0
  351. package/dist/css/hx-counter.css +51 -0
  352. package/dist/css/hx-data-table.css +207 -0
  353. package/dist/css/hx-date-picker.css +2 -0
  354. package/dist/css/hx-dialog.css +190 -0
  355. package/dist/css/hx-divider.css +87 -0
  356. package/dist/css/hx-drawer.css +262 -0
  357. package/dist/css/hx-dropdown.css +46 -0
  358. package/dist/css/hx-field-label.css +38 -0
  359. package/dist/css/hx-field.css +119 -0
  360. package/dist/css/hx-file-upload.css +241 -0
  361. package/dist/css/hx-form.css +2 -0
  362. package/dist/css/hx-format-date.css +10 -0
  363. package/dist/css/hx-grid.css +14 -0
  364. package/dist/css/hx-help-text.css +50 -0
  365. package/dist/css/hx-icon-button.css +152 -0
  366. package/dist/css/hx-icon.css +73 -0
  367. package/dist/css/hx-image.css +41 -0
  368. package/dist/css/hx-link.css +105 -0
  369. package/dist/css/hx-list.css +48 -0
  370. package/dist/css/hx-menu.css +23 -0
  371. package/dist/css/hx-meter.css +113 -0
  372. package/dist/css/hx-nav.css +242 -0
  373. package/dist/css/hx-number-input.css +246 -0
  374. package/dist/css/hx-overflow-menu.css +133 -0
  375. package/dist/css/hx-pagination.css +193 -0
  376. package/dist/css/hx-patient-banner.css +139 -0
  377. package/dist/css/hx-phi-field.css +97 -0
  378. package/dist/css/hx-popover.css +61 -0
  379. package/dist/css/hx-popup.css +31 -0
  380. package/dist/css/hx-progress-bar.css +133 -0
  381. package/dist/css/hx-progress-ring.css +142 -0
  382. package/dist/css/hx-prose.css +2 -0
  383. package/dist/css/hx-radio-group.css +77 -0
  384. package/dist/css/hx-rating.css +96 -0
  385. package/dist/css/hx-select.css +295 -0
  386. package/dist/css/hx-side-nav.css +149 -0
  387. package/dist/css/hx-skeleton.css +82 -0
  388. package/dist/css/hx-slider.css +287 -0
  389. package/dist/css/hx-spinner.css +116 -0
  390. package/dist/css/hx-split-button.css +309 -0
  391. package/dist/css/hx-split-panel.css +168 -0
  392. package/dist/css/hx-stack.css +104 -0
  393. package/dist/css/hx-stat.css +106 -0
  394. package/dist/css/hx-status-indicator.css +126 -0
  395. package/dist/css/hx-steps.css +52 -0
  396. package/dist/css/hx-structured-list.css +75 -0
  397. package/dist/css/hx-style-scope.css +4 -0
  398. package/dist/css/hx-switch.css +169 -0
  399. package/dist/css/hx-table.css +128 -0
  400. package/dist/css/hx-tabs.css +76 -0
  401. package/dist/css/hx-tag.css +146 -0
  402. package/dist/css/hx-text-input.css +214 -0
  403. package/dist/css/hx-text.css +149 -0
  404. package/dist/css/hx-textarea.css +180 -0
  405. package/dist/css/hx-theme.css +23 -0
  406. package/dist/css/hx-time-picker.css +2 -0
  407. package/dist/css/hx-toast.css +230 -0
  408. package/dist/css/hx-toggle-button.css +207 -0
  409. package/dist/css/hx-tooltip.css +51 -0
  410. package/dist/css/hx-top-nav.css +203 -0
  411. package/dist/css/hx-tree-view.css +22 -0
  412. package/dist/css/hx-visually-hidden.css +26 -0
  413. package/dist/css/index.css +84 -0
  414. package/dist/css/manifest.json +2704 -0
  415. package/dist/index.d.ts +15 -9
  416. package/dist/index.d.ts.map +1 -1
  417. package/dist/index.js +268 -176
  418. package/dist/index.js.map +1 -1
  419. package/dist/mixins/FocusMixin.d.ts +49 -0
  420. package/dist/mixins/FocusMixin.d.ts.map +1 -0
  421. package/dist/mixins/FormMixin.d.ts +69 -0
  422. package/dist/mixins/FormMixin.d.ts.map +1 -0
  423. package/dist/mixins/aria-delegation.d.ts +97 -0
  424. package/dist/mixins/aria-delegation.d.ts.map +1 -0
  425. package/dist/mixins/index.d.ts +5 -0
  426. package/dist/mixins/index.d.ts.map +1 -0
  427. package/dist/shared/FormMixin-Bjvw20G5.js +88 -0
  428. package/dist/shared/FormMixin-Bjvw20G5.js.map +1 -0
  429. package/dist/shared/aria-delegation-CBP9eQ0M.js +107 -0
  430. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +1 -0
  431. package/dist/shared/document-token-adoption-Dym9ALA4.js +15 -0
  432. package/dist/shared/document-token-adoption-Dym9ALA4.js.map +1 -0
  433. package/dist/shared/{hx-accordion-D1kFhdeQ.js → hx-accordion-Cvs-uzZq.js} +86 -58
  434. package/dist/shared/hx-accordion-Cvs-uzZq.js.map +1 -0
  435. package/dist/shared/{hx-action-bar-D4bulGQP.js → hx-action-bar-B2BNlKQv.js} +34 -35
  436. package/dist/shared/hx-action-bar-B2BNlKQv.js.map +1 -0
  437. package/dist/shared/{hx-alert-CSxCF2rr.js → hx-alert-CnDlZO6m.js} +38 -34
  438. package/dist/shared/hx-alert-CnDlZO6m.js.map +1 -0
  439. package/dist/shared/{hx-avatar-Cun-O99h.js → hx-avatar-C68g1G2e.js} +32 -15
  440. package/dist/shared/hx-avatar-C68g1G2e.js.map +1 -0
  441. package/dist/shared/{hx-badge-CsFd2xtw.js → hx-badge-D5vy_5BO.js} +49 -40
  442. package/dist/shared/hx-badge-D5vy_5BO.js.map +1 -0
  443. package/dist/shared/{hx-banner-BTV-X2xF.js → hx-banner-Ccif-GaB.js} +95 -60
  444. package/dist/shared/hx-banner-Ccif-GaB.js.map +1 -0
  445. package/dist/shared/{hx-breadcrumb-item-4IwaLgaO.js → hx-breadcrumb-item-DhxDZI3r.js} +92 -89
  446. package/dist/shared/hx-breadcrumb-item-DhxDZI3r.js.map +1 -0
  447. package/dist/shared/{hx-button-7k-KeCYU.js → hx-button-BF3VwcOJ.js} +128 -63
  448. package/dist/shared/hx-button-BF3VwcOJ.js.map +1 -0
  449. package/dist/shared/{hx-button-group-CWjWv-wS.js → hx-button-group-B8u25JjV.js} +9 -9
  450. package/dist/shared/hx-button-group-B8u25JjV.js.map +1 -0
  451. package/dist/shared/{hx-card-0hT3G5hi.js → hx-card-Dps4jvG9.js} +34 -34
  452. package/dist/shared/hx-card-Dps4jvG9.js.map +1 -0
  453. package/dist/shared/{hx-carousel-item-DgeYyYZJ.js → hx-carousel-item-Dmo9pGFm.js} +25 -25
  454. package/dist/shared/hx-carousel-item-Dmo9pGFm.js.map +1 -0
  455. package/dist/shared/{hx-checkbox-BvjO-O41.js → hx-checkbox-99zyEKj7.js} +67 -70
  456. package/dist/shared/hx-checkbox-99zyEKj7.js.map +1 -0
  457. package/dist/shared/{hx-checkbox-group-Z5VvWzcj.js → hx-checkbox-group-J2CGHDwY.js} +48 -42
  458. package/dist/shared/hx-checkbox-group-J2CGHDwY.js.map +1 -0
  459. package/dist/shared/hx-clinical-status-CGx5q5PL.js +469 -0
  460. package/dist/shared/hx-clinical-status-CGx5q5PL.js.map +1 -0
  461. package/dist/shared/{hx-code-snippet-DqzPkH4K.js → hx-code-snippet-vAzJjm2O.js} +57 -48
  462. package/dist/shared/hx-code-snippet-vAzJjm2O.js.map +1 -0
  463. package/dist/shared/{hx-color-picker-Da8z6AlQ.js → hx-color-picker-CzMu9Fzw.js} +153 -137
  464. package/dist/shared/hx-color-picker-CzMu9Fzw.js.map +1 -0
  465. package/dist/shared/{hx-combobox-CivfelTS.js → hx-combobox-Dhw33U40.js} +17 -17
  466. package/dist/shared/hx-combobox-Dhw33U40.js.map +1 -0
  467. package/dist/shared/{hx-container-DLUKnTi9.js → hx-container-Dz4v6FSd.js} +15 -15
  468. package/dist/shared/hx-container-Dz4v6FSd.js.map +1 -0
  469. package/dist/shared/{hx-copy-button--0dymSvw.js → hx-copy-button-Dcul7VwZ.js} +52 -45
  470. package/dist/shared/hx-copy-button-Dcul7VwZ.js.map +1 -0
  471. package/dist/shared/hx-counter-czWWvciz.js +185 -0
  472. package/dist/shared/hx-counter-czWWvciz.js.map +1 -0
  473. package/dist/shared/{hx-data-table-BWvd5NNx.js → hx-data-table-CAVgT4JG.js} +89 -53
  474. package/dist/shared/hx-data-table-CAVgT4JG.js.map +1 -0
  475. package/dist/shared/{hx-date-picker-6voxxxNE.js → hx-date-picker-Be8lTTO7.js} +105 -92
  476. package/dist/shared/hx-date-picker-Be8lTTO7.js.map +1 -0
  477. package/dist/shared/{hx-dialog-DkUSnVgw.js → hx-dialog-DTGX2FbP.js} +98 -89
  478. package/dist/shared/hx-dialog-DTGX2FbP.js.map +1 -0
  479. package/dist/shared/{hx-divider-DNNs4e8q.js → hx-divider-BJjarZ9z.js} +15 -15
  480. package/dist/shared/hx-divider-BJjarZ9z.js.map +1 -0
  481. package/dist/shared/{hx-drawer-CJcRZcns.js → hx-drawer-C5qI7jf1.js} +87 -47
  482. package/dist/shared/hx-drawer-C5qI7jf1.js.map +1 -0
  483. package/dist/shared/{hx-dropdown-Bo0KTM1A.js → hx-dropdown-BxNnUDyD.js} +56 -41
  484. package/dist/shared/hx-dropdown-BxNnUDyD.js.map +1 -0
  485. package/dist/shared/{hx-field-3MmzJ4kZ.js → hx-field-J1IUbQ8n.js} +21 -21
  486. package/dist/shared/hx-field-J1IUbQ8n.js.map +1 -0
  487. package/dist/shared/{hx-field-label-Bg-EWvqF.js → hx-field-label-DhVdkhCN.js} +11 -14
  488. package/dist/shared/hx-field-label-DhVdkhCN.js.map +1 -0
  489. package/dist/shared/{hx-file-upload-ByjAgfNy.js → hx-file-upload-79nMhnM_.js} +79 -88
  490. package/dist/shared/hx-file-upload-79nMhnM_.js.map +1 -0
  491. package/dist/shared/{hx-form-BpS6v3Iu.js → hx-form-fJE-FJQV.js} +36 -32
  492. package/dist/shared/{hx-form-BpS6v3Iu.js.map → hx-form-fJE-FJQV.js.map} +1 -1
  493. package/dist/shared/{hx-format-date-BdnWV2kX.js → hx-format-date-BMukpO2t.js} +19 -17
  494. package/dist/shared/hx-format-date-BMukpO2t.js.map +1 -0
  495. package/dist/shared/{hx-grid-gEjuF0cR.js → hx-grid-CO6JZ6Kn.js} +12 -12
  496. package/dist/shared/hx-grid-CO6JZ6Kn.js.map +1 -0
  497. package/dist/shared/{hx-help-text-BAcEGRUE.js → hx-help-text-CYGvBLET.js} +13 -13
  498. package/dist/shared/hx-help-text-CYGvBLET.js.map +1 -0
  499. package/dist/shared/{hx-icon-CP6OnLoM.js → hx-icon-C1hDsw-b.js} +15 -15
  500. package/dist/shared/hx-icon-C1hDsw-b.js.map +1 -0
  501. package/dist/shared/{hx-icon-button-DzH_bRtC.js → hx-icon-button-DOWKUs0-.js} +10 -10
  502. package/dist/shared/hx-icon-button-DOWKUs0-.js.map +1 -0
  503. package/dist/shared/{hx-image-C6pGiI6c.js → hx-image-BqABFHGZ.js} +21 -21
  504. package/dist/shared/hx-image-BqABFHGZ.js.map +1 -0
  505. package/dist/shared/{hx-link-Tmk_YPvW.js → hx-link-CAFRuAKJ.js} +27 -25
  506. package/dist/shared/hx-link-CAFRuAKJ.js.map +1 -0
  507. package/dist/shared/{hx-list-DwInEX2H.js → hx-list-zbgO-9Xe.js} +12 -12
  508. package/dist/shared/hx-list-zbgO-9Xe.js.map +1 -0
  509. package/dist/shared/{hx-menu-divider-DR4G_rqw.js → hx-menu-divider-B1TIKAaq.js} +50 -30
  510. package/dist/shared/hx-menu-divider-B1TIKAaq.js.map +1 -0
  511. package/dist/shared/{hx-meter-uXkTZq-W.js → hx-meter-BWNeWrg2.js} +18 -18
  512. package/dist/shared/hx-meter-BWNeWrg2.js.map +1 -0
  513. package/dist/shared/{hx-nav-3JsN2Oak.js → hx-nav-DqNzqH2s.js} +119 -107
  514. package/dist/shared/hx-nav-DqNzqH2s.js.map +1 -0
  515. package/dist/shared/{hx-nav-item-D3EJatzc.js → hx-nav-item-D-9uG-Tt.js} +181 -115
  516. package/dist/shared/hx-nav-item-D-9uG-Tt.js.map +1 -0
  517. package/dist/shared/{hx-number-input-CIpL2BEh.js → hx-number-input-D7Jczm0J.js} +42 -41
  518. package/dist/shared/hx-number-input-D7Jczm0J.js.map +1 -0
  519. package/dist/shared/{hx-overflow-menu-2kgOJ_ht.js → hx-overflow-menu-UvSgk7yV.js} +20 -16
  520. package/dist/shared/hx-overflow-menu-UvSgk7yV.js.map +1 -0
  521. package/dist/shared/{hx-pagination-Blt-fFqV.js → hx-pagination-DBovb97q.js} +91 -75
  522. package/dist/shared/hx-pagination-DBovb97q.js.map +1 -0
  523. package/dist/shared/hx-patient-banner-DLeU2pC2.js +297 -0
  524. package/dist/shared/hx-patient-banner-DLeU2pC2.js.map +1 -0
  525. package/dist/shared/hx-phi-field-BwlVKfHI.js +295 -0
  526. package/dist/shared/hx-phi-field-BwlVKfHI.js.map +1 -0
  527. package/dist/shared/{hx-popover-DxE67miP.js → hx-popover-DdjLdSr8.js} +96 -69
  528. package/dist/shared/hx-popover-DdjLdSr8.js.map +1 -0
  529. package/dist/shared/{hx-popup-Dg6n_PbY.js → hx-popup-DEYZKeH1.js} +15 -15
  530. package/dist/shared/hx-popup-DEYZKeH1.js.map +1 -0
  531. package/dist/shared/{hx-progress-bar-Dm_EHyng.js → hx-progress-bar-CdbFsimb.js} +44 -42
  532. package/dist/shared/hx-progress-bar-CdbFsimb.js.map +1 -0
  533. package/dist/shared/{hx-progress-ring-DpxBDD5d.js → hx-progress-ring-3YcGRxes.js} +8 -8
  534. package/dist/shared/hx-progress-ring-3YcGRxes.js.map +1 -0
  535. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -1
  536. package/dist/shared/{hx-radio-BywgVSEu.js → hx-radio-BCEpX1tj.js} +40 -39
  537. package/dist/shared/hx-radio-BCEpX1tj.js.map +1 -0
  538. package/dist/shared/{hx-rating-CUWBQ0fZ.js → hx-rating-BXnSN-Ln.js} +92 -96
  539. package/dist/shared/hx-rating-BXnSN-Ln.js.map +1 -0
  540. package/dist/shared/{hx-select-BwDwxk-M.js → hx-select-vzsOOYNx.js} +137 -98
  541. package/dist/shared/hx-select-vzsOOYNx.js.map +1 -0
  542. package/dist/shared/{hx-skeleton-BHvALyd7.js → hx-skeleton-Dikv9b7p.js} +6 -6
  543. package/dist/shared/hx-skeleton-Dikv9b7p.js.map +1 -0
  544. package/dist/shared/{hx-slider-D_0EKJyk.js → hx-slider-DnncjdOT.js} +31 -26
  545. package/dist/shared/hx-slider-DnncjdOT.js.map +1 -0
  546. package/dist/shared/{hx-spinner-DMn4SChS.js → hx-spinner-B52nJ4Vt.js} +15 -14
  547. package/dist/shared/hx-spinner-B52nJ4Vt.js.map +1 -0
  548. package/dist/shared/{hx-split-button-CypgLXw1.js → hx-split-button-BJHIszDb.js} +44 -35
  549. package/dist/shared/hx-split-button-BJHIszDb.js.map +1 -0
  550. package/dist/shared/{hx-split-panel-CV_Kr4EK.js → hx-split-panel-uNW9xrA3.js} +18 -15
  551. package/dist/shared/hx-split-panel-uNW9xrA3.js.map +1 -0
  552. package/dist/shared/{hx-stack-BStY1RmV.js → hx-stack-BHc4gVv_.js} +9 -9
  553. package/dist/shared/hx-stack-BHc4gVv_.js.map +1 -0
  554. package/dist/shared/{hx-stat-CHntLHJM.js → hx-stat-BfgKgBeq.js} +43 -35
  555. package/dist/shared/hx-stat-BfgKgBeq.js.map +1 -0
  556. package/dist/shared/{hx-status-indicator-C1BwEvUw.js → hx-status-indicator-C146uMF0.js} +81 -40
  557. package/dist/shared/hx-status-indicator-C146uMF0.js.map +1 -0
  558. package/dist/shared/{hx-step-BIVWSPxd.js → hx-step-C0Unvyen.js} +48 -84
  559. package/dist/shared/hx-step-C0Unvyen.js.map +1 -0
  560. package/dist/shared/{hx-structured-list-CMWllxGg.js → hx-structured-list-3R69RETR.js} +25 -22
  561. package/dist/shared/hx-structured-list-3R69RETR.js.map +1 -0
  562. package/dist/shared/hx-style-scope-D3dsKS58.js +126 -0
  563. package/dist/shared/hx-style-scope-D3dsKS58.js.map +1 -0
  564. package/dist/shared/{hx-switch-BgX8kuWt.js → hx-switch-BCNpbuk-.js} +14 -11
  565. package/dist/shared/hx-switch-BCNpbuk-.js.map +1 -0
  566. package/dist/shared/{hx-tab-panel-DhOq67jj.js → hx-tab-panel-D7BTBgDQ.js} +165 -126
  567. package/dist/shared/hx-tab-panel-D7BTBgDQ.js.map +1 -0
  568. package/dist/shared/{hx-tag-CzOTDcXI.js → hx-tag-C2E-6fJ3.js} +20 -19
  569. package/dist/shared/hx-tag-C2E-6fJ3.js.map +1 -0
  570. package/dist/shared/{hx-td-h6oeW6YC.js → hx-td-DWcp2XDO.js} +49 -46
  571. package/dist/shared/hx-td-DWcp2XDO.js.map +1 -0
  572. package/dist/shared/{hx-text-DTXjiviE.js → hx-text-DxyBxz25.js} +27 -27
  573. package/dist/shared/hx-text-DxyBxz25.js.map +1 -0
  574. package/dist/shared/hx-text-input-2LTGt0vQ.js +576 -0
  575. package/dist/shared/hx-text-input-2LTGt0vQ.js.map +1 -0
  576. package/dist/shared/{hx-textarea-BgX7rxyo.js → hx-textarea-BZspivFK.js} +23 -23
  577. package/dist/shared/hx-textarea-BZspivFK.js.map +1 -0
  578. package/dist/shared/hx-theme-J2YEpSIL.js +300 -0
  579. package/dist/shared/hx-theme-J2YEpSIL.js.map +1 -0
  580. package/dist/shared/{hx-time-picker-DmLu7WUC.js → hx-time-picker-CVrw4tju.js} +89 -88
  581. package/dist/shared/hx-time-picker-CVrw4tju.js.map +1 -0
  582. package/dist/shared/{hx-toggle-button-D1jpDvSA.js → hx-toggle-button-Ss7Gppx3.js} +14 -11
  583. package/dist/shared/hx-toggle-button-Ss7Gppx3.js.map +1 -0
  584. package/dist/shared/{hx-tooltip-kh7QFPKu.js → hx-tooltip-xRNjEX7_.js} +26 -21
  585. package/dist/shared/hx-tooltip-xRNjEX7_.js.map +1 -0
  586. package/dist/shared/{hx-top-nav-DYlnzDaU.js → hx-top-nav-28mxYGuj.js} +7 -7
  587. package/dist/shared/hx-top-nav-28mxYGuj.js.map +1 -0
  588. package/dist/shared/{hx-tree-item-BP6UF_H1.js → hx-tree-item-C-cRw_ZA.js} +170 -106
  589. package/dist/shared/hx-tree-item-C-cRw_ZA.js.map +1 -0
  590. package/dist/shared/{hx-visually-hidden-CCTQTjbR.js → hx-visually-hidden-D6Dv2l8l.js} +13 -13
  591. package/dist/shared/hx-visually-hidden-D6Dv2l8l.js.map +1 -0
  592. package/dist/shared/id-counter-JhvVCnjh.js +143 -0
  593. package/dist/shared/id-counter-JhvVCnjh.js.map +1 -0
  594. package/dist/shared/{toast-factory-DTy-qN8r.js → toast-factory-oPHbhMZI.js} +58 -46
  595. package/dist/shared/toast-factory-oPHbhMZI.js.map +1 -0
  596. package/dist/utilities/adoptedStylesheetRegistry.d.ts +47 -0
  597. package/dist/utilities/adoptedStylesheetRegistry.d.ts.map +1 -0
  598. package/dist/utilities/document-token-adoption.d.ts +10 -0
  599. package/dist/utilities/document-token-adoption.d.ts.map +1 -0
  600. package/dist/utilities/generateScopedSelectors.d.ts +30 -0
  601. package/dist/utilities/generateScopedSelectors.d.ts.map +1 -0
  602. package/dist/utilities/injectLightStyles.d.ts +37 -0
  603. package/dist/utilities/injectLightStyles.d.ts.map +1 -0
  604. package/dist/utilities/lightStyleRegistry.d.ts +41 -0
  605. package/dist/utilities/lightStyleRegistry.d.ts.map +1 -0
  606. package/dist/utilities/sheetManager.d.ts +62 -0
  607. package/dist/utilities/sheetManager.d.ts.map +1 -0
  608. package/dist/utils/contrast-checker.d.ts +86 -0
  609. package/dist/utils/contrast-checker.d.ts.map +1 -0
  610. package/dist/utils/token-merger.d.ts +24 -0
  611. package/dist/utils/token-merger.d.ts.map +1 -0
  612. package/fouc.css +37 -0
  613. package/package.json +28 -6
  614. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +0 -1
  615. package/dist/shared/hx-action-bar-D4bulGQP.js.map +0 -1
  616. package/dist/shared/hx-alert-CSxCF2rr.js.map +0 -1
  617. package/dist/shared/hx-avatar-Cun-O99h.js.map +0 -1
  618. package/dist/shared/hx-badge-CsFd2xtw.js.map +0 -1
  619. package/dist/shared/hx-banner-BTV-X2xF.js.map +0 -1
  620. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +0 -1
  621. package/dist/shared/hx-button-7k-KeCYU.js.map +0 -1
  622. package/dist/shared/hx-button-group-CWjWv-wS.js.map +0 -1
  623. package/dist/shared/hx-card-0hT3G5hi.js.map +0 -1
  624. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +0 -1
  625. package/dist/shared/hx-checkbox-BvjO-O41.js.map +0 -1
  626. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +0 -1
  627. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +0 -1
  628. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +0 -1
  629. package/dist/shared/hx-combobox-CivfelTS.js.map +0 -1
  630. package/dist/shared/hx-container-DLUKnTi9.js.map +0 -1
  631. package/dist/shared/hx-copy-button--0dymSvw.js.map +0 -1
  632. package/dist/shared/hx-counter-Duf00H7p.js +0 -147
  633. package/dist/shared/hx-counter-Duf00H7p.js.map +0 -1
  634. package/dist/shared/hx-data-table-BWvd5NNx.js.map +0 -1
  635. package/dist/shared/hx-date-picker-6voxxxNE.js.map +0 -1
  636. package/dist/shared/hx-dialog-DkUSnVgw.js.map +0 -1
  637. package/dist/shared/hx-divider-DNNs4e8q.js.map +0 -1
  638. package/dist/shared/hx-drawer-CJcRZcns.js.map +0 -1
  639. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +0 -1
  640. package/dist/shared/hx-field-3MmzJ4kZ.js.map +0 -1
  641. package/dist/shared/hx-field-label-Bg-EWvqF.js.map +0 -1
  642. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +0 -1
  643. package/dist/shared/hx-format-date-BdnWV2kX.js.map +0 -1
  644. package/dist/shared/hx-grid-gEjuF0cR.js.map +0 -1
  645. package/dist/shared/hx-help-text-BAcEGRUE.js.map +0 -1
  646. package/dist/shared/hx-icon-CP6OnLoM.js.map +0 -1
  647. package/dist/shared/hx-icon-button-DzH_bRtC.js.map +0 -1
  648. package/dist/shared/hx-image-C6pGiI6c.js.map +0 -1
  649. package/dist/shared/hx-link-Tmk_YPvW.js.map +0 -1
  650. package/dist/shared/hx-list-DwInEX2H.js.map +0 -1
  651. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +0 -1
  652. package/dist/shared/hx-meter-uXkTZq-W.js.map +0 -1
  653. package/dist/shared/hx-nav-3JsN2Oak.js.map +0 -1
  654. package/dist/shared/hx-nav-item-D3EJatzc.js.map +0 -1
  655. package/dist/shared/hx-number-input-CIpL2BEh.js.map +0 -1
  656. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +0 -1
  657. package/dist/shared/hx-pagination-Blt-fFqV.js.map +0 -1
  658. package/dist/shared/hx-popover-DxE67miP.js.map +0 -1
  659. package/dist/shared/hx-popup-Dg6n_PbY.js.map +0 -1
  660. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +0 -1
  661. package/dist/shared/hx-progress-ring-DpxBDD5d.js.map +0 -1
  662. package/dist/shared/hx-radio-BywgVSEu.js.map +0 -1
  663. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +0 -1
  664. package/dist/shared/hx-select-BwDwxk-M.js.map +0 -1
  665. package/dist/shared/hx-skeleton-BHvALyd7.js.map +0 -1
  666. package/dist/shared/hx-slider-D_0EKJyk.js.map +0 -1
  667. package/dist/shared/hx-spinner-DMn4SChS.js.map +0 -1
  668. package/dist/shared/hx-split-button-CypgLXw1.js.map +0 -1
  669. package/dist/shared/hx-split-panel-CV_Kr4EK.js.map +0 -1
  670. package/dist/shared/hx-stack-BStY1RmV.js.map +0 -1
  671. package/dist/shared/hx-stat-CHntLHJM.js.map +0 -1
  672. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +0 -1
  673. package/dist/shared/hx-step-BIVWSPxd.js.map +0 -1
  674. package/dist/shared/hx-structured-list-CMWllxGg.js.map +0 -1
  675. package/dist/shared/hx-switch-BgX8kuWt.js.map +0 -1
  676. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +0 -1
  677. package/dist/shared/hx-tag-CzOTDcXI.js.map +0 -1
  678. package/dist/shared/hx-td-h6oeW6YC.js.map +0 -1
  679. package/dist/shared/hx-text-DTXjiviE.js.map +0 -1
  680. package/dist/shared/hx-text-input-CqEdDHMU.js +0 -461
  681. package/dist/shared/hx-text-input-CqEdDHMU.js.map +0 -1
  682. package/dist/shared/hx-textarea-BgX7rxyo.js.map +0 -1
  683. package/dist/shared/hx-theme-6GDoUG8j.js +0 -176
  684. package/dist/shared/hx-theme-6GDoUG8j.js.map +0 -1
  685. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +0 -1
  686. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +0 -1
  687. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +0 -1
  688. package/dist/shared/hx-top-nav-DYlnzDaU.js.map +0 -1
  689. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +0 -1
  690. package/dist/shared/hx-visually-hidden-CCTQTjbR.js.map +0 -1
  691. package/dist/shared/toast-factory-DTy-qN8r.js.map +0 -1
@@ -0,0 +1,2525 @@
1
+ /* helix-forms.css — 20 components */
2
+
3
+ /* ── hx-checkbox ── */
4
+ :host {
5
+ display: block;
6
+ }
7
+
8
+ :host([disabled]) {
9
+ opacity: var(--hx-opacity-disabled, 0.5);
10
+ pointer-events: none;
11
+ }
12
+
13
+ * {
14
+ box-sizing: border-box;
15
+ }
16
+
17
+ .checkbox {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: var(--hx-space-1, 0.25rem);
21
+ font-family: var(--hx-font-family-sans, sans-serif);
22
+ }
23
+
24
+ /* ─── Control (checkbox + label row) ─── */
25
+
26
+ .checkbox__control {
27
+ display: inline-flex;
28
+ align-items: flex-start;
29
+ gap: var(--hx-space-2, 0.5rem);
30
+ /* WCAG 2.5.5 (healthcare mandate): minimum 44px touch target height */
31
+ min-height: var(--hx-touch-target-min, 2.75rem);
32
+ cursor: pointer;
33
+ }
34
+
35
+ :host([disabled]) .checkbox__control {
36
+ cursor: not-allowed;
37
+ }
38
+
39
+ /* ─── Hidden Native Input ─── */
40
+
41
+ .checkbox__input {
42
+ position: absolute;
43
+ width: 1px;
44
+ height: 1px;
45
+ padding: 0;
46
+ margin: -1px;
47
+ overflow: hidden;
48
+ clip-path: inset(50%);
49
+ white-space: nowrap;
50
+ border: 0;
51
+ }
52
+
53
+ /* ─── Visual Checkbox ─── */
54
+
55
+ .checkbox__box {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ flex-shrink: 0;
60
+ width: var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));
61
+ height: var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));
62
+ border: var(--hx-border-width-medium, 2px) solid
63
+ var(--hx-checkbox-border-color, var(--hx-color-neutral-300, #ced4da));
64
+ border-radius: var(--hx-checkbox-border-radius, var(--hx-border-radius-sm, 0.25rem));
65
+ background-color: var(--hx-checkbox-bg, var(--hx-color-neutral-0, #ffffff));
66
+ transition:
67
+ background-color var(--hx-transition-fast, 150ms ease),
68
+ border-color var(--hx-transition-fast, 150ms ease),
69
+ box-shadow var(--hx-transition-fast, 150ms ease);
70
+ margin-top: var(--hx-space-px, 1px);
71
+ }
72
+
73
+ /* ─── Focus Ring ─── */
74
+
75
+ .checkbox__input:focus-visible ~ .checkbox__box {
76
+ outline: var(--hx-focus-ring-width, 2px) solid
77
+ var(
78
+ --hx-checkbox-focus-ring-color,
79
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
80
+ );
81
+ outline-offset: var(--hx-focus-ring-offset, 2px);
82
+ }
83
+
84
+ /* ─── Checked State ─── */
85
+
86
+ .checkbox--checked .checkbox__box {
87
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));
88
+ border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));
89
+ }
90
+
91
+ /* ─── Indeterminate State ─── */
92
+
93
+ .checkbox--indeterminate .checkbox__box {
94
+ background-color: var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));
95
+ border-color: var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));
96
+ }
97
+
98
+ /* ─── Error State ─── */
99
+
100
+ .checkbox--error .checkbox__box {
101
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
102
+ }
103
+
104
+ .checkbox--error.checkbox--checked .checkbox__box,
105
+ .checkbox--error.checkbox--indeterminate .checkbox__box {
106
+ background-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
107
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
108
+ }
109
+
110
+ /* ─── Hover ─── */
111
+
112
+ /* P1-03: use component token so consumer overrides of --hx-checkbox-border-color work on hover */
113
+ .checkbox__control:hover .checkbox__box {
114
+ border-color: var(
115
+ --hx-checkbox-hover-border-color,
116
+ var(--hx-checkbox-border-color, var(--hx-color-primary-500, #2563eb))
117
+ );
118
+ }
119
+
120
+ .checkbox--checked .checkbox__control:hover .checkbox__box {
121
+ filter: brightness(var(--hx-filter-brightness-hover, 0.9));
122
+ }
123
+
124
+ .checkbox--error .checkbox__control:hover .checkbox__box {
125
+ border-color: var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));
126
+ }
127
+
128
+ /* ─── Checkmark Icon ─── */
129
+
130
+ .checkbox__icon {
131
+ display: none;
132
+ width: calc(var(--hx-checkbox-size, var(--hx-size-5, 1.25rem)) * 0.65);
133
+ height: calc(var(--hx-checkbox-size, var(--hx-size-5, 1.25rem)) * 0.65);
134
+ fill: none;
135
+ stroke: var(--hx-checkbox-checkmark-color, var(--hx-color-neutral-0, #ffffff));
136
+ stroke-width: 2.5;
137
+ stroke-linecap: round;
138
+ stroke-linejoin: round;
139
+ }
140
+
141
+ .checkbox--checked .checkbox__icon--check {
142
+ display: block;
143
+ }
144
+
145
+ .checkbox--indeterminate .checkbox__icon--indeterminate {
146
+ display: block;
147
+ }
148
+
149
+ /* ─── Label ─── */
150
+
151
+ .checkbox__label {
152
+ font-size: var(--hx-font-size-sm, 0.875rem);
153
+ font-weight: var(--hx-font-weight-medium, 500);
154
+ color: var(--hx-checkbox-label-color, var(--hx-color-neutral-700, #343a40));
155
+ line-height: var(--hx-line-height-normal, 1.5);
156
+ user-select: none;
157
+ -webkit-user-select: none;
158
+ }
159
+
160
+ .checkbox__required-marker {
161
+ color: var(--hx-checkbox-error-color, var(--hx-color-error-text, #b91c1c));
162
+ font-weight: var(--hx-font-weight-bold, 700);
163
+ }
164
+
165
+ /* ─── Help Text & Error Messages ─── */
166
+
167
+ .checkbox__help-text {
168
+ font-size: var(--hx-font-size-xs, 0.75rem);
169
+ color: var(--hx-checkbox-help-text-color, var(--hx-color-neutral-500, #6c757d));
170
+ line-height: var(--hx-line-height-normal, 1.5);
171
+ padding-inline-start: calc(
172
+ var(--hx-checkbox-size, var(--hx-size-5, 1.25rem)) + var(--hx-space-2, 0.5rem)
173
+ );
174
+ }
175
+
176
+ .checkbox__error {
177
+ font-size: var(--hx-font-size-xs, 0.75rem);
178
+ color: var(--hx-checkbox-error-color, var(--hx-color-error-text, #b91c1c));
179
+ line-height: var(--hx-line-height-normal, 1.5);
180
+ padding-inline-start: calc(
181
+ var(--hx-checkbox-size, var(--hx-size-5, 1.25rem)) + var(--hx-space-2, 0.5rem)
182
+ );
183
+ }
184
+
185
+ /* ─── Size Variants ─── */
186
+
187
+ :host([hx-size='sm']) {
188
+ --hx-checkbox-size: var(--hx-size-4, 1rem);
189
+ }
190
+
191
+ :host([hx-size='sm']) .checkbox__label {
192
+ font-size: var(--hx-font-size-xs, 0.75rem);
193
+ }
194
+
195
+ :host([hx-size='sm']) .checkbox__help-text,
196
+ :host([hx-size='sm']) .checkbox__error {
197
+ font-size: var(--hx-font-size-xs, 0.75rem);
198
+ padding-inline-start: calc(var(--hx-size-4, 1rem) + var(--hx-space-2, 0.5rem));
199
+ }
200
+
201
+ :host([hx-size='lg']) {
202
+ --hx-checkbox-size: var(--hx-size-6, 1.5rem);
203
+ }
204
+
205
+ :host([hx-size='lg']) .checkbox__label {
206
+ font-size: var(--hx-font-size-md, 1rem);
207
+ }
208
+
209
+ :host([hx-size='lg']) .checkbox__help-text,
210
+ :host([hx-size='lg']) .checkbox__error {
211
+ font-size: var(--hx-font-size-sm, 0.875rem);
212
+ padding-inline-start: calc(var(--hx-size-6, 1.5rem) + var(--hx-space-2, 0.5rem));
213
+ }
214
+
215
+ /* ─── Reduced Motion ─── */
216
+
217
+ @media (prefers-reduced-motion: reduce) {
218
+ .checkbox__box {
219
+ transition: none;
220
+ }
221
+ }
222
+ /* ── hx-checkbox-group ── */
223
+ :host {
224
+ display: block;
225
+ }
226
+
227
+ :host([disabled]) {
228
+ opacity: var(--hx-opacity-disabled);
229
+ cursor: not-allowed;
230
+ }
231
+
232
+ * {
233
+ box-sizing: border-box;
234
+ }
235
+
236
+ /* ─── Fieldset ─── */
237
+
238
+ .fieldset {
239
+ border: none;
240
+ margin: 0;
241
+ padding: 0;
242
+ display: flex;
243
+ flex-direction: column;
244
+ gap: var(--hx-space-2);
245
+ font-family: var(--hx-font-family-sans);
246
+ }
247
+
248
+ /* ─── Legend ─── */
249
+
250
+ .fieldset__legend {
251
+ display: flex;
252
+ align-items: baseline;
253
+ gap: var(--hx-space-1);
254
+ font-size: var(--hx-font-size-sm);
255
+ font-weight: var(--hx-font-weight-medium);
256
+ color: var(--hx-checkbox-group-label-color, var(--hx-color-neutral-700));
257
+ line-height: var(--hx-line-height-normal);
258
+ padding: 0;
259
+ margin-bottom: var(--hx-space-1);
260
+ }
261
+
262
+ .fieldset__required-marker {
263
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
264
+ font-weight: var(--hx-font-weight-bold);
265
+ }
266
+
267
+ /* ─── Items Container ─── */
268
+
269
+ .fieldset__items {
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: var(--hx-checkbox-group-gap, var(--hx-space-3));
273
+ }
274
+
275
+ :host([orientation='horizontal']) .fieldset__items {
276
+ flex-direction: row;
277
+ flex-wrap: wrap;
278
+ }
279
+
280
+ /* ─── Error State ─── */
281
+
282
+ .fieldset--error .fieldset__legend {
283
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
284
+ }
285
+
286
+ /* ─── Help Text & Error Messages ─── */
287
+
288
+ .fieldset__help-text {
289
+ font-size: var(--hx-font-size-xs);
290
+ color: var(--hx-checkbox-group-help-text-color, var(--hx-color-neutral-500));
291
+ line-height: var(--hx-line-height-normal);
292
+ }
293
+
294
+ .fieldset__error {
295
+ font-size: var(--hx-font-size-xs);
296
+ color: var(--hx-checkbox-group-error-color, var(--hx-color-error-500, #dc3545));
297
+ line-height: var(--hx-line-height-normal);
298
+ }
299
+ /* ── hx-color-picker ── */
300
+ :host{display:inline-block;position:relative;font-family:var(--hx-font-family-sans, sans-serif);font-size:var(--hx-font-size-sm, .875rem)}:host([disabled]){pointer-events:none;opacity:var(--hx-opacity-disabled, .4)}.trigger{display:inline-flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-1, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-md, .375rem);background:var(--hx-color-neutral-0, #fff);cursor:pointer;transition:border-color var(--hx-transition-fast, .15s ease)}.trigger:hover:not([disabled]){border-color:var(--hx-color-primary-500, #3b82f6)}:is(.trigger,.gradient-grid,.slider-track,.swatch-btn,.format-btn):focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, var(--hx-color-primary-500));outline-offset:var(--hx-focus-ring-offset, 2px)}.trigger-swatch{width:1.5rem;height:1.5rem;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);display:block;flex-shrink:0}.trigger-label{font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-700, #374151);font-family:var(--hx-font-family-mono, monospace);white-space:nowrap}.panel{position:absolute;z-index:var(--hx-color-picker-z-index, 1000);top:calc(100% + 4px);left:0;background:var(--hx-color-neutral-0, #fff);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem);box-shadow:0 8px 24px var(--hx-color-picker-panel-shadow, var(--hx-overlay-black-15, rgba(0, 0, 0, .15)));padding:var(--hx-space-4, 1rem);width:var(--hx-color-picker-width, 260px);display:flex;flex-direction:column;gap:var(--hx-space-3, .75rem);outline:none}:host([inline]) .panel{position:static;box-shadow:none;border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);border-radius:var(--hx-border-radius-lg, .5rem)}.gradient-grid{position:relative;width:100%;height:var(--hx-color-picker-grid-height, 160px);border-radius:var(--hx-border-radius-sm, .25rem);cursor:crosshair;overflow:hidden;touch-action:none;flex-shrink:0}.gradient-grid-bg{position:absolute;inset:0;background:linear-gradient(to bottom,transparent,#000),linear-gradient(to right,#fff,var(--_hue-color, hsl(0, 100%, 50%)));pointer-events:none}.gradient-thumb{position:absolute;width:12px;height:12px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;top:var(--_thumb-y, 0%);left:var(--_thumb-x, 100%)}.slider-track{position:relative;width:100%;height:12px;border-radius:6px;cursor:pointer;touch-action:none;flex-shrink:0}.hue-track{background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.opacity-track{background-image:linear-gradient(to right,transparent,var(--_hue-color, hsl(0, 100%, 50%))),repeating-conic-gradient(#ccc 0% 25%,#fff 0% 50%) 0 0 / 12px 12px}.slider-thumb{position:absolute;top:50%;width:16px;height:16px;border-radius:50%;border:none;box-shadow:0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)));transform:translate(-50%,-50%);pointer-events:none;left:var(--_slider-pct, 0%);background:var(--_thumb-color, hsl(0, 100%, 50%))}.swatches{display:flex;flex-wrap:wrap;gap:var(--hx-space-1, .25rem)}.swatch-btn{width:20px;height:20px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));cursor:pointer;padding:0;flex-shrink:0;transition:transform var(--hx-transition-fast, .15s ease)}.swatch-btn:hover{transform:scale(1.15);border-color:var( --hx-color-picker-swatch-border-hover, var(--hx-overlay-black-30, rgba(0, 0, 0, .3)) )}.input-area{display:flex;align-items:center;gap:var(--hx-space-2, .5rem)}.format-btn{flex-shrink:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);background:var(--hx-color-neutral-100, #f3f4f6);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);cursor:pointer;font-size:var(--hx-font-size-xs, .75rem);color:var(--hx-color-neutral-600, #4b5563);text-transform:uppercase;font-weight:var(--hx-font-weight-semibold, 600);letter-spacing:.05em}.color-input{flex:1;min-width:0;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);border-radius:var(--hx-border-radius-sm, .25rem);font-family:var(--hx-font-family-mono, monospace);font-size:var(--hx-font-size-sm, .875rem);color:var(--hx-color-neutral-900, #111827);background:var(--hx-color-neutral-0, #fff);outline:none}.color-input:focus{border-color:var(--hx-focus-ring-color, var(--hx-color-primary-500));box-shadow:0 0 0 2px color-mix(in srgb,var(--hx-focus-ring-color, var(--hx-color-primary-500)) 20%,transparent)}.input-preview{width:24px;height:24px;border-radius:var(--hx-border-radius-sm, .25rem);border:var(--hx-border-width-thin, 1px) solid var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, .1)));background:var(--_preview-color, #000);flex-shrink:0}@media(prefers-reduced-motion:reduce){.trigger,.swatch-btn{transition:none}}
301
+ /* ── hx-combobox ── */
302
+ :host{display:block}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-combobox-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-combobox-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{position:relative;display:flex;align-items:center;border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-combobox-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}.field__input-wrapper:focus-within{border-color:var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-combobox-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__prefix,.field__suffix{display:flex;align-items:center;padding:0 var(--hx-space-2, .5rem);color:var(--hx-color-neutral-500, #6c757d);flex-shrink:0}.field__input{flex:1;min-width:0;min-height:var(--hx-input-height-md, var(--hx-size-10, 2.5rem));border:none;background:transparent;outline:none;font-family:inherit;font-size:var(--hx-font-size-md, 1rem);line-height:var(--hx-line-height-normal, 1.5);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem)}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input--sm{min-height:var(--hx-input-height-sm, var(--hx-size-8, 2rem));font-size:var(--hx-font-size-sm, .875rem);padding:var(--hx-space-1, .25rem) var(--hx-space-3, .75rem)}.field__input--lg{min-height:var(--hx-input-height-lg, var(--hx-size-12, 3rem));font-size:var(--hx-font-size-lg, 1.125rem);padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem)}.field__clear-button,.field__loading-indicator{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--hx-space-2, .5rem);flex-shrink:0;color:var(--hx-color-neutral-400, #adb5bd)}.field__clear-button{width:1.25rem;height:1.25rem;border:none;background:transparent;cursor:pointer;padding:0;border-radius:var(--hx-border-radius-full, 9999px);transition:color var(--hx-transition-fast, .15s ease)}.field__clear-button:hover{color:var(--hx-color-neutral-700, #343a40)}.field__clear-button:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px)}.field__loading-indicator{width:1rem;height:1rem}.field__loading-spinner{width:1rem;height:1rem;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:hx-spin .7s linear infinite}@keyframes hx-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.field__loading-spinner{animation:none}}.field__listbox{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;right:0;z-index:var(--hx-z-index-dropdown, 100);background-color:var(--hx-combobox-listbox-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-combobox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-combobox-border-radius, var(--hx-border-radius-md, .375rem));box-shadow:var( --hx-combobox-listbox-shadow, 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900, #0d1117) 12%, transparent) );max-height:var(--hx-combobox-listbox-max-height, 16rem);overflow:hidden;display:flex;flex-direction:column}.field__listbox[hidden]{display:none}.field__options{overflow-y:auto;flex:1;padding:var(--hx-space-1, .25rem) 0}.field__option{display:flex;align-items:center;gap:var(--hx-space-2, .5rem);padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-size:var(--hx-font-size-md, 1rem);color:var(--hx-combobox-color, var(--hx-color-neutral-800, #212529));cursor:pointer;user-select:none;-webkit-user-select:none;transition:background-color var(--hx-transition-fast, .15s ease)}.field__option:hover{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff))}.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe));font-weight:var(--hx-font-weight-medium, 500)}.field__option--focused{background-color:var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #eff6ff));outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-combobox-option-focus-ring-offset, -2px)}.field__option--focused.field__option--selected{background-color:var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbeafe))}.field__option--disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}.field__option-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field__no-options{padding:var(--hx-space-3, .75rem);text-align:center;color:var(--hx-color-neutral-400, #adb5bd);font-size:var(--hx-font-size-sm, .875rem)}.field__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-combobox-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__option,.field__clear-button,.field__chip-remove{transition:none}}:host([multiple]) .field__input-wrapper{flex-wrap:wrap;padding:var(--hx-space-1, .25rem);gap:var(--hx-space-1, .25rem);align-items:center}:host([multiple]) .field__input{min-width:8rem;padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem);flex-shrink:1}.field__chip{display:inline-flex;align-items:center;gap:var(--hx-space-1, .25rem);padding:0 var(--hx-space-1, .25rem) 0 var(--hx-space-2, .5rem);height:1.5rem;background-color:var(--hx-combobox-chip-bg, var(--hx-color-primary-100, #dbeafe));color:var(--hx-combobox-chip-color, var(--hx-color-primary-800, #1e40af));border-radius:var(--hx-border-radius-full, 9999px);font-size:var(--hx-font-size-sm, .875rem);white-space:nowrap;max-width:12rem;flex-shrink:0}.field__chip-label{overflow:hidden;text-overflow:ellipsis;max-width:8rem}.field__chip-remove{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1rem;height:1rem;border:none;background:none;cursor:pointer;padding:0;color:inherit;opacity:.7;border-radius:50%;line-height:1;transition:opacity var(--hx-transition-fast, .15s ease)}.field__chip-remove:hover{opacity:1;background-color:var(--hx-combobox-chip-remove-hover-bg, var(--hx-color-primary-200, #bfdbfe))}.field__chip-remove:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));outline-offset:var(--hx-focus-ring-offset, 2px);opacity:1}
303
+ /* ── hx-date-picker ── */
304
+ :host{display:block;position:relative}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-date-picker-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label-wrapper{display:contents}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-date-picker-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{display:flex;align-items:stretch;border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-date-picker-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-date-picker-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);overflow:hidden}.field__input-wrapper:focus-within{border-color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__input{flex:1;border:none;outline:none;background:transparent;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:inherit;font-size:var(--hx-font-size-md, 1rem);color:var(--hx-date-picker-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-size-10, 2.5rem);width:100%;cursor:default}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input:disabled{cursor:not-allowed}.field__trigger{display:flex;align-items:center;justify-content:center;padding:0 var(--hx-space-3, .75rem);border:none;border-left:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));background:transparent;color:var(--hx-date-picker-trigger-color, var(--hx-color-neutral-500, #6c757d));cursor:pointer;flex-shrink:0;transition:color var(--hx-transition-fast, .15s ease);outline:none}.field__trigger:focus-visible{color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));background-color:color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) 8%,transparent)}.field__trigger:hover:not(:disabled){color:var(--hx-date-picker-trigger-hover-color, var(--hx-color-neutral-700, #343a40));background-color:color-mix(in srgb,var(--hx-color-neutral-900, #212529) 4%,transparent)}.field__trigger:disabled{cursor:not-allowed}.calendar{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;z-index:var(--hx-z-index-dropdown, 1000);min-width:var(--hx-date-picker-calendar-min-width, 18rem);background-color:var(--hx-date-picker-calendar-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-calendar-border-color, var(--hx-color-neutral-200, #e9ecef));border-radius:var(--hx-date-picker-calendar-border-radius, var(--hx-border-radius-lg, .5rem));box-shadow:var( --hx-date-picker-calendar-shadow, 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1) );padding:var(--hx-space-3, .75rem);outline:none}@media(prefers-reduced-motion:no-preference){.calendar{animation:calendar-appear var(--hx-transition-fast, .15s ease) forwards}}@keyframes calendar-appear{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}.calendar__nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hx-space-3, .75rem)}:is(.calendar__nav-btn,.calendar__day,.calendar__day-cell,.calendar__weekday){display:flex;align-items:center;justify-content:center}:is(.calendar__nav-btn,.calendar__day){width:var(--hx-touch-target-min, 2.75rem);height:var(--hx-touch-target-min, 2.75rem);border:none;border-radius:var(--hx-border-radius-sm, .25rem);background:transparent;cursor:pointer;outline:none;transition:background-color var(--hx-transition-fast, .15s ease),color var(--hx-transition-fast, .15s ease)}.calendar__nav-btn{color:var(--hx-color-neutral-600, #495057);font-size:var(--hx-font-size-lg, 1.125rem);line-height:1}.calendar__nav-btn:hover{background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}:is(.calendar__nav-btn,.calendar__day):focus-visible{box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));z-index:1}.calendar__nav-btn:disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__month-label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-800, #212529);flex:1;text-align:center}.calendar__grid{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem)}.calendar__row{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--hx-space-1, .25rem)}.calendar__weekday{height:var(--hx-size-8, 2rem);font-size:var(--hx-font-size-xs, .75rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-500, #6c757d);text-transform:uppercase;letter-spacing:.05em}.calendar__day{color:var(--hx-color-neutral-800, #212529);font-size:var(--hx-font-size-sm, .875rem);font-family:inherit;position:relative}.calendar__day:hover:not(.calendar__day--disabled):not(.calendar__day--selected){background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}.calendar__day--selected{background-color:var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #2563eb));color:var(--hx-date-picker-selected-color, var(--hx-color-neutral-0, #ffffff));font-weight:var(--hx-font-weight-semibold, 600)}.calendar__day--selected:hover{background-color:var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected){font-weight:var(--hx-font-weight-bold, 700);color:var(--hx-date-picker-today-color, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected):after{content:"";position:absolute;bottom:.2rem;left:50%;transform:translate(-50%);width:.25rem;height:.25rem;border-radius:50%;background-color:currentColor}.calendar__day--disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__trigger,.calendar__nav-btn,.calendar__day{transition:none}}@media(forced-colors:active){.field__input-wrapper{border:1px solid ButtonText}.field__input-wrapper:focus-within{outline:2px solid Highlight;outline-offset:1px;box-shadow:none}:is(.calendar__day:focus-visible,.calendar__nav-btn:focus-visible){outline:2px solid Highlight;box-shadow:none}.calendar__day--selected{background-color:Highlight;color:HighlightText;border:1px solid Highlight}.calendar__day--today:not(.calendar__day--selected){border:2px solid LinkText}.calendar__day--today:not(.calendar__day--selected):after{display:none}.calendar__day--disabled{color:GrayText}.field--error .field__input-wrapper{border-color:LinkText}}
305
+ /* ── hx-field ── */
306
+ :host {
307
+ display: block;
308
+ }
309
+
310
+ :host([disabled]) {
311
+ opacity: var(--hx-opacity-disabled, 0.5);
312
+ pointer-events: none;
313
+ }
314
+
315
+ * {
316
+ box-sizing: border-box;
317
+ }
318
+
319
+ .field {
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: var(--hx-field-gap, var(--hx-space-1, 0.25rem));
323
+ font-family: var(--hx-field-font-family, var(--hx-font-family-sans, sans-serif));
324
+ }
325
+
326
+ /* ─── Inline Layout ─── */
327
+
328
+ .field--layout-inline {
329
+ flex-direction: row;
330
+ align-items: baseline;
331
+ flex-wrap: wrap;
332
+ }
333
+
334
+ .field--layout-inline .field__label-wrapper {
335
+ display: flex;
336
+ align-items: baseline;
337
+ flex-shrink: 0;
338
+ min-width: 8rem;
339
+ }
340
+
341
+ /* ─── Label ─── */
342
+
343
+ .field__label-wrapper {
344
+ display: contents;
345
+ }
346
+
347
+ .field__label {
348
+ display: flex;
349
+ align-items: baseline;
350
+ gap: var(--hx-space-1, 0.25rem);
351
+ font-size: var(--hx-font-size-sm, 0.875rem);
352
+ font-weight: var(--hx-font-weight-medium, 500);
353
+ color: var(--hx-field-label-color, var(--hx-color-neutral-700, #374151));
354
+ line-height: var(--hx-line-height-normal, 1.5);
355
+ cursor: pointer;
356
+ }
357
+
358
+ .field__required-marker {
359
+ color: var(--hx-field-error-color, var(--hx-color-error-text, #b91c1c));
360
+ font-weight: var(--hx-font-weight-bold, 700);
361
+ }
362
+
363
+ /* ─── Control Wrapper ─── */
364
+
365
+ .field__control {
366
+ display: block;
367
+ }
368
+
369
+ /* ─── Error Slot Announcer (visually hidden live region) ─── */
370
+
371
+ .field__error-slot-announcer {
372
+ position: absolute;
373
+ width: 1px;
374
+ height: 1px;
375
+ overflow: hidden;
376
+ clip: rect(0, 0, 0, 0);
377
+ white-space: nowrap;
378
+ border: 0;
379
+ }
380
+
381
+ /* ─── Size Variants ─── */
382
+
383
+ :host([hx-size='sm']) .field__label {
384
+ font-size: var(--hx-font-size-xs, 0.75rem);
385
+ }
386
+
387
+ :host([hx-size='lg']) .field__label {
388
+ font-size: var(--hx-font-size-md, 1rem);
389
+ }
390
+
391
+ :host([hx-size='sm']) .field__help-text {
392
+ font-size: var(--hx-font-size-xs, 0.75rem);
393
+ }
394
+
395
+ :host([hx-size='lg']) .field__help-text {
396
+ font-size: var(--hx-font-size-sm, 0.875rem);
397
+ }
398
+
399
+ /* ─── Help Text & Error Messages ─── */
400
+
401
+ .field__help-text {
402
+ font-size: var(--hx-font-size-xs, 0.75rem);
403
+ color: var(--hx-field-help-text-color, var(--hx-color-neutral-500, #6b7280));
404
+ line-height: var(--hx-line-height-normal, 1.5);
405
+ }
406
+
407
+ .field__error {
408
+ font-size: var(--hx-font-size-xs, 0.75rem);
409
+ color: var(--hx-field-error-color, var(--hx-color-error-text, #b91c1c));
410
+ line-height: var(--hx-line-height-normal, 1.5);
411
+ }
412
+
413
+ /* ─── Error State ─── */
414
+
415
+ .field--error .field__label {
416
+ color: var(--hx-field-error-color, var(--hx-color-error-text, #b91c1c));
417
+ }
418
+
419
+ .field--error .field__control {
420
+ outline: 2px solid var(--hx-field-error-color, var(--hx-color-error-500, #ef4444));
421
+ outline-offset: var(--hx-focus-ring-offset, 2px);
422
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
423
+ }
424
+ /* ── hx-field-label ── */
425
+ :host {
426
+ display: block;
427
+ }
428
+
429
+ .label {
430
+ display: inline-flex;
431
+ align-items: baseline;
432
+ gap: var(--hx-space-1, 0.25rem);
433
+ font-size: var(--hx-font-label-size, var(--hx-font-size-sm, 0.875rem));
434
+ font-weight: var(--hx-font-label-weight, var(--hx-font-weight-medium, 500));
435
+ color: var(--hx-field-label-color, var(--hx-color-neutral-700, #374151));
436
+ line-height: var(--hx-font-label-line-height, var(--hx-line-height-normal, 1.5));
437
+ font-family: var(--hx-font-label-family, var(--hx-font-family-sans, sans-serif));
438
+ }
439
+
440
+ .required-indicator {
441
+ color: var(--hx-field-label-required-color, var(--hx-color-error-text, #b91c1c));
442
+ font-weight: var(--hx-font-weight-bold, 700);
443
+ }
444
+
445
+ .optional-indicator {
446
+ font-size: var(--hx-font-size-xs, 0.75rem);
447
+ font-weight: var(--hx-font-weight-normal, 400);
448
+ color: var(--hx-color-neutral-500, #6b7280);
449
+ }
450
+
451
+ .visually-hidden {
452
+ position: absolute;
453
+ width: 1px;
454
+ height: 1px;
455
+ padding: 0;
456
+ margin: -1px;
457
+ overflow: hidden;
458
+ clip: rect(0, 0, 0, 0);
459
+ white-space: nowrap;
460
+ border: 0;
461
+ }
462
+ /* ── hx-file-upload ── */
463
+ :host {
464
+ display: block;
465
+ }
466
+
467
+ :host([disabled]) {
468
+ opacity: var(--hx-opacity-disabled, 0.5);
469
+ pointer-events: none;
470
+ }
471
+
472
+ * {
473
+ box-sizing: border-box;
474
+ }
475
+
476
+ .field {
477
+ display: flex;
478
+ flex-direction: column;
479
+ gap: var(--hx-space-2, 0.5rem);
480
+ font-family: var(--hx-font-family-sans, sans-serif);
481
+ }
482
+
483
+ /* ─── Label ─── */
484
+
485
+ .field__label {
486
+ display: flex;
487
+ align-items: baseline;
488
+ gap: var(--hx-space-1, 0.25rem);
489
+ font-size: var(--hx-font-size-sm, 0.875rem);
490
+ font-weight: var(--hx-font-weight-medium, 500);
491
+ color: var(--hx-color-neutral-700, #343a40);
492
+ line-height: var(--hx-line-height-normal, 1.5);
493
+ }
494
+
495
+ /* ─── Dropzone ─── */
496
+
497
+ .dropzone {
498
+ display: flex;
499
+ flex-direction: column;
500
+ align-items: center;
501
+ justify-content: center;
502
+ gap: var(--hx-space-2, 0.5rem);
503
+ min-height: var(--hx-space-32, 8rem);
504
+ padding: var(--hx-space-6, 1.5rem) var(--hx-space-4, 1rem);
505
+ border: var(--hx-border-width-thin, 1px) dashed
506
+ var(--hx-file-upload-dropzone-border-color, var(--hx-color-neutral-300, #ced4da));
507
+ border-radius: var(--hx-file-upload-dropzone-border-radius, var(--hx-border-radius-lg, 0.5rem));
508
+ background-color: var(--hx-file-upload-dropzone-bg, var(--hx-color-neutral-50, #f8f9fa));
509
+ cursor: pointer;
510
+ text-align: center;
511
+ transition:
512
+ border-color var(--hx-transition-fast, 150ms ease),
513
+ background-color var(--hx-transition-fast, 150ms ease),
514
+ box-shadow var(--hx-transition-fast, 150ms ease);
515
+ user-select: none;
516
+ color: var(--hx-color-neutral-600, #495057);
517
+ font-size: var(--hx-font-size-sm, 0.875rem);
518
+ }
519
+
520
+ .dropzone:focus-visible {
521
+ outline: var(--hx-focus-ring-width, 2px) solid
522
+ var(
523
+ --hx-file-upload-focus-ring-color,
524
+ var(--hx-focus-ring-color, var(--hx-color-primary-500))
525
+ );
526
+ outline-offset: var(--hx-focus-ring-offset, 2px);
527
+ border-color: var(
528
+ --hx-file-upload-focus-ring-color,
529
+ var(--hx-focus-ring-color, var(--hx-color-primary-500))
530
+ );
531
+ }
532
+
533
+ .dropzone--drag-over {
534
+ border-color: var(--hx-color-primary-500, #2563eb);
535
+ background-color: var(
536
+ --hx-file-upload-dropzone-active-bg,
537
+ color-mix(
538
+ in srgb,
539
+ var(--hx-color-primary-500, #2563eb) 8%,
540
+ var(--hx-color-neutral-0, #ffffff)
541
+ )
542
+ );
543
+ border-style: solid;
544
+ }
545
+
546
+ .dropzone--error {
547
+ border-color: var(--hx-file-upload-error-color, var(--hx-color-error-500, #dc3545));
548
+ }
549
+
550
+ @media (prefers-reduced-motion: reduce) {
551
+ .dropzone {
552
+ transition: none;
553
+ }
554
+ }
555
+
556
+ /* ─── Hidden file input ─── */
557
+
558
+ .file-input {
559
+ position: absolute;
560
+ width: 1px;
561
+ height: 1px;
562
+ padding: 0;
563
+ margin: -1px;
564
+ overflow: hidden;
565
+ clip: rect(0, 0, 0, 0);
566
+ white-space: nowrap;
567
+ border-width: 0;
568
+ }
569
+
570
+ /* ─── File list ─── */
571
+
572
+ .file-list {
573
+ display: flex;
574
+ flex-direction: column;
575
+ gap: var(--hx-space-2, 0.5rem);
576
+ list-style: none;
577
+ margin: 0;
578
+ padding: 0;
579
+ }
580
+
581
+ .file-list:empty {
582
+ display: none;
583
+ }
584
+
585
+ /* ─── File item ─── */
586
+
587
+ .file-item {
588
+ display: flex;
589
+ flex-direction: column;
590
+ gap: var(--hx-space-1, 0.25rem);
591
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
592
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e9ecef);
593
+ border-radius: var(--hx-border-radius-md, 0.375rem);
594
+ background-color: var(--hx-color-neutral-0, #ffffff);
595
+ }
596
+
597
+ .file-item__row {
598
+ display: flex;
599
+ align-items: center;
600
+ gap: var(--hx-space-2, 0.5rem);
601
+ }
602
+
603
+ .file-item__name {
604
+ flex: 1;
605
+ font-size: var(--hx-font-size-sm, 0.875rem);
606
+ font-weight: var(--hx-font-weight-medium, 500);
607
+ color: var(--hx-color-neutral-800, #212529);
608
+ overflow: hidden;
609
+ text-overflow: ellipsis;
610
+ white-space: nowrap;
611
+ }
612
+
613
+ .file-item__size {
614
+ flex-shrink: 0;
615
+ font-size: var(--hx-font-size-xs, 0.75rem);
616
+ color: var(--hx-color-neutral-500, #6c757d);
617
+ }
618
+
619
+ .file-item__remove {
620
+ flex-shrink: 0;
621
+ display: inline-flex;
622
+ align-items: center;
623
+ justify-content: center;
624
+ padding: var(--hx-space-1, 0.25rem);
625
+ border: none;
626
+ border-radius: var(--hx-border-radius-sm, 0.25rem);
627
+ background: transparent;
628
+ color: var(--hx-color-neutral-500, #6c757d);
629
+ cursor: pointer;
630
+ line-height: 1;
631
+ transition:
632
+ color var(--hx-transition-fast, 150ms ease),
633
+ background-color var(--hx-transition-fast, 150ms ease);
634
+ }
635
+
636
+ .file-item__remove:hover {
637
+ color: var(--hx-file-upload-error-color, var(--hx-color-error-text, #b91c1c));
638
+ background-color: color-mix(in srgb, var(--hx-color-error-500, #dc3545) 8%, transparent);
639
+ }
640
+
641
+ .file-item__remove:focus-visible {
642
+ outline: var(--hx-focus-ring-width, 2px) solid
643
+ var(
644
+ --hx-file-upload-focus-ring-color,
645
+ var(--hx-focus-ring-color, var(--hx-color-primary-500))
646
+ );
647
+ outline-offset: var(--hx-focus-ring-offset, 2px);
648
+ }
649
+
650
+ @media (prefers-reduced-motion: reduce) {
651
+ .file-item__remove {
652
+ transition: none;
653
+ }
654
+ }
655
+
656
+ /* ─── Progress bar ─── */
657
+
658
+ .progress-track {
659
+ width: 100%;
660
+ height: var(--hx-file-upload-progress-height, var(--hx-space-1, 0.25rem));
661
+ background-color: var(--hx-color-neutral-200, #e9ecef);
662
+ border-radius: var(--hx-border-radius-full, 9999px);
663
+ overflow: hidden;
664
+ }
665
+
666
+ .progress-bar {
667
+ height: 100%;
668
+ width: 100%;
669
+ background-color: var(--hx-file-upload-progress-color, var(--hx-color-primary-500, #2563eb));
670
+ border-radius: inherit;
671
+ transform-origin: left center;
672
+ transform: scaleX(var(--_progress-ratio, 0));
673
+ transition: transform var(--hx-transition-fast, 150ms ease);
674
+ }
675
+
676
+ @media (prefers-reduced-motion: reduce) {
677
+ .progress-bar {
678
+ transition: none;
679
+ }
680
+ }
681
+
682
+ /* ─── Screen-reader only utility ─── */
683
+
684
+ .sr-only {
685
+ position: absolute;
686
+ width: 1px;
687
+ height: 1px;
688
+ padding: 0;
689
+ margin: -1px;
690
+ overflow: hidden;
691
+ clip: rect(0, 0, 0, 0);
692
+ white-space: nowrap;
693
+ border-width: 0;
694
+ }
695
+
696
+ /* ─── Error message ─── */
697
+
698
+ .field__error {
699
+ font-size: var(--hx-font-size-xs, 0.75rem);
700
+ color: var(--hx-file-upload-error-color, var(--hx-color-error-text, #b91c1c));
701
+ line-height: var(--hx-line-height-normal, 1.5);
702
+ }
703
+ /* ── hx-help-text ── */
704
+ :host {
705
+ display: block;
706
+ }
707
+
708
+ .help-text {
709
+ display: inline-flex;
710
+ align-items: baseline;
711
+ gap: var(--hx-help-text-icon-gap, 0.375rem);
712
+ font-family: var(--hx-help-text-font-family, var(--hx-font-family-sans, sans-serif));
713
+ font-size: var(--hx-help-text-font-size, var(--hx-font-size-sm, 0.875rem));
714
+ font-weight: var(--hx-help-text-font-weight, var(--hx-font-weight-normal, 400));
715
+ line-height: var(--hx-help-text-line-height, var(--hx-line-height-normal, 1.5));
716
+ color: var(--hx-help-text-color, var(--hx-color-neutral-500, #6b7280));
717
+ margin: 0;
718
+ }
719
+
720
+ .help-text__icon {
721
+ flex-shrink: 0;
722
+ display: inline-flex;
723
+ align-items: center;
724
+ }
725
+
726
+ .help-text__text {
727
+ min-width: 0;
728
+ }
729
+
730
+ /* ─── Variant: default ─── */
731
+
732
+ .help-text--default {
733
+ --hx-help-text-color: var(--hx-color-neutral-500, #6b7280);
734
+ }
735
+
736
+ /* ─── Variant: error ─── */
737
+
738
+ .help-text--error {
739
+ --hx-help-text-color: var(--hx-color-error-600, #dc2626);
740
+ }
741
+
742
+ /* ─── Variant: warning ─── */
743
+
744
+ .help-text--warning {
745
+ --hx-help-text-color: var(--hx-color-warning-700, #b45309);
746
+ }
747
+
748
+ /* ─── Variant: success ─── */
749
+
750
+ .help-text--success {
751
+ --hx-help-text-color: var(--hx-color-success-700, #15803d);
752
+ }
753
+ /* ── hx-number-input ── */
754
+ :host {
755
+ display: block;
756
+ }
757
+
758
+ :host([disabled]) {
759
+ opacity: var(--hx-opacity-disabled);
760
+ pointer-events: none;
761
+ }
762
+
763
+ * {
764
+ box-sizing: border-box;
765
+ }
766
+
767
+ .field {
768
+ display: flex;
769
+ flex-direction: column;
770
+ gap: var(--hx-space-1);
771
+ font-family: var(--hx-number-input-font-family, var(--hx-font-family-sans));
772
+ }
773
+
774
+ /* ─── Label ─── */
775
+
776
+ .field__label-wrapper {
777
+ display: contents;
778
+ }
779
+
780
+ .field__label {
781
+ display: flex;
782
+ align-items: baseline;
783
+ gap: var(--hx-space-1);
784
+ font-size: var(--hx-font-size-sm);
785
+ font-weight: var(--hx-font-weight-medium);
786
+ color: var(--hx-number-input-label-color, var(--hx-color-neutral-700));
787
+ line-height: var(--hx-line-height-normal);
788
+ }
789
+
790
+ .field__required-marker {
791
+ color: var(--hx-number-input-error-color, var(--hx-color-error-text, #b91c1c));
792
+ font-weight: var(--hx-font-weight-bold);
793
+ }
794
+
795
+ /* ─── Input Wrapper ─── */
796
+
797
+ .field__input-wrapper {
798
+ display: flex;
799
+ align-items: stretch;
800
+ border: var(--hx-border-width-thin) solid
801
+ var(--hx-number-input-border-color, var(--hx-color-neutral-300));
802
+ border-radius: var(--hx-number-input-border-radius, var(--hx-border-radius-md));
803
+ background-color: var(--hx-number-input-bg, var(--hx-color-neutral-0));
804
+ transition:
805
+ border-color var(--hx-transition-fast),
806
+ box-shadow var(--hx-transition-fast);
807
+ overflow: hidden;
808
+ }
809
+
810
+ .field__input-wrapper:focus-within {
811
+ border-color: var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
812
+ /* Fallback for Safari < 16.2 (no color-mix support) */
813
+ box-shadow: 0 0 0 var(--hx-focus-ring-width)
814
+ var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
815
+ box-shadow: 0 0 0 var(--hx-focus-ring-width)
816
+ color-mix(
817
+ in srgb,
818
+ var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color))
819
+ calc(var(--hx-focus-ring-opacity) * 100%),
820
+ transparent
821
+ );
822
+ }
823
+
824
+ /* ─── Error State ─── */
825
+
826
+ .field--error .field__input-wrapper {
827
+ border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #dc2626));
828
+ }
829
+
830
+ .field--error .field__input-wrapper:focus-within {
831
+ border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #dc2626));
832
+ /* Fallback for Safari < 16.2 (no color-mix support) */
833
+ box-shadow: 0 0 0 var(--hx-focus-ring-width)
834
+ var(--hx-number-input-error-color, var(--hx-color-error-500, #dc2626));
835
+ box-shadow: 0 0 0 var(--hx-focus-ring-width)
836
+ color-mix(
837
+ in srgb,
838
+ var(--hx-number-input-error-color, var(--hx-color-error-500, #dc2626))
839
+ calc(var(--hx-focus-ring-opacity) * 100%),
840
+ transparent
841
+ );
842
+ }
843
+
844
+ /* ─── Slots (Prefix / Suffix) ─── */
845
+
846
+ .field__prefix,
847
+ .field__suffix {
848
+ display: flex;
849
+ align-items: center;
850
+ padding: 0 var(--hx-space-3);
851
+ color: var(--hx-color-neutral-500);
852
+ flex-shrink: 0;
853
+ }
854
+
855
+ /* ─── Native Input ─── */
856
+
857
+ .field__input {
858
+ flex: 1;
859
+ border: none;
860
+ outline: none;
861
+ background: transparent;
862
+ font-family: inherit;
863
+ color: var(--hx-number-input-color, var(--hx-color-neutral-800));
864
+ line-height: var(--hx-line-height-normal);
865
+ width: 100%;
866
+ /* Size: md (default) */
867
+ padding: var(--hx-space-2) var(--hx-space-3);
868
+ font-size: var(--hx-font-size-md);
869
+ min-height: var(--hx-size-10);
870
+ }
871
+
872
+ .field__input::placeholder {
873
+ color: var(--hx-color-neutral-400);
874
+ }
875
+
876
+ .field__input:disabled {
877
+ cursor: not-allowed;
878
+ }
879
+
880
+ /* ─── Hide native browser spinners ─── */
881
+
882
+ .field__input[type='number']::-webkit-inner-spin-button,
883
+ .field__input[type='number']::-webkit-outer-spin-button {
884
+ display: none;
885
+ }
886
+
887
+ .field__input[type='number'] {
888
+ appearance: textfield;
889
+ }
890
+
891
+ /* ─── Size Variants ─── */
892
+
893
+ .field--sm .field__input {
894
+ padding: var(--hx-space-1) var(--hx-space-2);
895
+ font-size: var(--hx-font-size-sm);
896
+ min-height: var(--hx-size-8);
897
+ }
898
+
899
+ .field--lg .field__input {
900
+ padding: var(--hx-space-3) var(--hx-space-4);
901
+ font-size: var(--hx-font-size-lg);
902
+ min-height: var(--hx-size-12);
903
+ }
904
+
905
+ /* ─── Stepper ─── */
906
+
907
+ .field__stepper {
908
+ display: flex;
909
+ flex-direction: column;
910
+ flex-shrink: 0;
911
+ border-inline-start: var(--hx-border-width-thin) solid
912
+ var(--hx-number-input-border-color, var(--hx-color-neutral-300));
913
+ }
914
+
915
+ .field__stepper-btn {
916
+ display: flex;
917
+ align-items: center;
918
+ justify-content: center;
919
+ background: transparent;
920
+ border: none;
921
+ cursor: pointer;
922
+ color: var(--hx-color-neutral-600);
923
+ padding: 0;
924
+ flex: 1;
925
+ min-width: var(--hx-size-8);
926
+ line-height: 1;
927
+ transition: background-color var(--hx-transition-fast);
928
+ user-select: none;
929
+ -webkit-user-select: none;
930
+ }
931
+
932
+ .field__stepper-btn:not(:last-child) {
933
+ border-bottom: var(--hx-border-width-thin) solid
934
+ var(--hx-number-input-border-color, var(--hx-color-neutral-300));
935
+ }
936
+
937
+ .field__stepper-btn:hover:not(:disabled) {
938
+ background-color: var(--hx-color-neutral-50);
939
+ color: var(--hx-color-neutral-800);
940
+ }
941
+
942
+ /* Suppress focus ring for mouse/touch focus; keep for keyboard and programmatic focus */
943
+ .field__stepper-btn:focus:not(:focus-visible) {
944
+ outline: none;
945
+ }
946
+
947
+ .field__stepper-btn:focus-visible {
948
+ outline: var(--hx-focus-ring-width) solid
949
+ var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
950
+ outline-offset: -2px;
951
+ }
952
+
953
+ .field__stepper-btn:disabled {
954
+ opacity: var(--hx-opacity-disabled);
955
+ cursor: not-allowed;
956
+ }
957
+
958
+ .field__stepper-btn svg {
959
+ pointer-events: none;
960
+ width: var(--hx-number-input-icon-size, var(--hx-space-3, 0.75rem));
961
+ height: var(--hx-number-input-icon-size, var(--hx-space-3, 0.75rem));
962
+ }
963
+
964
+ /* Size sm adjustments for stepper */
965
+ .field--sm .field__stepper-btn {
966
+ min-width: var(--hx-size-6);
967
+ }
968
+
969
+ /* Size lg adjustments for stepper */
970
+ .field--lg .field__stepper-btn {
971
+ min-width: var(--hx-size-10);
972
+ }
973
+
974
+ /* ─── Help Text & Error Messages ─── */
975
+
976
+ .field__help-text {
977
+ font-size: var(--hx-font-size-xs);
978
+ color: var(--hx-color-neutral-500);
979
+ line-height: var(--hx-line-height-normal);
980
+ }
981
+
982
+ .field__error {
983
+ font-size: var(--hx-font-size-xs);
984
+ color: var(--hx-number-input-error-color, var(--hx-color-error-text, #b91c1c));
985
+ line-height: var(--hx-line-height-normal);
986
+ }
987
+
988
+ /* ─── Reduced Motion ─── */
989
+
990
+ @media (prefers-reduced-motion: reduce) {
991
+ .field__input-wrapper {
992
+ transition: none;
993
+ }
994
+
995
+ .field__stepper-btn {
996
+ transition: none;
997
+ }
998
+ }
999
+ /* ── hx-radio-group ── */
1000
+ :host {
1001
+ display: block;
1002
+ }
1003
+
1004
+ :host([disabled]) {
1005
+ opacity: var(--hx-opacity-disabled, 0.5);
1006
+ pointer-events: none;
1007
+ }
1008
+
1009
+ * {
1010
+ box-sizing: border-box;
1011
+ }
1012
+
1013
+ /* ─── Fieldset ─── */
1014
+
1015
+ .fieldset {
1016
+ border: none;
1017
+ margin: 0;
1018
+ padding: 0;
1019
+ display: flex;
1020
+ flex-direction: column;
1021
+ gap: var(--hx-space-2, 0.5rem);
1022
+ font-family: var(--hx-font-family-sans, sans-serif);
1023
+ }
1024
+
1025
+ /* ─── Legend ─── */
1026
+
1027
+ .fieldset__legend {
1028
+ display: flex;
1029
+ align-items: baseline;
1030
+ gap: var(--hx-space-1, 0.25rem);
1031
+ font-size: var(--hx-font-size-sm, 0.875rem);
1032
+ font-weight: var(--hx-font-weight-medium, 500);
1033
+ color: var(--hx-radio-group-label-color, var(--hx-color-neutral-700, #343a40));
1034
+ line-height: var(--hx-line-height-normal, 1.5);
1035
+ padding: 0;
1036
+ margin-bottom: var(--hx-space-1, 0.25rem);
1037
+ }
1038
+
1039
+ .fieldset__required-marker {
1040
+ color: var(--hx-radio-group-error-color, var(--hx-color-error-text, #b91c1c));
1041
+ font-weight: var(--hx-font-weight-bold, 700);
1042
+ }
1043
+
1044
+ /* ─── Group Container ─── */
1045
+
1046
+ .fieldset__group {
1047
+ display: flex;
1048
+ flex-direction: column;
1049
+ gap: var(--hx-radio-group-gap, var(--hx-space-3, 0.75rem));
1050
+ }
1051
+
1052
+ :host([orientation='horizontal']) .fieldset__group {
1053
+ flex-direction: row;
1054
+ flex-wrap: wrap;
1055
+ }
1056
+
1057
+ /* ─── Error State ─── */
1058
+
1059
+ .fieldset--error .fieldset__legend {
1060
+ color: var(--hx-radio-group-error-color, var(--hx-color-error-text, #b91c1c));
1061
+ }
1062
+
1063
+ /* ─── Help Text & Error Messages ─── */
1064
+
1065
+ .fieldset__help-text {
1066
+ font-size: var(--hx-font-size-xs, 0.75rem);
1067
+ color: var(--hx-radio-group-help-text-color, var(--hx-color-neutral-500, #6c757d));
1068
+ line-height: var(--hx-line-height-normal, 1.5);
1069
+ }
1070
+
1071
+ .fieldset__error {
1072
+ font-size: var(--hx-font-size-xs, 0.75rem);
1073
+ color: var(--hx-radio-group-error-color, var(--hx-color-error-text, #b91c1c));
1074
+ line-height: var(--hx-line-height-normal, 1.5);
1075
+ }
1076
+ /* ── hx-rating ── */
1077
+ :host {
1078
+ display: inline-block;
1079
+ }
1080
+
1081
+ :host([disabled]) {
1082
+ pointer-events: none;
1083
+ opacity: var(--hx-opacity-disabled, 0.5);
1084
+ }
1085
+
1086
+ /* ─── Base Container ─── */
1087
+
1088
+ .base {
1089
+ display: inline-flex;
1090
+ align-items: center;
1091
+ gap: var(--hx-rating-gap, var(--hx-space-1, 0.25rem));
1092
+ font-size: var(--hx-rating-size, var(--hx-font-size-xl, 1.25rem));
1093
+ }
1094
+
1095
+ .base--readonly {
1096
+ cursor: default;
1097
+ }
1098
+
1099
+ .base--disabled {
1100
+ cursor: not-allowed;
1101
+ }
1102
+
1103
+ /* ─── Symbol (each star) ─── */
1104
+
1105
+ .symbol {
1106
+ display: inline-flex;
1107
+ align-items: center;
1108
+ justify-content: center;
1109
+ position: relative;
1110
+ cursor: pointer;
1111
+ color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #d1d5db));
1112
+ line-height: 1;
1113
+ transition: transform var(--hx-transition-fast, 0.15s ease);
1114
+ }
1115
+
1116
+ .symbol:focus-visible {
1117
+ outline: var(--hx-focus-ring-width, 2px) solid
1118
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa));
1119
+ outline-offset: var(--hx-focus-ring-offset, 2px);
1120
+ border-radius: var(--hx-border-radius-sm, 0.125rem);
1121
+ }
1122
+
1123
+ .symbol--full,
1124
+ .symbol--half {
1125
+ color: var(--hx-rating-color, var(--hx-color-warning-400, #fbbf24));
1126
+ }
1127
+
1128
+ .symbol--disabled {
1129
+ cursor: not-allowed;
1130
+ }
1131
+
1132
+ .base:not(.base--readonly) .symbol:hover {
1133
+ transform: scale(1.15);
1134
+ color: var(--hx-rating-hover-color, var(--hx-color-warning-300, #fcd34d));
1135
+ }
1136
+
1137
+ /* ─── Half-Star Layout ─── */
1138
+
1139
+ .star-half {
1140
+ display: inline-flex;
1141
+ align-items: center;
1142
+ justify-content: center;
1143
+ position: relative;
1144
+ width: 1em;
1145
+ height: 1em;
1146
+ }
1147
+
1148
+ .star-half__filled {
1149
+ position: absolute;
1150
+ left: 0;
1151
+ top: 0;
1152
+ /* Clip to left 50% for the filled half */
1153
+ clip-path: inset(0 50% 0 0);
1154
+ }
1155
+
1156
+ .star-half__empty {
1157
+ position: absolute;
1158
+ left: 0;
1159
+ top: 0;
1160
+ color: var(--hx-rating-empty-color, var(--hx-color-neutral-300, #d1d5db));
1161
+ /* Clip to right 50% for the empty half */
1162
+ clip-path: inset(0 0 0 50%);
1163
+ }
1164
+
1165
+ /* ─── Reduced Motion ─── */
1166
+
1167
+ @media (prefers-reduced-motion: reduce) {
1168
+ .symbol {
1169
+ transition: none;
1170
+ }
1171
+ }
1172
+ /* ── hx-select ── */
1173
+ /* ─── 3-tier token cascade: component → semantic → hardcoded fallback ─── */
1174
+ :host {
1175
+ display: block;
1176
+
1177
+ /* Background & foreground */
1178
+ --_bg: var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));
1179
+ --_color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
1180
+ --_placeholder-color: var(--hx-select-placeholder-color, var(--hx-color-neutral-400, #adb5bd));
1181
+
1182
+ /* Label */
1183
+ --_label-color: var(--hx-select-label-color, var(--hx-color-neutral-700, #343a40));
1184
+
1185
+ /* Border */
1186
+ --_border-color: var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));
1187
+ --_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
1188
+
1189
+ /* Focus ring */
1190
+ --_focus-ring-color: var(
1191
+ --hx-select-focus-ring-color,
1192
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1193
+ );
1194
+
1195
+ /* Error */
1196
+ --_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc3545));
1197
+
1198
+ /* Chevron */
1199
+ --_chevron-color: var(--hx-select-chevron-color, var(--hx-color-neutral-500, #6c757d));
1200
+ --_chevron-size: var(--hx-select-chevron-size, 0.5rem);
1201
+
1202
+ /* Listbox */
1203
+ --_listbox-bg: var(--hx-select-listbox-bg, var(--hx-color-neutral-0, #ffffff));
1204
+ --_option-hover-bg: var(--hx-select-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
1205
+ --_option-selected-bg: var(
1206
+ --hx-select-option-selected-bg,
1207
+ var(--hx-color-primary-100, #dbeafe)
1208
+ );
1209
+
1210
+ /* Typography */
1211
+ --_font-family: var(--hx-select-font-family, var(--hx-font-family-sans, sans-serif));
1212
+ }
1213
+
1214
+ :host([disabled]) {
1215
+ opacity: var(--hx-opacity-disabled, 0.5);
1216
+ pointer-events: none;
1217
+ }
1218
+
1219
+ * {
1220
+ box-sizing: border-box;
1221
+ }
1222
+
1223
+ .field {
1224
+ display: flex;
1225
+ flex-direction: column;
1226
+ gap: var(--hx-space-1, 0.25rem);
1227
+ font-family: var(--_font-family);
1228
+ position: relative;
1229
+ }
1230
+
1231
+ .field__label {
1232
+ display: flex;
1233
+ align-items: baseline;
1234
+ gap: var(--hx-space-1, 0.25rem);
1235
+ font-size: var(--hx-font-size-sm, 0.875rem);
1236
+ font-weight: var(--hx-font-weight-medium, 500);
1237
+ color: var(--_label-color);
1238
+ line-height: var(--hx-line-height-normal, 1.5);
1239
+ }
1240
+
1241
+ .field__required-marker {
1242
+ color: var(--hx-select-error-color, var(--hx-color-error-text, #b91c1c));
1243
+ font-weight: var(--hx-font-weight-bold, 700);
1244
+ }
1245
+
1246
+ .field__select-wrapper {
1247
+ position: relative;
1248
+ display: block;
1249
+ }
1250
+
1251
+ .field__trigger {
1252
+ display: flex;
1253
+ align-items: center;
1254
+ justify-content: space-between;
1255
+ gap: var(--hx-space-2, 0.5rem);
1256
+ width: 100%;
1257
+ min-height: var(--hx-input-height-md, var(--hx-size-10, 2.5rem));
1258
+ border: var(--hx-border-width-thin, 1px) solid var(--_border-color);
1259
+ border-radius: var(--_border-radius);
1260
+ background-color: var(--_bg);
1261
+ color: var(--_color);
1262
+ font-family: inherit;
1263
+ font-size: var(--hx-font-size-md, 1rem);
1264
+ line-height: var(--hx-line-height-normal, 1.5);
1265
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
1266
+ cursor: pointer;
1267
+ text-align: start;
1268
+ transition:
1269
+ border-color var(--hx-transition-fast, 150ms ease),
1270
+ box-shadow var(--hx-transition-fast, 150ms ease);
1271
+ outline: none;
1272
+ }
1273
+
1274
+ .field__trigger:focus,
1275
+ .field__trigger:focus-visible {
1276
+ border-color: var(--_focus-ring-color);
1277
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1278
+ color-mix(
1279
+ in srgb,
1280
+ var(--_focus-ring-color) calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1281
+ transparent
1282
+ );
1283
+ }
1284
+
1285
+ .field__trigger[aria-disabled='true'] {
1286
+ cursor: not-allowed;
1287
+ }
1288
+
1289
+ .field__trigger--sm {
1290
+ min-height: var(--hx-input-height-sm, var(--hx-size-8, 2rem));
1291
+ font-size: var(--hx-font-size-sm, 0.875rem);
1292
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
1293
+ }
1294
+
1295
+ .field__trigger--lg {
1296
+ min-height: var(--hx-input-height-lg, var(--hx-size-12, 3rem));
1297
+ font-size: var(--hx-font-size-lg, 1.125rem);
1298
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
1299
+ }
1300
+
1301
+ .field__trigger-value {
1302
+ flex: 1;
1303
+ min-width: 0;
1304
+ white-space: nowrap;
1305
+ overflow: hidden;
1306
+ text-overflow: ellipsis;
1307
+ }
1308
+
1309
+ .field__trigger--placeholder .field__trigger-value {
1310
+ color: var(--_placeholder-color);
1311
+ }
1312
+
1313
+ .field__chevron {
1314
+ flex-shrink: 0;
1315
+ width: calc(var(--_chevron-size) * 1.5);
1316
+ height: var(--_chevron-size);
1317
+ position: relative;
1318
+ color: var(--_chevron-color);
1319
+ pointer-events: none;
1320
+ transition: transform var(--hx-transition-fast, 150ms ease);
1321
+ }
1322
+
1323
+ .field__chevron::after {
1324
+ content: '';
1325
+ position: absolute;
1326
+ top: 0;
1327
+ left: var(--hx-space-px, 2px);
1328
+ width: var(--_chevron-size);
1329
+ height: var(--_chevron-size);
1330
+ border-inline-end: var(--hx-border-width-thin, 1.5px) solid currentColor;
1331
+ border-bottom: var(--hx-border-width-thin, 1.5px) solid currentColor;
1332
+ transform: rotate(45deg);
1333
+ }
1334
+
1335
+ .field--open .field__chevron {
1336
+ transform: rotate(180deg);
1337
+ }
1338
+
1339
+ .field--error .field__trigger {
1340
+ border-color: var(--_error-color);
1341
+ }
1342
+
1343
+ .field--error .field__trigger:focus,
1344
+ .field--error .field__trigger:focus-visible {
1345
+ border-color: var(--_error-color);
1346
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1347
+ color-mix(
1348
+ in srgb,
1349
+ var(--_error-color) calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1350
+ transparent
1351
+ );
1352
+ }
1353
+
1354
+ .field__listbox {
1355
+ position: absolute;
1356
+ top: calc(100% + var(--hx-space-1, 0.25rem));
1357
+ left: 0;
1358
+ right: 0;
1359
+ z-index: var(--hx-z-index-dropdown, 1000);
1360
+ background-color: var(--_listbox-bg);
1361
+ border: var(--hx-border-width-thin, 1px) solid var(--_border-color);
1362
+ border-radius: var(--_border-radius);
1363
+ box-shadow: var(
1364
+ --hx-select-listbox-shadow,
1365
+ 0 4px 16px var(--hx-overlay-neutral-12, rgba(13, 17, 23, 0.12))
1366
+ );
1367
+ max-height: var(--hx-select-listbox-max-height, 16rem);
1368
+ overflow: hidden;
1369
+ display: flex;
1370
+ flex-direction: column;
1371
+ }
1372
+
1373
+ .field__listbox[hidden] {
1374
+ display: none;
1375
+ }
1376
+
1377
+ .field__options {
1378
+ overflow-y: auto;
1379
+ flex: 1;
1380
+ padding: var(--hx-space-1, 0.25rem) 0;
1381
+ }
1382
+
1383
+ .field__option {
1384
+ display: flex;
1385
+ align-items: center;
1386
+ gap: var(--hx-space-2, 0.5rem);
1387
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
1388
+ font-size: var(--hx-font-size-md, 1rem);
1389
+ color: var(--_color);
1390
+ cursor: pointer;
1391
+ user-select: none;
1392
+ -webkit-user-select: none;
1393
+ transition: background-color var(--hx-transition-fast, 150ms ease);
1394
+ }
1395
+
1396
+ .field__option:hover {
1397
+ background-color: var(--_option-hover-bg);
1398
+ }
1399
+
1400
+ .field__option--selected {
1401
+ background-color: var(--_option-selected-bg);
1402
+ font-weight: var(--hx-font-weight-medium, 500);
1403
+ }
1404
+
1405
+ .field__option--focused {
1406
+ background-color: var(--_option-hover-bg);
1407
+ outline: var(--hx-focus-ring-width, 2px) solid
1408
+ var(--_focus-ring-color, var(--hx-color-primary-500));
1409
+ outline-offset: var(--hx-select-option-focus-ring-offset, -2px);
1410
+ }
1411
+
1412
+ .field__option--focused.field__option--selected {
1413
+ background-color: var(--_option-selected-bg);
1414
+ }
1415
+
1416
+ .field__option--disabled {
1417
+ opacity: var(--hx-opacity-disabled, 0.5);
1418
+ cursor: not-allowed;
1419
+ pointer-events: none;
1420
+ }
1421
+
1422
+ .field__option-label {
1423
+ flex: 1;
1424
+ white-space: nowrap;
1425
+ overflow: hidden;
1426
+ text-overflow: ellipsis;
1427
+ }
1428
+
1429
+ .field__no-options {
1430
+ padding: var(--hx-space-3, 0.75rem);
1431
+ text-align: center;
1432
+ color: var(--_placeholder-color);
1433
+ font-size: var(--hx-font-size-sm, 0.875rem);
1434
+ }
1435
+
1436
+ .field__select {
1437
+ position: absolute;
1438
+ width: 1px;
1439
+ height: 1px;
1440
+ overflow: hidden;
1441
+ opacity: 0;
1442
+ pointer-events: none;
1443
+ clip: rect(0, 0, 0, 0);
1444
+ }
1445
+
1446
+ .field__help-text,
1447
+ .field__error {
1448
+ font-size: var(--hx-font-size-xs, 0.75rem);
1449
+ line-height: var(--hx-line-height-normal, 1.5);
1450
+ }
1451
+
1452
+ .field__help-text {
1453
+ color: var(--hx-color-neutral-500, #6c757d);
1454
+ }
1455
+
1456
+ .field__error {
1457
+ color: var(--hx-select-error-color, var(--hx-color-error-text, #b91c1c));
1458
+ }
1459
+
1460
+ @media (prefers-reduced-motion: reduce) {
1461
+ .field__trigger,
1462
+ .field__chevron,
1463
+ .field__option {
1464
+ transition: none;
1465
+ }
1466
+ }
1467
+ /* ── hx-slider ── */
1468
+ :host {
1469
+ display: block;
1470
+ }
1471
+
1472
+ :host([disabled]) {
1473
+ opacity: var(--hx-opacity-disabled, 0.5);
1474
+ pointer-events: none;
1475
+ }
1476
+
1477
+ * {
1478
+ box-sizing: border-box;
1479
+ }
1480
+
1481
+ /* ─── Container ─── */
1482
+
1483
+ .slider {
1484
+ display: flex;
1485
+ flex-direction: column;
1486
+ gap: var(--hx-space-1, 0.25rem);
1487
+ font-family: var(--hx-font-family-sans, sans-serif);
1488
+ }
1489
+
1490
+ /* ─── Label Row ─── */
1491
+
1492
+ .slider__label-row {
1493
+ display: flex;
1494
+ align-items: baseline;
1495
+ justify-content: space-between;
1496
+ gap: var(--hx-space-2, 0.5rem);
1497
+ }
1498
+
1499
+ .slider__label {
1500
+ font-size: var(--hx-font-size-sm, 0.875rem);
1501
+ font-weight: var(--hx-font-weight-medium, 500);
1502
+ color: var(--hx-slider-label-color, var(--hx-color-neutral-700, #343a40));
1503
+ line-height: var(--hx-line-height-normal, 1.5);
1504
+ }
1505
+
1506
+ .slider__value-display {
1507
+ font-size: var(--hx-font-size-sm, 0.875rem);
1508
+ font-weight: var(--hx-font-weight-medium, 500);
1509
+ color: var(--hx-slider-value-color, var(--hx-color-neutral-600, #6c757d));
1510
+ line-height: var(--hx-line-height-normal, 1.5);
1511
+ font-variant-numeric: tabular-nums;
1512
+ min-width: var(--hx-size-8, 2rem);
1513
+ text-align: end;
1514
+ }
1515
+
1516
+ /* ─── Track Container ─── */
1517
+
1518
+ .slider__track-container {
1519
+ position: relative;
1520
+ width: 100%;
1521
+ }
1522
+
1523
+ .slider__track {
1524
+ position: relative;
1525
+ width: 100%;
1526
+ border-radius: var(--hx-border-radius-full, 9999px);
1527
+ background-color: var(--hx-slider-track-bg, var(--hx-color-neutral-200, #e9ecef));
1528
+ overflow: visible;
1529
+ }
1530
+
1531
+ /* ─── Size: sm ─── */
1532
+
1533
+ .slider--sm .slider__track {
1534
+ height: var(--hx-slider-track-height-sm, var(--hx-size-1, 0.25rem));
1535
+ }
1536
+
1537
+ .slider--sm .slider__input {
1538
+ height: var(--hx-slider-track-height-sm, var(--hx-size-1, 0.25rem));
1539
+ }
1540
+
1541
+ /* ─── Size: md ─── */
1542
+
1543
+ .slider--md .slider__track {
1544
+ height: var(--hx-slider-track-height-md, var(--hx-size-1-5, 0.375rem));
1545
+ }
1546
+
1547
+ .slider--md .slider__input {
1548
+ height: var(--hx-slider-track-height-md, var(--hx-size-1-5, 0.375rem));
1549
+ }
1550
+
1551
+ /* ─── Size: lg ─── */
1552
+
1553
+ .slider--lg .slider__track {
1554
+ height: var(--hx-slider-track-height-lg, var(--hx-space-2, 0.5rem));
1555
+ }
1556
+
1557
+ .slider--lg .slider__input {
1558
+ height: var(--hx-slider-track-height-lg, var(--hx-space-2, 0.5rem));
1559
+ }
1560
+
1561
+ /* ─── Fill ─── */
1562
+
1563
+ .slider__fill {
1564
+ position: absolute;
1565
+ top: 0;
1566
+ left: 0;
1567
+ height: 100%;
1568
+ width: 100%;
1569
+ border-radius: var(--hx-border-radius-full, 9999px);
1570
+ background-color: var(--hx-slider-fill-bg, var(--hx-color-primary-500, #2563eb));
1571
+ pointer-events: none;
1572
+ transform-origin: left center;
1573
+ transform: scaleX(var(--_fill-ratio, 0));
1574
+ transition: transform var(--hx-transition-fast, 150ms ease);
1575
+ }
1576
+
1577
+ /* Suppress fill animation on initial render — only animate on user interaction */
1578
+ :host(:not([data-ready])) .slider__fill {
1579
+ transition: none;
1580
+ }
1581
+
1582
+ @media (prefers-reduced-motion: reduce) {
1583
+ .slider__fill {
1584
+ transition: none;
1585
+ }
1586
+ }
1587
+
1588
+ /* ─── Native Range Input ─── */
1589
+
1590
+ .slider__input {
1591
+ position: absolute;
1592
+ top: 50%;
1593
+ left: 0;
1594
+ transform: translateY(-50%);
1595
+ width: 100%;
1596
+ margin: 0;
1597
+ padding: 0;
1598
+ opacity: 0;
1599
+ cursor: pointer;
1600
+ -webkit-appearance: none;
1601
+ appearance: none;
1602
+ background: transparent;
1603
+ border: none;
1604
+ outline: none;
1605
+ /* Expand the hit area so the thumb is easy to grab */
1606
+ padding-block: var(--hx-slider-input-padding-block, 0.75rem);
1607
+ }
1608
+
1609
+ /* In forced-color mode, restore native outline so the input remains focusable */
1610
+ @media (forced-colors: active) {
1611
+ .slider__input {
1612
+ outline: revert;
1613
+ opacity: 1;
1614
+ }
1615
+ .slider__input:focus-visible {
1616
+ outline: 2px solid ButtonText;
1617
+ }
1618
+ }
1619
+
1620
+ .slider__input:disabled {
1621
+ cursor: not-allowed;
1622
+ }
1623
+
1624
+ /* ─── Thumb (visual, :before on a wrapper or via ::after on track) ─── */
1625
+ /*
1626
+ * The native thumb is hidden (opacity 0 on the input). We render a visible
1627
+ * thumb element positioned by --fill-pct (a raw 0–100 number set in JS).
1628
+ *
1629
+ * Correct alignment formula keeps the thumb centered within the track at
1630
+ * both extremes, preventing the left/right halves from clipping outside:
1631
+ * left = fillPct% * (1 – thumbSize/100%) + thumbSize * (1 – fillPct/100)
1632
+ * Simplified: left = calc(var(--fill-pct,0)*1% + var(--_thumb-size)*(1 - var(--fill-pct,0)/100))
1633
+ * Combined with translate(-50%,-50%) this places the thumb center correctly
1634
+ * at every position from min to max.
1635
+ */
1636
+
1637
+ .slider__thumb-visual {
1638
+ position: absolute;
1639
+ top: 50%;
1640
+ /* Corrected position: thumb stays within track at all fill values */
1641
+ left: calc(var(--fill-pct, 0) * 1% + var(--_thumb-size, 1rem) * (1 - var(--fill-pct, 0) / 100));
1642
+ transform: translate(-50%, -50%);
1643
+ border-radius: var(--hx-border-radius-full, 9999px);
1644
+ background-color: var(--hx-slider-thumb-bg, var(--hx-color-neutral-0, #ffffff));
1645
+ border: var(--hx-slider-thumb-border-width, 2px) solid
1646
+ var(--hx-slider-thumb-border-color, var(--hx-color-primary-500, #2563eb));
1647
+ box-shadow: var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1648
+ pointer-events: none;
1649
+ transition:
1650
+ box-shadow var(--hx-transition-fast, 150ms ease),
1651
+ transform var(--hx-transition-fast, 150ms ease);
1652
+ }
1653
+
1654
+ @media (prefers-reduced-motion: reduce) {
1655
+ .slider__thumb-visual {
1656
+ transition: none;
1657
+ }
1658
+ }
1659
+
1660
+ .slider__input:focus-visible ~ .slider__thumb-visual {
1661
+ box-shadow:
1662
+ 0 0 0 var(--hx-focus-ring-width, 2px)
1663
+ var(
1664
+ --hx-slider-focus-ring-color,
1665
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1666
+ ),
1667
+ var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1668
+ }
1669
+
1670
+ /* ─── Thumb sizes ─── */
1671
+
1672
+ .slider--sm .slider__thumb-visual {
1673
+ --_thumb-size: var(--hx-slider-thumb-size-sm, var(--hx-size-3, 0.75rem));
1674
+ width: var(--_thumb-size);
1675
+ height: var(--_thumb-size);
1676
+ }
1677
+
1678
+ .slider--md .slider__thumb-visual {
1679
+ --_thumb-size: var(--hx-slider-thumb-size-md, var(--hx-size-4, 1rem));
1680
+ width: var(--_thumb-size);
1681
+ height: var(--_thumb-size);
1682
+ }
1683
+
1684
+ .slider--lg .slider__thumb-visual {
1685
+ --_thumb-size: var(--hx-slider-thumb-size-lg, var(--hx-size-5, 1.25rem));
1686
+ width: var(--_thumb-size);
1687
+ height: var(--_thumb-size);
1688
+ }
1689
+
1690
+ /* ─── Forced colors (Windows High Contrast) ─── */
1691
+ @media (forced-colors: active) {
1692
+ .slider__fill {
1693
+ background-color: Highlight;
1694
+ }
1695
+ .slider__track {
1696
+ background-color: ButtonFace;
1697
+ border: 1px solid ButtonText;
1698
+ }
1699
+ .slider__thumb-visual {
1700
+ background-color: ButtonText;
1701
+ border-color: ButtonText;
1702
+ }
1703
+ .slider__input:focus-visible ~ .slider__thumb-visual {
1704
+ outline: 2px solid Highlight;
1705
+ }
1706
+ }
1707
+
1708
+ /* ─── Ticks ─── */
1709
+
1710
+ .slider__ticks {
1711
+ position: relative;
1712
+ width: 100%;
1713
+ height: var(--hx-space-2, 0.5rem);
1714
+ margin-top: var(--hx-space-1, 0.25rem);
1715
+ }
1716
+
1717
+ .slider__tick {
1718
+ position: absolute;
1719
+ top: 0;
1720
+ width: var(--hx-border-width-thin, 1px);
1721
+ height: 100%;
1722
+ background-color: var(--hx-slider-tick-color, var(--hx-color-neutral-400, #adb5bd));
1723
+ transform: translateX(-50%);
1724
+ }
1725
+
1726
+ /* ─── Range Labels ─── */
1727
+
1728
+ .slider__range-labels {
1729
+ display: flex;
1730
+ justify-content: space-between;
1731
+ font-size: var(--hx-font-size-xs, 0.75rem);
1732
+ color: var(--hx-slider-range-label-color, var(--hx-color-neutral-500, #6c757d));
1733
+ line-height: var(--hx-line-height-normal, 1.5);
1734
+ margin-top: var(--hx-space-0-5, 0.125rem);
1735
+ }
1736
+
1737
+ /* ─── Help Text ─── */
1738
+
1739
+ .slider__help-text {
1740
+ font-size: var(--hx-font-size-xs, 0.75rem);
1741
+ color: var(--hx-slider-help-text-color, var(--hx-color-neutral-500, #6c757d));
1742
+ line-height: var(--hx-line-height-normal, 1.5);
1743
+ }
1744
+
1745
+ /* ─── Disabled state ─── */
1746
+
1747
+ .slider--disabled .slider__fill {
1748
+ background-color: var(--hx-color-neutral-400, #adb5bd);
1749
+ }
1750
+
1751
+ .slider--disabled .slider__thumb-visual {
1752
+ border-color: var(--hx-color-neutral-400, #adb5bd);
1753
+ }
1754
+ /* ── hx-switch ── */
1755
+ :host {
1756
+ display: block;
1757
+ }
1758
+
1759
+ :host([disabled]) {
1760
+ opacity: var(--hx-opacity-disabled, 0.5);
1761
+ pointer-events: none;
1762
+ }
1763
+
1764
+ * {
1765
+ box-sizing: border-box;
1766
+ }
1767
+
1768
+ /* --- Layout --- */
1769
+
1770
+ .switch {
1771
+ display: flex;
1772
+ flex-direction: column;
1773
+ gap: var(--hx-space-1, 0.25rem);
1774
+ font-family: var(--hx-font-family-sans, sans-serif);
1775
+ }
1776
+
1777
+ .switch__control-row {
1778
+ display: flex;
1779
+ align-items: center;
1780
+ gap: var(--hx-space-2, 0.5rem);
1781
+ }
1782
+
1783
+ /* --- Track --- */
1784
+
1785
+ .switch__track {
1786
+ position: relative;
1787
+ display: inline-flex;
1788
+ align-items: center;
1789
+ flex-shrink: 0;
1790
+ border: none;
1791
+ padding: 0;
1792
+ border-radius: var(--hx-border-radius-full, 9999px);
1793
+ background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));
1794
+ cursor: pointer;
1795
+ transition: background-color var(--hx-transition-fast, 150ms ease);
1796
+ outline: none;
1797
+ -webkit-appearance: none;
1798
+ appearance: none;
1799
+ }
1800
+
1801
+ .switch__track:focus-visible {
1802
+ outline: var(--hx-focus-ring-width, 2px) solid
1803
+ var(
1804
+ --hx-switch-focus-ring-color,
1805
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1806
+ );
1807
+ outline-offset: var(--hx-focus-ring-offset, 2px);
1808
+ }
1809
+
1810
+ .switch--checked .switch__track {
1811
+ background-color: var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #2563eb));
1812
+ }
1813
+
1814
+ /* --- Thumb --- */
1815
+
1816
+ .switch__thumb {
1817
+ position: absolute;
1818
+ border-radius: var(--hx-border-radius-full, 9999px);
1819
+ background-color: var(--hx-switch-thumb-bg, var(--hx-color-neutral-0, #ffffff));
1820
+ box-shadow: var(--hx-switch-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1821
+ transition: transform var(--hx-transition-fast, 150ms ease);
1822
+ }
1823
+
1824
+ /* --- Size: sm (track 32x18, thumb 14px) --- */
1825
+
1826
+ .switch--sm .switch__track {
1827
+ width: var(--hx-switch-track-width-sm, var(--hx-size-8, 2rem));
1828
+ height: var(--hx-switch-track-height-sm, var(--hx-size-4-5, 1.125rem));
1829
+ }
1830
+
1831
+ .switch--sm .switch__thumb {
1832
+ width: var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem));
1833
+ height: var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem));
1834
+ top: 50%;
1835
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1836
+ transform: translateY(-50%);
1837
+ }
1838
+
1839
+ .switch--sm.switch--checked .switch__thumb {
1840
+ transform: translateY(-50%)
1841
+ translateX(var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem)));
1842
+ }
1843
+
1844
+ /* --- Size: md (track 40x22, thumb 18px) --- */
1845
+
1846
+ .switch--md .switch__track {
1847
+ width: var(--hx-switch-track-width-md, var(--hx-size-10, 2.5rem));
1848
+ height: var(--hx-switch-track-height-md, var(--hx-size-5-5, 1.375rem));
1849
+ }
1850
+
1851
+ .switch--md .switch__thumb {
1852
+ width: var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));
1853
+ height: var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));
1854
+ top: 50%;
1855
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1856
+ transform: translateY(-50%);
1857
+ }
1858
+
1859
+ .switch--md.switch--checked .switch__thumb {
1860
+ transform: translateY(-50%)
1861
+ translateX(var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem)));
1862
+ }
1863
+
1864
+ /* --- Size: lg (track 48x26, thumb 22px) --- */
1865
+
1866
+ .switch--lg .switch__track {
1867
+ width: var(--hx-switch-track-width-lg, var(--hx-size-12, 3rem));
1868
+ height: var(--hx-switch-track-height-lg, var(--hx-size-6-5, 1.625rem));
1869
+ }
1870
+
1871
+ .switch--lg .switch__thumb {
1872
+ width: var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));
1873
+ height: var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));
1874
+ top: 50%;
1875
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1876
+ transform: translateY(-50%);
1877
+ }
1878
+
1879
+ .switch--lg.switch--checked .switch__thumb {
1880
+ transform: translateY(-50%)
1881
+ translateX(var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem)));
1882
+ }
1883
+
1884
+ /* --- Label --- */
1885
+
1886
+ .switch__label {
1887
+ font-size: var(--hx-font-size-sm, 0.875rem);
1888
+ font-weight: var(--hx-font-weight-medium, 500);
1889
+ color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));
1890
+ line-height: var(--hx-line-height-normal, 1.5);
1891
+ cursor: pointer;
1892
+ user-select: none;
1893
+ -webkit-user-select: none;
1894
+ }
1895
+
1896
+ .switch__required-marker {
1897
+ color: var(--hx-switch-error-color, var(--hx-color-error-text, #b91c1c));
1898
+ font-weight: var(--hx-font-weight-bold, 700);
1899
+ }
1900
+
1901
+ /* --- Help Text & Error --- */
1902
+
1903
+ .switch__help-text {
1904
+ font-size: var(--hx-font-size-xs, 0.75rem);
1905
+ color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #6c757d));
1906
+ line-height: var(--hx-line-height-normal, 1.5);
1907
+ }
1908
+
1909
+ .switch__error {
1910
+ font-size: var(--hx-font-size-xs, 0.75rem);
1911
+ color: var(--hx-switch-error-color, var(--hx-color-error-text, #b91c1c));
1912
+ line-height: var(--hx-line-height-normal, 1.5);
1913
+ }
1914
+
1915
+ /* --- Reduced Motion --- */
1916
+
1917
+ @media (prefers-reduced-motion: reduce) {
1918
+ .switch__track,
1919
+ .switch__thumb {
1920
+ transition: none;
1921
+ }
1922
+ }
1923
+ /* ── hx-text-input ── */
1924
+ :host {
1925
+ display: block;
1926
+ }
1927
+
1928
+ :host([disabled]) {
1929
+ opacity: var(--hx-opacity-disabled, 0.5);
1930
+ pointer-events: none;
1931
+ }
1932
+
1933
+ /*
1934
+ * Attribute-based focus hooks set by FocusMixin.
1935
+ * :host([focused]) — fires whenever the component or any descendant has focus.
1936
+ * :host([focused-visible]) — fires only for keyboard-initiated focus.
1937
+ * These complement the :focus-within rules on .field__input-wrapper and are
1938
+ * exposed as theming hooks for consumers who target the host element.
1939
+ */
1940
+ :host([focused]) .field__input-wrapper {
1941
+ border-color: var(
1942
+ --hx-input-focus-ring-color,
1943
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1944
+ );
1945
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1946
+ color-mix(
1947
+ in srgb,
1948
+ var(
1949
+ --hx-input-focus-ring-color,
1950
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1951
+ )
1952
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1953
+ transparent
1954
+ );
1955
+ }
1956
+
1957
+ :host([focused-visible]) .field__input-wrapper {
1958
+ border-color: var(
1959
+ --hx-input-focus-ring-color,
1960
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1961
+ );
1962
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1963
+ color-mix(
1964
+ in srgb,
1965
+ var(
1966
+ --hx-input-focus-ring-color,
1967
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1968
+ )
1969
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1970
+ transparent
1971
+ );
1972
+ }
1973
+
1974
+ * {
1975
+ box-sizing: border-box;
1976
+ }
1977
+
1978
+ .field {
1979
+ display: flex;
1980
+ flex-direction: column;
1981
+ gap: var(--hx-space-1, 0.25rem);
1982
+ font-family: var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));
1983
+ }
1984
+
1985
+ /* ─── Label ─── */
1986
+
1987
+ .field__label-wrapper {
1988
+ display: contents;
1989
+ }
1990
+
1991
+ .field__label {
1992
+ display: flex;
1993
+ align-items: baseline;
1994
+ gap: var(--hx-space-1, 0.25rem);
1995
+ font-size: var(--hx-font-size-sm, 0.875rem);
1996
+ font-weight: var(--hx-font-weight-medium, 500);
1997
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
1998
+ line-height: var(--hx-line-height-normal, 1.5);
1999
+ }
2000
+
2001
+ .field__required-marker {
2002
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2003
+ font-weight: var(--hx-font-weight-bold, 700);
2004
+ }
2005
+
2006
+ /* ─── Input Wrapper ─── */
2007
+
2008
+ .field__input-wrapper {
2009
+ display: flex;
2010
+ align-items: center;
2011
+ border: var(--hx-border-width-thin, 1px) solid
2012
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
2013
+ border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
2014
+ background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
2015
+ transition:
2016
+ border-color var(--hx-transition-fast, 150ms ease),
2017
+ box-shadow var(--hx-transition-fast, 150ms ease);
2018
+ overflow: hidden;
2019
+ }
2020
+
2021
+ .field__input-wrapper:focus-within {
2022
+ border-color: var(
2023
+ --hx-input-focus-ring-color,
2024
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2025
+ );
2026
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2027
+ color-mix(
2028
+ in srgb,
2029
+ var(
2030
+ --hx-input-focus-ring-color,
2031
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2032
+ )
2033
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2034
+ transparent
2035
+ );
2036
+ }
2037
+
2038
+ /* ─── Error State ─── */
2039
+
2040
+ .field--error .field__input-wrapper {
2041
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2042
+ }
2043
+
2044
+ .field--error .field__input-wrapper:focus-within {
2045
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2046
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2047
+ color-mix(
2048
+ in srgb,
2049
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
2050
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2051
+ transparent
2052
+ );
2053
+ }
2054
+
2055
+ /* ─── Slots (Prefix / Suffix) ─── */
2056
+
2057
+ .field__prefix,
2058
+ .field__suffix {
2059
+ display: flex;
2060
+ align-items: center;
2061
+ color: var(--hx-color-neutral-500, #6c757d);
2062
+ flex-shrink: 0;
2063
+ }
2064
+
2065
+ /* Only add padding when slot has content — avoids phantom space on empty slots */
2066
+ .field__prefix--filled {
2067
+ padding: 0 var(--hx-space-3, 0.75rem);
2068
+ }
2069
+
2070
+ .field__suffix--filled {
2071
+ padding: 0 var(--hx-space-3, 0.75rem);
2072
+ }
2073
+
2074
+ /* ─── Native Input ─── */
2075
+
2076
+ .field__input {
2077
+ flex: 1;
2078
+ border: none;
2079
+ outline: none;
2080
+ background: transparent;
2081
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
2082
+ font-family: inherit;
2083
+ font-size: var(--hx-font-size-md, 1rem);
2084
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
2085
+ line-height: var(--hx-line-height-normal, 1.5);
2086
+ min-height: var(--hx-size-10, 2.5rem);
2087
+ width: 100%;
2088
+ }
2089
+
2090
+ .field__input::placeholder {
2091
+ color: var(--hx-color-neutral-400, #adb5bd);
2092
+ }
2093
+
2094
+ .field__input:disabled {
2095
+ cursor: not-allowed;
2096
+ }
2097
+
2098
+ /* ─── Size Variants ─── */
2099
+
2100
+ .field--size-sm .field__input {
2101
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
2102
+ min-height: var(--hx-size-8, 2rem);
2103
+ font-size: var(--hx-input-sm-font-size, 0.875rem);
2104
+ }
2105
+
2106
+ .field--size-md .field__input {
2107
+ /* md is the default — no overrides needed */
2108
+ }
2109
+
2110
+ .field--size-lg .field__input {
2111
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
2112
+ min-height: var(--hx-size-12, 3rem);
2113
+ font-size: var(--hx-input-lg-font-size, 1.125rem);
2114
+ }
2115
+
2116
+ /* ─── Help Text & Error Messages ─── */
2117
+
2118
+ .field__help-text {
2119
+ font-size: var(--hx-font-size-xs, 0.75rem);
2120
+ color: var(--hx-color-neutral-500, #6c757d);
2121
+ line-height: var(--hx-line-height-normal, 1.5);
2122
+ }
2123
+
2124
+ .field__error {
2125
+ font-size: var(--hx-font-size-xs, 0.75rem);
2126
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2127
+ line-height: var(--hx-line-height-normal, 1.5);
2128
+ }
2129
+
2130
+ /* ─── Motion ─── */
2131
+
2132
+ @media (prefers-reduced-motion: reduce) {
2133
+ .field__input-wrapper {
2134
+ transition: none;
2135
+ }
2136
+ }
2137
+ /* ── hx-textarea ── */
2138
+ :host {
2139
+ display: block;
2140
+ }
2141
+
2142
+ :host([disabled]) {
2143
+ opacity: var(--hx-opacity-disabled, 0.5);
2144
+ pointer-events: none;
2145
+ }
2146
+
2147
+ * {
2148
+ box-sizing: border-box;
2149
+ }
2150
+
2151
+ .field {
2152
+ display: flex;
2153
+ flex-direction: column;
2154
+ gap: var(--hx-space-1, 0.25rem);
2155
+ font-family: var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));
2156
+ }
2157
+
2158
+ /* --- Label --- */
2159
+
2160
+ .field__label-wrapper {
2161
+ display: contents;
2162
+ }
2163
+
2164
+ .field__label {
2165
+ display: flex;
2166
+ align-items: baseline;
2167
+ gap: var(--hx-space-1, 0.25rem);
2168
+ font-size: var(--hx-font-size-sm, 0.875rem);
2169
+ font-weight: var(--hx-font-weight-medium, 500);
2170
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
2171
+ line-height: var(--hx-line-height-normal, 1.5);
2172
+ }
2173
+
2174
+ .field__required-marker {
2175
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2176
+ font-weight: var(--hx-font-weight-bold, 700);
2177
+ }
2178
+
2179
+ /* --- Textarea Wrapper --- */
2180
+
2181
+ .field__textarea-wrapper {
2182
+ display: flex;
2183
+ flex-direction: column;
2184
+ border: var(--hx-border-width-thin, 1px) solid
2185
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
2186
+ border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
2187
+ background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
2188
+ transition:
2189
+ border-color var(--hx-transition-fast, 150ms ease),
2190
+ box-shadow var(--hx-transition-fast, 150ms ease);
2191
+ overflow: hidden;
2192
+ }
2193
+
2194
+ .field__textarea-wrapper:focus-within {
2195
+ border-color: var(
2196
+ --hx-input-focus-ring-color,
2197
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2198
+ );
2199
+ /* Solid fallback for browsers without color-mix() (Chrome < 111, Safari < 16.2) — WCAG 1.4.11 */
2200
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2201
+ rgba(37, 99, 235, var(--hx-focus-ring-opacity, 0.25));
2202
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2203
+ color-mix(
2204
+ in srgb,
2205
+ var(
2206
+ --hx-input-focus-ring-color,
2207
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2208
+ )
2209
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2210
+ transparent
2211
+ );
2212
+ }
2213
+
2214
+ /* --- Error State --- */
2215
+
2216
+ .field--error .field__textarea-wrapper {
2217
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2218
+ }
2219
+
2220
+ .field--error .field__textarea-wrapper:focus-within {
2221
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2222
+ /* Solid fallback for browsers without color-mix() — WCAG 1.4.11 */
2223
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2224
+ rgba(220, 53, 69, var(--hx-focus-ring-opacity, 0.25));
2225
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2226
+ color-mix(
2227
+ in srgb,
2228
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
2229
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2230
+ transparent
2231
+ );
2232
+ }
2233
+
2234
+ /* --- Native Textarea --- */
2235
+
2236
+ .field__textarea {
2237
+ border: none;
2238
+ outline: none;
2239
+ background: transparent;
2240
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
2241
+ font-family: inherit;
2242
+ font-size: var(--hx-font-size-md, 1rem);
2243
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
2244
+ line-height: var(--hx-line-height-normal, 1.5);
2245
+ min-height: var(--hx-textarea-min-height, var(--hx-size-20, 5rem));
2246
+ width: 100%;
2247
+ resize: vertical;
2248
+ }
2249
+
2250
+ .field__textarea::placeholder {
2251
+ color: var(--hx-color-neutral-400, #adb5bd);
2252
+ }
2253
+
2254
+ .field__textarea:disabled {
2255
+ cursor: not-allowed;
2256
+ }
2257
+
2258
+ @media (prefers-reduced-motion: reduce) {
2259
+ .field__textarea-wrapper {
2260
+ transition: none;
2261
+ }
2262
+ }
2263
+
2264
+ /* --- Resize Variants --- */
2265
+
2266
+ :host([resize='none']) .field__textarea {
2267
+ resize: none;
2268
+ }
2269
+
2270
+ /* resize: vertical is the base default — no override needed for [resize='vertical'] */
2271
+
2272
+ :host([resize='both']) .field__textarea {
2273
+ resize: both;
2274
+ }
2275
+
2276
+ :host([resize='auto']) .field__textarea {
2277
+ resize: none;
2278
+ overflow: hidden;
2279
+ }
2280
+
2281
+ /* --- Character Counter --- */
2282
+
2283
+ .field__counter {
2284
+ font-size: var(--hx-font-size-xs, 0.75rem);
2285
+ color: var(--hx-color-neutral-500, #6c757d);
2286
+ line-height: var(--hx-line-height-normal, 1.5);
2287
+ text-align: end;
2288
+ }
2289
+
2290
+ /* --- Visually Hidden (screen reader only) --- */
2291
+
2292
+ .sr-only {
2293
+ position: absolute;
2294
+ width: 1px;
2295
+ height: 1px;
2296
+ padding: 0;
2297
+ margin: -1px;
2298
+ overflow: hidden;
2299
+ clip: rect(0, 0, 0, 0);
2300
+ white-space: nowrap;
2301
+ border: 0;
2302
+ }
2303
+
2304
+ /* --- Help Text & Error Messages --- */
2305
+
2306
+ .field__help-text {
2307
+ font-size: var(--hx-font-size-xs, 0.75rem);
2308
+ color: var(--hx-color-neutral-500, #6c757d);
2309
+ line-height: var(--hx-line-height-normal, 1.5);
2310
+ }
2311
+
2312
+ .field__error {
2313
+ font-size: var(--hx-font-size-xs, 0.75rem);
2314
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2315
+ line-height: var(--hx-line-height-normal, 1.5);
2316
+ }
2317
+ /* ── hx-time-picker ── */
2318
+ :host{display:block;position:relative}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-time-picker-font-family, var(--hx-font-family-sans, sans-serif))}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-time-picker-label-color, var(--hx-color-neutral-700));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__combobox{position:relative;display:flex;align-items:center;border:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300));border-radius:var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-time-picker-bg, var(--hx-color-neutral-0));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);overflow:visible}.field__combobox:focus-within{border-color:var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__combobox{border-color:var(--hx-time-picker-error-color, var(--hx-color-error-500))}.field--error .field__combobox:focus-within{border-color:var(--hx-time-picker-error-color, var(--hx-color-error-500));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-time-picker-error-color, var(--hx-color-error-500)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__input{flex:1;border:none;outline:none;background:transparent;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:inherit;font-size:var(--hx-font-size-md, 1rem);color:var(--hx-time-picker-color, var(--hx-color-neutral-800));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-size-10, 2.5rem);width:100%;cursor:text}.field__input::placeholder{color:var(--hx-color-neutral-400)}.field__input:disabled{cursor:not-allowed}.field__toggle{display:flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0 var(--hx-space-3, .75rem);color:var(--hx-time-picker-chevron-color, var(--hx-color-neutral-500));cursor:pointer;height:100%;min-height:var(--hx-size-10, 2.5rem);flex-shrink:0;border-inline-start:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300))}.field__toggle:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));outline-offset:-2px;border-radius:0 var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem))}.field__listbox{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));inset-inline-start:0;inset-inline-end:0;z-index:var(--hx-z-index-dropdown, 1000);background-color:var(--hx-time-picker-listbox-bg, var(--hx-color-neutral-0));border:var(--hx-border-width-thin, 1px) solid var(--hx-time-picker-border-color, var(--hx-color-neutral-300));border-radius:var(--hx-time-picker-border-radius, var(--hx-border-radius-md, .375rem));box-shadow:var( --hx-time-picker-listbox-shadow, 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900) 12%, transparent) );max-height:var(--hx-time-picker-listbox-max-height, 16rem);overflow-y:auto;padding:var(--hx-space-1, .25rem) 0;list-style:none;margin:0}@media(prefers-reduced-motion:no-preference){.field__listbox{animation:hx-listbox-enter var(--hx-transition-fast, .15s ease) forwards}}@keyframes hx-listbox-enter{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}.field__option{display:flex;align-items:center;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-size:var(--hx-font-size-md, 1rem);font-family:inherit;color:var(--hx-time-picker-option-color, var(--hx-color-neutral-800));cursor:pointer;transition:background-color var(--hx-transition-fast, .15s ease);line-height:var(--hx-line-height-normal, 1.5)}.field__option:hover,.field__option--active{background-color:var(--hx-time-picker-option-hover-bg, var(--hx-color-primary-50));color:var(--hx-time-picker-option-hover-color, var(--hx-color-primary-700))}.field__option--selected{background-color:var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));color:var(--hx-time-picker-option-selected-color, var(--hx-color-primary-800));font-weight:var(--hx-font-weight-medium, 500)}.field__option--selected.field__option--active{background-color:var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100))}@media(prefers-reduced-motion:reduce){.field__combobox,.field__option{transition:none}}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500)}.field__error{color:var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c))}
2319
+ /* ── hx-toggle-button ── */
2320
+ :host {
2321
+ display: inline-block;
2322
+ }
2323
+
2324
+ :host([disabled]) {
2325
+ pointer-events: none;
2326
+ opacity: var(--hx-opacity-disabled, 0.5);
2327
+ }
2328
+
2329
+ /* ─── Base Button ─── */
2330
+
2331
+ .button {
2332
+ display: inline-flex;
2333
+ align-items: center;
2334
+ justify-content: center;
2335
+ gap: var(--hx-space-2, 0.5rem);
2336
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-toggle-button-border-color, transparent);
2337
+ border-radius: var(--hx-toggle-button-border-radius, var(--hx-border-radius-md, 0.375rem));
2338
+ background-color: var(--hx-toggle-button-bg, var(--hx-color-primary-500, #2563eb));
2339
+ color: var(--hx-toggle-button-color, var(--hx-color-neutral-0, #ffffff));
2340
+ font-family: var(--hx-toggle-button-font-family, var(--hx-font-family-sans, sans-serif));
2341
+ font-weight: var(--hx-toggle-button-font-weight, var(--hx-font-weight-semibold, 600));
2342
+ line-height: var(--hx-line-height-tight, 1.25);
2343
+ cursor: pointer;
2344
+ transition:
2345
+ background-color var(--hx-transition-fast, 150ms ease),
2346
+ color var(--hx-transition-fast, 150ms ease),
2347
+ border-color var(--hx-transition-fast, 150ms ease),
2348
+ box-shadow var(--hx-transition-fast, 150ms ease);
2349
+ text-decoration: none;
2350
+ white-space: nowrap;
2351
+ user-select: none;
2352
+ -webkit-user-select: none;
2353
+ }
2354
+
2355
+ .button:focus-visible {
2356
+ outline: var(--hx-focus-ring-width, 2px) solid
2357
+ var(
2358
+ --hx-toggle-button-focus-ring-color,
2359
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2360
+ );
2361
+ outline-offset: var(--hx-focus-ring-offset, 2px);
2362
+ }
2363
+
2364
+ .button:hover {
2365
+ filter: brightness(var(--hx-filter-brightness-hover, 0.9));
2366
+ }
2367
+
2368
+ .button:active {
2369
+ filter: brightness(var(--hx-filter-brightness-active, 0.8));
2370
+ }
2371
+
2372
+ /* ─── Size Variants ─── */
2373
+
2374
+ .button--sm {
2375
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
2376
+ font-size: var(--hx-font-size-sm, 0.875rem);
2377
+ min-height: var(--hx-size-8, 2rem);
2378
+ }
2379
+
2380
+ .button--md {
2381
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
2382
+ font-size: var(--hx-font-size-md, 1rem);
2383
+ min-height: var(--hx-size-10, 2.5rem);
2384
+ }
2385
+
2386
+ .button--lg {
2387
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-6, 1.5rem);
2388
+ font-size: var(--hx-font-size-lg, 1.125rem);
2389
+ min-height: var(--hx-size-12, 3rem);
2390
+ }
2391
+
2392
+ /* ─── Style Variants ─── */
2393
+
2394
+ .button--primary {
2395
+ --hx-toggle-button-bg: var(--hx-color-primary-500, #2563eb);
2396
+ --hx-toggle-button-color: var(--hx-color-neutral-0, #ffffff);
2397
+ --hx-toggle-button-border-color: transparent;
2398
+ }
2399
+
2400
+ .button--secondary {
2401
+ --hx-toggle-button-bg: transparent;
2402
+ --hx-toggle-button-color: var(--hx-color-primary-500, #2563eb);
2403
+ --hx-toggle-button-border-color: var(--hx-color-primary-500, #2563eb);
2404
+ }
2405
+
2406
+ .button--secondary:hover {
2407
+ --hx-toggle-button-bg: var(--hx-color-primary-50, #eff6ff);
2408
+ }
2409
+
2410
+ .button--tertiary {
2411
+ --hx-toggle-button-bg: var(--hx-color-neutral-100, #f1f5f9);
2412
+ --hx-toggle-button-color: var(--hx-color-neutral-900, #0f172a);
2413
+ --hx-toggle-button-border-color: transparent;
2414
+ }
2415
+
2416
+ .button--tertiary:hover {
2417
+ --hx-toggle-button-bg: var(--hx-color-neutral-200, #e2e8f0);
2418
+ }
2419
+
2420
+ .button--ghost {
2421
+ --hx-toggle-button-bg: transparent;
2422
+ --hx-toggle-button-color: var(--hx-color-primary-500, #2563eb);
2423
+ --hx-toggle-button-border-color: transparent;
2424
+ }
2425
+
2426
+ .button--ghost:hover {
2427
+ --hx-toggle-button-bg: var(--hx-color-neutral-100, #f1f5f9);
2428
+ }
2429
+
2430
+ .button--outline {
2431
+ --hx-toggle-button-bg: transparent;
2432
+ --hx-toggle-button-color: var(--hx-color-neutral-900, #0f172a);
2433
+ --hx-toggle-button-border-color: var(--hx-color-neutral-300, #cbd5e1);
2434
+ }
2435
+
2436
+ .button--outline:hover {
2437
+ --hx-toggle-button-bg: var(--hx-color-neutral-50, #f8fafc);
2438
+ }
2439
+
2440
+ /* ─── Pressed State ─── */
2441
+
2442
+ /*
2443
+ * Primary: already uses solid primary bg; pressed deepens to primary-700
2444
+ * to give clear visual feedback without introducing a new color.
2445
+ */
2446
+ .button--primary.button--pressed {
2447
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-700, #1d4ed8));
2448
+ --hx-toggle-button-color: var(
2449
+ --hx-toggle-button-pressed-color,
2450
+ var(--hx-color-neutral-0, #ffffff)
2451
+ );
2452
+ --hx-toggle-button-border-color: transparent;
2453
+ }
2454
+
2455
+ /*
2456
+ * Secondary: unpressed is outlined/transparent; pressed fills with primary bg
2457
+ * so the state change is immediately legible.
2458
+ */
2459
+ .button--secondary.button--pressed {
2460
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-500, #2563eb));
2461
+ --hx-toggle-button-color: var(
2462
+ --hx-toggle-button-pressed-color,
2463
+ var(--hx-color-neutral-0, #ffffff)
2464
+ );
2465
+ --hx-toggle-button-border-color: var(--hx-color-primary-500, #2563eb);
2466
+ }
2467
+
2468
+ /* Tertiary pressed: use primary-100 bg + primary-700 text + border for WCAG 3:1 non-text contrast. */
2469
+ .button--tertiary.button--pressed {
2470
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
2471
+ --hx-toggle-button-color: var(
2472
+ --hx-toggle-button-pressed-color,
2473
+ var(--hx-color-primary-700, #1d4ed8)
2474
+ );
2475
+ --hx-toggle-button-border-color: var(--hx-color-primary-400, #60a5fa);
2476
+ box-shadow: inset 0 0 0 1px var(--hx-color-primary-400, #60a5fa);
2477
+ }
2478
+
2479
+ /* Ghost pressed: subtle neutral fill, matching hover behavior as a baseline. */
2480
+ .button--ghost.button--pressed {
2481
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
2482
+ --hx-toggle-button-color: var(
2483
+ --hx-toggle-button-pressed-color,
2484
+ var(--hx-color-primary-700, #1d4ed8)
2485
+ );
2486
+ --hx-toggle-button-border-color: transparent;
2487
+ }
2488
+
2489
+ /* Outline pressed: fills with a neutral tint, darkens the border, and adds an inset shadow for WCAG 3:1 non-text contrast. */
2490
+ .button--outline.button--pressed {
2491
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-neutral-100, #f1f5f9));
2492
+ --hx-toggle-button-color: var(
2493
+ --hx-toggle-button-pressed-color,
2494
+ var(--hx-color-neutral-900, #0f172a)
2495
+ );
2496
+ --hx-toggle-button-border-color: var(--hx-color-neutral-500, #64748b);
2497
+ box-shadow: inset 0 0 0 1px var(--hx-color-neutral-500, #64748b);
2498
+ }
2499
+
2500
+ /* ─── Disabled ─── */
2501
+
2502
+ .button[disabled] {
2503
+ cursor: not-allowed;
2504
+ }
2505
+
2506
+ /* ─── Prefix / Suffix / Label ─── */
2507
+
2508
+ .button__prefix,
2509
+ .button__suffix {
2510
+ display: inline-flex;
2511
+ align-items: center;
2512
+ flex-shrink: 0;
2513
+ }
2514
+
2515
+ .button__label {
2516
+ flex: 1 1 auto;
2517
+ }
2518
+
2519
+ /* ─── Reduced Motion ─── */
2520
+
2521
+ @media (prefers-reduced-motion: reduce) {
2522
+ .button {
2523
+ transition: none;
2524
+ }
2525
+ }