@helixui/library 1.1.1 → 1.1.2-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/custom-elements.json +8089 -7072
  2. package/dist/base/helix-element.d.ts +134 -0
  3. package/dist/base/helix-element.d.ts.map +1 -0
  4. package/dist/base/id-counter.d.ts +32 -0
  5. package/dist/base/id-counter.d.ts.map +1 -0
  6. package/dist/base/index.d.ts +4 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/styles.d.ts +19 -0
  9. package/dist/base/styles.d.ts.map +1 -0
  10. package/dist/components/hx-accordion/hx-accordion-item.d.ts +3 -0
  11. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  12. package/dist/components/hx-accordion/hx-accordion.d.ts +4 -1
  13. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  14. package/dist/components/hx-accordion/index.js +1 -1
  15. package/dist/components/hx-action-bar/hx-action-bar.d.ts +1 -1
  16. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  17. package/dist/components/hx-action-bar/index.js +1 -1
  18. package/dist/components/hx-alert/hx-alert.d.ts +18 -10
  19. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  20. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  21. package/dist/components/hx-alert/index.js +1 -1
  22. package/dist/components/hx-avatar/index.js +1 -1
  23. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  24. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  25. package/dist/components/hx-badge/index.js +1 -1
  26. package/dist/components/hx-banner/hx-banner.d.ts +15 -5
  27. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  28. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
  29. package/dist/components/hx-banner/index.js +1 -1
  30. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +32 -3
  31. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  32. package/dist/components/hx-breadcrumb/index.js +1 -1
  33. package/dist/components/hx-button/hx-button.d.ts +11 -8
  34. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  35. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  36. package/dist/components/hx-button/index.js +1 -1
  37. package/dist/components/hx-button-group/hx-button-group.d.ts +3 -6
  38. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  39. package/dist/components/hx-button-group/index.js +1 -1
  40. package/dist/components/hx-card/hx-card.d.ts +7 -7
  41. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  42. package/dist/components/hx-card/index.js +1 -1
  43. package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
  44. package/dist/components/hx-carousel/index.js +1 -1
  45. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -18
  46. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  47. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  48. package/dist/components/hx-checkbox/index.js +1 -1
  49. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +8 -3
  50. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  51. package/dist/components/hx-checkbox-group/index.js +1 -1
  52. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +126 -0
  53. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -0
  54. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts +2 -0
  55. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -0
  56. package/dist/components/hx-clinical-status/index.d.ts +3 -0
  57. package/dist/components/hx-clinical-status/index.d.ts.map +1 -0
  58. package/dist/components/hx-clinical-status/index.js +5 -0
  59. package/dist/components/hx-clinical-status/index.js.map +1 -0
  60. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  61. package/dist/components/hx-code-snippet/index.js +1 -1
  62. package/dist/components/hx-color-picker/color-utils.d.ts +27 -0
  63. package/dist/components/hx-color-picker/color-utils.d.ts.map +1 -0
  64. package/dist/components/hx-color-picker/hx-color-picker.d.ts +16 -4
  65. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  66. package/dist/components/hx-color-picker/index.js +1 -1
  67. package/dist/components/hx-combobox/hx-combobox.d.ts +9 -4
  68. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  69. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  70. package/dist/components/hx-combobox/index.js +1 -1
  71. package/dist/components/hx-container/index.js +1 -1
  72. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -1
  73. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  74. package/dist/components/hx-copy-button/index.js +1 -1
  75. package/dist/components/hx-counter/hx-counter.d.ts +20 -3
  76. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  77. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
  78. package/dist/components/hx-counter/index.js +1 -1
  79. package/dist/components/hx-data-table/hx-data-table.d.ts +13 -13
  80. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  81. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  82. package/dist/components/hx-data-table/index.js +1 -1
  83. package/dist/components/hx-date-picker/hx-date-picker.d.ts +70 -13
  84. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  85. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  86. package/dist/components/hx-date-picker/index.js +1 -1
  87. package/dist/components/hx-dialog/hx-dialog.d.ts +4 -1
  88. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  89. package/dist/components/hx-dialog/index.js +1 -1
  90. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  91. package/dist/components/hx-divider/index.js +1 -1
  92. package/dist/components/hx-drawer/hx-drawer.d.ts +5 -8
  93. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  94. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  95. package/dist/components/hx-drawer/index.js +1 -1
  96. package/dist/components/hx-dropdown/hx-dropdown.d.ts +14 -1
  97. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  98. package/dist/components/hx-dropdown/index.js +1 -1
  99. package/dist/components/hx-field/hx-field.d.ts +1 -1
  100. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  101. package/dist/components/hx-field/index.js +1 -1
  102. package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
  103. package/dist/components/hx-field-label/index.js +1 -1
  104. package/dist/components/hx-file-upload/hx-file-upload.d.ts +8 -9
  105. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  106. package/dist/components/hx-file-upload/index.js +1 -1
  107. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  108. package/dist/components/hx-form/index.js +1 -1
  109. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  110. package/dist/components/hx-format-date/index.js +1 -1
  111. package/dist/components/hx-grid/hx-grid.d.ts +5 -9
  112. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  113. package/dist/components/hx-grid/index.js +1 -1
  114. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  115. package/dist/components/hx-icon/index.js +1 -1
  116. package/dist/components/hx-icon-button/hx-icon-button.d.ts +4 -3
  117. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  118. package/dist/components/hx-icon-button/index.js +1 -1
  119. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  120. package/dist/components/hx-image/index.js +1 -1
  121. package/dist/components/hx-link/hx-link.d.ts +1 -1
  122. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  123. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  124. package/dist/components/hx-link/index.js +1 -1
  125. package/dist/components/hx-meter/hx-meter.d.ts +2 -2
  126. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  127. package/dist/components/hx-meter/index.js +1 -1
  128. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  129. package/dist/components/hx-nav/index.js +1 -1
  130. package/dist/components/hx-number-input/hx-number-input.d.ts +19 -7
  131. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  132. package/dist/components/hx-number-input/index.js +1 -1
  133. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +3 -3
  134. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  135. package/dist/components/hx-overflow-menu/index.js +1 -1
  136. package/dist/components/hx-pagination/hx-pagination.d.ts +26 -12
  137. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  138. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  139. package/dist/components/hx-pagination/index.js +1 -1
  140. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +105 -0
  141. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -0
  142. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts +2 -0
  143. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -0
  144. package/dist/components/hx-patient-banner/index.d.ts +3 -0
  145. package/dist/components/hx-patient-banner/index.d.ts.map +1 -0
  146. package/dist/components/hx-patient-banner/index.js +5 -0
  147. package/dist/components/hx-patient-banner/index.js.map +1 -0
  148. package/dist/components/hx-phi-field/hx-phi-field.d.ts +72 -0
  149. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -0
  150. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts +2 -0
  151. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -0
  152. package/dist/components/hx-phi-field/index.d.ts +3 -0
  153. package/dist/components/hx-phi-field/index.d.ts.map +1 -0
  154. package/dist/components/hx-phi-field/index.js +5 -0
  155. package/dist/components/hx-phi-field/index.js.map +1 -0
  156. package/dist/components/hx-popover/hx-popover.d.ts +25 -9
  157. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  158. package/dist/components/hx-popover/index.js +1 -1
  159. package/dist/components/hx-popup/hx-popup.d.ts +5 -8
  160. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  161. package/dist/components/hx-popup/index.js +1 -1
  162. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +2 -0
  163. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  164. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  165. package/dist/components/hx-progress-bar/index.js +1 -1
  166. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  167. package/dist/components/hx-progress-ring/index.js +1 -1
  168. package/dist/components/hx-prose/hx-prose.d.ts +1 -0
  169. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  170. package/dist/components/hx-radio-group/hx-radio-group.d.ts +3 -7
  171. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  172. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  173. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  174. package/dist/components/hx-radio-group/index.js +1 -1
  175. package/dist/components/hx-rating/hx-rating.d.ts +3 -3
  176. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  177. package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
  178. package/dist/components/hx-rating/index.js +1 -1
  179. package/dist/components/hx-select/hx-select.d.ts +16 -11
  180. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  181. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  182. package/dist/components/hx-select/index.js +1 -1
  183. package/dist/components/hx-side-nav/hx-nav-item.d.ts +7 -0
  184. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  185. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  186. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  187. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  188. package/dist/components/hx-side-nav/index.js +1 -1
  189. package/dist/components/hx-skeleton/hx-skeleton.d.ts +2 -2
  190. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  191. package/dist/components/hx-slider/hx-slider.d.ts +5 -8
  192. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  193. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  194. package/dist/components/hx-slider/index.js +1 -1
  195. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -1
  196. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  197. package/dist/components/hx-spinner/hx-spinner.styles.d.ts.map +1 -1
  198. package/dist/components/hx-spinner/index.js +1 -1
  199. package/dist/components/hx-split-button/hx-split-button.d.ts +10 -4
  200. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  201. package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
  202. package/dist/components/hx-split-button/index.js +1 -1
  203. package/dist/components/hx-split-panel/hx-split-panel.d.ts +13 -9
  204. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  205. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  206. package/dist/components/hx-split-panel/index.js +1 -1
  207. package/dist/components/hx-stat/hx-stat.d.ts +7 -2
  208. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  209. package/dist/components/hx-stat/index.js +1 -1
  210. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +2 -2
  211. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  212. package/dist/components/hx-status-indicator/index.js +1 -1
  213. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  214. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  215. package/dist/components/hx-steps/index.js +1 -1
  216. package/dist/components/hx-structured-list/hx-structured-list.d.ts +10 -3
  217. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  218. package/dist/components/hx-structured-list/index.js +1 -1
  219. package/dist/components/hx-style-scope/hx-style-scope.d.ts +71 -0
  220. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -0
  221. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts +10 -0
  222. package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -0
  223. package/dist/components/hx-style-scope/index.d.ts +2 -0
  224. package/dist/components/hx-style-scope/index.d.ts.map +1 -0
  225. package/dist/components/hx-style-scope/index.js +5 -0
  226. package/dist/components/hx-style-scope/index.js.map +1 -0
  227. package/dist/components/hx-switch/hx-switch.d.ts +4 -4
  228. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  229. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  230. package/dist/components/hx-switch/index.js +1 -1
  231. package/dist/components/hx-table/hx-table.d.ts +1 -0
  232. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  233. package/dist/components/hx-table/index.js +1 -1
  234. package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
  235. package/dist/components/hx-tabs/hx-tab.d.ts +1 -0
  236. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  237. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  238. package/dist/components/hx-tabs/hx-tabs.d.ts +2 -2
  239. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  240. package/dist/components/hx-tabs/index.js +1 -1
  241. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  242. package/dist/components/hx-tag/index.js +1 -1
  243. package/dist/components/hx-text/index.js +1 -1
  244. package/dist/components/hx-text-input/hx-text-input.d.ts +16 -15
  245. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  246. package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
  247. package/dist/components/hx-text-input/index.js +1 -1
  248. package/dist/components/hx-textarea/hx-textarea.d.ts +4 -4
  249. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  250. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  251. package/dist/components/hx-textarea/index.js +1 -1
  252. package/dist/components/hx-theme/hx-theme.d.ts +82 -3
  253. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  254. package/dist/components/hx-theme/index.js +1 -1
  255. package/dist/components/hx-time-picker/hx-time-picker.d.ts +6 -1
  256. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  257. package/dist/components/hx-time-picker/index.js +1 -1
  258. package/dist/components/hx-toast/hx-toast-stack.d.ts +1 -1
  259. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  260. package/dist/components/hx-toast/hx-toast.d.ts +9 -5
  261. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  262. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  263. package/dist/components/hx-toast/index.js +1 -1
  264. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  265. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +4 -3
  266. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  267. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  268. package/dist/components/hx-toggle-button/index.js +1 -1
  269. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -2
  270. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  271. package/dist/components/hx-tooltip/index.js +1 -1
  272. package/dist/components/hx-tree-view/hx-tree-item.d.ts +7 -0
  273. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  274. package/dist/components/hx-tree-view/hx-tree-view.d.ts +21 -2
  275. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  276. package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
  277. package/dist/components/hx-tree-view/index.js +1 -1
  278. package/dist/controllers/helix-audit-controller.d.ts +71 -0
  279. package/dist/controllers/helix-audit-controller.d.ts.map +1 -0
  280. package/dist/css/helix-all.css +9592 -0
  281. package/dist/css/helix-core.css +1788 -0
  282. package/dist/css/helix-data.css +639 -0
  283. package/dist/css/helix-feedback.css +1239 -0
  284. package/dist/css/helix-forms.css +2498 -0
  285. package/dist/css/helix-layout.css +380 -0
  286. package/dist/css/helix-media.css +213 -0
  287. package/dist/css/helix-navigation.css +1129 -0
  288. package/dist/css/helix-overlay.css +643 -0
  289. package/dist/css/helix-tokens.css +432 -0
  290. package/dist/css/helix-utility.css +633 -0
  291. package/dist/css/hx-accordion.css +10 -0
  292. package/dist/css/hx-action-bar.css +117 -0
  293. package/dist/css/hx-alert.css +213 -0
  294. package/dist/css/hx-avatar.css +117 -0
  295. package/dist/css/hx-badge.css +178 -0
  296. package/dist/css/hx-banner.css +203 -0
  297. package/dist/css/hx-breadcrumb.css +36 -0
  298. package/dist/css/hx-button-group.css +91 -0
  299. package/dist/css/hx-button.css +262 -0
  300. package/dist/css/hx-card.css +161 -0
  301. package/dist/css/hx-carousel.css +211 -0
  302. package/dist/css/hx-checkbox-group.css +77 -0
  303. package/dist/css/hx-checkbox.css +219 -0
  304. package/dist/css/hx-clinical-status.css +246 -0
  305. package/dist/css/hx-code-snippet.css +179 -0
  306. package/dist/css/hx-color-picker.css +2 -0
  307. package/dist/css/hx-combobox.css +2 -0
  308. package/dist/css/hx-container.css +82 -0
  309. package/dist/css/hx-copy-button.css +121 -0
  310. package/dist/css/hx-counter.css +51 -0
  311. package/dist/css/hx-data-table.css +207 -0
  312. package/dist/css/hx-date-picker.css +2 -0
  313. package/dist/css/hx-dialog.css +190 -0
  314. package/dist/css/hx-divider.css +87 -0
  315. package/dist/css/hx-drawer.css +262 -0
  316. package/dist/css/hx-dropdown.css +46 -0
  317. package/dist/css/hx-field-label.css +38 -0
  318. package/dist/css/hx-field.css +119 -0
  319. package/dist/css/hx-file-upload.css +241 -0
  320. package/dist/css/hx-form.css +2 -0
  321. package/dist/css/hx-format-date.css +10 -0
  322. package/dist/css/hx-grid.css +14 -0
  323. package/dist/css/hx-help-text.css +50 -0
  324. package/dist/css/hx-icon-button.css +152 -0
  325. package/dist/css/hx-icon.css +73 -0
  326. package/dist/css/hx-image.css +41 -0
  327. package/dist/css/hx-link.css +105 -0
  328. package/dist/css/hx-list.css +48 -0
  329. package/dist/css/hx-menu.css +21 -0
  330. package/dist/css/hx-meter.css +113 -0
  331. package/dist/css/hx-nav.css +242 -0
  332. package/dist/css/hx-number-input.css +246 -0
  333. package/dist/css/hx-overflow-menu.css +133 -0
  334. package/dist/css/hx-pagination.css +193 -0
  335. package/dist/css/hx-patient-banner.css +111 -0
  336. package/dist/css/hx-phi-field.css +85 -0
  337. package/dist/css/hx-popover.css +61 -0
  338. package/dist/css/hx-popup.css +31 -0
  339. package/dist/css/hx-progress-bar.css +133 -0
  340. package/dist/css/hx-progress-ring.css +142 -0
  341. package/dist/css/hx-prose.css +2 -0
  342. package/dist/css/hx-radio-group.css +77 -0
  343. package/dist/css/hx-rating.css +96 -0
  344. package/dist/css/hx-select.css +268 -0
  345. package/dist/css/hx-side-nav.css +149 -0
  346. package/dist/css/hx-skeleton.css +82 -0
  347. package/dist/css/hx-slider.css +287 -0
  348. package/dist/css/hx-spinner.css +116 -0
  349. package/dist/css/hx-split-button.css +309 -0
  350. package/dist/css/hx-split-panel.css +168 -0
  351. package/dist/css/hx-stack.css +104 -0
  352. package/dist/css/hx-stat.css +106 -0
  353. package/dist/css/hx-status-indicator.css +97 -0
  354. package/dist/css/hx-steps.css +52 -0
  355. package/dist/css/hx-structured-list.css +75 -0
  356. package/dist/css/hx-style-scope.css +4 -0
  357. package/dist/css/hx-switch.css +169 -0
  358. package/dist/css/hx-table.css +128 -0
  359. package/dist/css/hx-tabs.css +76 -0
  360. package/dist/css/hx-tag.css +146 -0
  361. package/dist/css/hx-text-input.css +214 -0
  362. package/dist/css/hx-text.css +149 -0
  363. package/dist/css/hx-textarea.css +180 -0
  364. package/dist/css/hx-theme.css +23 -0
  365. package/dist/css/hx-time-picker.css +2 -0
  366. package/dist/css/hx-toast.css +230 -0
  367. package/dist/css/hx-toggle-button.css +207 -0
  368. package/dist/css/hx-tooltip.css +51 -0
  369. package/dist/css/hx-top-nav.css +203 -0
  370. package/dist/css/hx-tree-view.css +22 -0
  371. package/dist/css/hx-visually-hidden.css +26 -0
  372. package/dist/css/index.css +84 -0
  373. package/dist/css/manifest.json +2696 -0
  374. package/dist/index.d.ts +14 -0
  375. package/dist/index.d.ts.map +1 -1
  376. package/dist/index.js +266 -176
  377. package/dist/index.js.map +1 -1
  378. package/dist/mixins/FocusMixin.d.ts +49 -0
  379. package/dist/mixins/FocusMixin.d.ts.map +1 -0
  380. package/dist/mixins/FormMixin.d.ts +69 -0
  381. package/dist/mixins/FormMixin.d.ts.map +1 -0
  382. package/dist/mixins/aria-delegation.d.ts +97 -0
  383. package/dist/mixins/aria-delegation.d.ts.map +1 -0
  384. package/dist/mixins/index.d.ts +5 -0
  385. package/dist/mixins/index.d.ts.map +1 -0
  386. package/dist/shared/FormMixin-Bjvw20G5.js +88 -0
  387. package/dist/shared/FormMixin-Bjvw20G5.js.map +1 -0
  388. package/dist/shared/aria-delegation-CBP9eQ0M.js +107 -0
  389. package/dist/shared/aria-delegation-CBP9eQ0M.js.map +1 -0
  390. package/dist/shared/{hx-accordion-D1kFhdeQ.js → hx-accordion-_KeulaQR.js} +83 -55
  391. package/dist/shared/hx-accordion-_KeulaQR.js.map +1 -0
  392. package/dist/shared/{hx-action-bar-D4bulGQP.js → hx-action-bar-vGFnNwNY.js} +33 -34
  393. package/dist/shared/hx-action-bar-vGFnNwNY.js.map +1 -0
  394. package/dist/shared/{hx-alert-K5F8KeqI.js → hx-alert-DRZYP0Oo.js} +32 -23
  395. package/dist/shared/hx-alert-DRZYP0Oo.js.map +1 -0
  396. package/dist/shared/{hx-avatar-Cun-O99h.js → hx-avatar-7p1cj3lG.js} +2 -2
  397. package/dist/shared/hx-avatar-7p1cj3lG.js.map +1 -0
  398. package/dist/shared/{hx-badge-CsFd2xtw.js → hx-badge-Xg7zoh4Q.js} +46 -37
  399. package/dist/shared/hx-badge-Xg7zoh4Q.js.map +1 -0
  400. package/dist/shared/{hx-banner-BTV-X2xF.js → hx-banner-2RS7Nux4.js} +93 -58
  401. package/dist/shared/hx-banner-2RS7Nux4.js.map +1 -0
  402. package/dist/shared/{hx-breadcrumb-item-4IwaLgaO.js → hx-breadcrumb-item-B2rjepqy.js} +79 -78
  403. package/dist/shared/hx-breadcrumb-item-B2rjepqy.js.map +1 -0
  404. package/dist/shared/{hx-button-7k-KeCYU.js → hx-button-6S3DwuIj.js} +81 -56
  405. package/dist/shared/hx-button-6S3DwuIj.js.map +1 -0
  406. package/dist/shared/{hx-button-group-CWjWv-wS.js → hx-button-group-ChTQsnQj.js} +10 -10
  407. package/dist/shared/hx-button-group-ChTQsnQj.js.map +1 -0
  408. package/dist/shared/{hx-card-0hT3G5hi.js → hx-card-dIKdcMhr.js} +32 -32
  409. package/dist/shared/hx-card-dIKdcMhr.js.map +1 -0
  410. package/dist/shared/{hx-carousel-item-DgeYyYZJ.js → hx-carousel-item-Cm8a1nAi.js} +3 -3
  411. package/dist/shared/hx-carousel-item-Cm8a1nAi.js.map +1 -0
  412. package/dist/shared/{hx-checkbox-BvjO-O41.js → hx-checkbox-_WUiuTo9.js} +68 -71
  413. package/dist/shared/hx-checkbox-_WUiuTo9.js.map +1 -0
  414. package/dist/shared/{hx-checkbox-group-Z5VvWzcj.js → hx-checkbox-group-B-ci-dxp.js} +37 -31
  415. package/dist/shared/hx-checkbox-group-B-ci-dxp.js.map +1 -0
  416. package/dist/shared/hx-clinical-status-De8yrA5I.js +467 -0
  417. package/dist/shared/hx-clinical-status-De8yrA5I.js.map +1 -0
  418. package/dist/shared/{hx-code-snippet-DqzPkH4K.js → hx-code-snippet-CQsyvthi.js} +56 -47
  419. package/dist/shared/hx-code-snippet-CQsyvthi.js.map +1 -0
  420. package/dist/shared/{hx-color-picker-Da8z6AlQ.js → hx-color-picker-Dk2Myvaf.js} +153 -137
  421. package/dist/shared/hx-color-picker-Dk2Myvaf.js.map +1 -0
  422. package/dist/shared/{hx-combobox-CivfelTS.js → hx-combobox-CNAJXIxo.js} +10 -10
  423. package/dist/shared/hx-combobox-CNAJXIxo.js.map +1 -0
  424. package/dist/shared/{hx-container-DLUKnTi9.js → hx-container-7j16VuQE.js} +16 -16
  425. package/dist/shared/hx-container-7j16VuQE.js.map +1 -0
  426. package/dist/shared/{hx-copy-button--0dymSvw.js → hx-copy-button-B_ZHYO7_.js} +47 -40
  427. package/dist/shared/hx-copy-button-B_ZHYO7_.js.map +1 -0
  428. package/dist/shared/hx-counter-D_B7L9Pi.js +185 -0
  429. package/dist/shared/hx-counter-D_B7L9Pi.js.map +1 -0
  430. package/dist/shared/{hx-data-table-DujB9hSE.js → hx-data-table-B1j4n4bm.js} +134 -107
  431. package/dist/shared/hx-data-table-B1j4n4bm.js.map +1 -0
  432. package/dist/shared/{hx-date-picker-C8d2HtRV.js → hx-date-picker-R-0kWFwr.js} +146 -130
  433. package/dist/shared/hx-date-picker-R-0kWFwr.js.map +1 -0
  434. package/dist/shared/{hx-dialog-DkUSnVgw.js → hx-dialog-U5d3s0Ps.js} +98 -89
  435. package/dist/shared/hx-dialog-U5d3s0Ps.js.map +1 -0
  436. package/dist/shared/{hx-divider-DNNs4e8q.js → hx-divider-DdAN-_jB.js} +5 -5
  437. package/dist/shared/hx-divider-DdAN-_jB.js.map +1 -0
  438. package/dist/shared/{hx-drawer-CJcRZcns.js → hx-drawer-e0qeGxAD.js} +117 -77
  439. package/dist/shared/hx-drawer-e0qeGxAD.js.map +1 -0
  440. package/dist/shared/{hx-dropdown-Bo0KTM1A.js → hx-dropdown-DP_DNpEb.js} +56 -41
  441. package/dist/shared/hx-dropdown-DP_DNpEb.js.map +1 -0
  442. package/dist/shared/{hx-field-3MmzJ4kZ.js → hx-field-COM4KvMQ.js} +9 -9
  443. package/dist/shared/hx-field-COM4KvMQ.js.map +1 -0
  444. package/dist/shared/{hx-field-label-Bg-EWvqF.js → hx-field-label-BtZ9H9Yy.js} +8 -11
  445. package/dist/shared/hx-field-label-BtZ9H9Yy.js.map +1 -0
  446. package/dist/shared/{hx-file-upload-ByjAgfNy.js → hx-file-upload-DbECypLe.js} +78 -87
  447. package/dist/shared/hx-file-upload-DbECypLe.js.map +1 -0
  448. package/dist/shared/{hx-form-BpS6v3Iu.js → hx-form-fJE-FJQV.js} +36 -32
  449. package/dist/shared/{hx-form-BpS6v3Iu.js.map → hx-form-fJE-FJQV.js.map} +1 -1
  450. package/dist/shared/{hx-format-date-BdnWV2kX.js → hx-format-date-C030ThSm.js} +14 -12
  451. package/dist/shared/hx-format-date-C030ThSm.js.map +1 -0
  452. package/dist/shared/{hx-grid-gEjuF0cR.js → hx-grid-DE8KM5Gf.js} +7 -7
  453. package/dist/shared/hx-grid-DE8KM5Gf.js.map +1 -0
  454. package/dist/shared/{hx-icon-button-DzH_bRtC.js → hx-icon-button-Et9wq79n.js} +4 -4
  455. package/dist/shared/{hx-icon-button-DzH_bRtC.js.map → hx-icon-button-Et9wq79n.js.map} +1 -1
  456. package/dist/shared/{hx-icon-CP6OnLoM.js → hx-icon-dYvrzvsO.js} +7 -7
  457. package/dist/shared/hx-icon-dYvrzvsO.js.map +1 -0
  458. package/dist/shared/{hx-image-C6pGiI6c.js → hx-image-DUsEi-oN.js} +15 -15
  459. package/dist/shared/hx-image-DUsEi-oN.js.map +1 -0
  460. package/dist/shared/{hx-link-Tmk_YPvW.js → hx-link-Peg2LzOD.js} +43 -41
  461. package/dist/shared/hx-link-Peg2LzOD.js.map +1 -0
  462. package/dist/shared/{hx-meter-uXkTZq-W.js → hx-meter-CVs4A649.js} +13 -13
  463. package/dist/shared/hx-meter-CVs4A649.js.map +1 -0
  464. package/dist/shared/{hx-nav-3JsN2Oak.js → hx-nav-D377Ngz4.js} +23 -24
  465. package/dist/shared/hx-nav-D377Ngz4.js.map +1 -0
  466. package/dist/shared/{hx-nav-item-D3EJatzc.js → hx-nav-item-CuGiJPAf.js} +75 -49
  467. package/dist/shared/hx-nav-item-CuGiJPAf.js.map +1 -0
  468. package/dist/shared/{hx-number-input-CAAibZ8X.js → hx-number-input-BPgrlMLN.js} +70 -66
  469. package/dist/shared/hx-number-input-BPgrlMLN.js.map +1 -0
  470. package/dist/shared/{hx-overflow-menu-2kgOJ_ht.js → hx-overflow-menu-Bz02LPPk.js} +15 -11
  471. package/dist/shared/hx-overflow-menu-Bz02LPPk.js.map +1 -0
  472. package/dist/shared/{hx-pagination-DBs-vmSv.js → hx-pagination-DYhYPqDn.js} +68 -63
  473. package/dist/shared/hx-pagination-DYhYPqDn.js.map +1 -0
  474. package/dist/shared/hx-patient-banner-BoJHddAL.js +256 -0
  475. package/dist/shared/hx-patient-banner-BoJHddAL.js.map +1 -0
  476. package/dist/shared/hx-phi-field-EDWna59z.js +261 -0
  477. package/dist/shared/hx-phi-field-EDWna59z.js.map +1 -0
  478. package/dist/shared/{hx-popover-DxE67miP.js → hx-popover-D6kYQkt3.js} +96 -69
  479. package/dist/shared/hx-popover-D6kYQkt3.js.map +1 -0
  480. package/dist/shared/{hx-popup-Dg6n_PbY.js → hx-popup-RQb6HUXc.js} +2 -2
  481. package/dist/shared/hx-popup-RQb6HUXc.js.map +1 -0
  482. package/dist/shared/{hx-progress-bar-Dm_EHyng.js → hx-progress-bar-ByEmxq1V.js} +42 -40
  483. package/dist/shared/hx-progress-bar-ByEmxq1V.js.map +1 -0
  484. package/dist/shared/{hx-progress-ring-DpxBDD5d.js → hx-progress-ring-CtVnNRQx.js} +2 -2
  485. package/dist/shared/{hx-progress-ring-DpxBDD5d.js.map → hx-progress-ring-CtVnNRQx.js.map} +1 -1
  486. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -1
  487. package/dist/shared/{hx-radio-BywgVSEu.js → hx-radio-jgeW92SV.js} +28 -27
  488. package/dist/shared/hx-radio-jgeW92SV.js.map +1 -0
  489. package/dist/shared/{hx-rating-CUWBQ0fZ.js → hx-rating-g_iy-DW_.js} +92 -96
  490. package/dist/shared/hx-rating-g_iy-DW_.js.map +1 -0
  491. package/dist/shared/{hx-select-BwDwxk-M.js → hx-select-4-nHL0vd.js} +73 -61
  492. package/dist/shared/hx-select-4-nHL0vd.js.map +1 -0
  493. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  494. package/dist/shared/{hx-slider-D_0EKJyk.js → hx-slider-7Q-e0_pc.js} +27 -22
  495. package/dist/shared/hx-slider-7Q-e0_pc.js.map +1 -0
  496. package/dist/shared/{hx-spinner-DMn4SChS.js → hx-spinner-DEgrKsUo.js} +3 -2
  497. package/dist/shared/hx-spinner-DEgrKsUo.js.map +1 -0
  498. package/dist/shared/{hx-split-button-CypgLXw1.js → hx-split-button-BA7P_ly5.js} +40 -31
  499. package/dist/shared/hx-split-button-BA7P_ly5.js.map +1 -0
  500. package/dist/shared/{hx-split-panel-BPMWKPGu.js → hx-split-panel-Bss54UN8.js} +28 -28
  501. package/dist/shared/hx-split-panel-Bss54UN8.js.map +1 -0
  502. package/dist/shared/{hx-stat-CHntLHJM.js → hx-stat-CmkCUI8v.js} +40 -32
  503. package/dist/shared/{hx-stat-CHntLHJM.js.map → hx-stat-CmkCUI8v.js.map} +1 -1
  504. package/dist/shared/{hx-status-indicator-C1BwEvUw.js → hx-status-indicator-4ClvA5mU.js} +19 -19
  505. package/dist/shared/hx-status-indicator-4ClvA5mU.js.map +1 -0
  506. package/dist/shared/{hx-step-BIVWSPxd.js → hx-step-DlANlr2A.js} +31 -71
  507. package/dist/shared/hx-step-DlANlr2A.js.map +1 -0
  508. package/dist/shared/{hx-structured-list-CMWllxGg.js → hx-structured-list-Db9rwLI_.js} +26 -23
  509. package/dist/shared/hx-structured-list-Db9rwLI_.js.map +1 -0
  510. package/dist/shared/hx-style-scope-BroUu83L.js +125 -0
  511. package/dist/shared/hx-style-scope-BroUu83L.js.map +1 -0
  512. package/dist/shared/{hx-switch-BgX8kuWt.js → hx-switch-C0Lp5RGy.js} +8 -5
  513. package/dist/shared/hx-switch-C0Lp5RGy.js.map +1 -0
  514. package/dist/shared/{hx-tab-panel-DhOq67jj.js → hx-tab-panel-GGjk6Qg4.js} +129 -118
  515. package/dist/shared/hx-tab-panel-GGjk6Qg4.js.map +1 -0
  516. package/dist/shared/{hx-tag-CzOTDcXI.js → hx-tag-K5fCjfqQ.js} +15 -14
  517. package/dist/shared/hx-tag-K5fCjfqQ.js.map +1 -0
  518. package/dist/shared/{hx-td-h6oeW6YC.js → hx-td-DZuILY3s.js} +43 -40
  519. package/dist/shared/hx-td-DZuILY3s.js.map +1 -0
  520. package/dist/shared/{hx-text-DTXjiviE.js → hx-text-DoEVOf47.js} +29 -29
  521. package/dist/shared/hx-text-DoEVOf47.js.map +1 -0
  522. package/dist/shared/hx-text-input-DTKWPVdy.js +576 -0
  523. package/dist/shared/hx-text-input-DTKWPVdy.js.map +1 -0
  524. package/dist/shared/{hx-textarea-BgX7rxyo.js → hx-textarea-BkSiU8oM.js} +15 -15
  525. package/dist/shared/hx-textarea-BkSiU8oM.js.map +1 -0
  526. package/dist/shared/hx-theme-Aag8QJvT.js +299 -0
  527. package/dist/shared/hx-theme-Aag8QJvT.js.map +1 -0
  528. package/dist/shared/{hx-time-picker-DmLu7WUC.js → hx-time-picker-BpCRsh_z.js} +54 -53
  529. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +1 -0
  530. package/dist/shared/{hx-toggle-button-D1jpDvSA.js → hx-toggle-button-CPFqs3eQ.js} +8 -5
  531. package/dist/shared/hx-toggle-button-CPFqs3eQ.js.map +1 -0
  532. package/dist/shared/{hx-tooltip-kh7QFPKu.js → hx-tooltip-CrO4vzeX.js} +15 -10
  533. package/dist/shared/hx-tooltip-CrO4vzeX.js.map +1 -0
  534. package/dist/shared/{hx-tree-item-BP6UF_H1.js → hx-tree-item-DTDIBRrI.js} +122 -89
  535. package/dist/shared/hx-tree-item-DTDIBRrI.js.map +1 -0
  536. package/dist/shared/id-counter-JhvVCnjh.js +143 -0
  537. package/dist/shared/id-counter-JhvVCnjh.js.map +1 -0
  538. package/dist/shared/{toast-factory-DTy-qN8r.js → toast-factory-f184Gi70.js} +57 -45
  539. package/dist/shared/toast-factory-f184Gi70.js.map +1 -0
  540. package/dist/utilities/adoptedStylesheetRegistry.d.ts +47 -0
  541. package/dist/utilities/adoptedStylesheetRegistry.d.ts.map +1 -0
  542. package/dist/utilities/generateScopedSelectors.d.ts +30 -0
  543. package/dist/utilities/generateScopedSelectors.d.ts.map +1 -0
  544. package/dist/utilities/injectLightStyles.d.ts +37 -0
  545. package/dist/utilities/injectLightStyles.d.ts.map +1 -0
  546. package/dist/utilities/lightStyleRegistry.d.ts +41 -0
  547. package/dist/utilities/lightStyleRegistry.d.ts.map +1 -0
  548. package/dist/utilities/sheetManager.d.ts +62 -0
  549. package/dist/utilities/sheetManager.d.ts.map +1 -0
  550. package/dist/utils/contrast-checker.d.ts +86 -0
  551. package/dist/utils/contrast-checker.d.ts.map +1 -0
  552. package/dist/utils/token-merger.d.ts +24 -0
  553. package/dist/utils/token-merger.d.ts.map +1 -0
  554. package/fouc.css +37 -0
  555. package/package.json +26 -6
  556. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +0 -1
  557. package/dist/shared/hx-action-bar-D4bulGQP.js.map +0 -1
  558. package/dist/shared/hx-alert-K5F8KeqI.js.map +0 -1
  559. package/dist/shared/hx-avatar-Cun-O99h.js.map +0 -1
  560. package/dist/shared/hx-badge-CsFd2xtw.js.map +0 -1
  561. package/dist/shared/hx-banner-BTV-X2xF.js.map +0 -1
  562. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +0 -1
  563. package/dist/shared/hx-button-7k-KeCYU.js.map +0 -1
  564. package/dist/shared/hx-button-group-CWjWv-wS.js.map +0 -1
  565. package/dist/shared/hx-card-0hT3G5hi.js.map +0 -1
  566. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +0 -1
  567. package/dist/shared/hx-checkbox-BvjO-O41.js.map +0 -1
  568. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +0 -1
  569. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +0 -1
  570. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +0 -1
  571. package/dist/shared/hx-combobox-CivfelTS.js.map +0 -1
  572. package/dist/shared/hx-container-DLUKnTi9.js.map +0 -1
  573. package/dist/shared/hx-copy-button--0dymSvw.js.map +0 -1
  574. package/dist/shared/hx-counter-Duf00H7p.js +0 -147
  575. package/dist/shared/hx-counter-Duf00H7p.js.map +0 -1
  576. package/dist/shared/hx-data-table-DujB9hSE.js.map +0 -1
  577. package/dist/shared/hx-date-picker-C8d2HtRV.js.map +0 -1
  578. package/dist/shared/hx-dialog-DkUSnVgw.js.map +0 -1
  579. package/dist/shared/hx-divider-DNNs4e8q.js.map +0 -1
  580. package/dist/shared/hx-drawer-CJcRZcns.js.map +0 -1
  581. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +0 -1
  582. package/dist/shared/hx-field-3MmzJ4kZ.js.map +0 -1
  583. package/dist/shared/hx-field-label-Bg-EWvqF.js.map +0 -1
  584. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +0 -1
  585. package/dist/shared/hx-format-date-BdnWV2kX.js.map +0 -1
  586. package/dist/shared/hx-grid-gEjuF0cR.js.map +0 -1
  587. package/dist/shared/hx-icon-CP6OnLoM.js.map +0 -1
  588. package/dist/shared/hx-image-C6pGiI6c.js.map +0 -1
  589. package/dist/shared/hx-link-Tmk_YPvW.js.map +0 -1
  590. package/dist/shared/hx-meter-uXkTZq-W.js.map +0 -1
  591. package/dist/shared/hx-nav-3JsN2Oak.js.map +0 -1
  592. package/dist/shared/hx-nav-item-D3EJatzc.js.map +0 -1
  593. package/dist/shared/hx-number-input-CAAibZ8X.js.map +0 -1
  594. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +0 -1
  595. package/dist/shared/hx-pagination-DBs-vmSv.js.map +0 -1
  596. package/dist/shared/hx-popover-DxE67miP.js.map +0 -1
  597. package/dist/shared/hx-popup-Dg6n_PbY.js.map +0 -1
  598. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +0 -1
  599. package/dist/shared/hx-radio-BywgVSEu.js.map +0 -1
  600. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +0 -1
  601. package/dist/shared/hx-select-BwDwxk-M.js.map +0 -1
  602. package/dist/shared/hx-slider-D_0EKJyk.js.map +0 -1
  603. package/dist/shared/hx-spinner-DMn4SChS.js.map +0 -1
  604. package/dist/shared/hx-split-button-CypgLXw1.js.map +0 -1
  605. package/dist/shared/hx-split-panel-BPMWKPGu.js.map +0 -1
  606. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +0 -1
  607. package/dist/shared/hx-step-BIVWSPxd.js.map +0 -1
  608. package/dist/shared/hx-structured-list-CMWllxGg.js.map +0 -1
  609. package/dist/shared/hx-switch-BgX8kuWt.js.map +0 -1
  610. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +0 -1
  611. package/dist/shared/hx-tag-CzOTDcXI.js.map +0 -1
  612. package/dist/shared/hx-td-h6oeW6YC.js.map +0 -1
  613. package/dist/shared/hx-text-DTXjiviE.js.map +0 -1
  614. package/dist/shared/hx-text-input-CqEdDHMU.js +0 -461
  615. package/dist/shared/hx-text-input-CqEdDHMU.js.map +0 -1
  616. package/dist/shared/hx-textarea-BgX7rxyo.js.map +0 -1
  617. package/dist/shared/hx-theme-6GDoUG8j.js +0 -176
  618. package/dist/shared/hx-theme-6GDoUG8j.js.map +0 -1
  619. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +0 -1
  620. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +0 -1
  621. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +0 -1
  622. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +0 -1
  623. package/dist/shared/toast-factory-DTy-qN8r.js.map +0 -1
@@ -0,0 +1,2498 @@
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
+ :host {
1174
+ display: block;
1175
+ }
1176
+
1177
+ :host([disabled]) {
1178
+ opacity: var(--hx-opacity-disabled, 0.5);
1179
+ pointer-events: none;
1180
+ }
1181
+
1182
+ * {
1183
+ box-sizing: border-box;
1184
+ }
1185
+
1186
+ .field {
1187
+ display: flex;
1188
+ flex-direction: column;
1189
+ gap: var(--hx-space-1, 0.25rem);
1190
+ font-family: var(--hx-select-font-family, var(--hx-font-family-sans, sans-serif));
1191
+ position: relative;
1192
+ }
1193
+
1194
+ .field__label {
1195
+ display: flex;
1196
+ align-items: baseline;
1197
+ gap: var(--hx-space-1, 0.25rem);
1198
+ font-size: var(--hx-font-size-sm, 0.875rem);
1199
+ font-weight: var(--hx-font-weight-medium, 500);
1200
+ color: var(--hx-select-label-color, var(--hx-color-neutral-700, #343a40));
1201
+ line-height: var(--hx-line-height-normal, 1.5);
1202
+ }
1203
+
1204
+ .field__required-marker {
1205
+ color: var(--hx-select-error-color, var(--hx-color-error-text, #b91c1c));
1206
+ font-weight: var(--hx-font-weight-bold, 700);
1207
+ }
1208
+
1209
+ .field__select-wrapper {
1210
+ position: relative;
1211
+ display: block;
1212
+ }
1213
+
1214
+ .field__trigger {
1215
+ display: flex;
1216
+ align-items: center;
1217
+ justify-content: space-between;
1218
+ gap: var(--hx-space-2, 0.5rem);
1219
+ width: 100%;
1220
+ min-height: var(--hx-input-height-md, var(--hx-size-10, 2.5rem));
1221
+ border: var(--hx-border-width-thin, 1px) solid
1222
+ var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));
1223
+ border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
1224
+ background-color: var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));
1225
+ color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
1226
+ font-family: inherit;
1227
+ font-size: var(--hx-font-size-md, 1rem);
1228
+ line-height: var(--hx-line-height-normal, 1.5);
1229
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
1230
+ cursor: pointer;
1231
+ text-align: start;
1232
+ transition:
1233
+ border-color var(--hx-transition-fast, 150ms ease),
1234
+ box-shadow var(--hx-transition-fast, 150ms ease);
1235
+ outline: none;
1236
+ }
1237
+
1238
+ .field__trigger:focus,
1239
+ .field__trigger:focus-visible {
1240
+ border-color: var(
1241
+ --hx-select-focus-ring-color,
1242
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1243
+ );
1244
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1245
+ color-mix(
1246
+ in srgb,
1247
+ var(
1248
+ --hx-select-focus-ring-color,
1249
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1250
+ )
1251
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1252
+ transparent
1253
+ );
1254
+ }
1255
+
1256
+ .field__trigger[aria-disabled='true'] {
1257
+ cursor: not-allowed;
1258
+ }
1259
+
1260
+ .field__trigger--sm {
1261
+ min-height: var(--hx-input-height-sm, var(--hx-size-8, 2rem));
1262
+ font-size: var(--hx-font-size-sm, 0.875rem);
1263
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
1264
+ }
1265
+
1266
+ .field__trigger--lg {
1267
+ min-height: var(--hx-input-height-lg, var(--hx-size-12, 3rem));
1268
+ font-size: var(--hx-font-size-lg, 1.125rem);
1269
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
1270
+ }
1271
+
1272
+ .field__trigger-value {
1273
+ flex: 1;
1274
+ min-width: 0;
1275
+ white-space: nowrap;
1276
+ overflow: hidden;
1277
+ text-overflow: ellipsis;
1278
+ }
1279
+
1280
+ .field__trigger--placeholder .field__trigger-value {
1281
+ color: var(--hx-select-placeholder-color, var(--hx-color-neutral-400, #adb5bd));
1282
+ }
1283
+
1284
+ .field__chevron {
1285
+ flex-shrink: 0;
1286
+ width: 12px;
1287
+ height: 8px;
1288
+ position: relative;
1289
+ color: var(--hx-select-chevron-color, var(--hx-color-neutral-500, #6c757d));
1290
+ pointer-events: none;
1291
+ transition: transform var(--hx-transition-fast, 150ms ease);
1292
+ }
1293
+
1294
+ .field__chevron::after {
1295
+ content: '';
1296
+ position: absolute;
1297
+ top: 0;
1298
+ left: 2px;
1299
+ width: 7px;
1300
+ height: 7px;
1301
+ border-inline-end: 1.5px solid currentColor;
1302
+ border-bottom: 1.5px solid currentColor;
1303
+ transform: rotate(45deg);
1304
+ }
1305
+
1306
+ .field--open .field__chevron {
1307
+ transform: rotate(180deg);
1308
+ }
1309
+
1310
+ .field--error .field__trigger {
1311
+ border-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc3545));
1312
+ }
1313
+
1314
+ .field--error .field__trigger:focus,
1315
+ .field--error .field__trigger:focus-visible {
1316
+ border-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc3545));
1317
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1318
+ color-mix(
1319
+ in srgb,
1320
+ var(--hx-select-error-color, var(--hx-color-error-500, #dc3545))
1321
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1322
+ transparent
1323
+ );
1324
+ }
1325
+
1326
+ .field__listbox {
1327
+ position: absolute;
1328
+ top: calc(100% + var(--hx-space-1, 0.25rem));
1329
+ left: 0;
1330
+ right: 0;
1331
+ z-index: var(--hx-z-index-dropdown, 1000);
1332
+ background-color: var(--hx-select-listbox-bg, var(--hx-color-neutral-0, #ffffff));
1333
+ border: var(--hx-border-width-thin, 1px) solid
1334
+ var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));
1335
+ border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
1336
+ box-shadow: var(
1337
+ --hx-select-listbox-shadow,
1338
+ 0 4px 16px var(--hx-overlay-neutral-12, rgba(13, 17, 23, 0.12))
1339
+ );
1340
+ max-height: var(--hx-select-listbox-max-height, 16rem);
1341
+ overflow: hidden;
1342
+ display: flex;
1343
+ flex-direction: column;
1344
+ }
1345
+
1346
+ .field__listbox[hidden] {
1347
+ display: none;
1348
+ }
1349
+
1350
+ .field__options {
1351
+ overflow-y: auto;
1352
+ flex: 1;
1353
+ padding: var(--hx-space-1, 0.25rem) 0;
1354
+ }
1355
+
1356
+ .field__option {
1357
+ display: flex;
1358
+ align-items: center;
1359
+ gap: var(--hx-space-2, 0.5rem);
1360
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
1361
+ font-size: var(--hx-font-size-md, 1rem);
1362
+ color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
1363
+ cursor: pointer;
1364
+ user-select: none;
1365
+ -webkit-user-select: none;
1366
+ transition: background-color var(--hx-transition-fast, 150ms ease);
1367
+ }
1368
+
1369
+ .field__option:hover {
1370
+ background-color: var(--hx-select-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
1371
+ }
1372
+
1373
+ .field__option--selected {
1374
+ background-color: var(--hx-select-option-selected-bg, var(--hx-color-primary-100, #dbeafe));
1375
+ font-weight: var(--hx-font-weight-medium, 500);
1376
+ }
1377
+
1378
+ .field__option--focused {
1379
+ background-color: var(--hx-select-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
1380
+ outline: var(--hx-focus-ring-width, 2px) solid
1381
+ var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));
1382
+ outline-offset: var(--hx-select-option-focus-ring-offset, -2px);
1383
+ }
1384
+
1385
+ .field__option--focused.field__option--selected {
1386
+ background-color: var(--hx-select-option-selected-bg, var(--hx-color-primary-100, #dbeafe));
1387
+ }
1388
+
1389
+ .field__option--disabled {
1390
+ opacity: var(--hx-opacity-disabled, 0.5);
1391
+ cursor: not-allowed;
1392
+ pointer-events: none;
1393
+ }
1394
+
1395
+ .field__option-label {
1396
+ flex: 1;
1397
+ white-space: nowrap;
1398
+ overflow: hidden;
1399
+ text-overflow: ellipsis;
1400
+ }
1401
+
1402
+ .field__no-options {
1403
+ padding: var(--hx-space-3, 0.75rem);
1404
+ text-align: center;
1405
+ color: var(--hx-color-neutral-400, #adb5bd);
1406
+ font-size: var(--hx-font-size-sm, 0.875rem);
1407
+ }
1408
+
1409
+ .field__select {
1410
+ position: absolute;
1411
+ width: 1px;
1412
+ height: 1px;
1413
+ overflow: hidden;
1414
+ opacity: 0;
1415
+ pointer-events: none;
1416
+ clip: rect(0, 0, 0, 0);
1417
+ }
1418
+
1419
+ .field__help-text,
1420
+ .field__error {
1421
+ font-size: var(--hx-font-size-xs, 0.75rem);
1422
+ line-height: var(--hx-line-height-normal, 1.5);
1423
+ }
1424
+
1425
+ .field__help-text {
1426
+ color: var(--hx-color-neutral-500, #6c757d);
1427
+ }
1428
+
1429
+ .field__error {
1430
+ color: var(--hx-select-error-color, var(--hx-color-error-text, #b91c1c));
1431
+ }
1432
+
1433
+ @media (prefers-reduced-motion: reduce) {
1434
+ .field__trigger,
1435
+ .field__chevron,
1436
+ .field__option {
1437
+ transition: none;
1438
+ }
1439
+ }
1440
+ /* ── hx-slider ── */
1441
+ :host {
1442
+ display: block;
1443
+ }
1444
+
1445
+ :host([disabled]) {
1446
+ opacity: var(--hx-opacity-disabled, 0.5);
1447
+ pointer-events: none;
1448
+ }
1449
+
1450
+ * {
1451
+ box-sizing: border-box;
1452
+ }
1453
+
1454
+ /* ─── Container ─── */
1455
+
1456
+ .slider {
1457
+ display: flex;
1458
+ flex-direction: column;
1459
+ gap: var(--hx-space-1, 0.25rem);
1460
+ font-family: var(--hx-font-family-sans, sans-serif);
1461
+ }
1462
+
1463
+ /* ─── Label Row ─── */
1464
+
1465
+ .slider__label-row {
1466
+ display: flex;
1467
+ align-items: baseline;
1468
+ justify-content: space-between;
1469
+ gap: var(--hx-space-2, 0.5rem);
1470
+ }
1471
+
1472
+ .slider__label {
1473
+ font-size: var(--hx-font-size-sm, 0.875rem);
1474
+ font-weight: var(--hx-font-weight-medium, 500);
1475
+ color: var(--hx-slider-label-color, var(--hx-color-neutral-700, #343a40));
1476
+ line-height: var(--hx-line-height-normal, 1.5);
1477
+ }
1478
+
1479
+ .slider__value-display {
1480
+ font-size: var(--hx-font-size-sm, 0.875rem);
1481
+ font-weight: var(--hx-font-weight-medium, 500);
1482
+ color: var(--hx-slider-value-color, var(--hx-color-neutral-600, #6c757d));
1483
+ line-height: var(--hx-line-height-normal, 1.5);
1484
+ font-variant-numeric: tabular-nums;
1485
+ min-width: var(--hx-size-8, 2rem);
1486
+ text-align: end;
1487
+ }
1488
+
1489
+ /* ─── Track Container ─── */
1490
+
1491
+ .slider__track-container {
1492
+ position: relative;
1493
+ width: 100%;
1494
+ }
1495
+
1496
+ .slider__track {
1497
+ position: relative;
1498
+ width: 100%;
1499
+ border-radius: var(--hx-border-radius-full, 9999px);
1500
+ background-color: var(--hx-slider-track-bg, var(--hx-color-neutral-200, #e9ecef));
1501
+ overflow: visible;
1502
+ }
1503
+
1504
+ /* ─── Size: sm ─── */
1505
+
1506
+ .slider--sm .slider__track {
1507
+ height: var(--hx-slider-track-height-sm, var(--hx-size-1, 0.25rem));
1508
+ }
1509
+
1510
+ .slider--sm .slider__input {
1511
+ height: var(--hx-slider-track-height-sm, var(--hx-size-1, 0.25rem));
1512
+ }
1513
+
1514
+ /* ─── Size: md ─── */
1515
+
1516
+ .slider--md .slider__track {
1517
+ height: var(--hx-slider-track-height-md, var(--hx-size-1-5, 0.375rem));
1518
+ }
1519
+
1520
+ .slider--md .slider__input {
1521
+ height: var(--hx-slider-track-height-md, var(--hx-size-1-5, 0.375rem));
1522
+ }
1523
+
1524
+ /* ─── Size: lg ─── */
1525
+
1526
+ .slider--lg .slider__track {
1527
+ height: var(--hx-slider-track-height-lg, var(--hx-space-2, 0.5rem));
1528
+ }
1529
+
1530
+ .slider--lg .slider__input {
1531
+ height: var(--hx-slider-track-height-lg, var(--hx-space-2, 0.5rem));
1532
+ }
1533
+
1534
+ /* ─── Fill ─── */
1535
+
1536
+ .slider__fill {
1537
+ position: absolute;
1538
+ top: 0;
1539
+ left: 0;
1540
+ height: 100%;
1541
+ width: 100%;
1542
+ border-radius: var(--hx-border-radius-full, 9999px);
1543
+ background-color: var(--hx-slider-fill-bg, var(--hx-color-primary-500, #2563eb));
1544
+ pointer-events: none;
1545
+ transform-origin: left center;
1546
+ transform: scaleX(var(--_fill-ratio, 0));
1547
+ transition: transform var(--hx-transition-fast, 150ms ease);
1548
+ }
1549
+
1550
+ /* Suppress fill animation on initial render — only animate on user interaction */
1551
+ :host(:not([data-ready])) .slider__fill {
1552
+ transition: none;
1553
+ }
1554
+
1555
+ @media (prefers-reduced-motion: reduce) {
1556
+ .slider__fill {
1557
+ transition: none;
1558
+ }
1559
+ }
1560
+
1561
+ /* ─── Native Range Input ─── */
1562
+
1563
+ .slider__input {
1564
+ position: absolute;
1565
+ top: 50%;
1566
+ left: 0;
1567
+ transform: translateY(-50%);
1568
+ width: 100%;
1569
+ margin: 0;
1570
+ padding: 0;
1571
+ opacity: 0;
1572
+ cursor: pointer;
1573
+ -webkit-appearance: none;
1574
+ appearance: none;
1575
+ background: transparent;
1576
+ border: none;
1577
+ outline: none;
1578
+ /* Expand the hit area so the thumb is easy to grab */
1579
+ padding-block: var(--hx-slider-input-padding-block, 0.75rem);
1580
+ }
1581
+
1582
+ /* In forced-color mode, restore native outline so the input remains focusable */
1583
+ @media (forced-colors: active) {
1584
+ .slider__input {
1585
+ outline: revert;
1586
+ opacity: 1;
1587
+ }
1588
+ .slider__input:focus-visible {
1589
+ outline: 2px solid ButtonText;
1590
+ }
1591
+ }
1592
+
1593
+ .slider__input:disabled {
1594
+ cursor: not-allowed;
1595
+ }
1596
+
1597
+ /* ─── Thumb (visual, :before on a wrapper or via ::after on track) ─── */
1598
+ /*
1599
+ * The native thumb is hidden (opacity 0 on the input). We render a visible
1600
+ * thumb element positioned by --fill-pct (a raw 0–100 number set in JS).
1601
+ *
1602
+ * Correct alignment formula keeps the thumb centered within the track at
1603
+ * both extremes, preventing the left/right halves from clipping outside:
1604
+ * left = fillPct% * (1 – thumbSize/100%) + thumbSize * (1 – fillPct/100)
1605
+ * Simplified: left = calc(var(--fill-pct,0)*1% + var(--_thumb-size)*(1 - var(--fill-pct,0)/100))
1606
+ * Combined with translate(-50%,-50%) this places the thumb center correctly
1607
+ * at every position from min to max.
1608
+ */
1609
+
1610
+ .slider__thumb-visual {
1611
+ position: absolute;
1612
+ top: 50%;
1613
+ /* Corrected position: thumb stays within track at all fill values */
1614
+ left: calc(var(--fill-pct, 0) * 1% + var(--_thumb-size, 1rem) * (1 - var(--fill-pct, 0) / 100));
1615
+ transform: translate(-50%, -50%);
1616
+ border-radius: var(--hx-border-radius-full, 9999px);
1617
+ background-color: var(--hx-slider-thumb-bg, var(--hx-color-neutral-0, #ffffff));
1618
+ border: var(--hx-slider-thumb-border-width, 2px) solid
1619
+ var(--hx-slider-thumb-border-color, var(--hx-color-primary-500, #2563eb));
1620
+ box-shadow: var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1621
+ pointer-events: none;
1622
+ transition:
1623
+ box-shadow var(--hx-transition-fast, 150ms ease),
1624
+ transform var(--hx-transition-fast, 150ms ease);
1625
+ }
1626
+
1627
+ @media (prefers-reduced-motion: reduce) {
1628
+ .slider__thumb-visual {
1629
+ transition: none;
1630
+ }
1631
+ }
1632
+
1633
+ .slider__input:focus-visible ~ .slider__thumb-visual {
1634
+ box-shadow:
1635
+ 0 0 0 var(--hx-focus-ring-width, 2px)
1636
+ var(
1637
+ --hx-slider-focus-ring-color,
1638
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1639
+ ),
1640
+ var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1641
+ }
1642
+
1643
+ /* ─── Thumb sizes ─── */
1644
+
1645
+ .slider--sm .slider__thumb-visual {
1646
+ --_thumb-size: var(--hx-slider-thumb-size-sm, var(--hx-size-3, 0.75rem));
1647
+ width: var(--_thumb-size);
1648
+ height: var(--_thumb-size);
1649
+ }
1650
+
1651
+ .slider--md .slider__thumb-visual {
1652
+ --_thumb-size: var(--hx-slider-thumb-size-md, var(--hx-size-4, 1rem));
1653
+ width: var(--_thumb-size);
1654
+ height: var(--_thumb-size);
1655
+ }
1656
+
1657
+ .slider--lg .slider__thumb-visual {
1658
+ --_thumb-size: var(--hx-slider-thumb-size-lg, var(--hx-size-5, 1.25rem));
1659
+ width: var(--_thumb-size);
1660
+ height: var(--_thumb-size);
1661
+ }
1662
+
1663
+ /* ─── Forced colors (Windows High Contrast) ─── */
1664
+ @media (forced-colors: active) {
1665
+ .slider__fill {
1666
+ background-color: Highlight;
1667
+ }
1668
+ .slider__track {
1669
+ background-color: ButtonFace;
1670
+ border: 1px solid ButtonText;
1671
+ }
1672
+ .slider__thumb-visual {
1673
+ background-color: ButtonText;
1674
+ border-color: ButtonText;
1675
+ }
1676
+ .slider__input:focus-visible ~ .slider__thumb-visual {
1677
+ outline: 2px solid Highlight;
1678
+ }
1679
+ }
1680
+
1681
+ /* ─── Ticks ─── */
1682
+
1683
+ .slider__ticks {
1684
+ position: relative;
1685
+ width: 100%;
1686
+ height: var(--hx-space-2, 0.5rem);
1687
+ margin-top: var(--hx-space-1, 0.25rem);
1688
+ }
1689
+
1690
+ .slider__tick {
1691
+ position: absolute;
1692
+ top: 0;
1693
+ width: var(--hx-border-width-thin, 1px);
1694
+ height: 100%;
1695
+ background-color: var(--hx-slider-tick-color, var(--hx-color-neutral-400, #adb5bd));
1696
+ transform: translateX(-50%);
1697
+ }
1698
+
1699
+ /* ─── Range Labels ─── */
1700
+
1701
+ .slider__range-labels {
1702
+ display: flex;
1703
+ justify-content: space-between;
1704
+ font-size: var(--hx-font-size-xs, 0.75rem);
1705
+ color: var(--hx-slider-range-label-color, var(--hx-color-neutral-500, #6c757d));
1706
+ line-height: var(--hx-line-height-normal, 1.5);
1707
+ margin-top: var(--hx-space-0-5, 0.125rem);
1708
+ }
1709
+
1710
+ /* ─── Help Text ─── */
1711
+
1712
+ .slider__help-text {
1713
+ font-size: var(--hx-font-size-xs, 0.75rem);
1714
+ color: var(--hx-slider-help-text-color, var(--hx-color-neutral-500, #6c757d));
1715
+ line-height: var(--hx-line-height-normal, 1.5);
1716
+ }
1717
+
1718
+ /* ─── Disabled state ─── */
1719
+
1720
+ .slider--disabled .slider__fill {
1721
+ background-color: var(--hx-color-neutral-400, #adb5bd);
1722
+ }
1723
+
1724
+ .slider--disabled .slider__thumb-visual {
1725
+ border-color: var(--hx-color-neutral-400, #adb5bd);
1726
+ }
1727
+ /* ── hx-switch ── */
1728
+ :host {
1729
+ display: block;
1730
+ }
1731
+
1732
+ :host([disabled]) {
1733
+ opacity: var(--hx-opacity-disabled, 0.5);
1734
+ pointer-events: none;
1735
+ }
1736
+
1737
+ * {
1738
+ box-sizing: border-box;
1739
+ }
1740
+
1741
+ /* --- Layout --- */
1742
+
1743
+ .switch {
1744
+ display: flex;
1745
+ flex-direction: column;
1746
+ gap: var(--hx-space-1, 0.25rem);
1747
+ font-family: var(--hx-font-family-sans, sans-serif);
1748
+ }
1749
+
1750
+ .switch__control-row {
1751
+ display: flex;
1752
+ align-items: center;
1753
+ gap: var(--hx-space-2, 0.5rem);
1754
+ }
1755
+
1756
+ /* --- Track --- */
1757
+
1758
+ .switch__track {
1759
+ position: relative;
1760
+ display: inline-flex;
1761
+ align-items: center;
1762
+ flex-shrink: 0;
1763
+ border: none;
1764
+ padding: 0;
1765
+ border-radius: var(--hx-border-radius-full, 9999px);
1766
+ background-color: var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));
1767
+ cursor: pointer;
1768
+ transition: background-color var(--hx-transition-fast, 150ms ease);
1769
+ outline: none;
1770
+ -webkit-appearance: none;
1771
+ appearance: none;
1772
+ }
1773
+
1774
+ .switch__track:focus-visible {
1775
+ outline: var(--hx-focus-ring-width, 2px) solid
1776
+ var(
1777
+ --hx-switch-focus-ring-color,
1778
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1779
+ );
1780
+ outline-offset: var(--hx-focus-ring-offset, 2px);
1781
+ }
1782
+
1783
+ .switch--checked .switch__track {
1784
+ background-color: var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #2563eb));
1785
+ }
1786
+
1787
+ /* --- Thumb --- */
1788
+
1789
+ .switch__thumb {
1790
+ position: absolute;
1791
+ border-radius: var(--hx-border-radius-full, 9999px);
1792
+ background-color: var(--hx-switch-thumb-bg, var(--hx-color-neutral-0, #ffffff));
1793
+ box-shadow: var(--hx-switch-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
1794
+ transition: transform var(--hx-transition-fast, 150ms ease);
1795
+ }
1796
+
1797
+ /* --- Size: sm (track 32x18, thumb 14px) --- */
1798
+
1799
+ .switch--sm .switch__track {
1800
+ width: var(--hx-switch-track-width-sm, var(--hx-size-8, 2rem));
1801
+ height: var(--hx-switch-track-height-sm, var(--hx-size-4-5, 1.125rem));
1802
+ }
1803
+
1804
+ .switch--sm .switch__thumb {
1805
+ width: var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem));
1806
+ height: var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem));
1807
+ top: 50%;
1808
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1809
+ transform: translateY(-50%);
1810
+ }
1811
+
1812
+ .switch--sm.switch--checked .switch__thumb {
1813
+ transform: translateY(-50%)
1814
+ translateX(var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, 0.875rem)));
1815
+ }
1816
+
1817
+ /* --- Size: md (track 40x22, thumb 18px) --- */
1818
+
1819
+ .switch--md .switch__track {
1820
+ width: var(--hx-switch-track-width-md, var(--hx-size-10, 2.5rem));
1821
+ height: var(--hx-switch-track-height-md, var(--hx-size-5-5, 1.375rem));
1822
+ }
1823
+
1824
+ .switch--md .switch__thumb {
1825
+ width: var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));
1826
+ height: var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));
1827
+ top: 50%;
1828
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1829
+ transform: translateY(-50%);
1830
+ }
1831
+
1832
+ .switch--md.switch--checked .switch__thumb {
1833
+ transform: translateY(-50%)
1834
+ translateX(var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem)));
1835
+ }
1836
+
1837
+ /* --- Size: lg (track 48x26, thumb 22px) --- */
1838
+
1839
+ .switch--lg .switch__track {
1840
+ width: var(--hx-switch-track-width-lg, var(--hx-size-12, 3rem));
1841
+ height: var(--hx-switch-track-height-lg, var(--hx-size-6-5, 1.625rem));
1842
+ }
1843
+
1844
+ .switch--lg .switch__thumb {
1845
+ width: var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));
1846
+ height: var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));
1847
+ top: 50%;
1848
+ left: var(--hx-switch-thumb-offset, var(--hx-space-0-5, 0.125rem));
1849
+ transform: translateY(-50%);
1850
+ }
1851
+
1852
+ .switch--lg.switch--checked .switch__thumb {
1853
+ transform: translateY(-50%)
1854
+ translateX(var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem)));
1855
+ }
1856
+
1857
+ /* --- Label --- */
1858
+
1859
+ .switch__label {
1860
+ font-size: var(--hx-font-size-sm, 0.875rem);
1861
+ font-weight: var(--hx-font-weight-medium, 500);
1862
+ color: var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));
1863
+ line-height: var(--hx-line-height-normal, 1.5);
1864
+ cursor: pointer;
1865
+ user-select: none;
1866
+ -webkit-user-select: none;
1867
+ }
1868
+
1869
+ .switch__required-marker {
1870
+ color: var(--hx-switch-error-color, var(--hx-color-error-text, #b91c1c));
1871
+ font-weight: var(--hx-font-weight-bold, 700);
1872
+ }
1873
+
1874
+ /* --- Help Text & Error --- */
1875
+
1876
+ .switch__help-text {
1877
+ font-size: var(--hx-font-size-xs, 0.75rem);
1878
+ color: var(--hx-switch-help-text-color, var(--hx-color-neutral-500, #6c757d));
1879
+ line-height: var(--hx-line-height-normal, 1.5);
1880
+ }
1881
+
1882
+ .switch__error {
1883
+ font-size: var(--hx-font-size-xs, 0.75rem);
1884
+ color: var(--hx-switch-error-color, var(--hx-color-error-text, #b91c1c));
1885
+ line-height: var(--hx-line-height-normal, 1.5);
1886
+ }
1887
+
1888
+ /* --- Reduced Motion --- */
1889
+
1890
+ @media (prefers-reduced-motion: reduce) {
1891
+ .switch__track,
1892
+ .switch__thumb {
1893
+ transition: none;
1894
+ }
1895
+ }
1896
+ /* ── hx-text-input ── */
1897
+ :host {
1898
+ display: block;
1899
+ }
1900
+
1901
+ :host([disabled]) {
1902
+ opacity: var(--hx-opacity-disabled, 0.5);
1903
+ pointer-events: none;
1904
+ }
1905
+
1906
+ /*
1907
+ * Attribute-based focus hooks set by FocusMixin.
1908
+ * :host([focused]) — fires whenever the component or any descendant has focus.
1909
+ * :host([focused-visible]) — fires only for keyboard-initiated focus.
1910
+ * These complement the :focus-within rules on .field__input-wrapper and are
1911
+ * exposed as theming hooks for consumers who target the host element.
1912
+ */
1913
+ :host([focused]) .field__input-wrapper {
1914
+ border-color: var(
1915
+ --hx-input-focus-ring-color,
1916
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1917
+ );
1918
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1919
+ color-mix(
1920
+ in srgb,
1921
+ var(
1922
+ --hx-input-focus-ring-color,
1923
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1924
+ )
1925
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1926
+ transparent
1927
+ );
1928
+ }
1929
+
1930
+ :host([focused-visible]) .field__input-wrapper {
1931
+ border-color: var(
1932
+ --hx-input-focus-ring-color,
1933
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1934
+ );
1935
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
1936
+ color-mix(
1937
+ in srgb,
1938
+ var(
1939
+ --hx-input-focus-ring-color,
1940
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1941
+ )
1942
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
1943
+ transparent
1944
+ );
1945
+ }
1946
+
1947
+ * {
1948
+ box-sizing: border-box;
1949
+ }
1950
+
1951
+ .field {
1952
+ display: flex;
1953
+ flex-direction: column;
1954
+ gap: var(--hx-space-1, 0.25rem);
1955
+ font-family: var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));
1956
+ }
1957
+
1958
+ /* ─── Label ─── */
1959
+
1960
+ .field__label-wrapper {
1961
+ display: contents;
1962
+ }
1963
+
1964
+ .field__label {
1965
+ display: flex;
1966
+ align-items: baseline;
1967
+ gap: var(--hx-space-1, 0.25rem);
1968
+ font-size: var(--hx-font-size-sm, 0.875rem);
1969
+ font-weight: var(--hx-font-weight-medium, 500);
1970
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
1971
+ line-height: var(--hx-line-height-normal, 1.5);
1972
+ }
1973
+
1974
+ .field__required-marker {
1975
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
1976
+ font-weight: var(--hx-font-weight-bold, 700);
1977
+ }
1978
+
1979
+ /* ─── Input Wrapper ─── */
1980
+
1981
+ .field__input-wrapper {
1982
+ display: flex;
1983
+ align-items: center;
1984
+ border: var(--hx-border-width-thin, 1px) solid
1985
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
1986
+ border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
1987
+ background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
1988
+ transition:
1989
+ border-color var(--hx-transition-fast, 150ms ease),
1990
+ box-shadow var(--hx-transition-fast, 150ms ease);
1991
+ overflow: hidden;
1992
+ }
1993
+
1994
+ .field__input-wrapper:focus-within {
1995
+ border-color: var(
1996
+ --hx-input-focus-ring-color,
1997
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
1998
+ );
1999
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2000
+ color-mix(
2001
+ in srgb,
2002
+ var(
2003
+ --hx-input-focus-ring-color,
2004
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2005
+ )
2006
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2007
+ transparent
2008
+ );
2009
+ }
2010
+
2011
+ /* ─── Error State ─── */
2012
+
2013
+ .field--error .field__input-wrapper {
2014
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2015
+ }
2016
+
2017
+ .field--error .field__input-wrapper:focus-within {
2018
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2019
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2020
+ color-mix(
2021
+ in srgb,
2022
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
2023
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2024
+ transparent
2025
+ );
2026
+ }
2027
+
2028
+ /* ─── Slots (Prefix / Suffix) ─── */
2029
+
2030
+ .field__prefix,
2031
+ .field__suffix {
2032
+ display: flex;
2033
+ align-items: center;
2034
+ color: var(--hx-color-neutral-500, #6c757d);
2035
+ flex-shrink: 0;
2036
+ }
2037
+
2038
+ /* Only add padding when slot has content — avoids phantom space on empty slots */
2039
+ .field__prefix--filled {
2040
+ padding: 0 var(--hx-space-3, 0.75rem);
2041
+ }
2042
+
2043
+ .field__suffix--filled {
2044
+ padding: 0 var(--hx-space-3, 0.75rem);
2045
+ }
2046
+
2047
+ /* ─── Native Input ─── */
2048
+
2049
+ .field__input {
2050
+ flex: 1;
2051
+ border: none;
2052
+ outline: none;
2053
+ background: transparent;
2054
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
2055
+ font-family: inherit;
2056
+ font-size: var(--hx-font-size-md, 1rem);
2057
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
2058
+ line-height: var(--hx-line-height-normal, 1.5);
2059
+ min-height: var(--hx-size-10, 2.5rem);
2060
+ width: 100%;
2061
+ }
2062
+
2063
+ .field__input::placeholder {
2064
+ color: var(--hx-color-neutral-400, #adb5bd);
2065
+ }
2066
+
2067
+ .field__input:disabled {
2068
+ cursor: not-allowed;
2069
+ }
2070
+
2071
+ /* ─── Size Variants ─── */
2072
+
2073
+ .field--size-sm .field__input {
2074
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
2075
+ min-height: var(--hx-size-8, 2rem);
2076
+ font-size: var(--hx-input-sm-font-size, 0.875rem);
2077
+ }
2078
+
2079
+ .field--size-md .field__input {
2080
+ /* md is the default — no overrides needed */
2081
+ }
2082
+
2083
+ .field--size-lg .field__input {
2084
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
2085
+ min-height: var(--hx-size-12, 3rem);
2086
+ font-size: var(--hx-input-lg-font-size, 1.125rem);
2087
+ }
2088
+
2089
+ /* ─── Help Text & Error Messages ─── */
2090
+
2091
+ .field__help-text {
2092
+ font-size: var(--hx-font-size-xs, 0.75rem);
2093
+ color: var(--hx-color-neutral-500, #6c757d);
2094
+ line-height: var(--hx-line-height-normal, 1.5);
2095
+ }
2096
+
2097
+ .field__error {
2098
+ font-size: var(--hx-font-size-xs, 0.75rem);
2099
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2100
+ line-height: var(--hx-line-height-normal, 1.5);
2101
+ }
2102
+
2103
+ /* ─── Motion ─── */
2104
+
2105
+ @media (prefers-reduced-motion: reduce) {
2106
+ .field__input-wrapper {
2107
+ transition: none;
2108
+ }
2109
+ }
2110
+ /* ── hx-textarea ── */
2111
+ :host {
2112
+ display: block;
2113
+ }
2114
+
2115
+ :host([disabled]) {
2116
+ opacity: var(--hx-opacity-disabled, 0.5);
2117
+ pointer-events: none;
2118
+ }
2119
+
2120
+ * {
2121
+ box-sizing: border-box;
2122
+ }
2123
+
2124
+ .field {
2125
+ display: flex;
2126
+ flex-direction: column;
2127
+ gap: var(--hx-space-1, 0.25rem);
2128
+ font-family: var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));
2129
+ }
2130
+
2131
+ /* --- Label --- */
2132
+
2133
+ .field__label-wrapper {
2134
+ display: contents;
2135
+ }
2136
+
2137
+ .field__label {
2138
+ display: flex;
2139
+ align-items: baseline;
2140
+ gap: var(--hx-space-1, 0.25rem);
2141
+ font-size: var(--hx-font-size-sm, 0.875rem);
2142
+ font-weight: var(--hx-font-weight-medium, 500);
2143
+ color: var(--hx-input-label-color, var(--hx-color-neutral-700, #343a40));
2144
+ line-height: var(--hx-line-height-normal, 1.5);
2145
+ }
2146
+
2147
+ .field__required-marker {
2148
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2149
+ font-weight: var(--hx-font-weight-bold, 700);
2150
+ }
2151
+
2152
+ /* --- Textarea Wrapper --- */
2153
+
2154
+ .field__textarea-wrapper {
2155
+ display: flex;
2156
+ flex-direction: column;
2157
+ border: var(--hx-border-width-thin, 1px) solid
2158
+ var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));
2159
+ border-radius: var(--hx-input-border-radius, var(--hx-border-radius-md, 0.375rem));
2160
+ background-color: var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));
2161
+ transition:
2162
+ border-color var(--hx-transition-fast, 150ms ease),
2163
+ box-shadow var(--hx-transition-fast, 150ms ease);
2164
+ overflow: hidden;
2165
+ }
2166
+
2167
+ .field__textarea-wrapper:focus-within {
2168
+ border-color: var(
2169
+ --hx-input-focus-ring-color,
2170
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2171
+ );
2172
+ /* Solid fallback for browsers without color-mix() (Chrome < 111, Safari < 16.2) — WCAG 1.4.11 */
2173
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2174
+ rgba(37, 99, 235, var(--hx-focus-ring-opacity, 0.25));
2175
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2176
+ color-mix(
2177
+ in srgb,
2178
+ var(
2179
+ --hx-input-focus-ring-color,
2180
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2181
+ )
2182
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2183
+ transparent
2184
+ );
2185
+ }
2186
+
2187
+ /* --- Error State --- */
2188
+
2189
+ .field--error .field__textarea-wrapper {
2190
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2191
+ }
2192
+
2193
+ .field--error .field__textarea-wrapper:focus-within {
2194
+ border-color: var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));
2195
+ /* Solid fallback for browsers without color-mix() — WCAG 1.4.11 */
2196
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2197
+ rgba(220, 53, 69, var(--hx-focus-ring-opacity, 0.25));
2198
+ box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
2199
+ color-mix(
2200
+ in srgb,
2201
+ var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))
2202
+ calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
2203
+ transparent
2204
+ );
2205
+ }
2206
+
2207
+ /* --- Native Textarea --- */
2208
+
2209
+ .field__textarea {
2210
+ border: none;
2211
+ outline: none;
2212
+ background: transparent;
2213
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
2214
+ font-family: inherit;
2215
+ font-size: var(--hx-font-size-md, 1rem);
2216
+ color: var(--hx-input-color, var(--hx-color-neutral-800, #212529));
2217
+ line-height: var(--hx-line-height-normal, 1.5);
2218
+ min-height: var(--hx-textarea-min-height, var(--hx-size-20, 5rem));
2219
+ width: 100%;
2220
+ resize: vertical;
2221
+ }
2222
+
2223
+ .field__textarea::placeholder {
2224
+ color: var(--hx-color-neutral-400, #adb5bd);
2225
+ }
2226
+
2227
+ .field__textarea:disabled {
2228
+ cursor: not-allowed;
2229
+ }
2230
+
2231
+ @media (prefers-reduced-motion: reduce) {
2232
+ .field__textarea-wrapper {
2233
+ transition: none;
2234
+ }
2235
+ }
2236
+
2237
+ /* --- Resize Variants --- */
2238
+
2239
+ :host([resize='none']) .field__textarea {
2240
+ resize: none;
2241
+ }
2242
+
2243
+ /* resize: vertical is the base default — no override needed for [resize='vertical'] */
2244
+
2245
+ :host([resize='both']) .field__textarea {
2246
+ resize: both;
2247
+ }
2248
+
2249
+ :host([resize='auto']) .field__textarea {
2250
+ resize: none;
2251
+ overflow: hidden;
2252
+ }
2253
+
2254
+ /* --- Character Counter --- */
2255
+
2256
+ .field__counter {
2257
+ font-size: var(--hx-font-size-xs, 0.75rem);
2258
+ color: var(--hx-color-neutral-500, #6c757d);
2259
+ line-height: var(--hx-line-height-normal, 1.5);
2260
+ text-align: end;
2261
+ }
2262
+
2263
+ /* --- Visually Hidden (screen reader only) --- */
2264
+
2265
+ .sr-only {
2266
+ position: absolute;
2267
+ width: 1px;
2268
+ height: 1px;
2269
+ padding: 0;
2270
+ margin: -1px;
2271
+ overflow: hidden;
2272
+ clip: rect(0, 0, 0, 0);
2273
+ white-space: nowrap;
2274
+ border: 0;
2275
+ }
2276
+
2277
+ /* --- Help Text & Error Messages --- */
2278
+
2279
+ .field__help-text {
2280
+ font-size: var(--hx-font-size-xs, 0.75rem);
2281
+ color: var(--hx-color-neutral-500, #6c757d);
2282
+ line-height: var(--hx-line-height-normal, 1.5);
2283
+ }
2284
+
2285
+ .field__error {
2286
+ font-size: var(--hx-font-size-xs, 0.75rem);
2287
+ color: var(--hx-input-error-color, var(--hx-color-error-text, #b91c1c));
2288
+ line-height: var(--hx-line-height-normal, 1.5);
2289
+ }
2290
+ /* ── hx-time-picker ── */
2291
+ :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))}
2292
+ /* ── hx-toggle-button ── */
2293
+ :host {
2294
+ display: inline-block;
2295
+ }
2296
+
2297
+ :host([disabled]) {
2298
+ pointer-events: none;
2299
+ opacity: var(--hx-opacity-disabled, 0.5);
2300
+ }
2301
+
2302
+ /* ─── Base Button ─── */
2303
+
2304
+ .button {
2305
+ display: inline-flex;
2306
+ align-items: center;
2307
+ justify-content: center;
2308
+ gap: var(--hx-space-2, 0.5rem);
2309
+ border: var(--hx-border-width-thin, 1px) solid var(--hx-toggle-button-border-color, transparent);
2310
+ border-radius: var(--hx-toggle-button-border-radius, var(--hx-border-radius-md, 0.375rem));
2311
+ background-color: var(--hx-toggle-button-bg, var(--hx-color-primary-500, #2563eb));
2312
+ color: var(--hx-toggle-button-color, var(--hx-color-neutral-0, #ffffff));
2313
+ font-family: var(--hx-toggle-button-font-family, var(--hx-font-family-sans, sans-serif));
2314
+ font-weight: var(--hx-toggle-button-font-weight, var(--hx-font-weight-semibold, 600));
2315
+ line-height: var(--hx-line-height-tight, 1.25);
2316
+ cursor: pointer;
2317
+ transition:
2318
+ background-color var(--hx-transition-fast, 150ms ease),
2319
+ color var(--hx-transition-fast, 150ms ease),
2320
+ border-color var(--hx-transition-fast, 150ms ease),
2321
+ box-shadow var(--hx-transition-fast, 150ms ease);
2322
+ text-decoration: none;
2323
+ white-space: nowrap;
2324
+ user-select: none;
2325
+ -webkit-user-select: none;
2326
+ }
2327
+
2328
+ .button:focus-visible {
2329
+ outline: var(--hx-focus-ring-width, 2px) solid
2330
+ var(
2331
+ --hx-toggle-button-focus-ring-color,
2332
+ var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
2333
+ );
2334
+ outline-offset: var(--hx-focus-ring-offset, 2px);
2335
+ }
2336
+
2337
+ .button:hover {
2338
+ filter: brightness(var(--hx-filter-brightness-hover, 0.9));
2339
+ }
2340
+
2341
+ .button:active {
2342
+ filter: brightness(var(--hx-filter-brightness-active, 0.8));
2343
+ }
2344
+
2345
+ /* ─── Size Variants ─── */
2346
+
2347
+ .button--sm {
2348
+ padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
2349
+ font-size: var(--hx-font-size-sm, 0.875rem);
2350
+ min-height: var(--hx-size-8, 2rem);
2351
+ }
2352
+
2353
+ .button--md {
2354
+ padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
2355
+ font-size: var(--hx-font-size-md, 1rem);
2356
+ min-height: var(--hx-size-10, 2.5rem);
2357
+ }
2358
+
2359
+ .button--lg {
2360
+ padding: var(--hx-space-3, 0.75rem) var(--hx-space-6, 1.5rem);
2361
+ font-size: var(--hx-font-size-lg, 1.125rem);
2362
+ min-height: var(--hx-size-12, 3rem);
2363
+ }
2364
+
2365
+ /* ─── Style Variants ─── */
2366
+
2367
+ .button--primary {
2368
+ --hx-toggle-button-bg: var(--hx-color-primary-500, #2563eb);
2369
+ --hx-toggle-button-color: var(--hx-color-neutral-0, #ffffff);
2370
+ --hx-toggle-button-border-color: transparent;
2371
+ }
2372
+
2373
+ .button--secondary {
2374
+ --hx-toggle-button-bg: transparent;
2375
+ --hx-toggle-button-color: var(--hx-color-primary-500, #2563eb);
2376
+ --hx-toggle-button-border-color: var(--hx-color-primary-500, #2563eb);
2377
+ }
2378
+
2379
+ .button--secondary:hover {
2380
+ --hx-toggle-button-bg: var(--hx-color-primary-50, #eff6ff);
2381
+ }
2382
+
2383
+ .button--tertiary {
2384
+ --hx-toggle-button-bg: var(--hx-color-neutral-100, #f1f5f9);
2385
+ --hx-toggle-button-color: var(--hx-color-neutral-900, #0f172a);
2386
+ --hx-toggle-button-border-color: transparent;
2387
+ }
2388
+
2389
+ .button--tertiary:hover {
2390
+ --hx-toggle-button-bg: var(--hx-color-neutral-200, #e2e8f0);
2391
+ }
2392
+
2393
+ .button--ghost {
2394
+ --hx-toggle-button-bg: transparent;
2395
+ --hx-toggle-button-color: var(--hx-color-primary-500, #2563eb);
2396
+ --hx-toggle-button-border-color: transparent;
2397
+ }
2398
+
2399
+ .button--ghost:hover {
2400
+ --hx-toggle-button-bg: var(--hx-color-neutral-100, #f1f5f9);
2401
+ }
2402
+
2403
+ .button--outline {
2404
+ --hx-toggle-button-bg: transparent;
2405
+ --hx-toggle-button-color: var(--hx-color-neutral-900, #0f172a);
2406
+ --hx-toggle-button-border-color: var(--hx-color-neutral-300, #cbd5e1);
2407
+ }
2408
+
2409
+ .button--outline:hover {
2410
+ --hx-toggle-button-bg: var(--hx-color-neutral-50, #f8fafc);
2411
+ }
2412
+
2413
+ /* ─── Pressed State ─── */
2414
+
2415
+ /*
2416
+ * Primary: already uses solid primary bg; pressed deepens to primary-700
2417
+ * to give clear visual feedback without introducing a new color.
2418
+ */
2419
+ .button--primary.button--pressed {
2420
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-700, #1d4ed8));
2421
+ --hx-toggle-button-color: var(
2422
+ --hx-toggle-button-pressed-color,
2423
+ var(--hx-color-neutral-0, #ffffff)
2424
+ );
2425
+ --hx-toggle-button-border-color: transparent;
2426
+ }
2427
+
2428
+ /*
2429
+ * Secondary: unpressed is outlined/transparent; pressed fills with primary bg
2430
+ * so the state change is immediately legible.
2431
+ */
2432
+ .button--secondary.button--pressed {
2433
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-500, #2563eb));
2434
+ --hx-toggle-button-color: var(
2435
+ --hx-toggle-button-pressed-color,
2436
+ var(--hx-color-neutral-0, #ffffff)
2437
+ );
2438
+ --hx-toggle-button-border-color: var(--hx-color-primary-500, #2563eb);
2439
+ }
2440
+
2441
+ /* Tertiary pressed: use primary-100 bg + primary-700 text + border for WCAG 3:1 non-text contrast. */
2442
+ .button--tertiary.button--pressed {
2443
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
2444
+ --hx-toggle-button-color: var(
2445
+ --hx-toggle-button-pressed-color,
2446
+ var(--hx-color-primary-700, #1d4ed8)
2447
+ );
2448
+ --hx-toggle-button-border-color: var(--hx-color-primary-400, #60a5fa);
2449
+ box-shadow: inset 0 0 0 1px var(--hx-color-primary-400, #60a5fa);
2450
+ }
2451
+
2452
+ /* Ghost pressed: subtle neutral fill, matching hover behavior as a baseline. */
2453
+ .button--ghost.button--pressed {
2454
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-primary-100, #dbeafe));
2455
+ --hx-toggle-button-color: var(
2456
+ --hx-toggle-button-pressed-color,
2457
+ var(--hx-color-primary-700, #1d4ed8)
2458
+ );
2459
+ --hx-toggle-button-border-color: transparent;
2460
+ }
2461
+
2462
+ /* Outline pressed: fills with a neutral tint, darkens the border, and adds an inset shadow for WCAG 3:1 non-text contrast. */
2463
+ .button--outline.button--pressed {
2464
+ --hx-toggle-button-bg: var(--hx-toggle-button-pressed-bg, var(--hx-color-neutral-100, #f1f5f9));
2465
+ --hx-toggle-button-color: var(
2466
+ --hx-toggle-button-pressed-color,
2467
+ var(--hx-color-neutral-900, #0f172a)
2468
+ );
2469
+ --hx-toggle-button-border-color: var(--hx-color-neutral-500, #64748b);
2470
+ box-shadow: inset 0 0 0 1px var(--hx-color-neutral-500, #64748b);
2471
+ }
2472
+
2473
+ /* ─── Disabled ─── */
2474
+
2475
+ .button[disabled] {
2476
+ cursor: not-allowed;
2477
+ }
2478
+
2479
+ /* ─── Prefix / Suffix / Label ─── */
2480
+
2481
+ .button__prefix,
2482
+ .button__suffix {
2483
+ display: inline-flex;
2484
+ align-items: center;
2485
+ flex-shrink: 0;
2486
+ }
2487
+
2488
+ .button__label {
2489
+ flex: 1 1 auto;
2490
+ }
2491
+
2492
+ /* ─── Reduced Motion ─── */
2493
+
2494
+ @media (prefers-reduced-motion: reduce) {
2495
+ .button {
2496
+ transition: none;
2497
+ }
2498
+ }