@fusion.dev/helix-headless 0.154.0 → 0.156.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +3213 -179
- package/dist/accordion/item/accordion-item.d.ts +15 -0
- package/dist/accordion/item/accordion-item.js +12 -1
- package/dist/accordion/root/accordion-root.d.ts +2 -1
- package/dist/accordion/root/accordion-root.js +1 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +36 -3
- package/dist/breadcrumbs/breadcrumb/breadcrumb.js +42 -2
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +15 -5
- package/dist/breadcrumbs/root/breadcrumbs-root.js +29 -4
- package/dist/button-group/root/button-group-root.d.ts +2 -0
- package/dist/button-group/root/button-group-root.js +1 -0
- package/dist/canvas/node/canvas-node.js +1 -1
- package/dist/canvas/root/canvas-root.d.ts +17 -2
- package/dist/canvas/root/canvas-root.js +23 -6
- package/dist/chat/composer/chat-composer.js +1 -1
- package/dist/chat/root/chat-root.d.ts +14 -1
- package/dist/chat/root/chat-root.js +14 -4
- package/dist/color-input/root/color-input-root.d.ts +9 -3
- package/dist/color-input/root/color-input-root.js +3 -1
- package/dist/color-picker/channels.d.ts +5 -3
- package/dist/color-picker/channels.js +79 -21
- package/dist/color-picker/root/color-picker-root.d.ts +58 -5
- package/dist/color-picker/root/color-picker-root.js +75 -13
- package/dist/combobox/root/combobox-root.d.ts +10 -0
- package/dist/combobox/root/combobox-root.js +18 -3
- package/dist/command/root/command-root.d.ts +116 -1
- package/dist/command/root/command-root.js +124 -15
- package/dist/data-table/root/data-table-root.d.ts +25 -0
- package/dist/data-table/root/data-table-root.js +13 -3
- package/dist/date-input/root/date-input-root.d.ts +33 -1
- package/dist/date-input/root/date-input-root.js +9 -2
- package/dist/date-picker/root/date-picker-root.d.ts +43 -13
- package/dist/date-picker/root/date-picker-root.js +54 -31
- package/dist/element-events.generated.js +3 -1
- package/dist/graph/root/graph-root.d.ts +13 -0
- package/dist/graph/root/graph-root.js +16 -0
- package/dist/list/root/list-root.d.ts +74 -1
- package/dist/list/root/list-root.js +92 -4
- package/dist/list/selection.js +3 -3
- package/dist/map/root/map-root.d.ts +6 -0
- package/dist/map/root/map-root.js +8 -1
- package/dist/navigation/root/navigation-root.d.ts +26 -0
- package/dist/navigation/root/navigation-root.js +58 -1
- package/dist/number-input/root/number-input-root.d.ts +63 -6
- package/dist/number-input/root/number-input-root.js +96 -11
- package/dist/object-inspector/root/object-inspector-root.d.ts +36 -1
- package/dist/object-inspector/root/object-inspector-root.js +26 -2
- package/dist/option/root/option-root.d.ts +32 -0
- package/dist/option/root/option-root.js +44 -5
- package/dist/outline/root/outline-root.d.ts +6 -2
- package/dist/outline/root/outline-root.js +7 -3
- package/dist/select/root/select-root.d.ts +29 -3
- package/dist/select/root/select-root.js +34 -9
- package/dist/slider/root/slider-root.d.ts +71 -9
- package/dist/slider/root/slider-root.js +129 -42
- package/dist/speed-dial/item/speed-dial-item.d.ts +29 -1
- package/dist/speed-dial/item/speed-dial-item.js +48 -7
- package/dist/speed-dial/root/speed-dial-root.d.ts +32 -6
- package/dist/speed-dial/root/speed-dial-root.js +50 -5
- package/dist/splitter/root/splitter-root.d.ts +22 -0
- package/dist/splitter/root/splitter-root.js +36 -7
- package/dist/steps/reach.d.ts +5 -1
- package/dist/steps/reach.js +2 -2
- package/dist/steps/root/steps-root.d.ts +37 -2
- package/dist/steps/root/steps-root.js +49 -7
- package/dist/steps/step/step.d.ts +6 -0
- package/dist/steps/step/step.js +4 -0
- package/dist/table/root/table-root.d.ts +20 -0
- package/dist/table/root/table-root.js +13 -3
- package/dist/tabs/root/tabs-root.d.ts +37 -0
- package/dist/tabs/root/tabs-root.js +92 -2
- package/dist/tabs/tab/tab.d.ts +38 -2
- package/dist/tabs/tab/tab.js +45 -4
- package/dist/tag/group/tag-group.d.ts +29 -3
- package/dist/tag/group/tag-group.js +42 -11
- package/dist/time-input/root/time-input-root.d.ts +32 -1
- package/dist/time-input/root/time-input-root.js +9 -2
- package/dist/time-picker/root/time-picker-root.d.ts +63 -1
- package/dist/time-picker/root/time-picker-root.js +58 -7
- package/dist/timeline/item/timeline-item.d.ts +25 -0
- package/dist/timeline/item/timeline-item.js +27 -2
- package/dist/toggle/root/toggle-root.d.ts +2 -0
- package/dist/toggle/root/toggle-root.js +1 -1
- package/dist/tree/item/tree-item.d.ts +10 -0
- package/dist/tree/item/tree-item.js +12 -0
- package/dist/tree/root/tree-root.d.ts +40 -1
- package/dist/tree/root/tree-root.js +120 -4
- package/dist/tree/selection.d.ts +6 -0
- package/dist/tree/selection.js +11 -0
- package/dist/video/root/keys.d.ts +6 -2
- package/dist/video/root/keys.js +18 -1
- package/dist/video/root/video-root.d.ts +60 -1
- package/dist/video/root/video-root.js +70 -2
- package/dist/video-playlist/item/video-playlist-item.d.ts +15 -1
- package/dist/video-playlist/item/video-playlist-item.js +7 -0
- package/dist/video-playlist/root/video-playlist-root.d.ts +43 -4
- package/dist/video-playlist/root/video-playlist-root.js +69 -2
- package/dist/virtual-list/root/virtual-list-root.d.ts +8 -0
- package/dist/virtual-list/root/virtual-list-root.js +3 -0
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +3885 -383
- package/types/vue.d.ts +1045 -107
- package/types/words.d.ts +146 -1
package/types/vue.d.ts
CHANGED
|
@@ -177,6 +177,7 @@ import type {
|
|
|
177
177
|
HelixScrolledEvent,
|
|
178
178
|
HelixReadingChangeEvent,
|
|
179
179
|
HelixReadingPressEvent,
|
|
180
|
+
HelixSelectEvent,
|
|
180
181
|
HelixBeforeChangeEvent,
|
|
181
182
|
HelixPressEvent,
|
|
182
183
|
HelixBeforeMoveEvent,
|
|
@@ -191,7 +192,6 @@ import type {
|
|
|
191
192
|
HelixReconnectEvent,
|
|
192
193
|
HelixRelabelEvent,
|
|
193
194
|
HelixRemoveEvent,
|
|
194
|
-
HelixSelectEvent,
|
|
195
195
|
HelixActivateEvent,
|
|
196
196
|
HelixSendEvent,
|
|
197
197
|
HelixTypingEvent,
|
|
@@ -1148,6 +1148,15 @@ element's language. Leave the marks out of the text. */
|
|
|
1148
1148
|
|
|
1149
1149
|
export type HelixHeadlessBlockquoteVueEvents = {};
|
|
1150
1150
|
|
|
1151
|
+
/** `HelixHeadlessBreadcrumb` component event */
|
|
1152
|
+
export type HelixHeadlessBreadcrumbElementEvent<E = Event> = TypedEvent<
|
|
1153
|
+
HelixHeadlessBreadcrumb,
|
|
1154
|
+
E
|
|
1155
|
+
>;
|
|
1156
|
+
/** `helix-select` event type */
|
|
1157
|
+
export type HelixHeadlessBreadcrumbHelixSelectElementEvent =
|
|
1158
|
+
HelixHeadlessBreadcrumbElementEvent<HelixSelectEvent>;
|
|
1159
|
+
|
|
1151
1160
|
export type HelixHeadlessBreadcrumbVueProps = {
|
|
1152
1161
|
/** Marks this item as the page you are on. */
|
|
1153
1162
|
current?: (HelixHeadlessBreadcrumb["current"]) | undefined;
|
|
@@ -1177,7 +1186,10 @@ The consumer's decision. */
|
|
|
1177
1186
|
target?: (HelixHeadlessBreadcrumb["target"]) | undefined;
|
|
1178
1187
|
};
|
|
1179
1188
|
|
|
1180
|
-
export type HelixHeadlessBreadcrumbVueEvents = {
|
|
1189
|
+
export type HelixHeadlessBreadcrumbVueEvents = {
|
|
1190
|
+
/** A plain press on the crumb's link, with its `href` as the value, before the browser follows it. Cancelable: cancel it to keep the browser from following, as a client-side router does. */
|
|
1191
|
+
"helix-select": HelixHeadlessBreadcrumbHelixSelectElementEvent;
|
|
1192
|
+
};
|
|
1181
1193
|
|
|
1182
1194
|
export type HelixHeadlessBreadcrumbsVueProps = {
|
|
1183
1195
|
/** The name of the button that shows a folded trail's hidden crumbs. `{count}`
|
|
@@ -1857,13 +1869,22 @@ units. */
|
|
|
1857
1869
|
card and `{width}` and `{height}` for its new size, in the document's
|
|
1858
1870
|
units. */
|
|
1859
1871
|
resizedLabel?: (HelixHeadlessCanvas["resizedLabel"]) | undefined;
|
|
1872
|
+
/** What a screen reader calls the board in place of its role, after its
|
|
1873
|
+
name: "Release plan, canvas". Said only where the board has a name of its
|
|
1874
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
1875
|
+
"role-label"?: (HelixHeadlessCanvas["roleLabel"]) | undefined;
|
|
1876
|
+
/** What a screen reader calls the board in place of its role, after its
|
|
1877
|
+
name: "Release plan, canvas". Said only where the board has a name of its
|
|
1878
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
1879
|
+
roleLabel?: (HelixHeadlessCanvas["roleLabel"]) | undefined;
|
|
1860
1880
|
/** The names of the selected cards and connections, comma separated. Empty
|
|
1861
1881
|
when nothing is selected.
|
|
1862
1882
|
|
|
1863
1883
|
**Comma separated, the way `Listbox` writes a multiple value**, so a page
|
|
1864
1884
|
reads one selection the same way wherever it comes from. A click, or a key
|
|
1865
|
-
that lands on one, selects it alone;
|
|
1866
|
-
|
|
1885
|
+
that lands on one, selects it alone; Command or Control with an arrow key
|
|
1886
|
+
moves without selecting; Shift, Command or Control with a click adds or
|
|
1887
|
+
takes one away, and so does Space; Command or Control with A
|
|
1867
1888
|
selects everything; Shift and a drag across the empty board selects the
|
|
1868
1889
|
cards the box touches. A click on the empty board, or Escape, selects
|
|
1869
1890
|
nothing. Dragging, Shift with an arrow, and Delete act on the whole
|
|
@@ -2625,6 +2646,16 @@ export type HelixHeadlessChatHelixSendElementEvent =
|
|
|
2625
2646
|
HelixHeadlessChatElementEvent<HelixSendEvent>;
|
|
2626
2647
|
|
|
2627
2648
|
export type HelixHeadlessChatVueProps = {
|
|
2649
|
+
/** What a screen reader hears when a turn arrives. `{author}` is who wrote
|
|
2650
|
+
it, as its name says it, and `{text}` its words. A turn with no author a
|
|
2651
|
+
reader can be told, a turn by `them` with no `author-label`, says its
|
|
2652
|
+
words alone. */
|
|
2653
|
+
"arrival-label"?: (HelixHeadlessChat["arrivalLabel"]) | undefined;
|
|
2654
|
+
/** What a screen reader hears when a turn arrives. `{author}` is who wrote
|
|
2655
|
+
it, as its name says it, and `{text}` its words. A turn with no author a
|
|
2656
|
+
reader can be told, a turn by `them` with no `author-label`, says its
|
|
2657
|
+
words alone. */
|
|
2658
|
+
arrivalLabel?: (HelixHeadlessChat["arrivalLabel"]) | undefined;
|
|
2628
2659
|
/** Declarations for the turns from `turns` by each author, keyed by `author`,
|
|
2629
2660
|
as JSON in the attribute: `{"ada": "--chat-message-background-color: …"}`.
|
|
2630
2661
|
|
|
@@ -2808,8 +2839,36 @@ locale. */
|
|
|
2808
2839
|
Absent, or empty, is this sentence, or the words registered for the page's
|
|
2809
2840
|
locale. */
|
|
2810
2841
|
valueMissingMessage?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
|
|
2811
|
-
/**
|
|
2812
|
-
|
|
2842
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
2843
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
2844
|
+
names the control inside, and a new one renders at once.
|
|
2845
|
+
|
|
2846
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
2847
|
+
render it again.** It is the platform's attribute and no property of this
|
|
2848
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
2849
|
+
the old words. Data Table meets this on every column move: each row's
|
|
2850
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
2851
|
+
|
|
2852
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
2853
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
2854
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
2855
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
2856
|
+
"aria-label"?: (HelixHeadlessCheckboxGroup["namedBy"]) | undefined;
|
|
2857
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
2858
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
2859
|
+
names the control inside, and a new one renders at once.
|
|
2860
|
+
|
|
2861
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
2862
|
+
render it again.** It is the platform's attribute and no property of this
|
|
2863
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
2864
|
+
the old words. Data Table meets this on every column move: each row's
|
|
2865
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
2866
|
+
|
|
2867
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
2868
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
2869
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
2870
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
2871
|
+
namedBy?: (HelixHeadlessCheckboxGroup["namedBy"]) | undefined;
|
|
2813
2872
|
/** The validation message shown under the control. It replaces the
|
|
2814
2873
|
browser's message. */
|
|
2815
2874
|
feedback?: (HelixHeadlessCheckboxGroup["feedback"]) | undefined;
|
|
@@ -2929,8 +2988,36 @@ was, and the control says `aria-readonly`. A script can still set
|
|
|
2929
2988
|
The attribute is `readonly`, which is the platform's spelling for the
|
|
2930
2989
|
text fields. */
|
|
2931
2990
|
readOnly?: (HelixHeadlessCheckbox["readOnly"]) | undefined;
|
|
2932
|
-
/**
|
|
2933
|
-
|
|
2991
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
2992
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
2993
|
+
names the control inside, and a new one renders at once.
|
|
2994
|
+
|
|
2995
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
2996
|
+
render it again.** It is the platform's attribute and no property of this
|
|
2997
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
2998
|
+
the old words. Data Table meets this on every column move: each row's
|
|
2999
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3000
|
+
|
|
3001
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3002
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3003
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3004
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3005
|
+
"aria-label"?: (HelixHeadlessCheckbox["namedBy"]) | undefined;
|
|
3006
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
3007
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
3008
|
+
names the control inside, and a new one renders at once.
|
|
3009
|
+
|
|
3010
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
3011
|
+
render it again.** It is the platform's attribute and no property of this
|
|
3012
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
3013
|
+
the old words. Data Table meets this on every column move: each row's
|
|
3014
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3015
|
+
|
|
3016
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3017
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3018
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3019
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3020
|
+
namedBy?: (HelixHeadlessCheckbox["namedBy"]) | undefined;
|
|
2934
3021
|
/** The validation message shown under the control. It replaces the
|
|
2935
3022
|
browser's message. */
|
|
2936
3023
|
feedback?: (HelixHeadlessCheckbox["feedback"]) | undefined;
|
|
@@ -3188,7 +3275,8 @@ Passed to the panel, whose square, hue ramp and presets say the color's
|
|
|
3188
3275
|
name, and read by the swatch in `swatch`, which says it before the value.
|
|
3189
3276
|
Color Picker lists the keys. */
|
|
3190
3277
|
colorWords?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
3191
|
-
/** The syntax the value is written in: `hex`, `rgb`,
|
|
3278
|
+
/** The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or
|
|
3279
|
+
`hsb`, as Color Picker's `format`.
|
|
3192
3280
|
|
|
3193
3281
|
**Undefaulted, because it reflects.** The two together stamp an attribute
|
|
3194
3282
|
onto every host anybody renders, including the ones nobody configured: the
|
|
@@ -3295,8 +3383,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
3295
3383
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
3296
3384
|
a reset should return to. */
|
|
3297
3385
|
value?: (HelixHeadlessColorInput["value"]) | undefined;
|
|
3298
|
-
/**
|
|
3299
|
-
|
|
3386
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
3387
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
3388
|
+
names the control inside, and a new one renders at once.
|
|
3389
|
+
|
|
3390
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
3391
|
+
render it again.** It is the platform's attribute and no property of this
|
|
3392
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
3393
|
+
the old words. Data Table meets this on every column move: each row's
|
|
3394
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3395
|
+
|
|
3396
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3397
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3398
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3399
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3400
|
+
"aria-label"?: (HelixHeadlessColorInput["namedBy"]) | undefined;
|
|
3401
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
3402
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
3403
|
+
names the control inside, and a new one renders at once.
|
|
3404
|
+
|
|
3405
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
3406
|
+
render it again.** It is the platform's attribute and no property of this
|
|
3407
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
3408
|
+
the old words. Data Table meets this on every column move: each row's
|
|
3409
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
3410
|
+
|
|
3411
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
3412
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
3413
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
3414
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
3415
|
+
namedBy?: (HelixHeadlessColorInput["namedBy"]) | undefined;
|
|
3300
3416
|
/** The validation message shown under the control. It replaces the
|
|
3301
3417
|
browser's message. */
|
|
3302
3418
|
feedback?: (HelixHeadlessColorInput["feedback"]) | undefined;
|
|
@@ -3423,8 +3539,9 @@ language hears its own rather than English between its own labels. */
|
|
|
3423
3539
|
brightnessLabel?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
|
|
3424
3540
|
/** Whether the picker shows a number field for each channel of the color, as
|
|
3425
3541
|
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
3426
|
-
and rgb, hue, saturation and lightness for hsl,
|
|
3427
|
-
|
|
3542
|
+
and rgb, hue, saturation and lightness for hsl, hue, saturation and
|
|
3543
|
+
brightness for hsb, lightness, chroma and hue for oklch, and the opacity
|
|
3544
|
+
with `alpha`.
|
|
3428
3545
|
|
|
3429
3546
|
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
3430
3547
|
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
@@ -3432,13 +3549,20 @@ the syntax the format toggle sets. */
|
|
|
3432
3549
|
"channel-fields"?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
3433
3550
|
/** Whether the picker shows a number field for each channel of the color, as
|
|
3434
3551
|
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
3435
|
-
and rgb, hue, saturation and lightness for hsl,
|
|
3436
|
-
|
|
3552
|
+
and rgb, hue, saturation and lightness for hsl, hue, saturation and
|
|
3553
|
+
brightness for hsb, lightness, chroma and hue for oklch, and the opacity
|
|
3554
|
+
with `alpha`.
|
|
3437
3555
|
|
|
3438
3556
|
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
3439
3557
|
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
3440
3558
|
the syntax the format toggle sets. */
|
|
3441
3559
|
channelFields?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
3560
|
+
/** What the chroma channel's field is called, in `channel-fields` with
|
|
3561
|
+
oklch. */
|
|
3562
|
+
"chroma-label"?: (HelixHeadlessColorPicker["chromaLabel"]) | undefined;
|
|
3563
|
+
/** What the chroma channel's field is called, in `channel-fields` with
|
|
3564
|
+
oklch. */
|
|
3565
|
+
chromaLabel?: (HelixHeadlessColorPicker["chromaLabel"]) | undefined;
|
|
3442
3566
|
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
3443
3567
|
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
3444
3568
|
|
|
@@ -3479,10 +3603,16 @@ the color. */
|
|
|
3479
3603
|
"eyedropper-label"?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
|
|
3480
3604
|
/** What the eyedropper is called. */
|
|
3481
3605
|
eyedropperLabel?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
|
|
3482
|
-
/** The syntax the value is written in: `hex`, `rgb`,
|
|
3606
|
+
/** The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or
|
|
3607
|
+
`hsb`.
|
|
3483
3608
|
|
|
3484
3609
|
Only what is written. Everything is read whatever this says, so a picker on
|
|
3485
|
-
`hex` still takes an `rgb()` handed to it and stores the
|
|
3610
|
+
`hex` still takes an `rgb()` or an `oklch()` handed to it and stores the
|
|
3611
|
+
hex for it. `oklch` writes the sRGB color the picker holds, such as
|
|
3612
|
+
`oklch(62.8% 0.258 29.2)`; a color outside sRGB that is handed in is
|
|
3613
|
+
clipped to it. `hsb` writes the picker's own model, `hsb(0, 100%, 100%)`,
|
|
3614
|
+
as React Aria's and Zag's color strings do. It is not CSS, so the toggle
|
|
3615
|
+
walks the other four. */
|
|
3486
3616
|
format?: (HelixHeadlessColorPicker["format"]) | undefined;
|
|
3487
3617
|
/** What the syntax toggle is called, with `{format}` filled in. */
|
|
3488
3618
|
"format-label"?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
@@ -3492,15 +3622,21 @@ Only what is written. Everything is read whatever this says, so a picker on
|
|
|
3492
3622
|
"green-label"?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
3493
3623
|
/** What the green channel's field is called, in `channel-fields`. */
|
|
3494
3624
|
greenLabel?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
3625
|
+
/** Help under the picker, such as what the color is used for. The `hint`
|
|
3626
|
+
slot takes richer content. */
|
|
3627
|
+
hint?: (HelixHeadlessColorPicker["hint"]) | undefined;
|
|
3495
3628
|
/** What the hue channel is called. */
|
|
3496
3629
|
"hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
3497
3630
|
/** What the hue channel is called. */
|
|
3498
3631
|
hueLabel?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
3632
|
+
/** The name above the picker, such as "Brand color". The picker is then a
|
|
3633
|
+
group with this name. The `label` slot takes richer content. */
|
|
3634
|
+
label?: (HelixHeadlessColorPicker["label"]) | undefined;
|
|
3499
3635
|
/** What the lightness channel's field is called, in `channel-fields` with
|
|
3500
|
-
hsl. */
|
|
3636
|
+
hsl and oklch. */
|
|
3501
3637
|
"lightness-label"?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
3502
3638
|
/** What the lightness channel's field is called, in `channel-fields` with
|
|
3503
|
-
hsl. */
|
|
3639
|
+
hsl and oklch. */
|
|
3504
3640
|
lightnessLabel?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
3505
3641
|
/** Hides the eyedropper. Without it, the eyedropper appears in browsers that
|
|
3506
3642
|
support one. */
|
|
@@ -3844,6 +3980,22 @@ delay sends one request for a word instead of one per letter. The arrow
|
|
|
3844
3980
|
keys, Enter and Escape narrow at once on what was typed. `0` narrows on
|
|
3845
3981
|
every keystroke. See Listbox's `filter-delay`. */
|
|
3846
3982
|
filterDelay?: (HelixHeadlessCombobox["filterDelay"]) | undefined;
|
|
3983
|
+
/** What the form receives for each chosen option: `key`, its `value`, or
|
|
3984
|
+
`text`, its words, as React Aria's ComboBox `formValue` offers.
|
|
3985
|
+
|
|
3986
|
+
`text` is for a server that wants what the reader saw, such as a city's
|
|
3987
|
+
name. A value no option carries, typed with `allows-custom-value` or made
|
|
3988
|
+
with `creatable`, is sent as it is either way. Absent is `key`, and the
|
|
3989
|
+
host carries no attribute for it. */
|
|
3990
|
+
"form-value"?: (HelixHeadlessCombobox["formValue"]) | undefined;
|
|
3991
|
+
/** What the form receives for each chosen option: `key`, its `value`, or
|
|
3992
|
+
`text`, its words, as React Aria's ComboBox `formValue` offers.
|
|
3993
|
+
|
|
3994
|
+
`text` is for a server that wants what the reader saw, such as a city's
|
|
3995
|
+
name. A value no option carries, typed with `allows-custom-value` or made
|
|
3996
|
+
with `creatable`, is sent as it is either way. Absent is `key`, and the
|
|
3997
|
+
host carries no attribute for it. */
|
|
3998
|
+
formValue?: (HelixHeadlessCombobox["formValue"]) | undefined;
|
|
3847
3999
|
/** The list's name, read by screen readers. The list has no visible name. */
|
|
3848
4000
|
"list-label"?: (HelixHeadlessCombobox["listLabel"]) | undefined;
|
|
3849
4001
|
/** The list's name, read by screen readers. The list has no visible name. */
|
|
@@ -4020,8 +4172,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
4020
4172
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
4021
4173
|
a reset should return to. */
|
|
4022
4174
|
value?: (HelixHeadlessCombobox["value"]) | undefined;
|
|
4023
|
-
/**
|
|
4024
|
-
|
|
4175
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
4176
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
4177
|
+
names the control inside, and a new one renders at once.
|
|
4178
|
+
|
|
4179
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
4180
|
+
render it again.** It is the platform's attribute and no property of this
|
|
4181
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
4182
|
+
the old words. Data Table meets this on every column move: each row's
|
|
4183
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
4184
|
+
|
|
4185
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
4186
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
4187
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
4188
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
4189
|
+
"aria-label"?: (HelixHeadlessCombobox["namedBy"]) | undefined;
|
|
4190
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
4191
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
4192
|
+
names the control inside, and a new one renders at once.
|
|
4193
|
+
|
|
4194
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
4195
|
+
render it again.** It is the platform's attribute and no property of this
|
|
4196
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
4197
|
+
the old words. Data Table meets this on every column move: each row's
|
|
4198
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
4199
|
+
|
|
4200
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
4201
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
4202
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
4203
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
4204
|
+
namedBy?: (HelixHeadlessCombobox["namedBy"]) | undefined;
|
|
4025
4205
|
/** The validation message shown under the control. It replaces the
|
|
4026
4206
|
browser's message. */
|
|
4027
4207
|
feedback?: (HelixHeadlessCombobox["feedback"]) | undefined;
|
|
@@ -4133,6 +4313,13 @@ Empty turns it off, for a consumer who opens the palette from a button or
|
|
|
4133
4313
|
from their own shortcut handler. There is no list of defaults to fight
|
|
4134
4314
|
with: one key, said once. */
|
|
4135
4315
|
hotkey?: (HelixHeadlessCommand["hotkey"]) | undefined;
|
|
4316
|
+
/** Draws the palette in the page, where it stands, with no dialog: a search
|
|
4317
|
+
over a list of commands, as React Aria's Autocomplete is drawn.
|
|
4318
|
+
|
|
4319
|
+
The list is always shown, and `hotkey` puts focus in its filter field.
|
|
4320
|
+
Choosing a command says `helix-select` and leaves the list where it is,
|
|
4321
|
+
and `open`, `toggle` and the dialog's parts do nothing. */
|
|
4322
|
+
inline?: (HelixHeadlessCommand["inline"]) | undefined;
|
|
4136
4323
|
/** Accessible name for the overlay, which has no visible heading. */
|
|
4137
4324
|
label?: (HelixHeadlessCommand["label"]) | undefined;
|
|
4138
4325
|
/** What the list says when its commands could not be loaded, such as after a
|
|
@@ -4160,6 +4347,15 @@ some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
|
4160
4347
|
/** The text shown when typing hides every one of the commands, where there are
|
|
4161
4348
|
some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
4162
4349
|
noResultsText?: (HelixHeadlessCommand["noResultsText"]) | undefined;
|
|
4350
|
+
/** The page of commands shown, by name: empty for the commands you write
|
|
4351
|
+
with no `slot`, or a name for the commands slotted as `page:` and the
|
|
4352
|
+
name, such as `slot="page:theme"`.
|
|
4353
|
+
|
|
4354
|
+
An option with `opens` set to a name goes to that page when it is chosen,
|
|
4355
|
+
in place of running, and Backspace in an empty filter goes back to the
|
|
4356
|
+
page before. Closing the palette goes back to the first page. Set it to
|
|
4357
|
+
open the palette on a page of your choosing. */
|
|
4358
|
+
page?: (HelixHeadlessCommand["page"]) | undefined;
|
|
4163
4359
|
/** The text shown in the filter field before anything is typed. */
|
|
4164
4360
|
placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
|
|
4165
4361
|
/** What a screen reader hears when typing leaves one command, where
|
|
@@ -4195,6 +4391,15 @@ hydration, or diffed by a framework, it comes back holding whatever the
|
|
|
4195
4391
|
last reader did rather than what the author wrote. `:state(open)` carries
|
|
4196
4392
|
the resolved state for stylesheets, which is what the mirror is for. */
|
|
4197
4393
|
open?: (HelixHeadlessCommand["open"]) | undefined;
|
|
4394
|
+
/** The commands as data, for a palette too long to draw whole: each a value,
|
|
4395
|
+
which is also its words, or a record with a `value`, a `label` and
|
|
4396
|
+
`disabled`. Handed to the list, which draws only the commands in sight and
|
|
4397
|
+
reads no children while it is set. See Listbox's `items`.
|
|
4398
|
+
|
|
4399
|
+
Choosing one says `helix-select` with its value, as a child option does.
|
|
4400
|
+
A command that is a link, or that has an `alternate`, is an option you
|
|
4401
|
+
write as a child. */
|
|
4402
|
+
items?: (HelixHeadlessCommand["items"]) | undefined;
|
|
4198
4403
|
};
|
|
4199
4404
|
|
|
4200
4405
|
export type HelixHeadlessCommandVueEvents = {
|
|
@@ -4448,6 +4653,22 @@ is set. */
|
|
|
4448
4653
|
"dropped-label"?: (HelixHeadlessDataTable["droppedLabel"]) | undefined;
|
|
4449
4654
|
/** What screen readers hear when a row is dropped, with `reorderable-rows`. */
|
|
4450
4655
|
droppedLabel?: (HelixHeadlessDataTable["droppedLabel"]) | undefined;
|
|
4656
|
+
/** The text shown and announced when the rows could not load, such as "The
|
|
4657
|
+
files did not load". Set it when a fetch fails, and clear it once you try
|
|
4658
|
+
again. Empty, the default, shows nothing.
|
|
4659
|
+
|
|
4660
|
+
While it is set, a line after the rows shows it, or your own content in the
|
|
4661
|
+
`error` slot, in place of the empty and loading lines, and the live region
|
|
4662
|
+
says it. */
|
|
4663
|
+
"error-text"?: (HelixHeadlessDataTable["errorText"]) | undefined;
|
|
4664
|
+
/** The text shown and announced when the rows could not load, such as "The
|
|
4665
|
+
files did not load". Set it when a fetch fails, and clear it once you try
|
|
4666
|
+
again. Empty, the default, shows nothing.
|
|
4667
|
+
|
|
4668
|
+
While it is set, a line after the rows shows it, or your own content in the
|
|
4669
|
+
`error` slot, in place of the empty and loading lines, and the live region
|
|
4670
|
+
says it. */
|
|
4671
|
+
errorText?: (HelixHeadlessDataTable["errorText"]) | undefined;
|
|
4451
4672
|
/** The estimated height of a row before it is drawn, in pixels.
|
|
4452
4673
|
|
|
4453
4674
|
Only read while `windowed`, and a starting guess rather than a claim: a
|
|
@@ -5138,8 +5359,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
5138
5359
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
5139
5360
|
a reset should return to. */
|
|
5140
5361
|
value?: (HelixHeadlessDateInput["value"]) | undefined;
|
|
5141
|
-
/**
|
|
5142
|
-
|
|
5362
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
5363
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
5364
|
+
names the control inside, and a new one renders at once.
|
|
5365
|
+
|
|
5366
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
5367
|
+
render it again.** It is the platform's attribute and no property of this
|
|
5368
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
5369
|
+
the old words. Data Table meets this on every column move: each row's
|
|
5370
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
5371
|
+
|
|
5372
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
5373
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
5374
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
5375
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
5376
|
+
"aria-label"?: (HelixHeadlessDateInput["namedBy"]) | undefined;
|
|
5377
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
5378
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
5379
|
+
names the control inside, and a new one renders at once.
|
|
5380
|
+
|
|
5381
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
5382
|
+
render it again.** It is the platform's attribute and no property of this
|
|
5383
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
5384
|
+
the old words. Data Table meets this on every column move: each row's
|
|
5385
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
5386
|
+
|
|
5387
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
5388
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
5389
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
5390
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
5391
|
+
namedBy?: (HelixHeadlessDateInput["namedBy"]) | undefined;
|
|
5143
5392
|
/** The validation message shown under the control. It replaces the
|
|
5144
5393
|
browser's message. */
|
|
5145
5394
|
feedback?: (HelixHeadlessDateInput["feedback"]) | undefined;
|
|
@@ -5266,15 +5515,22 @@ speaks it. Unset is the sentence registered for the page's language, then
|
|
|
5266
5515
|
the English. `{mode}` is `single`, `range` or `multiple`, so each can have
|
|
5267
5516
|
its own sentence. */
|
|
5268
5517
|
badInputMessage?: (HelixHeadlessDatePicker["badInputMessage"]) | undefined;
|
|
5269
|
-
/** The calendar the heading, the days, and the months are written in
|
|
5270
|
-
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
`
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5518
|
+
/** The calendar the heading, the days, and the months are written in.
|
|
5519
|
+
|
|
5520
|
+
`gregory`, `buddhist`, `japanese`, `roc`, and `iso8601` are the five
|
|
5521
|
+
whose months are the Gregorian months. Absent is the locale's own where
|
|
5522
|
+
it is one of the five, such as `buddhist` for `th-TH` or `japanese` for
|
|
5523
|
+
`ja-JP-u-ca-japanese`, and `gregory` for every other, such as `persian`
|
|
5524
|
+
for `fa-IR`.
|
|
5525
|
+
|
|
5526
|
+
`persian`, `hebrew`, `islamic-umalqura`, `islamic-civil`, `ethiopic`,
|
|
5527
|
+
`coptic`, and `indian` draw a calendar with months of its own, as React
|
|
5528
|
+
Aria's calendars do: each grid is one of that calendar's months, the
|
|
5529
|
+
Hebrew leap month and Ethiopia's five-day thirteenth month included, and
|
|
5530
|
+
Previous, Next and the page keys move by those months. `month` and
|
|
5531
|
+
`helix-navigate` then name a month by its first day, `YYYY-MM-DD`. The
|
|
5532
|
+
heading stays text, as the months and years views are drawn in Gregorian
|
|
5533
|
+
months only. The value is `YYYY-MM-DD` in every calendar. */
|
|
5278
5534
|
calendar?: (HelixHeadlessDatePicker["calendar"]) | undefined;
|
|
5279
5535
|
/** The month to open on when `month` is not set. */
|
|
5280
5536
|
"default-month"?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
|
|
@@ -5333,8 +5589,9 @@ its days. */
|
|
|
5333
5589
|
min?: (HelixHeadlessDatePicker["min"]) | undefined;
|
|
5334
5590
|
/** How many dates can be held at once. */
|
|
5335
5591
|
mode?: (HelixHeadlessDatePicker["mode"]) | undefined;
|
|
5336
|
-
/** The month shown, as `YYYY-MM
|
|
5337
|
-
|
|
5592
|
+
/** The month shown, as `YYYY-MM`, or as its first day, `YYYY-MM-DD`, under a
|
|
5593
|
+
`calendar` with months of its own. When it is not set, it follows
|
|
5594
|
+
`value`, then the current month.
|
|
5338
5595
|
|
|
5339
5596
|
Separate from `value` on purpose, so paging selects nothing and a consumer
|
|
5340
5597
|
can drive the view. Reading gives the month on show; writing sets it, and
|
|
@@ -5436,6 +5693,22 @@ date including the one already chosen. */
|
|
|
5436
5693
|
"step-mismatch-message"?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
|
|
5437
5694
|
/** The validation message for a date that `step` skips. */
|
|
5438
5695
|
stepMismatchMessage?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
|
|
5696
|
+
/** The time zone today is read in, such as `America/New_York`, as React
|
|
5697
|
+
Aria's `today(timeZone)` reads it. Empty is the reader's own.
|
|
5698
|
+
|
|
5699
|
+
Dates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:
|
|
5700
|
+
the day marked `aria-current` and `day-today`, and the month a picker
|
|
5701
|
+
with no value opens on. A desk in Tokyo booking for an office in New York
|
|
5702
|
+
sets `America/New_York`, and today is the office's. */
|
|
5703
|
+
"time-zone"?: (HelixHeadlessDatePicker["timeZone"]) | undefined;
|
|
5704
|
+
/** The time zone today is read in, such as `America/New_York`, as React
|
|
5705
|
+
Aria's `today(timeZone)` reads it. Empty is the reader's own.
|
|
5706
|
+
|
|
5707
|
+
Dates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:
|
|
5708
|
+
the day marked `aria-current` and `day-today`, and the month a picker
|
|
5709
|
+
with no value opens on. A desk in Tokyo booking for an office in New York
|
|
5710
|
+
sets `America/New_York`, and today is the office's. */
|
|
5711
|
+
timeZone?: (HelixHeadlessDatePicker["timeZone"]) | undefined;
|
|
5439
5712
|
/** The validation message for a date that `disable-dates` or `disable-days`
|
|
5440
5713
|
bars. */
|
|
5441
5714
|
"unavailable-message"?: (HelixHeadlessDatePicker["unavailableMessage"]) | undefined;
|
|
@@ -6208,8 +6481,36 @@ removes rather than as "Remove" said once per file. A label with no
|
|
|
6208
6481
|
"trigger-label"?: (HelixHeadlessFileInput["triggerLabel"]) | undefined;
|
|
6209
6482
|
/** The trigger's text when nothing is slotted into it. */
|
|
6210
6483
|
triggerLabel?: (HelixHeadlessFileInput["triggerLabel"]) | undefined;
|
|
6211
|
-
/**
|
|
6212
|
-
|
|
6484
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
6485
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
6486
|
+
names the control inside, and a new one renders at once.
|
|
6487
|
+
|
|
6488
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
6489
|
+
render it again.** It is the platform's attribute and no property of this
|
|
6490
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
6491
|
+
the old words. Data Table meets this on every column move: each row's
|
|
6492
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
6493
|
+
|
|
6494
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
6495
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
6496
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
6497
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
6498
|
+
"aria-label"?: (HelixHeadlessFileInput["namedBy"]) | undefined;
|
|
6499
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
6500
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
6501
|
+
names the control inside, and a new one renders at once.
|
|
6502
|
+
|
|
6503
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
6504
|
+
render it again.** It is the platform's attribute and no property of this
|
|
6505
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
6506
|
+
the old words. Data Table meets this on every column move: each row's
|
|
6507
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
6508
|
+
|
|
6509
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
6510
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
6511
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
6512
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
6513
|
+
namedBy?: (HelixHeadlessFileInput["namedBy"]) | undefined;
|
|
6213
6514
|
/** The validation message shown under the control. It replaces the
|
|
6214
6515
|
browser's message. */
|
|
6215
6516
|
feedback?: (HelixHeadlessFileInput["feedback"]) | undefined;
|
|
@@ -6584,8 +6885,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
6584
6885
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
6585
6886
|
a reset should return to. */
|
|
6586
6887
|
value?: (HelixHeadlessFilterInput["value"]) | undefined;
|
|
6587
|
-
/**
|
|
6588
|
-
|
|
6888
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
6889
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
6890
|
+
names the control inside, and a new one renders at once.
|
|
6891
|
+
|
|
6892
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
6893
|
+
render it again.** It is the platform's attribute and no property of this
|
|
6894
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
6895
|
+
the old words. Data Table meets this on every column move: each row's
|
|
6896
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
6897
|
+
|
|
6898
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
6899
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
6900
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
6901
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
6902
|
+
"aria-label"?: (HelixHeadlessFilterInput["namedBy"]) | undefined;
|
|
6903
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
6904
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
6905
|
+
names the control inside, and a new one renders at once.
|
|
6906
|
+
|
|
6907
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
6908
|
+
render it again.** It is the platform's attribute and no property of this
|
|
6909
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
6910
|
+
the old words. Data Table meets this on every column move: each row's
|
|
6911
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
6912
|
+
|
|
6913
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
6914
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
6915
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
6916
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
6917
|
+
namedBy?: (HelixHeadlessFilterInput["namedBy"]) | undefined;
|
|
6589
6918
|
/** The validation message shown under the control. It replaces the
|
|
6590
6919
|
browser's message. */
|
|
6591
6920
|
feedback?: (HelixHeadlessFilterInput["feedback"]) | undefined;
|
|
@@ -6846,6 +7175,12 @@ written in the locale, and each language writes the forms it has. */
|
|
|
6846
7175
|
/** How many links from the selected note to show, for its local graph. Unset
|
|
6847
7176
|
shows every note. The list holds what the drawing shows. */
|
|
6848
7177
|
depth?: (HelixHeadlessGraph["depth"]) | undefined;
|
|
7178
|
+
/** What the panel shows when the list holds no notes: the graph has none, or
|
|
7179
|
+
a search or the legend hid them all. A slotted `empty` replaces it. */
|
|
7180
|
+
"empty-label"?: (HelixHeadlessGraph["emptyLabel"]) | undefined;
|
|
7181
|
+
/** What the panel shows when the list holds no notes: the graph has none, or
|
|
7182
|
+
a search or the legend hid them all. A slotted `empty` replaces it. */
|
|
7183
|
+
emptyLabel?: (HelixHeadlessGraph["emptyLabel"]) | undefined;
|
|
6849
7184
|
/** The graph's name where `label` is empty and the host has no
|
|
6850
7185
|
`aria-label`. */
|
|
6851
7186
|
"fallback-label"?: (HelixHeadlessGraph["fallbackLabel"]) | undefined;
|
|
@@ -6902,6 +7237,14 @@ such as at the top of a page, where the drawing takes the whole frame. */
|
|
|
6902
7237
|
"notes-label"?: (HelixHeadlessGraph["notesLabel"]) | undefined;
|
|
6903
7238
|
/** The list's name, read by screen readers, and the name of the button that opens it with `no-panel`. */
|
|
6904
7239
|
notesLabel?: (HelixHeadlessGraph["notesLabel"]) | undefined;
|
|
7240
|
+
/** What a screen reader calls the graph in place of its role, after its
|
|
7241
|
+
name: "Research notes, graph". Said only where the graph has a name of its
|
|
7242
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
7243
|
+
"role-label"?: (HelixHeadlessGraph["roleLabel"]) | undefined;
|
|
7244
|
+
/** What a screen reader calls the graph in place of its role, after its
|
|
7245
|
+
name: "Research notes, graph". Said only where the graph has a name of its
|
|
7246
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
7247
|
+
roleLabel?: (HelixHeadlessGraph["roleLabel"]) | undefined;
|
|
6905
7248
|
/** The search field's name. */
|
|
6906
7249
|
"search-label"?: (HelixHeadlessGraph["searchLabel"]) | undefined;
|
|
6907
7250
|
/** The search field's name. */
|
|
@@ -7821,8 +8164,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
7821
8164
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
7822
8165
|
a reset should return to. */
|
|
7823
8166
|
value?: (HelixHeadlessInput["value"]) | undefined;
|
|
7824
|
-
/**
|
|
7825
|
-
|
|
8167
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
8168
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
8169
|
+
names the control inside, and a new one renders at once.
|
|
8170
|
+
|
|
8171
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
8172
|
+
render it again.** It is the platform's attribute and no property of this
|
|
8173
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
8174
|
+
the old words. Data Table meets this on every column move: each row's
|
|
8175
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
8176
|
+
|
|
8177
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
8178
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
8179
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
8180
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
8181
|
+
"aria-label"?: (HelixHeadlessInput["namedBy"]) | undefined;
|
|
8182
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
8183
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
8184
|
+
names the control inside, and a new one renders at once.
|
|
8185
|
+
|
|
8186
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
8187
|
+
render it again.** It is the platform's attribute and no property of this
|
|
8188
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
8189
|
+
the old words. Data Table meets this on every column move: each row's
|
|
8190
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
8191
|
+
|
|
8192
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
8193
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
8194
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
8195
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
8196
|
+
namedBy?: (HelixHeadlessInput["namedBy"]) | undefined;
|
|
7826
8197
|
/** The validation message shown under the control. It replaces the
|
|
7827
8198
|
browser's message. */
|
|
7828
8199
|
feedback?: (HelixHeadlessInput["feedback"]) | undefined;
|
|
@@ -8557,6 +8928,9 @@ export type HelixHeadlessListHelixBeforeChangeElementEvent =
|
|
|
8557
8928
|
/** `helix-before-reorder` event type */
|
|
8558
8929
|
export type HelixHeadlessListHelixBeforeReorderElementEvent =
|
|
8559
8930
|
HelixHeadlessListElementEvent<HelixBeforeReorderEvent>;
|
|
8931
|
+
/** `helix-load-more` event type */
|
|
8932
|
+
export type HelixHeadlessListHelixLoadMoreElementEvent =
|
|
8933
|
+
HelixHeadlessListElementEvent<HelixLoadMoreEvent>;
|
|
8560
8934
|
/** `helix-reorder` event type */
|
|
8561
8935
|
export type HelixHeadlessListHelixReorderElementEvent =
|
|
8562
8936
|
HelixHeadlessListElementEvent<HelixReorderEvent>;
|
|
@@ -8572,6 +8946,12 @@ refused, in a `reorderable` list. */
|
|
|
8572
8946
|
"dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
|
|
8573
8947
|
/** What screen readers hear when a row is dropped, in a `reorderable` list. */
|
|
8574
8948
|
droppedLabel?: (HelixHeadlessList["droppedLabel"]) | undefined;
|
|
8949
|
+
/** The text of the row shown while the list has no rows, where the `empty`
|
|
8950
|
+
slot is empty. Empty, the default, shows no row. */
|
|
8951
|
+
"empty-label"?: (HelixHeadlessList["emptyLabel"]) | undefined;
|
|
8952
|
+
/** The text of the row shown while the list has no rows, where the `empty`
|
|
8953
|
+
slot is empty. Empty, the default, shows no row. */
|
|
8954
|
+
emptyLabel?: (HelixHeadlessList["emptyLabel"]) | undefined;
|
|
8575
8955
|
/** The kind of list, which follows from the content.
|
|
8576
8956
|
|
|
8577
8957
|
On the headless tier because it is meaning rather than decoration, the same
|
|
@@ -8595,6 +8975,19 @@ has to survive with the stylesheet turned off.
|
|
|
8595
8975
|
kind?: (HelixHeadlessList["kind"]) | undefined;
|
|
8596
8976
|
/** The list's name, read by screen readers. */
|
|
8597
8977
|
label?: (HelixHeadlessList["label"]) | undefined;
|
|
8978
|
+
/** Marks the list as busy fetching more rows, and draws a row after the last
|
|
8979
|
+
that says so. The list asks for no more while it is set. */
|
|
8980
|
+
loading?: (HelixHeadlessList["loading"]) | undefined;
|
|
8981
|
+
/** The text of the row drawn while `loading` is set, where the `loading` slot is empty. */
|
|
8982
|
+
"loading-label"?: (HelixHeadlessList["loadingLabel"]) | undefined;
|
|
8983
|
+
/** The text of the row drawn while `loading` is set, where the `loading` slot is empty. */
|
|
8984
|
+
loadingLabel?: (HelixHeadlessList["loadingLabel"]) | undefined;
|
|
8985
|
+
/** Sends `helix-load-more` once the end of the list comes within a screen of
|
|
8986
|
+
view, so you can add the next rows as a reader nears them. */
|
|
8987
|
+
"load-more"?: (HelixHeadlessList["loadMore"]) | undefined;
|
|
8988
|
+
/** Sends `helix-load-more` once the end of the list comes within a screen of
|
|
8989
|
+
view, so you can add the next rows as a reader nears them. */
|
|
8990
|
+
loadMore?: (HelixHeadlessList["loadMore"]) | undefined;
|
|
8598
8991
|
/** What screen readers hear each time an arrow key moves a held row, in a
|
|
8599
8992
|
`reorderable` list. `{name}` is the row's words, `{position}` the place it
|
|
8600
8993
|
would go, counting from 1, and `{count}` the number of rows. */
|
|
@@ -8650,7 +9043,7 @@ consumer would have written on an `<ol>`.
|
|
|
8650
9043
|
`type` is only `list-style-type`. `start` and `reversed` move the count
|
|
8651
9044
|
itself. */
|
|
8652
9045
|
type?: (HelixHeadlessList["type"]) | undefined;
|
|
8653
|
-
/** The selected rows' values, separated by commas, in a list that selects.
|
|
9046
|
+
/** The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
|
|
8654
9047
|
|
|
8655
9048
|
Set it to start with rows selected. A row's value is its `value`, or its
|
|
8656
9049
|
words where it has none. */
|
|
@@ -8666,6 +9059,8 @@ export type HelixHeadlessListVueEvents = {
|
|
|
8666
9059
|
"helix-before-change": HelixHeadlessListHelixBeforeChangeElementEvent;
|
|
8667
9060
|
/** Fired when a row is dropped at a new place, in a `reorderable` list, with every row's value in the new order. Cancelable: cancel it to keep the row where it is. */
|
|
8668
9061
|
"helix-before-reorder": HelixHeadlessListHelixBeforeReorderElementEvent;
|
|
9062
|
+
/** Fired, in a list with `load-more`, when the end of the list comes within a screen of view, once for each number of rows. */
|
|
9063
|
+
"helix-load-more": HelixHeadlessListHelixLoadMoreElementEvent;
|
|
8669
9064
|
/** Fired after `helix-before-reorder` when nobody canceled it. Move your rows to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
|
|
8670
9065
|
"helix-reorder": HelixHeadlessListHelixReorderElementEvent;
|
|
8671
9066
|
};
|
|
@@ -8864,8 +9259,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
8864
9259
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
8865
9260
|
a reset should return to. */
|
|
8866
9261
|
value?: (HelixHeadlessListbox["value"]) | undefined;
|
|
8867
|
-
/**
|
|
8868
|
-
|
|
9262
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
9263
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
9264
|
+
names the control inside, and a new one renders at once.
|
|
9265
|
+
|
|
9266
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
9267
|
+
render it again.** It is the platform's attribute and no property of this
|
|
9268
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
9269
|
+
the old words. Data Table meets this on every column move: each row's
|
|
9270
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
9271
|
+
|
|
9272
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
9273
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
9274
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
9275
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
9276
|
+
"aria-label"?: (HelixHeadlessListbox["namedBy"]) | undefined;
|
|
9277
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
9278
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
9279
|
+
names the control inside, and a new one renders at once.
|
|
9280
|
+
|
|
9281
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
9282
|
+
render it again.** It is the platform's attribute and no property of this
|
|
9283
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
9284
|
+
the old words. Data Table meets this on every column move: each row's
|
|
9285
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
9286
|
+
|
|
9287
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
9288
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
9289
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
9290
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
9291
|
+
namedBy?: (HelixHeadlessListbox["namedBy"]) | undefined;
|
|
8869
9292
|
/** The validation message shown under the control. It replaces the
|
|
8870
9293
|
browser's message. */
|
|
8871
9294
|
feedback?: (HelixHeadlessListbox["feedback"]) | undefined;
|
|
@@ -9399,6 +9822,14 @@ the standard, themed map. The layers menu chooses it. */
|
|
|
9399
9822
|
`connectMap` keeps it current, and the 3D button is pressed while it is
|
|
9400
9823
|
above `0`. */
|
|
9401
9824
|
pitch?: (HelixHeadlessMap["pitch"]) | undefined;
|
|
9825
|
+
/** What a screen reader calls the map in place of its role, after its
|
|
9826
|
+
name: "Edinburgh, map". Said only where the map has a name of its
|
|
9827
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
9828
|
+
"role-label"?: (HelixHeadlessMap["roleLabel"]) | undefined;
|
|
9829
|
+
/** What a screen reader calls the map in place of its role, after its
|
|
9830
|
+
name: "Edinburgh, map". Said only where the map has a name of its
|
|
9831
|
+
own, since the fallback name is the same word. Empty leaves the role. */
|
|
9832
|
+
roleLabel?: (HelixHeadlessMap["roleLabel"]) | undefined;
|
|
9402
9833
|
/** The rotate left button's label. */
|
|
9403
9834
|
"rotate-left-label"?: (HelixHeadlessMap["rotateLeftLabel"]) | undefined;
|
|
9404
9835
|
/** The rotate left button's label. */
|
|
@@ -10536,6 +10967,20 @@ filled in, written in the locale. */
|
|
|
10536
10967
|
readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
10537
10968
|
/** Prevents editing. The value is still submitted with the form. */
|
|
10538
10969
|
readOnly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
10970
|
+
/** The words screen readers announce for the field's role, set as its
|
|
10971
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
10972
|
+
it to leave the role as `spinbutton`.
|
|
10973
|
+
|
|
10974
|
+
Never written on iOS and iPadOS, where a role description stops VoiceOver
|
|
10975
|
+
saying that the field is required. */
|
|
10976
|
+
"role-label"?: (HelixHeadlessNumberInput["roleLabel"]) | undefined;
|
|
10977
|
+
/** The words screen readers announce for the field's role, set as its
|
|
10978
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
10979
|
+
it to leave the role as `spinbutton`.
|
|
10980
|
+
|
|
10981
|
+
Never written on iOS and iPadOS, where a role description stops VoiceOver
|
|
10982
|
+
saying that the field is required. */
|
|
10983
|
+
roleLabel?: (HelixHeadlessNumberInput["roleLabel"]) | undefined;
|
|
10539
10984
|
/** Makes the label a grip that changes the value when it is dragged.
|
|
10540
10985
|
|
|
10541
10986
|
The label is what is dragged, so this adds no chrome at all. Still opt-in,
|
|
@@ -10595,8 +11040,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
10595
11040
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
10596
11041
|
a reset should return to. */
|
|
10597
11042
|
value?: (HelixHeadlessNumberInput["value"]) | undefined;
|
|
10598
|
-
/**
|
|
10599
|
-
|
|
11043
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
11044
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
11045
|
+
names the control inside, and a new one renders at once.
|
|
11046
|
+
|
|
11047
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
11048
|
+
render it again.** It is the platform's attribute and no property of this
|
|
11049
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
11050
|
+
the old words. Data Table meets this on every column move: each row's
|
|
11051
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
11052
|
+
|
|
11053
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
11054
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
11055
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
11056
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
11057
|
+
"aria-label"?: (HelixHeadlessNumberInput["namedBy"]) | undefined;
|
|
11058
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
11059
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
11060
|
+
names the control inside, and a new one renders at once.
|
|
11061
|
+
|
|
11062
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
11063
|
+
render it again.** It is the platform's attribute and no property of this
|
|
11064
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
11065
|
+
the old words. Data Table meets this on every column move: each row's
|
|
11066
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
11067
|
+
|
|
11068
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
11069
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
11070
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
11071
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
11072
|
+
namedBy?: (HelixHeadlessNumberInput["namedBy"]) | undefined;
|
|
10600
11073
|
/** The validation message shown under the control. It replaces the
|
|
10601
11074
|
browser's message. */
|
|
10602
11075
|
feedback?: (HelixHeadlessNumberInput["feedback"]) | undefined;
|
|
@@ -10842,6 +11315,14 @@ needs a height, which is a stylesheet rule reading this attribute. */
|
|
|
10842
11315
|
Writing opens exactly these and closes every other, keeping the active row
|
|
10843
11316
|
where it stays visible. A property, never an attribute. */
|
|
10844
11317
|
expanded?: (HelixHeadlessObjectInspector["expanded"]) | undefined;
|
|
11318
|
+
/** Draws an entry's value your way, given the value and its entry. Set it as
|
|
11319
|
+
a property.
|
|
11320
|
+
|
|
11321
|
+
It returns what Lit renders: a template from `html`, a string, or a DOM
|
|
11322
|
+
node. `undefined` draws the value as the inspector does, so a function can
|
|
11323
|
+
draw some entries and leave the rest, such as only the strings under
|
|
11324
|
+
`/links`. */
|
|
11325
|
+
renderValue?: (HelixHeadlessObjectInspector["renderValue"]) | undefined;
|
|
10845
11326
|
/** The value to show, when your code already holds it as an object.
|
|
10846
11327
|
|
|
10847
11328
|
Takes precedence over `for`. Anything JSON can say is drawn; anything else
|
|
@@ -10980,6 +11461,15 @@ simply the accessible name.
|
|
|
10980
11461
|
`<option label>` does: written the platform's way, a select listed a row of
|
|
10981
11462
|
nothing for every choice. */
|
|
10982
11463
|
label?: (HelixHeadlessOption["label"]) | undefined;
|
|
11464
|
+
/** The page of commands this option opens, by name, where choosing it would
|
|
11465
|
+
otherwise run it.
|
|
11466
|
+
|
|
11467
|
+
Declared here and acted on by whatever owns the list, as `alternate` is.
|
|
11468
|
+
`Command` is the only owner that reads it: choosing the option shows the
|
|
11469
|
+
commands slotted as `page:` and the name, such as `slot="page:theme"`,
|
|
11470
|
+
and Backspace in an empty filter goes back. Empty is an option that opens
|
|
11471
|
+
nothing, which is nearly every option. */
|
|
11472
|
+
opens?: (HelixHeadlessOption["opens"]) | undefined;
|
|
10983
11473
|
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
10984
11474
|
rel?: (HelixHeadlessOption["rel"]) | undefined;
|
|
10985
11475
|
/** Whether this choice is currently chosen.
|
|
@@ -11459,8 +11949,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
11459
11949
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
11460
11950
|
a reset should return to. */
|
|
11461
11951
|
value?: (HelixHeadlessPinInput["value"]) | undefined;
|
|
11462
|
-
/**
|
|
11463
|
-
|
|
11952
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
11953
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
11954
|
+
names the control inside, and a new one renders at once.
|
|
11955
|
+
|
|
11956
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
11957
|
+
render it again.** It is the platform's attribute and no property of this
|
|
11958
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
11959
|
+
the old words. Data Table meets this on every column move: each row's
|
|
11960
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
11961
|
+
|
|
11962
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
11963
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
11964
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
11965
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
11966
|
+
"aria-label"?: (HelixHeadlessPinInput["namedBy"]) | undefined;
|
|
11967
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
11968
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
11969
|
+
names the control inside, and a new one renders at once.
|
|
11970
|
+
|
|
11971
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
11972
|
+
render it again.** It is the platform's attribute and no property of this
|
|
11973
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
11974
|
+
the old words. Data Table meets this on every column move: each row's
|
|
11975
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
11976
|
+
|
|
11977
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
11978
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
11979
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
11980
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
11981
|
+
namedBy?: (HelixHeadlessPinInput["namedBy"]) | undefined;
|
|
11464
11982
|
/** The validation message shown under the control. It replaces the
|
|
11465
11983
|
browser's message. */
|
|
11466
11984
|
feedback?: (HelixHeadlessPinInput["feedback"]) | undefined;
|
|
@@ -11880,8 +12398,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
11880
12398
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
11881
12399
|
a reset should return to. */
|
|
11882
12400
|
value?: (HelixHeadlessRadioGroup["value"]) | undefined;
|
|
11883
|
-
/**
|
|
11884
|
-
|
|
12401
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
12402
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
12403
|
+
names the control inside, and a new one renders at once.
|
|
12404
|
+
|
|
12405
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
12406
|
+
render it again.** It is the platform's attribute and no property of this
|
|
12407
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
12408
|
+
the old words. Data Table meets this on every column move: each row's
|
|
12409
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
12410
|
+
|
|
12411
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
12412
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
12413
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
12414
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
12415
|
+
"aria-label"?: (HelixHeadlessRadioGroup["namedBy"]) | undefined;
|
|
12416
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
12417
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
12418
|
+
names the control inside, and a new one renders at once.
|
|
12419
|
+
|
|
12420
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
12421
|
+
render it again.** It is the platform's attribute and no property of this
|
|
12422
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
12423
|
+
the old words. Data Table meets this on every column move: each row's
|
|
12424
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
12425
|
+
|
|
12426
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
12427
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
12428
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
12429
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
12430
|
+
namedBy?: (HelixHeadlessRadioGroup["namedBy"]) | undefined;
|
|
11885
12431
|
/** The validation message shown under the control. It replaces the
|
|
11886
12432
|
browser's message. */
|
|
11887
12433
|
feedback?: (HelixHeadlessRadioGroup["feedback"]) | undefined;
|
|
@@ -12162,8 +12708,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
12162
12708
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
12163
12709
|
a reset should return to. */
|
|
12164
12710
|
value?: (HelixHeadlessRating["value"]) | undefined;
|
|
12165
|
-
/**
|
|
12166
|
-
|
|
12711
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
12712
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
12713
|
+
names the control inside, and a new one renders at once.
|
|
12714
|
+
|
|
12715
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
12716
|
+
render it again.** It is the platform's attribute and no property of this
|
|
12717
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
12718
|
+
the old words. Data Table meets this on every column move: each row's
|
|
12719
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
12720
|
+
|
|
12721
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
12722
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
12723
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
12724
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
12725
|
+
"aria-label"?: (HelixHeadlessRating["namedBy"]) | undefined;
|
|
12726
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
12727
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
12728
|
+
names the control inside, and a new one renders at once.
|
|
12729
|
+
|
|
12730
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
12731
|
+
render it again.** It is the platform's attribute and no property of this
|
|
12732
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
12733
|
+
the old words. Data Table meets this on every column move: each row's
|
|
12734
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
12735
|
+
|
|
12736
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
12737
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
12738
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
12739
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
12740
|
+
namedBy?: (HelixHeadlessRating["namedBy"]) | undefined;
|
|
12167
12741
|
/** The validation message shown under the control. It replaces the
|
|
12168
12742
|
browser's message. */
|
|
12169
12743
|
feedback?: (HelixHeadlessRating["feedback"]) | undefined;
|
|
@@ -12546,8 +13120,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
12546
13120
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
12547
13121
|
a reset should return to. */
|
|
12548
13122
|
value?: (HelixHeadlessSelect["value"]) | undefined;
|
|
12549
|
-
/**
|
|
12550
|
-
|
|
13123
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
13124
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
13125
|
+
names the control inside, and a new one renders at once.
|
|
13126
|
+
|
|
13127
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
13128
|
+
render it again.** It is the platform's attribute and no property of this
|
|
13129
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
13130
|
+
the old words. Data Table meets this on every column move: each row's
|
|
13131
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
13132
|
+
|
|
13133
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
13134
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
13135
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
13136
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
13137
|
+
"aria-label"?: (HelixHeadlessSelect["namedBy"]) | undefined;
|
|
13138
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
13139
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
13140
|
+
names the control inside, and a new one renders at once.
|
|
13141
|
+
|
|
13142
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
13143
|
+
render it again.** It is the platform's attribute and no property of this
|
|
13144
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
13145
|
+
the old words. Data Table meets this on every column move: each row's
|
|
13146
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
13147
|
+
|
|
13148
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
13149
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
13150
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
13151
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
13152
|
+
namedBy?: (HelixHeadlessSelect["namedBy"]) | undefined;
|
|
12551
13153
|
/** The validation message shown under the control. It replaces the
|
|
12552
13154
|
browser's message. */
|
|
12553
13155
|
feedback?: (HelixHeadlessSelect["feedback"]) | undefined;
|
|
@@ -12594,6 +13196,18 @@ the stop moves on the trigger inside the shadow root, as Button's does.
|
|
|
12594
13196
|
No attribute, because it is coordination between elements rather than
|
|
12595
13197
|
anything a consumer sets. */
|
|
12596
13198
|
focusable?: (HelixHeadlessSelect["focusable"]) | undefined;
|
|
13199
|
+
/** The options as data, for a list too long to draw whole: each a value,
|
|
13200
|
+
which is also its words, or a record with a `value`, a `label` and
|
|
13201
|
+
`disabled`. Passed to the list, which draws only the options in sight,
|
|
13202
|
+
as Listbox's `items` does. Set, the options you write as children are
|
|
13203
|
+
not read.
|
|
13204
|
+
|
|
13205
|
+
The trigger shows the chosen options' labels, the letters and the Left
|
|
13206
|
+
and Right keys on the closed trigger choose over the whole set, and a
|
|
13207
|
+
chosen value whose option leaves `items` drops out of `value`.
|
|
13208
|
+
`value-content` is not called for `items`. Import the Option family as
|
|
13209
|
+
well, whose elements are drawn. */
|
|
13210
|
+
items?: (HelixHeadlessSelect["items"]) | undefined;
|
|
12597
13211
|
/** What the trigger shows for the chosen options: a function given them, in
|
|
12598
13212
|
the order they appear, that returns text, an element or a Lit template.
|
|
12599
13213
|
|
|
@@ -12758,9 +13372,11 @@ between its thumbs and ignores it. */
|
|
|
12758
13372
|
origin?: (HelixHeadlessSlider["origin"]) | undefined;
|
|
12759
13373
|
/** Adds a second thumb, so the value is a pair.
|
|
12760
13374
|
|
|
12761
|
-
The pair is one string, `"10,50"`, which is what
|
|
12762
|
-
`MixinControllerValue`
|
|
12763
|
-
|
|
13375
|
+
The pair is one string, `"10,50"`, which is what `value` and
|
|
13376
|
+
`MixinControllerValue` hold. A form receives two entries under the name,
|
|
13377
|
+
`price=10&price=50`, as React Aria's two thumbs send theirs.
|
|
13378
|
+
`valueAsNumber` reads the lower of the two, since a range has no single
|
|
13379
|
+
number. */
|
|
12764
13380
|
range?: (HelixHeadlessSlider["range"]) | undefined;
|
|
12765
13381
|
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
12766
13382
|
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
@@ -12768,12 +13384,34 @@ filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
|
12768
13384
|
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
12769
13385
|
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
12770
13386
|
rangeText?: (HelixHeadlessSlider["rangeText"]) | undefined;
|
|
13387
|
+
/** Whether a reader can see and focus the value and cannot change it. A
|
|
13388
|
+
read-only slider still submits its value.
|
|
13389
|
+
|
|
13390
|
+
React Aria's `isReadOnly`. Each thumb stays a tab stop and says
|
|
13391
|
+
`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag
|
|
13392
|
+
leave the value where it is. A script can still set `value`. */
|
|
13393
|
+
readonly?: (HelixHeadlessSlider["readOnly"]) | undefined;
|
|
13394
|
+
/** Whether a reader can see and focus the value and cannot change it. A
|
|
13395
|
+
read-only slider still submits its value.
|
|
13396
|
+
|
|
13397
|
+
React Aria's `isReadOnly`. Each thumb stays a tab stop and says
|
|
13398
|
+
`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag
|
|
13399
|
+
leave the value where it is. A script can still set `value`. */
|
|
13400
|
+
readOnly?: (HelixHeadlessSlider["readOnly"]) | undefined;
|
|
12771
13401
|
/** Shows the chosen value beside the track. */
|
|
12772
13402
|
"show-value"?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
12773
13403
|
/** Shows the chosen value beside the track. */
|
|
12774
13404
|
showValue?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
12775
13405
|
/** How far one press of an arrow key moves the thumb. */
|
|
12776
13406
|
step?: (HelixHeadlessSlider["step"]) | undefined;
|
|
13407
|
+
/** The name of a thumb between a range's first and last, read after the
|
|
13408
|
+
slider's label, with `{index}` filled in: its place, counted from 1. The
|
|
13409
|
+
first is `minimum-label` and the last `maximum-label`. */
|
|
13410
|
+
"thumb-label"?: (HelixHeadlessSlider["thumbLabel"]) | undefined;
|
|
13411
|
+
/** The name of a thumb between a range's first and last, read after the
|
|
13412
|
+
slider's label, with `{index}` filled in: its place, counted from 1. The
|
|
13413
|
+
first is `minimum-label` and the last `maximum-label`. */
|
|
13414
|
+
thumbLabel?: (HelixHeadlessSlider["thumbLabel"]) | undefined;
|
|
12777
13415
|
/** Whether each thumb shows its value in a bubble beside it, as Web
|
|
12778
13416
|
Awesome's `with-tooltip`. The styled slider shows the bubbles while the
|
|
12779
13417
|
slider is under the pointer or holds focus. They repeat what each thumb
|
|
@@ -12800,8 +13438,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
12800
13438
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
12801
13439
|
a reset should return to. */
|
|
12802
13440
|
value?: (HelixHeadlessSlider["value"]) | undefined;
|
|
12803
|
-
/**
|
|
12804
|
-
|
|
13441
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
13442
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
13443
|
+
names the control inside, and a new one renders at once.
|
|
13444
|
+
|
|
13445
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
13446
|
+
render it again.** It is the platform's attribute and no property of this
|
|
13447
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
13448
|
+
the old words. Data Table meets this on every column move: each row's
|
|
13449
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
13450
|
+
|
|
13451
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
13452
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
13453
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
13454
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
13455
|
+
"aria-label"?: (HelixHeadlessSlider["namedBy"]) | undefined;
|
|
13456
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
13457
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
13458
|
+
names the control inside, and a new one renders at once.
|
|
13459
|
+
|
|
13460
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
13461
|
+
render it again.** It is the platform's attribute and no property of this
|
|
13462
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
13463
|
+
the old words. Data Table meets this on every column move: each row's
|
|
13464
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
13465
|
+
|
|
13466
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
13467
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
13468
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
13469
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
13470
|
+
namedBy?: (HelixHeadlessSlider["namedBy"]) | undefined;
|
|
12805
13471
|
/** The validation message shown under the control. It replaces the
|
|
12806
13472
|
browser's message. */
|
|
12807
13473
|
feedback?: (HelixHeadlessSlider["feedback"]) | undefined;
|
|
@@ -13023,10 +13689,20 @@ export type HelixHeadlessSpeedDialItemHelixSelectElementEvent =
|
|
|
13023
13689
|
export type HelixHeadlessSpeedDialItemVueProps = {
|
|
13024
13690
|
/** Whether the action is disabled, so it cannot be chosen. */
|
|
13025
13691
|
disabled?: (HelixHeadlessSpeedDialItem["disabled"]) | undefined;
|
|
13692
|
+
/** Whether the link downloads the file when the action is chosen. Only
|
|
13693
|
+
meaningful beside an `href`, and only for a file served from the page's
|
|
13694
|
+
origin. */
|
|
13695
|
+
download?: (HelixHeadlessSpeedDialItem["download"]) | undefined;
|
|
13696
|
+
/** The URL the action links to. Setting it draws the action as a link. */
|
|
13697
|
+
href?: (HelixHeadlessSpeedDialItem["href"]) | undefined;
|
|
13698
|
+
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
13699
|
+
rel?: (HelixHeadlessSpeedDialItem["rel"]) | undefined;
|
|
13026
13700
|
/** The action's keyboard shortcut as a chord, such as `mod+s`, carried as
|
|
13027
13701
|
`aria-keyshortcuts` and drawn after the name. `mod` is Command on an Apple
|
|
13028
13702
|
keyboard and Control elsewhere. Showing a shortcut does not bind it. */
|
|
13029
13703
|
shortcut?: (HelixHeadlessSpeedDialItem["shortcut"]) | undefined;
|
|
13704
|
+
/** Where the link opens, such as `_blank` for a new tab. */
|
|
13705
|
+
target?: (HelixHeadlessSpeedDialItem["target"]) | undefined;
|
|
13030
13706
|
/** The action's value, sent in `helix-select` when the action is chosen. */
|
|
13031
13707
|
value?: (HelixHeadlessSpeedDialItem["value"]) | undefined;
|
|
13032
13708
|
};
|
|
@@ -13075,13 +13751,17 @@ you described or labeled it yourself. */
|
|
|
13075
13751
|
longPressLabel?: (HelixHeadlessSpeedDial["longPressLabel"]) | undefined;
|
|
13076
13752
|
/** Space between the trigger and the actions, in pixels. */
|
|
13077
13753
|
offset?: (HelixHeadlessSpeedDial["offset"]) | undefined;
|
|
13078
|
-
/** What opens the dial. `click` opens it on a press of the trigger.
|
|
13079
|
-
|
|
13080
|
-
|
|
13754
|
+
/** What opens the dial. `click` opens it on a press of the trigger. `hover`
|
|
13755
|
+
also opens it while a mouse rests on the trigger, and closes it once the
|
|
13756
|
+
mouse has left. Under `long-press`, a press is the trigger's own action,
|
|
13757
|
+
and the dial opens on a press held for half a second, or on Alt+Down or
|
|
13758
|
+
Alt+Up. */
|
|
13081
13759
|
"open-on"?: (HelixHeadlessSpeedDial["openOn"]) | undefined;
|
|
13082
|
-
/** What opens the dial. `click` opens it on a press of the trigger.
|
|
13083
|
-
|
|
13084
|
-
|
|
13760
|
+
/** What opens the dial. `click` opens it on a press of the trigger. `hover`
|
|
13761
|
+
also opens it while a mouse rests on the trigger, and closes it once the
|
|
13762
|
+
mouse has left. Under `long-press`, a press is the trigger's own action,
|
|
13763
|
+
and the dial opens on a press held for half a second, or on Alt+Down or
|
|
13764
|
+
Alt+Up. */
|
|
13085
13765
|
openOn?: (HelixHeadlessSpeedDial["openOn"]) | undefined;
|
|
13086
13766
|
/** The direction the actions open in. They move to another side if that side
|
|
13087
13767
|
does not fit.
|
|
@@ -13355,6 +14035,16 @@ export type HelixHeadlessStepsHelixSelectElementEvent =
|
|
|
13355
14035
|
HelixHeadlessStepsElementEvent<HelixSelectEvent>;
|
|
13356
14036
|
|
|
13357
14037
|
export type HelixHeadlessStepsVueProps = {
|
|
14038
|
+
/** Whether the arrow keys move focus between the stages' names, along the
|
|
14039
|
+
way the steps run. Off by default, so the arrows keep scrolling the page. */
|
|
14040
|
+
arrows?: (HelixHeadlessSteps["arrows"]) | undefined;
|
|
14041
|
+
/** What marks a stage `complete`.
|
|
14042
|
+
|
|
14043
|
+
Absent, you do: each step's `complete` is yours, because a reader who
|
|
14044
|
+
steps back has finished more stages than the one they are on. `passed`
|
|
14045
|
+
marks every stage before the one a reader moves to, and leaves the marks
|
|
14046
|
+
when they go back. */
|
|
14047
|
+
completion?: (HelixHeadlessSteps["completion"]) | undefined;
|
|
13358
14048
|
/** The sequence's name, read by screen readers.
|
|
13359
14049
|
|
|
13360
14050
|
A list of stages is a landmark a reader arrives at out of order, so it
|
|
@@ -13531,8 +14221,36 @@ was, and the control says `aria-readonly`. A script can still set
|
|
|
13531
14221
|
The attribute is `readonly`, which is the platform's spelling for the
|
|
13532
14222
|
text fields. */
|
|
13533
14223
|
readOnly?: (HelixHeadlessSwitch["readOnly"]) | undefined;
|
|
13534
|
-
/**
|
|
13535
|
-
|
|
14224
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
14225
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
14226
|
+
names the control inside, and a new one renders at once.
|
|
14227
|
+
|
|
14228
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
14229
|
+
render it again.** It is the platform's attribute and no property of this
|
|
14230
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
14231
|
+
the old words. Data Table meets this on every column move: each row's
|
|
14232
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
14233
|
+
|
|
14234
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
14235
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
14236
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
14237
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
14238
|
+
"aria-label"?: (HelixHeadlessSwitch["namedBy"]) | undefined;
|
|
14239
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
14240
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
14241
|
+
names the control inside, and a new one renders at once.
|
|
14242
|
+
|
|
14243
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
14244
|
+
render it again.** It is the platform's attribute and no property of this
|
|
14245
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
14246
|
+
the old words. Data Table meets this on every column move: each row's
|
|
14247
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
14248
|
+
|
|
14249
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
14250
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
14251
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
14252
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
14253
|
+
namedBy?: (HelixHeadlessSwitch["namedBy"]) | undefined;
|
|
13536
14254
|
/** The validation message shown under the control. It replaces the
|
|
13537
14255
|
browser's message. */
|
|
13538
14256
|
feedback?: (HelixHeadlessSwitch["feedback"]) | undefined;
|
|
@@ -13873,6 +14591,22 @@ is set. */
|
|
|
13873
14591
|
"dropped-label"?: (HelixHeadlessTable["droppedLabel"]) | undefined;
|
|
13874
14592
|
/** What screen readers hear when a held row is dropped, in a `reorderable` table. */
|
|
13875
14593
|
droppedLabel?: (HelixHeadlessTable["droppedLabel"]) | undefined;
|
|
14594
|
+
/** The text shown and announced when the rows could not load. Set it when a
|
|
14595
|
+
fetch fails, and clear it once you try again. Empty, the default, shows
|
|
14596
|
+
nothing.
|
|
14597
|
+
|
|
14598
|
+
While it is set, a line after the rows shows it, or your own content in the
|
|
14599
|
+
`error` slot, in place of the empty and loading lines, and the live region
|
|
14600
|
+
says it. */
|
|
14601
|
+
"error-text"?: (HelixHeadlessTable["errorText"]) | undefined;
|
|
14602
|
+
/** The text shown and announced when the rows could not load. Set it when a
|
|
14603
|
+
fetch fails, and clear it once you try again. Empty, the default, shows
|
|
14604
|
+
nothing.
|
|
14605
|
+
|
|
14606
|
+
While it is set, a line after the rows shows it, or your own content in the
|
|
14607
|
+
`error` slot, in place of the empty and loading lines, and the live region
|
|
14608
|
+
says it. */
|
|
14609
|
+
errorText?: (HelixHeadlessTable["errorText"]) | undefined;
|
|
13876
14610
|
/** The table's name where neither `label` nor an `aria-label` or
|
|
13877
14611
|
`aria-labelledby` on the host gives it one. */
|
|
13878
14612
|
"fallback-label"?: (HelixHeadlessTable["fallbackLabel"]) | undefined;
|
|
@@ -14076,6 +14810,12 @@ panels and tells a screen reader the list is vertical.
|
|
|
14076
14810
|
|
|
14077
14811
|
Optional, so the resting row writes no attribute onto the host. */
|
|
14078
14812
|
orientation?: (HelixHeadlessTabs["orientation"]) | undefined;
|
|
14813
|
+
/** Whether a strip with more tabs than fit shows a button at each end it can
|
|
14814
|
+
scroll toward. */
|
|
14815
|
+
"scroll-controls"?: (HelixHeadlessTabs["scrollControls"]) | undefined;
|
|
14816
|
+
/** Whether a strip with more tabs than fit shows a button at each end it can
|
|
14817
|
+
scroll toward. */
|
|
14818
|
+
scrollControls?: (HelixHeadlessTabs["scrollControls"]) | undefined;
|
|
14079
14819
|
/** How the row of tabs is drawn.
|
|
14080
14820
|
|
|
14081
14821
|
Unset is a raised pill on the selected tab with nothing behind the row,
|
|
@@ -14132,11 +14872,22 @@ export type HelixHeadlessTabElementEvent<E = Event> = TypedEvent<
|
|
|
14132
14872
|
HelixHeadlessTab,
|
|
14133
14873
|
E
|
|
14134
14874
|
>;
|
|
14875
|
+
/** `helix-dismiss` event type */
|
|
14876
|
+
export type HelixHeadlessTabHelixDismissElementEvent =
|
|
14877
|
+
HelixHeadlessTabElementEvent<HelixDismissEvent>;
|
|
14135
14878
|
/** `helix-select` event type */
|
|
14136
14879
|
export type HelixHeadlessTabHelixSelectElementEvent =
|
|
14137
14880
|
HelixHeadlessTabElementEvent<HelixSelectEvent>;
|
|
14138
14881
|
|
|
14139
14882
|
export type HelixHeadlessTabVueProps = {
|
|
14883
|
+
/** The tooltip on the mark that closes a `dismissible` tab. The mark is for
|
|
14884
|
+
the pointer and hidden from screen readers, which hear the Delete key
|
|
14885
|
+
through `aria-keyshortcuts`. */
|
|
14886
|
+
"dismiss-label"?: (HelixHeadlessTab["dismissLabel"]) | undefined;
|
|
14887
|
+
/** The tooltip on the mark that closes a `dismissible` tab. The mark is for
|
|
14888
|
+
the pointer and hidden from screen readers, which hear the Delete key
|
|
14889
|
+
through `aria-keyshortcuts`. */
|
|
14890
|
+
dismissLabel?: (HelixHeadlessTab["dismissLabel"]) | undefined;
|
|
14140
14891
|
/** The URL the tab links to. Setting it renders the tab as a link, for a set
|
|
14141
14892
|
of tabs that are pages of a site. */
|
|
14142
14893
|
href?: (HelixHeadlessTab["href"]) | undefined;
|
|
@@ -14144,6 +14895,8 @@ of tabs that are pages of a site. */
|
|
|
14144
14895
|
rel?: (HelixHeadlessTab["rel"]) | undefined;
|
|
14145
14896
|
/** Where the link opens, such as `_blank`, for a tab with an `href`. */
|
|
14146
14897
|
target?: (HelixHeadlessTab["target"]) | undefined;
|
|
14898
|
+
/** Whether the element shows a control that dismisses it. */
|
|
14899
|
+
dismissible?: (HelixHeadlessTab["dismissible"]) | undefined;
|
|
14147
14900
|
/** Whether the item is disabled and cannot be chosen. */
|
|
14148
14901
|
disabled?: (HelixHeadlessTab["disabled"]) | undefined;
|
|
14149
14902
|
/** Whether the item is selected.
|
|
@@ -14158,6 +14911,8 @@ submits. */
|
|
|
14158
14911
|
};
|
|
14159
14912
|
|
|
14160
14913
|
export type HelixHeadlessTabVueEvents = {
|
|
14914
|
+
/** A `dismissible` tab was asked to close. The tab does not remove itself, so remove it and its panel in response. Cancelable. */
|
|
14915
|
+
"helix-dismiss": HelixHeadlessTabHelixDismissElementEvent;
|
|
14161
14916
|
/** Fired when the tab is chosen. Cancelable: canceling it stops the change and leaves the decision to you. */
|
|
14162
14917
|
"helix-select": HelixHeadlessTabHelixSelectElementEvent;
|
|
14163
14918
|
};
|
|
@@ -14175,6 +14930,14 @@ export type HelixHeadlessTagGroupHelixDismissElementEvent =
|
|
|
14175
14930
|
HelixHeadlessTagGroupElementEvent<HelixDismissEvent>;
|
|
14176
14931
|
|
|
14177
14932
|
export type HelixHeadlessTagGroupVueProps = {
|
|
14933
|
+
/** Keeps at least one tag selected once one is, as React Aria's
|
|
14934
|
+
`disallowEmptySelection`: a press or a key that would leave none selected
|
|
14935
|
+
is refused. Removing the last selected tag still takes it out of `value`. */
|
|
14936
|
+
"disallow-empty-selection"?: (HelixHeadlessTagGroup["disallowEmptySelection"]) | undefined;
|
|
14937
|
+
/** Keeps at least one tag selected once one is, as React Aria's
|
|
14938
|
+
`disallowEmptySelection`: a press or a key that would leave none selected
|
|
14939
|
+
is refused. Removing the last selected tag still takes it out of `value`. */
|
|
14940
|
+
disallowEmptySelection?: (HelixHeadlessTagGroup["disallowEmptySelection"]) | undefined;
|
|
14178
14941
|
/** The words the group shows and says once its last tag is removed, where
|
|
14179
14942
|
nothing is in the `empty` slot. */
|
|
14180
14943
|
"empty-label"?: (HelixHeadlessTagGroup["emptyLabel"]) | undefined;
|
|
@@ -14184,6 +14947,20 @@ nothing is in the `empty` slot. */
|
|
|
14184
14947
|
/** The name of the set, such as "Filters", which a screen reader announces
|
|
14185
14948
|
before its tags. */
|
|
14186
14949
|
label?: (HelixHeadlessTagGroup["label"]) | undefined;
|
|
14950
|
+
/** What a press, Space, or a move does to the tags already selected.
|
|
14951
|
+
`toggle`, the default, keeps them: a press adds or takes out the tag, and
|
|
14952
|
+
the arrow keys move focus alone. `replace` selects the tag alone, as a
|
|
14953
|
+
file list does, and the arrow keys carry the selection with focus.
|
|
14954
|
+
Control or Command with a press or Space adds or takes out one tag in
|
|
14955
|
+
`multiple`, and with an arrow moves focus without selecting. */
|
|
14956
|
+
"selection-behavior"?: (HelixHeadlessTagGroup["selectionBehavior"]) | undefined;
|
|
14957
|
+
/** What a press, Space, or a move does to the tags already selected.
|
|
14958
|
+
`toggle`, the default, keeps them: a press adds or takes out the tag, and
|
|
14959
|
+
the arrow keys move focus alone. `replace` selects the tag alone, as a
|
|
14960
|
+
file list does, and the arrow keys carry the selection with focus.
|
|
14961
|
+
Control or Command with a press or Space adds or takes out one tag in
|
|
14962
|
+
`multiple`, and with an arrow moves focus without selecting. */
|
|
14963
|
+
selectionBehavior?: (HelixHeadlessTagGroup["selectionBehavior"]) | undefined;
|
|
14187
14964
|
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
14188
14965
|
|
|
14189
14966
|
Absent selects nothing, and the tags carry no selected state at all. */
|
|
@@ -14379,8 +15156,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
14379
15156
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
14380
15157
|
a reset should return to. */
|
|
14381
15158
|
value?: (HelixHeadlessTextarea["value"]) | undefined;
|
|
14382
|
-
/**
|
|
14383
|
-
|
|
15159
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
15160
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
15161
|
+
names the control inside, and a new one renders at once.
|
|
15162
|
+
|
|
15163
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
15164
|
+
render it again.** It is the platform's attribute and no property of this
|
|
15165
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
15166
|
+
the old words. Data Table meets this on every column move: each row's
|
|
15167
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
15168
|
+
|
|
15169
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
15170
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
15171
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
15172
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
15173
|
+
"aria-label"?: (HelixHeadlessTextarea["namedBy"]) | undefined;
|
|
15174
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
15175
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
15176
|
+
names the control inside, and a new one renders at once.
|
|
15177
|
+
|
|
15178
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
15179
|
+
render it again.** It is the platform's attribute and no property of this
|
|
15180
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
15181
|
+
the old words. Data Table meets this on every column move: each row's
|
|
15182
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
15183
|
+
|
|
15184
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
15185
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
15186
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
15187
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
15188
|
+
namedBy?: (HelixHeadlessTextarea["namedBy"]) | undefined;
|
|
14384
15189
|
/** The validation message shown under the control. It replaces the
|
|
14385
15190
|
browser's message. */
|
|
14386
15191
|
feedback?: (HelixHeadlessTextarea["feedback"]) | undefined;
|
|
@@ -14738,8 +15543,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
14738
15543
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
14739
15544
|
a reset should return to. */
|
|
14740
15545
|
value?: (HelixHeadlessTimeInput["value"]) | undefined;
|
|
14741
|
-
/**
|
|
14742
|
-
|
|
15546
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
15547
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
15548
|
+
names the control inside, and a new one renders at once.
|
|
15549
|
+
|
|
15550
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
15551
|
+
render it again.** It is the platform's attribute and no property of this
|
|
15552
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
15553
|
+
the old words. Data Table meets this on every column move: each row's
|
|
15554
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
15555
|
+
|
|
15556
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
15557
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
15558
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
15559
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
15560
|
+
"aria-label"?: (HelixHeadlessTimeInput["namedBy"]) | undefined;
|
|
15561
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
15562
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
15563
|
+
names the control inside, and a new one renders at once.
|
|
15564
|
+
|
|
15565
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
15566
|
+
render it again.** It is the platform's attribute and no property of this
|
|
15567
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
15568
|
+
the old words. Data Table meets this on every column move: each row's
|
|
15569
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
15570
|
+
|
|
15571
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
15572
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
15573
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
15574
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
15575
|
+
namedBy?: (HelixHeadlessTimeInput["namedBy"]) | undefined;
|
|
14743
15576
|
/** The validation message shown under the control. It replaces the
|
|
14744
15577
|
browser's message. */
|
|
14745
15578
|
feedback?: (HelixHeadlessTimeInput["feedback"]) | undefined;
|
|
@@ -14876,6 +15709,19 @@ A time not on the step is simply never offered, so it is not an error to
|
|
|
14876
15709
|
name one, and naming every time in the list is how the empty state is
|
|
14877
15710
|
reached honestly rather than by handing over an empty range. */
|
|
14878
15711
|
disableTimes?: (HelixHeadlessTimePicker["disableTimes"]) | undefined;
|
|
15712
|
+
/** What the list says when no time falls between `min` and `max`.
|
|
15713
|
+
|
|
15714
|
+
The fallback of the `empty` slot. */
|
|
15715
|
+
"empty-text"?: (HelixHeadlessTimePicker["emptyText"]) | undefined;
|
|
15716
|
+
/** What the list says when no time falls between `min` and `max`.
|
|
15717
|
+
|
|
15718
|
+
The fallback of the `empty` slot. */
|
|
15719
|
+
emptyText?: (HelixHeadlessTimePicker["emptyText"]) | undefined;
|
|
15720
|
+
/** Help under the times, such as the hours a shop is open, read by screen
|
|
15721
|
+
readers as the list's description. A message in `feedback` replaces it.
|
|
15722
|
+
|
|
15723
|
+
The fallback of the `hint` slot. */
|
|
15724
|
+
hint?: (HelixHeadlessTimePicker["hint"]) | undefined;
|
|
14879
15725
|
/** The clock the times are written on: `h12` for twelve hours with a
|
|
14880
15726
|
meridiem, `h23` for twenty-four.
|
|
14881
15727
|
|
|
@@ -14902,7 +15748,8 @@ English, "Stunde" in German. */
|
|
|
14902
15748
|
hourLabel?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
14903
15749
|
/** Accessible name for the list, which has no visible one of its own.
|
|
14904
15750
|
|
|
14905
|
-
An `aria-label` or `aria-labelledby` on the host names the list instead
|
|
15751
|
+
An `aria-label` or `aria-labelledby` on the host names the list instead,
|
|
15752
|
+
and so does a label slotted into `label`, which is also drawn above it. */
|
|
14906
15753
|
label?: (HelixHeadlessTimePicker["label"]) | undefined;
|
|
14907
15754
|
/** Language tag the times and the wheels' names are written in.
|
|
14908
15755
|
|
|
@@ -15156,6 +16003,11 @@ Whatever `<time>` accepts, which is a date, a time, both, a duration or a
|
|
|
15156
16003
|
week. Unset, the label is written as it was given and nothing claims to
|
|
15157
16004
|
know what instant it names. */
|
|
15158
16005
|
datetime?: (HelixHeadlessTimelineItem["datetime"]) | undefined;
|
|
16006
|
+
/** Writes the time as how long ago it was, or how long until it, from
|
|
16007
|
+
`datetime`, where the `time` slot is empty: `long` ("3 hours ago"),
|
|
16008
|
+
`short` ("3 hr. ago") or `narrow` ("3h ago"). Set with no value, it is
|
|
16009
|
+
`long`. The words move on as they go stale. */
|
|
16010
|
+
relative?: (HelixHeadlessTimelineItem["relative"]) | undefined;
|
|
15159
16011
|
/** The kind of event. It sets the color of the mark and nothing else. */
|
|
15160
16012
|
tone?: (HelixHeadlessTimelineItem["tone"]) | undefined;
|
|
15161
16013
|
};
|
|
@@ -15355,8 +16207,36 @@ asking it meant. Writing always applies; `<helix-input value="x">` is the
|
|
|
15355
16207
|
same statement in markup, and `default-value` is how markup seeds a value
|
|
15356
16208
|
a reset should return to. */
|
|
15357
16209
|
value?: (HelixHeadlessToggleGroup["value"]) | undefined;
|
|
15358
|
-
/**
|
|
15359
|
-
|
|
16210
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
16211
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
16212
|
+
names the control inside, and a new one renders at once.
|
|
16213
|
+
|
|
16214
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
16215
|
+
render it again.** It is the platform's attribute and no property of this
|
|
16216
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
16217
|
+
the old words. Data Table meets this on every column move: each row's
|
|
16218
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
16219
|
+
|
|
16220
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
16221
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
16222
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
16223
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
16224
|
+
"aria-label"?: (HelixHeadlessToggleGroup["namedBy"]) | undefined;
|
|
16225
|
+
/** The name a screen reader says for the field where it shows no label, as
|
|
16226
|
+
the platform's `aria-label`. It is drawn as a label and clipped, so it
|
|
16227
|
+
names the control inside, and a new one renders at once.
|
|
16228
|
+
|
|
16229
|
+
**An `aria-label` is read when the field renders, and nothing else would
|
|
16230
|
+
render it again.** It is the platform's attribute and no property of this
|
|
16231
|
+
element's, so writing a new one scheduled no update and the label kept
|
|
16232
|
+
the old words. Data Table meets this on every column move: each row's
|
|
16233
|
+
checkbox is named by the first column, so reordering renames every one.
|
|
16234
|
+
|
|
16235
|
+
A reactive property on the attribute, which is the one way Lit observes
|
|
16236
|
+
one. Overriding `observedAttributes` in a mixin compiled `this` to the
|
|
16237
|
+
mixin's own class, so every field observed only this mixin's attributes
|
|
16238
|
+
and dropped its own. Not reflected: the attribute is the consumer's. */
|
|
16239
|
+
namedBy?: (HelixHeadlessToggleGroup["namedBy"]) | undefined;
|
|
15360
16240
|
/** The validation message shown under the control. It replaces the
|
|
15361
16241
|
browser's message. */
|
|
15362
16242
|
feedback?: (HelixHeadlessToggleGroup["feedback"]) | undefined;
|
|
@@ -16010,6 +16890,18 @@ refused, in a `reorderable` tree. */
|
|
|
16010
16890
|
An `aria-label` or `aria-labelledby` on the host names the tree too, and
|
|
16011
16891
|
wins over this. */
|
|
16012
16892
|
label?: (HelixHeadlessTree["label"]) | undefined;
|
|
16893
|
+
/** What screen readers hear when an item moves into another branch, in a
|
|
16894
|
+
`reorderable` tree. `{name}` is the item's words, `{parent}` the words of
|
|
16895
|
+
the branch it moved into, or the tree's `label` for the top level,
|
|
16896
|
+
`{position}` its place there, counting from 1, and `{count}` the number of
|
|
16897
|
+
items there. */
|
|
16898
|
+
"moved-into-label"?: (HelixHeadlessTree["movedIntoLabel"]) | undefined;
|
|
16899
|
+
/** What screen readers hear when an item moves into another branch, in a
|
|
16900
|
+
`reorderable` tree. `{name}` is the item's words, `{parent}` the words of
|
|
16901
|
+
the branch it moved into, or the tree's `label` for the top level,
|
|
16902
|
+
`{position}` its place there, counting from 1, and `{count}` the number of
|
|
16903
|
+
items there. */
|
|
16904
|
+
movedIntoLabel?: (HelixHeadlessTree["movedIntoLabel"]) | undefined;
|
|
16013
16905
|
/** What screen readers hear each time an item moves, in a `reorderable`
|
|
16014
16906
|
tree. `{name}` is the item's words, `{position}` its place among its
|
|
16015
16907
|
siblings, counting from 1, and `{count}` the number of siblings. */
|
|
@@ -16303,6 +17195,20 @@ export type HelixHeadlessVideoPlaylistHelixEndElementEvent =
|
|
|
16303
17195
|
export type HelixHeadlessVideoPlaylistVueProps = {
|
|
16304
17196
|
/** The list's name, read by screen readers. */
|
|
16305
17197
|
label?: (HelixHeadlessVideoPlaylist["label"]) | undefined;
|
|
17198
|
+
/** What the live region says when the playlist moves to another entry.
|
|
17199
|
+
`{title}` is the entry's name.
|
|
17200
|
+
|
|
17201
|
+
**A move a reader did not make is said.** At the end of a clip the
|
|
17202
|
+
playlist starts the next one, and the only other trace of that is the
|
|
17203
|
+
`aria-current` on a button the reader is not on. */
|
|
17204
|
+
"playing-label"?: (HelixHeadlessVideoPlaylist["playingLabel"]) | undefined;
|
|
17205
|
+
/** What the live region says when the playlist moves to another entry.
|
|
17206
|
+
`{title}` is the entry's name.
|
|
17207
|
+
|
|
17208
|
+
**A move a reader did not make is said.** At the end of a clip the
|
|
17209
|
+
playlist starts the next one, and the only other trace of that is the
|
|
17210
|
+
`aria-current` on a button the reader is not on. */
|
|
17211
|
+
playingLabel?: (HelixHeadlessVideoPlaylist["playingLabel"]) | undefined;
|
|
16306
17212
|
/** What happens when an entry ends with no next one to go to. `one` plays the
|
|
16307
17213
|
same entry again, and `all` goes from the last entry back to the first.
|
|
16308
17214
|
Absent, the playlist stops on the last entry and sends `helix-end`.
|
|
@@ -16364,6 +17270,10 @@ permitted is the browser's policy, and what follows a refused autoplay is a
|
|
|
16364
17270
|
paused player showing its start control, which is the correct thing to be
|
|
16365
17271
|
looking at. */
|
|
16366
17272
|
autoplay?: (HelixHeadlessVideo["autoplay"]) | undefined;
|
|
17273
|
+
/** What the live region says when `c` turns captions off. */
|
|
17274
|
+
"captions-hidden-label"?: (HelixHeadlessVideo["captionsHiddenLabel"]) | undefined;
|
|
17275
|
+
/** What the live region says when `c` turns captions off. */
|
|
17276
|
+
captionsHiddenLabel?: (HelixHeadlessVideo["captionsHiddenLabel"]) | undefined;
|
|
16367
17277
|
/** The name of the captions control when the video has one track. The control
|
|
16368
17278
|
turns that track on and off.
|
|
16369
17279
|
|
|
@@ -16384,6 +17294,10 @@ tracks. */
|
|
|
16384
17294
|
/** The name of the row that turns captions off, when the video has several
|
|
16385
17295
|
tracks. */
|
|
16386
17296
|
captionsOffLabel?: (HelixHeadlessVideo["captionsOffLabel"]) | undefined;
|
|
17297
|
+
/** What the live region says when `c` turns captions on. */
|
|
17298
|
+
"captions-shown-label"?: (HelixHeadlessVideo["captionsShownLabel"]) | undefined;
|
|
17299
|
+
/** What the live region says when `c` turns captions on. */
|
|
17300
|
+
captionsShownLabel?: (HelixHeadlessVideo["captionsShownLabel"]) | undefined;
|
|
16387
17301
|
/** Whether the browser draws its native controls. When set, this element draws
|
|
16388
17302
|
no controls of its own.
|
|
16389
17303
|
|
|
@@ -16560,6 +17474,10 @@ writes the current entry's name here. */
|
|
|
16560
17474
|
"more-label"?: (HelixHeadlessVideo["moreLabel"]) | undefined;
|
|
16561
17475
|
/** What the button that opens `overflow-controls` is called. */
|
|
16562
17476
|
moreLabel?: (HelixHeadlessVideo["moreLabel"]) | undefined;
|
|
17477
|
+
/** What the live region says when a key mutes the video. */
|
|
17478
|
+
"muted-label"?: (HelixHeadlessVideo["mutedLabel"]) | undefined;
|
|
17479
|
+
/** What the live region says when a key mutes the video. */
|
|
17480
|
+
mutedLabel?: (HelixHeadlessVideo["mutedLabel"]) | undefined;
|
|
16563
17481
|
/** The name of the mute control. The control shows as pressed while the video
|
|
16564
17482
|
is muted. */
|
|
16565
17483
|
"mute-label"?: (HelixHeadlessVideo["muteLabel"]) | undefined;
|
|
@@ -16602,6 +17520,10 @@ So the consumer says where the fold is, which they can, having already
|
|
|
16602
17520
|
named the controls in order. A name in both lists is drawn once, on the
|
|
16603
17521
|
bar: two of the same control is worse than either placement. */
|
|
16604
17522
|
overflowControls?: (HelixHeadlessVideo["overflowControls"]) | undefined;
|
|
17523
|
+
/** What the live region says when a key pauses the video. */
|
|
17524
|
+
"paused-label"?: (HelixHeadlessVideo["pausedLabel"]) | undefined;
|
|
17525
|
+
/** What the live region says when a key pauses the video. */
|
|
17526
|
+
pausedLabel?: (HelixHeadlessVideo["pausedLabel"]) | undefined;
|
|
16605
17527
|
/** The name of the play control while pressing it would pause the video. */
|
|
16606
17528
|
"pause-label"?: (HelixHeadlessVideo["pauseLabel"]) | undefined;
|
|
16607
17529
|
/** The name of the play control while pressing it would pause the video. */
|
|
@@ -16624,6 +17546,10 @@ this is what a screen reader calls it on arriving. */
|
|
|
16624
17546
|
/** The name of the player when `label` is not set. The player is a group, and
|
|
16625
17547
|
this is what a screen reader calls it on arriving. */
|
|
16626
17548
|
playerLabel?: (HelixHeadlessVideo["playerLabel"]) | undefined;
|
|
17549
|
+
/** What the live region says when a key plays the video. */
|
|
17550
|
+
"playing-label"?: (HelixHeadlessVideo["playingLabel"]) | undefined;
|
|
17551
|
+
/** What the live region says when a key plays the video. */
|
|
17552
|
+
playingLabel?: (HelixHeadlessVideo["playingLabel"]) | undefined;
|
|
16627
17553
|
/** The name of the play control while pressing it would start the video. */
|
|
16628
17554
|
"play-label"?: (HelixHeadlessVideo["playLabel"]) | undefined;
|
|
16629
17555
|
/** The name of the play control while pressing it would start the video. */
|
|
@@ -16722,6 +17648,16 @@ negation. */
|
|
|
16722
17648
|
/** How the scrubber reads out where the video is, with `{position}` and
|
|
16723
17649
|
`{duration}` filled in. */
|
|
16724
17650
|
timeLabel?: (HelixHeadlessVideo["timeLabel"]) | undefined;
|
|
17651
|
+
/** What the live region says when a key unmutes the video. */
|
|
17652
|
+
"unmuted-label"?: (HelixHeadlessVideo["unmutedLabel"]) | undefined;
|
|
17653
|
+
/** What the live region says when a key unmutes the video. */
|
|
17654
|
+
unmutedLabel?: (HelixHeadlessVideo["unmutedLabel"]) | undefined;
|
|
17655
|
+
/** What the live region says when a key changes the volume. `{percent}` is the
|
|
17656
|
+
volume from 0 to 100, written in the locale. */
|
|
17657
|
+
"volume-changed-label"?: (HelixHeadlessVideo["volumeChangedLabel"]) | undefined;
|
|
17658
|
+
/** What the live region says when a key changes the volume. `{percent}` is the
|
|
17659
|
+
volume from 0 to 100, written in the locale. */
|
|
17660
|
+
volumeChangedLabel?: (HelixHeadlessVideo["volumeChangedLabel"]) | undefined;
|
|
16725
17661
|
/** What the volume slider is called. */
|
|
16726
17662
|
"volume-label"?: (HelixHeadlessVideo["volumeLabel"]) | undefined;
|
|
16727
17663
|
/** What the volume slider is called. */
|
|
@@ -16923,6 +17859,8 @@ export type CustomCssProperties = {
|
|
|
16923
17859
|
"--chart-bar-wash"?: (string) | undefined;
|
|
16924
17860
|
/** Written on the control inside each toggle button of a group with `selection-mode`: `1` while it is pressed and `0` while it is not. Read it in a `::part(button)` rule to draw the pressed look. */
|
|
16925
17861
|
"--button-group-pressed"?: (string) | undefined;
|
|
17862
|
+
/** The board's zoom, which the board writes: 1 at the document's own size, 0.5 at half. The cards inherit it, so a card's stylesheet can draw less when the board is far out, such as a border that stays one pixel wide at `calc(1px / var(--canvas-zoom))`. */
|
|
17863
|
+
"--canvas-zoom"?: (string) | undefined;
|
|
16926
17864
|
/** Space between slides. Your stylesheet sets it, and the component uses it to measure the run. */
|
|
16927
17865
|
"--carousel-gap"?: (string) | undefined;
|
|
16928
17866
|
/** The size of one pane. Your stylesheet sets it, and the component uses it to measure the run. */
|
|
@@ -17049,7 +17987,7 @@ export type CustomCssProperties = {
|
|
|
17049
17987
|
"--scroll-area-scroll-fraction"?: (string) | undefined;
|
|
17050
17988
|
/** The share of the track the thumb covers, from 0 to 1, which is how much of the content is in view. Written on each `scrollbar` part. */
|
|
17051
17989
|
"--scroll-area-thumb-fraction"?: (string) | undefined;
|
|
17052
|
-
/** Where a bubble's thumb is, as a fraction of the track, 0 to 1. Set on each `tooltip` part. */
|
|
17990
|
+
/** Where a bubble's or a thumb box's thumb is, as a fraction of the track, 0 to 1. Set on each `tooltip` and `thumb` part. */
|
|
17053
17991
|
"--slider-at"?: (string) | undefined;
|
|
17054
17992
|
/** The value as a fraction of the range, 0 to 1. */
|
|
17055
17993
|
"--slider-fraction"?: (string) | undefined;
|
|
@@ -17095,13 +18033,13 @@ export type CustomCssProperties = {
|
|
|
17095
18033
|
// Note: Some tooling expects this augmentation under "@vue/runtime-core", while
|
|
17096
18034
|
// other docs/examples use "vue". We emit both for compatibility.
|
|
17097
18035
|
export interface WcToolkitVueGlobalComponents {
|
|
17098
|
-
/** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. The trigger sits inside a heading, so a screen reader lists the section with the page's headings. The level is the item's 'heading-level', then the accordion's, then 3. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML. The browser's find in page searches a closed section, and a match opens it, with 'helix-before-open' first, as React Aria's disclosure does. Closed content is 'hidden="until-found"', which hides it with no stylesheet loaded and keeps it out of the tab order and the accessibility tree. A section that closes keeps its content drawn until the content part's animations and transitions end, so a sheet that animates the section closed shows the content shrinking rather than an empty box. Set 'hidden-until-found="false"' and a closed section is 'hidden' and 'inert' instead, and find in page skips it. While it is open, the content part carries the content's height as '--accordion-content-height', as Radix's accordion does, for a stylesheet that animates the section open with keyframes of its own. */
|
|
18036
|
+
/** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. The trigger sits inside a heading, so a screen reader lists the section with the page's headings. The level is the item's 'heading-level', then the accordion's, then 3. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML. The browser's find in page searches a closed section, and a match opens it, with 'helix-before-open' first, as React Aria's disclosure does. Closed content is 'hidden="until-found"', which hides it with no stylesheet loaded and keeps it out of the tab order and the accessibility tree. A section that closes keeps its content drawn until the content part's animations and transitions end, so a sheet that animates the section closed shows the content shrinking rather than an empty box. Set 'hidden-until-found="false"' and a closed section is 'hidden' and 'inert' instead, and find in page skips it. A section whose trigger has no words, with nothing in its 'summary' slot, is announced as a bare button, and a development build warns once with the kind 'missing-name'. While it is open, the content part carries the content's height as '--accordion-content-height', as Radix's accordion does, for a stylesheet that animates the section open with keyframes of its own. */
|
|
17099
18037
|
"helix-headless-accordion-item": DefineCustomElement<
|
|
17100
18038
|
HelixHeadlessAccordionItem,
|
|
17101
18039
|
HelixHeadlessAccordionItemVueProps,
|
|
17102
18040
|
HelixHeadlessAccordionItemVueEvents
|
|
17103
18041
|
>;
|
|
17104
|
-
/** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names. Keys, on a trigger: Up and Down Arrow move to the previous and the next trigger, and so do Left and Right, wrapping at the ends; Home and End go to the first and the last. Enter and Space open and close the section. Disabled sections are passed over. Each trigger is a button with 'aria-expanded' and 'aria-controls', inside a heading, level 3 unless 'heading-level' says otherwise, so the sections are in a screen reader's list of headings. An open section is a region named by its trigger. Set the level that fits the page's outline. Find in page searches the closed sections too, and opens the one it matches in. 'hidden-until-found="false"' turns that off. */
|
|
18042
|
+
/** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names. Keys, on a trigger: Up and Down Arrow move to the previous and the next trigger, and so do Left and Right, wrapping at the ends; Home and End go to the first and the last. Enter and Space open and close the section. Disabled sections are passed over. Under 'single' the open section's trigger is 'aria-disabled', because a press cannot close it. Each trigger is a button with 'aria-expanded' and 'aria-controls', inside a heading, level 3 unless 'heading-level' says otherwise, so the sections are in a screen reader's list of headings. An open section is a region named by its trigger. Set the level that fits the page's outline. Find in page searches the closed sections too, and opens the one it matches in. 'hidden-until-found="false"' turns that off. */
|
|
17105
18043
|
"helix-headless-accordion": DefineCustomElement<
|
|
17106
18044
|
HelixHeadlessAccordion,
|
|
17107
18045
|
HelixHeadlessAccordionVueProps,
|
|
@@ -17155,13 +18093,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17155
18093
|
HelixHeadlessBlockquoteVueProps,
|
|
17156
18094
|
HelixHeadlessBlockquoteVueEvents
|
|
17157
18095
|
>;
|
|
17158
|
-
/** Each crumb renders its separator and sets its list-item role. It hides its own separator with ':host(:first-child)', so the trail needs no index from the parent. Set 'href' to make the whole crumb an anchor, which works with Enter, middle click, and the status bar, and before any JavaScript runs. A router cannot reach an anchor inside a shadow root, so intercept the click for client-side navigation, as with 'Tree.Item' and 'List.Item'
|
|
18096
|
+
/** Each crumb renders its separator and sets its list-item role. It hides its own separator with ':host(:first-child)', so the trail needs no index from the parent. Set 'href' to make the whole crumb an anchor, which works with Enter, middle click, and the status bar, and before any JavaScript runs. A router cannot reach an anchor inside a shadow root, so intercept the click for client-side navigation, as with 'Tree.Item' and 'List.Item': a plain press on the link sends 'helix-select' with the 'href' as its value first, and canceling it keeps the browser from following, so a client-side router follows it instead, as React Aria's 'onAction' lets a router do. A press with a modifier opens the link where the browser opens it and sends nothing. Without 'href', the crumb renders a plain '<span>' around what you slot, including your own anchor. The current page is plain text, and 'aria-current="page"' on the host conveys the position. In a trail where no crumb is 'current', the last one is said to be the current page, and keeps its link. An 'aria-current' you write on the host, such as 'aria-current="location"', replaces the one the crumb gives itself. */
|
|
17159
18097
|
"helix-headless-breadcrumb": DefineCustomElement<
|
|
17160
18098
|
HelixHeadlessBreadcrumb,
|
|
17161
18099
|
HelixHeadlessBreadcrumbVueProps,
|
|
17162
18100
|
HelixHeadlessBreadcrumbVueEvents
|
|
17163
18101
|
>;
|
|
17164
|
-
/** The host is the navigation landmark, named "Breadcrumb" by default. An 'aria-label' on the host names the trail instead, and so does 'label'. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. Where no slotted crumb is 'current', the last one is said to be the current page. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. A trail built from data, such as a router's matched routes, takes 'items': an array of '{ label, href }', drawn as crumbs in order, the last one as the current page. Slotted crumbs follow them. Use one way or the other in a trail. With 'max-items', a trail
|
|
18102
|
+
/** The host is the navigation landmark, named "Breadcrumb" by default. An 'aria-label' on the host names the trail instead, and so does 'label'. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. Where no slotted crumb is 'current', the last one is said to be the current page. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. A trail built from data, such as a router's matched routes, takes 'items': an array of '{ label, href }', drawn as crumbs in order, the last one as the current page. Slotted crumbs follow them. Use one way or the other in a trail. With 'max-items', a trail that is longer folds its middle into one place: the first crumb, a button, then the last 'max-items' less one. The button is named by 'expand-label' and shows the whole trail, moving focus to the first crumb it brought back. A trail drawn from 'items' draws the button as a crumb of its own, and a new 'items' folds again. A slotted trail hides the crumbs it folds, which take no room, and its first crumb draws the button after its link; a change to the crumbs folds again. **Keyboard.** Each crumb with an 'href' is a link and one tab stop, and Enter follows it. The current page and the separators are not in the tab order. In a folded trail, Enter or Space on the fold's button shows the whole trail and moves focus to the first crumb it brought back. */
|
|
17165
18103
|
"helix-headless-breadcrumbs": DefineCustomElement<
|
|
17166
18104
|
HelixHeadlessBreadcrumbs,
|
|
17167
18105
|
HelixHeadlessBreadcrumbsVueProps,
|
|
@@ -17197,7 +18135,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17197
18135
|
HelixHeadlessCanvasNodeVueProps,
|
|
17198
18136
|
HelixHeadlessCanvasNodeVueEvents
|
|
17199
18137
|
>;
|
|
17200
|
-
/** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. Once your page removes what Delete asked for, focus moves to the next stop, to the one before where it was the last, and to the board where none is left. A focused card your page removes for its own reasons hands focus on the same way, unless the reader has already moved focus somewhere else. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
|
|
18138
|
+
/** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - The card you land on is selected. Control or Command with an arrow key, Home, or End moves without changing the selection, and Space adds the card to the selection or takes it out, so you can select cards that are not next to each other. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. Once your page removes what Delete asked for, focus moves to the next stop, to the one before where it was the last, and to the board where none is left. A focused card your page removes for its own reasons hands focus on the same way, unless the reader has already moved focus somewhere else. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
|
|
17201
18139
|
"helix-headless-canvas": DefineCustomElement<
|
|
17202
18140
|
HelixHeadlessCanvas,
|
|
17203
18141
|
HelixHeadlessCanvasVueProps,
|
|
@@ -17227,7 +18165,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17227
18165
|
HelixHeadlessChatMessageVueProps,
|
|
17228
18166
|
HelixHeadlessChatMessageVueEvents
|
|
17229
18167
|
>;
|
|
17230
|
-
/** Chat has no positioning, no backdrop, and no trigger, so you can put it in any container, such as a page, a sidebar, a modal, or a floating panel. The transcript stays pinned to the bottom, including while a streamed answer grows, until the user scrolls more than 'threshold' away from it. With 'history' set to 'more', reaching the top fires 'helix-history'. Set 'loading' while you fetch, then prepend the older turns. The turn the user was reading stays in place on screen. The log is 'aria-live="off"'. A separate status region announces each new turn once, when it has finished arriving. It skips the user's own turns unless they failed to send, turns loaded as history, and the turns already there when the transcript opened. Pass the turns as children or as 'turns' data. Do not use both. Children render from the server and suit most conversations. 'turns' draws a long transcript one window at a time, so the log needs a block size of its own. **A conversation is built from three elements.** The chat holds the transcript, a 'Chat.Message' stands for each turn, and a 'Chat.Composer' sits in the 'composer' slot. When the user sends, 'helix-send' reaches the chat: add their turn with 'author="me"' and 'state="sending"', then set 'state' to 'sent' or 'failed' when your server answers. Add the reply as a turn with 'state="streaming"', write its text as it arrives, and set 'state' to 'sent' when it is complete. While the user types, the composer sends 'helix-typing', which you can pass on to the other side. When the other side types, set 'typing' to their name: the status band draws three dots and "Ada is typing" ('typing-label'), which a screen reader hears, and clearing it takes them away. Anything slotted into 'status' is drawn first. A screen reader names each turn by its author and its time, such as "You, 2 minutes ago". Set 'me-label' and 'message-label' to say it in your language, and give each turn by 'them' an 'author-label'. A turn with neither an author label nor a time is named by 'turn-label', "Message". A turn from 'turns' is drawn in the chat's shadow root, so style it through the forwarded 'message-*' parts. A turn by 'me' also gets each part with '-mine' added, and the turn's state adds 'message-meta-failed', 'message-content-sending', and 'message-content-streaming'. To style each participant differently, give 'author-styles' the declarations for each author, such as '{"ada": "--chat-message-background-color: …"}': the message drawn for each of their turns takes them as its 'style', so the message's custom properties change for that author alone. Turns passed as children are styled by their 'author', such as 'helix-chat-message[author="ada"]'. */
|
|
18168
|
+
/** Chat has no positioning, no backdrop, and no trigger, so you can put it in any container, such as a page, a sidebar, a modal, or a floating panel. The transcript stays pinned to the bottom, including while a streamed answer grows, until the user scrolls more than 'threshold' away from it. With 'history' set to 'more', reaching the top fires 'helix-history'. Set 'loading' while you fetch, then prepend the older turns. The turn the user was reading stays in place on screen. The log is 'aria-live="off"'. A separate status region announces each new turn once, when it has finished arriving. It skips the user's own turns unless they failed to send, turns loaded as history, and the turns already there when the transcript opened. A turn is said with its author first, such as "Ada: It ships today" ('arrival-label'), where its author can be named. Pass the turns as children or as 'turns' data. Do not use both. Children render from the server and suit most conversations. 'turns' draws a long transcript one window at a time, so the log needs a block size of its own. **A conversation is built from three elements.** The chat holds the transcript, a 'Chat.Message' stands for each turn, and a 'Chat.Composer' sits in the 'composer' slot. When the user sends, 'helix-send' reaches the chat: add their turn with 'author="me"' and 'state="sending"', then set 'state' to 'sent' or 'failed' when your server answers. Add the reply as a turn with 'state="streaming"', write its text as it arrives, and set 'state' to 'sent' when it is complete. While the user types, the composer sends 'helix-typing', which you can pass on to the other side. When the other side types, set 'typing' to their name: the status band draws three dots and "Ada is typing" ('typing-label'), which a screen reader hears, and clearing it takes them away. Anything slotted into 'status' is drawn first. A screen reader names each turn by its author and its time, such as "You, 2 minutes ago". Set 'me-label' and 'message-label' to say it in your language, and give each turn by 'them' an 'author-label'. A turn with neither an author label nor a time is named by 'turn-label', "Message". A turn from 'turns' is drawn in the chat's shadow root, so style it through the forwarded 'message-*' parts. A turn by 'me' also gets each part with '-mine' added, and the turn's state adds 'message-meta-failed', 'message-content-sending', and 'message-content-streaming'. To style each participant differently, give 'author-styles' the declarations for each author, such as '{"ada": "--chat-message-background-color: …"}': the message drawn for each of their turns takes them as its 'style', so the message's custom properties change for that author alone. Turns passed as children are styled by their 'author', such as 'helix-chat-message[author="ada"]'. */
|
|
17231
18169
|
"helix-headless-chat": DefineCustomElement<
|
|
17232
18170
|
HelixHeadlessChat,
|
|
17233
18171
|
HelixHeadlessChatVueProps,
|
|
@@ -17257,13 +18195,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17257
18195
|
HelixHeadlessCodeVueProps,
|
|
17258
18196
|
HelixHeadlessCodeVueEvents
|
|
17259
18197
|
>;
|
|
17260
|
-
/** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)',
|
|
18198
|
+
/** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)', 'hsl(0 100% 50%)', 'oklch(62.8% 0.258 29.2)', and 'hsb(0, 100%, 100%)'. It writes colors in the syntax that 'format' names. The field shows the value without reformatting it, because half-typed input does not survive a round trip through a formatter. Date Input does the same with dates. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does, so the message about a color it cannot read waits until you are done. Dragging in the panel sends 'input' as the color moves and 'change' when it settles. The trigger and ArrowDown open the panel with focus in the square. Tab moves between the panel's controls without leaving it, and Escape closes it and returns focus to the field. The component sets '--color-input-swatch', so do not set it yourself. It holds the resolved color, so the styled tier can paint the swatch without parsing the value. */
|
|
17261
18199
|
"helix-headless-color-input": DefineCustomElement<
|
|
17262
18200
|
HelixHeadlessColorInput,
|
|
17263
18201
|
HelixHeadlessColorInputVueProps,
|
|
17264
18202
|
HelixHeadlessColorInputVueEvents
|
|
17265
18203
|
>;
|
|
17266
|
-
/** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. The square is one tab stop. In it, the up and down arrows move brightness and the left and right arrows move saturation, and PageUp and PageDown move brightness by ten. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. A screen reader hears the color's name, such as "vibrant red", after the two numbers on the square and after the number on the hue ramp, and each preset is named by its color. The opacity ramp is heard as a percentage. Set 'color-words' to speak the names in another language. The presets are a listbox with the current color selected, and one tab stop. The arrow keys move between them, Home and End go to the ends, and Enter, Space or a press chooses one. */
|
|
18204
|
+
/** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. The square is one tab stop. In it, the up and down arrows move brightness and the left and right arrows move saturation, and PageUp and PageDown move brightness by ten. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. A screen reader hears the color's name, such as "vibrant red", after the two numbers on the square and after the number on the hue ramp, and each preset is named by its color. The opacity ramp is heard as a percentage. Set 'color-words' to speak the names in another language. 'label' names the picker, which is then a group with that name, and the square's ramps say it before their own, as "Brand, Saturation". 'hint' writes help under the picker, which the square, the ramps and the value field are described by. Inside Color Input the field carries both. The presets are a listbox with the current color selected, and one tab stop. The arrow keys move between them, Home and End go to the ends, and Enter, Space or a press chooses one. */
|
|
17267
18205
|
"helix-headless-color-picker": DefineCustomElement<
|
|
17268
18206
|
HelixHeadlessColorPicker,
|
|
17269
18207
|
HelixHeadlessColorPickerVueProps,
|
|
@@ -17275,7 +18213,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17275
18213
|
HelixHeadlessComboboxVueProps,
|
|
17276
18214
|
HelixHeadlessComboboxVueEvents
|
|
17277
18215
|
>;
|
|
17278
|
-
/** 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. 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". */
|
|
18216
|
+
/** 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 Backspace in an empty filter goes back. '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, 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, 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 'combobox' with 'aria-activedescendant' on the highlighted command, and 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. */
|
|
17279
18217
|
"helix-headless-command": DefineCustomElement<
|
|
17280
18218
|
HelixHeadlessCommand,
|
|
17281
18219
|
HelixHeadlessCommandVueProps,
|
|
@@ -17287,13 +18225,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17287
18225
|
HelixHeadlessCopyButtonVueProps,
|
|
17288
18226
|
HelixHeadlessCopyButtonVueEvents
|
|
17289
18227
|
>;
|
|
17290
|
-
/** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. - 'selection-behavior="replace"' makes a press or a move select the row alone, as a file list does. Control or Command with a press adds or takes out one row, and Shift with a press selects every row from the one last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. Under 'selection-behavior="replace"', selects it alone, and Control or Command with Space adds or takes out the row. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. **'reorderable-rows' lets people move rows.** A column of grips leads each row, named by 'move-row-label'. Drag a grip to move its row, and the table scrolls near an edge. Or press Space or Enter on a grip, or click it, to pick up its row, move it with Down and Up, Home and End, and press Space or Enter again to drop it. A click on another row drops it there, and Escape puts it back. The table says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder' with 'kind' set to 'row', whose 'keys' hold every key of 'rows' in the new order. **You move the rows**: set 'rows' to the new order, and the table draws it. Set 'row-key', so a row is known by its key once it has moved. The grips do nothing while a 'sort' is set, since the sort decides the order, and a tree grid draws none. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
|
|
18228
|
+
/** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. - 'selection-behavior="replace"' makes a press or a move select the row alone, as a file list does. Control or Command with a press adds or takes out one row, and Shift with a press selects every row from the one last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. Under 'selection-behavior="replace"', selects it alone, and Control or Command with Space adds or takes out the row. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. When a fetch fails, set 'error-text', such as "The files did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. **'reorderable-rows' lets people move rows.** A column of grips leads each row, named by 'move-row-label'. Drag a grip to move its row, and the table scrolls near an edge. Or press Space or Enter on a grip, or click it, to pick up its row, move it with Down and Up, Home and End, and press Space or Enter again to drop it. A click on another row drops it there, and Escape puts it back. The table says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder' with 'kind' set to 'row', whose 'keys' hold every key of 'rows' in the new order. **You move the rows**: set 'rows' to the new order, and the table draws it. Set 'row-key', so a row is known by its key once it has moved. The grips do nothing while a 'sort' is set, since the sort decides the order, and a tree grid draws none. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
|
|
17291
18229
|
"helix-headless-data-table": DefineCustomElement<
|
|
17292
18230
|
HelixHeadlessDataTable,
|
|
17293
18231
|
HelixHeadlessDataTableVueProps,
|
|
17294
18232
|
HelixHeadlessDataTableVueEvents
|
|
17295
18233
|
>;
|
|
17296
|
-
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger and ArrowDown open the calendar with focus on the selected day, Tab moves between the calendar's controls without leaving it, and Escape closes it and returns focus to the field. A press into the field opens the calendar too. Tab into the field opens nothing, and Tab out of the field closes the calendar. With 'segmented', the field is a row of segments in place of the text: a month, a day and a year in the order the locale writes them, each set with digits or the arrow keys. Alt+Down opens the calendar from a segment. */
|
|
18234
|
+
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger and ArrowDown open the calendar with focus on the selected day, Tab moves between the calendar's controls without leaving it, and Escape closes it and returns focus to the field. A press into the field opens the calendar too. Tab into the field opens nothing, and Tab out of the field closes the calendar. With 'segmented', the field is a row of segments in place of the text: a month, a day and a year in the order the locale writes them, each set with digits or the arrow keys. Alt+Down opens the calendar from a segment. Text that is not a date gives the form an empty value, as a native date field does, and 'value' keeps the text so it can be corrected. **Keyboard.** The field is one tab stop, or each segment is with 'segmented', and the trigger is one more. | Key | What it does | |---|---| | Down | In the text field, opens the calendar with focus on the chosen day. | | Alt with Down | Opens the calendar, from the text field or a segment. | | Enter | In the text field, takes the typed date and submits the form, as a native field does. | | Escape | Closes the calendar and puts focus back in the field. | | Tab | In the open calendar, moves between its controls. Out of the field, closes it. | | Up, Down on a segment | Steps the segment by one, round from its last value to its first. | | Page Up, Page Down on a segment | Steps by a page: a week of days, two months, or five years. | | Home, End on a segment | Goes to the segment's first or last value. | | Digits on a segment | Fill it, and move to the next once it can take no more. | | Backspace, Delete on a segment | Empty the segment. | | Left, Right on a segment | Move to the previous or the next segment, along the line of text. | In the calendar, the keys are 'DatePicker''s: the arrows move by a day or a week, Page Up and Page Down by a month, with Shift by a year, and Home and End to the start and the end of the week. */
|
|
17297
18235
|
"helix-headless-date-input": DefineCustomElement<
|
|
17298
18236
|
HelixHeadlessDateInput,
|
|
17299
18237
|
HelixHeadlessDateInputVueProps,
|
|
@@ -17473,7 +18411,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17473
18411
|
HelixHeadlessListItemVueProps,
|
|
17474
18412
|
HelixHeadlessListItemVueEvents
|
|
17475
18413
|
>;
|
|
17476
|
-
/** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop. 'single' selects one row at a time and 'multiple' any number, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. 'none' selects nothing, so a press acts on the row. A 'disabled' row is passed over. Each row is named by its label and described by its description, so the words of the controls in 'end' are not read as part of its name. 'selection-behavior' says what a press does to the rows already selected. 'toggle', the default, adds or takes out the row. 'replace' selects the row alone, as a file list does, and the arrow keys carry the selection with them. Control or Command with a press then adds or takes out one row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. Under 'replace', selects it. | | Home, End | Moves to the first or the last row. Under 'replace', selects it. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. Under 'replace', selects the row it lands on. | | A letter or a word | Moves to the next row whose words start with what you typed. | | Left, Right | Moves between the row and the controls in its 'end' slot. | | Space | Selects the row, or lets it go. | | Shift with Down, Up, Home, End, Page Down, Page Up or Space | Selects every row from the last one pressed, in 'multiple'. | | Control or Command with Down, Up, Home, End, Page Down or Page Up | Moves without selecting, under 'replace'. | | Control or Command with A | Selects every row, in 'multiple'. | | Escape | Lets go of every selected row, asking first, and keeps the key from the dialog or menu around the list. With nothing selected, the key goes on to them. | | Enter | Acts on the row: follows its link, or sends 'helix-action' from it. | A press with Shift selects every row from the last one pressed, and a press with Control or Command adds or takes out one row under 'replace'. **Leave 'selection-mode' unset for a list a reader reads**, and set it for one a reader chooses from or acts on. The rows of an interactive list are grid rows, which hold controls as a list box option cannot. Give a control in 'end' 'tabindex="-1"' to leave it to the arrow keys and out of the tab order. **'reorderable' lets you move rows.** Each row gets a grip after its 'end' slot, named by 'move-label'. Drag a grip to move its row, and the list scrolls near an edge. Or press a grip with Space, Enter, or a click to pick up its row, move it with the arrow keys, and press the grip again to drop it. A click on another row drops it there, and Escape puts it back. The list says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold every row's value in the new order. **You move the rows**: the list moves no element of yours, so your framework keeps the order it rendered. | Key, on a held row's grip | What it does | |---|---| | Down, Up | Moves the row one place. | | Home, End | Moves the row to the top or the bottom. | | Space, Enter | Drops the row. | | Escape | Puts the row back where it was. | 'start' and 'reversed' number an ordered list as '<ol>' does. The list writes where the numbers start and which way they run as '--list-first' and '--list-step' on its slot, which the styled tier counts from. Reversed with no 'start' counts down from the number of rows, which a server cannot know, so served markup counts from one until the list runs. */
|
|
18414
|
+
/** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop. 'single' selects one row at a time and 'multiple' any number, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. 'none' selects nothing, so a press acts on the row. A 'disabled' row is passed over. Each row is named by its label and described by its description, so the words of the controls in 'end' are not read as part of its name. 'selection-behavior' says what a press does to the rows already selected. 'toggle', the default, adds or takes out the row. 'replace' selects the row alone, as a file list does, and the arrow keys carry the selection with them. Control or Command with a press then adds or takes out one row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. Under 'replace', selects it. | | Home, End | Moves to the first or the last row. Under 'replace', selects it. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. Under 'replace', selects the row it lands on. | | A letter or a word | Moves to the next row whose words start with what you typed. | | Left, Right | Moves between the row and the controls in its 'end' slot. | | Space | Selects the row, or lets it go. | | Shift with Down, Up, Home, End, Page Down, Page Up or Space | Selects every row from the last one pressed, in 'multiple'. | | Control or Command with Down, Up, Home, End, Page Down or Page Up | Moves without selecting, under 'replace'. | | Control or Command with A | Selects every row, in 'multiple'. | | Escape | Lets go of every selected row, asking first, and keeps the key from the dialog or menu around the list. With nothing selected, the key goes on to them. | | Enter | Acts on the row: follows its link, or sends 'helix-action' from it. | A press with Shift selects every row from the last one pressed, and a press with Control or Command adds or takes out one row under 'replace'. **Leave 'selection-mode' unset for a list a reader reads**, and set it for one a reader chooses from or acts on. The rows of an interactive list are grid rows, which hold controls as a list box option cannot. Give a control in 'end' 'tabindex="-1"' to leave it to the arrow keys and out of the tab order. **'reorderable' lets you move rows.** Each row gets a grip after its 'end' slot, named by 'move-label'. Drag a grip to move its row, and the list scrolls near an edge. Or press a grip with Space, Enter, or a click to pick up its row, move it with the arrow keys, and press the grip again to drop it. A click on another row drops it there, and Escape puts it back. The list says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold every row's value in the new order. **You move the rows**: the list moves no element of yours, so your framework keeps the order it rendered. | Key, on a held row's grip | What it does | |---|---| | Down, Up | Moves the row one place. | | Home, End | Moves the row to the top or the bottom. | | Space, Enter | Drops the row. | | Escape | Puts the row back where it was. | 'start' and 'reversed' number an ordered list as '<ol>' does. The list writes where the numbers start and which way they run as '--list-first' and '--list-step' on its slot, which the styled tier counts from. Reversed with no 'start' counts down from the number of rows, which a server cannot know, so served markup counts from one until the list runs. **An empty list.** Set 'empty-label', or put your own content in the 'empty' slot, for a row shown while the list has no rows and none are loading, such as "No files yet" and a link to add one. Without either, an empty list shows nothing. The list takes the 'empty' state while it has no rows, whatever it shows. **Loading more.** 'load-more' sends 'helix-load-more' once the end of the list comes within a screen of view, in the box that scrolls it or the page, once for each number of rows: add rows and it can send it again. While you fetch, set 'loading': the list is busy, and a row after the last says "Loading more" ('loading-label', or your own content in the 'loading' slot). The list asks for nothing while 'loading' is set. An interactive list with no name is reported once in a development build, since a screen reader announces it as a grid and nothing more. Name it with 'label' or 'aria-label'. */
|
|
17477
18415
|
"helix-headless-list": DefineCustomElement<
|
|
17478
18416
|
HelixHeadlessList,
|
|
17479
18417
|
HelixHeadlessListVueProps,
|
|
@@ -17587,7 +18525,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17587
18525
|
HelixHeadlessMeterVueProps,
|
|
17588
18526
|
HelixHeadlessMeterVueEvents
|
|
17589
18527
|
>;
|
|
17590
|
-
/** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Any value but 'false' counts, so a sidebar of sections on one page can mark the section in view with 'aria-current="location"'. Where several are marked, 'page' wins. **The destinations can be a list.** Slot a '<ul>' or an '<ol>' of '<li>' elements, each holding a link, and a screen reader says how many there are and where each one is, as in Radix's 'NavigationMenu.List'. The marker and the arrow keys work on the list items as they do on bare links. Give the list 'role="list"' as well, since Safari drops the semantics of a list drawn without bullets. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. Set 'arrows' and the arrow keys move focus between the destinations, as Radix's navigation menu does: left and right along a row, up and down a column, Home and End to the ends. A 'Megamenu' among them is reached at its trigger. Tab still stops at every link, since a navigation is a list of links and not a single control, and the keys across the other axis are left to the page and to an open panel. */
|
|
18528
|
+
/** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Any value but 'false' counts, so a sidebar of sections on one page can mark the section in view with 'aria-current="location"'. Where several are marked, 'page' wins. **The destinations can be a list.** Slot a '<ul>' or an '<ol>' of '<li>' elements, each holding a link, and a screen reader says how many there are and where each one is, as in Radix's 'NavigationMenu.List'. The marker and the arrow keys work on the list items as they do on bare links. Give the list 'role="list"' as well, since Safari drops the semantics of a list drawn without bullets. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. Set 'arrows' and the arrow keys move focus between the destinations, as Radix's navigation menu does: left and right along a row, up and down a column, Home and End to the ends. A 'Megamenu' among them is reached at its trigger. Tab still stops at every link, since a navigation is a list of links and not a single control, and the keys across the other axis are left to the page and to an open panel. While a 'Megamenu', or another disclosure among the destinations, is open, the navigation is ':state(open)', so a page can dim what lies under the panel, as Radix's navigation menu marks its open state. A screen reader lists the page's navigation landmarks by name, so two named alike cannot be told apart. Where another navigation in the same document has the same name, "Main" for two with no 'label', the later one warns once with the kind 'duplicate-name'. */
|
|
17591
18529
|
"helix-headless-navigation": DefineCustomElement<
|
|
17592
18530
|
HelixHeadlessNavigation,
|
|
17593
18531
|
HelixHeadlessNavigationVueProps,
|
|
@@ -17611,13 +18549,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17611
18549
|
HelixHeadlessNotificationsVueProps,
|
|
17612
18550
|
HelixHeadlessNotificationsVueEvents
|
|
17613
18551
|
>;
|
|
17614
|
-
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. On iOS and iPadOS the field is a plain text field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in, and no role description, so VoiceOver says the field is required. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. **Keyboard.** The field is one tab stop, and the stepper buttons are not in the tab order. | Key | What it does | |---|---| | Up, Down | Steps the value up or down by 'step'. | | Page Up, Page Down | Steps by 'large-step' steps, ten by default. | | Home, End | Goes to 'min' or 'max', where there is one. Without one, moves the caret. | | Enter | Commits the typed number and submits the form, as a native field does. | The field has 'role="spinbutton"' with 'aria-valuenow', 'aria-valuemin', 'aria-valuemax', and the formatted text in 'aria-valuetext'. */
|
|
18552
|
+
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. The field and its two buttons sit in a 'role="group"', and the field carries 'role-label', "number field" in English, as its 'aria-roledescription', as React Aria's NumberField does. On iOS and iPadOS the field is a plain text field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in, and no role description, so VoiceOver says the field is required. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. While you type, the form holds the number the text reads as, so a field showing '$2,500.50' gives the form 2500.5, and text that is not a number gives it nothing, as a native number field does. Holding a stepper button down steps once, then again after 400 milliseconds, then every 60 milliseconds until you let go, as React Aria's NumberField does. **Keyboard.** The field is one tab stop, and the stepper buttons are not in the tab order. | Key | What it does | |---|---| | Up, Down | Steps the value up or down by 'step'. | | Page Up, Page Down | Steps by 'large-step' steps, ten by default. | | Home, End | Goes to 'min' or 'max', where there is one. Without one, moves the caret. | | Enter | Commits the typed number and submits the form, as a native field does. | The field has 'role="spinbutton"' with 'aria-valuenow', 'aria-valuemin', 'aria-valuemax', and the formatted text in 'aria-valuetext'. */
|
|
17615
18553
|
"helix-headless-number-input": DefineCustomElement<
|
|
17616
18554
|
HelixHeadlessNumberInput,
|
|
17617
18555
|
HelixHeadlessNumberInputVueProps,
|
|
17618
18556
|
HelixHeadlessNumberInputVueEvents
|
|
17619
18557
|
>;
|
|
17620
|
-
/** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. **Keyboard.** The tree is one tab stop, and focus moves from row to row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. | | Right | Opens a closed branch, or moves into an open one. Left on a right-to-left page. | | Left | Closes an open branch, or moves to the parent. Right on a right-to-left page. | | Home, End | Moves to the first or the last row. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. | | Enter, Space | Opens or closes a branch. | | '*' | Opens every branch beside the active row. | | A letter or a word | Moves to the next row whose key starts with what you typed. | | Command+C, Control+C | Copies the active row, where no text is selected. | The tree is a 'treegrid', as React Aria's Tree is: each entry is a 'row' with one cell, and carries its real level, position, and set size, including in a windowed tree. Nothing in it is chosen, so no row carries 'aria-selected', and a focused row is not announced as selected. A reader opening or closing a branch sends 'helix-before-open' or 'helix-before-close', which you can cancel, and then 'toggle' with 'newState' and 'oldState', as '<details>' does. The branch is the active row, and 'expanded' holds every open branch. '*' asks once for all the branches it opens. A script writing 'expanded' or 'active' sends nothing. 'active' is the active row's path, written the way a JSON Pointer writes it: the empty string for the root and '/meta/tags/0' for an entry under it. Moving to another row sends 'helix-before-activate', which you can cancel, and then 'helix-activate', both with the path. Writing 'active' moves there and opens the branches around it, and sends nothing. 'expanded' holds the open branches by path, and writing it opens those and closes the rest. A row that closes around the active one hands it to the nearest open branch. 'filter' narrows the tree to the entries whose key or value holds the text, ignoring case, and the branches that lead to them, which it opens. A matched branch keeps everything under it. Each matched row carries 'row-match', and a screen reader hears how many entries matched from 'results-label'. 'filterable' adds a field that sets it: typing sends 'helix-filter', which you can cancel, and then 'helix-filtered', and Down moves from the field to the tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
|
|
18558
|
+
/** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. **Keyboard.** The tree is one tab stop, and focus moves from row to row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. | | Right | Opens a closed branch, or moves into an open one. Left on a right-to-left page. | | Left | Closes an open branch, or moves to the parent. Right on a right-to-left page. | | Home, End | Moves to the first or the last row. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. | | Enter, Space | Opens or closes a branch. | | '*' | Opens every branch beside the active row. | | A letter or a word | Moves to the next row whose key starts with what you typed. | | Command+C, Control+C | Copies the active row, where no text is selected. | The tree is a 'treegrid', as React Aria's Tree is: each entry is a 'row' with one cell, and carries its real level, position, and set size, including in a windowed tree. Nothing in it is chosen, so no row carries 'aria-selected', and a focused row is not announced as selected. A reader opening or closing a branch sends 'helix-before-open' or 'helix-before-close', which you can cancel, and then 'toggle' with 'newState' and 'oldState', as '<details>' does. The branch is the active row, and 'expanded' holds every open branch. '*' asks once for all the branches it opens. A script writing 'expanded' or 'active' sends nothing. 'active' is the active row's path, written the way a JSON Pointer writes it: the empty string for the root and '/meta/tags/0' for an entry under it. Moving to another row sends 'helix-before-activate', which you can cancel, and then 'helix-activate', both with the path. Writing 'active' moves there and opens the branches around it, and sends nothing. 'expanded' holds the open branches by path, and writing it opens those and closes the rest. A row that closes around the active one hands it to the nearest open branch. 'filter' narrows the tree to the entries whose key or value holds the text, ignoring case, and the branches that lead to them, which it opens. A matched branch keeps everything under it. Each matched row carries 'row-match', and a screen reader hears how many entries matched from 'results-label'. 'filterable' adds a field that sets it: typing sends 'helix-filter', which you can cancel, and then 'helix-filtered', and Down moves from the field to the tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. **Your own drawing of a value.** 'renderValue' is a function from a value and its entry, its path, key, depth and type, to what Lit renders, such as a link for a URL or a swatch for a color. Return 'undefined' to draw the value as the inspector does. What you draw sits in the 'value' part, after the key. Filtering and copying still read the value itself. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
|
|
17621
18559
|
"helix-headless-object-inspector": DefineCustomElement<
|
|
17622
18560
|
HelixHeadlessObjectInspector,
|
|
17623
18561
|
HelixHeadlessObjectInspectorVueProps,
|
|
@@ -17629,7 +18567,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17629
18567
|
HelixHeadlessOptionGroupVueProps,
|
|
17630
18568
|
HelixHeadlessOptionGroupVueEvents
|
|
17631
18569
|
>;
|
|
17632
|
-
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. An option with 'href' is a link: choosing it follows the link and selects nothing, as an entry in a command palette that goes to a page does. */
|
|
18570
|
+
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. An option with 'href' is a link: choosing it follows the link and selects nothing, as an entry in a command palette that goes to a page does. The option's name is its label alone, as React Aria's 'slot="label"' makes it: what is in 'start' and 'end', an avatar's initials or a shortcut, is drawn and not read as part of the name. The description is read as the option's description. A name you give with 'aria-label' or 'aria-labelledby' wins over both. */
|
|
17633
18571
|
"helix-headless-option": DefineCustomElement<
|
|
17634
18572
|
HelixHeadlessOption,
|
|
17635
18573
|
HelixHeadlessOptionVueProps,
|
|
@@ -17725,7 +18663,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17725
18663
|
HelixHeadlessScrollAreaVueProps,
|
|
17726
18664
|
HelixHeadlessScrollAreaVueEvents
|
|
17727
18665
|
>;
|
|
17728
|
-
/** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. Set 'valueContent' to draw the trigger's content from the chosen options, and several chosen options are written as a list in the reader's language. **Keyboard.** On the closed trigger: | Key | What it does | |---|---| | Down, Enter, Space | Opens the list on the chosen option, or the first. | | Up | Opens the list on the chosen option, or the last. | | Home, End | Opens the list on the first or the last option. | | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. | | A letter or a word | Chooses the option whose words start with what you typed, as a native '<select>' does. With 'multiple', opens the list on it. | In the open list, which is a 'Listbox': | Key | What it does | |---|---| | Down, Up, Home, End, Page Down, Page Up | Moves the highlight. | | A letter or a word | Moves the highlight to the next option whose words start with what you typed. | | Enter, Space | Chooses the highlighted option and closes the list. With 'multiple', toggles it and leaves the list open. | | Escape | Closes the list and puts focus back on the trigger. | | Tab | Closes the list and moves on. | A choice made on the closed trigger is said aloud on Apple devices, where VoiceOver does not read the trigger's new name. **ARIA.** The trigger is a 'button' with 'aria-haspopup="listbox"' and 'aria-expanded', named by the label and then the chosen words, as a native '<select>' is. The list is the listbox 'Listbox' describes, named by the label, or by 'list-label' where there is none. Set 'autocomplete' to let a browser's autofill choose, as a native '<select>' with the same attribute would. */
|
|
18666
|
+
/** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. For a list too long to draw whole, set 'items' instead: the list draws only the options in sight, as Listbox's 'items' does, and the trigger, its keys and the form read the whole set. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. Set 'valueContent' to draw the trigger's content from the chosen options, and several chosen options are written as a list in the reader's language. **Keyboard.** On the closed trigger: | Key | What it does | |---|---| | Down, Enter, Space | Opens the list on the chosen option, or the first. | | Up | Opens the list on the chosen option, or the last. | | Home, End | Opens the list on the first or the last option. | | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. | | A letter or a word | Chooses the option whose words start with what you typed, as a native '<select>' does. With 'multiple', opens the list on it. | In the open list, which is a 'Listbox': | Key | What it does | |---|---| | Down, Up, Home, End, Page Down, Page Up | Moves the highlight. | | A letter or a word | Moves the highlight to the next option whose words start with what you typed. | | Enter, Space | Chooses the highlighted option and closes the list. With 'multiple', toggles it and leaves the list open. | | Escape | Closes the list and puts focus back on the trigger. | | Tab | Closes the list and moves on. | A choice made on the closed trigger is said aloud on Apple devices, where VoiceOver does not read the trigger's new name. **ARIA.** The trigger is a 'button' with 'aria-haspopup="listbox"' and 'aria-expanded', named by the label and then the chosen words, as a native '<select>' is. The list is the listbox 'Listbox' describes, named by the label, or by 'list-label' where there is none. Set 'autocomplete' to let a browser's autofill choose, as a native '<select>' with the same attribute would. */
|
|
17729
18667
|
"helix-headless-select": DefineCustomElement<
|
|
17730
18668
|
HelixHeadlessSelect,
|
|
17731
18669
|
HelixHeadlessSelectVueProps,
|
|
@@ -17743,7 +18681,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17743
18681
|
HelixHeadlessSkipLinkVueProps,
|
|
17744
18682
|
HelixHeadlessSkipLinkVueEvents
|
|
17745
18683
|
>;
|
|
17746
|
-
/** Renders a native '<input type="range">', so the drag, the arrow keys, Home, End, the page keys, and the touch target come from the platform. A native range has a hit area larger than its thumb, sized for a finger. The value is a string, like every other form control's, and 'MixinControllerValue' holds text. Use 'valueAsNumber' for arithmetic. Marks are drawn by the component. The ticks of a '<datalist>' cannot be styled, and Firefox does not render them for a range. Marks are decoration. 'step' sets where the value can land, and the input enforces it whether or not marks are drawn. 'markers' is a count, so a slider from zero to a hundred does not draw a hundred and one marks by accident. A range with two thumbs is two inputs stacked on one track, because there is no native two-thumb range. Each thumb keeps its own value. 'min-steps-between-thumbs' keeps them that many steps apart, and the readout joins the two as 'range-text' writes them. 'origin' sets where a single thumb's fill starts: at 'min', at the middle of the track, or at 'max'. A balance or an offset from zero fills from the middle, as Zag's slider 'origin' does. The fill's ends are published as '--slider-from' and '--slider-to'. 'format-options' writes the value with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, and 'formatter' writes it with a function of your own, such as words for a scale. Either one is what a screen reader hears, what the readout shows and what the marker labels say. 'value-text' still wraps it in a sentence, with the formatted value in its place. 'required' comes with the field mixin and cannot fail. A range is never empty: the platform shows its midpoint when no value is set, and 'willUpdate' seeds that midpoint into 'defaultValue', so the value matches the handle from the first render. HTML does not apply 'required' to a range either, so it is not set on the input. It only adds the marker beside the label. **Keyboard.** Each thumb is one tab stop, and its keys are the native range's. | Key | What it does | |---|---| | Right, Up | Moves the thumb up by 'step'. | | Left, Down | Moves the thumb down by 'step'. | | Page Up, Page Down | Moves the thumb by a larger step. | | Home, End | Moves the thumb to its lowest or highest value. | Each thumb is an '<input type="range">' with 'aria-valuetext' where the value is formatted or worded. A range's thumbs say they stop at each other with 'aria-valuemin' and 'aria-valuemax'. */
|
|
18684
|
+
/** Renders a native '<input type="range">', so the drag, the arrow keys, Home, End, the page keys, and the touch target come from the platform. A native range has a hit area larger than its thumb, sized for a finger. The value is a string, like every other form control's, and 'MixinControllerValue' holds text. Use 'valueAsNumber' for arithmetic. Marks are drawn by the component. The ticks of a '<datalist>' cannot be styled, and Firefox does not render them for a range. Marks are decoration. 'step' sets where the value can land, and the input enforces it whether or not marks are drawn. 'markers' is a count, so a slider from zero to a hundred does not draw a hundred and one marks by accident. A range with two thumbs is two inputs stacked on one track, because there is no native two-thumb range. Each thumb keeps its own value, and a named range submits one entry per thumb under its name, the lowest first. A range given more than two values, such as 'default-value="20,50,80"', has a thumb for each, as React Aria's slider takes any number of thumbs: each stops at its neighbors, and the ones between the first and the last are named by 'thumb-label'. 'min-steps-between-thumbs' keeps them that many steps apart, and the readout joins the two as 'range-text' writes them. 'origin' sets where a single thumb's fill starts: at 'min', at the middle of the track, or at 'max'. A balance or an offset from zero fills from the middle, as Zag's slider 'origin' does. The fill's ends are published as '--slider-from' and '--slider-to'. 'format-options' writes the value with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, and 'formatter' writes it with a function of your own, such as words for a scale. Either one is what a screen reader hears, what the readout shows and what the marker labels say. 'value-text' still wraps it in a sentence, with the formatted value in its place. 'required' comes with the field mixin and cannot fail. A range is never empty: the platform shows its midpoint when no value is set, and 'willUpdate' seeds that midpoint into 'defaultValue', so the value matches the handle from the first render. HTML does not apply 'required' to a range either, so it is not set on the input. It only adds the marker beside the label. **Keyboard.** Each thumb is one tab stop, and its keys are the native range's. | Key | What it does | |---|---| | Right, Up | Moves the thumb up by 'step'. | | Left, Down | Moves the thumb down by 'step'. | | Page Up, Page Down | Moves the thumb by a larger step. | | Home, End | Moves the thumb to its lowest or highest value. | Under 'readonly' none of these move the thumb, and Tab still reaches it. Each thumb is an '<input type="range">' with 'aria-valuetext' where the value is formatted or worded. A range's thumbs say they stop at each other with 'aria-valuemin' and 'aria-valuemax'. */
|
|
17747
18685
|
"helix-headless-slider": DefineCustomElement<
|
|
17748
18686
|
HelixHeadlessSlider,
|
|
17749
18687
|
HelixHeadlessSliderVueProps,
|
|
@@ -17761,19 +18699,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17761
18699
|
HelixHeadlessSpeedDialGroupVueProps,
|
|
17762
18700
|
HelixHeadlessSpeedDialGroupVueEvents
|
|
17763
18701
|
>;
|
|
17764
|
-
/** Each item is a command, so it has the 'menuitem' role. A megamenu holds destinations, so it is a disclosure of links. A speed dial holds actions, which is what 'role="menu"' is for. The name is text rendered beside the icon, and it is the accessible name. A 'title' on an icon shows only on hover. Visible text is read, searched, and translated like other text. 'shortcut' gives the action's keyboard shortcut as a chord, such as 'mod+s', the grammar Menu's rows use. The action carries it as 'aria-keyshortcuts' and draws it after the name in the platform's glyphs or words, '⌘S' on an Apple keyboard and 'Ctrl+S' elsewhere, as Menu draws its rows' shortcuts. Put a 'Kbd' in the 'shortcut' slot to draw it as keys instead; the dial imports no 'Kbd' of its own. Showing a shortcut does not bind it. */
|
|
18702
|
+
/** Each item is a command, so it has the 'menuitem' role. A megamenu holds destinations, so it is a disclosure of links. A speed dial holds actions, which is what 'role="menu"' is for. The name is text rendered beside the icon, and it is the accessible name. A 'title' on an icon shows only on hover. Visible text is read, searched, and translated like other text. 'shortcut' gives the action's keyboard shortcut as a chord, such as 'mod+s', the grammar Menu's rows use. The action carries it as 'aria-keyshortcuts' and draws it after the name in the platform's glyphs or words, '⌘S' on an Apple keyboard and 'Ctrl+S' elsewhere, as Menu draws its rows' shortcuts. Put a 'Kbd' in the 'shortcut' slot to draw it as keys instead; the dial imports no 'Kbd' of its own. Showing a shortcut does not bind it. 'href' makes the action a link, as Menu's rows take one: the 'item' part is then an '<a>' carrying 'menuitem', so the browser follows it, opens it in a new tab on a middle press, and offers its own menu for it. Choosing it still sends 'helix-select' and closes the dial. A disabled action draws no link. */
|
|
17765
18703
|
"helix-headless-speed-dial-item": DefineCustomElement<
|
|
17766
18704
|
HelixHeadlessSpeedDialItem,
|
|
17767
18705
|
HelixHeadlessSpeedDialItemVueProps,
|
|
17768
18706
|
HelixHeadlessSpeedDialItemVueEvents
|
|
17769
18707
|
>;
|
|
17770
|
-
/** A speed dial is a menu. Its items are commands, so it uses 'role="menu"' and 'menuitem', and it is built from the same pieces as 'Menu': - 'KeyboardNavigationController' for the arrow keys - 'PopoverController' for the panel - 'MixinControllerOpen' for open and closed It is a separate component because a speed dial has no submenus, headers, or checkable items. You slot the trigger. The usual floating action button is 'IconButton' with 'shape="circle"' and 'raised'. There is no 'helix-fab', because 'IconButton' already has 'emphasis', 'tone', 'label', and a size. Position the button with 'data-dock' in the base layer. All four arrow keys move through the actions, because a speed dial has no nested levels to reserve the horizontal pair for. This is the default behavior of the keyboard controller. Typing a letter moves to the next action whose name starts with it. The actions are one tab stop, and Tab closes the dial and moves on. **Keyboard.** On the trigger, Enter, Space or a press opens the dial on its first action. With the dial open: | Key | What it does | |---|---| | Down, Right | Moves to the next action, from the last back to the first. | | Up, Left | Moves to the action before, from the first round to the last. | | Home, End | Moves to the first or the last action. | | A letter | Moves to the next action whose name starts with it. | | Enter, Space | Chooses the action, and the dial closes. | | Escape | Closes the dial and puts focus back on the trigger. | | Tab | Closes the dial and moves on. | **Groups.** Put actions in 'Speed Dial.Group', named by its 'label', to set them apart as Menu's sections do: each is a 'group' of the menu, and the arrow keys walk through every group's actions in order. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, such as composing a message, and holding it for half a second opens the dial, as React Aria's menu trigger does with 'trigger="longPress"'. Alt+Down or Alt+Up opens it from the keyboard, and the trigger says so in its description, 'long-press-label', the drawn one and a slotted one alike. A press that has opened the dial does not also do the trigger's action. */
|
|
18708
|
+
/** A speed dial is a menu. Its items are commands, so it uses 'role="menu"' and 'menuitem', and it is built from the same pieces as 'Menu': - 'KeyboardNavigationController' for the arrow keys - 'PopoverController' for the panel - 'MixinControllerOpen' for open and closed It is a separate component because a speed dial has no submenus, headers, or checkable items. You slot the trigger. The usual floating action button is 'IconButton' with 'shape="circle"' and 'raised'. There is no 'helix-fab', because 'IconButton' already has 'emphasis', 'tone', 'label', and a size. Position the button with 'data-dock' in the base layer. All four arrow keys move through the actions, because a speed dial has no nested levels to reserve the horizontal pair for. This is the default behavior of the keyboard controller. Typing a letter moves to the next action whose name starts with it. The actions are one tab stop, and Tab closes the dial and moves on. **Keyboard.** On the trigger, Enter, Space, Down or a press opens the dial on its first action, and Up opens it on its last, as an APG menu button does. With the dial open: | Key | What it does | |---|---| | Down, Right | Moves to the next action, from the last back to the first. | | Up, Left | Moves to the action before, from the first round to the last. | | Home, End | Moves to the first or the last action. | | A letter | Moves to the next action whose name starts with it. | | Enter, Space | Chooses the action, and the dial closes. | | Escape | Closes the dial and puts focus back on the trigger. | | Tab | Closes the dial and moves on. | **Groups.** Put actions in 'Speed Dial.Group', named by its 'label', to set them apart as Menu's sections do: each is a 'group' of the menu, and the arrow keys walk through every group's actions in order. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, such as composing a message, and holding it for half a second opens the dial, as React Aria's menu trigger does with 'trigger="longPress"'. Alt+Down or Alt+Up opens it from the keyboard, and the trigger says so in its description, 'long-press-label', the drawn one and a slotted one alike. A press that has opened the dial does not also do the trigger's action. **Open on hover.** With 'open-on="hover"', a mouse resting on the trigger opens the dial, as Material's speed dial does, and the dial closes a moment after the mouse leaves both the trigger and the actions. A press, a touch and the keyboard open it as under 'click', and a press on the trigger of a dial already open moves focus to its first action, so the press a mouse makes after hovering keeps the dial open. */
|
|
17771
18709
|
"helix-headless-speed-dial": DefineCustomElement<
|
|
17772
18710
|
HelixHeadlessSpeedDial,
|
|
17773
18711
|
HelixHeadlessSpeedDialVueProps,
|
|
17774
18712
|
HelixHeadlessSpeedDialVueEvents
|
|
17775
18713
|
>;
|
|
17776
|
-
/** A splitter has one axis. Nest splitters to get two axes and three-pane or four-pane layouts. When a splitter is slotted into a pane of another at a right angle, a corner handle appears where the dividers cross. It shows the 'move' cursor, responds to both arrow axes, and a drag moves both dividers at once. The corner is added at 'firstUpdated' and is not in the server markup. Before it appears, both dividers work on their own. The divider has 'role="separator"' and 'aria-valuenow', with 'aria-valuetext' saying the start pane's share as a percentage in the nearest 'lang', or in the reader's locale where no 'lang' is set, and 'aria-controls' names the start pane. Drag it with a pointer or move it with the arrow keys, press 'Home' or 'End' to move it to its bounds, and press 'Enter' to collapse the start pane and open it again. A drag in progress is tracked as a state, so both dividers a corner moves stay lit for as long as they move. By default, 'min' and 'max' let the divider reach either edge, so you can drag a pane fully closed. Set them to limit the range. A pane can be collapsed, which is a separate state from a divider at the edge. 'collapsed' names the shut pane, 'start' or 'end', and the pane opens back to the position where the collapsing gesture began. A drag records that position on press, and every other way of collapsing records it in 'settle'. 'collapsed-size' keeps a sliver of the pane visible, such as a tab strip. Collapsing overrides 'min' and 'max'. Set 'primary' to the pane that keeps its size when the splitter's own size changes, such as a sidebar beside a window being resized. The other pane takes all of the change, as Web Awesome's split panel does. Without it, both panes keep their share. **Keyboard.** The divider is one tab stop. | Key | What it does | |---|---| | Left, Right | Moves a side-by-side divider by 'step'. On a right-to-left page, Left moves it toward the end. | | Up, Down | Moves a stacked divider by 'step'. | | Home, End | Moves the divider to its bounds. | | Enter | Collapses the start pane, and opens it again. | | F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. | */
|
|
18714
|
+
/** A splitter has one axis. Nest splitters to get two axes and three-pane or four-pane layouts. When a splitter is slotted into a pane of another at a right angle, a corner handle appears where the dividers cross. It shows the 'move' cursor, responds to both arrow axes, and a drag moves both dividers at once. The corner is added at 'firstUpdated' and is not in the server markup. Before it appears, both dividers work on their own. The divider has 'role="separator"' and 'aria-valuenow', with 'aria-valuetext' saying the start pane's share as a percentage in the nearest 'lang', or in the reader's locale where no 'lang' is set, and 'aria-controls' names the start pane. Drag it with a pointer or move it with the arrow keys, press 'Home' or 'End' to move it to its bounds, and press 'Enter' to collapse the start pane and open it again. A drag in progress is tracked as a state, so both dividers a corner moves stay lit for as long as they move. By default, 'min' and 'max' let the divider reach either edge, so you can drag a pane fully closed. Set them to limit the range. A pane can be collapsed, which is a separate state from a divider at the edge. 'collapsed' names the shut pane, 'start' or 'end', and the pane opens back to the position where the collapsing gesture began. A drag records that position on press, and every other way of collapsing records it in 'settle'. 'collapsed-size' keeps a sliver of the pane visible, such as a tab strip. Collapsing overrides 'min' and 'max'. Set 'primary' to the pane that keeps its size when the splitter's own size changes, such as a sidebar beside a window being resized. The other pane takes all of the change, as Web Awesome's split panel does. Without it, both panes keep their share. **Three or more panes along one axis are splitters nested on that axis**, a splitter in the 'end' pane of another for three columns. The nested one keeps the pane on its far side the size it was while the outer divider moves, so a divider resizes only the two panes beside it, as Zag's splitter does with any number of panels. Where the whole row is resized, every pane keeps its share, unless 'primary' says otherwise. **Keyboard.** The divider is one tab stop. | Key | What it does | |---|---| | Left, Right | Moves a side-by-side divider by 'step'. On a right-to-left page, Left moves it toward the end. | | Up, Down | Moves a stacked divider by 'step'. | | Home, End | Moves the divider to its bounds. | | Enter | Collapses the start pane, and opens it again. | | F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. | */
|
|
17777
18715
|
"helix-headless-splitter": DefineCustomElement<
|
|
17778
18716
|
HelixHeadlessSplitter,
|
|
17779
18717
|
HelixHeadlessSplitterVueProps,
|
|
@@ -17791,7 +18729,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17791
18729
|
HelixHeadlessStatVueProps,
|
|
17792
18730
|
HelixHeadlessStatVueEvents
|
|
17793
18731
|
>;
|
|
17794
|
-
/** 'active' sets where the user is, and 'complete' stays on each step. Returning to stage one of three leaves stages one and two finished, so the root sets 'current' on the steps and never changes 'complete'. 'active' is optional. Without it, each step keeps its own 'current', so the sequence is correct in the server's markup, where the root cannot count its slotted children. 'linear' keeps a reader from passing a stage they have not finished, as Ark UI's linear steps do: a stage ahead is out of reach, and its button disabled, until every stage before it is 'complete' or 'optional'. Going back is always allowed. 'next()' and 'previous()' move one stage either way, under the same rules, for your own buttons. To check a stage before a reader moves on from it, set 'validate' to a function that answers whether the stage is valid, as Ark UI's 'isStepValid' does. Moving forward asks it about the stage the reader is on, and where it answers 'false' the reader stays and the stage is ':state(invalid)' until it answers 'true'. An 'optional' stage is not asked. 'helix-before-activate' is still sent for every move, for a check of your own. 'progress' is how far through the sequence is, from 0 to 100: the share of its stages that are 'complete'. The 'progress' part carries it as a 'progressbar' and as '--steps-progress', and is hidden until a stylesheet gives it a 'display', so a bar of your own costs nothing until you draw it. A screen reader hears it as 'progress-label' says, "33% complete" unless set, as Ark UI's steps write it. The sequence is ':state(complete)' once every stage is. The sequence is a list named by 'label', and each step a list item. The current stage's button says 'aria-current="step"', and a finished stage's button is described by its 'complete-label'. */
|
|
18732
|
+
/** 'active' sets where the user is, and 'complete' stays on each step. Returning to stage one of three leaves stages one and two finished, so the root sets 'current' on the steps and never changes 'complete'. 'active' is optional. Without it, each step keeps its own 'current', so the sequence is correct in the server's markup, where the root cannot count its slotted children. 'linear' keeps a reader from passing a stage they have not finished, as Ark UI's linear steps do: a stage ahead is out of reach, and its button disabled, until every stage before it is 'complete' or 'optional'. Going back is always allowed. 'next()' and 'previous()' move one stage either way, under the same rules, for your own buttons. 'reset()' goes back to the first stage and clears every stage's 'complete', as Ark UI's 'resetStep' does. 'completion="passed"' marks a stage 'complete' once a reader moves past it, as Ark UI counts a stage before the current one as completed. Going back leaves it complete. In a 'linear' sequence the next stage is then in reach from the current one, and 'validate' decides whether the reader may go. To check a stage before a reader moves on from it, set 'validate' to a function that answers whether the stage is valid, as Ark UI's 'isStepValid' does. Moving forward asks it about the stage the reader is on, and where it answers 'false' the reader stays and the stage is ':state(invalid)' until it answers 'true'. An 'optional' stage is not asked. 'helix-before-activate' is still sent for every move, for a check of your own. 'progress' is how far through the sequence is, from 0 to 100: the share of its stages that are 'complete'. The 'progress' part carries it as a 'progressbar' and as '--steps-progress', and is hidden until a stylesheet gives it a 'display', so a bar of your own costs nothing until you draw it. A screen reader hears it as 'progress-label' says, "33% complete" unless set, as Ark UI's steps write it. The sequence is ':state(complete)' once every stage is. The sequence is a list named by 'label', and each step a list item. The current stage's button says 'aria-current="step"', and a finished stage's button is described by its 'complete-label'. **Keyboard.** Each stage's name is a button and its own tab stop, and Enter or Space goes to the stage. Set 'arrows' and the arrow keys move focus between the names as well, as Ark UI's steps do: Left and Right along a row, Up and Down a column, Home and End to the first and the last. The arrows pass over a disabled stage and one a linear sequence holds out of reach, and they move focus without going to the stage. */
|
|
17795
18733
|
"helix-headless-steps": DefineCustomElement<
|
|
17796
18734
|
HelixHeadlessSteps,
|
|
17797
18735
|
HelixHeadlessStepsVueProps,
|
|
@@ -17821,7 +18759,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17821
18759
|
HelixHeadlessTableColumnVueProps,
|
|
17822
18760
|
HelixHeadlessTableColumnVueEvents
|
|
17823
18761
|
>;
|
|
17824
|
-
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. **Moving rows.** 'reorderable' adds a column of grips before the checkboxes, under a heading named by 'row-grips-label'. 1. Each row is known by its 'value', or by its place among the rows where it has none, as for selecting. Give rows a 'value' when they move, so a key stays with its row. 2. A grip is a button named by 'move-row-label' ("Move {row}") with the words of the row's first cell. Drag it to move its row, and the page scrolls near an edge. Or press it with Space, Enter, or a click to pick the row up, move it with Up, Down, Home, and End, and press it again to drop it. A click on another row drops it there, and Escape puts it back. 3. 'helix-before-reorder' asks first, and 'helix-reorder' follows with 'keys', every row's key in the new order. **You move the rows**: the table moves no element of yours, and focus goes back to the moved row's grip once you have. 4. Each step is said in the table's live region, in words you can change: 'picked-up-label', 'moved-label', 'dropped-label', and 'canceled-label'. The grips do nothing while a sort is set. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Enter or Space on a grip cell | Picks the row up, or drops it, in a 'reorderable' table. Up, Down, Home, and End move a row picked up, and Escape puts it back. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | A letter or a word | Moves to the next row whose first cell starts with what you typed. | | Tab | Leaves the table. | The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
|
|
18762
|
+
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. **Moving rows.** 'reorderable' adds a column of grips before the checkboxes, under a heading named by 'row-grips-label'. 1. Each row is known by its 'value', or by its place among the rows where it has none, as for selecting. Give rows a 'value' when they move, so a key stays with its row. 2. A grip is a button named by 'move-row-label' ("Move {row}") with the words of the row's first cell. Drag it to move its row, and the page scrolls near an edge. Or press it with Space, Enter, or a click to pick the row up, move it with Up, Down, Home, and End, and press it again to drop it. A click on another row drops it there, and Escape puts it back. 3. 'helix-before-reorder' asks first, and 'helix-reorder' follows with 'keys', every row's key in the new order. **You move the rows**: the table moves no element of yours, and focus goes back to the moved row's grip once you have. 4. Each step is said in the table's live region, in words you can change: 'picked-up-label', 'moved-label', 'dropped-label', and 'canceled-label'. The grips do nothing while a sort is set. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Enter or Space on a grip cell | Picks the row up, or drops it, in a 'reorderable' table. Up, Down, Home, and End move a row picked up, and Escape puts it back. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | A letter or a word | Moves to the next row whose first cell starts with what you typed. | | Tab | Leaves the table. | When the rows did not load, set 'error-text', such as "The orders did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
|
|
17825
18763
|
"helix-headless-table": DefineCustomElement<
|
|
17826
18764
|
HelixHeadlessTable,
|
|
17827
18765
|
HelixHeadlessTableVueProps,
|
|
@@ -17839,19 +18777,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17839
18777
|
HelixHeadlessTabPanelVueProps,
|
|
17840
18778
|
HelixHeadlessTabPanelVueEvents
|
|
17841
18779
|
>;
|
|
17842
|
-
/** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link. Where any tab is a link, the arrow keys move focus without choosing on every tab of the list, as under 'manual', so arrowing past a tab never leaves the page and the list answers the keys one way. Mark the tab of the page you are on with 'selected', or set 'active' to its value. Each tab says which panel it controls through 'aria-controls', set as an element reference to the panel's host, where the engine has reflection. Keys, on the tab list: Left and Right Arrow move between tabs, and so do Up and Down; Home and End go to the first and the last. The horizontal arrows follow the reading direction, so on a right-to-left page Left moves on. Disabled tabs are passed over. Tab leaves the list for the selected panel, which is a tab stop only while it holds nothing focusable. **Keyboard.** | Key | What it does | |---|---| | Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless 'manual' is set or a tab is a link. | | Left, Up | Moves to the tab before, from the first round to the last. | | Home, End | Moves to the first or the last tab. | | Enter, Space | Selects the tab with focus, or follows its link. | | Tab | Leaves the list for the selected panel. | Removing the selected tab selects the first enabled tab that is left, and 'active' says so, with 'helix-activate'. Where the removed tab had focus, focus moves to the tab now selected. The 'indicator' part moves to the selected tab and carries its place and size, so a mark of your own can be drawn there: style the part, or slot an element into 'indicator', which sits inside the part and reads the same properties. */
|
|
18780
|
+
/** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link. Where any tab is a link, the arrow keys move focus without choosing on every tab of the list, as under 'manual', so arrowing past a tab never leaves the page and the list answers the keys one way. Mark the tab of the page you are on with 'selected', or set 'active' to its value. Each tab says which panel it controls through 'aria-controls', set as an element reference to the panel's host, where the engine has reflection. Keys, on the tab list: Left and Right Arrow move between tabs, and so do Up and Down; Home and End go to the first and the last. The horizontal arrows follow the reading direction, so on a right-to-left page Left moves on. Disabled tabs are passed over. Tab leaves the list for the selected panel, which is a tab stop only while it holds nothing focusable. **Keyboard.** | Key | What it does | |---|---| | Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless 'manual' is set or a tab is a link. | | Left, Up | Moves to the tab before, from the first round to the last. | | Home, End | Moves to the first or the last tab. | | Enter, Space | Selects the tab with focus, or follows its link. | | Tab | Leaves the list for the selected panel. | Removing the selected tab selects the first enabled tab that is left, and 'active' says so, with 'helix-activate'. Where the removed tab had focus, focus moves to the tab now selected. **More tabs than fit.** With 'scroll-controls', a strip that scrolls shows a button at each end it can scroll toward, as Web Awesome's tab group does, and a press scrolls it most of its own length. The buttons are for the pointer, so they are out of the tab order and hidden from screen readers; the arrow keys already reach every tab, and the strip scrolls the selected tab into view. A strip scrolls once a stylesheet gives the 'tabs' part an 'overflow', as the styled tier does. A tab with 'dismissible' can be closed: see 'Tabs.Tab'. The 'indicator' part moves to the selected tab and carries its place and size, so a mark of your own can be drawn there: style the part, or slot an element into 'indicator', which sits inside the part and reads the same properties. */
|
|
17843
18781
|
"helix-headless-tabs": DefineCustomElement<
|
|
17844
18782
|
HelixHeadlessTabs,
|
|
17845
18783
|
HelixHeadlessTabsVueProps,
|
|
17846
18784
|
HelixHeadlessTabsVueEvents
|
|
17847
18785
|
>;
|
|
17848
|
-
/** A tab is an element, because it manages selection and its own tab stop. With an 'href', the tab is a link: 'role="tab"' on an '<a>', which a press, Enter and the browser's own link gestures follow. 'helix-select' is sent first, and canceling it keeps the browser from following, so a client-side router follows it instead. */
|
|
18786
|
+
/** A tab is an element, because it manages selection and its own tab stop. With an 'href', the tab is a link: 'role="tab"' on an '<a>', which a press, Enter and the browser's own link gestures follow. 'helix-select' is sent first, and canceling it keeps the browser from following, so a client-side router follows it instead. With 'dismissible', the tab can be closed, as Web Awesome's closable tab can: a press on its 'dismiss' mark, or Delete or Backspace while the tab has focus, sends 'helix-dismiss'. The tab does not remove itself, because your code owns the set, so remove the tab and its panel in your handler. Focus moves to the tab beside it, and the tab set selects a tab that is left. The tab says the key through 'aria-keyshortcuts', and the mark is for the pointer, hidden from screen readers. */
|
|
17849
18787
|
"helix-headless-tab": DefineCustomElement<
|
|
17850
18788
|
HelixHeadlessTab,
|
|
17851
18789
|
HelixHeadlessTabVueProps,
|
|
17852
18790
|
HelixHeadlessTabVueEvents
|
|
17853
18791
|
>;
|
|
17854
|
-
/** A part of 'Tag' that holds tags as one control: a grid of rows, one tab stop for the whole set. The arrow keys move between tags, Home and End go to the first and the last, and a typed letter goes to the next tag starting with it. Delete or Backspace removes the focused tag where it is 'dismissible', by sending its 'helix-dismiss': remove it from your list in the handler, and focus moves to the next tag, or the previous one after the last. 'selection-mode' lets a reader select tags, with Space, Enter or a press: 'single' selects one at a time and 'multiple' any number. In 'multiple', Shift with an arrow, Home or End selects the range from the tag last pressed to the tag focus moves to, and Control or Command with A selects every tag that is not disabled. 'value' holds the selected tags' values, separated by commas, and a change asks with 'helix-before-change' and tells with 'change'. Enter on a tag with an 'href' follows its link. A 'disabled' tag is passed over. A selected tag that is removed leaves 'value', which then sends 'change'. Name the set with 'label'. Each tag is named by its words alone, without its remove button. 'value' takes an array of values on the property as well, as React sets 'value={['Apple']}'; a press writes it back as a string. **Removing the last tag keeps focus in the group.** With no tags left the set is a 'group', and focus moves to its 'empty' part, which holds the 'empty' slot: put words there such as "No filters" for a reader to hear. With nothing slotted it says 'empty-label', "No tags". Where only disabled tags are left, the first of them holds the tab stop and takes focus, so the reader stays in the set. */
|
|
18792
|
+
/** A part of 'Tag' that holds tags as one control: a grid of rows, one tab stop for the whole set. The arrow keys move between tags, Home and End go to the first and the last, and a typed letter goes to the next tag starting with it. Delete or Backspace removes the focused tag where it is 'dismissible', by sending its 'helix-dismiss': remove it from your list in the handler, and focus moves to the next tag, or the previous one after the last. 'selection-mode' lets a reader select tags, with Space, Enter or a press: 'single' selects one at a time and 'multiple' any number. In 'multiple', Shift with an arrow, Home or End selects the range from the tag last pressed to the tag focus moves to, Shift with a press or Space selects the range to that tag, and Control or Command with A selects every tag that is not disabled. 'selection-behavior="replace"' selects the tag a reader presses or moves to alone, as a file list does, and Control or Command with a press or Space adds or takes out one tag. 'disallow-empty-selection' keeps one tag selected once one is. 'value' holds the selected tags' values, separated by commas, and a change asks with 'helix-before-change' and tells with 'change'. Enter on a tag with an 'href' follows its link. A 'disabled' tag is passed over. A selected tag that is removed leaves 'value', which then sends 'change'. Name the set with 'label'. Each tag is named by its words alone, without its remove button. 'value' takes an array of values on the property as well, as React sets 'value={['Apple']}'; a press writes it back as a string. **Removing the last tag keeps focus in the group.** With no tags left the set is a 'group', and focus moves to its 'empty' part, which holds the 'empty' slot: put words there such as "No filters" for a reader to hear. With nothing slotted it says 'empty-label', "No tags". Where only disabled tags are left, the first of them holds the tab stop and takes focus, so the reader stays in the set. */
|
|
17855
18793
|
"helix-headless-tag-group": DefineCustomElement<
|
|
17856
18794
|
HelixHeadlessTagGroup,
|
|
17857
18795
|
HelixHeadlessTagGroupVueProps,
|
|
@@ -17869,13 +18807,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17869
18807
|
HelixHeadlessTextareaVueProps,
|
|
17870
18808
|
HelixHeadlessTextareaVueEvents
|
|
17871
18809
|
>;
|
|
17872
|
-
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds', because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. The trigger and ArrowDown open the list, and so does a press into the field; Tab into the field opens nothing. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. With 'segmented', the field is a row of segments in place of the text: an hour, a minute, and AM or PM where the clock has them, each set with digits or the arrow keys. Alt+Down opens the list from a segment. */
|
|
18810
|
+
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds', because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. The trigger and ArrowDown open the list, and so does a press into the field; Tab into the field opens nothing. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. With 'segmented', the field is a row of segments in place of the text: an hour, a minute, and AM or PM where the clock has them, each set with digits or the arrow keys. Alt+Down opens the list from a segment. Text that is not a time gives the form an empty value, as a native time field does, and 'value' keeps the text so it can be corrected. **Keyboard.** The field is one tab stop, or each segment is with 'segmented', and the trigger is one more. | Key | What it does | |---|---| | Down | In the text field, opens the list on the chosen time. | | Alt with Down | Opens the list, from the text field or a segment. | | Enter | In the text field, takes the typed time and submits the form, as a native field does. In the list, chooses the highlighted time. | | Escape | Closes the list and puts focus back in the field. | | Up, Down on a segment | Steps the segment by one, round from its last value to its first. | | Page Up, Page Down on a segment | Steps by a page: two hours, or fifteen minutes or seconds. | | Home, End on a segment | Goes to the segment's first or last value. | | Digits on a segment | Fill it, and move to the next once it can take no more. | | A letter on the half of the day | Picks the half whose name starts with it, such as A for AM. | | Backspace, Delete on a segment | Empty the segment. | | Left, Right on a segment | Move to the previous or the next segment, along the line of text. | In the list, the keys are 'TimePicker''s. */
|
|
17873
18811
|
"helix-headless-time-input": DefineCustomElement<
|
|
17874
18812
|
HelixHeadlessTimeInput,
|
|
17875
18813
|
HelixHeadlessTimeInputVueProps,
|
|
17876
18814
|
HelixHeadlessTimeInputVueEvents
|
|
17877
18815
|
>;
|
|
17878
|
-
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem, and one for the second with 'seconds'. Left and Right move between the wheels, and Tab does too. 'hour-cycle' writes every time on a twelve or a twenty-four hour clock whatever the locale, and 'seconds' holds times to the second. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds'. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. */
|
|
18816
|
+
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem, and one for the second with 'seconds'. Left and Right move between the wheels, and Tab does too. 'hour-cycle' writes every time on a twelve or a twenty-four hour clock whatever the locale, and 'seconds' holds times to the second. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds'. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. **Keyboard.** The list is one tab stop, and each wheel is one. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous time, or in a wheel to the next or the previous hour, minute, second, or half of the day. | | Home, End | Moves to the first or the last time, or the first or the last in a wheel. | | Page Down, Page Up | Moves by as many times as the list shows at once. | | Digits | Moves to the next time that starts with what you typed, such as '9' for 9:00. | | Enter, Space | Chooses the highlighted time. Moving chooses too, except under 'manual' or with a 'mode'. With a 'mode', Space adds or removes the time. | | Right, Left | In the wheels, moves to the next or the previous wheel, mirrored right to left. | | Tab | Moves to the next wheel, then out of the picker. | **ARIA.** The list is a 'listbox' named by 'label', a slotted label, the host's 'aria-label' or its 'aria-labelledby'. A development build warns where all four are empty. The list is described by the hint, or by the message in 'feedback' in its place, and carries 'aria-multiselectable' with a 'mode' and 'aria-invalid' while 'feedback' says what is wrong. The wheels are a 'group' with that name, holding one 'listbox' per wheel, named "Hour", "Minute", "Second" and "AM/PM" in the page's language, and each described the same way. */
|
|
17879
18817
|
"helix-headless-time-picker": DefineCustomElement<
|
|
17880
18818
|
HelixHeadlessTimePicker,
|
|
17881
18819
|
HelixHeadlessTimePickerVueProps,
|
|
@@ -17887,7 +18825,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17887
18825
|
HelixHeadlessTimelineGroupVueProps,
|
|
17888
18826
|
HelixHeadlessTimelineGroupVueEvents
|
|
17889
18827
|
>;
|
|
17890
|
-
/** Given 'datetime', the label you write is wrapped in a '<time>' element, so a machine-readable value such as "2026-08-19" travels with a label such as "yesterday". Without 'datetime', the label is a '<span>'. Each entry draws the connector line that arrives at it and hides it when it is the first entry, using ':host(:first-child)'. This needs no index, no counting parent, and no script. 'Steps' and 'Breadcrumbs' work the same way. 'tone' sets the kind of event and is the only thing that colors the mark. It uses the same values as 'Announcement'. */
|
|
18828
|
+
/** Given 'datetime', the label you write is wrapped in a '<time>' element, so a machine-readable value such as "2026-08-19" travels with a label such as "yesterday". Without 'datetime', the label is a '<span>'. **'relative' writes the time for you** as how long ago it was, such as "3 hours ago", from 'datetime', where the 'time' slot is empty. The words move on as they go stale, "3 hours ago" becoming "4 hours ago", with one wakeup shared by every reading on the page, as 'FormatDate' keeps its own. They are in the language of the page, or of the nearest 'lang'. Each entry draws the connector line that arrives at it and hides it when it is the first entry, using ':host(:first-child)'. This needs no index, no counting parent, and no script. 'Steps' and 'Breadcrumbs' work the same way. 'tone' sets the kind of event and is the only thing that colors the mark. It uses the same values as 'Announcement'. */
|
|
17891
18829
|
"helix-headless-timeline-item": DefineCustomElement<
|
|
17892
18830
|
HelixHeadlessTimelineItem,
|
|
17893
18831
|
HelixHeadlessTimelineItemVueProps,
|
|
@@ -17953,7 +18891,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17953
18891
|
HelixHeadlessTreeItemVueProps,
|
|
17954
18892
|
HelixHeadlessTreeItemVueEvents
|
|
17955
18893
|
>;
|
|
17956
|
-
/** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. 'selection-mode="leaf"' chooses one item at a time and only the items at the ends: a press, Enter or Space on a branch opens or closes it and chooses nothing, as Web Awesome's 'leaf' mode does. Keys: Up and Down Arrow move between the items a reader can see; Right Arrow opens a shut branch and then moves into it, and Left Arrow shuts an open one and then moves to its parent, the two swapping on a right-to-left page. Home and End go to the first and the last item, Enter and Space choose or open, and the tree's one tab stop stays on the item last reached. In a tree of check marks, Control+A (Command+A on an Apple keyboard) checks every item or clears them all, and Shift with Up or Down Arrow moves and checks. Removing the item that has focus moves focus to the item after it among its siblings, or the one before, or its parent, so focus stays in the tree. **'reorderable' lets you move items among their siblings.** Alt with Up or Down moves the focused item a place, and Alt with Home or End to the first or the last place among its siblings, as the APG's rearrangeable listbox does. Each row gets a grip at its far end: drag it to move the item, and the tree scrolls near an edge. A click on a grip picks the item up and a click on one of its siblings drops it there, which needs no drag. The arrows move an item picked up that way, Enter or Space drops it, and Escape puts it back. The tree says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold the siblings in the new order. **You move the items**: the tree moves no element of yours, and focus follows the moved item once you have.
|
|
18894
|
+
/** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. 'selection-mode="leaf"' chooses one item at a time and only the items at the ends: a press, Enter or Space on a branch opens or closes it and chooses nothing, as Web Awesome's 'leaf' mode does. Keys: Up and Down Arrow move between the items a reader can see; Right Arrow opens a shut branch and then moves into it, and Left Arrow shuts an open one and then moves to its parent, the two swapping on a right-to-left page. Home and End go to the first and the last item, Enter and Space choose or open, and the tree's one tab stop stays on the item last reached. In a tree of check marks, Control+A (Command+A on an Apple keyboard) checks every item or clears them all, and Shift with Up or Down Arrow moves and checks. Shift+Space checks every item from the one last checked to the focused one, and Control+Shift+Home or End checks every item from the focused one to the first or the last, then moves there, as the tree pattern's range keys do. A tree with no name of its own is announced as "Tree", which says nothing about what it holds, so a development build warns once with the kind 'missing-name' where neither 'label' nor an 'aria-label' names it. Removing the item that has focus moves focus to the item after it among its siblings, or the one before, or its parent, so focus stays in the tree. **'reorderable' lets you move items among their siblings.** Alt with Up or Down moves the focused item a place, and Alt with Home or End to the first or the last place among its siblings, as the APG's rearrangeable listbox does. Each row gets a grip at its far end: drag it to move the item, and the tree scrolls near an edge. A click on a grip picks the item up and a click on one of its siblings drops it there, which needs no drag. The arrows move an item picked up that way, Enter or Space drops it, and Escape puts it back. The tree says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold the siblings in the new order. **You move the items**: the tree moves no element of yours, and focus follows the moved item once you have. **Alt with the arrow along the line moves an item into another branch.** Alt with the arrow that opens a branch (Right on a left-to-right page) puts the focused item last inside the item before it, and opens that item; Alt with the other arrow puts it after its parent, a level out. The same 'helix-before-reorder' and 'helix-reorder' are sent, with 'parent' naming the branch it moves into by its key, '''' for the top level, and 'keys' holding that branch's items in their new order. The tree says the move with 'moved-into-label'. */
|
|
17957
18895
|
"helix-headless-tree": DefineCustomElement<
|
|
17958
18896
|
HelixHeadlessTree,
|
|
17959
18897
|
HelixHeadlessTreeVueProps,
|
|
@@ -17977,19 +18915,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17977
18915
|
HelixHeadlessVideoPlaylistMenuVueProps,
|
|
17978
18916
|
HelixHeadlessVideoPlaylistMenuVueEvents
|
|
17979
18917
|
>;
|
|
17980
|
-
/** **You slot the player**, so it keeps your appearance, extra controls, captions, and poster treatment. 'Sandbox' takes its preview and 'Menu' its trigger the same way. **Entries are markup.** React skips properties it would set imperatively during hydration, so an array property on a custom element is missing on the first paint of a server-rendered page. 'using-the-elements.mdx' has the measurement. Markup also makes each entry a real button with its name inside. **The playlist does not play media.** It sets 'src' on the player and tracks which entry is current. The current entry moves when: - an entry is pressed, - the player dispatches 'helix-next' or 'helix-previous', or - the player reaches the end. On 'ended' the playlist advances and the next clip starts playing, because the user already pressed play once. 'repeat' decides what happens at the end: 'one' plays the same entry again, and 'all' goes from the last entry back to the first. Without it, the playlist stops on the last entry and sends 'helix-end'. 'shuffle' plays the entries in a random order, starting from the one that is current, and 'previous' retraces that order. **The player is named by the current entry**, and the device's own media controls show the entry as the title. A player you gave a 'label' keeps your name, and only the title follows the entry. **Keyboard.** Each entry is a button in the tab order, and Enter or Space plays it. The current entry carries 'aria-current'. While focus is on the player, the player's own keys work, and 'Video' lists them.
|
|
18918
|
+
/** **You slot the player**, so it keeps your appearance, extra controls, captions, and poster treatment. 'Sandbox' takes its preview and 'Menu' its trigger the same way. **Entries are markup.** React skips properties it would set imperatively during hydration, so an array property on a custom element is missing on the first paint of a server-rendered page. 'using-the-elements.mdx' has the measurement. Markup also makes each entry a real button with its name inside. **The playlist does not play media.** It sets 'src' on the player and tracks which entry is current. The current entry moves when: - an entry is pressed, - the player dispatches 'helix-next' or 'helix-previous', or - the player reaches the end. On 'ended' the playlist advances and the next clip starts playing, because the user already pressed play once. 'repeat' decides what happens at the end: 'one' plays the same entry again, and 'all' goes from the last entry back to the first. Without it, the playlist stops on the last entry and sends 'helix-end'. 'shuffle' plays the entries in a random order, starting from the one that is current, and 'previous' retraces that order. **The player is named by the current entry**, and the device's own media controls show the entry as the title. A player you gave a 'label' keeps your name, and only the title follows the entry. **Keyboard.** Each entry is a button in the tab order, and Enter or Space plays it. The arrow keys move focus to the entry before or after, and Home and End to the first and the last, passing over disabled entries. The current entry carries 'aria-current'. While focus is on the player, the player's own keys work, and 'Video' lists them, and Shift with N or P plays the next or the previous entry. The player's previous and next controls move through the entries in the same order the playlist does. **What a screen reader hears.** A list named by 'label', with a button for each entry. When the playlist moves to another entry, by a press, by the player's controls, or at the end of a clip, a live region says 'playing-label', "Now playing" and the entry's name. */
|
|
17981
18919
|
"helix-headless-video-playlist": DefineCustomElement<
|
|
17982
18920
|
HelixHeadlessVideoPlaylist,
|
|
17983
18921
|
HelixHeadlessVideoPlaylistVueProps,
|
|
17984
18922
|
HelixHeadlessVideoPlaylistVueEvents
|
|
17985
18923
|
>;
|
|
17986
|
-
/** The picture is a native '<video>', so decoding, buffering, captions, Picture in Picture, AirPlay, and codecs come from the platform. The component replaces the control bar, because the native bar cannot be styled. The scrubber and the volume are '<input type="range">' elements, so arrow keys, Home and End, touch targets, and screen reader announcements work as they do natively. When you set 'controls', the browser's control bar is used, the Helix bar is not drawn, and the keys below are not bound, so a key press does not seek twice. **Keyboard.** The keys match other players, and they are bound on the element only, so they work while focus is on the player. | Key | What it does | |---|---| | Space, 'k' | Plays or pauses. Space on a button presses the button. | | Right, Left | Moves 5 seconds forward or back. | | Shift with Right or Left | Moves 10 seconds forward or back. | | 'l', 'j' | Moves 10 seconds forward or back, as the skip buttons do. | | Up, Down | Raises or lowers the volume by a tenth. | | 'm' | Mutes or unmutes. | | 'f' | Enters or leaves fullscreen. | | Tab | Moves through the controls on the bar. | On the scrubber and the volume slider, the arrow keys, Page Up, Page Down, Home, and End move the slider, as on any range input. '<source>' and '<track>' children are copied into the video. A media element selects resources from its own child nodes, and a slot is one node, so slotted sources would give the video no text tracks, no current source, and a 'readyState' of zero, and it would not play. They are copied so your light DOM stays intact, and are copied again whenever the slot changes. The player sends every media event of its inner video under the same name, without bubbling, as a '<video>' sends it. Listen on the player as you would on a video: 'timeupdate', 'volumechange', 'loadedmetadata', 'error', and the rest. */
|
|
18924
|
+
/** The picture is a native '<video>', so decoding, buffering, captions, Picture in Picture, AirPlay, and codecs come from the platform. The component replaces the control bar, because the native bar cannot be styled. The scrubber and the volume are '<input type="range">' elements, so arrow keys, Home and End, touch targets, and screen reader announcements work as they do natively. When you set 'controls', the browser's control bar is used, the Helix bar is not drawn, and the keys below are not bound, so a key press does not seek twice. **Keyboard.** The keys match other players, and they are bound on the element only, so they work while focus is on the player. | Key | What it does | |---|---| | Space, 'k' | Plays or pauses. Space on a button presses the button. | | Right, Left | Moves 5 seconds forward or back. | | Shift with Right or Left | Moves 10 seconds forward or back. | | 'l', 'j' | Moves 10 seconds forward or back, as the skip buttons do. | | Up, Down | Raises or lowers the volume by a tenth. | | 'm' | Mutes or unmutes. | | 'f' | Enters or leaves fullscreen. | | 'c' | Turns captions on or off. | | Home, End | Goes to the start or the end. | | '0' to '9' | Goes to that tenth of the video: '5' is the middle. | | Tab | Moves through the controls on the bar. | A key with Control, Command, or Alt held is left to the browser. The player lists its keys in 'aria-keyshortcuts', and a live region says what a key changed that is not on the focused control: playing or paused, muted, the volume, captions on or off, and where the video is after a seek. On the scrubber and the volume slider, the arrow keys, Page Up, Page Down, Home, and End move the slider, as on any range input. '<source>' and '<track>' children are copied into the video. A media element selects resources from its own child nodes, and a slot is one node, so slotted sources would give the video no text tracks, no current source, and a 'readyState' of zero, and it would not play. They are copied so your light DOM stays intact, and are copied again whenever the slot changes. The player sends every media event of its inner video under the same name, without bubbling, as a '<video>' sends it. Listen on the player as you would on a video: 'timeupdate', 'volumechange', 'loadedmetadata', 'error', and the rest. */
|
|
17987
18925
|
"helix-headless-video": DefineCustomElement<
|
|
17988
18926
|
HelixHeadlessVideo,
|
|
17989
18927
|
HelixHeadlessVideoVueProps,
|
|
17990
18928
|
HelixHeadlessVideoVueEvents
|
|
17991
18929
|
>;
|
|
17992
|
-
/** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **A grid.** 'columns' lays the items out that many to a line, as a grid of equal columns, and windows the set a line at a time, as React Aria's grid layout does. Each item draws one element, a cell of the grid, and 'estimate' is the height of a line. Space the items with padding inside each one, which the list measures with the line. **Keyboard.** The list is one tab stop. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous item, or in a grid to the item in the same column on the next or the previous line. | | Right, Left | In a grid, moves to the next or the previous item along the line, the other way round on a right-to-left page. | | Home, End | Moves to the first or the last item. | | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. | | A letter or a word | Moves to the next item whose text starts with what you typed. | | Tab | Moves into the focused row's own links and buttons, then out of the list. | An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. Typing matches each item's 'text-field', which is the first 'data-field' of the row template by default, or the item itself when it is a string or a number. Each row says its place in the whole set with 'aria-posinset' and 'aria-setsize', so a screen reader says "4,000 of 10,000". The row holding focus stays drawn when it scrolls out. **Selecting.** 'selection-mode' makes the list a list box a reader chooses from: 'single' selects one item and 'multiple' any number. Space or a press selects an item, Shift with Space, an arrow, Home, End or a press takes in the items from the last one chosen, and Control or Command with A selects them all, in 'multiple'. 'value' holds the chosen items' keys, separated by commas, in the order of the set: 'key-field' names each item's key, and a string or a number item is its own key. A change asks with 'helix-before-change' and tells with 'change'. Each row is an 'option' marked 'aria-selected', so a row's own links and buttons are not reached there: keep those to a list without 'selection-mode'. **Loading more.** 'helix-range-change' fires as the items on screen change, and 'range' holds them. 'helix-load-more' fires once a reader is within one screen of the end, once for each length of the set: add to 'items' and it can fire again. While you fetch, set 'loading': the list is busy, and a row after the last item says "Loading more" ('loading-label', or your own content in the 'loading' slot). 'scrollToIndex' takes a reader to an item. **An empty list.** Set 'empty-label', or put your own content in the 'empty' slot, for a row shown when there are no items and none are loading, such as "No messages yet" and a link to write one. Without either, an empty list shows nothing, since a list whose items have not arrived yet has not said it has none. **Row height.** Rows are placed by 'estimate' until they are drawn. Then the list reads the drawn rows' height once and places every row by it, so a wrong estimate still reaches the last item. Set 'measured' for rows of different heights. Once the list draws rows of different heights, such as rows that wrap on a narrow screen, it places each row by its own height whether 'measured' is set or not. The list follows its source. A new 'items' array, an edit to the script's text, or a script replaced under the same id draws the new rows. A row that stays in view keeps its element as the list scrolls. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
|
|
18930
|
+
/** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **A grid.** 'columns' lays the items out that many to a line, as a grid of equal columns, and windows the set a line at a time, as React Aria's grid layout does. Each item draws one element, a cell of the grid, and 'estimate' is the height of a line. Space the items with padding inside each one, which the list measures with the line. **Keyboard.** The list is one tab stop. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous item, or in a grid to the item in the same column on the next or the previous line. | | Right, Left | In a grid, moves to the next or the previous item along the line, the other way round on a right-to-left page. | | Home, End | Moves to the first or the last item. | | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. | | A letter or a word | Moves to the next item whose text starts with what you typed. | | Tab | Moves into the focused row's own links and buttons, then out of the list. | An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. Typing matches each item's 'text-field', which is the first 'data-field' of the row template by default, or the item itself when it is a string or a number. Each row says its place in the whole set with 'aria-posinset' and 'aria-setsize', so a screen reader says "4,000 of 10,000". The row holding focus stays drawn when it scrolls out. **Selecting.** 'selection-mode' makes the list a list box a reader chooses from: 'single' selects one item and 'multiple' any number. Space or a press selects an item, Shift with Space, an arrow, Home, End or a press takes in the items from the last one chosen, and Control or Command with A selects them all, in 'multiple'. 'value' holds the chosen items' keys, separated by commas, in the order of the set: 'key-field' names each item's key, and a string or a number item is its own key. A change asks with 'helix-before-change' and tells with 'change'. Each row is an 'option' marked 'aria-selected', so a row's own links and buttons are not reached there: keep those to a list without 'selection-mode'. **Loading more.** 'helix-range-change' fires as the items on screen change, and 'range' holds them. 'helix-load-more' fires once a reader is within one screen of the end, once for each length of the set: add to 'items' and it can fire again. While you fetch, set 'loading': the list is busy, and a row after the last item says "Loading more" ('loading-label', or your own content in the 'loading' slot). 'scrollToIndex' takes a reader to an item. **An empty list.** Set 'empty-label', or put your own content in the 'empty' slot, for a row shown when there are no items and none are loading, such as "No messages yet" and a link to write one. Without either, an empty list shows nothing, since a list whose items have not arrived yet has not said it has none. The list takes the 'empty' state while it has read its items and holds none, and the 'loading' state while 'loading' is set, so your stylesheet can change the box around it for either. A list with no name is reported once in a development build. Name it with 'label' or 'aria-label'. **Row height.** Rows are placed by 'estimate' until they are drawn. Then the list reads the drawn rows' height once and places every row by it, so a wrong estimate still reaches the last item. Set 'measured' for rows of different heights. Once the list draws rows of different heights, such as rows that wrap on a narrow screen, it places each row by its own height whether 'measured' is set or not. The list follows its source. A new 'items' array, an edit to the script's text, or a script replaced under the same id draws the new rows. A row that stays in view keeps its element as the list scrolls. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
|
|
17993
18931
|
"helix-headless-virtual-list": DefineCustomElement<
|
|
17994
18932
|
HelixHeadlessVirtualList,
|
|
17995
18933
|
HelixHeadlessVirtualListVueProps,
|