@helixui/library 1.0.0 → 1.1.1

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 (483) hide show
  1. package/custom-elements.json +1901 -8476
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts +27 -0
  3. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion.d.ts +3 -0
  5. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/index.js +1 -1
  7. package/dist/components/hx-action-bar/hx-action-bar.d.ts +13 -3
  8. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  9. package/dist/components/hx-action-bar/index.js +1 -1
  10. package/dist/components/hx-alert/hx-alert.d.ts +30 -0
  11. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  12. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  13. package/dist/components/hx-alert/index.js +1 -1
  14. package/dist/components/hx-avatar/hx-avatar.d.ts +8 -1
  15. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  16. package/dist/components/hx-avatar/index.js +1 -1
  17. package/dist/components/hx-badge/hx-badge.d.ts +10 -1
  18. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  19. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  20. package/dist/components/hx-badge/index.js +1 -1
  21. package/dist/components/hx-banner/hx-banner.d.ts +17 -0
  22. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  23. package/dist/components/hx-banner/index.js +1 -1
  24. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  25. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +17 -2
  26. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  27. package/dist/components/hx-breadcrumb/index.js +1 -1
  28. package/dist/components/hx-button/hx-button.d.ts +6 -0
  29. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  30. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  31. package/dist/components/hx-button/index.js +1 -1
  32. package/dist/components/hx-card/hx-card.d.ts +8 -0
  33. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  34. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  35. package/dist/components/hx-card/index.js +1 -1
  36. package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -0
  37. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  38. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts +2 -0
  39. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -0
  40. package/dist/components/hx-carousel/hx-carousel.d.ts +27 -0
  41. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  42. package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
  43. package/dist/components/hx-carousel/index.js +1 -1
  44. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -2
  45. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  46. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  47. package/dist/components/hx-checkbox/index.js +1 -1
  48. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +20 -4
  49. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  50. package/dist/components/hx-checkbox-group/index.js +1 -1
  51. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +10 -0
  52. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  53. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  54. package/dist/components/hx-code-snippet/index.js +1 -1
  55. package/dist/components/hx-color-picker/hx-color-picker.d.ts +114 -12
  56. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  57. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  58. package/dist/components/hx-color-picker/index.js +1 -1
  59. package/dist/components/hx-combobox/hx-combobox.d.ts +37 -2
  60. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  61. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  62. package/dist/components/hx-combobox/index.js +1 -1
  63. package/dist/components/hx-copy-button/hx-copy-button.d.ts +11 -0
  64. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  65. package/dist/components/hx-copy-button/index.js +1 -1
  66. package/dist/components/hx-counter/hx-counter.d.ts +12 -3
  67. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  68. package/dist/components/hx-counter/index.js +1 -1
  69. package/dist/components/hx-data-table/hx-data-table.d.ts +27 -2
  70. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  71. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  72. package/dist/components/hx-data-table/index.js +1 -1
  73. package/dist/components/hx-date-picker/hx-date-picker.d.ts +42 -3
  74. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  75. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  76. package/dist/components/hx-date-picker/index.js +1 -1
  77. package/dist/components/hx-dialog/hx-dialog.d.ts +31 -4
  78. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  79. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  80. package/dist/components/hx-dialog/index.js +1 -1
  81. package/dist/components/hx-divider/hx-divider.d.ts +4 -1
  82. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  83. package/dist/components/hx-divider/index.js +1 -1
  84. package/dist/components/hx-drawer/hx-drawer.d.ts +25 -3
  85. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  86. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  87. package/dist/components/hx-drawer/index.js +1 -1
  88. package/dist/components/hx-dropdown/hx-dropdown.d.ts +35 -7
  89. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  90. package/dist/components/hx-dropdown/index.js +1 -1
  91. package/dist/components/hx-field/hx-field.d.ts +10 -2
  92. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  93. package/dist/components/hx-field/index.js +1 -1
  94. package/dist/components/hx-file-upload/hx-file-upload.d.ts +39 -2
  95. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  96. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  97. package/dist/components/hx-file-upload/index.js +1 -1
  98. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  99. package/dist/components/hx-form/index.js +1 -1
  100. package/dist/components/hx-format-date/hx-format-date.d.ts +8 -0
  101. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  102. package/dist/components/hx-format-date/index.js +1 -1
  103. package/dist/components/hx-grid/hx-grid.d.ts +9 -3
  104. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  105. package/dist/components/hx-grid/index.js +1 -1
  106. package/dist/components/hx-help-text/index.js +1 -1
  107. package/dist/components/hx-icon/hx-icon.d.ts +10 -2
  108. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  109. package/dist/components/hx-icon/index.js +1 -1
  110. package/dist/components/hx-icon-button/hx-icon-button.d.ts +11 -0
  111. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  112. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  113. package/dist/components/hx-icon-button/index.js +1 -1
  114. package/dist/components/hx-image/hx-image.d.ts +8 -0
  115. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  116. package/dist/components/hx-image/index.js +1 -1
  117. package/dist/components/hx-link/hx-link.d.ts +3 -0
  118. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  119. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  120. package/dist/components/hx-link/index.js +1 -1
  121. package/dist/components/hx-list/hx-list-item.d.ts +8 -2
  122. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  123. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  124. package/dist/components/hx-list/hx-list.d.ts +6 -2
  125. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  126. package/dist/components/hx-list/index.js +1 -1
  127. package/dist/components/hx-menu/hx-menu-item.d.ts +12 -0
  128. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  129. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  130. package/dist/components/hx-menu/hx-menu.d.ts +11 -1
  131. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  132. package/dist/components/hx-menu/index.js +1 -1
  133. package/dist/components/hx-meter/hx-meter.d.ts +9 -0
  134. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  135. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  136. package/dist/components/hx-meter/index.js +1 -1
  137. package/dist/components/hx-nav/hx-nav.d.ts +15 -0
  138. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  139. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  140. package/dist/components/hx-nav/index.js +1 -1
  141. package/dist/components/hx-number-input/hx-number-input.d.ts +36 -1
  142. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  143. package/dist/components/hx-number-input/index.js +1 -1
  144. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +15 -0
  145. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  146. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  147. package/dist/components/hx-overflow-menu/index.js +1 -1
  148. package/dist/components/hx-pagination/hx-pagination.d.ts +24 -0
  149. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  150. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  151. package/dist/components/hx-pagination/index.js +1 -1
  152. package/dist/components/hx-popover/hx-popover.d.ts +94 -11
  153. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  154. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  155. package/dist/components/hx-popover/index.js +1 -1
  156. package/dist/components/hx-popup/hx-popup.d.ts +8 -0
  157. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  158. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  159. package/dist/components/hx-popup/index.js +1 -1
  160. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +10 -2
  161. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  162. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  163. package/dist/components/hx-progress-bar/index.js +1 -1
  164. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +8 -2
  165. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  166. package/dist/components/hx-progress-ring/index.js +1 -1
  167. package/dist/components/hx-prose/hx-prose.d.ts +5 -3
  168. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  169. package/dist/components/hx-prose/index.js +1 -1
  170. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  171. package/dist/components/hx-radio-group/hx-radio.d.ts +4 -2
  172. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  173. package/dist/components/hx-radio-group/index.js +1 -1
  174. package/dist/components/hx-rating/hx-rating.d.ts +54 -2
  175. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  176. package/dist/components/hx-rating/index.js +1 -1
  177. package/dist/components/hx-select/hx-select.d.ts +22 -2
  178. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  179. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  180. package/dist/components/hx-select/index.js +1 -1
  181. package/dist/components/hx-side-nav/hx-nav-item.d.ts +6 -0
  182. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  183. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  184. package/dist/components/hx-side-nav/hx-side-nav.d.ts +6 -1
  185. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  186. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  187. package/dist/components/hx-side-nav/index.js +1 -1
  188. package/dist/components/hx-slider/hx-slider.d.ts +22 -1
  189. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  190. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  191. package/dist/components/hx-slider/index.js +1 -1
  192. package/dist/components/hx-spinner/hx-spinner.d.ts +3 -1
  193. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  194. package/dist/components/hx-spinner/index.js +1 -1
  195. package/dist/components/hx-split-button/hx-split-button.d.ts +12 -0
  196. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  197. package/dist/components/hx-split-button/index.js +1 -1
  198. package/dist/components/hx-split-panel/hx-split-panel.d.ts +72 -13
  199. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  200. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  201. package/dist/components/hx-split-panel/index.js +1 -1
  202. package/dist/components/hx-stack/index.js +1 -1
  203. package/dist/components/hx-stat/hx-stat.d.ts +5 -1
  204. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  205. package/dist/components/hx-stat/index.js +1 -1
  206. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +13 -12
  207. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  208. package/dist/components/hx-status-indicator/index.js +1 -1
  209. package/dist/components/hx-steps/hx-step.d.ts +7 -9
  210. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  211. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  212. package/dist/components/hx-steps/hx-steps.d.ts +3 -3
  213. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  214. package/dist/components/hx-steps/index.js +1 -1
  215. package/dist/components/hx-switch/hx-switch.d.ts +21 -1
  216. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  217. package/dist/components/hx-switch/index.js +1 -1
  218. package/dist/components/hx-table/hx-table.d.ts +7 -2
  219. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  220. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  221. package/dist/components/hx-table/hx-th.d.ts +4 -0
  222. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  223. package/dist/components/hx-table/index.js +1 -1
  224. package/dist/components/hx-tabs/hx-tab.d.ts +3 -0
  225. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  226. package/dist/components/hx-tabs/hx-tabs.d.ts +6 -0
  227. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  228. package/dist/components/hx-tabs/index.js +1 -1
  229. package/dist/components/hx-tag/hx-tag.d.ts +4 -0
  230. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  231. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  232. package/dist/components/hx-tag/index.js +1 -1
  233. package/dist/components/hx-text/hx-text.d.ts +1 -0
  234. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  235. package/dist/components/hx-text/index.js +1 -1
  236. package/dist/components/hx-text-input/hx-text-input.d.ts +9 -4
  237. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  238. package/dist/components/hx-text-input/index.js +1 -1
  239. package/dist/components/hx-textarea/hx-textarea.d.ts +9 -3
  240. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  241. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  242. package/dist/components/hx-textarea/index.js +1 -1
  243. package/dist/components/hx-theme/hx-theme.d.ts +2 -2
  244. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  245. package/dist/components/hx-time-picker/hx-time-picker.d.ts +102 -22
  246. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  247. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  248. package/dist/components/hx-time-picker/index.js +1 -1
  249. package/dist/components/hx-toast/hx-toast.d.ts +18 -0
  250. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  251. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  252. package/dist/components/hx-toast/index.js +1 -1
  253. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +23 -0
  254. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  255. package/dist/components/hx-toggle-button/index.js +1 -1
  256. package/dist/components/hx-tooltip/hx-tooltip.d.ts +57 -0
  257. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  258. package/dist/components/hx-tooltip/index.js +1 -1
  259. package/dist/components/hx-top-nav/hx-top-nav.d.ts +4 -0
  260. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  261. package/dist/components/hx-top-nav/index.js +1 -1
  262. package/dist/components/hx-tree-view/hx-tree-item.d.ts +13 -1
  263. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  264. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  265. package/dist/components/hx-tree-view/hx-tree-view.d.ts +12 -0
  266. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  267. package/dist/components/hx-tree-view/index.js +1 -1
  268. package/dist/index.js +70 -70
  269. package/dist/shared/{hx-accordion-Cyswa6J3.js → hx-accordion-D1kFhdeQ.js} +68 -39
  270. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +1 -0
  271. package/dist/shared/{hx-action-bar-we_WJety.js → hx-action-bar-D4bulGQP.js} +38 -31
  272. package/dist/shared/hx-action-bar-D4bulGQP.js.map +1 -0
  273. package/dist/shared/{hx-alert-Cg-zxRiU.js → hx-alert-K5F8KeqI.js} +123 -40
  274. package/dist/shared/hx-alert-K5F8KeqI.js.map +1 -0
  275. package/dist/shared/{hx-avatar-Cep6Urm3.js → hx-avatar-Cun-O99h.js} +5 -1
  276. package/dist/shared/hx-avatar-Cun-O99h.js.map +1 -0
  277. package/dist/shared/{hx-badge-CjT0d8NK.js → hx-badge-CsFd2xtw.js} +83 -47
  278. package/dist/shared/hx-badge-CsFd2xtw.js.map +1 -0
  279. package/dist/shared/{hx-banner-lxAIJ2kR.js → hx-banner-BTV-X2xF.js} +58 -42
  280. package/dist/shared/hx-banner-BTV-X2xF.js.map +1 -0
  281. package/dist/shared/{hx-breadcrumb-item-C0rz0fzV.js → hx-breadcrumb-item-4IwaLgaO.js} +39 -23
  282. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +1 -0
  283. package/dist/shared/{hx-button-Cbhqpm5i.js → hx-button-7k-KeCYU.js} +29 -15
  284. package/dist/shared/hx-button-7k-KeCYU.js.map +1 -0
  285. package/dist/shared/{hx-card-Bg4W4uXC.js → hx-card-0hT3G5hi.js} +24 -13
  286. package/dist/shared/hx-card-0hT3G5hi.js.map +1 -0
  287. package/dist/shared/{hx-carousel-item-BKpmFbUT.js → hx-carousel-item-DgeYyYZJ.js} +138 -107
  288. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +1 -0
  289. package/dist/shared/{hx-checkbox-BMayOpAM.js → hx-checkbox-BvjO-O41.js} +15 -6
  290. package/dist/shared/hx-checkbox-BvjO-O41.js.map +1 -0
  291. package/dist/shared/{hx-checkbox-group-ydUdV9Sx.js → hx-checkbox-group-Z5VvWzcj.js} +50 -37
  292. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +1 -0
  293. package/dist/shared/{hx-code-snippet-B4hV7rWG.js → hx-code-snippet-DqzPkH4K.js} +27 -11
  294. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +1 -0
  295. package/dist/shared/hx-color-picker-Da8z6AlQ.js +596 -0
  296. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +1 -0
  297. package/dist/shared/{hx-combobox-BBi3izKJ.js → hx-combobox-CivfelTS.js} +67 -430
  298. package/dist/shared/hx-combobox-CivfelTS.js.map +1 -0
  299. package/dist/shared/{hx-copy-button-CLBA31to.js → hx-copy-button--0dymSvw.js} +9 -1
  300. package/dist/shared/{hx-copy-button-CLBA31to.js.map → hx-copy-button--0dymSvw.js.map} +1 -1
  301. package/dist/shared/{hx-counter-D-1NXzGs.js → hx-counter-Duf00H7p.js} +58 -49
  302. package/dist/shared/hx-counter-Duf00H7p.js.map +1 -0
  303. package/dist/shared/{hx-data-table-DNiDVWR2.js → hx-data-table-DujB9hSE.js} +173 -129
  304. package/dist/shared/hx-data-table-DujB9hSE.js.map +1 -0
  305. package/dist/shared/{hx-date-picker-D7yCK0nk.js → hx-date-picker-C8d2HtRV.js} +142 -505
  306. package/dist/shared/hx-date-picker-C8d2HtRV.js.map +1 -0
  307. package/dist/shared/{hx-dialog-Z7Ou_AZ9.js → hx-dialog-DkUSnVgw.js} +76 -49
  308. package/dist/shared/hx-dialog-DkUSnVgw.js.map +1 -0
  309. package/dist/shared/{hx-divider-XgWIz4Mr.js → hx-divider-DNNs4e8q.js} +2 -1
  310. package/dist/shared/{hx-divider-XgWIz4Mr.js.map → hx-divider-DNNs4e8q.js.map} +1 -1
  311. package/dist/shared/{hx-drawer-Dk-_xzy0.js → hx-drawer-CJcRZcns.js} +102 -66
  312. package/dist/shared/hx-drawer-CJcRZcns.js.map +1 -0
  313. package/dist/shared/{hx-dropdown-DnjLnkTj.js → hx-dropdown-Bo0KTM1A.js} +56 -47
  314. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +1 -0
  315. package/dist/shared/{hx-field-CDP8EXuj.js → hx-field-3MmzJ4kZ.js} +21 -13
  316. package/dist/shared/hx-field-3MmzJ4kZ.js.map +1 -0
  317. package/dist/shared/{hx-file-upload-CUORgnKc.js → hx-file-upload-ByjAgfNy.js} +131 -86
  318. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +1 -0
  319. package/dist/shared/hx-form-BpS6v3Iu.js +258 -0
  320. package/dist/shared/hx-form-BpS6v3Iu.js.map +1 -0
  321. package/dist/shared/{hx-format-date-BsVr8gpD.js → hx-format-date-BdnWV2kX.js} +7 -1
  322. package/dist/shared/hx-format-date-BdnWV2kX.js.map +1 -0
  323. package/dist/shared/{hx-grid-BsDBCTbt.js → hx-grid-gEjuF0cR.js} +25 -18
  324. package/dist/shared/hx-grid-gEjuF0cR.js.map +1 -0
  325. package/dist/shared/{hx-help-text-DaOPN1iB.js → hx-help-text-BAcEGRUE.js} +2 -2
  326. package/dist/shared/{hx-help-text-DaOPN1iB.js.map → hx-help-text-BAcEGRUE.js.map} +1 -1
  327. package/dist/shared/{hx-icon--xsJztDh.js → hx-icon-CP6OnLoM.js} +6 -1
  328. package/dist/shared/hx-icon-CP6OnLoM.js.map +1 -0
  329. package/dist/shared/{hx-icon-button-C83bCR0K.js → hx-icon-button-DzH_bRtC.js} +53 -29
  330. package/dist/shared/hx-icon-button-DzH_bRtC.js.map +1 -0
  331. package/dist/shared/{hx-image-xyb_tHCR.js → hx-image-C6pGiI6c.js} +6 -1
  332. package/dist/shared/hx-image-C6pGiI6c.js.map +1 -0
  333. package/dist/shared/{hx-link-DfNy_UU8.js → hx-link-Tmk_YPvW.js} +46 -37
  334. package/dist/shared/hx-link-Tmk_YPvW.js.map +1 -0
  335. package/dist/shared/{hx-list-CdRNgeoP.js → hx-list-DwInEX2H.js} +63 -37
  336. package/dist/shared/hx-list-DwInEX2H.js.map +1 -0
  337. package/dist/shared/{hx-menu-divider-11Dp2VfM.js → hx-menu-divider-DR4G_rqw.js} +93 -56
  338. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +1 -0
  339. package/dist/shared/hx-meter-uXkTZq-W.js +238 -0
  340. package/dist/shared/hx-meter-uXkTZq-W.js.map +1 -0
  341. package/dist/shared/{hx-nav-DSpwWYUX.js → hx-nav-3JsN2Oak.js} +94 -75
  342. package/dist/shared/hx-nav-3JsN2Oak.js.map +1 -0
  343. package/dist/shared/{hx-nav-item-D54-5eUM.js → hx-nav-item-D3EJatzc.js} +40 -16
  344. package/dist/shared/hx-nav-item-D3EJatzc.js.map +1 -0
  345. package/dist/shared/{hx-number-input-BP6TIA92.js → hx-number-input-CAAibZ8X.js} +35 -7
  346. package/dist/shared/hx-number-input-CAAibZ8X.js.map +1 -0
  347. package/dist/shared/{hx-overflow-menu-C7k5wlZy.js → hx-overflow-menu-2kgOJ_ht.js} +86 -66
  348. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +1 -0
  349. package/dist/shared/{hx-pagination-BQ0cLTuB.js → hx-pagination-DBs-vmSv.js} +127 -103
  350. package/dist/shared/hx-pagination-DBs-vmSv.js.map +1 -0
  351. package/dist/shared/hx-popover-DxE67miP.js +274 -0
  352. package/dist/shared/hx-popover-DxE67miP.js.map +1 -0
  353. package/dist/shared/{hx-popup-CYf9Q5sj.js → hx-popup-Dg6n_PbY.js} +13 -1
  354. package/dist/shared/hx-popup-Dg6n_PbY.js.map +1 -0
  355. package/dist/shared/{hx-progress-bar-C_mdPVF-.js → hx-progress-bar-Dm_EHyng.js} +101 -73
  356. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +1 -0
  357. package/dist/shared/{hx-progress-ring-BHJBaXNk.js → hx-progress-ring-DpxBDD5d.js} +35 -28
  358. package/dist/shared/hx-progress-ring-DpxBDD5d.js.map +1 -0
  359. package/dist/shared/hx-prose-Ml_L2zje.js +59 -0
  360. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -0
  361. package/dist/shared/{hx-radio-Bqyi8re3.js → hx-radio-BywgVSEu.js} +16 -15
  362. package/dist/shared/hx-radio-BywgVSEu.js.map +1 -0
  363. package/dist/shared/{hx-rating-Y_t7Z4qb.js → hx-rating-CUWBQ0fZ.js} +131 -64
  364. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +1 -0
  365. package/dist/shared/{hx-select-BBae2LqN.js → hx-select-BwDwxk-M.js} +110 -171
  366. package/dist/shared/hx-select-BwDwxk-M.js.map +1 -0
  367. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  368. package/dist/shared/{hx-slider-CpnxH2UP.js → hx-slider-D_0EKJyk.js} +25 -8
  369. package/dist/shared/hx-slider-D_0EKJyk.js.map +1 -0
  370. package/dist/shared/{hx-spinner-BOApJ-g9.js → hx-spinner-DMn4SChS.js} +35 -28
  371. package/dist/shared/hx-spinner-DMn4SChS.js.map +1 -0
  372. package/dist/shared/{hx-split-button-BvwoG8h2.js → hx-split-button-CypgLXw1.js} +23 -12
  373. package/dist/shared/{hx-split-button-BvwoG8h2.js.map → hx-split-button-CypgLXw1.js.map} +1 -1
  374. package/dist/shared/{hx-split-panel-Cxkeauwe.js → hx-split-panel-BPMWKPGu.js} +74 -42
  375. package/dist/shared/hx-split-panel-BPMWKPGu.js.map +1 -0
  376. package/dist/shared/{hx-stack-CfoW7jU7.js → hx-stack-BStY1RmV.js} +29 -29
  377. package/dist/shared/hx-stack-BStY1RmV.js.map +1 -0
  378. package/dist/shared/{hx-stat-C2wfph8W.js → hx-stat-CHntLHJM.js} +18 -10
  379. package/dist/shared/hx-stat-CHntLHJM.js.map +1 -0
  380. package/dist/shared/{hx-status-indicator-oYWOkWlD.js → hx-status-indicator-C1BwEvUw.js} +15 -12
  381. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +1 -0
  382. package/dist/shared/{hx-step-DYoIumpR.js → hx-step-BIVWSPxd.js} +45 -33
  383. package/dist/shared/hx-step-BIVWSPxd.js.map +1 -0
  384. package/dist/shared/{hx-switch-DkKchcuP.js → hx-switch-BgX8kuWt.js} +12 -3
  385. package/dist/shared/hx-switch-BgX8kuWt.js.map +1 -0
  386. package/dist/shared/{hx-tab-panel-CHB0u1zF.js → hx-tab-panel-DhOq67jj.js} +65 -53
  387. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +1 -0
  388. package/dist/shared/{hx-tag-SJJtMlOS.js → hx-tag-CzOTDcXI.js} +81 -55
  389. package/dist/shared/hx-tag-CzOTDcXI.js.map +1 -0
  390. package/dist/shared/{hx-td-CVwCGBYf.js → hx-td-h6oeW6YC.js} +43 -41
  391. package/dist/shared/hx-td-h6oeW6YC.js.map +1 -0
  392. package/dist/shared/{hx-text-NjKoQATI.js → hx-text-DTXjiviE.js} +2 -1
  393. package/dist/shared/{hx-text-NjKoQATI.js.map → hx-text-DTXjiviE.js.map} +1 -1
  394. package/dist/shared/{hx-text-input-BrCjo4fJ.js → hx-text-input-CqEdDHMU.js} +87 -70
  395. package/dist/shared/hx-text-input-CqEdDHMU.js.map +1 -0
  396. package/dist/shared/{hx-textarea-BsQdB1Rk.js → hx-textarea-BgX7rxyo.js} +21 -12
  397. package/dist/shared/hx-textarea-BgX7rxyo.js.map +1 -0
  398. package/dist/shared/hx-theme-6GDoUG8j.js.map +1 -1
  399. package/dist/shared/{hx-time-picker-DRRAFuVd.js → hx-time-picker-DmLu7WUC.js} +77 -274
  400. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +1 -0
  401. package/dist/shared/{hx-toggle-button-D4F1soEM.js → hx-toggle-button-D1jpDvSA.js} +75 -38
  402. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +1 -0
  403. package/dist/shared/{hx-tooltip-Bk1iQRHs.js → hx-tooltip-kh7QFPKu.js} +66 -49
  404. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +1 -0
  405. package/dist/shared/{hx-top-nav-DzW7XLv-.js → hx-top-nav-DYlnzDaU.js} +4 -2
  406. package/dist/shared/{hx-top-nav-DzW7XLv-.js.map → hx-top-nav-DYlnzDaU.js.map} +1 -1
  407. package/dist/shared/{hx-tree-item-DdH6RbMs.js → hx-tree-item-BP6UF_H1.js} +137 -101
  408. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +1 -0
  409. package/dist/shared/toast-factory-DTy-qN8r.js +521 -0
  410. package/dist/shared/toast-factory-DTy-qN8r.js.map +1 -0
  411. package/dist/styles/shared-field.styles.d.ts +6 -0
  412. package/dist/styles/shared-field.styles.d.ts.map +1 -0
  413. package/package.json +2 -5
  414. package/dist/shared/hx-accordion-Cyswa6J3.js.map +0 -1
  415. package/dist/shared/hx-action-bar-we_WJety.js.map +0 -1
  416. package/dist/shared/hx-alert-Cg-zxRiU.js.map +0 -1
  417. package/dist/shared/hx-avatar-Cep6Urm3.js.map +0 -1
  418. package/dist/shared/hx-badge-CjT0d8NK.js.map +0 -1
  419. package/dist/shared/hx-banner-lxAIJ2kR.js.map +0 -1
  420. package/dist/shared/hx-breadcrumb-item-C0rz0fzV.js.map +0 -1
  421. package/dist/shared/hx-button-Cbhqpm5i.js.map +0 -1
  422. package/dist/shared/hx-card-Bg4W4uXC.js.map +0 -1
  423. package/dist/shared/hx-carousel-item-BKpmFbUT.js.map +0 -1
  424. package/dist/shared/hx-checkbox-BMayOpAM.js.map +0 -1
  425. package/dist/shared/hx-checkbox-group-ydUdV9Sx.js.map +0 -1
  426. package/dist/shared/hx-code-snippet-B4hV7rWG.js.map +0 -1
  427. package/dist/shared/hx-color-picker-BvfJ_h16.js +0 -803
  428. package/dist/shared/hx-color-picker-BvfJ_h16.js.map +0 -1
  429. package/dist/shared/hx-combobox-BBi3izKJ.js.map +0 -1
  430. package/dist/shared/hx-counter-D-1NXzGs.js.map +0 -1
  431. package/dist/shared/hx-data-table-DNiDVWR2.js.map +0 -1
  432. package/dist/shared/hx-date-picker-D7yCK0nk.js.map +0 -1
  433. package/dist/shared/hx-dialog-Z7Ou_AZ9.js.map +0 -1
  434. package/dist/shared/hx-drawer-Dk-_xzy0.js.map +0 -1
  435. package/dist/shared/hx-dropdown-DnjLnkTj.js.map +0 -1
  436. package/dist/shared/hx-field-CDP8EXuj.js.map +0 -1
  437. package/dist/shared/hx-file-upload-CUORgnKc.js.map +0 -1
  438. package/dist/shared/hx-form-BFv_N1dm.js +0 -1272
  439. package/dist/shared/hx-form-BFv_N1dm.js.map +0 -1
  440. package/dist/shared/hx-format-date-BsVr8gpD.js.map +0 -1
  441. package/dist/shared/hx-grid-BsDBCTbt.js.map +0 -1
  442. package/dist/shared/hx-icon--xsJztDh.js.map +0 -1
  443. package/dist/shared/hx-icon-button-C83bCR0K.js.map +0 -1
  444. package/dist/shared/hx-image-xyb_tHCR.js.map +0 -1
  445. package/dist/shared/hx-link-DfNy_UU8.js.map +0 -1
  446. package/dist/shared/hx-list-CdRNgeoP.js.map +0 -1
  447. package/dist/shared/hx-menu-divider-11Dp2VfM.js.map +0 -1
  448. package/dist/shared/hx-meter-UinDQjl6.js +0 -190
  449. package/dist/shared/hx-meter-UinDQjl6.js.map +0 -1
  450. package/dist/shared/hx-nav-DSpwWYUX.js.map +0 -1
  451. package/dist/shared/hx-nav-item-D54-5eUM.js.map +0 -1
  452. package/dist/shared/hx-number-input-BP6TIA92.js.map +0 -1
  453. package/dist/shared/hx-overflow-menu-C7k5wlZy.js.map +0 -1
  454. package/dist/shared/hx-pagination-BQ0cLTuB.js.map +0 -1
  455. package/dist/shared/hx-popover-BQsgrJCW.js +0 -226
  456. package/dist/shared/hx-popover-BQsgrJCW.js.map +0 -1
  457. package/dist/shared/hx-popup-CYf9Q5sj.js.map +0 -1
  458. package/dist/shared/hx-progress-bar-C_mdPVF-.js.map +0 -1
  459. package/dist/shared/hx-progress-ring-BHJBaXNk.js.map +0 -1
  460. package/dist/shared/hx-prose-DZh2KrMb.js +0 -876
  461. package/dist/shared/hx-prose-DZh2KrMb.js.map +0 -1
  462. package/dist/shared/hx-radio-Bqyi8re3.js.map +0 -1
  463. package/dist/shared/hx-rating-Y_t7Z4qb.js.map +0 -1
  464. package/dist/shared/hx-select-BBae2LqN.js.map +0 -1
  465. package/dist/shared/hx-slider-CpnxH2UP.js.map +0 -1
  466. package/dist/shared/hx-spinner-BOApJ-g9.js.map +0 -1
  467. package/dist/shared/hx-split-panel-Cxkeauwe.js.map +0 -1
  468. package/dist/shared/hx-stack-CfoW7jU7.js.map +0 -1
  469. package/dist/shared/hx-stat-C2wfph8W.js.map +0 -1
  470. package/dist/shared/hx-status-indicator-oYWOkWlD.js.map +0 -1
  471. package/dist/shared/hx-step-DYoIumpR.js.map +0 -1
  472. package/dist/shared/hx-switch-DkKchcuP.js.map +0 -1
  473. package/dist/shared/hx-tab-panel-CHB0u1zF.js.map +0 -1
  474. package/dist/shared/hx-tag-SJJtMlOS.js.map +0 -1
  475. package/dist/shared/hx-td-CVwCGBYf.js.map +0 -1
  476. package/dist/shared/hx-text-input-BrCjo4fJ.js.map +0 -1
  477. package/dist/shared/hx-textarea-BsQdB1Rk.js.map +0 -1
  478. package/dist/shared/hx-time-picker-DRRAFuVd.js.map +0 -1
  479. package/dist/shared/hx-toggle-button-D4F1soEM.js.map +0 -1
  480. package/dist/shared/hx-tooltip-Bk1iQRHs.js.map +0 -1
  481. package/dist/shared/hx-tree-item-DdH6RbMs.js.map +0 -1
  482. package/dist/shared/toast-factory-B8jicczW.js +0 -426
  483. package/dist/shared/toast-factory-B8jicczW.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hx-theme-6GDoUG8j.js","sources":["../../src/components/hx-theme/hx-theme.styles.ts","../../src/components/hx-theme/hx-theme.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixThemeStyles = css`\n :host {\n display: contents;\n }\n\n /* display: contents makes this wrapper layout-invisible; exposed as [part=\"base\"]\n for consumer targeting via CSS parts without affecting layout */\n .theme-base {\n display: contents;\n }\n\n /* Visually hidden but accessible to screen readers — used for aria-live announcements */\n .visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n`;\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenEntries, darkTokenEntries } from '@helixui/tokens';\nimport { helixThemeStyles } from './hx-theme.styles.js';\n\nexport type { TokenDefinition, TokenEntry } from '@helixui/tokens';\n\n/**\n * Supported theme names.\n *\n * Three-tier token cascade applied by this component:\n * - **Primitive tier** (`--hx-color-primary-500`, `--hx-space-4`, etc.) — raw values, always injected\n * - **Semantic tier** (`--hx-color-text-primary`, `--hx-color-surface-default`, etc.) — theme-sensitive,\n * override primitives for dark / high-contrast themes\n * - **Component tier** (`--hx-button-bg`, `--hx-card-padding`, etc.) — set by individual components,\n * consumed via semantic fallbacks; not managed by `hx-theme` directly\n *\n * Consumers should override at the semantic tier to respect theme scoping.\n */\nexport type ThemeName = 'light' | 'dark' | 'high-contrast' | 'auto';\n\n/**\n * High-contrast token overrides. Targets WCAG 7:1+ contrast ratios for low-vision users.\n * These are injected on top of the light primitives when theme=\"high-contrast\".\n * Values here mirror the `high-contrast` section of tokens.json; kept in sync manually\n * until HC tokens are promoted to the published @helixui/tokens package.\n */\nconst _hcOverrides: Array<[string, string]> = [\n ['--hx-color-text-primary', '#FFFFFF'],\n ['--hx-color-text-secondary', '#FFFFFF'],\n ['--hx-color-text-muted', '#E0E0E0'],\n ['--hx-color-text-disabled', '#767676'],\n ['--hx-color-text-inverse', '#000000'],\n ['--hx-color-text-link', '#FFFF00'],\n ['--hx-color-text-link-hover', '#FFFF99'],\n ['--hx-color-text-link-visited', '#FF80FF'],\n ['--hx-color-text-link-active', '#FFFFFF'],\n ['--hx-color-surface-default', '#000000'],\n ['--hx-color-surface-raised', '#1A1A1A'],\n ['--hx-color-surface-sunken', '#000000'],\n ['--hx-color-surface-overlay', 'rgba(0, 0, 0, 0.95)'],\n ['--hx-color-border-default', '#FFFFFF'],\n ['--hx-color-border-subtle', '#C0C0C0'],\n ['--hx-color-border-strong', '#FFFFFF'],\n ['--hx-color-border-focus', '#FFFF00'],\n ['--hx-color-focus-ring', '#FFFF00'],\n ['--hx-color-selection-bg', '#1AEBFF'],\n ['--hx-color-selection-color', '#000000'],\n ['--hx-body-bg', '#000000'],\n ['--hx-body-color', '#FFFFFF'],\n ['--hx-shadow-sm', '0 1px 2px 0 rgb(255 255 255 / 0.2)'],\n [\n '--hx-shadow-md',\n '0 4px 6px -1px rgb(255 255 255 / 0.3), 0 2px 4px -2px rgb(255 255 255 / 0.2)',\n ],\n [\n '--hx-shadow-lg',\n '0 10px 15px -3px rgb(255 255 255 / 0.3), 0 4px 6px -4px rgb(255 255 255 / 0.2)',\n ],\n [\n '--hx-shadow-xl',\n '0 20px 25px -5px rgb(255 255 255 / 0.3), 0 8px 10px -6px rgb(255 255 255 / 0.2)',\n ],\n ['--hx-shadow-2xl', '0 25px 50px -12px rgb(255 255 255 / 0.4)'],\n];\n\nfunction _buildProps(entries: Iterable<[string, string]>): string {\n return Array.from(entries)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n}\n\n/** Module-level CSS cache: one string per ThemeName — avoids re-building on every theme change */\nconst _cssCache = new Map<ThemeName, string>();\n\nfunction _buildThemeCss(theme: ThemeName): string {\n const cached = _cssCache.get(theme);\n if (cached) return cached;\n\n // Build light token base map from the @helixui/tokens package\n const lightMap = new Map(tokenEntries.map((t) => [t.name, t.value]));\n\n let css: string;\n if (theme === 'dark') {\n // Apply dark semantic overrides on top of light primitives\n const merged = new Map(lightMap);\n for (const t of darkTokenEntries) {\n merged.set(t.name, t.value);\n }\n css = `:host {\\n${_buildProps(merged)}\\n color-scheme: dark;\\n}`;\n } else if (theme === 'high-contrast') {\n // Apply HC overrides on top of light primitives — distinct WCAG 7:1+ token set\n const merged = new Map(lightMap);\n for (const [name, value] of _hcOverrides) {\n merged.set(name, value);\n }\n css = `:host {\\n${_buildProps(merged)}\\n color-scheme: dark;\\n}`;\n } else {\n // 'light' — 'auto' resolves to 'light' or 'dark' at runtime via effectiveTheme\n css = `:host {\\n${_buildProps(lightMap)}\\n color-scheme: light;\\n}`;\n }\n\n _cssCache.set(theme, css);\n return css;\n}\n\n/**\n * A theme provider that injects CSS custom property tokens for a named theme\n * onto a scoped root element. Wrapping content with this component scopes\n * all `--hx-*` design tokens to the selected theme.\n *\n * This is a pure infrastructure component with `display: contents` — it does\n * not affect layout. Use it to apply a theme to a subtree of components.\n *\n * Supported themes:\n * - `\"light\"` — standard light-mode token set (default)\n * - `\"dark\"` — dark-mode semantic overrides applied on top of light primitives\n * - `\"high-contrast\"` — WCAG 7:1+ contrast token set for low-vision accessibility\n * - `\"auto\"` — follows the OS `prefers-color-scheme` media query (light or dark)\n *\n * @summary Injects --hx-* design tokens for the specified theme scope.\n *\n * @tag hx-theme\n *\n * @slot - Default slot for themed content.\n *\n * @csspart base - The inner slot wrapper element. `display: contents` — no layout effect.\n *\n * @cssprop [--hx-*] - All design tokens for the selected theme are injected\n * as CSS custom properties on the host element.\n *\n * @example Drupal Twig — wrap a region with a dark theme:\n * ```twig\n * <hx-theme theme=\"dark\">\n * {{ content }}\n * </hx-theme>\n * ```\n *\n * @example Nested scoping — dark sidebar inside a light page:\n * ```html\n * <hx-theme theme=\"light\">\n * <main>...</main>\n * <hx-theme theme=\"dark\">\n * <aside>...</aside>\n * </hx-theme>\n * </hx-theme>\n * ```\n */\n@customElement('hx-theme')\nexport class HelixTheme extends LitElement {\n static override styles = [helixThemeStyles];\n\n /**\n * The theme to apply. Determines which set of --hx-* tokens are injected.\n * - `\"light\"` (default): standard light-mode tokens\n * - `\"dark\"`: dark-mode semantic overrides applied on top of light primitives\n * - `\"high-contrast\"`: WCAG 7:1+ contrast tokens for low-vision users\n * - `\"auto\"`: follows OS `prefers-color-scheme`; resolves to `\"light\"` or `\"dark\"` at runtime\n * @attr theme\n */\n @property({ type: String, reflect: true })\n theme: ThemeName = 'light';\n\n /**\n * @deprecated Use `theme=\"auto\"` instead.\n * When true, auto-detects the preferred color scheme via the\n * `prefers-color-scheme` media query, overriding the `theme` prop.\n * @attr system\n */\n @property({ type: Boolean, reflect: true })\n system = false;\n\n /** @internal */\n private _mediaQuery: MediaQueryList | null = null;\n /** @internal */\n private _mediaHandler: (() => void) | null = null;\n /** @internal */\n private _themeSheet: CSSStyleSheet | null = null;\n\n override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n this._initThemeSheet();\n if (this.system || this.theme === 'auto') {\n this._attachMediaQuery();\n }\n }\n\n override updated(changed: PropertyValues): void {\n super.updated(changed);\n const autoMode = this.system || this.theme === 'auto';\n if (changed.has('system') || changed.has('theme')) {\n if (autoMode) {\n this._attachMediaQuery();\n } else {\n this._detachMediaQuery();\n }\n this._applyEffectiveTheme();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._detachMediaQuery();\n }\n\n /**\n * Returns the currently active theme name.\n * When `system=true` or `theme=\"auto\"`, reflects the OS preference (`\"light\"` or `\"dark\"`).\n * Otherwise returns the `theme` property value.\n */\n get effectiveTheme(): ThemeName {\n if (this.system || this.theme === 'auto') {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return this.theme;\n }\n\n /** @internal */\n private _initThemeSheet(): void {\n if (this.shadowRoot) {\n this._themeSheet = new CSSStyleSheet();\n this.shadowRoot.adoptedStyleSheets = [\n ...this.shadowRoot.adoptedStyleSheets,\n this._themeSheet,\n ];\n this._applyEffectiveTheme();\n }\n }\n\n /** @internal */\n private _attachMediaQuery(): void {\n if (this._mediaQuery || typeof window === 'undefined') return;\n this._mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this._mediaHandler = () => {\n this._applyEffectiveTheme();\n this._announceThemeChange();\n };\n this._mediaQuery.addEventListener('change', this._mediaHandler);\n }\n\n /** @internal */\n private _detachMediaQuery(): void {\n if (this._mediaQuery && this._mediaHandler) {\n this._mediaQuery.removeEventListener('change', this._mediaHandler);\n }\n this._mediaQuery = null;\n this._mediaHandler = null;\n }\n\n /** @internal — notifies AT users when system theme changes programmatically */\n private _announceThemeChange(): void {\n const announcer = this.shadowRoot?.querySelector('[role=\"status\"]');\n if (announcer) {\n announcer.textContent = `Theme changed to ${this.effectiveTheme}`;\n }\n }\n\n /** @internal */\n private _applyEffectiveTheme(): void {\n if (!this._themeSheet) return;\n void this._themeSheet.replace(_buildThemeCss(this.effectiveTheme));\n }\n\n override render() {\n return html`\n <div part=\"base\" class=\"theme-base\">\n <slot></slot>\n </div>\n <span role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"visually-hidden\"></span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-theme': HelixTheme;\n }\n}\n\n/** Canonical type alias for HelixTheme. Use this when typing hx-theme element references. */\nexport type HxTheme = HelixTheme;\n\n/** @deprecated Use {@link HxTheme} instead. The `Wc` prefix was a legacy naming convention. */\nexport type WcTheme = HelixTheme;\n"],"names":["helixThemeStyles","css","_hcOverrides","_buildProps","entries","name","value","_cssCache","_buildThemeCss","theme","cached","lightMap","tokenEntries","merged","t","darkTokenEntries","HelixTheme","LitElement","changed","autoMode","announcer","_a","html","__decorateClass","property","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"hx-theme-6GDoUG8j.js","sources":["../../src/components/hx-theme/hx-theme.styles.ts","../../src/components/hx-theme/hx-theme.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixThemeStyles = css`\n :host {\n display: contents;\n }\n\n /* display: contents makes this wrapper layout-invisible; exposed as [part=\"base\"]\n for consumer targeting via CSS parts without affecting layout */\n .theme-base {\n display: contents;\n }\n\n /* Visually hidden but accessible to screen readers — used for aria-live announcements */\n .visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n`;\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenEntries, darkTokenEntries } from '@helixui/tokens';\nimport { helixThemeStyles } from './hx-theme.styles.js';\n\nexport type { TokenDefinition, TokenEntry } from '@helixui/tokens';\n\n/**\n * Supported theme names.\n *\n * Three-tier token cascade applied by this component:\n * - **Primitive tier** (`--hx-color-primary-500`, `--hx-space-4`, etc.) — raw values, always injected\n * - **Semantic tier** (`--hx-color-text-primary`, `--hx-color-surface-default`, etc.) — theme-sensitive,\n * override primitives for dark / high-contrast themes\n * - **Component tier** (`--hx-button-bg`, `--hx-card-padding`, etc.) — set by individual components,\n * consumed via semantic fallbacks; not managed by `hx-theme` directly\n *\n * Consumers should override at the semantic tier to respect theme scoping.\n */\nexport type ThemeName = 'light' | 'dark' | 'high-contrast' | 'auto';\n\n/**\n * High-contrast token overrides. Targets WCAG 7:1+ contrast ratios for low-vision users.\n * These are injected on top of the light primitives when theme=\"high-contrast\".\n * Values here mirror the `high-contrast` section of tokens.json; kept in sync manually\n * until HC tokens are promoted to the published @helixui/tokens package.\n */\nconst _hcOverrides: Array<[string, string]> = [\n ['--hx-color-text-primary', '#FFFFFF'],\n ['--hx-color-text-secondary', '#FFFFFF'],\n ['--hx-color-text-muted', '#E0E0E0'],\n ['--hx-color-text-disabled', '#767676'],\n ['--hx-color-text-inverse', '#000000'],\n ['--hx-color-text-link', '#FFFF00'],\n ['--hx-color-text-link-hover', '#FFFF99'],\n ['--hx-color-text-link-visited', '#FF80FF'],\n ['--hx-color-text-link-active', '#FFFFFF'],\n ['--hx-color-surface-default', '#000000'],\n ['--hx-color-surface-raised', '#1A1A1A'],\n ['--hx-color-surface-sunken', '#000000'],\n ['--hx-color-surface-overlay', 'rgba(0, 0, 0, 0.95)'],\n ['--hx-color-border-default', '#FFFFFF'],\n ['--hx-color-border-subtle', '#C0C0C0'],\n ['--hx-color-border-strong', '#FFFFFF'],\n ['--hx-color-border-focus', '#FFFF00'],\n ['--hx-color-focus-ring', '#FFFF00'],\n ['--hx-color-selection-bg', '#1AEBFF'],\n ['--hx-color-selection-color', '#000000'],\n ['--hx-body-bg', '#000000'],\n ['--hx-body-color', '#FFFFFF'],\n ['--hx-shadow-sm', '0 1px 2px 0 rgb(255 255 255 / 0.2)'],\n [\n '--hx-shadow-md',\n '0 4px 6px -1px rgb(255 255 255 / 0.3), 0 2px 4px -2px rgb(255 255 255 / 0.2)',\n ],\n [\n '--hx-shadow-lg',\n '0 10px 15px -3px rgb(255 255 255 / 0.3), 0 4px 6px -4px rgb(255 255 255 / 0.2)',\n ],\n [\n '--hx-shadow-xl',\n '0 20px 25px -5px rgb(255 255 255 / 0.3), 0 8px 10px -6px rgb(255 255 255 / 0.2)',\n ],\n ['--hx-shadow-2xl', '0 25px 50px -12px rgb(255 255 255 / 0.4)'],\n];\n\nfunction _buildProps(entries: Iterable<[string, string]>): string {\n return Array.from(entries)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n}\n\n/** Module-level CSS cache: one string per ThemeName — avoids re-building on every theme change */\nconst _cssCache = new Map<ThemeName, string>();\n\nfunction _buildThemeCss(theme: ThemeName): string {\n const cached = _cssCache.get(theme);\n if (cached) return cached;\n\n // Build light token base map from the @helixui/tokens package\n const lightMap = new Map(tokenEntries.map((t) => [t.name, t.value]));\n\n let css: string;\n if (theme === 'dark') {\n // Apply dark semantic overrides on top of light primitives\n const merged = new Map(lightMap);\n for (const t of darkTokenEntries) {\n merged.set(t.name, t.value);\n }\n css = `:host {\\n${_buildProps(merged)}\\n color-scheme: dark;\\n}`;\n } else if (theme === 'high-contrast') {\n // Apply HC overrides on top of light primitives — distinct WCAG 7:1+ token set\n const merged = new Map(lightMap);\n for (const [name, value] of _hcOverrides) {\n merged.set(name, value);\n }\n css = `:host {\\n${_buildProps(merged)}\\n color-scheme: dark;\\n}`;\n } else {\n // 'light' — 'auto' resolves to 'light' or 'dark' at runtime via effectiveTheme\n css = `:host {\\n${_buildProps(lightMap)}\\n color-scheme: light;\\n}`;\n }\n\n _cssCache.set(theme, css);\n return css;\n}\n\n/**\n * A theme provider that injects CSS custom property tokens for a named theme\n * onto a scoped root element. Wrapping content with this component scopes\n * all `--hx-*` design tokens to the selected theme.\n *\n * This is a pure infrastructure component with `display: contents` — it does\n * not affect layout. Use it to apply a theme to a subtree of components.\n *\n * Supported themes:\n * - `\"light\"` — standard light-mode token set (default)\n * - `\"dark\"` — dark-mode semantic overrides applied on top of light primitives\n * - `\"high-contrast\"` — WCAG 7:1+ contrast token set for low-vision accessibility\n * - `\"auto\"` — follows the OS `prefers-color-scheme` media query (light or dark)\n *\n * @summary Injects --hx-* design tokens for the specified theme scope.\n *\n * @tag hx-theme\n *\n * @slot - Default slot for themed content.\n *\n * @csspart base - The inner slot wrapper element. `display: contents` — no layout effect.\n *\n * @cssprop [--hx-*] - All design tokens for the selected theme are injected\n * as CSS custom properties on the host element.\n *\n * @example Drupal Twig — wrap a region with a dark theme:\n * ```twig\n * <hx-theme theme=\"dark\">\n * {{ content }}\n * </hx-theme>\n * ```\n *\n * @example Nested scoping — dark sidebar inside a light page:\n * ```html\n * <hx-theme theme=\"light\">\n * <main>...</main>\n * <hx-theme theme=\"dark\">\n * <aside>...</aside>\n * </hx-theme>\n * </hx-theme>\n * ```\n */\n@customElement('hx-theme')\nexport class HelixTheme extends LitElement {\n static override styles = [helixThemeStyles];\n\n /**\n * The theme to apply. Determines which set of --hx-* tokens are injected.\n * - `\"light\"` (default): standard light-mode tokens\n * - `\"dark\"`: dark-mode semantic overrides applied on top of light primitives\n * - `\"high-contrast\"`: WCAG 7:1+ contrast tokens for low-vision users\n * - `\"auto\"`: follows OS `prefers-color-scheme`; resolves to `\"light\"` or `\"dark\"` at runtime\n * @attr theme\n */\n @property({ type: String, reflect: true })\n theme: ThemeName = 'light';\n\n /**\n * @deprecated Use `theme=\"auto\"` instead.\n * When true, auto-detects the preferred color scheme via the\n * `prefers-color-scheme` media query, overriding the `theme` prop.\n * @attr system\n */\n @property({ type: Boolean, reflect: true })\n system = false;\n\n /** @internal */\n private _mediaQuery: MediaQueryList | null = null;\n /** @internal */\n private _mediaHandler: (() => void) | null = null;\n /** @internal */\n private _themeSheet: CSSStyleSheet | null = null;\n\n override firstUpdated(changed: PropertyValues<this>): void {\n super.firstUpdated(changed);\n this._initThemeSheet();\n if (this.system || this.theme === 'auto') {\n this._attachMediaQuery();\n }\n }\n\n override updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n const autoMode = this.system || this.theme === 'auto';\n if (changed.has('system') || changed.has('theme')) {\n if (autoMode) {\n this._attachMediaQuery();\n } else {\n this._detachMediaQuery();\n }\n this._applyEffectiveTheme();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._detachMediaQuery();\n }\n\n /**\n * Returns the currently active theme name.\n * When `system=true` or `theme=\"auto\"`, reflects the OS preference (`\"light\"` or `\"dark\"`).\n * Otherwise returns the `theme` property value.\n */\n get effectiveTheme(): ThemeName {\n if (this.system || this.theme === 'auto') {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return this.theme;\n }\n\n /** @internal */\n private _initThemeSheet(): void {\n if (this.shadowRoot) {\n this._themeSheet = new CSSStyleSheet();\n this.shadowRoot.adoptedStyleSheets = [\n ...this.shadowRoot.adoptedStyleSheets,\n this._themeSheet,\n ];\n this._applyEffectiveTheme();\n }\n }\n\n /** @internal */\n private _attachMediaQuery(): void {\n if (this._mediaQuery || typeof window === 'undefined') return;\n this._mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this._mediaHandler = () => {\n this._applyEffectiveTheme();\n this._announceThemeChange();\n };\n this._mediaQuery.addEventListener('change', this._mediaHandler);\n }\n\n /** @internal */\n private _detachMediaQuery(): void {\n if (this._mediaQuery && this._mediaHandler) {\n this._mediaQuery.removeEventListener('change', this._mediaHandler);\n }\n this._mediaQuery = null;\n this._mediaHandler = null;\n }\n\n /** @internal — notifies AT users when system theme changes programmatically */\n private _announceThemeChange(): void {\n const announcer = this.shadowRoot?.querySelector('[role=\"status\"]');\n if (announcer) {\n announcer.textContent = `Theme changed to ${this.effectiveTheme}`;\n }\n }\n\n /** @internal */\n private _applyEffectiveTheme(): void {\n if (!this._themeSheet) return;\n void this._themeSheet.replace(_buildThemeCss(this.effectiveTheme));\n }\n\n override render() {\n return html`\n <div part=\"base\" class=\"theme-base\">\n <slot></slot>\n </div>\n <span role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"visually-hidden\"></span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-theme': HelixTheme;\n }\n}\n\n/** Canonical type alias for HelixTheme. Use this when typing hx-theme element references. */\nexport type HxTheme = HelixTheme;\n\n/** @deprecated Use {@link HxTheme} instead. The `Wc` prefix was a legacy naming convention. */\nexport type WcTheme = HelixTheme;\n"],"names":["helixThemeStyles","css","_hcOverrides","_buildProps","entries","name","value","_cssCache","_buildThemeCss","theme","cached","lightMap","tokenEntries","merged","t","darkTokenEntries","HelixTheme","LitElement","changed","autoMode","announcer","_a","html","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,235 +1,14 @@
1
- import { css as C, LitElement as E, nothing as _, html as x } from "lit";
2
- import { property as h, state as p, query as $, customElement as L } from "lit/decorators.js";
3
- import { classMap as w } from "lit/directives/class-map.js";
1
+ import { css as C, LitElement as E, nothing as _, html as m } from "lit";
2
+ import { property as h, state as p, query as w, customElement as L } from "lit/decorators.js";
3
+ import { classMap as $ } from "lit/directives/class-map.js";
4
4
  import { ifDefined as f } from "lit/directives/if-defined.js";
5
5
  import { live as V } from "lit/directives/live.js";
6
6
  import { repeat as D } from "lit/directives/repeat.js";
7
7
  import { tokenStyles as M } from "@helixui/tokens/lit";
8
- const O = C`
9
- :host {
10
- display: block;
11
- position: relative;
12
- }
13
-
14
- :host([disabled]) {
15
- opacity: var(--hx-opacity-disabled, 0.5);
16
- pointer-events: none;
17
- }
18
-
19
- * {
20
- box-sizing: border-box;
21
- }
22
-
23
- .field {
24
- display: flex;
25
- flex-direction: column;
26
- gap: var(--hx-space-1, 0.25rem);
27
- font-family: var(--hx-time-picker-font-family, var(--hx-font-family-sans, sans-serif));
28
- }
29
-
30
- /* ─── Label ─── */
31
-
32
- .field__label {
33
- display: flex;
34
- align-items: baseline;
35
- gap: var(--hx-space-1, 0.25rem);
36
- font-size: var(--hx-font-size-sm, 0.875rem);
37
- font-weight: var(--hx-font-weight-medium, 500);
38
- color: var(--hx-time-picker-label-color, var(--hx-color-neutral-700));
39
- line-height: var(--hx-line-height-normal, 1.5);
40
- }
41
-
42
- .field__required-marker {
43
- color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));
44
- font-weight: var(--hx-font-weight-bold, 700);
45
- }
46
-
47
- /* ─── Combobox Wrapper ─── */
48
-
49
- .field__combobox {
50
- position: relative;
51
- display: flex;
52
- align-items: center;
53
- border: var(--hx-border-width-thin, 1px) solid
54
- var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
55
- border-radius: var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
56
- background-color: var(--hx-time-picker-bg, var(--hx-color-neutral-0));
57
- transition:
58
- border-color var(--hx-transition-fast, 150ms ease),
59
- box-shadow var(--hx-transition-fast, 150ms ease);
60
- overflow: visible;
61
- }
62
-
63
- .field__combobox:focus-within {
64
- border-color: var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));
65
- /* Fallback for Safari < 16.2 (no color-mix support) */
66
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
67
- var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));
68
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
69
- color-mix(
70
- in srgb,
71
- var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color))
72
- calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
73
- transparent
74
- );
75
- }
76
-
77
- /* ─── Error State ─── */
78
-
79
- .field--error .field__combobox {
80
- border-color: var(--hx-time-picker-error-color, var(--hx-color-error-500));
81
- }
82
-
83
- .field--error .field__combobox:focus-within {
84
- border-color: var(--hx-time-picker-error-color, var(--hx-color-error-500));
85
- /* Fallback for Safari < 16.2 (no color-mix support) */
86
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
87
- var(--hx-time-picker-error-color, var(--hx-color-error-500));
88
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
89
- color-mix(
90
- in srgb,
91
- var(--hx-time-picker-error-color, var(--hx-color-error-500))
92
- calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
93
- transparent
94
- );
95
- }
96
-
97
- /* ─── Native Input ─── */
98
-
99
- .field__input {
100
- flex: 1;
101
- border: none;
102
- outline: none;
103
- background: transparent;
104
- padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
105
- font-family: inherit;
106
- font-size: var(--hx-font-size-md, 1rem);
107
- color: var(--hx-time-picker-color, var(--hx-color-neutral-800));
108
- line-height: var(--hx-line-height-normal, 1.5);
109
- min-height: var(--hx-size-10, 2.5rem);
110
- width: 100%;
111
- cursor: text;
112
- }
113
-
114
- .field__input::placeholder {
115
- color: var(--hx-color-neutral-400);
116
- }
117
-
118
- .field__input:disabled {
119
- cursor: not-allowed;
120
- }
121
-
122
- /* ─── Toggle Button ─── */
123
-
124
- .field__toggle {
125
- display: flex;
126
- align-items: center;
127
- justify-content: center;
128
- border: none;
129
- background: transparent;
130
- padding: 0 var(--hx-space-3, 0.75rem);
131
- color: var(--hx-time-picker-chevron-color, var(--hx-color-neutral-500));
132
- cursor: pointer;
133
- height: 100%;
134
- min-height: var(--hx-size-10, 2.5rem);
135
- flex-shrink: 0;
136
- border-inline-start: var(--hx-border-width-thin, 1px) solid
137
- var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
138
- }
139
-
140
- .field__toggle:focus-visible {
141
- outline: var(--hx-focus-ring-width, 2px) solid
142
- var(--hx-time-picker-focus-ring-color, var(--hx-focus-ring-color));
143
- outline-offset: -2px;
144
- border-radius: 0 var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem))
145
- var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem)) 0;
146
- }
147
-
148
- /* ─── Listbox Dropdown ─── */
149
-
150
- .field__listbox {
151
- position: absolute;
152
- top: calc(100% + var(--hx-space-1, 0.25rem));
153
- inset-inline-start: 0;
154
- inset-inline-end: 0;
155
- z-index: var(--hx-z-index-dropdown, 1000);
156
- background-color: var(--hx-time-picker-listbox-bg, var(--hx-color-neutral-0));
157
- border: var(--hx-border-width-thin, 1px) solid
158
- var(--hx-time-picker-border-color, var(--hx-color-neutral-300));
159
- border-radius: var(--hx-time-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
160
- box-shadow: var(
161
- --hx-time-picker-listbox-shadow,
162
- 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900) 12%, transparent)
163
- );
164
- max-height: var(--hx-time-picker-listbox-max-height, 16rem);
165
- overflow-y: auto;
166
- padding: var(--hx-space-1, 0.25rem) 0;
167
- list-style: none;
168
- margin: 0;
169
-
170
- @media (prefers-reduced-motion: no-preference) {
171
- animation: hx-listbox-enter var(--hx-transition-fast, 150ms ease) forwards;
172
- }
173
- }
174
-
175
- @keyframes hx-listbox-enter {
176
- from {
177
- opacity: 0;
178
- transform: translateY(calc(-1 * var(--hx-space-1, 0.25rem)));
179
- }
180
- to {
181
- opacity: 1;
182
- transform: translateY(0);
183
- }
184
- }
185
-
186
- /* ─── Option Items ─── */
187
-
188
- .field__option {
189
- display: flex;
190
- align-items: center;
191
- padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
192
- font-size: var(--hx-font-size-md, 1rem);
193
- font-family: inherit;
194
- color: var(--hx-time-picker-option-color, var(--hx-color-neutral-800));
195
- cursor: pointer;
196
- transition: background-color var(--hx-transition-fast, 150ms ease);
197
- line-height: var(--hx-line-height-normal, 1.5);
198
- }
199
-
200
- .field__option:hover,
201
- .field__option--active {
202
- background-color: var(--hx-time-picker-option-hover-bg, var(--hx-color-primary-50));
203
- color: var(--hx-time-picker-option-hover-color, var(--hx-color-primary-700));
204
- }
205
-
206
- .field__option--selected {
207
- background-color: var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));
208
- color: var(--hx-time-picker-option-selected-color, var(--hx-color-primary-800));
209
- font-weight: var(--hx-font-weight-medium, 500);
210
- }
211
-
212
- .field__option--selected.field__option--active {
213
- background-color: var(--hx-time-picker-option-selected-bg, var(--hx-color-primary-100));
214
- }
215
-
216
- /* ─── Help Text & Error Messages ─── */
217
-
218
- .field__help-text {
219
- font-size: var(--hx-font-size-xs, 0.75rem);
220
- color: var(--hx-color-neutral-500);
221
- line-height: var(--hx-line-height-normal, 1.5);
222
- }
223
-
224
- .field__error {
225
- font-size: var(--hx-font-size-xs, 0.75rem);
226
- color: var(--hx-time-picker-error-color, var(--hx-color-error-text, #b91c1c));
227
- line-height: var(--hx-line-height-normal, 1.5);
228
- }
229
- `;
230
- var A = Object.defineProperty, P = Object.getOwnPropertyDescriptor, a = (e, t, o, i) => {
231
- for (var r = i > 1 ? void 0 : i ? P(t, o) : t, l = e.length - 1, n; l >= 0; l--)
232
- (n = e[l]) && (r = (i ? n(t, o, r) : n(r)) || r);
8
+ const O = C`: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))}`;
9
+ var A = Object.defineProperty, P = Object.getOwnPropertyDescriptor, l = (e, t, o, i) => {
10
+ for (var r = i > 1 ? void 0 : i ? P(t, o) : t, a = e.length - 1, n; a >= 0; a--)
11
+ (n = e[a]) && (r = (i ? n(t, o, r) : n(r)) || r);
233
12
  return i && r && A(t, o, r), r;
234
13
  };
235
14
  function d(e) {
@@ -238,19 +17,19 @@ function d(e) {
238
17
  const o = parseInt(t[1] ?? "0", 10), i = parseInt(t[2] ?? "0", 10);
239
18
  return o < 0 || o > 23 || i < 0 || i > 59 ? null : { hours: o, minutes: i };
240
19
  }
241
- function m(e, t) {
20
+ function x(e, t) {
242
21
  return `${String(e).padStart(2, "0")}:${String(t).padStart(2, "0")}`;
243
22
  }
244
23
  function k(e) {
245
24
  const t = d(e);
246
25
  if (!t) return e;
247
- const { hours: o, minutes: i } = t, r = o < 12 ? "AM" : "PM", l = o % 12 === 0 ? 12 : o % 12;
248
- return `${String(l).padStart(2, "0")}:${String(i).padStart(2, "0")} ${r}`;
26
+ const { hours: o, minutes: i } = t, r = o < 12 ? "AM" : "PM", a = o % 12 === 0 ? 12 : o % 12;
27
+ return `${String(a).padStart(2, "0")}:${String(i).padStart(2, "0")} ${r}`;
249
28
  }
250
- function z(e, t, o, i) {
251
- const r = d(e) ?? { hours: 0, minutes: 0 }, l = d(t) ?? { hours: 23, minutes: 59 }, n = r.hours * 60 + r.minutes, c = l.hours * 60 + l.minutes, u = Math.max(1, Math.round(o)), v = [];
29
+ function q(e, t, o, i) {
30
+ const r = d(e) ?? { hours: 0, minutes: 0 }, a = d(t) ?? { hours: 23, minutes: 59 }, n = r.hours * 60 + r.minutes, c = a.hours * 60 + a.minutes, u = Math.max(1, Math.round(o)), v = [];
252
31
  for (let b = n; b <= c; b += u) {
253
- const I = Math.floor(b / 60) % 24, S = b % 60, g = m(I, S);
32
+ const I = Math.floor(b / 60) % 24, S = b % 60, g = x(I, S);
254
33
  v.push({
255
34
  value: g,
256
35
  label: i === "12h" ? k(g) : g
@@ -262,17 +41,17 @@ function y(e, t, o) {
262
41
  if (!e) return "";
263
42
  const i = d(e);
264
43
  if (!i) return "";
265
- const r = i.hours * 60 + i.minutes, l = d(t) ?? { hours: 0, minutes: 0 }, n = d(o) ?? { hours: 23, minutes: 59 }, c = l.hours * 60 + l.minutes, u = n.hours * 60 + n.minutes;
266
- return r < c ? m(l.hours, l.minutes) : r > u ? m(n.hours, n.minutes) : m(i.hours, i.minutes);
44
+ const r = i.hours * 60 + i.minutes, a = d(t) ?? { hours: 0, minutes: 0 }, n = d(o) ?? { hours: 23, minutes: 59 }, c = a.hours * 60 + a.minutes, u = n.hours * 60 + n.minutes;
45
+ return r < c ? x(a.hours, a.minutes) : r > u ? x(n.hours, n.minutes) : x(i.hours, i.minutes);
267
46
  }
268
47
  function H(e) {
269
48
  const t = e.trim().toUpperCase(), o = d(t);
270
- if (o) return m(o.hours, o.minutes);
49
+ if (o) return x(o.hours, o.minutes);
271
50
  const i = /^(\d{1,2})(?::(\d{2}))?\s*(AM|PM)$/.exec(t) ?? /^(\d{1,2})(\d{2})\s*(AM|PM)$/.exec(t);
272
51
  if (i) {
273
52
  let r = parseInt(i[1] ?? "0", 10);
274
- const l = i[2] !== void 0 ? parseInt(i[2], 10) : 0, n = i[3] ?? "";
275
- return r < 1 || r > 12 || l < 0 || l > 59 ? null : (n === "AM" ? r = r === 12 ? 0 : r : r = r === 12 ? 12 : r + 12, m(r, l));
53
+ const a = i[2] !== void 0 ? parseInt(i[2], 10) : 0, n = i[3] ?? "";
54
+ return r < 1 || r > 12 || a < 0 || a > 59 ? null : (n === "AM" ? r = r === 12 ? 0 : r : r = r === 12 ? 12 : r + 12, x(r, a));
276
55
  }
277
56
  return null;
278
57
  }
@@ -283,10 +62,13 @@ let s = class extends E {
283
62
  !this.contains(e.target) && !((t = this.shadowRoot) != null && t.contains(e.target)) && this._closeListbox();
284
63
  }, this._internals = this.attachInternals();
285
64
  }
286
- /** @internal */
65
+ /**
66
+ * Lazily generates and caches the list of time slots based on current min, max, step, and format.
67
+ * @internal
68
+ */
287
69
  get _slots() {
288
70
  const e = `${this.min}|${this.max}|${this.step}|${this.format}`;
289
- return (this._cachedSlots === null || e !== this._slotsKey) && (this._slotsKey = e, this._cachedSlots = z(this.min, this.max, this.step, this.format)), this._cachedSlots;
71
+ return (this._cachedSlots === null || e !== this._slotsKey) && (this._slotsKey = e, this._cachedSlots = q(this.min, this.max, this.step, this.format)), this._cachedSlots;
290
72
  }
291
73
  // ─── Lifecycle ───
292
74
  connectedCallback() {
@@ -322,6 +104,7 @@ let s = class extends E {
322
104
  reportValidity() {
323
105
  return this._internals.reportValidity();
324
106
  }
107
+ /** @internal */
325
108
  _updateValidity() {
326
109
  this.required && !this.value ? this._internals.setValidity(
327
110
  { valueMissing: !0 },
@@ -337,25 +120,34 @@ let s = class extends E {
337
120
  const o = y(e, this.min, this.max);
338
121
  this.value = o;
339
122
  }
123
+ /** Called when a parent fieldset is disabled/enabled. */
124
+ formDisabledCallback(e) {
125
+ this.disabled = e;
126
+ }
340
127
  // ─── Listbox helpers ───
128
+ /** @internal */
341
129
  _openListbox() {
342
130
  if (this._open) return;
343
131
  const e = this._slots.findIndex((t) => t.value === this.value);
344
132
  this._activeIndex = e >= 0 ? e : 0, this._open = !0;
345
133
  }
134
+ /** @internal */
346
135
  _closeListbox() {
347
136
  this._open && (this._open = !1, this._activeIndex = -1);
348
137
  }
138
+ /** @internal */
349
139
  _scrollActiveOptionIntoView() {
350
140
  if (!this._listboxEl) return;
351
141
  const e = this._listboxEl.querySelector(".field__option--active");
352
142
  e == null || e.scrollIntoView({ block: "nearest" });
353
143
  }
144
+ /** @internal */
354
145
  _selectSlot(e) {
355
146
  const t = y(e.value, this.min, this.max);
356
147
  this.value = t, this._closeListbox(), this._dispatchChange(t);
357
148
  }
358
149
  // ─── Slot tracking ───
150
+ /** @internal */
359
151
  _handleLabelSlotChange(e) {
360
152
  const o = e.target.assignedNodes({ flatten: !0 });
361
153
  if (this._hasLabelSlot = o.length > 0, this._hasLabelSlot) {
@@ -364,15 +156,18 @@ let s = class extends E {
364
156
  } else
365
157
  this._slottedLabelId = "";
366
158
  }
159
+ /** @internal */
367
160
  _handleErrorSlotChange(e) {
368
161
  const t = e.target;
369
162
  this._hasErrorSlot = t.assignedNodes({ flatten: !0 }).length > 0;
370
163
  }
164
+ /** @internal */
371
165
  _handleHelpSlotChange(e) {
372
166
  const t = e.target;
373
167
  this._hasHelpSlot = t.assignedNodes({ flatten: !0 }).length > 0;
374
168
  }
375
169
  // ─── Event Dispatch ───
170
+ /** @internal */
376
171
  _dispatchChange(e) {
377
172
  this.dispatchEvent(
378
173
  new CustomEvent("hx-change", {
@@ -383,17 +178,21 @@ let s = class extends E {
383
178
  );
384
179
  }
385
180
  // ─── Input Handlers ───
181
+ /** @internal */
386
182
  _handleInputClick() {
387
183
  this.disabled || this._openListbox();
388
184
  }
185
+ /** @internal */
389
186
  _handleToggleClick(e) {
390
187
  var t;
391
188
  e.stopPropagation(), !this.disabled && (this._open ? this._closeListbox() : (this._openListbox(), (t = this._inputEl) == null || t.focus()));
392
189
  }
190
+ /** @internal */
393
191
  _handleInputInput(e) {
394
192
  const t = e.target;
395
193
  this._inputDisplayValue = t.value, this._open || this._openListbox();
396
194
  }
195
+ /** @internal */
397
196
  _handleInputChange(e) {
398
197
  const o = e.target.value.trim();
399
198
  if (!o) {
@@ -407,6 +206,7 @@ let s = class extends E {
407
206
  } else
408
207
  this._inputDisplayValue = this.value ? this.format === "12h" ? k(this.value) : this.value : "";
409
208
  }
209
+ /** @internal */
410
210
  _handleInputKeyDown(e) {
411
211
  switch (e.key) {
412
212
  case "ArrowDown":
@@ -436,13 +236,16 @@ let s = class extends E {
436
236
  break;
437
237
  }
438
238
  }
239
+ /** @internal */
439
240
  _handleOptionPointerDown(e) {
440
241
  e.preventDefault();
441
242
  }
243
+ /** @internal */
442
244
  _handleOptionClick(e) {
443
245
  var t;
444
246
  this._selectSlot(e), (t = this._inputEl) == null || t.focus();
445
247
  }
248
+ /** @internal */
446
249
  _handleOptionMouseEnter(e) {
447
250
  this._activeIndex = e;
448
251
  }
@@ -459,15 +262,15 @@ let s = class extends E {
459
262
  "field--error": e,
460
263
  "field--disabled": this.disabled,
461
264
  "field--required": this.required
462
- }, i = this._open && this._activeIndex >= 0 ? `${this._listboxId}-option-${this._activeIndex}` : void 0, r = this.format === "12h" ? "hh:mm AM" : "hh:mm", l = [e ? this._errorId : null, this._hasHelpSlot ? this._helpId : null].filter(Boolean).join(" ") || void 0;
463
- return x`
464
- <div part="field" class=${w(o)}>
265
+ }, i = this._open && this._activeIndex >= 0 ? `${this._listboxId}-option-${this._activeIndex}` : void 0, r = this.format === "12h" ? "hh:mm AM" : "hh:mm", a = [e ? this._errorId : null, this._hasHelpSlot ? this._helpId : null].filter(Boolean).join(" ") || void 0;
266
+ return m`
267
+ <div part="field" class=${$(o)}>
465
268
  <!-- Label -->
466
269
  <slot name="label" @slotchange=${this._handleLabelSlotChange}>
467
- ${this.label ? x`
270
+ ${this.label ? m`
468
271
  <label part="label" class="field__label" for=${this._id}>
469
272
  ${this.label}
470
- ${this.required ? x`<span class="field__required-marker" aria-hidden="true">*</span>` : _}
273
+ ${this.required ? m`<span class="field__required-marker" aria-hidden="true">*</span>` : _}
471
274
  </label>
472
275
  ` : _}
473
276
  </slot>
@@ -494,7 +297,7 @@ let s = class extends E {
494
297
  aria-controls=${f(this._open ? this._listboxId : void 0)}
495
298
  aria-activedescendant=${f(i)}
496
299
  aria-invalid=${e ? "true" : _}
497
- aria-describedby=${f(l)}
300
+ aria-describedby=${f(a)}
498
301
  aria-required=${this.required ? "true" : _}
499
302
  aria-labelledby=${f(
500
303
  this._hasLabelSlot && this._slottedLabelId ? this._slottedLabelId : void 0
@@ -536,7 +339,7 @@ let s = class extends E {
536
339
  </button>
537
340
 
538
341
  <!-- Dropdown listbox -->
539
- ${this._open ? x`
342
+ ${this._open ? m`
540
343
  <ul
541
344
  part="listbox"
542
345
  class="field__listbox"
@@ -549,10 +352,10 @@ let s = class extends E {
549
352
  (n) => n.value,
550
353
  (n, c) => {
551
354
  const u = n.value === this.value, v = c === this._activeIndex;
552
- return x`
355
+ return m`
553
356
  <li
554
357
  part="option"
555
- class=${w({
358
+ class=${$({
556
359
  field__option: !0,
557
360
  "field__option--selected": u,
558
361
  "field__option--active": v
@@ -575,7 +378,7 @@ let s = class extends E {
575
378
 
576
379
  <!-- Error slot / property -->
577
380
  <slot name="error" @slotchange=${this._handleErrorSlotChange}>
578
- ${this.error ? x`
381
+ ${this.error ? m`
579
382
  <div part="error" class="field__error" id=${this._errorId} role="alert">
580
383
  ${this.error}
581
384
  </div>
@@ -593,67 +396,67 @@ let s = class extends E {
593
396
  s.styles = [M, O];
594
397
  s.formAssociated = !0;
595
398
  s._instanceCount = 0;
596
- a([
399
+ l([
597
400
  h({ type: String })
598
401
  ], s.prototype, "name", 2);
599
- a([
402
+ l([
600
403
  h({ type: String, reflect: !0 })
601
404
  ], s.prototype, "value", 2);
602
- a([
405
+ l([
603
406
  h({ type: String })
604
407
  ], s.prototype, "min", 2);
605
- a([
408
+ l([
606
409
  h({ type: String })
607
410
  ], s.prototype, "max", 2);
608
- a([
411
+ l([
609
412
  h({ type: Number })
610
413
  ], s.prototype, "step", 2);
611
- a([
414
+ l([
612
415
  h({ type: String })
613
416
  ], s.prototype, "label", 2);
614
- a([
417
+ l([
615
418
  h({ type: Boolean, reflect: !0 })
616
419
  ], s.prototype, "required", 2);
617
- a([
420
+ l([
618
421
  h({ type: Boolean, reflect: !0 })
619
422
  ], s.prototype, "disabled", 2);
620
- a([
423
+ l([
621
424
  h({ type: String })
622
425
  ], s.prototype, "error", 2);
623
- a([
426
+ l([
624
427
  h({ type: String, reflect: !0 })
625
428
  ], s.prototype, "format", 2);
626
- a([
429
+ l([
627
430
  p()
628
431
  ], s.prototype, "_open", 2);
629
- a([
432
+ l([
630
433
  p()
631
434
  ], s.prototype, "_activeIndex", 2);
632
- a([
435
+ l([
633
436
  p()
634
437
  ], s.prototype, "_inputDisplayValue", 2);
635
- a([
438
+ l([
636
439
  p()
637
440
  ], s.prototype, "_hasLabelSlot", 2);
638
- a([
441
+ l([
639
442
  p()
640
443
  ], s.prototype, "_hasErrorSlot", 2);
641
- a([
444
+ l([
642
445
  p()
643
446
  ], s.prototype, "_hasHelpSlot", 2);
644
- a([
447
+ l([
645
448
  p()
646
449
  ], s.prototype, "_slottedLabelId", 2);
647
- a([
648
- $(".field__input")
450
+ l([
451
+ w(".field__input")
649
452
  ], s.prototype, "_inputEl", 2);
650
- a([
651
- $(".field__listbox")
453
+ l([
454
+ w(".field__listbox")
652
455
  ], s.prototype, "_listboxEl", 2);
653
- s = a([
456
+ s = l([
654
457
  L("hx-time-picker")
655
458
  ], s);
656
459
  export {
657
460
  s as H
658
461
  };
659
- //# sourceMappingURL=hx-time-picker-DRRAFuVd.js.map
462
+ //# sourceMappingURL=hx-time-picker-DmLu7WUC.js.map