@fusion.dev/helix-headless 0.142.1 → 0.144.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 (285) hide show
  1. package/custom-elements.json +25381 -1202
  2. package/dist/accordion/item/accordion-item.d.ts +38 -2
  3. package/dist/accordion/item/accordion-item.js +38 -6
  4. package/dist/accordion/root/accordion-root.d.ts +23 -1
  5. package/dist/accordion/root/accordion-root.js +39 -3
  6. package/dist/announcement/root/announcement-root.d.ts +11 -7
  7. package/dist/announcement/root/announcement-root.js +1 -1
  8. package/dist/app-header/root/app-header-root.d.ts +21 -0
  9. package/dist/app-header/root/app-header-root.js +31 -5
  10. package/dist/area-chart/root/area-chart-root.d.ts +12 -4
  11. package/dist/area-chart/root/area-chart-root.js +39 -11
  12. package/dist/avatar/group/avatar-group.d.ts +24 -3
  13. package/dist/avatar/group/avatar-group.js +34 -2
  14. package/dist/avatar/root/avatar-root.d.ts +17 -1
  15. package/dist/avatar/root/avatar-root.js +31 -10
  16. package/dist/badge/root/badge-root.d.ts +12 -0
  17. package/dist/badge/root/badge-root.js +1 -1
  18. package/dist/bar-chart/root/bar-chart-root.d.ts +30 -5
  19. package/dist/bar-chart/root/bar-chart-root.js +58 -21
  20. package/dist/blockquote/root/blockquote-root.d.ts +12 -7
  21. package/dist/blockquote/root/blockquote-root.js +6 -4
  22. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +9 -3
  23. package/dist/breadcrumbs/root/breadcrumbs-root.js +9 -1
  24. package/dist/button/root/button-root.d.ts +84 -1
  25. package/dist/button/root/button-root.js +81 -3
  26. package/dist/callout/root/callout-root.d.ts +32 -6
  27. package/dist/callout/root/callout-root.js +26 -7
  28. package/dist/canvas/root/canvas-root.d.ts +1 -0
  29. package/dist/canvas/root/canvas-root.js +10 -1
  30. package/dist/card/root/card-root.d.ts +30 -1
  31. package/dist/card/root/card-root.js +38 -5
  32. package/dist/carousel/root/carousel-root.d.ts +47 -5
  33. package/dist/carousel/root/carousel-root.js +53 -21
  34. package/dist/chat/composer/chat-composer.d.ts +13 -11
  35. package/dist/chat/composer/chat-composer.js +6 -12
  36. package/dist/chat/message/chat-message.js +8 -1
  37. package/dist/chat/root/chat-root.d.ts +1 -0
  38. package/dist/chat/root/chat-root.js +2 -1
  39. package/dist/checkbox/root/checkbox-root.d.ts +7 -0
  40. package/dist/checkbox/root/checkbox-root.js +9 -3
  41. package/dist/checkbox-group/root/checkbox-group-root.d.ts +116 -33
  42. package/dist/checkbox-group/root/checkbox-group-root.js +141 -44
  43. package/dist/code/root/code-root.d.ts +1 -1
  44. package/dist/code-block/lines.d.ts +13 -0
  45. package/dist/code-block/lines.js +2 -0
  46. package/dist/code-block/root/code-block-root.d.ts +49 -0
  47. package/dist/code-block/root/code-block-root.js +44 -3
  48. package/dist/color-input/root/color-input-root.d.ts +60 -2
  49. package/dist/color-input/root/color-input-root.js +55 -7
  50. package/dist/color-picker/channels.d.ts +26 -0
  51. package/dist/color-picker/channels.js +84 -0
  52. package/dist/color-picker/root/color-picker-root.d.ts +118 -12
  53. package/dist/color-picker/root/color-picker-root.js +183 -13
  54. package/dist/combobox/root/combobox-root.d.ts +126 -3
  55. package/dist/combobox/root/combobox-root.js +224 -21
  56. package/dist/command/root/command-root.d.ts +47 -10
  57. package/dist/command/root/command-root.js +45 -4
  58. package/dist/copy-button/from.d.ts +22 -0
  59. package/dist/copy-button/from.js +28 -0
  60. package/dist/copy-button/root/copy-button-root.d.ts +48 -7
  61. package/dist/copy-button/root/copy-button-root.js +54 -8
  62. package/dist/data-table/root/data-table-root.d.ts +164 -10
  63. package/dist/data-table/root/data-table-root.js +488 -57
  64. package/dist/date-input/root/date-input-root.d.ts +123 -9
  65. package/dist/date-input/root/date-input-root.js +147 -45
  66. package/dist/date-picker/root/date-picker-root.d.ts +229 -18
  67. package/dist/date-picker/root/date-picker-root.js +342 -46
  68. package/dist/dialog/description.d.ts +9 -0
  69. package/dist/dialog/description.js +14 -0
  70. package/dist/dialog/root/dialog-root.d.ts +101 -10
  71. package/dist/dialog/root/dialog-root.js +83 -4
  72. package/dist/donut-chart/root/donut-chart-root.d.ts +61 -16
  73. package/dist/donut-chart/root/donut-chart-root.js +48 -13
  74. package/dist/drawer/root/drawer-root.d.ts +93 -7
  75. package/dist/drawer/root/drawer-root.js +126 -5
  76. package/dist/drawer/swipe-start.d.ts +9 -0
  77. package/dist/drawer/swipe-start.js +12 -0
  78. package/dist/drilldown/item/drilldown-item.d.ts +16 -13
  79. package/dist/drilldown/item/drilldown-item.js +6 -2
  80. package/dist/drilldown/root/drilldown-root.d.ts +21 -5
  81. package/dist/drilldown/root/drilldown-root.js +26 -10
  82. package/dist/element-events.generated.js +42 -13
  83. package/dist/empty/root/empty-root.d.ts +1 -1
  84. package/dist/file-input/root/file-input-root.d.ts +65 -1
  85. package/dist/file-input/root/file-input-root.js +76 -12
  86. package/dist/file-input/screen.d.ts +35 -0
  87. package/dist/file-input/screen.js +49 -0
  88. package/dist/filter-input/menu/filter-menu.d.ts +9 -0
  89. package/dist/filter-input/menu/filter-menu.js +8 -0
  90. package/dist/filter-input/root/filter-input-root.d.ts +43 -6
  91. package/dist/filter-input/root/filter-input-root.js +89 -10
  92. package/dist/filter-input/suggest.d.ts +17 -0
  93. package/dist/filter-input/suggest.js +23 -0
  94. package/dist/format-date/options.d.ts +33 -0
  95. package/dist/format-date/options.js +42 -0
  96. package/dist/format-date/root/format-date-root.d.ts +62 -3
  97. package/dist/format-date/root/format-date-root.js +78 -37
  98. package/dist/graph/root/graph-root.d.ts +24 -3
  99. package/dist/graph/root/graph-root.js +66 -12
  100. package/dist/heatmap/root/buckets.d.ts +2 -1
  101. package/dist/heatmap/root/buckets.js +5 -1
  102. package/dist/heatmap/root/heatmap-root.d.ts +47 -9
  103. package/dist/heatmap/root/heatmap-root.js +46 -18
  104. package/dist/icon/index.d.ts +2 -0
  105. package/dist/icon/index.js +2 -0
  106. package/dist/icon/registry.d.ts +37 -0
  107. package/dist/icon/registry.js +83 -0
  108. package/dist/icon/root/icon-root.d.ts +53 -6
  109. package/dist/icon/root/icon-root.js +72 -4
  110. package/dist/icon/root/index.d.ts +2 -0
  111. package/dist/icon/root/index.js +2 -0
  112. package/dist/icon/set.d.ts +1 -0
  113. package/dist/icon/set.js +3 -0
  114. package/dist/icon-button/root/icon-button-root.d.ts +1 -1
  115. package/dist/image/root/image-root.d.ts +23 -2
  116. package/dist/image/root/image-root.js +23 -4
  117. package/dist/input/root/input-root.d.ts +62 -9
  118. package/dist/input/root/input-root.js +61 -5
  119. package/dist/kbd/root/kbd-root.d.ts +26 -11
  120. package/dist/kbd/root/kbd-root.js +35 -38
  121. package/dist/kbd/shortcut.d.ts +18 -0
  122. package/dist/kbd/shortcut.js +35 -0
  123. package/dist/legend/hidden-series.d.ts +8 -0
  124. package/dist/legend/hidden-series.js +13 -0
  125. package/dist/legend/root/legend-root.d.ts +63 -0
  126. package/dist/legend/root/legend-root.js +61 -7
  127. package/dist/lightbox/item/lightbox-item.d.ts +17 -1
  128. package/dist/lightbox/item/lightbox-item.js +10 -1
  129. package/dist/lightbox/root/lightbox-root.d.ts +77 -6
  130. package/dist/lightbox/root/lightbox-root.js +116 -5
  131. package/dist/line-chart/root/line-chart-root.d.ts +29 -4
  132. package/dist/line-chart/root/line-chart-root.js +58 -17
  133. package/dist/list/item/list-item.d.ts +11 -5
  134. package/dist/list/item/list-item.js +5 -6
  135. package/dist/listbox/range.d.ts +17 -0
  136. package/dist/listbox/range.js +5 -0
  137. package/dist/listbox/root/listbox-root.d.ts +184 -4
  138. package/dist/listbox/root/listbox-root.js +229 -23
  139. package/dist/loader/busy.d.ts +17 -0
  140. package/dist/loader/busy.js +24 -0
  141. package/dist/loader/root/loader-root.d.ts +37 -0
  142. package/dist/loader/root/loader-root.js +52 -3
  143. package/dist/map/root/map-root.d.ts +19 -4
  144. package/dist/map/root/map-root.js +36 -7
  145. package/dist/megamenu/root/megamenu-root.d.ts +10 -1
  146. package/dist/megamenu/root/megamenu-root.js +10 -1
  147. package/dist/menu/item/menu-item.d.ts +41 -12
  148. package/dist/menu/item/menu-item.js +46 -3
  149. package/dist/menu/root/menu-root.d.ts +32 -2
  150. package/dist/menu/root/menu-root.js +48 -8
  151. package/dist/meter/root/meter-root.d.ts +13 -0
  152. package/dist/meter/root/meter-root.js +24 -5
  153. package/dist/navigation/root/navigation-root.d.ts +10 -2
  154. package/dist/navigation/root/navigation-root.js +13 -2
  155. package/dist/notifications/feed-keys.d.ts +10 -0
  156. package/dist/notifications/feed-keys.js +14 -0
  157. package/dist/notifications/group/notification-group.d.ts +1 -0
  158. package/dist/notifications/notification/notification.d.ts +29 -0
  159. package/dist/notifications/notification/notification.js +51 -3
  160. package/dist/notifications/root/notifications-root.d.ts +49 -0
  161. package/dist/notifications/root/notifications-root.js +76 -2
  162. package/dist/number-input/root/number-input-root.d.ts +109 -7
  163. package/dist/number-input/root/number-input-root.js +109 -21
  164. package/dist/object-inspector/root/object-inspector-root.d.ts +49 -5
  165. package/dist/object-inspector/root/object-inspector-root.js +92 -12
  166. package/dist/option/root/option-root.d.ts +58 -6
  167. package/dist/option/root/option-root.js +35 -5
  168. package/dist/outline/root/outline-root.d.ts +13 -2
  169. package/dist/outline/root/outline-root.js +4 -2
  170. package/dist/pagination/root/pagination-root.d.ts +19 -1
  171. package/dist/pagination/root/pagination-root.js +49 -9
  172. package/dist/pagination/size/pagination-size.d.ts +13 -3
  173. package/dist/pagination/size/pagination-size.js +7 -0
  174. package/dist/pin-input/format.d.ts +7 -0
  175. package/dist/pin-input/format.js +16 -0
  176. package/dist/pin-input/root/pin-input-root.d.ts +37 -0
  177. package/dist/pin-input/root/pin-input-root.js +48 -7
  178. package/dist/popover/root/popover-root.d.ts +78 -3
  179. package/dist/popover/root/popover-root.js +74 -5
  180. package/dist/progress/root/progress-root.d.ts +23 -1
  181. package/dist/progress/root/progress-root.js +40 -10
  182. package/dist/qr-code/export.d.ts +31 -0
  183. package/dist/qr-code/export.js +10 -0
  184. package/dist/qr-code/root/qr-code-root.d.ts +45 -0
  185. package/dist/qr-code/root/qr-code-root.js +78 -3
  186. package/dist/radio/group/radio-group.d.ts +64 -0
  187. package/dist/radio/group/radio-group.js +66 -12
  188. package/dist/radio/root/radio-root.d.ts +8 -5
  189. package/dist/radio/root/radio-root.js +1 -2
  190. package/dist/rating/root/rating-root.d.ts +49 -1
  191. package/dist/rating/root/rating-root.js +69 -10
  192. package/dist/scatter-chart/root/scatter-chart-root.d.ts +17 -3
  193. package/dist/scatter-chart/root/scatter-chart-root.js +40 -14
  194. package/dist/select/root/select-root.d.ts +93 -3
  195. package/dist/select/root/select-root.js +111 -13
  196. package/dist/skeleton/root/skeleton-root.d.ts +39 -3
  197. package/dist/skeleton/root/skeleton-root.js +33 -4
  198. package/dist/skip-link/root/skip-link-root.d.ts +10 -0
  199. package/dist/skip-link/root/skip-link-root.js +15 -1
  200. package/dist/slider/root/slider-root.d.ts +59 -2
  201. package/dist/slider/root/slider-root.js +82 -8
  202. package/dist/sparkline/root/sparkline-root.d.ts +9 -10
  203. package/dist/speed-dial/item/speed-dial-item.d.ts +11 -5
  204. package/dist/speed-dial/item/speed-dial-item.js +7 -2
  205. package/dist/speed-dial/root/speed-dial-root.d.ts +15 -4
  206. package/dist/speed-dial/root/speed-dial-root.js +19 -5
  207. package/dist/splitter/root/splitter-root.d.ts +28 -6
  208. package/dist/splitter/root/splitter-root.js +35 -1
  209. package/dist/stat/root/stat-root.d.ts +9 -1
  210. package/dist/stat/root/stat-root.js +15 -2
  211. package/dist/steps/root/steps-root.js +1 -1
  212. package/dist/steps/step/step.d.ts +1 -0
  213. package/dist/steps/step/step.js +1 -1
  214. package/dist/switch/root/switch-root.d.ts +14 -2
  215. package/dist/switch/root/switch-root.js +7 -1
  216. package/dist/table/cell/table-cell.d.ts +24 -4
  217. package/dist/table/cell/table-cell.js +21 -1
  218. package/dist/table/column/table-column.d.ts +32 -6
  219. package/dist/table/column/table-column.js +36 -6
  220. package/dist/table/root/table-root.d.ts +94 -3
  221. package/dist/table/root/table-root.js +128 -5
  222. package/dist/table/row/table-row.d.ts +7 -0
  223. package/dist/table/row/table-row.js +9 -1
  224. package/dist/tabs/root/tabs-root.d.ts +6 -1
  225. package/dist/tabs/root/tabs-root.js +6 -2
  226. package/dist/tag/group/tag-group.d.ts +107 -0
  227. package/dist/tag/group/tag-group.js +157 -0
  228. package/dist/tag/index.d.ts +1 -0
  229. package/dist/tag/index.js +1 -0
  230. package/dist/tag/root/tag-root.d.ts +83 -1
  231. package/dist/tag/root/tag-root.js +87 -17
  232. package/dist/tag/selection.d.ts +10 -0
  233. package/dist/tag/selection.js +12 -0
  234. package/dist/textarea/grow.d.ts +22 -0
  235. package/dist/textarea/grow.js +20 -0
  236. package/dist/textarea/root/textarea-root.d.ts +13 -0
  237. package/dist/textarea/root/textarea-root.js +10 -2
  238. package/dist/time-input/root/time-input-root.d.ts +71 -6
  239. package/dist/time-input/root/time-input-root.js +110 -44
  240. package/dist/time-picker/root/time-picker-root.d.ts +155 -26
  241. package/dist/time-picker/root/time-picker-root.js +192 -63
  242. package/dist/toast/hotkey.d.ts +22 -0
  243. package/dist/toast/hotkey.js +23 -0
  244. package/dist/toast/item/toast-item.d.ts +16 -1
  245. package/dist/toast/item/toast-item.js +41 -13
  246. package/dist/toast/root/toast-root.d.ts +105 -8
  247. package/dist/toast/root/toast-root.js +209 -4
  248. package/dist/toggle/group/toggle-group.d.ts +95 -16
  249. package/dist/toggle/group/toggle-group.js +99 -13
  250. package/dist/toggle/root/toggle-root.d.ts +26 -11
  251. package/dist/toggle/root/toggle-root.js +14 -6
  252. package/dist/toolbar/root/toolbar-root.d.ts +55 -15
  253. package/dist/toolbar/root/toolbar-root.js +99 -16
  254. package/dist/tooltip/focus-target.d.ts +6 -0
  255. package/dist/tooltip/focus-target.js +9 -0
  256. package/dist/tooltip/root/tooltip-root.d.ts +73 -15
  257. package/dist/tooltip/root/tooltip-root.js +96 -7
  258. package/dist/tour/naming.d.ts +30 -0
  259. package/dist/tour/naming.js +10 -0
  260. package/dist/tour/root/tour-root.d.ts +67 -3
  261. package/dist/tour/root/tour-root.js +105 -17
  262. package/dist/tour/stop/tour-stop.d.ts +65 -3
  263. package/dist/tour/stop/tour-stop.js +61 -11
  264. package/dist/tour/wait.d.ts +11 -0
  265. package/dist/tour/wait.js +19 -0
  266. package/dist/tree/item/tree-item.d.ts +21 -5
  267. package/dist/tree/item/tree-item.js +14 -4
  268. package/dist/tree/root/tree-root.d.ts +29 -5
  269. package/dist/tree/root/tree-root.js +64 -8
  270. package/dist/trend/root/trend-root.d.ts +36 -1
  271. package/dist/trend/root/trend-root.js +41 -15
  272. package/dist/video/root/keys.d.ts +5 -0
  273. package/dist/video/root/keys.js +13 -1
  274. package/dist/video/root/video-root.d.ts +19 -0
  275. package/dist/video/root/video-root.js +48 -4
  276. package/dist/video-playlist/menu/video-playlist-menu.d.ts +20 -2
  277. package/dist/video-playlist/menu/video-playlist-menu.js +27 -5
  278. package/dist/video-playlist/root/video-playlist-root.js +6 -3
  279. package/dist/virtual-list/root/virtual-list-root.d.ts +52 -4
  280. package/dist/virtual-list/root/virtual-list-root.js +103 -21
  281. package/lint.json +1 -1
  282. package/package.json +5 -5
  283. package/types/jsx.d.ts +9140 -1149
  284. package/types/svelte.d.ts +1 -0
  285. package/types/vue.d.ts +2089 -267
@@ -0,0 +1,17 @@
1
+ /**
2
+ * What Shift with Home or End adds to a listbox's selection, as arithmetic
3
+ * over the options on show.
4
+ *
5
+ * Pure and beside the family's `index.ts`, because which options a range takes
6
+ * in is a fact about a list, and a spec can hold it without a page.
7
+ */
8
+ /**
9
+ * The selection after Shift with Home or End: every option shown from the
10
+ * highlight to the end the key went to, added after what was selected, or
11
+ * `null` where nothing new is taken in.
12
+ *
13
+ * `from` is where the highlight was, as an index into `shown`, or `-1` for no
14
+ * highlight, which takes in the end alone. `to` is the end the key went to.
15
+ * APG's multiple-selection listbox.
16
+ */
17
+ export declare const rangeAdd: (values: readonly string[], shown: readonly string[], from: number, to: number) => string[] | null;
@@ -0,0 +1,5 @@
1
+ export const rangeAdd = (values, shown, from, to) => {
2
+ const [start, end] = from < 0 ? [to, to] : [Math.min(from, to), Math.max(from, to)];
3
+ const added = shown.slice(start, end + 1).filter((value) => !values.includes(value));
4
+ return added.length > 0 ? [...values, ...added] : null;
5
+ };
@@ -1,5 +1,5 @@
1
1
  import { AriaForwardController, DisabledCascadeController, HelixFormElement } from '@fusion.dev/helix-core';
2
- import { type PropertyValues, type TemplateResult } from 'lit';
2
+ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
3
3
  import { HelixHeadlessOption } from '../../option/root/option-root.js';
4
4
  declare const HelixHeadlessListbox_base: (new (...args: any[]) => import("@fusion.dev/helix-core").CollectionElement) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
5
5
  /**
@@ -20,6 +20,22 @@ declare const HelixHeadlessListbox_base: (new (...args: any[]) => import("@fusio
20
20
  * active option is where the keyboard is: the arrow keys move it, and
21
21
  * `aria-activedescendant` points to it while focus stays on the list.
22
22
  *
23
+ * The arrow keys, Home, End, PageUp and PageDown move the highlight, and typed
24
+ * letters move it to the next option whose words start with them. In a
25
+ * single-choice list the highlight is the choice unless `manual` is set; then
26
+ * Enter, Space or a click chooses. With `multiple`, Space toggles the
27
+ * highlighted option, Shift with an arrow adds the option it moves to, Shift
28
+ * with Home or End adds every option from the highlight to that end, and
29
+ * Control+A or Command+A chooses every option, or none where all are chosen.
30
+ * In a filter field, Space, Home, End and letters edit the text.
31
+ *
32
+ * An option with `href` is a link: Enter or a press follows it and selects
33
+ * nothing, and moving onto it with the arrows does not follow it.
34
+ *
35
+ * As a filter narrows the list, a screen reader hears how many options are
36
+ * left, such as "3 results", from `result-label` and `results-label`. A filter
37
+ * that leaves none says `empty-text`.
38
+ *
23
39
  * @since 0.1.0
24
40
  * @status stable
25
41
  * @category forms
@@ -27,9 +43,12 @@ declare const HelixHeadlessListbox_base: (new (...args: any[]) => import("@fusio
27
43
  * @documentation https://fusion.dev/helix/components/listbox
28
44
  *
29
45
  * @slot - The options, and any groups of them.
46
+ * @slot empty - What the list shows when it has no options to show, for content richer than `empty-text`.
47
+ * @slot feedback - The message that says what is wrong, for content richer than a string. It shows while there is a message.
30
48
  * @slot filter-icon - The icon in the filter field. Defaults to a magnifying glass.
31
49
  * @slot hint - The hint, for content richer than plain text.
32
50
  * @slot label - The label, for content richer than plain text.
51
+ * @slot loading - What the list shows while its options load, for content richer than `loading-text`.
33
52
  *
34
53
  * @event {Event} change - Fired after the value changes.
35
54
  * @event {HelixBeforeChangeEvent} helix-before-change - Fired when the value is about to change, and cancelable.
@@ -43,12 +62,14 @@ declare const HelixHeadlessListbox_base: (new (...args: any[]) => import("@fusio
43
62
  * @csspart hint - Help under the list.
44
63
  * @csspart items - The list of options.
45
64
  * @csspart label - The label above the list.
46
- * @csspart live - A copy of the empty and loading text, in a region that screen readers announce when it changes. Visually hidden in the styled tier.
65
+ * @csspart live - A copy of the empty and loading text, and how many options a filter left, in a region that screen readers announce when it changes. Visually hidden in the styled tier.
47
66
  * @csspart loading - The text shown while the options load.
48
67
  * @csspart search - The region that holds the filter field.
49
68
  * @csspart search-field - The filter field.
50
69
  *
70
+ * @cssstate empty - The list has no options to show: none were given, or the filter hid every one.
51
71
  * @cssstate invalid - The control has an error to show, from the browser's validation or from your `feedback`.
72
+ * @cssstate loading - While `loading` is set.
52
73
  */
53
74
  export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
54
75
  protected readonly aria: AriaForwardController;
@@ -95,18 +116,63 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
95
116
  * own search boxes would be three copies of one field.
96
117
  */
97
118
  filterable: boolean;
119
+ /**
120
+ * How long typing in the filter field rests before the list is filtered, in
121
+ * milliseconds. `0` filters on every keystroke.
122
+ *
123
+ * For a list filtered on a server, where `helix-filter` starts a request: a
124
+ * reader typing a word sends one request for the word, not one for each
125
+ * letter. Enter and the arrow keys filter at once on what is typed, so they
126
+ * act on the list the reader expects.
127
+ */
128
+ filterDelay: number;
98
129
  /**
99
130
  * Placeholder text for the filter field.
100
131
  */
101
132
  filterLabel: string;
133
+ /**
134
+ * Stops the arrow keys from choosing each option they move to. Enter, Space
135
+ * or a click chooses the highlighted option.
136
+ *
137
+ * By default a single-choice list chooses as the arrows move, as a radio
138
+ * group does. Select and Time Input set this on the list in their panel, so
139
+ * a reader can move through the options before closing the panel on one.
140
+ */
141
+ manual: boolean;
102
142
  /**
103
143
  * Whether more than one option can be chosen.
104
144
  */
105
145
  multiple: boolean;
146
+ /**
147
+ * What a screen reader hears when a filter leaves one option. `{count}` is
148
+ * the count.
149
+ */
150
+ resultLabel: string;
151
+ /**
152
+ * What a screen reader hears when a filter leaves any other number of
153
+ * options. `{count}` is the count.
154
+ *
155
+ * **Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
156
+ * pair: a language with more forms than two picks the one for its `one` and
157
+ * writes the rest here.
158
+ */
159
+ resultsLabel: string;
106
160
  /**
107
161
  * Which option the keyboard is on, which is not what is chosen.
108
162
  */
109
163
  private activeValue;
164
+ /**
165
+ * Whether the highlight was cleared on purpose, so the filter does not put
166
+ * it back on the first match.
167
+ */
168
+ private parked;
169
+ /** The letters typed at the list, which move the highlight to a match. */
170
+ private readonly typeahead;
171
+ /**
172
+ * The values of the options seen on the last pass, so an option that leaves
173
+ * can be told apart from one that has not arrived yet.
174
+ */
175
+ private seen;
110
176
  /**
111
177
  * Whether the key being handled was forwarded rather than typed into this.
112
178
  *
@@ -150,6 +216,38 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
150
216
  */
151
217
  get selectedIndex(): number;
152
218
  set selectedIndex(at: number);
219
+ /**
220
+ * @internal Moves the highlight without choosing, for the control that owns
221
+ * this list: to the first or last option a reader can reach, to the chosen
222
+ * one (or the first where none is), or nowhere.
223
+ *
224
+ * Select opens its panel on the chosen option, or on the last one for
225
+ * ArrowUp, and Combobox moves the highlight off the list onto its create row.
226
+ */
227
+ highlight(where: 'first' | 'last' | 'none' | 'selected'): void;
228
+ /**
229
+ * Says how many options a filter left, in the live region.
230
+ *
231
+ * **A reader typing into a filter cannot see the list narrow**, and React
232
+ * Aria and Web Awesome both say the count as it changes. Only "No matches"
233
+ * was said here, so a query that left forty options and one that left one
234
+ * sounded the same. Said when the filter changes and the count with it, so
235
+ * a keystroke that leaves the same options says nothing new. An empty filter
236
+ * says nothing, being the list as it was given; no matches is `empty-text`,
237
+ * which the region says in place of this.
238
+ */
239
+ private tell;
240
+ /**
241
+ * @internal Moves the highlight to the option whose words start with the
242
+ * letters typed, and returns its value, or nothing where none matches.
243
+ *
244
+ * For a control that takes the letters while this list is not where focus
245
+ * is: Select's closed trigger chooses the option this returns, as a native
246
+ * `<select>` does.
247
+ */
248
+ typeaheadTo(key: string): string | undefined;
249
+ /** @internal Whether letters typed in the last moment are still one search. */
250
+ get typing(): boolean;
153
251
  /**
154
252
  * The kind of list, as the platform names it: `select-one` or
155
253
  * `select-multiple`.
@@ -196,8 +294,37 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
196
294
  * Space and Enter are how a multi-select list chooses, and they are also how
197
295
  * a single-select one confirms what the arrows already did, so they act
198
296
  * either way rather than being guarded on `multiple`.
297
+ *
298
+ * **A reader in a text field is typing.** That is a filter field of this
299
+ * list's own, or a combobox's field that forwards its keys through
300
+ * `navigate`. There a Space is a character, Home and End move the caret, and
301
+ * a letter is a letter. Measured before this: a Space typed into a filter,
302
+ * a combobox or a command palette chose the highlighted option and closed the
303
+ * panel, so a query of two words could not be typed.
199
304
  */
200
305
  private readonly handleKeydown;
306
+ /**
307
+ * Puts the highlight on an option, and chooses it where moving is choosing.
308
+ *
309
+ * Chosen on the way past only where moving is choosing. With `multiple` a
310
+ * reader passing over four options on the way to the fifth did not mean to
311
+ * pick all five, and with `manual` the owner has asked for the same.
312
+ *
313
+ * Nor where the keys were forwarded. A list with the focus on it selects as
314
+ * it moves, which is the pattern for a listbox; a combobox's arrows move the
315
+ * highlight and Enter takes it, which is the pattern for a combobox, and the
316
+ * two differ by exactly which element the reader is in. Measured before
317
+ * this: the first Down in a combobox committed the second option and shut the
318
+ * panel, one keystroke into the interaction.
319
+ */
320
+ private arrive;
321
+ /**
322
+ * How many rows PageUp and PageDown move: as many as the list shows at once.
323
+ *
324
+ * Measured off the rendered list and its first shown row. Where there is no
325
+ * layout to measure, as on a server or in a test double, it is ten.
326
+ */
327
+ private pageSize;
201
328
  /**
202
329
  * Runs the list's own key handling for a caller whose focus is elsewhere.
203
330
  *
@@ -215,8 +342,9 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
215
342
  * flag is set here rather than exposed as a property. The difference between
216
343
  * a listbox and a combobox is not a mode a consumer picks: it is which
217
344
  * element the reader's focus is in, and that is exactly what calling this
218
- * rather than being typed into means. Enter and Space still choose, because
219
- * those are the caller asking for the answer rather than for a move.
345
+ * rather than being typed into means. Enter still chooses, because that is
346
+ * the caller asking for the answer rather than for a move. Space, Home, End
347
+ * and letters are left to the caller's field, where they are typing.
220
348
  */
221
349
  navigate(event: KeyboardEvent): void;
222
350
  /**
@@ -236,6 +364,25 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
236
364
  reveal(): void;
237
365
  /** Hides what the filter excludes, and writes the rest onto the options. */
238
366
  private place;
367
+ /**
368
+ * Whether another Helix component renders this list and binds its value
369
+ * down, as Select, Combobox, Command and Time Picker do. That component seeds
370
+ * and corrects the value, so this list leaves both to it.
371
+ *
372
+ * By the tag rather than by `instanceof`, for the reason `optionsAmong`
373
+ * gives: a second copy of the library on a page is a second class.
374
+ */
375
+ private get owned();
376
+ /**
377
+ * Takes an option that has left the list out of the value.
378
+ *
379
+ * Only one that was here before: a value set ahead of its options, which a
380
+ * list loading them from a server does, is kept until they arrive. Measured
381
+ * before this: removing the chosen option left the list showing nothing
382
+ * chosen while its form still submitted the removed value. A native
383
+ * `<select>` drops it too, and sends no event for it.
384
+ */
385
+ private forgetRemoved;
239
386
  /** Scrolls the active option into view, which needs the rendered list to scroll. */
240
387
  private followActive;
241
388
  /** Reports the answer and the verdict on it. */
@@ -243,6 +390,16 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
243
390
  connectedCallback(): void;
244
391
  disconnectedCallback(): void;
245
392
  protected willUpdate(changed: PropertyValues): void;
393
+ /**
394
+ * Takes `<helix-option selected>` as the list's default value, as a native
395
+ * `<select>` takes `<option selected>`.
396
+ *
397
+ * Only where the list declares no `default-value` of its own, which wins. A
398
+ * form reset returns to it, which is what `Option.defaultSelected` says.
399
+ * Read from the options once they are known, so a list served by a server
400
+ * shows the choice from hydration on.
401
+ */
402
+ private seedDeclared;
246
403
  /**
247
404
  * Where the reader is, and failing that where the answer is.
248
405
  *
@@ -267,6 +424,12 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
267
424
  * their answer moved when it did not is worse than telling them nothing.
268
425
  */
269
426
  private readonly handleFilter;
427
+ /** The filter waiting out `filterDelay`, if any. */
428
+ private readonly filtering;
429
+ /** Filters on what the field holds, and puts the field back where that was refused. */
430
+ private takeFilter;
431
+ /** Filters at once on a filter still waiting out `filterDelay`. */
432
+ private flushFilter;
270
433
  /** Requests a new filter, and returns whether the request went through. */
271
434
  requestFilter(next: string): boolean;
272
435
  /**
@@ -305,6 +468,23 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
305
468
  * cannot change.
306
469
  */
307
470
  protected renderFilterIcon(): TemplateResult;
471
+ /**
472
+ * Whether there is anything to show.
473
+ *
474
+ * Showing nothing is not the same as empty. A filter that hides every option
475
+ * is empty, and one with no filter and no options is empty too, but a list
476
+ * still waiting on its options is neither.
477
+ */
478
+ private get showsOptions();
479
+ /**
480
+ * The empty or loading line, with a slot for each so either can be richer
481
+ * than its text.
482
+ *
483
+ * **The text is the slot's fallback**, which is this library's rule for a
484
+ * content property, so `empty-text` still shows where nothing is slotted and
485
+ * the live region still says it.
486
+ */
487
+ protected renderStatus(hasContent: boolean): TemplateResult | typeof nothing;
308
488
  protected render(): TemplateResult;
309
489
  }
310
490
  declare global {