@helixui/library 1.1.2-next.9 → 2.0.0-next.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/custom-elements.json +229 -224
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  3. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/index.js +1 -1
  5. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  6. package/dist/components/hx-action-bar/index.js +1 -1
  7. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  8. package/dist/components/hx-alert/index.js +1 -1
  9. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  10. package/dist/components/hx-avatar/index.js +1 -1
  11. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  12. package/dist/components/hx-badge/index.js +1 -1
  13. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  14. package/dist/components/hx-banner/index.js +1 -1
  15. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  16. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  17. package/dist/components/hx-breadcrumb/index.js +1 -1
  18. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  19. package/dist/components/hx-button/index.js +1 -1
  20. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  21. package/dist/components/hx-button-group/index.js +1 -1
  22. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  23. package/dist/components/hx-card/index.js +1 -1
  24. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  25. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  26. package/dist/components/hx-carousel/index.js +1 -1
  27. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  28. package/dist/components/hx-checkbox/index.js +1 -1
  29. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  30. package/dist/components/hx-checkbox-group/index.js +1 -1
  31. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  32. package/dist/components/hx-clinical-status/index.js +1 -1
  33. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  34. package/dist/components/hx-code-snippet/index.js +1 -1
  35. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  36. package/dist/components/hx-color-picker/index.js +1 -1
  37. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  38. package/dist/components/hx-combobox/index.js +1 -1
  39. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  40. package/dist/components/hx-container/index.js +1 -1
  41. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  42. package/dist/components/hx-copy-button/index.js +1 -1
  43. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  44. package/dist/components/hx-counter/index.js +1 -1
  45. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  46. package/dist/components/hx-data-table/index.js +1 -1
  47. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  48. package/dist/components/hx-date-picker/index.js +1 -1
  49. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  50. package/dist/components/hx-dialog/index.js +1 -1
  51. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  52. package/dist/components/hx-divider/index.js +1 -1
  53. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  54. package/dist/components/hx-drawer/index.js +1 -1
  55. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  56. package/dist/components/hx-dropdown/index.js +1 -1
  57. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  58. package/dist/components/hx-field/index.js +1 -1
  59. package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
  60. package/dist/components/hx-field-label/index.js +1 -1
  61. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  62. package/dist/components/hx-file-upload/index.js +1 -1
  63. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  64. package/dist/components/hx-format-date/index.js +1 -1
  65. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  66. package/dist/components/hx-grid/index.js +1 -1
  67. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  68. package/dist/components/hx-help-text/index.js +1 -1
  69. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  70. package/dist/components/hx-icon/index.js +1 -1
  71. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  72. package/dist/components/hx-icon-button/index.js +1 -1
  73. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  74. package/dist/components/hx-image/index.js +1 -1
  75. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  76. package/dist/components/hx-link/index.js +1 -1
  77. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  78. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  79. package/dist/components/hx-list/index.js +1 -1
  80. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  81. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  82. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  83. package/dist/components/hx-menu/index.js +1 -1
  84. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  85. package/dist/components/hx-meter/index.js +1 -1
  86. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  87. package/dist/components/hx-nav/index.js +1 -1
  88. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  89. package/dist/components/hx-number-input/index.js +1 -1
  90. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  91. package/dist/components/hx-overflow-menu/index.js +1 -1
  92. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  93. package/dist/components/hx-pagination/index.js +1 -1
  94. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
  95. package/dist/components/hx-patient-banner/index.js +1 -1
  96. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  97. package/dist/components/hx-phi-field/index.js +1 -1
  98. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  99. package/dist/components/hx-popover/index.js +1 -1
  100. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  101. package/dist/components/hx-popup/index.js +1 -1
  102. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  103. package/dist/components/hx-progress-bar/index.js +1 -1
  104. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  105. package/dist/components/hx-progress-ring/index.js +1 -1
  106. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  107. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  108. package/dist/components/hx-radio-group/index.js +1 -1
  109. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  110. package/dist/components/hx-rating/index.js +1 -1
  111. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  112. package/dist/components/hx-select/index.js +1 -1
  113. package/dist/components/hx-side-nav/hx-nav-item.d.ts +5 -0
  114. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  115. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  116. package/dist/components/hx-side-nav/index.js +1 -1
  117. package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
  118. package/dist/components/hx-skeleton/index.js +1 -1
  119. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  120. package/dist/components/hx-slider/index.js +1 -1
  121. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  122. package/dist/components/hx-spinner/index.js +1 -1
  123. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  124. package/dist/components/hx-split-button/index.js +1 -1
  125. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  126. package/dist/components/hx-split-panel/index.js +1 -1
  127. package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
  128. package/dist/components/hx-stack/index.js +1 -1
  129. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  130. package/dist/components/hx-stat/index.js +1 -1
  131. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  132. package/dist/components/hx-status-indicator/index.js +1 -1
  133. package/dist/components/hx-steps/hx-step.d.ts +7 -0
  134. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  135. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  136. package/dist/components/hx-steps/index.js +1 -1
  137. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  138. package/dist/components/hx-structured-list/index.js +1 -1
  139. package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -1
  140. package/dist/components/hx-style-scope/index.js +1 -1
  141. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  142. package/dist/components/hx-switch/index.js +1 -1
  143. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  144. package/dist/components/hx-table/hx-tbody.d.ts.map +1 -1
  145. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  146. package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -1
  147. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  148. package/dist/components/hx-table/hx-thead.d.ts.map +1 -1
  149. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  150. package/dist/components/hx-table/index.js +1 -1
  151. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  152. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  153. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  154. package/dist/components/hx-tabs/index.js +1 -1
  155. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  156. package/dist/components/hx-tag/index.js +1 -1
  157. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  158. package/dist/components/hx-text/index.js +1 -1
  159. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  160. package/dist/components/hx-text-input/index.js +1 -1
  161. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  162. package/dist/components/hx-textarea/index.js +1 -1
  163. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  164. package/dist/components/hx-theme/index.js +1 -1
  165. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  166. package/dist/components/hx-time-picker/index.js +1 -1
  167. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  168. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  169. package/dist/components/hx-toast/index.js +1 -1
  170. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  171. package/dist/components/hx-toggle-button/index.js +1 -1
  172. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  173. package/dist/components/hx-tooltip/index.js +1 -1
  174. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  175. package/dist/components/hx-top-nav/index.js +1 -1
  176. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  177. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  178. package/dist/components/hx-tree-view/index.js +1 -1
  179. package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts.map +1 -1
  180. package/dist/components/hx-visually-hidden/index.js +1 -1
  181. package/dist/css/index.css +1 -1
  182. package/dist/css/manifest.json +1 -1
  183. package/dist/index.d.ts +1 -9
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +191 -189
  186. package/dist/index.js.map +1 -1
  187. package/dist/shared/document-token-adoption-Dym9ALA4.js +15 -0
  188. package/dist/shared/document-token-adoption-Dym9ALA4.js.map +1 -0
  189. package/dist/shared/{hx-accordion-_KeulaQR.js → hx-accordion-Cvs-uzZq.js} +21 -21
  190. package/dist/shared/hx-accordion-Cvs-uzZq.js.map +1 -0
  191. package/dist/shared/{hx-action-bar-vGFnNwNY.js → hx-action-bar-B2BNlKQv.js} +12 -12
  192. package/dist/shared/hx-action-bar-B2BNlKQv.js.map +1 -0
  193. package/dist/shared/{hx-alert-DRZYP0Oo.js → hx-alert-CnDlZO6m.js} +7 -7
  194. package/dist/shared/hx-alert-CnDlZO6m.js.map +1 -0
  195. package/dist/shared/{hx-avatar-CZfA9KEl.js → hx-avatar-C68g1G2e.js} +7 -7
  196. package/dist/shared/hx-avatar-C68g1G2e.js.map +1 -0
  197. package/dist/shared/{hx-badge-Xg7zoh4Q.js → hx-badge-D5vy_5BO.js} +7 -7
  198. package/dist/shared/hx-badge-D5vy_5BO.js.map +1 -0
  199. package/dist/shared/{hx-banner-2RS7Nux4.js → hx-banner-Ccif-GaB.js} +7 -7
  200. package/dist/shared/hx-banner-Ccif-GaB.js.map +1 -0
  201. package/dist/shared/{hx-breadcrumb-item-CObc-WJl.js → hx-breadcrumb-item-DhxDZI3r.js} +14 -14
  202. package/dist/shared/hx-breadcrumb-item-DhxDZI3r.js.map +1 -0
  203. package/dist/shared/{hx-button-CC1YH9RZ.js → hx-button-BF3VwcOJ.js} +11 -11
  204. package/dist/shared/hx-button-BF3VwcOJ.js.map +1 -0
  205. package/dist/shared/{hx-button-group-ChTQsnQj.js → hx-button-group-B8u25JjV.js} +12 -12
  206. package/dist/shared/hx-button-group-B8u25JjV.js.map +1 -0
  207. package/dist/shared/{hx-card-dIKdcMhr.js → hx-card-Dps4jvG9.js} +7 -7
  208. package/dist/shared/hx-card-Dps4jvG9.js.map +1 -0
  209. package/dist/shared/{hx-carousel-item-Cm8a1nAi.js → hx-carousel-item-Dmo9pGFm.js} +23 -23
  210. package/dist/shared/hx-carousel-item-Dmo9pGFm.js.map +1 -0
  211. package/dist/shared/{hx-checkbox-_WUiuTo9.js → hx-checkbox-99zyEKj7.js} +16 -16
  212. package/dist/shared/hx-checkbox-99zyEKj7.js.map +1 -0
  213. package/dist/shared/{hx-checkbox-group-B-ci-dxp.js → hx-checkbox-group-J2CGHDwY.js} +23 -23
  214. package/dist/shared/hx-checkbox-group-J2CGHDwY.js.map +1 -0
  215. package/dist/shared/{hx-clinical-status-D6eaplvs.js → hx-clinical-status-CGx5q5PL.js} +11 -11
  216. package/dist/shared/hx-clinical-status-CGx5q5PL.js.map +1 -0
  217. package/dist/shared/{hx-code-snippet-CQsyvthi.js → hx-code-snippet-vAzJjm2O.js} +7 -7
  218. package/dist/shared/hx-code-snippet-vAzJjm2O.js.map +1 -0
  219. package/dist/shared/{hx-color-picker-Dk2Myvaf.js → hx-color-picker-CzMu9Fzw.js} +13 -13
  220. package/dist/shared/hx-color-picker-CzMu9Fzw.js.map +1 -0
  221. package/dist/shared/{hx-combobox-CNAJXIxo.js → hx-combobox-Dhw33U40.js} +9 -9
  222. package/dist/shared/hx-combobox-Dhw33U40.js.map +1 -0
  223. package/dist/shared/{hx-container-7j16VuQE.js → hx-container-Dz4v6FSd.js} +8 -8
  224. package/dist/shared/hx-container-Dz4v6FSd.js.map +1 -0
  225. package/dist/shared/{hx-copy-button-B_ZHYO7_.js → hx-copy-button-Dcul7VwZ.js} +19 -19
  226. package/dist/shared/hx-copy-button-Dcul7VwZ.js.map +1 -0
  227. package/dist/shared/{hx-counter-D_B7L9Pi.js → hx-counter-czWWvciz.js} +7 -7
  228. package/dist/shared/hx-counter-czWWvciz.js.map +1 -0
  229. package/dist/shared/{hx-data-table-B1j4n4bm.js → hx-data-table-CAVgT4JG.js} +37 -37
  230. package/dist/shared/hx-data-table-CAVgT4JG.js.map +1 -0
  231. package/dist/shared/{hx-date-picker-R-0kWFwr.js → hx-date-picker-Be8lTTO7.js} +9 -9
  232. package/dist/shared/hx-date-picker-Be8lTTO7.js.map +1 -0
  233. package/dist/shared/{hx-dialog-U5d3s0Ps.js → hx-dialog-DTGX2FbP.js} +9 -9
  234. package/dist/shared/hx-dialog-DTGX2FbP.js.map +1 -0
  235. package/dist/shared/{hx-divider-DdAN-_jB.js → hx-divider-BJjarZ9z.js} +13 -13
  236. package/dist/shared/hx-divider-BJjarZ9z.js.map +1 -0
  237. package/dist/shared/{hx-drawer-e0qeGxAD.js → hx-drawer-C5qI7jf1.js} +46 -46
  238. package/dist/shared/hx-drawer-C5qI7jf1.js.map +1 -0
  239. package/dist/shared/{hx-dropdown-DP_DNpEb.js → hx-dropdown-BxNnUDyD.js} +12 -12
  240. package/dist/shared/hx-dropdown-BxNnUDyD.js.map +1 -0
  241. package/dist/shared/{hx-field-COM4KvMQ.js → hx-field-J1IUbQ8n.js} +15 -15
  242. package/dist/shared/hx-field-J1IUbQ8n.js.map +1 -0
  243. package/dist/shared/{hx-field-label-BtZ9H9Yy.js → hx-field-label-DhVdkhCN.js} +7 -7
  244. package/dist/shared/hx-field-label-DhVdkhCN.js.map +1 -0
  245. package/dist/shared/{hx-file-upload-DbECypLe.js → hx-file-upload-79nMhnM_.js} +9 -9
  246. package/dist/shared/hx-file-upload-79nMhnM_.js.map +1 -0
  247. package/dist/shared/{hx-format-date-C030ThSm.js → hx-format-date-BMukpO2t.js} +7 -7
  248. package/dist/shared/hx-format-date-BMukpO2t.js.map +1 -0
  249. package/dist/shared/{hx-grid-DE8KM5Gf.js → hx-grid-CO6JZ6Kn.js} +14 -14
  250. package/dist/shared/hx-grid-CO6JZ6Kn.js.map +1 -0
  251. package/dist/shared/{hx-help-text-BAcEGRUE.js → hx-help-text-CYGvBLET.js} +13 -13
  252. package/dist/shared/hx-help-text-CYGvBLET.js.map +1 -0
  253. package/dist/shared/{hx-icon-dYvrzvsO.js → hx-icon-C1hDsw-b.js} +9 -9
  254. package/dist/shared/hx-icon-C1hDsw-b.js.map +1 -0
  255. package/dist/shared/{hx-icon-button-Et9wq79n.js → hx-icon-button-DOWKUs0-.js} +7 -7
  256. package/dist/shared/hx-icon-button-DOWKUs0-.js.map +1 -0
  257. package/dist/shared/{hx-image-DUsEi-oN.js → hx-image-BqABFHGZ.js} +11 -11
  258. package/dist/shared/hx-image-BqABFHGZ.js.map +1 -0
  259. package/dist/shared/{hx-link-Peg2LzOD.js → hx-link-CAFRuAKJ.js} +24 -24
  260. package/dist/shared/hx-link-CAFRuAKJ.js.map +1 -0
  261. package/dist/shared/{hx-list-DwInEX2H.js → hx-list-zbgO-9Xe.js} +12 -12
  262. package/dist/shared/hx-list-zbgO-9Xe.js.map +1 -0
  263. package/dist/shared/{hx-menu-divider-puPmRAdN.js → hx-menu-divider-B1TIKAaq.js} +24 -24
  264. package/dist/shared/hx-menu-divider-B1TIKAaq.js.map +1 -0
  265. package/dist/shared/{hx-meter-CVs4A649.js → hx-meter-BWNeWrg2.js} +7 -7
  266. package/dist/shared/hx-meter-BWNeWrg2.js.map +1 -0
  267. package/dist/shared/{hx-nav-CiyqaW2I.js → hx-nav-DqNzqH2s.js} +6 -6
  268. package/dist/shared/hx-nav-DqNzqH2s.js.map +1 -0
  269. package/dist/shared/{hx-nav-item-CuGiJPAf.js → hx-nav-item-D-9uG-Tt.js} +132 -92
  270. package/dist/shared/hx-nav-item-D-9uG-Tt.js.map +1 -0
  271. package/dist/shared/{hx-number-input-BPgrlMLN.js → hx-number-input-D7Jczm0J.js} +9 -9
  272. package/dist/shared/hx-number-input-D7Jczm0J.js.map +1 -0
  273. package/dist/shared/{hx-overflow-menu-Bz02LPPk.js → hx-overflow-menu-UvSgk7yV.js} +12 -12
  274. package/dist/shared/hx-overflow-menu-UvSgk7yV.js.map +1 -0
  275. package/dist/shared/{hx-pagination-Cb9UEWXz.js → hx-pagination-DBovb97q.js} +7 -7
  276. package/dist/shared/hx-pagination-DBovb97q.js.map +1 -0
  277. package/dist/shared/{hx-patient-banner-wk4qWmsH.js → hx-patient-banner-DLeU2pC2.js} +7 -7
  278. package/dist/shared/hx-patient-banner-DLeU2pC2.js.map +1 -0
  279. package/dist/shared/{hx-phi-field-DX9z3nu0.js → hx-phi-field-BwlVKfHI.js} +7 -7
  280. package/dist/shared/hx-phi-field-BwlVKfHI.js.map +1 -0
  281. package/dist/shared/{hx-popover-D6kYQkt3.js → hx-popover-DdjLdSr8.js} +14 -14
  282. package/dist/shared/hx-popover-DdjLdSr8.js.map +1 -0
  283. package/dist/shared/{hx-popup-RQb6HUXc.js → hx-popup-DEYZKeH1.js} +14 -14
  284. package/dist/shared/hx-popup-DEYZKeH1.js.map +1 -0
  285. package/dist/shared/{hx-progress-bar-ByEmxq1V.js → hx-progress-bar-CdbFsimb.js} +7 -7
  286. package/dist/shared/hx-progress-bar-CdbFsimb.js.map +1 -0
  287. package/dist/shared/{hx-progress-ring-CtVnNRQx.js → hx-progress-ring-3YcGRxes.js} +7 -7
  288. package/dist/shared/hx-progress-ring-3YcGRxes.js.map +1 -0
  289. package/dist/shared/{hx-radio-jgeW92SV.js → hx-radio-BCEpX1tj.js} +18 -18
  290. package/dist/shared/hx-radio-BCEpX1tj.js.map +1 -0
  291. package/dist/shared/{hx-rating-g_iy-DW_.js → hx-rating-BXnSN-Ln.js} +7 -7
  292. package/dist/shared/hx-rating-BXnSN-Ln.js.map +1 -0
  293. package/dist/shared/{hx-select-BWzxWZs_.js → hx-select-vzsOOYNx.js} +13 -13
  294. package/dist/shared/hx-select-vzsOOYNx.js.map +1 -0
  295. package/dist/shared/{hx-skeleton-BHvALyd7.js → hx-skeleton-Dikv9b7p.js} +6 -6
  296. package/dist/shared/hx-skeleton-Dikv9b7p.js.map +1 -0
  297. package/dist/shared/{hx-slider-7Q-e0_pc.js → hx-slider-DnncjdOT.js} +11 -11
  298. package/dist/shared/hx-slider-DnncjdOT.js.map +1 -0
  299. package/dist/shared/{hx-spinner-DEgrKsUo.js → hx-spinner-B52nJ4Vt.js} +13 -13
  300. package/dist/shared/hx-spinner-B52nJ4Vt.js.map +1 -0
  301. package/dist/shared/{hx-split-button-BA7P_ly5.js → hx-split-button-BJHIszDb.js} +9 -9
  302. package/dist/shared/hx-split-button-BJHIszDb.js.map +1 -0
  303. package/dist/shared/{hx-split-panel-Bss54UN8.js → hx-split-panel-uNW9xrA3.js} +7 -7
  304. package/dist/shared/hx-split-panel-uNW9xrA3.js.map +1 -0
  305. package/dist/shared/{hx-stack-BStY1RmV.js → hx-stack-BHc4gVv_.js} +9 -9
  306. package/dist/shared/hx-stack-BHc4gVv_.js.map +1 -0
  307. package/dist/shared/{hx-stat-CmkCUI8v.js → hx-stat-BfgKgBeq.js} +15 -15
  308. package/dist/shared/hx-stat-BfgKgBeq.js.map +1 -0
  309. package/dist/shared/{hx-status-indicator-Dl3Y34mc.js → hx-status-indicator-C146uMF0.js} +7 -7
  310. package/dist/shared/hx-status-indicator-C146uMF0.js.map +1 -0
  311. package/dist/shared/{hx-step-DlANlr2A.js → hx-step-C0Unvyen.js} +33 -29
  312. package/dist/shared/hx-step-C0Unvyen.js.map +1 -0
  313. package/dist/shared/{hx-structured-list-Db9rwLI_.js → hx-structured-list-3R69RETR.js} +11 -11
  314. package/dist/shared/hx-structured-list-3R69RETR.js.map +1 -0
  315. package/dist/shared/{hx-style-scope-BroUu83L.js → hx-style-scope-D3dsKS58.js} +7 -6
  316. package/dist/shared/{hx-style-scope-BroUu83L.js.map → hx-style-scope-D3dsKS58.js.map} +1 -1
  317. package/dist/shared/{hx-switch-C0Lp5RGy.js → hx-switch-BCNpbuk-.js} +7 -7
  318. package/dist/shared/hx-switch-BCNpbuk-.js.map +1 -0
  319. package/dist/shared/{hx-tab-panel-Dnt8aA74.js → hx-tab-panel-D7BTBgDQ.js} +30 -30
  320. package/dist/shared/hx-tab-panel-D7BTBgDQ.js.map +1 -0
  321. package/dist/shared/{hx-tag-K5fCjfqQ.js → hx-tag-C2E-6fJ3.js} +7 -7
  322. package/dist/shared/hx-tag-C2E-6fJ3.js.map +1 -0
  323. package/dist/shared/{hx-td-DZuILY3s.js → hx-td-DWcp2XDO.js} +25 -25
  324. package/dist/shared/hx-td-DWcp2XDO.js.map +1 -0
  325. package/dist/shared/{hx-text-DoEVOf47.js → hx-text-DxyBxz25.js} +12 -12
  326. package/dist/shared/hx-text-DxyBxz25.js.map +1 -0
  327. package/dist/shared/{hx-text-input-DTKWPVdy.js → hx-text-input-2LTGt0vQ.js} +18 -18
  328. package/dist/shared/hx-text-input-2LTGt0vQ.js.map +1 -0
  329. package/dist/shared/{hx-textarea-BkSiU8oM.js → hx-textarea-BZspivFK.js} +9 -9
  330. package/dist/shared/hx-textarea-BZspivFK.js.map +1 -0
  331. package/dist/shared/{hx-theme-Aag8QJvT.js → hx-theme-J2YEpSIL.js} +2 -1
  332. package/dist/shared/hx-theme-J2YEpSIL.js.map +1 -0
  333. package/dist/shared/{hx-time-picker-BpCRsh_z.js → hx-time-picker-CVrw4tju.js} +41 -41
  334. package/dist/shared/hx-time-picker-CVrw4tju.js.map +1 -0
  335. package/dist/shared/{hx-toggle-button-CPFqs3eQ.js → hx-toggle-button-Ss7Gppx3.js} +7 -7
  336. package/dist/shared/hx-toggle-button-Ss7Gppx3.js.map +1 -0
  337. package/dist/shared/{hx-tooltip-CrO4vzeX.js → hx-tooltip-xRNjEX7_.js} +12 -12
  338. package/dist/shared/hx-tooltip-xRNjEX7_.js.map +1 -0
  339. package/dist/shared/{hx-top-nav-DYlnzDaU.js → hx-top-nav-28mxYGuj.js} +7 -7
  340. package/dist/shared/hx-top-nav-28mxYGuj.js.map +1 -0
  341. package/dist/shared/{hx-tree-item-C1PhX-HE.js → hx-tree-item-C-cRw_ZA.js} +16 -16
  342. package/dist/shared/hx-tree-item-C-cRw_ZA.js.map +1 -0
  343. package/dist/shared/{hx-visually-hidden-CCTQTjbR.js → hx-visually-hidden-D6Dv2l8l.js} +13 -13
  344. package/dist/shared/hx-visually-hidden-D6Dv2l8l.js.map +1 -0
  345. package/dist/shared/{toast-factory-f184Gi70.js → toast-factory-oPHbhMZI.js} +18 -18
  346. package/dist/shared/toast-factory-oPHbhMZI.js.map +1 -0
  347. package/dist/utilities/document-token-adoption.d.ts +10 -0
  348. package/dist/utilities/document-token-adoption.d.ts.map +1 -0
  349. package/package.json +4 -2
  350. package/dist/shared/hx-accordion-_KeulaQR.js.map +0 -1
  351. package/dist/shared/hx-action-bar-vGFnNwNY.js.map +0 -1
  352. package/dist/shared/hx-alert-DRZYP0Oo.js.map +0 -1
  353. package/dist/shared/hx-avatar-CZfA9KEl.js.map +0 -1
  354. package/dist/shared/hx-badge-Xg7zoh4Q.js.map +0 -1
  355. package/dist/shared/hx-banner-2RS7Nux4.js.map +0 -1
  356. package/dist/shared/hx-breadcrumb-item-CObc-WJl.js.map +0 -1
  357. package/dist/shared/hx-button-CC1YH9RZ.js.map +0 -1
  358. package/dist/shared/hx-button-group-ChTQsnQj.js.map +0 -1
  359. package/dist/shared/hx-card-dIKdcMhr.js.map +0 -1
  360. package/dist/shared/hx-carousel-item-Cm8a1nAi.js.map +0 -1
  361. package/dist/shared/hx-checkbox-_WUiuTo9.js.map +0 -1
  362. package/dist/shared/hx-checkbox-group-B-ci-dxp.js.map +0 -1
  363. package/dist/shared/hx-clinical-status-D6eaplvs.js.map +0 -1
  364. package/dist/shared/hx-code-snippet-CQsyvthi.js.map +0 -1
  365. package/dist/shared/hx-color-picker-Dk2Myvaf.js.map +0 -1
  366. package/dist/shared/hx-combobox-CNAJXIxo.js.map +0 -1
  367. package/dist/shared/hx-container-7j16VuQE.js.map +0 -1
  368. package/dist/shared/hx-copy-button-B_ZHYO7_.js.map +0 -1
  369. package/dist/shared/hx-counter-D_B7L9Pi.js.map +0 -1
  370. package/dist/shared/hx-data-table-B1j4n4bm.js.map +0 -1
  371. package/dist/shared/hx-date-picker-R-0kWFwr.js.map +0 -1
  372. package/dist/shared/hx-dialog-U5d3s0Ps.js.map +0 -1
  373. package/dist/shared/hx-divider-DdAN-_jB.js.map +0 -1
  374. package/dist/shared/hx-drawer-e0qeGxAD.js.map +0 -1
  375. package/dist/shared/hx-dropdown-DP_DNpEb.js.map +0 -1
  376. package/dist/shared/hx-field-COM4KvMQ.js.map +0 -1
  377. package/dist/shared/hx-field-label-BtZ9H9Yy.js.map +0 -1
  378. package/dist/shared/hx-file-upload-DbECypLe.js.map +0 -1
  379. package/dist/shared/hx-format-date-C030ThSm.js.map +0 -1
  380. package/dist/shared/hx-grid-DE8KM5Gf.js.map +0 -1
  381. package/dist/shared/hx-help-text-BAcEGRUE.js.map +0 -1
  382. package/dist/shared/hx-icon-button-Et9wq79n.js.map +0 -1
  383. package/dist/shared/hx-icon-dYvrzvsO.js.map +0 -1
  384. package/dist/shared/hx-image-DUsEi-oN.js.map +0 -1
  385. package/dist/shared/hx-link-Peg2LzOD.js.map +0 -1
  386. package/dist/shared/hx-list-DwInEX2H.js.map +0 -1
  387. package/dist/shared/hx-menu-divider-puPmRAdN.js.map +0 -1
  388. package/dist/shared/hx-meter-CVs4A649.js.map +0 -1
  389. package/dist/shared/hx-nav-CiyqaW2I.js.map +0 -1
  390. package/dist/shared/hx-nav-item-CuGiJPAf.js.map +0 -1
  391. package/dist/shared/hx-number-input-BPgrlMLN.js.map +0 -1
  392. package/dist/shared/hx-overflow-menu-Bz02LPPk.js.map +0 -1
  393. package/dist/shared/hx-pagination-Cb9UEWXz.js.map +0 -1
  394. package/dist/shared/hx-patient-banner-wk4qWmsH.js.map +0 -1
  395. package/dist/shared/hx-phi-field-DX9z3nu0.js.map +0 -1
  396. package/dist/shared/hx-popover-D6kYQkt3.js.map +0 -1
  397. package/dist/shared/hx-popup-RQb6HUXc.js.map +0 -1
  398. package/dist/shared/hx-progress-bar-ByEmxq1V.js.map +0 -1
  399. package/dist/shared/hx-progress-ring-CtVnNRQx.js.map +0 -1
  400. package/dist/shared/hx-radio-jgeW92SV.js.map +0 -1
  401. package/dist/shared/hx-rating-g_iy-DW_.js.map +0 -1
  402. package/dist/shared/hx-select-BWzxWZs_.js.map +0 -1
  403. package/dist/shared/hx-skeleton-BHvALyd7.js.map +0 -1
  404. package/dist/shared/hx-slider-7Q-e0_pc.js.map +0 -1
  405. package/dist/shared/hx-spinner-DEgrKsUo.js.map +0 -1
  406. package/dist/shared/hx-split-button-BA7P_ly5.js.map +0 -1
  407. package/dist/shared/hx-split-panel-Bss54UN8.js.map +0 -1
  408. package/dist/shared/hx-stack-BStY1RmV.js.map +0 -1
  409. package/dist/shared/hx-stat-CmkCUI8v.js.map +0 -1
  410. package/dist/shared/hx-status-indicator-Dl3Y34mc.js.map +0 -1
  411. package/dist/shared/hx-step-DlANlr2A.js.map +0 -1
  412. package/dist/shared/hx-structured-list-Db9rwLI_.js.map +0 -1
  413. package/dist/shared/hx-switch-C0Lp5RGy.js.map +0 -1
  414. package/dist/shared/hx-tab-panel-Dnt8aA74.js.map +0 -1
  415. package/dist/shared/hx-tag-K5fCjfqQ.js.map +0 -1
  416. package/dist/shared/hx-td-DZuILY3s.js.map +0 -1
  417. package/dist/shared/hx-text-DoEVOf47.js.map +0 -1
  418. package/dist/shared/hx-text-input-DTKWPVdy.js.map +0 -1
  419. package/dist/shared/hx-textarea-BkSiU8oM.js.map +0 -1
  420. package/dist/shared/hx-theme-Aag8QJvT.js.map +0 -1
  421. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +0 -1
  422. package/dist/shared/hx-toggle-button-CPFqs3eQ.js.map +0 -1
  423. package/dist/shared/hx-tooltip-CrO4vzeX.js.map +0 -1
  424. package/dist/shared/hx-top-nav-DYlnzDaU.js.map +0 -1
  425. package/dist/shared/hx-tree-item-C1PhX-HE.js.map +0 -1
  426. package/dist/shared/hx-visually-hidden-CCTQTjbR.js.map +0 -1
  427. package/dist/shared/toast-factory-f184Gi70.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-date-picker-Be8lTTO7.js","sources":["../../src/components/hx-date-picker/hx-date-picker.styles.ts","../../src/components/hx-date-picker/hx-date-picker.ts"],"sourcesContent":["import { css } from 'lit';\n\n// prettier-ignore\nexport const helixDatePickerStyles = css`:host{display:block;position:relative}:host([disabled]){opacity:var(--hx-opacity-disabled, .5);pointer-events:none}*{box-sizing:border-box}.field{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem);font-family:var(--hx-date-picker-font-family, var(--hx-font-family-sans, sans-serif));position:relative}.field__label-wrapper{display:contents}.field__label{display:flex;align-items:baseline;gap:var(--hx-space-1, .25rem);font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-medium, 500);color:var(--hx-date-picker-label-color, var(--hx-color-neutral-700, #343a40));line-height:var(--hx-line-height-normal, 1.5)}.field__required-marker{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c));font-weight:var(--hx-font-weight-bold, 700)}.field__input-wrapper{display:flex;align-items:stretch;border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));border-radius:var(--hx-date-picker-border-radius, var(--hx-border-radius-md, .375rem));background-color:var(--hx-date-picker-bg, var(--hx-color-neutral-0, #ffffff));transition:border-color var(--hx-transition-fast, .15s ease),box-shadow var(--hx-transition-fast, .15s ease);overflow:hidden}.field__input-wrapper:focus-within{border-color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field--error .field__input-wrapper{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545))}.field--error .field__input-wrapper:focus-within{border-color:var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545));box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) color-mix(in srgb,var(--hx-date-picker-error-color, var(--hx-color-error-500, #dc3545)) calc(var(--hx-focus-ring-opacity, .25) * 100%),transparent)}.field__input{flex:1;border:none;outline:none;background:transparent;padding:var(--hx-space-2, .5rem) var(--hx-space-3, .75rem);font-family:inherit;font-size:var(--hx-font-size-md, 1rem);color:var(--hx-date-picker-color, var(--hx-color-neutral-800, #212529));line-height:var(--hx-line-height-normal, 1.5);min-height:var(--hx-size-10, 2.5rem);width:100%;cursor:default}.field__input::placeholder{color:var(--hx-color-neutral-400, #adb5bd)}.field__input:disabled{cursor:not-allowed}.field__trigger{display:flex;align-items:center;justify-content:center;padding:0 var(--hx-space-3, .75rem);border:none;border-left:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-border-color, var(--hx-color-neutral-300, #ced4da));background:transparent;color:var(--hx-date-picker-trigger-color, var(--hx-color-neutral-500, #6c757d));cursor:pointer;flex-shrink:0;transition:color var(--hx-transition-fast, .15s ease);outline:none}.field__trigger:focus-visible{color:var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));background-color:color-mix(in srgb,var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))) 8%,transparent)}.field__trigger:hover:not(:disabled){color:var(--hx-date-picker-trigger-hover-color, var(--hx-color-neutral-700, #343a40));background-color:color-mix(in srgb,var(--hx-color-neutral-900, #212529) 4%,transparent)}.field__trigger:disabled{cursor:not-allowed}.calendar{position:absolute;top:calc(100% + var(--hx-space-1, .25rem));left:0;z-index:var(--hx-z-index-dropdown, 1000);min-width:var(--hx-date-picker-calendar-min-width, 18rem);background-color:var(--hx-date-picker-calendar-bg, var(--hx-color-neutral-0, #ffffff));border:var(--hx-border-width-thin, 1px) solid var(--hx-date-picker-calendar-border-color, var(--hx-color-neutral-200, #e9ecef));border-radius:var(--hx-date-picker-calendar-border-radius, var(--hx-border-radius-lg, .5rem));box-shadow:var( --hx-date-picker-calendar-shadow, 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1) );padding:var(--hx-space-3, .75rem);outline:none}@media(prefers-reduced-motion:no-preference){.calendar{animation:calendar-appear var(--hx-transition-fast, .15s ease) forwards}}@keyframes calendar-appear{0%{opacity:0;transform:translateY(-.25rem)}to{opacity:1;transform:translateY(0)}}.calendar__nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--hx-space-3, .75rem)}:is(.calendar__nav-btn,.calendar__day,.calendar__day-cell,.calendar__weekday){display:flex;align-items:center;justify-content:center}:is(.calendar__nav-btn,.calendar__day){width:var(--hx-touch-target-min, 2.75rem);height:var(--hx-touch-target-min, 2.75rem);border:none;border-radius:var(--hx-border-radius-sm, .25rem);background:transparent;cursor:pointer;outline:none;transition:background-color var(--hx-transition-fast, .15s ease),color var(--hx-transition-fast, .15s ease)}.calendar__nav-btn{color:var(--hx-color-neutral-600, #495057);font-size:var(--hx-font-size-lg, 1.125rem);line-height:1}.calendar__nav-btn:hover{background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}:is(.calendar__nav-btn,.calendar__day):focus-visible{box-shadow:0 0 0 var(--hx-focus-ring-width, 2px) var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa)));z-index:1}.calendar__nav-btn:disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__month-label{font-size:var(--hx-font-size-sm, .875rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-800, #212529);flex:1;text-align:center}.calendar__grid{display:flex;flex-direction:column;gap:var(--hx-space-1, .25rem)}.calendar__row{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--hx-space-1, .25rem)}.calendar__weekday{height:var(--hx-size-8, 2rem);font-size:var(--hx-font-size-xs, .75rem);font-weight:var(--hx-font-weight-semibold, 600);color:var(--hx-color-neutral-500, #6c757d);text-transform:uppercase;letter-spacing:.05em}.calendar__day{color:var(--hx-color-neutral-800, #212529);font-size:var(--hx-font-size-sm, .875rem);font-family:inherit;position:relative}.calendar__day:hover:not(.calendar__day--disabled):not(.calendar__day--selected){background-color:var(--hx-color-neutral-100, #f8f9fa);color:var(--hx-color-neutral-900, #212529)}.calendar__day--selected{background-color:var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #2563eb));color:var(--hx-date-picker-selected-color, var(--hx-color-neutral-0, #ffffff));font-weight:var(--hx-font-weight-semibold, 600)}.calendar__day--selected:hover{background-color:var(--hx-date-picker-selected-hover-bg, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected){font-weight:var(--hx-font-weight-bold, 700);color:var(--hx-date-picker-today-color, var(--hx-color-primary-600, #1d4ed8))}.calendar__day--today:not(.calendar__day--selected):after{content:\"\";position:absolute;bottom:.2rem;left:50%;transform:translate(-50%);width:.25rem;height:.25rem;border-radius:50%;background-color:currentColor}.calendar__day--disabled{opacity:var(--hx-opacity-disabled, .4);cursor:not-allowed;pointer-events:none}.calendar__live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.field__help-text,.field__error{font-size:var(--hx-font-size-xs, .75rem);line-height:var(--hx-line-height-normal, 1.5)}.field__help-text{color:var(--hx-color-neutral-500, #6c757d)}.field__error{color:var(--hx-date-picker-error-color, var(--hx-color-error-text, #b91c1c))}@media(prefers-reduced-motion:reduce){.field__input-wrapper,.field__trigger,.calendar__nav-btn,.calendar__day{transition:none}}@media(forced-colors:active){.field__input-wrapper{border:1px solid ButtonText}.field__input-wrapper:focus-within{outline:2px solid Highlight;outline-offset:1px;box-shadow:none}:is(.calendar__day:focus-visible,.calendar__nav-btn:focus-visible){outline:2px solid Highlight;box-shadow:none}.calendar__day--selected{background-color:Highlight;color:HighlightText;border:1px solid Highlight}.calendar__day--today:not(.calendar__day--selected){border:2px solid LinkText}.calendar__day--today:not(.calendar__day--selected):after{display:none}.calendar__day--disabled{color:GrayText}.field--error .field__input-wrapper{border-color:LinkText}}`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { helixDatePickerStyles } from './hx-date-picker.styles.js';\n\nlet _instanceCounter = 0;\n\n/**\n * Date picker component for selecting dates with keyboard-accessible calendar popup.\n *\n * @summary Form-associated date picker with calendar popup and WCAG 2.1 AA accessibility.\n *\n * @tag hx-date-picker\n *\n * @slot label - Custom label content (overrides the label property).\n * @slot help-text - Custom help text content (overrides the helpText property).\n * @slot error - Custom error content (overrides the error property).\n *\n * @fires {CustomEvent<{value: string, date: Date | null}>} hx-change - Emitted when the selected date changes.\n *\n * @csspart field - The outer field container.\n * @csspart label - The label element.\n * @csspart input-wrapper - The wrapper around input and trigger.\n * @csspart input - The readonly text input displaying the formatted date.\n * @csspart trigger - The calendar icon button.\n * @csspart calendar - The calendar popup dialog.\n * @csspart month-nav - The month navigation header.\n * @csspart day - An individual day button in the calendar grid.\n * @csspart help-text - The help text container.\n * @csspart error - The error message container.\n *\n * @cssprop [--hx-date-picker-bg=var(--hx-color-neutral-0)] - Input background color.\n * @cssprop [--hx-date-picker-color=var(--hx-color-neutral-800)] - Input text color.\n * @cssprop [--hx-date-picker-border-color=var(--hx-color-neutral-300)] - Border color.\n * @cssprop [--hx-date-picker-border-radius=var(--hx-border-radius-md)] - Border radius.\n * @cssprop [--hx-date-picker-font-family=var(--hx-font-family-sans)] - Font family.\n * @cssprop [--hx-date-picker-focus-ring-color=var(--hx-focus-ring-color)] - Focus ring color.\n * @cssprop [--hx-date-picker-error-color=var(--hx-color-error-500)] - Error state color.\n * @cssprop [--hx-date-picker-label-color=var(--hx-color-neutral-700)] - Label text color.\n * @cssprop [--hx-date-picker-trigger-color=var(--hx-color-neutral-500)] - Trigger icon color.\n * @cssprop [--hx-date-picker-calendar-bg=var(--hx-color-neutral-0)] - Calendar background color.\n * @cssprop [--hx-date-picker-calendar-border-color=var(--hx-color-neutral-200)] - Calendar border color.\n * @cssprop [--hx-date-picker-calendar-min-width=18rem] - Calendar minimum width.\n * @cssprop [--hx-date-picker-selected-bg=var(--hx-color-primary-500)] - Selected day background.\n * @cssprop [--hx-date-picker-selected-color=var(--hx-color-neutral-0)] - Selected day text color.\n * @cssprop [--hx-date-picker-today-color=var(--hx-color-primary-600)] - Today indicator color.\n * @cssprop [--hx-date-picker-calendar-shadow=0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -2px rgba(0,0,0,0.1)] - Calendar popup box shadow.\n */\n@customElement('hx-date-picker')\nexport class HelixDatePicker extends LitElement {\n static override styles = [helixDatePickerStyles];\n\n // ─── Form Association ───\n\n /**\n * Marks this component as form-associated for native form participation.\n * @internal\n */\n static formAssociated = true;\n\n /**\n * ElementInternals instance for form association.\n * @internal\n */\n private _internals: ElementInternals;\n\n constructor() {\n super();\n /** @internal */\n this._internals = this.attachInternals();\n }\n\n // ─── Properties ───\n\n /**\n * The name of the field, used for form submission.\n * @attr name\n */\n @property({ type: String })\n name = '';\n\n /**\n * The current value as an ISO 8601 date string (e.g. 2026-03-04).\n * @attr value\n */\n @property({ type: String })\n value = '';\n\n /**\n * The minimum selectable date as an ISO 8601 string.\n * @attr min\n */\n @property({ type: String })\n min = '';\n\n /**\n * The maximum selectable date as an ISO 8601 string.\n * @attr max\n */\n @property({ type: String })\n max = '';\n\n /**\n * The visible label text.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * Whether the field is required for form submission.\n * @attr required\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /**\n * Whether the field is disabled.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Error message to display. When set, the field enters an error state.\n * @attr error\n */\n @property({ type: String })\n error = '';\n\n /**\n * Help text displayed below the field for guidance.\n * @attr help-text\n */\n @property({ type: String, attribute: 'help-text' })\n helpText = '';\n\n /**\n * Display format hint shown as placeholder (e.g. MM/DD/YYYY).\n * @attr format\n */\n @property({ type: String })\n format = 'MM/DD/YYYY';\n\n /**\n * Locale string used for formatting the display value.\n * @attr locale\n */\n @property({ type: String })\n locale = 'en-US';\n\n /**\n * Validation message shown when the field is required but empty.\n * @attr required-message\n */\n @property({ attribute: 'required-message' })\n requiredMessage = 'This field is required.';\n\n /**\n * Accessible label for the calendar dialog.\n * @attr choose-date-label\n */\n @property({ attribute: 'choose-date-label' })\n chooseDateLabel = 'Choose a date';\n\n /**\n * Accessible label for the calendar trigger button when the calendar is closed.\n * @attr open-calendar-label\n */\n @property({ attribute: 'open-calendar-label' })\n openCalendarLabel = 'Open calendar';\n\n /**\n * Accessible label for the calendar trigger button when the calendar is open.\n * @attr close-calendar-label\n */\n @property({ attribute: 'close-calendar-label' })\n closeCalendarLabel = 'Close calendar';\n\n /**\n * Accessible label for the previous month navigation button.\n * @attr previous-month-label\n */\n @property({ attribute: 'previous-month-label' })\n previousMonthLabel = 'Previous month';\n\n /**\n * Accessible label for the next month navigation button.\n * @attr next-month-label\n */\n @property({ attribute: 'next-month-label' })\n nextMonthLabel = 'Next month';\n\n // ─── Internal State ───\n\n /**\n * Tracks whether the calendar popup is currently visible.\n * @internal\n */\n @state() private _isOpen = false;\n /**\n * The year currently displayed in the calendar view.\n * @internal\n */\n @state() private _viewYear: number = new Date().getFullYear();\n /**\n * The month (0-indexed) currently displayed in the calendar view.\n * @internal\n */\n @state() private _viewMonth: number = new Date().getMonth();\n /**\n * The day number currently focused within the calendar grid, or null when the calendar is closed.\n * @internal\n */\n @state() private _focusedDay: number | null = null;\n /**\n * The message announced to screen readers when the calendar month changes.\n * @internal\n */\n @state() private _liveMessage = '';\n\n // ─── Memoized formatters ───\n\n /**\n * Cached Intl.DateTimeFormat for weekday-short labels; keyed on locale.\n * Recreated only when locale changes.\n * @internal\n */\n private _weekdayFormatter: Intl.DateTimeFormat | null = null;\n /**\n * Cached Intl.DateTimeFormat for month-long labels; keyed on locale.\n * Recreated only when locale changes.\n * @internal\n */\n private _monthFormatter: Intl.DateTimeFormat | null = null;\n /**\n * Locale used when the cached formatters were last built.\n * @internal\n */\n private _formatterLocale = '';\n /**\n * Cached array of 7 weekday header strings.\n * Depends only on locale — recomputed lazily when locale changes.\n * @internal\n */\n private _cachedWeekdayNames: string[] | null = null;\n\n // ─── Internal References ───\n\n /**\n * Reference to the readonly text input element displaying the formatted date.\n * @internal\n */\n @query('.field__input')\n private _input: HTMLInputElement | undefined;\n\n /**\n * Reference to the calendar icon button that opens and closes the popup.\n * @internal\n */\n @query('.field__trigger')\n private _trigger: HTMLButtonElement | undefined;\n\n /**\n * Reference to the calendar popup dialog element.\n * @internal\n */\n @query('.calendar')\n private _calendar: HTMLElement | undefined;\n\n // ─── Unique IDs ───\n\n /**\n * Unique base ID for this component instance, used to generate all child element IDs.\n * @internal\n */\n private _id = `hx-date-picker-${++_instanceCounter}`;\n /**\n * Unique ID for the text input element, used for label association.\n * @internal\n */\n private _inputId = `${this._id}-input`;\n /**\n * Unique ID for the help text element, used for aria-describedby association.\n * @internal\n */\n private _helpTextId = `${this._id}-help`;\n /**\n * Unique ID for the error message element, used for aria-describedby association.\n * @internal\n */\n private _errorId = `${this._id}-error`;\n /**\n * Unique ID for the calendar popup dialog element, used for aria-controls association.\n * @internal\n */\n private _calendarId = `${this._id}-calendar`;\n /**\n * Unique ID for the ARIA live region element that announces month navigation changes.\n * @internal\n */\n private _liveRegionId = `${this._id}-live`;\n\n // ─── Slot Tracking ───\n\n /**\n * Whether the label slot has any assigned elements, used to switch between slotted and property-based label rendering.\n * @internal\n */\n private _hasLabelSlot = false;\n /**\n * Whether the error slot has any assigned elements, used to switch between slotted and property-based error rendering.\n * @internal\n */\n private _hasErrorSlot = false;\n\n /** @internal */\n private _handleLabelSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasLabelSlot = slot.assignedElements().length > 0;\n if (this._hasLabelSlot) {\n const slottedLabel = slot.assignedElements()[0];\n if (slottedLabel && !slottedLabel.id) {\n slottedLabel.id = `${this._inputId}-slotted-label`;\n }\n }\n this.requestUpdate();\n }\n\n /** @internal */\n private _handleErrorSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasErrorSlot = slot.assignedElements().length > 0;\n this.requestUpdate();\n }\n\n // ─── Bound Handler References ───\n\n /**\n * Bound reference to the outside-click handler, stored so the same function reference can be removed from document listeners.\n * @internal\n */\n private readonly _boundHandleOutsideClick = (e: MouseEvent) => this._handleOutsideClick(e);\n /**\n * Bound reference to the document keydown handler, stored so the same function reference can be removed from document listeners.\n * @internal\n */\n private readonly _boundHandleDocumentKeydown = (e: KeyboardEvent) =>\n this._handleDocumentKeydown(e);\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._boundHandleOutsideClick);\n document.removeEventListener('keydown', this._boundHandleDocumentKeydown);\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('value')) {\n this._internals.setFormValue(this.value);\n this._updateValidity();\n }\n\n if ((changedProperties as Map<PropertyKey, unknown>).has('_isOpen')) {\n if (this._isOpen) {\n // Sync view to the currently selected date when opening.\n const selected = this._parseISODate(this.value);\n if (selected) {\n this._viewYear = selected.getFullYear();\n this._viewMonth = selected.getMonth();\n }\n document.addEventListener('click', this._boundHandleOutsideClick);\n document.addEventListener('keydown', this._boundHandleDocumentKeydown);\n // Focus the calendar after it renders.\n this.updateComplete.then(() => {\n this._focusActiveDay();\n });\n } else {\n document.removeEventListener('click', this._boundHandleOutsideClick);\n document.removeEventListener('keydown', this._boundHandleDocumentKeydown);\n this._focusedDay = null;\n }\n }\n\n if (\n (changedProperties as Map<PropertyKey, unknown>).has('_viewMonth') ||\n (changedProperties as Map<PropertyKey, unknown>).has('_viewYear')\n ) {\n if (this._isOpen) {\n const monthName = this._getMonthName(this._viewMonth);\n this._liveMessage = `${monthName} ${this._viewYear}`;\n this.updateComplete.then(() => {\n this._focusActiveDay();\n });\n }\n }\n }\n\n /** @internal */\n private _handleOutsideClick(e: MouseEvent): void {\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._closeCalendar();\n }\n }\n\n /** @internal */\n private _handleDocumentKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this._isOpen) {\n this._closeCalendar();\n }\n }\n\n // ─── Form Integration ───\n\n /** The form element associated with this component, or null if not in a form. */\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /** The current validation message, or an empty string if the field is valid. */\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n /** The current validity state of the field. */\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n /** @internal */\n private _updateValidity(): void {\n if (this.required && !this.value) {\n this._internals.setValidity(\n { valueMissing: true },\n this.error || this.requiredMessage,\n this._input,\n );\n } else {\n this._internals.setValidity({});\n }\n }\n\n /** @internal */\n formResetCallback(): void {\n this.value = '';\n this._internals.setFormValue(null);\n this._isOpen = false;\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string | File | FormData | null,\n _mode: 'restore' | 'autocomplete',\n ): void {\n if (typeof state === 'string') {\n this.value = state;\n }\n }\n\n /** @internal */\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n // ─── Public Methods ───\n\n override focus(options?: FocusOptions): void {\n this._trigger?.focus(options);\n }\n\n // ─── Date Utilities ───\n\n /** @internal */\n private _parseISODate(iso: string): Date | null {\n if (!iso) return null;\n const d = new Date(iso + 'T00:00:00');\n return isNaN(d.getTime()) ? null : d;\n }\n\n /** @internal */\n private _toISO(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n }\n\n /** @internal */\n private _formatForDisplay(iso: string): string {\n const date = this._parseISODate(iso);\n if (!date) return '';\n return date.toLocaleDateString(this.locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n });\n }\n\n /** @internal */\n private _isDateDisabled(date: Date): boolean {\n const iso = this._toISO(date);\n if (this.min && iso < this.min) return true;\n if (this.max && iso > this.max) return true;\n return false;\n }\n\n /** @internal */\n private _isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n /** @internal */\n private _isToday(date: Date): boolean {\n return this._isSameDay(date, new Date());\n }\n\n /**\n * Ensure memoized Intl.DateTimeFormat instances exist and match the current locale.\n * Rebuilds only when locale changes; also clears the cached weekday names.\n * @internal\n */\n private _ensureFormatters(): void {\n if (this._formatterLocale === this.locale && this._weekdayFormatter && this._monthFormatter) {\n return;\n }\n this._weekdayFormatter = new Intl.DateTimeFormat(this.locale, { weekday: 'short' });\n this._monthFormatter = new Intl.DateTimeFormat(this.locale, { month: 'long' });\n this._formatterLocale = this.locale;\n this._cachedWeekdayNames = null;\n }\n\n /** @internal */\n private _getMonthName(month: number): string {\n this._ensureFormatters();\n // _monthFormatter is guaranteed non-null after _ensureFormatters()\n const fmt = this._monthFormatter ?? new Intl.DateTimeFormat(this.locale, { month: 'long' });\n return fmt.format(new Date(2000, month, 1));\n }\n\n /** @internal */\n private _getDayName(dayIndex: number): string {\n // dayIndex: 0=Sun, 1=Mon, ...\n this._ensureFormatters();\n // _weekdayFormatter is guaranteed non-null after _ensureFormatters()\n const fmt =\n this._weekdayFormatter ?? new Intl.DateTimeFormat(this.locale, { weekday: 'short' });\n return fmt.format(new Date(2000, 0, 2 + dayIndex));\n }\n\n /**\n * Returns the 7 cached weekday header strings for the current locale.\n * Computed once per locale and reused across all renders.\n * @internal\n */\n private _getWeekdayNames(): string[] {\n this._ensureFormatters();\n if (!this._cachedWeekdayNames) {\n this._cachedWeekdayNames = Array.from({ length: 7 }, (_, i) => this._getDayName(i));\n }\n return this._cachedWeekdayNames;\n }\n\n // ─── Calendar Grid ───\n\n /**\n * Returns an array of Date objects (or null for padding cells) representing\n * the 6-week grid for the current view month.\n */\n /** @internal */\n private _getDaysInGrid(): (Date | null)[] {\n const firstOfMonth = new Date(this._viewYear, this._viewMonth, 1);\n const leadingBlanks = firstOfMonth.getDay(); // 0=Sun\n const daysInMonth = new Date(this._viewYear, this._viewMonth + 1, 0).getDate();\n\n const cells: (Date | null)[] = [];\n\n // Leading blank cells for days before the 1st\n for (let i = 0; i < leadingBlanks; i++) {\n cells.push(null);\n }\n\n // Days of current month\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push(new Date(this._viewYear, this._viewMonth, d));\n }\n\n // Trailing blank cells to complete a full 7-column row\n const remainder = cells.length % 7;\n if (remainder !== 0) {\n for (let i = 0; i < 7 - remainder; i++) {\n cells.push(null);\n }\n }\n\n return cells;\n }\n\n // ─── Calendar Open/Close ───\n\n /** @internal */\n private _openCalendar(): void {\n if (this.disabled) return;\n this._isOpen = true;\n }\n\n /** @internal */\n private _closeCalendar(): void {\n this._isOpen = false;\n // Return focus to trigger after calendar closes.\n this.updateComplete.then(() => {\n this._trigger?.focus();\n });\n }\n\n /** @internal */\n private _toggleCalendar(): void {\n if (this._isOpen) {\n this._closeCalendar();\n } else {\n this._openCalendar();\n }\n }\n\n // ─── Focus Management ───\n\n /** @internal */\n private _focusActiveDay(): void {\n if (!this._calendar) return;\n\n const selectedISO = this.value;\n const selected = this._parseISODate(selectedISO);\n\n // Try to focus: selected day > today (if in view) > first enabled day\n let targetDay: number | null = null;\n\n if (\n selected &&\n selected.getFullYear() === this._viewYear &&\n selected.getMonth() === this._viewMonth\n ) {\n targetDay = selected.getDate();\n } else {\n const today = new Date();\n if (today.getFullYear() === this._viewYear && today.getMonth() === this._viewMonth) {\n const todayDate = new Date(this._viewYear, this._viewMonth, today.getDate());\n if (!this._isDateDisabled(todayDate)) {\n targetDay = today.getDate();\n }\n }\n }\n\n if (targetDay === null) {\n // Find first enabled day in the month\n const daysInMonth = new Date(this._viewYear, this._viewMonth + 1, 0).getDate();\n for (let d = 1; d <= daysInMonth; d++) {\n const date = new Date(this._viewYear, this._viewMonth, d);\n if (!this._isDateDisabled(date)) {\n targetDay = d;\n break;\n }\n }\n }\n\n if (targetDay !== null) {\n this._focusedDay = targetDay;\n this.updateComplete.then(() => {\n const btn = this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${targetDay}\"]`);\n btn?.focus();\n });\n }\n }\n\n // ─── Month Navigation ───\n\n /** @internal */\n private _prevMonth(): void {\n if (this._viewMonth === 0) {\n this._viewMonth = 11;\n this._viewYear = this._viewYear - 1;\n } else {\n this._viewMonth = this._viewMonth - 1;\n }\n }\n\n /** @internal */\n private _nextMonth(): void {\n if (this._viewMonth === 11) {\n this._viewMonth = 0;\n this._viewYear = this._viewYear + 1;\n } else {\n this._viewMonth = this._viewMonth + 1;\n }\n }\n\n // ─── Day Selection ───\n\n /** @internal */\n private _selectDay(date: Date): void {\n if (this._isDateDisabled(date)) return;\n\n const iso = this._toISO(date);\n this.value = iso;\n this._internals.setFormValue(iso);\n this._updateValidity();\n\n this.dispatchEvent(\n new CustomEvent<{ value: string; date: Date }>('hx-change', {\n bubbles: true,\n composed: true,\n detail: { value: iso, date },\n }),\n );\n\n this._closeCalendar();\n }\n\n // ─── Calendar Keyboard Navigation ───\n\n /** @internal */\n private _handleCalendarKeydown(e: KeyboardEvent): void {\n const { key } = e;\n\n if (key === 'Tab') {\n this._handleCalendarTab(e);\n return;\n }\n\n // Explicit Escape handler on the calendar container provides a reliable\n // exit path even when the document-level handler does not fire (e.g. when\n // the event is stopped by a descendant or the shadow boundary interferes).\n if (key === 'Escape') {\n e.stopPropagation();\n this._closeCalendar();\n return;\n }\n\n if (\n key !== 'ArrowLeft' &&\n key !== 'ArrowRight' &&\n key !== 'ArrowUp' &&\n key !== 'ArrowDown' &&\n key !== 'Enter' &&\n key !== ' ' &&\n key !== 'Home' &&\n key !== 'End' &&\n key !== 'PageUp' &&\n key !== 'PageDown'\n ) {\n return;\n }\n\n e.preventDefault();\n\n const currentFocused = this._focusedDay ?? 1;\n const daysInMonth = new Date(this._viewYear, this._viewMonth + 1, 0).getDate();\n\n if (key === 'Enter' || key === ' ') {\n const date = new Date(this._viewYear, this._viewMonth, currentFocused);\n if (!this._isDateDisabled(date)) {\n this._selectDay(date);\n }\n return;\n }\n\n if (key === 'PageUp') {\n this._prevMonth();\n return;\n }\n\n if (key === 'PageDown') {\n this._nextMonth();\n return;\n }\n\n if (key === 'Home') {\n // Move to start of current week (Sunday)\n const currentDate = new Date(this._viewYear, this._viewMonth, currentFocused);\n const dayOfWeek = currentDate.getDay();\n const newDay = currentFocused - dayOfWeek;\n if (newDay >= 1) {\n this._focusedDay = newDay;\n this.updateComplete.then(() => {\n this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${newDay}\"]`)?.focus();\n });\n }\n return;\n }\n\n if (key === 'End') {\n // Move to end of current week (Saturday)\n const currentDate = new Date(this._viewYear, this._viewMonth, currentFocused);\n const dayOfWeek = currentDate.getDay();\n const daysToSaturday = 6 - dayOfWeek;\n const newDay = currentFocused + daysToSaturday;\n if (newDay <= daysInMonth) {\n this._focusedDay = newDay;\n this.updateComplete.then(() => {\n this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${newDay}\"]`)?.focus();\n });\n }\n return;\n }\n\n let newDay = currentFocused;\n\n if (key === 'ArrowLeft') newDay = currentFocused - 1;\n if (key === 'ArrowRight') newDay = currentFocused + 1;\n if (key === 'ArrowUp') newDay = currentFocused - 7;\n if (key === 'ArrowDown') newDay = currentFocused + 7;\n\n if (newDay < 1) {\n // Wrap to previous month\n this._prevMonth();\n const prevDaysInMonth = new Date(this._viewYear, this._viewMonth + 1, 0).getDate();\n this._focusedDay = prevDaysInMonth + newDay;\n this.updateComplete.then(() => {\n const day = this._focusedDay;\n this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${day}\"]`)?.focus();\n });\n return;\n }\n\n if (newDay > daysInMonth) {\n // Wrap to next month\n const overflow = newDay - daysInMonth;\n this._nextMonth();\n this._focusedDay = overflow;\n this.updateComplete.then(() => {\n const day = this._focusedDay;\n this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${day}\"]`)?.focus();\n });\n return;\n }\n\n this._focusedDay = newDay;\n this.updateComplete.then(() => {\n this._calendar?.querySelector<HTMLButtonElement>(`[data-day=\"${newDay}\"]`)?.focus();\n });\n }\n\n // ─── Navigation Boundary Checks ───\n\n /** @internal */\n private _isPrevMonthDisabled(): boolean {\n if (!this.min) return false;\n const firstOfCurrentView = new Date(this._viewYear, this._viewMonth, 1);\n const minDate = this._parseISODate(this.min);\n if (!minDate) return false;\n return firstOfCurrentView <= minDate;\n }\n\n /** @internal */\n private _isNextMonthDisabled(): boolean {\n if (!this.max) return false;\n const lastOfCurrentView = new Date(this._viewYear, this._viewMonth + 1, 0);\n const maxDate = this._parseISODate(this.max);\n if (!maxDate) return false;\n return lastOfCurrentView >= maxDate;\n }\n\n // ─── Focus Trap ───\n\n /** @internal */\n private _handleCalendarTab(e: KeyboardEvent): void {\n if (e.key !== 'Tab' || !this._isOpen) return;\n\n const focusableEls = this._calendar?.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [tabindex=\"0\"]',\n );\n if (!focusableEls || focusableEls.length === 0) return;\n\n const first = focusableEls[0];\n const last = focusableEls[focusableEls.length - 1];\n\n // In shadow DOM, document.activeElement returns the host element, not the\n // focused inner element. Use shadowRoot.activeElement exclusively so the\n // comparison is accurate and the trap cannot malfunction and strand users.\n const shadowActive = this.shadowRoot?.activeElement;\n\n if (e.shiftKey) {\n if (shadowActive === first) {\n e.preventDefault();\n last?.focus();\n }\n } else {\n if (shadowActive === last) {\n e.preventDefault();\n first?.focus();\n }\n }\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderWeekdayHeaders() {\n // Use pre-cached weekday names (only locale-dependent, never changes within a session)\n const names = this._getWeekdayNames();\n const headers = names.map(\n (name) =>\n html`<div class=\"calendar__weekday\" role=\"columnheader\" aria-label=${name}>\n ${name.slice(0, 2)}\n </div>`,\n );\n return html`<div class=\"calendar__row\" role=\"row\">${headers}</div>`;\n }\n\n /** @internal */\n private _renderDayGrid() {\n const cells = this._getDaysInGrid();\n const selectedDate = this._parseISODate(this.value);\n\n const rows: ReturnType<typeof html>[] = [];\n\n for (let rowStart = 0; rowStart < cells.length; rowStart += 7) {\n const rowCells = cells.slice(rowStart, rowStart + 7).map((date) => {\n if (date === null) {\n return html`<div class=\"calendar__day-cell\" role=\"gridcell\" aria-hidden=\"true\"></div>`;\n }\n\n const isSelected = selectedDate ? this._isSameDay(date, selectedDate) : false;\n const isToday = this._isToday(date);\n const isDisabled = this._isDateDisabled(date);\n const isFocused = this._focusedDay === date.getDate();\n const dayNumber = date.getDate();\n\n const ariaLabel = date.toLocaleDateString(this.locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n const dayClasses = {\n calendar__day: true,\n 'calendar__day--selected': isSelected,\n 'calendar__day--today': isToday,\n 'calendar__day--disabled': isDisabled,\n };\n\n return html`<div class=\"calendar__day-cell\">\n <button\n part=\"day\"\n class=${classMap(dayClasses)}\n type=\"button\"\n role=\"gridcell\"\n data-day=${dayNumber}\n aria-label=${ariaLabel}\n aria-selected=${isSelected ? 'true' : 'false'}\n aria-disabled=${isDisabled ? 'true' : nothing}\n aria-current=${isToday ? 'date' : nothing}\n tabindex=${isFocused ? '0' : '-1'}\n ?disabled=${isDisabled}\n @click=${() => {\n this._selectDay(date);\n }}\n >\n ${dayNumber}\n </button>\n </div>`;\n });\n\n rows.push(html`<div class=\"calendar__row\" role=\"row\">${rowCells}</div>`);\n }\n\n return rows;\n }\n\n // ─── Render ───\n\n override render() {\n const hasError = !!this.error || this._hasErrorSlot;\n const displayValue = this._formatForDisplay(this.value);\n const monthName = this._getMonthName(this._viewMonth);\n\n const fieldClasses = {\n field: true,\n 'field--error': hasError,\n 'field--disabled': this.disabled,\n 'field--required': this.required,\n };\n\n const describedBy =\n [hasError ? this._errorId : null, this.helpText ? this._helpTextId : null]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return html`\n <div part=\"field\" class=${classMap(fieldClasses)}>\n <!-- Label -->\n <div class=\"field__label-wrapper\">\n <slot name=\"label\" @slotchange=${this._handleLabelSlotChange}>\n ${this.label\n ? html`\n <label part=\"label\" class=\"field__label\" for=${this._inputId}>\n ${this.label}\n ${this.required\n ? html`<span class=\"field__required-marker\" aria-hidden=\"true\">*</span>`\n : nothing}\n </label>\n `\n : nothing}\n </slot>\n </div>\n\n <!-- Input + Trigger -->\n <div part=\"input-wrapper\" class=\"field__input-wrapper\">\n <input\n part=\"input\"\n class=\"field__input\"\n id=${this._inputId}\n type=\"text\"\n readonly\n .value=${displayValue}\n placeholder=${ifDefined(this.format || undefined)}\n ?disabled=${this.disabled}\n aria-labelledby=${ifDefined(\n this._hasLabelSlot ? `${this._inputId}-slotted-label` : undefined,\n )}\n aria-invalid=${hasError ? 'true' : nothing}\n aria-describedby=${ifDefined(describedBy)}\n aria-required=${this.required ? 'true' : nothing}\n aria-haspopup=\"dialog\"\n @click=${this._openCalendar}\n />\n <button\n part=\"trigger\"\n class=\"field__trigger\"\n type=\"button\"\n aria-label=${this._isOpen ? this.closeCalendarLabel : this.openCalendarLabel}\n aria-haspopup=\"dialog\"\n aria-expanded=${this._isOpen ? 'true' : 'false'}\n aria-controls=${this._calendarId}\n ?disabled=${this.disabled}\n @click=${this._toggleCalendar}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Popup -->\n ${this._isOpen\n ? html`\n <div\n part=\"calendar\"\n class=\"calendar\"\n id=${this._calendarId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=${this.chooseDateLabel}\n @keydown=${this._handleCalendarKeydown}\n >\n <!-- Screen reader live region -->\n <div\n id=${this._liveRegionId}\n class=\"calendar__live-region\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n ${this._liveMessage}\n </div>\n\n <!-- Month Navigation -->\n <div part=\"month-nav\" class=\"calendar__nav\">\n <button\n class=\"calendar__nav-btn\"\n type=\"button\"\n aria-label=${this.previousMonthLabel}\n ?disabled=${this._isPrevMonthDisabled()}\n @click=${this._prevMonth}\n >\n &#8249;\n </button>\n <span class=\"calendar__month-label\" aria-hidden=\"true\">\n ${monthName} ${this._viewYear}\n </span>\n <button\n class=\"calendar__nav-btn\"\n type=\"button\"\n aria-label=${this.nextMonthLabel}\n ?disabled=${this._isNextMonthDisabled()}\n @click=${this._nextMonth}\n >\n &#8250;\n </button>\n </div>\n\n <!-- Day Grid -->\n <div class=\"calendar__grid\" role=\"grid\" aria-label=\"${monthName} ${this._viewYear}\">\n ${this._renderWeekdayHeaders()} ${this._renderDayGrid()}\n </div>\n </div>\n `\n : nothing}\n\n <!-- Error -->\n <slot name=\"error\" @slotchange=${this._handleErrorSlotChange}>\n ${this.error\n ? html`\n <div part=\"error\" class=\"field__error\" id=${this._errorId} role=\"alert\">\n ${this.error}\n </div>\n `\n : nothing}\n </slot>\n\n <!-- Help Text -->\n ${this.helpText && !hasError\n ? html`\n <div part=\"help-text\" class=\"field__help-text\" id=${this._helpTextId}>\n <slot name=\"help-text\">${this.helpText}</slot>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-date-picker': HelixDatePicker;\n }\n}\n"],"names":["helixDatePickerStyles","css","_instanceCounter","HelixDatePicker","LitElement","e","slot","slottedLabel","changedProperties","selected","monthName","state","_mode","disabled","options","_a","iso","d","date","y","m","a","b","month","dayIndex","_","i","leadingBlanks","daysInMonth","cells","remainder","selectedISO","targetDay","today","todayDate","btn","key","currentFocused","dayOfWeek","newDay","_b","daysToSaturday","prevDaysInMonth","day","overflow","firstOfCurrentView","minDate","lastOfCurrentView","maxDate","focusableEls","first","last","shadowActive","headers","name","html","selectedDate","rows","rowStart","rowCells","isSelected","isToday","isDisabled","isFocused","dayNumber","ariaLabel","classMap","nothing","hasError","displayValue","fieldClasses","describedBy","ifDefined","__decorateClass","property","query","customElement"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { css as x, LitElement as y, nothing as d, html as c } from "lit";
2
+ import "./document-token-adoption-Dym9ALA4.js";
2
3
  import { query as E, state as m, property as h, customElement as k } from "lit/decorators.js";
3
- import { tokenStyles as w } from "@helixui/tokens/lit";
4
- import { l as C, u as b } from "./body-scroll-lock-VBa5TFP-.js";
5
- const S = x`
4
+ import { l as w, u as b } from "./body-scroll-lock-VBa5TFP-.js";
5
+ const C = x`
6
6
  :host {
7
7
  display: contents;
8
8
  }
@@ -193,10 +193,10 @@ const S = x`
193
193
  border: 0;
194
194
  }
195
195
  `;
196
- var D = Object.defineProperty, F = Object.getOwnPropertyDescriptor, l = (e, t, o, n) => {
197
- for (var a = n > 1 ? void 0 : n ? F(t, o) : t, i = e.length - 1, s; i >= 0; i--)
196
+ var S = Object.defineProperty, D = Object.getOwnPropertyDescriptor, l = (e, t, o, n) => {
197
+ for (var a = n > 1 ? void 0 : n ? D(t, o) : t, i = e.length - 1, s; i >= 0; i--)
198
198
  (s = e[i]) && (a = (n ? s(t, o, a) : s(a)) || a);
199
- return n && a && D(t, o, a), a;
199
+ return n && a && S(t, o, a), a;
200
200
  };
201
201
  let _ = 0;
202
202
  const f = [
@@ -272,7 +272,7 @@ let r = class extends y {
272
272
  /** @internal */
273
273
  _openDialog() {
274
274
  const e = this._dialogEl;
275
- e && (this._isTransitioning || (this._isTransitioning = !0, this._triggerElement = document.activeElement, this.modal ? (e.open || e.showModal(), C()) : e.open || e.show(), this._addGlobalListeners(), this.updateComplete.then(() => {
275
+ e && (this._isTransitioning || (this._isTransitioning = !0, this._triggerElement = document.activeElement, this.modal ? (e.open || e.showModal(), w()) : e.open || e.show(), this._addGlobalListeners(), this.updateComplete.then(() => {
276
276
  var t;
277
277
  this._cachedFocusableElements = this._getFocusableElements(), (t = this._cachedFocusableElements[0]) == null || t.focus(), this._isTransitioning = !1;
278
278
  }), this.dispatchEvent(
@@ -429,7 +429,7 @@ let r = class extends y {
429
429
  `;
430
430
  }
431
431
  };
432
- r.styles = [w, S];
432
+ r.styles = [C];
433
433
  l([
434
434
  E("dialog")
435
435
  ], r.prototype, "_dialogEl", 2);
@@ -473,4 +473,4 @@ r = l([
473
473
  export {
474
474
  r as H
475
475
  };
476
- //# sourceMappingURL=hx-dialog-U5d3s0Ps.js.map
476
+ //# sourceMappingURL=hx-dialog-DTGX2FbP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-dialog-DTGX2FbP.js","sources":["../../src/components/hx-dialog/hx-dialog.styles.ts","../../src/components/hx-dialog/hx-dialog.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixDialogStyles = css`\n :host {\n display: contents;\n }\n\n /* ─── Native dialog reset ─── */\n\n dialog {\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n /* D5 — ensure native dialog element renders above the non-modal backdrop sibling */\n position: relative;\n z-index: calc(var(--hx-z-index-modal, 1400) + 1);\n }\n\n /* ─── Dialog container ─── */\n\n .dialog {\n display: flex;\n flex-direction: column;\n position: relative;\n background-color: var(--hx-dialog-bg, var(--hx-color-neutral-0));\n color: var(--hx-dialog-color, var(--hx-color-neutral-900));\n border-radius: var(--hx-dialog-border-radius, var(--hx-border-radius-lg));\n box-shadow: var(--hx-dialog-shadow, var(--hx-shadow-xl));\n width: var(--hx-dialog-width, var(--hx-container-narrow, 32rem));\n max-width: calc(100vw - var(--hx-space-8, 2rem));\n max-height: calc(100vh - var(--hx-space-8, 2rem));\n overflow: hidden;\n outline: none;\n\n /* Open/close animation */\n opacity: 0;\n transform: translateY(var(--hx-space-4, 1rem)) scale(0.97);\n transition:\n opacity var(--hx-duration-normal, 200ms) var(--hx-easing-out, ease-out),\n transform var(--hx-duration-normal, 200ms) var(--hx-easing-out, ease-out);\n }\n\n dialog[open] .dialog {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .dialog {\n transition: none;\n }\n\n .dialog__close-btn {\n transition: none;\n }\n }\n\n /* ─── Native backdrop (modal mode) ─── */\n\n dialog::backdrop {\n background-color: var(--hx-dialog-backdrop-color, var(--hx-color-neutral-900));\n opacity: 0;\n transition: opacity var(--hx-duration-normal, 200ms) var(--hx-easing-out, ease-out);\n }\n\n dialog[open]::backdrop {\n opacity: var(--hx-dialog-backdrop-opacity, 0.5);\n }\n\n @media (prefers-reduced-motion: reduce) {\n dialog::backdrop {\n transition: none;\n }\n }\n\n /* ─── Non-modal backdrop overlay ─── */\n\n .dialog-backdrop {\n position: fixed;\n inset: 0;\n background-color: var(--hx-dialog-backdrop-color, var(--hx-color-neutral-900));\n opacity: var(--hx-dialog-backdrop-opacity, 0.5);\n /* D5 — backdrop z-index must be lower than the dialog element's z-index */\n z-index: var(--hx-z-index-modal, 1400);\n }\n\n /* ─── Header ─── */\n\n .dialog__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--hx-dialog-header-padding, var(--hx-space-5) var(--hx-space-6));\n border-bottom: var(--hx-border-width-thin) solid\n var(--hx-dialog-header-border-color, var(--hx-color-neutral-200));\n gap: var(--hx-space-4);\n flex-shrink: 0;\n }\n\n .dialog__heading {\n margin: 0;\n font-family: var(--hx-font-family-sans);\n font-size: var(--hx-font-size-lg);\n font-weight: var(--hx-font-weight-semibold);\n line-height: var(--hx-line-height-tight);\n color: var(--hx-dialog-heading-color, var(--hx-color-neutral-900));\n flex: 1 1 auto;\n }\n\n /* ─── Built-in close button (D17) ─── */\n\n .dialog__close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */\n min-width: var(--hx-touch-target-min, 2.75rem);\n min-height: var(--hx-touch-target-min, 2.75rem);\n width: var(--hx-touch-target-min, 2.75rem);\n height: var(--hx-touch-target-min, 2.75rem);\n padding: 0;\n margin-inline-start: auto;\n background: transparent;\n border: none;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n cursor: pointer;\n color: var(--hx-color-neutral-500, #6b7280);\n font-size: var(--hx-font-size-xl, 1.25rem);\n line-height: 1; /* intentional literal: icon button needs line-height 1; no token maps to exactly 1 */\n transition:\n color var(--hx-duration-fast, 100ms) ease,\n background-color var(--hx-duration-fast, 100ms) ease;\n }\n\n .dialog__close-btn::before {\n content: '×';\n }\n\n .dialog__close-btn:hover {\n color: var(--hx-color-neutral-900);\n background-color: var(--hx-color-neutral-100);\n }\n\n .dialog__close-btn:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(\n --hx-dialog-close-btn-focus-ring-color,\n var(--hx-focus-ring-color, var(--hx-color-primary-500))\n );\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Body ─── */\n\n .dialog__body {\n flex: 1 1 auto;\n padding: var(--hx-dialog-body-padding, var(--hx-space-6));\n overflow-y: auto;\n overscroll-behavior: contain;\n }\n\n /* ─── Footer ─── */\n\n .dialog__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--hx-space-3);\n padding: var(--hx-dialog-footer-padding, var(--hx-space-4) var(--hx-space-6));\n border-top: var(--hx-border-width-thin) solid\n var(--hx-dialog-footer-border-color, var(--hx-color-neutral-200));\n flex-shrink: 0;\n }\n\n /* ─── Visually-hidden description (D8) ─── */\n\n .dialog__description {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { lockBodyScroll, unlockBodyScroll } from '../../utils/body-scroll-lock.js';\nimport { helixDialogStyles } from './hx-dialog.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n// D21 — deterministic monotonic counter instead of Math.random()\nlet _dialogCounter = 0;\n\n// Module-level constant avoids rebuilding the selector string on every _getFocusableElements call.\n// Pattern matches hx-drawer's FOCUSABLE_SELECTORS constant at module scope.\nconst FOCUSABLE_SELECTORS = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n 'details > summary',\n].join(',');\n\n/**\n * A modal and non-modal dialog component built on the native HTML `<dialog>` element.\n * Provides focus trapping, backdrop interaction, keyboard navigation, and full\n * ARIA labelling for enterprise healthcare accessibility requirements.\n *\n * @summary Accessible dialog overlay for confirmations, forms, and detailed content.\n *\n * @tag hx-dialog\n *\n * @slot - Default slot for the dialog body content.\n * @slot header - Slot for custom header content. When provided, replaces the built-in heading.\n * @slot footer - Slot for action buttons or footer content.\n *\n * @fires {CustomEvent<void>} hx-open - Fired when the dialog opens.\n * @fires {CustomEvent<void>} hx-close - Fired when the dialog closes for any reason.\n * @fires {CustomEvent<void>} hx-cancel - Fired when the dialog is dismissed via Escape key or cancel action.\n *\n * @csspart dialog - The inner container div that holds the dialog content.\n * @csspart backdrop - The non-modal backdrop overlay element.\n * @csspart header - The header region containing the heading and header slot.\n * @csspart close-button - The built-in close button in the dialog header.\n * @csspart body - The scrollable body region containing the default slot.\n * @csspart footer - The footer region containing the footer slot.\n *\n * @cssprop [--hx-dialog-bg=var(--hx-color-neutral-0)] - Dialog background color.\n * @cssprop [--hx-dialog-color=var(--hx-color-neutral-900)] - Dialog text color.\n * @cssprop [--hx-dialog-border-radius=var(--hx-border-radius-lg)] - Dialog corner radius.\n * @cssprop [--hx-dialog-shadow=var(--hx-shadow-xl)] - Dialog box shadow.\n * @cssprop [--hx-dialog-width=32rem] - Dialog width.\n * @cssprop [--hx-dialog-backdrop-color=var(--hx-color-neutral-900)] - Backdrop overlay color.\n * @cssprop [--hx-dialog-backdrop-opacity=0.5] - Backdrop overlay opacity (set to 0 to hide; note\n * that opacity:0 makes the backdrop invisible but still present in the layout — use pointer-events\n * carefully if you need a fully non-blocking backdrop).\n * @cssprop [--hx-dialog-header-padding] - Padding inside the dialog header.\n * @cssprop [--hx-dialog-header-border-color=var(--hx-color-neutral-200)] - Header bottom border color.\n * @cssprop [--hx-dialog-heading-color=var(--hx-color-neutral-900)] - Heading text color.\n * @cssprop [--hx-dialog-body-padding] - Padding inside the dialog body.\n * @cssprop [--hx-dialog-footer-padding] - Padding inside the dialog footer.\n * @cssprop [--hx-dialog-footer-border-color=var(--hx-color-neutral-200)] - Footer top border color.\n *\n * @remarks\n * **Browser support for `::backdrop`:** The `dialog::backdrop` pseudo-element inside Shadow DOM\n * is well-supported in Chrome/Chromium and Firefox 122+. For Firefox < 122, modal backdrop\n * animation will silently fall back to no animation. A non-modal backdrop fallback is rendered\n * for non-modal dialogs.\n *\n * **Drupal integration:** This component is Twig-renderable via attributes (`heading`, `open`,\n * `modal`, `close-on-backdrop`). For trigger-button wiring in Drupal behaviors:\n * ```js\n * Drupal.behaviors.hxDialog = {\n * attach(context) {\n * context.querySelectorAll('[data-hx-dialog-trigger]').forEach((btn) => {\n * btn.addEventListener('click', () => {\n * const id = btn.getAttribute('data-hx-dialog-trigger');\n * document.getElementById(id)?.showModal();\n * });\n * });\n * },\n * };\n * ```\n * Focus restoration to the trigger element is handled automatically by the component.\n */\n@customElement('hx-dialog')\nexport class HelixDialog extends LitElement {\n static override styles = [helixDialogStyles];\n\n // D10 — observe aria-label attribute without shadowing ARIAMixin.ariaLabel\n static override get observedAttributes(): string[] {\n return [...super.observedAttributes, 'aria-label'];\n }\n\n // ─── Queries ───\n\n /** @internal */\n @query('dialog')\n private _dialogEl: HTMLDialogElement | null | undefined;\n\n // ─── Internal state ───\n\n /** Tracks whether a header slot has been assigned content. * @internal\n */\n @state()\n private _hasHeaderSlot = false;\n\n /** Tracks whether a footer slot has been assigned content. * @internal\n */\n @state()\n private _hasFooterSlot = false;\n\n /** Cached focusable elements — populated on open, cleared on close. */\n /** @internal */\n private _cachedFocusableElements: HTMLElement[] = [];\n\n /** Guards against rapid open/close state changes causing asymmetric scroll lock. */\n /** @internal */\n private _isTransitioning = false;\n\n /** The element that had focus when the dialog opened — restored on close (D1). */\n /** @internal */\n private _triggerElement: HTMLElement | null = null;\n\n /** Pending returnValue to pass to native dialog.close() (D11). */\n /** @internal */\n private _pendingReturnValue: string | undefined = undefined;\n\n // ─── Unique IDs for aria-labelledby / aria-describedby ───\n\n /** @internal */\n private readonly _headingId = `hx-dialog-heading-${++_dialogCounter}`;\n /** @internal */\n private readonly _descriptionId = `hx-dialog-description-${_dialogCounter}`;\n\n // ─── Public Properties ───\n\n /**\n * Controls whether the dialog is open.\n * @attr open\n */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /**\n * When true, renders as a modal dialog with a backdrop and focus trap.\n * When false, renders as a non-modal dialog.\n * @attr modal\n */\n @property({ type: Boolean, reflect: true })\n modal = true;\n\n /**\n * When true, clicking the backdrop closes the dialog.\n * @attr close-on-backdrop\n */\n @property({\n attribute: 'close-on-backdrop',\n reflect: true,\n converter: {\n fromAttribute: (value: string | null) => value !== 'false',\n toAttribute: (value: boolean) => String(value),\n },\n })\n closeOnBackdrop = true;\n\n /**\n * Text content for the dialog heading. Used as the accessible label via aria-labelledby.\n * @attr heading\n */\n @property({ type: String })\n heading = '';\n\n /**\n * ARIA role variant. Use `'alertdialog'` for urgent dialogs requiring immediate attention\n * (e.g., drug interaction warnings, critical lab alerts). Defaults to `'dialog'`.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'dialog' | 'alertdialog' = 'dialog';\n\n /**\n * Optional description text linked to the dialog via `aria-describedby`.\n * When provided, screen readers will announce this text when the dialog receives focus.\n * Recommended for dialogs that surface critical clinical information.\n * @attr description\n */\n @property({ type: String })\n description = '';\n\n /** Accessible label for the close button. Override for localized text. */\n @property({ type: String, attribute: 'label-close' })\n labelClose = 'Close dialog';\n\n /**\n * Returns the dialog's return value — the string passed to `close(returnValue)`.\n * Mirrors `HTMLDialogElement.returnValue`.\n */\n get returnValue(): string {\n return this._dialogEl?.returnValue ?? '';\n }\n\n // ─── Lifecycle ───\n\n // D10 — re-render when aria-label attribute changes (without declaring a shadowing property)\n override attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ): void {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === 'aria-label' && oldVal !== newVal) {\n this.requestUpdate('aria-label', oldVal);\n }\n }\n\n override firstUpdated(): void {\n // Initialize header slot state without a querySelector in render()\n this._hasHeaderSlot = this.querySelector('[slot=\"header\"]') !== null;\n // Warn when no accessible heading is available\n if (!this.heading.trim() && !this._hasHeaderSlot) {\n devWarn(\n 'hx-dialog',\n 'No heading or header slot provided. Dialog will use a fallback aria-label. Provide a `heading` attribute or populate the `header` slot for a descriptive accessible name.',\n );\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._removeGlobalListeners();\n // Restore body scroll if disconnected while open\n if (this.modal && this.open) {\n unlockBodyScroll();\n }\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('open')) {\n if (this.open) {\n this._openDialog();\n } else {\n this._closeDialog();\n }\n }\n }\n\n // ─── Public Methods ───\n\n /** Opens the dialog in the mode determined by the `modal` property. */\n show(): void {\n this.open = true;\n }\n\n /** Opens the dialog as a modal regardless of the `modal` property setting. */\n showModal(): void {\n this.modal = true;\n this.open = true;\n }\n\n /**\n * Closes the dialog.\n * @param returnValue - Optional return value string stored as `dialog.returnValue`.\n */\n close(returnValue?: string): void {\n if (returnValue !== undefined) {\n this._pendingReturnValue = returnValue;\n }\n this.open = false;\n }\n\n // ─── Private: Open / Close ───\n\n /** @internal */\n private _openDialog(): void {\n const dialog = this._dialogEl;\n if (!dialog) return;\n if (this._isTransitioning) return;\n this._isTransitioning = true;\n\n // D1 — store the element that triggered the dialog open for focus restoration on close\n this._triggerElement = document.activeElement as HTMLElement | null;\n\n if (this.modal) {\n if (!dialog.open) {\n dialog.showModal();\n }\n // D4 — lock body scroll when modal dialog is open. Uses a shared reference-counted\n // lock so that simultaneous hx-dialog / hx-drawer instances don't clobber each other\n // when one closes before the other (see utils/body-scroll-lock.ts).\n lockBodyScroll();\n } else {\n if (!dialog.open) {\n dialog.show();\n }\n }\n\n this._addGlobalListeners();\n\n // Cache focusable elements after the dialog is open in the DOM\n void this.updateComplete.then(() => {\n this._cachedFocusableElements = this._getFocusableElements();\n // D3 — explicitly move initial focus to the first focusable element inside the dialog\n // (browser's built-in focus delegation cannot reach slotted light DOM through Shadow DOM)\n this._cachedFocusableElements[0]?.focus();\n this._isTransitioning = false;\n });\n\n this.dispatchEvent(\n new CustomEvent<void>('hx-open', {\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /** @internal */\n private _closeDialog(): void {\n const dialog = this._dialogEl;\n if (!dialog) return;\n if (this._isTransitioning) return;\n this._isTransitioning = true;\n\n const wasOpen = dialog.open;\n if (dialog.open) {\n // D11 — forward returnValue to native dialog.close() if provided\n if (this._pendingReturnValue !== undefined) {\n dialog.close(this._pendingReturnValue);\n this._pendingReturnValue = undefined;\n } else {\n dialog.close();\n }\n }\n\n // D4 — release body scroll lock. Uses shared counter so scroll is only restored\n // after every open overlay (hx-dialog + hx-drawer) has closed.\n unlockBodyScroll();\n\n this._removeGlobalListeners();\n this._cachedFocusableElements = [];\n\n // D1 — restore focus to the element that opened the dialog (WCAG 2.4.3)\n this._triggerElement?.focus();\n this._triggerElement = null;\n\n this._isTransitioning = false;\n\n if (wasOpen) {\n this.dispatchEvent(\n new CustomEvent<void>('hx-close', {\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n\n // ─── Event Listeners ───\n\n /** @internal */\n private _addGlobalListeners(): void {\n this._dialogEl?.addEventListener('keydown', this._handleKeyDown);\n this._dialogEl?.addEventListener('click', this._handleDialogClick);\n this._dialogEl?.addEventListener('cancel', this._handleNativeCancel);\n }\n\n /** @internal */\n private _removeGlobalListeners(): void {\n this._dialogEl?.removeEventListener('keydown', this._handleKeyDown);\n this._dialogEl?.removeEventListener('click', this._handleDialogClick);\n this._dialogEl?.removeEventListener('cancel', this._handleNativeCancel);\n }\n\n // ─── Keyboard Handler ───\n\n /** @internal */\n private _handleKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') {\n // Native dialog fires a 'cancel' event before close when Escape is pressed.\n // We prevent default here and handle it ourselves so we fire hx-cancel\n // before setting open = false (which triggers hx-close).\n e.preventDefault();\n this._cancel();\n return;\n }\n\n if (e.key === 'Tab' && this.modal) {\n this._trapFocus(e);\n }\n };\n\n // ─── Focus Trap ───\n\n /** @internal */\n private _getFocusableElements(): HTMLElement[] {\n // Collect focusable elements from slotted light DOM content only.\n // Shadow DOM elements (e.g., the built-in close button) remain accessible via\n // the native <dialog> tab order — including them here would cause focus to land\n // on shadow DOM elements whose document.activeElement resolves to the host,\n // breaking the test assertions and D7 initial focus behavior.\n const slots = this.shadowRoot?.querySelectorAll<HTMLSlotElement>('slot') ?? [];\n const lightFocusable: HTMLElement[] = [];\n\n slots.forEach((slot) => {\n slot.assignedElements({ flatten: true }).forEach((el) => {\n if (el instanceof HTMLElement) {\n if (el.matches(FOCUSABLE_SELECTORS)) {\n lightFocusable.push(el);\n }\n el.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS).forEach((child) => {\n lightFocusable.push(child);\n });\n }\n });\n });\n\n const filtered = lightFocusable.filter(\n (el) => !el.hasAttribute('disabled') && el.getAttribute('tabindex') !== '-1',\n );\n\n // WCAG 2.4.3: if no light DOM focusable elements exist, fall back to the shadow\n // close button so the dialog always has at least one reachable focus target.\n if (filtered.length === 0) {\n const closeBtn = this.shadowRoot?.querySelector<HTMLElement>('.dialog__close-btn');\n if (closeBtn) filtered.push(closeBtn);\n }\n\n return filtered;\n }\n\n /** @internal */\n private _trapFocus(e: KeyboardEvent): void {\n const focusable =\n this._cachedFocusableElements.length > 0\n ? this._cachedFocusableElements\n : this._getFocusableElements();\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n\n const [first, ...rest] = focusable;\n const last = rest.length > 0 ? rest[rest.length - 1] : first;\n\n if (!first || !last) return;\n\n const active = document.activeElement;\n // Also check shadow root active element\n const shadowActive = this.shadowRoot?.activeElement;\n const currentActive = (shadowActive ?? active) as HTMLElement | null;\n\n // The shadow close button may be the first focusable element when no light DOM\n // content exists (WCAG 2.1.2). Check both the element reference and shadow root\n // active element so Shift+Tab wraps correctly across the shadow boundary.\n const closeBtn = this.shadowRoot?.querySelector<HTMLElement>('.dialog__close-btn');\n\n if (e.shiftKey) {\n // Shift+Tab: if focus is on first, wrap to last\n const isOnFirst =\n currentActive === first ||\n (closeBtn !== null && shadowActive === closeBtn && first === closeBtn);\n if (isOnFirst) {\n e.preventDefault();\n last.focus();\n }\n } else {\n // Tab: if focus is on last, wrap to first\n if (currentActive === last) {\n e.preventDefault();\n first.focus();\n }\n }\n }\n\n // ─── Backdrop Click ───\n\n /** @internal */\n private _handleDialogClick = (e: MouseEvent): void => {\n if (!this.closeOnBackdrop) return;\n\n // The native dialog element fills only the content area in showModal().\n // Clicks on the backdrop reach the <dialog> element itself.\n // We detect this by checking whether the click target is the dialog element.\n const target = e.target as HTMLElement;\n if (target === this._dialogEl) {\n this._cancel();\n }\n };\n\n // ─── Non-modal backdrop click ───\n\n /** @internal */\n private _handleBackdropClick = (): void => {\n if (!this.closeOnBackdrop) return;\n this._cancel();\n };\n\n // ─── Native cancel (Escape via browser, before our handler runs) ───\n\n /** @internal */\n private _handleNativeCancel = (e: Event): void => {\n // We always prevent the native cancel so we can manage close state ourselves.\n e.preventDefault();\n };\n\n // ─── Cancel logic ───\n\n /** @internal */\n private _cancel(): void {\n this.dispatchEvent(\n new CustomEvent<void>('hx-cancel', {\n bubbles: true,\n composed: true,\n }),\n );\n\n this.open = false;\n // hx-close is dispatched by _closeDialog() which is called via the open property setter\n }\n\n // ─── Slot change handlers ───\n\n /** @internal */\n private _handleHeaderSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasHeaderSlot = slot.assignedNodes({ flatten: true }).length > 0;\n }\n\n /** @internal */\n private _handleFooterSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasFooterSlot = slot.assignedNodes({ flatten: true }).length > 0;\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderHeader() {\n const hasHeading = this.heading.trim().length > 0;\n\n // Always render header to include the built-in close button (D17)\n return html`\n <div part=\"header\" class=\"dialog__header\">\n ${hasHeading\n ? html`<h2 id=${this._headingId} class=\"dialog__heading\">${this.heading}</h2>`\n : nothing}\n <slot name=\"header\" @slotchange=${this._handleHeaderSlotChange}></slot>\n <button\n part=\"close-button\"\n class=\"dialog__close-btn\"\n type=\"button\"\n aria-label=${this.labelClose}\n @click=${() => this.close()}\n ></button>\n </div>\n `;\n }\n\n /** @internal */\n private _renderFooter() {\n return html`\n <div part=\"footer\" class=\"dialog__footer\" ?hidden=${!this._hasFooterSlot}>\n <slot name=\"footer\" @slotchange=${this._handleFooterSlotChange}></slot>\n </div>\n `;\n }\n\n /** @internal */\n private _renderNonModalBackdrop() {\n if (this.modal || !this.open) return nothing;\n return html`\n <div\n part=\"backdrop\"\n class=\"dialog-backdrop\"\n @click=${this._handleBackdropClick}\n aria-hidden=\"true\"\n ></div>\n `;\n }\n\n // D8 — render visually-hidden description for aria-describedby\n /** @internal */\n private _renderDescription() {\n if (!this.description) return nothing;\n return html`<span id=${this._descriptionId} class=\"dialog__description\"\n >${this.description}</span\n >`;\n }\n\n // ─── Render ───\n\n override render() {\n const hasHeading = this.heading.trim().length > 0;\n // D10 — read aria-label via getAttribute to avoid shadowing ARIAMixin.ariaLabel\n const ariaLabel = this.getAttribute('aria-label');\n\n return html`\n ${this._renderNonModalBackdrop()}\n <dialog\n role=${this.variant !== 'dialog' ? this.variant : nothing}\n aria-labelledby=${hasHeading ? this._headingId : nothing}\n aria-label=${!hasHeading ? (ariaLabel ?? 'Dialog') : nothing}\n aria-describedby=${this.description ? this._descriptionId : nothing}\n aria-modal=${this.modal ? 'true' : nothing}\n >\n <div part=\"dialog\" class=\"dialog\">\n ${this._renderHeader()} ${this._renderDescription()}\n <div part=\"body\" class=\"dialog__body\">\n <slot></slot>\n </div>\n ${this._renderFooter()}\n </div>\n </dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-dialog': HelixDialog;\n }\n}\n"],"names":["helixDialogStyles","css","_dialogCounter","FOCUSABLE_SELECTORS","HelixDialog","LitElement","_a","name","oldVal","newVal","unlockBodyScroll","changedProperties","returnValue","dialog","lockBodyScroll","wasOpen","_b","_c","slots","lightFocusable","slot","el","child","filtered","closeBtn","focusable","first","rest","last","active","shadowActive","currentActive","hasHeading","html","nothing","ariaLabel","__decorateClass","query","state","property","value","customElement"],"mappings":";;;;AAEO,MAAMA,IAAoBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACMjC,IAAIC,IAAiB;AAIrB,MAAMC,IAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAiEH,IAAMC,IAAN,cAA0BC,EAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA,GAmBL,KAAQ,iBAAiB,IAKzB,KAAQ,iBAAiB,IAIzB,KAAQ,2BAA0C,CAAA,GAIlD,KAAQ,mBAAmB,IAI3B,KAAQ,kBAAsC,MAI9C,KAAQ,sBAA0C,QAKlD,KAAiB,aAAa,qBAAqB,EAAEH,CAAc,IAEnE,KAAiB,iBAAiB,yBAAyBA,CAAc,IASzE,KAAA,OAAO,IAQP,KAAA,QAAQ,IAcR,KAAA,kBAAkB,IAOlB,KAAA,UAAU,IAQV,KAAA,UAAoC,UASpC,KAAA,cAAc,IAId,KAAA,aAAa,gBA0Lb,KAAQ,iBAAiB,CAAC,MAA2B;AACnD,UAAI,EAAE,QAAQ,UAAU;AAItB,UAAE,eAAA,GACF,KAAK,QAAA;AACL;AAAA,MACF;AAEA,MAAI,EAAE,QAAQ,SAAS,KAAK,SAC1B,KAAK,WAAW,CAAC;AAAA,IAErB,GAwFA,KAAQ,qBAAqB,CAAC,MAAwB;AACpD,UAAI,CAAC,KAAK,gBAAiB;AAM3B,MADe,EAAE,WACF,KAAK,aAClB,KAAK,QAAA;AAAA,IAET,GAKA,KAAQ,uBAAuB,MAAY;AACzC,MAAK,KAAK,mBACV,KAAK,QAAA;AAAA,IACP,GAKA,KAAQ,sBAAsB,CAAC,MAAmB;AAEhD,QAAE,eAAA;AAAA,IACJ;AAAA,EAAA;AAAA;AAAA,EA/ZA,WAAoB,qBAA+B;AACjD,WAAO,CAAC,GAAG,MAAM,oBAAoB,YAAY;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EA0GA,IAAI,cAAsB;;AACxB,aAAOI,IAAA,KAAK,cAAL,gBAAAA,EAAgB,gBAAe;AAAA,EACxC;AAAA;AAAA;AAAA,EAKS,yBACPC,GACAC,GACAC,GACM;AACN,UAAM,yBAAyBF,GAAMC,GAAQC,CAAM,GAC/CF,MAAS,gBAAgBC,MAAWC,KACtC,KAAK,cAAc,cAAcD,CAAM;AAAA,EAE3C;AAAA,EAES,eAAqB;AAE5B,SAAK,iBAAiB,KAAK,cAAc,iBAAiB,MAAM,MAE5D,CAAC,KAAK,QAAQ,UAAW,KAAK;AAAA,EAMpC;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA,GACN,KAAK,uBAAA,GAED,KAAK,SAAS,KAAK,QACrBE,EAAA;AAAA,EAEJ;AAAA,EAES,QAAQC,GAA+C;AAC9D,UAAM,QAAQA,CAAiB,GAE3BA,EAAkB,IAAI,MAAM,MAC1B,KAAK,OACP,KAAK,YAAA,IAEL,KAAK,aAAA;AAAA,EAGX;AAAA;AAAA;AAAA,EAKA,OAAa;AACX,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGA,YAAkB;AAChB,SAAK,QAAQ,IACb,KAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAMC,GAA4B;AAChC,IAAIA,MAAgB,WAClB,KAAK,sBAAsBA,IAE7B,KAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA,EAKQ,cAAoB;AAC1B,UAAMC,IAAS,KAAK;AACpB,IAAKA,MACD,KAAK,qBACT,KAAK,mBAAmB,IAGxB,KAAK,kBAAkB,SAAS,eAE5B,KAAK,SACFA,EAAO,QACVA,EAAO,UAAA,GAKTC,EAAA,KAEKD,EAAO,QACVA,EAAO,KAAA,GAIX,KAAK,oBAAA,GAGA,KAAK,eAAe,KAAK,MAAM;;AAClC,WAAK,2BAA2B,KAAK,sBAAA,IAGrCP,IAAA,KAAK,yBAAyB,CAAC,MAA/B,QAAAA,EAAkC,SAClC,KAAK,mBAAmB;AAAA,IAC1B,CAAC,GAED,KAAK;AAAA,MACH,IAAI,YAAkB,WAAW;AAAA,QAC/B,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA;AAAA,EAGQ,eAAqB;;AAC3B,UAAMO,IAAS,KAAK;AAEpB,QADI,CAACA,KACD,KAAK,iBAAkB;AAC3B,SAAK,mBAAmB;AAExB,UAAME,IAAUF,EAAO;AACvB,IAAIA,EAAO,SAEL,KAAK,wBAAwB,UAC/BA,EAAO,MAAM,KAAK,mBAAmB,GACrC,KAAK,sBAAsB,UAE3BA,EAAO,MAAA,IAMXH,EAAA,GAEA,KAAK,uBAAA,GACL,KAAK,2BAA2B,CAAA,IAGhCJ,IAAA,KAAK,oBAAL,QAAAA,EAAsB,SACtB,KAAK,kBAAkB,MAEvB,KAAK,mBAAmB,IAEpBS,KACF,KAAK;AAAA,MACH,IAAI,YAAkB,YAAY;AAAA,QAChC,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAGP;AAAA;AAAA;AAAA,EAKQ,sBAA4B;;AAClC,KAAAT,IAAA,KAAK,cAAL,QAAAA,EAAgB,iBAAiB,WAAW,KAAK,kBACjDU,IAAA,KAAK,cAAL,QAAAA,EAAgB,iBAAiB,SAAS,KAAK,sBAC/CC,IAAA,KAAK,cAAL,QAAAA,EAAgB,iBAAiB,UAAU,KAAK;AAAA,EAClD;AAAA;AAAA,EAGQ,yBAA+B;;AACrC,KAAAX,IAAA,KAAK,cAAL,QAAAA,EAAgB,oBAAoB,WAAW,KAAK,kBACpDU,IAAA,KAAK,cAAL,QAAAA,EAAgB,oBAAoB,SAAS,KAAK,sBAClDC,IAAA,KAAK,cAAL,QAAAA,EAAgB,oBAAoB,UAAU,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA,EAuBQ,wBAAuC;;AAM7C,UAAMC,MAAQZ,IAAA,KAAK,eAAL,gBAAAA,EAAiB,iBAAkC,YAAW,CAAA,GACtEa,IAAgC,CAAA;AAEtC,IAAAD,EAAM,QAAQ,CAACE,MAAS;AACtB,MAAAA,EAAK,iBAAiB,EAAE,SAAS,GAAA,CAAM,EAAE,QAAQ,CAACC,MAAO;AACvD,QAAIA,aAAc,gBACZA,EAAG,QAAQlB,CAAmB,KAChCgB,EAAe,KAAKE,CAAE,GAExBA,EAAG,iBAA8BlB,CAAmB,EAAE,QAAQ,CAACmB,MAAU;AACvE,UAAAH,EAAe,KAAKG,CAAK;AAAA,QAC3B,CAAC;AAAA,MAEL,CAAC;AAAA,IACH,CAAC;AAED,UAAMC,IAAWJ,EAAe;AAAA,MAC9B,CAACE,MAAO,CAACA,EAAG,aAAa,UAAU,KAAKA,EAAG,aAAa,UAAU,MAAM;AAAA,IAAA;AAK1E,QAAIE,EAAS,WAAW,GAAG;AACzB,YAAMC,KAAWR,IAAA,KAAK,eAAL,gBAAAA,EAAiB,cAA2B;AAC7D,MAAIQ,KAAUD,EAAS,KAAKC,CAAQ;AAAA,IACtC;AAEA,WAAOD;AAAA,EACT;AAAA;AAAA,EAGQ,WAAW,GAAwB;;AACzC,UAAME,IACJ,KAAK,yBAAyB,SAAS,IACnC,KAAK,2BACL,KAAK,sBAAA;AACX,QAAIA,EAAU,WAAW,GAAG;AAC1B,QAAE,eAAA;AACF;AAAA,IACF;AAEA,UAAM,CAACC,GAAO,GAAGC,CAAI,IAAIF,GACnBG,IAAOD,EAAK,SAAS,IAAIA,EAAKA,EAAK,SAAS,CAAC,IAAID;AAEvD,QAAI,CAACA,KAAS,CAACE,EAAM;AAErB,UAAMC,IAAS,SAAS,eAElBC,KAAexB,IAAA,KAAK,eAAL,gBAAAA,EAAiB,eAChCyB,IAAiBD,KAAgBD,GAKjCL,KAAWR,IAAA,KAAK,eAAL,gBAAAA,EAAiB,cAA2B;AAE7D,IAAI,EAAE,YAGFe,MAAkBL,KACjBF,MAAa,QAAQM,MAAiBN,KAAYE,MAAUF,OAE7D,EAAE,eAAA,GACFI,EAAK,MAAA,KAIHG,MAAkBH,MACpB,EAAE,eAAA,GACFF,EAAM,MAAA;AAAA,EAGZ;AAAA;AAAA;AAAA,EAoCQ,UAAgB;AACtB,SAAK;AAAA,MACH,IAAI,YAAkB,aAAa;AAAA,QACjC,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA,GAGH,KAAK,OAAO;AAAA,EAEd;AAAA;AAAA;AAAA,EAKQ,wBAAwB,GAAgB;AAC9C,UAAMN,IAAO,EAAE;AACf,SAAK,iBAAiBA,EAAK,cAAc,EAAE,SAAS,GAAA,CAAM,EAAE,SAAS;AAAA,EACvE;AAAA;AAAA,EAGQ,wBAAwB,GAAgB;AAC9C,UAAMA,IAAO,EAAE;AACf,SAAK,iBAAiBA,EAAK,cAAc,EAAE,SAAS,GAAA,CAAM,EAAE,SAAS;AAAA,EACvE;AAAA;AAAA;AAAA,EAKQ,gBAAgB;AACtB,UAAMY,IAAa,KAAK,QAAQ,KAAA,EAAO,SAAS;AAGhD,WAAOC;AAAA;AAAA,UAEDD,IACEC,WAAc,KAAK,UAAU,4BAA4B,KAAK,OAAO,UACrEC,CAAO;AAAA,0CACuB,KAAK,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,uBAK/C,KAAK,UAAU;AAAA,mBACnB,MAAM,KAAK,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA,EAInC;AAAA;AAAA,EAGQ,gBAAgB;AACtB,WAAOD;AAAA,0DAC+C,CAAC,KAAK,cAAc;AAAA,0CACpC,KAAK,uBAAuB;AAAA;AAAA;AAAA,EAGpE;AAAA;AAAA,EAGQ,0BAA0B;AAChC,WAAI,KAAK,SAAS,CAAC,KAAK,OAAaC,IAC9BD;AAAA;AAAA;AAAA;AAAA,iBAIM,KAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA,EAIxC;AAAA;AAAA;AAAA,EAIQ,qBAAqB;AAC3B,WAAK,KAAK,cACHA,aAAgB,KAAK,cAAc;AAAA,SACrC,KAAK,WAAW;AAAA,SAFSC;AAAA,EAIhC;AAAA;AAAA,EAIS,SAAS;AAChB,UAAMF,IAAa,KAAK,QAAQ,KAAA,EAAO,SAAS,GAE1CG,IAAY,KAAK,aAAa,YAAY;AAEhD,WAAOF;AAAA,QACH,KAAK,yBAAyB;AAAA;AAAA,eAEvB,KAAK,YAAY,WAAW,KAAK,UAAUC,CAAO;AAAA,0BACvCF,IAAa,KAAK,aAAaE,CAAO;AAAA,qBAC1CF,IAAuCE,IAAzBC,KAAa,QAAmB;AAAA,2BACzC,KAAK,cAAc,KAAK,iBAAiBD,CAAO;AAAA,qBACtD,KAAK,QAAQ,SAASA,CAAO;AAAA;AAAA;AAAA,YAGtC,KAAK,cAAA,CAAe,IAAI,KAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA,YAIjD,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,EAI9B;AACF;AAnhBa9B,EACK,SAAS,CAACJ,CAAiB;AAWnCoC,EAAA;AAAA,EADPC,EAAM,QAAQ;AAAA,GAXJjC,EAYH,WAAA,aAAA,CAAA;AAOAgC,EAAA;AAAA,EADPE,EAAA;AAAM,GAlBIlC,EAmBH,WAAA,kBAAA,CAAA;AAKAgC,EAAA;AAAA,EADPE,EAAA;AAAM,GAvBIlC,EAwBH,WAAA,kBAAA,CAAA;AAgCRgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAvD/BnC,EAwDX,WAAA,QAAA,CAAA;AAQAgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GA/D/BnC,EAgEX,WAAA,SAAA,CAAA;AAcAgC,EAAA;AAAA,EARCG,EAAS;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,MACT,eAAe,CAACC,MAAyBA,MAAU;AAAA,MACnD,aAAa,CAACA,MAAmB,OAAOA,CAAK;AAAA,IAAA;AAAA,EAC/C,CACD;AAAA,GA7EUpC,EA8EX,WAAA,mBAAA,CAAA;AAOAgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GApFfnC,EAqFX,WAAA,WAAA,CAAA;AAQAgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GA5F9BnC,EA6FX,WAAA,WAAA,CAAA;AASAgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GArGfnC,EAsGX,WAAA,eAAA,CAAA;AAIAgC,EAAA;AAAA,EADCG,EAAS,EAAE,MAAM,QAAQ,WAAW,eAAe;AAAA,GAzGzCnC,EA0GX,WAAA,cAAA,CAAA;AA1GWA,IAANgC,EAAA;AAAA,EADNK,EAAc,WAAW;AAAA,GACbrC,CAAA;"}
@@ -1,7 +1,7 @@
1
- import { css as v, LitElement as p, nothing as c, html as s } from "lit";
1
+ import { css as v, LitElement as p, nothing as c, html as o } from "lit";
2
+ import "./document-token-adoption-Dym9ALA4.js";
2
3
  import { property as n, state as _, customElement as g } from "lit/decorators.js";
3
- import { tokenStyles as b } from "@helixui/tokens/lit";
4
- const f = v`
4
+ const b = v`
5
5
  :host {
6
6
  display: block;
7
7
  --_divider-color: var(--hx-divider-color, var(--hx-color-neutral-200, #e2e8f0));
@@ -89,10 +89,10 @@ const f = v`
89
89
  white-space: nowrap;
90
90
  }
91
91
  `;
92
- var m = Object.defineProperty, x = Object.getOwnPropertyDescriptor, l = (e, i, t, o) => {
93
- for (var a = o > 1 ? void 0 : o ? x(i, t) : i, d = e.length - 1, h; d >= 0; d--)
94
- (h = e[d]) && (a = (o ? h(i, t, a) : h(a)) || a);
95
- return o && a && m(i, t, a), a;
92
+ var f = Object.defineProperty, m = Object.getOwnPropertyDescriptor, l = (e, i, t, s) => {
93
+ for (var a = s > 1 ? void 0 : s ? m(i, t) : i, d = e.length - 1, h; d >= 0; d--)
94
+ (h = e[d]) && (a = (s ? h(i, t, a) : h(a)) || a);
95
+ return s && a && f(i, t, a), a;
96
96
  };
97
97
  let r = class extends p {
98
98
  constructor() {
@@ -115,7 +115,7 @@ let r = class extends p {
115
115
  }
116
116
  render() {
117
117
  const e = this.decorative, i = this._hasLabel || !!this.label;
118
- return s`
118
+ return o`
119
119
  <div
120
120
  part="base"
121
121
  class="divider${i ? " divider--labeled" : ""}"
@@ -124,16 +124,16 @@ let r = class extends p {
124
124
  aria-label="${!e && this.label ? this.label : c}"
125
125
  >
126
126
  <span class="divider__line"></span>
127
- ${i ? s`<span part="label" class="divider__label">
128
- ${this.label ? s`${this.label}` : c}
127
+ ${i ? o`<span part="label" class="divider__label">
128
+ ${this.label ? o`${this.label}` : c}
129
129
  <slot @slotchange=${this._slotChangeHandler}></slot>
130
- </span>` : s`<slot @slotchange=${this._slotChangeHandler}></slot>`}
130
+ </span>` : o`<slot @slotchange=${this._slotChangeHandler}></slot>`}
131
131
  <span class="divider__line"></span>
132
132
  </div>
133
133
  `;
134
134
  }
135
135
  };
136
- r.styles = [b, f];
136
+ r.styles = [b];
137
137
  l([
138
138
  n({ type: String, reflect: !0 })
139
139
  ], r.prototype, "orientation", 2);
@@ -155,4 +155,4 @@ r = l([
155
155
  export {
156
156
  r as H
157
157
  };
158
- //# sourceMappingURL=hx-divider-DdAN-_jB.js.map
158
+ //# sourceMappingURL=hx-divider-BJjarZ9z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-divider-BJjarZ9z.js","sources":["../../src/components/hx-divider/hx-divider.styles.ts","../../src/components/hx-divider/hx-divider.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixDividerStyles = css`\n :host {\n display: block;\n --_divider-color: var(--hx-divider-color, var(--hx-color-neutral-200, #e2e8f0));\n --_divider-width: var(--hx-divider-width, var(--hx-border-width-thin, 1px));\n --_divider-label-color: var(--hx-divider-label-color, var(--hx-color-neutral-500, #64748b));\n --_divider-label-size: var(--hx-divider-label-font-size, var(--hx-font-size-sm, 0.875rem));\n --_divider-label-gap: var(--hx-divider-label-gap, var(--hx-space-3, 0.75rem));\n }\n\n /* ─── Spacing Variants ─── */\n\n :host([spacing='none']) {\n --_spacing: 0;\n }\n\n :host([spacing='sm']) {\n --_spacing: var(--hx-space-2, 0.5rem);\n }\n\n :host,\n :host([spacing='md']) {\n --_spacing: var(--hx-space-4, 1rem);\n }\n\n :host([spacing='lg']) {\n --_spacing: var(--hx-space-6, 1.5rem);\n }\n\n /* ─── Horizontal (default) ─── */\n\n :host([orientation='horizontal']) {\n margin-block: var(--_spacing);\n }\n\n /* ─── Vertical ─── */\n\n :host([orientation='vertical']) {\n display: inline-flex;\n align-self: stretch;\n margin-inline: var(--_spacing);\n }\n\n /* ─── Base (hr) — horizontal ─── */\n\n .divider {\n display: flex;\n align-items: center;\n gap: var(--_divider-label-gap);\n border: none;\n margin: 0;\n padding: 0;\n }\n\n /* ─── Base — vertical ─── */\n\n :host([orientation='vertical']) .divider {\n flex-direction: column;\n height: 100%;\n }\n\n /* ─── Lines flanking label ─── */\n\n .divider__line {\n flex: 1;\n background-color: var(--_divider-color);\n }\n\n :host(:not([orientation='vertical'])) .divider__line {\n height: var(--_divider-width);\n }\n\n :host([orientation='vertical']) .divider__line {\n width: var(--_divider-width);\n height: auto;\n min-height: 0;\n }\n\n /* ─── Label ─── */\n\n .divider__label {\n flex-shrink: 0;\n color: var(--_divider-label-color);\n font-size: var(--_divider-label-size);\n line-height: var(--hx-line-height-tight, 1.25);\n white-space: nowrap;\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { devWarn } from '../../utils/dev-warn.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { helixDividerStyles } from './hx-divider.styles.js';\n\n/**\n * A visual separator element for dividing content sections. Supports\n * horizontal and vertical orientations, configurable spacing, and an optional\n * centered label rendered between two lines.\n *\n * @summary Horizontal or vertical separator line with optional label.\n *\n * @tag hx-divider\n *\n * @slot - Optional label text rendered centered between two lines.\n *\n * @csspart base - The root divider element.\n * @csspart label - The optional centered label wrapper.\n *\n * @cssprop [--hx-divider-color=var(--hx-color-neutral-200)] - Line color.\n * @cssprop [--hx-divider-width=var(--hx-border-width-thin)] - Line thickness.\n * @cssprop [--hx-divider-label-color=var(--hx-color-neutral-500)] - Label text color.\n * @cssprop [--hx-divider-label-font-size=var(--hx-font-size-sm)] - Label font size.\n * @cssprop [--hx-divider-label-gap=var(--hx-space-3)] - Gap between lines and label.\n */\n@customElement('hx-divider')\nexport class HelixDivider extends LitElement {\n static override styles = [helixDividerStyles];\n\n /**\n * Orientation of the divider.\n * @attr orientation\n */\n @property({ type: String, reflect: true })\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Spacing applied to the block axis (horizontal) or inline axis (vertical).\n * @attr spacing\n */\n @property({ type: String, reflect: true })\n spacing: 'none' | 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * When true, renders the divider as decorative only (role=\"presentation\").\n * Screen readers will not announce decorative dividers.\n * @attr decorative\n */\n @property({ type: Boolean, reflect: true })\n decorative = false;\n\n /**\n * Optional text label rendered centered between the divider lines.\n * Also sets aria-label on the separator for assistive technologies.\n * @attr label\n */\n @property({ type: String, reflect: true })\n label?: string;\n\n /** @internal */\n @state()\n private _hasLabel = false;\n\n /** @internal */\n private _checkSlot(slot: HTMLSlotElement): void {\n const nodes = slot.assignedNodes({ flatten: true });\n this._hasLabel = nodes.some((node) =>\n node.nodeType === Node.TEXT_NODE\n ? (node.textContent ?? '').trim().length > 0\n : node.nodeType === Node.ELEMENT_NODE,\n );\n }\n\n /** @internal */\n private _slotChangeHandler = (e: Event): void => {\n this._checkSlot(e.target as HTMLSlotElement);\n };\n\n override firstUpdated(_changedProperties: PropertyValues<this>): void {\n super.firstUpdated(_changedProperties);\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (slot) this._checkSlot(slot);\n if (!this.decorative && !this.label && !this._hasLabel) {\n devWarn(\n 'hx-divider',\n 'Non-decorative separator has no accessible name. Provide a `label` attribute or slot content, or set `decorative` to suppress this warning (WCAG 4.1.2).',\n );\n }\n }\n\n override render() {\n const isDecorative = this.decorative;\n const showLabel = this._hasLabel || !!this.label;\n\n return html`\n <div\n part=\"base\"\n class=\"divider${showLabel ? ' divider--labeled' : ''}\"\n role=\"${isDecorative ? 'presentation' : 'separator'}\"\n aria-orientation=\"${isDecorative ? nothing : this.orientation}\"\n aria-label=\"${!isDecorative && this.label ? this.label : nothing}\"\n >\n <span class=\"divider__line\"></span>\n ${showLabel\n ? html`<span part=\"label\" class=\"divider__label\">\n ${this.label ? html`${this.label}` : nothing}\n <slot @slotchange=${this._slotChangeHandler}></slot>\n </span>`\n : html`<slot @slotchange=${this._slotChangeHandler}></slot>`}\n <span class=\"divider__line\"></span>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-divider': HelixDivider;\n }\n}\n\n/** Canonical type alias for the hx-divider component. */\nexport type HxDivider = HelixDivider;\n\n/** @deprecated Use {@link HxDivider} instead. The `Wc` prefix was a legacy naming convention. */\nexport type WcDivider = HelixDivider;\n"],"names":["helixDividerStyles","css","HelixDivider","LitElement","slot","nodes","node","_changedProperties","_a","isDecorative","showLabel","html","nothing","__decorateClass","property","state","customElement"],"mappings":";;;AAEO,MAAMA,IAAqBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACyB3B,IAAMC,IAAN,cAA2BC,EAAW;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA,GAQL,KAAA,cAAyC,cAOzC,KAAA,UAAuC,MAQvC,KAAA,aAAa,IAYb,KAAQ,YAAY,IAapB,KAAQ,qBAAqB,CAAC,MAAmB;AAC/C,WAAK,WAAW,EAAE,MAAyB;AAAA,IAC7C;AAAA,EAAA;AAAA;AAAA,EAZQ,WAAWC,GAA6B;AAC9C,UAAMC,IAAQD,EAAK,cAAc,EAAE,SAAS,IAAM;AAClD,SAAK,YAAYC,EAAM;AAAA,MAAK,CAACC,MAC3BA,EAAK,aAAa,KAAK,aAClBA,EAAK,eAAe,IAAI,OAAO,SAAS,IACzCA,EAAK,aAAa,KAAK;AAAA,IAAA;AAAA,EAE/B;AAAA,EAOS,aAAaC,GAAgD;;AACpE,UAAM,aAAaA,CAAkB;AACrC,UAAMH,KAAOI,IAAA,KAAK,eAAL,gBAAAA,EAAiB,cAA+B;AAC7D,IAAIJ,KAAM,KAAK,WAAWA,CAAI,GAC1B,CAAC,KAAK,cAAc,CAAC,KAAK,SAAU,KAAK;AAAA,EAM/C;AAAA,EAES,SAAS;AAChB,UAAMK,IAAe,KAAK,YACpBC,IAAY,KAAK,aAAa,CAAC,CAAC,KAAK;AAE3C,WAAOC;AAAA;AAAA;AAAA,wBAGaD,IAAY,sBAAsB,EAAE;AAAA,gBAC5CD,IAAe,iBAAiB,WAAW;AAAA,4BAC/BA,IAAeG,IAAU,KAAK,WAAW;AAAA,sBAC/C,CAACH,KAAgB,KAAK,QAAQ,KAAK,QAAQG,CAAO;AAAA;AAAA;AAAA,UAG9DF,IACEC;AAAA,gBACI,KAAK,QAAQA,IAAO,KAAK,KAAK,KAAKC,CAAO;AAAA,kCACxB,KAAK,kBAAkB;AAAA,uBAE7CD,sBAAyB,KAAK,kBAAkB,UAAU;AAAA;AAAA;AAAA;AAAA,EAIpE;AACF;AAvFaT,EACK,SAAS,CAACF,CAAkB;AAO5Ca,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAP9BZ,EAQX,WAAA,eAAA,CAAA;AAOAW,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAd9BZ,EAeX,WAAA,WAAA,CAAA;AAQAW,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAtB/BZ,EAuBX,WAAA,cAAA,CAAA;AAQAW,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GA9B9BZ,EA+BX,WAAA,SAAA,CAAA;AAIQW,EAAA;AAAA,EADPE,EAAA;AAAM,GAlCIb,EAmCH,WAAA,aAAA,CAAA;AAnCGA,IAANW,EAAA;AAAA,EADNG,EAAc,YAAY;AAAA,GACdd,CAAA;"}
@@ -1,10 +1,10 @@
1
1
  import { css as b, LitElement as v, html as h, nothing as w } from "lit";
2
+ import "./document-token-adoption-Dym9ALA4.js";
2
3
  import { query as m, state as c, property as d, customElement as y } from "lit/decorators.js";
3
4
  import { classMap as g } from "lit/directives/class-map.js";
4
5
  import { ifDefined as p } from "lit/directives/if-defined.js";
5
- import { tokenStyles as _ } from "@helixui/tokens/lit";
6
- import { l as x, u as E } from "./body-scroll-lock-VBa5TFP-.js";
7
- const S = b`
6
+ import { l as _, u as x } from "./body-scroll-lock-VBa5TFP-.js";
7
+ const E = b`
8
8
  /* P2-03: Explicit [hidden] rule to survive CSS resets that may override the UA stylesheet. */
9
9
  [hidden] {
10
10
  display: none !important;
@@ -267,13 +267,13 @@ const S = b`
267
267
  flex-shrink: 0;
268
268
  }
269
269
  `;
270
- var k = Object.defineProperty, C = Object.getOwnPropertyDescriptor, a = (e, t, r, s) => {
271
- for (var i = s > 1 ? void 0 : s ? C(t, r) : t, n = e.length - 1, l; n >= 0; n--)
270
+ var S = Object.defineProperty, k = Object.getOwnPropertyDescriptor, o = (e, t, r, s) => {
271
+ for (var i = s > 1 ? void 0 : s ? k(t, r) : t, n = e.length - 1, l; n >= 0; n--)
272
272
  (l = e[n]) && (i = (s ? l(t, r, i) : l(i)) || i);
273
- return s && i && k(t, r, i), i;
273
+ return s && i && S(t, r, i), i;
274
274
  };
275
- let A = 0;
276
- const F = {
275
+ let C = 0;
276
+ const A = {
277
277
  sm: "20rem",
278
278
  md: "30rem",
279
279
  lg: "40rem",
@@ -288,9 +288,9 @@ const F = {
288
288
  '[tabindex]:not([tabindex="-1"])',
289
289
  "details > summary"
290
290
  ].join(",");
291
- let o = class extends v {
291
+ let a = class extends v {
292
292
  constructor() {
293
- super(...arguments), this._isOpen = !1, this._hasHeaderActionsSlot = !1, this._hasFooterSlot = !1, this._hasLabelSlot = !1, this._cachedFocusableElements = [], this._triggerElement = null, this._animationTimeout = null, this._hasScrollLock = !1, this._siblingAriaHiddenElements = [], this._titleId = `hx-drawer-title-${++A}`, this.open = !1, this.placement = "end", this.size = "md", this.contained = !1, this.noHeader = !1, this.noFooter = !1, this.label = "", this.labelClose = "Close drawer", this._handleKeyDown = (e) => {
293
+ super(...arguments), this._isOpen = !1, this._hasHeaderActionsSlot = !1, this._hasFooterSlot = !1, this._hasLabelSlot = !1, this._cachedFocusableElements = [], this._triggerElement = null, this._animationTimeout = null, this._hasScrollLock = !1, this._siblingAriaHiddenElements = [], this._titleId = `hx-drawer-title-${++C}`, this.open = !1, this.placement = "end", this.size = "md", this.contained = !1, this.noHeader = !1, this.noFooter = !1, this.label = "", this.labelClose = "Close drawer", this._handleKeyDown = (e) => {
294
294
  if (this._isOpen) {
295
295
  if (e.key === "Escape") {
296
296
  e.preventDefault(), this.open = !1;
@@ -327,17 +327,17 @@ let o = class extends v {
327
327
  // ─── Private: Size CSS variable ───
328
328
  /** @internal */
329
329
  _applySizeVar() {
330
- const e = F[this.size] ?? this.size;
330
+ const e = A[this.size] ?? this.size;
331
331
  this.style.setProperty("--_drawer-size", e);
332
332
  }
333
333
  // ─── Private: Open / Close ───
334
334
  /** @internal */
335
335
  _lockBodyScroll() {
336
- this.contained || this._hasScrollLock || (x(), this._hasScrollLock = !0);
336
+ this.contained || this._hasScrollLock || (_(), this._hasScrollLock = !0);
337
337
  }
338
338
  /** @internal */
339
339
  _restoreBodyScroll() {
340
- this._hasScrollLock && (E(), this._hasScrollLock = !1);
340
+ this._hasScrollLock && (x(), this._hasScrollLock = !1);
341
341
  }
342
342
  /** @internal */
343
343
  _openDrawer() {
@@ -540,53 +540,53 @@ let o = class extends v {
540
540
  `;
541
541
  }
542
542
  };
543
- o.styles = [_, S];
544
- a([
543
+ a.styles = [E];
544
+ o([
545
545
  m(".drawer-overlay")
546
- ], o.prototype, "_overlayEl", 2);
547
- a([
546
+ ], a.prototype, "_overlayEl", 2);
547
+ o([
548
548
  m(".drawer-panel")
549
- ], o.prototype, "_panelEl", 2);
550
- a([
549
+ ], a.prototype, "_panelEl", 2);
550
+ o([
551
551
  c()
552
- ], o.prototype, "_isOpen", 2);
553
- a([
552
+ ], a.prototype, "_isOpen", 2);
553
+ o([
554
554
  c()
555
- ], o.prototype, "_hasHeaderActionsSlot", 2);
556
- a([
555
+ ], a.prototype, "_hasHeaderActionsSlot", 2);
556
+ o([
557
557
  c()
558
- ], o.prototype, "_hasFooterSlot", 2);
559
- a([
558
+ ], a.prototype, "_hasFooterSlot", 2);
559
+ o([
560
560
  c()
561
- ], o.prototype, "_hasLabelSlot", 2);
562
- a([
561
+ ], a.prototype, "_hasLabelSlot", 2);
562
+ o([
563
563
  d({ type: Boolean, reflect: !0 })
564
- ], o.prototype, "open", 2);
565
- a([
564
+ ], a.prototype, "open", 2);
565
+ o([
566
566
  d({ type: String, reflect: !0 })
567
- ], o.prototype, "placement", 2);
568
- a([
567
+ ], a.prototype, "placement", 2);
568
+ o([
569
569
  d({ type: String, reflect: !0, attribute: "hx-size" })
570
- ], o.prototype, "size", 2);
571
- a([
570
+ ], a.prototype, "size", 2);
571
+ o([
572
572
  d({ type: Boolean, reflect: !0 })
573
- ], o.prototype, "contained", 2);
574
- a([
573
+ ], a.prototype, "contained", 2);
574
+ o([
575
575
  d({ type: Boolean, reflect: !0, attribute: "no-header" })
576
- ], o.prototype, "noHeader", 2);
577
- a([
576
+ ], a.prototype, "noHeader", 2);
577
+ o([
578
578
  d({ type: Boolean, reflect: !0, attribute: "no-footer" })
579
- ], o.prototype, "noFooter", 2);
580
- a([
579
+ ], a.prototype, "noFooter", 2);
580
+ o([
581
581
  d({ type: String })
582
- ], o.prototype, "label", 2);
583
- a([
582
+ ], a.prototype, "label", 2);
583
+ o([
584
584
  d({ type: String, attribute: "label-close" })
585
- ], o.prototype, "labelClose", 2);
586
- o = a([
585
+ ], a.prototype, "labelClose", 2);
586
+ a = o([
587
587
  y("hx-drawer")
588
- ], o);
588
+ ], a);
589
589
  export {
590
- o as H
590
+ a as H
591
591
  };
592
- //# sourceMappingURL=hx-drawer-e0qeGxAD.js.map
592
+ //# sourceMappingURL=hx-drawer-C5qI7jf1.js.map