@helixui/library 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/custom-elements.json +1901 -8476
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts +27 -0
  3. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion.d.ts +3 -0
  5. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/index.js +1 -1
  7. package/dist/components/hx-action-bar/hx-action-bar.d.ts +13 -3
  8. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  9. package/dist/components/hx-action-bar/index.js +1 -1
  10. package/dist/components/hx-alert/hx-alert.d.ts +30 -0
  11. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  12. package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
  13. package/dist/components/hx-alert/index.js +1 -1
  14. package/dist/components/hx-avatar/hx-avatar.d.ts +8 -1
  15. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  16. package/dist/components/hx-avatar/index.js +1 -1
  17. package/dist/components/hx-badge/hx-badge.d.ts +10 -1
  18. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  19. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  20. package/dist/components/hx-badge/index.js +1 -1
  21. package/dist/components/hx-banner/hx-banner.d.ts +17 -0
  22. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  23. package/dist/components/hx-banner/index.js +1 -1
  24. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
  25. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +17 -2
  26. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  27. package/dist/components/hx-breadcrumb/index.js +1 -1
  28. package/dist/components/hx-button/hx-button.d.ts +6 -0
  29. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  30. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  31. package/dist/components/hx-button/index.js +1 -1
  32. package/dist/components/hx-card/hx-card.d.ts +8 -0
  33. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  34. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  35. package/dist/components/hx-card/index.js +1 -1
  36. package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -0
  37. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  38. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts +2 -0
  39. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -0
  40. package/dist/components/hx-carousel/hx-carousel.d.ts +27 -0
  41. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  42. package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
  43. package/dist/components/hx-carousel/index.js +1 -1
  44. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -2
  45. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  46. package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
  47. package/dist/components/hx-checkbox/index.js +1 -1
  48. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +20 -4
  49. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  50. package/dist/components/hx-checkbox-group/index.js +1 -1
  51. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +10 -0
  52. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  53. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  54. package/dist/components/hx-code-snippet/index.js +1 -1
  55. package/dist/components/hx-color-picker/hx-color-picker.d.ts +114 -12
  56. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  57. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  58. package/dist/components/hx-color-picker/index.js +1 -1
  59. package/dist/components/hx-combobox/hx-combobox.d.ts +37 -2
  60. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  61. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  62. package/dist/components/hx-combobox/index.js +1 -1
  63. package/dist/components/hx-copy-button/hx-copy-button.d.ts +11 -0
  64. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  65. package/dist/components/hx-copy-button/index.js +1 -1
  66. package/dist/components/hx-counter/hx-counter.d.ts +12 -3
  67. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  68. package/dist/components/hx-counter/index.js +1 -1
  69. package/dist/components/hx-data-table/hx-data-table.d.ts +27 -2
  70. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  71. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  72. package/dist/components/hx-data-table/index.js +1 -1
  73. package/dist/components/hx-date-picker/hx-date-picker.d.ts +42 -3
  74. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  75. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  76. package/dist/components/hx-date-picker/index.js +1 -1
  77. package/dist/components/hx-dialog/hx-dialog.d.ts +31 -4
  78. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  79. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  80. package/dist/components/hx-dialog/index.js +1 -1
  81. package/dist/components/hx-divider/hx-divider.d.ts +4 -1
  82. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  83. package/dist/components/hx-divider/index.js +1 -1
  84. package/dist/components/hx-drawer/hx-drawer.d.ts +25 -3
  85. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  86. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  87. package/dist/components/hx-drawer/index.js +1 -1
  88. package/dist/components/hx-dropdown/hx-dropdown.d.ts +35 -7
  89. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  90. package/dist/components/hx-dropdown/index.js +1 -1
  91. package/dist/components/hx-field/hx-field.d.ts +10 -2
  92. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  93. package/dist/components/hx-field/index.js +1 -1
  94. package/dist/components/hx-file-upload/hx-file-upload.d.ts +39 -2
  95. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  96. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  97. package/dist/components/hx-file-upload/index.js +1 -1
  98. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  99. package/dist/components/hx-form/index.js +1 -1
  100. package/dist/components/hx-format-date/hx-format-date.d.ts +8 -0
  101. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  102. package/dist/components/hx-format-date/index.js +1 -1
  103. package/dist/components/hx-grid/hx-grid.d.ts +9 -3
  104. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  105. package/dist/components/hx-grid/index.js +1 -1
  106. package/dist/components/hx-help-text/index.js +1 -1
  107. package/dist/components/hx-icon/hx-icon.d.ts +10 -2
  108. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  109. package/dist/components/hx-icon/index.js +1 -1
  110. package/dist/components/hx-icon-button/hx-icon-button.d.ts +11 -0
  111. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  112. package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
  113. package/dist/components/hx-icon-button/index.js +1 -1
  114. package/dist/components/hx-image/hx-image.d.ts +8 -0
  115. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  116. package/dist/components/hx-image/index.js +1 -1
  117. package/dist/components/hx-link/hx-link.d.ts +3 -0
  118. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  119. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  120. package/dist/components/hx-link/index.js +1 -1
  121. package/dist/components/hx-list/hx-list-item.d.ts +8 -2
  122. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  123. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  124. package/dist/components/hx-list/hx-list.d.ts +6 -2
  125. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  126. package/dist/components/hx-list/index.js +1 -1
  127. package/dist/components/hx-menu/hx-menu-item.d.ts +12 -0
  128. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  129. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  130. package/dist/components/hx-menu/hx-menu.d.ts +11 -1
  131. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  132. package/dist/components/hx-menu/index.js +1 -1
  133. package/dist/components/hx-meter/hx-meter.d.ts +9 -0
  134. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  135. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  136. package/dist/components/hx-meter/index.js +1 -1
  137. package/dist/components/hx-nav/hx-nav.d.ts +15 -0
  138. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  139. package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
  140. package/dist/components/hx-nav/index.js +1 -1
  141. package/dist/components/hx-number-input/hx-number-input.d.ts +36 -1
  142. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  143. package/dist/components/hx-number-input/index.js +1 -1
  144. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +15 -0
  145. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  146. package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
  147. package/dist/components/hx-overflow-menu/index.js +1 -1
  148. package/dist/components/hx-pagination/hx-pagination.d.ts +24 -0
  149. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  150. package/dist/components/hx-pagination/hx-pagination.styles.d.ts.map +1 -1
  151. package/dist/components/hx-pagination/index.js +1 -1
  152. package/dist/components/hx-popover/hx-popover.d.ts +94 -11
  153. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  154. package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
  155. package/dist/components/hx-popover/index.js +1 -1
  156. package/dist/components/hx-popup/hx-popup.d.ts +8 -0
  157. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  158. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  159. package/dist/components/hx-popup/index.js +1 -1
  160. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +10 -2
  161. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  162. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  163. package/dist/components/hx-progress-bar/index.js +1 -1
  164. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +8 -2
  165. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  166. package/dist/components/hx-progress-ring/index.js +1 -1
  167. package/dist/components/hx-prose/hx-prose.d.ts +5 -3
  168. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  169. package/dist/components/hx-prose/index.js +1 -1
  170. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  171. package/dist/components/hx-radio-group/hx-radio.d.ts +4 -2
  172. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  173. package/dist/components/hx-radio-group/index.js +1 -1
  174. package/dist/components/hx-rating/hx-rating.d.ts +54 -2
  175. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  176. package/dist/components/hx-rating/index.js +1 -1
  177. package/dist/components/hx-select/hx-select.d.ts +22 -2
  178. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  179. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  180. package/dist/components/hx-select/index.js +1 -1
  181. package/dist/components/hx-side-nav/hx-nav-item.d.ts +6 -0
  182. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  183. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  184. package/dist/components/hx-side-nav/hx-side-nav.d.ts +6 -1
  185. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  186. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  187. package/dist/components/hx-side-nav/index.js +1 -1
  188. package/dist/components/hx-slider/hx-slider.d.ts +22 -1
  189. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  190. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  191. package/dist/components/hx-slider/index.js +1 -1
  192. package/dist/components/hx-spinner/hx-spinner.d.ts +3 -1
  193. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  194. package/dist/components/hx-spinner/index.js +1 -1
  195. package/dist/components/hx-split-button/hx-split-button.d.ts +12 -0
  196. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  197. package/dist/components/hx-split-button/index.js +1 -1
  198. package/dist/components/hx-split-panel/hx-split-panel.d.ts +72 -13
  199. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  200. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  201. package/dist/components/hx-split-panel/index.js +1 -1
  202. package/dist/components/hx-stack/index.js +1 -1
  203. package/dist/components/hx-stat/hx-stat.d.ts +5 -1
  204. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  205. package/dist/components/hx-stat/index.js +1 -1
  206. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +13 -12
  207. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  208. package/dist/components/hx-status-indicator/index.js +1 -1
  209. package/dist/components/hx-steps/hx-step.d.ts +7 -9
  210. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  211. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  212. package/dist/components/hx-steps/hx-steps.d.ts +3 -3
  213. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  214. package/dist/components/hx-steps/index.js +1 -1
  215. package/dist/components/hx-switch/hx-switch.d.ts +21 -1
  216. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  217. package/dist/components/hx-switch/index.js +1 -1
  218. package/dist/components/hx-table/hx-table.d.ts +7 -2
  219. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  220. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  221. package/dist/components/hx-table/hx-th.d.ts +4 -0
  222. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  223. package/dist/components/hx-table/index.js +1 -1
  224. package/dist/components/hx-tabs/hx-tab.d.ts +3 -0
  225. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  226. package/dist/components/hx-tabs/hx-tabs.d.ts +6 -0
  227. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  228. package/dist/components/hx-tabs/index.js +1 -1
  229. package/dist/components/hx-tag/hx-tag.d.ts +4 -0
  230. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  231. package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
  232. package/dist/components/hx-tag/index.js +1 -1
  233. package/dist/components/hx-text/hx-text.d.ts +1 -0
  234. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  235. package/dist/components/hx-text/index.js +1 -1
  236. package/dist/components/hx-text-input/hx-text-input.d.ts +9 -4
  237. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  238. package/dist/components/hx-text-input/index.js +1 -1
  239. package/dist/components/hx-textarea/hx-textarea.d.ts +9 -3
  240. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  241. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  242. package/dist/components/hx-textarea/index.js +1 -1
  243. package/dist/components/hx-theme/hx-theme.d.ts +2 -2
  244. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  245. package/dist/components/hx-time-picker/hx-time-picker.d.ts +102 -22
  246. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  247. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  248. package/dist/components/hx-time-picker/index.js +1 -1
  249. package/dist/components/hx-toast/hx-toast.d.ts +18 -0
  250. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  251. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  252. package/dist/components/hx-toast/index.js +1 -1
  253. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +23 -0
  254. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  255. package/dist/components/hx-toggle-button/index.js +1 -1
  256. package/dist/components/hx-tooltip/hx-tooltip.d.ts +57 -0
  257. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  258. package/dist/components/hx-tooltip/index.js +1 -1
  259. package/dist/components/hx-top-nav/hx-top-nav.d.ts +4 -0
  260. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  261. package/dist/components/hx-top-nav/index.js +1 -1
  262. package/dist/components/hx-tree-view/hx-tree-item.d.ts +13 -1
  263. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  264. package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
  265. package/dist/components/hx-tree-view/hx-tree-view.d.ts +12 -0
  266. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  267. package/dist/components/hx-tree-view/index.js +1 -1
  268. package/dist/index.js +70 -70
  269. package/dist/shared/{hx-accordion-Cyswa6J3.js → hx-accordion-D1kFhdeQ.js} +68 -39
  270. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +1 -0
  271. package/dist/shared/{hx-action-bar-we_WJety.js → hx-action-bar-D4bulGQP.js} +38 -31
  272. package/dist/shared/hx-action-bar-D4bulGQP.js.map +1 -0
  273. package/dist/shared/{hx-alert-Cg-zxRiU.js → hx-alert-K5F8KeqI.js} +123 -40
  274. package/dist/shared/hx-alert-K5F8KeqI.js.map +1 -0
  275. package/dist/shared/{hx-avatar-Cep6Urm3.js → hx-avatar-Cun-O99h.js} +5 -1
  276. package/dist/shared/hx-avatar-Cun-O99h.js.map +1 -0
  277. package/dist/shared/{hx-badge-CjT0d8NK.js → hx-badge-CsFd2xtw.js} +83 -47
  278. package/dist/shared/hx-badge-CsFd2xtw.js.map +1 -0
  279. package/dist/shared/{hx-banner-lxAIJ2kR.js → hx-banner-BTV-X2xF.js} +58 -42
  280. package/dist/shared/hx-banner-BTV-X2xF.js.map +1 -0
  281. package/dist/shared/{hx-breadcrumb-item-C0rz0fzV.js → hx-breadcrumb-item-4IwaLgaO.js} +39 -23
  282. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +1 -0
  283. package/dist/shared/{hx-button-Cbhqpm5i.js → hx-button-7k-KeCYU.js} +29 -15
  284. package/dist/shared/hx-button-7k-KeCYU.js.map +1 -0
  285. package/dist/shared/{hx-card-Bg4W4uXC.js → hx-card-0hT3G5hi.js} +24 -13
  286. package/dist/shared/hx-card-0hT3G5hi.js.map +1 -0
  287. package/dist/shared/{hx-carousel-item-BKpmFbUT.js → hx-carousel-item-DgeYyYZJ.js} +138 -107
  288. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +1 -0
  289. package/dist/shared/{hx-checkbox-BMayOpAM.js → hx-checkbox-BvjO-O41.js} +15 -6
  290. package/dist/shared/hx-checkbox-BvjO-O41.js.map +1 -0
  291. package/dist/shared/{hx-checkbox-group-ydUdV9Sx.js → hx-checkbox-group-Z5VvWzcj.js} +50 -37
  292. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +1 -0
  293. package/dist/shared/{hx-code-snippet-B4hV7rWG.js → hx-code-snippet-DqzPkH4K.js} +27 -11
  294. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +1 -0
  295. package/dist/shared/hx-color-picker-Da8z6AlQ.js +596 -0
  296. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +1 -0
  297. package/dist/shared/{hx-combobox-BBi3izKJ.js → hx-combobox-CivfelTS.js} +67 -430
  298. package/dist/shared/hx-combobox-CivfelTS.js.map +1 -0
  299. package/dist/shared/{hx-copy-button-CLBA31to.js → hx-copy-button--0dymSvw.js} +9 -1
  300. package/dist/shared/{hx-copy-button-CLBA31to.js.map → hx-copy-button--0dymSvw.js.map} +1 -1
  301. package/dist/shared/{hx-counter-D-1NXzGs.js → hx-counter-Duf00H7p.js} +58 -49
  302. package/dist/shared/hx-counter-Duf00H7p.js.map +1 -0
  303. package/dist/shared/{hx-data-table-DNiDVWR2.js → hx-data-table-DujB9hSE.js} +173 -129
  304. package/dist/shared/hx-data-table-DujB9hSE.js.map +1 -0
  305. package/dist/shared/{hx-date-picker-D7yCK0nk.js → hx-date-picker-C8d2HtRV.js} +142 -505
  306. package/dist/shared/hx-date-picker-C8d2HtRV.js.map +1 -0
  307. package/dist/shared/{hx-dialog-Z7Ou_AZ9.js → hx-dialog-DkUSnVgw.js} +76 -49
  308. package/dist/shared/hx-dialog-DkUSnVgw.js.map +1 -0
  309. package/dist/shared/{hx-divider-XgWIz4Mr.js → hx-divider-DNNs4e8q.js} +2 -1
  310. package/dist/shared/{hx-divider-XgWIz4Mr.js.map → hx-divider-DNNs4e8q.js.map} +1 -1
  311. package/dist/shared/{hx-drawer-Dk-_xzy0.js → hx-drawer-CJcRZcns.js} +102 -66
  312. package/dist/shared/hx-drawer-CJcRZcns.js.map +1 -0
  313. package/dist/shared/{hx-dropdown-DnjLnkTj.js → hx-dropdown-Bo0KTM1A.js} +56 -47
  314. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +1 -0
  315. package/dist/shared/{hx-field-CDP8EXuj.js → hx-field-3MmzJ4kZ.js} +21 -13
  316. package/dist/shared/hx-field-3MmzJ4kZ.js.map +1 -0
  317. package/dist/shared/{hx-file-upload-CUORgnKc.js → hx-file-upload-ByjAgfNy.js} +131 -86
  318. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +1 -0
  319. package/dist/shared/hx-form-BpS6v3Iu.js +258 -0
  320. package/dist/shared/hx-form-BpS6v3Iu.js.map +1 -0
  321. package/dist/shared/{hx-format-date-BsVr8gpD.js → hx-format-date-BdnWV2kX.js} +7 -1
  322. package/dist/shared/hx-format-date-BdnWV2kX.js.map +1 -0
  323. package/dist/shared/{hx-grid-BsDBCTbt.js → hx-grid-gEjuF0cR.js} +25 -18
  324. package/dist/shared/hx-grid-gEjuF0cR.js.map +1 -0
  325. package/dist/shared/{hx-help-text-DaOPN1iB.js → hx-help-text-BAcEGRUE.js} +2 -2
  326. package/dist/shared/{hx-help-text-DaOPN1iB.js.map → hx-help-text-BAcEGRUE.js.map} +1 -1
  327. package/dist/shared/{hx-icon--xsJztDh.js → hx-icon-CP6OnLoM.js} +6 -1
  328. package/dist/shared/hx-icon-CP6OnLoM.js.map +1 -0
  329. package/dist/shared/{hx-icon-button-C83bCR0K.js → hx-icon-button-DzH_bRtC.js} +53 -29
  330. package/dist/shared/hx-icon-button-DzH_bRtC.js.map +1 -0
  331. package/dist/shared/{hx-image-xyb_tHCR.js → hx-image-C6pGiI6c.js} +6 -1
  332. package/dist/shared/hx-image-C6pGiI6c.js.map +1 -0
  333. package/dist/shared/{hx-link-DfNy_UU8.js → hx-link-Tmk_YPvW.js} +46 -37
  334. package/dist/shared/hx-link-Tmk_YPvW.js.map +1 -0
  335. package/dist/shared/{hx-list-CdRNgeoP.js → hx-list-DwInEX2H.js} +63 -37
  336. package/dist/shared/hx-list-DwInEX2H.js.map +1 -0
  337. package/dist/shared/{hx-menu-divider-11Dp2VfM.js → hx-menu-divider-DR4G_rqw.js} +93 -56
  338. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +1 -0
  339. package/dist/shared/hx-meter-uXkTZq-W.js +238 -0
  340. package/dist/shared/hx-meter-uXkTZq-W.js.map +1 -0
  341. package/dist/shared/{hx-nav-DSpwWYUX.js → hx-nav-3JsN2Oak.js} +94 -75
  342. package/dist/shared/hx-nav-3JsN2Oak.js.map +1 -0
  343. package/dist/shared/{hx-nav-item-D54-5eUM.js → hx-nav-item-D3EJatzc.js} +40 -16
  344. package/dist/shared/hx-nav-item-D3EJatzc.js.map +1 -0
  345. package/dist/shared/{hx-number-input-BP6TIA92.js → hx-number-input-CAAibZ8X.js} +35 -7
  346. package/dist/shared/hx-number-input-CAAibZ8X.js.map +1 -0
  347. package/dist/shared/{hx-overflow-menu-C7k5wlZy.js → hx-overflow-menu-2kgOJ_ht.js} +86 -66
  348. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +1 -0
  349. package/dist/shared/{hx-pagination-BQ0cLTuB.js → hx-pagination-DBs-vmSv.js} +127 -103
  350. package/dist/shared/hx-pagination-DBs-vmSv.js.map +1 -0
  351. package/dist/shared/hx-popover-DxE67miP.js +274 -0
  352. package/dist/shared/hx-popover-DxE67miP.js.map +1 -0
  353. package/dist/shared/{hx-popup-CYf9Q5sj.js → hx-popup-Dg6n_PbY.js} +13 -1
  354. package/dist/shared/hx-popup-Dg6n_PbY.js.map +1 -0
  355. package/dist/shared/{hx-progress-bar-C_mdPVF-.js → hx-progress-bar-Dm_EHyng.js} +101 -73
  356. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +1 -0
  357. package/dist/shared/{hx-progress-ring-BHJBaXNk.js → hx-progress-ring-DpxBDD5d.js} +35 -28
  358. package/dist/shared/hx-progress-ring-DpxBDD5d.js.map +1 -0
  359. package/dist/shared/hx-prose-Ml_L2zje.js +59 -0
  360. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -0
  361. package/dist/shared/{hx-radio-Bqyi8re3.js → hx-radio-BywgVSEu.js} +16 -15
  362. package/dist/shared/hx-radio-BywgVSEu.js.map +1 -0
  363. package/dist/shared/{hx-rating-Y_t7Z4qb.js → hx-rating-CUWBQ0fZ.js} +131 -64
  364. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +1 -0
  365. package/dist/shared/{hx-select-BBae2LqN.js → hx-select-BwDwxk-M.js} +110 -171
  366. package/dist/shared/hx-select-BwDwxk-M.js.map +1 -0
  367. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  368. package/dist/shared/{hx-slider-CpnxH2UP.js → hx-slider-D_0EKJyk.js} +25 -8
  369. package/dist/shared/hx-slider-D_0EKJyk.js.map +1 -0
  370. package/dist/shared/{hx-spinner-BOApJ-g9.js → hx-spinner-DMn4SChS.js} +35 -28
  371. package/dist/shared/hx-spinner-DMn4SChS.js.map +1 -0
  372. package/dist/shared/{hx-split-button-BvwoG8h2.js → hx-split-button-CypgLXw1.js} +23 -12
  373. package/dist/shared/{hx-split-button-BvwoG8h2.js.map → hx-split-button-CypgLXw1.js.map} +1 -1
  374. package/dist/shared/{hx-split-panel-Cxkeauwe.js → hx-split-panel-BPMWKPGu.js} +74 -42
  375. package/dist/shared/hx-split-panel-BPMWKPGu.js.map +1 -0
  376. package/dist/shared/{hx-stack-CfoW7jU7.js → hx-stack-BStY1RmV.js} +29 -29
  377. package/dist/shared/hx-stack-BStY1RmV.js.map +1 -0
  378. package/dist/shared/{hx-stat-C2wfph8W.js → hx-stat-CHntLHJM.js} +18 -10
  379. package/dist/shared/hx-stat-CHntLHJM.js.map +1 -0
  380. package/dist/shared/{hx-status-indicator-oYWOkWlD.js → hx-status-indicator-C1BwEvUw.js} +15 -12
  381. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +1 -0
  382. package/dist/shared/{hx-step-DYoIumpR.js → hx-step-BIVWSPxd.js} +45 -33
  383. package/dist/shared/hx-step-BIVWSPxd.js.map +1 -0
  384. package/dist/shared/{hx-switch-DkKchcuP.js → hx-switch-BgX8kuWt.js} +12 -3
  385. package/dist/shared/hx-switch-BgX8kuWt.js.map +1 -0
  386. package/dist/shared/{hx-tab-panel-CHB0u1zF.js → hx-tab-panel-DhOq67jj.js} +65 -53
  387. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +1 -0
  388. package/dist/shared/{hx-tag-SJJtMlOS.js → hx-tag-CzOTDcXI.js} +81 -55
  389. package/dist/shared/hx-tag-CzOTDcXI.js.map +1 -0
  390. package/dist/shared/{hx-td-CVwCGBYf.js → hx-td-h6oeW6YC.js} +43 -41
  391. package/dist/shared/hx-td-h6oeW6YC.js.map +1 -0
  392. package/dist/shared/{hx-text-NjKoQATI.js → hx-text-DTXjiviE.js} +2 -1
  393. package/dist/shared/{hx-text-NjKoQATI.js.map → hx-text-DTXjiviE.js.map} +1 -1
  394. package/dist/shared/{hx-text-input-BrCjo4fJ.js → hx-text-input-CqEdDHMU.js} +87 -70
  395. package/dist/shared/hx-text-input-CqEdDHMU.js.map +1 -0
  396. package/dist/shared/{hx-textarea-BsQdB1Rk.js → hx-textarea-BgX7rxyo.js} +21 -12
  397. package/dist/shared/hx-textarea-BgX7rxyo.js.map +1 -0
  398. package/dist/shared/hx-theme-6GDoUG8j.js.map +1 -1
  399. package/dist/shared/{hx-time-picker-DRRAFuVd.js → hx-time-picker-DmLu7WUC.js} +77 -274
  400. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +1 -0
  401. package/dist/shared/{hx-toggle-button-D4F1soEM.js → hx-toggle-button-D1jpDvSA.js} +75 -38
  402. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +1 -0
  403. package/dist/shared/{hx-tooltip-Bk1iQRHs.js → hx-tooltip-kh7QFPKu.js} +66 -49
  404. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +1 -0
  405. package/dist/shared/{hx-top-nav-DzW7XLv-.js → hx-top-nav-DYlnzDaU.js} +4 -2
  406. package/dist/shared/{hx-top-nav-DzW7XLv-.js.map → hx-top-nav-DYlnzDaU.js.map} +1 -1
  407. package/dist/shared/{hx-tree-item-DdH6RbMs.js → hx-tree-item-BP6UF_H1.js} +137 -101
  408. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +1 -0
  409. package/dist/shared/toast-factory-DTy-qN8r.js +521 -0
  410. package/dist/shared/toast-factory-DTy-qN8r.js.map +1 -0
  411. package/dist/styles/shared-field.styles.d.ts +6 -0
  412. package/dist/styles/shared-field.styles.d.ts.map +1 -0
  413. package/package.json +2 -5
  414. package/dist/shared/hx-accordion-Cyswa6J3.js.map +0 -1
  415. package/dist/shared/hx-action-bar-we_WJety.js.map +0 -1
  416. package/dist/shared/hx-alert-Cg-zxRiU.js.map +0 -1
  417. package/dist/shared/hx-avatar-Cep6Urm3.js.map +0 -1
  418. package/dist/shared/hx-badge-CjT0d8NK.js.map +0 -1
  419. package/dist/shared/hx-banner-lxAIJ2kR.js.map +0 -1
  420. package/dist/shared/hx-breadcrumb-item-C0rz0fzV.js.map +0 -1
  421. package/dist/shared/hx-button-Cbhqpm5i.js.map +0 -1
  422. package/dist/shared/hx-card-Bg4W4uXC.js.map +0 -1
  423. package/dist/shared/hx-carousel-item-BKpmFbUT.js.map +0 -1
  424. package/dist/shared/hx-checkbox-BMayOpAM.js.map +0 -1
  425. package/dist/shared/hx-checkbox-group-ydUdV9Sx.js.map +0 -1
  426. package/dist/shared/hx-code-snippet-B4hV7rWG.js.map +0 -1
  427. package/dist/shared/hx-color-picker-BvfJ_h16.js +0 -803
  428. package/dist/shared/hx-color-picker-BvfJ_h16.js.map +0 -1
  429. package/dist/shared/hx-combobox-BBi3izKJ.js.map +0 -1
  430. package/dist/shared/hx-counter-D-1NXzGs.js.map +0 -1
  431. package/dist/shared/hx-data-table-DNiDVWR2.js.map +0 -1
  432. package/dist/shared/hx-date-picker-D7yCK0nk.js.map +0 -1
  433. package/dist/shared/hx-dialog-Z7Ou_AZ9.js.map +0 -1
  434. package/dist/shared/hx-drawer-Dk-_xzy0.js.map +0 -1
  435. package/dist/shared/hx-dropdown-DnjLnkTj.js.map +0 -1
  436. package/dist/shared/hx-field-CDP8EXuj.js.map +0 -1
  437. package/dist/shared/hx-file-upload-CUORgnKc.js.map +0 -1
  438. package/dist/shared/hx-form-BFv_N1dm.js +0 -1272
  439. package/dist/shared/hx-form-BFv_N1dm.js.map +0 -1
  440. package/dist/shared/hx-format-date-BsVr8gpD.js.map +0 -1
  441. package/dist/shared/hx-grid-BsDBCTbt.js.map +0 -1
  442. package/dist/shared/hx-icon--xsJztDh.js.map +0 -1
  443. package/dist/shared/hx-icon-button-C83bCR0K.js.map +0 -1
  444. package/dist/shared/hx-image-xyb_tHCR.js.map +0 -1
  445. package/dist/shared/hx-link-DfNy_UU8.js.map +0 -1
  446. package/dist/shared/hx-list-CdRNgeoP.js.map +0 -1
  447. package/dist/shared/hx-menu-divider-11Dp2VfM.js.map +0 -1
  448. package/dist/shared/hx-meter-UinDQjl6.js +0 -190
  449. package/dist/shared/hx-meter-UinDQjl6.js.map +0 -1
  450. package/dist/shared/hx-nav-DSpwWYUX.js.map +0 -1
  451. package/dist/shared/hx-nav-item-D54-5eUM.js.map +0 -1
  452. package/dist/shared/hx-number-input-BP6TIA92.js.map +0 -1
  453. package/dist/shared/hx-overflow-menu-C7k5wlZy.js.map +0 -1
  454. package/dist/shared/hx-pagination-BQ0cLTuB.js.map +0 -1
  455. package/dist/shared/hx-popover-BQsgrJCW.js +0 -226
  456. package/dist/shared/hx-popover-BQsgrJCW.js.map +0 -1
  457. package/dist/shared/hx-popup-CYf9Q5sj.js.map +0 -1
  458. package/dist/shared/hx-progress-bar-C_mdPVF-.js.map +0 -1
  459. package/dist/shared/hx-progress-ring-BHJBaXNk.js.map +0 -1
  460. package/dist/shared/hx-prose-DZh2KrMb.js +0 -876
  461. package/dist/shared/hx-prose-DZh2KrMb.js.map +0 -1
  462. package/dist/shared/hx-radio-Bqyi8re3.js.map +0 -1
  463. package/dist/shared/hx-rating-Y_t7Z4qb.js.map +0 -1
  464. package/dist/shared/hx-select-BBae2LqN.js.map +0 -1
  465. package/dist/shared/hx-slider-CpnxH2UP.js.map +0 -1
  466. package/dist/shared/hx-spinner-BOApJ-g9.js.map +0 -1
  467. package/dist/shared/hx-split-panel-Cxkeauwe.js.map +0 -1
  468. package/dist/shared/hx-stack-CfoW7jU7.js.map +0 -1
  469. package/dist/shared/hx-stat-C2wfph8W.js.map +0 -1
  470. package/dist/shared/hx-status-indicator-oYWOkWlD.js.map +0 -1
  471. package/dist/shared/hx-step-DYoIumpR.js.map +0 -1
  472. package/dist/shared/hx-switch-DkKchcuP.js.map +0 -1
  473. package/dist/shared/hx-tab-panel-CHB0u1zF.js.map +0 -1
  474. package/dist/shared/hx-tag-SJJtMlOS.js.map +0 -1
  475. package/dist/shared/hx-td-CVwCGBYf.js.map +0 -1
  476. package/dist/shared/hx-text-input-BrCjo4fJ.js.map +0 -1
  477. package/dist/shared/hx-textarea-BsQdB1Rk.js.map +0 -1
  478. package/dist/shared/hx-time-picker-DRRAFuVd.js.map +0 -1
  479. package/dist/shared/hx-toggle-button-D4F1soEM.js.map +0 -1
  480. package/dist/shared/hx-tooltip-Bk1iQRHs.js.map +0 -1
  481. package/dist/shared/hx-tree-item-DdH6RbMs.js.map +0 -1
  482. package/dist/shared/toast-factory-B8jicczW.js +0 -426
  483. package/dist/shared/toast-factory-B8jicczW.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { css as m, LitElement as v, nothing as x, html as d } from "lit";
2
- import { query as c, state as g, property as u, customElement as f } from "lit/decorators.js";
1
+ import { css as v, LitElement as x, nothing as d, html as c } from "lit";
2
+ import { query as m, state as g, property as u, customElement as f } from "lit/decorators.js";
3
3
  import { classMap as h } from "lit/directives/class-map.js";
4
4
  import { tokenStyles as _ } from "@helixui/tokens/lit";
5
- const y = m`
5
+ const y = v`
6
6
  :host {
7
7
  display: inline-block;
8
8
  position: relative;
@@ -311,9 +311,9 @@ var w = Object.defineProperty, k = Object.getOwnPropertyDescriptor, n = (t, r, e
311
311
  (l = t[a]) && (o = (s ? l(r, e, o) : l(o)) || o);
312
312
  return s && o && w(r, e, o), o;
313
313
  };
314
- let M = 0, i = class extends v {
314
+ let C = 0, i = class extends x {
315
315
  constructor() {
316
- super(...arguments), this._open = !1, this.variant = "primary", this.size = "md", this.disabled = !1, this.label = void 0, this.triggerLabel = "More actions", this.menuLabel = "Secondary actions", this._menuId = `hx-split-button-menu-${++M}`, this._handleOutsideClick = (t) => {
316
+ super(...arguments), this._open = !1, this.variant = "primary", this.size = "md", this.disabled = !1, this.label = void 0, this.triggerLabel = "More actions", this.menuLabel = "Secondary actions", this._menuId = `hx-split-button-menu-${++C}`, this._handleOutsideClick = (t) => {
317
317
  if (!this._open) return;
318
318
  const r = t.target;
319
319
  !this.contains(r) && r !== this && this._closeMenu();
@@ -329,6 +329,7 @@ let M = 0, i = class extends v {
329
329
  super.disconnectedCallback(), document.removeEventListener("click", this._handleOutsideClick), document.removeEventListener("keydown", this._handleDocumentKeydown);
330
330
  }
331
331
  // ─── Primary Button Handlers ───
332
+ /** @internal */
332
333
  _handlePrimaryClick(t) {
333
334
  if (this.disabled) {
334
335
  t.preventDefault(), t.stopPropagation();
@@ -342,10 +343,12 @@ let M = 0, i = class extends v {
342
343
  })
343
344
  );
344
345
  }
346
+ /** @internal */
345
347
  _handlePrimaryKeydown(t) {
346
348
  this.disabled || t.key === "ArrowDown" && (t.preventDefault(), this._openMenu());
347
349
  }
348
350
  // ─── Trigger Button Handlers ───
351
+ /** @internal */
349
352
  _handleTriggerClick(t) {
350
353
  if (this.disabled) {
351
354
  t.preventDefault(), t.stopPropagation();
@@ -353,10 +356,12 @@ let M = 0, i = class extends v {
353
356
  }
354
357
  t.stopPropagation(), this._toggleMenu();
355
358
  }
359
+ /** @internal */
356
360
  _handleTriggerKeydown(t) {
357
361
  this.disabled || t.key === "ArrowDown" && (t.preventDefault(), this._openMenu());
358
362
  }
359
363
  // ─── Menu Key Navigation ───
364
+ /** @internal */
360
365
  _handleMenuKeydown(t) {
361
366
  var s, o, a, l, b;
362
367
  const r = this._getMenuItems();
@@ -390,8 +395,10 @@ let M = 0, i = class extends v {
390
395
  }
391
396
  }
392
397
  // ─── Menu Item Selection ───
398
+ /** @internal */
393
399
  _handleMenuItemSelect(t) {
394
400
  var o, a;
401
+ if (!(t instanceof CustomEvent)) return;
395
402
  const r = t;
396
403
  this._closeMenu(), (o = this._triggerButton) == null || o.focus();
397
404
  const e = r.detail.item, s = ((a = e == null ? void 0 : e.textContent) == null ? void 0 : a.trim()) ?? "";
@@ -404,6 +411,7 @@ let M = 0, i = class extends v {
404
411
  );
405
412
  }
406
413
  // ─── Menu Helpers ───
414
+ /** @internal */
407
415
  _openMenu() {
408
416
  this._open || (this._open = !0, this.updateComplete.then(() => {
409
417
  var r;
@@ -411,9 +419,11 @@ let M = 0, i = class extends v {
411
419
  }).catch(() => {
412
420
  }));
413
421
  }
422
+ /** @internal */
414
423
  _closeMenu() {
415
424
  this._open = !1;
416
425
  }
426
+ /** @internal */
417
427
  _toggleMenu() {
418
428
  this._open ? this._closeMenu() : this._openMenu();
419
429
  }
@@ -423,6 +433,7 @@ let M = 0, i = class extends v {
423
433
  * .focus() on hosts works correctly. document.activeElement returns the host
424
434
  * element when the inner shadow element has focus, enabling correct index tracking.
425
435
  */
436
+ /** @internal */
426
437
  _getMenuItems() {
427
438
  var r;
428
439
  const t = (r = this.shadowRoot) == null ? void 0 : r.querySelector('slot[name="menu"]');
@@ -443,7 +454,7 @@ let M = 0, i = class extends v {
443
454
  "split-button__chevron": !0,
444
455
  "split-button__chevron--open": this._open
445
456
  };
446
- return d`
457
+ return c`
447
458
  <div class=${h(t)}>
448
459
  <!-- Primary action button -->
449
460
  <button
@@ -451,11 +462,11 @@ let M = 0, i = class extends v {
451
462
  class="split-button__primary"
452
463
  ?disabled=${this.disabled}
453
464
  type="button"
454
- aria-label=${this.ariaLabel ?? this.label ?? x}
465
+ aria-label=${this.ariaLabel ?? (this.label || d)}
455
466
  @click=${this._handlePrimaryClick}
456
467
  @keydown=${this._handlePrimaryKeydown}
457
468
  >
458
- ${this.label !== void 0 ? this.label : d`<slot></slot>`}
469
+ ${this.label !== void 0 ? this.label : c`<slot></slot>`}
459
470
  </button>
460
471
 
461
472
  <!-- Dropdown trigger button -->
@@ -464,7 +475,7 @@ let M = 0, i = class extends v {
464
475
  class="split-button__trigger"
465
476
  ?disabled=${this.disabled}
466
477
  aria-haspopup="menu"
467
- aria-expanded=${this._open ? "true" : "false"}
478
+ aria-expanded=${this._open ? "true" : d}
468
479
  aria-controls=${this._menuId}
469
480
  aria-label=${this.triggerLabel}
470
481
  type="button"
@@ -508,10 +519,10 @@ let M = 0, i = class extends v {
508
519
  };
509
520
  i.styles = [_, y];
510
521
  n([
511
- c(".split-button__menu")
522
+ m(".split-button__menu")
512
523
  ], i.prototype, "_menuPanel", 2);
513
524
  n([
514
- c(".split-button__trigger")
525
+ m(".split-button__trigger")
515
526
  ], i.prototype, "_triggerButton", 2);
516
527
  n([
517
528
  g()
@@ -540,4 +551,4 @@ i = n([
540
551
  export {
541
552
  i as H
542
553
  };
543
- //# sourceMappingURL=hx-split-button-BvwoG8h2.js.map
554
+ //# sourceMappingURL=hx-split-button-CypgLXw1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hx-split-button-BvwoG8h2.js","sources":["../../src/components/hx-split-button/hx-split-button.styles.ts","../../src/components/hx-split-button/hx-split-button.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixSplitButtonStyles = css`\n :host {\n display: inline-block;\n position: relative;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--hx-opacity-disabled, 0.5);\n }\n\n /* ─── Container ─── */\n\n .split-button {\n display: inline-flex;\n align-items: stretch;\n position: relative;\n }\n\n /* ─── Primary Button ─── */\n\n .split-button__primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--hx-space-2, 0.5rem);\n border: var(--hx-border-width-thin, 1px) solid var(--hx-split-button-border-color, transparent);\n border-right: none;\n border-radius: var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem)) 0 0\n var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem));\n background-color: var(--hx-split-button-bg, var(--hx-color-primary-500, #2563eb));\n color: var(--hx-split-button-color, var(--hx-color-neutral-0, #ffffff));\n font-family: var(--hx-split-button-font-family, var(--hx-font-family-sans, sans-serif));\n font-weight: var(--hx-split-button-font-weight, var(--hx-font-weight-semibold, 600));\n line-height: var(--hx-line-height-tight, 1.25);\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n color var(--hx-transition-fast, 150ms ease),\n border-color var(--hx-transition-fast, 150ms ease),\n box-shadow var(--hx-transition-fast, 150ms ease);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n -webkit-user-select: none;\n flex: 1 1 auto;\n }\n\n .split-button__primary:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n z-index: 1;\n position: relative;\n }\n\n .split-button__primary:hover {\n filter: brightness(var(--hx-filter-brightness-hover, 0.9));\n }\n\n .split-button__primary:active {\n filter: brightness(var(--hx-filter-brightness-active, 0.8));\n }\n\n .split-button__primary[disabled] {\n cursor: not-allowed;\n }\n\n /* ─── Trigger Button ─── */\n\n .split-button__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: var(--hx-border-width-thin, 1px) solid var(--hx-split-button-border-color, transparent);\n border-left: var(--hx-border-width-thin, 1px) solid\n var(--hx-split-button-divider-color, var(--hx-color-primary-400, #3b82f6));\n border-radius: 0 var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem))\n var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem)) 0;\n background-color: var(--hx-split-button-bg, var(--hx-color-primary-500, #2563eb));\n color: var(--hx-split-button-color, var(--hx-color-neutral-0, #ffffff));\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n box-shadow var(--hx-transition-fast, 150ms ease);\n user-select: none;\n -webkit-user-select: none;\n }\n\n .split-button__trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n z-index: 1;\n position: relative;\n }\n\n .split-button__trigger:hover {\n filter: brightness(var(--hx-filter-brightness-hover, 0.9));\n }\n\n .split-button__trigger:active {\n filter: brightness(var(--hx-filter-brightness-active, 0.8));\n }\n\n .split-button__trigger[disabled] {\n cursor: not-allowed;\n }\n\n /* ─── Trigger Icon ─── */\n\n .split-button__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform var(--hx-transition-fast, 150ms ease);\n }\n\n .split-button__chevron--open {\n transform: rotate(180deg);\n }\n\n /* ─── Size Variants ─── */\n\n /* sm */\n .split-button--sm .split-button__primary {\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);\n font-size: var(--hx-font-size-sm, 0.875rem);\n min-height: var(--hx-size-8, 2rem);\n }\n\n .split-button--sm .split-button__trigger {\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);\n min-height: var(--hx-size-8, 2rem);\n }\n\n /* md */\n .split-button--md .split-button__primary {\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);\n font-size: var(--hx-font-size-md, 1rem);\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .split-button--md .split-button__trigger {\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n /* lg */\n .split-button--lg .split-button__primary {\n padding: var(--hx-space-3, 0.75rem) var(--hx-space-6, 1.5rem);\n font-size: var(--hx-font-size-lg, 1.125rem);\n min-height: var(--hx-size-12, 3rem);\n }\n\n .split-button--lg .split-button__trigger {\n padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Variant: primary ─── */\n\n .split-button--primary .split-button__primary,\n .split-button--primary .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-primary-400, #3b82f6);\n }\n\n /* ─── Variant: secondary ─── */\n\n .split-button--secondary .split-button__primary,\n .split-button--secondary .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-border-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-divider-color: var(--hx-color-primary-300, #93c5fd);\n }\n\n .split-button--secondary .split-button__primary:hover,\n .split-button--secondary .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-primary-50, #eff6ff);\n filter: none;\n }\n\n /* ─── Variant: tertiary ─── */\n\n .split-button--tertiary .split-button__primary,\n .split-button--tertiary .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-neutral-100, #f1f5f9);\n --hx-split-button-color: var(--hx-color-neutral-900, #0f172a);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-neutral-300, #cbd5e1);\n }\n\n .split-button--tertiary .split-button__primary:hover,\n .split-button--tertiary .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-200, #e2e8f0);\n filter: none;\n }\n\n /* ─── Variant: danger ─── */\n\n .split-button--danger .split-button__primary,\n .split-button--danger .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-error-500, #dc2626);\n --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-error-400, #f87171);\n }\n\n .split-button--danger .split-button__primary:hover,\n .split-button--danger .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-error-600, #b91c1c);\n filter: none;\n }\n\n /* ─── Variant: ghost ─── */\n\n .split-button--ghost .split-button__primary,\n .split-button--ghost .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-primary-200, #bfdbfe);\n }\n\n .split-button--ghost .split-button__primary:hover,\n .split-button--ghost .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-100, #f1f5f9);\n filter: none;\n }\n\n /* ─── Variant: outline ─── */\n\n .split-button--outline .split-button__primary,\n .split-button--outline .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-neutral-900, #0f172a);\n --hx-split-button-border-color: var(--hx-color-neutral-300, #cbd5e1);\n --hx-split-button-divider-color: var(--hx-color-neutral-300, #cbd5e1);\n }\n\n .split-button--outline .split-button__primary:hover,\n .split-button--outline .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-50, #f8fafc);\n filter: none;\n }\n\n /* ─── Dropdown Menu Panel ─── */\n\n @keyframes hx-split-button-menu-open {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .split-button__menu {\n display: none;\n position: absolute;\n top: calc(100% + var(--hx-space-1, 0.25rem));\n inset-inline-end: 0;\n min-width: 100%;\n max-height: var(--hx-split-button-menu-max-height, 18rem);\n overflow-y: auto;\n background-color: var(--hx-split-button-menu-bg, var(--hx-color-neutral-0, #ffffff));\n border: var(--hx-border-width-thin, 1px) solid\n var(--hx-split-button-menu-border-color, var(--hx-color-neutral-200, #e2e8f0));\n border-radius: var(--hx-split-button-menu-border-radius, var(--hx-border-radius-md, 0.375rem));\n box-shadow: var(\n --hx-split-button-menu-shadow,\n 0 4px 6px -1px var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)),\n 0 2px 4px -2px var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1))\n );\n padding: var(--hx-space-1, 0.25rem);\n z-index: var(--hx-z-index-dropdown, 200);\n }\n\n .split-button__menu--open {\n display: block;\n animation: hx-split-button-menu-open var(--hx-transition-fast, 150ms ease);\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .split-button__primary,\n .split-button__trigger,\n .split-button__chevron {\n transition: none;\n }\n\n .split-button__menu--open {\n animation: none;\n }\n }\n`;\n","import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixSplitButtonStyles } from './hx-split-button.styles.js';\nimport type { HelixMenuItem } from '../hx-menu/hx-menu-item.js';\n\n// Module-level counter for stable, SSR-safe IDs (avoids Math.random() hydration mismatch)\nlet _hxSplitButtonIdCounter = 0;\n\n/**\n * A split button combining a primary action button with an attached dropdown\n * menu for secondary actions. Implements the ARIA menu button pattern for\n * full keyboard and screen reader support.\n *\n * @summary Primary action button with attached dropdown menu for secondary actions.\n *\n * @tag hx-split-button\n *\n * @slot - Primary button label text.\n * @slot menu - `hx-menu-item` children rendered in the dropdown panel.\n *\n * @fires {CustomEvent<{originalEvent: MouseEvent}>} hx-click - Dispatched when\n * the primary button is clicked and is not disabled.\n * @fires {CustomEvent<{value: string; label: string}>} hx-select - Dispatched when\n * a menu item is selected from the dropdown.\n *\n * @csspart button - The primary action button element.\n * @csspart trigger - The dropdown trigger button element.\n * @csspart menu - The dropdown menu panel.\n *\n * @cssprop [--hx-split-button-menu-max-height=18rem] - Maximum height of the dropdown menu panel before scrolling.\n * @cssprop [--hx-split-button-bg=var(--hx-color-primary-500)] - Background color for both buttons.\n * @cssprop [--hx-split-button-color=var(--hx-color-neutral-0)] - Text/icon color for both buttons.\n * @cssprop [--hx-split-button-border-color=transparent] - Border color.\n * @cssprop [--hx-split-button-border-radius=var(--hx-border-radius-md)] - Border radius.\n * @cssprop [--hx-split-button-divider-color=var(--hx-color-primary-400)] - Color of the divider between primary and trigger.\n * @cssprop [--hx-split-button-font-family=var(--hx-font-family-sans)] - Font family.\n * @cssprop [--hx-split-button-font-weight=var(--hx-font-weight-semibold)] - Font weight.\n * @cssprop [--hx-split-button-focus-ring-color=var(--hx-focus-ring-color)] - Focus ring color.\n * @cssprop [--hx-split-button-menu-bg=var(--hx-color-neutral-0)] - Dropdown menu background.\n * @cssprop [--hx-split-button-menu-border-color=var(--hx-color-neutral-200)] - Dropdown menu border color.\n * @cssprop [--hx-split-button-menu-border-radius=var(--hx-border-radius-md)] - Dropdown menu border radius.\n * @cssprop [--hx-split-button-menu-shadow] - Dropdown menu box shadow.\n */\n@customElement('hx-split-button')\nexport class HelixSplitButton extends LitElement {\n static override styles = [tokenStyles, helixSplitButtonStyles];\n\n // ─── Internal References ───\n\n /**\n * Reference to the dropdown menu panel element, used for positioning and focus management.\n * @internal\n */\n @query('.split-button__menu')\n private _menuPanel: HTMLElement | undefined;\n\n /**\n * Reference to the dropdown trigger button element, used to return focus after menu closes.\n * @internal\n */\n @query('.split-button__trigger')\n private _triggerButton: HTMLButtonElement | undefined;\n\n // ─── Internal State ───\n\n /**\n * Tracks whether the dropdown menu is currently open.\n * @internal\n */\n @state() private _open = false;\n\n // ─── Public Properties ───\n\n /**\n * Visual style variant of the split button.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost' | 'outline' = 'primary';\n\n /**\n * Size of the split button.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Whether the split button is disabled. Both the primary button and the\n * trigger are disabled when this is true.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Primary button label text. When set, overrides the default slot content.\n * @attr label\n */\n @property({ type: String })\n label: string | undefined = undefined;\n\n /**\n * Accessible label for the dropdown trigger button. Override for localization.\n * @attr trigger-label\n */\n @property({ type: String, attribute: 'trigger-label' })\n triggerLabel = 'More actions';\n\n /**\n * Accessible label for the dropdown menu panel. Override for localization.\n * @attr menu-label\n */\n @property({ type: String, attribute: 'menu-label' })\n menuLabel = 'Secondary actions';\n\n // ─── Unique IDs ───\n\n /**\n * Stable unique ID for the dropdown menu panel element, used to wire aria-controls on the trigger button.\n * @internal\n */\n private readonly _menuId = `hx-split-button-menu-${++_hxSplitButtonIdCounter}`;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n document.addEventListener('keydown', this._handleDocumentKeydown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n document.removeEventListener('keydown', this._handleDocumentKeydown);\n }\n\n // ─── Outside-click / document keydown ───\n\n private readonly _handleOutsideClick = (e: MouseEvent): void => {\n if (!this._open) return;\n const target = e.target as Node;\n if (!this.contains(target) && target !== this) {\n this._closeMenu();\n }\n };\n\n private readonly _handleDocumentKeydown = (e: KeyboardEvent): void => {\n if (!this._open) return;\n if (e.key === 'Tab') {\n this._closeMenu();\n }\n };\n\n // ─── Primary Button Handlers ───\n\n private _handlePrimaryClick(e: MouseEvent): void {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n /**\n * Dispatched when the primary button is clicked.\n * @event hx-click\n */\n this.dispatchEvent(\n new CustomEvent<{ originalEvent: MouseEvent }>('hx-click', {\n bubbles: true,\n composed: true,\n detail: { originalEvent: e },\n }),\n );\n }\n\n private _handlePrimaryKeydown(e: KeyboardEvent): void {\n if (this.disabled) return;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._openMenu();\n }\n }\n\n // ─── Trigger Button Handlers ───\n\n private _handleTriggerClick(e: MouseEvent): void {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n // Stop propagation so _handleOutsideClick does not immediately close.\n e.stopPropagation();\n this._toggleMenu();\n }\n\n private _handleTriggerKeydown(e: KeyboardEvent): void {\n if (this.disabled) return;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._openMenu();\n }\n }\n\n // ─── Menu Key Navigation ───\n\n private _handleMenuKeydown(e: KeyboardEvent): void {\n const items = this._getMenuItems();\n if (items.length === 0) return;\n\n // document.activeElement returns the hx-menu-item host element when its\n // inner shadow DOM element has focus, which matches items[] directly.\n const currentIndex = items.findIndex((item) => item === document.activeElement);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n items[next]?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n items[prev]?.focus();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n this._closeMenu();\n this._triggerButton?.focus();\n break;\n }\n case 'Home': {\n e.preventDefault();\n items[0]?.focus();\n break;\n }\n case 'End': {\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n }\n }\n\n // ─── Menu Item Selection ───\n\n private _handleMenuItemSelect(e: Event): void {\n const custom = e as CustomEvent<{ item: HelixMenuItem; value: string }>;\n this._closeMenu();\n this._triggerButton?.focus();\n\n const item = custom.detail.item;\n const label = item?.textContent?.trim() ?? '';\n\n /**\n * Dispatched when a menu item is selected.\n * @event hx-select\n */\n this.dispatchEvent(\n new CustomEvent<{ value: string; label: string }>('hx-select', {\n bubbles: true,\n composed: true,\n detail: { value: custom.detail.value, label },\n }),\n );\n }\n\n // ─── Menu Helpers ───\n\n private _openMenu(): void {\n if (this._open) return;\n this._open = true;\n // Focus the first enabled menu item after the panel renders\n this.updateComplete\n .then(() => {\n const items = this._getMenuItems();\n items[0]?.focus();\n })\n .catch(() => undefined);\n }\n\n private _closeMenu(): void {\n this._open = false;\n }\n\n private _toggleMenu(): void {\n if (this._open) {\n this._closeMenu();\n } else {\n this._openMenu();\n }\n }\n\n /**\n * Returns the enabled hx-menu-item host elements assigned to the `menu` slot.\n * HelixMenuItem overrides focus() to delegate to its inner element, so calling\n * .focus() on hosts works correctly. document.activeElement returns the host\n * element when the inner shadow element has focus, enabling correct index tracking.\n */\n private _getMenuItems(): HelixMenuItem[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"menu\"]');\n if (!slot) return [];\n\n return slot\n .assignedElements({ flatten: true })\n .filter(\n (el): el is HelixMenuItem =>\n el.tagName.toLowerCase() === 'hx-menu-item' && !(el as HelixMenuItem).disabled,\n );\n }\n\n // ─── Render ───\n\n override render() {\n const containerClasses = {\n 'split-button': true,\n [`split-button--${this.variant}`]: true,\n [`split-button--${this.size}`]: true,\n };\n\n const menuClasses = {\n 'split-button__menu': true,\n 'split-button__menu--open': this._open,\n };\n\n const chevronClasses = {\n 'split-button__chevron': true,\n 'split-button__chevron--open': this._open,\n };\n\n return html`\n <div class=${classMap(containerClasses)}>\n <!-- Primary action button -->\n <button\n part=\"button\"\n class=\"split-button__primary\"\n ?disabled=${this.disabled}\n type=\"button\"\n aria-label=${this.ariaLabel ?? this.label ?? nothing}\n @click=${this._handlePrimaryClick}\n @keydown=${this._handlePrimaryKeydown}\n >\n ${this.label !== undefined ? this.label : html`<slot></slot>`}\n </button>\n\n <!-- Dropdown trigger button -->\n <button\n part=\"trigger\"\n class=\"split-button__trigger\"\n ?disabled=${this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded=${this._open ? 'true' : 'false'}\n aria-controls=${this._menuId}\n aria-label=${this.triggerLabel}\n type=\"button\"\n @click=${this._handleTriggerClick}\n @keydown=${this._handleTriggerKeydown}\n >\n <span class=${classMap(chevronClasses)} aria-hidden=\"true\">\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.5L6 6.5L11 1.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <!-- Dropdown menu panel -->\n <div\n part=\"menu\"\n id=${this._menuId}\n class=${classMap(menuClasses)}\n role=\"menu\"\n aria-label=${this.menuLabel}\n @keydown=${this._handleMenuKeydown}\n @hx-item-select=${this._handleMenuItemSelect}\n >\n <slot name=\"menu\"></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-split-button': HelixSplitButton;\n }\n}\n"],"names":["helixSplitButtonStyles","css","_hxSplitButtonIdCounter","HelixSplitButton","LitElement","e","target","items","currentIndex","item","next","_a","prev","_b","_c","_d","_e","custom","label","slot","el","containerClasses","menuClasses","chevronClasses","html","classMap","nothing","tokenStyles","__decorateClass","query","state","property","customElement"],"mappings":";;;;AAEO,MAAMA,IAAyBC;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;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;AAA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"}
1
+ {"version":3,"file":"hx-split-button-CypgLXw1.js","sources":["../../src/components/hx-split-button/hx-split-button.styles.ts","../../src/components/hx-split-button/hx-split-button.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixSplitButtonStyles = css`\n :host {\n display: inline-block;\n position: relative;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--hx-opacity-disabled, 0.5);\n }\n\n /* ─── Container ─── */\n\n .split-button {\n display: inline-flex;\n align-items: stretch;\n position: relative;\n }\n\n /* ─── Primary Button ─── */\n\n .split-button__primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--hx-space-2, 0.5rem);\n border: var(--hx-border-width-thin, 1px) solid var(--hx-split-button-border-color, transparent);\n border-right: none;\n border-radius: var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem)) 0 0\n var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem));\n background-color: var(--hx-split-button-bg, var(--hx-color-primary-500, #2563eb));\n color: var(--hx-split-button-color, var(--hx-color-neutral-0, #ffffff));\n font-family: var(--hx-split-button-font-family, var(--hx-font-family-sans, sans-serif));\n font-weight: var(--hx-split-button-font-weight, var(--hx-font-weight-semibold, 600));\n line-height: var(--hx-line-height-tight, 1.25);\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n color var(--hx-transition-fast, 150ms ease),\n border-color var(--hx-transition-fast, 150ms ease),\n box-shadow var(--hx-transition-fast, 150ms ease);\n text-decoration: none;\n white-space: nowrap;\n user-select: none;\n -webkit-user-select: none;\n flex: 1 1 auto;\n }\n\n .split-button__primary:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n z-index: 1;\n position: relative;\n }\n\n .split-button__primary:hover {\n filter: brightness(var(--hx-filter-brightness-hover, 0.9));\n }\n\n .split-button__primary:active {\n filter: brightness(var(--hx-filter-brightness-active, 0.8));\n }\n\n .split-button__primary[disabled] {\n cursor: not-allowed;\n }\n\n /* ─── Trigger Button ─── */\n\n .split-button__trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: var(--hx-border-width-thin, 1px) solid var(--hx-split-button-border-color, transparent);\n border-left: var(--hx-border-width-thin, 1px) solid\n var(--hx-split-button-divider-color, var(--hx-color-primary-400, #3b82f6));\n border-radius: 0 var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem))\n var(--hx-split-button-border-radius, var(--hx-border-radius-md, 0.375rem)) 0;\n background-color: var(--hx-split-button-bg, var(--hx-color-primary-500, #2563eb));\n color: var(--hx-split-button-color, var(--hx-color-neutral-0, #ffffff));\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n box-shadow var(--hx-transition-fast, 150ms ease);\n user-select: none;\n -webkit-user-select: none;\n }\n\n .split-button__trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n z-index: 1;\n position: relative;\n }\n\n .split-button__trigger:hover {\n filter: brightness(var(--hx-filter-brightness-hover, 0.9));\n }\n\n .split-button__trigger:active {\n filter: brightness(var(--hx-filter-brightness-active, 0.8));\n }\n\n .split-button__trigger[disabled] {\n cursor: not-allowed;\n }\n\n /* ─── Trigger Icon ─── */\n\n .split-button__chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform var(--hx-transition-fast, 150ms ease);\n }\n\n .split-button__chevron--open {\n transform: rotate(180deg);\n }\n\n /* ─── Size Variants ─── */\n\n /* sm */\n .split-button--sm .split-button__primary {\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-3, 0.75rem);\n font-size: var(--hx-font-size-sm, 0.875rem);\n min-height: var(--hx-size-8, 2rem);\n }\n\n .split-button--sm .split-button__trigger {\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);\n min-height: var(--hx-size-8, 2rem);\n }\n\n /* md */\n .split-button--md .split-button__primary {\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);\n font-size: var(--hx-font-size-md, 1rem);\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .split-button--md .split-button__trigger {\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n /* lg */\n .split-button--lg .split-button__primary {\n padding: var(--hx-space-3, 0.75rem) var(--hx-space-6, 1.5rem);\n font-size: var(--hx-font-size-lg, 1.125rem);\n min-height: var(--hx-size-12, 3rem);\n }\n\n .split-button--lg .split-button__trigger {\n padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Variant: primary ─── */\n\n .split-button--primary .split-button__primary,\n .split-button--primary .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-primary-400, #3b82f6);\n }\n\n /* ─── Variant: secondary ─── */\n\n .split-button--secondary .split-button__primary,\n .split-button--secondary .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-border-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-divider-color: var(--hx-color-primary-300, #93c5fd);\n }\n\n .split-button--secondary .split-button__primary:hover,\n .split-button--secondary .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-primary-50, #eff6ff);\n filter: none;\n }\n\n /* ─── Variant: tertiary ─── */\n\n .split-button--tertiary .split-button__primary,\n .split-button--tertiary .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-neutral-100, #f1f5f9);\n --hx-split-button-color: var(--hx-color-neutral-900, #0f172a);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-neutral-300, #cbd5e1);\n }\n\n .split-button--tertiary .split-button__primary:hover,\n .split-button--tertiary .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-200, #e2e8f0);\n filter: none;\n }\n\n /* ─── Variant: danger ─── */\n\n .split-button--danger .split-button__primary,\n .split-button--danger .split-button__trigger {\n --hx-split-button-bg: var(--hx-color-error-500, #dc2626);\n --hx-split-button-color: var(--hx-color-neutral-0, #ffffff);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-error-400, #f87171);\n }\n\n .split-button--danger .split-button__primary:hover,\n .split-button--danger .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-error-600, #b91c1c);\n filter: none;\n }\n\n /* ─── Variant: ghost ─── */\n\n .split-button--ghost .split-button__primary,\n .split-button--ghost .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-primary-500, #2563eb);\n --hx-split-button-border-color: transparent;\n --hx-split-button-divider-color: var(--hx-color-primary-200, #bfdbfe);\n }\n\n .split-button--ghost .split-button__primary:hover,\n .split-button--ghost .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-100, #f1f5f9);\n filter: none;\n }\n\n /* ─── Variant: outline ─── */\n\n .split-button--outline .split-button__primary,\n .split-button--outline .split-button__trigger {\n --hx-split-button-bg: transparent;\n --hx-split-button-color: var(--hx-color-neutral-900, #0f172a);\n --hx-split-button-border-color: var(--hx-color-neutral-300, #cbd5e1);\n --hx-split-button-divider-color: var(--hx-color-neutral-300, #cbd5e1);\n }\n\n .split-button--outline .split-button__primary:hover,\n .split-button--outline .split-button__trigger:hover {\n --hx-split-button-bg: var(--hx-color-neutral-50, #f8fafc);\n filter: none;\n }\n\n /* ─── Dropdown Menu Panel ─── */\n\n @keyframes hx-split-button-menu-open {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .split-button__menu {\n display: none;\n position: absolute;\n top: calc(100% + var(--hx-space-1, 0.25rem));\n inset-inline-end: 0;\n min-width: 100%;\n max-height: var(--hx-split-button-menu-max-height, 18rem);\n overflow-y: auto;\n background-color: var(--hx-split-button-menu-bg, var(--hx-color-neutral-0, #ffffff));\n border: var(--hx-border-width-thin, 1px) solid\n var(--hx-split-button-menu-border-color, var(--hx-color-neutral-200, #e2e8f0));\n border-radius: var(--hx-split-button-menu-border-radius, var(--hx-border-radius-md, 0.375rem));\n box-shadow: var(\n --hx-split-button-menu-shadow,\n 0 4px 6px -1px var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)),\n 0 2px 4px -2px var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1))\n );\n padding: var(--hx-space-1, 0.25rem);\n z-index: var(--hx-z-index-dropdown, 200);\n }\n\n .split-button__menu--open {\n display: block;\n animation: hx-split-button-menu-open var(--hx-transition-fast, 150ms ease);\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .split-button__primary,\n .split-button__trigger,\n .split-button__chevron {\n transition: none;\n }\n\n .split-button__menu--open {\n animation: none;\n }\n }\n`;\n","import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixSplitButtonStyles } from './hx-split-button.styles.js';\nimport type { HelixMenuItem } from '../hx-menu/hx-menu-item.js';\n\n// Module-level counter for stable, SSR-safe IDs (avoids Math.random() hydration mismatch)\nlet _hxSplitButtonIdCounter = 0;\n\n/**\n * A split button combining a primary action button with an attached dropdown\n * menu for secondary actions. Implements the ARIA menu button pattern for\n * full keyboard and screen reader support.\n *\n * @summary Primary action button with attached dropdown menu for secondary actions.\n *\n * @tag hx-split-button\n *\n * @slot - Primary button label text.\n * @slot menu - `hx-menu-item` children rendered in the dropdown panel.\n *\n * @fires {CustomEvent<{originalEvent: MouseEvent}>} hx-click - Dispatched when\n * the primary button is clicked and is not disabled.\n * @fires {CustomEvent<{value: string; label: string}>} hx-select - Dispatched when\n * a menu item is selected from the dropdown.\n *\n * @csspart button - The primary action button element.\n * @csspart trigger - The dropdown trigger button element.\n * @csspart menu - The dropdown menu panel.\n *\n * @cssprop [--hx-split-button-menu-max-height=18rem] - Maximum height of the dropdown menu panel before scrolling.\n * @cssprop [--hx-split-button-bg=var(--hx-color-primary-500)] - Background color for both buttons.\n * @cssprop [--hx-split-button-color=var(--hx-color-neutral-0)] - Text/icon color for both buttons.\n * @cssprop [--hx-split-button-border-color=transparent] - Border color.\n * @cssprop [--hx-split-button-border-radius=var(--hx-border-radius-md)] - Border radius.\n * @cssprop [--hx-split-button-divider-color=var(--hx-color-primary-400)] - Color of the divider between primary and trigger.\n * @cssprop [--hx-split-button-font-family=var(--hx-font-family-sans)] - Font family.\n * @cssprop [--hx-split-button-font-weight=var(--hx-font-weight-semibold)] - Font weight.\n * @cssprop [--hx-split-button-focus-ring-color=var(--hx-focus-ring-color)] - Focus ring color.\n * @cssprop [--hx-split-button-menu-bg=var(--hx-color-neutral-0)] - Dropdown menu background.\n * @cssprop [--hx-split-button-menu-border-color=var(--hx-color-neutral-200)] - Dropdown menu border color.\n * @cssprop [--hx-split-button-menu-border-radius=var(--hx-border-radius-md)] - Dropdown menu border radius.\n * @cssprop [--hx-split-button-menu-shadow] - Dropdown menu box shadow.\n */\n@customElement('hx-split-button')\nexport class HelixSplitButton extends LitElement {\n static override styles = [tokenStyles, helixSplitButtonStyles];\n\n // ─── Internal References ───\n\n /**\n * Reference to the dropdown menu panel element, used for positioning and focus management.\n * @internal\n */\n @query('.split-button__menu')\n private _menuPanel: HTMLElement | undefined;\n\n /**\n * Reference to the dropdown trigger button element, used to return focus after menu closes.\n * @internal\n */\n @query('.split-button__trigger')\n private _triggerButton: HTMLButtonElement | undefined;\n\n // ─── Internal State ───\n\n /**\n * Tracks whether the dropdown menu is currently open.\n * @internal\n */\n @state() private _open = false;\n\n // ─── Public Properties ───\n\n /**\n * Visual style variant of the split button.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost' | 'outline' = 'primary';\n\n /**\n * Size of the split button.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Whether the split button is disabled. Both the primary button and the\n * trigger are disabled when this is true.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Primary button label text. When set, overrides the default slot content.\n * @attr label\n */\n @property({ type: String })\n label: string | undefined = undefined;\n\n /**\n * Accessible label for the dropdown trigger button. Override for localization.\n * @attr trigger-label\n */\n @property({ type: String, attribute: 'trigger-label' })\n triggerLabel = 'More actions';\n\n /**\n * Accessible label for the dropdown menu panel. Override for localization.\n * @attr menu-label\n */\n @property({ type: String, attribute: 'menu-label' })\n menuLabel = 'Secondary actions';\n\n // ─── Unique IDs ───\n\n /**\n * Stable unique ID for the dropdown menu panel element, used to wire aria-controls on the trigger button.\n * @internal\n */\n private readonly _menuId = `hx-split-button-menu-${++_hxSplitButtonIdCounter}`;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n document.addEventListener('keydown', this._handleDocumentKeydown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n document.removeEventListener('keydown', this._handleDocumentKeydown);\n }\n\n // ─── Outside-click / document keydown ───\n\n /** @internal */\n private readonly _handleOutsideClick = (e: MouseEvent): void => {\n if (!this._open) return;\n const target = e.target as Node;\n if (!this.contains(target) && target !== this) {\n this._closeMenu();\n }\n };\n\n /** @internal */\n private readonly _handleDocumentKeydown = (e: KeyboardEvent): void => {\n if (!this._open) return;\n if (e.key === 'Tab') {\n this._closeMenu();\n }\n };\n\n // ─── Primary Button Handlers ───\n\n /** @internal */\n private _handlePrimaryClick(e: MouseEvent): void {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n /**\n * Dispatched when the primary button is clicked.\n * @event hx-click\n */\n this.dispatchEvent(\n new CustomEvent<{ originalEvent: MouseEvent }>('hx-click', {\n bubbles: true,\n composed: true,\n detail: { originalEvent: e },\n }),\n );\n }\n\n /** @internal */\n private _handlePrimaryKeydown(e: KeyboardEvent): void {\n if (this.disabled) return;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._openMenu();\n }\n }\n\n // ─── Trigger Button Handlers ───\n\n /** @internal */\n private _handleTriggerClick(e: MouseEvent): void {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n // Stop propagation so _handleOutsideClick does not immediately close.\n e.stopPropagation();\n this._toggleMenu();\n }\n\n /** @internal */\n private _handleTriggerKeydown(e: KeyboardEvent): void {\n if (this.disabled) return;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this._openMenu();\n }\n }\n\n // ─── Menu Key Navigation ───\n\n /** @internal */\n private _handleMenuKeydown(e: KeyboardEvent): void {\n const items = this._getMenuItems();\n if (items.length === 0) return;\n\n // document.activeElement returns the hx-menu-item host element when its\n // inner shadow DOM element has focus, which matches items[] directly.\n const currentIndex = items.findIndex((item) => item === document.activeElement);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n items[next]?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n items[prev]?.focus();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n this._closeMenu();\n this._triggerButton?.focus();\n break;\n }\n case 'Home': {\n e.preventDefault();\n items[0]?.focus();\n break;\n }\n case 'End': {\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n }\n }\n\n // ─── Menu Item Selection ───\n\n /** @internal */\n private _handleMenuItemSelect(e: Event): void {\n if (!(e instanceof CustomEvent)) return;\n const custom = e as CustomEvent<{ item: HelixMenuItem; value: string }>;\n this._closeMenu();\n this._triggerButton?.focus();\n\n const item = custom.detail.item;\n const label = item?.textContent?.trim() ?? '';\n\n /**\n * Dispatched when a menu item is selected.\n * @event hx-select\n */\n this.dispatchEvent(\n new CustomEvent<{ value: string; label: string }>('hx-select', {\n bubbles: true,\n composed: true,\n detail: { value: custom.detail.value, label },\n }),\n );\n }\n\n // ─── Menu Helpers ───\n\n /** @internal */\n private _openMenu(): void {\n if (this._open) return;\n this._open = true;\n // Focus the first enabled menu item after the panel renders\n void this.updateComplete\n .then(() => {\n const items = this._getMenuItems();\n items[0]?.focus();\n })\n .catch(() => undefined);\n }\n\n /** @internal */\n private _closeMenu(): void {\n this._open = false;\n }\n\n /** @internal */\n private _toggleMenu(): void {\n if (this._open) {\n this._closeMenu();\n } else {\n this._openMenu();\n }\n }\n\n /**\n * Returns the enabled hx-menu-item host elements assigned to the `menu` slot.\n * HelixMenuItem overrides focus() to delegate to its inner element, so calling\n * .focus() on hosts works correctly. document.activeElement returns the host\n * element when the inner shadow element has focus, enabling correct index tracking.\n */\n /** @internal */\n private _getMenuItems(): HelixMenuItem[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"menu\"]');\n if (!slot) return [];\n\n return slot\n .assignedElements({ flatten: true })\n .filter(\n (el): el is HelixMenuItem =>\n el.tagName.toLowerCase() === 'hx-menu-item' && !(el as HelixMenuItem).disabled,\n );\n }\n\n // ─── Render ───\n\n override render() {\n const containerClasses = {\n 'split-button': true,\n [`split-button--${this.variant}`]: true,\n [`split-button--${this.size}`]: true,\n };\n\n const menuClasses = {\n 'split-button__menu': true,\n 'split-button__menu--open': this._open,\n };\n\n const chevronClasses = {\n 'split-button__chevron': true,\n 'split-button__chevron--open': this._open,\n };\n\n return html`\n <div class=${classMap(containerClasses)}>\n <!-- Primary action button -->\n <button\n part=\"button\"\n class=\"split-button__primary\"\n ?disabled=${this.disabled}\n type=\"button\"\n aria-label=${this.ariaLabel ?? (this.label || nothing)}\n @click=${this._handlePrimaryClick}\n @keydown=${this._handlePrimaryKeydown}\n >\n ${this.label !== undefined ? this.label : html`<slot></slot>`}\n </button>\n\n <!-- Dropdown trigger button -->\n <button\n part=\"trigger\"\n class=\"split-button__trigger\"\n ?disabled=${this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded=${this._open ? 'true' : nothing}\n aria-controls=${this._menuId}\n aria-label=${this.triggerLabel}\n type=\"button\"\n @click=${this._handleTriggerClick}\n @keydown=${this._handleTriggerKeydown}\n >\n <span class=${classMap(chevronClasses)} aria-hidden=\"true\">\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.5L6 6.5L11 1.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n <!-- Dropdown menu panel -->\n <div\n part=\"menu\"\n id=${this._menuId}\n class=${classMap(menuClasses)}\n role=\"menu\"\n aria-label=${this.menuLabel}\n @keydown=${this._handleMenuKeydown}\n @hx-item-select=${this._handleMenuItemSelect}\n >\n <slot name=\"menu\"></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-split-button': HelixSplitButton;\n }\n}\n"],"names":["helixSplitButtonStyles","css","_hxSplitButtonIdCounter","HelixSplitButton","LitElement","e","target","items","currentIndex","item","next","_a","prev","_b","_c","_d","_e","custom","label","slot","el","containerClasses","menuClasses","chevronClasses","html","classMap","nothing","tokenStyles","__decorateClass","query","state","property","customElement"],"mappings":";;;;AAEO,MAAMA,IAAyBC;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;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;AAA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"}
@@ -1,7 +1,8 @@
1
- import { css as c, LitElement as u, nothing as d, html as h } from "lit";
2
- import { property as s, customElement as v } from "lit/decorators.js";
3
- import { tokenStyles as f } from "@helixui/tokens/lit";
4
- const b = c`
1
+ import { css as c, LitElement as u, nothing as d, html as p } from "lit";
2
+ import { property as r, customElement as v } from "lit/decorators.js";
3
+ import { styleMap as f } from "lit/directives/style-map.js";
4
+ import { tokenStyles as b } from "@helixui/tokens/lit";
5
+ const x = c`
5
6
  :host {
6
7
  display: flex;
7
8
  --_divider-size: var(--hx-split-panel-divider-size, 4px);
@@ -70,7 +71,7 @@ const b = c`
70
71
  flex: 1;
71
72
  background-color: var(--_divider-color);
72
73
  cursor: col-resize;
73
- transition: background-color 0.15s ease;
74
+ transition: background-color var(--hx-transition-fast, 150ms ease);
74
75
  touch-action: none;
75
76
  user-select: none;
76
77
  -webkit-user-select: none;
@@ -91,8 +92,12 @@ const b = c`
91
92
  }
92
93
 
93
94
  .divider:focus-visible {
94
- outline: 2px solid var(--_divider-hover-color);
95
- outline-offset: 2px;
95
+ outline: var(--hx-focus-ring-width, 2px) solid
96
+ var(
97
+ --hx-split-panel-focus-ring-color,
98
+ var(--hx-focus-ring-color, var(--hx-color-primary-500))
99
+ );
100
+ outline-offset: var(--hx-focus-ring-offset, 2px);
96
101
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--_divider-hover-color) 30%, transparent);
97
102
  }
98
103
 
@@ -113,7 +118,7 @@ const b = c`
113
118
  .collapse-controls {
114
119
  position: absolute;
115
120
  top: 50%;
116
- left: 50%;
121
+ inset-inline-start: 50%;
117
122
  transform: translate(-50%, -50%);
118
123
  display: flex;
119
124
  flex-direction: column;
@@ -149,28 +154,38 @@ const b = c`
149
154
  }
150
155
 
151
156
  .collapse-btn:focus-visible {
152
- outline: 2px solid var(--hx-color-neutral-0);
153
- outline-offset: 2px;
157
+ outline: var(--hx-focus-ring-width, 2px) solid
158
+ var(
159
+ --hx-split-panel-focus-ring-color,
160
+ var(--hx-focus-ring-color, var(--hx-color-primary-500))
161
+ );
162
+ outline-offset: var(--hx-focus-ring-offset, 2px);
163
+ }
164
+
165
+ @media (prefers-reduced-motion: reduce) {
166
+ .divider {
167
+ transition: none;
168
+ }
154
169
  }
155
170
  `;
156
- var _ = Object.defineProperty, x = Object.getOwnPropertyDescriptor, o = (t, i, n, l) => {
157
- for (var r = l > 1 ? void 0 : l ? x(i, n) : i, a = t.length - 1, p; a >= 0; a--)
158
- (p = t[a]) && (r = (l ? p(i, n, r) : p(r)) || r);
159
- return l && r && _(i, n, r), r;
171
+ var _ = Object.defineProperty, g = Object.getOwnPropertyDescriptor, o = (t, i, n, a) => {
172
+ for (var s = a > 1 ? void 0 : a ? g(i, n) : i, l = t.length - 1, h; l >= 0; l--)
173
+ (h = t[l]) && (s = (a ? h(i, n, s) : h(s)) || s);
174
+ return a && s && _(i, n, s), s;
160
175
  };
161
176
  let e = class extends u {
162
177
  constructor() {
163
- super(...arguments), this.position = 50, this.orientation = "horizontal", this.min = 0, this.max = 100, this.snap = [], this.disabled = !1, this.collapsible = !1, this.collapsed = null, this._dragging = !1, this._dragStart = 0, this._positionAtDragStart = 0, this._positionBeforeCollapse = 50, this._onPointerDown = (t) => {
178
+ super(...arguments), this.position = 50, this.orientation = "horizontal", this.min = 0, this.max = 100, this.snap = [], this.disabled = !1, this.collapsible = !1, this.collapsed = null, this.labelResize = "Resize panels", this.labelCollapseStart = "Collapse start panel", this.labelCollapseEnd = "Collapse end panel", this.labelExpand = (t) => `Expand ${t} panel`, this._dragging = !1, this._dragStart = 0, this._positionAtDragStart = 0, this._positionBeforeCollapse = 50, this._cachedContainerWidth = 0, this._cachedContainerHeight = 0, this._onPointerDown = (t) => {
164
179
  if (this.disabled) return;
165
- t.currentTarget.setPointerCapture(t.pointerId), this._dragging = !0, this._dragStart = this.orientation === "horizontal" ? t.clientX : t.clientY, this._positionAtDragStart = this.position, t.preventDefault();
180
+ t.currentTarget.setPointerCapture(t.pointerId), this._dragging = !0, this._dragStart = this.orientation === "horizontal" ? t.clientX : t.clientY, this._positionAtDragStart = this.position, this._cachedContainerWidth = this.offsetWidth, this._cachedContainerHeight = this.offsetHeight, t.preventDefault();
166
181
  }, this._onPointerMove = (t) => {
167
182
  if (!this._dragging) return;
168
- const n = (this.orientation === "horizontal" ? t.clientX : t.clientY) - this._dragStart, l = this._getHostSize();
169
- if (l === 0) return;
170
- const r = n / l * 100;
171
- this._setPosition(this._positionAtDragStart + r);
183
+ const n = (this.orientation === "horizontal" ? t.clientX : t.clientY) - this._dragStart, a = this.orientation === "horizontal" ? this._cachedContainerWidth : this._cachedContainerHeight;
184
+ if (a === 0) return;
185
+ const s = n / a * 100;
186
+ this._setPosition(this._positionAtDragStart + s);
172
187
  }, this._onPointerUp = () => {
173
- this._dragging = !1;
188
+ this._dragging = !1, this._cachedContainerWidth = 0, this._cachedContainerHeight = 0;
174
189
  }, this._onKeyDown = (t) => {
175
190
  if (!this.disabled)
176
191
  switch (t.key) {
@@ -203,9 +218,11 @@ let e = class extends u {
203
218
  this.collapsed = null;
204
219
  };
205
220
  }
221
+ /** @internal */
206
222
  _clamp(t) {
207
223
  return Math.min(this.max, Math.max(this.min, t));
208
224
  }
225
+ /** @internal */
209
226
  _snapToPoint(t) {
210
227
  if (!this.snap.length) return t;
211
228
  const i = 5;
@@ -213,6 +230,7 @@ let e = class extends u {
213
230
  if (Math.abs(t - n) <= i) return n;
214
231
  return t;
215
232
  }
233
+ /** @internal */
216
234
  _setPosition(t) {
217
235
  const i = this._clamp(this._snapToPoint(t));
218
236
  i !== this.position && (this.position = i, this.dispatchEvent(
@@ -223,6 +241,7 @@ let e = class extends u {
223
241
  })
224
242
  ));
225
243
  }
244
+ /** @internal */
226
245
  _getHostSize() {
227
246
  return this.orientation === "horizontal" ? this.offsetWidth : this.offsetHeight;
228
247
  }
@@ -239,12 +258,13 @@ let e = class extends u {
239
258
  }
240
259
  });
241
260
  }
242
- _startPanelStyle() {
243
- return this.orientation === "horizontal" ? `width: ${this.position}%;` : `height: ${this.position}%;`;
261
+ /** @internal */
262
+ _startPanelStyleMap() {
263
+ return this.orientation === "horizontal" ? { width: `${this.position}%` } : { height: `${this.position}%` };
244
264
  }
245
265
  render() {
246
- return h`
247
- <div part="start" class="panel panel--start" style=${this._startPanelStyle()}>
266
+ return p`
267
+ <div part="start" class="panel panel--start" style=${f(this._startPanelStyleMap())}>
248
268
  <slot name="start"></slot>
249
269
  </div>
250
270
  <div class="divider-track">
@@ -252,7 +272,7 @@ let e = class extends u {
252
272
  part="divider"
253
273
  class="divider"
254
274
  role="separator"
255
- aria-label="Resize panels"
275
+ aria-label=${this.labelResize}
256
276
  aria-orientation=${this.orientation === "horizontal" ? "vertical" : "horizontal"}
257
277
  aria-valuenow=${this.position}
258
278
  aria-valuemin=${this.min}
@@ -264,20 +284,20 @@ let e = class extends u {
264
284
  @pointerup=${this._onPointerUp}
265
285
  @keydown=${this._onKeyDown}
266
286
  ></div>
267
- ${this.collapsible ? this.collapsed ? h`<div class="collapse-controls">
287
+ ${this.collapsible ? this.collapsed ? p`<div class="collapse-controls">
268
288
  <button
269
289
  type="button"
270
290
  class="collapse-btn"
271
- aria-label=${`Expand ${this.collapsed} panel`}
291
+ aria-label=${this.labelExpand(this.collapsed)}
272
292
  @click=${this._expand}
273
293
  >
274
294
  ${this.collapsed === "start" ? "▶" : "◀"}
275
295
  </button>
276
- </div>` : h`<div class="collapse-controls">
296
+ </div>` : p`<div class="collapse-controls">
277
297
  <button
278
298
  type="button"
279
299
  class="collapse-btn"
280
- aria-label="Collapse start panel"
300
+ aria-label=${this.labelCollapseStart}
281
301
  @click=${this._collapseStart}
282
302
  >
283
303
 
@@ -285,7 +305,7 @@ let e = class extends u {
285
305
  <button
286
306
  type="button"
287
307
  class="collapse-btn"
288
- aria-label="Collapse end panel"
308
+ aria-label=${this.labelCollapseEnd}
289
309
  @click=${this._collapseEnd}
290
310
  >
291
311
 
@@ -298,24 +318,24 @@ let e = class extends u {
298
318
  `;
299
319
  }
300
320
  };
301
- e.styles = [f, b];
321
+ e.styles = [b, x];
302
322
  o([
303
- s({ type: Number, reflect: !0 })
323
+ r({ type: Number, reflect: !0 })
304
324
  ], e.prototype, "position", 2);
305
325
  o([
306
- s({ type: Number, attribute: "position-in-pixels" })
326
+ r({ type: Number, attribute: "position-in-pixels" })
307
327
  ], e.prototype, "positionInPixels", 2);
308
328
  o([
309
- s({ type: String, reflect: !0 })
329
+ r({ type: String, reflect: !0 })
310
330
  ], e.prototype, "orientation", 2);
311
331
  o([
312
- s({ type: Number, reflect: !0 })
332
+ r({ type: Number, reflect: !0 })
313
333
  ], e.prototype, "min", 2);
314
334
  o([
315
- s({ type: Number, reflect: !0 })
335
+ r({ type: Number, reflect: !0 })
316
336
  ], e.prototype, "max", 2);
317
337
  o([
318
- s({
338
+ r({
319
339
  attribute: "snap",
320
340
  converter: {
321
341
  fromAttribute(t) {
@@ -334,18 +354,30 @@ o([
334
354
  })
335
355
  ], e.prototype, "snap", 2);
336
356
  o([
337
- s({ type: Boolean, reflect: !0 })
357
+ r({ type: Boolean, reflect: !0 })
338
358
  ], e.prototype, "disabled", 2);
339
359
  o([
340
- s({ type: Boolean, reflect: !0 })
360
+ r({ type: Boolean, reflect: !0 })
341
361
  ], e.prototype, "collapsible", 2);
342
362
  o([
343
- s({ type: String, reflect: !0 })
363
+ r({ type: String, reflect: !0 })
344
364
  ], e.prototype, "collapsed", 2);
365
+ o([
366
+ r({ type: String, attribute: "label-resize" })
367
+ ], e.prototype, "labelResize", 2);
368
+ o([
369
+ r({ type: String, attribute: "label-collapse-start" })
370
+ ], e.prototype, "labelCollapseStart", 2);
371
+ o([
372
+ r({ type: String, attribute: "label-collapse-end" })
373
+ ], e.prototype, "labelCollapseEnd", 2);
374
+ o([
375
+ r({ attribute: !1 })
376
+ ], e.prototype, "labelExpand", 2);
345
377
  e = o([
346
378
  v("hx-split-panel")
347
379
  ], e);
348
380
  export {
349
381
  e as H
350
382
  };
351
- //# sourceMappingURL=hx-split-panel-Cxkeauwe.js.map
383
+ //# sourceMappingURL=hx-split-panel-BPMWKPGu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-split-panel-BPMWKPGu.js","sources":["../../src/components/hx-split-panel/hx-split-panel.styles.ts","../../src/components/hx-split-panel/hx-split-panel.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixSplitPanelStyles = css`\n :host {\n display: flex;\n --_divider-size: var(--hx-split-panel-divider-size, 4px);\n --_divider-color: var(--hx-split-panel-divider-color, var(--hx-color-neutral-200));\n --_divider-hover-color: var(--hx-split-panel-divider-hover-color, var(--hx-color-primary-500));\n overflow: hidden;\n }\n\n :host([orientation='horizontal']) {\n flex-direction: row;\n width: 100%;\n height: 100%;\n }\n\n :host([orientation='vertical']) {\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .panel {\n overflow: auto;\n min-width: 0;\n min-height: 0;\n }\n\n .panel--start {\n flex-shrink: 0;\n }\n\n .panel--end {\n flex: 1;\n }\n\n :host([orientation='horizontal']) .panel--start {\n height: 100%;\n }\n\n :host([orientation='vertical']) .panel--start {\n width: 100%;\n }\n\n /* ─── Divider Track (flex child wrapper) ─── */\n\n .divider-track {\n flex-shrink: 0;\n position: relative;\n overflow: visible;\n display: flex;\n align-items: stretch;\n }\n\n :host([orientation='horizontal']) .divider-track {\n width: var(--_divider-size);\n height: 100%;\n }\n\n :host([orientation='vertical']) .divider-track {\n width: 100%;\n height: var(--_divider-size);\n }\n\n /* ─── Divider (separator role — no interactive children) ─── */\n\n .divider {\n flex: 1;\n background-color: var(--_divider-color);\n cursor: col-resize;\n transition: background-color var(--hx-transition-fast, 150ms ease);\n touch-action: none;\n user-select: none;\n -webkit-user-select: none;\n outline: none;\n }\n\n :host([orientation='horizontal']) .divider {\n cursor: col-resize;\n }\n\n :host([orientation='vertical']) .divider {\n cursor: row-resize;\n }\n\n .divider:hover,\n .divider:focus-visible {\n background-color: var(--_divider-hover-color);\n }\n\n .divider:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(\n --hx-split-panel-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 box-shadow: 0 0 0 4px color-mix(in srgb, var(--_divider-hover-color) 30%, transparent);\n }\n\n :host([disabled]) .divider {\n cursor: default;\n pointer-events: none;\n }\n\n :host([disabled]) .divider:hover,\n :host([disabled]) .divider:focus-visible {\n background-color: var(--_divider-color);\n outline: none;\n box-shadow: none;\n }\n\n /* ─── Collapse Controls (siblings of separator, not children) ─── */\n\n .collapse-controls {\n position: absolute;\n top: 50%;\n inset-inline-start: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n z-index: 2;\n pointer-events: auto;\n }\n\n :host([orientation='vertical']) .collapse-controls {\n flex-direction: row;\n }\n\n .collapse-btn {\n background: var(--_divider-hover-color);\n border: 2px solid var(--hx-color-neutral-0);\n color: var(--hx-color-neutral-0);\n width: 20px;\n height: 20px;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 8px;\n padding: 0;\n line-height: 1;\n flex-shrink: 0;\n }\n\n .collapse-btn:hover {\n filter: brightness(1.1);\n }\n\n .collapse-btn:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(\n --hx-split-panel-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 @media (prefers-reduced-motion: reduce) {\n .divider {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixSplitPanelStyles } from './hx-split-panel.styles.js';\n\n/**\n * A resizable two-pane layout with a draggable divider.\n *\n * @summary Resizable split panel with start and end panes.\n *\n * @tag hx-split-panel\n *\n * @slot start - The first (start) panel content.\n * @slot end - The second (end) panel content.\n *\n * @csspart start - The start panel container.\n * @csspart divider - The draggable divider element.\n * @csspart end - The end panel container.\n *\n * @fires hx-reposition - Fired when the divider is moved. Detail: `{ position: number }`.\n *\n * @cssprop [--hx-split-panel-divider-size=4px] - Width (horizontal) or height (vertical) of the divider.\n * @cssprop [--hx-split-panel-divider-color=var(--hx-color-neutral-200)] - Default divider color.\n * @cssprop [--hx-split-panel-divider-hover-color=var(--hx-color-primary-500)] - Divider color on hover/focus.\n *\n * @example Drupal Twig usage:\n * ```twig\n * <hx-split-panel\n * position=\"50\"\n * orientation=\"horizontal\"\n * min=\"10\"\n * max=\"90\"\n * collapsible\n * >\n * <div slot=\"start\">{{ start_content }}</div>\n * <div slot=\"end\">{{ end_content }}</div>\n * </hx-split-panel>\n *\n * Attribute-settable: position, position-in-pixels, orientation, disabled, min, max, collapsible, collapsed\n * JS-only (complex types): snap (use .snap=${[25, 50, 75]} in Lit templates,\n * or snap=\"[25,50,75]\" as JSON string in Twig)\n * ```\n */\n@customElement('hx-split-panel')\nexport class HelixSplitPanel extends LitElement {\n static override styles = [tokenStyles, helixSplitPanelStyles];\n\n /**\n * Position of the divider as a percentage (0–100) of the start panel.\n * @attr position\n */\n @property({ type: Number, reflect: true })\n position = 50;\n\n /**\n * Position of the divider in pixels (alternative to `position`).\n * When set, takes precedence over `position` until the host is measured.\n * @attr position-in-pixels\n */\n @property({ type: Number, attribute: 'position-in-pixels' })\n positionInPixels: number | undefined;\n\n /**\n * Orientation of the split.\n * @attr orientation\n */\n @property({ type: String, reflect: true })\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Minimum position as a percentage (0–100). Prevents full collapse of start panel.\n * @attr min\n */\n @property({ type: Number, reflect: true })\n min = 0;\n\n /**\n * Maximum position as a percentage (0–100). Prevents full expansion of start panel.\n * @attr max\n */\n @property({ type: Number, reflect: true })\n max = 100;\n\n /**\n * Snap points as an array of percentages. The divider snaps to the\n * nearest point within a 5% threshold.\n * Accepts JSON array string in HTML: snap=\"[25, 50, 75]\"\n * @attr snap\n */\n @property({\n attribute: 'snap',\n converter: {\n fromAttribute(value: string | null): number[] {\n if (!value) return [];\n try {\n const parsed = JSON.parse(value) as unknown;\n if (Array.isArray(parsed)) return (parsed as unknown[]).map(Number);\n return [];\n } catch {\n return value\n .split(',')\n .map((s) => Number(s.trim()))\n .filter((n) => !isNaN(n));\n }\n },\n toAttribute(value: number[]): string {\n return JSON.stringify(value);\n },\n },\n })\n snap: number[] = [];\n\n /**\n * When true, the divider cannot be dragged.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * When true, collapse/expand buttons appear on the divider.\n * @attr collapsible\n */\n @property({ type: Boolean, reflect: true })\n collapsible = false;\n\n /**\n * Which panel is collapsed: 'start', 'end', or null (not collapsed).\n * @attr collapsed\n */\n @property({ type: String, reflect: true })\n collapsed: 'start' | 'end' | null = null;\n\n /** Accessible label for the resize divider handle. */\n @property({ type: String, attribute: 'label-resize' })\n labelResize = 'Resize panels';\n\n /** Accessible label for the collapse-start panel button. */\n @property({ type: String, attribute: 'label-collapse-start' })\n labelCollapseStart = 'Collapse start panel';\n\n /** Accessible label for the collapse-end panel button. */\n @property({ type: String, attribute: 'label-collapse-end' })\n labelCollapseEnd = 'Collapse end panel';\n\n /**\n * Generates the accessible label for the expand button when a panel is collapsed.\n * @param side - which panel was collapsed\n */\n @property({ attribute: false })\n labelExpand: (side: 'start' | 'end') => string = (side) => `Expand ${side} panel`;\n\n /**\n * Whether the user is currently dragging the divider.\n * @internal\n */\n private _dragging = false;\n /**\n * The pointer coordinate (clientX or clientY) at the start of a drag gesture.\n * @internal\n */\n private _dragStart = 0;\n /**\n * The divider position percentage at the moment a drag gesture begins, used to compute deltas.\n * @internal\n */\n private _positionAtDragStart = 0;\n /**\n * The position saved before a collapse occurs, restored when the panel is expanded.\n * @internal\n */\n private _positionBeforeCollapse = 50;\n /**\n * Cached container width measured once at drag start to avoid layout thrash on every pointermove.\n * @internal\n */\n private _cachedContainerWidth = 0;\n /**\n * Cached container height measured once at drag start to avoid layout thrash on every pointermove.\n * @internal\n */\n private _cachedContainerHeight = 0;\n\n /** @internal */\n private _clamp(value: number): number {\n return Math.min(this.max, Math.max(this.min, value));\n }\n\n /** @internal */\n private _snapToPoint(value: number): number {\n if (!this.snap.length) return value;\n const threshold = 5;\n for (const point of this.snap) {\n if (Math.abs(value - point) <= threshold) return point;\n }\n return value;\n }\n\n /** @internal */\n private _setPosition(percent: number): void {\n const clamped = this._clamp(this._snapToPoint(percent));\n if (clamped === this.position) return;\n this.position = clamped;\n this.dispatchEvent(\n new CustomEvent<{ position: number }>('hx-reposition', {\n detail: { position: this.position },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /** @internal */\n private _getHostSize(): number {\n if (this.orientation === 'horizontal') {\n return this.offsetWidth;\n }\n return this.offsetHeight;\n }\n\n /**\n * Initiates a drag gesture when the divider receives a pointerdown event.\n * @internal\n */\n private _onPointerDown = (e: PointerEvent): void => {\n if (this.disabled) return;\n const divider = e.currentTarget as HTMLElement;\n divider.setPointerCapture(e.pointerId);\n this._dragging = true;\n this._dragStart = this.orientation === 'horizontal' ? e.clientX : e.clientY;\n this._positionAtDragStart = this.position;\n // Cache container dimensions once at drag start to avoid forced layout on every pointermove\n this._cachedContainerWidth = this.offsetWidth;\n this._cachedContainerHeight = this.offsetHeight;\n e.preventDefault();\n };\n\n /**\n * Updates the divider position during an active drag gesture.\n * @internal\n */\n private _onPointerMove = (e: PointerEvent): void => {\n if (!this._dragging) return;\n const current = this.orientation === 'horizontal' ? e.clientX : e.clientY;\n const delta = current - this._dragStart;\n const hostSize =\n this.orientation === 'horizontal' ? this._cachedContainerWidth : this._cachedContainerHeight;\n if (hostSize === 0) return;\n const deltaPercent = (delta / hostSize) * 100;\n this._setPosition(this._positionAtDragStart + deltaPercent);\n };\n\n /**\n * Ends the drag gesture when the pointer is released.\n * @internal\n */\n private _onPointerUp = (): void => {\n this._dragging = false;\n this._cachedContainerWidth = 0;\n this._cachedContainerHeight = 0;\n };\n\n /**\n * Handles keyboard navigation on the divider — arrow keys adjust position, Home/End jump to min/max.\n * @internal\n */\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (this.disabled) return;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault();\n this._setPosition(this.position - 1);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault();\n this._setPosition(this.position + 1);\n break;\n case 'PageUp':\n e.preventDefault();\n this._setPosition(this.position + 10);\n break;\n case 'PageDown':\n e.preventDefault();\n this._setPosition(this.position - 10);\n break;\n case 'Home':\n e.preventDefault();\n this._setPosition(this.min);\n break;\n case 'End':\n e.preventDefault();\n this._setPosition(this.max);\n break;\n }\n };\n\n /**\n * Collapses the start panel by setting `collapsed` to `'start'`.\n * @internal\n */\n private _collapseStart = (): void => {\n this.collapsed = 'start';\n };\n\n /**\n * Collapses the end panel by setting `collapsed` to `'end'`.\n * @internal\n */\n private _collapseEnd = (): void => {\n this.collapsed = 'end';\n };\n\n /**\n * Expands a collapsed panel by resetting `collapsed` to null.\n * @internal\n */\n private _expand = (): void => {\n this.collapsed = null;\n };\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n super.willUpdate(changedProperties);\n if (!changedProperties.has('collapsed')) return;\n\n const prev = changedProperties.get('collapsed');\n\n if (this.collapsed === 'start') {\n // Save restore point when transitioning from non-collapsed state (or initial render)\n if (prev === null || prev === undefined) this._positionBeforeCollapse = this.position;\n this._setPosition(this.min);\n } else if (this.collapsed === 'end') {\n if (prev === null || prev === undefined) this._positionBeforeCollapse = this.position;\n this._setPosition(this.max);\n } else if (this.collapsed === null && prev !== null && prev !== undefined) {\n // Only expand when transitioning from an explicitly collapsed state (not first render)\n this._setPosition(this._positionBeforeCollapse);\n }\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.positionInPixels !== undefined) {\n // Convert pixel position to percentage after first paint\n requestAnimationFrame(() => {\n if (this.positionInPixels !== undefined) {\n const hostSize = this._getHostSize();\n if (hostSize > 0) {\n this._setPosition((this.positionInPixels / hostSize) * 100);\n }\n }\n });\n }\n }\n\n /** @internal */\n private _startPanelStyleMap(): Record<string, string> {\n if (this.orientation === 'horizontal') {\n return { width: `${this.position}%` };\n }\n return { height: `${this.position}%` };\n }\n\n override render() {\n return html`\n <div part=\"start\" class=\"panel panel--start\" style=${styleMap(this._startPanelStyleMap())}>\n <slot name=\"start\"></slot>\n </div>\n <div class=\"divider-track\">\n <div\n part=\"divider\"\n class=\"divider\"\n role=\"separator\"\n aria-label=${this.labelResize}\n aria-orientation=${this.orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n aria-valuenow=${this.position}\n aria-valuemin=${this.min}\n aria-valuemax=${this.max}\n aria-disabled=${this.disabled ? 'true' : nothing}\n tabindex=${this.disabled ? '-1' : '0'}\n @pointerdown=${this._onPointerDown}\n @pointermove=${this._onPointerMove}\n @pointerup=${this._onPointerUp}\n @keydown=${this._onKeyDown}\n ></div>\n ${this.collapsible\n ? this.collapsed\n ? html`<div class=\"collapse-controls\">\n <button\n type=\"button\"\n class=\"collapse-btn\"\n aria-label=${this.labelExpand(this.collapsed as 'start' | 'end')}\n @click=${this._expand}\n >\n ${this.collapsed === 'start' ? '▶' : '◀'}\n </button>\n </div>`\n : html`<div class=\"collapse-controls\">\n <button\n type=\"button\"\n class=\"collapse-btn\"\n aria-label=${this.labelCollapseStart}\n @click=${this._collapseStart}\n >\n ◀\n </button>\n <button\n type=\"button\"\n class=\"collapse-btn\"\n aria-label=${this.labelCollapseEnd}\n @click=${this._collapseEnd}\n >\n ▶\n </button>\n </div>`\n : nothing}\n </div>\n <div part=\"end\" class=\"panel panel--end\">\n <slot name=\"end\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-split-panel': HelixSplitPanel;\n }\n}\n"],"names":["helixSplitPanelStyles","css","HelixSplitPanel","LitElement","side","e","delta","hostSize","deltaPercent","value","threshold","point","percent","clamped","changedProperties","prev","html","styleMap","nothing","tokenStyles","__decorateClass","property","parsed","s","n","customElement"],"mappings":"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"}