@helixui/library 3.3.1 → 3.4.0

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 (321) hide show
  1. package/custom-elements.json +340 -71
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts +35 -0
  3. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  4. package/dist/components/hx-alert/hx-alert.d.ts +11 -0
  5. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  6. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  7. package/dist/components/hx-alert/index.js +1 -1
  8. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  9. package/dist/components/hx-badge/index.js +1 -1
  10. package/dist/components/hx-banner/hx-banner.d.ts +9 -1
  11. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  12. package/dist/components/hx-banner/index.js +1 -1
  13. package/dist/components/hx-button/hx-button.d.ts +11 -1
  14. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  15. package/dist/components/hx-button/index.js +1 -1
  16. package/dist/components/hx-button-group/hx-button-group.d.ts +13 -0
  17. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  18. package/dist/components/hx-button-group/index.js +1 -1
  19. package/dist/components/hx-checkbox/hx-checkbox.d.ts +153 -1
  20. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  21. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  22. package/dist/components/hx-checkbox/index.js +1 -1
  23. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +151 -2
  24. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  25. package/dist/components/hx-checkbox-group/index.js +1 -1
  26. package/dist/components/hx-color-picker/hx-color-picker.d.ts +163 -1
  27. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  28. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  29. package/dist/components/hx-color-picker/index.js +1 -1
  30. package/dist/components/hx-combobox/hx-combobox.d.ts +311 -2
  31. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  32. package/dist/components/hx-combobox/index.js +1 -1
  33. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  34. package/dist/components/hx-data-table/index.js +1 -1
  35. package/dist/components/hx-date-picker/hx-date-picker.d.ts +182 -56
  36. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  37. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  38. package/dist/components/hx-date-picker/index.js +1 -1
  39. package/dist/components/hx-dialog/hx-dialog.d.ts +240 -0
  40. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  41. package/dist/components/hx-dialog/index.js +1 -1
  42. package/dist/components/hx-drawer/hx-drawer.d.ts +201 -0
  43. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  44. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  45. package/dist/components/hx-drawer/index.js +1 -1
  46. package/dist/components/hx-dropdown/hx-dropdown.d.ts +168 -0
  47. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  48. package/dist/components/hx-dropdown/index.js +1 -1
  49. package/dist/components/hx-field/hx-field.d.ts +109 -0
  50. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  51. package/dist/components/hx-field/index.js +1 -1
  52. package/dist/components/hx-icon-button/hx-icon-button.d.ts +16 -3
  53. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  54. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  55. package/dist/components/hx-icon-button/index.js +1 -1
  56. package/dist/components/hx-link/hx-link.d.ts +10 -1
  57. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  58. package/dist/components/hx-link/index.js +1 -1
  59. package/dist/components/hx-list/hx-list-item.d.ts +27 -1
  60. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  61. package/dist/components/hx-list/hx-list.d.ts +28 -0
  62. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  63. package/dist/components/hx-list/index.js +1 -1
  64. package/dist/components/hx-menu/hx-menu-divider.d.ts +10 -0
  65. package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
  66. package/dist/components/hx-menu/hx-menu-item.d.ts +99 -2
  67. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  68. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  69. package/dist/components/hx-menu/hx-menu.d.ts +117 -2
  70. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  71. package/dist/components/hx-menu/index.js +1 -1
  72. package/dist/components/hx-meter/hx-meter.d.ts +39 -0
  73. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  74. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  75. package/dist/components/hx-meter/index.js +1 -1
  76. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +132 -1
  77. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  78. package/dist/components/hx-overflow-menu/index.js +1 -1
  79. package/dist/components/hx-phi-field/hx-phi-field.d.ts +0 -1
  80. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  81. package/dist/components/hx-popover/hx-popover.d.ts +91 -0
  82. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  83. package/dist/components/hx-popover/index.js +1 -1
  84. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +33 -0
  85. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  86. package/dist/components/hx-progress-bar/index.js +1 -1
  87. package/dist/components/hx-radio-group/hx-radio-group.d.ts +152 -1
  88. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  89. package/dist/components/hx-radio-group/hx-radio.d.ts +14 -0
  90. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  91. package/dist/components/hx-radio-group/index.js +1 -1
  92. package/dist/components/hx-select/hx-select.d.ts +304 -2
  93. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  94. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  95. package/dist/components/hx-select/index.js +1 -1
  96. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  97. package/dist/components/hx-side-nav/index.js +1 -1
  98. package/dist/components/hx-spinner/hx-spinner.d.ts +14 -0
  99. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  100. package/dist/components/hx-spinner/index.js +1 -1
  101. package/dist/components/hx-split-button/hx-split-button.d.ts +94 -7
  102. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  103. package/dist/components/hx-split-button/index.js +1 -1
  104. package/dist/components/hx-stat/hx-stat.d.ts +28 -0
  105. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  106. package/dist/components/hx-stat/index.js +1 -1
  107. package/dist/components/hx-switch/hx-switch.d.ts +78 -1
  108. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  109. package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
  110. package/dist/components/hx-switch/index.js +1 -1
  111. package/dist/components/hx-table/hx-td.d.ts +30 -3
  112. package/dist/components/hx-table/hx-td.d.ts.map +1 -1
  113. package/dist/components/hx-table/hx-th.d.ts +39 -3
  114. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  115. package/dist/components/hx-table/hx-tr.d.ts +26 -0
  116. package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
  117. package/dist/components/hx-table/index.js +1 -1
  118. package/dist/components/hx-tabs/hx-tab-panel.d.ts +34 -0
  119. package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
  120. package/dist/components/hx-tabs/hx-tab.d.ts +45 -2
  121. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  122. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  123. package/dist/components/hx-tabs/hx-tabs.d.ts +32 -2
  124. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  125. package/dist/components/hx-tabs/index.js +1 -1
  126. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  127. package/dist/components/hx-tag/index.js +1 -1
  128. package/dist/components/hx-theme/hx-theme.d.ts +10 -5
  129. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  130. package/dist/components/hx-time-picker/hx-time-picker.d.ts +210 -2
  131. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  132. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  133. package/dist/components/hx-time-picker/index.js +1 -1
  134. package/dist/components/hx-toast/hx-toast-stack.d.ts +14 -0
  135. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
  136. package/dist/components/hx-toast/hx-toast.d.ts +22 -3
  137. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  138. package/dist/components/hx-toast/index.js +1 -1
  139. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
  140. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +110 -0
  141. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  142. package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
  143. package/dist/components/hx-toggle-button/index.js +1 -1
  144. package/dist/components/hx-tooltip/hx-tooltip.d.ts +52 -0
  145. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  146. package/dist/components/hx-tooltip/index.js +1 -1
  147. package/dist/components/hx-tree-view/hx-tree-item.d.ts +117 -12
  148. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  149. package/dist/components/hx-tree-view/hx-tree-view.d.ts +87 -7
  150. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  151. package/dist/components/hx-tree-view/index.js +1 -1
  152. package/dist/css/helix-all.css +221 -1
  153. package/dist/css/helix-core.css +81 -0
  154. package/dist/css/helix-feedback.css +14 -0
  155. package/dist/css/helix-forms.css +109 -1
  156. package/dist/css/helix-overlay.css +17 -0
  157. package/dist/css/hx-alert.css +9 -0
  158. package/dist/css/hx-badge.css +28 -0
  159. package/dist/css/hx-checkbox.css +18 -0
  160. package/dist/css/hx-color-picker.css +25 -0
  161. package/dist/css/hx-date-picker.css +2 -1
  162. package/dist/css/hx-drawer.css +17 -0
  163. package/dist/css/hx-icon-button.css +30 -0
  164. package/dist/css/hx-meter.css +5 -0
  165. package/dist/css/hx-select.css +19 -0
  166. package/dist/css/hx-switch.css +17 -0
  167. package/dist/css/hx-tag.css +23 -0
  168. package/dist/css/hx-time-picker.css +11 -0
  169. package/dist/css/hx-toggle-button.css +17 -0
  170. package/dist/css/index.css +1 -1
  171. package/dist/css/manifest.json +4 -1
  172. package/dist/index.js +38 -38
  173. package/dist/shared/aria-flatten-DY6v2vah.js +22 -0
  174. package/dist/shared/aria-flatten-DY6v2vah.js.map +1 -0
  175. package/dist/shared/aria-idref-CxvyzfQS.js +126 -0
  176. package/dist/shared/aria-idref-CxvyzfQS.js.map +1 -0
  177. package/dist/shared/hx-accordion-ZVzgDzTG.js.map +1 -1
  178. package/dist/shared/{hx-alert-CLn7CstP.js → hx-alert-Bto8-TIi.js} +55 -37
  179. package/dist/shared/hx-alert-Bto8-TIi.js.map +1 -0
  180. package/dist/shared/{hx-badge-CQXgOXJM.js → hx-badge-JlFtAdxS.js} +37 -9
  181. package/dist/shared/hx-badge-JlFtAdxS.js.map +1 -0
  182. package/dist/shared/{hx-banner-D3DzpfcP.js → hx-banner-fpRnciIO.js} +13 -5
  183. package/dist/shared/hx-banner-fpRnciIO.js.map +1 -0
  184. package/dist/shared/{hx-button-DPY6SPVT.js → hx-button-BOwAEcF1.js} +108 -85
  185. package/dist/shared/{hx-button-DPY6SPVT.js.map → hx-button-BOwAEcF1.js.map} +1 -1
  186. package/dist/shared/{hx-button-group-BI-QBqmO.js → hx-button-group-DcHP5MBv.js} +15 -16
  187. package/dist/shared/{hx-button-group-BI-QBqmO.js.map → hx-button-group-DcHP5MBv.js.map} +1 -1
  188. package/dist/shared/hx-checkbox-C48KYKFq.js +696 -0
  189. package/dist/shared/hx-checkbox-C48KYKFq.js.map +1 -0
  190. package/dist/shared/hx-checkbox-group-BJIAX3zU.js +496 -0
  191. package/dist/shared/hx-checkbox-group-BJIAX3zU.js.map +1 -0
  192. package/dist/shared/hx-color-picker-Dk4cBwYQ.js +1221 -0
  193. package/dist/shared/hx-color-picker-Dk4cBwYQ.js.map +1 -0
  194. package/dist/shared/hx-combobox-BTLO9qiK.js +1359 -0
  195. package/dist/shared/hx-combobox-BTLO9qiK.js.map +1 -0
  196. package/dist/shared/{hx-data-table-CLqVqdxr.js → hx-data-table-Ct3gQ6ya.js} +3 -2
  197. package/dist/shared/{hx-data-table-CLqVqdxr.js.map → hx-data-table-Ct3gQ6ya.js.map} +1 -1
  198. package/dist/shared/{hx-date-picker-2iRG1p74.js → hx-date-picker-CiR7FVnR.js} +542 -206
  199. package/dist/shared/hx-date-picker-CiR7FVnR.js.map +1 -0
  200. package/dist/shared/hx-dialog-AOZpHSuF.js +717 -0
  201. package/dist/shared/hx-dialog-AOZpHSuF.js.map +1 -0
  202. package/dist/shared/{hx-drawer-Y1Ui2IWJ.js → hx-drawer-DH6CdAN1.js} +300 -98
  203. package/dist/shared/hx-drawer-DH6CdAN1.js.map +1 -0
  204. package/dist/shared/hx-dropdown-DiLd40Lm.js +401 -0
  205. package/dist/shared/hx-dropdown-DiLd40Lm.js.map +1 -0
  206. package/dist/shared/{hx-field-B3Qo8OLS.js → hx-field-zw0U1KVi.js} +99 -38
  207. package/dist/shared/hx-field-zw0U1KVi.js.map +1 -0
  208. package/dist/shared/{hx-icon-button-CGNdQSFM.js → hx-icon-button-a6OpeQz5.js} +149 -68
  209. package/dist/shared/hx-icon-button-a6OpeQz5.js.map +1 -0
  210. package/dist/shared/{hx-link-C-O6vq0Q.js → hx-link-CMnZRUtQ.js} +55 -43
  211. package/dist/shared/hx-link-CMnZRUtQ.js.map +1 -0
  212. package/dist/shared/{hx-list-MyEhh8c7.js → hx-list-De66EtAP.js} +163 -107
  213. package/dist/shared/hx-list-De66EtAP.js.map +1 -0
  214. package/dist/shared/hx-menu-divider-BjiRIWKq.js +797 -0
  215. package/dist/shared/hx-menu-divider-BjiRIWKq.js.map +1 -0
  216. package/dist/shared/{hx-meter-BPscsw5t.js → hx-meter-BJdh6nrF.js} +105 -64
  217. package/dist/shared/hx-meter-BJdh6nrF.js.map +1 -0
  218. package/dist/shared/{hx-nav-item-xqRPOCWX.js → hx-nav-item-CODtUlew.js} +13 -9
  219. package/dist/shared/{hx-nav-item-xqRPOCWX.js.map → hx-nav-item-CODtUlew.js.map} +1 -1
  220. package/dist/shared/hx-overflow-menu-BQ4fiMYu.js +492 -0
  221. package/dist/shared/hx-overflow-menu-BQ4fiMYu.js.map +1 -0
  222. package/dist/shared/hx-phi-field-C19oxlrr.js.map +1 -1
  223. package/dist/shared/{hx-popover-B-FP3-wW.js → hx-popover-B9W8-tC0.js} +123 -66
  224. package/dist/shared/hx-popover-B9W8-tC0.js.map +1 -0
  225. package/dist/shared/hx-progress-bar-C8nDMdYa.js +290 -0
  226. package/dist/shared/hx-progress-bar-C8nDMdYa.js.map +1 -0
  227. package/dist/shared/hx-radio-Z1lV1zTO.js +822 -0
  228. package/dist/shared/hx-radio-Z1lV1zTO.js.map +1 -0
  229. package/dist/shared/hx-select-D18CnJ0e.js +1089 -0
  230. package/dist/shared/hx-select-D18CnJ0e.js.map +1 -0
  231. package/dist/shared/{hx-spinner-DL5AYr16.js → hx-spinner-BB0h2hKZ.js} +62 -34
  232. package/dist/shared/hx-spinner-BB0h2hKZ.js.map +1 -0
  233. package/dist/shared/{hx-split-button-Djnc5Aeg.js → hx-split-button-BoABoEm5.js} +153 -82
  234. package/dist/shared/hx-split-button-BoABoEm5.js.map +1 -0
  235. package/dist/shared/{hx-stat-WOcNV1Ry.js → hx-stat-Dtf9lz-O.js} +77 -47
  236. package/dist/shared/hx-stat-Dtf9lz-O.js.map +1 -0
  237. package/dist/shared/hx-switch-B6kr-EwE.js +540 -0
  238. package/dist/shared/hx-switch-B6kr-EwE.js.map +1 -0
  239. package/dist/shared/{hx-tab-panel-DspCrKqo.js → hx-tab-panel-BQtBXKLD.js} +255 -131
  240. package/dist/shared/hx-tab-panel-BQtBXKLD.js.map +1 -0
  241. package/dist/shared/{hx-tag-CNSmdyaK.js → hx-tag-C5aCUpVi.js} +63 -40
  242. package/dist/shared/hx-tag-C5aCUpVi.js.map +1 -0
  243. package/dist/shared/{hx-td-DnnEMIuA.js → hx-td-BGkFOJEK.js} +267 -123
  244. package/dist/shared/hx-td-BGkFOJEK.js.map +1 -0
  245. package/dist/shared/hx-theme-BsefFWTO.js.map +1 -1
  246. package/dist/shared/hx-time-picker-iwCD7rzW.js +1038 -0
  247. package/dist/shared/hx-time-picker-iwCD7rzW.js.map +1 -0
  248. package/dist/shared/{hx-toggle-button-iLiYrMbD.js → hx-toggle-button-BQ81EDkl.js} +226 -65
  249. package/dist/shared/hx-toggle-button-BQ81EDkl.js.map +1 -0
  250. package/dist/shared/{hx-tooltip-nYOv9OLu.js → hx-tooltip-DVqtKPCD.js} +68 -46
  251. package/dist/shared/hx-tooltip-DVqtKPCD.js.map +1 -0
  252. package/dist/shared/hx-tree-item-CHrUhuZL.js +925 -0
  253. package/dist/shared/hx-tree-item-CHrUhuZL.js.map +1 -0
  254. package/dist/shared/menu-roving-DmMnzJhn.js +14 -0
  255. package/dist/shared/menu-roving-DmMnzJhn.js.map +1 -0
  256. package/dist/shared/menu-tree-BNM0SYYq.js +42 -0
  257. package/dist/shared/menu-tree-BNM0SYYq.js.map +1 -0
  258. package/dist/shared/{toast-factory-YSznocIV.js → toast-factory-CL2BzdSB.js} +128 -77
  259. package/dist/shared/toast-factory-CL2BzdSB.js.map +1 -0
  260. package/dist/utils/aria-flatten.d.ts +56 -0
  261. package/dist/utils/aria-flatten.d.ts.map +1 -0
  262. package/dist/utils/aria-idref.d.ts +127 -0
  263. package/dist/utils/aria-idref.d.ts.map +1 -0
  264. package/dist/utils/menu-label.d.ts +18 -0
  265. package/dist/utils/menu-label.d.ts.map +1 -0
  266. package/dist/utils/menu-roving.d.ts +28 -0
  267. package/dist/utils/menu-roving.d.ts.map +1 -0
  268. package/dist/utils/menu-tree.d.ts +41 -0
  269. package/dist/utils/menu-tree.d.ts.map +1 -0
  270. package/dist/utils/tree-walk.d.ts +53 -0
  271. package/dist/utils/tree-walk.d.ts.map +1 -0
  272. package/figma-inventory.json +132 -20
  273. package/package.json +1 -1
  274. package/dist/shared/hx-alert-CLn7CstP.js.map +0 -1
  275. package/dist/shared/hx-badge-CQXgOXJM.js.map +0 -1
  276. package/dist/shared/hx-banner-D3DzpfcP.js.map +0 -1
  277. package/dist/shared/hx-checkbox-D7xma9YH.js +0 -524
  278. package/dist/shared/hx-checkbox-D7xma9YH.js.map +0 -1
  279. package/dist/shared/hx-checkbox-group-C9n315Ju.js +0 -323
  280. package/dist/shared/hx-checkbox-group-C9n315Ju.js.map +0 -1
  281. package/dist/shared/hx-color-picker-uRc865FJ.js +0 -882
  282. package/dist/shared/hx-color-picker-uRc865FJ.js.map +0 -1
  283. package/dist/shared/hx-combobox-DDzqNKEW.js +0 -924
  284. package/dist/shared/hx-combobox-DDzqNKEW.js.map +0 -1
  285. package/dist/shared/hx-date-picker-2iRG1p74.js.map +0 -1
  286. package/dist/shared/hx-dialog-DRN_1-Y-.js +0 -514
  287. package/dist/shared/hx-dialog-DRN_1-Y-.js.map +0 -1
  288. package/dist/shared/hx-drawer-Y1Ui2IWJ.js.map +0 -1
  289. package/dist/shared/hx-dropdown-LyaRc8Rf.js +0 -263
  290. package/dist/shared/hx-dropdown-LyaRc8Rf.js.map +0 -1
  291. package/dist/shared/hx-field-B3Qo8OLS.js.map +0 -1
  292. package/dist/shared/hx-icon-button-CGNdQSFM.js.map +0 -1
  293. package/dist/shared/hx-link-C-O6vq0Q.js.map +0 -1
  294. package/dist/shared/hx-list-MyEhh8c7.js.map +0 -1
  295. package/dist/shared/hx-menu-divider-C2omnPtj.js +0 -558
  296. package/dist/shared/hx-menu-divider-C2omnPtj.js.map +0 -1
  297. package/dist/shared/hx-meter-BPscsw5t.js.map +0 -1
  298. package/dist/shared/hx-overflow-menu-DCLsdIBy.js +0 -374
  299. package/dist/shared/hx-overflow-menu-DCLsdIBy.js.map +0 -1
  300. package/dist/shared/hx-popover-B-FP3-wW.js.map +0 -1
  301. package/dist/shared/hx-progress-bar-Bn3JEPUf.js +0 -258
  302. package/dist/shared/hx-progress-bar-Bn3JEPUf.js.map +0 -1
  303. package/dist/shared/hx-radio-CJvNU2yP.js +0 -621
  304. package/dist/shared/hx-radio-CJvNU2yP.js.map +0 -1
  305. package/dist/shared/hx-select-C8fEHQhC.js +0 -807
  306. package/dist/shared/hx-select-C8fEHQhC.js.map +0 -1
  307. package/dist/shared/hx-spinner-DL5AYr16.js.map +0 -1
  308. package/dist/shared/hx-split-button-Djnc5Aeg.js.map +0 -1
  309. package/dist/shared/hx-stat-WOcNV1Ry.js.map +0 -1
  310. package/dist/shared/hx-switch-BrZFaRue.js +0 -420
  311. package/dist/shared/hx-switch-BrZFaRue.js.map +0 -1
  312. package/dist/shared/hx-tab-panel-DspCrKqo.js.map +0 -1
  313. package/dist/shared/hx-tag-CNSmdyaK.js.map +0 -1
  314. package/dist/shared/hx-td-DnnEMIuA.js.map +0 -1
  315. package/dist/shared/hx-time-picker-BoEIZwzv.js +0 -688
  316. package/dist/shared/hx-time-picker-BoEIZwzv.js.map +0 -1
  317. package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +0 -1
  318. package/dist/shared/hx-tooltip-nYOv9OLu.js.map +0 -1
  319. package/dist/shared/hx-tree-item-C2CiWuDE.js +0 -703
  320. package/dist/shared/hx-tree-item-C2CiWuDE.js.map +0 -1
  321. package/dist/shared/toast-factory-YSznocIV.js.map +0 -1
@@ -1,924 +0,0 @@
1
- import { css as m, html as h, nothing as n } from "lit";
2
- import { property as a, state as u, query as v, customElement as g } from "lit/decorators.js";
3
- import { F as y } from "./FormMixin-B8PXk5RQ.js";
4
- import { classMap as _ } from "lit/directives/class-map.js";
5
- import { ifDefined as p } from "lit/directives/if-defined.js";
6
- import { repeat as w } from "lit/directives/repeat.js";
7
- import { b as $ } from "./forced-colors-CTEDFRGa.js";
8
- import { H as k } from "./helix-element-BNEYeiys.js";
9
- import { c as I } from "./id-counter-DuX8vsui.js";
10
- const T = m`
11
- :host {
12
- display: block;
13
- }
14
- :host([disabled]) {
15
- opacity: var(--hx-opacity-disabled, 0.5);
16
- pointer-events: none;
17
- }
18
- * {
19
- box-sizing: border-box;
20
- }
21
- .field {
22
- display: flex;
23
- flex-direction: column;
24
- gap: var(--hx-space-1, 0.25rem);
25
- font-family: var(--hx-combobox-font-family, var(--hx-font-family-sans, sans-serif));
26
- position: relative;
27
- }
28
- .field__label {
29
- display: flex;
30
- align-items: baseline;
31
- gap: var(--hx-space-1, 0.25rem);
32
- font-size: var(--hx-font-size-sm, 0.875rem);
33
- font-weight: var(--hx-font-weight-medium, 500);
34
- color: var(--hx-combobox-label-color, var(--hx-color-text-strong, #202b39));
35
- line-height: var(--hx-line-height-normal, 1.5);
36
- }
37
- .field__required-marker {
38
- color: var(--hx-combobox-error-color, var(--hx-color-error-text, #c92a2a));
39
- font-weight: var(--hx-font-weight-bold, 700);
40
- }
41
- .field__input-wrapper {
42
- position: relative;
43
- display: flex;
44
- align-items: center;
45
- border: var(--hx-border-width-thin, 1px) solid
46
- var(--hx-combobox-border-color, var(--hx-color-border-strong, #66787b));
47
- border-radius: var(--hx-combobox-border-radius, var(--hx-border-radius-md, 0.375rem));
48
- background-color: var(--hx-combobox-bg, var(--hx-color-surface-default, #ffffff));
49
- transition:
50
- border-color var(--hx-transition-fast, 150ms ease),
51
- box-shadow var(--hx-transition-fast, 150ms ease);
52
- }
53
- .field__input-wrapper:focus-within {
54
- border-color: var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
55
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
56
- color-mix(
57
- in srgb,
58
- var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
59
- calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
60
- transparent
61
- );
62
- }
63
- .field--error .field__input-wrapper {
64
- border-color: var(--hx-combobox-error-color, var(--hx-color-error-500, #e5493e));
65
- }
66
- .field--error .field__input-wrapper:focus-within {
67
- border-color: var(--hx-combobox-error-color, var(--hx-color-error-500, #e5493e));
68
- box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
69
- color-mix(
70
- in srgb,
71
- var(--hx-combobox-error-color, var(--hx-color-error-500, #e5493e))
72
- calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
73
- transparent
74
- );
75
- }
76
- .field__prefix,
77
- .field__suffix {
78
- display: flex;
79
- align-items: center;
80
- padding: 0 var(--hx-space-2, 0.5rem);
81
- color: var(--hx-color-text-muted, #4a5362);
82
- flex-shrink: 0;
83
- }
84
- .field__input {
85
- flex: 1;
86
- min-width: 0;
87
- min-height: var(--hx-input-height-md, var(--hx-size-10, 2.5rem));
88
- border: none;
89
- background: transparent;
90
- outline: none;
91
- font-family: inherit;
92
- font-size: var(--hx-font-size-md, 1rem);
93
- line-height: var(--hx-line-height-normal, 1.5);
94
- color: var(--hx-combobox-color, var(--hx-color-text-strong, #202b39));
95
- padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
96
- }
97
- .field__input::placeholder {
98
- color: var(--hx-color-text-placeholder, #66787b);
99
- }
100
- .field__input--sm {
101
- min-height: var(--hx-input-height-sm, var(--hx-size-8, 2rem));
102
- font-size: var(--hx-font-size-sm, 0.875rem);
103
- padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);
104
- }
105
- .field__input--lg {
106
- min-height: var(--hx-input-height-lg, var(--hx-size-12, 3rem));
107
- font-size: var(--hx-font-size-lg, 1.125rem);
108
- padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
109
- }
110
- .field__clear-button,
111
- .field__loading-indicator {
112
- display: flex;
113
- align-items: center;
114
- justify-content: center;
115
- margin-inline-end: var(--hx-space-2, 0.5rem);
116
- flex-shrink: 0;
117
- color: var(--hx-color-text-placeholder, #66787b);
118
- }
119
- .field__clear-button {
120
- width: 1.25rem;
121
- height: 1.25rem;
122
- border: none;
123
- background: transparent;
124
- cursor: pointer;
125
- padding: 0;
126
- border-radius: var(--hx-border-radius-full, 9999px);
127
- transition: color var(--hx-transition-fast, 150ms ease);
128
- }
129
- .field__clear-button:hover {
130
- color: var(--hx-color-text-strong, #202b39);
131
- }
132
- .field__clear-button:focus-visible {
133
- outline: var(--hx-focus-ring-width, 2px) solid
134
- var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
135
- outline-offset: var(--hx-focus-ring-offset, 2px);
136
- }
137
- .field__loading-indicator {
138
- width: 1rem;
139
- height: 1rem;
140
- }
141
- .field__loading-spinner {
142
- width: 1rem;
143
- height: 1rem;
144
- border: 2px solid currentColor;
145
- border-top-color: transparent;
146
- border-radius: 50%;
147
- animation: hx-spin 0.7s linear infinite;
148
- }
149
- @keyframes hx-spin {
150
- to {
151
- transform: rotate(360deg);
152
- }
153
- }
154
- @media (prefers-reduced-motion: reduce) {
155
- .field__loading-spinner {
156
- animation: none;
157
- }
158
- }
159
- .field__listbox {
160
- position: absolute;
161
- top: calc(100% + var(--hx-space-1, 0.25rem));
162
- left: 0;
163
- right: 0;
164
- z-index: var(--hx-z-index-dropdown, 1000);
165
- background-color: var(--hx-combobox-listbox-bg, var(--hx-color-surface-default, #ffffff));
166
- border: var(--hx-border-width-thin, 1px) solid
167
- var(--hx-combobox-border-color, var(--hx-color-border-strong, #66787b));
168
- border-radius: var(--hx-combobox-border-radius, var(--hx-border-radius-md, 0.375rem));
169
- box-shadow: var(
170
- --hx-combobox-listbox-shadow,
171
- 0 4px 16px color-mix(in srgb, var(--hx-color-neutral-900, #0d1825) 12%, transparent)
172
- );
173
- max-height: var(--hx-combobox-listbox-max-height, 16rem);
174
- overflow: hidden;
175
- display: flex;
176
- flex-direction: column;
177
- }
178
- .field__listbox[hidden] {
179
- display: none;
180
- }
181
- .field__options {
182
- overflow-y: auto;
183
- flex: 1;
184
- padding: var(--hx-space-1, 0.25rem) 0;
185
- }
186
- .field__option {
187
- display: flex;
188
- align-items: center;
189
- gap: var(--hx-space-2, 0.5rem);
190
- padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
191
- font-size: var(--hx-font-size-md, 1rem);
192
- color: var(--hx-combobox-color, var(--hx-color-text-strong, #202b39));
193
- cursor: pointer;
194
- user-select: none;
195
- -webkit-user-select: none;
196
- transition: background-color var(--hx-transition-fast, 150ms ease);
197
- }
198
- .field__option:hover {
199
- background-color: var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #ebf8f8));
200
- }
201
- .field__option--selected {
202
- background-color: var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbf0f0));
203
- font-weight: var(--hx-font-weight-medium, 500);
204
- }
205
- .field__option--focused {
206
- background-color: var(--hx-combobox-option-hover-bg, var(--hx-color-primary-50, #ebf8f8));
207
- outline: var(--hx-focus-ring-width, 2px) solid
208
- var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
209
- outline-offset: var(--hx-combobox-option-focus-ring-offset, -2px);
210
- }
211
- .field__option--focused.field__option--selected {
212
- background-color: var(--hx-combobox-option-selected-bg, var(--hx-color-primary-100, #dbf0f0));
213
- }
214
- .field__option--disabled {
215
- opacity: var(--hx-opacity-disabled, 0.5);
216
- cursor: not-allowed;
217
- pointer-events: none;
218
- }
219
- .field__option-label {
220
- flex: 1;
221
- white-space: nowrap;
222
- overflow: hidden;
223
- text-overflow: ellipsis;
224
- }
225
- .field__no-options {
226
- padding: var(--hx-space-3, 0.75rem);
227
- text-align: center;
228
- color: var(--hx-color-text-placeholder, #66787b);
229
- font-size: var(--hx-font-size-sm, 0.875rem);
230
- }
231
- .field__sr-only {
232
- position: absolute;
233
- width: 1px;
234
- height: 1px;
235
- padding: 0;
236
- margin: -1px;
237
- overflow: hidden;
238
- clip: rect(0, 0, 0, 0);
239
- white-space: nowrap;
240
- border: 0;
241
- }
242
- .field__help-text,
243
- .field__error {
244
- font-size: var(--hx-font-size-xs, 0.75rem);
245
- line-height: var(--hx-line-height-normal, 1.5);
246
- }
247
- .field__help-text {
248
- color: var(--hx-color-text-muted, #4a5362);
249
- }
250
- .field__error {
251
- color: var(--hx-combobox-error-color, var(--hx-color-error-text, #c92a2a));
252
- }
253
- @media (prefers-reduced-motion: reduce) {
254
- .field__input-wrapper,
255
- .field__option,
256
- .field__clear-button,
257
- .field__chip-remove {
258
- transition: none;
259
- }
260
- }
261
- @media (forced-colors: active) {
262
- .field__input-wrapper {
263
- forced-color-adjust: none;
264
- background-color: Field;
265
- color: FieldText;
266
- border: 2px solid ButtonText;
267
- }
268
- .field__input {
269
- color: FieldText;
270
- }
271
- .field__input::placeholder {
272
- color: GrayText;
273
- }
274
- .field__input-wrapper:focus-within {
275
- border-color: Highlight;
276
- box-shadow: none;
277
- }
278
- .field__listbox {
279
- forced-color-adjust: none;
280
- background-color: Canvas;
281
- border: 2px solid CanvasText;
282
- box-shadow: none;
283
- }
284
- .field__option {
285
- color: CanvasText;
286
- }
287
- .field__option:hover {
288
- background-color: Highlight;
289
- color: HighlightText;
290
- }
291
- .field__option--selected {
292
- background-color: Highlight;
293
- color: HighlightText;
294
- }
295
- .field__option--focused {
296
- outline-color: Highlight;
297
- background-color: Highlight;
298
- color: HighlightText;
299
- }
300
- .field__option--disabled {
301
- color: GrayText;
302
- opacity: 1;
303
- }
304
- .field__chip {
305
- forced-color-adjust: none;
306
- background-color: Highlight;
307
- color: HighlightText;
308
- border: 1px solid HighlightText;
309
- }
310
- .field__chip-remove:focus-visible {
311
- outline-color: Highlight;
312
- }
313
- .field__clear-button:focus-visible {
314
- outline-color: Highlight;
315
- }
316
- .field--error .field__input-wrapper {
317
- border-color: LinkText;
318
- }
319
- :host([disabled]) {
320
- opacity: 1;
321
- }
322
- :host([disabled]) .field__input-wrapper {
323
- border-color: GrayText;
324
- color: GrayText;
325
- }
326
- :host([disabled]) .field__input {
327
- color: GrayText;
328
- }
329
- .field__label {
330
- color: CanvasText;
331
- }
332
- .field__help-text {
333
- color: GrayText;
334
- }
335
- .field__error {
336
- color: LinkText;
337
- }
338
- }
339
- :host([multiple]) .field__input-wrapper {
340
- flex-wrap: wrap;
341
- padding: var(--hx-space-1, 0.25rem);
342
- gap: var(--hx-space-1, 0.25rem);
343
- align-items: center;
344
- }
345
- :host([multiple]) .field__input {
346
- min-width: 8rem;
347
- padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
348
- flex-shrink: 1;
349
- }
350
- .field__chip {
351
- display: inline-flex;
352
- align-items: center;
353
- gap: var(--hx-space-1, 0.25rem);
354
- padding: 0 var(--hx-space-1, 0.25rem) 0 var(--hx-space-2, 0.5rem);
355
- height: 1.5rem;
356
- background-color: var(--hx-combobox-chip-bg, var(--hx-color-primary-100, #dbf0f0));
357
- color: var(--hx-combobox-chip-color, var(--hx-color-primary-800, #07494a));
358
- border-radius: var(--hx-border-radius-full, 9999px);
359
- font-size: var(--hx-font-size-sm, 0.875rem);
360
- white-space: nowrap;
361
- max-width: 12rem;
362
- flex-shrink: 0;
363
- }
364
- .field__chip-label {
365
- overflow: hidden;
366
- text-overflow: ellipsis;
367
- max-width: 8rem;
368
- }
369
- .field__chip-remove {
370
- display: inline-flex;
371
- align-items: center;
372
- justify-content: center;
373
- flex-shrink: 0;
374
- width: 1rem;
375
- height: 1rem;
376
- border: none;
377
- background: none;
378
- cursor: pointer;
379
- padding: 0;
380
- color: inherit;
381
- opacity: 0.7;
382
- border-radius: 50%;
383
- line-height: 1;
384
- transition: opacity var(--hx-transition-fast, 150ms ease);
385
- }
386
- .field__chip-remove:hover {
387
- opacity: 1;
388
- background-color: var(--hx-combobox-chip-remove-hover-bg, var(--hx-color-primary-200, #bce1e1));
389
- }
390
- .field__chip-remove:focus-visible {
391
- outline: var(--hx-focus-ring-width, 2px) solid
392
- var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
393
- outline-offset: var(--hx-focus-ring-offset, 2px);
394
- opacity: 1;
395
- }
396
- `;
397
- var O = Object.defineProperty, C = Object.getOwnPropertyDescriptor, l = (e, t, o, i) => {
398
- for (var s = i > 1 ? void 0 : i ? C(t, o) : t, d = e.length - 1, c; d >= 0; d--)
399
- (c = e[d]) && (s = (i ? c(t, o, s) : c(s)) || s);
400
- return i && s && O(t, o, s), s;
401
- };
402
- const S = I("hx-combobox");
403
- let r = class extends y(k) {
404
- constructor() {
405
- super(...arguments), this._id = S(), this._listboxId = `${this._id}-listbox`, this._helpTextId = `${this._id}-help`, this._errorId = `${this._id}-error`, this._labelId = `${this._id}-label`, this._liveRegionId = `${this._id}-live`, this.label = "", this.placeholder = "", this.value = "", this.required = !1, this.disabled = !1, this.name = "", this.error = "", this.helpText = "", this.size = "md", this.multiple = !1, this.clearable = !1, this.loading = !1, this.filterDebounce = 0, this.accessibleLabel = null, this.labelNoOptions = "No options found", this.labelRequired = "Please select an option.", this.labelRemoveOption = (e) => `Remove ${e}`, this._options = [], this._filterText = "", this._open = !1, this._focusedOptionIndex = -1, this._hasErrorSlot = !1, this._filterAnnouncement = "", this._debounceTimer = null, this._handleOutsideClick = (e) => {
406
- this._open && !e.composedPath().includes(this) && this._closeDropdown();
407
- };
408
- }
409
- // ─── Multiple Selection ───
410
- // P0-1: Derive selected values Set from the comma-separated value property
411
- /** @internal */
412
- get _selectedValuesSet() {
413
- return !this.multiple || !this.value ? /* @__PURE__ */ new Set() : new Set(this.value.split(",").filter(Boolean));
414
- }
415
- // ─── Filtered options ───
416
- /** @internal */
417
- get _filteredOptions() {
418
- if (!this._filterText) return this._options;
419
- const e = this._filterText.toLowerCase();
420
- return this._options.filter((t) => t.label.toLowerCase().includes(e));
421
- }
422
- // ─── Lifecycle ───
423
- disconnectedCallback() {
424
- super.disconnectedCallback(), typeof document < "u" && document.removeEventListener("click", this._handleOutsideClick), this._debounceTimer !== null && clearTimeout(this._debounceTimer), this._open && (this._open = !1);
425
- }
426
- updated(e) {
427
- var t;
428
- if (super.updated(e), e.has("value") && this._updateFormValue(), e.has("error") && this.error) {
429
- const o = (t = this.shadowRoot) == null ? void 0 : t.querySelector('[role="alert"]');
430
- if (o) {
431
- const i = this.error;
432
- requestAnimationFrame(() => {
433
- o.textContent = "", requestAnimationFrame(() => {
434
- o.textContent = i;
435
- });
436
- });
437
- }
438
- }
439
- }
440
- // ─── Form Integration ───
441
- /** @internal */
442
- _updateFormValue() {
443
- this._internals.setFormValue(this.value || null);
444
- }
445
- /** @internal */
446
- _updateValidity() {
447
- this.required && !this.value ? this._internals.setValidity(
448
- { valueMissing: !0 },
449
- this.error || this.labelRequired,
450
- this._input
451
- ) : this._internals.setValidity({});
452
- }
453
- /** @internal */
454
- _onFormReset() {
455
- this.value = "", this._filterText = "", this._internals.setFormValue(null), this._resetInteractionState();
456
- }
457
- /** @internal */
458
- // P1-6: Correct signature per WHATWG spec — includes mode param and all state types
459
- _onFormStateRestore(e, t) {
460
- typeof e == "string" && (this.value = e);
461
- }
462
- /** @internal */
463
- _onFormDisabled(e) {
464
- this.disabled = e;
465
- }
466
- // ─── Option Syncing from Slot ───
467
- /** @internal */
468
- _handleSlotChange() {
469
- this._readOptions();
470
- }
471
- /** @internal */
472
- _parseOption(e) {
473
- var t;
474
- return { value: e.value, label: ((t = e.textContent) == null ? void 0 : t.trim()) ?? e.value, disabled: e.disabled };
475
- }
476
- /** @internal */
477
- _readOptions() {
478
- var o;
479
- const e = (o = this.shadowRoot) == null ? void 0 : o.querySelector('slot[name="option"]');
480
- if (!e) return;
481
- const t = [];
482
- for (const i of e.assignedElements({ flatten: !0 }))
483
- if (i instanceof HTMLOptionElement)
484
- t.push(this._parseOption(i));
485
- else if (i instanceof HTMLOptGroupElement)
486
- for (const s of Array.from(i.children))
487
- s instanceof HTMLOptionElement && t.push(this._parseOption(s));
488
- this._options = t;
489
- }
490
- // ─── Slot Change Handlers ───
491
- /** @internal */
492
- _handleErrorSlotChange(e) {
493
- const t = e.target;
494
- this._hasErrorSlot = t.assignedNodes({ flatten: !0 }).length > 0;
495
- }
496
- // ─── Dropdown Control ───
497
- /** @internal */
498
- _openDropdown() {
499
- this.disabled || this._open || (this._open = !0, this._focusedOptionIndex = -1, typeof document < "u" && document.addEventListener("click", this._handleOutsideClick), this.dispatchEvent(new CustomEvent("hx-show", { bubbles: !0, composed: !0 })));
500
- }
501
- /** @internal */
502
- _closeDropdown() {
503
- this._open && (this._open = !1, this._focusedOptionIndex = -1, this._handleInteractionBlur(), typeof document < "u" && document.removeEventListener("click", this._handleOutsideClick), this.dispatchEvent(new CustomEvent("hx-hide", { bubbles: !0, composed: !0 })));
504
- }
505
- // ─── Input Handling ───
506
- /** @internal */
507
- _handleInput(e) {
508
- const t = e.target;
509
- this._filterText = t.value, this._open || this._openDropdown(), this._focusedOptionIndex = -1, this.filterDebounce > 0 ? (this._debounceTimer !== null && clearTimeout(this._debounceTimer), this._debounceTimer = setTimeout(() => {
510
- this._emitInput(), this._announceFilterResults();
511
- }, this.filterDebounce)) : (this._emitInput(), this._announceFilterResults());
512
- }
513
- /** @internal */
514
- _announceFilterResults() {
515
- const e = this._filteredOptions.length;
516
- this._filterAnnouncement = e === 0 ? "No matching options" : `${e} ${e === 1 ? "option" : "options"} available`;
517
- }
518
- /** @internal */
519
- _emitInput() {
520
- this.dispatchEvent(
521
- new CustomEvent("hx-input", {
522
- bubbles: !0,
523
- composed: !0,
524
- detail: { value: this._filterText }
525
- })
526
- );
527
- }
528
- /** @internal */
529
- _handleFocus() {
530
- this._openDropdown();
531
- }
532
- // ─── Keyboard Navigation ───
533
- /** @internal */
534
- _handleKeydown(e) {
535
- if (this.disabled) return;
536
- const t = this._filteredOptions, o = t.map((i, s) => ({ o: i, i: s })).filter(({ o: i }) => !i.disabled).map(({ i }) => i);
537
- switch (e.key) {
538
- case "ArrowDown": {
539
- if (e.preventDefault(), !this._open) {
540
- this._openDropdown(), this._focusedOptionIndex = o.length > 0 ? o[0] ?? 0 : -1;
541
- break;
542
- }
543
- const i = o.find((s) => s > this._focusedOptionIndex);
544
- this._focusedOptionIndex = i !== void 0 ? i : o[0] ?? this._focusedOptionIndex;
545
- break;
546
- }
547
- case "ArrowUp": {
548
- if (e.preventDefault(), !this._open) {
549
- this._openDropdown();
550
- const d = o[o.length - 1];
551
- this._focusedOptionIndex = d !== void 0 ? d : -1;
552
- break;
553
- }
554
- const i = [...o].reverse().find((d) => d < this._focusedOptionIndex), s = o[o.length - 1];
555
- this._focusedOptionIndex = i !== void 0 ? i : s ?? this._focusedOptionIndex;
556
- break;
557
- }
558
- case "Enter": {
559
- if (e.preventDefault(), !this._open) {
560
- this._openDropdown();
561
- break;
562
- }
563
- if (this._focusedOptionIndex >= 0 && this._focusedOptionIndex < t.length) {
564
- const i = t[this._focusedOptionIndex];
565
- i && this._selectOption(i);
566
- }
567
- break;
568
- }
569
- case "Escape": {
570
- e.preventDefault(), this._closeDropdown(), this._filterText = "", this._input && (this._input.value = "");
571
- break;
572
- }
573
- case "Tab": {
574
- this._closeDropdown();
575
- break;
576
- }
577
- // P1-1: Home/End keyboard navigation for option list
578
- case "Home": {
579
- e.preventDefault(), this._open || this._openDropdown(), this._focusedOptionIndex = o.length > 0 ? o[0] ?? -1 : -1;
580
- break;
581
- }
582
- case "End": {
583
- e.preventDefault(), this._open || this._openDropdown(), this._focusedOptionIndex = o.length > 0 ? o[o.length - 1] ?? -1 : -1;
584
- break;
585
- }
586
- }
587
- }
588
- // ─── Selection ───
589
- // P0-1: Handle both single and multiple selection modes
590
- /** @internal */
591
- _selectOption(e) {
592
- if (!e.disabled) {
593
- if (this.multiple) {
594
- const t = this._selectedValuesSet, o = new Set(t);
595
- o.has(e.value) ? o.delete(e.value) : o.add(e.value), this.value = [...o].join(",");
596
- } else
597
- this.value = e.value, this._closeDropdown();
598
- this._handleInteractionInput(), this._filterText = "", this._input && (this._input.value = ""), this._dispatchChange();
599
- }
600
- }
601
- // P0-1: Remove a single value from multi-selection
602
- /** @internal */
603
- _removeValue(e) {
604
- const t = this._selectedValuesSet;
605
- t.delete(e), this.value = [...t].join(","), this._dispatchChange();
606
- }
607
- // ─── Clear ───
608
- /** @internal */
609
- _handleClear(e) {
610
- e.stopPropagation(), this.value = "", this._filterText = "", this._input && (this._input.value = "", this._input.focus()), this._internals.setFormValue(null), this._updateValidity(), this.dispatchEvent(new CustomEvent("hx-clear", { bubbles: !0, composed: !0 }));
611
- }
612
- // ─── Event Dispatchers ───
613
- /** @internal */
614
- _dispatchChange() {
615
- this.dispatchEvent(
616
- new CustomEvent("hx-change", {
617
- bubbles: !0,
618
- composed: !0,
619
- detail: { value: this.value }
620
- })
621
- );
622
- }
623
- // ─── Public Methods ───
624
- /** Moves focus to the text input. */
625
- focus(e) {
626
- var t;
627
- (t = this._input) == null || t.focus(e);
628
- }
629
- // ─── Render Helpers ───
630
- /** @internal */
631
- _optionId(e) {
632
- return `${this._id}-option-${e}`;
633
- }
634
- /** @internal */
635
- get _displayValue() {
636
- if (this.multiple || !this.value) return "";
637
- const e = this._options.find((t) => t.value === this.value);
638
- return e ? e.label : this.value;
639
- }
640
- /** @internal */
641
- _renderOptions() {
642
- const e = this._filteredOptions;
643
- return e.length === 0 ? h`
644
- <slot name="empty-label">
645
- <div class="field__no-options">${this.labelNoOptions}</div>
646
- </slot>
647
- ` : w(
648
- e,
649
- (t) => t.value,
650
- (t, o) => {
651
- const i = this.multiple ? this._selectedValuesSet.has(t.value) : t.value === this.value, s = o === this._focusedOptionIndex;
652
- return h`
653
- <div
654
- id=${this._optionId(o)}
655
- part="option"
656
- role="option"
657
- class=${_({
658
- field__option: !0,
659
- "field__option--selected": i,
660
- "field__option--focused": s,
661
- "field__option--disabled": t.disabled
662
- })}
663
- aria-selected=${this.multiple ? i ? "true" : "false" : i ? "true" : n}
664
- aria-disabled=${t.disabled ? "true" : n}
665
- @click=${() => this._selectOption(t)}
666
- >
667
- <span class="field__option-label">${t.label}</span>
668
- </div>
669
- `;
670
- }
671
- );
672
- }
673
- // ─── Main Render ───
674
- render() {
675
- const e = !!this.error || this._hasErrorSlot, t = this.clearable && !!this.value && !this.disabled, o = {
676
- field: !0,
677
- "field--error": e,
678
- "field--disabled": this.disabled,
679
- "field--required": this.required,
680
- "field--open": this._open
681
- }, i = {
682
- field__input: !0,
683
- [`field__input--${this.size}`]: !0
684
- }, s = [
685
- e || this._hasErrorSlot ? this._errorId : null,
686
- this.helpText ? this._helpTextId : null
687
- ].filter(Boolean).join(" ") || void 0, d = this._open && this._focusedOptionIndex >= 0 ? this._optionId(this._focusedOptionIndex) : void 0;
688
- return h`
689
- <div part="field" class=${_(o)}>
690
- <!-- Label -->
691
- <slot name="label">
692
- ${this.label ? h`<label id=${this._labelId} for=${this._id} part="label" class="field__label">
693
- ${this.label}
694
- ${this.required ? h`<span class="field__required-marker" aria-hidden="true">*</span>` : n}
695
- </label>` : n}
696
- </slot>
697
-
698
- <!-- Input Wrapper -->
699
- <div part="trigger" class="field__input-wrapper">
700
- <!-- Prefix Slot -->
701
- <slot name="prefix" class="field__prefix"></slot>
702
-
703
- <!-- P0-1: Selected value chips for multiple mode -->
704
- ${this.multiple && this._selectedValuesSet.size > 0 ? [...this._selectedValuesSet].map((c) => {
705
- const b = this._options.find((f) => f.value === c), x = b ? b.label : c;
706
- return h`
707
- <span class="field__chip">
708
- <span class="field__chip-label">${x}</span>
709
- <button
710
- type="button"
711
- class="field__chip-remove"
712
- aria-label=${this.labelRemoveOption(x)}
713
- @click=${(f) => {
714
- f.stopPropagation(), this._removeValue(c);
715
- }}
716
- >
717
- <svg
718
- width="8"
719
- height="8"
720
- viewBox="0 0 8 8"
721
- fill="none"
722
- aria-hidden="true"
723
- focusable="false"
724
- >
725
- <path
726
- d="M1 1L7 7M7 1L1 7"
727
- stroke="currentColor"
728
- stroke-width="1.5"
729
- stroke-linecap="round"
730
- />
731
- </svg>
732
- </button>
733
- </span>
734
- `;
735
- }) : n}
736
-
737
- <!-- Text Input (combobox role) -->
738
- <input
739
- part="input"
740
- type="text"
741
- id=${this._id}
742
- class=${_(i)}
743
- role="combobox"
744
- aria-expanded=${this._open ? "true" : "false"}
745
- aria-autocomplete="list"
746
- aria-controls=${this._listboxId}
747
- aria-activedescendant=${p(d)}
748
- aria-invalid=${e ? "true" : n}
749
- aria-describedby=${p(s)}
750
- aria-required=${this.required ? "true" : n}
751
- aria-label=${p(this.accessibleLabel || void 0)}
752
- aria-labelledby=${p(
753
- this.label && !this.accessibleLabel ? this._labelId : void 0
754
- )}
755
- aria-busy=${this.loading ? "true" : n}
756
- .value=${this._filterText || (this._open ? "" : this._displayValue)}
757
- placeholder=${p(this.placeholder || void 0)}
758
- ?disabled=${this.disabled}
759
- ?required=${this.required}
760
- name=${p(this.name || void 0)}
761
- autocomplete="off"
762
- @input=${this._handleInput}
763
- @focus=${this._handleFocus}
764
- @keydown=${this._handleKeydown}
765
- />
766
-
767
- <!-- Loading Indicator -->
768
- ${this.loading ? h`
769
- <div part="loading-indicator" class="field__loading-indicator" aria-hidden="true">
770
- <div class="field__loading-spinner"></div>
771
- </div>
772
- ` : n}
773
-
774
- <!-- Clear Button -->
775
- ${t ? h`
776
- <button
777
- part="clear-button"
778
- type="button"
779
- class="field__clear-button"
780
- aria-label=${`Clear ${this.label || this.accessibleLabel || "selection"}`}
781
- tabindex="0"
782
- @click=${this._handleClear}
783
- >
784
- <svg
785
- width="12"
786
- height="12"
787
- viewBox="0 0 12 12"
788
- fill="none"
789
- aria-hidden="true"
790
- focusable="false"
791
- >
792
- <path
793
- d="M1 1L11 11M11 1L1 11"
794
- stroke="currentColor"
795
- stroke-width="1.5"
796
- stroke-linecap="round"
797
- />
798
- </svg>
799
- </button>
800
- ` : n}
801
-
802
- <!-- Suffix Slot -->
803
- <slot name="suffix" class="field__suffix"></slot>
804
- </div>
805
-
806
- <!-- Listbox -->
807
- <div
808
- part="listbox"
809
- role="listbox"
810
- id=${this._listboxId}
811
- class="field__listbox"
812
- aria-label=${p(this.label || this.accessibleLabel || void 0)}
813
- aria-multiselectable=${this.multiple ? "true" : n}
814
- ?hidden=${!this._open}
815
- >
816
- <div class="field__options">${this._renderOptions()}</div>
817
- </div>
818
-
819
- <!-- Hidden slot (options read from here) -->
820
- <slot name="option" @slotchange=${this._handleSlotChange} style="display:none;"></slot>
821
-
822
- <!-- Error -->
823
- <slot name="error" @slotchange=${this._handleErrorSlotChange}>
824
- ${e ? h`<div part="error" class="field__error" id=${this._errorId} role="alert">
825
- ${this.error}
826
- </div>` : n}
827
- </slot>
828
-
829
- <!-- Help Text -->
830
- ${this.helpText && !e ? h`
831
- <div part="help-text" class="field__help-text" id=${this._helpTextId}>
832
- <slot name="help-text">${this.helpText}</slot>
833
- </div>
834
- ` : n}
835
-
836
- <!-- Filter results live region -->
837
- <div id=${this._liveRegionId} aria-live="polite" aria-atomic="true" class="field__sr-only">
838
- ${this._filterAnnouncement}
839
- </div>
840
- </div>
841
- `;
842
- }
843
- };
844
- r.styles = [T, $];
845
- r.formAssociated = !0;
846
- l([
847
- a({ type: String })
848
- ], r.prototype, "label", 2);
849
- l([
850
- a({ type: String })
851
- ], r.prototype, "placeholder", 2);
852
- l([
853
- a({ type: String, reflect: !0 })
854
- ], r.prototype, "value", 2);
855
- l([
856
- a({ type: Boolean, reflect: !0 })
857
- ], r.prototype, "required", 2);
858
- l([
859
- a({ type: Boolean, reflect: !0 })
860
- ], r.prototype, "disabled", 2);
861
- l([
862
- a({ type: String, reflect: !0 })
863
- ], r.prototype, "name", 2);
864
- l([
865
- a({ type: String })
866
- ], r.prototype, "error", 2);
867
- l([
868
- a({ type: String, attribute: "help-text" })
869
- ], r.prototype, "helpText", 2);
870
- l([
871
- a({ type: String, attribute: "hx-size", reflect: !0 })
872
- ], r.prototype, "size", 2);
873
- l([
874
- a({ type: Boolean, reflect: !0 })
875
- ], r.prototype, "multiple", 2);
876
- l([
877
- a({ type: Boolean, reflect: !0 })
878
- ], r.prototype, "clearable", 2);
879
- l([
880
- a({ type: Boolean, reflect: !0 })
881
- ], r.prototype, "loading", 2);
882
- l([
883
- a({ type: Number, attribute: "filter-debounce" })
884
- ], r.prototype, "filterDebounce", 2);
885
- l([
886
- a({ type: String, attribute: "accessible-label" })
887
- ], r.prototype, "accessibleLabel", 2);
888
- l([
889
- a({ type: String, attribute: "label-no-options" })
890
- ], r.prototype, "labelNoOptions", 2);
891
- l([
892
- a({ type: String, attribute: "label-required" })
893
- ], r.prototype, "labelRequired", 2);
894
- l([
895
- a({ attribute: !1 })
896
- ], r.prototype, "labelRemoveOption", 2);
897
- l([
898
- u()
899
- ], r.prototype, "_options", 2);
900
- l([
901
- u()
902
- ], r.prototype, "_filterText", 2);
903
- l([
904
- u()
905
- ], r.prototype, "_open", 2);
906
- l([
907
- u()
908
- ], r.prototype, "_focusedOptionIndex", 2);
909
- l([
910
- u()
911
- ], r.prototype, "_hasErrorSlot", 2);
912
- l([
913
- u()
914
- ], r.prototype, "_filterAnnouncement", 2);
915
- l([
916
- v(".field__input")
917
- ], r.prototype, "_input", 2);
918
- r = l([
919
- g("hx-combobox")
920
- ], r);
921
- export {
922
- r as H
923
- };
924
- //# sourceMappingURL=hx-combobox-DDzqNKEW.js.map