@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.
- package/custom-elements.json +25381 -1202
- package/dist/accordion/item/accordion-item.d.ts +38 -2
- package/dist/accordion/item/accordion-item.js +38 -6
- package/dist/accordion/root/accordion-root.d.ts +23 -1
- package/dist/accordion/root/accordion-root.js +39 -3
- package/dist/announcement/root/announcement-root.d.ts +11 -7
- package/dist/announcement/root/announcement-root.js +1 -1
- package/dist/app-header/root/app-header-root.d.ts +21 -0
- package/dist/app-header/root/app-header-root.js +31 -5
- package/dist/area-chart/root/area-chart-root.d.ts +12 -4
- package/dist/area-chart/root/area-chart-root.js +39 -11
- package/dist/avatar/group/avatar-group.d.ts +24 -3
- package/dist/avatar/group/avatar-group.js +34 -2
- package/dist/avatar/root/avatar-root.d.ts +17 -1
- package/dist/avatar/root/avatar-root.js +31 -10
- package/dist/badge/root/badge-root.d.ts +12 -0
- package/dist/badge/root/badge-root.js +1 -1
- package/dist/bar-chart/root/bar-chart-root.d.ts +30 -5
- package/dist/bar-chart/root/bar-chart-root.js +58 -21
- package/dist/blockquote/root/blockquote-root.d.ts +12 -7
- package/dist/blockquote/root/blockquote-root.js +6 -4
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +9 -3
- package/dist/breadcrumbs/root/breadcrumbs-root.js +9 -1
- package/dist/button/root/button-root.d.ts +84 -1
- package/dist/button/root/button-root.js +81 -3
- package/dist/callout/root/callout-root.d.ts +32 -6
- package/dist/callout/root/callout-root.js +26 -7
- package/dist/canvas/root/canvas-root.d.ts +1 -0
- package/dist/canvas/root/canvas-root.js +10 -1
- package/dist/card/root/card-root.d.ts +30 -1
- package/dist/card/root/card-root.js +38 -5
- package/dist/carousel/root/carousel-root.d.ts +47 -5
- package/dist/carousel/root/carousel-root.js +53 -21
- package/dist/chat/composer/chat-composer.d.ts +13 -11
- package/dist/chat/composer/chat-composer.js +6 -12
- package/dist/chat/message/chat-message.js +8 -1
- package/dist/chat/root/chat-root.d.ts +1 -0
- package/dist/chat/root/chat-root.js +2 -1
- package/dist/checkbox/root/checkbox-root.d.ts +7 -0
- package/dist/checkbox/root/checkbox-root.js +9 -3
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +116 -33
- package/dist/checkbox-group/root/checkbox-group-root.js +141 -44
- package/dist/code/root/code-root.d.ts +1 -1
- package/dist/code-block/lines.d.ts +13 -0
- package/dist/code-block/lines.js +2 -0
- package/dist/code-block/root/code-block-root.d.ts +49 -0
- package/dist/code-block/root/code-block-root.js +44 -3
- package/dist/color-input/root/color-input-root.d.ts +60 -2
- package/dist/color-input/root/color-input-root.js +55 -7
- package/dist/color-picker/channels.d.ts +26 -0
- package/dist/color-picker/channels.js +84 -0
- package/dist/color-picker/root/color-picker-root.d.ts +118 -12
- package/dist/color-picker/root/color-picker-root.js +183 -13
- package/dist/combobox/root/combobox-root.d.ts +126 -3
- package/dist/combobox/root/combobox-root.js +224 -21
- package/dist/command/root/command-root.d.ts +47 -10
- package/dist/command/root/command-root.js +45 -4
- package/dist/copy-button/from.d.ts +22 -0
- package/dist/copy-button/from.js +28 -0
- package/dist/copy-button/root/copy-button-root.d.ts +48 -7
- package/dist/copy-button/root/copy-button-root.js +54 -8
- package/dist/data-table/root/data-table-root.d.ts +164 -10
- package/dist/data-table/root/data-table-root.js +488 -57
- package/dist/date-input/root/date-input-root.d.ts +123 -9
- package/dist/date-input/root/date-input-root.js +147 -45
- package/dist/date-picker/root/date-picker-root.d.ts +229 -18
- package/dist/date-picker/root/date-picker-root.js +342 -46
- package/dist/dialog/description.d.ts +9 -0
- package/dist/dialog/description.js +14 -0
- package/dist/dialog/root/dialog-root.d.ts +101 -10
- package/dist/dialog/root/dialog-root.js +83 -4
- package/dist/donut-chart/root/donut-chart-root.d.ts +61 -16
- package/dist/donut-chart/root/donut-chart-root.js +48 -13
- package/dist/drawer/root/drawer-root.d.ts +93 -7
- package/dist/drawer/root/drawer-root.js +126 -5
- package/dist/drawer/swipe-start.d.ts +9 -0
- package/dist/drawer/swipe-start.js +12 -0
- package/dist/drilldown/item/drilldown-item.d.ts +16 -13
- package/dist/drilldown/item/drilldown-item.js +6 -2
- package/dist/drilldown/root/drilldown-root.d.ts +21 -5
- package/dist/drilldown/root/drilldown-root.js +26 -10
- package/dist/element-events.generated.js +42 -13
- package/dist/empty/root/empty-root.d.ts +1 -1
- package/dist/file-input/root/file-input-root.d.ts +65 -1
- package/dist/file-input/root/file-input-root.js +76 -12
- package/dist/file-input/screen.d.ts +35 -0
- package/dist/file-input/screen.js +49 -0
- package/dist/filter-input/menu/filter-menu.d.ts +9 -0
- package/dist/filter-input/menu/filter-menu.js +8 -0
- package/dist/filter-input/root/filter-input-root.d.ts +43 -6
- package/dist/filter-input/root/filter-input-root.js +89 -10
- package/dist/filter-input/suggest.d.ts +17 -0
- package/dist/filter-input/suggest.js +23 -0
- package/dist/format-date/options.d.ts +33 -0
- package/dist/format-date/options.js +42 -0
- package/dist/format-date/root/format-date-root.d.ts +62 -3
- package/dist/format-date/root/format-date-root.js +78 -37
- package/dist/graph/root/graph-root.d.ts +24 -3
- package/dist/graph/root/graph-root.js +66 -12
- package/dist/heatmap/root/buckets.d.ts +2 -1
- package/dist/heatmap/root/buckets.js +5 -1
- package/dist/heatmap/root/heatmap-root.d.ts +47 -9
- package/dist/heatmap/root/heatmap-root.js +46 -18
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +2 -0
- package/dist/icon/registry.d.ts +37 -0
- package/dist/icon/registry.js +83 -0
- package/dist/icon/root/icon-root.d.ts +53 -6
- package/dist/icon/root/icon-root.js +72 -4
- package/dist/icon/root/index.d.ts +2 -0
- package/dist/icon/root/index.js +2 -0
- package/dist/icon/set.d.ts +1 -0
- package/dist/icon/set.js +3 -0
- package/dist/icon-button/root/icon-button-root.d.ts +1 -1
- package/dist/image/root/image-root.d.ts +23 -2
- package/dist/image/root/image-root.js +23 -4
- package/dist/input/root/input-root.d.ts +62 -9
- package/dist/input/root/input-root.js +61 -5
- package/dist/kbd/root/kbd-root.d.ts +26 -11
- package/dist/kbd/root/kbd-root.js +35 -38
- package/dist/kbd/shortcut.d.ts +18 -0
- package/dist/kbd/shortcut.js +35 -0
- package/dist/legend/hidden-series.d.ts +8 -0
- package/dist/legend/hidden-series.js +13 -0
- package/dist/legend/root/legend-root.d.ts +63 -0
- package/dist/legend/root/legend-root.js +61 -7
- package/dist/lightbox/item/lightbox-item.d.ts +17 -1
- package/dist/lightbox/item/lightbox-item.js +10 -1
- package/dist/lightbox/root/lightbox-root.d.ts +77 -6
- package/dist/lightbox/root/lightbox-root.js +116 -5
- package/dist/line-chart/root/line-chart-root.d.ts +29 -4
- package/dist/line-chart/root/line-chart-root.js +58 -17
- package/dist/list/item/list-item.d.ts +11 -5
- package/dist/list/item/list-item.js +5 -6
- package/dist/listbox/range.d.ts +17 -0
- package/dist/listbox/range.js +5 -0
- package/dist/listbox/root/listbox-root.d.ts +184 -4
- package/dist/listbox/root/listbox-root.js +229 -23
- package/dist/loader/busy.d.ts +17 -0
- package/dist/loader/busy.js +24 -0
- package/dist/loader/root/loader-root.d.ts +37 -0
- package/dist/loader/root/loader-root.js +52 -3
- package/dist/map/root/map-root.d.ts +19 -4
- package/dist/map/root/map-root.js +36 -7
- package/dist/megamenu/root/megamenu-root.d.ts +10 -1
- package/dist/megamenu/root/megamenu-root.js +10 -1
- package/dist/menu/item/menu-item.d.ts +41 -12
- package/dist/menu/item/menu-item.js +46 -3
- package/dist/menu/root/menu-root.d.ts +32 -2
- package/dist/menu/root/menu-root.js +48 -8
- package/dist/meter/root/meter-root.d.ts +13 -0
- package/dist/meter/root/meter-root.js +24 -5
- package/dist/navigation/root/navigation-root.d.ts +10 -2
- package/dist/navigation/root/navigation-root.js +13 -2
- package/dist/notifications/feed-keys.d.ts +10 -0
- package/dist/notifications/feed-keys.js +14 -0
- package/dist/notifications/group/notification-group.d.ts +1 -0
- package/dist/notifications/notification/notification.d.ts +29 -0
- package/dist/notifications/notification/notification.js +51 -3
- package/dist/notifications/root/notifications-root.d.ts +49 -0
- package/dist/notifications/root/notifications-root.js +76 -2
- package/dist/number-input/root/number-input-root.d.ts +109 -7
- package/dist/number-input/root/number-input-root.js +109 -21
- package/dist/object-inspector/root/object-inspector-root.d.ts +49 -5
- package/dist/object-inspector/root/object-inspector-root.js +92 -12
- package/dist/option/root/option-root.d.ts +58 -6
- package/dist/option/root/option-root.js +35 -5
- package/dist/outline/root/outline-root.d.ts +13 -2
- package/dist/outline/root/outline-root.js +4 -2
- package/dist/pagination/root/pagination-root.d.ts +19 -1
- package/dist/pagination/root/pagination-root.js +49 -9
- package/dist/pagination/size/pagination-size.d.ts +13 -3
- package/dist/pagination/size/pagination-size.js +7 -0
- package/dist/pin-input/format.d.ts +7 -0
- package/dist/pin-input/format.js +16 -0
- package/dist/pin-input/root/pin-input-root.d.ts +37 -0
- package/dist/pin-input/root/pin-input-root.js +48 -7
- package/dist/popover/root/popover-root.d.ts +78 -3
- package/dist/popover/root/popover-root.js +74 -5
- package/dist/progress/root/progress-root.d.ts +23 -1
- package/dist/progress/root/progress-root.js +40 -10
- package/dist/qr-code/export.d.ts +31 -0
- package/dist/qr-code/export.js +10 -0
- package/dist/qr-code/root/qr-code-root.d.ts +45 -0
- package/dist/qr-code/root/qr-code-root.js +78 -3
- package/dist/radio/group/radio-group.d.ts +64 -0
- package/dist/radio/group/radio-group.js +66 -12
- package/dist/radio/root/radio-root.d.ts +8 -5
- package/dist/radio/root/radio-root.js +1 -2
- package/dist/rating/root/rating-root.d.ts +49 -1
- package/dist/rating/root/rating-root.js +69 -10
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +17 -3
- package/dist/scatter-chart/root/scatter-chart-root.js +40 -14
- package/dist/select/root/select-root.d.ts +93 -3
- package/dist/select/root/select-root.js +111 -13
- package/dist/skeleton/root/skeleton-root.d.ts +39 -3
- package/dist/skeleton/root/skeleton-root.js +33 -4
- package/dist/skip-link/root/skip-link-root.d.ts +10 -0
- package/dist/skip-link/root/skip-link-root.js +15 -1
- package/dist/slider/root/slider-root.d.ts +59 -2
- package/dist/slider/root/slider-root.js +82 -8
- package/dist/sparkline/root/sparkline-root.d.ts +9 -10
- package/dist/speed-dial/item/speed-dial-item.d.ts +11 -5
- package/dist/speed-dial/item/speed-dial-item.js +7 -2
- package/dist/speed-dial/root/speed-dial-root.d.ts +15 -4
- package/dist/speed-dial/root/speed-dial-root.js +19 -5
- package/dist/splitter/root/splitter-root.d.ts +28 -6
- package/dist/splitter/root/splitter-root.js +35 -1
- package/dist/stat/root/stat-root.d.ts +9 -1
- package/dist/stat/root/stat-root.js +15 -2
- package/dist/steps/root/steps-root.js +1 -1
- package/dist/steps/step/step.d.ts +1 -0
- package/dist/steps/step/step.js +1 -1
- package/dist/switch/root/switch-root.d.ts +14 -2
- package/dist/switch/root/switch-root.js +7 -1
- package/dist/table/cell/table-cell.d.ts +24 -4
- package/dist/table/cell/table-cell.js +21 -1
- package/dist/table/column/table-column.d.ts +32 -6
- package/dist/table/column/table-column.js +36 -6
- package/dist/table/root/table-root.d.ts +94 -3
- package/dist/table/root/table-root.js +128 -5
- package/dist/table/row/table-row.d.ts +7 -0
- package/dist/table/row/table-row.js +9 -1
- package/dist/tabs/root/tabs-root.d.ts +6 -1
- package/dist/tabs/root/tabs-root.js +6 -2
- package/dist/tag/group/tag-group.d.ts +107 -0
- package/dist/tag/group/tag-group.js +157 -0
- package/dist/tag/index.d.ts +1 -0
- package/dist/tag/index.js +1 -0
- package/dist/tag/root/tag-root.d.ts +83 -1
- package/dist/tag/root/tag-root.js +87 -17
- package/dist/tag/selection.d.ts +10 -0
- package/dist/tag/selection.js +12 -0
- package/dist/textarea/grow.d.ts +22 -0
- package/dist/textarea/grow.js +20 -0
- package/dist/textarea/root/textarea-root.d.ts +13 -0
- package/dist/textarea/root/textarea-root.js +10 -2
- package/dist/time-input/root/time-input-root.d.ts +71 -6
- package/dist/time-input/root/time-input-root.js +110 -44
- package/dist/time-picker/root/time-picker-root.d.ts +155 -26
- package/dist/time-picker/root/time-picker-root.js +192 -63
- package/dist/toast/hotkey.d.ts +22 -0
- package/dist/toast/hotkey.js +23 -0
- package/dist/toast/item/toast-item.d.ts +16 -1
- package/dist/toast/item/toast-item.js +41 -13
- package/dist/toast/root/toast-root.d.ts +105 -8
- package/dist/toast/root/toast-root.js +209 -4
- package/dist/toggle/group/toggle-group.d.ts +95 -16
- package/dist/toggle/group/toggle-group.js +99 -13
- package/dist/toggle/root/toggle-root.d.ts +26 -11
- package/dist/toggle/root/toggle-root.js +14 -6
- package/dist/toolbar/root/toolbar-root.d.ts +55 -15
- package/dist/toolbar/root/toolbar-root.js +99 -16
- package/dist/tooltip/focus-target.d.ts +6 -0
- package/dist/tooltip/focus-target.js +9 -0
- package/dist/tooltip/root/tooltip-root.d.ts +73 -15
- package/dist/tooltip/root/tooltip-root.js +96 -7
- package/dist/tour/naming.d.ts +30 -0
- package/dist/tour/naming.js +10 -0
- package/dist/tour/root/tour-root.d.ts +67 -3
- package/dist/tour/root/tour-root.js +105 -17
- package/dist/tour/stop/tour-stop.d.ts +65 -3
- package/dist/tour/stop/tour-stop.js +61 -11
- package/dist/tour/wait.d.ts +11 -0
- package/dist/tour/wait.js +19 -0
- package/dist/tree/item/tree-item.d.ts +21 -5
- package/dist/tree/item/tree-item.js +14 -4
- package/dist/tree/root/tree-root.d.ts +29 -5
- package/dist/tree/root/tree-root.js +64 -8
- package/dist/trend/root/trend-root.d.ts +36 -1
- package/dist/trend/root/trend-root.js +41 -15
- package/dist/video/root/keys.d.ts +5 -0
- package/dist/video/root/keys.js +13 -1
- package/dist/video/root/video-root.d.ts +19 -0
- package/dist/video/root/video-root.js +48 -4
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +20 -2
- package/dist/video-playlist/menu/video-playlist-menu.js +27 -5
- package/dist/video-playlist/root/video-playlist-root.js +6 -3
- package/dist/virtual-list/root/virtual-list-root.d.ts +52 -4
- package/dist/virtual-list/root/virtual-list-root.js +103 -21
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +9140 -1149
- package/types/svelte.d.ts +1 -0
- 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
|
|
219
|
-
*
|
|
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 {
|