@fusion.dev/helix-headless 0.154.0 → 0.155.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 +1427 -88
- 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/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/date-input/root/date-input-root.d.ts +1 -0
- package/dist/date-input/root/date-input-root.js +2 -1
- 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 +2 -1
- package/dist/navigation/root/navigation-root.d.ts +26 -0
- package/dist/navigation/root/navigation-root.js +58 -1
- 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/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/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/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +984 -151
- package/types/vue.d.ts +221 -49
- package/types/words.d.ts +36 -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}`
|
|
@@ -3188,7 +3200,8 @@ Passed to the panel, whose square, hue ramp and presets say the color's
|
|
|
3188
3200
|
name, and read by the swatch in `swatch`, which says it before the value.
|
|
3189
3201
|
Color Picker lists the keys. */
|
|
3190
3202
|
colorWords?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
3191
|
-
/** The syntax the value is written in: `hex`, `rgb`,
|
|
3203
|
+
/** The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or
|
|
3204
|
+
`hsb`, as Color Picker's `format`.
|
|
3192
3205
|
|
|
3193
3206
|
**Undefaulted, because it reflects.** The two together stamp an attribute
|
|
3194
3207
|
onto every host anybody renders, including the ones nobody configured: the
|
|
@@ -3423,8 +3436,9 @@ language hears its own rather than English between its own labels. */
|
|
|
3423
3436
|
brightnessLabel?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
|
|
3424
3437
|
/** Whether the picker shows a number field for each channel of the color, as
|
|
3425
3438
|
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
3426
|
-
and rgb, hue, saturation and lightness for hsl,
|
|
3427
|
-
|
|
3439
|
+
and rgb, hue, saturation and lightness for hsl, hue, saturation and
|
|
3440
|
+
brightness for hsb, lightness, chroma and hue for oklch, and the opacity
|
|
3441
|
+
with `alpha`.
|
|
3428
3442
|
|
|
3429
3443
|
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
3430
3444
|
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
@@ -3432,13 +3446,20 @@ the syntax the format toggle sets. */
|
|
|
3432
3446
|
"channel-fields"?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
3433
3447
|
/** Whether the picker shows a number field for each channel of the color, as
|
|
3434
3448
|
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
3435
|
-
and rgb, hue, saturation and lightness for hsl,
|
|
3436
|
-
|
|
3449
|
+
and rgb, hue, saturation and lightness for hsl, hue, saturation and
|
|
3450
|
+
brightness for hsb, lightness, chroma and hue for oklch, and the opacity
|
|
3451
|
+
with `alpha`.
|
|
3437
3452
|
|
|
3438
3453
|
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
3439
3454
|
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
3440
3455
|
the syntax the format toggle sets. */
|
|
3441
3456
|
channelFields?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
3457
|
+
/** What the chroma channel's field is called, in `channel-fields` with
|
|
3458
|
+
oklch. */
|
|
3459
|
+
"chroma-label"?: (HelixHeadlessColorPicker["chromaLabel"]) | undefined;
|
|
3460
|
+
/** What the chroma channel's field is called, in `channel-fields` with
|
|
3461
|
+
oklch. */
|
|
3462
|
+
chromaLabel?: (HelixHeadlessColorPicker["chromaLabel"]) | undefined;
|
|
3442
3463
|
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
3443
3464
|
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
3444
3465
|
|
|
@@ -3479,10 +3500,16 @@ the color. */
|
|
|
3479
3500
|
"eyedropper-label"?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
|
|
3480
3501
|
/** What the eyedropper is called. */
|
|
3481
3502
|
eyedropperLabel?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
|
|
3482
|
-
/** The syntax the value is written in: `hex`, `rgb`,
|
|
3503
|
+
/** The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or
|
|
3504
|
+
`hsb`.
|
|
3483
3505
|
|
|
3484
3506
|
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
|
|
3507
|
+
`hex` still takes an `rgb()` or an `oklch()` handed to it and stores the
|
|
3508
|
+
hex for it. `oklch` writes the sRGB color the picker holds, such as
|
|
3509
|
+
`oklch(62.8% 0.258 29.2)`; a color outside sRGB that is handed in is
|
|
3510
|
+
clipped to it. `hsb` writes the picker's own model, `hsb(0, 100%, 100%)`,
|
|
3511
|
+
as React Aria's and Zag's color strings do. It is not CSS, so the toggle
|
|
3512
|
+
walks the other four. */
|
|
3486
3513
|
format?: (HelixHeadlessColorPicker["format"]) | undefined;
|
|
3487
3514
|
/** What the syntax toggle is called, with `{format}` filled in. */
|
|
3488
3515
|
"format-label"?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
@@ -3492,15 +3519,21 @@ Only what is written. Everything is read whatever this says, so a picker on
|
|
|
3492
3519
|
"green-label"?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
3493
3520
|
/** What the green channel's field is called, in `channel-fields`. */
|
|
3494
3521
|
greenLabel?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
3522
|
+
/** Help under the picker, such as what the color is used for. The `hint`
|
|
3523
|
+
slot takes richer content. */
|
|
3524
|
+
hint?: (HelixHeadlessColorPicker["hint"]) | undefined;
|
|
3495
3525
|
/** What the hue channel is called. */
|
|
3496
3526
|
"hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
3497
3527
|
/** What the hue channel is called. */
|
|
3498
3528
|
hueLabel?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
3529
|
+
/** The name above the picker, such as "Brand color". The picker is then a
|
|
3530
|
+
group with this name. The `label` slot takes richer content. */
|
|
3531
|
+
label?: (HelixHeadlessColorPicker["label"]) | undefined;
|
|
3499
3532
|
/** What the lightness channel's field is called, in `channel-fields` with
|
|
3500
|
-
hsl. */
|
|
3533
|
+
hsl and oklch. */
|
|
3501
3534
|
"lightness-label"?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
3502
3535
|
/** What the lightness channel's field is called, in `channel-fields` with
|
|
3503
|
-
hsl. */
|
|
3536
|
+
hsl and oklch. */
|
|
3504
3537
|
lightnessLabel?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
3505
3538
|
/** Hides the eyedropper. Without it, the eyedropper appears in browsers that
|
|
3506
3539
|
support one. */
|
|
@@ -5266,15 +5299,22 @@ speaks it. Unset is the sentence registered for the page's language, then
|
|
|
5266
5299
|
the English. `{mode}` is `single`, `range` or `multiple`, so each can have
|
|
5267
5300
|
its own sentence. */
|
|
5268
5301
|
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
|
-
|
|
5302
|
+
/** The calendar the heading, the days, and the months are written in.
|
|
5303
|
+
|
|
5304
|
+
`gregory`, `buddhist`, `japanese`, `roc`, and `iso8601` are the five
|
|
5305
|
+
whose months are the Gregorian months. Absent is the locale's own where
|
|
5306
|
+
it is one of the five, such as `buddhist` for `th-TH` or `japanese` for
|
|
5307
|
+
`ja-JP-u-ca-japanese`, and `gregory` for every other, such as `persian`
|
|
5308
|
+
for `fa-IR`.
|
|
5309
|
+
|
|
5310
|
+
`persian`, `hebrew`, `islamic-umalqura`, `islamic-civil`, `ethiopic`,
|
|
5311
|
+
`coptic`, and `indian` draw a calendar with months of its own, as React
|
|
5312
|
+
Aria's calendars do: each grid is one of that calendar's months, the
|
|
5313
|
+
Hebrew leap month and Ethiopia's five-day thirteenth month included, and
|
|
5314
|
+
Previous, Next and the page keys move by those months. `month` and
|
|
5315
|
+
`helix-navigate` then name a month by its first day, `YYYY-MM-DD`. The
|
|
5316
|
+
heading stays text, as the months and years views are drawn in Gregorian
|
|
5317
|
+
months only. The value is `YYYY-MM-DD` in every calendar. */
|
|
5278
5318
|
calendar?: (HelixHeadlessDatePicker["calendar"]) | undefined;
|
|
5279
5319
|
/** The month to open on when `month` is not set. */
|
|
5280
5320
|
"default-month"?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
|
|
@@ -5333,8 +5373,9 @@ its days. */
|
|
|
5333
5373
|
min?: (HelixHeadlessDatePicker["min"]) | undefined;
|
|
5334
5374
|
/** How many dates can be held at once. */
|
|
5335
5375
|
mode?: (HelixHeadlessDatePicker["mode"]) | undefined;
|
|
5336
|
-
/** The month shown, as `YYYY-MM
|
|
5337
|
-
|
|
5376
|
+
/** The month shown, as `YYYY-MM`, or as its first day, `YYYY-MM-DD`, under a
|
|
5377
|
+
`calendar` with months of its own. When it is not set, it follows
|
|
5378
|
+
`value`, then the current month.
|
|
5338
5379
|
|
|
5339
5380
|
Separate from `value` on purpose, so paging selects nothing and a consumer
|
|
5340
5381
|
can drive the view. Reading gives the month on show; writing sets it, and
|
|
@@ -5436,6 +5477,22 @@ date including the one already chosen. */
|
|
|
5436
5477
|
"step-mismatch-message"?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
|
|
5437
5478
|
/** The validation message for a date that `step` skips. */
|
|
5438
5479
|
stepMismatchMessage?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
|
|
5480
|
+
/** The time zone today is read in, such as `America/New_York`, as React
|
|
5481
|
+
Aria's `today(timeZone)` reads it. Empty is the reader's own.
|
|
5482
|
+
|
|
5483
|
+
Dates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:
|
|
5484
|
+
the day marked `aria-current` and `day-today`, and the month a picker
|
|
5485
|
+
with no value opens on. A desk in Tokyo booking for an office in New York
|
|
5486
|
+
sets `America/New_York`, and today is the office's. */
|
|
5487
|
+
"time-zone"?: (HelixHeadlessDatePicker["timeZone"]) | undefined;
|
|
5488
|
+
/** The time zone today is read in, such as `America/New_York`, as React
|
|
5489
|
+
Aria's `today(timeZone)` reads it. Empty is the reader's own.
|
|
5490
|
+
|
|
5491
|
+
Dates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:
|
|
5492
|
+
the day marked `aria-current` and `day-today`, and the month a picker
|
|
5493
|
+
with no value opens on. A desk in Tokyo booking for an office in New York
|
|
5494
|
+
sets `America/New_York`, and today is the office's. */
|
|
5495
|
+
timeZone?: (HelixHeadlessDatePicker["timeZone"]) | undefined;
|
|
5439
5496
|
/** The validation message for a date that `disable-dates` or `disable-days`
|
|
5440
5497
|
bars. */
|
|
5441
5498
|
"unavailable-message"?: (HelixHeadlessDatePicker["unavailableMessage"]) | undefined;
|
|
@@ -12594,6 +12651,18 @@ the stop moves on the trigger inside the shadow root, as Button's does.
|
|
|
12594
12651
|
No attribute, because it is coordination between elements rather than
|
|
12595
12652
|
anything a consumer sets. */
|
|
12596
12653
|
focusable?: (HelixHeadlessSelect["focusable"]) | undefined;
|
|
12654
|
+
/** The options as data, for a list too long to draw whole: each a value,
|
|
12655
|
+
which is also its words, or a record with a `value`, a `label` and
|
|
12656
|
+
`disabled`. Passed to the list, which draws only the options in sight,
|
|
12657
|
+
as Listbox's `items` does. Set, the options you write as children are
|
|
12658
|
+
not read.
|
|
12659
|
+
|
|
12660
|
+
The trigger shows the chosen options' labels, the letters and the Left
|
|
12661
|
+
and Right keys on the closed trigger choose over the whole set, and a
|
|
12662
|
+
chosen value whose option leaves `items` drops out of `value`.
|
|
12663
|
+
`value-content` is not called for `items`. Import the Option family as
|
|
12664
|
+
well, whose elements are drawn. */
|
|
12665
|
+
items?: (HelixHeadlessSelect["items"]) | undefined;
|
|
12597
12666
|
/** What the trigger shows for the chosen options: a function given them, in
|
|
12598
12667
|
the order they appear, that returns text, an element or a Lit template.
|
|
12599
12668
|
|
|
@@ -12758,9 +12827,11 @@ between its thumbs and ignores it. */
|
|
|
12758
12827
|
origin?: (HelixHeadlessSlider["origin"]) | undefined;
|
|
12759
12828
|
/** Adds a second thumb, so the value is a pair.
|
|
12760
12829
|
|
|
12761
|
-
The pair is one string, `"10,50"`, which is what
|
|
12762
|
-
`MixinControllerValue`
|
|
12763
|
-
|
|
12830
|
+
The pair is one string, `"10,50"`, which is what `value` and
|
|
12831
|
+
`MixinControllerValue` hold. A form receives two entries under the name,
|
|
12832
|
+
`price=10&price=50`, as React Aria's two thumbs send theirs.
|
|
12833
|
+
`valueAsNumber` reads the lower of the two, since a range has no single
|
|
12834
|
+
number. */
|
|
12764
12835
|
range?: (HelixHeadlessSlider["range"]) | undefined;
|
|
12765
12836
|
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
12766
12837
|
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
@@ -12768,12 +12839,34 @@ filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
|
12768
12839
|
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
12769
12840
|
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
12770
12841
|
rangeText?: (HelixHeadlessSlider["rangeText"]) | undefined;
|
|
12842
|
+
/** Whether a reader can see and focus the value and cannot change it. A
|
|
12843
|
+
read-only slider still submits its value.
|
|
12844
|
+
|
|
12845
|
+
React Aria's `isReadOnly`. Each thumb stays a tab stop and says
|
|
12846
|
+
`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag
|
|
12847
|
+
leave the value where it is. A script can still set `value`. */
|
|
12848
|
+
readonly?: (HelixHeadlessSlider["readOnly"]) | undefined;
|
|
12849
|
+
/** Whether a reader can see and focus the value and cannot change it. A
|
|
12850
|
+
read-only slider still submits its value.
|
|
12851
|
+
|
|
12852
|
+
React Aria's `isReadOnly`. Each thumb stays a tab stop and says
|
|
12853
|
+
`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag
|
|
12854
|
+
leave the value where it is. A script can still set `value`. */
|
|
12855
|
+
readOnly?: (HelixHeadlessSlider["readOnly"]) | undefined;
|
|
12771
12856
|
/** Shows the chosen value beside the track. */
|
|
12772
12857
|
"show-value"?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
12773
12858
|
/** Shows the chosen value beside the track. */
|
|
12774
12859
|
showValue?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
12775
12860
|
/** How far one press of an arrow key moves the thumb. */
|
|
12776
12861
|
step?: (HelixHeadlessSlider["step"]) | undefined;
|
|
12862
|
+
/** The name of a thumb between a range's first and last, read after the
|
|
12863
|
+
slider's label, with `{index}` filled in: its place, counted from 1. The
|
|
12864
|
+
first is `minimum-label` and the last `maximum-label`. */
|
|
12865
|
+
"thumb-label"?: (HelixHeadlessSlider["thumbLabel"]) | undefined;
|
|
12866
|
+
/** The name of a thumb between a range's first and last, read after the
|
|
12867
|
+
slider's label, with `{index}` filled in: its place, counted from 1. The
|
|
12868
|
+
first is `minimum-label` and the last `maximum-label`. */
|
|
12869
|
+
thumbLabel?: (HelixHeadlessSlider["thumbLabel"]) | undefined;
|
|
12777
12870
|
/** Whether each thumb shows its value in a bubble beside it, as Web
|
|
12778
12871
|
Awesome's `with-tooltip`. The styled slider shows the bubbles while the
|
|
12779
12872
|
slider is under the pointer or holds focus. They repeat what each thumb
|
|
@@ -13023,10 +13116,20 @@ export type HelixHeadlessSpeedDialItemHelixSelectElementEvent =
|
|
|
13023
13116
|
export type HelixHeadlessSpeedDialItemVueProps = {
|
|
13024
13117
|
/** Whether the action is disabled, so it cannot be chosen. */
|
|
13025
13118
|
disabled?: (HelixHeadlessSpeedDialItem["disabled"]) | undefined;
|
|
13119
|
+
/** Whether the link downloads the file when the action is chosen. Only
|
|
13120
|
+
meaningful beside an `href`, and only for a file served from the page's
|
|
13121
|
+
origin. */
|
|
13122
|
+
download?: (HelixHeadlessSpeedDialItem["download"]) | undefined;
|
|
13123
|
+
/** The URL the action links to. Setting it draws the action as a link. */
|
|
13124
|
+
href?: (HelixHeadlessSpeedDialItem["href"]) | undefined;
|
|
13125
|
+
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
13126
|
+
rel?: (HelixHeadlessSpeedDialItem["rel"]) | undefined;
|
|
13026
13127
|
/** The action's keyboard shortcut as a chord, such as `mod+s`, carried as
|
|
13027
13128
|
`aria-keyshortcuts` and drawn after the name. `mod` is Command on an Apple
|
|
13028
13129
|
keyboard and Control elsewhere. Showing a shortcut does not bind it. */
|
|
13029
13130
|
shortcut?: (HelixHeadlessSpeedDialItem["shortcut"]) | undefined;
|
|
13131
|
+
/** Where the link opens, such as `_blank` for a new tab. */
|
|
13132
|
+
target?: (HelixHeadlessSpeedDialItem["target"]) | undefined;
|
|
13030
13133
|
/** The action's value, sent in `helix-select` when the action is chosen. */
|
|
13031
13134
|
value?: (HelixHeadlessSpeedDialItem["value"]) | undefined;
|
|
13032
13135
|
};
|
|
@@ -13075,13 +13178,17 @@ you described or labeled it yourself. */
|
|
|
13075
13178
|
longPressLabel?: (HelixHeadlessSpeedDial["longPressLabel"]) | undefined;
|
|
13076
13179
|
/** Space between the trigger and the actions, in pixels. */
|
|
13077
13180
|
offset?: (HelixHeadlessSpeedDial["offset"]) | undefined;
|
|
13078
|
-
/** What opens the dial. `click` opens it on a press of the trigger.
|
|
13079
|
-
|
|
13080
|
-
|
|
13181
|
+
/** What opens the dial. `click` opens it on a press of the trigger. `hover`
|
|
13182
|
+
also opens it while a mouse rests on the trigger, and closes it once the
|
|
13183
|
+
mouse has left. Under `long-press`, a press is the trigger's own action,
|
|
13184
|
+
and the dial opens on a press held for half a second, or on Alt+Down or
|
|
13185
|
+
Alt+Up. */
|
|
13081
13186
|
"open-on"?: (HelixHeadlessSpeedDial["openOn"]) | undefined;
|
|
13082
|
-
/** What opens the dial. `click` opens it on a press of the trigger.
|
|
13083
|
-
|
|
13084
|
-
|
|
13187
|
+
/** What opens the dial. `click` opens it on a press of the trigger. `hover`
|
|
13188
|
+
also opens it while a mouse rests on the trigger, and closes it once the
|
|
13189
|
+
mouse has left. Under `long-press`, a press is the trigger's own action,
|
|
13190
|
+
and the dial opens on a press held for half a second, or on Alt+Down or
|
|
13191
|
+
Alt+Up. */
|
|
13085
13192
|
openOn?: (HelixHeadlessSpeedDial["openOn"]) | undefined;
|
|
13086
13193
|
/** The direction the actions open in. They move to another side if that side
|
|
13087
13194
|
does not fit.
|
|
@@ -13355,6 +13462,16 @@ export type HelixHeadlessStepsHelixSelectElementEvent =
|
|
|
13355
13462
|
HelixHeadlessStepsElementEvent<HelixSelectEvent>;
|
|
13356
13463
|
|
|
13357
13464
|
export type HelixHeadlessStepsVueProps = {
|
|
13465
|
+
/** Whether the arrow keys move focus between the stages' names, along the
|
|
13466
|
+
way the steps run. Off by default, so the arrows keep scrolling the page. */
|
|
13467
|
+
arrows?: (HelixHeadlessSteps["arrows"]) | undefined;
|
|
13468
|
+
/** What marks a stage `complete`.
|
|
13469
|
+
|
|
13470
|
+
Absent, you do: each step's `complete` is yours, because a reader who
|
|
13471
|
+
steps back has finished more stages than the one they are on. `passed`
|
|
13472
|
+
marks every stage before the one a reader moves to, and leaves the marks
|
|
13473
|
+
when they go back. */
|
|
13474
|
+
completion?: (HelixHeadlessSteps["completion"]) | undefined;
|
|
13358
13475
|
/** The sequence's name, read by screen readers.
|
|
13359
13476
|
|
|
13360
13477
|
A list of stages is a landmark a reader arrives at out of order, so it
|
|
@@ -14076,6 +14193,12 @@ panels and tells a screen reader the list is vertical.
|
|
|
14076
14193
|
|
|
14077
14194
|
Optional, so the resting row writes no attribute onto the host. */
|
|
14078
14195
|
orientation?: (HelixHeadlessTabs["orientation"]) | undefined;
|
|
14196
|
+
/** Whether a strip with more tabs than fit shows a button at each end it can
|
|
14197
|
+
scroll toward. */
|
|
14198
|
+
"scroll-controls"?: (HelixHeadlessTabs["scrollControls"]) | undefined;
|
|
14199
|
+
/** Whether a strip with more tabs than fit shows a button at each end it can
|
|
14200
|
+
scroll toward. */
|
|
14201
|
+
scrollControls?: (HelixHeadlessTabs["scrollControls"]) | undefined;
|
|
14079
14202
|
/** How the row of tabs is drawn.
|
|
14080
14203
|
|
|
14081
14204
|
Unset is a raised pill on the selected tab with nothing behind the row,
|
|
@@ -14132,11 +14255,22 @@ export type HelixHeadlessTabElementEvent<E = Event> = TypedEvent<
|
|
|
14132
14255
|
HelixHeadlessTab,
|
|
14133
14256
|
E
|
|
14134
14257
|
>;
|
|
14258
|
+
/** `helix-dismiss` event type */
|
|
14259
|
+
export type HelixHeadlessTabHelixDismissElementEvent =
|
|
14260
|
+
HelixHeadlessTabElementEvent<HelixDismissEvent>;
|
|
14135
14261
|
/** `helix-select` event type */
|
|
14136
14262
|
export type HelixHeadlessTabHelixSelectElementEvent =
|
|
14137
14263
|
HelixHeadlessTabElementEvent<HelixSelectEvent>;
|
|
14138
14264
|
|
|
14139
14265
|
export type HelixHeadlessTabVueProps = {
|
|
14266
|
+
/** The tooltip on the mark that closes a `dismissible` tab. The mark is for
|
|
14267
|
+
the pointer and hidden from screen readers, which hear the Delete key
|
|
14268
|
+
through `aria-keyshortcuts`. */
|
|
14269
|
+
"dismiss-label"?: (HelixHeadlessTab["dismissLabel"]) | undefined;
|
|
14270
|
+
/** The tooltip on the mark that closes a `dismissible` tab. The mark is for
|
|
14271
|
+
the pointer and hidden from screen readers, which hear the Delete key
|
|
14272
|
+
through `aria-keyshortcuts`. */
|
|
14273
|
+
dismissLabel?: (HelixHeadlessTab["dismissLabel"]) | undefined;
|
|
14140
14274
|
/** The URL the tab links to. Setting it renders the tab as a link, for a set
|
|
14141
14275
|
of tabs that are pages of a site. */
|
|
14142
14276
|
href?: (HelixHeadlessTab["href"]) | undefined;
|
|
@@ -14144,6 +14278,8 @@ of tabs that are pages of a site. */
|
|
|
14144
14278
|
rel?: (HelixHeadlessTab["rel"]) | undefined;
|
|
14145
14279
|
/** Where the link opens, such as `_blank`, for a tab with an `href`. */
|
|
14146
14280
|
target?: (HelixHeadlessTab["target"]) | undefined;
|
|
14281
|
+
/** Whether the element shows a control that dismisses it. */
|
|
14282
|
+
dismissible?: (HelixHeadlessTab["dismissible"]) | undefined;
|
|
14147
14283
|
/** Whether the item is disabled and cannot be chosen. */
|
|
14148
14284
|
disabled?: (HelixHeadlessTab["disabled"]) | undefined;
|
|
14149
14285
|
/** Whether the item is selected.
|
|
@@ -14158,6 +14294,8 @@ submits. */
|
|
|
14158
14294
|
};
|
|
14159
14295
|
|
|
14160
14296
|
export type HelixHeadlessTabVueEvents = {
|
|
14297
|
+
/** A `dismissible` tab was asked to close. The tab does not remove itself, so remove it and its panel in response. Cancelable. */
|
|
14298
|
+
"helix-dismiss": HelixHeadlessTabHelixDismissElementEvent;
|
|
14161
14299
|
/** Fired when the tab is chosen. Cancelable: canceling it stops the change and leaves the decision to you. */
|
|
14162
14300
|
"helix-select": HelixHeadlessTabHelixSelectElementEvent;
|
|
14163
14301
|
};
|
|
@@ -14175,6 +14313,14 @@ export type HelixHeadlessTagGroupHelixDismissElementEvent =
|
|
|
14175
14313
|
HelixHeadlessTagGroupElementEvent<HelixDismissEvent>;
|
|
14176
14314
|
|
|
14177
14315
|
export type HelixHeadlessTagGroupVueProps = {
|
|
14316
|
+
/** Keeps at least one tag selected once one is, as React Aria's
|
|
14317
|
+
`disallowEmptySelection`: a press or a key that would leave none selected
|
|
14318
|
+
is refused. Removing the last selected tag still takes it out of `value`. */
|
|
14319
|
+
"disallow-empty-selection"?: (HelixHeadlessTagGroup["disallowEmptySelection"]) | undefined;
|
|
14320
|
+
/** Keeps at least one tag selected once one is, as React Aria's
|
|
14321
|
+
`disallowEmptySelection`: a press or a key that would leave none selected
|
|
14322
|
+
is refused. Removing the last selected tag still takes it out of `value`. */
|
|
14323
|
+
disallowEmptySelection?: (HelixHeadlessTagGroup["disallowEmptySelection"]) | undefined;
|
|
14178
14324
|
/** The words the group shows and says once its last tag is removed, where
|
|
14179
14325
|
nothing is in the `empty` slot. */
|
|
14180
14326
|
"empty-label"?: (HelixHeadlessTagGroup["emptyLabel"]) | undefined;
|
|
@@ -14184,6 +14330,20 @@ nothing is in the `empty` slot. */
|
|
|
14184
14330
|
/** The name of the set, such as "Filters", which a screen reader announces
|
|
14185
14331
|
before its tags. */
|
|
14186
14332
|
label?: (HelixHeadlessTagGroup["label"]) | undefined;
|
|
14333
|
+
/** What a press, Space, or a move does to the tags already selected.
|
|
14334
|
+
`toggle`, the default, keeps them: a press adds or takes out the tag, and
|
|
14335
|
+
the arrow keys move focus alone. `replace` selects the tag alone, as a
|
|
14336
|
+
file list does, and the arrow keys carry the selection with focus.
|
|
14337
|
+
Control or Command with a press or Space adds or takes out one tag in
|
|
14338
|
+
`multiple`, and with an arrow moves focus without selecting. */
|
|
14339
|
+
"selection-behavior"?: (HelixHeadlessTagGroup["selectionBehavior"]) | undefined;
|
|
14340
|
+
/** What a press, Space, or a move does to the tags already selected.
|
|
14341
|
+
`toggle`, the default, keeps them: a press adds or takes out the tag, and
|
|
14342
|
+
the arrow keys move focus alone. `replace` selects the tag alone, as a
|
|
14343
|
+
file list does, and the arrow keys carry the selection with focus.
|
|
14344
|
+
Control or Command with a press or Space adds or takes out one tag in
|
|
14345
|
+
`multiple`, and with an arrow moves focus without selecting. */
|
|
14346
|
+
selectionBehavior?: (HelixHeadlessTagGroup["selectionBehavior"]) | undefined;
|
|
14187
14347
|
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
14188
14348
|
|
|
14189
14349
|
Absent selects nothing, and the tags carry no selected state at all. */
|
|
@@ -16010,6 +16170,18 @@ refused, in a `reorderable` tree. */
|
|
|
16010
16170
|
An `aria-label` or `aria-labelledby` on the host names the tree too, and
|
|
16011
16171
|
wins over this. */
|
|
16012
16172
|
label?: (HelixHeadlessTree["label"]) | undefined;
|
|
16173
|
+
/** What screen readers hear when an item moves into another branch, in a
|
|
16174
|
+
`reorderable` tree. `{name}` is the item's words, `{parent}` the words of
|
|
16175
|
+
the branch it moved into, or the tree's `label` for the top level,
|
|
16176
|
+
`{position}` its place there, counting from 1, and `{count}` the number of
|
|
16177
|
+
items there. */
|
|
16178
|
+
"moved-into-label"?: (HelixHeadlessTree["movedIntoLabel"]) | undefined;
|
|
16179
|
+
/** What screen readers hear when an item moves into another branch, in a
|
|
16180
|
+
`reorderable` tree. `{name}` is the item's words, `{parent}` the words of
|
|
16181
|
+
the branch it moved into, or the tree's `label` for the top level,
|
|
16182
|
+
`{position}` its place there, counting from 1, and `{count}` the number of
|
|
16183
|
+
items there. */
|
|
16184
|
+
movedIntoLabel?: (HelixHeadlessTree["movedIntoLabel"]) | undefined;
|
|
16013
16185
|
/** What screen readers hear each time an item moves, in a `reorderable`
|
|
16014
16186
|
tree. `{name}` is the item's words, `{position}` its place among its
|
|
16015
16187
|
siblings, counting from 1, and `{count}` the number of siblings. */
|
|
@@ -17049,7 +17221,7 @@ export type CustomCssProperties = {
|
|
|
17049
17221
|
"--scroll-area-scroll-fraction"?: (string) | undefined;
|
|
17050
17222
|
/** 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
17223
|
"--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. */
|
|
17224
|
+
/** 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
17225
|
"--slider-at"?: (string) | undefined;
|
|
17054
17226
|
/** The value as a fraction of the range, 0 to 1. */
|
|
17055
17227
|
"--slider-fraction"?: (string) | undefined;
|
|
@@ -17095,13 +17267,13 @@ export type CustomCssProperties = {
|
|
|
17095
17267
|
// Note: Some tooling expects this augmentation under "@vue/runtime-core", while
|
|
17096
17268
|
// other docs/examples use "vue". We emit both for compatibility.
|
|
17097
17269
|
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. */
|
|
17270
|
+
/** 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
17271
|
"helix-headless-accordion-item": DefineCustomElement<
|
|
17100
17272
|
HelixHeadlessAccordionItem,
|
|
17101
17273
|
HelixHeadlessAccordionItemVueProps,
|
|
17102
17274
|
HelixHeadlessAccordionItemVueEvents
|
|
17103
17275
|
>;
|
|
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. */
|
|
17276
|
+
/** 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
17277
|
"helix-headless-accordion": DefineCustomElement<
|
|
17106
17278
|
HelixHeadlessAccordion,
|
|
17107
17279
|
HelixHeadlessAccordionVueProps,
|
|
@@ -17155,13 +17327,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17155
17327
|
HelixHeadlessBlockquoteVueProps,
|
|
17156
17328
|
HelixHeadlessBlockquoteVueEvents
|
|
17157
17329
|
>;
|
|
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'
|
|
17330
|
+
/** 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
17331
|
"helix-headless-breadcrumb": DefineCustomElement<
|
|
17160
17332
|
HelixHeadlessBreadcrumb,
|
|
17161
17333
|
HelixHeadlessBreadcrumbVueProps,
|
|
17162
17334
|
HelixHeadlessBreadcrumbVueEvents
|
|
17163
17335
|
>;
|
|
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
|
|
17336
|
+
/** 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
17337
|
"helix-headless-breadcrumbs": DefineCustomElement<
|
|
17166
17338
|
HelixHeadlessBreadcrumbs,
|
|
17167
17339
|
HelixHeadlessBreadcrumbsVueProps,
|
|
@@ -17257,13 +17429,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17257
17429
|
HelixHeadlessCodeVueProps,
|
|
17258
17430
|
HelixHeadlessCodeVueEvents
|
|
17259
17431
|
>;
|
|
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%)',
|
|
17432
|
+
/** 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
17433
|
"helix-headless-color-input": DefineCustomElement<
|
|
17262
17434
|
HelixHeadlessColorInput,
|
|
17263
17435
|
HelixHeadlessColorInputVueProps,
|
|
17264
17436
|
HelixHeadlessColorInputVueEvents
|
|
17265
17437
|
>;
|
|
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. */
|
|
17438
|
+
/** 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
17439
|
"helix-headless-color-picker": DefineCustomElement<
|
|
17268
17440
|
HelixHeadlessColorPicker,
|
|
17269
17441
|
HelixHeadlessColorPickerVueProps,
|
|
@@ -17587,7 +17759,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17587
17759
|
HelixHeadlessMeterVueProps,
|
|
17588
17760
|
HelixHeadlessMeterVueEvents
|
|
17589
17761
|
>;
|
|
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. */
|
|
17762
|
+
/** 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
17763
|
"helix-headless-navigation": DefineCustomElement<
|
|
17592
17764
|
HelixHeadlessNavigation,
|
|
17593
17765
|
HelixHeadlessNavigationVueProps,
|
|
@@ -17725,7 +17897,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17725
17897
|
HelixHeadlessScrollAreaVueProps,
|
|
17726
17898
|
HelixHeadlessScrollAreaVueEvents
|
|
17727
17899
|
>;
|
|
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. */
|
|
17900
|
+
/** 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
17901
|
"helix-headless-select": DefineCustomElement<
|
|
17730
17902
|
HelixHeadlessSelect,
|
|
17731
17903
|
HelixHeadlessSelectVueProps,
|
|
@@ -17743,7 +17915,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17743
17915
|
HelixHeadlessSkipLinkVueProps,
|
|
17744
17916
|
HelixHeadlessSkipLinkVueEvents
|
|
17745
17917
|
>;
|
|
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'. */
|
|
17918
|
+
/** 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
17919
|
"helix-headless-slider": DefineCustomElement<
|
|
17748
17920
|
HelixHeadlessSlider,
|
|
17749
17921
|
HelixHeadlessSliderVueProps,
|
|
@@ -17761,19 +17933,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17761
17933
|
HelixHeadlessSpeedDialGroupVueProps,
|
|
17762
17934
|
HelixHeadlessSpeedDialGroupVueEvents
|
|
17763
17935
|
>;
|
|
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. */
|
|
17936
|
+
/** 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
17937
|
"helix-headless-speed-dial-item": DefineCustomElement<
|
|
17766
17938
|
HelixHeadlessSpeedDialItem,
|
|
17767
17939
|
HelixHeadlessSpeedDialItemVueProps,
|
|
17768
17940
|
HelixHeadlessSpeedDialItemVueEvents
|
|
17769
17941
|
>;
|
|
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. */
|
|
17942
|
+
/** 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
17943
|
"helix-headless-speed-dial": DefineCustomElement<
|
|
17772
17944
|
HelixHeadlessSpeedDial,
|
|
17773
17945
|
HelixHeadlessSpeedDialVueProps,
|
|
17774
17946
|
HelixHeadlessSpeedDialVueEvents
|
|
17775
17947
|
>;
|
|
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. | */
|
|
17948
|
+
/** 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
17949
|
"helix-headless-splitter": DefineCustomElement<
|
|
17778
17950
|
HelixHeadlessSplitter,
|
|
17779
17951
|
HelixHeadlessSplitterVueProps,
|
|
@@ -17791,7 +17963,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17791
17963
|
HelixHeadlessStatVueProps,
|
|
17792
17964
|
HelixHeadlessStatVueEvents
|
|
17793
17965
|
>;
|
|
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'. */
|
|
17966
|
+
/** '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
17967
|
"helix-headless-steps": DefineCustomElement<
|
|
17796
17968
|
HelixHeadlessSteps,
|
|
17797
17969
|
HelixHeadlessStepsVueProps,
|
|
@@ -17839,19 +18011,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17839
18011
|
HelixHeadlessTabPanelVueProps,
|
|
17840
18012
|
HelixHeadlessTabPanelVueEvents
|
|
17841
18013
|
>;
|
|
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. */
|
|
18014
|
+
/** 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
18015
|
"helix-headless-tabs": DefineCustomElement<
|
|
17844
18016
|
HelixHeadlessTabs,
|
|
17845
18017
|
HelixHeadlessTabsVueProps,
|
|
17846
18018
|
HelixHeadlessTabsVueEvents
|
|
17847
18019
|
>;
|
|
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. */
|
|
18020
|
+
/** 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
18021
|
"helix-headless-tab": DefineCustomElement<
|
|
17850
18022
|
HelixHeadlessTab,
|
|
17851
18023
|
HelixHeadlessTabVueProps,
|
|
17852
18024
|
HelixHeadlessTabVueEvents
|
|
17853
18025
|
>;
|
|
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. */
|
|
18026
|
+
/** 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
18027
|
"helix-headless-tag-group": DefineCustomElement<
|
|
17856
18028
|
HelixHeadlessTagGroup,
|
|
17857
18029
|
HelixHeadlessTagGroupVueProps,
|
|
@@ -17953,7 +18125,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
17953
18125
|
HelixHeadlessTreeItemVueProps,
|
|
17954
18126
|
HelixHeadlessTreeItemVueEvents
|
|
17955
18127
|
>;
|
|
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.
|
|
18128
|
+
/** 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
18129
|
"helix-headless-tree": DefineCustomElement<
|
|
17958
18130
|
HelixHeadlessTree,
|
|
17959
18131
|
HelixHeadlessTreeVueProps,
|