@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
@@ -0,0 +1,258 @@
1
+ import { LitElement as m, html as c, nothing as x } from "lit";
2
+ import { state as d, property as h, customElement as f } from "lit/decorators.js";
3
+ import { ifDefined as p } from "lit/directives/if-defined.js";
4
+ import { A as u } from "./adopted-stylesheets-BZZnCSAs.js";
5
+ const v = `hx-form{display:flex;flex-direction:column;gap:var(--hx-form-gap, var(--hx-space-4, 1rem));max-width:var(--hx-form-max-width, none);padding:var(--hx-form-padding, 0)}hx-form .hx-form-error-summary{border:var(--hx-border-width-thin, 1px) solid var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));border-radius:var(--hx-border-radius-md, .375rem);background-color:var(--hx-color-error-50, #fef2f2);color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem);font-size:var(--hx-font-size-sm, .875rem);line-height:var(--hx-line-height-normal, 1.5);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form .hx-form-error-summary ul{margin:0;padding:0 0 0 var(--hx-space-4, 1rem)}hx-form .hx-form-error-summary li{margin-bottom:var(--hx-space-1, .25rem)}hx-form .hx-form-error-summary li:last-child{margin-bottom:0}hx-form .form-item{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form .form-item+.form-item{margin-top:var(--hx-space-4, 1rem)}hx-form 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-input-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}hx-form .form-required{color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));font-weight:var(--hx-font-weight-bold, 700)}hx-form .description{font-size:var(--hx-font-size-xs, .75rem);color:var(--hx-color-neutral-500, #6c757d);line-height:var(--hx-line-height-normal, 1.5)}hx-form .form-item :is(*,*:before,*:after){box-sizing:border-box}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea){display:block;width:100%;border:var(--hx-border-width-thin, 1px) solid var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-input-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));font-size:var(--hx-font-size-md, 1rem);color:var(--hx-input-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}hx-form input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]){min-height:var(--hx-size-10, 2.5rem)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea)::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):focus{outline:0;border-color:var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #2563eb));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #2563eb)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):read-only{background-color:var(--hx-color-neutral-100, #e9ecef)}hx-form input[type=search]::-webkit-search-decoration,hx-form input[type=search]::-webkit-search-cancel-button,hx-form input[type=search]::-webkit-search-results-button,hx-form input[type=search]::-webkit-search-results-decoration{-webkit-appearance:none}hx-form input[type=number]::-webkit-inner-spin-button,hx-form input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}hx-form input[type=number]{appearance:textfield}hx-form textarea{min-height:var(--hx-textarea-min-height, var(--hx-size-20, 5rem));resize:vertical}hx-form select{display:block;width:100%;border:var(--hx-border-width-thin, 1px) solid var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-select-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));padding:var(--hx-space-2, .5rem) var(--hx-space-8, 2rem) var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:var(--hx-select-font-family, var(--hx-font-family-sans, sans-serif));font-size:var(--hx-font-size-md, 1rem);color:var(--hx-select-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-input-height-md, var(--hx-size-10, 2.5rem));cursor:pointer;transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%236c757d' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--hx-space-3, .75rem) center;background-size:12px 8px}hx-form select:focus{outline:0;border-color:var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #2563eb));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #2563eb)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form select:disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form select[multiple]{min-height:var(--hx-size-20, 5rem);padding-right:var(--hx-space-3, .75rem);background-image:none}hx-form select[multiple] option{padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem)}hx-form select::-ms-expand{display:none}hx-form :is(input[type=checkbox],input[type=radio]){appearance:none;-webkit-appearance:none;-moz-appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;margin:0;background-color:var(--hx-color-neutral-0, #ffffff);cursor:pointer;vertical-align:middle;transition:background-color var(--hx-transition-fast, .15s ease),border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}hx-form input[type=checkbox]{width:var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));height:var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));border:var(--hx-border-width-medium, 2px) solid var(--hx-checkbox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-checkbox-border-radius, var(--hx-border-radius-sm, .25rem))}hx-form input[type=checkbox]:checked{background-color:var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));border-color:var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8.5L6.5 11.5L12.5 4.5' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:100%}hx-form input[type=checkbox]:indeterminate{background-color:var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));border-color:var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 8H12' stroke='%23ffffff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center;background-size:100%}hx-form input[type=checkbox]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form input[type=checkbox]:hover:not(:disabled){border-color:var(--hx-color-primary-500, #2563eb)}hx-form input[type=checkbox]:checked:hover:not(:disabled){filter:brightness(var(--hx-filter-brightness-hover, .9))}hx-form :is(input[type=checkbox],input[type=radio]):disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form :is(.form-type-checkbox,.form-type-checkbox-toggle){display:flex;align-items:flex-start;gap:var(--hx-space-2, .5rem)}hx-form :is(.form-type-checkbox,.form-type-checkbox-toggle) label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-checkbox-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form input[type=radio]{width:var(--hx-radio-size, var(--hx-size-5, 1.25rem));height:var(--hx-radio-size, var(--hx-size-5, 1.25rem));border:var(--hx-border-width-medium, 2px) solid var(--hx-radio-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-border-radius-full, 9999px)}hx-form input[type=radio]:checked{border-color:var(--hx-radio-checked-border-color, var(--hx-color-primary-500, #2563eb));background-color:var(--hx-radio-checked-bg, var(--hx-color-primary-500, #2563eb));box-shadow:inset 0 0 0 calc(var(--hx-radio-size, var(--hx-size-5, 1.25rem)) * .3) var(--hx-radio-dot-color, var(--hx-color-neutral-0, #ffffff))}hx-form input[type=radio]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-radio-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form input[type=radio]:hover:not(:disabled):not(:checked){border-color:var(--hx-color-neutral-400, #adb5bd)}hx-form .form-type-radio{display:inline-flex;align-items:center;gap:var(--hx-space-2, .5rem)}hx-form .form-type-radio label{font-size:var(--hx-font-size-md, 1rem);color:var(--hx-radio-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form .form-radios{display:flex;flex-direction:column;gap:var(--hx-radio-group-gap, var(--hx-space-3, .75rem))}hx-form .form-radios--horizontal{flex-direction:row;flex-wrap:wrap}hx-form .form-type-switch{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-font-family-sans, sans-serif)}hx-form .form-type-switch .switch__control-row{display:flex;align-items:center;gap:var(--hx-space-2, .5rem)}hx-form .form-type-switch input[type=checkbox]{position:relative;width:var(--hx-switch-track-width-md, var(--hx-size-10, 2.5rem));height:var(--hx-switch-track-height-md, var(--hx-size-5-5, 1.375rem));border:none;border-radius:var(--hx-border-radius-full, 9999px);background-color:var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));transition:background-color var(--hx-transition-fast, .15s ease);background-image:none}hx-form .form-type-switch input[type=checkbox]:before{content:"";position:absolute;top:50%;left:var(--hx-switch-thumb-offset, var(--hx-space-0-5, .125rem));transform:translateY(-50%);width:var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));height:var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));border-radius:var(--hx-border-radius-full, 9999px);background-color:var(--hx-switch-thumb-bg, var(--hx-color-neutral-0, #ffffff));box-shadow:var(--hx-switch-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / .05)));transition:transform var(--hx-transition-fast, .15s ease)}hx-form .form-type-switch input[type=checkbox]:checked{background-color:var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #2563eb));background-image:none}hx-form .form-type-switch input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem)))}hx-form .form-type-switch input[type=checkbox]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-switch-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form .form-type-switch input[type=checkbox]:disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form .form-type-switch label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form .form-type-switch--sm input[type=checkbox]{width:var(--hx-switch-track-width-sm, var(--hx-size-8, 2rem));height:var(--hx-switch-track-height-sm, var(--hx-size-4-5, 1.125rem))}hx-form .form-type-switch--sm input[type=checkbox]:before{width:var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem));height:var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem))}hx-form .form-type-switch--sm input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem)))}hx-form .form-type-switch--lg input[type=checkbox]{width:var(--hx-switch-track-width-lg, var(--hx-size-12, 3rem));height:var(--hx-switch-track-height-lg, var(--hx-size-6-5, 1.625rem))}hx-form .form-type-switch--lg input[type=checkbox]:before{width:var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));height:var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem))}hx-form .form-type-switch--lg input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem)))}hx-form form{display:flex;flex-direction:column;gap:var(--hx-form-gap, var(--hx-space-4, 1rem));font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form fieldset{border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-4, 1rem);margin:0;display:flex;flex-direction:column;gap:var(--hx-space-4, 1rem)}hx-form :is(legend,summary){font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-700, #343a40);line-height:var(--hx-line-height-normal, 1.5)}hx-form legend{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);padding:0 var(--hx-space-1, .25rem)}hx-form details{border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-4, 1rem);margin:0}hx-form summary{cursor:pointer;padding:var(--hx-space-1, .25rem) 0;user-select:none;-webkit-user-select:none}hx-form summary:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);outline-offset:var(--hx-focus-ring-offset, 2px);border-radius:var(--hx-border-radius-sm, .25rem)}hx-form .form-actions{display:flex;align-items:center;gap:var(--hx-space-3, .75rem);padding-top:var(--hx-space-4, 1rem)}hx-form .form-actions--end{justify-content:flex-end}hx-form .form-actions--between{justify-content:space-between}hx-form .form-columns{display:grid;gap:var(--hx-space-4, 1rem)}hx-form .form-columns--2{grid-template-columns:repeat(2,1fr)}hx-form .form-columns--3{grid-template-columns:repeat(3,1fr)}hx-form .form-columns--4{grid-template-columns:repeat(4,1fr)}@media(max-width:640px){hx-form .form-columns--2,hx-form .form-columns--3,hx-form .form-columns--4{grid-template-columns:1fr}}hx-form .form-item--full{grid-column:1 / -1}hx-form .form-inline{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--hx-space-3, .75rem)}hx-form .form-inline .form-item{flex:1;min-width:0}hx-form .form-inline .form-item+.form-item{margin-top:0}hx-form .form-divider{border:none;border-top:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);margin:var(--hx-space-2, .5rem) 0}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) label{color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select){border-color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{border-color:var(--hx-input-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-input-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=checkbox]{border-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=checkbox]:checked{background-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));border-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=radio]{border-color:var(--hx-color-error-500, #dc3545)}hx-form :is(.form-item__error-message,.form-item .error-message,.error-message,.form-item__success-message,.form-item .success-message,.success-message){font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}hx-form :is(.form-item__error-message,.form-item .error-message,.error-message){color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item__success-message,.form-item .success-message,.success-message){color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) label{color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select){border-color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{border-color:var(--hx-color-success-500, #198754);box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-color-success-500, #198754) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(.messages--error,.messages--status,.messages--warning){border:var(--hx-border-width-thin, 1px) solid;border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem);font-size:var(--hx-font-size-sm, .875rem);line-height:var(--hx-line-height-normal, 1.5)}hx-form .messages--error{border-color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));background-color:var(--hx-color-error-50, #fef2f2);color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form .messages--status{border-color:var(--hx-color-success-500, #198754);background-color:var(--hx-color-success-50, #f0fdf4);color:var(--hx-color-success-500, #198754)}hx-form .messages--warning{border-color:var(--hx-color-warning-500, #ffc107);background-color:var(--hx-color-warning-50, #fffbeb);color:var(--hx-color-warning-700, #92400e)}@media(forced-colors:active){hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{outline:2px solid CanvasText;outline-offset:2px}hx-form .hx-form-error-summary{border-color:LinkText}}
6
+ `, b = v;
7
+ var g = Object.defineProperty, y = Object.getOwnPropertyDescriptor, s = (e, r, t, o) => {
8
+ for (var a = o > 1 ? void 0 : o ? y(r, t) : r, n = e.length - 1, l; n >= 0; n--)
9
+ (l = e[n]) && (a = (o ? l(r, t, a) : l(a)) || a);
10
+ return o && a && g(r, t, a), a;
11
+ };
12
+ let i = class extends m {
13
+ constructor() {
14
+ super(...arguments), this._styles = new u(this, b, document), this._validationErrors = [], this.action = "", this.method = "post", this.novalidate = !1, this.name = "", this.enctype = "application/x-www-form-urlencoded", this._handleSubmit = (e) => {
15
+ if (this.action)
16
+ return;
17
+ if (e.preventDefault(), !this.novalidate && !this.checkValidity()) {
18
+ const o = this._collectValidationErrors();
19
+ this._validationErrors = o, this._applyAriaInvalidFromValidity(), this.dispatchEvent(
20
+ new CustomEvent("hx-invalid", {
21
+ bubbles: !0,
22
+ composed: !0,
23
+ detail: { errors: o }
24
+ })
25
+ );
26
+ return;
27
+ }
28
+ this._validationErrors = [], this._clearAriaInvalid();
29
+ const r = this.getFormData(), t = {};
30
+ for (const o of new Set(r.keys())) {
31
+ const a = r.getAll(o);
32
+ a.length === 1 && a[0] !== void 0 ? t[o] = a[0] : t[o] = a;
33
+ }
34
+ this.dispatchEvent(
35
+ new CustomEvent("hx-submit", {
36
+ bubbles: !0,
37
+ composed: !0,
38
+ detail: { valid: !0, values: t, formData: r }
39
+ })
40
+ );
41
+ }, this._handleReset = () => {
42
+ this._validationErrors = [], this._clearAriaInvalid(), this.dispatchEvent(
43
+ new CustomEvent("hx-reset", {
44
+ bubbles: !0,
45
+ composed: !0
46
+ })
47
+ );
48
+ };
49
+ }
50
+ // ─── Light DOM ───
51
+ createRenderRoot() {
52
+ return this;
53
+ }
54
+ // ─── Lifecycle ───
55
+ connectedCallback() {
56
+ super.connectedCallback(), this.addEventListener("submit", this._handleSubmit), this.addEventListener("reset", this._handleReset);
57
+ }
58
+ disconnectedCallback() {
59
+ super.disconnectedCallback(), this.removeEventListener("submit", this._handleSubmit), this.removeEventListener("reset", this._handleReset);
60
+ }
61
+ // ─── Public Methods ───
62
+ /**
63
+ * Checks the validity of all child form elements without showing
64
+ * validation UI. Returns `true` if all elements are valid.
65
+ */
66
+ checkValidity() {
67
+ return this._getAllValidatableElements().every((r) => "checkValidity" in r && typeof r.checkValidity == "function" ? r.checkValidity() : !0);
68
+ }
69
+ /**
70
+ * Checks validity and triggers the browser's constraint validation UI
71
+ * on each invalid element. Returns `true` if all elements are valid.
72
+ */
73
+ reportValidity() {
74
+ const e = this._getAllValidatableElements();
75
+ let r = !0;
76
+ for (const t of e)
77
+ "reportValidity" in t && typeof t.reportValidity == "function" && (t.reportValidity() || (r = !1));
78
+ return r;
79
+ }
80
+ /**
81
+ * Collects form data from all child form elements (native and hx-*).
82
+ * Returns a `FormData` object.
83
+ */
84
+ getFormData() {
85
+ const e = this.querySelector("form");
86
+ if (e)
87
+ return new FormData(e);
88
+ const r = new FormData(), t = this.getNativeFormElements();
89
+ for (const o of t) {
90
+ const a = o;
91
+ a.name && (a instanceof HTMLInputElement && (a.type === "checkbox" || a.type === "radio") ? a.checked && r.append(a.name, a.value || "on") : r.append(a.name, a.value));
92
+ }
93
+ return r;
94
+ }
95
+ /**
96
+ * Returns all child hx-* form components that implement the form
97
+ * component contract (hx-text-input, hx-select, hx-checkbox, hx-textarea,
98
+ * hx-radio-group, hx-switch).
99
+ *
100
+ * Note: This uses a hardcoded allowlist. When a new hx-* form component
101
+ * is added, update this selector to include it.
102
+ */
103
+ getFormElements() {
104
+ return Array.from(
105
+ this.querySelectorAll(
106
+ "hx-text-input, hx-select, hx-checkbox, hx-textarea, hx-radio-group, hx-switch"
107
+ )
108
+ );
109
+ }
110
+ /**
111
+ * Returns all native form elements (input, select, textarea, button)
112
+ * found within this component's light DOM.
113
+ */
114
+ getNativeFormElements() {
115
+ return Array.from(
116
+ this.querySelectorAll("input, select, textarea, button")
117
+ );
118
+ }
119
+ /**
120
+ * Programmatically sets server-side validation errors on the form.
121
+ * Renders an error summary and sets `aria-invalid="true"` on named fields.
122
+ *
123
+ * Useful for surfacing Drupal server-side validation responses.
124
+ *
125
+ * @param errors - Array of `{name, message}` pairs matching field `name` attributes.
126
+ */
127
+ setErrors(e) {
128
+ this._validationErrors = e, this._applyAriaInvalidFromErrors(e);
129
+ }
130
+ /**
131
+ * Programmatically sets a single field error. Merges with any existing errors.
132
+ *
133
+ * @param name - The `name` attribute of the field.
134
+ * @param message - The error message to display.
135
+ */
136
+ setFieldError(e, r) {
137
+ const t = this._validationErrors.filter((o) => o.name !== e);
138
+ this.setErrors([...t, { name: e, message: r }]);
139
+ }
140
+ /**
141
+ * Clears all validation errors from the error summary and removes
142
+ * `aria-invalid` from all fields.
143
+ */
144
+ clearErrors() {
145
+ this._clearAriaInvalid(), this._validationErrors = [];
146
+ }
147
+ // ─── Private Helpers ───
148
+ /**
149
+ * Returns all elements that support constraint validation, including
150
+ * both native form elements and hx-* components with `checkValidity`.
151
+ * @internal
152
+ */
153
+ _getAllValidatableElements() {
154
+ const e = Array.from(this.querySelectorAll("input, select, textarea")), r = this.getFormElements().filter(
155
+ (t) => "checkValidity" in t && typeof t.checkValidity == "function"
156
+ );
157
+ return [...e, ...r];
158
+ }
159
+ /**
160
+ * Sets `aria-invalid="true"` on fields with errors, removes it from valid fields.
161
+ * @internal
162
+ */
163
+ _applyAriaInvalidFromErrors(e) {
164
+ const r = new Set(e.map((o) => o.name)), t = this._getAllValidatableElements();
165
+ for (const o of t) {
166
+ const n = o.name ?? o.tagName.toLowerCase();
167
+ r.has(n) ? o.setAttribute("aria-invalid", "true") : o.removeAttribute("aria-invalid");
168
+ }
169
+ }
170
+ /**
171
+ * Sets `aria-invalid` based on native constraint validation state.
172
+ * @internal
173
+ */
174
+ _applyAriaInvalidFromValidity() {
175
+ const e = this._getAllValidatableElements();
176
+ for (const r of e)
177
+ "validity" in r && (r.validity.valid ? r.removeAttribute("aria-invalid") : r.setAttribute("aria-invalid", "true"));
178
+ }
179
+ /**
180
+ * Removes `aria-invalid` from all validatable elements.
181
+ * @internal
182
+ */
183
+ _clearAriaInvalid() {
184
+ const e = this._getAllValidatableElements();
185
+ for (const r of e)
186
+ r.removeAttribute("aria-invalid");
187
+ }
188
+ /**
189
+ * Collects constraint validation errors from all validatable elements after a failed submit attempt.
190
+ * @internal
191
+ */
192
+ _collectValidationErrors() {
193
+ const e = [], r = this._getAllValidatableElements();
194
+ for (const t of r)
195
+ if ("validity" in t && "validationMessage" in t) {
196
+ const o = t;
197
+ o.validity.valid || e.push({
198
+ name: o.name || o.tagName.toLowerCase(),
199
+ message: o.validationMessage
200
+ });
201
+ }
202
+ return e;
203
+ }
204
+ // ─── Render ───
205
+ render() {
206
+ const e = this._validationErrors.length > 0 ? c`
207
+ <div
208
+ class="hx-form-error-summary"
209
+ role="alert"
210
+ aria-live="assertive"
211
+ aria-atomic="true"
212
+ >
213
+ <ul>
214
+ ${this._validationErrors.map(
215
+ (r) => c`<li>${r.message || r.name}</li>`
216
+ )}
217
+ </ul>
218
+ </div>
219
+ ` : x;
220
+ return this.action ? c`
221
+ ${e}
222
+ <form
223
+ action=${this.action}
224
+ method=${this.method}
225
+ enctype=${this.enctype}
226
+ name=${p(this.name || void 0)}
227
+ ?novalidate=${this.novalidate}
228
+ >
229
+ <slot></slot>
230
+ </form>
231
+ ` : c`${e}<slot></slot>`;
232
+ }
233
+ };
234
+ s([
235
+ d()
236
+ ], i.prototype, "_validationErrors", 2);
237
+ s([
238
+ h({ type: String })
239
+ ], i.prototype, "action", 2);
240
+ s([
241
+ h({ type: String })
242
+ ], i.prototype, "method", 2);
243
+ s([
244
+ h({ type: Boolean })
245
+ ], i.prototype, "novalidate", 2);
246
+ s([
247
+ h({ type: String })
248
+ ], i.prototype, "name", 2);
249
+ s([
250
+ h({ type: String })
251
+ ], i.prototype, "enctype", 2);
252
+ i = s([
253
+ f("hx-form")
254
+ ], i);
255
+ export {
256
+ i as H
257
+ };
258
+ //# sourceMappingURL=hx-form-BpS6v3Iu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-form-BpS6v3Iu.js","sources":["../../src/styles/form/form.scoped.css?raw","../../src/components/hx-form/hx-form.styles.ts","../../src/components/hx-form/hx-form.ts"],"sourcesContent":["export default \"hx-form{display:flex;flex-direction:column;gap:var(--hx-form-gap, var(--hx-space-4, 1rem));max-width:var(--hx-form-max-width, none);padding:var(--hx-form-padding, 0)}hx-form .hx-form-error-summary{border:var(--hx-border-width-thin, 1px) solid var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));border-radius:var(--hx-border-radius-md, .375rem);background-color:var(--hx-color-error-50, #fef2f2);color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem);font-size:var(--hx-font-size-sm, .875rem);line-height:var(--hx-line-height-normal, 1.5);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form .hx-form-error-summary ul{margin:0;padding:0 0 0 var(--hx-space-4, 1rem)}hx-form .hx-form-error-summary li{margin-bottom:var(--hx-space-1, .25rem)}hx-form .hx-form-error-summary li:last-child{margin-bottom:0}hx-form .form-item{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form .form-item+.form-item{margin-top:var(--hx-space-4, 1rem)}hx-form 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-input-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}hx-form .form-required{color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));font-weight:var(--hx-font-weight-bold, 700)}hx-form .description{font-size:var(--hx-font-size-xs, .75rem);color:var(--hx-color-neutral-500, #6c757d);line-height:var(--hx-line-height-normal, 1.5)}hx-form .form-item :is(*,*:before,*:after){box-sizing:border-box}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea){display:block;width:100%;border:var(--hx-border-width-thin, 1px) solid var(--hx-input-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-input-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-input-bg, var(--hx-color-neutral-0, #ffffff));padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif));font-size:var(--hx-font-size-md, 1rem);color:var(--hx-input-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}hx-form input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]){min-height:var(--hx-size-10, 2.5rem)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea)::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):focus{outline:0;border-color:var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #2563eb));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #2563eb)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea):read-only{background-color:var(--hx-color-neutral-100, #e9ecef)}hx-form input[type=search]::-webkit-search-decoration,hx-form input[type=search]::-webkit-search-cancel-button,hx-form input[type=search]::-webkit-search-results-button,hx-form input[type=search]::-webkit-search-results-decoration{-webkit-appearance:none}hx-form input[type=number]::-webkit-inner-spin-button,hx-form input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}hx-form input[type=number]{appearance:textfield}hx-form textarea{min-height:var(--hx-textarea-min-height, var(--hx-size-20, 5rem));resize:vertical}hx-form select{display:block;width:100%;border:var(--hx-border-width-thin, 1px) solid var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-select-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));padding:var(--hx-space-2, .5rem) var(--hx-space-8, 2rem) var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:var(--hx-select-font-family, var(--hx-font-family-sans, sans-serif));font-size:var(--hx-font-size-md, 1rem);color:var(--hx-select-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-input-height-md, var(--hx-size-10, 2.5rem));cursor:pointer;transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%236c757d' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-position:right var(--hx-space-3, .75rem) center;background-size:12px 8px}hx-form select:focus{outline:0;border-color:var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #2563eb));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #2563eb)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form select:disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form select[multiple]{min-height:var(--hx-size-20, 5rem);padding-right:var(--hx-space-3, .75rem);background-image:none}hx-form select[multiple] option{padding:var(--hx-space-1, .25rem) var(--hx-space-2, .5rem)}hx-form select::-ms-expand{display:none}hx-form :is(input[type=checkbox],input[type=radio]){appearance:none;-webkit-appearance:none;-moz-appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;margin:0;background-color:var(--hx-color-neutral-0, #ffffff);cursor:pointer;vertical-align:middle;transition:background-color var(--hx-transition-fast, .15s ease),border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease)}hx-form input[type=checkbox]{width:var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));height:var(--hx-checkbox-size, var(--hx-size-5, 1.25rem));border:var(--hx-border-width-medium, 2px) solid var(--hx-checkbox-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-checkbox-border-radius, var(--hx-border-radius-sm, .25rem))}hx-form input[type=checkbox]:checked{background-color:var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));border-color:var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));background-image:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8.5L6.5 11.5L12.5 4.5' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-position:center;background-size:100%}hx-form input[type=checkbox]:indeterminate{background-color:var(--hx-checkbox-checked-bg, var(--hx-color-primary-500, #2563eb));border-color:var(--hx-checkbox-checked-border-color, var(--hx-color-primary-500, #2563eb));background-image:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M4 8H12' stroke='%23ffffff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-position:center;background-size:100%}hx-form input[type=checkbox]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form input[type=checkbox]:hover:not(:disabled){border-color:var(--hx-color-primary-500, #2563eb)}hx-form input[type=checkbox]:checked:hover:not(:disabled){filter:brightness(var(--hx-filter-brightness-hover, .9))}hx-form :is(input[type=checkbox],input[type=radio]):disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form :is(.form-type-checkbox,.form-type-checkbox-toggle){display:flex;align-items:flex-start;gap:var(--hx-space-2, .5rem)}hx-form :is(.form-type-checkbox,.form-type-checkbox-toggle) label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-checkbox-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form input[type=radio]{width:var(--hx-radio-size, var(--hx-size-5, 1.25rem));height:var(--hx-radio-size, var(--hx-size-5, 1.25rem));border:var(--hx-border-width-medium, 2px) solid var(--hx-radio-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-border-radius-full, 9999px)}hx-form input[type=radio]:checked{border-color:var(--hx-radio-checked-border-color, var(--hx-color-primary-500, #2563eb));background-color:var(--hx-radio-checked-bg, var(--hx-color-primary-500, #2563eb));box-shadow:inset 0 0 0 calc(var(--hx-radio-size, var(--hx-size-5, 1.25rem)) * .3) var(--hx-radio-dot-color, var(--hx-color-neutral-0, #ffffff))}hx-form input[type=radio]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-radio-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form input[type=radio]:hover:not(:disabled):not(:checked){border-color:var(--hx-color-neutral-400, #adb5bd)}hx-form .form-type-radio{display:inline-flex;align-items:center;gap:var(--hx-space-2, .5rem)}hx-form .form-type-radio label{font-size:var(--hx-font-size-md, 1rem);color:var(--hx-radio-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form .form-radios{display:flex;flex-direction:column;gap:var(--hx-radio-group-gap, var(--hx-space-3, .75rem))}hx-form .form-radios--horizontal{flex-direction:row;flex-wrap:wrap}hx-form .form-type-switch{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-font-family-sans, sans-serif)}hx-form .form-type-switch .switch__control-row{display:flex;align-items:center;gap:var(--hx-space-2, .5rem)}hx-form .form-type-switch input[type=checkbox]{position:relative;width:var(--hx-switch-track-width-md, var(--hx-size-10, 2.5rem));height:var(--hx-switch-track-height-md, var(--hx-size-5-5, 1.375rem));border:none;border-radius:var(--hx-border-radius-full, 9999px);background-color:var(--hx-switch-track-bg, var(--hx-color-neutral-300, #ced4da));transition:background-color var(--hx-transition-fast, .15s ease);background-image:none}hx-form .form-type-switch input[type=checkbox]:before{content:\\\"\\\";position:absolute;top:50%;left:var(--hx-switch-thumb-offset, var(--hx-space-0-5, .125rem));transform:translateY(-50%);width:var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));height:var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem));border-radius:var(--hx-border-radius-full, 9999px);background-color:var(--hx-switch-thumb-bg, var(--hx-color-neutral-0, #ffffff));box-shadow:var(--hx-switch-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / .05)));transition:transform var(--hx-transition-fast, .15s ease)}hx-form .form-type-switch input[type=checkbox]:checked{background-color:var(--hx-switch-track-checked-bg, var(--hx-color-primary-500, #2563eb));background-image:none}hx-form .form-type-switch input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-md, var(--hx-size-4-5, 1.125rem)))}hx-form .form-type-switch input[type=checkbox]:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-switch-focus-ring-color, var(--hx-focus-ring-color, #2563eb));outline-offset:var(--hx-focus-ring-offset, 2px)}hx-form .form-type-switch input[type=checkbox]:disabled{opacity:var(--hx-opacity-disabled, .5);cursor:not-allowed;pointer-events:none}hx-form .form-type-switch label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-switch-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5);cursor:pointer;user-select:none;-webkit-user-select:none}hx-form .form-type-switch--sm input[type=checkbox]{width:var(--hx-switch-track-width-sm, var(--hx-size-8, 2rem));height:var(--hx-switch-track-height-sm, var(--hx-size-4-5, 1.125rem))}hx-form .form-type-switch--sm input[type=checkbox]:before{width:var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem));height:var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem))}hx-form .form-type-switch--sm input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-sm, var(--hx-size-3-5, .875rem)))}hx-form .form-type-switch--lg input[type=checkbox]{width:var(--hx-switch-track-width-lg, var(--hx-size-12, 3rem));height:var(--hx-switch-track-height-lg, var(--hx-size-6-5, 1.625rem))}hx-form .form-type-switch--lg input[type=checkbox]:before{width:var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem));height:var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem))}hx-form .form-type-switch--lg input[type=checkbox]:checked:before{transform:translateY(-50%) translate(var(--hx-switch-thumb-size-lg, var(--hx-size-5-5, 1.375rem)))}hx-form form{display:flex;flex-direction:column;gap:var(--hx-form-gap, var(--hx-space-4, 1rem));font-family:var(--hx-input-font-family, var(--hx-font-family-sans, sans-serif))}hx-form fieldset{border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-4, 1rem);margin:0;display:flex;flex-direction:column;gap:var(--hx-space-4, 1rem)}hx-form :is(legend,summary){font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-700, #343a40);line-height:var(--hx-line-height-normal, 1.5)}hx-form legend{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);padding:0 var(--hx-space-1, .25rem)}hx-form details{border:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-4, 1rem);margin:0}hx-form summary{cursor:pointer;padding:var(--hx-space-1, .25rem) 0;user-select:none;-webkit-user-select:none}hx-form summary:focus-visible{outline:var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);outline-offset:var(--hx-focus-ring-offset, 2px);border-radius:var(--hx-border-radius-sm, .25rem)}hx-form .form-actions{display:flex;align-items:center;gap:var(--hx-space-3, .75rem);padding-top:var(--hx-space-4, 1rem)}hx-form .form-actions--end{justify-content:flex-end}hx-form .form-actions--between{justify-content:space-between}hx-form .form-columns{display:grid;gap:var(--hx-space-4, 1rem)}hx-form .form-columns--2{grid-template-columns:repeat(2,1fr)}hx-form .form-columns--3{grid-template-columns:repeat(3,1fr)}hx-form .form-columns--4{grid-template-columns:repeat(4,1fr)}@media(max-width:640px){hx-form .form-columns--2,hx-form .form-columns--3,hx-form .form-columns--4{grid-template-columns:1fr}}hx-form .form-item--full{grid-column:1 / -1}hx-form .form-inline{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--hx-space-3, .75rem)}hx-form .form-inline .form-item{flex:1;min-width:0}hx-form .form-inline .form-item+.form-item{margin-top:0}hx-form .form-divider{border:none;border-top:var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #dee2e6);margin:var(--hx-space-2, .5rem) 0}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) label{color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select){border-color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{border-color:var(--hx-input-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-input-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=checkbox]{border-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=checkbox]:checked{background-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545));border-color:var(--hx-checkbox-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item.error,.form-item.has-error,.form-item--error) input[type=radio]{border-color:var(--hx-color-error-500, #dc3545)}hx-form :is(.form-item__error-message,.form-item .error-message,.error-message,.form-item__success-message,.form-item .success-message,.success-message){font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}hx-form :is(.form-item__error-message,.form-item .error-message,.error-message){color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form :is(.form-item__success-message,.form-item .success-message,.success-message){color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) label{color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select){border-color:var(--hx-color-success-500, #198754)}hx-form :is(.form-item.success,.form-item.has-success,.form-item--success) :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{border-color:var(--hx-color-success-500, #198754);box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-color-success-500, #198754) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}hx-form :is(.messages--error,.messages--status,.messages--warning){border:var(--hx-border-width-thin, 1px) solid;border-radius:var(--hx-border-radius-md, .375rem);padding:var(--hx-space-3, .75rem) var(--hx-space-4, 1rem);font-size:var(--hx-font-size-sm, .875rem);line-height:var(--hx-line-height-normal, 1.5)}hx-form .messages--error{border-color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545));background-color:var(--hx-color-error-50, #fef2f2);color:var(--hx-input-error-color, var(--hx-color-error-500, #dc3545))}hx-form .messages--status{border-color:var(--hx-color-success-500, #198754);background-color:var(--hx-color-success-50, #f0fdf4);color:var(--hx-color-success-500, #198754)}hx-form .messages--warning{border-color:var(--hx-color-warning-500, #ffc107);background-color:var(--hx-color-warning-50, #fffbeb);color:var(--hx-color-warning-700, #92400e)}@media(forced-colors:active){hx-form :is(input:is([type=text],[type=email],[type=password],[type=tel],[type=url],[type=search],[type=number]),textarea,select):focus{outline:2px solid CanvasText;outline-offset:2px}hx-form .hx-form-error-summary{border-color:LinkText}}\\n\"","import formScopedCss from '../../styles/form/form.scoped.css?raw';\n\nexport const helixFormScopedCss = formScopedCss;\n","import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { AdoptedStylesheetsController } from '../../controllers/adopted-stylesheets.js';\nimport { helixFormScopedCss } from './hx-form.styles.js';\n\n/**\n * A Light DOM form wrapper that styles native HTML form elements and\n * hx-* components with the design system's form styles.\n *\n * When `action` is set, renders a `<form>` wrapper around slotted content.\n * When no `action` is set (the Drupal pattern), renders only a `<slot>`\n * so Drupal can provide its own `<form>` tag.\n *\n * Uses adopted stylesheets to inject scoped CSS into the document without\n * Shadow DOM, keeping native form participation and Drupal compatibility.\n *\n * @summary Light DOM form wrapper with scoped styles for native and hx-* form elements.\n *\n * @tag hx-form\n *\n * @slot - Default slot for form fields and controls.\n *\n * @fires {CustomEvent<{valid: boolean, values: Record<string, FormDataEntryValue | FormDataEntryValue[]>, formData: FormData}>} hx-submit - Dispatched on valid client-side submit when no action is set.\n * @fires {CustomEvent<{errors: Array<{name: string, message: string}>}>} hx-invalid - Dispatched when validation fails on submit.\n * @fires {CustomEvent} hx-reset - Dispatched when the form is reset.\n *\n * @cssprop [--hx-form-gap=var(--hx-space-4)] - Gap between form fields.\n * @cssprop [--hx-form-max-width=none] - Maximum width of the form.\n * @cssprop [--hx-form-padding=0] - Internal padding of the form.\n */\n@customElement('hx-form')\nexport class HelixForm extends LitElement {\n // ─── Light DOM ───\n\n override createRenderRoot(): HTMLElement {\n return this;\n }\n\n // ─── Adopted Stylesheets ───\n\n /**\n * Controller that injects scoped CSS into the document via adopted stylesheets for Light DOM styling.\n * @internal\n */\n private _styles = new AdoptedStylesheetsController(this, helixFormScopedCss, document);\n\n // ─── Internal State ───\n\n /**\n * Current list of validation errors rendered in the error summary and used to set aria-invalid on fields.\n * @internal\n */\n @state()\n private _validationErrors: Array<{ name: string; message: string }> = [];\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('submit', this._handleSubmit);\n this.addEventListener('reset', this._handleReset);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('submit', this._handleSubmit);\n this.removeEventListener('reset', this._handleReset);\n }\n\n // ─── Properties ───\n\n /**\n * The URL to submit the form to. When empty, the form handles\n * submission client-side only and dispatches `hx-submit`.\n * @attr action\n */\n @property({ type: String })\n action = '';\n\n /**\n * The HTTP method used when submitting the form.\n * @attr method\n */\n @property({ type: String })\n method: 'get' | 'post' = 'post';\n\n /**\n * When true, disables the browser's built-in constraint validation\n * on form submission.\n * @attr novalidate\n */\n @property({ type: Boolean })\n novalidate = false;\n\n /**\n * Identifies the form for scripting and form discovery.\n * @attr name\n */\n @property({ type: String })\n name = '';\n\n /**\n * The encoding type for form submission. Only used when `action` is set.\n * Use `multipart/form-data` for forms with file uploads.\n * @attr enctype\n */\n @property({ type: String })\n enctype: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain' =\n 'application/x-www-form-urlencoded';\n\n // ─── Public Methods ───\n\n /**\n * Checks the validity of all child form elements without showing\n * validation UI. Returns `true` if all elements are valid.\n */\n checkValidity(): boolean {\n const formElements = this._getAllValidatableElements();\n return formElements.every((el) => {\n if ('checkValidity' in el && typeof el.checkValidity === 'function') {\n return (el as HTMLInputElement).checkValidity();\n }\n return true;\n });\n }\n\n /**\n * Checks validity and triggers the browser's constraint validation UI\n * on each invalid element. Returns `true` if all elements are valid.\n */\n reportValidity(): boolean {\n const formElements = this._getAllValidatableElements();\n let allValid = true;\n for (const el of formElements) {\n if ('reportValidity' in el && typeof el.reportValidity === 'function') {\n if (!(el as HTMLInputElement).reportValidity()) {\n allValid = false;\n }\n }\n }\n return allValid;\n }\n\n /**\n * Collects form data from all child form elements (native and hx-*).\n * Returns a `FormData` object.\n */\n getFormData(): FormData {\n // If there is a native <form> child, use it directly\n const formEl = this.querySelector('form');\n if (formEl) {\n return new FormData(formEl);\n }\n\n // Otherwise, manually collect from all named inputs\n const formData = new FormData();\n const elements = this.getNativeFormElements();\n for (const el of elements) {\n const input = el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (!input.name) continue;\n\n if (input instanceof HTMLInputElement) {\n if (input.type === 'checkbox' || input.type === 'radio') {\n if (input.checked) {\n formData.append(input.name, input.value || 'on');\n }\n } else {\n formData.append(input.name, input.value);\n }\n } else {\n formData.append(input.name, input.value);\n }\n }\n\n return formData;\n }\n\n /**\n * Returns all child hx-* form components that implement the form\n * component contract (hx-text-input, hx-select, hx-checkbox, hx-textarea,\n * hx-radio-group, hx-switch).\n *\n * Note: This uses a hardcoded allowlist. When a new hx-* form component\n * is added, update this selector to include it.\n */\n getFormElements(): HTMLElement[] {\n return Array.from(\n this.querySelectorAll<HTMLElement>(\n 'hx-text-input, hx-select, hx-checkbox, hx-textarea, hx-radio-group, hx-switch',\n ),\n );\n }\n\n /**\n * Returns all native form elements (input, select, textarea, button)\n * found within this component's light DOM.\n */\n getNativeFormElements(): Array<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLButtonElement\n > {\n return Array.from(\n this.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLButtonElement\n >('input, select, textarea, button'),\n );\n }\n\n /**\n * Programmatically sets server-side validation errors on the form.\n * Renders an error summary and sets `aria-invalid=\"true\"` on named fields.\n *\n * Useful for surfacing Drupal server-side validation responses.\n *\n * @param errors - Array of `{name, message}` pairs matching field `name` attributes.\n */\n setErrors(errors: Array<{ name: string; message: string }>): void {\n this._validationErrors = errors;\n this._applyAriaInvalidFromErrors(errors);\n }\n\n /**\n * Programmatically sets a single field error. Merges with any existing errors.\n *\n * @param name - The `name` attribute of the field.\n * @param message - The error message to display.\n */\n setFieldError(name: string, message: string): void {\n const existing = this._validationErrors.filter((e) => e.name !== name);\n this.setErrors([...existing, { name, message }]);\n }\n\n /**\n * Clears all validation errors from the error summary and removes\n * `aria-invalid` from all fields.\n */\n clearErrors(): void {\n this._clearAriaInvalid();\n this._validationErrors = [];\n }\n\n // ─── Private Helpers ───\n\n /**\n * Returns all elements that support constraint validation, including\n * both native form elements and hx-* components with `checkValidity`.\n * @internal\n */\n private _getAllValidatableElements(): HTMLElement[] {\n const native = Array.from(this.querySelectorAll<HTMLElement>('input, select, textarea'));\n const wcElements = this.getFormElements().filter(\n (el) =>\n 'checkValidity' in el &&\n typeof (el as Record<string, unknown>).checkValidity === 'function',\n );\n return [...native, ...wcElements];\n }\n\n /**\n * Sets `aria-invalid=\"true\"` on fields with errors, removes it from valid fields.\n * @internal\n */\n private _applyAriaInvalidFromErrors(errors: Array<{ name: string; message: string }>): void {\n const errorNames = new Set(errors.map((e) => e.name));\n const allElements = this._getAllValidatableElements();\n for (const el of allElements) {\n const named = el as HTMLElement & { name?: string };\n const fieldName = named.name ?? el.tagName.toLowerCase();\n if (errorNames.has(fieldName)) {\n el.setAttribute('aria-invalid', 'true');\n } else {\n el.removeAttribute('aria-invalid');\n }\n }\n }\n\n /**\n * Sets `aria-invalid` based on native constraint validation state.\n * @internal\n */\n private _applyAriaInvalidFromValidity(): void {\n const allElements = this._getAllValidatableElements();\n for (const el of allElements) {\n if ('validity' in el) {\n const validatable = el as HTMLInputElement;\n if (!validatable.validity.valid) {\n el.setAttribute('aria-invalid', 'true');\n } else {\n el.removeAttribute('aria-invalid');\n }\n }\n }\n }\n\n /**\n * Removes `aria-invalid` from all validatable elements.\n * @internal\n */\n private _clearAriaInvalid(): void {\n const allElements = this._getAllValidatableElements();\n for (const el of allElements) {\n el.removeAttribute('aria-invalid');\n }\n }\n\n // ─── Event Handling ───\n\n /**\n * Handles native form submit events, intercepting for client-side validation and hx-submit dispatch.\n * @internal\n */\n private _handleSubmit = (e: Event): void => {\n // If there is an action, let native form submission happen\n if (this.action) {\n return;\n }\n\n // Client-side only: prevent default and dispatch hx-submit or hx-invalid\n e.preventDefault();\n\n if (!this.novalidate && !this.checkValidity()) {\n const errors = this._collectValidationErrors();\n this._validationErrors = errors;\n this._applyAriaInvalidFromValidity();\n\n /**\n * Dispatched when validation fails on submit.\n * @event hx-invalid\n */\n this.dispatchEvent(\n new CustomEvent<{ errors: Array<{ name: string; message: string }> }>('hx-invalid', {\n bubbles: true,\n composed: true,\n detail: { errors },\n }),\n );\n return;\n }\n\n // Clear any previous errors on successful submit\n this._validationErrors = [];\n this._clearAriaInvalid();\n\n const formData = this.getFormData();\n const values: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n for (const key of new Set(formData.keys())) {\n const all = formData.getAll(key);\n if (all.length === 1 && all[0] !== undefined) {\n values[key] = all[0];\n } else {\n values[key] = all;\n }\n }\n\n /**\n * Dispatched on valid client-side submit.\n * @event hx-submit\n */\n this.dispatchEvent(\n new CustomEvent<{\n valid: boolean;\n values: Record<string, FormDataEntryValue | FormDataEntryValue[]>;\n formData: FormData;\n }>('hx-submit', {\n bubbles: true,\n composed: true,\n detail: { valid: true, values, formData },\n }),\n );\n };\n\n /**\n * Handles native form reset events, clearing validation errors and dispatching hx-reset.\n * @internal\n */\n private _handleReset = (): void => {\n this._validationErrors = [];\n this._clearAriaInvalid();\n\n /**\n * Dispatched when the form is reset.\n * @event hx-reset\n */\n this.dispatchEvent(\n new CustomEvent<void>('hx-reset', {\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n /**\n * Collects constraint validation errors from all validatable elements after a failed submit attempt.\n * @internal\n */\n private _collectValidationErrors(): Array<{ name: string; message: string }> {\n const errors: Array<{ name: string; message: string }> = [];\n const elements = this._getAllValidatableElements();\n\n for (const el of elements) {\n if ('validity' in el && 'validationMessage' in el) {\n const validatable = el as HTMLInputElement;\n if (!validatable.validity.valid) {\n errors.push({\n name: validatable.name || validatable.tagName.toLowerCase(),\n message: validatable.validationMessage,\n });\n }\n }\n }\n\n return errors;\n }\n\n // ─── Render ───\n\n override render() {\n const errorSummary =\n this._validationErrors.length > 0\n ? html`\n <div\n class=\"hx-form-error-summary\"\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n <ul>\n ${this._validationErrors.map(\n (error) => html`<li>${error.message || error.name}</li>`,\n )}\n </ul>\n </div>\n `\n : nothing;\n\n if (this.action) {\n return html`\n ${errorSummary}\n <form\n action=${this.action}\n method=${this.method}\n enctype=${this.enctype}\n name=${ifDefined(this.name || undefined)}\n ?novalidate=${this.novalidate}\n >\n <slot></slot>\n </form>\n `;\n }\n\n return html`${errorSummary}<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-form': HelixForm;\n }\n}\n"],"names":["formScopedCss","helixFormScopedCss","HelixForm","LitElement","AdoptedStylesheetsController","errors","formData","values","key","all","el","formElements","allValid","formEl","elements","input","name","message","existing","e","native","wcElements","errorNames","allElements","fieldName","validatable","errorSummary","html","error","nothing","ifDefined","__decorateClass","state","property","customElement"],"mappings":"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"}
@@ -22,6 +22,7 @@ let r = class extends D {
22
22
  super(...arguments), this.date = "", this.lang = "", this.month = void 0, this.year = void 0, this.day = void 0, this.weekday = void 0, this.hour = void 0, this.minute = void 0, this.second = void 0, this.timeZoneName = void 0, this.timeZone = void 0, this.hourFormat = "auto", this.numeric = "auto", this.relative = !1;
23
23
  }
24
24
  // ─── Private helpers ───
25
+ /** @internal */
25
26
  _getDate() {
26
27
  const o = this.date;
27
28
  if (o === "") return /* @__PURE__ */ new Date();
@@ -39,9 +40,11 @@ let r = class extends D {
39
40
  const i = new Date(o);
40
41
  return isNaN(i.getTime()) ? /* @__PURE__ */ new Date() : i;
41
42
  }
43
+ /** @internal */
42
44
  _getLocale() {
43
45
  return this.lang ? this.lang : document.documentElement.lang || navigator.language || "en";
44
46
  }
47
+ /** @internal */
45
48
  _getHour12() {
46
49
  if (this.hourFormat === "12") return !0;
47
50
  if (this.hourFormat === "24") return !1;
@@ -51,6 +54,7 @@ let r = class extends D {
51
54
  * timezone-offset ISO string (e.g. `2024-09-20T05:00:00-04:00`) so that
52
55
  * assistive technology reads the same local time as the visual display.
53
56
  */
57
+ /** @internal */
54
58
  _getDatetimeAttr(o) {
55
59
  if (!this.timeZone) return o.toISOString();
56
60
  try {
@@ -78,6 +82,7 @@ let r = class extends D {
78
82
  return o.toISOString();
79
83
  }
80
84
  }
85
+ /** @internal */
81
86
  _formatRelative(o) {
82
87
  const t = /* @__PURE__ */ new Date(), i = o.getTime() - t.getTime(), e = Math.round(i / 1e3), a = Math.abs(e), s = Math.round(e / 60), c = Math.abs(s), y = Math.round(e / 3600), l = Math.abs(y), f = Math.round(e / 86400), v = Math.abs(f), p = Math.round(f / 30), m = Math.abs(p), g = Math.round(f / 365), d = this._getLocale(), b = `${d}|${this.numeric}`;
83
88
  let u = r._rtfCache.get(b);
@@ -93,6 +98,7 @@ let r = class extends D {
93
98
  return "";
94
99
  }
95
100
  }
101
+ /** @internal */
96
102
  _formatAbsolute(o) {
97
103
  const t = {};
98
104
  this.month !== void 0 && (t.month = this.month), this.year !== void 0 && (t.year = this.year), this.day !== void 0 && (t.day = this.day), this.weekday !== void 0 && (t.weekday = this.weekday), this.hour !== void 0 && (t.hour = this.hour), this.minute !== void 0 && (t.minute = this.minute), this.second !== void 0 && (t.second = this.second), this.timeZoneName !== void 0 && (t.timeZoneName = this.timeZoneName), this.timeZone !== void 0 && (t.timeZone = this.timeZone);
@@ -169,4 +175,4 @@ r = n([
169
175
  export {
170
176
  r as H
171
177
  };
172
- //# sourceMappingURL=hx-format-date-BsVr8gpD.js.map
178
+ //# sourceMappingURL=hx-format-date-BdnWV2kX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-format-date-BdnWV2kX.js","sources":["../../src/components/hx-format-date/hx-format-date.styles.ts","../../src/components/hx-format-date/hx-format-date.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixFormatDateStyles = css`\n :host {\n display: inline;\n }\n\n [part='base'] {\n display: inline;\n font: inherit;\n color: inherit;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixFormatDateStyles } from './hx-format-date.styles.js';\n\n/**\n * Formats and displays a date/time value using the browser's `Intl.DateTimeFormat`\n * (or `Intl.RelativeTimeFormat` when `relative` is set). Renders as an inline\n * `<time>` element — machine-readable via `datetime`, human-readable via formatted text.\n *\n * No external dependencies. Uses native Intl APIs only.\n *\n * @summary Inline date/time formatter using Intl APIs with semantic `<time>` output.\n *\n * @tag hx-format-date\n *\n * @csspart base - The inner `<time>` element.\n */\n@customElement('hx-format-date')\nexport class HelixFormatDate extends LitElement {\n static override styles = [tokenStyles, helixFormatDateStyles];\n\n // ─── Intl formatter caches (keyed by locale+options fingerprint) ───\n /** @internal */\n private static _dtfCache = new Map<string, Intl.DateTimeFormat>();\n /** @internal */\n private static _rtfCache = new Map<string, Intl.RelativeTimeFormat>();\n\n /**\n * The date/time value to format. Accepts an ISO string, a Unix timestamp (ms), or\n * a `Date` object. Defaults to the current date/time when empty.\n * @attr date\n */\n @property()\n date: string | number | Date = '';\n\n /**\n * BCP 47 locale tag used for formatting (e.g. `\"en-US\"`, `\"de\"`, `\"ja\"`).\n * Defaults to `document.documentElement.lang`, then `navigator.language`.\n * @attr lang\n */\n @property()\n override lang = '';\n\n /**\n * Month display format.\n * @attr month\n */\n @property()\n month: 'narrow' | 'short' | 'long' | 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Year display format.\n * @attr year\n */\n @property()\n year: 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Day display format.\n * @attr day\n */\n @property()\n day: 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Weekday display format.\n * @attr weekday\n */\n @property()\n weekday: 'narrow' | 'short' | 'long' | undefined = undefined;\n\n /**\n * Hour display format.\n * @attr hour\n */\n @property()\n hour: 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Minute display format.\n * @attr minute\n */\n @property()\n minute: 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Second display format.\n * @attr second\n */\n @property()\n second: 'numeric' | '2-digit' | undefined = undefined;\n\n /**\n * Time zone name display format. Accepts all values supported by\n * `Intl.DateTimeFormatOptions.timeZoneName` including `'short'`, `'long'`,\n * `'shortOffset'`, `'longOffset'`, `'shortGeneric'`, and `'longGeneric'`.\n * @attr time-zone-name\n */\n @property({ attribute: 'time-zone-name' })\n timeZoneName: Intl.DateTimeFormatOptions['timeZoneName'] = undefined;\n\n /**\n * IANA time zone identifier (e.g. `\"America/New_York\"`, `\"UTC\"`).\n * @attr time-zone\n */\n @property({ attribute: 'time-zone' })\n timeZone: string | undefined = undefined;\n\n /**\n * Whether to use 12-hour or 24-hour clock. `\"auto\"` defers to locale default.\n * @attr hour-format\n */\n @property({ attribute: 'hour-format' })\n hourFormat: 'auto' | '12' | '24' = 'auto';\n\n /**\n * Controls whether `Intl.RelativeTimeFormat` always shows numeric output\n * (`\"always\"`) or uses natural language when possible (`\"auto\"`, e.g. \"yesterday\").\n * Only used when `relative` is true.\n * @attr numeric\n */\n @property()\n numeric: 'always' | 'auto' = 'auto';\n\n /**\n * When true, displays a relative time string such as \"2 hours ago\" or \"in 3 days\"\n * using `Intl.RelativeTimeFormat`.\n *\n * **Important:** The relative time string is computed once at render time and does\n * not auto-update. If the displayed text must stay current (e.g. a live \"X minutes\n * ago\" counter), the consuming component must re-set the `date` property on its own\n * interval to trigger a re-render.\n * @attr relative\n */\n @property({ type: Boolean })\n relative = false;\n\n // ─── Private helpers ───\n\n /** @internal */\n private _getDate(): Date {\n const val = this.date;\n if (val === '') return new Date();\n if (val instanceof Date) {\n return isNaN(val.getTime()) ? new Date() : val;\n }\n if (typeof val === 'number') {\n const d = new Date(val);\n return isNaN(d.getTime()) ? new Date() : d;\n }\n // Numeric strings (e.g. Unix timestamps set via HTML attribute) must be\n // converted to a number before passing to Date — new Date(\"1718462400000\")\n // returns Invalid Date in most JS engines.\n const asNumber = Number(val);\n if (!isNaN(asNumber)) {\n const d = new Date(asNumber);\n return isNaN(d.getTime()) ? new Date() : d;\n }\n const parsed = new Date(val);\n return isNaN(parsed.getTime()) ? new Date() : parsed;\n }\n\n /** @internal */\n private _getLocale(): string {\n if (this.lang) return this.lang;\n return document.documentElement.lang || navigator.language || 'en';\n }\n\n /** @internal */\n private _getHour12(): boolean | undefined {\n if (this.hourFormat === '12') return true;\n if (this.hourFormat === '24') return false;\n return undefined;\n }\n\n /**\n * Returns the `datetime` attribute value. When `timeZone` is set, returns a\n * timezone-offset ISO string (e.g. `2024-09-20T05:00:00-04:00`) so that\n * assistive technology reads the same local time as the visual display.\n */\n /** @internal */\n private _getDatetimeAttr(date: Date): string {\n if (!this.timeZone) return date.toISOString();\n try {\n const fmtOpts: Intl.DateTimeFormatOptions = {\n timeZone: this.timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n };\n const reduceParts = (parts: Intl.DateTimeFormatPart[]) =>\n parts.reduce<Record<string, string>>((acc, p) => {\n if (p.type !== 'literal') acc[p.type] = p.value;\n return acc;\n }, {});\n\n const tzParts = reduceParts(new Intl.DateTimeFormat('en-CA', fmtOpts).formatToParts(date));\n const utcParts = reduceParts(\n new Intl.DateTimeFormat('en-CA', { ...fmtOpts, timeZone: 'UTC' }).formatToParts(date),\n );\n\n const toMs = (p: Record<string, string>) =>\n Date.UTC(\n parseInt(p['year'] ?? '0'),\n parseInt(p['month'] ?? '1') - 1,\n parseInt(p['day'] ?? '1'),\n parseInt(p['hour'] === '24' ? '0' : (p['hour'] ?? '0')),\n parseInt(p['minute'] ?? '0'),\n parseInt(p['second'] ?? '0'),\n );\n\n const offsetMin = Math.round((toMs(tzParts) - toMs(utcParts)) / 60000);\n const sign = offsetMin >= 0 ? '+' : '-';\n const absMin = Math.abs(offsetMin);\n const hh = String(Math.floor(absMin / 60)).padStart(2, '0');\n const mm = String(absMin % 60).padStart(2, '0');\n const h = tzParts['hour'] === '24' ? '00' : (tzParts['hour'] ?? '00');\n return `${tzParts['year']}-${tzParts['month']}-${tzParts['day']}T${h}:${tzParts['minute']}:${tzParts['second']}${sign}${hh}:${mm}`;\n } catch {\n return date.toISOString();\n }\n }\n\n /** @internal */\n private _formatRelative(date: Date): string {\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffSec = Math.round(diffMs / 1000);\n const absSec = Math.abs(diffSec);\n const diffMin = Math.round(diffSec / 60);\n const absMin = Math.abs(diffMin);\n const diffHour = Math.round(diffSec / 3600);\n const absHour = Math.abs(diffHour);\n const diffDay = Math.round(diffSec / 86400);\n const absDay = Math.abs(diffDay);\n const diffMonth = Math.round(diffDay / 30);\n const absMonth = Math.abs(diffMonth);\n const diffYear = Math.round(diffDay / 365);\n\n const locale = this._getLocale();\n const cacheKey = `${locale}|${this.numeric}`;\n let rtf = HelixFormatDate._rtfCache.get(cacheKey);\n if (!rtf) {\n try {\n rtf = new Intl.RelativeTimeFormat(locale, { numeric: this.numeric });\n HelixFormatDate._rtfCache.set(cacheKey, rtf);\n } catch {\n return '';\n }\n }\n\n try {\n if (absSec < 60) return rtf.format(diffSec, 'second');\n if (absMin < 60) return rtf.format(diffMin, 'minute');\n if (absHour < 24) return rtf.format(diffHour, 'hour');\n if (absDay < 30) return rtf.format(diffDay, 'day');\n if (absMonth < 12) return rtf.format(diffMonth, 'month');\n return rtf.format(diffYear, 'year');\n } catch {\n return '';\n }\n }\n\n /** @internal */\n private _formatAbsolute(date: Date): string {\n const options: Intl.DateTimeFormatOptions = {};\n\n if (this.month !== undefined) options.month = this.month;\n if (this.year !== undefined) options.year = this.year;\n if (this.day !== undefined) options.day = this.day;\n if (this.weekday !== undefined) options.weekday = this.weekday;\n if (this.hour !== undefined) options.hour = this.hour;\n if (this.minute !== undefined) options.minute = this.minute;\n if (this.second !== undefined) options.second = this.second;\n if (this.timeZoneName !== undefined) options.timeZoneName = this.timeZoneName;\n if (this.timeZone !== undefined) options.timeZone = this.timeZone;\n\n const hour12 = this._getHour12();\n if (hour12 !== undefined) options.hour12 = hour12;\n\n // Fall back to a sensible default when no format options are specified\n if (Object.keys(options).length === 0) {\n options.year = 'numeric';\n options.month = 'long';\n options.day = 'numeric';\n }\n\n const locale = this._getLocale();\n const cacheKey = `${locale}|${JSON.stringify(options)}`;\n let dtf = HelixFormatDate._dtfCache.get(cacheKey);\n if (!dtf) {\n try {\n dtf = new Intl.DateTimeFormat(locale, options);\n HelixFormatDate._dtfCache.set(cacheKey, dtf);\n } catch {\n // Invalid options (e.g. unknown timeZone) — return empty string\n return '';\n }\n }\n\n try {\n return dtf.format(date);\n } catch {\n return '';\n }\n }\n\n // ─── Render ───\n\n override render() {\n const date = this._getDate();\n const datetimeAttr = this._getDatetimeAttr(date);\n const formattedText = this.relative ? this._formatRelative(date) : this._formatAbsolute(date);\n\n return html`<time part=\"base\" datetime=${datetimeAttr}>${formattedText}</time>`;\n }\n}\n\nexport type HxFormatDate = HelixFormatDate;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-format-date': HelixFormatDate;\n }\n}\n"],"names":["helixFormatDateStyles","css","HelixFormatDate","LitElement","val","d","asNumber","parsed","date","fmtOpts","reduceParts","parts","acc","p","tzParts","utcParts","toMs","offsetMin","sign","absMin","hh","mm","h","now","diffMs","diffSec","absSec","diffMin","diffHour","absHour","diffDay","absDay","diffMonth","absMonth","diffYear","locale","cacheKey","rtf","options","hour12","dtf","datetimeAttr","formattedText","html","tokenStyles","__decorateClass","property","customElement"],"mappings":";;;AAEO,MAAMA,IAAwBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACiB9B,IAAMC,IAAN,cAA8BC,EAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA,GAeL,KAAA,OAA+B,IAQ/B,KAAS,OAAO,IAOhB,KAAA,QAAyE,QAOzE,KAAA,OAA0C,QAO1C,KAAA,MAAyC,QAOzC,KAAA,UAAmD,QAOnD,KAAA,OAA0C,QAO1C,KAAA,SAA4C,QAO5C,KAAA,SAA4C,QAS5C,KAAA,eAA2D,QAO3D,KAAA,WAA+B,QAO/B,KAAA,aAAmC,QASnC,KAAA,UAA6B,QAa7B,KAAA,WAAW;AAAA,EAAA;AAAA;AAAA;AAAA,EAKH,WAAiB;AACvB,UAAMC,IAAM,KAAK;AACjB,QAAIA,MAAQ,GAAI,QAAO,oBAAI,KAAA;AAC3B,QAAIA,aAAe;AACjB,aAAO,MAAMA,EAAI,QAAA,CAAS,IAAI,oBAAI,SAASA;AAE7C,QAAI,OAAOA,KAAQ,UAAU;AAC3B,YAAMC,IAAI,IAAI,KAAKD,CAAG;AACtB,aAAO,MAAMC,EAAE,QAAA,CAAS,IAAI,oBAAI,SAASA;AAAA,IAC3C;AAIA,UAAMC,IAAW,OAAOF,CAAG;AAC3B,QAAI,CAAC,MAAME,CAAQ,GAAG;AACpB,YAAMD,IAAI,IAAI,KAAKC,CAAQ;AAC3B,aAAO,MAAMD,EAAE,QAAA,CAAS,IAAI,oBAAI,SAASA;AAAA,IAC3C;AACA,UAAME,IAAS,IAAI,KAAKH,CAAG;AAC3B,WAAO,MAAMG,EAAO,QAAA,CAAS,IAAI,oBAAI,SAASA;AAAA,EAChD;AAAA;AAAA,EAGQ,aAAqB;AAC3B,WAAI,KAAK,OAAa,KAAK,OACpB,SAAS,gBAAgB,QAAQ,UAAU,YAAY;AAAA,EAChE;AAAA;AAAA,EAGQ,aAAkC;AACxC,QAAI,KAAK,eAAe,KAAM,QAAO;AACrC,QAAI,KAAK,eAAe,KAAM,QAAO;AAAA,EAEvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,iBAAiBC,GAAoB;AAC3C,QAAI,CAAC,KAAK,SAAU,QAAOA,EAAK,YAAA;AAChC,QAAI;AACF,YAAMC,IAAsC;AAAA,QAC1C,UAAU,KAAK;AAAA,QACf,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MAAA,GAEJC,IAAc,CAACC,MACnBA,EAAM,OAA+B,CAACC,GAAKC,OACrCA,EAAE,SAAS,gBAAeA,EAAE,IAAI,IAAIA,EAAE,QACnCD,IACN,CAAA,CAAE,GAEDE,IAAUJ,EAAY,IAAI,KAAK,eAAe,SAASD,CAAO,EAAE,cAAcD,CAAI,CAAC,GACnFO,IAAWL;AAAA,QACf,IAAI,KAAK,eAAe,SAAS,EAAE,GAAGD,GAAS,UAAU,MAAA,CAAO,EAAE,cAAcD,CAAI;AAAA,MAAA,GAGhFQ,IAAO,CAACH,MACZ,KAAK;AAAA,QACH,SAASA,EAAE,QAAW,GAAG;AAAA,QACzB,SAASA,EAAE,SAAY,GAAG,IAAI;AAAA,QAC9B,SAASA,EAAE,OAAU,GAAG;AAAA,QACxB,SAASA,EAAE,SAAY,OAAO,MAAOA,EAAE,QAAW,GAAI;AAAA,QACtD,SAASA,EAAE,UAAa,GAAG;AAAA,QAC3B,SAASA,EAAE,UAAa,GAAG;AAAA,MAAA,GAGzBI,IAAY,KAAK,OAAOD,EAAKF,CAAO,IAAIE,EAAKD,CAAQ,KAAK,GAAK,GAC/DG,IAAOD,KAAa,IAAI,MAAM,KAC9BE,IAAS,KAAK,IAAIF,CAAS,GAC3BG,IAAK,OAAO,KAAK,MAAMD,IAAS,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG,GACpDE,IAAK,OAAOF,IAAS,EAAE,EAAE,SAAS,GAAG,GAAG,GACxCG,IAAIR,EAAQ,SAAY,OAAO,OAAQA,EAAQ,QAAW;AAChE,aAAO,GAAGA,EAAQ,IAAO,IAAIA,EAAQ,KAAQ,IAAIA,EAAQ,GAAM,IAAIQ,CAAC,IAAIR,EAAQ,MAAS,IAAIA,EAAQ,MAAS,GAAGI,CAAI,GAAGE,CAAE,IAAIC,CAAE;AAAA,IAClI,QAAQ;AACN,aAAOb,EAAK,YAAA;AAAA,IACd;AAAA,EACF;AAAA;AAAA,EAGQ,gBAAgBA,GAAoB;AAC1C,UAAMe,wBAAU,KAAA,GACVC,IAAShB,EAAK,QAAA,IAAYe,EAAI,QAAA,GAC9BE,IAAU,KAAK,MAAMD,IAAS,GAAI,GAClCE,IAAS,KAAK,IAAID,CAAO,GACzBE,IAAU,KAAK,MAAMF,IAAU,EAAE,GACjCN,IAAS,KAAK,IAAIQ,CAAO,GACzBC,IAAW,KAAK,MAAMH,IAAU,IAAI,GACpCI,IAAU,KAAK,IAAID,CAAQ,GAC3BE,IAAU,KAAK,MAAML,IAAU,KAAK,GACpCM,IAAS,KAAK,IAAID,CAAO,GACzBE,IAAY,KAAK,MAAMF,IAAU,EAAE,GACnCG,IAAW,KAAK,IAAID,CAAS,GAC7BE,IAAW,KAAK,MAAMJ,IAAU,GAAG,GAEnCK,IAAS,KAAK,WAAA,GACdC,IAAW,GAAGD,CAAM,IAAI,KAAK,OAAO;AAC1C,QAAIE,IAAMnC,EAAgB,UAAU,IAAIkC,CAAQ;AAChD,QAAI,CAACC;AACH,UAAI;AACF,QAAAA,IAAM,IAAI,KAAK,mBAAmBF,GAAQ,EAAE,SAAS,KAAK,SAAS,GACnEjC,EAAgB,UAAU,IAAIkC,GAAUC,CAAG;AAAA,MAC7C,QAAQ;AACN,eAAO;AAAA,MACT;AAGF,QAAI;AACF,aAAIX,IAAS,KAAWW,EAAI,OAAOZ,GAAS,QAAQ,IAChDN,IAAS,KAAWkB,EAAI,OAAOV,GAAS,QAAQ,IAChDE,IAAU,KAAWQ,EAAI,OAAOT,GAAU,MAAM,IAChDG,IAAS,KAAWM,EAAI,OAAOP,GAAS,KAAK,IAC7CG,IAAW,KAAWI,EAAI,OAAOL,GAAW,OAAO,IAChDK,EAAI,OAAOH,GAAU,MAAM;AAAA,IACpC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGQ,gBAAgB1B,GAAoB;AAC1C,UAAM8B,IAAsC,CAAA;AAE5C,IAAI,KAAK,UAAU,WAAWA,EAAQ,QAAQ,KAAK,QAC/C,KAAK,SAAS,WAAWA,EAAQ,OAAO,KAAK,OAC7C,KAAK,QAAQ,WAAWA,EAAQ,MAAM,KAAK,MAC3C,KAAK,YAAY,WAAWA,EAAQ,UAAU,KAAK,UACnD,KAAK,SAAS,WAAWA,EAAQ,OAAO,KAAK,OAC7C,KAAK,WAAW,WAAWA,EAAQ,SAAS,KAAK,SACjD,KAAK,WAAW,WAAWA,EAAQ,SAAS,KAAK,SACjD,KAAK,iBAAiB,WAAWA,EAAQ,eAAe,KAAK,eAC7D,KAAK,aAAa,WAAWA,EAAQ,WAAW,KAAK;AAEzD,UAAMC,IAAS,KAAK,WAAA;AACpB,IAAIA,MAAW,WAAWD,EAAQ,SAASC,IAGvC,OAAO,KAAKD,CAAO,EAAE,WAAW,MAClCA,EAAQ,OAAO,WACfA,EAAQ,QAAQ,QAChBA,EAAQ,MAAM;AAGhB,UAAMH,IAAS,KAAK,WAAA,GACdC,IAAW,GAAGD,CAAM,IAAI,KAAK,UAAUG,CAAO,CAAC;AACrD,QAAIE,IAAMtC,EAAgB,UAAU,IAAIkC,CAAQ;AAChD,QAAI,CAACI;AACH,UAAI;AACF,QAAAA,IAAM,IAAI,KAAK,eAAeL,GAAQG,CAAO,GAC7CpC,EAAgB,UAAU,IAAIkC,GAAUI,CAAG;AAAA,MAC7C,QAAQ;AAEN,eAAO;AAAA,MACT;AAGF,QAAI;AACF,aAAOA,EAAI,OAAOhC,CAAI;AAAA,IACxB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAIS,SAAS;AAChB,UAAMA,IAAO,KAAK,SAAA,GACZiC,IAAe,KAAK,iBAAiBjC,CAAI,GACzCkC,IAAgB,KAAK,WAAW,KAAK,gBAAgBlC,CAAI,IAAI,KAAK,gBAAgBA,CAAI;AAE5F,WAAOmC,+BAAkCF,CAAY,IAAIC,CAAa;AAAA,EACxE;AACF;AA9SaxC,EACK,SAAS,CAAC0C,GAAa5C,CAAqB;AADjDE,EAKI,gCAAgB,IAAA;AALpBA,EAOI,gCAAgB,IAAA;AAQ/B2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAdC5C,EAeX,WAAA,QAAA,CAAA;AAQS2C,EAAA;AAAA,EADRC,EAAA;AAAS,GAtBC5C,EAuBF,WAAA,QAAA,CAAA;AAOT2C,EAAA;AAAA,EADCC,EAAA;AAAS,GA7BC5C,EA8BX,WAAA,SAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GApCC5C,EAqCX,WAAA,QAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GA3CC5C,EA4CX,WAAA,OAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAlDC5C,EAmDX,WAAA,WAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAzDC5C,EA0DX,WAAA,QAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAhEC5C,EAiEX,WAAA,UAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAvEC5C,EAwEX,WAAA,UAAA,CAAA;AASA2C,EAAA;AAAA,EADCC,EAAS,EAAE,WAAW,iBAAA,CAAkB;AAAA,GAhF9B5C,EAiFX,WAAA,gBAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAS,EAAE,WAAW,YAAA,CAAa;AAAA,GAvFzB5C,EAwFX,WAAA,YAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAS,EAAE,WAAW,cAAA,CAAe;AAAA,GA9F3B5C,EA+FX,WAAA,cAAA,CAAA;AASA2C,EAAA;AAAA,EADCC,EAAA;AAAS,GAvGC5C,EAwGX,WAAA,WAAA,CAAA;AAaA2C,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GApHhB5C,EAqHX,WAAA,YAAA,CAAA;AArHWA,IAAN2C,EAAA;AAAA,EADNE,EAAc,gBAAgB;AAAA,GAClB7C,CAAA;"}
@@ -1,23 +1,24 @@
1
1
  import { css as m, LitElement as c, html as d } from "lit";
2
2
  import { property as s, customElement as g } from "lit/decorators.js";
3
+ import { styleMap as f } from "lit/directives/style-map.js";
3
4
  import { tokenStyles as y } from "@helixui/tokens/lit";
4
- const f = m`
5
+ const v = m`
5
6
  :host {
6
7
  display: block;
7
8
  box-sizing: border-box;
8
9
  width: 100%;
9
10
  }
10
- `, v = m`
11
+ `, x = m`
11
12
  :host {
12
13
  display: block;
13
14
  min-width: 0;
14
15
  min-height: 0;
15
16
  }
16
17
  `;
17
- var x = Object.defineProperty, G = Object.getOwnPropertyDescriptor, e = (t, l, a, p) => {
18
- for (var o = p > 1 ? void 0 : p ? G(l, a) : l, n = t.length - 1, u; n >= 0; n--)
18
+ var G = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, e = (t, l, a, p) => {
19
+ for (var o = p > 1 ? void 0 : p ? _(l, a) : l, n = t.length - 1, u; n >= 0; n--)
19
20
  (u = t[n]) && (o = (p ? u(l, a, o) : u(o)) || o);
20
- return p && o && x(l, a, o), o;
21
+ return p && o && G(l, a, o), o;
21
22
  };
22
23
  const h = {
23
24
  none: "0",
@@ -31,38 +32,43 @@ let r = class extends c {
31
32
  constructor() {
32
33
  super(...arguments), this.columns = 1, this.gap = "md", this.align = "stretch", this.justify = "stretch";
33
34
  }
35
+ /** @internal */
34
36
  _gridTemplateColumns() {
35
37
  const t = this.columns;
36
38
  return typeof t == "number" || /^\d+$/.test(String(t)) ? `var(--hx-grid-columns, repeat(${t}, 1fr))` : `var(--hx-grid-columns, ${t})`;
37
39
  }
40
+ /** @internal */
38
41
  _resolveGap(t) {
39
42
  return h[t] ?? h.md;
40
43
  }
44
+ /** @internal */
41
45
  _computedRowGap() {
42
46
  return this.rowGap ? `var(--hx-grid-row-gap, ${this._resolveGap(this.rowGap)})` : `var(--hx-grid-row-gap, var(--hx-grid-gap, ${this._resolveGap(this.gap)}))`;
43
47
  }
48
+ /** @internal */
44
49
  _computedColumnGap() {
45
50
  return this.columnGap ? `var(--hx-grid-column-gap, ${this._resolveGap(this.columnGap)})` : `var(--hx-grid-column-gap, var(--hx-grid-gap, ${this._resolveGap(this.gap)}))`;
46
51
  }
47
- _baseStyle() {
48
- return [
49
- "display: grid",
50
- `grid-template-columns: ${this._gridTemplateColumns()}`,
51
- `row-gap: ${this._computedRowGap()}`,
52
- `column-gap: ${this._computedColumnGap()}`,
53
- `align-items: ${this.align}`,
54
- `justify-items: ${this.justify}`
55
- ].join("; ");
52
+ /** @internal */
53
+ _baseStyleMap() {
54
+ return {
55
+ display: "grid",
56
+ "grid-template-columns": this._gridTemplateColumns(),
57
+ "row-gap": this._computedRowGap(),
58
+ "column-gap": this._computedColumnGap(),
59
+ "align-items": this.align,
60
+ "justify-items": this.justify
61
+ };
56
62
  }
57
63
  render() {
58
64
  return d`
59
- <div part="base" role="presentation" style=${this._baseStyle()}>
65
+ <div part="base" role="presentation" style=${f(this._baseStyleMap())}>
60
66
  <slot></slot>
61
67
  </div>
62
68
  `;
63
69
  }
64
70
  };
65
- r.styles = [y, f];
71
+ r.styles = [y, v];
66
72
  e([
67
73
  s({ reflect: !0 })
68
74
  ], r.prototype, "columns", 2);
@@ -91,6 +97,7 @@ let i = class extends c {
91
97
  connectedCallback() {
92
98
  super.connectedCallback(), this._applyHostGridStyles();
93
99
  }
100
+ /** @internal */
94
101
  _applyHostGridStyles() {
95
102
  this.column ? this.style.gridColumn = this.column : this.span !== void 0 ? this.style.gridColumn = `span ${this.span}` : this.style.gridColumn = "", this.row ? this.style.gridRow = this.row : this.style.gridRow = "";
96
103
  }
@@ -98,7 +105,7 @@ let i = class extends c {
98
105
  return d`<slot></slot>`;
99
106
  }
100
107
  };
101
- i.styles = [y, v];
108
+ i.styles = [y, x];
102
109
  e([
103
110
  s({ reflect: !0 })
104
111
  ], i.prototype, "column", 2);
@@ -115,4 +122,4 @@ export {
115
122
  r as H,
116
123
  i as a
117
124
  };
118
- //# sourceMappingURL=hx-grid-BsDBCTbt.js.map
125
+ //# sourceMappingURL=hx-grid-gEjuF0cR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-grid-gEjuF0cR.js","sources":["../../src/components/hx-grid/hx-grid.styles.ts","../../src/components/hx-grid/hx-grid.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixGridStyles = css`\n :host {\n display: block;\n box-sizing: border-box;\n width: 100%;\n }\n`;\n\nexport const helixGridItemStyles = css`\n :host {\n display: block;\n min-width: 0;\n min-height: 0;\n }\n`;\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixGridStyles, helixGridItemStyles } from './hx-grid.styles.js';\n\ntype GapSize = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\ntype AlignValue = 'start' | 'center' | 'end' | 'stretch';\ntype JustifyValue = 'start' | 'center' | 'end' | 'stretch';\n\nconst GAP_TOKENS: Record<GapSize, string> = {\n none: '0',\n xs: 'var(--hx-space-1, 0.25rem)',\n sm: 'var(--hx-space-2, 0.5rem)',\n md: 'var(--hx-space-4, 1rem)',\n lg: 'var(--hx-space-6, 1.5rem)',\n xl: 'var(--hx-space-8, 2rem)',\n};\n\n/**\n * A CSS Grid layout wrapper with design-token-based column and gap system.\n *\n * @summary CSS Grid layout primitive for building responsive grid layouts.\n *\n * @tag hx-grid\n *\n * @slot - Default slot for grid content (use `hx-grid-item` for precise placement).\n *\n * @csspart base - The grid container element.\n *\n * @cssprop [--hx-grid-columns] - Override the computed grid-template-columns.\n * @cssprop [--hx-grid-gap] - Override the computed gap.\n * @cssprop [--hx-grid-row-gap] - Override the computed row-gap.\n * @cssprop [--hx-grid-column-gap] - Override the computed column-gap.\n */\n@customElement('hx-grid')\nexport class HelixGrid extends LitElement {\n static override styles = [tokenStyles, helixGridStyles];\n\n /**\n * Number of equal columns (`repeat(N, 1fr)`) or a CSS grid-template-columns string.\n * @attr columns\n */\n @property({ reflect: true })\n columns: number | string = 1;\n\n /**\n * Gap size applied to both row and column gaps.\n * @attr gap\n */\n @property({ reflect: true })\n gap: GapSize = 'md';\n\n /**\n * Row gap override. When set, takes precedence over `gap` for row spacing.\n * @attr row-gap\n */\n @property({ attribute: 'row-gap', reflect: true })\n rowGap: GapSize | undefined;\n\n /**\n * Column gap override. When set, takes precedence over `gap` for column spacing.\n * @attr column-gap\n */\n @property({ attribute: 'column-gap', reflect: true })\n columnGap: GapSize | undefined;\n\n /**\n * Aligns grid items along the block axis (align-items).\n * @attr align\n */\n @property({ reflect: true })\n align: AlignValue = 'stretch';\n\n /**\n * Justifies grid items along the inline axis (justify-items).\n * @attr justify\n */\n @property({ reflect: true })\n justify: JustifyValue = 'stretch';\n\n /** @internal */\n private _gridTemplateColumns(): string {\n const cols = this.columns;\n if (typeof cols === 'number' || /^\\d+$/.test(String(cols))) {\n return `var(--hx-grid-columns, repeat(${cols}, 1fr))`;\n }\n return `var(--hx-grid-columns, ${cols})`;\n }\n\n /** @internal */\n private _resolveGap(size: GapSize): string {\n return GAP_TOKENS[size] ?? GAP_TOKENS.md;\n }\n\n /** @internal */\n private _computedRowGap(): string {\n if (this.rowGap) {\n return `var(--hx-grid-row-gap, ${this._resolveGap(this.rowGap)})`;\n }\n return `var(--hx-grid-row-gap, var(--hx-grid-gap, ${this._resolveGap(this.gap)}))`;\n }\n\n /** @internal */\n private _computedColumnGap(): string {\n if (this.columnGap) {\n return `var(--hx-grid-column-gap, ${this._resolveGap(this.columnGap)})`;\n }\n return `var(--hx-grid-column-gap, var(--hx-grid-gap, ${this._resolveGap(this.gap)}))`;\n }\n\n /** @internal */\n private _baseStyleMap(): Record<string, string> {\n return {\n display: 'grid',\n 'grid-template-columns': this._gridTemplateColumns(),\n 'row-gap': this._computedRowGap(),\n 'column-gap': this._computedColumnGap(),\n 'align-items': this.align,\n 'justify-items': this.justify,\n };\n }\n\n override render() {\n return html`\n <div part=\"base\" role=\"presentation\" style=${styleMap(this._baseStyleMap())}>\n <slot></slot>\n </div>\n `;\n }\n}\n\n/**\n * Optional companion element for precise grid item placement.\n * Applies grid-column and grid-row directly to the host element\n * so it participates correctly in the parent CSS grid layout.\n *\n * @summary Grid item with explicit column/row placement.\n *\n * @tag hx-grid-item\n *\n * @slot - Default slot for item content.\n */\n@customElement('hx-grid-item')\nexport class HelixGridItem extends LitElement {\n static override styles = [tokenStyles, helixGridItemStyles];\n\n /**\n * CSS grid-column value (e.g., \"1 / 3\", \"span 2\").\n * @attr column\n */\n @property({ reflect: true })\n column: string | undefined;\n\n /**\n * CSS grid-row value (e.g., \"1 / 2\").\n * @attr row\n */\n @property({ reflect: true })\n row: string | undefined;\n\n /**\n * Column span shorthand — equivalent to setting `column: \"span N\"`.\n * @attr span\n */\n @property({ type: Number, reflect: true })\n span: number | undefined;\n\n override updated(changed: PropertyValues<this>): void {\n if (changed.has('column') || changed.has('row') || changed.has('span')) {\n this._applyHostGridStyles();\n }\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._applyHostGridStyles();\n }\n\n /** @internal */\n private _applyHostGridStyles(): void {\n if (this.column) {\n this.style.gridColumn = this.column;\n } else if (this.span !== undefined) {\n this.style.gridColumn = `span ${this.span}`;\n } else {\n this.style.gridColumn = '';\n }\n if (this.row) {\n this.style.gridRow = this.row;\n } else {\n this.style.gridRow = '';\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-grid': HelixGrid;\n 'hx-grid-item': HelixGridItem;\n }\n}\n"],"names":["helixGridStyles","css","helixGridItemStyles","GAP_TOKENS","HelixGrid","LitElement","cols","size","html","styleMap","tokenStyles","__decorateClass","property","customElement","HelixGridItem","changed"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { css as p, html as n, LitElement as v, nothing as c } from "lit";
1
+ import { css as p, LitElement as v, nothing as c, html as n } from "lit";
2
2
  import { property as f, customElement as u } from "lit/decorators.js";
3
3
  import { classMap as d } from "lit/directives/class-map.js";
4
4
  import { ifDefined as h } from "lit/directives/if-defined.js";
@@ -132,4 +132,4 @@ i = x([
132
132
  export {
133
133
  i as H
134
134
  };
135
- //# sourceMappingURL=hx-help-text-DaOPN1iB.js.map
135
+ //# sourceMappingURL=hx-help-text-BAcEGRUE.js.map