@helixui/library 1.0.1 → 1.1.2

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 (466) hide show
  1. package/custom-elements.json +2936 -9700
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts +7 -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 +23 -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 +8 -1
  18. package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
  19. package/dist/components/hx-badge/index.js +1 -1
  20. package/dist/components/hx-banner/hx-banner.d.ts +11 -0
  21. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
  22. package/dist/components/hx-banner/index.js +1 -1
  23. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +17 -2
  24. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  25. package/dist/components/hx-breadcrumb/index.js +1 -1
  26. package/dist/components/hx-button/hx-button.d.ts +6 -0
  27. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  28. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  29. package/dist/components/hx-button/index.js +1 -1
  30. package/dist/components/hx-card/hx-card.d.ts +7 -0
  31. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  32. package/dist/components/hx-card/index.js +1 -1
  33. package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -0
  34. package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
  35. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts +2 -0
  36. package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -0
  37. package/dist/components/hx-carousel/hx-carousel.d.ts +27 -0
  38. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  39. package/dist/components/hx-carousel/index.js +1 -1
  40. package/dist/components/hx-checkbox/hx-checkbox.d.ts +18 -2
  41. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  42. package/dist/components/hx-checkbox/index.js +1 -1
  43. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +20 -4
  44. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  45. package/dist/components/hx-checkbox-group/index.js +1 -1
  46. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +10 -0
  47. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  48. package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
  49. package/dist/components/hx-code-snippet/index.js +1 -1
  50. package/dist/components/hx-color-picker/hx-color-picker.d.ts +70 -2
  51. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  52. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  53. package/dist/components/hx-color-picker/index.js +1 -1
  54. package/dist/components/hx-combobox/hx-combobox.d.ts +37 -2
  55. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  56. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  57. package/dist/components/hx-combobox/index.js +1 -1
  58. package/dist/components/hx-copy-button/hx-copy-button.d.ts +11 -0
  59. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  60. package/dist/components/hx-copy-button/index.js +1 -1
  61. package/dist/components/hx-counter/hx-counter.d.ts +12 -3
  62. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
  63. package/dist/components/hx-counter/index.js +1 -1
  64. package/dist/components/hx-data-table/hx-data-table.d.ts +19 -2
  65. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  66. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  67. package/dist/components/hx-data-table/index.js +1 -1
  68. package/dist/components/hx-date-picker/hx-date-picker.d.ts +62 -3
  69. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  70. package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
  71. package/dist/components/hx-date-picker/index.js +1 -1
  72. package/dist/components/hx-dialog/hx-dialog.d.ts +31 -4
  73. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  74. package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
  75. package/dist/components/hx-dialog/index.js +1 -1
  76. package/dist/components/hx-divider/hx-divider.d.ts +4 -1
  77. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  78. package/dist/components/hx-divider/index.js +1 -1
  79. package/dist/components/hx-drawer/hx-drawer.d.ts +25 -3
  80. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  81. package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
  82. package/dist/components/hx-drawer/index.js +1 -1
  83. package/dist/components/hx-dropdown/hx-dropdown.d.ts +15 -2
  84. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  85. package/dist/components/hx-dropdown/index.js +1 -1
  86. package/dist/components/hx-field/hx-field.d.ts +10 -2
  87. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  88. package/dist/components/hx-field/index.js +1 -1
  89. package/dist/components/hx-file-upload/hx-file-upload.d.ts +39 -2
  90. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  91. package/dist/components/hx-file-upload/hx-file-upload.styles.d.ts.map +1 -1
  92. package/dist/components/hx-file-upload/index.js +1 -1
  93. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  94. package/dist/components/hx-form/index.js +1 -1
  95. package/dist/components/hx-format-date/hx-format-date.d.ts +8 -0
  96. package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
  97. package/dist/components/hx-format-date/index.js +1 -1
  98. package/dist/components/hx-grid/hx-grid.d.ts +9 -3
  99. package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
  100. package/dist/components/hx-grid/index.js +1 -1
  101. package/dist/components/hx-help-text/index.js +1 -1
  102. package/dist/components/hx-icon/hx-icon.d.ts +10 -2
  103. package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
  104. package/dist/components/hx-icon/index.js +1 -1
  105. package/dist/components/hx-icon-button/hx-icon-button.d.ts +11 -0
  106. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  107. package/dist/components/hx-icon-button/index.js +1 -1
  108. package/dist/components/hx-image/hx-image.d.ts +8 -0
  109. package/dist/components/hx-image/hx-image.d.ts.map +1 -1
  110. package/dist/components/hx-image/index.js +1 -1
  111. package/dist/components/hx-link/hx-link.d.ts +3 -0
  112. package/dist/components/hx-link/hx-link.d.ts.map +1 -1
  113. package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
  114. package/dist/components/hx-link/index.js +1 -1
  115. package/dist/components/hx-list/hx-list-item.d.ts +8 -2
  116. package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
  117. package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
  118. package/dist/components/hx-list/hx-list.d.ts +6 -2
  119. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  120. package/dist/components/hx-list/index.js +1 -1
  121. package/dist/components/hx-menu/hx-menu-item.d.ts +11 -0
  122. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  123. package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
  124. package/dist/components/hx-menu/hx-menu.d.ts +10 -1
  125. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  126. package/dist/components/hx-menu/index.js +1 -1
  127. package/dist/components/hx-meter/hx-meter.d.ts +8 -0
  128. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  129. package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
  130. package/dist/components/hx-meter/index.js +1 -1
  131. package/dist/components/hx-nav/hx-nav.d.ts +15 -0
  132. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  133. package/dist/components/hx-nav/index.js +1 -1
  134. package/dist/components/hx-number-input/hx-number-input.d.ts +47 -1
  135. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  136. package/dist/components/hx-number-input/index.js +1 -1
  137. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +15 -0
  138. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  139. package/dist/components/hx-overflow-menu/index.js +1 -1
  140. package/dist/components/hx-pagination/hx-pagination.d.ts +30 -0
  141. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  142. package/dist/components/hx-pagination/index.js +1 -1
  143. package/dist/components/hx-popover/hx-popover.d.ts +53 -2
  144. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  145. package/dist/components/hx-popover/index.js +1 -1
  146. package/dist/components/hx-popup/hx-popup.d.ts +8 -0
  147. package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
  148. package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
  149. package/dist/components/hx-popup/index.js +1 -1
  150. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +8 -2
  151. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  152. package/dist/components/hx-progress-bar/hx-progress-bar.styles.d.ts.map +1 -1
  153. package/dist/components/hx-progress-bar/index.js +1 -1
  154. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +8 -2
  155. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  156. package/dist/components/hx-progress-ring/index.js +1 -1
  157. package/dist/components/hx-prose/hx-prose.d.ts +5 -3
  158. package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
  159. package/dist/components/hx-prose/index.js +1 -1
  160. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  161. package/dist/components/hx-radio-group/hx-radio.d.ts +4 -2
  162. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  163. package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
  164. package/dist/components/hx-radio-group/index.js +1 -1
  165. package/dist/components/hx-rating/hx-rating.d.ts +54 -2
  166. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  167. package/dist/components/hx-rating/index.js +1 -1
  168. package/dist/components/hx-select/hx-select.d.ts +22 -2
  169. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  170. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  171. package/dist/components/hx-select/index.js +1 -1
  172. package/dist/components/hx-side-nav/hx-nav-item.d.ts +6 -0
  173. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  174. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  175. package/dist/components/hx-side-nav/hx-side-nav.d.ts +6 -1
  176. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  177. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  178. package/dist/components/hx-side-nav/index.js +1 -1
  179. package/dist/components/hx-slider/hx-slider.d.ts +22 -1
  180. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  181. package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
  182. package/dist/components/hx-slider/index.js +1 -1
  183. package/dist/components/hx-spinner/hx-spinner.d.ts +3 -1
  184. package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
  185. package/dist/components/hx-spinner/index.js +1 -1
  186. package/dist/components/hx-split-button/hx-split-button.d.ts +12 -0
  187. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  188. package/dist/components/hx-split-button/index.js +1 -1
  189. package/dist/components/hx-split-panel/hx-split-panel.d.ts +32 -2
  190. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  191. package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
  192. package/dist/components/hx-split-panel/index.js +1 -1
  193. package/dist/components/hx-stack/index.js +1 -1
  194. package/dist/components/hx-stat/hx-stat.d.ts +5 -1
  195. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
  196. package/dist/components/hx-stat/index.js +1 -1
  197. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +13 -12
  198. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  199. package/dist/components/hx-status-indicator/index.js +1 -1
  200. package/dist/components/hx-steps/hx-step.d.ts +7 -9
  201. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  202. package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
  203. package/dist/components/hx-steps/hx-steps.d.ts +3 -3
  204. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  205. package/dist/components/hx-steps/index.js +1 -1
  206. package/dist/components/hx-switch/hx-switch.d.ts +21 -1
  207. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  208. package/dist/components/hx-switch/index.js +1 -1
  209. package/dist/components/hx-table/hx-table.d.ts +7 -2
  210. package/dist/components/hx-table/hx-table.d.ts.map +1 -1
  211. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
  212. package/dist/components/hx-table/hx-th.d.ts +4 -0
  213. package/dist/components/hx-table/hx-th.d.ts.map +1 -1
  214. package/dist/components/hx-table/index.js +1 -1
  215. package/dist/components/hx-tabs/hx-tab.d.ts +3 -0
  216. package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
  217. package/dist/components/hx-tabs/hx-tabs.d.ts +6 -0
  218. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  219. package/dist/components/hx-tabs/index.js +1 -1
  220. package/dist/components/hx-tag/hx-tag.d.ts +2 -0
  221. package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
  222. package/dist/components/hx-tag/index.js +1 -1
  223. package/dist/components/hx-text/hx-text.d.ts +1 -0
  224. package/dist/components/hx-text/hx-text.d.ts.map +1 -1
  225. package/dist/components/hx-text/index.js +1 -1
  226. package/dist/components/hx-text-input/hx-text-input.d.ts +8 -3
  227. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  228. package/dist/components/hx-text-input/index.js +1 -1
  229. package/dist/components/hx-textarea/hx-textarea.d.ts +9 -3
  230. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  231. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  232. package/dist/components/hx-textarea/index.js +1 -1
  233. package/dist/components/hx-theme/hx-theme.d.ts +2 -2
  234. package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
  235. package/dist/components/hx-time-picker/hx-time-picker.d.ts +22 -3
  236. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  237. package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
  238. package/dist/components/hx-time-picker/index.js +1 -1
  239. package/dist/components/hx-toast/hx-toast.d.ts +8 -0
  240. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  241. package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
  242. package/dist/components/hx-toast/index.js +1 -1
  243. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +23 -0
  244. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  245. package/dist/components/hx-toggle-button/index.js +1 -1
  246. package/dist/components/hx-tooltip/hx-tooltip.d.ts +57 -0
  247. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  248. package/dist/components/hx-tooltip/index.js +1 -1
  249. package/dist/components/hx-top-nav/hx-top-nav.d.ts +4 -0
  250. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  251. package/dist/components/hx-top-nav/index.js +1 -1
  252. package/dist/components/hx-tree-view/hx-tree-item.d.ts +2 -0
  253. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  254. package/dist/components/hx-tree-view/hx-tree-view.d.ts +11 -0
  255. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  256. package/dist/components/hx-tree-view/index.js +1 -1
  257. package/dist/index.js +70 -70
  258. package/dist/shared/{hx-accordion-DT8qHOay.js → hx-accordion-D1kFhdeQ.js} +15 -3
  259. package/dist/shared/hx-accordion-D1kFhdeQ.js.map +1 -0
  260. package/dist/shared/{hx-action-bar-we_WJety.js → hx-action-bar-D4bulGQP.js} +38 -31
  261. package/dist/shared/hx-action-bar-D4bulGQP.js.map +1 -0
  262. package/dist/shared/{hx-alert-D6uok29t.js → hx-alert-CSxCF2rr.js} +74 -53
  263. package/dist/shared/hx-alert-CSxCF2rr.js.map +1 -0
  264. package/dist/shared/{hx-avatar-Cep6Urm3.js → hx-avatar-Cun-O99h.js} +5 -1
  265. package/dist/shared/hx-avatar-Cun-O99h.js.map +1 -0
  266. package/dist/shared/{hx-badge-BeuWuUj_.js → hx-badge-CsFd2xtw.js} +53 -43
  267. package/dist/shared/hx-badge-CsFd2xtw.js.map +1 -0
  268. package/dist/shared/{hx-banner-DnCBJtRR.js → hx-banner-BTV-X2xF.js} +55 -43
  269. package/dist/shared/{hx-banner-DnCBJtRR.js.map → hx-banner-BTV-X2xF.js.map} +1 -1
  270. package/dist/shared/{hx-breadcrumb-item-Bj2UqhzR.js → hx-breadcrumb-item-4IwaLgaO.js} +34 -22
  271. package/dist/shared/hx-breadcrumb-item-4IwaLgaO.js.map +1 -0
  272. package/dist/shared/{hx-button-Cbhqpm5i.js → hx-button-7k-KeCYU.js} +29 -15
  273. package/dist/shared/hx-button-7k-KeCYU.js.map +1 -0
  274. package/dist/shared/{hx-card-B9j2SHyI.js → hx-card-0hT3G5hi.js} +10 -3
  275. package/dist/shared/hx-card-0hT3G5hi.js.map +1 -0
  276. package/dist/shared/{hx-carousel-item-Be0bC-7o.js → hx-carousel-item-DgeYyYZJ.js} +106 -89
  277. package/dist/shared/hx-carousel-item-DgeYyYZJ.js.map +1 -0
  278. package/dist/shared/{hx-checkbox-CuaJqEo7.js → hx-checkbox-BvjO-O41.js} +13 -6
  279. package/dist/shared/hx-checkbox-BvjO-O41.js.map +1 -0
  280. package/dist/shared/{hx-checkbox-group-ydUdV9Sx.js → hx-checkbox-group-Z5VvWzcj.js} +50 -37
  281. package/dist/shared/hx-checkbox-group-Z5VvWzcj.js.map +1 -0
  282. package/dist/shared/{hx-code-snippet-DBwIjl5p.js → hx-code-snippet-DqzPkH4K.js} +17 -1
  283. package/dist/shared/hx-code-snippet-DqzPkH4K.js.map +1 -0
  284. package/dist/shared/hx-color-picker-Da8z6AlQ.js +596 -0
  285. package/dist/shared/hx-color-picker-Da8z6AlQ.js.map +1 -0
  286. package/dist/shared/{hx-combobox-CNvY-es8.js → hx-combobox-CivfelTS.js} +93 -459
  287. package/dist/shared/hx-combobox-CivfelTS.js.map +1 -0
  288. package/dist/shared/{hx-copy-button-CLBA31to.js → hx-copy-button--0dymSvw.js} +9 -1
  289. package/dist/shared/{hx-copy-button-CLBA31to.js.map → hx-copy-button--0dymSvw.js.map} +1 -1
  290. package/dist/shared/{hx-counter-D-1NXzGs.js → hx-counter-Duf00H7p.js} +58 -49
  291. package/dist/shared/hx-counter-Duf00H7p.js.map +1 -0
  292. package/dist/shared/{hx-data-table-BwoJCFgs.js → hx-data-table-BWvd5NNx.js} +123 -89
  293. package/dist/shared/hx-data-table-BWvd5NNx.js.map +1 -0
  294. package/dist/shared/{hx-date-picker-DDcIBJir.js → hx-date-picker-6voxxxNE.js} +119 -485
  295. package/dist/shared/hx-date-picker-6voxxxNE.js.map +1 -0
  296. package/dist/shared/{hx-dialog-M7so0sRT.js → hx-dialog-DkUSnVgw.js} +72 -52
  297. package/dist/shared/hx-dialog-DkUSnVgw.js.map +1 -0
  298. package/dist/shared/{hx-divider-XgWIz4Mr.js → hx-divider-DNNs4e8q.js} +2 -1
  299. package/dist/shared/{hx-divider-XgWIz4Mr.js.map → hx-divider-DNNs4e8q.js.map} +1 -1
  300. package/dist/shared/{hx-drawer-CYxuhIQ0.js → hx-drawer-CJcRZcns.js} +85 -56
  301. package/dist/shared/hx-drawer-CJcRZcns.js.map +1 -0
  302. package/dist/shared/{hx-dropdown-7cfowTWv.js → hx-dropdown-Bo0KTM1A.js} +29 -20
  303. package/dist/shared/hx-dropdown-Bo0KTM1A.js.map +1 -0
  304. package/dist/shared/{hx-field-CDP8EXuj.js → hx-field-3MmzJ4kZ.js} +21 -13
  305. package/dist/shared/hx-field-3MmzJ4kZ.js.map +1 -0
  306. package/dist/shared/{hx-file-upload-9HbONfqt.js → hx-file-upload-ByjAgfNy.js} +103 -64
  307. package/dist/shared/hx-file-upload-ByjAgfNy.js.map +1 -0
  308. package/dist/shared/hx-form-BpS6v3Iu.js +258 -0
  309. package/dist/shared/hx-form-BpS6v3Iu.js.map +1 -0
  310. package/dist/shared/{hx-format-date-BsVr8gpD.js → hx-format-date-BdnWV2kX.js} +7 -1
  311. package/dist/shared/hx-format-date-BdnWV2kX.js.map +1 -0
  312. package/dist/shared/{hx-grid-BsDBCTbt.js → hx-grid-gEjuF0cR.js} +25 -18
  313. package/dist/shared/hx-grid-gEjuF0cR.js.map +1 -0
  314. package/dist/shared/{hx-help-text-DaOPN1iB.js → hx-help-text-BAcEGRUE.js} +2 -2
  315. package/dist/shared/{hx-help-text-DaOPN1iB.js.map → hx-help-text-BAcEGRUE.js.map} +1 -1
  316. package/dist/shared/{hx-icon--xsJztDh.js → hx-icon-CP6OnLoM.js} +6 -1
  317. package/dist/shared/hx-icon-CP6OnLoM.js.map +1 -0
  318. package/dist/shared/{hx-icon-button-iu0i_faq.js → hx-icon-button-DzH_bRtC.js} +15 -1
  319. package/dist/shared/{hx-icon-button-iu0i_faq.js.map → hx-icon-button-DzH_bRtC.js.map} +1 -1
  320. package/dist/shared/{hx-image-xyb_tHCR.js → hx-image-C6pGiI6c.js} +6 -1
  321. package/dist/shared/hx-image-C6pGiI6c.js.map +1 -0
  322. package/dist/shared/{hx-link-DfNy_UU8.js → hx-link-Tmk_YPvW.js} +46 -37
  323. package/dist/shared/hx-link-Tmk_YPvW.js.map +1 -0
  324. package/dist/shared/{hx-list-CdRNgeoP.js → hx-list-DwInEX2H.js} +63 -37
  325. package/dist/shared/hx-list-DwInEX2H.js.map +1 -0
  326. package/dist/shared/{hx-menu-divider-DR8klkFT.js → hx-menu-divider-DR4G_rqw.js} +71 -40
  327. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +1 -0
  328. package/dist/shared/{hx-meter-CZ7lnMra.js → hx-meter-uXkTZq-W.js} +77 -61
  329. package/dist/shared/hx-meter-uXkTZq-W.js.map +1 -0
  330. package/dist/shared/{hx-nav-DM6-cGKF.js → hx-nav-3JsN2Oak.js} +64 -47
  331. package/dist/shared/hx-nav-3JsN2Oak.js.map +1 -0
  332. package/dist/shared/{hx-nav-item-D54-5eUM.js → hx-nav-item-D3EJatzc.js} +40 -16
  333. package/dist/shared/hx-nav-item-D3EJatzc.js.map +1 -0
  334. package/dist/shared/{hx-number-input-BP6TIA92.js → hx-number-input-CIpL2BEh.js} +65 -34
  335. package/dist/shared/hx-number-input-CIpL2BEh.js.map +1 -0
  336. package/dist/shared/{hx-overflow-menu-CobkjAb8.js → hx-overflow-menu-2kgOJ_ht.js} +76 -64
  337. package/dist/shared/hx-overflow-menu-2kgOJ_ht.js.map +1 -0
  338. package/dist/shared/{hx-pagination-10dpXS95.js → hx-pagination-Blt-fFqV.js} +113 -94
  339. package/dist/shared/hx-pagination-Blt-fFqV.js.map +1 -0
  340. package/dist/shared/{hx-popover-ULjonbaO.js → hx-popover-DxE67miP.js} +71 -66
  341. package/dist/shared/hx-popover-DxE67miP.js.map +1 -0
  342. package/dist/shared/{hx-popup-CYf9Q5sj.js → hx-popup-Dg6n_PbY.js} +13 -1
  343. package/dist/shared/hx-popup-Dg6n_PbY.js.map +1 -0
  344. package/dist/shared/{hx-progress-bar-CnTibV63.js → hx-progress-bar-Dm_EHyng.js} +65 -47
  345. package/dist/shared/hx-progress-bar-Dm_EHyng.js.map +1 -0
  346. package/dist/shared/{hx-progress-ring-BHJBaXNk.js → hx-progress-ring-DpxBDD5d.js} +35 -28
  347. package/dist/shared/hx-progress-ring-DpxBDD5d.js.map +1 -0
  348. package/dist/shared/hx-prose-Ml_L2zje.js +59 -0
  349. package/dist/shared/hx-prose-Ml_L2zje.js.map +1 -0
  350. package/dist/shared/{hx-radio-BnKcRuQu.js → hx-radio-BywgVSEu.js} +7 -8
  351. package/dist/shared/hx-radio-BywgVSEu.js.map +1 -0
  352. package/dist/shared/{hx-rating-Y_t7Z4qb.js → hx-rating-CUWBQ0fZ.js} +131 -64
  353. package/dist/shared/hx-rating-CUWBQ0fZ.js.map +1 -0
  354. package/dist/shared/{hx-select-C50lD7NS.js → hx-select-BwDwxk-M.js} +107 -169
  355. package/dist/shared/hx-select-BwDwxk-M.js.map +1 -0
  356. package/dist/shared/hx-skeleton-BHvALyd7.js.map +1 -1
  357. package/dist/shared/{hx-slider-CprSNrRi.js → hx-slider-D_0EKJyk.js} +23 -7
  358. package/dist/shared/hx-slider-D_0EKJyk.js.map +1 -0
  359. package/dist/shared/{hx-spinner-BOApJ-g9.js → hx-spinner-DMn4SChS.js} +35 -28
  360. package/dist/shared/hx-spinner-DMn4SChS.js.map +1 -0
  361. package/dist/shared/{hx-split-button-CHGy4FUc.js → hx-split-button-CypgLXw1.js} +14 -3
  362. package/dist/shared/{hx-split-button-CHGy4FUc.js.map → hx-split-button-CypgLXw1.js.map} +1 -1
  363. package/dist/shared/{hx-split-panel-DYtB45Tr.js → hx-split-panel-CV_Kr4EK.js} +58 -37
  364. package/dist/shared/hx-split-panel-CV_Kr4EK.js.map +1 -0
  365. package/dist/shared/{hx-stack-CfoW7jU7.js → hx-stack-BStY1RmV.js} +29 -29
  366. package/dist/shared/hx-stack-BStY1RmV.js.map +1 -0
  367. package/dist/shared/{hx-stat-C2wfph8W.js → hx-stat-CHntLHJM.js} +18 -10
  368. package/dist/shared/hx-stat-CHntLHJM.js.map +1 -0
  369. package/dist/shared/{hx-status-indicator-oYWOkWlD.js → hx-status-indicator-C1BwEvUw.js} +15 -12
  370. package/dist/shared/hx-status-indicator-C1BwEvUw.js.map +1 -0
  371. package/dist/shared/{hx-step-DYoIumpR.js → hx-step-BIVWSPxd.js} +45 -33
  372. package/dist/shared/hx-step-BIVWSPxd.js.map +1 -0
  373. package/dist/shared/{hx-switch-DkKchcuP.js → hx-switch-BgX8kuWt.js} +12 -3
  374. package/dist/shared/hx-switch-BgX8kuWt.js.map +1 -0
  375. package/dist/shared/{hx-tab-panel-BRNcLICw.js → hx-tab-panel-DhOq67jj.js} +11 -2
  376. package/dist/shared/hx-tab-panel-DhOq67jj.js.map +1 -0
  377. package/dist/shared/{hx-tag-B3N-vZ6B.js → hx-tag-CzOTDcXI.js} +2 -1
  378. package/dist/shared/{hx-tag-B3N-vZ6B.js.map → hx-tag-CzOTDcXI.js.map} +1 -1
  379. package/dist/shared/{hx-td-CVwCGBYf.js → hx-td-h6oeW6YC.js} +43 -41
  380. package/dist/shared/hx-td-h6oeW6YC.js.map +1 -0
  381. package/dist/shared/{hx-text-NjKoQATI.js → hx-text-DTXjiviE.js} +2 -1
  382. package/dist/shared/{hx-text-NjKoQATI.js.map → hx-text-DTXjiviE.js.map} +1 -1
  383. package/dist/shared/{hx-text-input-CCZZbWQ9.js → hx-text-input-CqEdDHMU.js} +82 -65
  384. package/dist/shared/hx-text-input-CqEdDHMU.js.map +1 -0
  385. package/dist/shared/{hx-textarea-BsQdB1Rk.js → hx-textarea-BgX7rxyo.js} +21 -12
  386. package/dist/shared/hx-textarea-BgX7rxyo.js.map +1 -0
  387. package/dist/shared/hx-theme-6GDoUG8j.js.map +1 -1
  388. package/dist/shared/{hx-time-picker-CJcIjH3C.js → hx-time-picker-DmLu7WUC.js} +73 -273
  389. package/dist/shared/hx-time-picker-DmLu7WUC.js.map +1 -0
  390. package/dist/shared/{hx-toggle-button-D4F1soEM.js → hx-toggle-button-D1jpDvSA.js} +75 -38
  391. package/dist/shared/hx-toggle-button-D1jpDvSA.js.map +1 -0
  392. package/dist/shared/{hx-tooltip-Bk1iQRHs.js → hx-tooltip-kh7QFPKu.js} +66 -49
  393. package/dist/shared/hx-tooltip-kh7QFPKu.js.map +1 -0
  394. package/dist/shared/{hx-top-nav-D2bQpns3.js → hx-top-nav-DYlnzDaU.js} +3 -1
  395. package/dist/shared/{hx-top-nav-D2bQpns3.js.map → hx-top-nav-DYlnzDaU.js.map} +1 -1
  396. package/dist/shared/{hx-tree-item-BobGN76x.js → hx-tree-item-BP6UF_H1.js} +29 -16
  397. package/dist/shared/hx-tree-item-BP6UF_H1.js.map +1 -0
  398. package/dist/shared/{toast-factory-MvMMreTu.js → toast-factory-DTy-qN8r.js} +70 -59
  399. package/dist/shared/toast-factory-DTy-qN8r.js.map +1 -0
  400. package/dist/styles/shared-field.styles.d.ts +6 -0
  401. package/dist/styles/shared-field.styles.d.ts.map +1 -0
  402. package/package.json +2 -5
  403. package/dist/shared/hx-accordion-DT8qHOay.js.map +0 -1
  404. package/dist/shared/hx-action-bar-we_WJety.js.map +0 -1
  405. package/dist/shared/hx-alert-D6uok29t.js.map +0 -1
  406. package/dist/shared/hx-avatar-Cep6Urm3.js.map +0 -1
  407. package/dist/shared/hx-badge-BeuWuUj_.js.map +0 -1
  408. package/dist/shared/hx-breadcrumb-item-Bj2UqhzR.js.map +0 -1
  409. package/dist/shared/hx-button-Cbhqpm5i.js.map +0 -1
  410. package/dist/shared/hx-card-B9j2SHyI.js.map +0 -1
  411. package/dist/shared/hx-carousel-item-Be0bC-7o.js.map +0 -1
  412. package/dist/shared/hx-checkbox-CuaJqEo7.js.map +0 -1
  413. package/dist/shared/hx-checkbox-group-ydUdV9Sx.js.map +0 -1
  414. package/dist/shared/hx-code-snippet-DBwIjl5p.js.map +0 -1
  415. package/dist/shared/hx-color-picker-Bb2UPVc3.js +0 -803
  416. package/dist/shared/hx-color-picker-Bb2UPVc3.js.map +0 -1
  417. package/dist/shared/hx-combobox-CNvY-es8.js.map +0 -1
  418. package/dist/shared/hx-counter-D-1NXzGs.js.map +0 -1
  419. package/dist/shared/hx-data-table-BwoJCFgs.js.map +0 -1
  420. package/dist/shared/hx-date-picker-DDcIBJir.js.map +0 -1
  421. package/dist/shared/hx-dialog-M7so0sRT.js.map +0 -1
  422. package/dist/shared/hx-drawer-CYxuhIQ0.js.map +0 -1
  423. package/dist/shared/hx-dropdown-7cfowTWv.js.map +0 -1
  424. package/dist/shared/hx-field-CDP8EXuj.js.map +0 -1
  425. package/dist/shared/hx-file-upload-9HbONfqt.js.map +0 -1
  426. package/dist/shared/hx-form-BFv_N1dm.js +0 -1272
  427. package/dist/shared/hx-form-BFv_N1dm.js.map +0 -1
  428. package/dist/shared/hx-format-date-BsVr8gpD.js.map +0 -1
  429. package/dist/shared/hx-grid-BsDBCTbt.js.map +0 -1
  430. package/dist/shared/hx-icon--xsJztDh.js.map +0 -1
  431. package/dist/shared/hx-image-xyb_tHCR.js.map +0 -1
  432. package/dist/shared/hx-link-DfNy_UU8.js.map +0 -1
  433. package/dist/shared/hx-list-CdRNgeoP.js.map +0 -1
  434. package/dist/shared/hx-menu-divider-DR8klkFT.js.map +0 -1
  435. package/dist/shared/hx-meter-CZ7lnMra.js.map +0 -1
  436. package/dist/shared/hx-nav-DM6-cGKF.js.map +0 -1
  437. package/dist/shared/hx-nav-item-D54-5eUM.js.map +0 -1
  438. package/dist/shared/hx-number-input-BP6TIA92.js.map +0 -1
  439. package/dist/shared/hx-overflow-menu-CobkjAb8.js.map +0 -1
  440. package/dist/shared/hx-pagination-10dpXS95.js.map +0 -1
  441. package/dist/shared/hx-popover-ULjonbaO.js.map +0 -1
  442. package/dist/shared/hx-popup-CYf9Q5sj.js.map +0 -1
  443. package/dist/shared/hx-progress-bar-CnTibV63.js.map +0 -1
  444. package/dist/shared/hx-progress-ring-BHJBaXNk.js.map +0 -1
  445. package/dist/shared/hx-prose-DZh2KrMb.js +0 -876
  446. package/dist/shared/hx-prose-DZh2KrMb.js.map +0 -1
  447. package/dist/shared/hx-radio-BnKcRuQu.js.map +0 -1
  448. package/dist/shared/hx-rating-Y_t7Z4qb.js.map +0 -1
  449. package/dist/shared/hx-select-C50lD7NS.js.map +0 -1
  450. package/dist/shared/hx-slider-CprSNrRi.js.map +0 -1
  451. package/dist/shared/hx-spinner-BOApJ-g9.js.map +0 -1
  452. package/dist/shared/hx-split-panel-DYtB45Tr.js.map +0 -1
  453. package/dist/shared/hx-stack-CfoW7jU7.js.map +0 -1
  454. package/dist/shared/hx-stat-C2wfph8W.js.map +0 -1
  455. package/dist/shared/hx-status-indicator-oYWOkWlD.js.map +0 -1
  456. package/dist/shared/hx-step-DYoIumpR.js.map +0 -1
  457. package/dist/shared/hx-switch-DkKchcuP.js.map +0 -1
  458. package/dist/shared/hx-tab-panel-BRNcLICw.js.map +0 -1
  459. package/dist/shared/hx-td-CVwCGBYf.js.map +0 -1
  460. package/dist/shared/hx-text-input-CCZZbWQ9.js.map +0 -1
  461. package/dist/shared/hx-textarea-BsQdB1Rk.js.map +0 -1
  462. package/dist/shared/hx-time-picker-CJcIjH3C.js.map +0 -1
  463. package/dist/shared/hx-toggle-button-D4F1soEM.js.map +0 -1
  464. package/dist/shared/hx-tooltip-Bk1iQRHs.js.map +0 -1
  465. package/dist/shared/hx-tree-item-BobGN76x.js.map +0 -1
  466. package/dist/shared/toast-factory-MvMMreTu.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { css as g, LitElement as k, svg as f, html as c, nothing as v } from "lit";
2
- import { property as m, state as b, customElement as y } from "lit/decorators.js";
3
- import { classMap as x } from "lit/directives/class-map.js";
1
+ import { css as g, LitElement as k, svg as f, html as d, nothing as x } from "lit";
2
+ import { property as v, state as b, customElement as y } from "lit/decorators.js";
3
+ import { classMap as m } from "lit/directives/class-map.js";
4
4
  import { repeat as w } from "lit/directives/repeat.js";
5
- import { tokenStyles as $ } from "@helixui/tokens/lit";
6
- const C = g`
5
+ import { tokenStyles as C } from "@helixui/tokens/lit";
6
+ const $ = g`
7
7
  :host {
8
8
  display: block;
9
9
  font-family: var(--hx-nav-font-family, var(--hx-font-family-sans, sans-serif));
@@ -246,19 +246,20 @@ const C = g`
246
246
  }
247
247
  }
248
248
  `;
249
- var I = Object.defineProperty, O = Object.getOwnPropertyDescriptor, p = (e, n, o, a) => {
249
+ var I = Object.defineProperty, O = Object.getOwnPropertyDescriptor, h = (e, n, o, a) => {
250
250
  for (var t = a > 1 ? void 0 : a ? O(n, o) : n, i = e.length - 1, l; i >= 0; i--)
251
251
  (l = e[i]) && (t = (a ? l(n, o, t) : l(t)) || t);
252
252
  return a && t && I(n, o, t), t;
253
253
  };
254
- let d = class extends k {
254
+ let c = class extends k {
255
255
  constructor() {
256
- super(...arguments), this.items = [], this.orientation = "horizontal", this.label = "Main navigation", this._mobileOpen = !1, this._expandedIndex = null, this._boundOutsideClick = this._handleOutsideClick.bind(this);
256
+ super(...arguments), this.items = [], this.orientation = "horizontal", this.label = "Main navigation", this.labelOpenMenu = "Open navigation menu", this.labelCloseMenu = "Close navigation menu", this._mobileOpen = !1, this._expandedIndex = null, this._boundOutsideClick = this._handleOutsideClick.bind(this);
257
257
  }
258
258
  /**
259
259
  * Sanitizes a URL to prevent XSS via javascript: or data: URIs.
260
260
  * Only allows http:, https:, relative paths, and fragment-only links.
261
261
  */
262
+ /** @internal */
262
263
  _sanitizeHref(e) {
263
264
  if (!e || e === "#") return "#";
264
265
  if (e.startsWith("/") || e.startsWith("./") || e.startsWith("../") || e.startsWith("#"))
@@ -272,9 +273,11 @@ let d = class extends k {
272
273
  return "#";
273
274
  }
274
275
  // ─── Event Handling ───
276
+ /** @internal */
275
277
  _handleToggle() {
276
278
  this._mobileOpen = !this._mobileOpen, this._mobileOpen || (this._expandedIndex = null);
277
279
  }
280
+ /** @internal */
278
281
  _handleItemClick(e, n, o) {
279
282
  var a;
280
283
  o.preventDefault(), (a = e.children) != null && a.length ? this._expandedIndex = this._expandedIndex === n ? null : n : (this._mobileOpen = !1, this._expandedIndex = null, this.dispatchEvent(
@@ -285,6 +288,7 @@ let d = class extends k {
285
288
  })
286
289
  ));
287
290
  }
291
+ /** @internal */
288
292
  _handleSubItemClick(e, n) {
289
293
  n.preventDefault(), this._mobileOpen = !1, this._expandedIndex = null, this.dispatchEvent(
290
294
  new CustomEvent("hx-nav-select", {
@@ -294,6 +298,7 @@ let d = class extends k {
294
298
  })
295
299
  );
296
300
  }
301
+ /** @internal */
297
302
  _handleKeydown(e, n, o) {
298
303
  var l, s, u;
299
304
  const a = (l = this.shadowRoot) == null ? void 0 : l.querySelectorAll(
@@ -306,8 +311,8 @@ let d = class extends k {
306
311
  case "ArrowDown": {
307
312
  if (e.preventDefault(), (s = o.children) != null && s.length && e.key === "ArrowDown" && this.orientation === "horizontal")
308
313
  this._expandedIndex = n, this.updateComplete.then(() => {
309
- var h;
310
- const r = (h = this.shadowRoot) == null ? void 0 : h.querySelector(
314
+ var p;
315
+ const r = (p = this.shadowRoot) == null ? void 0 : p.querySelector(
311
316
  '.nav__submenu [part="link"]'
312
317
  );
313
318
  r == null || r.focus();
@@ -336,16 +341,17 @@ let d = class extends k {
336
341
  const r = this._expandedIndex === n;
337
342
  this._expandedIndex = r ? null : n, r || this.updateComplete.then(() => {
338
343
  var _;
339
- const h = (_ = this.shadowRoot) == null ? void 0 : _.querySelector(
344
+ const p = (_ = this.shadowRoot) == null ? void 0 : _.querySelector(
340
345
  '.nav__submenu:not([hidden]) [part="link"]'
341
346
  );
342
- h == null || h.focus();
347
+ p == null || p.focus();
343
348
  });
344
349
  }
345
350
  break;
346
351
  }
347
352
  }
348
353
  }
354
+ /** @internal */
349
355
  _handleSubKeydown(e, n) {
350
356
  var l, s, u;
351
357
  const o = (l = this.shadowRoot) == null ? void 0 : l.querySelectorAll(
@@ -376,6 +382,7 @@ let d = class extends k {
376
382
  }
377
383
  }
378
384
  }
385
+ /** @internal */
379
386
  _handleOutsideClick(e) {
380
387
  e.composedPath().includes(this) || (this._expandedIndex = null);
381
388
  }
@@ -387,8 +394,9 @@ let d = class extends k {
387
394
  super.disconnectedCallback(), document.removeEventListener("click", this._boundOutsideClick);
388
395
  }
389
396
  // ─── Render Helpers ───
397
+ /** @internal */
390
398
  _renderHamburgerIcon() {
391
- return c`<svg
399
+ return d`<svg
392
400
  width="24"
393
401
  height="24"
394
402
  viewBox="0 0 24 24"
@@ -404,8 +412,9 @@ let d = class extends k {
404
412
  <line x1="3" y1="18" x2="21" y2="18"></line>`}
405
413
  </svg>`;
406
414
  }
415
+ /** @internal */
407
416
  _renderChevronIcon() {
408
- return c`<svg
417
+ return d`<svg
409
418
  class="nav__chevron"
410
419
  width="16"
411
420
  height="16"
@@ -423,9 +432,10 @@ let d = class extends k {
423
432
  />
424
433
  </svg>`;
425
434
  }
435
+ /** @internal */
426
436
  _renderSubMenu(e, n, o) {
427
437
  const a = this._expandedIndex === n;
428
- return c`
438
+ return d`
429
439
  <ul
430
440
  class="nav__submenu"
431
441
  role="list"
@@ -433,16 +443,16 @@ let d = class extends k {
433
443
  ?hidden=${!a}
434
444
  >
435
445
  ${e.map(
436
- (t) => c`
446
+ (t) => d`
437
447
  <li class="nav__submenu-item">
438
448
  <a
439
449
  part="link"
440
450
  href=${this._sanitizeHref(t.href)}
441
- class=${x({
451
+ class=${m({
442
452
  nav__link: !0,
443
453
  "nav__link--active": !!t.current
444
454
  })}
445
- aria-current=${t.current ? "page" : v}
455
+ aria-current=${t.current ? "page" : x}
446
456
  @click=${(i) => this._handleSubItemClick(t, i)}
447
457
  @keydown=${(i) => this._handleSubKeydown(i, n)}
448
458
  >
@@ -454,6 +464,7 @@ let d = class extends k {
454
464
  </ul>
455
465
  `;
456
466
  }
467
+ /** @internal */
457
468
  _renderItem(e, n) {
458
469
  var l;
459
470
  const o = !!((l = e.children) != null && l.length), a = this._expandedIndex === n, t = {
@@ -461,30 +472,30 @@ let d = class extends k {
461
472
  "nav__link--active": !!e.current,
462
473
  "nav__link--has-submenu": o,
463
474
  "nav__link--expanded": a
464
- }, i = o ? c`
475
+ }, i = o ? d`
465
476
  <button
466
477
  part="link"
467
- class=${x(t)}
468
- aria-expanded=${a ? "true" : v}
478
+ class=${m(t)}
479
+ aria-expanded=${a ? "true" : x}
469
480
  @click=${(s) => this._handleItemClick(e, n, s)}
470
481
  @keydown=${(s) => this._handleKeydown(s, n, e)}
471
482
  >
472
483
  ${e.label} ${this._renderChevronIcon()}
473
484
  </button>
474
485
  ${this._renderSubMenu(e.children ?? [], n, e.label)}
475
- ` : c`
486
+ ` : d`
476
487
  <a
477
488
  part="link"
478
489
  href=${this._sanitizeHref(e.href)}
479
- class=${x(t)}
480
- aria-current=${e.current ? "page" : v}
490
+ class=${m(t)}
491
+ aria-current=${e.current ? "page" : x}
481
492
  @click=${(s) => this._handleItemClick(e, n, s)}
482
493
  @keydown=${(s) => this._handleKeydown(s, n, e)}
483
494
  >
484
495
  ${e.label}
485
496
  </a>
486
497
  `;
487
- return c` <li part="item" class="nav__item">${i}</li> `;
498
+ return d` <li part="item" class="nav__item">${i}</li> `;
488
499
  }
489
500
  // ─── Render ───
490
501
  render() {
@@ -492,20 +503,20 @@ let d = class extends k {
492
503
  nav__list: !0,
493
504
  "nav__list--open": this._mobileOpen
494
505
  };
495
- return c`
506
+ return d`
496
507
  <nav part="nav" aria-label=${this.label}>
497
508
  <button
498
509
  part="toggle"
499
510
  class="nav__toggle"
500
- aria-expanded=${this._mobileOpen ? "true" : v}
511
+ aria-expanded=${this._mobileOpen ? "true" : x}
501
512
  aria-controls="nav-list"
502
- aria-label=${this._mobileOpen ? "Close navigation menu" : "Open navigation menu"}
513
+ aria-label=${this._mobileOpen ? this.labelCloseMenu : this.labelOpenMenu}
503
514
  @click=${this._handleToggle}
504
515
  >
505
516
  ${this._renderHamburgerIcon()}
506
517
  </button>
507
518
 
508
- <ul part="list" id="nav-list" class=${x(e)} role="list">
519
+ <ul part="list" id="nav-list" class=${m(e)} role="list">
509
520
  ${w(
510
521
  this.items,
511
522
  (n, o) => o,
@@ -516,9 +527,9 @@ let d = class extends k {
516
527
  `;
517
528
  }
518
529
  };
519
- d.styles = [$, C];
520
- p([
521
- m({
530
+ c.styles = [C, $];
531
+ h([
532
+ v({
522
533
  type: Array,
523
534
  converter: {
524
535
  fromAttribute(e) {
@@ -532,23 +543,29 @@ p([
532
543
  }
533
544
  }
534
545
  })
535
- ], d.prototype, "items", 2);
536
- p([
537
- m({ type: String, reflect: !0 })
538
- ], d.prototype, "orientation", 2);
539
- p([
540
- m({ type: String })
541
- ], d.prototype, "label", 2);
542
- p([
546
+ ], c.prototype, "items", 2);
547
+ h([
548
+ v({ type: String, reflect: !0 })
549
+ ], c.prototype, "orientation", 2);
550
+ h([
551
+ v({ type: String })
552
+ ], c.prototype, "label", 2);
553
+ h([
554
+ v({ type: String, attribute: "label-open-menu" })
555
+ ], c.prototype, "labelOpenMenu", 2);
556
+ h([
557
+ v({ type: String, attribute: "label-close-menu" })
558
+ ], c.prototype, "labelCloseMenu", 2);
559
+ h([
543
560
  b()
544
- ], d.prototype, "_mobileOpen", 2);
545
- p([
561
+ ], c.prototype, "_mobileOpen", 2);
562
+ h([
546
563
  b()
547
- ], d.prototype, "_expandedIndex", 2);
548
- d = p([
564
+ ], c.prototype, "_expandedIndex", 2);
565
+ c = h([
549
566
  y("hx-nav")
550
- ], d);
567
+ ], c);
551
568
  export {
552
- d as H
569
+ c as H
553
570
  };
554
- //# sourceMappingURL=hx-nav-DM6-cGKF.js.map
571
+ //# sourceMappingURL=hx-nav-3JsN2Oak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-nav-3JsN2Oak.js","sources":["../../src/components/hx-nav/hx-nav.styles.ts","../../src/components/hx-nav/hx-nav.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixNavStyles = css`\n :host {\n display: block;\n font-family: var(--hx-nav-font-family, var(--hx-font-family-sans, sans-serif));\n font-size: var(--hx-nav-font-size, var(--hx-font-size-sm, 0.875rem));\n }\n\n * {\n box-sizing: border-box;\n }\n\n /* ─── Nav Container ─── */\n\n [part='nav'] {\n position: relative;\n background-color: var(--hx-nav-bg, var(--hx-color-neutral-900, #111827));\n color: var(--hx-nav-color, var(--hx-color-neutral-100, #f3f4f6));\n padding: var(--hx-nav-padding, var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem));\n }\n\n /* ─── Hamburger Toggle ─── */\n\n [part='toggle'] {\n display: none;\n align-items: center;\n justify-content: center;\n padding: var(--hx-space-2, 0.5rem);\n background: transparent;\n border: none;\n border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));\n color: var(--hx-nav-color, var(--hx-color-neutral-100, #f3f4f6));\n cursor: pointer;\n transition: background-color var(--hx-transition-fast, 150ms) ease;\n line-height: 0;\n }\n\n [part='toggle']:hover {\n background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #374151));\n }\n\n [part='toggle']:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-nav-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Navigation List ─── */\n\n [part='list'] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n list-style: none;\n margin: 0;\n padding: 0;\n gap: var(--hx-space-1, 0.25rem);\n align-items: center;\n }\n\n /* ─── Nav Item ─── */\n\n [part='item'] {\n position: relative;\n }\n\n /* ─── Nav Link / Button ─── */\n\n .nav__link {\n display: inline-flex;\n align-items: center;\n gap: var(--hx-space-1, 0.25rem);\n padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #f3f4f6));\n text-decoration: none;\n border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));\n border: none;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n font-weight: var(--hx-font-weight-medium, 500);\n line-height: var(--hx-line-height-normal, 1.5);\n white-space: nowrap;\n transition:\n background-color var(--hx-transition-fast, 150ms) ease,\n color var(--hx-transition-fast, 150ms) ease;\n }\n\n .nav__link:hover {\n background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #374151));\n color: var(--hx-nav-link-hover-color, var(--hx-color-white, #ffffff));\n }\n\n .nav__link:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-nav-focus-ring-color, var(--hx-focus-ring-color, var(--hx-color-primary-500)));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .nav__link--active {\n background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-600, #2563eb));\n color: var(--hx-nav-link-active-color, var(--hx-color-white, #ffffff));\n }\n\n /* ─── Chevron Icon ─── */\n\n .nav__chevron {\n transition: transform var(--hx-transition-normal, 200ms) ease;\n flex-shrink: 0;\n }\n\n .nav__link--expanded .nav__chevron {\n transform: rotate(180deg);\n }\n\n /* ─── Submenu ─── */\n\n .nav__submenu {\n position: absolute;\n top: calc(100% + var(--hx-space-1, 0.25rem));\n left: 0;\n min-width: var(--hx-nav-submenu-min-width, 12rem);\n list-style: none;\n margin: 0;\n padding: var(--hx-space-1, 0.25rem) 0;\n background-color: var(--hx-nav-submenu-bg, var(--hx-color-neutral-800, #1f2937));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n box-shadow: var(\n --hx-shadow-md,\n 0 4px 6px -1px rgb(0 0 0 / 0.1),\n 0 2px 4px -2px rgb(0 0 0 / 0.1)\n );\n z-index: var(--hx-z-index-dropdown, 100);\n }\n\n .nav__submenu[hidden] {\n display: none;\n }\n\n .nav__submenu .nav__link {\n display: block;\n width: 100%;\n text-align: left;\n border-radius: 0;\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);\n }\n\n /* ─── Vertical / Sidebar Orientation ─── */\n\n :host([orientation='vertical']) [part='nav'] {\n padding: var(--hx-space-4, 1rem) var(--hx-space-2, 0.5rem);\n }\n\n :host([orientation='vertical']) [part='list'] {\n flex-direction: column;\n align-items: stretch;\n gap: var(--hx-space-1, 0.25rem);\n }\n\n :host([orientation='vertical']) .nav__link {\n width: 100%;\n justify-content: flex-start;\n }\n\n :host([orientation='vertical']) .nav__submenu {\n position: static;\n box-shadow: none;\n border-radius: 0;\n background-color: transparent;\n padding: 0;\n padding-left: var(--hx-space-4, 1rem);\n }\n\n :host([orientation='vertical']) .nav__submenu[hidden] {\n display: none;\n }\n\n :host([orientation='vertical']) .nav__submenu .nav__link {\n padding: var(--hx-space-1-5, 0.375rem) var(--hx-space-3, 0.75rem);\n font-size: var(--hx-font-size-xs, 0.75rem);\n color: var(--hx-nav-link-color, var(--hx-color-neutral-300, #d1d5db));\n }\n\n /* ─── Mobile Responsive ─── */\n\n @media (max-width: 768px) {\n [part='nav'] {\n display: flex;\n flex-direction: column;\n padding: var(--hx-space-2, 0.5rem);\n }\n\n [part='toggle'] {\n display: inline-flex;\n align-self: flex-end;\n }\n\n [part='list'] {\n display: none;\n flex-direction: column;\n align-items: stretch;\n width: 100%;\n margin-top: var(--hx-space-2, 0.5rem);\n gap: var(--hx-space-1, 0.25rem);\n }\n\n [part='list'].nav__list--open {\n display: flex;\n }\n\n [part='item'] {\n width: 100%;\n }\n\n .nav__link {\n width: 100%;\n justify-content: flex-start;\n }\n\n .nav__submenu {\n position: static;\n box-shadow: none;\n border-radius: 0;\n padding-left: var(--hx-space-4, 1rem);\n background-color: transparent;\n }\n\n .nav__submenu .nav__link {\n padding: var(--hx-space-1-5, 0.375rem) var(--hx-space-3, 0.75rem);\n }\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .nav__link,\n .nav__chevron,\n [part='toggle'] {\n transition: none;\n animation: none;\n }\n }\n`;\n","import { LitElement, html, nothing, svg } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixNavStyles } from './hx-nav.styles.js';\n\n/** A single navigation item, optionally with nested children. */\nexport interface NavItem {\n /** Display label for the item. */\n label: string;\n /** Href for the item link. Required unless children are provided. */\n href?: string;\n /** Whether this item represents the current page. */\n current?: boolean;\n /** Nested sub-menu items. */\n children?: NavItem[];\n}\n\n/** Layout orientation for the navigation. */\ntype NavOrientation = 'horizontal' | 'vertical';\n\n/**\n * Primary and secondary navigation component.\n * Supports horizontal menu bar and vertical sidebar patterns.\n * Mobile responsive with hamburger toggle.\n *\n * @summary Navigation bar supporting horizontal and vertical layouts with nested submenus.\n *\n * @tag hx-nav\n *\n * @fires {CustomEvent<{item: NavItem}>} hx-nav-select - Dispatched when a nav item is activated.\n *\n * @csspart nav - The nav landmark element.\n * @csspart list - The top-level list element.\n * @csspart item - Each list item wrapper.\n * @csspart link - The anchor or button element inside each item.\n * @csspart toggle - The mobile hamburger toggle button.\n *\n * @cssprop [--hx-nav-bg=var(--hx-color-neutral-900)] - Navigation background color.\n * @cssprop [--hx-nav-color=var(--hx-color-neutral-100)] - Navigation text color.\n * @cssprop [--hx-nav-font-family=var(--hx-font-family-sans)] - Navigation font family.\n * @cssprop [--hx-nav-link-color=var(--hx-color-neutral-100)] - Link text color.\n * @cssprop [--hx-nav-link-hover-bg=var(--hx-color-neutral-700)] - Link hover background.\n * @cssprop [--hx-nav-link-hover-color=var(--hx-color-white)] - Link hover text color.\n * @cssprop [--hx-nav-link-active-bg=var(--hx-color-primary-600)] - Active link background.\n * @cssprop [--hx-nav-link-active-color=var(--hx-color-white)] - Active link text color.\n * @cssprop [--hx-nav-submenu-bg=var(--hx-color-neutral-800)] - Submenu background color.\n * @cssprop [--hx-nav-submenu-min-width=12rem] - Submenu minimum width.\n * @cssprop [--hx-nav-font-size=var(--hx-font-size-sm)] - Navigation font size.\n * @cssprop [--hx-nav-padding=var(--hx-space-2) var(--hx-space-4)] - Navigation padding.\n * @cssprop [--hx-nav-item-padding=var(--hx-space-2) var(--hx-space-3)] - Item padding.\n * @cssprop [--hx-nav-border-radius=var(--hx-border-radius-sm)] - Item border radius.\n */\n@customElement('hx-nav')\nexport class HelixNav extends LitElement {\n static override styles = [tokenStyles, helixNavStyles];\n\n // ─── Properties ───\n\n /**\n * Navigation items array.\n * @attr items\n */\n @property({\n type: Array,\n converter: {\n fromAttribute(value: string | null): NavItem[] {\n if (!value) return [];\n try {\n const parsed: unknown = JSON.parse(value);\n return Array.isArray(parsed) ? (parsed as NavItem[]) : [];\n } catch {\n return [];\n }\n },\n },\n })\n items: NavItem[] = [];\n\n /**\n * Layout orientation: 'horizontal' (menu bar) or 'vertical' (sidebar).\n * @attr orientation\n */\n @property({ type: String, reflect: true })\n orientation: NavOrientation = 'horizontal';\n\n /**\n * Accessible label for the nav landmark.\n * @attr label\n */\n @property({ type: String })\n label = 'Main navigation';\n\n /** Accessible label for the navigation toggle button when menu is closed. */\n @property({ type: String, attribute: 'label-open-menu' })\n labelOpenMenu = 'Open navigation menu';\n\n /** Accessible label for the navigation toggle button when menu is open. */\n @property({ type: String, attribute: 'label-close-menu' })\n labelCloseMenu = 'Close navigation menu';\n\n // ─── State ───\n\n /**\n * Tracks whether the mobile navigation menu is currently expanded.\n * @internal\n */\n @state() private _mobileOpen = false;\n /**\n * Index of the currently expanded top-level nav item with a submenu, or null if none is expanded.\n * @internal\n */\n @state() private _expandedIndex: number | null = null;\n\n // ─── Private: bound event handler reference ───\n\n /**\n * Stable bound reference to the outside-click handler, stored for addEventListener/removeEventListener symmetry.\n * @internal\n */\n private _boundOutsideClick: (e: MouseEvent) => void = this._handleOutsideClick.bind(this);\n\n /**\n * Sanitizes a URL to prevent XSS via javascript: or data: URIs.\n * Only allows http:, https:, relative paths, and fragment-only links.\n */\n /** @internal */\n private _sanitizeHref(href: string | undefined): string {\n if (!href || href === '#') return '#';\n // Allow relative paths, fragments, and http(s)\n if (\n href.startsWith('/') ||\n href.startsWith('./') ||\n href.startsWith('../') ||\n href.startsWith('#')\n ) {\n return href;\n }\n try {\n const url = new URL(href, window.location.href);\n if (url.protocol === 'http:' || url.protocol === 'https:') {\n return href;\n }\n } catch {\n // Invalid URL — fall through to safe default\n }\n return '#';\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleToggle(): void {\n this._mobileOpen = !this._mobileOpen;\n if (!this._mobileOpen) {\n this._expandedIndex = null;\n }\n }\n\n /** @internal */\n private _handleItemClick(item: NavItem, index: number, e: Event): void {\n e.preventDefault();\n if (item.children?.length) {\n this._expandedIndex = this._expandedIndex === index ? null : index;\n } else {\n this._mobileOpen = false;\n this._expandedIndex = null;\n this.dispatchEvent(\n new CustomEvent<{ item: NavItem }>('hx-nav-select', {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n }\n }\n\n /** @internal */\n private _handleSubItemClick(item: NavItem, e: Event): void {\n e.preventDefault();\n this._mobileOpen = false;\n this._expandedIndex = null;\n this.dispatchEvent(\n new CustomEvent<{ item: NavItem }>('hx-nav-select', {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n }\n\n /** @internal */\n private _handleKeydown(e: KeyboardEvent, index: number, item: NavItem): void {\n const items = this.shadowRoot?.querySelectorAll<HTMLElement>(\n '[part=\"list\"] > [part=\"item\"] > [part=\"link\"]',\n );\n if (!items) return;\n const itemsArr = Array.from(items);\n const current = itemsArr[index];\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault();\n if (item.children?.length && e.key === 'ArrowDown' && this.orientation === 'horizontal') {\n // open submenu and focus first item\n this._expandedIndex = index;\n void this.updateComplete.then(() => {\n const firstSub = this.shadowRoot?.querySelector<HTMLElement>(\n `.nav__submenu [part=\"link\"]`,\n );\n firstSub?.focus();\n });\n } else {\n const next = itemsArr[index + 1] ?? itemsArr[0];\n next?.focus();\n }\n break;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault();\n const prev = itemsArr[index - 1] ?? itemsArr[itemsArr.length - 1];\n prev?.focus();\n break;\n }\n case 'Escape': {\n this._expandedIndex = null;\n current?.focus();\n break;\n }\n case 'Enter':\n case ' ': {\n if (item.children?.length) {\n e.preventDefault();\n const wasExpanded = this._expandedIndex === index;\n this._expandedIndex = wasExpanded ? null : index;\n if (!wasExpanded) {\n void this.updateComplete.then(() => {\n const firstSub = this.shadowRoot?.querySelector<HTMLElement>(\n `.nav__submenu:not([hidden]) [part=\"link\"]`,\n );\n firstSub?.focus();\n });\n }\n }\n break;\n }\n }\n }\n\n /** @internal */\n private _handleSubKeydown(e: KeyboardEvent, parentIndex: number): void {\n const subItems = this.shadowRoot?.querySelectorAll<HTMLElement>(\n `.nav__submenu:not([hidden]) [part=\"link\"]`,\n );\n if (!subItems) return;\n const arr = Array.from(subItems);\n const focused = (e.currentTarget ?? e.target) as HTMLElement;\n const currentIdx = arr.indexOf(focused);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = arr[currentIdx + 1] ?? arr[0];\n next?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = arr[currentIdx - 1] ?? arr[arr.length - 1];\n prev?.focus();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n this._expandedIndex = null;\n const parentLinks = this.shadowRoot?.querySelectorAll<HTMLElement>(\n '[part=\"list\"] > [part=\"item\"] > [part=\"link\"]',\n );\n parentLinks?.[parentIndex]?.focus();\n break;\n }\n }\n }\n\n /** @internal */\n private _handleOutsideClick(e: MouseEvent): void {\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._expandedIndex = null;\n }\n }\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('click', this._boundOutsideClick);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._boundOutsideClick);\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderHamburgerIcon() {\n return html`<svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n ${this._mobileOpen\n ? svg`<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>`\n : svg`<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>`}\n </svg>`;\n }\n\n /** @internal */\n private _renderChevronIcon() {\n return html`<svg\n class=\"nav__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4.5 6L8 9.5 11.5 6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>`;\n }\n\n /** @internal */\n private _renderSubMenu(children: NavItem[], parentIndex: number, parentLabel: string) {\n const isExpanded = this._expandedIndex === parentIndex;\n return html`\n <ul\n class=\"nav__submenu\"\n role=\"list\"\n aria-label=\"${parentLabel} submenu\"\n ?hidden=${!isExpanded}\n >\n ${children.map(\n (child) => html`\n <li class=\"nav__submenu-item\">\n <a\n part=\"link\"\n href=${this._sanitizeHref(child.href)}\n class=${classMap({\n nav__link: true,\n 'nav__link--active': !!child.current,\n })}\n aria-current=${child.current ? 'page' : nothing}\n @click=${(e: Event) => this._handleSubItemClick(child, e)}\n @keydown=${(e: KeyboardEvent) => this._handleSubKeydown(e, parentIndex)}\n >\n ${child.label}\n </a>\n </li>\n `,\n )}\n </ul>\n `;\n }\n\n /** @internal */\n private _renderItem(item: NavItem, index: number) {\n const hasChildren = !!item.children?.length;\n const isExpanded = this._expandedIndex === index;\n\n const linkClasses = {\n nav__link: true,\n 'nav__link--active': !!item.current,\n 'nav__link--has-submenu': hasChildren,\n 'nav__link--expanded': isExpanded,\n };\n\n const content = hasChildren\n ? html`\n <button\n part=\"link\"\n class=${classMap(linkClasses)}\n aria-expanded=${isExpanded ? 'true' : nothing}\n @click=${(e: Event) => this._handleItemClick(item, index, e)}\n @keydown=${(e: KeyboardEvent) => this._handleKeydown(e, index, item)}\n >\n ${item.label} ${this._renderChevronIcon()}\n </button>\n ${this._renderSubMenu(item.children ?? [], index, item.label)}\n `\n : html`\n <a\n part=\"link\"\n href=${this._sanitizeHref(item.href)}\n class=${classMap(linkClasses)}\n aria-current=${item.current ? 'page' : nothing}\n @click=${(e: Event) => this._handleItemClick(item, index, e)}\n @keydown=${(e: KeyboardEvent) => this._handleKeydown(e, index, item)}\n >\n ${item.label}\n </a>\n `;\n\n return html` <li part=\"item\" class=\"nav__item\">${content}</li> `;\n }\n\n // ─── Render ───\n\n override render() {\n const listClasses = {\n nav__list: true,\n 'nav__list--open': this._mobileOpen,\n };\n\n return html`\n <nav part=\"nav\" aria-label=${this.label}>\n <button\n part=\"toggle\"\n class=\"nav__toggle\"\n aria-expanded=${this._mobileOpen ? 'true' : nothing}\n aria-controls=\"nav-list\"\n aria-label=${this._mobileOpen ? this.labelCloseMenu : this.labelOpenMenu}\n @click=${this._handleToggle}\n >\n ${this._renderHamburgerIcon()}\n </button>\n\n <ul part=\"list\" id=\"nav-list\" class=${classMap(listClasses)} role=\"list\">\n ${repeat(\n this.items,\n (_item, i) => i,\n (item, i) => this._renderItem(item, i),\n )}\n </ul>\n </nav>\n `;\n }\n}\n\n/** Canonical type alias for the hx-nav component. */\nexport type HxNav = HelixNav;\n\n/** @deprecated Use {@link HxNav} instead. The `Wc` prefix was a legacy naming convention. */\nexport type WcNav = HelixNav;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-nav': HelixNav;\n }\n}\n"],"names":["helixNavStyles","css","HelixNav","LitElement","href","url","item","index","e","_a","items","itemsArr","current","_b","firstSub","next","prev","_c","wasExpanded","parentIndex","subItems","arr","focused","currentIdx","parentLinks","html","svg","children","parentLabel","isExpanded","child","classMap","nothing","hasChildren","linkClasses","content","listClasses","repeat","_item","i","tokenStyles","__decorateClass","property","value","parsed","state","customElement"],"mappings":";;;;;AAEO,MAAMA,IAAiBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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"}
@@ -22,7 +22,7 @@ const $ = b`
22
22
  color: var(--hx-side-nav-color, var(--hx-color-neutral-100, #f3f4f6));
23
23
  transition: width var(--hx-transition-normal, 300ms) ease;
24
24
  overflow: hidden;
25
- border-right: var(--hx-border-width-thin, 1px) solid
25
+ border-inline-end: var(--hx-border-width-thin, 1px) solid
26
26
  var(--hx-side-nav-border-color, var(--hx-color-neutral-700, #374151));
27
27
  }
28
28
 
@@ -85,7 +85,7 @@ const $ = b`
85
85
  justify-content: center;
86
86
  width: var(--hx-space-8, 2rem);
87
87
  height: var(--hx-space-8, 2rem);
88
- margin-left: auto;
88
+ margin-inline-start: auto;
89
89
  flex-shrink: 0;
90
90
  padding: 0;
91
91
  border: none;
@@ -134,6 +134,10 @@ const $ = b`
134
134
  transition: none;
135
135
  }
136
136
 
137
+ .side-nav__toggle {
138
+ transition: none;
139
+ }
140
+
137
141
  .side-nav__toggle svg {
138
142
  transition: none;
139
143
  }
@@ -158,6 +162,7 @@ let p = class extends w {
158
162
  * setting or removing the `data-collapsed` attribute. This allows child
159
163
  * items to respond to collapsed mode via their CSS selectors.
160
164
  */
165
+ /** @internal */
161
166
  _propagateCollapsedToChildren() {
162
167
  var t;
163
168
  const e = (t = this.shadowRoot) == null ? void 0 : t.querySelector("slot:not([name])");
@@ -170,6 +175,7 @@ let p = class extends w {
170
175
  * Handles the default slot's slotchange event so that if items are added
171
176
  * after initial render, they immediately receive the correct collapsed state.
172
177
  */
178
+ /** @internal */
173
179
  _onDefaultSlotChange() {
174
180
  this._propagateCollapsedToChildren();
175
181
  }
@@ -180,8 +186,9 @@ let p = class extends w {
180
186
  * skipped. Focus is applied to the interactive element inside the shadow DOM
181
187
  * of each item (anchor or button with part="link").
182
188
  */
189
+ /** @internal */
183
190
  _handleKeydown(e) {
184
- var g, u, _;
191
+ var g, _, u;
185
192
  if (e.key !== "ArrowDown" && e.key !== "ArrowUp" && e.key !== "Home" && e.key !== "End") return;
186
193
  const a = (g = this.shadowRoot) == null ? void 0 : g.querySelector("slot:not([name])");
187
194
  if (!a) return;
@@ -193,7 +200,7 @@ let p = class extends w {
193
200
  let r = -1;
194
201
  for (let h = 0; h < t.length; h++) {
195
202
  const m = t[h];
196
- if (m && (m === o || m.contains(o) || ((u = m.shadowRoot) == null ? void 0 : u.contains(o)) === !0)) {
203
+ if (m && (m === o || m.contains(o) || ((_ = m.shadowRoot) == null ? void 0 : _.contains(o)) === !0)) {
197
204
  r = h;
198
205
  break;
199
206
  }
@@ -203,10 +210,11 @@ let p = class extends w {
203
210
  e.key === "ArrowDown" ? i = r < t.length - 1 ? r + 1 : 0 : e.key === "ArrowUp" ? i = r > 0 ? r - 1 : t.length - 1 : e.key === "Home" ? i = 0 : i = t.length - 1;
204
211
  const n = t[i];
205
212
  if (!n) return;
206
- const x = (_ = n.shadowRoot) == null ? void 0 : _.querySelector('[part="link"]');
213
+ const x = (u = n.shadowRoot) == null ? void 0 : u.querySelector('[part="link"]');
207
214
  x == null || x.focus();
208
215
  }
209
216
  // ─── Event Handling ───
217
+ /** @internal */
210
218
  _handleToggle() {
211
219
  this.collapsed = !this.collapsed, this.collapsed ? this.dispatchEvent(
212
220
  new CustomEvent("hx-collapse", {
@@ -223,6 +231,7 @@ let p = class extends w {
223
231
  );
224
232
  }
225
233
  // ─── Render ───
234
+ /** @internal */
226
235
  _renderToggleIcon() {
227
236
  return d`<svg viewBox="0 0 20 20" aria-hidden="true">
228
237
  <path
@@ -377,9 +386,7 @@ const T = b`
377
386
  min-width: 0;
378
387
  overflow: hidden;
379
388
  text-overflow: ellipsis;
380
- transition:
381
- opacity var(--hx-transition-fast, 150ms) ease,
382
- width var(--hx-transition-fast, 150ms) ease;
389
+ transition: opacity var(--hx-transition-fast, 150ms) ease;
383
390
  }
384
391
 
385
392
  /* ─── Badge ─── */
@@ -415,16 +422,22 @@ const T = b`
415
422
  /* ─── Children (sub-nav) ─── */
416
423
 
417
424
  .nav-item__children {
418
- display: flex;
419
- flex-direction: column;
420
- padding-left: var(--hx-space-6, 1.5rem);
421
- max-height: 0;
425
+ display: grid;
426
+ grid-template-rows: 0fr;
427
+ transition: grid-template-rows var(--hx-transition-normal, 300ms ease);
422
428
  overflow: hidden;
423
- transition: max-height var(--hx-transition-normal, 300ms) ease;
424
429
  }
425
430
 
426
431
  :host([expanded]) .nav-item__children {
427
- max-height: 62.5rem; /* large enough for any submenu depth */
432
+ grid-template-rows: 1fr;
433
+ }
434
+
435
+ .nav-item__children-inner {
436
+ overflow: hidden;
437
+ min-height: 0;
438
+ display: flex;
439
+ flex-direction: column;
440
+ padding-left: var(--hx-space-6, 1.5rem);
428
441
  }
429
442
 
430
443
  /* ─── Tooltip (collapsed mode) ─── */
@@ -482,12 +495,17 @@ const T = b`
482
495
  }
483
496
 
484
497
  @media (prefers-reduced-motion: reduce) {
498
+ .nav-item__link,
485
499
  .nav-item__label,
486
500
  .nav-item__arrow,
487
501
  .nav-item__children,
488
502
  .nav-item__tooltip {
489
503
  transition: none;
490
504
  }
505
+
506
+ :host([expanded]) .nav-item__children {
507
+ grid-template-rows: 1fr;
508
+ }
491
509
  }
492
510
  `;
493
511
  var A = Object.defineProperty, D = Object.getOwnPropertyDescriptor, c = (e, a, t, o) => {
@@ -507,20 +525,24 @@ let s = class extends w {
507
525
  super.attributeChangedCallback(e, a, t), e === "data-collapsed" && (this._isCollapsed = t !== null);
508
526
  }
509
527
  // ─── Slot Change Handler ───
528
+ /** @internal */
510
529
  _onChildrenSlotChange(e) {
511
530
  const a = e.target;
512
531
  this._hasChildren = a.assignedNodes({ flatten: !0 }).length > 0;
513
532
  }
514
533
  // ─── Private Helpers ───
534
+ /** @internal */
515
535
  _getDirectText() {
516
536
  return Array.from(this.childNodes).filter((e) => e.nodeType === Node.TEXT_NODE).map((e) => {
517
537
  var a;
518
538
  return ((a = e.textContent) == null ? void 0 : a.trim()) ?? "";
519
539
  }).filter(Boolean).join(" ");
520
540
  }
541
+ /** @internal */
521
542
  _handleToggle(e) {
522
543
  this.disabled || (e.preventDefault(), this.expanded = !this.expanded);
523
544
  }
545
+ /** @internal */
524
546
  _renderExpandArrow() {
525
547
  return d`<span class="nav-item__arrow" aria-hidden="true">
526
548
  <svg viewBox="0 0 20 20">
@@ -569,7 +591,9 @@ let s = class extends w {
569
591
  <div class="nav-item">
570
592
  ${t}
571
593
  <div part="children" class="nav-item__children" role="group">
572
- <slot name="children" @slotchange=${this._onChildrenSlotChange}></slot>
594
+ <div class="nav-item__children-inner">
595
+ <slot name="children" @slotchange=${this._onChildrenSlotChange}></slot>
596
+ </div>
573
597
  </div>
574
598
  </div>
575
599
  `;
@@ -601,4 +625,4 @@ export {
601
625
  s as H,
602
626
  p as a
603
627
  };
604
- //# sourceMappingURL=hx-nav-item-D54-5eUM.js.map
628
+ //# sourceMappingURL=hx-nav-item-D3EJatzc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-nav-item-D3EJatzc.js","sources":["../../src/components/hx-side-nav/hx-side-nav.styles.ts","../../src/components/hx-side-nav/hx-side-nav.ts","../../src/components/hx-side-nav/hx-nav-item.styles.ts","../../src/components/hx-side-nav/hx-nav-item.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixSideNavStyles = css`\n :host {\n display: block;\n height: 100%;\n }\n\n * {\n box-sizing: border-box;\n }\n\n /* ─── Nav Container ─── */\n\n .side-nav {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: var(--hx-side-nav-width, 16rem);\n background-color: var(--hx-side-nav-bg, var(--hx-color-neutral-900, #111827));\n color: var(--hx-side-nav-color, var(--hx-color-neutral-100, #f3f4f6));\n transition: width var(--hx-transition-normal, 300ms) ease;\n overflow: hidden;\n border-inline-end: var(--hx-border-width-thin, 1px) solid\n var(--hx-side-nav-border-color, var(--hx-color-neutral-700, #374151));\n }\n\n /* ─── Collapsed State ─── */\n\n :host([collapsed]) .side-nav {\n width: var(--hx-side-nav-collapsed-width, 3.5rem);\n }\n\n /* ─── Header ─── */\n\n .side-nav__header {\n display: flex;\n align-items: center;\n padding: var(--hx-side-nav-header-padding, var(--hx-space-4, 1rem));\n flex-shrink: 0;\n min-height: var(--hx-space-14, 3.5rem);\n border-bottom: var(--hx-border-width-thin, 1px) solid\n var(--hx-side-nav-border-color, var(--hx-color-neutral-700, #374151));\n overflow: hidden;\n }\n\n :host([collapsed]) .side-nav__header {\n justify-content: center;\n padding: var(--hx-space-3, 0.75rem);\n }\n\n /* ─── Body ─── */\n\n .side-nav__body {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: var(--hx-space-2, 0.5rem) 0;\n }\n\n /* ─── Footer ─── */\n\n .side-nav__footer {\n display: flex;\n align-items: center;\n padding: var(--hx-side-nav-footer-padding, var(--hx-space-4, 1rem));\n flex-shrink: 0;\n min-height: var(--hx-space-14, 3.5rem);\n border-top: var(--hx-border-width-thin, 1px) solid\n var(--hx-side-nav-border-color, var(--hx-color-neutral-700, #374151));\n overflow: hidden;\n }\n\n :host([collapsed]) .side-nav__footer {\n justify-content: center;\n padding: var(--hx-space-3, 0.75rem);\n }\n\n /* ─── Toggle Button ─── */\n\n .side-nav__toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--hx-space-8, 2rem);\n height: var(--hx-space-8, 2rem);\n margin-inline-start: auto;\n flex-shrink: 0;\n padding: 0;\n border: none;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n background: transparent;\n color: var(--hx-side-nav-toggle-color, var(--hx-color-neutral-400, #9ca3af));\n cursor: pointer;\n transition:\n background-color var(--hx-transition-fast, 150ms) ease,\n color var(--hx-transition-fast, 150ms) ease;\n }\n\n .side-nav__toggle:hover {\n background-color: var(\n --hx-overlay-white-10,\n rgba(255, 255, 255, 0.1)\n ); /* fallback for browsers without color-mix() */\n color: var(--hx-color-neutral-100, #f3f4f6);\n }\n\n @supports (color: color-mix(in srgb, red 50%, blue)) {\n .side-nav__toggle:hover {\n background-color: color-mix(in srgb, currentColor 15%, transparent);\n }\n }\n\n .side-nav__toggle:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .side-nav__toggle svg {\n width: var(--hx-space-5, 1.25rem);\n height: var(--hx-space-5, 1.25rem);\n fill: currentColor;\n flex-shrink: 0;\n transition: transform var(--hx-transition-normal, 300ms) ease;\n }\n\n :host([collapsed]) .side-nav__toggle svg {\n transform: rotate(180deg);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .side-nav {\n transition: none;\n }\n\n .side-nav__toggle {\n transition: none;\n }\n\n .side-nav__toggle svg {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixSideNavStyles } from './hx-side-nav.styles.js';\n\n/**\n * A collapsible left-side navigation panel with nested menu item support.\n * Designed for clinical portals, admin dashboards, and department navigation.\n *\n * @summary Collapsible side navigation panel for enterprise healthcare applications.\n *\n * @tag hx-side-nav\n *\n * @slot - Default slot for hx-nav-item children.\n * @slot header - Logo or branding content.\n * @slot footer - User profile or settings content.\n *\n * @fires {CustomEvent<{ collapsed: boolean }>} hx-collapse - Dispatched when the nav collapses to icon-only mode.\n * @fires {CustomEvent<{ collapsed: boolean }>} hx-expand - Dispatched when the nav expands to full width.\n *\n * @csspart nav - The outer nav element.\n * @csspart header - The header section.\n * @csspart body - The scrollable body section.\n * @csspart footer - The footer section.\n * @csspart toggle - The collapse/expand toggle button.\n *\n * @cssprop [--hx-side-nav-width=16rem] - Full expanded width.\n * @cssprop [--hx-side-nav-collapsed-width=3.5rem] - Collapsed icon-only width.\n * @cssprop [--hx-side-nav-bg=var(--hx-color-neutral-900)] - Background color.\n * @cssprop [--hx-side-nav-color=var(--hx-color-neutral-100)] - Text color.\n * @cssprop [--hx-side-nav-border-color=var(--hx-color-neutral-700)] - Border color.\n * @cssprop [--hx-side-nav-header-padding=var(--hx-space-4)] - Header padding.\n * @cssprop [--hx-side-nav-footer-padding=var(--hx-space-4)] - Footer padding.\n * @cssprop [--hx-side-nav-toggle-color=var(--hx-color-neutral-400)] - Toggle button icon color.\n */\n@customElement('hx-side-nav')\nexport class HelixSideNav extends LitElement {\n static override styles = [tokenStyles, helixSideNavStyles];\n\n // ─── Properties ───\n\n /**\n * When true, the nav collapses to show icons only.\n * @attr collapsed\n */\n @property({ type: Boolean, reflect: true })\n collapsed = false;\n\n /**\n * The accessible label for the nav landmark.\n * @attr label\n */\n @property({ type: String })\n label = 'Main Navigation';\n\n // ─── Lifecycle ───\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n if (changedProperties.has('collapsed')) {\n this._propagateCollapsedToChildren();\n }\n }\n\n // ─── Collapsed State Propagation ───\n\n /**\n * Propagates the collapsed state to all slotted hx-nav-item children by\n * setting or removing the `data-collapsed` attribute. This allows child\n * items to respond to collapsed mode via their CSS selectors.\n */\n /** @internal */\n private _propagateCollapsedToChildren(): void {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return;\n\n const navItems = slot\n .assignedElements({ flatten: true })\n .filter((el) => el.tagName.toLowerCase() === 'hx-nav-item');\n\n for (const item of navItems) {\n if (!(item instanceof HTMLElement)) continue;\n if (this.collapsed) {\n item.setAttribute('data-collapsed', '');\n } else {\n item.removeAttribute('data-collapsed');\n }\n }\n }\n\n /**\n * Handles the default slot's slotchange event so that if items are added\n * after initial render, they immediately receive the correct collapsed state.\n */\n /** @internal */\n private _onDefaultSlotChange(): void {\n this._propagateCollapsedToChildren();\n }\n\n // ─── Keyboard Navigation ───\n\n /**\n * Implements roving tabindex-style ArrowUp/ArrowDown keyboard navigation\n * among direct hx-nav-item children in the body slot. Disabled items are\n * skipped. Focus is applied to the interactive element inside the shadow DOM\n * of each item (anchor or button with part=\"link\").\n */\n /** @internal */\n private _handleKeydown(e: KeyboardEvent): void {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp' && e.key !== 'Home' && e.key !== 'End') return;\n\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return;\n\n const navItems = slot\n .assignedElements({ flatten: true })\n .filter(\n (el): el is HTMLElement =>\n el.tagName.toLowerCase() === 'hx-nav-item' && !el.hasAttribute('disabled'),\n );\n\n if (navItems.length === 0) return;\n\n // Find which item currently contains focus\n const activeEl = document.activeElement;\n let currentIndex = -1;\n for (let i = 0; i < navItems.length; i++) {\n const item = navItems[i];\n if (!item) continue;\n if (\n item === activeEl ||\n item.contains(activeEl) ||\n item.shadowRoot?.contains(activeEl) === true\n ) {\n currentIndex = i;\n break;\n }\n }\n\n e.preventDefault();\n\n let nextIndex: number;\n if (e.key === 'ArrowDown') {\n nextIndex = currentIndex < navItems.length - 1 ? currentIndex + 1 : 0;\n } else if (e.key === 'ArrowUp') {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : navItems.length - 1;\n } else if (e.key === 'Home') {\n nextIndex = 0;\n } else {\n nextIndex = navItems.length - 1;\n }\n\n const targetItem = navItems[nextIndex];\n if (!targetItem) return;\n const focusTarget = targetItem.shadowRoot?.querySelector<HTMLElement>('[part=\"link\"]');\n focusTarget?.focus();\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleToggle(): void {\n this.collapsed = !this.collapsed;\n\n if (this.collapsed) {\n /**\n * Dispatched when the nav collapses to icon-only mode.\n * @event hx-collapse\n */\n this.dispatchEvent(\n new CustomEvent<{ collapsed: boolean }>('hx-collapse', {\n bubbles: true,\n composed: true,\n detail: { collapsed: true },\n }),\n );\n } else {\n /**\n * Dispatched when the nav expands to full width.\n * @event hx-expand\n */\n this.dispatchEvent(\n new CustomEvent<{ collapsed: boolean }>('hx-expand', {\n bubbles: true,\n composed: true,\n detail: { collapsed: false },\n }),\n );\n }\n }\n\n // ─── Render ───\n\n /** @internal */\n private _renderToggleIcon() {\n return html`<svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n />\n </svg>`;\n }\n\n override render() {\n return html`\n <nav part=\"nav\" class=\"side-nav\" aria-label=${this.label}>\n <div part=\"header\" class=\"side-nav__header\">\n <slot name=\"header\"></slot>\n <button\n part=\"toggle\"\n class=\"side-nav__toggle\"\n aria-label=${this.collapsed ? 'Expand navigation' : 'Collapse navigation'}\n aria-expanded=${!this.collapsed}\n @click=${this._handleToggle}\n >\n ${this._renderToggleIcon()}\n </button>\n </div>\n\n <div part=\"body\" class=\"side-nav__body\" id=\"side-nav-body\" @keydown=${this._handleKeydown}>\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n </div>\n\n <div part=\"footer\" class=\"side-nav__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </nav>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-side-nav': HelixSideNav;\n }\n}\n\nexport type { HelixSideNav as HxSideNav };\n","import { css } from 'lit';\n\nexport const helixNavItemStyles = css`\n :host {\n display: block;\n background-color: var(--hx-nav-item-host-bg, var(--hx-color-neutral-900, #111827));\n }\n\n * {\n box-sizing: border-box;\n }\n\n /* ─── Nav Item ─── */\n\n .nav-item {\n display: flex;\n flex-direction: column;\n }\n\n /* ─── Link / Button ─── */\n\n .nav-item__link {\n display: flex;\n align-items: center;\n gap: var(--hx-space-3, 0.75rem);\n padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem));\n min-height: var(--hx-space-10, 2.5rem);\n text-decoration: none;\n color: var(--hx-nav-item-color, var(--hx-color-neutral-300, #d1d5db));\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n margin: 0 var(--hx-space-2, 0.5rem);\n transition:\n background-color var(--hx-transition-fast, 150ms) ease,\n color var(--hx-transition-fast, 150ms) ease;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n font-family: var(--hx-font-family-sans, sans-serif);\n font-size: var(--hx-font-size-sm, 0.875rem);\n font-weight: var(--hx-font-weight-medium, 500);\n line-height: var(--hx-line-height-normal, 1.5);\n position: relative;\n border: none;\n background: transparent;\n width: calc(100% - var(--hx-space-4, 1rem));\n text-align: left;\n }\n\n /* Link variant */\n a.nav-item__link {\n display: flex;\n }\n\n .nav-item__link:hover {\n background-color: var(\n --hx-nav-item-hover-bg,\n var(--hx-overlay-white-8, rgba(255, 255, 255, 0.08))\n ); /* fallback for browsers without color-mix() */\n color: var(--hx-nav-item-hover-color, var(--hx-color-neutral-100, #f3f4f6));\n }\n\n @supports (color: color-mix(in srgb, red 50%, blue)) {\n .nav-item__link:hover {\n background-color: var(\n --hx-nav-item-hover-bg,\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n }\n\n .nav-item__link:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Active State ─── */\n\n :host([active]) .nav-item__link {\n background-color: var(--hx-nav-item-active-bg, var(--hx-color-primary-600, #2563eb));\n color: var(--hx-nav-item-active-color, var(--hx-color-neutral-50, #f9fafb));\n }\n\n :host([active]) .nav-item__link:hover {\n background-color: var(--hx-nav-item-active-hover-bg, var(--hx-color-primary-700, #1d4ed8));\n }\n\n /* ─── Disabled State ─── */\n\n :host([disabled]) .nav-item__link {\n opacity: 0.4;\n pointer-events: none;\n cursor: not-allowed;\n }\n\n /* ─── Icon ─── */\n\n .nav-item__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--hx-space-5, 1.25rem);\n height: var(--hx-space-5, 1.25rem);\n }\n\n /* ─── Label ─── */\n\n .nav-item__label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: opacity var(--hx-transition-fast, 150ms) ease;\n }\n\n /* ─── Badge ─── */\n\n .nav-item__badge {\n margin-left: auto;\n flex-shrink: 0;\n }\n\n /* ─── Expand Arrow ─── */\n\n .nav-item__arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin-left: auto;\n width: var(--hx-space-5, 1.25rem);\n height: var(--hx-space-5, 1.25rem);\n transition: transform var(--hx-transition-normal, 300ms) ease;\n }\n\n .nav-item__arrow svg {\n width: var(--hx-space-4, 1rem);\n height: var(--hx-space-4, 1rem);\n fill: currentColor;\n }\n\n :host([expanded]) .nav-item__arrow {\n transform: rotate(90deg);\n }\n\n /* ─── Children (sub-nav) ─── */\n\n .nav-item__children {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--hx-transition-normal, 300ms ease);\n overflow: hidden;\n }\n\n :host([expanded]) .nav-item__children {\n grid-template-rows: 1fr;\n }\n\n .nav-item__children-inner {\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding-left: var(--hx-space-6, 1.5rem);\n }\n\n /* ─── Tooltip (collapsed mode) ─── */\n\n .nav-item__tooltip {\n position: absolute;\n left: calc(100% + var(--hx-space-2, 0.5rem));\n top: 50%;\n transform: translateY(-50%);\n background-color: var(--hx-color-neutral-800, #1f2937);\n color: var(--hx-color-neutral-100, #f3f4f6);\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n font-size: var(--hx-font-size-xs, 0.75rem);\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n transition: opacity var(--hx-transition-fast, 150ms) ease;\n z-index: var(--hx-z-index-tooltip, 100);\n box-shadow: var(--hx-shadow-md, 0 2px 8px rgb(0 0 0 / 0.2));\n }\n\n :host([data-collapsed]) .nav-item__link:hover .nav-item__tooltip,\n :host([data-collapsed]) .nav-item__link:focus-visible .nav-item__tooltip {\n opacity: 1;\n }\n\n /* ─── Collapsed host state (propagated from parent) ─── */\n\n :host([data-collapsed]) .nav-item__label {\n width: 0;\n overflow: hidden;\n opacity: 0;\n }\n\n :host([data-collapsed]) .nav-item__badge {\n display: none;\n }\n\n :host([data-collapsed]) .nav-item__arrow {\n display: none;\n }\n\n :host([data-collapsed]) .nav-item__children {\n display: none !important;\n }\n\n :host([data-collapsed]) .nav-item__link {\n justify-content: center;\n margin: 0 var(--hx-space-1, 0.25rem);\n width: calc(100% - var(--hx-space-2, 0.5rem));\n padding: var(--hx-space-2, 0.5rem);\n position: relative;\n overflow: visible;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .nav-item__link,\n .nav-item__label,\n .nav-item__arrow,\n .nav-item__children,\n .nav-item__tooltip {\n transition: none;\n }\n\n :host([expanded]) .nav-item__children {\n grid-template-rows: 1fr;\n }\n }\n`;\n","import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixNavItemStyles } from './hx-nav-item.styles.js';\n\n/**\n * A navigation item for use inside hx-side-nav.\n * Supports icons, badges, sub-navigation, and active/disabled states.\n *\n * @summary Navigation item for hx-side-nav with support for icons, badges, and nested children.\n *\n * @tag hx-nav-item\n *\n * @slot - Default slot for item label text.\n * @slot icon - Icon to display before the label.\n * @slot badge - Badge content (e.g., notification count).\n * @slot children - Nested hx-nav-item children for sub-navigation.\n *\n * @csspart link - The anchor or button element.\n * @csspart icon - The icon container.\n * @csspart label - The label container.\n * @csspart badge - The badge container.\n * @csspart children - The children container.\n *\n * @cssprop [--hx-nav-item-color=var(--hx-color-neutral-300)] - Item text color.\n * @cssprop [--hx-nav-item-hover-bg] - Item hover background.\n * @cssprop [--hx-nav-item-hover-color=var(--hx-color-neutral-100)] - Item hover text color.\n * @cssprop [--hx-nav-item-active-bg=var(--hx-color-primary-600)] - Active item background.\n * @cssprop [--hx-nav-item-active-color=var(--hx-color-neutral-50)] - Active item text color.\n * @cssprop [--hx-nav-item-padding] - Item padding.\n * @cssprop [--hx-nav-item-host-bg=var(--hx-color-neutral-900)] - Component host background color.\n */\n@customElement('hx-nav-item')\nexport class HelixNavItem extends LitElement {\n static override styles = [tokenStyles, helixNavItemStyles];\n\n // ─── Properties ───\n\n /**\n * The URL this nav item links to.\n * @attr href\n */\n @property({ type: String })\n href = '';\n\n /**\n * Whether this item is the current/active page.\n * @attr active\n */\n @property({ type: Boolean, reflect: true })\n active = false;\n\n /**\n * Whether the sub-navigation is expanded.\n * @attr expanded\n */\n @property({ type: Boolean, reflect: true })\n expanded = false;\n\n /**\n * Whether this nav item is disabled.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n // ─── State ───\n\n /** Whether the children slot has assigned nodes. Updated via slotchange. */\n /** @internal */\n @state() private _hasChildren = false;\n\n /** Whether this item is in collapsed mode. Set externally by hx-side-nav via data-collapsed attribute. */\n /** @internal */\n @state() private _isCollapsed = false;\n\n // ─── Attribute Observer ───\n\n static override get observedAttributes(): string[] {\n return [...super.observedAttributes, 'data-collapsed'];\n }\n\n override attributeChangedCallback(name: string, old: string | null, value: string | null): void {\n super.attributeChangedCallback(name, old, value);\n if (name === 'data-collapsed') {\n this._isCollapsed = value !== null;\n }\n }\n\n // ─── Slot Change Handler ───\n\n /** @internal */\n private _onChildrenSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n this._hasChildren = slot.assignedNodes({ flatten: true }).length > 0;\n }\n\n // ─── Private Helpers ───\n\n /** @internal */\n private _getDirectText(): string {\n return Array.from(this.childNodes)\n .filter((n) => n.nodeType === Node.TEXT_NODE)\n .map((n) => n.textContent?.trim() ?? '')\n .filter(Boolean)\n .join(' ');\n }\n\n /** @internal */\n private _handleToggle(e: Event): void {\n if (this.disabled) return;\n e.preventDefault();\n this.expanded = !this.expanded;\n }\n\n /** @internal */\n private _renderExpandArrow() {\n return html`<span class=\"nav-item__arrow\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 20 20\">\n <path\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n />\n </svg>\n </span>`;\n }\n\n // ─── Render ───\n\n override render() {\n const label = this._getDirectText();\n\n const innerContent = html`\n <span part=\"icon\" class=\"nav-item__icon\">\n <slot name=\"icon\"></slot>\n </span>\n <span part=\"label\" class=\"nav-item__label\">\n <slot></slot>\n </span>\n <span part=\"badge\" class=\"nav-item__badge\">\n <slot name=\"badge\"></slot>\n </span>\n ${this._hasChildren ? this._renderExpandArrow() : nothing}\n ${this._isCollapsed\n ? html`<span id=\"nav-item-tooltip\" class=\"nav-item__tooltip\" role=\"tooltip\">${label}</span>`\n : nothing}\n `;\n\n // Render as anchor when href provided and no expandable children\n const linkEl =\n this.href && !this._hasChildren\n ? html`<a\n part=\"link\"\n class=\"nav-item__link\"\n href=${this.href}\n aria-current=${this.active ? 'page' : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-describedby=${this._isCollapsed ? 'nav-item-tooltip' : nothing}\n tabindex=${this.disabled ? '-1' : '0'}\n >\n ${innerContent}\n </a>`\n : html`<button\n part=\"link\"\n class=\"nav-item__link\"\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-expanded=${this._hasChildren ? String(this.expanded) : nothing}\n aria-describedby=${this._isCollapsed ? 'nav-item-tooltip' : nothing}\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this._handleToggle}\n >\n ${innerContent}\n </button>`;\n\n return html`\n <div class=\"nav-item\">\n ${linkEl}\n <div part=\"children\" class=\"nav-item__children\" role=\"group\">\n <div class=\"nav-item__children-inner\">\n <slot name=\"children\" @slotchange=${this._onChildrenSlotChange}></slot>\n </div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-nav-item': HelixNavItem;\n }\n}\n\nexport type { HelixNavItem as HxNavItem };\n"],"names":["helixSideNavStyles","css","HelixSideNav","LitElement","changedProperties","slot","_a","navItems","el","item","activeEl","currentIndex","i","_b","nextIndex","targetItem","focusTarget","_c","html","tokenStyles","__decorateClass","property","customElement","helixNavItemStyles","HelixNavItem","name","old","value","n","label","innerContent","nothing","linkEl","state"],"mappings":"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"}