@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.
Files changed (113) hide show
  1. package/api.json +1 -1
  2. package/custom-elements.json +1 -1
  3. package/dist/area-chart/root/area-chart-root.d.ts +1 -0
  4. package/dist/area-chart/root/area-chart-root.js +1 -1
  5. package/dist/bar-chart/root/bar-chart-root.d.ts +1 -0
  6. package/dist/bar-chart/root/bar-chart-root.js +1 -1
  7. package/dist/button/root/button-root.d.ts +3 -1
  8. package/dist/button/root/button-root.js +2 -1
  9. package/dist/chat/composer/chat-composer.d.ts +18 -1
  10. package/dist/chat/composer/chat-composer.js +8 -3
  11. package/dist/checkbox/root/checkbox-root.d.ts +3 -1
  12. package/dist/checkbox/root/checkbox-root.js +2 -1
  13. package/dist/code-block/highlight.d.ts +9 -0
  14. package/dist/code-block/highlight.js +39 -0
  15. package/dist/code-block/highlighter.d.ts +44 -0
  16. package/dist/code-block/highlighter.js +44 -0
  17. package/dist/code-block/index.d.ts +1 -0
  18. package/dist/code-block/index.js +1 -0
  19. package/dist/code-block/keyed-lines.d.ts +23 -0
  20. package/dist/code-block/keyed-lines.js +75 -0
  21. package/dist/code-block/root/code-block-root.d.ts +6 -23
  22. package/dist/code-block/root/code-block-root.js +8 -25
  23. package/dist/code-editor/index.d.ts +1 -0
  24. package/dist/code-editor/index.js +1 -0
  25. package/dist/code-editor/root/code-editor-root.d.ts +367 -0
  26. package/dist/code-editor/root/code-editor-root.js +746 -0
  27. package/dist/code-input/index.d.ts +1 -0
  28. package/dist/code-input/index.js +1 -0
  29. package/dist/code-input/root/code-input-root.d.ts +119 -0
  30. package/dist/code-input/root/code-input-root.js +142 -0
  31. package/dist/combobox/root/combobox-root.d.ts +6 -1
  32. package/dist/combobox/root/combobox-root.js +4 -2
  33. package/dist/command/root/command-root.d.ts +61 -11
  34. package/dist/command/root/command-root.js +88 -3
  35. package/dist/donut-chart/root/donut-chart-root.d.ts +1 -0
  36. package/dist/donut-chart/root/donut-chart-root.js +1 -1
  37. package/dist/element-events.generated.js +36 -3
  38. package/dist/filter-input/root/filter-input-root.d.ts +9 -1
  39. package/dist/filter-input/root/filter-input-root.js +7 -3
  40. package/dist/heatmap/root/heatmap-root.d.ts +1 -0
  41. package/dist/heatmap/root/heatmap-root.js +1 -1
  42. package/dist/index.d.ts +4 -0
  43. package/dist/index.js +4 -0
  44. package/dist/input/root/input-root.d.ts +14 -2
  45. package/dist/input/root/input-root.js +11 -3
  46. package/dist/kbd/root/kbd-root.js +9 -2
  47. package/dist/line-chart/root/line-chart-root.d.ts +1 -0
  48. package/dist/line-chart/root/line-chart-root.js +1 -1
  49. package/dist/listbox/root/listbox-root.d.ts +8 -1
  50. package/dist/listbox/root/listbox-root.js +7 -4
  51. package/dist/markdown/blocks.d.ts +66 -0
  52. package/dist/markdown/blocks.js +326 -0
  53. package/dist/markdown/index.d.ts +6 -0
  54. package/dist/markdown/index.js +5 -0
  55. package/dist/markdown/inline.d.ts +57 -0
  56. package/dist/markdown/inline.js +483 -0
  57. package/dist/markdown/root/markdown-root.d.ts +99 -0
  58. package/dist/markdown/root/markdown-root.js +93 -0
  59. package/dist/markdown/stream.d.ts +47 -0
  60. package/dist/markdown/stream.js +62 -0
  61. package/dist/markdown/tree.d.ts +57 -0
  62. package/dist/markdown/tree.js +144 -0
  63. package/dist/markdown/writer.d.ts +33 -0
  64. package/dist/markdown/writer.js +139 -0
  65. package/dist/menu/root/menu-root.d.ts +53 -0
  66. package/dist/menu/root/menu-root.js +92 -15
  67. package/dist/pagination/size/pagination-size.d.ts +3 -0
  68. package/dist/pagination/size/pagination-size.js +2 -1
  69. package/dist/scatter-chart/root/scatter-chart-root.d.ts +1 -0
  70. package/dist/scatter-chart/root/scatter-chart-root.js +1 -1
  71. package/dist/select/root/select-root.d.ts +6 -1
  72. package/dist/select/root/select-root.js +4 -2
  73. package/dist/shortcut-overlay/index.d.ts +1 -0
  74. package/dist/shortcut-overlay/index.js +1 -0
  75. package/dist/shortcut-overlay/root/shortcut-overlay-root.d.ts +128 -0
  76. package/dist/shortcut-overlay/root/shortcut-overlay-root.js +275 -0
  77. package/dist/slider/root/slider-root.d.ts +3 -1
  78. package/dist/slider/root/slider-root.js +2 -1
  79. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.d.ts +1 -0
  80. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.js +1 -1
  81. package/dist/spatial-heatmap/root/spatial-heatmap-root.d.ts +1 -0
  82. package/dist/spatial-heatmap/root/spatial-heatmap-root.js +1 -1
  83. package/dist/spatial-ribbon-chart/root/spatial-ribbon-chart-root.d.ts +1 -0
  84. package/dist/spatial-ribbon-chart/root/spatial-ribbon-chart-root.js +1 -1
  85. package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.d.ts +1 -0
  86. package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.js +1 -1
  87. package/dist/spatial-surface-chart/root/spatial-surface-chart-root.d.ts +1 -0
  88. package/dist/spatial-surface-chart/root/spatial-surface-chart-root.js +1 -1
  89. package/dist/spatial-treemap/root/spatial-treemap-root.d.ts +1 -0
  90. package/dist/spatial-treemap/root/spatial-treemap-root.js +1 -1
  91. package/dist/switch/root/switch-root.d.ts +3 -1
  92. package/dist/switch/root/switch-root.js +2 -1
  93. package/dist/tabs/tab/tab.d.ts +3 -1
  94. package/dist/tabs/tab/tab.js +2 -1
  95. package/dist/textarea/root/textarea-root.d.ts +20 -4
  96. package/dist/textarea/root/textarea-root.js +31 -23
  97. package/dist/time-input/root/time-input-root.d.ts +6 -0
  98. package/dist/time-input/root/time-input-root.js +4 -2
  99. package/dist/time-picker/root/time-picker-root.d.ts +6 -0
  100. package/dist/time-picker/root/time-picker-root.js +4 -2
  101. package/dist/toast/root/toast-root.d.ts +64 -0
  102. package/dist/toast/root/toast-root.js +128 -3
  103. package/dist/toggle/root/toggle-root.d.ts +3 -1
  104. package/dist/toggle/root/toggle-root.js +2 -1
  105. package/dist/virtual-list/root/virtual-list-root.d.ts +18 -2
  106. package/dist/virtual-list/root/virtual-list-root.js +103 -5
  107. package/examples.json +1 -1
  108. package/lint.json +1 -1
  109. package/package.json +6 -6
  110. package/types/jsx.d.ts +5315 -596
  111. package/types/svelte.d.ts +4 -0
  112. package/types/vue.d.ts +1085 -4
  113. 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 commands are an import of their own.** A command is an option, the Option family's, which the palette does not register, so a page that writes one imports it beside the palette: '''js import '@fusion.dev/helix/command' import '@fusion.dev/helix/option' ''' In development, a palette holding an option nobody registered says so once the page has loaded, with the line to add. */
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,