@fusion.dev/helix-headless 0.215.3 → 0.216.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/api.json +1 -1
- package/custom-elements.json +1 -1
- package/dist/area-chart/root/area-chart-root.d.ts +1 -0
- package/dist/area-chart/root/area-chart-root.js +1 -1
- package/dist/bar-chart/root/bar-chart-root.d.ts +1 -0
- package/dist/bar-chart/root/bar-chart-root.js +1 -1
- package/dist/button/root/button-root.d.ts +3 -1
- package/dist/button/root/button-root.js +2 -1
- package/dist/chat/composer/chat-composer.d.ts +18 -1
- package/dist/chat/composer/chat-composer.js +8 -3
- package/dist/checkbox/root/checkbox-root.d.ts +3 -1
- package/dist/checkbox/root/checkbox-root.js +2 -1
- package/dist/code-block/highlight.d.ts +9 -0
- package/dist/code-block/highlight.js +39 -0
- package/dist/code-block/highlighter.d.ts +44 -0
- package/dist/code-block/highlighter.js +44 -0
- package/dist/code-block/index.d.ts +1 -0
- package/dist/code-block/index.js +1 -0
- package/dist/code-block/keyed-lines.d.ts +23 -0
- package/dist/code-block/keyed-lines.js +75 -0
- package/dist/code-block/root/code-block-root.d.ts +6 -23
- package/dist/code-block/root/code-block-root.js +8 -25
- package/dist/code-editor/index.d.ts +1 -0
- package/dist/code-editor/index.js +1 -0
- package/dist/code-editor/root/code-editor-root.d.ts +367 -0
- package/dist/code-editor/root/code-editor-root.js +746 -0
- package/dist/code-input/index.d.ts +1 -0
- package/dist/code-input/index.js +1 -0
- package/dist/code-input/root/code-input-root.d.ts +119 -0
- package/dist/code-input/root/code-input-root.js +142 -0
- package/dist/combobox/root/combobox-root.d.ts +6 -1
- package/dist/combobox/root/combobox-root.js +4 -2
- package/dist/command/root/command-root.d.ts +61 -11
- package/dist/command/root/command-root.js +88 -3
- package/dist/donut-chart/root/donut-chart-root.d.ts +1 -0
- package/dist/donut-chart/root/donut-chart-root.js +1 -1
- package/dist/element-events.generated.js +36 -3
- package/dist/filter-input/root/filter-input-root.d.ts +9 -1
- package/dist/filter-input/root/filter-input-root.js +7 -3
- package/dist/heatmap/root/heatmap-root.d.ts +1 -0
- package/dist/heatmap/root/heatmap-root.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/input/root/input-root.d.ts +14 -2
- package/dist/input/root/input-root.js +11 -3
- package/dist/kbd/root/kbd-root.js +9 -2
- package/dist/line-chart/root/line-chart-root.d.ts +1 -0
- package/dist/line-chart/root/line-chart-root.js +1 -1
- package/dist/listbox/root/listbox-root.d.ts +8 -1
- package/dist/listbox/root/listbox-root.js +7 -4
- package/dist/markdown/blocks.d.ts +66 -0
- package/dist/markdown/blocks.js +326 -0
- package/dist/markdown/index.d.ts +6 -0
- package/dist/markdown/index.js +5 -0
- package/dist/markdown/inline.d.ts +57 -0
- package/dist/markdown/inline.js +483 -0
- package/dist/markdown/root/markdown-root.d.ts +99 -0
- package/dist/markdown/root/markdown-root.js +93 -0
- package/dist/markdown/stream.d.ts +47 -0
- package/dist/markdown/stream.js +62 -0
- package/dist/markdown/tree.d.ts +57 -0
- package/dist/markdown/tree.js +144 -0
- package/dist/markdown/writer.d.ts +33 -0
- package/dist/markdown/writer.js +139 -0
- package/dist/menu/root/menu-root.d.ts +53 -0
- package/dist/menu/root/menu-root.js +92 -15
- package/dist/pagination/size/pagination-size.d.ts +3 -0
- package/dist/pagination/size/pagination-size.js +2 -1
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +1 -0
- package/dist/scatter-chart/root/scatter-chart-root.js +1 -1
- package/dist/select/root/select-root.d.ts +6 -1
- package/dist/select/root/select-root.js +4 -2
- package/dist/shortcut-overlay/index.d.ts +1 -0
- package/dist/shortcut-overlay/index.js +1 -0
- package/dist/shortcut-overlay/root/shortcut-overlay-root.d.ts +128 -0
- package/dist/shortcut-overlay/root/shortcut-overlay-root.js +275 -0
- package/dist/slider/root/slider-root.d.ts +3 -1
- package/dist/slider/root/slider-root.js +2 -1
- package/dist/spatial-bar-chart/root/spatial-bar-chart-root.d.ts +1 -0
- package/dist/spatial-bar-chart/root/spatial-bar-chart-root.js +1 -1
- package/dist/spatial-heatmap/root/spatial-heatmap-root.d.ts +1 -0
- package/dist/spatial-heatmap/root/spatial-heatmap-root.js +1 -1
- package/dist/spatial-ribbon-chart/root/spatial-ribbon-chart-root.d.ts +1 -0
- package/dist/spatial-ribbon-chart/root/spatial-ribbon-chart-root.js +1 -1
- package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.d.ts +1 -0
- package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.js +1 -1
- package/dist/spatial-surface-chart/root/spatial-surface-chart-root.d.ts +1 -0
- package/dist/spatial-surface-chart/root/spatial-surface-chart-root.js +1 -1
- package/dist/spatial-treemap/root/spatial-treemap-root.d.ts +1 -0
- package/dist/spatial-treemap/root/spatial-treemap-root.js +1 -1
- package/dist/switch/root/switch-root.d.ts +3 -1
- package/dist/switch/root/switch-root.js +2 -1
- package/dist/tabs/tab/tab.d.ts +3 -1
- package/dist/tabs/tab/tab.js +2 -1
- package/dist/textarea/root/textarea-root.d.ts +20 -4
- package/dist/textarea/root/textarea-root.js +31 -23
- package/dist/time-input/root/time-input-root.d.ts +6 -0
- package/dist/time-input/root/time-input-root.js +4 -2
- package/dist/time-picker/root/time-picker-root.d.ts +6 -0
- package/dist/time-picker/root/time-picker-root.js +4 -2
- package/dist/toast/root/toast-root.d.ts +64 -0
- package/dist/toast/root/toast-root.js +128 -3
- package/dist/toggle/root/toggle-root.d.ts +3 -1
- package/dist/toggle/root/toggle-root.js +2 -1
- package/dist/virtual-list/root/virtual-list-root.d.ts +18 -2
- package/dist/virtual-list/root/virtual-list-root.js +103 -5
- package/examples.json +1 -1
- package/lint.json +1 -1
- package/package.json +6 -6
- package/types/jsx.d.ts +5315 -596
- package/types/svelte.d.ts +4 -0
- package/types/vue.d.ts +1085 -4
- package/types/words.d.ts +491 -0
package/types/vue.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
HelixBeforeChangeEvent,
|
|
7
7
|
HelixBeforeCloseEvent,
|
|
8
8
|
HelixBeforeCollapseEvent,
|
|
9
|
+
HelixBeforeListenEvent,
|
|
9
10
|
HelixBeforeMoveEvent,
|
|
10
11
|
HelixBeforeOpenEvent,
|
|
11
12
|
HelixBeforePasteEvent,
|
|
@@ -74,6 +75,8 @@ import type {
|
|
|
74
75
|
HelixHeadlessCheckboxGroup,
|
|
75
76
|
HelixHeadlessCode,
|
|
76
77
|
HelixHeadlessCodeBlock,
|
|
78
|
+
HelixHeadlessCodeEditor,
|
|
79
|
+
HelixHeadlessCodeInput,
|
|
77
80
|
HelixHeadlessColorInput,
|
|
78
81
|
HelixHeadlessColorPicker,
|
|
79
82
|
HelixHeadlessCombobox,
|
|
@@ -128,6 +131,7 @@ import type {
|
|
|
128
131
|
HelixHeadlessMapRaster,
|
|
129
132
|
HelixHeadlessMapRoute,
|
|
130
133
|
HelixHeadlessMapTerrain,
|
|
134
|
+
HelixHeadlessMarkdown,
|
|
131
135
|
HelixHeadlessMegamenu,
|
|
132
136
|
HelixHeadlessMenu,
|
|
133
137
|
HelixHeadlessMenuItem,
|
|
@@ -158,6 +162,7 @@ import type {
|
|
|
158
162
|
HelixHeadlessScatterChart,
|
|
159
163
|
HelixHeadlessScrollArea,
|
|
160
164
|
HelixHeadlessSelect,
|
|
165
|
+
HelixHeadlessShortcutOverlay,
|
|
161
166
|
HelixHeadlessSkeleton,
|
|
162
167
|
HelixHeadlessSkipLink,
|
|
163
168
|
HelixHeadlessSlider,
|
|
@@ -210,6 +215,7 @@ import type {
|
|
|
210
215
|
HelixHeadlessVideoPlaylistMenu,
|
|
211
216
|
HelixHeadlessVirtualList,
|
|
212
217
|
HelixHistoryEvent,
|
|
218
|
+
HelixListenEvent,
|
|
213
219
|
HelixLoadEvent,
|
|
214
220
|
HelixLoadMoreEvent,
|
|
215
221
|
HelixMapClusterEvent,
|
|
@@ -794,6 +800,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
794
800
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
795
801
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
796
802
|
readingsLabel?: (HelixHeadlessAreaChart["readingsLabel"]) | undefined;
|
|
803
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
804
|
+
turn, its readings from left to right and from the left ear to the
|
|
805
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
806
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
807
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
808
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
809
|
+
press, and the sound is made only then. */
|
|
810
|
+
sonify?: (HelixHeadlessAreaChart["sonify"]) | undefined;
|
|
811
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
812
|
+
"sonify-duration"?: (HelixHeadlessAreaChart["sonifyDuration"] | `${number}`) | undefined;
|
|
813
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
814
|
+
sonifyDuration?: (HelixHeadlessAreaChart["sonifyDuration"]) | undefined;
|
|
815
|
+
/** The Listen button's words. */
|
|
816
|
+
"sonify-label"?: (HelixHeadlessAreaChart["sonifyLabel"]) | undefined;
|
|
817
|
+
/** The Listen button's words. */
|
|
818
|
+
sonifyLabel?: (HelixHeadlessAreaChart["sonifyLabel"]) | undefined;
|
|
819
|
+
/** The Listen button's words while the chart plays. */
|
|
820
|
+
"sonify-stop-label"?: (HelixHeadlessAreaChart["sonifyStopLabel"]) | undefined;
|
|
821
|
+
/** The Listen button's words while the chart plays. */
|
|
822
|
+
sonifyStopLabel?: (HelixHeadlessAreaChart["sonifyStopLabel"]) | undefined;
|
|
823
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
824
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
825
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
826
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
827
|
+
summary?: (HelixHeadlessAreaChart["summary"]) | undefined;
|
|
797
828
|
/** The readings as data, in the shape of a table, where the page has no
|
|
798
829
|
table to point `for` at. `for` wins where both are set.
|
|
799
830
|
|
|
@@ -1200,6 +1231,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
1200
1231
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
1201
1232
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
1202
1233
|
readingsLabel?: (HelixHeadlessBarChart["readingsLabel"]) | undefined;
|
|
1234
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
1235
|
+
turn, its readings from left to right and from the left ear to the
|
|
1236
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
1237
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
1238
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
1239
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
1240
|
+
press, and the sound is made only then. */
|
|
1241
|
+
sonify?: (HelixHeadlessBarChart["sonify"]) | undefined;
|
|
1242
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
1243
|
+
"sonify-duration"?: (HelixHeadlessBarChart["sonifyDuration"] | `${number}`) | undefined;
|
|
1244
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
1245
|
+
sonifyDuration?: (HelixHeadlessBarChart["sonifyDuration"]) | undefined;
|
|
1246
|
+
/** The Listen button's words. */
|
|
1247
|
+
"sonify-label"?: (HelixHeadlessBarChart["sonifyLabel"]) | undefined;
|
|
1248
|
+
/** The Listen button's words. */
|
|
1249
|
+
sonifyLabel?: (HelixHeadlessBarChart["sonifyLabel"]) | undefined;
|
|
1250
|
+
/** The Listen button's words while the chart plays. */
|
|
1251
|
+
"sonify-stop-label"?: (HelixHeadlessBarChart["sonifyStopLabel"]) | undefined;
|
|
1252
|
+
/** The Listen button's words while the chart plays. */
|
|
1253
|
+
sonifyStopLabel?: (HelixHeadlessBarChart["sonifyStopLabel"]) | undefined;
|
|
1254
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
1255
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
1256
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
1257
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
1258
|
+
summary?: (HelixHeadlessBarChart["summary"]) | undefined;
|
|
1203
1259
|
/** The readings as data, in the shape of a table, where the page has no
|
|
1204
1260
|
table to point `for` at. `for` wins where both are set.
|
|
1205
1261
|
|
|
@@ -2648,6 +2704,12 @@ export type HelixHeadlessChatComposerElementEvent<E = Event> = TypedEvent<
|
|
|
2648
2704
|
HelixHeadlessChatComposer,
|
|
2649
2705
|
E
|
|
2650
2706
|
>;
|
|
2707
|
+
/** `helix-before-listen` event type */
|
|
2708
|
+
export type HelixHeadlessChatComposerHelixBeforeListenElementEvent =
|
|
2709
|
+
HelixHeadlessChatComposerElementEvent<HelixBeforeListenEvent>;
|
|
2710
|
+
/** `helix-listen` event type */
|
|
2711
|
+
export type HelixHeadlessChatComposerHelixListenElementEvent =
|
|
2712
|
+
HelixHeadlessChatComposerElementEvent<HelixListenEvent>;
|
|
2651
2713
|
/** `helix-send` event type */
|
|
2652
2714
|
export type HelixHeadlessChatComposerHelixSendElementEvent =
|
|
2653
2715
|
HelixHeadlessChatComposerElementEvent<HelixSendEvent>;
|
|
@@ -2710,6 +2772,27 @@ milliseconds. The attribute also takes a CSS time, such as `3s`. */
|
|
|
2710
2772
|
It follows typing, so reading it gives the draft. Set it to seed a draft or
|
|
2711
2773
|
to replace the one in the field, and set it to `''` to clear it. */
|
|
2712
2774
|
value?: (HelixHeadlessChatComposer["value"]) | undefined;
|
|
2775
|
+
/** What a screen reader hears as listening starts. */
|
|
2776
|
+
"listening-label"?: (HelixHeadlessChatComposer["listeningLabel"]) | undefined;
|
|
2777
|
+
/** What a screen reader hears as listening starts. */
|
|
2778
|
+
listeningLabel?: (HelixHeadlessChatComposer["listeningLabel"]) | undefined;
|
|
2779
|
+
/** What a screen reader hears as listening stops. */
|
|
2780
|
+
"stopped-listening-label"?: (HelixHeadlessChatComposer["stoppedListeningLabel"]) | undefined;
|
|
2781
|
+
/** What a screen reader hears as listening stops. */
|
|
2782
|
+
stoppedListeningLabel?: (HelixHeadlessChatComposer["stoppedListeningLabel"]) | undefined;
|
|
2783
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
2784
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
2785
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
2786
|
+
`email` or `number` draws no button. */
|
|
2787
|
+
voice?: (HelixHeadlessChatComposer["voice"]) | undefined;
|
|
2788
|
+
/** The dictation button's name while it is not listening. */
|
|
2789
|
+
"voice-label"?: (HelixHeadlessChatComposer["voiceLabel"]) | undefined;
|
|
2790
|
+
/** The dictation button's name while it is not listening. */
|
|
2791
|
+
voiceLabel?: (HelixHeadlessChatComposer["voiceLabel"]) | undefined;
|
|
2792
|
+
/** The dictation button's name while it listens. */
|
|
2793
|
+
"voice-stop-label"?: (HelixHeadlessChatComposer["voiceStopLabel"]) | undefined;
|
|
2794
|
+
/** The dictation button's name while it listens. */
|
|
2795
|
+
voiceStopLabel?: (HelixHeadlessChatComposer["voiceStopLabel"]) | undefined;
|
|
2713
2796
|
/** Whether the control is disabled and cannot be used.
|
|
2714
2797
|
|
|
2715
2798
|
Reflected, because the styled tier selects on it, and mirrored to
|
|
@@ -2736,9 +2819,16 @@ imperatively later, and nothing is hydrating by then.
|
|
|
2736
2819
|
|
|
2737
2820
|
Here rather than on each control. */
|
|
2738
2821
|
name?: (HelixHeadlessChatComposer["name"]) | undefined;
|
|
2822
|
+
/** The engine this field listens through, in place of the one
|
|
2823
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
2824
|
+
speechEngine?: (HelixHeadlessChatComposer["speechEngine"]) | undefined;
|
|
2739
2825
|
};
|
|
2740
2826
|
|
|
2741
2827
|
export type HelixHeadlessChatComposerVueEvents = {
|
|
2828
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the composer from listening. */
|
|
2829
|
+
"helix-before-listen": HelixHeadlessChatComposerHelixBeforeListenElementEvent;
|
|
2830
|
+
/** Dictation settled on a phrase and put it in the draft, after the draft's own `input`. */
|
|
2831
|
+
"helix-listen": HelixHeadlessChatComposerHelixListenElementEvent;
|
|
2742
2832
|
/** Fired when the user sends their turn, and cancelable. */
|
|
2743
2833
|
"helix-send": HelixHeadlessChatComposerHelixSendElementEvent;
|
|
2744
2834
|
/** The user started or stopped writing, with `typing` saying which, as the composer's `typing` does. */
|
|
@@ -3486,6 +3576,469 @@ export type HelixHeadlessCodeBlockVueEvents = {
|
|
|
3486
3576
|
"helix-toggle": HelixHeadlessCodeBlockHelixToggleElementEvent;
|
|
3487
3577
|
};
|
|
3488
3578
|
|
|
3579
|
+
/** `HelixHeadlessCodeEditor` component event */
|
|
3580
|
+
export type HelixHeadlessCodeEditorElementEvent<E = Event> = TypedEvent<
|
|
3581
|
+
HelixHeadlessCodeEditor,
|
|
3582
|
+
E
|
|
3583
|
+
>;
|
|
3584
|
+
/** `helix-before-change` event type */
|
|
3585
|
+
export type HelixHeadlessCodeEditorHelixBeforeChangeElementEvent =
|
|
3586
|
+
HelixHeadlessCodeEditorElementEvent<HelixBeforeChangeEvent>;
|
|
3587
|
+
|
|
3588
|
+
export type HelixHeadlessCodeEditorVueProps = {
|
|
3589
|
+
/** The name of the header's toolbar, read by screen readers. */
|
|
3590
|
+
"controls-label"?: (HelixHeadlessCodeEditor["controlsLabel"]) | undefined;
|
|
3591
|
+
/** The name of the header's toolbar, read by screen readers. */
|
|
3592
|
+
controlsLabel?: (HelixHeadlessCodeEditor["controlsLabel"]) | undefined;
|
|
3593
|
+
/** How one problem in the list reads. `{line}` is its line and `{message}` what it says. */
|
|
3594
|
+
"diagnostic-label"?: (HelixHeadlessCodeEditor["diagnosticLabel"]) | undefined;
|
|
3595
|
+
/** How one problem in the list reads. `{line}` is its line and `{message}` what it says. */
|
|
3596
|
+
diagnosticLabel?: (HelixHeadlessCodeEditor["diagnosticLabel"]) | undefined;
|
|
3597
|
+
/** The list of problems' name. */
|
|
3598
|
+
"diagnostics-label"?: (HelixHeadlessCodeEditor["diagnosticsLabel"]) | undefined;
|
|
3599
|
+
/** The list of problems' name. */
|
|
3600
|
+
diagnosticsLabel?: (HelixHeadlessCodeEditor["diagnosticsLabel"]) | undefined;
|
|
3601
|
+
/** The name of the find bar's Close button. */
|
|
3602
|
+
"find-close-label"?: (HelixHeadlessCodeEditor["findCloseLabel"]) | undefined;
|
|
3603
|
+
/** The name of the find bar's Close button. */
|
|
3604
|
+
findCloseLabel?: (HelixHeadlessCodeEditor["findCloseLabel"]) | undefined;
|
|
3605
|
+
/** The name of the find bar's toolbar, read by screen readers. */
|
|
3606
|
+
"find-controls-label"?: (HelixHeadlessCodeEditor["findControlsLabel"]) | undefined;
|
|
3607
|
+
/** The name of the find bar's toolbar, read by screen readers. */
|
|
3608
|
+
findControlsLabel?: (HelixHeadlessCodeEditor["findControlsLabel"]) | undefined;
|
|
3609
|
+
/** What the find bar says when its regular expression cannot be read. */
|
|
3610
|
+
"find-invalid-label"?: (HelixHeadlessCodeEditor["findInvalidLabel"]) | undefined;
|
|
3611
|
+
/** What the find bar says when its regular expression cannot be read. */
|
|
3612
|
+
findInvalidLabel?: (HelixHeadlessCodeEditor["findInvalidLabel"]) | undefined;
|
|
3613
|
+
/** The name of the Find button and the find bar's field. */
|
|
3614
|
+
"find-label"?: (HelixHeadlessCodeEditor["findLabel"]) | undefined;
|
|
3615
|
+
/** The name of the Find button and the find bar's field. */
|
|
3616
|
+
findLabel?: (HelixHeadlessCodeEditor["findLabel"]) | undefined;
|
|
3617
|
+
/** The name of the option that finds only the same case. */
|
|
3618
|
+
"find-match-case-label"?: (HelixHeadlessCodeEditor["findMatchCaseLabel"]) | undefined;
|
|
3619
|
+
/** The name of the option that finds only the same case. */
|
|
3620
|
+
findMatchCaseLabel?: (HelixHeadlessCodeEditor["findMatchCaseLabel"]) | undefined;
|
|
3621
|
+
/** The name of the button that selects the next match. */
|
|
3622
|
+
"find-next-label"?: (HelixHeadlessCodeEditor["findNextLabel"]) | undefined;
|
|
3623
|
+
/** The name of the button that selects the next match. */
|
|
3624
|
+
findNextLabel?: (HelixHeadlessCodeEditor["findNextLabel"]) | undefined;
|
|
3625
|
+
/** The name of the button that selects the previous match. */
|
|
3626
|
+
"find-previous-label"?: (HelixHeadlessCodeEditor["findPreviousLabel"]) | undefined;
|
|
3627
|
+
/** The name of the button that selects the previous match. */
|
|
3628
|
+
findPreviousLabel?: (HelixHeadlessCodeEditor["findPreviousLabel"]) | undefined;
|
|
3629
|
+
/** The name of the option that reads the search as a regular expression. */
|
|
3630
|
+
"find-regex-label"?: (HelixHeadlessCodeEditor["findRegexLabel"]) | undefined;
|
|
3631
|
+
/** The name of the option that reads the search as a regular expression. */
|
|
3632
|
+
findRegexLabel?: (HelixHeadlessCodeEditor["findRegexLabel"]) | undefined;
|
|
3633
|
+
/** The name of the button that shows the replace field under the find field. */
|
|
3634
|
+
"find-replace-label"?: (HelixHeadlessCodeEditor["findReplaceLabel"]) | undefined;
|
|
3635
|
+
/** The name of the button that shows the replace field under the find field. */
|
|
3636
|
+
findReplaceLabel?: (HelixHeadlessCodeEditor["findReplaceLabel"]) | undefined;
|
|
3637
|
+
/** The name of the option that finds only whole words. */
|
|
3638
|
+
"find-whole-word-label"?: (HelixHeadlessCodeEditor["findWholeWordLabel"]) | undefined;
|
|
3639
|
+
/** The name of the option that finds only whole words. */
|
|
3640
|
+
findWholeWordLabel?: (HelixHeadlessCodeEditor["findWholeWordLabel"]) | undefined;
|
|
3641
|
+
/** The language to highlight, such as `ts`, `css`, `md` or `rust`. Empty is plain text. */
|
|
3642
|
+
language?: (HelixHeadlessCodeEditor["language"]) | undefined;
|
|
3643
|
+
/** Draws each line's number beside it, in an engine. */
|
|
3644
|
+
"line-numbers"?: (HelixHeadlessCodeEditor["lineNumbers"]) | undefined;
|
|
3645
|
+
/** Draws each line's number beside it, in an engine. */
|
|
3646
|
+
lineNumbers?: (HelixHeadlessCodeEditor["lineNumbers"]) | undefined;
|
|
3647
|
+
/** What the find bar says of its matches. `{index}` is the selected match,
|
|
3648
|
+
counting from 1, and `{count}` how many there are. */
|
|
3649
|
+
"matches-label"?: (HelixHeadlessCodeEditor["matchesLabel"]) | undefined;
|
|
3650
|
+
/** What the find bar says of its matches. `{index}` is the selected match,
|
|
3651
|
+
counting from 1, and `{count}` how many there are. */
|
|
3652
|
+
matchesLabel?: (HelixHeadlessCodeEditor["matchesLabel"]) | undefined;
|
|
3653
|
+
/** Shown while the editor is empty. */
|
|
3654
|
+
placeholder?: (HelixHeadlessCodeEditor["placeholder"]) | undefined;
|
|
3655
|
+
/** Where the caret is, in the status line. `{line}` and `{column}` count from 1. */
|
|
3656
|
+
"position-label"?: (HelixHeadlessCodeEditor["positionLabel"]) | undefined;
|
|
3657
|
+
/** Where the caret is, in the status line. `{line}` and `{column}` count from 1. */
|
|
3658
|
+
positionLabel?: (HelixHeadlessCodeEditor["positionLabel"]) | undefined;
|
|
3659
|
+
/** How many problems there are, in the status line. `{count}` is the number. */
|
|
3660
|
+
"problems-label"?: (HelixHeadlessCodeEditor["problemsLabel"]) | undefined;
|
|
3661
|
+
/** How many problems there are, in the status line. `{count}` is the number. */
|
|
3662
|
+
problemsLabel?: (HelixHeadlessCodeEditor["problemsLabel"]) | undefined;
|
|
3663
|
+
/** Lets the reader select and copy, and not change, the text. */
|
|
3664
|
+
readonly?: (HelixHeadlessCodeEditor["readOnly"]) | undefined;
|
|
3665
|
+
/** Lets the reader select and copy, and not change, the text. */
|
|
3666
|
+
readOnly?: (HelixHeadlessCodeEditor["readOnly"]) | undefined;
|
|
3667
|
+
/** The name of the button that replaces every match. */
|
|
3668
|
+
"replace-all-label"?: (HelixHeadlessCodeEditor["replaceAllLabel"]) | undefined;
|
|
3669
|
+
/** The name of the button that replaces every match. */
|
|
3670
|
+
replaceAllLabel?: (HelixHeadlessCodeEditor["replaceAllLabel"]) | undefined;
|
|
3671
|
+
/** The name of the button that replaces the selected match. */
|
|
3672
|
+
"replace-label"?: (HelixHeadlessCodeEditor["replaceLabel"]) | undefined;
|
|
3673
|
+
/** The name of the button that replaces the selected match. */
|
|
3674
|
+
replaceLabel?: (HelixHeadlessCodeEditor["replaceLabel"]) | undefined;
|
|
3675
|
+
/** The name of the field the replacement is typed in. */
|
|
3676
|
+
"replace-with-label"?: (HelixHeadlessCodeEditor["replaceWithLabel"]) | undefined;
|
|
3677
|
+
/** The name of the field the replacement is typed in. */
|
|
3678
|
+
replaceWithLabel?: (HelixHeadlessCodeEditor["replaceWithLabel"]) | undefined;
|
|
3679
|
+
/** How many lines tall the plain field is before it scrolls, without an engine. */
|
|
3680
|
+
rows?: (HelixHeadlessCodeEditor["rows"]) | undefined;
|
|
3681
|
+
/** Wraps long lines to the editor's width, in place of scrolling sideways. */
|
|
3682
|
+
wrap?: (HelixHeadlessCodeEditor["wrap"]) | undefined;
|
|
3683
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3684
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3685
|
+
control resets to the `value` it declares. */
|
|
3686
|
+
"default-value"?: (HelixHeadlessCodeEditor["defaultValue"]) | undefined;
|
|
3687
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3688
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3689
|
+
control resets to the `value` it declares. */
|
|
3690
|
+
defaultValue?: (HelixHeadlessCodeEditor["defaultValue"]) | undefined;
|
|
3691
|
+
/** The control's current value, which its form submits.
|
|
3692
|
+
|
|
3693
|
+
One property, not two, so `input.value` answers the question anyone
|
|
3694
|
+
asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
3695
|
+
same statement in markup, and `default-value` is how markup seeds a value
|
|
3696
|
+
a reset should return to. */
|
|
3697
|
+
value?: (HelixHeadlessCodeEditor["value"]) | undefined;
|
|
3698
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
3699
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
3700
|
+
names the control inside, and a new one renders at once.
|
|
3701
|
+
|
|
3702
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
3703
|
+
render it again.** It is the platform's attribute and no property of this
|
|
3704
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
3705
|
+
the old words. Data Table meets this on every column move: each row's
|
|
3706
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3707
|
+
|
|
3708
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3709
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3710
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3711
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3712
|
+
"aria-label"?: (string) | undefined;
|
|
3713
|
+
/** The validation message shown under the control. It replaces the
|
|
3714
|
+
browser's message. */
|
|
3715
|
+
feedback?: (HelixHeadlessCodeEditor["feedback"]) | undefined;
|
|
3716
|
+
/** Help text shown under the control. A validation message replaces it. */
|
|
3717
|
+
hint?: (HelixHeadlessCodeEditor["hint"]) | undefined;
|
|
3718
|
+
/** The field's label, which is also its accessible name. Content in the
|
|
3719
|
+
`label` slot replaces it. */
|
|
3720
|
+
label?: (HelixHeadlessCodeEditor["label"]) | undefined;
|
|
3721
|
+
/** Whether the field needs a value before the form can submit. */
|
|
3722
|
+
required?: (HelixHeadlessCodeEditor["required"]) | undefined;
|
|
3723
|
+
/** The message shown when the field is required and empty.
|
|
3724
|
+
|
|
3725
|
+
**Absent, or empty, is the control's own sentence**, "Choose one to
|
|
3726
|
+
continue." on a set and the browser's own on a text field, which the
|
|
3727
|
+
browser writes in the reader's language. A family with a sentence of its
|
|
3728
|
+
own declares it as this property's English, a word property a page
|
|
3729
|
+
registers for its locale under the family's key. Every other word a control speaks is a property,
|
|
3730
|
+
and this one was the English a form in another language still spoke in
|
|
3731
|
+
the bubble it raises on submit: `feedback` replaces the message under
|
|
3732
|
+
the field and does not reach that one. */
|
|
3733
|
+
"value-missing-message"?: (HelixHeadlessCodeEditor["valueMissingMessage"]) | undefined;
|
|
3734
|
+
/** The message shown when the field is required and empty.
|
|
3735
|
+
|
|
3736
|
+
**Absent, or empty, is the control's own sentence**, "Choose one to
|
|
3737
|
+
continue." on a set and the browser's own on a text field, which the
|
|
3738
|
+
browser writes in the reader's language. A family with a sentence of its
|
|
3739
|
+
own declares it as this property's English, a word property a page
|
|
3740
|
+
registers for its locale under the family's key. Every other word a control speaks is a property,
|
|
3741
|
+
and this one was the English a form in another language still spoke in
|
|
3742
|
+
the bubble it raises on submit: `feedback` replaces the message under
|
|
3743
|
+
the field and does not reach that one. */
|
|
3744
|
+
valueMissingMessage?: (HelixHeadlessCodeEditor["valueMissingMessage"]) | undefined;
|
|
3745
|
+
/** Whether the control is disabled and cannot be used.
|
|
3746
|
+
|
|
3747
|
+
Reflected, because the styled tier selects on it, and mirrored to
|
|
3748
|
+
`aria-disabled` rather than removing the element from the accessibility
|
|
3749
|
+
tree, so a screen reader can still announce that the control exists.
|
|
3750
|
+
|
|
3751
|
+
The mirror itself is in `willUpdate` below, here rather than in each
|
|
3752
|
+
control, because here is where `disabled` is. */
|
|
3753
|
+
disabled?: (HelixHeadlessCodeEditor["disabled"]) | undefined;
|
|
3754
|
+
/** The name the control's value is submitted under.
|
|
3755
|
+
|
|
3756
|
+
**Reflected, and it is the exception to "reflect only what CSS selects
|
|
3757
|
+
on".** The platform builds a form's entry list from the `name` *content
|
|
3758
|
+
attribute*, not from the property, so a control named through the property
|
|
3759
|
+
submitted under no name at all and was silently dropped. Measured: two
|
|
3760
|
+
inputs in one form, one named by attribute and one by property, and the
|
|
3761
|
+
form carried a single entry.
|
|
3762
|
+
|
|
3763
|
+
Safe for a React consumer, which is what the rule is protecting: React
|
|
3764
|
+
renders a custom element's props as attributes on the server, so the name
|
|
3765
|
+
is already in the markup being hydrated and reflecting it writes what is
|
|
3766
|
+
there. It is only a change to the markup when a consumer assigns it
|
|
3767
|
+
imperatively later, and nothing is hydrating by then.
|
|
3768
|
+
|
|
3769
|
+
Here rather than on each control. */
|
|
3770
|
+
name?: (HelixHeadlessCodeEditor["name"]) | undefined;
|
|
3771
|
+
/** The problems in the text, each underlined and listed under the editor. */
|
|
3772
|
+
diagnostics?: (HelixHeadlessCodeEditor["diagnostics"]) | undefined;
|
|
3773
|
+
/** What draws the editor, such as `codeMirrorEngine()` from
|
|
3774
|
+
`@fusion.dev/helix-editor`. Absent, the editor is a plain text field. */
|
|
3775
|
+
engine?: (HelixHeadlessCodeEditor["engine"]) | undefined;
|
|
3776
|
+
};
|
|
3777
|
+
|
|
3778
|
+
export type HelixHeadlessCodeEditorVueEvents = {
|
|
3779
|
+
/** The reader finished an edit and focus left the code, in the engine or the plain field. */
|
|
3780
|
+
change: HelixHeadlessCodeEditorElementEvent;
|
|
3781
|
+
/** The text is about to change. Cancelable: cancel it to keep the current text. */
|
|
3782
|
+
"helix-before-change": HelixHeadlessCodeEditorHelixBeforeChangeElementEvent;
|
|
3783
|
+
/** Fired after the text changes. */
|
|
3784
|
+
input: HelixHeadlessCodeEditorElementEvent;
|
|
3785
|
+
};
|
|
3786
|
+
|
|
3787
|
+
/** `HelixHeadlessCodeInput` component event */
|
|
3788
|
+
export type HelixHeadlessCodeInputElementEvent<E = Event> = TypedEvent<
|
|
3789
|
+
HelixHeadlessCodeInput,
|
|
3790
|
+
E
|
|
3791
|
+
>;
|
|
3792
|
+
/** `helix-before-change` event type */
|
|
3793
|
+
export type HelixHeadlessCodeInputHelixBeforeChangeElementEvent =
|
|
3794
|
+
HelixHeadlessCodeInputElementEvent<HelixBeforeChangeEvent>;
|
|
3795
|
+
/** `helix-before-listen` event type */
|
|
3796
|
+
export type HelixHeadlessCodeInputHelixBeforeListenElementEvent =
|
|
3797
|
+
HelixHeadlessCodeInputElementEvent<HelixBeforeListenEvent>;
|
|
3798
|
+
/** `helix-clear` event type */
|
|
3799
|
+
export type HelixHeadlessCodeInputHelixClearElementEvent =
|
|
3800
|
+
HelixHeadlessCodeInputElementEvent<HelixClearEvent>;
|
|
3801
|
+
/** `helix-listen` event type */
|
|
3802
|
+
export type HelixHeadlessCodeInputHelixListenElementEvent =
|
|
3803
|
+
HelixHeadlessCodeInputElementEvent<HelixListenEvent>;
|
|
3804
|
+
|
|
3805
|
+
export type HelixHeadlessCodeInputVueProps = {
|
|
3806
|
+
/** The grammar to highlight, such as `json`, `css`, `ts`, `html` or `sh`. Empty is plain text. */
|
|
3807
|
+
language?: (HelixHeadlessCodeInput["language"]) | undefined;
|
|
3808
|
+
/** How long lines are drawn: `off` keeps each line its length and scrolls
|
|
3809
|
+
sideways, as code reads, and `soft` wraps at the field's edge. */
|
|
3810
|
+
wrap?: (HelixHeadlessCodeInput["wrap"]) | undefined;
|
|
3811
|
+
/** What a screen reader hears as listening starts. */
|
|
3812
|
+
"listening-label"?: (HelixHeadlessCodeInput["listeningLabel"]) | undefined;
|
|
3813
|
+
/** What a screen reader hears as listening starts. */
|
|
3814
|
+
listeningLabel?: (HelixHeadlessCodeInput["listeningLabel"]) | undefined;
|
|
3815
|
+
/** What a screen reader hears as listening stops. */
|
|
3816
|
+
"stopped-listening-label"?: (HelixHeadlessCodeInput["stoppedListeningLabel"]) | undefined;
|
|
3817
|
+
/** What a screen reader hears as listening stops. */
|
|
3818
|
+
stoppedListeningLabel?: (HelixHeadlessCodeInput["stoppedListeningLabel"]) | undefined;
|
|
3819
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
3820
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
3821
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
3822
|
+
`email` or `number` draws no button. */
|
|
3823
|
+
voice?: (HelixHeadlessCodeInput["voice"]) | undefined;
|
|
3824
|
+
/** The dictation button's name while it is not listening. */
|
|
3825
|
+
"voice-label"?: (HelixHeadlessCodeInput["voiceLabel"]) | undefined;
|
|
3826
|
+
/** The dictation button's name while it is not listening. */
|
|
3827
|
+
voiceLabel?: (HelixHeadlessCodeInput["voiceLabel"]) | undefined;
|
|
3828
|
+
/** The dictation button's name while it listens. */
|
|
3829
|
+
"voice-stop-label"?: (HelixHeadlessCodeInput["voiceStopLabel"]) | undefined;
|
|
3830
|
+
/** The dictation button's name while it listens. */
|
|
3831
|
+
voiceStopLabel?: (HelixHeadlessCodeInput["voiceStopLabel"]) | undefined;
|
|
3832
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3833
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3834
|
+
control resets to the `value` it declares. */
|
|
3835
|
+
"default-value"?: (HelixHeadlessCodeInput["defaultValue"]) | undefined;
|
|
3836
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3837
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3838
|
+
control resets to the `value` it declares. */
|
|
3839
|
+
defaultValue?: (HelixHeadlessCodeInput["defaultValue"]) | undefined;
|
|
3840
|
+
/** The control's current value, which its form submits.
|
|
3841
|
+
|
|
3842
|
+
One property, not two, so `input.value` answers the question anyone
|
|
3843
|
+
asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
3844
|
+
same statement in markup, and `default-value` is how markup seeds a value
|
|
3845
|
+
a reset should return to. */
|
|
3846
|
+
value?: (HelixHeadlessCodeInput["value"]) | undefined;
|
|
3847
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
3848
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
3849
|
+
names the control inside, and a new one renders at once.
|
|
3850
|
+
|
|
3851
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
3852
|
+
render it again.** It is the platform's attribute and no property of this
|
|
3853
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
3854
|
+
the old words. Data Table meets this on every column move: each row's
|
|
3855
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3856
|
+
|
|
3857
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3858
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3859
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3860
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3861
|
+
"aria-label"?: (string) | undefined;
|
|
3862
|
+
/** The validation message shown under the control. It replaces the
|
|
3863
|
+
browser's message. */
|
|
3864
|
+
feedback?: (HelixHeadlessCodeInput["feedback"]) | undefined;
|
|
3865
|
+
/** Help text shown under the control. A validation message replaces it. */
|
|
3866
|
+
hint?: (HelixHeadlessCodeInput["hint"]) | undefined;
|
|
3867
|
+
/** The field's label, which is also its accessible name. Content in the
|
|
3868
|
+
`label` slot replaces it. */
|
|
3869
|
+
label?: (HelixHeadlessCodeInput["label"]) | undefined;
|
|
3870
|
+
/** Whether the field needs a value before the form can submit. */
|
|
3871
|
+
required?: (HelixHeadlessCodeInput["required"]) | undefined;
|
|
3872
|
+
/** The message shown when the field is required and empty.
|
|
3873
|
+
|
|
3874
|
+
**Absent, or empty, is the control's own sentence**, "Choose one to
|
|
3875
|
+
continue." on a set and the browser's own on a text field, which the
|
|
3876
|
+
browser writes in the reader's language. A family with a sentence of its
|
|
3877
|
+
own declares it as this property's English, a word property a page
|
|
3878
|
+
registers for its locale under the family's key. Every other word a control speaks is a property,
|
|
3879
|
+
and this one was the English a form in another language still spoke in
|
|
3880
|
+
the bubble it raises on submit: `feedback` replaces the message under
|
|
3881
|
+
the field and does not reach that one. */
|
|
3882
|
+
"value-missing-message"?: (HelixHeadlessCodeInput["valueMissingMessage"]) | undefined;
|
|
3883
|
+
/** The message shown when the field is required and empty.
|
|
3884
|
+
|
|
3885
|
+
**Absent, or empty, is the control's own sentence**, "Choose one to
|
|
3886
|
+
continue." on a set and the browser's own on a text field, which the
|
|
3887
|
+
browser writes in the reader's language. A family with a sentence of its
|
|
3888
|
+
own declares it as this property's English, a word property a page
|
|
3889
|
+
registers for its locale under the family's key. Every other word a control speaks is a property,
|
|
3890
|
+
and this one was the English a form in another language still spoke in
|
|
3891
|
+
the bubble it raises on submit: `feedback` replaces the message under
|
|
3892
|
+
the field and does not reach that one. */
|
|
3893
|
+
valueMissingMessage?: (HelixHeadlessCodeInput["valueMissingMessage"]) | undefined;
|
|
3894
|
+
/** What the browser can autofill in the field, as a standard `autocomplete`
|
|
3895
|
+
token.
|
|
3896
|
+
|
|
3897
|
+
Empty leaves the attribute off, which is the browser's default. Set it to
|
|
3898
|
+
a token like `email` or `bday` to ask for autofill, or to `off` to refuse. */
|
|
3899
|
+
autocomplete?: (HelixHeadlessCodeInput["autocomplete"]) | undefined;
|
|
3900
|
+
/** Grows the box to fit its content, so it does not scroll. */
|
|
3901
|
+
"auto-grow"?: (HelixHeadlessCodeInput["autoGrow"]) | undefined;
|
|
3902
|
+
/** Grows the box to fit its content, so it does not scroll. */
|
|
3903
|
+
autoGrow?: (HelixHeadlessCodeInput["autoGrow"]) | undefined;
|
|
3904
|
+
/** Draws a button that empties the field while it holds text. */
|
|
3905
|
+
clearable?: (HelixHeadlessCodeInput["clearable"]) | undefined;
|
|
3906
|
+
/** The accessible name of the clear button, which shows only an icon. */
|
|
3907
|
+
"clear-label"?: (HelixHeadlessCodeInput["clearLabel"]) | undefined;
|
|
3908
|
+
/** The accessible name of the clear button, which shows only an icon. */
|
|
3909
|
+
clearLabel?: (HelixHeadlessCodeInput["clearLabel"]) | undefined;
|
|
3910
|
+
/** How many characters wide the box is, when the layout does not set its
|
|
3911
|
+
width.
|
|
3912
|
+
|
|
3913
|
+
Optional and absent by default, which is the reflected-property rule: a
|
|
3914
|
+
`<textarea>` left alone is 20 columns wide and a styled one is whatever its
|
|
3915
|
+
box says, so writing a number here is a departure rather than the resting
|
|
3916
|
+
state. `wrap="hard"` needs it, the two being the pair that decides where
|
|
3917
|
+
the browser inserts the line breaks it submits. */
|
|
3918
|
+
cols?: (HelixHeadlessCodeInput["cols"]) | undefined;
|
|
3919
|
+
/** The name of a second form entry that submits the direction of the text.
|
|
3920
|
+
|
|
3921
|
+
**Submitted through `setFormValue`, because the inner control's own
|
|
3922
|
+
`dirname` cannot reach the form.** This host is form-associated and reports
|
|
3923
|
+
its value itself, so the `<textarea>` inside the shadow root participates in
|
|
3924
|
+
no form at all and forwarding the attribute would have looked right and
|
|
3925
|
+
submitted nothing. `ElementInternals` takes a `FormData`, which is how one
|
|
3926
|
+
element sends two entries, and that is what this does. */
|
|
3927
|
+
dirname?: (HelixHeadlessCodeInput["dirName"]) | undefined;
|
|
3928
|
+
/** The name of a second form entry that submits the direction of the text.
|
|
3929
|
+
|
|
3930
|
+
**Submitted through `setFormValue`, because the inner control's own
|
|
3931
|
+
`dirname` cannot reach the form.** This host is form-associated and reports
|
|
3932
|
+
its value itself, so the `<textarea>` inside the shadow root participates in
|
|
3933
|
+
no form at all and forwarding the attribute would have looked right and
|
|
3934
|
+
submitted nothing. `ElementInternals` takes a `FormData`, which is how one
|
|
3935
|
+
element sends two entries, and that is what this does. */
|
|
3936
|
+
dirName?: (HelixHeadlessCodeInput["dirName"]) | undefined;
|
|
3937
|
+
/** The most characters the value can have. */
|
|
3938
|
+
maxlength?: (HelixHeadlessCodeInput["maxLength"] | `${number}`) | undefined;
|
|
3939
|
+
/** The most characters the value can have. */
|
|
3940
|
+
maxLength?: (HelixHeadlessCodeInput["maxLength"]) | undefined;
|
|
3941
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
3942
|
+
it grows with all of its text. */
|
|
3943
|
+
"max-rows"?: (HelixHeadlessCodeInput["maxRows"] | `${number}`) | undefined;
|
|
3944
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
3945
|
+
it grows with all of its text. */
|
|
3946
|
+
maxRows?: (HelixHeadlessCodeInput["maxRows"]) | undefined;
|
|
3947
|
+
/** The fewest characters the value can have.
|
|
3948
|
+
|
|
3949
|
+
Forwarded to the real `<textarea>` rather than checked here, which is what
|
|
3950
|
+
makes the message the browser's and therefore the reader's own language.
|
|
3951
|
+
No `pattern`: the platform does not give a textarea one, and inventing it
|
|
3952
|
+
would be this library guessing where the point is to stop guessing. */
|
|
3953
|
+
minlength?: (HelixHeadlessCodeInput["minLength"] | `${number}`) | undefined;
|
|
3954
|
+
/** The fewest characters the value can have.
|
|
3955
|
+
|
|
3956
|
+
Forwarded to the real `<textarea>` rather than checked here, which is what
|
|
3957
|
+
makes the message the browser's and therefore the reader's own language.
|
|
3958
|
+
No `pattern`: the platform does not give a textarea one, and inventing it
|
|
3959
|
+
would be this library guessing where the point is to stop guessing. */
|
|
3960
|
+
minLength?: (HelixHeadlessCodeInput["minLength"]) | undefined;
|
|
3961
|
+
/** Text shown while the field is empty.
|
|
3962
|
+
|
|
3963
|
+
Not a label: it goes when typing starts. */
|
|
3964
|
+
placeholder?: (HelixHeadlessCodeInput["placeholder"]) | undefined;
|
|
3965
|
+
/** Blocks typing in the field. The value is still submitted with the form. */
|
|
3966
|
+
readonly?: (HelixHeadlessCodeInput["readOnly"]) | undefined;
|
|
3967
|
+
/** Blocks typing in the field. The value is still submitted with the form. */
|
|
3968
|
+
readOnly?: (HelixHeadlessCodeInput["readOnly"]) | undefined;
|
|
3969
|
+
/** How many lines the box is before anything is typed. */
|
|
3970
|
+
rows?: (HelixHeadlessCodeInput["rows"]) | undefined;
|
|
3971
|
+
/** Whether the control is disabled and cannot be used.
|
|
3972
|
+
|
|
3973
|
+
Reflected, because the styled tier selects on it, and mirrored to
|
|
3974
|
+
`aria-disabled` rather than removing the element from the accessibility
|
|
3975
|
+
tree, so a screen reader can still announce that the control exists.
|
|
3976
|
+
|
|
3977
|
+
The mirror itself is in `willUpdate` below, here rather than in each
|
|
3978
|
+
control, because here is where `disabled` is. */
|
|
3979
|
+
disabled?: (HelixHeadlessCodeInput["disabled"]) | undefined;
|
|
3980
|
+
/** The name the control's value is submitted under.
|
|
3981
|
+
|
|
3982
|
+
**Reflected, and it is the exception to "reflect only what CSS selects
|
|
3983
|
+
on".** The platform builds a form's entry list from the `name` *content
|
|
3984
|
+
attribute*, not from the property, so a control named through the property
|
|
3985
|
+
submitted under no name at all and was silently dropped. Measured: two
|
|
3986
|
+
inputs in one form, one named by attribute and one by property, and the
|
|
3987
|
+
form carried a single entry.
|
|
3988
|
+
|
|
3989
|
+
Safe for a React consumer, which is what the rule is protecting: React
|
|
3990
|
+
renders a custom element's props as attributes on the server, so the name
|
|
3991
|
+
is already in the markup being hydrated and reflecting it writes what is
|
|
3992
|
+
there. It is only a change to the markup when a consumer assigns it
|
|
3993
|
+
imperatively later, and nothing is hydrating by then.
|
|
3994
|
+
|
|
3995
|
+
Here rather than on each control. */
|
|
3996
|
+
name?: (HelixHeadlessCodeInput["name"]) | undefined;
|
|
3997
|
+
/** Turns the code into highlighted markup for its `language`, for this field
|
|
3998
|
+
alone. Absent, the field draws with the highlighter `registerHighlighter`
|
|
3999
|
+
gave the page, and plain where there is none. The markup is drawn as
|
|
4000
|
+
given, so it escapes the code, as every highlighter does. */
|
|
4001
|
+
highlight?: (HelixHeadlessCodeInput["highlight"]) | undefined;
|
|
4002
|
+
/** The engine this field listens through, in place of the one
|
|
4003
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
4004
|
+
speechEngine?: (HelixHeadlessCodeInput["speechEngine"]) | undefined;
|
|
4005
|
+
/** The direction of the selection, as a native textarea reports it.
|
|
4006
|
+
|
|
4007
|
+
**The whole reason this renders a real `<textarea>` is the caret**, and the
|
|
4008
|
+
control is inside this shadow root, so `querySelector` does not find it and
|
|
4009
|
+
a consumer has no other way to ask where the selection is, let alone move
|
|
4010
|
+
it. A field that cannot be scripted at the caret cannot do an
|
|
4011
|
+
insert-at-cursor toolbar, which is the first thing anybody builds on a
|
|
4012
|
+
textarea.
|
|
4013
|
+
|
|
4014
|
+
Written through to the control, and answering zero before there is one,
|
|
4015
|
+
which is where an empty field's caret would be anyway. */
|
|
4016
|
+
selectionDirection?: (HelixHeadlessCodeInput["selectionDirection"]) | undefined;
|
|
4017
|
+
/** Where the selection ends, as an offset into the value. */
|
|
4018
|
+
selectionEnd?: (HelixHeadlessCodeInput["selectionEnd"]) | undefined;
|
|
4019
|
+
/** Where the selection starts, as an offset into the value. */
|
|
4020
|
+
selectionStart?: (HelixHeadlessCodeInput["selectionStart"]) | undefined;
|
|
4021
|
+
/** Your own rule for the value, run on every change once the browser finds
|
|
4022
|
+
nothing wrong. Return a message, or a list of them, to mark the field
|
|
4023
|
+
invalid, and `true`, `null`, or nothing to accept the value. */
|
|
4024
|
+
validate?: (HelixHeadlessCodeInput["validate"]) | undefined;
|
|
4025
|
+
};
|
|
4026
|
+
|
|
4027
|
+
export type HelixHeadlessCodeInputVueEvents = {
|
|
4028
|
+
/** Sent from the textarea when the user finishes an edit. */
|
|
4029
|
+
change: HelixHeadlessCodeInputElementEvent;
|
|
4030
|
+
/** Fired as the text changes, and cancelable. */
|
|
4031
|
+
"helix-before-change": HelixHeadlessCodeInputHelixBeforeChangeElementEvent;
|
|
4032
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the field from listening. */
|
|
4033
|
+
"helix-before-listen": HelixHeadlessCodeInputHelixBeforeListenElementEvent;
|
|
4034
|
+
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
4035
|
+
"helix-clear": HelixHeadlessCodeInputHelixClearElementEvent;
|
|
4036
|
+
/** Dictation settled on a phrase and put it in the value, after the field's own `input`. */
|
|
4037
|
+
"helix-listen": HelixHeadlessCodeInputHelixListenElementEvent;
|
|
4038
|
+
/** Fired after the value changes. */
|
|
4039
|
+
input: HelixHeadlessCodeInputElementEvent;
|
|
4040
|
+
};
|
|
4041
|
+
|
|
3489
4042
|
export type HelixHeadlessCodeVueProps = {};
|
|
3490
4043
|
|
|
3491
4044
|
export type HelixHeadlessCodeVueEvents = {};
|
|
@@ -4530,6 +5083,19 @@ export type HelixHeadlessCommandToggleElementEvent =
|
|
|
4530
5083
|
HelixHeadlessCommandElementEvent<ToggleEvent>;
|
|
4531
5084
|
|
|
4532
5085
|
export type HelixHeadlessCommandVueProps = {
|
|
5086
|
+
/** Lists the controls on screen below the palette's own commands, once the
|
|
5087
|
+
reader types: every labeled Helix button, field, tab, switch and the
|
|
5088
|
+
rest, by its name, with its shortcut. Choosing one closes the palette and
|
|
5089
|
+
presses the control, or moves focus into a field.
|
|
5090
|
+
|
|
5091
|
+
A control that is disabled, inert, hidden or under `unlisted` is left out,
|
|
5092
|
+
and so is anything inside the palette. Off by default, so a palette used
|
|
5093
|
+
as a search box lists only what it holds. */
|
|
5094
|
+
controls?: (HelixHeadlessCommand["controls"]) | undefined;
|
|
5095
|
+
/** The heading over the controls on screen. */
|
|
5096
|
+
"controls-label"?: (HelixHeadlessCommand["controlsLabel"]) | undefined;
|
|
5097
|
+
/** The heading over the controls on screen. */
|
|
5098
|
+
controlsLabel?: (HelixHeadlessCommand["controlsLabel"]) | undefined;
|
|
4533
5099
|
/** The text shown when the filter matches no commands. */
|
|
4534
5100
|
"empty-text"?: (HelixHeadlessCommand["emptyText"]) | undefined;
|
|
4535
5101
|
/** The text shown when the filter matches no commands. */
|
|
@@ -4564,6 +5130,12 @@ Empty turns it off, for a consumer who opens the palette from a button or
|
|
|
4564
5130
|
from their own shortcut handler. There is no list of defaults to fight
|
|
4565
5131
|
with: one key, said once. */
|
|
4566
5132
|
hotkey?: (HelixHeadlessCommand["hotkey"]) | undefined;
|
|
5133
|
+
/** What the hotkey does, as a list of the page's shortcuts says it, with
|
|
5134
|
+
`{label}` for the palette's `label`. */
|
|
5135
|
+
"hotkey-label"?: (HelixHeadlessCommand["hotkeyLabel"]) | undefined;
|
|
5136
|
+
/** What the hotkey does, as a list of the page's shortcuts says it, with
|
|
5137
|
+
`{label}` for the palette's `label`. */
|
|
5138
|
+
hotkeyLabel?: (HelixHeadlessCommand["hotkeyLabel"]) | undefined;
|
|
4567
5139
|
/** Draws the palette in the page, where it stands, with no dialog: a search
|
|
4568
5140
|
over a list of commands, as React Aria's Autocomplete is drawn.
|
|
4569
5141
|
|
|
@@ -4629,6 +5201,9 @@ how many are left, written in the locale, and each language writes the
|
|
|
4629
5201
|
forms it has: `{count, plural, one {# polecenie} few {# polecenia} many
|
|
4630
5202
|
{# poleceń} other {# polecenia}}`. */
|
|
4631
5203
|
resultsLabel?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
|
|
5204
|
+
/** Draws a dictation button in the search field, which listens through the
|
|
5205
|
+
page's speech engine and types what it hears, as a field's `voice` does. */
|
|
5206
|
+
voice?: (HelixHeadlessCommand["voice"]) | undefined;
|
|
4632
5207
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
4633
5208
|
"default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
|
|
4634
5209
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -6741,6 +7316,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
6741
7316
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
6742
7317
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
6743
7318
|
readingsLabel?: (HelixHeadlessDonutChart["readingsLabel"]) | undefined;
|
|
7319
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
7320
|
+
turn, its readings from left to right and from the left ear to the
|
|
7321
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
7322
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
7323
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
7324
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
7325
|
+
press, and the sound is made only then. */
|
|
7326
|
+
sonify?: (HelixHeadlessDonutChart["sonify"]) | undefined;
|
|
7327
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
7328
|
+
"sonify-duration"?: (HelixHeadlessDonutChart["sonifyDuration"] | `${number}`) | undefined;
|
|
7329
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
7330
|
+
sonifyDuration?: (HelixHeadlessDonutChart["sonifyDuration"]) | undefined;
|
|
7331
|
+
/** The Listen button's words. */
|
|
7332
|
+
"sonify-label"?: (HelixHeadlessDonutChart["sonifyLabel"]) | undefined;
|
|
7333
|
+
/** The Listen button's words. */
|
|
7334
|
+
sonifyLabel?: (HelixHeadlessDonutChart["sonifyLabel"]) | undefined;
|
|
7335
|
+
/** The Listen button's words while the chart plays. */
|
|
7336
|
+
"sonify-stop-label"?: (HelixHeadlessDonutChart["sonifyStopLabel"]) | undefined;
|
|
7337
|
+
/** The Listen button's words while the chart plays. */
|
|
7338
|
+
sonifyStopLabel?: (HelixHeadlessDonutChart["sonifyStopLabel"]) | undefined;
|
|
7339
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
7340
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
7341
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
7342
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
7343
|
+
summary?: (HelixHeadlessDonutChart["summary"]) | undefined;
|
|
6744
7344
|
/** The readings as data, in the shape of a table, where the page has no
|
|
6745
7345
|
table to point `for` at. `for` wins where both are set.
|
|
6746
7346
|
|
|
@@ -7417,6 +8017,9 @@ export type HelixHeadlessFilterInputHelixBeforeChangeElementEvent =
|
|
|
7417
8017
|
/** `helix-before-close` event type */
|
|
7418
8018
|
export type HelixHeadlessFilterInputHelixBeforeCloseElementEvent =
|
|
7419
8019
|
HelixHeadlessFilterInputElementEvent<HelixBeforeCloseEvent>;
|
|
8020
|
+
/** `helix-before-listen` event type */
|
|
8021
|
+
export type HelixHeadlessFilterInputHelixBeforeListenElementEvent =
|
|
8022
|
+
HelixHeadlessFilterInputElementEvent<HelixBeforeListenEvent>;
|
|
7420
8023
|
/** `helix-before-open` event type */
|
|
7421
8024
|
export type HelixHeadlessFilterInputHelixBeforeOpenElementEvent =
|
|
7422
8025
|
HelixHeadlessFilterInputElementEvent<HelixBeforeOpenEvent>;
|
|
@@ -7426,6 +8029,9 @@ export type HelixHeadlessFilterInputHelixDismissElementEvent =
|
|
|
7426
8029
|
/** `helix-facet` event type */
|
|
7427
8030
|
export type HelixHeadlessFilterInputHelixFacetElementEvent =
|
|
7428
8031
|
HelixHeadlessFilterInputElementEvent<HelixFacetEvent>;
|
|
8032
|
+
/** `helix-listen` event type */
|
|
8033
|
+
export type HelixHeadlessFilterInputHelixListenElementEvent =
|
|
8034
|
+
HelixHeadlessFilterInputElementEvent<HelixListenEvent>;
|
|
7429
8035
|
/** `helix-select` event type */
|
|
7430
8036
|
export type HelixHeadlessFilterInputHelixSelectElementEvent =
|
|
7431
8037
|
HelixHeadlessFilterInputElementEvent<HelixSelectEvent>;
|
|
@@ -7520,6 +8126,27 @@ how many, written in the locale, and each language writes the forms it
|
|
|
7520
8126
|
has: `{count, plural, one {# sugestia} few {# sugestie} many {# sugestii}
|
|
7521
8127
|
other {# sugestii}}`. */
|
|
7522
8128
|
suggestionsLabel?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
|
|
8129
|
+
/** What a screen reader hears as listening starts. */
|
|
8130
|
+
"listening-label"?: (HelixHeadlessFilterInput["listeningLabel"]) | undefined;
|
|
8131
|
+
/** What a screen reader hears as listening starts. */
|
|
8132
|
+
listeningLabel?: (HelixHeadlessFilterInput["listeningLabel"]) | undefined;
|
|
8133
|
+
/** What a screen reader hears as listening stops. */
|
|
8134
|
+
"stopped-listening-label"?: (HelixHeadlessFilterInput["stoppedListeningLabel"]) | undefined;
|
|
8135
|
+
/** What a screen reader hears as listening stops. */
|
|
8136
|
+
stoppedListeningLabel?: (HelixHeadlessFilterInput["stoppedListeningLabel"]) | undefined;
|
|
8137
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
8138
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
8139
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
8140
|
+
`email` or `number` draws no button. */
|
|
8141
|
+
voice?: (HelixHeadlessFilterInput["voice"]) | undefined;
|
|
8142
|
+
/** The dictation button's name while it is not listening. */
|
|
8143
|
+
"voice-label"?: (HelixHeadlessFilterInput["voiceLabel"]) | undefined;
|
|
8144
|
+
/** The dictation button's name while it is not listening. */
|
|
8145
|
+
voiceLabel?: (HelixHeadlessFilterInput["voiceLabel"]) | undefined;
|
|
8146
|
+
/** The dictation button's name while it listens. */
|
|
8147
|
+
"voice-stop-label"?: (HelixHeadlessFilterInput["voiceStopLabel"]) | undefined;
|
|
8148
|
+
/** The dictation button's name while it listens. */
|
|
8149
|
+
voiceStopLabel?: (HelixHeadlessFilterInput["voiceStopLabel"]) | undefined;
|
|
7523
8150
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
7524
8151
|
"default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
|
|
7525
8152
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -7654,6 +8281,9 @@ returns the suggestions or a promise of them. Each is a string, or a
|
|
|
7654
8281
|
the panel, beside any you slot. A property only, there being no way to
|
|
7655
8282
|
write a function in markup. See the class description. */
|
|
7656
8283
|
source?: (HelixHeadlessFilterInput["source"]) | undefined;
|
|
8284
|
+
/** The engine this field listens through, in place of the one
|
|
8285
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
8286
|
+
speechEngine?: (HelixHeadlessFilterInput["speechEngine"]) | undefined;
|
|
7657
8287
|
};
|
|
7658
8288
|
|
|
7659
8289
|
export type HelixHeadlessFilterInputVueEvents = {
|
|
@@ -7663,12 +8293,16 @@ export type HelixHeadlessFilterInputVueEvents = {
|
|
|
7663
8293
|
"helix-before-change": HelixHeadlessFilterInputHelixBeforeChangeElementEvent;
|
|
7664
8294
|
/** Fired before the suggestions close. Cancelable: call `preventDefault()` to keep them open. */
|
|
7665
8295
|
"helix-before-close": HelixHeadlessFilterInputHelixBeforeCloseElementEvent;
|
|
8296
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the field from listening. */
|
|
8297
|
+
"helix-before-listen": HelixHeadlessFilterInputHelixBeforeListenElementEvent;
|
|
7666
8298
|
/** Fired before the suggestions open. Cancelable: call `preventDefault()` to keep them closed. */
|
|
7667
8299
|
"helix-before-open": HelixHeadlessFilterInputHelixBeforeOpenElementEvent;
|
|
7668
8300
|
/** Fired when the user removes a token with its remove button or with Backspace in an empty field. A `FilterChip` that names a declared field sends `helix-facet` instead. Cancelable: call `preventDefault()` to keep the token. */
|
|
7669
8301
|
"helix-dismiss": HelixHeadlessFilterInputHelixDismissElementEvent;
|
|
7670
8302
|
/** Fired when a filter changes, whether it was typed, picked, or removed. Cancelable: call `preventDefault()` to leave the text and the chip as they were. */
|
|
7671
8303
|
"helix-facet": HelixHeadlessFilterInputHelixFacetElementEvent;
|
|
8304
|
+
/** Dictation settled on a phrase and put it in the field, after the field's own `input`. */
|
|
8305
|
+
"helix-listen": HelixHeadlessFilterInputHelixListenElementEvent;
|
|
7672
8306
|
/** Fired by an option in `suggestions` when it is chosen, and bubbles out of the field. Cancelable: call `preventDefault()` to stop other listeners acting on it. The field takes no action on an option you slotted, and you decide what it does. A suggestion from `source` is written over the term at the caret unless you cancel it. */
|
|
7673
8307
|
"helix-select": HelixHeadlessFilterInputHelixSelectElementEvent;
|
|
7674
8308
|
/** Fired when the text changes. */
|
|
@@ -8440,6 +9074,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
8440
9074
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
8441
9075
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
8442
9076
|
readingsLabel?: (HelixHeadlessHeatmap["readingsLabel"]) | undefined;
|
|
9077
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
9078
|
+
turn, its readings from left to right and from the left ear to the
|
|
9079
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
9080
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
9081
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
9082
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
9083
|
+
press, and the sound is made only then. */
|
|
9084
|
+
sonify?: (HelixHeadlessHeatmap["sonify"]) | undefined;
|
|
9085
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
9086
|
+
"sonify-duration"?: (HelixHeadlessHeatmap["sonifyDuration"] | `${number}`) | undefined;
|
|
9087
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
9088
|
+
sonifyDuration?: (HelixHeadlessHeatmap["sonifyDuration"]) | undefined;
|
|
9089
|
+
/** The Listen button's words. */
|
|
9090
|
+
"sonify-label"?: (HelixHeadlessHeatmap["sonifyLabel"]) | undefined;
|
|
9091
|
+
/** The Listen button's words. */
|
|
9092
|
+
sonifyLabel?: (HelixHeadlessHeatmap["sonifyLabel"]) | undefined;
|
|
9093
|
+
/** The Listen button's words while the chart plays. */
|
|
9094
|
+
"sonify-stop-label"?: (HelixHeadlessHeatmap["sonifyStopLabel"]) | undefined;
|
|
9095
|
+
/** The Listen button's words while the chart plays. */
|
|
9096
|
+
sonifyStopLabel?: (HelixHeadlessHeatmap["sonifyStopLabel"]) | undefined;
|
|
9097
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
9098
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
9099
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
9100
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
9101
|
+
summary?: (HelixHeadlessHeatmap["summary"]) | undefined;
|
|
8443
9102
|
/** The readings as data, in the shape of a table, where the page has no
|
|
8444
9103
|
table to point `for` at. `for` wins where both are set.
|
|
8445
9104
|
|
|
@@ -8843,9 +9502,15 @@ export type HelixHeadlessInputElementEvent<E = Event> = TypedEvent<
|
|
|
8843
9502
|
/** `helix-before-change` event type */
|
|
8844
9503
|
export type HelixHeadlessInputHelixBeforeChangeElementEvent =
|
|
8845
9504
|
HelixHeadlessInputElementEvent<HelixBeforeChangeEvent>;
|
|
9505
|
+
/** `helix-before-listen` event type */
|
|
9506
|
+
export type HelixHeadlessInputHelixBeforeListenElementEvent =
|
|
9507
|
+
HelixHeadlessInputElementEvent<HelixBeforeListenEvent>;
|
|
8846
9508
|
/** `helix-clear` event type */
|
|
8847
9509
|
export type HelixHeadlessInputHelixClearElementEvent =
|
|
8848
9510
|
HelixHeadlessInputElementEvent<HelixClearEvent>;
|
|
9511
|
+
/** `helix-listen` event type */
|
|
9512
|
+
export type HelixHeadlessInputHelixListenElementEvent =
|
|
9513
|
+
HelixHeadlessInputElementEvent<HelixListenEvent>;
|
|
8849
9514
|
|
|
8850
9515
|
export type HelixHeadlessInputVueProps = {
|
|
8851
9516
|
/** Whether a phone capitalizes as the reader types: `off`, `sentences`,
|
|
@@ -8958,6 +9623,27 @@ Nothing reads it from the attribute either. The real `<input>` inside takes
|
|
|
8958
9623
|
it as a property binding, which is what makes the keyboard and the
|
|
8959
9624
|
validation follow. */
|
|
8960
9625
|
type?: (HelixHeadlessInput["type"]) | undefined;
|
|
9626
|
+
/** What a screen reader hears as listening starts. */
|
|
9627
|
+
"listening-label"?: (HelixHeadlessInput["listeningLabel"]) | undefined;
|
|
9628
|
+
/** What a screen reader hears as listening starts. */
|
|
9629
|
+
listeningLabel?: (HelixHeadlessInput["listeningLabel"]) | undefined;
|
|
9630
|
+
/** What a screen reader hears as listening stops. */
|
|
9631
|
+
"stopped-listening-label"?: (HelixHeadlessInput["stoppedListeningLabel"]) | undefined;
|
|
9632
|
+
/** What a screen reader hears as listening stops. */
|
|
9633
|
+
stoppedListeningLabel?: (HelixHeadlessInput["stoppedListeningLabel"]) | undefined;
|
|
9634
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
9635
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
9636
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
9637
|
+
`email` or `number` draws no button. */
|
|
9638
|
+
voice?: (HelixHeadlessInput["voice"]) | undefined;
|
|
9639
|
+
/** The dictation button's name while it is not listening. */
|
|
9640
|
+
"voice-label"?: (HelixHeadlessInput["voiceLabel"]) | undefined;
|
|
9641
|
+
/** The dictation button's name while it is not listening. */
|
|
9642
|
+
voiceLabel?: (HelixHeadlessInput["voiceLabel"]) | undefined;
|
|
9643
|
+
/** The dictation button's name while it listens. */
|
|
9644
|
+
"voice-stop-label"?: (HelixHeadlessInput["voiceStopLabel"]) | undefined;
|
|
9645
|
+
/** The dictation button's name while it listens. */
|
|
9646
|
+
voiceStopLabel?: (HelixHeadlessInput["voiceStopLabel"]) | undefined;
|
|
8961
9647
|
/** The value the control starts with. A form reset returns it to this value,
|
|
8962
9648
|
and to the `value` attribute where this one is not written, as a native
|
|
8963
9649
|
control resets to the `value` it declares. */
|
|
@@ -9066,6 +9752,9 @@ be anyway. */
|
|
|
9066
9752
|
nothing wrong. Return a message, or a list of them, to mark the field
|
|
9067
9753
|
invalid, and `true`, `null`, or nothing to accept the value. */
|
|
9068
9754
|
validate?: (HelixHeadlessInput["validate"]) | undefined;
|
|
9755
|
+
/** The engine this field listens through, in place of the one
|
|
9756
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
9757
|
+
speechEngine?: (HelixHeadlessInput["speechEngine"]) | undefined;
|
|
9069
9758
|
};
|
|
9070
9759
|
|
|
9071
9760
|
export type HelixHeadlessInputVueEvents = {
|
|
@@ -9073,8 +9762,12 @@ export type HelixHeadlessInputVueEvents = {
|
|
|
9073
9762
|
change: HelixHeadlessInputElementEvent;
|
|
9074
9763
|
/** The text is about to change. Cancelable: cancel it to keep the current text. */
|
|
9075
9764
|
"helix-before-change": HelixHeadlessInputHelixBeforeChangeElementEvent;
|
|
9765
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the field from listening. */
|
|
9766
|
+
"helix-before-listen": HelixHeadlessInputHelixBeforeListenElementEvent;
|
|
9076
9767
|
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
9077
9768
|
"helix-clear": HelixHeadlessInputHelixClearElementEvent;
|
|
9769
|
+
/** Dictation settled on a phrase and put it in the value, after the field's own `input`. */
|
|
9770
|
+
"helix-listen": HelixHeadlessInputHelixListenElementEvent;
|
|
9078
9771
|
/** Fired as the value changes. */
|
|
9079
9772
|
input: HelixHeadlessInputElementEvent;
|
|
9080
9773
|
};
|
|
@@ -9637,6 +10330,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
9637
10330
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
9638
10331
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
9639
10332
|
readingsLabel?: (HelixHeadlessLineChart["readingsLabel"]) | undefined;
|
|
10333
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
10334
|
+
turn, its readings from left to right and from the left ear to the
|
|
10335
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
10336
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
10337
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
10338
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
10339
|
+
press, and the sound is made only then. */
|
|
10340
|
+
sonify?: (HelixHeadlessLineChart["sonify"]) | undefined;
|
|
10341
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
10342
|
+
"sonify-duration"?: (HelixHeadlessLineChart["sonifyDuration"] | `${number}`) | undefined;
|
|
10343
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
10344
|
+
sonifyDuration?: (HelixHeadlessLineChart["sonifyDuration"]) | undefined;
|
|
10345
|
+
/** The Listen button's words. */
|
|
10346
|
+
"sonify-label"?: (HelixHeadlessLineChart["sonifyLabel"]) | undefined;
|
|
10347
|
+
/** The Listen button's words. */
|
|
10348
|
+
sonifyLabel?: (HelixHeadlessLineChart["sonifyLabel"]) | undefined;
|
|
10349
|
+
/** The Listen button's words while the chart plays. */
|
|
10350
|
+
"sonify-stop-label"?: (HelixHeadlessLineChart["sonifyStopLabel"]) | undefined;
|
|
10351
|
+
/** The Listen button's words while the chart plays. */
|
|
10352
|
+
sonifyStopLabel?: (HelixHeadlessLineChart["sonifyStopLabel"]) | undefined;
|
|
10353
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
10354
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
10355
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
10356
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
10357
|
+
summary?: (HelixHeadlessLineChart["summary"]) | undefined;
|
|
9640
10358
|
/** The readings as data, in the shape of a table, where the page has no
|
|
9641
10359
|
table to point `for` at. `for` wins where both are set.
|
|
9642
10360
|
|
|
@@ -9911,12 +10629,18 @@ export type HelixHeadlessListboxElementEvent<E = Event> = TypedEvent<
|
|
|
9911
10629
|
/** `helix-before-change` event type */
|
|
9912
10630
|
export type HelixHeadlessListboxHelixBeforeChangeElementEvent =
|
|
9913
10631
|
HelixHeadlessListboxElementEvent<HelixBeforeChangeEvent>;
|
|
10632
|
+
/** `helix-before-listen` event type */
|
|
10633
|
+
export type HelixHeadlessListboxHelixBeforeListenElementEvent =
|
|
10634
|
+
HelixHeadlessListboxElementEvent<HelixBeforeListenEvent>;
|
|
9914
10635
|
/** `helix-before-reorder` event type */
|
|
9915
10636
|
export type HelixHeadlessListboxHelixBeforeReorderElementEvent =
|
|
9916
10637
|
HelixHeadlessListboxElementEvent<HelixBeforeReorderEvent>;
|
|
9917
10638
|
/** `helix-filter` event type */
|
|
9918
10639
|
export type HelixHeadlessListboxHelixFilterElementEvent =
|
|
9919
10640
|
HelixHeadlessListboxElementEvent<HelixFilterEvent>;
|
|
10641
|
+
/** `helix-listen` event type */
|
|
10642
|
+
export type HelixHeadlessListboxHelixListenElementEvent =
|
|
10643
|
+
HelixHeadlessListboxElementEvent<HelixListenEvent>;
|
|
9920
10644
|
/** `helix-load-more` event type */
|
|
9921
10645
|
export type HelixHeadlessListboxHelixLoadMoreElementEvent =
|
|
9922
10646
|
HelixHeadlessListboxElementEvent<HelixLoadMoreEvent>;
|
|
@@ -10074,6 +10798,27 @@ locale. */
|
|
|
10074
10798
|
Absent, or empty, is this sentence, or the words registered for the page's
|
|
10075
10799
|
locale. */
|
|
10076
10800
|
valueMissingMessage?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
|
|
10801
|
+
/** What a screen reader hears as listening starts. */
|
|
10802
|
+
"listening-label"?: (HelixHeadlessListbox["listeningLabel"]) | undefined;
|
|
10803
|
+
/** What a screen reader hears as listening starts. */
|
|
10804
|
+
listeningLabel?: (HelixHeadlessListbox["listeningLabel"]) | undefined;
|
|
10805
|
+
/** What a screen reader hears as listening stops. */
|
|
10806
|
+
"stopped-listening-label"?: (HelixHeadlessListbox["stoppedListeningLabel"]) | undefined;
|
|
10807
|
+
/** What a screen reader hears as listening stops. */
|
|
10808
|
+
stoppedListeningLabel?: (HelixHeadlessListbox["stoppedListeningLabel"]) | undefined;
|
|
10809
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
10810
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
10811
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
10812
|
+
`email` or `number` draws no button. */
|
|
10813
|
+
voice?: (HelixHeadlessListbox["voice"]) | undefined;
|
|
10814
|
+
/** The dictation button's name while it is not listening. */
|
|
10815
|
+
"voice-label"?: (HelixHeadlessListbox["voiceLabel"]) | undefined;
|
|
10816
|
+
/** The dictation button's name while it is not listening. */
|
|
10817
|
+
voiceLabel?: (HelixHeadlessListbox["voiceLabel"]) | undefined;
|
|
10818
|
+
/** The dictation button's name while it listens. */
|
|
10819
|
+
"voice-stop-label"?: (HelixHeadlessListbox["voiceStopLabel"]) | undefined;
|
|
10820
|
+
/** The dictation button's name while it listens. */
|
|
10821
|
+
voiceStopLabel?: (HelixHeadlessListbox["voiceStopLabel"]) | undefined;
|
|
10077
10822
|
/** Whether the rows are still loading.
|
|
10078
10823
|
|
|
10079
10824
|
Reflected, because a stylesheet needs it: the rows that are already there
|
|
@@ -10187,6 +10932,9 @@ With `multiple` it is the first chosen one, which is also what the platform
|
|
|
10187
10932
|
answers: a single index cannot describe a set, and `value` is the property
|
|
10188
10933
|
that can. */
|
|
10189
10934
|
selectedIndex?: (HelixHeadlessListbox["selectedIndex"]) | undefined;
|
|
10935
|
+
/** The engine this field listens through, in place of the one
|
|
10936
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
10937
|
+
speechEngine?: (HelixHeadlessListbox["speechEngine"]) | undefined;
|
|
10190
10938
|
};
|
|
10191
10939
|
|
|
10192
10940
|
export type HelixHeadlessListboxVueEvents = {
|
|
@@ -10194,10 +10942,14 @@ export type HelixHeadlessListboxVueEvents = {
|
|
|
10194
10942
|
change: HelixHeadlessListboxElementEvent;
|
|
10195
10943
|
/** Fired when the value is about to change, and cancelable. */
|
|
10196
10944
|
"helix-before-change": HelixHeadlessListboxHelixBeforeChangeElementEvent;
|
|
10945
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the field from listening. */
|
|
10946
|
+
"helix-before-listen": HelixHeadlessListboxHelixBeforeListenElementEvent;
|
|
10197
10947
|
/** Fired when an option is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/listbox/reorder` imported, with every value in the new order. Cancelable: cancel it to keep the option where it is. */
|
|
10198
10948
|
"helix-before-reorder": HelixHeadlessListboxHelixBeforeReorderElementEvent;
|
|
10199
10949
|
/** Fired before the list is filtered, and cancelable. */
|
|
10200
10950
|
"helix-filter": HelixHeadlessListboxHelixFilterElementEvent;
|
|
10951
|
+
/** Dictation settled on a phrase and put it in the search field, after the field's own `input`. */
|
|
10952
|
+
"helix-listen": HelixHeadlessListboxHelixListenElementEvent;
|
|
10201
10953
|
/** Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page of options and set `loading` while you fetch it. */
|
|
10202
10954
|
"helix-load-more": HelixHeadlessListboxHelixLoadMoreElementEvent;
|
|
10203
10955
|
/** Fired after `helix-before-reorder` when nobody canceled it. Move your options, or your `items`, to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
|
|
@@ -11247,6 +11999,39 @@ export type HelixHeadlessMapTerrainVueEvents = {
|
|
|
11247
11999
|
"helix-map-part-change": HelixHeadlessMapTerrainHelixMapPartChangeElementEvent;
|
|
11248
12000
|
};
|
|
11249
12001
|
|
|
12002
|
+
export type HelixHeadlessMarkdownVueProps = {
|
|
12003
|
+
/** The heading of a `> [!CAUTION]` alert. */
|
|
12004
|
+
"caution-heading"?: (HelixHeadlessMarkdown["cautionHeading"]) | undefined;
|
|
12005
|
+
/** The heading of a `> [!CAUTION]` alert. */
|
|
12006
|
+
cautionHeading?: (HelixHeadlessMarkdown["cautionHeading"]) | undefined;
|
|
12007
|
+
/** The heading of a `> [!IMPORTANT]` alert. */
|
|
12008
|
+
"important-heading"?: (HelixHeadlessMarkdown["importantHeading"]) | undefined;
|
|
12009
|
+
/** The heading of a `> [!IMPORTANT]` alert. */
|
|
12010
|
+
importantHeading?: (HelixHeadlessMarkdown["importantHeading"]) | undefined;
|
|
12011
|
+
/** The heading of a `> [!NOTE]` alert. */
|
|
12012
|
+
"note-heading"?: (HelixHeadlessMarkdown["noteHeading"]) | undefined;
|
|
12013
|
+
/** The heading of a `> [!NOTE]` alert. */
|
|
12014
|
+
noteHeading?: (HelixHeadlessMarkdown["noteHeading"]) | undefined;
|
|
12015
|
+
/** Whether more text is coming. While it is set, the end of `text` is read
|
|
12016
|
+
as a block still arriving, and the element is busy to assistive
|
|
12017
|
+
technology. Clear it when the reply ends, and the last block is read as
|
|
12018
|
+
finished. */
|
|
12019
|
+
streaming?: (HelixHeadlessMarkdown["streaming"]) | undefined;
|
|
12020
|
+
/** The Markdown. Set it to the whole reply so far each time more arrives: a
|
|
12021
|
+
text that starts with the one before is drawn by its new end alone. */
|
|
12022
|
+
text?: (HelixHeadlessMarkdown["text"]) | undefined;
|
|
12023
|
+
/** The heading of a `> [!TIP]` alert. */
|
|
12024
|
+
"tip-heading"?: (HelixHeadlessMarkdown["tipHeading"]) | undefined;
|
|
12025
|
+
/** The heading of a `> [!TIP]` alert. */
|
|
12026
|
+
tipHeading?: (HelixHeadlessMarkdown["tipHeading"]) | undefined;
|
|
12027
|
+
/** The heading of a `> [!WARNING]` alert. */
|
|
12028
|
+
"warning-heading"?: (HelixHeadlessMarkdown["warningHeading"]) | undefined;
|
|
12029
|
+
/** The heading of a `> [!WARNING]` alert. */
|
|
12030
|
+
warningHeading?: (HelixHeadlessMarkdown["warningHeading"]) | undefined;
|
|
12031
|
+
};
|
|
12032
|
+
|
|
12033
|
+
export type HelixHeadlessMarkdownVueEvents = {};
|
|
12034
|
+
|
|
11250
12035
|
/** `HelixHeadlessMegamenu` component event */
|
|
11251
12036
|
export type HelixHeadlessMegamenuElementEvent<E = Event> = TypedEvent<
|
|
11252
12037
|
HelixHeadlessMegamenu,
|
|
@@ -11557,6 +12342,12 @@ which import is missing. */
|
|
|
11557
12342
|
"filter-label"?: (HelixHeadlessMenu["filterLabel"]) | undefined;
|
|
11558
12343
|
/** The filter field's name and placeholder. */
|
|
11559
12344
|
filterLabel?: (HelixHeadlessMenu["filterLabel"]) | undefined;
|
|
12345
|
+
/** With `context`, the id of an area outside the menu whose context menu
|
|
12346
|
+
this is, for one menu that serves a region the page draws elsewhere, such
|
|
12347
|
+
as a table. A right-click, a long press, Shift+F10 or the menu key there
|
|
12348
|
+
opens it, as on the `trigger` slot's area. Names an element in the same
|
|
12349
|
+
tree, the way `Tooltip.for` does. */
|
|
12350
|
+
for?: (HelixHeadlessMenu["for"]) | undefined;
|
|
11560
12351
|
/** Accessible name for the surface.
|
|
11561
12352
|
|
|
11562
12353
|
Empty by default, which names the surface by its trigger, so a menu opened
|
|
@@ -11598,6 +12389,10 @@ the forms it has, as Listbox's `results-label` does. */
|
|
|
11598
12389
|
/** How a submenu opens. `drill` shows it in place of the page showing, with
|
|
11599
12390
|
a way back. `flyout` opens it in a panel of its own beside its row. */
|
|
11600
12391
|
submenus?: (HelixHeadlessMenu["submenus"]) | undefined;
|
|
12392
|
+
/** With `context`, a selector for the things in the area a menu is about,
|
|
12393
|
+
such as `tr` for a table's rows. A request over one opens the menu with it
|
|
12394
|
+
as `contextTarget`, and a request over none of them is left to the page. */
|
|
12395
|
+
targets?: (HelixHeadlessMenu["targets"]) | undefined;
|
|
11601
12396
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
11602
12397
|
"empty-text"?: (HelixHeadlessMenu["emptyText"]) | undefined;
|
|
11603
12398
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
@@ -11636,6 +12431,11 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
|
|
|
11636
12431
|
Absent, a row is kept where its words hold the filter, in any case. A
|
|
11637
12432
|
property only, there being no way to write a function in markup. */
|
|
11638
12433
|
filterMatch?: (HelixHeadlessMenu["filterMatch"]) | undefined;
|
|
12434
|
+
/** The thing the open context menu is about: the element of `targets` the
|
|
12435
|
+
reader asked over, the area where there are no `targets`, or what
|
|
12436
|
+
`showAt` was given. Set before `helix-before-open`, so a listener can
|
|
12437
|
+
change the rows for it, and kept until the menu next opens. */
|
|
12438
|
+
contextTarget?: (HelixHeadlessMenu["contextTarget"]) | undefined;
|
|
11639
12439
|
/** The values of the choice rows that are checked, anywhere in the menu, in
|
|
11640
12440
|
document order.
|
|
11641
12441
|
|
|
@@ -14204,6 +15004,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
14204
15004
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
14205
15005
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
14206
15006
|
readingsLabel?: (HelixHeadlessScatterChart["readingsLabel"]) | undefined;
|
|
15007
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
15008
|
+
turn, its readings from left to right and from the left ear to the
|
|
15009
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
15010
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
15011
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
15012
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
15013
|
+
press, and the sound is made only then. */
|
|
15014
|
+
sonify?: (HelixHeadlessScatterChart["sonify"]) | undefined;
|
|
15015
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
15016
|
+
"sonify-duration"?: (HelixHeadlessScatterChart["sonifyDuration"] | `${number}`) | undefined;
|
|
15017
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
15018
|
+
sonifyDuration?: (HelixHeadlessScatterChart["sonifyDuration"]) | undefined;
|
|
15019
|
+
/** The Listen button's words. */
|
|
15020
|
+
"sonify-label"?: (HelixHeadlessScatterChart["sonifyLabel"]) | undefined;
|
|
15021
|
+
/** The Listen button's words. */
|
|
15022
|
+
sonifyLabel?: (HelixHeadlessScatterChart["sonifyLabel"]) | undefined;
|
|
15023
|
+
/** The Listen button's words while the chart plays. */
|
|
15024
|
+
"sonify-stop-label"?: (HelixHeadlessScatterChart["sonifyStopLabel"]) | undefined;
|
|
15025
|
+
/** The Listen button's words while the chart plays. */
|
|
15026
|
+
sonifyStopLabel?: (HelixHeadlessScatterChart["sonifyStopLabel"]) | undefined;
|
|
15027
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
15028
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
15029
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
15030
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
15031
|
+
summary?: (HelixHeadlessScatterChart["summary"]) | undefined;
|
|
14207
15032
|
/** The readings as data, in the shape of a table, where the page has no
|
|
14208
15033
|
table to point `for` at. `for` wins where both are set.
|
|
14209
15034
|
|
|
@@ -14512,6 +15337,30 @@ export type HelixHeadlessSelectVueEvents = {
|
|
|
14512
15337
|
toggle: HelixHeadlessSelectToggleElementEvent;
|
|
14513
15338
|
};
|
|
14514
15339
|
|
|
15340
|
+
export type HelixHeadlessShortcutOverlayVueProps = {
|
|
15341
|
+
/** How long the key is held before the badges show, in milliseconds or as `0.6s`. */
|
|
15342
|
+
delay?: (HelixHeadlessShortcutOverlay["delay"]) | undefined;
|
|
15343
|
+
/** What the sheet says when the page has no shortcuts. */
|
|
15344
|
+
"empty-label"?: (HelixHeadlessShortcutOverlay["emptyLabel"]) | undefined;
|
|
15345
|
+
/** What the sheet says when the page has no shortcuts. */
|
|
15346
|
+
emptyLabel?: (HelixHeadlessShortcutOverlay["emptyLabel"]) | undefined;
|
|
15347
|
+
/** The key a reader holds: `mod` (Command on an Apple keyboard, Control
|
|
15348
|
+
elsewhere), `alt`, `ctrl`, or `shift`. */
|
|
15349
|
+
hold?: (HelixHeadlessShortcutOverlay["hold"]) | undefined;
|
|
15350
|
+
/** The sheet's name and heading. */
|
|
15351
|
+
label?: (HelixHeadlessShortcutOverlay["label"]) | undefined;
|
|
15352
|
+
/** The chord that opens the sheet, `?` by default, which a press in a text
|
|
15353
|
+
field never answers. Empty leaves the key to the page, which wants it
|
|
15354
|
+
where the page already answers `?` itself. */
|
|
15355
|
+
"sheet-keys"?: (HelixHeadlessShortcutOverlay["sheetKeys"]) | undefined;
|
|
15356
|
+
/** The chord that opens the sheet, `?` by default, which a press in a text
|
|
15357
|
+
field never answers. Empty leaves the key to the page, which wants it
|
|
15358
|
+
where the page already answers `?` itself. */
|
|
15359
|
+
sheetKeys?: (HelixHeadlessShortcutOverlay["sheetKeys"]) | undefined;
|
|
15360
|
+
};
|
|
15361
|
+
|
|
15362
|
+
export type HelixHeadlessShortcutOverlayVueEvents = {};
|
|
15363
|
+
|
|
14515
15364
|
export type HelixHeadlessSkeletonVueProps = {
|
|
14516
15365
|
/** What is loading, read out as the placeholder's name, such as "Loading
|
|
14517
15366
|
profile".
|
|
@@ -15075,6 +15924,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
15075
15924
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
15076
15925
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
15077
15926
|
readingsLabel?: (HelixHeadlessSpatialBarChart["readingsLabel"]) | undefined;
|
|
15927
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
15928
|
+
turn, its readings from left to right and from the left ear to the
|
|
15929
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
15930
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
15931
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
15932
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
15933
|
+
press, and the sound is made only then. */
|
|
15934
|
+
sonify?: (HelixHeadlessSpatialBarChart["sonify"]) | undefined;
|
|
15935
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
15936
|
+
"sonify-duration"?: (HelixHeadlessSpatialBarChart["sonifyDuration"] | `${number}`) | undefined;
|
|
15937
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
15938
|
+
sonifyDuration?: (HelixHeadlessSpatialBarChart["sonifyDuration"]) | undefined;
|
|
15939
|
+
/** The Listen button's words. */
|
|
15940
|
+
"sonify-label"?: (HelixHeadlessSpatialBarChart["sonifyLabel"]) | undefined;
|
|
15941
|
+
/** The Listen button's words. */
|
|
15942
|
+
sonifyLabel?: (HelixHeadlessSpatialBarChart["sonifyLabel"]) | undefined;
|
|
15943
|
+
/** The Listen button's words while the chart plays. */
|
|
15944
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialBarChart["sonifyStopLabel"]) | undefined;
|
|
15945
|
+
/** The Listen button's words while the chart plays. */
|
|
15946
|
+
sonifyStopLabel?: (HelixHeadlessSpatialBarChart["sonifyStopLabel"]) | undefined;
|
|
15947
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
15948
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
15949
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
15950
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
15951
|
+
summary?: (HelixHeadlessSpatialBarChart["summary"]) | undefined;
|
|
15078
15952
|
/** The readings as data, in the shape of a table, where the page has no
|
|
15079
15953
|
table to point `for` at. `for` wins where both are set.
|
|
15080
15954
|
|
|
@@ -15218,6 +16092,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
15218
16092
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
15219
16093
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
15220
16094
|
readingsLabel?: (HelixHeadlessSpatialHeatmap["readingsLabel"]) | undefined;
|
|
16095
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
16096
|
+
turn, its readings from left to right and from the left ear to the
|
|
16097
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
16098
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
16099
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
16100
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
16101
|
+
press, and the sound is made only then. */
|
|
16102
|
+
sonify?: (HelixHeadlessSpatialHeatmap["sonify"]) | undefined;
|
|
16103
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16104
|
+
"sonify-duration"?: (HelixHeadlessSpatialHeatmap["sonifyDuration"] | `${number}`) | undefined;
|
|
16105
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16106
|
+
sonifyDuration?: (HelixHeadlessSpatialHeatmap["sonifyDuration"]) | undefined;
|
|
16107
|
+
/** The Listen button's words. */
|
|
16108
|
+
"sonify-label"?: (HelixHeadlessSpatialHeatmap["sonifyLabel"]) | undefined;
|
|
16109
|
+
/** The Listen button's words. */
|
|
16110
|
+
sonifyLabel?: (HelixHeadlessSpatialHeatmap["sonifyLabel"]) | undefined;
|
|
16111
|
+
/** The Listen button's words while the chart plays. */
|
|
16112
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialHeatmap["sonifyStopLabel"]) | undefined;
|
|
16113
|
+
/** The Listen button's words while the chart plays. */
|
|
16114
|
+
sonifyStopLabel?: (HelixHeadlessSpatialHeatmap["sonifyStopLabel"]) | undefined;
|
|
16115
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
16116
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
16117
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
16118
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
16119
|
+
summary?: (HelixHeadlessSpatialHeatmap["summary"]) | undefined;
|
|
15221
16120
|
/** The name the `overview` gives the busiest reading, `{busiestLabel}` in
|
|
15222
16121
|
`overview-label`. */
|
|
15223
16122
|
"busiest-label"?: (HelixHeadlessSpatialHeatmap["busiestLabel"]) | undefined;
|
|
@@ -15514,6 +16413,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
15514
16413
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
15515
16414
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
15516
16415
|
readingsLabel?: (HelixHeadlessSpatialRibbonChart["readingsLabel"]) | undefined;
|
|
16416
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
16417
|
+
turn, its readings from left to right and from the left ear to the
|
|
16418
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
16419
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
16420
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
16421
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
16422
|
+
press, and the sound is made only then. */
|
|
16423
|
+
sonify?: (HelixHeadlessSpatialRibbonChart["sonify"]) | undefined;
|
|
16424
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16425
|
+
"sonify-duration"?: (HelixHeadlessSpatialRibbonChart["sonifyDuration"] | `${number}`) | undefined;
|
|
16426
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16427
|
+
sonifyDuration?: (HelixHeadlessSpatialRibbonChart["sonifyDuration"]) | undefined;
|
|
16428
|
+
/** The Listen button's words. */
|
|
16429
|
+
"sonify-label"?: (HelixHeadlessSpatialRibbonChart["sonifyLabel"]) | undefined;
|
|
16430
|
+
/** The Listen button's words. */
|
|
16431
|
+
sonifyLabel?: (HelixHeadlessSpatialRibbonChart["sonifyLabel"]) | undefined;
|
|
16432
|
+
/** The Listen button's words while the chart plays. */
|
|
16433
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialRibbonChart["sonifyStopLabel"]) | undefined;
|
|
16434
|
+
/** The Listen button's words while the chart plays. */
|
|
16435
|
+
sonifyStopLabel?: (HelixHeadlessSpatialRibbonChart["sonifyStopLabel"]) | undefined;
|
|
16436
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
16437
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
16438
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
16439
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
16440
|
+
summary?: (HelixHeadlessSpatialRibbonChart["summary"]) | undefined;
|
|
15517
16441
|
/** The readings as data, in the shape of a table, where the page has no
|
|
15518
16442
|
table to point `for` at. `for` wins where both are set.
|
|
15519
16443
|
|
|
@@ -15676,6 +16600,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
15676
16600
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
15677
16601
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
15678
16602
|
readingsLabel?: (HelixHeadlessSpatialScatterChart["readingsLabel"]) | undefined;
|
|
16603
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
16604
|
+
turn, its readings from left to right and from the left ear to the
|
|
16605
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
16606
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
16607
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
16608
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
16609
|
+
press, and the sound is made only then. */
|
|
16610
|
+
sonify?: (HelixHeadlessSpatialScatterChart["sonify"]) | undefined;
|
|
16611
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16612
|
+
"sonify-duration"?: (HelixHeadlessSpatialScatterChart["sonifyDuration"] | `${number}`) | undefined;
|
|
16613
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16614
|
+
sonifyDuration?: (HelixHeadlessSpatialScatterChart["sonifyDuration"]) | undefined;
|
|
16615
|
+
/** The Listen button's words. */
|
|
16616
|
+
"sonify-label"?: (HelixHeadlessSpatialScatterChart["sonifyLabel"]) | undefined;
|
|
16617
|
+
/** The Listen button's words. */
|
|
16618
|
+
sonifyLabel?: (HelixHeadlessSpatialScatterChart["sonifyLabel"]) | undefined;
|
|
16619
|
+
/** The Listen button's words while the chart plays. */
|
|
16620
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialScatterChart["sonifyStopLabel"]) | undefined;
|
|
16621
|
+
/** The Listen button's words while the chart plays. */
|
|
16622
|
+
sonifyStopLabel?: (HelixHeadlessSpatialScatterChart["sonifyStopLabel"]) | undefined;
|
|
16623
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
16624
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
16625
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
16626
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
16627
|
+
summary?: (HelixHeadlessSpatialScatterChart["summary"]) | undefined;
|
|
15679
16628
|
/** The readings as data, in the shape of a table, where the page has no
|
|
15680
16629
|
table to point `for` at. `for` wins where both are set.
|
|
15681
16630
|
|
|
@@ -15842,6 +16791,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
15842
16791
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
15843
16792
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
15844
16793
|
readingsLabel?: (HelixHeadlessSpatialSurfaceChart["readingsLabel"]) | undefined;
|
|
16794
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
16795
|
+
turn, its readings from left to right and from the left ear to the
|
|
16796
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
16797
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
16798
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
16799
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
16800
|
+
press, and the sound is made only then. */
|
|
16801
|
+
sonify?: (HelixHeadlessSpatialSurfaceChart["sonify"]) | undefined;
|
|
16802
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16803
|
+
"sonify-duration"?: (HelixHeadlessSpatialSurfaceChart["sonifyDuration"] | `${number}`) | undefined;
|
|
16804
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16805
|
+
sonifyDuration?: (HelixHeadlessSpatialSurfaceChart["sonifyDuration"]) | undefined;
|
|
16806
|
+
/** The Listen button's words. */
|
|
16807
|
+
"sonify-label"?: (HelixHeadlessSpatialSurfaceChart["sonifyLabel"]) | undefined;
|
|
16808
|
+
/** The Listen button's words. */
|
|
16809
|
+
sonifyLabel?: (HelixHeadlessSpatialSurfaceChart["sonifyLabel"]) | undefined;
|
|
16810
|
+
/** The Listen button's words while the chart plays. */
|
|
16811
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialSurfaceChart["sonifyStopLabel"]) | undefined;
|
|
16812
|
+
/** The Listen button's words while the chart plays. */
|
|
16813
|
+
sonifyStopLabel?: (HelixHeadlessSpatialSurfaceChart["sonifyStopLabel"]) | undefined;
|
|
16814
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
16815
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
16816
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
16817
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
16818
|
+
summary?: (HelixHeadlessSpatialSurfaceChart["summary"]) | undefined;
|
|
15845
16819
|
/** The readings as data, in the shape of a table, where the page has no
|
|
15846
16820
|
table to point `for` at. `for` wins where both are set.
|
|
15847
16821
|
|
|
@@ -16000,6 +16974,31 @@ beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
|
16000
16974
|
beside its buttons and as each page arrives. `{first}`, `{last}` and
|
|
16001
16975
|
`{count}` are replaced with the numbers, written in `locale`. */
|
|
16002
16976
|
readingsLabel?: (HelixHeadlessSpatialTreemap["readingsLabel"]) | undefined;
|
|
16977
|
+
/** Draws a Listen button that plays the chart as sound: each series in
|
|
16978
|
+
turn, its readings from left to right and from the left ear to the
|
|
16979
|
+
right, the value as pitch over two octaves, a soft tick at each
|
|
16980
|
+
gridline, and one timbre a series. With it, each reading the arrow keys
|
|
16981
|
+
step to plays its tone beside what the readout says, and L plays the
|
|
16982
|
+
whole chart while it has focus. Escape stops it. Nothing plays without a
|
|
16983
|
+
press, and the sound is made only then. */
|
|
16984
|
+
sonify?: (HelixHeadlessSpatialTreemap["sonify"]) | undefined;
|
|
16985
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16986
|
+
"sonify-duration"?: (HelixHeadlessSpatialTreemap["sonifyDuration"] | `${number}`) | undefined;
|
|
16987
|
+
/** How long each series takes to play, in milliseconds or as `3s`. */
|
|
16988
|
+
sonifyDuration?: (HelixHeadlessSpatialTreemap["sonifyDuration"]) | undefined;
|
|
16989
|
+
/** The Listen button's words. */
|
|
16990
|
+
"sonify-label"?: (HelixHeadlessSpatialTreemap["sonifyLabel"]) | undefined;
|
|
16991
|
+
/** The Listen button's words. */
|
|
16992
|
+
sonifyLabel?: (HelixHeadlessSpatialTreemap["sonifyLabel"]) | undefined;
|
|
16993
|
+
/** The Listen button's words while the chart plays. */
|
|
16994
|
+
"sonify-stop-label"?: (HelixHeadlessSpatialTreemap["sonifyStopLabel"]) | undefined;
|
|
16995
|
+
/** The Listen button's words while the chart plays. */
|
|
16996
|
+
sonifyStopLabel?: (HelixHeadlessSpatialTreemap["sonifyStopLabel"]) | undefined;
|
|
16997
|
+
/** `visible` draws the chart's text summary under it, as one line.
|
|
16998
|
+
`hidden`, or absent, says the summary to a screen reader and draws it
|
|
16999
|
+
for no one else. Reflected, because the stylesheet draws it by the
|
|
17000
|
+
attribute, and a page that sets the property, as React does, writes none. */
|
|
17001
|
+
summary?: (HelixHeadlessSpatialTreemap["summary"]) | undefined;
|
|
16003
17002
|
/** The readings as data, in the shape of a table, where the page has no
|
|
16004
17003
|
table to point `for` at. `for` wins where both are set.
|
|
16005
17004
|
|
|
@@ -17721,9 +18720,15 @@ export type HelixHeadlessTextareaElementEvent<E = Event> = TypedEvent<
|
|
|
17721
18720
|
/** `helix-before-change` event type */
|
|
17722
18721
|
export type HelixHeadlessTextareaHelixBeforeChangeElementEvent =
|
|
17723
18722
|
HelixHeadlessTextareaElementEvent<HelixBeforeChangeEvent>;
|
|
18723
|
+
/** `helix-before-listen` event type */
|
|
18724
|
+
export type HelixHeadlessTextareaHelixBeforeListenElementEvent =
|
|
18725
|
+
HelixHeadlessTextareaElementEvent<HelixBeforeListenEvent>;
|
|
17724
18726
|
/** `helix-clear` event type */
|
|
17725
18727
|
export type HelixHeadlessTextareaHelixClearElementEvent =
|
|
17726
18728
|
HelixHeadlessTextareaElementEvent<HelixClearEvent>;
|
|
18729
|
+
/** `helix-listen` event type */
|
|
18730
|
+
export type HelixHeadlessTextareaHelixListenElementEvent =
|
|
18731
|
+
HelixHeadlessTextareaElementEvent<HelixListenEvent>;
|
|
17727
18732
|
|
|
17728
18733
|
export type HelixHeadlessTextareaVueProps = {
|
|
17729
18734
|
/** What the browser can autofill in the field, as a standard `autocomplete`
|
|
@@ -17806,6 +18811,27 @@ Not a label: it goes when typing starts. */
|
|
|
17806
18811
|
/** How the browser wraps the text, and whether the breaks are submitted with
|
|
17807
18812
|
it. */
|
|
17808
18813
|
wrap?: (HelixHeadlessTextarea["wrap"]) | undefined;
|
|
18814
|
+
/** What a screen reader hears as listening starts. */
|
|
18815
|
+
"listening-label"?: (HelixHeadlessTextarea["listeningLabel"]) | undefined;
|
|
18816
|
+
/** What a screen reader hears as listening starts. */
|
|
18817
|
+
listeningLabel?: (HelixHeadlessTextarea["listeningLabel"]) | undefined;
|
|
18818
|
+
/** What a screen reader hears as listening stops. */
|
|
18819
|
+
"stopped-listening-label"?: (HelixHeadlessTextarea["stoppedListeningLabel"]) | undefined;
|
|
18820
|
+
/** What a screen reader hears as listening stops. */
|
|
18821
|
+
stoppedListeningLabel?: (HelixHeadlessTextarea["stoppedListeningLabel"]) | undefined;
|
|
18822
|
+
/** Draws a button that listens for dictation and types what it hears at
|
|
18823
|
+
the caret. Nothing listens until the button is pressed, and the
|
|
18824
|
+
microphone is let go as listening stops. An input of type `password`,
|
|
18825
|
+
`email` or `number` draws no button. */
|
|
18826
|
+
voice?: (HelixHeadlessTextarea["voice"]) | undefined;
|
|
18827
|
+
/** The dictation button's name while it is not listening. */
|
|
18828
|
+
"voice-label"?: (HelixHeadlessTextarea["voiceLabel"]) | undefined;
|
|
18829
|
+
/** The dictation button's name while it is not listening. */
|
|
18830
|
+
voiceLabel?: (HelixHeadlessTextarea["voiceLabel"]) | undefined;
|
|
18831
|
+
/** The dictation button's name while it listens. */
|
|
18832
|
+
"voice-stop-label"?: (HelixHeadlessTextarea["voiceStopLabel"]) | undefined;
|
|
18833
|
+
/** The dictation button's name while it listens. */
|
|
18834
|
+
voiceStopLabel?: (HelixHeadlessTextarea["voiceStopLabel"]) | undefined;
|
|
17809
18835
|
/** The value the control starts with. A form reset returns it to this value,
|
|
17810
18836
|
and to the `value` attribute where this one is not written, as a native
|
|
17811
18837
|
control resets to the `value` it declares. */
|
|
@@ -17914,6 +18940,9 @@ which is where an empty field's caret would be anyway. */
|
|
|
17914
18940
|
nothing wrong. Return a message, or a list of them, to mark the field
|
|
17915
18941
|
invalid, and `true`, `null`, or nothing to accept the value. */
|
|
17916
18942
|
validate?: (HelixHeadlessTextarea["validate"]) | undefined;
|
|
18943
|
+
/** The engine this field listens through, in place of the one
|
|
18944
|
+
`registerSpeechEngine` gave the page, or the browser's own. */
|
|
18945
|
+
speechEngine?: (HelixHeadlessTextarea["speechEngine"]) | undefined;
|
|
17917
18946
|
};
|
|
17918
18947
|
|
|
17919
18948
|
export type HelixHeadlessTextareaVueEvents = {
|
|
@@ -17921,8 +18950,12 @@ export type HelixHeadlessTextareaVueEvents = {
|
|
|
17921
18950
|
change: HelixHeadlessTextareaElementEvent;
|
|
17922
18951
|
/** Fired as the text changes, and cancelable. */
|
|
17923
18952
|
"helix-before-change": HelixHeadlessTextareaHelixBeforeChangeElementEvent;
|
|
18953
|
+
/** The dictation button was pressed. Cancelable: cancel it to keep the field from listening. */
|
|
18954
|
+
"helix-before-listen": HelixHeadlessTextareaHelixBeforeListenElementEvent;
|
|
17924
18955
|
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
17925
18956
|
"helix-clear": HelixHeadlessTextareaHelixClearElementEvent;
|
|
18957
|
+
/** Dictation settled on a phrase and put it in the value, after the field's own `input`. */
|
|
18958
|
+
"helix-listen": HelixHeadlessTextareaHelixListenElementEvent;
|
|
17926
18959
|
/** Fired after the value changes. */
|
|
17927
18960
|
input: HelixHeadlessTextareaElementEvent;
|
|
17928
18961
|
};
|
|
@@ -18869,6 +19902,10 @@ keys joined by `+`, the last one the key, as `Announcement`'s `hotkey`
|
|
|
18869
19902
|
reads them: `mod` is Command on Apple devices and Control elsewhere.
|
|
18870
19903
|
Empty turns it off. */
|
|
18871
19904
|
hotkey?: (HelixHeadlessToast["hotkey"]) | undefined;
|
|
19905
|
+
/** What the hotkey does, as a list of the page's shortcuts says it. */
|
|
19906
|
+
"hotkey-label"?: (HelixHeadlessToast["hotkeyLabel"]) | undefined;
|
|
19907
|
+
/** What the hotkey does, as a list of the page's shortcuts says it. */
|
|
19908
|
+
hotkeyLabel?: (HelixHeadlessToast["hotkeyLabel"]) | undefined;
|
|
18872
19909
|
/** Accessible name for the region, with `{hotkey}` filled in. Translate it with
|
|
18873
19910
|
the rest of your interface. */
|
|
18874
19911
|
label?: (HelixHeadlessToast["label"]) | undefined;
|
|
@@ -18911,6 +19948,26 @@ the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
|
|
|
18911
19948
|
/** The edge a touch or a pen swipes a message toward to dismiss it: `end`,
|
|
18912
19949
|
the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
|
|
18913
19950
|
swipeDirection?: (HelixHeadlessToast["swipeDirection"]) | undefined;
|
|
19951
|
+
/** What a message `undoable()` made says after its own words, with `{keys}`
|
|
19952
|
+
for the chord that undoes it, spoken as words. */
|
|
19953
|
+
"undo-hint"?: (HelixHeadlessToast["undoHint"]) | undefined;
|
|
19954
|
+
/** What a message `undoable()` made says after its own words, with `{keys}`
|
|
19955
|
+
for the chord that undoes it, spoken as words. */
|
|
19956
|
+
undoHint?: (HelixHeadlessToast["undoHint"]) | undefined;
|
|
19957
|
+
/** The keys that undo the newest message `undoable()` made, as `hotkey`
|
|
19958
|
+
reads them. Empty turns them off, for an app whose own undo holds them,
|
|
19959
|
+
and leaves the Undo button. A key the app already handled, by calling
|
|
19960
|
+
`preventDefault()`, is left to it. */
|
|
19961
|
+
"undo-keys"?: (HelixHeadlessToast["undoKeys"]) | undefined;
|
|
19962
|
+
/** The keys that undo the newest message `undoable()` made, as `hotkey`
|
|
19963
|
+
reads them. Empty turns them off, for an app whose own undo holds them,
|
|
19964
|
+
and leaves the Undo button. A key the app already handled, by calling
|
|
19965
|
+
`preventDefault()`, is left to it. */
|
|
19966
|
+
undoKeys?: (HelixHeadlessToast["undoKeys"]) | undefined;
|
|
19967
|
+
/** The words on the Undo button of a message `undoable()` made. */
|
|
19968
|
+
"undo-label"?: (HelixHeadlessToast["undoLabel"]) | undefined;
|
|
19969
|
+
/** The words on the Undo button of a message `undoable()` made. */
|
|
19970
|
+
undoLabel?: (HelixHeadlessToast["undoLabel"]) | undefined;
|
|
18914
19971
|
};
|
|
18915
19972
|
|
|
18916
19973
|
export type HelixHeadlessToastVueEvents = {
|
|
@@ -21236,7 +22293,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21236
22293
|
HelixHeadlessCarouselVueProps,
|
|
21237
22294
|
HelixHeadlessCarouselVueEvents
|
|
21238
22295
|
>;
|
|
21239
|
-
/** The composer is a separate element so you can replace it. If you need attachments, slash commands, or a model picker, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. **In a form, the draft is the composer's value**, submitted under 'name', and an empty draft submits an empty entry, as a native textarea does. A form reset puts back the 'value' the markup declared, and a '<fieldset disabled>' turns the composer off. Sending is still 'helix-send', and it does not submit the form. **'required', 'minlength' and 'maxlength' are checked by the browser**, as on a '<textarea>', and the message is the browser's. 'maxlength' stops the field taking more. A draft that fails them does not send, and the composer takes ':state(invalid)' and 'aria-invalid' once the reader has tried to send it, the form was submitted, or the reader edited the field and left it. Sending an empty required composer counts as trying. Tabbing past an empty composer marks nothing. **'feedback' is a message of your own about the draft**, such as one your server sent back. While it is set, the composer is invalid at once, does not send or submit, shows the message under the field, and a screen reader hears it as it appears. Clear it to let the draft go. **'typing' says whether the user is writing**, and 'helix-typing' is sent each time it changes: when they start, and when they send or stop for 'typing-timeout' milliseconds. Pass it on to show "is typing" to the other side. */
|
|
22296
|
+
/** The composer is a separate element so you can replace it. If you need attachments, slash commands, or a model picker, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. **Set 'voice' for dictation.** A microphone button before send listens through the page's speech engine, the browser's own unless 'registerSpeechEngine' gave the page another, and types what it hears at the caret as the reader speaks, each guess replaced by the next. Press it again, press Escape, or send, and it stops. Where the browser has no engine, as in Firefox, no button is drawn. **In a form, the draft is the composer's value**, submitted under 'name', and an empty draft submits an empty entry, as a native textarea does. A form reset puts back the 'value' the markup declared, and a '<fieldset disabled>' turns the composer off. Sending is still 'helix-send', and it does not submit the form. **'required', 'minlength' and 'maxlength' are checked by the browser**, as on a '<textarea>', and the message is the browser's. 'maxlength' stops the field taking more. A draft that fails them does not send, and the composer takes ':state(invalid)' and 'aria-invalid' once the reader has tried to send it, the form was submitted, or the reader edited the field and left it. Sending an empty required composer counts as trying. Tabbing past an empty composer marks nothing. **'feedback' is a message of your own about the draft**, such as one your server sent back. While it is set, the composer is invalid at once, does not send or submit, shows the message under the field, and a screen reader hears it as it appears. Clear it to let the draft go. **'typing' says whether the user is writing**, and 'helix-typing' is sent each time it changes: when they start, and when they send or stop for 'typing-timeout' milliseconds. Pass it on to show "is typing" to the other side. */
|
|
21240
22297
|
"helix-headless-chat-composer": DefineCustomElement<
|
|
21241
22298
|
HelixHeadlessChatComposer,
|
|
21242
22299
|
HelixHeadlessChatComposerVueProps,
|
|
@@ -21272,6 +22329,18 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21272
22329
|
HelixHeadlessCodeBlockVueProps,
|
|
21273
22330
|
HelixHeadlessCodeBlockVueEvents
|
|
21274
22331
|
>;
|
|
22332
|
+
/** A pane for working on a file: a header with its name, its language and the page's own actions, the code, the problems in it, and a status line that says where the caret is. On its own the code is a '<textarea>' in the code face. Connect an engine and it draws the code instead: 'connectEditor' from '@fusion.dev/helix-editor' connects CodeMirror, with highlighting in your theme's syntax colors, line numbers, folding, bracket matching and history. The value, the form, validation and the events stay the editor's, so a page reads and writes it the same either way. For a few lines in a form, such as a setting in JSON, use 'Code Input', which needs no engine. - 'language' picks the highlighting, such as 'ts', 'css', 'html', 'md', 'json', 'python', 'rust' or 'sh', and the header names it. - 'diagnostics' marks problems, from a linter or a language server: each is underlined in the text, its line number is drawn in its tone, and it is listed under the code, where pressing it moves the caret to it. - The find bar finds, with the case, whole words or a regular expression, and replaces once its first button shows the replace field, in the engine or in the plain field alike. - Every change goes through 'requestValue', so a listener refusing 'helix-before-change' refuses the keystroke, in the engine too. **Keyboard.** Command+F, or Control+F elsewhere, opens the find bar, Enter and Shift+Enter move between matches, and Escape closes it. In an engine, Tab indents and Escape then Tab leaves the editor, so the editor is never a trap for a reader without a pointer. */
|
|
22333
|
+
"helix-headless-code-editor": DefineCustomElement<
|
|
22334
|
+
HelixHeadlessCodeEditor,
|
|
22335
|
+
HelixHeadlessCodeEditorVueProps,
|
|
22336
|
+
HelixHeadlessCodeEditorVueEvents
|
|
22337
|
+
>;
|
|
22338
|
+
/** A 'Textarea' for code: the same field in a form, with the same label, hint, validation, 'voice' and selection methods, drawing its text in the highlighter's colors. The reader types in a real '<textarea>', so the caret, selection, undo, spellcheck being off and autofill being off are the platform's, and the field works before any script loads. - 'language' picks the grammar, such as 'json', 'css', 'ts', 'html' or 'sh'. - The field grows with its text from 'rows' lines to 'max-rows', and scrolls past them. - Lines keep their length and the field scrolls sideways, unless 'wrap' is 'soft'. **The colors are the page's choice.** Helix ships no grammar, so a page that wants color registers a highlighter once, the one Code Block uses: 'import '@fusion.dev/helix-sandbox/code-block'' registers Helix's own, or 'registerHighlighter' takes Shiki or Prism. Without one the code is drawn plain, and 'highlight' sets one for a single field. For a whole file, with line numbers, folding, search and problems listed by line, use 'Code Editor'. Code Input is for a few dozen lines in a form: a setting in JSON, a style rule, a query, a template. **Keyboard.** Tab indents the line, or every line the selection touches, and Shift+Tab takes the indent away. Enter starts the next line at the same indent. Escape then Tab leaves the field, so it is never a trap for a reader without a pointer. */
|
|
22339
|
+
"helix-headless-code-input": DefineCustomElement<
|
|
22340
|
+
HelixHeadlessCodeInput,
|
|
22341
|
+
HelixHeadlessCodeInputVueProps,
|
|
22342
|
+
HelixHeadlessCodeInputVueEvents
|
|
22343
|
+
>;
|
|
21275
22344
|
/** Renders a real '<code>' element, which marks the text as code for translation tools and document search. A styled span carries no such meaning, and a screen reader announces nothing about it. **Set 'translate="no"' on the element to keep a page translator off the code.** A translator that rewrites prose would also rewrite an identifier. The slotted text takes its translation mode from the element, its parent in the page, and the element writes nothing onto itself, so the attribute is yours to set. The '<code>' inside carries 'translate="no"' for anything the element draws itself. 'Code' is inline only and never scrolls. For a block of code with its own box, its own overflow, and copying, use 'CodeBlock', which is a separate family. */
|
|
21276
22345
|
"helix-headless-code": DefineCustomElement<
|
|
21277
22346
|
HelixHeadlessCode,
|
|
@@ -21296,7 +22365,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21296
22365
|
HelixHeadlessComboboxVueProps,
|
|
21297
22366
|
HelixHeadlessComboboxVueEvents
|
|
21298
22367
|
>;
|
|
21299
|
-
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. An option with 'href' is a link to a page, which the browser follows once the palette has closed. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. With 'inline', the palette is drawn in the page with no dialog, as a search over a list that is always shown. **Pages.** A command can open a page of commands of its own, as a palette offers "Change theme" and then the themes. Give the option 'opens' with a name, and slot the page's commands as 'page:' and that name: '''html <helix-command> <helix-option value="theme" opens="theme">Change theme</helix-option> <helix-option value="dark" slot="page:theme">Dark</helix-option> <helix-option value="light" slot="page:theme">Light</helix-option> </helix-command> ''' Choosing the opener says 'helix-select' with its value, and canceling it keeps the page that is shown. The list then shows the page, named by the opener's words, and a screen reader hears those words. Backspace in an empty filter goes back, and a screen reader hears the name of the page it goes back to. 'page' says which page is shown. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. As typing narrows the list, a screen reader hears how many commands are left, such as "3 commands". **Keyboard.** Focus goes to the filter field as the palette opens, with no command highlighted, as in React Aria's Autocomplete, so Enter runs nothing until you type or press Down. Typing highlights the first command left, and the highlight moves through the commands while you type. | Key | What it does | |---|---| | 'hotkey', Command or Control with K by default | Opens the palette from anywhere on the page, or closes it. With 'inline', puts focus in its filter field. | | Down, Up | Moves the highlight to the next or the previous command, round from the last to the first. | | Page Down, Page Up | Moves the highlight by as many commands as the list shows at once. | | Home, End | Move the caret in the filter field. With 'home-end="list"', move the highlight to the first or the last command. | | Left, Right | Move the caret in the filter field. | | Enter | Runs the highlighted command, or follows it where it is a link, and closes the palette. On a command with 'opens', shows its page. | | Command or Control with Enter | Takes the highlighted command's 'alternate' destination, where it has one. | | Backspace | In an empty filter on a page, goes back to the page before. | | Escape | Clears the filter. With the filter empty, closes the palette and puts focus back where it was. | | Tab | Stays in the palette, which is modal. With 'inline', moves on through the page. | **ARIA.** The palette is a modal 'dialog' named by 'label', or with 'inline' no dialog at all. Inside it the filter field is a text field with 'aria-autocomplete="list"', 'aria-controls' on the list, and 'aria-activedescendant' on the highlighted command, as the field of React Aria's 'Autocomplete' is. The commands are a 'listbox' of 'option's. How many commands typing left, the empty text and the loading text are said in a polite live region. **The
|
|
22368
|
+
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. An option with 'href' is a link to a page, which the browser follows once the palette has closed. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. With 'inline', the palette is drawn in the page with no dialog, as a search over a list that is always shown. **Pages.** A command can open a page of commands of its own, as a palette offers "Change theme" and then the themes. Give the option 'opens' with a name, and slot the page's commands as 'page:' and that name: '''html <helix-command> <helix-option value="theme" opens="theme">Change theme</helix-option> <helix-option value="dark" slot="page:theme">Dark</helix-option> <helix-option value="light" slot="page:theme">Light</helix-option> </helix-command> ''' Choosing the opener says 'helix-select' with its value, and canceling it keeps the page that is shown. The list then shows the page, named by the opener's words, and a screen reader hears those words. Backspace in an empty filter goes back, and a screen reader hears the name of the page it goes back to. 'page' says which page is shown. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. As typing narrows the list, a screen reader hears how many commands are left, such as "3 commands". **Keyboard.** Focus goes to the filter field as the palette opens, with no command highlighted, as in React Aria's Autocomplete, so Enter runs nothing until you type or press Down. Typing highlights the first command left, and the highlight moves through the commands while you type. | Key | What it does | |---|---| | 'hotkey', Command or Control with K by default | Opens the palette from anywhere on the page, or closes it. With 'inline', puts focus in its filter field. | | Down, Up | Moves the highlight to the next or the previous command, round from the last to the first. | | Page Down, Page Up | Moves the highlight by as many commands as the list shows at once. | | Home, End | Move the caret in the filter field. With 'home-end="list"', move the highlight to the first or the last command. | | Left, Right | Move the caret in the filter field. | | Enter | Runs the highlighted command, or follows it where it is a link, and closes the palette. On a command with 'opens', shows its page. | | Command or Control with Enter | Takes the highlighted command's 'alternate' destination, where it has one. | | Backspace | In an empty filter on a page, goes back to the page before. | | Escape | Clears the filter. With the filter empty, closes the palette and puts focus back where it was. | | Tab | Stays in the palette, which is modal. With 'inline', moves on through the page. | **ARIA.** The palette is a modal 'dialog' named by 'label', or with 'inline' no dialog at all. Inside it the filter field is a text field with 'aria-autocomplete="list"', 'aria-controls' on the list, and 'aria-activedescendant' on the highlighted command, as the field of React Aria's 'Autocomplete' is. The commands are a 'listbox' of 'option's. How many commands typing left, the empty text and the loading text are said in a polite live region. **The palette registers Option**, since it draws the controls on screen as options itself with 'controls', so a page that writes commands imports the palette alone. A tier of your own registers its own option, and in development a palette holding one nobody registered says so. **Set 'controls' to find anything on screen.** Every labeled Helix control puts itself on the page's list while it is connected, and the palette lists the ones a reader can reach under its own commands once they type, with each one's shortcut. Choosing one closes the palette and presses it, or moves focus into a field. 'unlisted' on a control, or on a region around it, leaves it out. */
|
|
21300
22369
|
"helix-headless-command": DefineCustomElement<
|
|
21301
22370
|
HelixHeadlessCommand,
|
|
21302
22371
|
HelixHeadlessCommandVueProps,
|
|
@@ -21602,6 +22671,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21602
22671
|
HelixHeadlessMapTerrainVueProps,
|
|
21603
22672
|
HelixHeadlessMapTerrainVueEvents
|
|
21604
22673
|
>;
|
|
22674
|
+
/** Set 'text' to the Markdown, or to everything a reply has said so far, with 'streaming' while more is coming. Each time 'text' grows, only what changed is drawn: a block that has ended is never drawn again, a word arriving is added to the line it ends, and a code block, a list, or a table fills in where it stands. Text you can already read does not move. - A fence becomes a 'Code Block', with its language as its 'label' and its 'language', so a highlighter given to 'registerHighlighter' colors it as it grows. - An alert, '> [!NOTE]' through '> [!CAUTION]', becomes a 'Callout' in the tone 'rehypeHelix' gives it. - A table's columns are sized once from its header row, so the rows that follow never widen or narrow them. - A list item's first paragraph is drawn the same whether the list is tight or loose, so a blank line arriving between items moves nothing. While 'streaming', the end of the text is read as still arriving. A '**' whose closing pair has not come yet draws bold at once, a code span draws as code, and a link draws as a link before its address arrives. A marker that the next character decides, such as a '#' at the start of a line, waits for that character. **The document is drawn in the element's own children**, so the page's 'data-prose' styles reach it, a reader can select and find its text, and a server can send it. Put 'data-prose' on the element or on a container. On a server, render 'markdownToHtml(text)' inside the element: where what it was sent is exactly what it would draw, it keeps it and draws nothing again. What it reads is CommonMark with GitHub's tables, task lists, strikethrough, autolinks, and alerts. A line of '===' or '---' under a paragraph is not a heading, four spaces of indent are not a code block, and reference links are not read, because each of those changes text above it after it was drawn. HTML is drawn as text. An image is drawn as a link to the picture, which loads nothing until a reader follows it. A link's address is kept only where it is relative or on 'http', 'https', 'mailto', or 'tel'. */
|
|
22675
|
+
"helix-headless-markdown": DefineCustomElement<
|
|
22676
|
+
HelixHeadlessMarkdown,
|
|
22677
|
+
HelixHeadlessMarkdownVueProps,
|
|
22678
|
+
HelixHeadlessMarkdownVueEvents
|
|
22679
|
+
>;
|
|
21605
22680
|
/** A disclosure: a button that shows and hides a region of your own links. It does not use 'role="menu"' or 'menuitem', which are for application commands. Those roles take over the arrow keys, announce "menu" to someone looking for navigation, and put every link inside a role that is not a link. As a disclosure, middle clicks, modified clicks, and the status bar keep working. Use 'Menu' for a row of commands. It renders no links. A router renders its own anchors and cannot render them inside this shadow root, so the panel is a slot for the lists and headings you write. It opens on hover by default, and a press always opens it too. 'open-on' sets which. Hover is the default because in a navigation bar people expect to move along the row and see each section. A pointer resting on the trigger opens the panel after 'open-delay', and leaving closes it after 'close-delay'. Moving from one open panel's trigger to another's opens the next at once, as Radix's 'skipDelayDuration' does. When one panel opens in place of another, each says which way the reader moved, as Radix's 'data-motion' does. Moving toward the end of the bar, the one opening is ':state(from-end)' and the one closing is ':state(to-start)'; moving back, they are ':state(from-start)' and ':state(to-end)'. A stylesheet slides them on that. Start and end follow the reading direction, so on a right-to-left page the end is on the left. A panel that opens or closes on its own carries none of the four. A press on another megamenu's trigger hands over the same way as hovering it. While a panel is open its surface carries its own size, as '--megamenu-surface-inline-size' and '--megamenu-surface-block-size', and a panel that took over from another also carries that one's size, as '--megamenu-from-inline-size' and '--megamenu-from-block-size'. Radix's navigation menu publishes the same pair from its shared viewport, so a stylesheet can grow or shrink one panel into the next. While a link in the panel carries 'aria-current="page"', the host has ':state(current)', so the trigger of the section holding the page you are on can say so, as Radix's navigation menu marks its active link. The panel's default slot is the 'columns' part and draws no box, so a sheet can give the columns one of their own. While a panel is open, an 'indicator' slot is rendered beside its trigger, as Radix's indicator marks the open one: slot a mark of your own, such as a bar or an arrow pointing at the panel, and it shows only while the panel is open. The styled tier rests it on the trigger's bottom edge. Left and Right Arrow move between the triggers of the megamenus beside this one, and Home and End go to the first and the last, as Radix's navigation menu does. In a 'Navigation', which holds them in a slot, the arrows are the navigation's, and move between its destinations under its 'arrows'. Down Arrow on the trigger of an open panel moves focus to the panel's first link, Escape closes the panel and returns focus to its trigger, and Tab moves through the panel's links and closes it on the way out. The trigger says 'aria-expanded', and the panel is a group named by 'label'. A Helix trigger, such as 'helix-button', is told whether the panel is open inside its own shadow root. On a plain element, such as a '<button>', the megamenu writes 'aria-expanded', from a frame after its own first render, so a server's markup is never changed while a framework hydrates it. It never writes it where you wrote 'aria-expanded' yourself. */
|
|
21606
22681
|
"helix-headless-megamenu": DefineCustomElement<
|
|
21607
22682
|
HelixHeadlessMegamenu,
|
|
@@ -21614,7 +22689,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21614
22689
|
HelixHeadlessMenuItemVueProps,
|
|
21615
22690
|
HelixHeadlessMenuItemVueEvents
|
|
21616
22691
|
>;
|
|
21617
|
-
/** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Slot a 'helix-button' or 'helix-icon-button' as the trigger, and the menu tells it that it opens a menu and whether the menu is open, inside its own shadow root. On a plain element, such as a '<button>', the menu writes 'aria-haspopup="menu"' and 'aria-expanded', from a frame after its own first render, so a server's markup is never changed while a framework hydrates it. It never writes 'aria-expanded' where you wrote it yourself. Submenus drill down by default. A submenu replaces the panel's content, and a back row returns to the previous page. One panel stays inside a narrow window, and works on touch screens, which have no hover. Focus follows a mouse resting on a row in either mode, and a drilled page is a 'menu' named by the row that opened it. **'submenus="flyout"' opens each submenu in a panel of its own beside its row**, as React Aria's 'SubmenuTrigger' and Radix's 'Sub' do. Resting the pointer on the row opens it, and a pointer crossing toward the open panel over the rows between keeps it open, as Radix's grace area does. Right Arrow opens a row's submenu on its first row, and Left Arrow or Escape closes it and returns focus to the row, the two arrows swapping on a right-to-left page. The row says 'aria-expanded', and the panel is a 'menu' named by the row. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. Group rows under a heading with 'Menu.Section', which is a 'group' named by its heading. Between runs of rows, a '<helix-divider>' is a separator a screen reader announces. Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first row, and Up Arrow on its last. In the menu, Up and Down Arrow move between rows, Home and End go to the first and the last, a typed letter moves to the next row whose name starts with it, Enter and Space choose (Space on a choice row changes it and leaves the menu open), Right Arrow opens a row's submenu and Left Arrow goes back, the two swapping on a right-to-left page. Left Arrow on the top page does nothing. Escape closes the menu and returns focus to the trigger. Tab closes it and moves on. While it is open, the surface carries the trigger's width as '--floating-anchor-inline-size' and the room left below it as '--floating-available-block-size', as Radix's dropdown menu publishes its trigger's width, for a menu as wide as its trigger: 'helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }'. **The choices in one place.** 'checkedValues' holds the values of the rows that are checked, anywhere in the menu, and setting it checks exactly those rows, as React Aria's 'selectedKeys' does. 'change' is sent on the menu when a reader's choice changes it. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. A touch or a pen held still on the area opens it too, on every browser, since iOS sends no 'contextmenu' for one. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, and a press held for half a second opens the menu, as React Aria's 'trigger="longPress"' does. Alt+Down or Alt+Up opens it from the keyboard, and the trigger is described by 'long-press-label', which says so. **A filter field** is a separate import, '@fusion.dev/helix/menu/filter', so a menu that never filters carries none of its code: '''js import '@fusion.dev/helix/menu' import '@fusion.dev/helix/menu/filter' ''' With it imported and 'filterable' set, the menu opens with focus in a field above its rows, and typing narrows the rows of the page the keys move in, as React Aria's 'Autocomplete' around a 'Menu' does. A row is kept where its words hold the filter, in any case, or where 'filterMatch' says so. Each page starts unfiltered, and the filter is cleared as the menu closes. Where typing keeps no row, the menu shows 'no-results-text'. Focus stays in the field: Up and Down Arrow move the highlight through the rows that are left, Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow on a submenu goes back, and Escape clears the filter and then closes the menu. A screen reader hears how many rows the filter keeps ('results-label'). Home, End and the other keys move the caret and type. The field names the highlighted row with 'aria-activedescendant', and the rows are a 'menu' after the field. Cancel 'helix-filter' to keep every row showing and narrow the rows yourself, such as by replacing them with rows from a server. */
|
|
22692
|
+
/** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Slot a 'helix-button' or 'helix-icon-button' as the trigger, and the menu tells it that it opens a menu and whether the menu is open, inside its own shadow root. On a plain element, such as a '<button>', the menu writes 'aria-haspopup="menu"' and 'aria-expanded', from a frame after its own first render, so a server's markup is never changed while a framework hydrates it. It never writes 'aria-expanded' where you wrote it yourself. Submenus drill down by default. A submenu replaces the panel's content, and a back row returns to the previous page. One panel stays inside a narrow window, and works on touch screens, which have no hover. Focus follows a mouse resting on a row in either mode, and a drilled page is a 'menu' named by the row that opened it. **'submenus="flyout"' opens each submenu in a panel of its own beside its row**, as React Aria's 'SubmenuTrigger' and Radix's 'Sub' do. Resting the pointer on the row opens it, and a pointer crossing toward the open panel over the rows between keeps it open, as Radix's grace area does. Right Arrow opens a row's submenu on its first row, and Left Arrow or Escape closes it and returns focus to the row, the two arrows swapping on a right-to-left page. The row says 'aria-expanded', and the panel is a 'menu' named by the row. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. Group rows under a heading with 'Menu.Section', which is a 'group' named by its heading. Between runs of rows, a '<helix-divider>' is a separator a screen reader announces. Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first row, and Up Arrow on its last. In the menu, Up and Down Arrow move between rows, Home and End go to the first and the last, a typed letter moves to the next row whose name starts with it, Enter and Space choose (Space on a choice row changes it and leaves the menu open), Right Arrow opens a row's submenu and Left Arrow goes back, the two swapping on a right-to-left page. Left Arrow on the top page does nothing. Escape closes the menu and returns focus to the trigger. Tab closes it and moves on. While it is open, the surface carries the trigger's width as '--floating-anchor-inline-size' and the room left below it as '--floating-available-block-size', as Radix's dropdown menu publishes its trigger's width, for a menu as wide as its trigger: 'helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }'. **The choices in one place.** 'checkedValues' holds the values of the rows that are checked, anywhere in the menu, and setting it checks exactly those rows, as React Aria's 'selectedKeys' does. 'change' is sent on the menu when a reader's choice changes it. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. A touch or a pen held still on the area opens it too, on every browser, since iOS sends no 'contextmenu' for one. **One menu for many things.** 'for' names an area outside the menu, such as a table, and 'targets' says which things in it the menu is about, such as 'tr'. A request over one of them opens the menu with it as 'contextTarget', which a 'helix-before-open' listener reads to change the rows for it; a request over none of them is left to the page. 'showAt()' opens the menu at a point, for an area that finds what was pressed itself, such as a canvas. Shift with a right-click leaves the browser's own menu to the reader. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, and a press held for half a second opens the menu, as React Aria's 'trigger="longPress"' does. Alt+Down or Alt+Up opens it from the keyboard, and the trigger is described by 'long-press-label', which says so. **A filter field** is a separate import, '@fusion.dev/helix/menu/filter', so a menu that never filters carries none of its code: '''js import '@fusion.dev/helix/menu' import '@fusion.dev/helix/menu/filter' ''' With it imported and 'filterable' set, the menu opens with focus in a field above its rows, and typing narrows the rows of the page the keys move in, as React Aria's 'Autocomplete' around a 'Menu' does. A row is kept where its words hold the filter, in any case, or where 'filterMatch' says so. Each page starts unfiltered, and the filter is cleared as the menu closes. Where typing keeps no row, the menu shows 'no-results-text'. Focus stays in the field: Up and Down Arrow move the highlight through the rows that are left, Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow on a submenu goes back, and Escape clears the filter and then closes the menu. A screen reader hears how many rows the filter keeps ('results-label'). Home, End and the other keys move the caret and type. The field names the highlighted row with 'aria-activedescendant', and the rows are a 'menu' after the field. Cancel 'helix-filter' to keep every row showing and narrow the rows yourself, such as by replacing them with rows from a server. */
|
|
21618
22693
|
"helix-headless-menu": DefineCustomElement<
|
|
21619
22694
|
HelixHeadlessMenu,
|
|
21620
22695
|
HelixHeadlessMenuVueProps,
|
|
@@ -21782,6 +22857,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21782
22857
|
HelixHeadlessSelectVueProps,
|
|
21783
22858
|
HelixHeadlessSelectVueEvents
|
|
21784
22859
|
>;
|
|
22860
|
+
/** Place one in the app. Hold the platform's modifier, Command on an Apple keyboard and Control elsewhere, for 'delay' and a badge appears beside each control on screen that has a shortcut, with its keys and its name. Release the key and the badges go. Pressing any other key during the hold cancels it, so a reader pressing ⌘K never sees them. What a badge says comes from what the controls already carry: the 'aria-keyshortcuts' a Kbd's 'for' writes onto its control, a Menu Item's 'shortcut', and the hotkeys Command and Toast register. A control's name is its label. A shortcut with no control on screen, such as a palette's ⌘K, is listed in the sheet. Press '?' outside a text field, or call 'showSheet()', to open the sheet: a dialog listing every shortcut on the page by name, which is how a keyboard or screen reader user gets the same list. Set 'sheet-keys' to another chord, or to nothing to leave '?' to the page. Many apps, GitHub and Gmail among them, already give '?' to their own help, so a page that answers '?' itself opens both on one press. Such a page sets 'sheet-keys' to another chord, or to nothing and calls 'showSheet()' from its own handler. The badges are a picture of what the controls already expose, so they are hidden from assistive technology. */
|
|
22861
|
+
"helix-headless-shortcut-overlay": DefineCustomElement<
|
|
22862
|
+
HelixHeadlessShortcutOverlay,
|
|
22863
|
+
HelixHeadlessShortcutOverlayVueProps,
|
|
22864
|
+
HelixHeadlessShortcutOverlayVueEvents
|
|
22865
|
+
>;
|
|
21785
22866
|
/** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. **Put the real content inside and set 'loading', and the skeleton takes its size.** While 'loading' is set the content is inert, the host is 'aria-busy', and the styled tier hides the content and paints the placeholder over its box, so nothing moves when the content arrives. Take 'loading' off and the content is shown as it is. An empty skeleton is a placeholder of its own size, as before. */
|
|
21786
22867
|
"helix-headless-skeleton": DefineCustomElement<
|
|
21787
22868
|
HelixHeadlessSkeleton,
|
|
@@ -21998,7 +23079,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21998
23079
|
HelixHeadlessToastItemVueProps,
|
|
21999
23080
|
HelixHeadlessToastItemVueEvents
|
|
22000
23081
|
>;
|
|
22001
|
-
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is a landmark named by 'label', and it says each message once as it arrives**: a 'danger' message assertively, and every other one politely. It says the word for the tone, the heading, the description and the text, and not the actions, through two live regions of its own, the 'live' parts, which it empties again a moment later. The stack itself is not a live region, so a message is never said twice, and changing the words of a message already showing says nothing. Each message is an 'alertdialog' named by its words, so a reader who moves into the stack hears which message they are on. **'hotkey' takes focus to the stack and back**, F8 unless you set it, and 'label' says which key: '{hotkey}' in it is filled in, so the default name is "Notifications (F8)". Pressed while focus is in the stack, it gives focus back to where it was. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. **'add()' shows a message from script**, for a page with no framework state to render them from: it appends a message of the region's own tier and removes it once it has been dismissed and has finished leaving. Messages you render yourself stay yours, and the region never removes them. A touch or a pen swipes a message away toward the end of the line, or toward the edge 'swipe-direction' names. **Every message's timer waits while a pointer or focus is in the stack**, as React Aria's and Radix's regions do, so a reader moving from one message to the next does not lose the one behind them. **The stack is in the top layer.** The 'region' part is a 'popover="manual"' shown while a message is showing, and shown again above a modal dialog that opened after it. Position the 'region' part, which is the box in the top layer. While a modal 'Dialog', 'Drawer' or 'Lightbox' is open, the browser makes everything outside it inert, the stack included, so a message stays visible and its actions cannot be pressed. Where the browser has 'ariaNotify', a message that arrives then is announced through it. For a message with an action, render a second region inside the dialog. When a message with focus inside it is dismissed, focus moves to the next message, then the one before it, then back to where it was before it entered the stack. **'max-visible' limits how many messages show at once**, as Zag's 'max' does. The messages after that many, in document order, wait: each is hidden, its timer has not started, and the region says it once it shows, when a message before it goes. A waiting message has ':state(waiting)'. **Keyboard.** | Key | What it does | |---|---| | F8, or your 'hotkey' | Moves focus to the first control in the stack, and back to where it was when pressed in the stack. | | Tab, Shift+Tab | Moves between the controls of the messages. | | Escape | Dismisses the message holding focus. Focus moves to the next message, then the one before it, then back to where it was. | */
|
|
23082
|
+
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is a landmark named by 'label', and it says each message once as it arrives**: a 'danger' message assertively, and every other one politely. It says the word for the tone, the heading, the description and the text, and not the actions, through two live regions of its own, the 'live' parts, which it empties again a moment later. The stack itself is not a live region, so a message is never said twice, and changing the words of a message already showing says nothing. Each message is an 'alertdialog' named by its words, so a reader who moves into the stack hears which message they are on. **'hotkey' takes focus to the stack and back**, F8 unless you set it, and 'label' says which key: '{hotkey}' in it is filled in, so the default name is "Notifications (F8)". Pressed while focus is in the stack, it gives focus back to where it was. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. **'add()' shows a message from script**, for a page with no framework state to render them from: it appends a message of the region's own tier and removes it once it has been dismissed and has finished leaving. Messages you render yourself stay yours, and the region never removes them. A touch or a pen swipes a message away toward the end of the line, or toward the edge 'swipe-direction' names. **'undoable()' offers to take an action back**, which replaces a confirmation dialog for an action that can be undone: do the action, then call it. The message holds an Undo button and shows for 8 seconds, Command+Z (Control+Z elsewhere) undoes it while it shows, and a screen reader hears which keys do. Keep a confirmation for an action that cannot be taken back or that reaches someone else, such as sending or paying. **Every message's timer waits while a pointer or focus is in the stack**, as React Aria's and Radix's regions do, so a reader moving from one message to the next does not lose the one behind them. **The stack is in the top layer.** The 'region' part is a 'popover="manual"' shown while a message is showing, and shown again above a modal dialog that opened after it. Position the 'region' part, which is the box in the top layer. While a modal 'Dialog', 'Drawer' or 'Lightbox' is open, the browser makes everything outside it inert, the stack included, so a message stays visible and its actions cannot be pressed. Where the browser has 'ariaNotify', a message that arrives then is announced through it. For a message with an action, render a second region inside the dialog. When a message with focus inside it is dismissed, focus moves to the next message, then the one before it, then back to where it was before it entered the stack. **'max-visible' limits how many messages show at once**, as Zag's 'max' does. The messages after that many, in document order, wait: each is hidden, its timer has not started, and the region says it once it shows, when a message before it goes. A waiting message has ':state(waiting)'. **Keyboard.** | Key | What it does | |---|---| | Command+Z, or Control+Z elsewhere, or your 'undo-keys' | Undoes the newest message 'undoable()' made, while it shows, while focus is not in a text field, and where the app has not handled the key. | | F8, or your 'hotkey' | Moves focus to the first control in the stack, and back to where it was when pressed in the stack. | | Tab, Shift+Tab | Moves between the controls of the messages. | | Escape | Dismisses the message holding focus. Focus moves to the next message, then the one before it, then back to where it was. | */
|
|
22002
23083
|
"helix-headless-toast": DefineCustomElement<
|
|
22003
23084
|
HelixHeadlessToast,
|
|
22004
23085
|
HelixHeadlessToastVueProps,
|