@fusion.dev/helix-headless 0.145.0 → 0.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/custom-elements.json +12286 -4281
  2. package/dist/accordion/item/accordion-item.d.ts +51 -18
  3. package/dist/accordion/item/accordion-item.js +45 -13
  4. package/dist/accordion/root/accordion-root.d.ts +16 -7
  5. package/dist/accordion/root/accordion-root.js +3 -3
  6. package/dist/announcement/root/announcement-root.d.ts +16 -6
  7. package/dist/announcement/root/announcement-root.js +37 -7
  8. package/dist/app-header/root/app-header-root.d.ts +7 -2
  9. package/dist/app-header/root/app-header-root.js +9 -1
  10. package/dist/app-header/sectioning.d.ts +3 -1
  11. package/dist/app-header/sectioning.js +3 -2
  12. package/dist/area-chart/root/area-chart-root.d.ts +18 -1
  13. package/dist/area-chart/root/area-chart-root.js +11 -3
  14. package/dist/avatar/group/avatar-group.d.ts +20 -14
  15. package/dist/avatar/group/avatar-group.js +17 -19
  16. package/dist/avatar/root/avatar-root.d.ts +31 -1
  17. package/dist/avatar/root/avatar-root.js +11 -1
  18. package/dist/badge/root/badge-root.d.ts +60 -7
  19. package/dist/badge/root/badge-root.js +89 -6
  20. package/dist/bar-chart/root/bar-chart-root.d.ts +18 -1
  21. package/dist/bar-chart/root/bar-chart-root.js +48 -20
  22. package/dist/bar-chart/stack.d.ts +25 -0
  23. package/dist/bar-chart/stack.js +27 -0
  24. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +14 -0
  25. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +12 -2
  26. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +25 -0
  27. package/dist/breadcrumbs/root/breadcrumbs-root.js +51 -4
  28. package/dist/button/root/button-root.d.ts +50 -38
  29. package/dist/button/root/button-root.js +42 -53
  30. package/dist/button/submitter.d.ts +27 -0
  31. package/dist/button/submitter.js +25 -0
  32. package/dist/button-group/root/button-group-root.d.ts +2 -1
  33. package/dist/button-group/root/button-group-root.js +5 -1
  34. package/dist/canvas/node/canvas-node.d.ts +4 -3
  35. package/dist/canvas/node/canvas-node.js +3 -2
  36. package/dist/canvas/root/canvas-root.js +2 -2
  37. package/dist/card/root/card-root.d.ts +36 -4
  38. package/dist/card/root/card-root.js +29 -10
  39. package/dist/carousel/root/carousel-root.d.ts +43 -4
  40. package/dist/carousel/root/carousel-root.js +40 -12
  41. package/dist/carousel/stops.d.ts +20 -0
  42. package/dist/carousel/stops.js +30 -0
  43. package/dist/chat/message/chat-message.js +5 -4
  44. package/dist/chat/naming.d.ts +5 -1
  45. package/dist/chat/naming.js +4 -2
  46. package/dist/chat/root/chat-root.d.ts +40 -4
  47. package/dist/chat/root/chat-root.js +32 -6
  48. package/dist/checkbox/root/checkbox-root.d.ts +20 -0
  49. package/dist/checkbox/root/checkbox-root.js +18 -7
  50. package/dist/checkbox-group/root/checkbox-group-root.d.ts +8 -2
  51. package/dist/checkbox-group/root/checkbox-group-root.js +14 -11
  52. package/dist/checkbox-group/select-all.d.ts +21 -0
  53. package/dist/checkbox-group/select-all.js +7 -0
  54. package/dist/code-block/highlight.d.ts +15 -0
  55. package/dist/code-block/highlight.js +4 -0
  56. package/dist/code-block/root/code-block-root.d.ts +79 -10
  57. package/dist/code-block/root/code-block-root.js +74 -5
  58. package/dist/color-input/root/color-input-root.d.ts +14 -0
  59. package/dist/color-input/root/color-input-root.js +17 -7
  60. package/dist/color-picker/channels.js +1 -2
  61. package/dist/color-picker/root/color-picker-root.d.ts +53 -16
  62. package/dist/color-picker/root/color-picker-root.js +155 -46
  63. package/dist/color-picker/wheel.d.ts +17 -0
  64. package/dist/color-picker/wheel.js +6 -0
  65. package/dist/combobox/root/combobox-root.d.ts +56 -0
  66. package/dist/combobox/root/combobox-root.js +92 -15
  67. package/dist/command/root/command-root.d.ts +19 -2
  68. package/dist/command/root/command-root.js +24 -23
  69. package/dist/copy-button/root/copy-button-root.d.ts +21 -1
  70. package/dist/copy-button/root/copy-button-root.js +16 -4
  71. package/dist/data-table/index.d.ts +1 -1
  72. package/dist/data-table/index.js +1 -1
  73. package/dist/data-table/keys.d.ts +6 -0
  74. package/dist/data-table/keys.js +14 -0
  75. package/dist/data-table/root/data-table-root.d.ts +27 -18
  76. package/dist/data-table/root/data-table-root.js +31 -57
  77. package/dist/data-table/tree.d.ts +16 -1
  78. package/dist/data-table/tree.js +2 -3
  79. package/dist/date-input/root/date-input-root.d.ts +11 -2
  80. package/dist/date-input/root/date-input-root.js +26 -12
  81. package/dist/date-picker/root/date-picker-root.d.ts +14 -9
  82. package/dist/date-picker/root/date-picker-root.js +33 -22
  83. package/dist/description-list/item/description-list-item.d.ts +18 -4
  84. package/dist/description-list/item/description-list-item.js +8 -4
  85. package/dist/dialog/description.js +15 -1
  86. package/dist/dialog/root/dialog-root.d.ts +8 -2
  87. package/dist/dialog/root/dialog-root.js +16 -1
  88. package/dist/divider/root/divider-root.d.ts +3 -0
  89. package/dist/divider/root/divider-root.js +2 -1
  90. package/dist/donut-chart/root/donut-chart-root.d.ts +31 -0
  91. package/dist/donut-chart/root/donut-chart-root.js +55 -1
  92. package/dist/donut-chart/slice-label.d.ts +35 -0
  93. package/dist/donut-chart/slice-label.js +11 -0
  94. package/dist/drawer/reveal.d.ts +8 -0
  95. package/dist/drawer/reveal.js +1 -0
  96. package/dist/drawer/root/drawer-root.d.ts +63 -2
  97. package/dist/drawer/root/drawer-root.js +75 -4
  98. package/dist/drilldown/item/drilldown-item.d.ts +21 -1
  99. package/dist/drilldown/item/drilldown-item.js +40 -5
  100. package/dist/drilldown/root/drilldown-root.d.ts +21 -3
  101. package/dist/drilldown/root/drilldown-root.js +22 -3
  102. package/dist/element-events.generated.js +35 -6
  103. package/dist/empty/root/empty-root.d.ts +34 -2
  104. package/dist/empty/root/empty-root.js +26 -4
  105. package/dist/file-input/root/file-input-root.d.ts +99 -8
  106. package/dist/file-input/root/file-input-root.js +120 -22
  107. package/dist/file-input/screen.d.ts +2 -1
  108. package/dist/file-input/status.d.ts +24 -0
  109. package/dist/file-input/status.js +10 -0
  110. package/dist/filter-input/chip/filter-chip.d.ts +23 -0
  111. package/dist/filter-input/chip/filter-chip.js +11 -2
  112. package/dist/filter-input/menu/filter-menu.d.ts +2 -0
  113. package/dist/filter-input/menu/filter-menu.js +12 -4
  114. package/dist/filter-input/root/filter-input-root.d.ts +38 -6
  115. package/dist/filter-input/root/filter-input-root.js +18 -28
  116. package/dist/filter-input/suggest.d.ts +28 -3
  117. package/dist/filter-input/suggest.js +18 -8
  118. package/dist/format-date/options.d.ts +3 -4
  119. package/dist/format-date/options.js +2 -2
  120. package/dist/format-date/root/format-date-root.d.ts +27 -17
  121. package/dist/format-date/root/format-date-root.js +27 -48
  122. package/dist/heatmap/root/buckets.d.ts +21 -0
  123. package/dist/heatmap/root/buckets.js +34 -0
  124. package/dist/heatmap/root/heatmap-root.d.ts +83 -11
  125. package/dist/heatmap/root/heatmap-root.js +104 -12
  126. package/dist/icon/index.d.ts +1 -1
  127. package/dist/icon/index.js +1 -1
  128. package/dist/icon/registry.d.ts +26 -1
  129. package/dist/icon/registry.js +12 -1
  130. package/dist/icon/root/icon-root.d.ts +25 -1
  131. package/dist/icon/root/icon-root.js +44 -12
  132. package/dist/icon/root/index.d.ts +1 -1
  133. package/dist/icon/root/index.js +1 -1
  134. package/dist/icon/settle.d.ts +7 -0
  135. package/dist/icon/settle.js +10 -0
  136. package/dist/icon-button/root/icon-button-root.d.ts +2 -0
  137. package/dist/image/root/image-root.d.ts +14 -1
  138. package/dist/image/root/image-root.js +7 -2
  139. package/dist/input/root/input-root.d.ts +34 -3
  140. package/dist/input/root/input-root.js +17 -4
  141. package/dist/kbd/keys.d.ts +29 -0
  142. package/dist/kbd/keys.js +52 -0
  143. package/dist/kbd/root/kbd-root.d.ts +52 -1
  144. package/dist/kbd/root/kbd-root.js +40 -47
  145. package/dist/legend/hidden-series.d.ts +10 -2
  146. package/dist/legend/hidden-series.js +5 -2
  147. package/dist/legend/root/legend-root.d.ts +77 -12
  148. package/dist/legend/root/legend-root.js +71 -17
  149. package/dist/lightbox/root/lightbox-root.d.ts +98 -10
  150. package/dist/lightbox/root/lightbox-root.js +153 -18
  151. package/dist/lightbox/zoom-controller.d.ts +59 -0
  152. package/dist/lightbox/zoom-controller.js +128 -0
  153. package/dist/lightbox/zoom.d.ts +24 -0
  154. package/dist/lightbox/zoom.js +18 -0
  155. package/dist/line-chart/root/line-chart-root.d.ts +38 -1
  156. package/dist/line-chart/root/line-chart-root.js +31 -3
  157. package/dist/list/item/list-item.d.ts +2 -0
  158. package/dist/list/item/list-item.js +11 -2
  159. package/dist/list/root/list-root.d.ts +70 -13
  160. package/dist/list/root/list-root.js +91 -13
  161. package/dist/list/selection.d.ts +54 -7
  162. package/dist/list/selection.js +32 -7
  163. package/dist/listbox/root/listbox-root.d.ts +44 -4
  164. package/dist/listbox/root/listbox-root.js +72 -34
  165. package/dist/loader/busy.d.ts +10 -0
  166. package/dist/loader/busy.js +11 -0
  167. package/dist/loader/root/loader-root.d.ts +9 -2
  168. package/dist/loader/root/loader-root.js +23 -3
  169. package/dist/megamenu/hand-over.d.ts +75 -0
  170. package/dist/megamenu/hand-over.js +67 -0
  171. package/dist/megamenu/root/megamenu-root.d.ts +80 -15
  172. package/dist/megamenu/root/megamenu-root.js +76 -19
  173. package/dist/menu/item/menu-item.d.ts +51 -2
  174. package/dist/menu/item/menu-item.js +50 -26
  175. package/dist/menu/root/menu-root.d.ts +17 -0
  176. package/dist/menu/root/menu-root.js +2 -2
  177. package/dist/meter/root/meter-root.d.ts +62 -1
  178. package/dist/meter/root/meter-root.js +38 -16
  179. package/dist/navigation/root/navigation-root.d.ts +2 -1
  180. package/dist/navigation/root/navigation-root.js +2 -2
  181. package/dist/notifications/root/notifications-root.d.ts +20 -4
  182. package/dist/notifications/root/notifications-root.js +30 -8
  183. package/dist/number-input/grain.d.ts +28 -0
  184. package/dist/number-input/grain.js +14 -0
  185. package/dist/number-input/root/number-input-root.d.ts +34 -9
  186. package/dist/number-input/root/number-input-root.js +31 -25
  187. package/dist/object-inspector/root/object-inspector-root.d.ts +88 -33
  188. package/dist/object-inspector/root/object-inspector-root.js +134 -92
  189. package/dist/object-inspector/rows.d.ts +18 -0
  190. package/dist/object-inspector/rows.js +33 -0
  191. package/dist/option/index.d.ts +1 -0
  192. package/dist/option/index.js +1 -0
  193. package/dist/option/root/option-root.d.ts +5 -3
  194. package/dist/option/separator/option-separator.d.ts +30 -0
  195. package/dist/option/separator/option-separator.js +21 -0
  196. package/dist/outline/root/outline-root.d.ts +30 -0
  197. package/dist/outline/root/outline-root.js +17 -13
  198. package/dist/pagination/size/pagination-size.d.ts +6 -0
  199. package/dist/pagination/size/pagination-size.js +5 -3
  200. package/dist/pin-input/code.d.ts +37 -0
  201. package/dist/pin-input/code.js +25 -0
  202. package/dist/pin-input/root/pin-input-root.d.ts +116 -115
  203. package/dist/pin-input/root/pin-input-root.js +163 -155
  204. package/dist/popover/hide-outside.d.ts +14 -0
  205. package/dist/popover/hide-outside.js +34 -0
  206. package/dist/popover/root/popover-root.d.ts +64 -8
  207. package/dist/popover/root/popover-root.js +67 -4
  208. package/dist/progress/root/progress-root.d.ts +47 -0
  209. package/dist/progress/root/progress-root.js +34 -16
  210. package/dist/qr-code/export.d.ts +45 -1
  211. package/dist/qr-code/export.js +28 -0
  212. package/dist/qr-code/name.d.ts +11 -0
  213. package/dist/qr-code/name.js +7 -0
  214. package/dist/qr-code/root/qr-code-root.d.ts +36 -11
  215. package/dist/qr-code/root/qr-code-root.js +58 -11
  216. package/dist/quote/marks.d.ts +8 -0
  217. package/dist/quote/marks.js +5 -0
  218. package/dist/quote/root/quote-root.d.ts +14 -2
  219. package/dist/quote/root/quote-root.js +23 -1
  220. package/dist/radio/group/radio-group.d.ts +15 -0
  221. package/dist/radio/root/radio-root.d.ts +6 -2
  222. package/dist/radio/root/radio-root.js +7 -2
  223. package/dist/rating/root/rating-root.d.ts +30 -12
  224. package/dist/rating/root/rating-root.js +27 -27
  225. package/dist/scatter-chart/fit.d.ts +15 -0
  226. package/dist/scatter-chart/fit.js +35 -0
  227. package/dist/scatter-chart/root/scatter-chart-root.d.ts +51 -1
  228. package/dist/scatter-chart/root/scatter-chart-root.js +64 -24
  229. package/dist/scroll-area/root/scroll-area-root.d.ts +22 -51
  230. package/dist/scroll-area/root/scroll-area-root.js +57 -173
  231. package/dist/scroll-area/scrollbar-controller.d.ts +111 -0
  232. package/dist/scroll-area/scrollbar-controller.js +172 -0
  233. package/dist/scroll-area/scrollbar.d.ts +27 -8
  234. package/dist/scroll-area/scrollbar.js +10 -1
  235. package/dist/select/align.d.ts +47 -0
  236. package/dist/select/align.js +7 -0
  237. package/dist/select/root/select-root.d.ts +71 -0
  238. package/dist/select/root/select-root.js +78 -6
  239. package/dist/skeleton/root/skeleton-root.d.ts +3 -0
  240. package/dist/skeleton/root/skeleton-root.js +4 -2
  241. package/dist/skip-link/root/skip-link-root.js +2 -2
  242. package/dist/slider/root/slider-root.d.ts +59 -5
  243. package/dist/slider/root/slider-root.js +45 -3
  244. package/dist/sparkline/readings.d.ts +36 -0
  245. package/dist/sparkline/readings.js +36 -0
  246. package/dist/sparkline/root/sparkline-root.d.ts +121 -7
  247. package/dist/sparkline/root/sparkline-root.js +160 -26
  248. package/dist/speed-dial/item/speed-dial-item.d.ts +1 -1
  249. package/dist/speed-dial/item/speed-dial-item.js +2 -2
  250. package/dist/speed-dial/root/speed-dial-root.d.ts +6 -0
  251. package/dist/speed-dial/root/speed-dial-root.js +11 -3
  252. package/dist/splitter/root/splitter-root.d.ts +10 -12
  253. package/dist/splitter/root/splitter-root.js +211 -204
  254. package/dist/stat/root/stat-root.d.ts +14 -5
  255. package/dist/stat/root/stat-root.js +21 -5
  256. package/dist/steps/reach.d.ts +5 -0
  257. package/dist/steps/reach.js +3 -0
  258. package/dist/steps/root/steps-root.d.ts +56 -3
  259. package/dist/steps/root/steps-root.js +50 -6
  260. package/dist/steps/step/step.d.ts +8 -0
  261. package/dist/steps/step/step.js +8 -3
  262. package/dist/switch/root/switch-root.d.ts +10 -0
  263. package/dist/table/column/table-column.d.ts +6 -10
  264. package/dist/table/column/table-column.js +8 -20
  265. package/dist/table/root/table-root.d.ts +31 -10
  266. package/dist/table/root/table-root.js +14 -18
  267. package/dist/table/row/table-row.d.ts +24 -0
  268. package/dist/table/row/table-row.js +37 -1
  269. package/dist/tabs/panel/tab-panel.d.ts +16 -3
  270. package/dist/tabs/panel/tab-panel.js +34 -5
  271. package/dist/tabs/root/tabs-root.d.ts +17 -3
  272. package/dist/tabs/root/tabs-root.js +1 -1
  273. package/dist/tabs/tab/tab.d.ts +5 -0
  274. package/dist/tabs/tab/tab.js +5 -2
  275. package/dist/tag/group/tag-group.d.ts +44 -5
  276. package/dist/tag/group/tag-group.js +60 -9
  277. package/dist/tag/root/tag-root.js +9 -2
  278. package/dist/textarea/root/textarea-root.d.ts +41 -2
  279. package/dist/textarea/root/textarea-root.js +39 -1
  280. package/dist/time-input/root/time-input-root.d.ts +10 -2
  281. package/dist/time-input/root/time-input-root.js +24 -13
  282. package/dist/time-picker/root/time-picker-root.d.ts +28 -17
  283. package/dist/time-picker/root/time-picker-root.js +18 -29
  284. package/dist/time-picker/wheel-name.d.ts +9 -0
  285. package/dist/time-picker/wheel-name.js +15 -0
  286. package/dist/timeline/group/timeline-group.js +2 -2
  287. package/dist/toast/item/toast-item.d.ts +16 -3
  288. package/dist/toast/item/toast-item.js +22 -6
  289. package/dist/toast/root/toast-root.d.ts +34 -4
  290. package/dist/toast/root/toast-root.js +74 -13
  291. package/dist/toast/words.d.ts +12 -0
  292. package/dist/toast/words.js +25 -0
  293. package/dist/toggle/group/toggle-group.d.ts +52 -7
  294. package/dist/toggle/group/toggle-group.js +58 -44
  295. package/dist/toggle/root/toggle-root.js +2 -4
  296. package/dist/toolbar/root/toolbar-root.d.ts +21 -5
  297. package/dist/toolbar/root/toolbar-root.js +52 -8
  298. package/dist/tooltip/root/tooltip-root.d.ts +20 -3
  299. package/dist/tooltip/root/tooltip-root.js +18 -1
  300. package/dist/tour/back.d.ts +10 -0
  301. package/dist/tour/back.js +8 -0
  302. package/dist/tour/root/tour-root.d.ts +45 -2
  303. package/dist/tour/root/tour-root.js +53 -8
  304. package/dist/tour/stop/tour-stop.d.ts +3 -0
  305. package/dist/tour/stop/tour-stop.js +3 -3
  306. package/dist/tree/item/tree-item.d.ts +7 -3
  307. package/dist/tree/item/tree-item.js +3 -0
  308. package/dist/tree/root/tree-root.d.ts +24 -3
  309. package/dist/tree/root/tree-root.js +32 -13
  310. package/dist/tree/selection.js +2 -15
  311. package/dist/trend/figure.d.ts +16 -0
  312. package/dist/trend/figure.js +8 -0
  313. package/dist/trend/root/trend-root.d.ts +83 -19
  314. package/dist/trend/root/trend-root.js +59 -8
  315. package/dist/video/media-events.d.ts +13 -18
  316. package/dist/video/media-events.js +1 -5
  317. package/dist/video/root/extra-controls.d.ts +12 -0
  318. package/dist/video/root/extra-controls.js +6 -2
  319. package/dist/video/root/video-root.d.ts +23 -6
  320. package/dist/video/root/video-root.js +19 -10
  321. package/dist/video-playlist/menu/video-playlist-menu.d.ts +2 -0
  322. package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
  323. package/dist/video-playlist/root/video-playlist-root.d.ts +17 -1
  324. package/dist/video-playlist/root/video-playlist-root.js +3 -0
  325. package/dist/virtual-list/fill.d.ts +11 -8
  326. package/dist/virtual-list/fill.js +10 -17
  327. package/dist/virtual-list/keys.d.ts +16 -7
  328. package/dist/virtual-list/keys.js +17 -6
  329. package/dist/virtual-list/plan.d.ts +65 -0
  330. package/dist/virtual-list/plan.js +27 -0
  331. package/dist/virtual-list/root/virtual-list-root.d.ts +136 -13
  332. package/dist/virtual-list/root/virtual-list-root.js +218 -51
  333. package/lint.json +1 -1
  334. package/package.json +8 -8
  335. package/types/jsx.d.ts +7441 -1458
  336. package/types/svelte.d.ts +1 -0
  337. package/types/vue.d.ts +1501 -326
  338. package/dist/chat/relative-clock.d.ts +0 -39
  339. package/dist/chat/relative-clock.js +0 -31
  340. package/dist/data-table/root/order.d.ts +0 -141
  341. package/dist/data-table/root/order.js +0 -76
  342. package/dist/tag/selection.d.ts +0 -10
  343. package/dist/tag/selection.js +0 -12
@@ -4,9 +4,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { AriaForwardController, CommandController, customElement, edgeOffset, HelixElement, headingsIn, isRtl, lockScroll, MixinControllerOpen, OpenPhaseController, onUnlessFalse, parseSnapPoints, reflectElements, SwipeController, settleSwipe, snapTravel, swipeAxis, swipeEdge, towardEdge, unlockScroll, } from '@fusion.dev/helix-core';
7
+ import { AriaForwardController, CommandController, customElement, drawDismiss, drawDismissGlyph, edgeOffset, FocusScopeController, HelixElement, headingsIn, isRtl, lockScroll, MixinControllerOpen, nearest, OpenPhaseController, onUnlessFalse, parseSnapPoints, reflectElements, SwipeController, settleSwipe, snapTravel, swipeAxis, swipeEdge, towardEdge, unlockScroll, } from '@fusion.dev/helix-core';
8
8
  import { html, nothing } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
+ import { beyondWindow } from '../reveal.js';
10
11
  import { startsSwipe } from '../swipe-start.js';
11
12
  let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(HelixElement) {
12
13
  constructor() {
@@ -18,6 +19,8 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
18
19
  '--toggle': () => this.toggleOpen(),
19
20
  },
20
21
  });
22
+ this.dismissible = false;
23
+ this.dismissLabel = 'Close';
21
24
  this.label = '';
22
25
  this.aria = new AriaForwardController(this, { target: () => this.panel });
23
26
  this.modal = true;
@@ -33,6 +36,7 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
33
36
  surface: () => this.panel,
34
37
  });
35
38
  this.rest = 0;
39
+ this.shown = 1;
36
40
  this.swipes = new SwipeController(this, {
37
41
  axis: () => (this.open && this.swipe ? swipeAxis(this.edge) : undefined),
38
42
  end: (dx, dy, vx, vy) => this.settle(dx, dy, vx, vy),
@@ -40,6 +44,15 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
40
44
  start: (target, event) => startsSwipe(target, event.pointerType, swipeAxis(this.edge), this.partNamed('content')),
41
45
  surface: () => this.panel,
42
46
  });
47
+ this.handleFocusIn = (event) => {
48
+ const target = event.composedPath()[0];
49
+ if (this.shown >= 1 || !(target instanceof Element) || typeof window === 'undefined') {
50
+ return;
51
+ }
52
+ if (beyondWindow(target.getBoundingClientRect(), window.innerWidth, window.innerHeight)) {
53
+ this.snapTo(1);
54
+ }
55
+ };
43
56
  this.handleKeydown = (event) => {
44
57
  if (event.key !== 'Escape' ||
45
58
  event.defaultPrevented ||
@@ -51,6 +64,16 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
51
64
  event.preventDefault();
52
65
  this.requestOpen(false);
53
66
  };
67
+ this.scope = new FocusScopeController(this, {
68
+ contain: () => this.open && this.modal,
69
+ contents: () => [
70
+ ...['header', '', 'footer'].flatMap((name) => this.renderRoot
71
+ ?.querySelector(name ? `slot[name="${name}"]` : 'slot:not([name])')
72
+ ?.assignedElements({ flatten: true }) ?? []),
73
+ ...[...(this.panel?.children ?? [])].filter((one) => one.localName === 'button'),
74
+ ],
75
+ surface: () => this.panel,
76
+ });
54
77
  this.handleCancel = (event) => {
55
78
  event.preventDefault();
56
79
  this.requestOpen(false);
@@ -117,9 +140,33 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
117
140
  return;
118
141
  }
119
142
  if (shown !== 0) {
120
- this.rest = snapTravel(size, shown);
143
+ this.restAt(shown);
121
144
  }
145
+ else {
146
+ this.place(this.rest);
147
+ }
148
+ }
149
+ get snap() {
150
+ return this.open ? this.shown : 1;
151
+ }
152
+ restAt(shown) {
153
+ this.shown = shown;
154
+ this.rest = snapTravel(this.extent, shown);
122
155
  this.place(this.rest);
156
+ this.markSnap();
157
+ }
158
+ markSnap() {
159
+ this.toggleState('snapped', this.open && this.shown < 1);
160
+ }
161
+ snapTo(point) {
162
+ if (!this.open) {
163
+ return;
164
+ }
165
+ const points = parseSnapPoints(this.snapPoints);
166
+ const at = nearest(points, point);
167
+ if (at !== undefined) {
168
+ this.restAt(at);
169
+ }
123
170
  }
124
171
  show() {
125
172
  this.requestOpen(true);
@@ -143,8 +190,13 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
143
190
  : headingsIn(slot?.assignedElements({ flatten: true }) ?? []);
144
191
  this.namedByHeader = reflectElements(this.panel, 'ariaLabelledByElements', heading, this.namedByHeader);
145
192
  }
193
+ connectedCallback() {
194
+ super.connectedCallback();
195
+ this.addEventListener('focusin', this.handleFocusIn);
196
+ }
146
197
  disconnectedCallback() {
147
198
  super.disconnectedCallback();
199
+ this.removeEventListener('focusin', this.handleFocusIn);
148
200
  unlockScroll(this);
149
201
  }
150
202
  updated(changed) {
@@ -152,7 +204,9 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
152
204
  this.nameByHeader();
153
205
  if (changed.has('open') && !this.open) {
154
206
  this.rest = 0;
207
+ this.shown = 1;
155
208
  this.place(0);
209
+ this.markSnap();
156
210
  }
157
211
  if (this.open && this.modal) {
158
212
  lockScroll(this);
@@ -171,8 +225,7 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
171
225
  else {
172
226
  panel.show();
173
227
  }
174
- this.rest = snapTravel(this.extent, parseSnapPoints(this.snapPoints)[0] ?? 1);
175
- this.place(this.rest);
228
+ this.restAt(parseSnapPoints(this.snapPoints)[0] ?? 1);
176
229
  }
177
230
  else if (!this.open && panel.open) {
178
231
  panel.close();
@@ -192,12 +245,30 @@ let HelixHeadlessDrawer = class HelixHeadlessDrawer extends MixinControllerOpen(
192
245
  <div part="header"><slot name="header" @slotchange=${this.nameByHeader}></slot></div>
193
246
  <div part="content"><slot></slot></div>
194
247
  <div part="footer"><slot name="footer"></slot></div>
248
+ ${this.dismissible
249
+ ? drawDismiss({
250
+ label: this.dismissLabel,
251
+ mark: this.renderDismissIcon(),
252
+ onDismiss: () => this.close(),
253
+ })
254
+ : nothing}
195
255
  </dialog>`;
196
256
  }
257
+ renderDismissIcon() {
258
+ return html `<slot name="dismiss-icon">
259
+ ${drawDismissGlyph()}
260
+ </slot>`;
261
+ }
197
262
  };
198
263
  __decorate([
199
264
  property({ attribute: 'closedby', reflect: true })
200
265
  ], HelixHeadlessDrawer.prototype, "closedBy", void 0);
266
+ __decorate([
267
+ property({ reflect: true, type: Boolean })
268
+ ], HelixHeadlessDrawer.prototype, "dismissible", void 0);
269
+ __decorate([
270
+ property({ attribute: 'dismiss-label' })
271
+ ], HelixHeadlessDrawer.prototype, "dismissLabel", void 0);
201
272
  __decorate([
202
273
  property()
203
274
  ], HelixHeadlessDrawer.prototype, "label", void 0);
@@ -13,6 +13,8 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
13
13
  * - On the page that is showing, it renders its row.
14
14
  * - When its own page is showing, it renders only that page's rows. Its row
15
15
  * belongs to the page above.
16
+ * - When a page further down its own is showing, it renders its page's slot
17
+ * alone, so the rows below reach the page.
16
18
  * - Otherwise it renders nothing. The rows stay in the light DOM untouched, so
17
19
  * there is no state to keep.
18
20
  *
@@ -23,6 +25,10 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
23
25
  * `aria-haspopup`, the same way `Menu` marks a row with a submenu. The server
24
26
  * render leaves both out, because the server cannot see the children.
25
27
  *
28
+ * The row is named by its label alone. Words in `description`, a line under
29
+ * the label, and in `end` describe it instead, through `aria-describedby`, as
30
+ * `Menu.Item` does: a reader hears "Theme", then "Dark".
31
+ *
26
32
  * @since 0.1.0
27
33
  * @status stable
28
34
  * @aliases Panel item, Drill row
@@ -30,7 +36,8 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
30
36
  *
31
37
  * @slot - The row's label.
32
38
  * @slot chevron - Replaces the caret of a row that opens a page, such as with your own icon.
33
- * @slot end - Content after the label, usually an icon or a count.
39
+ * @slot description - A line under the label that describes the row. It describes the row to a screen reader and is not part of its name.
40
+ * @slot end - Content after the label, such as the setting a page holds or a count. It describes the row and is not part of its name.
34
41
  * @slot page - The rows of the page this row opens.
35
42
  * @slot start - Content before the label, usually an icon.
36
43
  *
@@ -71,6 +78,11 @@ export declare class HelixHeadlessDrilldownItem extends HelixElement {
71
78
  * event handler is why it is kept off the typings.
72
79
  */
73
80
  onPage: boolean;
81
+ /**
82
+ * @internal Whether the page showing is below this row's own, deeper than one
83
+ * level. Written by the stack.
84
+ */
85
+ onPath: boolean;
74
86
  /**
75
87
  * @internal Whether this row's own page is the one showing. Written by the
76
88
  * stack.
@@ -89,6 +101,10 @@ export declare class HelixHeadlessDrilldownItem extends HelixElement {
89
101
  * render would open with no caret on the row that leads to it.
90
102
  */
91
103
  private page;
104
+ /** Whether anything is slotted under the label, read the way `page` is. */
105
+ private description;
106
+ /** Whether anything is slotted after the label, read the way `page` is. */
107
+ private end;
92
108
  /**
93
109
  * Reads the children before each render, where they can be known.
94
110
  *
@@ -109,6 +125,10 @@ export declare class HelixHeadlessDrilldownItem extends HelixElement {
109
125
  * the same note.
110
126
  */
111
127
  private readonly readPage;
128
+ /** Re-reads whether the line under the label or the words after it are filled. */
129
+ private readonly readWords;
130
+ /** What describes the row: the line under its label and the words after it. */
131
+ private get describedBy();
112
132
  /** Moves focus onto the row itself. */
113
133
  focusItem(): void;
114
134
  /**
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, deepActiveElement, HelixElement, HelixSelectEvent, } from '@fusion.dev/helix-core';
7
+ import { customElement, deepActiveElement, HelixElement, HelixSelectEvent, slotFilled, } from '@fusion.dev/helix-core';
8
8
  import { caretRight } from '@fusion.dev/helix-icons';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
@@ -16,24 +16,41 @@ let HelixHeadlessDrilldownItem = class HelixHeadlessDrilldownItem extends HelixE
16
16
  this.focusable = false;
17
17
  this.isDrilldownItem = true;
18
18
  this.onPage = true;
19
+ this.onPath = false;
19
20
  this.showingPage = false;
20
21
  this.value = '';
21
22
  this.page = false;
23
+ this.description = false;
24
+ this.end = false;
22
25
  this.readPage = () => {
23
26
  const slot = this.renderRoot.querySelector('slot[name="page"]');
24
27
  this.page = (slot?.assignedElements().length ?? 0) > 0;
25
28
  };
29
+ this.readWords = () => {
30
+ const slot = (name) => this.renderRoot.querySelector(`slot[name="${name}"]`);
31
+ this.description = slotFilled(slot('description'));
32
+ this.end = slotFilled(slot('end'));
33
+ };
26
34
  }
27
35
  willUpdate(changed) {
28
36
  super.willUpdate(changed);
29
37
  if (this.childrenKnown) {
30
- this.page = this.knownChildren.some((child) => child.slot === 'page');
38
+ const named = (name) => this.knownChildren.some((child) => child.slot === name);
39
+ this.page = named('page');
40
+ this.description = named('description');
41
+ this.end = named('end');
31
42
  }
32
43
  }
33
44
  firstUpdated(changed) {
34
45
  super.firstUpdated(changed);
35
46
  this.finishHydration();
36
47
  }
48
+ get describedBy() {
49
+ const ids = [this.description ? 'description' : '', this.end ? 'end' : '']
50
+ .filter((id) => id !== '')
51
+ .join(' ');
52
+ return ids === '' ? nothing : ids;
53
+ }
37
54
  focusItem() {
38
55
  this.partNamed('item')?.focus();
39
56
  }
@@ -51,14 +68,14 @@ let HelixHeadlessDrilldownItem = class HelixHeadlessDrilldownItem extends HelixE
51
68
  this.dispatchEvent(new HelixSelectEvent({ value: this.value }));
52
69
  }
53
70
  renderMark() {
54
- return html `<slot name="chevron"
71
+ return html `<slot name="chevron" aria-hidden="true"
55
72
  ><svg part="mark" data-mirror fill="currentColor" viewBox=${caretRight.viewBox} aria-hidden="true">
56
73
  ${unsafeSVG(caretRight.content)}
57
74
  </svg></slot
58
75
  >`;
59
76
  }
60
77
  render() {
61
- if (this.showingPage) {
78
+ if (this.showingPage || this.onPath) {
62
79
  return html `<slot name="page" @slotchange=${this.readPage}></slot>`;
63
80
  }
64
81
  if (!this.onPage) {
@@ -68,14 +85,23 @@ let HelixHeadlessDrilldownItem = class HelixHeadlessDrilldownItem extends HelixE
68
85
  part="item"
69
86
  type="button"
70
87
  role="menuitem"
88
+ aria-describedby=${this.describedBy}
71
89
  aria-disabled=${this.disabled ? 'true' : nothing}
72
90
  aria-haspopup=${this.page ? 'menu' : nothing}
73
91
  tabindex=${this.focusable ? '0' : '-1'}
92
+ ?data-described=${this.description}
74
93
  @click=${() => this.select()}
75
94
  >
76
95
  <slot name="start"></slot>
77
96
  <span part="label"><slot></slot></span>
78
- <slot name="end"></slot>
97
+ <slot
98
+ id="description"
99
+ name="description"
100
+ aria-hidden="true"
101
+ ?data-empty=${!this.description}
102
+ @slotchange=${this.readWords}
103
+ ></slot>
104
+ <slot id="end" name="end" aria-hidden="true" @slotchange=${this.readWords}></slot>
79
105
  ${this.page ? this.renderMark() : nothing}
80
106
  </button>
81
107
  <div hidden><slot name="page" @slotchange=${this.readPage}></slot></div>`;
@@ -90,6 +116,9 @@ __decorate([
90
116
  __decorate([
91
117
  property({ attribute: false })
92
118
  ], HelixHeadlessDrilldownItem.prototype, "onPage", void 0);
119
+ __decorate([
120
+ property({ attribute: false })
121
+ ], HelixHeadlessDrilldownItem.prototype, "onPath", void 0);
93
122
  __decorate([
94
123
  property({ attribute: false })
95
124
  ], HelixHeadlessDrilldownItem.prototype, "showingPage", void 0);
@@ -99,6 +128,12 @@ __decorate([
99
128
  __decorate([
100
129
  state()
101
130
  ], HelixHeadlessDrilldownItem.prototype, "page", void 0);
131
+ __decorate([
132
+ state()
133
+ ], HelixHeadlessDrilldownItem.prototype, "description", void 0);
134
+ __decorate([
135
+ state()
136
+ ], HelixHeadlessDrilldownItem.prototype, "end", void 0);
102
137
  HelixHeadlessDrilldownItem = __decorate([
103
138
  customElement('helix-headless-drilldown-item')
104
139
  ], HelixHeadlessDrilldownItem);
@@ -21,9 +21,16 @@ declare const HelixHeadlessDrilldown_base: (new (...args: any[]) => import("@fus
21
21
  * which `Menu` shares.
22
22
  *
23
23
  * After each move the host carries `data-direction`, `forward` into a page or
24
- * `back` out of one, so a stylesheet can slide the new page in from the side
25
- * the reader is going. The styled tier does, and holds still under reduced
26
- * motion.
24
+ * `back` out of one, and records `:state(forward)` or `:state(back)`, so a
25
+ * stylesheet can slide the new page in from the side the reader is going. Both
26
+ * are written again on every move, so an animation keyed on them runs for each
27
+ * page, two moves the same way included. The styled tier slides the page and
28
+ * swaps it at once under `prefers-reduced-motion`.
29
+ *
30
+ * Keys, on a row: Up and Down Arrow move between the rows, Home and End go to
31
+ * the first and the last, and a typed letter moves to the next row whose name
32
+ * starts with it. Enter, Space, or Right Arrow opens a row's page, and Left
33
+ * Arrow or Escape goes back, the two arrows swapping on a right-to-left page.
27
34
  *
28
35
  * The rows of the page showing are a `menu`, named by `label` on the top page
29
36
  * and by the page's title below it. The back button and the title sit above
@@ -50,7 +57,9 @@ declare const HelixHeadlessDrilldown_base: (new (...args: any[]) => import("@fus
50
57
  * @csspart page - The menu the rows are in.
51
58
  * @csspart title - The name of the page showing.
52
59
  *
60
+ * @cssstate back - The last move went back out of a page.
53
61
  * @cssstate drilled - A row's page is showing, so a frame around the drilldown can style itself for that depth.
62
+ * @cssstate forward - The last move went into a page.
54
63
  */
55
64
  export declare class HelixHeadlessDrilldown extends HelixHeadlessDrilldown_base {
56
65
  /**
@@ -80,6 +89,8 @@ export declare class HelixHeadlessDrilldown extends HelixHeadlessDrilldown_base
80
89
  * not suppress it.
81
90
  */
82
91
  private direction?;
92
+ /** Whether a move happened since the last update, so its marks are written again. */
93
+ private moved;
83
94
  private readonly drilldown;
84
95
  /**
85
96
  * The rows on the page showing, which is what the keys move over.
@@ -139,6 +150,13 @@ export declare class HelixHeadlessDrilldown extends HelixHeadlessDrilldown_base
139
150
  connectedCallback(): void;
140
151
  disconnectedCallback(): void;
141
152
  protected updated(changed: PropertyValues): void;
153
+ /**
154
+ * Writes which way the last move went. After a move, the marks come off and
155
+ * the page's style is read before they go back on, so an animation keyed on
156
+ * them starts again for the new page: two moves the same way would otherwise
157
+ * leave the same rule in force and the second page would arrive still.
158
+ */
159
+ private markDirection;
142
160
  /** Walks the tree marking which rows are on the page showing. */
143
161
  private mark;
144
162
  /**
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { AriaForwardController, customElement, DrilldownController, HelixElement, inlineStep, KeyboardNavigationController, keyClaimed, MixinCollection, slottedWords, } from '@fusion.dev/helix-core';
7
+ import { AriaForwardController, customElement, DrilldownController, HelixElement, inlineStep, KeyboardNavigationController, keyClaimed, MixinCollection, slottedWords, typeaheadByWords, } from '@fusion.dev/helix-core';
8
8
  import { caretLeft } from '@fusion.dev/helix-icons';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
@@ -15,6 +15,7 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
15
15
  super(...arguments);
16
16
  this.label = 'Navigation';
17
17
  this.backLabel = 'Back';
18
+ this.moved = false;
18
19
  this.drilldown = new DrilldownController(this, {
19
20
  isRow: (element) => 'isDrilldownItem' in element && element.isDrilldownItem === true,
20
21
  root: () => [...this.children],
@@ -37,7 +38,7 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
37
38
  })),
38
39
  reserved: () => ['ArrowLeft', 'ArrowRight'],
39
40
  selects: () => false,
40
- typeahead: (item) => item.words,
41
+ typeahead: typeaheadByWords(),
41
42
  });
42
43
  this.handleFocusIn = (event) => {
43
44
  const item = this.drilldown.rows.find((row) => row.contains(event.target));
@@ -100,6 +101,7 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
100
101
  return;
101
102
  }
102
103
  this.direction = 'forward';
104
+ this.moved = true;
103
105
  this.updateComplete.then(() => this.items[0]?.focusItem());
104
106
  }
105
107
  back() {
@@ -108,6 +110,7 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
108
110
  return false;
109
111
  }
110
112
  this.direction = 'back';
113
+ this.moved = true;
111
114
  this.updateComplete.then(() => leaving?.focusItem());
112
115
  return true;
113
116
  }
@@ -134,16 +137,32 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
134
137
  }
135
138
  this.placeTabStop();
136
139
  this.toggleState('drilled', !this.drilldown.atRoot);
140
+ this.markDirection();
141
+ }
142
+ markDirection() {
143
+ if (this.moved) {
144
+ this.moved = false;
145
+ this.removeAttribute('data-direction');
146
+ this.toggleState('back', false);
147
+ this.toggleState('forward', false);
148
+ const page = this.partNamed('page');
149
+ if (page && typeof getComputedStyle === 'function') {
150
+ getComputedStyle(page).animationName;
151
+ }
152
+ }
137
153
  if (this.direction === undefined) {
138
154
  this.removeAttribute('data-direction');
139
155
  }
140
156
  else {
141
157
  this.setAttribute('data-direction', this.direction);
142
158
  }
159
+ this.toggleState('back', this.direction === 'back');
160
+ this.toggleState('forward', this.direction === 'forward');
143
161
  }
144
162
  mark(item, page, onPage) {
145
163
  item.onPage = onPage;
146
164
  item.showingPage = item === page;
165
+ item.onPath = page !== null && item !== page && item.contains(page);
147
166
  for (const child of item.children) {
148
167
  if (child instanceof HelixHeadlessDrilldownItem && child.slot === 'page') {
149
168
  this.mark(child, page, item === page);
@@ -151,7 +170,7 @@ let HelixHeadlessDrilldown = class HelixHeadlessDrilldown extends MixinCollectio
151
170
  }
152
171
  }
153
172
  renderBackIcon() {
154
- return html `<slot name="back-icon"
173
+ return html `<slot name="back-icon" aria-hidden="true"
155
174
  ><svg part="back-mark" data-mirror fill="currentColor" viewBox=${caretLeft.viewBox} aria-hidden="true">
156
175
  ${unsafeSVG(caretLeft.content)}
157
176
  </svg></slot
@@ -4,6 +4,7 @@ registerElementEvents({
4
4
  'helix-headless-announcement': ['helix-dismiss'],
5
5
  'helix-headless-app-header': ['helix-scrolled'],
6
6
  'helix-headless-avatar': ['error', 'load'],
7
+ 'helix-headless-button': ['helix-press'],
7
8
  'helix-headless-callout': ['helix-dismiss'],
8
9
  'helix-headless-canvas': [
9
10
  'helix-before-move',
@@ -49,6 +50,7 @@ registerElementEvents({
49
50
  'helix-before-open',
50
51
  'helix-create',
51
52
  'helix-filter',
53
+ 'helix-load-more',
52
54
  'input',
53
55
  'toggle',
54
56
  ],
@@ -56,10 +58,11 @@ registerElementEvents({
56
58
  'helix-before-close',
57
59
  'helix-before-open',
58
60
  'helix-filter',
61
+ 'helix-load-more',
59
62
  'helix-select',
60
63
  'toggle',
61
64
  ],
62
- 'helix-headless-copy-button': ['helix-copy', 'helix-copy-error'],
65
+ 'helix-headless-copy-button': ['helix-copy', 'helix-copy-error', 'helix-press'],
63
66
  'helix-headless-data-table': [
64
67
  'helix-activate',
65
68
  'helix-expand',
@@ -112,8 +115,9 @@ registerElementEvents({
112
115
  'helix-graph-signal',
113
116
  'helix-graph-zoom',
114
117
  ],
115
- 'helix-headless-heatmap': ['helix-resize'],
118
+ 'helix-headless-heatmap': ['change', 'helix-before-change', 'helix-resize'],
116
119
  'helix-headless-icon': ['error', 'load'],
120
+ 'helix-headless-icon-button': ['helix-press'],
117
121
  'helix-headless-image': ['error', 'load'],
118
122
  'helix-headless-input': ['change', 'helix-before-change', 'helix-clear', 'input'],
119
123
  'helix-headless-kbd': ['helix-shortcut'],
@@ -128,7 +132,13 @@ registerElementEvents({
128
132
  ],
129
133
  'helix-headless-list': ['change', 'helix-action', 'helix-before-change'],
130
134
  'helix-headless-list-item': ['helix-action'],
131
- 'helix-headless-listbox': ['change', 'helix-before-change', 'helix-filter', 'input'],
135
+ 'helix-headless-listbox': [
136
+ 'change',
137
+ 'helix-before-change',
138
+ 'helix-filter',
139
+ 'helix-load-more',
140
+ 'input',
141
+ ],
132
142
  'helix-headless-map': [
133
143
  'change',
134
144
  'helix-activate',
@@ -156,6 +166,7 @@ registerElementEvents({
156
166
  'helix-headless-megamenu': ['helix-before-close', 'helix-before-open', 'toggle'],
157
167
  'helix-headless-menu': ['helix-before-close', 'helix-before-open', 'helix-select', 'toggle'],
158
168
  'helix-headless-menu-item': ['helix-before-toggle', 'helix-select'],
169
+ 'helix-headless-meter': ['helix-band'],
159
170
  'helix-headless-notification': ['helix-dismiss', 'helix-read'],
160
171
  'helix-headless-notification-group': ['helix-before-close', 'helix-before-open', 'toggle'],
161
172
  'helix-headless-notifications': ['helix-dismiss', 'helix-load-more', 'helix-read'],
@@ -163,9 +174,12 @@ registerElementEvents({
163
174
  'helix-headless-object-inspector': [
164
175
  'helix-activate',
165
176
  'helix-before-activate',
177
+ 'helix-before-close',
178
+ 'helix-before-open',
166
179
  'helix-copy',
167
180
  'helix-filter',
168
181
  'helix-filtered',
182
+ 'toggle',
169
183
  ],
170
184
  'helix-headless-option': ['helix-select'],
171
185
  'helix-headless-outline': ['helix-activate'],
@@ -173,10 +187,17 @@ registerElementEvents({
173
187
  'helix-headless-pagination-size': ['change', 'helix-before-change', 'input'],
174
188
  'helix-headless-pin-input': ['change', 'helix-before-change', 'helix-complete', 'input'],
175
189
  'helix-headless-popover': ['helix-before-close', 'helix-before-open', 'toggle'],
190
+ 'helix-headless-progress': ['helix-complete'],
176
191
  'helix-headless-qr-code': ['error'],
177
192
  'helix-headless-radio': ['helix-select'],
178
193
  'helix-headless-radio-group': ['change', 'helix-before-change', 'helix-select', 'input'],
179
- 'helix-headless-rating': ['change', 'helix-before-change', 'helix-clear', 'input'],
194
+ 'helix-headless-rating': [
195
+ 'change',
196
+ 'helix-before-change',
197
+ 'helix-clear',
198
+ 'helix-preview',
199
+ 'input',
200
+ ],
180
201
  'helix-headless-scroll-area': ['scroll', 'scrollend'],
181
202
  'helix-headless-select': [
182
203
  'change',
@@ -184,6 +205,7 @@ registerElementEvents({
184
205
  'helix-before-close',
185
206
  'helix-before-open',
186
207
  'helix-filter',
208
+ 'helix-load-more',
187
209
  'input',
188
210
  'toggle',
189
211
  ],
@@ -200,6 +222,7 @@ registerElementEvents({
200
222
  'helix-before-resize',
201
223
  'helix-collapse',
202
224
  'helix-resized',
225
+ 'input',
203
226
  ],
204
227
  'helix-headless-step': ['helix-select'],
205
228
  'helix-headless-steps': ['helix-activate', 'helix-before-activate', 'helix-select'],
@@ -210,7 +233,7 @@ registerElementEvents({
210
233
  'helix-headless-tabs': ['helix-activate', 'helix-before-activate', 'helix-select'],
211
234
  'helix-headless-tag': ['helix-dismiss'],
212
235
  'helix-headless-tag-group': ['change', 'helix-before-change', 'helix-dismiss'],
213
- 'helix-headless-textarea': ['change', 'helix-before-change', 'input'],
236
+ 'helix-headless-textarea': ['change', 'helix-before-change', 'helix-clear', 'input'],
214
237
  'helix-headless-time-input': [
215
238
  'change',
216
239
  'helix-before-change',
@@ -232,6 +255,7 @@ registerElementEvents({
232
255
  'helix-before-open',
233
256
  'helix-complete',
234
257
  'helix-tour-ask',
258
+ 'helix-tour-status',
235
259
  'toggle',
236
260
  ],
237
261
  'helix-headless-tour-stop': ['helix-tour-ask'],
@@ -273,5 +297,10 @@ registerElementEvents({
273
297
  'helix-headless-video-playlist': ['helix-activate', 'helix-before-activate', 'helix-end'],
274
298
  'helix-headless-video-playlist-item': ['helix-select'],
275
299
  'helix-headless-video-playlist-menu': ['helix-select'],
276
- 'helix-headless-virtual-list': ['helix-load-more', 'helix-range-change'],
300
+ 'helix-headless-virtual-list': [
301
+ 'change',
302
+ 'helix-before-change',
303
+ 'helix-load-more',
304
+ 'helix-range-change',
305
+ ],
277
306
  });