@fusion.dev/helix-headless 0.143.0 → 0.144.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +8551 -375
- package/dist/area-chart/root/area-chart-root.d.ts +12 -4
- package/dist/area-chart/root/area-chart-root.js +24 -7
- package/dist/avatar/root/avatar-root.d.ts +14 -0
- package/dist/avatar/root/avatar-root.js +23 -9
- package/dist/badge/root/badge-root.d.ts +11 -7
- package/dist/badge/root/badge-root.js +1 -1
- package/dist/bar-chart/root/bar-chart-root.d.ts +12 -3
- package/dist/bar-chart/root/bar-chart-root.js +17 -10
- package/dist/button/root/button-root.d.ts +47 -1
- package/dist/button/root/button-root.js +38 -4
- package/dist/callout/root/callout-root.d.ts +18 -1
- package/dist/callout/root/callout-root.js +15 -4
- package/dist/card/root/card-root.d.ts +30 -1
- package/dist/card/root/card-root.js +38 -5
- package/dist/checkbox/root/checkbox-root.js +2 -0
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +53 -3
- package/dist/checkbox-group/root/checkbox-group-root.js +71 -22
- package/dist/code-block/lines.d.ts +13 -0
- package/dist/code-block/lines.js +2 -0
- package/dist/code-block/root/code-block-root.d.ts +30 -0
- package/dist/code-block/root/code-block-root.js +23 -2
- package/dist/color-input/root/color-input-root.d.ts +34 -1
- package/dist/color-input/root/color-input-root.js +23 -4
- package/dist/color-picker/channels.d.ts +26 -0
- package/dist/color-picker/channels.js +84 -0
- package/dist/color-picker/root/color-picker-root.d.ts +81 -5
- package/dist/color-picker/root/color-picker-root.js +103 -10
- package/dist/combobox/root/combobox-root.d.ts +38 -3
- package/dist/combobox/root/combobox-root.js +64 -2
- package/dist/command/root/command-root.d.ts +30 -4
- package/dist/command/root/command-root.js +33 -3
- package/dist/copy-button/from.d.ts +22 -0
- package/dist/copy-button/from.js +28 -0
- package/dist/copy-button/root/copy-button-root.d.ts +27 -1
- package/dist/copy-button/root/copy-button-root.js +43 -7
- package/dist/date-input/root/date-input-root.d.ts +73 -4
- package/dist/date-input/root/date-input-root.js +93 -43
- package/dist/date-picker/root/date-picker-root.d.ts +145 -1
- package/dist/date-picker/root/date-picker-root.js +239 -48
- package/dist/dialog/description.d.ts +9 -0
- package/dist/dialog/description.js +14 -0
- package/dist/dialog/root/dialog-root.d.ts +64 -1
- package/dist/dialog/root/dialog-root.js +49 -23
- package/dist/donut-chart/root/donut-chart-root.d.ts +25 -4
- package/dist/donut-chart/root/donut-chart-root.js +21 -6
- package/dist/drawer/root/drawer-root.d.ts +63 -2
- package/dist/drawer/root/drawer-root.js +95 -19
- package/dist/drawer/swipe-start.d.ts +9 -0
- package/dist/drawer/swipe-start.js +12 -0
- package/dist/element-events.generated.js +8 -5
- package/dist/empty/root/empty-root.d.ts +1 -1
- package/dist/file-input/root/file-input-root.d.ts +47 -0
- package/dist/file-input/root/file-input-root.js +60 -22
- package/dist/file-input/screen.d.ts +35 -0
- package/dist/file-input/screen.js +49 -0
- package/dist/filter-input/root/filter-input-root.d.ts +38 -4
- package/dist/filter-input/root/filter-input-root.js +67 -3
- package/dist/filter-input/suggest.d.ts +17 -0
- package/dist/filter-input/suggest.js +23 -0
- package/dist/format-date/options.d.ts +33 -0
- package/dist/format-date/options.js +42 -0
- package/dist/format-date/root/format-date-root.d.ts +51 -0
- package/dist/format-date/root/format-date-root.js +58 -38
- package/dist/heatmap/root/heatmap-root.d.ts +23 -6
- package/dist/heatmap/root/heatmap-root.js +24 -13
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +2 -0
- package/dist/icon/registry.d.ts +37 -0
- package/dist/icon/registry.js +83 -0
- package/dist/icon/root/icon-root.d.ts +30 -4
- package/dist/icon/root/icon-root.js +41 -6
- package/dist/icon/root/index.d.ts +2 -0
- package/dist/icon/root/index.js +2 -0
- package/dist/icon/set.d.ts +1 -0
- package/dist/icon/set.js +3 -0
- package/dist/image/root/image-root.d.ts +14 -0
- package/dist/image/root/image-root.js +15 -2
- package/dist/input/root/input-root.d.ts +11 -0
- package/dist/input/root/input-root.js +15 -0
- package/dist/kbd/root/kbd-root.d.ts +20 -13
- package/dist/kbd/root/kbd-root.js +35 -37
- package/dist/kbd/shortcut.d.ts +18 -0
- package/dist/kbd/shortcut.js +35 -0
- package/dist/legend/hidden-series.d.ts +8 -0
- package/dist/legend/hidden-series.js +13 -0
- package/dist/legend/root/legend-root.d.ts +56 -0
- package/dist/legend/root/legend-root.js +54 -5
- package/dist/lightbox/item/lightbox-item.d.ts +15 -0
- package/dist/lightbox/item/lightbox-item.js +10 -1
- package/dist/lightbox/root/lightbox-root.d.ts +61 -1
- package/dist/lightbox/root/lightbox-root.js +94 -4
- package/dist/line-chart/root/line-chart-root.d.ts +11 -3
- package/dist/line-chart/root/line-chart-root.js +19 -5
- package/dist/listbox/range.d.ts +17 -0
- package/dist/listbox/range.js +5 -0
- package/dist/listbox/root/listbox-root.d.ts +74 -3
- package/dist/listbox/root/listbox-root.js +87 -9
- package/dist/loader/busy.d.ts +17 -0
- package/dist/loader/busy.js +24 -0
- package/dist/loader/root/loader-root.d.ts +37 -0
- package/dist/loader/root/loader-root.js +52 -3
- package/dist/meter/root/meter-root.d.ts +7 -0
- package/dist/meter/root/meter-root.js +6 -3
- package/dist/notifications/feed-keys.d.ts +10 -0
- package/dist/notifications/feed-keys.js +14 -0
- package/dist/notifications/notification/notification.d.ts +17 -0
- package/dist/notifications/notification/notification.js +21 -2
- package/dist/notifications/root/notifications-root.d.ts +42 -0
- package/dist/notifications/root/notifications-root.js +60 -1
- package/dist/number-input/root/number-input-root.d.ts +47 -0
- package/dist/number-input/root/number-input-root.js +58 -22
- package/dist/object-inspector/root/object-inspector-root.d.ts +1 -0
- package/dist/object-inspector/root/object-inspector-root.js +1 -1
- package/dist/option/root/option-root.d.ts +54 -5
- package/dist/option/root/option-root.js +34 -5
- package/dist/pin-input/format.d.ts +7 -0
- package/dist/pin-input/format.js +16 -0
- package/dist/pin-input/root/pin-input-root.d.ts +21 -0
- package/dist/pin-input/root/pin-input-root.js +29 -2
- package/dist/popover/root/popover-root.d.ts +62 -4
- package/dist/popover/root/popover-root.js +53 -5
- package/dist/progress/root/progress-root.d.ts +7 -0
- package/dist/progress/root/progress-root.js +9 -3
- package/dist/qr-code/export.d.ts +31 -0
- package/dist/qr-code/export.js +10 -0
- package/dist/qr-code/root/qr-code-root.d.ts +26 -0
- package/dist/qr-code/root/qr-code-root.js +49 -2
- package/dist/radio/group/radio-group.d.ts +23 -0
- package/dist/radio/group/radio-group.js +18 -0
- package/dist/rating/root/rating-root.d.ts +25 -0
- package/dist/rating/root/rating-root.js +45 -3
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +17 -3
- package/dist/scatter-chart/root/scatter-chart-root.js +25 -7
- package/dist/select/root/select-root.d.ts +24 -0
- package/dist/select/root/select-root.js +20 -6
- package/dist/skeleton/root/skeleton-root.d.ts +25 -0
- package/dist/skeleton/root/skeleton-root.js +17 -2
- package/dist/slider/root/slider-root.d.ts +39 -0
- package/dist/slider/root/slider-root.js +45 -9
- package/dist/stat/root/stat-root.d.ts +2 -0
- package/dist/stat/root/stat-root.js +1 -1
- package/dist/steps/step/step.d.ts +1 -0
- package/dist/steps/step/step.js +1 -1
- package/dist/switch/root/switch-root.d.ts +12 -2
- package/dist/switch/root/switch-root.js +6 -1
- package/dist/tag/group/tag-group.d.ts +107 -0
- package/dist/tag/group/tag-group.js +157 -0
- package/dist/tag/index.d.ts +1 -0
- package/dist/tag/index.js +1 -0
- package/dist/tag/root/tag-root.d.ts +60 -0
- package/dist/tag/root/tag-root.js +74 -18
- package/dist/tag/selection.d.ts +10 -0
- package/dist/tag/selection.js +12 -0
- package/dist/textarea/grow.d.ts +22 -0
- package/dist/textarea/grow.js +20 -0
- package/dist/textarea/root/textarea-root.d.ts +9 -0
- package/dist/textarea/root/textarea-root.js +9 -1
- package/dist/time-input/root/time-input-root.d.ts +44 -5
- package/dist/time-input/root/time-input-root.js +69 -39
- package/dist/time-picker/root/time-picker-root.d.ts +54 -8
- package/dist/time-picker/root/time-picker-root.js +121 -91
- package/dist/toast/hotkey.d.ts +22 -0
- package/dist/toast/hotkey.js +23 -0
- package/dist/toast/item/toast-item.d.ts +16 -1
- package/dist/toast/item/toast-item.js +41 -13
- package/dist/toast/root/toast-root.d.ts +42 -8
- package/dist/toast/root/toast-root.js +64 -4
- package/dist/toggle/group/toggle-group.d.ts +57 -15
- package/dist/toggle/group/toggle-group.js +69 -9
- package/dist/toggle/root/toggle-root.d.ts +12 -1
- package/dist/toggle/root/toggle-root.js +11 -3
- package/dist/tooltip/focus-target.d.ts +6 -0
- package/dist/tooltip/focus-target.js +9 -0
- package/dist/tooltip/root/tooltip-root.d.ts +42 -17
- package/dist/tooltip/root/tooltip-root.js +50 -9
- package/dist/tour/naming.d.ts +30 -0
- package/dist/tour/naming.js +10 -0
- package/dist/tour/root/tour-root.d.ts +35 -0
- package/dist/tour/root/tour-root.js +56 -5
- package/dist/tour/stop/tour-stop.d.ts +53 -8
- package/dist/tour/stop/tour-stop.js +45 -15
- package/dist/tour/wait.d.ts +11 -0
- package/dist/tour/wait.js +19 -0
- package/dist/trend/root/trend-root.d.ts +13 -0
- package/dist/trend/root/trend-root.js +14 -9
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +4862 -254
- package/types/svelte.d.ts +1 -0
- package/types/vue.d.ts +1149 -67
package/types/vue.d.ts
CHANGED
|
@@ -141,6 +141,7 @@ import type {
|
|
|
141
141
|
HelixHeadlessTabPanel,
|
|
142
142
|
HelixHeadlessTabs,
|
|
143
143
|
HelixHeadlessTab,
|
|
144
|
+
HelixHeadlessTagGroup,
|
|
144
145
|
HelixHeadlessTag,
|
|
145
146
|
HelixHeadlessTextarea,
|
|
146
147
|
HelixHeadlessTimeInput,
|
|
@@ -200,6 +201,7 @@ import type {
|
|
|
200
201
|
HelixSelectedEvent,
|
|
201
202
|
HelixSortEvent,
|
|
202
203
|
HelixSortedEvent,
|
|
204
|
+
HelixRejectEvent,
|
|
203
205
|
HelixFacetEvent,
|
|
204
206
|
HelixBeforeActivateEvent,
|
|
205
207
|
HelixGraphFilterEvent,
|
|
@@ -590,6 +592,24 @@ export type HelixHeadlessAvatarElementEvent<E = Event> = TypedEvent<
|
|
|
590
592
|
>;
|
|
591
593
|
|
|
592
594
|
export type HelixHeadlessAvatarVueProps = {
|
|
595
|
+
/** How long, in milliseconds, a picture may take before the initials stand
|
|
596
|
+
in for it while it loads.
|
|
597
|
+
|
|
598
|
+
Absent keeps the picture's place empty until it arrives or fails. Set,
|
|
599
|
+
the initials show once the wait is over and the picture
|
|
600
|
+
replaces them when it arrives, so a slow connection shows who it is
|
|
601
|
+
without a cached picture flashing initials first. Radix's `delayMs` is the
|
|
602
|
+
same idea. */
|
|
603
|
+
"fallback-delay"?: (HelixHeadlessAvatar["fallbackDelay"] | `${number}`) | undefined;
|
|
604
|
+
/** How long, in milliseconds, a picture may take before the initials stand
|
|
605
|
+
in for it while it loads.
|
|
606
|
+
|
|
607
|
+
Absent keeps the picture's place empty until it arrives or fails. Set,
|
|
608
|
+
the initials show once the wait is over and the picture
|
|
609
|
+
replaces them when it arrives, so a slow connection shows who it is
|
|
610
|
+
without a cached picture flashing initials first. Radix's `delayMs` is the
|
|
611
|
+
same idea. */
|
|
612
|
+
fallbackDelay?: (HelixHeadlessAvatar["fallbackDelay"]) | undefined;
|
|
593
613
|
/** Name of the person or entity.
|
|
594
614
|
|
|
595
615
|
Used for the label and the initials. */
|
|
@@ -908,6 +928,22 @@ Lives here rather than only on `IconButton` so the two share one render.
|
|
|
908
928
|
An icon-only button without it is a control a screen reader announces as
|
|
909
929
|
"button" and nothing else. */
|
|
910
930
|
label?: (HelixHeadlessButton["label"]) | undefined;
|
|
931
|
+
/** Whether the action the button started is still running.
|
|
932
|
+
|
|
933
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
934
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
935
|
+
click does not reach your listeners. The inner control carries
|
|
936
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
937
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
938
|
+
turning ring over its words.
|
|
939
|
+
|
|
940
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
941
|
+
a press, so focus stays where the reader left it. */
|
|
942
|
+
pending?: (HelixHeadlessButton["pending"]) | undefined;
|
|
943
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
944
|
+
"pending-label"?: (HelixHeadlessButton["pendingLabel"]) | undefined;
|
|
945
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
946
|
+
pendingLabel?: (HelixHeadlessButton["pendingLabel"]) | undefined;
|
|
911
947
|
/** What activating the button does to its form. */
|
|
912
948
|
type?: (HelixHeadlessButton["type"]) | undefined;
|
|
913
949
|
/** The value this button submits under its own `name`, as a native submit
|
|
@@ -1007,6 +1043,15 @@ invoker without an id in the same tree needs. */
|
|
|
1007
1043
|
|
|
1008
1044
|
export type HelixHeadlessButtonVueEvents = {};
|
|
1009
1045
|
|
|
1046
|
+
/** `HelixHeadlessCallout` component event */
|
|
1047
|
+
export type HelixHeadlessCalloutElementEvent<E = Event> = TypedEvent<
|
|
1048
|
+
HelixHeadlessCallout,
|
|
1049
|
+
E
|
|
1050
|
+
>;
|
|
1051
|
+
/** `helix-dismiss` event type */
|
|
1052
|
+
export type HelixHeadlessCalloutHelixDismissElementEvent =
|
|
1053
|
+
HelixHeadlessCalloutElementEvent<HelixDismissEvent>;
|
|
1054
|
+
|
|
1010
1055
|
export type HelixHeadlessCalloutVueProps = {
|
|
1011
1056
|
/** What kind of attention the passage needs.
|
|
1012
1057
|
|
|
@@ -1025,9 +1070,28 @@ Absent is the English for the tone: "Error", "Information", "Note",
|
|
|
1025
1070
|
Absent is the English for the tone: "Error", "Information", "Note",
|
|
1026
1071
|
"Success" or "Warning". */
|
|
1027
1072
|
toneLabel?: (HelixHeadlessCallout["toneLabel"]) | undefined;
|
|
1073
|
+
/** Whether the element shows a control that dismisses it. */
|
|
1074
|
+
dismissible?: (HelixHeadlessCallout["dismissible"]) | undefined;
|
|
1075
|
+
/** The dismiss control's label, read by screen readers.
|
|
1076
|
+
|
|
1077
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
1078
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
1079
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
1080
|
+
would catch. */
|
|
1081
|
+
"dismiss-label"?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
|
|
1082
|
+
/** The dismiss control's label, read by screen readers.
|
|
1083
|
+
|
|
1084
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
1085
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
1086
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
1087
|
+
would catch. */
|
|
1088
|
+
dismissLabel?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
|
|
1028
1089
|
};
|
|
1029
1090
|
|
|
1030
|
-
export type HelixHeadlessCalloutVueEvents = {
|
|
1091
|
+
export type HelixHeadlessCalloutVueEvents = {
|
|
1092
|
+
/** The dismiss button was pressed. The callout does not remove itself, so remove it in response. Cancelable. */
|
|
1093
|
+
"helix-dismiss": HelixHeadlessCalloutHelixDismissElementEvent;
|
|
1094
|
+
};
|
|
1031
1095
|
|
|
1032
1096
|
export type HelixHeadlessCanvasEdgeVueProps = {
|
|
1033
1097
|
/** The name of the card the connection starts from. */
|
|
@@ -1593,6 +1657,10 @@ twice what this says once.
|
|
|
1593
1657
|
Reflected and undefaulted, so a card that has not asked reads as a card
|
|
1594
1658
|
with no attribute on it and the stylesheet only describes the departure. */
|
|
1595
1659
|
mediaPlacement?: (HelixHeadlessCard["mediaPlacement"]) | undefined;
|
|
1660
|
+
/** */
|
|
1661
|
+
"aria-labelledby"?: unknown;
|
|
1662
|
+
/** */
|
|
1663
|
+
"aria-label"?: unknown;
|
|
1596
1664
|
};
|
|
1597
1665
|
|
|
1598
1666
|
export type HelixHeadlessCardVueEvents = {};
|
|
@@ -2066,10 +2134,19 @@ export type HelixHeadlessCheckboxGroupHelixBeforeChangeElementEvent =
|
|
|
2066
2134
|
HelixHeadlessCheckboxGroupElementEvent<HelixBeforeChangeEvent>;
|
|
2067
2135
|
|
|
2068
2136
|
export type HelixHeadlessCheckboxGroupVueProps = {
|
|
2137
|
+
/** Whether a box above the set checks or unchecks every enabled box. */
|
|
2138
|
+
"select-all"?: (HelixHeadlessCheckboxGroup["selectAll"]) | undefined;
|
|
2139
|
+
/** Whether a box above the set checks or unchecks every enabled box. */
|
|
2140
|
+
selectAll?: (HelixHeadlessCheckboxGroup["selectAll"]) | undefined;
|
|
2141
|
+
/** The words beside the box `select-all` draws. */
|
|
2142
|
+
"select-all-label"?: (HelixHeadlessCheckboxGroup["selectAllLabel"]) | undefined;
|
|
2143
|
+
/** The words beside the box `select-all` draws. */
|
|
2144
|
+
selectAllLabel?: (HelixHeadlessCheckboxGroup["selectAllLabel"]) | undefined;
|
|
2069
2145
|
/** The checked values, comma separated.
|
|
2070
2146
|
|
|
2071
2147
|
Read from the boxes once they are known, so a box a script ticks directly
|
|
2072
|
-
is in it at once. Written, it is pushed onto the boxes.
|
|
2148
|
+
is in it at once. Written, it is pushed onto the boxes. A box whose value
|
|
2149
|
+
holds a comma cannot be named here: use `values`. */
|
|
2073
2150
|
value?: (HelixHeadlessCheckboxGroup["value"]) | undefined;
|
|
2074
2151
|
/** */
|
|
2075
2152
|
"aria-label"?: unknown;
|
|
@@ -2127,6 +2204,11 @@ imperatively later, and nothing is hydrating by then.
|
|
|
2127
2204
|
|
|
2128
2205
|
Here rather than on each control. */
|
|
2129
2206
|
name?: (HelixHeadlessCheckboxGroup["name"]) | undefined;
|
|
2207
|
+
/** The checked values, as a list, in the order the boxes are written.
|
|
2208
|
+
|
|
2209
|
+
The same set as `value`, and the one to use where a value may hold a
|
|
2210
|
+
comma. Written, it checks exactly those boxes and unchecks the rest. */
|
|
2211
|
+
values?: (HelixHeadlessCheckboxGroup["values"]) | undefined;
|
|
2130
2212
|
};
|
|
2131
2213
|
|
|
2132
2214
|
export type HelixHeadlessCheckboxGroupVueEvents = {
|
|
@@ -2171,6 +2253,28 @@ stylesheets. */
|
|
|
2171
2253
|
"default-checked"?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2172
2254
|
/** Whether the control starts checked. A form reset returns it to this state. */
|
|
2173
2255
|
defaultChecked?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2256
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
2257
|
+
read-only control still submits its value.
|
|
2258
|
+
|
|
2259
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
2260
|
+
the press is refused at the inner control, which keeps its box as it
|
|
2261
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
2262
|
+
`checked`, as it can set the value of a read-only text field.
|
|
2263
|
+
|
|
2264
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
2265
|
+
text fields. */
|
|
2266
|
+
readonly?: (HelixHeadlessCheckbox["readOnly"]) | undefined;
|
|
2267
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
2268
|
+
read-only control still submits its value.
|
|
2269
|
+
|
|
2270
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
2271
|
+
the press is refused at the inner control, which keeps its box as it
|
|
2272
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
2273
|
+
`checked`, as it can set the value of a read-only text field.
|
|
2274
|
+
|
|
2275
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
2276
|
+
text fields. */
|
|
2277
|
+
readOnly?: (HelixHeadlessCheckbox["readOnly"]) | undefined;
|
|
2174
2278
|
/** */
|
|
2175
2279
|
"aria-label"?: unknown;
|
|
2176
2280
|
/** The validation message shown under the control. It replaces the
|
|
@@ -2257,6 +2361,20 @@ Reflected, because the stylesheet paints a diff differently from code, and
|
|
|
2257
2361
|
In a diff, each file is named from the patch, and this names a patch that
|
|
2258
2362
|
carries no name of its own. */
|
|
2259
2363
|
label?: (HelixHeadlessCodeBlock["label"]) | undefined;
|
|
2364
|
+
/** Whether the lines are numbered in a gutter beside the code.
|
|
2365
|
+
|
|
2366
|
+
The numbers are hidden from the accessibility tree and are not part of a
|
|
2367
|
+
copy, which takes the code alone. Reflected, because the stylesheet lays
|
|
2368
|
+
the gutter out beside the code. A diff numbers its lines from its hunks
|
|
2369
|
+
whether or not this is set. */
|
|
2370
|
+
"line-numbers"?: (HelixHeadlessCodeBlock["lineNumbers"]) | undefined;
|
|
2371
|
+
/** Whether the lines are numbered in a gutter beside the code.
|
|
2372
|
+
|
|
2373
|
+
The numbers are hidden from the accessibility tree and are not part of a
|
|
2374
|
+
copy, which takes the code alone. Reflected, because the stylesheet lays
|
|
2375
|
+
the gutter out beside the code. A diff numbers its lines from its hunks
|
|
2376
|
+
whether or not this is set. */
|
|
2377
|
+
lineNumbers?: (HelixHeadlessCodeBlock["lineNumbers"]) | undefined;
|
|
2260
2378
|
/** Whether to leave the copy button off.
|
|
2261
2379
|
|
|
2262
2380
|
Negative, which is not a style choice. A boolean attribute is true whenever
|
|
@@ -2303,6 +2421,17 @@ Absent is unified, each removal above its replacement, which fits any
|
|
|
2303
2421
|
width. `split` sets the old version beside the new one. Optional rather
|
|
2304
2422
|
than defaulted, so the host carries no attribute the consumer did not write. */
|
|
2305
2423
|
variant?: (HelixHeadlessCodeBlock["variant"]) | undefined;
|
|
2424
|
+
/** Turns the code into highlighted markup, which the block draws in place of
|
|
2425
|
+
the plain text.
|
|
2426
|
+
|
|
2427
|
+
Called with the code as written and returning HTML, such as the output of
|
|
2428
|
+
Shiki's `codeToHtml` or Prism's `highlight`. **The markup is drawn as
|
|
2429
|
+
given**, so it has to escape the code it was handed, which those
|
|
2430
|
+
highlighters do. Bind the language in the function you pass. The code
|
|
2431
|
+
stays in the slot, so the copy button copies it as written and a reader
|
|
2432
|
+
without the script still has it. Not called on a server, which has no code
|
|
2433
|
+
to read, nor for a diff. */
|
|
2434
|
+
highlight?: (HelixHeadlessCodeBlock["highlight"]) | undefined;
|
|
2306
2435
|
};
|
|
2307
2436
|
|
|
2308
2437
|
export type HelixHeadlessCodeBlockVueEvents = {};
|
|
@@ -2339,6 +2468,26 @@ point.** The field holds a color, so a browser offering to fill it with a
|
|
|
2339
2468
|
saved address is competing for the same keystrokes as the picker. A
|
|
2340
2469
|
consumer who wants autofill can still ask. */
|
|
2341
2470
|
autocomplete?: (HelixHeadlessColorInput["autocomplete"]) | undefined;
|
|
2471
|
+
/** Whether the panel shows a number field for each channel of the color.
|
|
2472
|
+
Passed to the panel; see Color Picker's `channel-fields`. */
|
|
2473
|
+
"channel-fields"?: (HelixHeadlessColorInput["channelFields"]) | undefined;
|
|
2474
|
+
/** Whether the panel shows a number field for each channel of the color.
|
|
2475
|
+
Passed to the panel; see Color Picker's `channel-fields`. */
|
|
2476
|
+
channelFields?: (HelixHeadlessColorInput["channelFields"]) | undefined;
|
|
2477
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2478
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2479
|
+
|
|
2480
|
+
Passed to the panel, whose square, hue ramp and presets say the color's
|
|
2481
|
+
name, and read by the swatch in `swatch`, which says it before the value.
|
|
2482
|
+
Color Picker lists the keys. */
|
|
2483
|
+
"color-words"?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
2484
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2485
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2486
|
+
|
|
2487
|
+
Passed to the panel, whose square, hue ramp and presets say the color's
|
|
2488
|
+
name, and read by the swatch in `swatch`, which says it before the value.
|
|
2489
|
+
Color Picker lists the keys. */
|
|
2490
|
+
colorWords?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
2342
2491
|
/** The syntax the value is written in: `hex`, `rgb`, or `hsl`.
|
|
2343
2492
|
|
|
2344
2493
|
**Undefaulted, because it reflects.** The two together stamp an attribute
|
|
@@ -2539,6 +2688,10 @@ ramps. A consumer who wants autofill can still ask. */
|
|
|
2539
2688
|
"bad-input-message"?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
|
|
2540
2689
|
/** The message shown when the value is text that is not a color. */
|
|
2541
2690
|
badInputMessage?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
|
|
2691
|
+
/** What the blue channel's field is called, in `channel-fields`. */
|
|
2692
|
+
"blue-label"?: (HelixHeadlessColorPicker["blueLabel"]) | undefined;
|
|
2693
|
+
/** What the blue channel's field is called, in `channel-fields`. */
|
|
2694
|
+
blueLabel?: (HelixHeadlessColorPicker["blueLabel"]) | undefined;
|
|
2542
2695
|
/** What the square's vertical ramp is called.
|
|
2543
2696
|
|
|
2544
2697
|
**Every word the picker speaks is a property**, so a page in another
|
|
@@ -2549,6 +2702,50 @@ language hears its own rather than English between its own labels. */
|
|
|
2549
2702
|
**Every word the picker speaks is a property**, so a page in another
|
|
2550
2703
|
language hears its own rather than English between its own labels. */
|
|
2551
2704
|
brightnessLabel?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
|
|
2705
|
+
/** Whether the picker shows a number field for each channel of the color, as
|
|
2706
|
+
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
2707
|
+
and rgb, hue, saturation and lightness for hsl, and the opacity with
|
|
2708
|
+
`alpha`.
|
|
2709
|
+
|
|
2710
|
+
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
2711
|
+
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
2712
|
+
the syntax the format toggle sets. */
|
|
2713
|
+
"channel-fields"?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
2714
|
+
/** Whether the picker shows a number field for each channel of the color, as
|
|
2715
|
+
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
2716
|
+
and rgb, hue, saturation and lightness for hsl, and the opacity with
|
|
2717
|
+
`alpha`.
|
|
2718
|
+
|
|
2719
|
+
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
2720
|
+
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
2721
|
+
the syntax the format toggle sets. */
|
|
2722
|
+
channelFields?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
2723
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2724
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2725
|
+
|
|
2726
|
+
**A color is named the way React Aria names one**, as "vibrant red" or
|
|
2727
|
+
"dark grayish blue", and the keys are the ones `@react-stately/color`
|
|
2728
|
+
translates, so a table a page already has for it can be handed over whole.
|
|
2729
|
+
`colorName` and `transparentColorName` are the two sentences that put the
|
|
2730
|
+
words together. A word left out is spoken in English.
|
|
2731
|
+
|
|
2732
|
+
The name follows the numbers on the square, follows the number on the hue
|
|
2733
|
+
ramp, and names each preset, so a reader who cannot see the color hears
|
|
2734
|
+
which one it is. */
|
|
2735
|
+
"color-words"?: (HelixHeadlessColorPicker["colorWords"]) | undefined;
|
|
2736
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2737
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2738
|
+
|
|
2739
|
+
**A color is named the way React Aria names one**, as "vibrant red" or
|
|
2740
|
+
"dark grayish blue", and the keys are the ones `@react-stately/color`
|
|
2741
|
+
translates, so a table a page already has for it can be handed over whole.
|
|
2742
|
+
`colorName` and `transparentColorName` are the two sentences that put the
|
|
2743
|
+
words together. A word left out is spoken in English.
|
|
2744
|
+
|
|
2745
|
+
The name follows the numbers on the square, follows the number on the hue
|
|
2746
|
+
ramp, and names each preset, so a reader who cannot see the color hears
|
|
2747
|
+
which one it is. */
|
|
2748
|
+
colorWords?: (HelixHeadlessColorPicker["colorWords"]) | undefined;
|
|
2552
2749
|
/** The text the sample shows for a moment after it copies the value. */
|
|
2553
2750
|
"copied-label"?: (HelixHeadlessColorPicker["copiedLabel"]) | undefined;
|
|
2554
2751
|
/** The text the sample shows for a moment after it copies the value. */
|
|
@@ -2572,6 +2769,10 @@ Only what is written. Everything is read whatever this says, so a picker on
|
|
|
2572
2769
|
"format-label"?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
2573
2770
|
/** What the syntax toggle is called, with `{format}` filled in. */
|
|
2574
2771
|
formatLabel?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
2772
|
+
/** What the green channel's field is called, in `channel-fields`. */
|
|
2773
|
+
"green-label"?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
2774
|
+
/** What the green channel's field is called, in `channel-fields`. */
|
|
2775
|
+
greenLabel?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
2575
2776
|
/** What the hue channel is called. */
|
|
2576
2777
|
"hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
2577
2778
|
/** What the hue channel is called. */
|
|
@@ -2584,6 +2785,12 @@ the label, the hint and the feedback, and a second message inside the panel
|
|
|
2584
2785
|
would be the same error said twice. What is left for the picker is the one
|
|
2585
2786
|
thing the field cannot draw from outside, the mark on the answer itself. */
|
|
2586
2787
|
invalid?: (HelixHeadlessColorPicker["invalid"]) | undefined;
|
|
2788
|
+
/** What the lightness channel's field is called, in `channel-fields` with
|
|
2789
|
+
hsl. */
|
|
2790
|
+
"lightness-label"?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
2791
|
+
/** What the lightness channel's field is called, in `channel-fields` with
|
|
2792
|
+
hsl. */
|
|
2793
|
+
lightnessLabel?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
2587
2794
|
/** Hides the eyedropper. Without it, the eyedropper appears in browsers that
|
|
2588
2795
|
support one. */
|
|
2589
2796
|
"no-eyedropper"?: (HelixHeadlessColorPicker["noEyedropper"]) | undefined;
|
|
@@ -2680,6 +2887,10 @@ letting it move would show `rgb` over a hex it is no longer allowed to
|
|
|
2680
2887
|
restate. The eyedropper clears the screen and runs a system sampler, so
|
|
2681
2888
|
letting it open would take a color from the reader and drop it. */
|
|
2682
2889
|
readOnly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
|
|
2890
|
+
/** What the red channel's field is called, in `channel-fields`. */
|
|
2891
|
+
"red-label"?: (HelixHeadlessColorPicker["redLabel"]) | undefined;
|
|
2892
|
+
/** What the red channel's field is called, in `channel-fields`. */
|
|
2893
|
+
redLabel?: (HelixHeadlessColorPicker["redLabel"]) | undefined;
|
|
2683
2894
|
/** Requires a color before the form can submit.
|
|
2684
2895
|
|
|
2685
2896
|
**A color is exactly as requirable as a date**, which is the comparison
|
|
@@ -2806,6 +3017,24 @@ export type HelixHeadlessComboboxToggleElementEvent =
|
|
|
2806
3017
|
HelixHeadlessComboboxElementEvent<ToggleEvent>;
|
|
2807
3018
|
|
|
2808
3019
|
export type HelixHeadlessComboboxVueProps = {
|
|
3020
|
+
/** Whether text that names no option is taken as the value, as React Aria's
|
|
3021
|
+
`allowsCustomValue`.
|
|
3022
|
+
|
|
3023
|
+
For a field where the list is a help and not the whole of the answer, a
|
|
3024
|
+
city or a job title. What was typed becomes the value when the reader
|
|
3025
|
+
leaves the field or presses Enter with nothing highlighted, and text that
|
|
3026
|
+
names an option takes that option. Unlike `creatable`, no event asks
|
|
3027
|
+
first and no option is expected to be added: the value is the text. */
|
|
3028
|
+
"allows-custom-value"?: (HelixHeadlessCombobox["allowsCustomValue"]) | undefined;
|
|
3029
|
+
/** Whether text that names no option is taken as the value, as React Aria's
|
|
3030
|
+
`allowsCustomValue`.
|
|
3031
|
+
|
|
3032
|
+
For a field where the list is a help and not the whole of the answer, a
|
|
3033
|
+
city or a job title. What was typed becomes the value when the reader
|
|
3034
|
+
leaves the field or presses Enter with nothing highlighted, and text that
|
|
3035
|
+
names an option takes that option. Unlike `creatable`, no event asks
|
|
3036
|
+
first and no option is expected to be added: the value is the text. */
|
|
3037
|
+
allowsCustomValue?: (HelixHeadlessCombobox["allowsCustomValue"]) | undefined;
|
|
2809
3038
|
/** What the browser may autofill in the text field, as a platform token.
|
|
2810
3039
|
|
|
2811
3040
|
**Defaults to `off`, which is not the platform's default and is the
|
|
@@ -2884,6 +3113,20 @@ filled in.
|
|
|
2884
3113
|
**The name goes in**, so a row of them is heard as which one each
|
|
2885
3114
|
removes rather than as "Remove" said once per chosen option. */
|
|
2886
3115
|
removeLabel?: (HelixHeadlessCombobox["removeLabel"]) | undefined;
|
|
3116
|
+
/** What a screen reader hears when typing leaves one option. `{count}` is
|
|
3117
|
+
the count. */
|
|
3118
|
+
"result-label"?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
|
|
3119
|
+
/** What a screen reader hears when typing leaves one option. `{count}` is
|
|
3120
|
+
the count. */
|
|
3121
|
+
resultLabel?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
|
|
3122
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3123
|
+
options. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3124
|
+
two. */
|
|
3125
|
+
"results-label"?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
|
|
3126
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3127
|
+
options. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3128
|
+
two. */
|
|
3129
|
+
resultsLabel?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
|
|
2887
3130
|
/** Whether the field completes the word as the user types.
|
|
2888
3131
|
|
|
2889
3132
|
`suggest` rather than `autocomplete`, which is a real HTML attribute this
|
|
@@ -3045,6 +3288,14 @@ export type HelixHeadlessCommandVueProps = {
|
|
|
3045
3288
|
"empty-text"?: (HelixHeadlessCommand["emptyText"]) | undefined;
|
|
3046
3289
|
/** The text shown when the filter matches no commands. */
|
|
3047
3290
|
emptyText?: (HelixHeadlessCommand["emptyText"]) | undefined;
|
|
3291
|
+
/** How long typing rests before the commands are filtered, in milliseconds,
|
|
3292
|
+
so a palette filtered on a server sends one `helix-filter` for a word.
|
|
3293
|
+
`0` filters on every keystroke. See Listbox's `filter-delay`. */
|
|
3294
|
+
"filter-delay"?: (HelixHeadlessCommand["filterDelay"] | `${number}`) | undefined;
|
|
3295
|
+
/** How long typing rests before the commands are filtered, in milliseconds,
|
|
3296
|
+
so a palette filtered on a server sends one `helix-filter` for a word.
|
|
3297
|
+
`0` filters on every keystroke. See Listbox's `filter-delay`. */
|
|
3298
|
+
filterDelay?: (HelixHeadlessCommand["filterDelay"]) | undefined;
|
|
3048
3299
|
/** The key that opens the palette, written as `mod+k`, `shift+p`, or `k`.
|
|
3049
3300
|
|
|
3050
3301
|
Empty turns it off, for a consumer who opens the palette from a button or
|
|
@@ -3064,6 +3315,20 @@ Passed to the list, which shows `loading-text` and tells screen readers. */
|
|
|
3064
3315
|
loadingText?: (HelixHeadlessCommand["loadingText"]) | undefined;
|
|
3065
3316
|
/** The text shown in the filter field before anything is typed. */
|
|
3066
3317
|
placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
|
|
3318
|
+
/** What a screen reader hears when typing leaves one command. `{count}` is
|
|
3319
|
+
the count. */
|
|
3320
|
+
"result-label"?: (HelixHeadlessCommand["resultLabel"]) | undefined;
|
|
3321
|
+
/** What a screen reader hears when typing leaves one command. `{count}` is
|
|
3322
|
+
the count. */
|
|
3323
|
+
resultLabel?: (HelixHeadlessCommand["resultLabel"]) | undefined;
|
|
3324
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3325
|
+
commands. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3326
|
+
two. */
|
|
3327
|
+
"results-label"?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
|
|
3328
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3329
|
+
commands. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3330
|
+
two. */
|
|
3331
|
+
resultsLabel?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
|
|
3067
3332
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
3068
3333
|
"default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
|
|
3069
3334
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -3090,7 +3355,7 @@ export type HelixHeadlessCommandVueEvents = {
|
|
|
3090
3355
|
"helix-before-open": HelixHeadlessCommandHelixBeforeOpenElementEvent;
|
|
3091
3356
|
/** Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and filter the commands yourself, for example on a server while `loading` is set. */
|
|
3092
3357
|
"helix-filter": HelixHeadlessCommandHelixFilterElementEvent;
|
|
3093
|
-
/** A command was chosen. Cancelable: cancel it to keep the palette open. */
|
|
3358
|
+
/** A command was chosen, with its `href` where the option is a link. Cancelable: cancel it to keep the palette open, and to keep the browser from following the link. */
|
|
3094
3359
|
"helix-select": HelixHeadlessCommandHelixSelectElementEvent;
|
|
3095
3360
|
/** The palette opened or closed. The event carries `newState` and `oldState`. */
|
|
3096
3361
|
toggle: HelixHeadlessCommandToggleElementEvent;
|
|
@@ -3116,6 +3381,17 @@ dash-casing it, and `copiedlabel` is not what anyone would type. */
|
|
|
3116
3381
|
`attribute` written out, because Lit lowercases a property name rather than
|
|
3117
3382
|
dash-casing it, and `copiedlabel` is not what anyone would type. */
|
|
3118
3383
|
copiedLabel?: (HelixHeadlessCopyButton["copiedLabel"]) | undefined;
|
|
3384
|
+
/** The button's name and tooltip text after a press that put nothing on the
|
|
3385
|
+
clipboard. */
|
|
3386
|
+
"error-label"?: (HelixHeadlessCopyButton["errorLabel"]) | undefined;
|
|
3387
|
+
/** The button's name and tooltip text after a press that put nothing on the
|
|
3388
|
+
clipboard. */
|
|
3389
|
+
errorLabel?: (HelixHeadlessCopyButton["errorLabel"]) | undefined;
|
|
3390
|
+
/** The element to copy from, by its id: `key` for its text, `key[value]` for
|
|
3391
|
+
an attribute, and `key.value` for a property. Read at the press, and used
|
|
3392
|
+
in place of `value`. An element that is not there copies nothing, which is
|
|
3393
|
+
a failed copy. */
|
|
3394
|
+
from?: (HelixHeadlessCopyButton["from"]) | undefined;
|
|
3119
3395
|
/** The button's name and tooltip text before a copy.
|
|
3120
3396
|
|
|
3121
3397
|
Defaulted rather than left empty. An icon-only control must be named, and
|
|
@@ -3195,6 +3471,22 @@ native submitter would have given it, which is the point. */
|
|
|
3195
3471
|
formtarget?: (HelixHeadlessCopyButton["formTarget"]) | undefined;
|
|
3196
3472
|
/** Which browsing context the response lands in, overriding the form's own. */
|
|
3197
3473
|
formTarget?: (HelixHeadlessCopyButton["formTarget"]) | undefined;
|
|
3474
|
+
/** Whether the action the button started is still running.
|
|
3475
|
+
|
|
3476
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
3477
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
3478
|
+
click does not reach your listeners. The inner control carries
|
|
3479
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
3480
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
3481
|
+
turning ring over its words.
|
|
3482
|
+
|
|
3483
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
3484
|
+
a press, so focus stays where the reader left it. */
|
|
3485
|
+
pending?: (HelixHeadlessCopyButton["pending"]) | undefined;
|
|
3486
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
3487
|
+
"pending-label"?: (HelixHeadlessCopyButton["pendingLabel"]) | undefined;
|
|
3488
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
3489
|
+
pendingLabel?: (HelixHeadlessCopyButton["pendingLabel"]) | undefined;
|
|
3198
3490
|
/** What activating the button does to its form. */
|
|
3199
3491
|
type?: (HelixHeadlessCopyButton["type"]) | undefined;
|
|
3200
3492
|
/** Whether the control is disabled and cannot be used.
|
|
@@ -3280,6 +3572,8 @@ invoker without an id in the same tree needs. */
|
|
|
3280
3572
|
export type HelixHeadlessCopyButtonVueEvents = {
|
|
3281
3573
|
/** Fired after the clipboard write succeeds. */
|
|
3282
3574
|
"helix-copy": HelixHeadlessCopyButtonHelixCopyElementEvent;
|
|
3575
|
+
/** Fired when a press put nothing on the clipboard: the browser refused the write, or there was nothing to copy. */
|
|
3576
|
+
"helix-copy-error": HelixHeadlessCopyButtonElementEvent;
|
|
3283
3577
|
};
|
|
3284
3578
|
|
|
3285
3579
|
/** `HelixHeadlessDataTable` component event */
|
|
@@ -3705,6 +3999,12 @@ and is Sunday otherwise. */
|
|
|
3705
3999
|
locale?: (HelixHeadlessDateInput["locale"]) | undefined;
|
|
3706
4000
|
/** The latest date that can be chosen, as `YYYY-MM-DD`. */
|
|
3707
4001
|
max?: (HelixHeadlessDateInput["max"]) | undefined;
|
|
4002
|
+
/** How far the calendar's heading steps back from the days: `month` or
|
|
4003
|
+
`year`. Handed to the calendar; see Date Picker's `max-view`. */
|
|
4004
|
+
"max-view"?: (HelixHeadlessDateInput["maxView"]) | undefined;
|
|
4005
|
+
/** How far the calendar's heading steps back from the days: `month` or
|
|
4006
|
+
`year`. Handed to the calendar; see Date Picker's `max-view`. */
|
|
4007
|
+
maxView?: (HelixHeadlessDateInput["maxView"]) | undefined;
|
|
3708
4008
|
/** The earliest date that can be chosen, as `YYYY-MM-DD`. */
|
|
3709
4009
|
min?: (HelixHeadlessDateInput["min"]) | undefined;
|
|
3710
4010
|
/** How many dates can be held at once.
|
|
@@ -3720,16 +4020,38 @@ an end in April otherwise means paging between them and losing sight of the
|
|
|
3720
4020
|
first. The panel is sized by its content, so this widens it, and where the
|
|
3721
4021
|
window has no room for that width it shows one month until there is. */
|
|
3722
4022
|
months?: (HelixHeadlessDateInput["months"]) | undefined;
|
|
4023
|
+
/** The name of the calendar's heading where it shows the months, with
|
|
4024
|
+
`{heading}` filled in. */
|
|
4025
|
+
"month-view-label"?: (HelixHeadlessDateInput["monthViewLabel"]) | undefined;
|
|
4026
|
+
/** The name of the calendar's heading where it shows the months, with
|
|
4027
|
+
`{heading}` filled in. */
|
|
4028
|
+
monthViewLabel?: (HelixHeadlessDateInput["monthViewLabel"]) | undefined;
|
|
3723
4029
|
/** The name of the calendar's control that moves to the next month. */
|
|
3724
4030
|
"next-label"?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
|
|
3725
4031
|
/** The name of the calendar's control that moves to the next month. */
|
|
3726
4032
|
nextLabel?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
|
|
4033
|
+
/** The name of the calendar's control that moves forward a year. */
|
|
4034
|
+
"next-year-label"?: (HelixHeadlessDateInput["nextYearLabel"]) | undefined;
|
|
4035
|
+
/** The name of the calendar's control that moves forward a year. */
|
|
4036
|
+
nextYearLabel?: (HelixHeadlessDateInput["nextYearLabel"]) | undefined;
|
|
4037
|
+
/** The name of the calendar's control that moves forward a page of years. */
|
|
4038
|
+
"next-years-label"?: (HelixHeadlessDateInput["nextYearsLabel"]) | undefined;
|
|
4039
|
+
/** The name of the calendar's control that moves forward a page of years. */
|
|
4040
|
+
nextYearsLabel?: (HelixHeadlessDateInput["nextYearsLabel"]) | undefined;
|
|
3727
4041
|
/** The text the field shows before a date is entered. */
|
|
3728
4042
|
placeholder?: (HelixHeadlessDateInput["placeholder"]) | undefined;
|
|
3729
4043
|
/** The name of the calendar's control that moves to the previous month. */
|
|
3730
4044
|
"previous-label"?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
|
|
3731
4045
|
/** The name of the calendar's control that moves to the previous month. */
|
|
3732
4046
|
previousLabel?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
|
|
4047
|
+
/** The name of the calendar's control that moves back a year. */
|
|
4048
|
+
"previous-year-label"?: (HelixHeadlessDateInput["previousYearLabel"]) | undefined;
|
|
4049
|
+
/** The name of the calendar's control that moves back a year. */
|
|
4050
|
+
previousYearLabel?: (HelixHeadlessDateInput["previousYearLabel"]) | undefined;
|
|
4051
|
+
/** The name of the calendar's control that moves back a page of years. */
|
|
4052
|
+
"previous-years-label"?: (HelixHeadlessDateInput["previousYearsLabel"]) | undefined;
|
|
4053
|
+
/** The name of the calendar's control that moves back a page of years. */
|
|
4054
|
+
previousYearsLabel?: (HelixHeadlessDateInput["previousYearsLabel"]) | undefined;
|
|
3733
4055
|
/** The message shown when a range holds more than two dates.
|
|
3734
4056
|
|
|
3735
4057
|
**Every sentence a control raises in the browser's bubble is a property**,
|
|
@@ -3785,6 +4107,26 @@ platform's base. */
|
|
|
3785
4107
|
"unavailable-message"?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
|
|
3786
4108
|
/** The message shown when `disable-dates` or `disable-days` bars a date. */
|
|
3787
4109
|
unavailableMessage?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
|
|
4110
|
+
/** The name of the calendar's heading where it shows a page of years, with
|
|
4111
|
+
`{heading}` filled in. */
|
|
4112
|
+
"year-view-label"?: (HelixHeadlessDateInput["yearViewLabel"]) | undefined;
|
|
4113
|
+
/** The name of the calendar's heading where it shows a page of years, with
|
|
4114
|
+
`{heading}` filled in. */
|
|
4115
|
+
yearViewLabel?: (HelixHeadlessDateInput["yearViewLabel"]) | undefined;
|
|
4116
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
4117
|
+
sighted reader sees as dashes. */
|
|
4118
|
+
"empty-segment-label"?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
|
|
4119
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
4120
|
+
sighted reader sees as dashes. */
|
|
4121
|
+
emptySegmentLabel?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
|
|
4122
|
+
/** Whether the field is a row of segments, one for each part of the date or
|
|
4123
|
+
time, in place of a line of text.
|
|
4124
|
+
|
|
4125
|
+
Each segment is set with digits or the arrow keys, in the order the
|
|
4126
|
+
locale writes them, so a reader types a date the way they write one and
|
|
4127
|
+
no format has to be read back. The picker still opens from the trigger
|
|
4128
|
+
and with Alt+Down. */
|
|
4129
|
+
segmented?: (HelixHeadlessDateInput["segmented"]) | undefined;
|
|
3788
4130
|
/** Whether the value is locked. A read-only control still submits its value.
|
|
3789
4131
|
|
|
3790
4132
|
**Enforced by refusing every request in one place**, which is the seam this
|
|
@@ -3925,6 +4267,14 @@ imperatively later, and nothing is hydrating by then.
|
|
|
3925
4267
|
|
|
3926
4268
|
Here rather than on each control. */
|
|
3927
4269
|
name?: (HelixHeadlessDateInput["name"]) | undefined;
|
|
4270
|
+
/** What each day in the calendar shows, in place of its number: a function
|
|
4271
|
+
given the date as `YYYY-MM-DD`. Handed to the calendar; see Date Picker's
|
|
4272
|
+
`dayContent`. */
|
|
4273
|
+
dayContent?: (HelixHeadlessDateInput["dayContent"]) | undefined;
|
|
4274
|
+
/** A rule for which dates cannot be chosen: a function given the date as
|
|
4275
|
+
`YYYY-MM-DD` that returns `true` to bar it. The calendar offers such a date
|
|
4276
|
+
as unavailable, and a typed one is invalid, as with `disable-dates`. */
|
|
4277
|
+
isDateUnavailable?: (HelixHeadlessDateInput["isDateUnavailable"]) | undefined;
|
|
3928
4278
|
/** The value as a `Date`, at midnight UTC, or `null` while there is no date.
|
|
3929
4279
|
|
|
3930
4280
|
The platform's own pair on `<input type="date">`, and this control holds the
|
|
@@ -4017,6 +4367,24 @@ Absent uses the runtime's own. */
|
|
|
4017
4367
|
locale?: (HelixHeadlessDatePicker["locale"]) | undefined;
|
|
4018
4368
|
/** Latest selectable date, as `YYYY-MM-DD`. */
|
|
4019
4369
|
max?: (HelixHeadlessDatePicker["max"]) | undefined;
|
|
4370
|
+
/** How far the heading lets a reader step back from the days: `month` to a
|
|
4371
|
+
year's months, or `year` to a page of years and then its months.
|
|
4372
|
+
|
|
4373
|
+
Absent, the heading is text and the calendar moves a month at a time. Set,
|
|
4374
|
+
the heading is a button that shows the months, and from there the years,
|
|
4375
|
+
so a birth date forty years back is three presses rather than four hundred
|
|
4376
|
+
and eighty. Choosing a year shows its months, and choosing a month shows
|
|
4377
|
+
its days. */
|
|
4378
|
+
"max-view"?: (HelixHeadlessDatePicker["maxView"]) | undefined;
|
|
4379
|
+
/** How far the heading lets a reader step back from the days: `month` to a
|
|
4380
|
+
year's months, or `year` to a page of years and then its months.
|
|
4381
|
+
|
|
4382
|
+
Absent, the heading is text and the calendar moves a month at a time. Set,
|
|
4383
|
+
the heading is a button that shows the months, and from there the years,
|
|
4384
|
+
so a birth date forty years back is three presses rather than four hundred
|
|
4385
|
+
and eighty. Choosing a year shows its months, and choosing a month shows
|
|
4386
|
+
its days. */
|
|
4387
|
+
maxView?: (HelixHeadlessDatePicker["maxView"]) | undefined;
|
|
4020
4388
|
/** Earliest selectable date, as `YYYY-MM-DD`. */
|
|
4021
4389
|
min?: (HelixHeadlessDatePicker["min"]) | undefined;
|
|
4022
4390
|
/** How many dates can be held at once. */
|
|
@@ -4030,10 +4398,24 @@ can drive the view. Reading gives the month on show; writing sets it, and
|
|
|
4030
4398
|
month?: (HelixHeadlessDatePicker["month"]) | undefined;
|
|
4031
4399
|
/** How many months to show, side by side. */
|
|
4032
4400
|
months?: (HelixHeadlessDatePicker["months"]) | undefined;
|
|
4401
|
+
/** The name of the heading where it shows the months, with `{heading}`
|
|
4402
|
+
filled in as the month on show. */
|
|
4403
|
+
"month-view-label"?: (HelixHeadlessDatePicker["monthViewLabel"]) | undefined;
|
|
4404
|
+
/** The name of the heading where it shows the months, with `{heading}`
|
|
4405
|
+
filled in as the month on show. */
|
|
4406
|
+
monthViewLabel?: (HelixHeadlessDatePicker["monthViewLabel"]) | undefined;
|
|
4033
4407
|
/** Accessible name for the control that pages forward. */
|
|
4034
4408
|
"next-label"?: (HelixHeadlessDatePicker["nextLabel"]) | undefined;
|
|
4035
4409
|
/** Accessible name for the control that pages forward. */
|
|
4036
4410
|
nextLabel?: (HelixHeadlessDatePicker["nextLabel"]) | undefined;
|
|
4411
|
+
/** Accessible name for the control that moves forward a year, in the months. */
|
|
4412
|
+
"next-year-label"?: (HelixHeadlessDatePicker["nextYearLabel"]) | undefined;
|
|
4413
|
+
/** Accessible name for the control that moves forward a year, in the months. */
|
|
4414
|
+
nextYearLabel?: (HelixHeadlessDatePicker["nextYearLabel"]) | undefined;
|
|
4415
|
+
/** Accessible name for the control that moves forward a page, in the years. */
|
|
4416
|
+
"next-years-label"?: (HelixHeadlessDatePicker["nextYearsLabel"]) | undefined;
|
|
4417
|
+
/** Accessible name for the control that moves forward a page, in the years. */
|
|
4418
|
+
nextYearsLabel?: (HelixHeadlessDatePicker["nextYearsLabel"]) | undefined;
|
|
4037
4419
|
/** Accessible name for the control that pages back.
|
|
4038
4420
|
|
|
4039
4421
|
A property because a calendar rendering its own month names from `locale`
|
|
@@ -4048,6 +4430,14 @@ would otherwise still announce its controls in English. `attribute:`
|
|
|
4048
4430
|
spelled out, since Lit lowercases a camelCase name rather than dash-casing
|
|
4049
4431
|
it. */
|
|
4050
4432
|
previousLabel?: (HelixHeadlessDatePicker["previousLabel"]) | undefined;
|
|
4433
|
+
/** Accessible name for the control that moves back a year, in the months. */
|
|
4434
|
+
"previous-year-label"?: (HelixHeadlessDatePicker["previousYearLabel"]) | undefined;
|
|
4435
|
+
/** Accessible name for the control that moves back a year, in the months. */
|
|
4436
|
+
previousYearLabel?: (HelixHeadlessDatePicker["previousYearLabel"]) | undefined;
|
|
4437
|
+
/** Accessible name for the control that moves back a page, in the years. */
|
|
4438
|
+
"previous-years-label"?: (HelixHeadlessDatePicker["previousYearsLabel"]) | undefined;
|
|
4439
|
+
/** Accessible name for the control that moves back a page, in the years. */
|
|
4440
|
+
previousYearsLabel?: (HelixHeadlessDatePicker["previousYearsLabel"]) | undefined;
|
|
4051
4441
|
/** The validation message for a date after `max`. `{max}` is replaced with
|
|
4052
4442
|
`max`, written as a date in `locale`. */
|
|
4053
4443
|
"range-overflow-message"?: (HelixHeadlessDatePicker["rangeOverflowMessage"]) | undefined;
|
|
@@ -4112,6 +4502,17 @@ bars. */
|
|
|
4112
4502
|
"value-missing-message"?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
|
|
4113
4503
|
/** The validation message for a required date picker with no date chosen. */
|
|
4114
4504
|
valueMissingMessage?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
|
|
4505
|
+
/** What the calendar shows: the days of a month, the months of a year, or a
|
|
4506
|
+
page of years. `day` unless `max-view` lets a reader step back.
|
|
4507
|
+
|
|
4508
|
+
Not reflected, being state. Set it to open on the months or the years. */
|
|
4509
|
+
view?: (HelixHeadlessDatePicker["view"]) | undefined;
|
|
4510
|
+
/** The name of the heading where it shows a page of years, with `{heading}`
|
|
4511
|
+
filled in as the year on show. */
|
|
4512
|
+
"year-view-label"?: (HelixHeadlessDatePicker["yearViewLabel"]) | undefined;
|
|
4513
|
+
/** The name of the heading where it shows a page of years, with `{heading}`
|
|
4514
|
+
filled in as the year on show. */
|
|
4515
|
+
yearViewLabel?: (HelixHeadlessDatePicker["yearViewLabel"]) | undefined;
|
|
4115
4516
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
4116
4517
|
"default-value"?: (HelixHeadlessDatePicker["defaultValue"]) | undefined;
|
|
4117
4518
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -4149,6 +4550,24 @@ imperatively later, and nothing is hydrating by then.
|
|
|
4149
4550
|
|
|
4150
4551
|
Here rather than on each control. */
|
|
4151
4552
|
name?: (HelixHeadlessDatePicker["name"]) | undefined;
|
|
4553
|
+
/** What each day shows, in place of its number: a function given the date as
|
|
4554
|
+
`YYYY-MM-DD` that returns text, an element or a Lit template.
|
|
4555
|
+
|
|
4556
|
+
For a price or a dot under the number, as React Aria's `CalendarCell`
|
|
4557
|
+
takes children. The cell is still named by its whole date, so what you
|
|
4558
|
+
draw here is for the eye; say anything a reader must hear in the date's
|
|
4559
|
+
description elsewhere. Return the day's number with it where it should
|
|
4560
|
+
still show. A property only, there being no way to write a function in
|
|
4561
|
+
markup. */
|
|
4562
|
+
dayContent?: (HelixHeadlessDatePicker["dayContent"]) | undefined;
|
|
4563
|
+
/** A rule for which dates cannot be chosen: a function given the date as
|
|
4564
|
+
`YYYY-MM-DD` that returns `true` to bar it.
|
|
4565
|
+
|
|
4566
|
+
For what a list cannot say, such as the second Tuesday of each month or
|
|
4567
|
+
the days a server has fully booked. It bars a date as `disable-dates`
|
|
4568
|
+
does, in the grid and in validation. A property only, as React Aria's
|
|
4569
|
+
`isDateUnavailable` is a prop. */
|
|
4570
|
+
isDateUnavailable?: (HelixHeadlessDatePicker["isDateUnavailable"]) | undefined;
|
|
4152
4571
|
/** The value as a `Date`, at midnight UTC, or `null` while there is no date.
|
|
4153
4572
|
|
|
4154
4573
|
The platform's own pair on `<input type="date">`, and this control holds the
|
|
@@ -4222,6 +4641,16 @@ export type HelixHeadlessDialogToggleElementEvent =
|
|
|
4222
4641
|
HelixHeadlessDialogElementEvent<ToggleEvent>;
|
|
4223
4642
|
|
|
4224
4643
|
export type HelixHeadlessDialogVueProps = {
|
|
4644
|
+
/** Makes the dialog an alert dialog, for a message that interrupts to ask for
|
|
4645
|
+
an answer, such as a confirmation before something is deleted.
|
|
4646
|
+
|
|
4647
|
+
The `<dialog>` takes `role="alertdialog"`, so a screen reader announces the
|
|
4648
|
+
dialog and its description as it opens. Everything else stays the same:
|
|
4649
|
+
the dialog is modal, Escape asks to close it, and `persistent` still
|
|
4650
|
+
refuses that.
|
|
4651
|
+
|
|
4652
|
+
Not reflected, because no stylesheet selects on it. */
|
|
4653
|
+
alert?: (HelixHeadlessDialog["alert"]) | undefined;
|
|
4225
4654
|
/** Which close requests the browser handles on its own.
|
|
4226
4655
|
|
|
4227
4656
|
`<dialog closedby>`, forwarded, and safe to forward because every path it
|
|
@@ -4244,6 +4673,17 @@ the property this component exists to keep.
|
|
|
4244
4673
|
Absent by default, which is the platform's `auto` and this library's rule
|
|
4245
4674
|
that a resting value is an attribute's absence. */
|
|
4246
4675
|
closedBy?: (HelixHeadlessDialog["closedBy"]) | undefined;
|
|
4676
|
+
/** Draws a control that closes the dialog, in the corner where the title is.
|
|
4677
|
+
|
|
4678
|
+
Pressing it is `close()`, so it sends `helix-before-close` like every other
|
|
4679
|
+
way out, and `persistent` does not disable it. */
|
|
4680
|
+
dismissible?: (HelixHeadlessDialog["dismissible"]) | undefined;
|
|
4681
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
4682
|
+
interface. */
|
|
4683
|
+
"dismiss-label"?: (HelixHeadlessDialog["dismissLabel"]) | undefined;
|
|
4684
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
4685
|
+
interface. */
|
|
4686
|
+
dismissLabel?: (HelixHeadlessDialog["dismissLabel"]) | undefined;
|
|
4247
4687
|
/** Accessible name for the dialog. When it is empty, the heading in the
|
|
4248
4688
|
`header` slot names the dialog. */
|
|
4249
4689
|
label?: (HelixHeadlessDialog["label"]) | undefined;
|
|
@@ -4451,6 +4891,24 @@ default assigned to the property would reflect onto every host and put a
|
|
|
4451
4891
|
`placement="end"` into markup no consumer wrote. So what this tier
|
|
4452
4892
|
guarantees is the absence, and a sheet selects on it. */
|
|
4453
4893
|
placement?: (HelixHeadlessDrawer["placement"]) | undefined;
|
|
4894
|
+
/** The fractions of the panel a reader can leave on screen, as a list such as
|
|
4895
|
+
`0.5 1`. The drawer opens at the smallest, and a swipe comes to rest at the
|
|
4896
|
+
nearest, or closes the drawer below the smallest.
|
|
4897
|
+
|
|
4898
|
+
Empty is `1`: the whole panel, and a swipe either closes it or puts it
|
|
4899
|
+
back. */
|
|
4900
|
+
"snap-points"?: (HelixHeadlessDrawer["snapPoints"]) | undefined;
|
|
4901
|
+
/** The fractions of the panel a reader can leave on screen, as a list such as
|
|
4902
|
+
`0.5 1`. The drawer opens at the smallest, and a swipe comes to rest at the
|
|
4903
|
+
nearest, or closes the drawer below the smallest.
|
|
4904
|
+
|
|
4905
|
+
Empty is `1`: the whole panel, and a swipe either closes it or puts it
|
|
4906
|
+
back. */
|
|
4907
|
+
snapPoints?: (HelixHeadlessDrawer["snapPoints"]) | undefined;
|
|
4908
|
+
/** Whether a touch or a pen can swipe the drawer away. `swipe="false"` turns
|
|
4909
|
+
it off, for a panel whose content has its own use for the gesture, such as
|
|
4910
|
+
a map. */
|
|
4911
|
+
swipe?: (HelixHeadlessDrawer["swipe"]) | undefined;
|
|
4454
4912
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
4455
4913
|
"default-open"?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
|
|
4456
4914
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -4603,6 +5061,9 @@ export type HelixHeadlessFileInputElementEvent<E = Event> = TypedEvent<
|
|
|
4603
5061
|
/** `helix-before-change` event type */
|
|
4604
5062
|
export type HelixHeadlessFileInputHelixBeforeChangeElementEvent =
|
|
4605
5063
|
HelixHeadlessFileInputElementEvent<HelixBeforeChangeEvent>;
|
|
5064
|
+
/** `helix-reject` event type */
|
|
5065
|
+
export type HelixHeadlessFileInputHelixRejectElementEvent =
|
|
5066
|
+
HelixHeadlessFileInputElementEvent<HelixRejectEvent>;
|
|
4606
5067
|
|
|
4607
5068
|
export type HelixHeadlessFileInputVueProps = {
|
|
4608
5069
|
/** Which files the picker offers and a drop takes, as a native `accept` list.
|
|
@@ -4612,12 +5073,31 @@ filter is the only check the platform makes and a drop never meets it. */
|
|
|
4612
5073
|
accept?: (HelixHeadlessFileInput["accept"]) | undefined;
|
|
4613
5074
|
/** Which camera or microphone a mobile picker should offer, if any. */
|
|
4614
5075
|
capture?: (HelixHeadlessFileInput["capture"]) | undefined;
|
|
5076
|
+
/** Whether the picker chooses a folder, and the field takes every file in
|
|
5077
|
+
it. The platform's `webkitdirectory`. */
|
|
5078
|
+
directory?: (HelixHeadlessFileInput["directory"]) | undefined;
|
|
4615
5079
|
/** Language tag the sizes are written in.
|
|
4616
5080
|
|
|
4617
5081
|
Absent uses the runtime's own. */
|
|
4618
5082
|
locale?: (HelixHeadlessFileInput["locale"]) | undefined;
|
|
5083
|
+
/** The most files the field holds, under `multiple`. Files past it are
|
|
5084
|
+
refused. */
|
|
5085
|
+
"max-files"?: (HelixHeadlessFileInput["maxFiles"] | `${number}`) | undefined;
|
|
5086
|
+
/** The most files the field holds, under `multiple`. Files past it are
|
|
5087
|
+
refused. */
|
|
5088
|
+
maxFiles?: (HelixHeadlessFileInput["maxFiles"]) | undefined;
|
|
5089
|
+
/** The most bytes one file may have. A larger one is refused. */
|
|
5090
|
+
"max-file-size"?: (HelixHeadlessFileInput["maxFileSize"] | `${number}`) | undefined;
|
|
5091
|
+
/** The most bytes one file may have. A larger one is refused. */
|
|
5092
|
+
maxFileSize?: (HelixHeadlessFileInput["maxFileSize"]) | undefined;
|
|
4619
5093
|
/** Whether more than one file can be chosen. */
|
|
4620
5094
|
multiple?: (HelixHeadlessFileInput["multiple"]) | undefined;
|
|
5095
|
+
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5096
|
+
filled in. */
|
|
5097
|
+
"rejected-text"?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
5098
|
+
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5099
|
+
filled in. */
|
|
5100
|
+
rejectedText?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
4621
5101
|
/** The accessible name of the control that removes a file. `{name}` is
|
|
4622
5102
|
replaced with the file's name.
|
|
4623
5103
|
|
|
@@ -4692,6 +5172,9 @@ imperatively later, and nothing is hydrating by then.
|
|
|
4692
5172
|
|
|
4693
5173
|
Here rather than on each control. */
|
|
4694
5174
|
name?: (HelixHeadlessFileInput["name"]) | undefined;
|
|
5175
|
+
/** Your own check on each arriving file, which returns why it is refused, or
|
|
5176
|
+
nothing to take it. A property, since a function cannot be an attribute. */
|
|
5177
|
+
validate?: (HelixHeadlessFileInput["validate"]) | undefined;
|
|
4695
5178
|
};
|
|
4696
5179
|
|
|
4697
5180
|
export type HelixHeadlessFileInputVueEvents = {
|
|
@@ -4699,6 +5182,8 @@ export type HelixHeadlessFileInputVueEvents = {
|
|
|
4699
5182
|
change: HelixHeadlessFileInputElementEvent;
|
|
4700
5183
|
/** Fired before the chosen files change, with their names, and cancelable. Canceling it keeps the files the field had, even when the browser has already written a new pick. */
|
|
4701
5184
|
"helix-before-change": HelixHeadlessFileInputHelixBeforeChangeElementEvent;
|
|
5185
|
+
/** Fired when files arrive and some are left out. `detail.files` lists each with its `reason`: `type`, `size`, `count` or `invalid`, and your `validate` message. */
|
|
5186
|
+
"helix-reject": HelixHeadlessFileInputHelixRejectElementEvent;
|
|
4702
5187
|
/** Fired after the value changes. */
|
|
4703
5188
|
input: HelixHeadlessFileInputElementEvent;
|
|
4704
5189
|
};
|
|
@@ -4912,10 +5397,26 @@ an icon. */
|
|
|
4912
5397
|
/** The name of the clear button, read by screen readers. The button shows only
|
|
4913
5398
|
an icon. */
|
|
4914
5399
|
clearLabel?: (HelixHeadlessFilterInput["clearLabel"]) | undefined;
|
|
5400
|
+
/** Whether the panel narrows itself to the suggestions that hold the term
|
|
5401
|
+
being typed, as React Aria's Autocomplete filters. Off, the panel shows
|
|
5402
|
+
what you slot and you narrow it. */
|
|
5403
|
+
"filter-suggestions"?: (HelixHeadlessFilterInput["filterSuggestions"]) | undefined;
|
|
5404
|
+
/** Whether the panel narrows itself to the suggestions that hold the term
|
|
5405
|
+
being typed, as React Aria's Autocomplete filters. Off, the panel shows
|
|
5406
|
+
what you slot and you narrow it. */
|
|
5407
|
+
filterSuggestions?: (HelixHeadlessFilterInput["filterSuggestions"]) | undefined;
|
|
4915
5408
|
/** The text shown while the field is empty.
|
|
4916
5409
|
|
|
4917
5410
|
Not a label: it goes when typing starts. */
|
|
4918
5411
|
placeholder?: (HelixHeadlessFilterInput["placeholder"]) | undefined;
|
|
5412
|
+
/** What a reader hears for one suggestion, with `{count}` filled in. */
|
|
5413
|
+
"suggestion-label"?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
|
|
5414
|
+
/** What a reader hears for one suggestion, with `{count}` filled in. */
|
|
5415
|
+
suggestionLabel?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
|
|
5416
|
+
/** What a reader hears for any other number of suggestions, with `{count}` filled in. */
|
|
5417
|
+
"suggestions-label"?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
|
|
5418
|
+
/** What a reader hears for any other number of suggestions, with `{count}` filled in. */
|
|
5419
|
+
suggestionsLabel?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
|
|
4919
5420
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
4920
5421
|
"default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
|
|
4921
5422
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -5056,6 +5557,12 @@ Lit's server shim, `textContent`, `children`, `firstChild` and
|
|
|
5056
5557
|
it. An element rendered on a server needs the attribute; one rendered in a
|
|
5057
5558
|
browser may use either. */
|
|
5058
5559
|
date?: (HelixHeadlessFormatDate["date"]) | undefined;
|
|
5560
|
+
/** The locale's own pattern for the date: `full`, `long`, `medium`, or
|
|
5561
|
+
`short`. Set, it stands in for `weekday`, `day`, `month`, `year` and `era`. */
|
|
5562
|
+
"date-style"?: (HelixHeadlessFormatDate["dateStyle"]) | undefined;
|
|
5563
|
+
/** The locale's own pattern for the date: `full`, `long`, `medium`, or
|
|
5564
|
+
`short`. Set, it stands in for `weekday`, `day`, `month`, `year` and `era`. */
|
|
5565
|
+
dateStyle?: (HelixHeadlessFormatDate["dateStyle"]) | undefined;
|
|
5059
5566
|
/** How the day of the month is written, where a date is shown. */
|
|
5060
5567
|
day?: (HelixHeadlessFormatDate["day"]) | undefined;
|
|
5061
5568
|
/** Shows how long ago the timestamp was, in a compact form such as "3h", in
|
|
@@ -5065,8 +5572,22 @@ Reflected, because it is the one property that decides which of two readings
|
|
|
5065
5572
|
this is and a stylesheet has a reason to know: a compact reading is a fixed
|
|
5066
5573
|
few characters and a date is not. */
|
|
5067
5574
|
elapsed?: (HelixHeadlessFormatDate["elapsed"]) | undefined;
|
|
5575
|
+
/** How the era is written, such as AD, where a date is shown. */
|
|
5576
|
+
era?: (HelixHeadlessFormatDate["era"]) | undefined;
|
|
5068
5577
|
/** How the hour is written, where a time of day is shown. */
|
|
5069
5578
|
hour?: (HelixHeadlessFormatDate["hour"]) | undefined;
|
|
5579
|
+
/** The clock a time of day is written on: `h12` or `h11` for twelve hours,
|
|
5580
|
+
`h23` or `h24` for twenty-four.
|
|
5581
|
+
|
|
5582
|
+
Absent is the locale's own, which is right unless your product shows every
|
|
5583
|
+
reader the same clock whatever their language. */
|
|
5584
|
+
"hour-cycle"?: (HelixHeadlessFormatDate["hourCycle"]) | undefined;
|
|
5585
|
+
/** The clock a time of day is written on: `h12` or `h11` for twelve hours,
|
|
5586
|
+
`h23` or `h24` for twenty-four.
|
|
5587
|
+
|
|
5588
|
+
Absent is the locale's own, which is right unless your product shows every
|
|
5589
|
+
reader the same clock whatever their language. */
|
|
5590
|
+
hourCycle?: (HelixHeadlessFormatDate["hourCycle"]) | undefined;
|
|
5070
5591
|
/** The locale to format the timestamp in.
|
|
5071
5592
|
|
|
5072
5593
|
Empty is the runtime's own. */
|
|
@@ -5075,8 +5596,26 @@ Empty is the runtime's own. */
|
|
|
5075
5596
|
minute?: (HelixHeadlessFormatDate["minute"]) | undefined;
|
|
5076
5597
|
/** How the month is written, where a date is shown. */
|
|
5077
5598
|
month?: (HelixHeadlessFormatDate["month"]) | undefined;
|
|
5599
|
+
/** Whether a `relative` reading may use a word for a number: `auto` says
|
|
5600
|
+
"yesterday" and "now", and `always` says "1 day ago" and "in 0 seconds". */
|
|
5601
|
+
numeric?: (HelixHeadlessFormatDate["numeric"]) | undefined;
|
|
5602
|
+
/** Shows how long ago the timestamp was, or how long until it, in words, in
|
|
5603
|
+
place of the date: `long` ("3 hours ago"), `short` ("3 hr. ago") or
|
|
5604
|
+
`narrow` ("3h ago").
|
|
5605
|
+
|
|
5606
|
+
The reading refreshes as it goes stale, as `elapsed` does, and the whole
|
|
5607
|
+
date is its title. `elapsed` wins where both are set. */
|
|
5608
|
+
relative?: (HelixHeadlessFormatDate["relative"]) | undefined;
|
|
5078
5609
|
/** How the second is written, where a time of day is shown. */
|
|
5079
5610
|
second?: (HelixHeadlessFormatDate["second"]) | undefined;
|
|
5611
|
+
/** The locale's own pattern for the time of day: `full`, `long`, `medium`, or
|
|
5612
|
+
`short`. Set, it stands in for `hour`, `minute`, `second` and
|
|
5613
|
+
`time-zone-name`. */
|
|
5614
|
+
"time-style"?: (HelixHeadlessFormatDate["timeStyle"]) | undefined;
|
|
5615
|
+
/** The locale's own pattern for the time of day: `full`, `long`, `medium`, or
|
|
5616
|
+
`short`. Set, it stands in for `hour`, `minute`, `second` and
|
|
5617
|
+
`time-zone-name`. */
|
|
5618
|
+
timeStyle?: (HelixHeadlessFormatDate["timeStyle"]) | undefined;
|
|
5080
5619
|
/** The time zone to read the timestamp in.
|
|
5081
5620
|
|
|
5082
5621
|
Empty is the runtime's own. */
|
|
@@ -5584,6 +6123,22 @@ Lives here rather than only on `IconButton` so the two share one render.
|
|
|
5584
6123
|
An icon-only button without it is a control a screen reader announces as
|
|
5585
6124
|
"button" and nothing else. */
|
|
5586
6125
|
label?: (HelixHeadlessIconButton["label"]) | undefined;
|
|
6126
|
+
/** Whether the action the button started is still running.
|
|
6127
|
+
|
|
6128
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
6129
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
6130
|
+
click does not reach your listeners. The inner control carries
|
|
6131
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
6132
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
6133
|
+
turning ring over its words.
|
|
6134
|
+
|
|
6135
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
6136
|
+
a press, so focus stays where the reader left it. */
|
|
6137
|
+
pending?: (HelixHeadlessIconButton["pending"]) | undefined;
|
|
6138
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
6139
|
+
"pending-label"?: (HelixHeadlessIconButton["pendingLabel"]) | undefined;
|
|
6140
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
6141
|
+
pendingLabel?: (HelixHeadlessIconButton["pendingLabel"]) | undefined;
|
|
5587
6142
|
/** What activating the button does to its form. */
|
|
5588
6143
|
type?: (HelixHeadlessIconButton["type"]) | undefined;
|
|
5589
6144
|
/** The value this button submits under its own `name`, as a native submit
|
|
@@ -5706,8 +6261,12 @@ disagreeing with its own name for every reader who meant the left. */
|
|
|
5706
6261
|
so it is what markup can carry, and resolving one means an index of the
|
|
5707
6262
|
whole set that no bundler can shake: 15 kB for a consumer who renders one
|
|
5708
6263
|
mark. An attribute is the only thing an HTML author can write, and that is
|
|
5709
|
-
worth the index; a consumer who would rather not pay it
|
|
5710
|
-
|
|
6264
|
+
worth the index; a consumer who would rather not pay it imports the
|
|
6265
|
+
element from `icon/root` and registers the glyphs it names, or hands over
|
|
6266
|
+
the value instead.
|
|
6267
|
+
|
|
6268
|
+
A name written `prefix:name` asks the library registered under that
|
|
6269
|
+
prefix. */
|
|
5711
6270
|
name?: (HelixHeadlessIcon["name"]) | undefined;
|
|
5712
6271
|
/** The icon to draw, as an object you import.
|
|
5713
6272
|
|
|
@@ -5725,8 +6284,10 @@ for. Set both and this wins, the value being the more specific statement. */
|
|
|
5725
6284
|
};
|
|
5726
6285
|
|
|
5727
6286
|
export type HelixHeadlessIconVueEvents = {
|
|
5728
|
-
/** `name` matches no icon
|
|
6287
|
+
/** `name` matches no registered icon and no library answers it, so nothing is drawn. */
|
|
5729
6288
|
error: HelixHeadlessIconElementEvent;
|
|
6289
|
+
/** A glyph a library gave later for `name` is drawn. */
|
|
6290
|
+
load: HelixHeadlessIconElementEvent;
|
|
5730
6291
|
};
|
|
5731
6292
|
|
|
5732
6293
|
/** `HelixHeadlessImage` component event */
|
|
@@ -5780,6 +6341,18 @@ ninety-nine pictures. */
|
|
|
5780
6341
|
picture worth putting in a component is usually below the fold and the one
|
|
5781
6342
|
that is not is the exception worth writing down. */
|
|
5782
6343
|
loading?: (HelixHeadlessImage["loading"]) | undefined;
|
|
6344
|
+
/** How long, in milliseconds, the placeholder waits before it shows.
|
|
6345
|
+
|
|
6346
|
+
Absent or `0` shows it at once. A picture that arrives inside
|
|
6347
|
+
the wait never shows a placeholder at all, so a cached or fast image does
|
|
6348
|
+
not flash one. Radix's `delayMs` on its avatar fallback is the same idea. */
|
|
6349
|
+
"placeholder-delay"?: (HelixHeadlessImage["placeholderDelay"] | `${number}`) | undefined;
|
|
6350
|
+
/** How long, in milliseconds, the placeholder waits before it shows.
|
|
6351
|
+
|
|
6352
|
+
Absent or `0` shows it at once. A picture that arrives inside
|
|
6353
|
+
the wait never shows a placeholder at all, so a cached or fast image does
|
|
6354
|
+
not flash one. Radix's `delayMs` on its avatar fallback is the same idea. */
|
|
6355
|
+
placeholderDelay?: (HelixHeadlessImage["placeholderDelay"]) | undefined;
|
|
5783
6356
|
/** How much of the referring URL to send with the request. */
|
|
5784
6357
|
referrerpolicy?: (HelixHeadlessImage["referrerPolicy"]) | undefined;
|
|
5785
6358
|
/** How much of the referring URL to send with the request. */
|
|
@@ -6028,6 +6601,8 @@ export type HelixHeadlessInputVueEvents = {
|
|
|
6028
6601
|
change: HelixHeadlessInputElementEvent;
|
|
6029
6602
|
/** The text is about to change. Cancelable: cancel it to keep the current text. */
|
|
6030
6603
|
"helix-before-change": HelixHeadlessInputHelixBeforeChangeElementEvent;
|
|
6604
|
+
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
6605
|
+
"helix-clear": HelixHeadlessInputElementEvent;
|
|
6031
6606
|
/** Fired as the value changes. */
|
|
6032
6607
|
input: HelixHeadlessInputElementEvent;
|
|
6033
6608
|
};
|
|
@@ -6042,6 +6617,13 @@ export type HelixHeadlessKbdHelixShortcutElementEvent =
|
|
|
6042
6617
|
HelixHeadlessKbdElementEvent<HelixShortcutEvent>;
|
|
6043
6618
|
|
|
6044
6619
|
export type HelixHeadlessKbdVueProps = {
|
|
6620
|
+
/** The id of the control the shortcut works, which is given the chord as its
|
|
6621
|
+
`aria-keyshortcuts`.
|
|
6622
|
+
|
|
6623
|
+
Names an element in the same tree, the way `Tooltip.for` does. Separate
|
|
6624
|
+
from `within`, which says where the key listens: a key can describe a
|
|
6625
|
+
shortcut the page binds itself. */
|
|
6626
|
+
for?: (HelixHeadlessKbd["for"]) | undefined;
|
|
6045
6627
|
/** The key or chord to show, such as `mod+k`, `?`, or `/`.
|
|
6046
6628
|
|
|
6047
6629
|
`mod` is the platform's own command modifier, which is the reason to write
|
|
@@ -6070,6 +6652,15 @@ export type HelixHeadlessKbdVueEvents = {
|
|
|
6070
6652
|
"helix-shortcut": HelixHeadlessKbdHelixShortcutElementEvent;
|
|
6071
6653
|
};
|
|
6072
6654
|
|
|
6655
|
+
/** `HelixHeadlessLegend` component event */
|
|
6656
|
+
export type HelixHeadlessLegendElementEvent<E = Event> = TypedEvent<
|
|
6657
|
+
HelixHeadlessLegend,
|
|
6658
|
+
E
|
|
6659
|
+
>;
|
|
6660
|
+
/** `helix-before-change` event type */
|
|
6661
|
+
export type HelixHeadlessLegendHelixBeforeChangeElementEvent =
|
|
6662
|
+
HelixHeadlessLegendElementEvent<HelixBeforeChangeEvent>;
|
|
6663
|
+
|
|
6073
6664
|
export type HelixHeadlessLegendVueProps = {
|
|
6074
6665
|
/** How the entries are read from the table: `series`, `categories`, or
|
|
6075
6666
|
`measures`.
|
|
@@ -6098,14 +6689,40 @@ shadow root reads a table in that root rather than one in the document.
|
|
|
6098
6689
|
**In React this arrives as a property and not as an attribute**, the way
|
|
6099
6690
|
`Tooltip.for` does, so it does not reflect and nothing styles on it. */
|
|
6100
6691
|
for?: (HelixHeadlessLegend["for"]) | undefined;
|
|
6692
|
+
/** The series hidden on the table, by name, separated by commas: what
|
|
6693
|
+
`toggles` hides and shows.
|
|
6694
|
+
|
|
6695
|
+
Set it to start with series hidden. Every chart reading the same table
|
|
6696
|
+
draws without them. Commas only, because a column's heading may hold a
|
|
6697
|
+
space. For a ring the names are the rows. */
|
|
6698
|
+
"hidden-series"?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6699
|
+
/** The series hidden on the table, by name, separated by commas: what
|
|
6700
|
+
`toggles` hides and shows.
|
|
6701
|
+
|
|
6702
|
+
Set it to start with series hidden. Every chart reading the same table
|
|
6703
|
+
draws without them. Commas only, because a column's heading may hold a
|
|
6704
|
+
space. For a ring the names are the rows. */
|
|
6705
|
+
hiddenSeries?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6101
6706
|
/** The name of the list, which a screen reader announces before its entries.
|
|
6102
6707
|
|
|
6103
6708
|
Absent names the list after the table's caption, so a page with several
|
|
6104
6709
|
charts has a legend list for each that says which chart it keys. */
|
|
6105
6710
|
label?: (HelixHeadlessLegend["label"]) | undefined;
|
|
6711
|
+
/** Makes each entry a button that hides or shows its series in every chart
|
|
6712
|
+
reading the same table.
|
|
6713
|
+
|
|
6714
|
+
Absent, the legend only displays, which is what it did before this
|
|
6715
|
+
existed. Reflected, because the styled tier draws a button differently
|
|
6716
|
+
from a plain entry. */
|
|
6717
|
+
toggles?: (HelixHeadlessLegend["toggles"]) | undefined;
|
|
6106
6718
|
};
|
|
6107
6719
|
|
|
6108
|
-
export type HelixHeadlessLegendVueEvents = {
|
|
6720
|
+
export type HelixHeadlessLegendVueEvents = {
|
|
6721
|
+
/** Fired once a toggle has hidden or shown a series. */
|
|
6722
|
+
change: HelixHeadlessLegendElementEvent;
|
|
6723
|
+
/** Fired before a toggle hides or shows a series, with the `hidden-series` it would leave. Cancelable. */
|
|
6724
|
+
"helix-before-change": HelixHeadlessLegendHelixBeforeChangeElementEvent;
|
|
6725
|
+
};
|
|
6109
6726
|
|
|
6110
6727
|
export type HelixHeadlessLightboxItemVueProps = {
|
|
6111
6728
|
/** Whether this item is the one shown.
|
|
@@ -6143,6 +6760,19 @@ export type HelixHeadlessLightboxToggleElementEvent =
|
|
|
6143
6760
|
HelixHeadlessLightboxElementEvent<ToggleEvent>;
|
|
6144
6761
|
|
|
6145
6762
|
export type HelixHeadlessLightboxVueProps = {
|
|
6763
|
+
/** Draws the viewer's own previous, next and close controls over the picture.
|
|
6764
|
+
|
|
6765
|
+
Off by default, for a viewer whose chrome you compose in the `header` and
|
|
6766
|
+
`footer` slots. The controls hide with the rest of the chrome while the
|
|
6767
|
+
reader is idle, and the previous and next ones say they are unavailable at
|
|
6768
|
+
either end of a set that does not `loop`. */
|
|
6769
|
+
controls?: (HelixHeadlessLightbox["controls"]) | undefined;
|
|
6770
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
6771
|
+
interface. */
|
|
6772
|
+
"dismiss-label"?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
|
|
6773
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
6774
|
+
interface. */
|
|
6775
|
+
dismissLabel?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
|
|
6146
6776
|
/** How long the user can be idle before the header and footer hide, in
|
|
6147
6777
|
milliseconds.
|
|
6148
6778
|
|
|
@@ -6161,6 +6791,28 @@ keep the chrome up is the consumer's to decide with this. */
|
|
|
6161
6791
|
label?: (HelixHeadlessLightbox["label"]) | undefined;
|
|
6162
6792
|
/** Whether moving past the last item returns to the first. */
|
|
6163
6793
|
loop?: (HelixHeadlessLightbox["loop"]) | undefined;
|
|
6794
|
+
/** The next control's accessible name. */
|
|
6795
|
+
"next-label"?: (HelixHeadlessLightbox["nextLabel"]) | undefined;
|
|
6796
|
+
/** The next control's accessible name. */
|
|
6797
|
+
nextLabel?: (HelixHeadlessLightbox["nextLabel"]) | undefined;
|
|
6798
|
+
/** The previous control's accessible name. */
|
|
6799
|
+
"previous-label"?: (HelixHeadlessLightbox["previousLabel"]) | undefined;
|
|
6800
|
+
/** The previous control's accessible name. */
|
|
6801
|
+
previousLabel?: (HelixHeadlessLightbox["previousLabel"]) | undefined;
|
|
6802
|
+
/** The name of an item with no `label` of its own, with `{index}` and
|
|
6803
|
+
`{count}` filled in. */
|
|
6804
|
+
"slide-label"?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
|
|
6805
|
+
/** The name of an item with no `label` of its own, with `{index}` and
|
|
6806
|
+
`{count}` filled in. */
|
|
6807
|
+
slideLabel?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
|
|
6808
|
+
/** The word screen readers announce in place of an item's role, set as
|
|
6809
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
6810
|
+
it to leave the role as `group`. */
|
|
6811
|
+
"slide-role-label"?: (HelixHeadlessLightbox["slideRoleLabel"]) | undefined;
|
|
6812
|
+
/** The word screen readers announce in place of an item's role, set as
|
|
6813
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
6814
|
+
it to leave the role as `group`. */
|
|
6815
|
+
slideRoleLabel?: (HelixHeadlessLightbox["slideRoleLabel"]) | undefined;
|
|
6164
6816
|
/** The status text that says which item is shown, with `{index}`, `{count}`
|
|
6165
6817
|
and the item's `{label}` filled in.
|
|
6166
6818
|
|
|
@@ -6456,6 +7108,22 @@ filtering already does: `filter`, the empty state and the keyboard are all
|
|
|
6456
7108
|
this component's. A select, a combobox and a command palette drawing their
|
|
6457
7109
|
own search boxes would be three copies of one field. */
|
|
6458
7110
|
filterable?: (HelixHeadlessListbox["filterable"]) | undefined;
|
|
7111
|
+
/** How long typing in the filter field rests before the list is filtered, in
|
|
7112
|
+
milliseconds. `0` filters on every keystroke.
|
|
7113
|
+
|
|
7114
|
+
For a list filtered on a server, where `helix-filter` starts a request: a
|
|
7115
|
+
reader typing a word sends one request for the word, not one for each
|
|
7116
|
+
letter. Enter and the arrow keys filter at once on what is typed, so they
|
|
7117
|
+
act on the list the reader expects. */
|
|
7118
|
+
"filter-delay"?: (HelixHeadlessListbox["filterDelay"] | `${number}`) | undefined;
|
|
7119
|
+
/** How long typing in the filter field rests before the list is filtered, in
|
|
7120
|
+
milliseconds. `0` filters on every keystroke.
|
|
7121
|
+
|
|
7122
|
+
For a list filtered on a server, where `helix-filter` starts a request: a
|
|
7123
|
+
reader typing a word sends one request for the word, not one for each
|
|
7124
|
+
letter. Enter and the arrow keys filter at once on what is typed, so they
|
|
7125
|
+
act on the list the reader expects. */
|
|
7126
|
+
filterDelay?: (HelixHeadlessListbox["filterDelay"]) | undefined;
|
|
6459
7127
|
/** Placeholder text for the filter field. */
|
|
6460
7128
|
"filter-label"?: (HelixHeadlessListbox["filterLabel"]) | undefined;
|
|
6461
7129
|
/** Placeholder text for the filter field. */
|
|
@@ -6469,6 +7137,26 @@ a reader can move through the options before closing the panel on one. */
|
|
|
6469
7137
|
manual?: (HelixHeadlessListbox["manual"]) | undefined;
|
|
6470
7138
|
/** Whether more than one option can be chosen. */
|
|
6471
7139
|
multiple?: (HelixHeadlessListbox["multiple"]) | undefined;
|
|
7140
|
+
/** What a screen reader hears when a filter leaves one option. `{count}` is
|
|
7141
|
+
the count. */
|
|
7142
|
+
"result-label"?: (HelixHeadlessListbox["resultLabel"]) | undefined;
|
|
7143
|
+
/** What a screen reader hears when a filter leaves one option. `{count}` is
|
|
7144
|
+
the count. */
|
|
7145
|
+
resultLabel?: (HelixHeadlessListbox["resultLabel"]) | undefined;
|
|
7146
|
+
/** What a screen reader hears when a filter leaves any other number of
|
|
7147
|
+
options. `{count}` is the count.
|
|
7148
|
+
|
|
7149
|
+
**Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
|
|
7150
|
+
pair: a language with more forms than two picks the one for its `one` and
|
|
7151
|
+
writes the rest here. */
|
|
7152
|
+
"results-label"?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
|
|
7153
|
+
/** What a screen reader hears when a filter leaves any other number of
|
|
7154
|
+
options. `{count}` is the count.
|
|
7155
|
+
|
|
7156
|
+
**Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
|
|
7157
|
+
pair: a language with more forms than two picks the one for its `one` and
|
|
7158
|
+
writes the rest here. */
|
|
7159
|
+
resultsLabel?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
|
|
6472
7160
|
/** Whether the rows are still loading.
|
|
6473
7161
|
|
|
6474
7162
|
Reflected, because a stylesheet needs it: the rows that are already there
|
|
@@ -6571,6 +7259,18 @@ export type HelixHeadlessListboxVueEvents = {
|
|
|
6571
7259
|
};
|
|
6572
7260
|
|
|
6573
7261
|
export type HelixHeadlessLoaderVueProps = {
|
|
7262
|
+
/** How long the loader waits before it shows, in milliseconds, so work that
|
|
7263
|
+
finishes quickly never flashes one.
|
|
7264
|
+
|
|
7265
|
+
Absent shows it at once. Hidden in the served markup too, so a page that
|
|
7266
|
+
loads quickly never draws it. */
|
|
7267
|
+
delay?: (HelixHeadlessLoader["delay"]) | undefined;
|
|
7268
|
+
/** The id of the region being loaded, which is marked `aria-busy` while the
|
|
7269
|
+
loader is on the page.
|
|
7270
|
+
|
|
7271
|
+
Names an element in the same tree. In React it arrives as a property, the
|
|
7272
|
+
way `Tooltip.for` does. */
|
|
7273
|
+
for?: (HelixHeadlessLoader["for"]) | undefined;
|
|
6574
7274
|
/** The loader's name, announced by screen readers while the work is in
|
|
6575
7275
|
progress. */
|
|
6576
7276
|
label?: (HelixHeadlessLoader["label"]) | undefined;
|
|
@@ -7643,7 +8343,10 @@ no reader. */
|
|
|
7643
8343
|
|
|
7644
8344
|
Absent leaves the range unbanded. */
|
|
7645
8345
|
high?: (HelixHeadlessMeter["high"]) | undefined;
|
|
7646
|
-
/** Accessible name for the reading.
|
|
8346
|
+
/** Accessible name for the reading.
|
|
8347
|
+
|
|
8348
|
+
A visible label in the `label` slot names it instead, with the words it
|
|
8349
|
+
shows, so the name and the label cannot disagree. */
|
|
7647
8350
|
label?: (HelixHeadlessMeter["label"]) | undefined;
|
|
7648
8351
|
/** The locale the percentage is written in, such as `fr` for `72 %`.
|
|
7649
8352
|
|
|
@@ -7889,6 +8592,12 @@ export type HelixHeadlessNotificationsVueProps = {
|
|
|
7889
8592
|
"mark-all-label"?: (HelixHeadlessNotifications["markAllLabel"]) | undefined;
|
|
7890
8593
|
/** Label for the mark-all control. */
|
|
7891
8594
|
markAllLabel?: (HelixHeadlessNotifications["markAllLabel"]) | undefined;
|
|
8595
|
+
/** How many notifications there are in all, where the feed holds only some of
|
|
8596
|
+
them, read as each row's `aria-setsize`. `-1` says the count is unknown.
|
|
8597
|
+
|
|
8598
|
+
Unset, the browser counts the rows it can see, which is right for a feed
|
|
8599
|
+
that holds everything. */
|
|
8600
|
+
total?: (HelixHeadlessNotifications["total"]) | undefined;
|
|
7892
8601
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
7893
8602
|
"empty-text"?: (HelixHeadlessNotifications["emptyText"]) | undefined;
|
|
7894
8603
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
@@ -7949,6 +8658,22 @@ reach the bubble. Absent is the control's own sentence, in English. */
|
|
|
7949
8658
|
"decrement-label"?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
|
|
7950
8659
|
/** The name of the step down button, read by screen readers. */
|
|
7951
8660
|
decrementLabel?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
|
|
8661
|
+
/** `Intl.NumberFormat` options the number is shown with while the field is
|
|
8662
|
+
not being edited: a currency, a percent, a unit, or a number of decimals.
|
|
8663
|
+
Written as JSON in the attribute.
|
|
8664
|
+
|
|
8665
|
+
```html
|
|
8666
|
+
<helix-number-input format-options='{"style":"currency","currency":"EUR"}'></helix-number-input>
|
|
8667
|
+
``` */
|
|
8668
|
+
"format-options"?: (HelixHeadlessNumberInput["formatOptions"]) | undefined;
|
|
8669
|
+
/** `Intl.NumberFormat` options the number is shown with while the field is
|
|
8670
|
+
not being edited: a currency, a percent, a unit, or a number of decimals.
|
|
8671
|
+
Written as JSON in the attribute.
|
|
8672
|
+
|
|
8673
|
+
```html
|
|
8674
|
+
<helix-number-input format-options='{"style":"currency","currency":"EUR"}'></helix-number-input>
|
|
8675
|
+
``` */
|
|
8676
|
+
formatOptions?: (HelixHeadlessNumberInput["formatOptions"]) | undefined;
|
|
7952
8677
|
/** The name of the step up button, read by screen readers. */
|
|
7953
8678
|
"increment-label"?: (HelixHeadlessNumberInput["incrementLabel"]) | undefined;
|
|
7954
8679
|
/** The name of the step up button, read by screen readers. */
|
|
@@ -8000,6 +8725,12 @@ filled in. */
|
|
|
8000
8725
|
readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
8001
8726
|
/** Prevents editing. The value is still submitted with the form. */
|
|
8002
8727
|
readOnly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
8728
|
+
/** What the field is described as on iOS and iPadOS, where it carries no
|
|
8729
|
+
spinbutton role. See the class description. */
|
|
8730
|
+
"role-description"?: (HelixHeadlessNumberInput["roleDescription"]) | undefined;
|
|
8731
|
+
/** What the field is described as on iOS and iPadOS, where it carries no
|
|
8732
|
+
spinbutton role. See the class description. */
|
|
8733
|
+
roleDescription?: (HelixHeadlessNumberInput["roleDescription"]) | undefined;
|
|
8003
8734
|
/** Makes the label a grip that changes the value when it is dragged.
|
|
8004
8735
|
|
|
8005
8736
|
The label is what is dragged, so this adds no chrome at all. Still opt-in,
|
|
@@ -8032,6 +8763,10 @@ A unit slotted into `end` is drawn beside the number and is not part of
|
|
|
8032
8763
|
what the spinbutton announces, so it goes here too. Empty announces the
|
|
8033
8764
|
number alone. */
|
|
8034
8765
|
valueText?: (HelixHeadlessNumberInput["valueText"]) | undefined;
|
|
8766
|
+
/** Whether the mouse wheel steps the number while the field has focus, as
|
|
8767
|
+
React Aria's NumberField does unless told not to. Off, the wheel scrolls
|
|
8768
|
+
the page, which is what a reader passing over a form expects. */
|
|
8769
|
+
wheel?: (HelixHeadlessNumberInput["wheel"]) | undefined;
|
|
8035
8770
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
8036
8771
|
"default-value"?: (HelixHeadlessNumberInput["defaultValue"]) | undefined;
|
|
8037
8772
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -8310,6 +9045,24 @@ string is not a fact a selector needs. */
|
|
|
8310
9045
|
description?: (HelixHeadlessOption["description"]) | undefined;
|
|
8311
9046
|
/** Prevents the option from being chosen. */
|
|
8312
9047
|
disabled?: (HelixHeadlessOption["disabled"]) | undefined;
|
|
9048
|
+
/** Whether following the link downloads what it names. Only meaningful
|
|
9049
|
+
beside an `href`. */
|
|
9050
|
+
download?: (HelixHeadlessOption["download"]) | undefined;
|
|
9051
|
+
/** The URL the option links to. Setting it makes the option a link: choosing
|
|
9052
|
+
it, with a press, Enter or a click, follows the link and selects nothing,
|
|
9053
|
+
as React Aria's items with `href` do. Command, Control and Shift open it
|
|
9054
|
+
where they open a link, in a new tab or a new window.
|
|
9055
|
+
|
|
9056
|
+
`helix-select` is said first with the `href` in it, and canceling it keeps
|
|
9057
|
+
the browser from following, so a client-side router follows it instead.
|
|
9058
|
+
|
|
9059
|
+
**The option stays an option**, and an anchor is never drawn inside it:
|
|
9060
|
+
`role="option"` sits on the host, where a listbox's
|
|
9061
|
+
`aria-activedescendant` can name it, and an `<a>` inside would be exposed
|
|
9062
|
+
as a link within the option and take its name (Menu Item's `href` records
|
|
9063
|
+
the measurement). The link is followed through an anchor made for the
|
|
9064
|
+
moment, which `followLink` describes. */
|
|
9065
|
+
href?: (HelixHeadlessOption["href"]) | undefined;
|
|
8313
9066
|
/** A shorter name for this choice, for where the row does not fit.
|
|
8314
9067
|
|
|
8315
9068
|
`<option label>`'s own meaning: the text a chooser shows when it has less
|
|
@@ -8321,10 +9074,30 @@ simply the accessible name.
|
|
|
8321
9074
|
`<option label>` does: written the platform's way, a select listed a row of
|
|
8322
9075
|
nothing for every choice. */
|
|
8323
9076
|
label?: (HelixHeadlessOption["label"]) | undefined;
|
|
9077
|
+
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
9078
|
+
rel?: (HelixHeadlessOption["rel"]) | undefined;
|
|
8324
9079
|
/** Whether this choice is currently chosen.
|
|
8325
9080
|
|
|
8326
9081
|
Written by the listbox. */
|
|
8327
9082
|
selected?: (HelixHeadlessOption["selected"]) | undefined;
|
|
9083
|
+
/** Where the link opens, such as `_blank`, for an option with an `href`. */
|
|
9084
|
+
target?: (HelixHeadlessOption["target"]) | undefined;
|
|
9085
|
+
/** The words a reader types to reach this choice, where the row's own words
|
|
9086
|
+
are not them: typeahead, a filter and a combobox match against it, and a
|
|
9087
|
+
select's trigger shows it.
|
|
9088
|
+
|
|
9089
|
+
For a row whose content is a picture, an avatar beside a name and a role,
|
|
9090
|
+
or a name written in another script, as React Aria's `textValue`. Empty
|
|
9091
|
+
reads the row's words, then `label`. */
|
|
9092
|
+
"text-value"?: (HelixHeadlessOption["textValue"]) | undefined;
|
|
9093
|
+
/** The words a reader types to reach this choice, where the row's own words
|
|
9094
|
+
are not them: typeahead, a filter and a combobox match against it, and a
|
|
9095
|
+
select's trigger shows it.
|
|
9096
|
+
|
|
9097
|
+
For a row whose content is a picture, an avatar beside a name and a role,
|
|
9098
|
+
or a name written in another script, as React Aria's `textValue`. Empty
|
|
9099
|
+
reads the row's words, then `label`. */
|
|
9100
|
+
textValue?: (HelixHeadlessOption["textValue"]) | undefined;
|
|
8328
9101
|
/** The value that identifies the option, and that a form submits. */
|
|
8329
9102
|
value?: (HelixHeadlessOption["value"]) | undefined;
|
|
8330
9103
|
/** Whether the markup declares this option selected. A form reset returns to it.
|
|
@@ -8356,7 +9129,7 @@ change of its own rather than a property being added. */
|
|
|
8356
9129
|
};
|
|
8357
9130
|
|
|
8358
9131
|
export type HelixHeadlessOptionVueEvents = {
|
|
8359
|
-
/** The option was chosen. Cancelable: canceling it leaves the selection as it was
|
|
9132
|
+
/** The option was chosen. Cancelable: canceling it leaves the selection as it was, and keeps the browser from following an option's `href`. */
|
|
8360
9133
|
"helix-select": HelixHeadlessOptionHelixSelectElementEvent;
|
|
8361
9134
|
};
|
|
8362
9135
|
|
|
@@ -8663,10 +9436,18 @@ that lets a phone offer the code out of a message. Later cells stay `off`
|
|
|
8663
9436
|
for the reason in the class comment above, that six cells each offering
|
|
8664
9437
|
the same code is one offer made six times. */
|
|
8665
9438
|
autocomplete?: (HelixHeadlessPinInput["autocomplete"]) | undefined;
|
|
9439
|
+
/** Whether the form is submitted once the last box is filled, as Web
|
|
9440
|
+
Awesome's `autosubmit` and Radix's `autoSubmit`. Only for a code the field
|
|
9441
|
+
took: a refused last character submits nothing. */
|
|
9442
|
+
autosubmit?: (HelixHeadlessPinInput["autosubmit"]) | undefined;
|
|
8666
9443
|
/** Accessible name for one box, with `{index}` and `{length}` filled in. */
|
|
8667
9444
|
"cell-label"?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
8668
9445
|
/** Accessible name for one box, with `{index}` and `{length}` filled in. */
|
|
8669
9446
|
cellLabel?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
9447
|
+
/** Separators drawn between the boxes: `#` or `*` for a box and anything
|
|
9448
|
+
else as it is written, so `###-###` draws a dash after the third. The
|
|
9449
|
+
separators are hidden from screen readers and are not part of the value. */
|
|
9450
|
+
format?: (HelixHeadlessPinInput["format"]) | undefined;
|
|
8670
9451
|
/** How many characters the code has. */
|
|
8671
9452
|
length?: (HelixHeadlessPinInput["length"]) | undefined;
|
|
8672
9453
|
/** Whether the characters are hidden, the way a password is. */
|
|
@@ -8808,8 +9589,17 @@ export type HelixHeadlessPopoverToggleElementEvent =
|
|
|
8808
9589
|
HelixHeadlessPopoverElementEvent<ToggleEvent>;
|
|
8809
9590
|
|
|
8810
9591
|
export type HelixHeadlessPopoverVueProps = {
|
|
8811
|
-
/**
|
|
9592
|
+
/** Draws a point on the panel's edge facing the trigger.
|
|
9593
|
+
|
|
9594
|
+
Off by default, which is the house style: a panel that opens from its
|
|
9595
|
+
trigger already reads as belonging to it. */
|
|
9596
|
+
arrow?: (HelixHeadlessPopover["arrow"]) | undefined;
|
|
9597
|
+
/** The panel's name, read by screen readers. Left at `Popover`, the first
|
|
9598
|
+
heading in the panel names it instead. */
|
|
8812
9599
|
label?: (HelixHeadlessPopover["label"]) | undefined;
|
|
9600
|
+
/** Keeps `Tab` inside the panel while it is open, and marks the panel
|
|
9601
|
+
`aria-modal`. A press outside and Escape still close it. */
|
|
9602
|
+
modal?: (HelixHeadlessPopover["modal"]) | undefined;
|
|
8813
9603
|
/** Space between the trigger and the panel, in pixels. */
|
|
8814
9604
|
offset?: (HelixHeadlessPopover["offset"]) | undefined;
|
|
8815
9605
|
/** Preferred side.
|
|
@@ -8858,7 +9648,10 @@ Not `Loader`, which is the other thing this could be. A loader says the
|
|
|
8858
9648
|
page is busy; a bar says a named piece of work is running, and keeps its
|
|
8859
9649
|
place in the layout when the answer arrives and it becomes determinate. */
|
|
8860
9650
|
indeterminate?: (HelixHeadlessProgress["indeterminate"]) | undefined;
|
|
8861
|
-
/** Accessible name for what is in progress.
|
|
9651
|
+
/** Accessible name for what is in progress.
|
|
9652
|
+
|
|
9653
|
+
A visible label in the `label` slot names it instead, with the words it
|
|
9654
|
+
shows, so the name and the label cannot disagree. */
|
|
8862
9655
|
label?: (HelixHeadlessProgress["label"]) | undefined;
|
|
8863
9656
|
/** The locale the percentage is written in, such as `fr` for `72 %`.
|
|
8864
9657
|
|
|
@@ -9003,6 +9796,22 @@ not touch, and React reads that as a hydration mismatch. The absent
|
|
|
9003
9796
|
attribute *is* the column, which the stylesheet reads as the base rule, so
|
|
9004
9797
|
only `horizontal` has to be named. */
|
|
9005
9798
|
orientation?: (HelixHeadlessRadioGroup["orientation"]) | undefined;
|
|
9799
|
+
/** Whether a reader can see and focus the answer and cannot change it. A
|
|
9800
|
+
read-only group still submits its value.
|
|
9801
|
+
|
|
9802
|
+
React Aria's `isReadOnly`. A press on a radio is refused, and the arrow
|
|
9803
|
+
keys, Home and End leave focus on the answer, so Tab still reaches it and
|
|
9804
|
+
a reader hears it with the group's name. The group says `aria-readonly`.
|
|
9805
|
+
A script can still set `value`. */
|
|
9806
|
+
readonly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
|
|
9807
|
+
/** Whether a reader can see and focus the answer and cannot change it. A
|
|
9808
|
+
read-only group still submits its value.
|
|
9809
|
+
|
|
9810
|
+
React Aria's `isReadOnly`. A press on a radio is refused, and the arrow
|
|
9811
|
+
keys, Home and End leave focus on the answer, so Tab still reaches it and
|
|
9812
|
+
a reader hears it with the group's name. The group says `aria-readonly`.
|
|
9813
|
+
A script can still set `value`. */
|
|
9814
|
+
readOnly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
|
|
9006
9815
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
9007
9816
|
"default-value"?: (HelixHeadlessRadioGroup["defaultValue"]) | undefined;
|
|
9008
9817
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -9175,6 +9984,10 @@ export type HelixHeadlessRatingHelixBeforeChangeElementEvent =
|
|
|
9175
9984
|
HelixHeadlessRatingElementEvent<HelixBeforeChangeEvent>;
|
|
9176
9985
|
|
|
9177
9986
|
export type HelixHeadlessRatingVueProps = {
|
|
9987
|
+
/** Whether a reader can take the rating back to unrated: by pressing the
|
|
9988
|
+
chosen score again, or with Backspace or Delete. Zag's rating group
|
|
9989
|
+
clears the same way. */
|
|
9990
|
+
clearable?: (HelixHeadlessRating["clearable"]) | undefined;
|
|
9178
9991
|
/** How many marks there are. */
|
|
9179
9992
|
max?: (HelixHeadlessRating["max"]) | undefined;
|
|
9180
9993
|
/** The lowest score that can be given. A cleared rating shows this score.
|
|
@@ -9361,6 +10174,8 @@ export type HelixHeadlessRatingVueEvents = {
|
|
|
9361
10174
|
change: HelixHeadlessRatingElementEvent;
|
|
9362
10175
|
/** The score is about to change. Cancelable: cancel it to keep the current score. */
|
|
9363
10176
|
"helix-before-change": HelixHeadlessRatingHelixBeforeChangeElementEvent;
|
|
10177
|
+
/** The rating went back to unrated, under `clearable`. Sent after `input` and `change`. */
|
|
10178
|
+
"helix-clear": HelixHeadlessRatingElementEvent;
|
|
9364
10179
|
/** The score changed. */
|
|
9365
10180
|
input: HelixHeadlessRatingElementEvent;
|
|
9366
10181
|
};
|
|
@@ -9543,6 +10358,15 @@ imperatively later, and nothing is hydrating by then.
|
|
|
9543
10358
|
|
|
9544
10359
|
Here rather than on each control. */
|
|
9545
10360
|
name?: (HelixHeadlessSelect["name"]) | undefined;
|
|
10361
|
+
/** What the trigger shows for the chosen options: a function given them, in
|
|
10362
|
+
the order they appear, that returns text, an element or a Lit template.
|
|
10363
|
+
|
|
10364
|
+
For a trigger that shows more than the words, an avatar beside a name or a
|
|
10365
|
+
count of a long set, as React Aria's `SelectValue` takes children. The
|
|
10366
|
+
trigger is named by what this draws, so keep the words in it. Nothing
|
|
10367
|
+
chosen still shows `placeholder`. A property only, there being no way to
|
|
10368
|
+
write a function in markup. */
|
|
10369
|
+
valueContent?: (HelixHeadlessSelect["valueContent"]) | undefined;
|
|
9546
10370
|
/** Which option is chosen, as an index, or `-1` where none is.
|
|
9547
10371
|
|
|
9548
10372
|
Read off the listbox this renders, which owns the options and is where the
|
|
@@ -9575,6 +10399,12 @@ profile".
|
|
|
9575
10399
|
|
|
9576
10400
|
Absent hides the placeholder from screen readers. */
|
|
9577
10401
|
label?: (HelixHeadlessSkeleton["label"]) | undefined;
|
|
10402
|
+
/** Whether the content inside is still loading, which keeps it inert and
|
|
10403
|
+
draws the placeholder over it.
|
|
10404
|
+
|
|
10405
|
+
Absent shows the content. An empty skeleton is a placeholder whatever
|
|
10406
|
+
this says. Reflected, because the styled tier hides the content on it. */
|
|
10407
|
+
loading?: (HelixHeadlessSkeleton["loading"]) | undefined;
|
|
9578
10408
|
};
|
|
9579
10409
|
|
|
9580
10410
|
export type HelixHeadlessSkeletonVueEvents = {};
|
|
@@ -9606,6 +10436,25 @@ export type HelixHeadlessSliderHelixBeforeChangeElementEvent =
|
|
|
9606
10436
|
HelixHeadlessSliderElementEvent<HelixBeforeChangeEvent>;
|
|
9607
10437
|
|
|
9608
10438
|
export type HelixHeadlessSliderVueProps = {
|
|
10439
|
+
/** `Intl.NumberFormat` options the value is written with: a currency, a
|
|
10440
|
+
percent, a unit, or a number of decimals. Written as JSON in the
|
|
10441
|
+
attribute.
|
|
10442
|
+
|
|
10443
|
+
```html
|
|
10444
|
+
<helix-slider format-options='{"style":"currency","currency":"USD"}'></helix-slider>
|
|
10445
|
+
``` */
|
|
10446
|
+
"format-options"?: (HelixHeadlessSlider["formatOptions"]) | undefined;
|
|
10447
|
+
/** `Intl.NumberFormat` options the value is written with: a currency, a
|
|
10448
|
+
percent, a unit, or a number of decimals. Written as JSON in the
|
|
10449
|
+
attribute.
|
|
10450
|
+
|
|
10451
|
+
```html
|
|
10452
|
+
<helix-slider format-options='{"style":"currency","currency":"USD"}'></helix-slider>
|
|
10453
|
+
``` */
|
|
10454
|
+
formatOptions?: (HelixHeadlessSlider["formatOptions"]) | undefined;
|
|
10455
|
+
/** The locale `format-options` writes the value in, such as `de-DE`. Empty is
|
|
10456
|
+
the reader's own. */
|
|
10457
|
+
locale?: (HelixHeadlessSlider["locale"]) | undefined;
|
|
9609
10458
|
/** Shows the value at each mark. */
|
|
9610
10459
|
"marker-labels"?: (HelixHeadlessSlider["markerLabels"]) | undefined;
|
|
9611
10460
|
/** Shows the value at each mark. */
|
|
@@ -9648,6 +10497,12 @@ property, like every other word a control speaks. */
|
|
|
9648
10497
|
"minimum-label"?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
|
|
9649
10498
|
/** The name of a range's lower thumb, read after the slider's label. */
|
|
9650
10499
|
minimumLabel?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
|
|
10500
|
+
/** How many steps a range's two thumbs stay apart, as Zag's
|
|
10501
|
+
`minStepsBetweenThumbs`. A thumb pushed closer stops there. */
|
|
10502
|
+
"min-steps-between-thumbs"?: (HelixHeadlessSlider["minStepsBetweenThumbs"] | `${number}`) | undefined;
|
|
10503
|
+
/** How many steps a range's two thumbs stay apart, as Zag's
|
|
10504
|
+
`minStepsBetweenThumbs`. A thumb pushed closer stops there. */
|
|
10505
|
+
minStepsBetweenThumbs?: (HelixHeadlessSlider["minStepsBetweenThumbs"]) | undefined;
|
|
9651
10506
|
/** The direction the track runs. `vertical` stands it on end.
|
|
9652
10507
|
|
|
9653
10508
|
For a level rather than a quantity: a fader, a channel, anything a reader
|
|
@@ -9744,6 +10599,10 @@ imperatively later, and nothing is hydrating by then.
|
|
|
9744
10599
|
|
|
9745
10600
|
Here rather than on each control. */
|
|
9746
10601
|
name?: (HelixHeadlessSlider["name"]) | undefined;
|
|
10602
|
+
/** Writes a value as text, in place of `format-options`: words for a scale,
|
|
10603
|
+
or anything `Intl.NumberFormat` cannot say. A property, since a function
|
|
10604
|
+
cannot be written in an attribute. */
|
|
10605
|
+
formatter?: (HelixHeadlessSlider["formatter"]) | undefined;
|
|
9747
10606
|
};
|
|
9748
10607
|
|
|
9749
10608
|
export type HelixHeadlessSliderVueEvents = {
|
|
@@ -10221,6 +11080,28 @@ stylesheets. */
|
|
|
10221
11080
|
"default-checked"?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
10222
11081
|
/** Whether the control starts checked. A form reset returns it to this state. */
|
|
10223
11082
|
defaultChecked?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
11083
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
11084
|
+
read-only control still submits its value.
|
|
11085
|
+
|
|
11086
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
11087
|
+
the press is refused at the inner control, which keeps its box as it
|
|
11088
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
11089
|
+
`checked`, as it can set the value of a read-only text field.
|
|
11090
|
+
|
|
11091
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
11092
|
+
text fields. */
|
|
11093
|
+
readonly?: (HelixHeadlessSwitch["readOnly"]) | undefined;
|
|
11094
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
11095
|
+
read-only control still submits its value.
|
|
11096
|
+
|
|
11097
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
11098
|
+
the press is refused at the inner control, which keeps its box as it
|
|
11099
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
11100
|
+
`checked`, as it can set the value of a read-only text field.
|
|
11101
|
+
|
|
11102
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
11103
|
+
text fields. */
|
|
11104
|
+
readOnly?: (HelixHeadlessSwitch["readOnly"]) | undefined;
|
|
10224
11105
|
/** */
|
|
10225
11106
|
"aria-label"?: unknown;
|
|
10226
11107
|
/** The validation message shown under the control. It replaces the
|
|
@@ -10701,6 +11582,47 @@ export type HelixHeadlessTabVueEvents = {
|
|
|
10701
11582
|
"helix-select": HelixHeadlessTabHelixSelectElementEvent;
|
|
10702
11583
|
};
|
|
10703
11584
|
|
|
11585
|
+
/** `HelixHeadlessTagGroup` component event */
|
|
11586
|
+
export type HelixHeadlessTagGroupElementEvent<E = Event> = TypedEvent<
|
|
11587
|
+
HelixHeadlessTagGroup,
|
|
11588
|
+
E
|
|
11589
|
+
>;
|
|
11590
|
+
/** `helix-before-change` event type */
|
|
11591
|
+
export type HelixHeadlessTagGroupHelixBeforeChangeElementEvent =
|
|
11592
|
+
HelixHeadlessTagGroupElementEvent<HelixBeforeChangeEvent>;
|
|
11593
|
+
/** `helix-dismiss` event type */
|
|
11594
|
+
export type HelixHeadlessTagGroupHelixDismissElementEvent =
|
|
11595
|
+
HelixHeadlessTagGroupElementEvent<HelixDismissEvent>;
|
|
11596
|
+
|
|
11597
|
+
export type HelixHeadlessTagGroupVueProps = {
|
|
11598
|
+
/** The name of the set, such as "Filters", which a screen reader announces
|
|
11599
|
+
before its tags. */
|
|
11600
|
+
label?: (HelixHeadlessTagGroup["label"]) | undefined;
|
|
11601
|
+
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
11602
|
+
|
|
11603
|
+
Absent selects nothing, and the tags carry no selected state at all. */
|
|
11604
|
+
"selection-mode"?: (HelixHeadlessTagGroup["selectionMode"]) | undefined;
|
|
11605
|
+
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
11606
|
+
|
|
11607
|
+
Absent selects nothing, and the tags carry no selected state at all. */
|
|
11608
|
+
selectionMode?: (HelixHeadlessTagGroup["selectionMode"]) | undefined;
|
|
11609
|
+
/** The selected tags' values, separated by commas, since a value may hold a
|
|
11610
|
+
space.
|
|
11611
|
+
|
|
11612
|
+
Set it to start with tags selected. A tag's value is its `value`, or its
|
|
11613
|
+
words where it has none. */
|
|
11614
|
+
value?: (HelixHeadlessTagGroup["value"]) | undefined;
|
|
11615
|
+
};
|
|
11616
|
+
|
|
11617
|
+
export type HelixHeadlessTagGroupVueEvents = {
|
|
11618
|
+
/** Fired once a press has changed which tags are selected. */
|
|
11619
|
+
change: HelixHeadlessTagGroupElementEvent;
|
|
11620
|
+
/** Fired before a press changes which tags are selected, with the `value` it would leave. Cancelable. */
|
|
11621
|
+
"helix-before-change": HelixHeadlessTagGroupHelixBeforeChangeElementEvent;
|
|
11622
|
+
/** A tag's remove button was pressed, or Delete or Backspace on the focused tag. Bubbles from that tag, which is its `target`; remove the tag in response. Cancelable. */
|
|
11623
|
+
"helix-dismiss": HelixHeadlessTagGroupHelixDismissElementEvent;
|
|
11624
|
+
};
|
|
11625
|
+
|
|
10704
11626
|
/** `HelixHeadlessTag` component event */
|
|
10705
11627
|
export type HelixHeadlessTagElementEvent<E = Event> = TypedEvent<
|
|
10706
11628
|
HelixHeadlessTag,
|
|
@@ -10711,6 +11633,16 @@ export type HelixHeadlessTagHelixDismissElementEvent =
|
|
|
10711
11633
|
HelixHeadlessTagElementEvent<HelixDismissEvent>;
|
|
10712
11634
|
|
|
10713
11635
|
export type HelixHeadlessTagVueProps = {
|
|
11636
|
+
/** Takes the tag out of reach: its link and its remove button stop
|
|
11637
|
+
answering, and in a `Tag.Group` the arrow keys pass over it and it cannot
|
|
11638
|
+
be selected or removed. */
|
|
11639
|
+
disabled?: (HelixHeadlessTag["disabled"]) | undefined;
|
|
11640
|
+
/** Makes the label a link to this address. */
|
|
11641
|
+
href?: (HelixHeadlessTag["href"]) | undefined;
|
|
11642
|
+
/** What the tag stands for in its group's `value`.
|
|
11643
|
+
|
|
11644
|
+
Absent is the tag's own words, its category first. */
|
|
11645
|
+
value?: (HelixHeadlessTag["value"]) | undefined;
|
|
10714
11646
|
/** Whether the element shows a control that dismisses it. */
|
|
10715
11647
|
dismissible?: (HelixHeadlessTag["dismissible"]) | undefined;
|
|
10716
11648
|
/** The dismiss control's label, read by screen readers.
|
|
@@ -10727,6 +11659,18 @@ derive one rather than dash-casing it, so this would otherwise be
|
|
|
10727
11659
|
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
10728
11660
|
would catch. */
|
|
10729
11661
|
dismissLabel?: (HelixHeadlessTag["dismissLabel"]) | undefined;
|
|
11662
|
+
/** Whether the tag holds its group's tab stop.
|
|
11663
|
+
|
|
11664
|
+
Written by `Tag.Group` on every tag it holds, and unset outside one, which
|
|
11665
|
+
is how a tag knows it is a row. No attribute: it is coordination between
|
|
11666
|
+
elements, the same shape `Toggle.focusable` has. */
|
|
11667
|
+
focusable?: (HelixHeadlessTag["focusable"]) | undefined;
|
|
11668
|
+
/** Whether the tag is selected, in a `Tag.Group` that selects.
|
|
11669
|
+
|
|
11670
|
+
Written by the group from its own `value`, and unset where nothing can be
|
|
11671
|
+
selected, which is what keeps `aria-selected` off a set that does not
|
|
11672
|
+
select. */
|
|
11673
|
+
selected?: (HelixHeadlessTag["selected"]) | undefined;
|
|
10730
11674
|
};
|
|
10731
11675
|
|
|
10732
11676
|
export type HelixHeadlessTagVueEvents = {
|
|
@@ -10785,6 +11729,12 @@ element sends two entries, and that is what this does. */
|
|
|
10785
11729
|
maxlength?: (HelixHeadlessTextarea["maxLength"] | `${number}`) | undefined;
|
|
10786
11730
|
/** The most characters the value can have. */
|
|
10787
11731
|
maxLength?: (HelixHeadlessTextarea["maxLength"]) | undefined;
|
|
11732
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
11733
|
+
it grows with all of its text. */
|
|
11734
|
+
"max-rows"?: (HelixHeadlessTextarea["maxRows"] | `${number}`) | undefined;
|
|
11735
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
11736
|
+
it grows with all of its text. */
|
|
11737
|
+
maxRows?: (HelixHeadlessTextarea["maxRows"]) | undefined;
|
|
10788
11738
|
/** The fewest characters the value can have.
|
|
10789
11739
|
|
|
10790
11740
|
Forwarded to the real `<textarea>` rather than checked here, which is what
|
|
@@ -10940,6 +11890,16 @@ a typed time, which is then invalid. */
|
|
|
10940
11890
|
Handed to the list, which offers them as unavailable, and checked against
|
|
10941
11891
|
a typed time, which is then invalid. */
|
|
10942
11892
|
disableTimes?: (HelixHeadlessTimeInput["disableTimes"]) | undefined;
|
|
11893
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
11894
|
+
meridiem, `h23` for twenty-four. Absent is the locale's own.
|
|
11895
|
+
|
|
11896
|
+
Handed to the list. The value is `HH:mm` on twenty-four hours either way. */
|
|
11897
|
+
"hour-cycle"?: (HelixHeadlessTimeInput["hourCycle"]) | undefined;
|
|
11898
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
11899
|
+
meridiem, `h23` for twenty-four. Absent is the locale's own.
|
|
11900
|
+
|
|
11901
|
+
Handed to the list. The value is `HH:mm` on twenty-four hours either way. */
|
|
11902
|
+
hourCycle?: (HelixHeadlessTimeInput["hourCycle"]) | undefined;
|
|
10943
11903
|
/** Language tag the times are written in.
|
|
10944
11904
|
|
|
10945
11905
|
Absent uses the runtime's own. */
|
|
@@ -10991,7 +11951,12 @@ removes rather than as "Remove" said once per time. */
|
|
|
10991
11951
|
**The name goes in**, so a row of them is heard as which one each
|
|
10992
11952
|
removes rather than as "Remove" said once per time. */
|
|
10993
11953
|
removeLabel?: (HelixHeadlessTimeInput["removeLabel"]) | undefined;
|
|
10994
|
-
/**
|
|
11954
|
+
/** Whether times carry their seconds: the value is `HH:mm:ss`, a typed time
|
|
11955
|
+
may give them, the field writes them, and the list's `step` counts seconds.
|
|
11956
|
+
See Time Picker's `seconds`. */
|
|
11957
|
+
seconds?: (HelixHeadlessTimeInput["seconds"]) | undefined;
|
|
11958
|
+
/** How far apart the offered times are, in minutes, or in seconds with
|
|
11959
|
+
`seconds`. */
|
|
10995
11960
|
step?: (HelixHeadlessTimeInput["step"]) | undefined;
|
|
10996
11961
|
/** Whether the field shows the time in the local style or as the value
|
|
10997
11962
|
itself.
|
|
@@ -11032,6 +11997,20 @@ not touch, and React reads that as a hydration mismatch. The absent
|
|
|
11032
11997
|
attribute *is* the list, which the stylesheet reads as the base rule, so
|
|
11033
11998
|
only the departure has to be named. */
|
|
11034
11999
|
variant?: (HelixHeadlessTimeInput["variant"]) | undefined;
|
|
12000
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
12001
|
+
sighted reader sees as dashes. */
|
|
12002
|
+
"empty-segment-label"?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
|
|
12003
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
12004
|
+
sighted reader sees as dashes. */
|
|
12005
|
+
emptySegmentLabel?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
|
|
12006
|
+
/** Whether the field is a row of segments, one for each part of the date or
|
|
12007
|
+
time, in place of a line of text.
|
|
12008
|
+
|
|
12009
|
+
Each segment is set with digits or the arrow keys, in the order the
|
|
12010
|
+
locale writes them, so a reader types a date the way they write one and
|
|
12011
|
+
no format has to be read back. The picker still opens from the trigger
|
|
12012
|
+
and with Alt+Down. */
|
|
12013
|
+
segmented?: (HelixHeadlessTimeInput["segmented"]) | undefined;
|
|
11035
12014
|
/** Whether the value is locked. A read-only control still submits its value.
|
|
11036
12015
|
|
|
11037
12016
|
**Enforced by refusing every request in one place**, which is the seam this
|
|
@@ -11244,6 +12223,20 @@ A time not on the step is simply never offered, so it is not an error to
|
|
|
11244
12223
|
name one, and naming every time in the list is how the empty state is
|
|
11245
12224
|
reached honestly rather than by handing over an empty range. */
|
|
11246
12225
|
disableTimes?: (HelixHeadlessTimePicker["disableTimes"]) | undefined;
|
|
12226
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12227
|
+
meridiem, `h23` for twenty-four.
|
|
12228
|
+
|
|
12229
|
+
Absent is the locale's own, which is right for a reader's own form. Set it
|
|
12230
|
+
where every reader must see the same clock whatever their language, as a
|
|
12231
|
+
timetable does. The value is `HH:mm` on twenty-four hours either way. */
|
|
12232
|
+
"hour-cycle"?: (HelixHeadlessTimePicker["hourCycle"]) | undefined;
|
|
12233
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12234
|
+
meridiem, `h23` for twenty-four.
|
|
12235
|
+
|
|
12236
|
+
Absent is the locale's own, which is right for a reader's own form. Set it
|
|
12237
|
+
where every reader must see the same clock whatever their language, as a
|
|
12238
|
+
timetable does. The value is `HH:mm` on twenty-four hours either way. */
|
|
12239
|
+
hourCycle?: (HelixHeadlessTimePicker["hourCycle"]) | undefined;
|
|
11247
12240
|
/** What the wheel of hours is called, read by screen readers. */
|
|
11248
12241
|
"hour-label"?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
11249
12242
|
/** What the wheel of hours is called, read by screen readers. */
|
|
@@ -11340,7 +12333,20 @@ else set needs. */
|
|
|
11340
12333
|
readOnly?: (HelixHeadlessTimePicker["readOnly"]) | undefined;
|
|
11341
12334
|
/** Stops the form from submitting while no time is chosen. */
|
|
11342
12335
|
required?: (HelixHeadlessTimePicker["required"]) | undefined;
|
|
11343
|
-
/**
|
|
12336
|
+
/** What the wheel of seconds is called, read by screen readers. */
|
|
12337
|
+
"second-label"?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12338
|
+
/** What the wheel of seconds is called, read by screen readers. */
|
|
12339
|
+
secondLabel?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12340
|
+
/** Whether times carry their seconds.
|
|
12341
|
+
|
|
12342
|
+
The value becomes `HH:mm:ss`, each time is written with its seconds, the
|
|
12343
|
+
wheels take a column of seconds, and `step` counts seconds, the unit
|
|
12344
|
+
`<input type="time">` counts in. A list at a step of one second is 86,400
|
|
12345
|
+
rows, so give `seconds` a `step` and bounds that keep it a list, or use
|
|
12346
|
+
the wheels. */
|
|
12347
|
+
seconds?: (HelixHeadlessTimePicker["seconds"]) | undefined;
|
|
12348
|
+
/** How far apart the offered times are, in minutes, or in seconds with
|
|
12349
|
+
`seconds`.
|
|
11344
12350
|
|
|
11345
12351
|
Fifteen, which is four rows an hour and ninety-six in a day: enough that a
|
|
11346
12352
|
reader scrolls rather than hunts, and few enough that the list is a list.
|
|
@@ -11528,7 +12534,11 @@ export type HelixHeadlessToastHelixDismissElementEvent =
|
|
|
11528
12534
|
HelixHeadlessToastElementEvent<HelixDismissEvent>;
|
|
11529
12535
|
|
|
11530
12536
|
export type HelixHeadlessToastVueProps = {
|
|
11531
|
-
/**
|
|
12537
|
+
/** The key that takes focus to the stack and back, such as `F8` or `Alt+T`:
|
|
12538
|
+
keys joined by `+`, the last one the key. Empty turns it off. */
|
|
12539
|
+
hotkey?: (HelixHeadlessToast["hotkey"]) | undefined;
|
|
12540
|
+
/** Accessible name for the region, with `{hotkey}` filled in. Translate it with
|
|
12541
|
+
the rest of your interface. */
|
|
11532
12542
|
label?: (HelixHeadlessToast["label"]) | undefined;
|
|
11533
12543
|
/** Which corner or edge the stack sits at.
|
|
11534
12544
|
|
|
@@ -11605,6 +12615,21 @@ reader while looking correct to everybody else. Worse, setting both draws
|
|
|
11605
12615
|
it twice. One property moves the label the consumer already has to give,
|
|
11606
12616
|
and cannot be used to remove it. */
|
|
11607
12617
|
labelPlacement?: (HelixHeadlessToggleGroup["labelPlacement"]) | undefined;
|
|
12618
|
+
/** The direction the items run. `vertical` puts them in a column, and the up
|
|
12619
|
+
and down arrows move between them.
|
|
12620
|
+
|
|
12621
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
12622
|
+
orientation?: (HelixHeadlessToggleGroup["orientation"]) | undefined;
|
|
12623
|
+
/** Whether one item is chosen, as a radio group, or several can be pressed,
|
|
12624
|
+
as a toolbar of buttons with `aria-pressed`.
|
|
12625
|
+
|
|
12626
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
12627
|
+
"selection-mode"?: (HelixHeadlessToggleGroup["selectionMode"]) | undefined;
|
|
12628
|
+
/** Whether one item is chosen, as a radio group, or several can be pressed,
|
|
12629
|
+
as a toolbar of buttons with `aria-pressed`.
|
|
12630
|
+
|
|
12631
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
12632
|
+
selectionMode?: (HelixHeadlessToggleGroup["selectionMode"]) | undefined;
|
|
11608
12633
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
11609
12634
|
"default-value"?: (HelixHeadlessToggleGroup["defaultValue"]) | undefined;
|
|
11610
12635
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -11682,6 +12707,10 @@ work as before once focus is in it.
|
|
|
11682
12707
|
No attribute: it is coordination between elements, and a consumer has no
|
|
11683
12708
|
reason to set it. */
|
|
11684
12709
|
focusable?: (HelixHeadlessToggleGroup["focusable"]) | undefined;
|
|
12710
|
+
/** The pressed values as a list, under `selection-mode="multiple"`, in the
|
|
12711
|
+
order the items are written. Written, it presses exactly those items.
|
|
12712
|
+
Where one item is chosen, it is that one value, or none. */
|
|
12713
|
+
values?: (HelixHeadlessToggleGroup["values"]) | undefined;
|
|
11685
12714
|
};
|
|
11686
12715
|
|
|
11687
12716
|
export type HelixHeadlessToggleGroupVueEvents = {
|
|
@@ -11752,6 +12781,11 @@ group sits in holds the stop. No attribute: it is coordination between
|
|
|
11752
12781
|
elements, and `tabindex` on a host the consumer rendered is the change a
|
|
11753
12782
|
React consumer's hydration reports and does not patch up. */
|
|
11754
12783
|
focusable?: (HelixHeadlessToggle["focusable"]) | undefined;
|
|
12784
|
+
/** Whether the item is pressed, in a group where several can be, and
|
|
12785
|
+
`undefined` in a group where one is chosen.
|
|
12786
|
+
|
|
12787
|
+
Written by the group, like `selected`, so no attribute. */
|
|
12788
|
+
pressed?: (HelixHeadlessToggle["pressed"]) | undefined;
|
|
11755
12789
|
};
|
|
11756
12790
|
|
|
11757
12791
|
export type HelixHeadlessToggleVueEvents = {
|
|
@@ -11854,6 +12888,22 @@ worked. */
|
|
|
11854
12888
|
|
|
11855
12889
|
It moves if that side does not fit. */
|
|
11856
12890
|
placement?: (HelixHeadlessTooltip["placement"]) | undefined;
|
|
12891
|
+
/** What shows the bubble. Unset, it is a pointer resting on the trigger and
|
|
12892
|
+
keyboard focus. `focus` is keyboard focus alone, for a hint a pointer does
|
|
12893
|
+
not need, such as a shortcut a mouse reader has no use for. */
|
|
12894
|
+
"show-on"?: (HelixHeadlessTooltip["showOn"]) | undefined;
|
|
12895
|
+
/** What shows the bubble. Unset, it is a pointer resting on the trigger and
|
|
12896
|
+
keyboard focus. `focus` is keyboard focus alone, for a hint a pointer does
|
|
12897
|
+
not need, such as a shortcut a mouse reader has no use for. */
|
|
12898
|
+
showOn?: (HelixHeadlessTooltip["showOn"]) | undefined;
|
|
12899
|
+
/** How long after a tooltip hides the next one still shows at once, with no
|
|
12900
|
+
`delay`, in milliseconds. The same skip delay Radix uses. Zero makes every
|
|
12901
|
+
tooltip wait. */
|
|
12902
|
+
"skip-delay"?: (HelixHeadlessTooltip["skipDelay"] | `${number}`) | undefined;
|
|
12903
|
+
/** How long after a tooltip hides the next one still shows at once, with no
|
|
12904
|
+
`delay`, in milliseconds. The same skip delay Radix uses. Zero makes every
|
|
12905
|
+
tooltip wait. */
|
|
12906
|
+
skipDelay?: (HelixHeadlessTooltip["skipDelay"]) | undefined;
|
|
11857
12907
|
/** The id of a box to keep the bubble inside. Defaults to the viewport.
|
|
11858
12908
|
|
|
11859
12909
|
Resolved the way `for` is, so an id in the same tree, which is what lets a
|
|
@@ -11951,6 +13001,14 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
|
|
|
11951
13001
|
"next-label"?: (HelixHeadlessTour["nextLabel"]) | undefined;
|
|
11952
13002
|
/** Label for the control that goes on. */
|
|
11953
13003
|
nextLabel?: (HelixHeadlessTour["nextLabel"]) | undefined;
|
|
13004
|
+
/** Draws each stop's place in the run in its panel, as well as saying it. */
|
|
13005
|
+
progress?: (HelixHeadlessTour["progress"]) | undefined;
|
|
13006
|
+
/** Each stop's place in the run, with `{index}` and `{count}` filled in.
|
|
13007
|
+
Translate it with the rest of your text. */
|
|
13008
|
+
"progress-label"?: (HelixHeadlessTour["progressLabel"]) | undefined;
|
|
13009
|
+
/** Each stop's place in the run, with `{index}` and `{count}` filled in.
|
|
13010
|
+
Translate it with the rest of your text. */
|
|
13011
|
+
progressLabel?: (HelixHeadlessTour["progressLabel"]) | undefined;
|
|
11954
13012
|
/** Label for the control that leaves the tour. */
|
|
11955
13013
|
"skip-label"?: (HelixHeadlessTour["skipLabel"]) | undefined;
|
|
11956
13014
|
/** Label for the control that leaves the tour. */
|
|
@@ -12025,6 +13083,9 @@ closed tour, a closed tour shows nothing, and nothing can disagree. */
|
|
|
12025
13083
|
first?: (HelixHeadlessTourStop["first"]) | undefined;
|
|
12026
13084
|
/** The id of the element the stop points at. */
|
|
12027
13085
|
for?: (HelixHeadlessTourStop["for"]) | undefined;
|
|
13086
|
+
/** The panel's name, where neither the `heading` slot nor the content holds a
|
|
13087
|
+
heading. */
|
|
13088
|
+
label?: (HelixHeadlessTourStop["label"]) | undefined;
|
|
12028
13089
|
/** Whether the stop is the last one. Its next control then shows `doneLabel`. */
|
|
12029
13090
|
last?: (HelixHeadlessTourStop["last"]) | undefined;
|
|
12030
13091
|
/** Label for the control that goes on. */
|
|
@@ -12037,6 +13098,15 @@ closed tour, a closed tour shows nothing, and nothing can disagree. */
|
|
|
12037
13098
|
"skip-label"?: (HelixHeadlessTourStop["skipLabel"]) | undefined;
|
|
12038
13099
|
/** Label for the control that leaves the tour. */
|
|
12039
13100
|
skipLabel?: (HelixHeadlessTourStop["skipLabel"]) | undefined;
|
|
13101
|
+
/** What kind of stop this is. Unset, it is a bubble pointing at its target.
|
|
13102
|
+
|
|
13103
|
+
- `dialog`: a panel in the middle of the window, over a backdrop
|
|
13104
|
+
- `floating`: a panel in a corner of the window
|
|
13105
|
+
- `wait`: nothing shown, while the tour waits for the target to be on the page
|
|
13106
|
+
|
|
13107
|
+
Reflected, because the styled tier places a dialog and a floating panel by
|
|
13108
|
+
it, and unset at rest, so no default is written onto the host. */
|
|
13109
|
+
type?: (HelixHeadlessTourStop["type"]) | undefined;
|
|
12040
13110
|
};
|
|
12041
13111
|
|
|
12042
13112
|
export type HelixHeadlessTourStopVueEvents = {
|
|
@@ -12815,6 +13885,10 @@ export type CustomCssProperties = {
|
|
|
12815
13885
|
"--date-picker-column-count"?: (string) | undefined;
|
|
12816
13886
|
/** How thick the ring is drawn, derived from `hole`. */
|
|
12817
13887
|
"--donut-chart-stroke"?: (string) | undefined;
|
|
13888
|
+
/** How far a swipe, or a snap point, has moved the panel across, in pixels, toward the right. */
|
|
13889
|
+
"--drawer-swipe-x"?: (string) | undefined;
|
|
13890
|
+
/** How far a swipe, or a snap point, has moved the panel down, in pixels. */
|
|
13891
|
+
"--drawer-swipe-y"?: (string) | undefined;
|
|
12818
13892
|
/** How many rows the strip lays out. The component writes it from the data, and the stylesheet that draws the strip reads it. */
|
|
12819
13893
|
"--heatmap-rows"?: (string) | undefined;
|
|
12820
13894
|
/** The tone of the cell it is set on. The component writes it, and the stylesheet that paints the cell reads it. */
|
|
@@ -12895,6 +13969,8 @@ export type CustomCssProperties = {
|
|
|
12895
13969
|
"--table-template"?: (string) | undefined;
|
|
12896
13970
|
/** How long this message stays, in milliseconds, for a progress hint. */
|
|
12897
13971
|
"--toast-duration"?: (string) | undefined;
|
|
13972
|
+
/** How far a swipe has moved the message across, in pixels, toward the right. */
|
|
13973
|
+
"--toast-swipe-x"?: (string) | undefined;
|
|
12898
13974
|
/** How deep this row sits, counting from one as `aria-level` does, for the indent. */
|
|
12899
13975
|
"--tree-level"?: (string) | undefined;
|
|
12900
13976
|
/** The media's own aspect ratio, once it is known. `--video-aspect-ratio` overrides it. */
|
|
@@ -12933,7 +14009,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12933
14009
|
HelixHeadlessAppHeaderVueProps,
|
|
12934
14010
|
HelixHeadlessAppHeaderVueEvents
|
|
12935
14011
|
>;
|
|
12936
|
-
/** Shows how a total is made up. Each numeric column of the table is a part, the parts add up to the total at each reading, and the top edge is that total. The thickness of a band is that part's amount. Use 'LineChart' with 'area' to show how each series moved: it fills each series from the floor separately, so the fills overlap. Use this chart to show the composition: it stacks the series. **The value axis always starts at zero**, as in 'BarChart', because a band's thickness is its value. For the same reason there is no streamgraph mode, which moves the baseline. To show how the composition changed, set 'share'. Band edges are straight between readings by default. A smoothed curve through one sum can dip below the curve through the sum beneath it, which draws a part as less than zero. Other curves: - 'curve="smooth"': for a stack read as an overall shape. - 'curve="step"': holds each reading and jumps at the midpoint, so stacked edges stay in order, as with 'straight'. Use it for a quantity that changes at a moment, such as a headcount or a price. 'share' draws each reading as 100 percent, so the top edge is flat and the bands show each part's share. Use it to see which part grew. The default shows whether the total grew. The drawing is
|
|
14012
|
+
/** Shows how a total is made up. Each numeric column of the table is a part, the parts add up to the total at each reading, and the top edge is that total. The thickness of a band is that part's amount. Use 'LineChart' with 'area' to show how each series moved: it fills each series from the floor separately, so the fills overlap. Use this chart to show the composition: it stacks the series. **The value axis always starts at zero**, as in 'BarChart', because a band's thickness is its value. For the same reason there is no streamgraph mode, which moves the baseline. To show how the composition changed, set 'share'. Band edges are straight between readings by default. A smoothed curve through one sum can dip below the curve through the sum beneath it, which draws a part as less than zero. Other curves: - 'curve="smooth"': for a stack read as an overall shape. - 'curve="step"': holds each reading and jumps at the midpoint, so stacked edges stay in order, as with 'straight'. Use it for a quantity that changes at a moment, such as a headcount or a price. 'share' draws each reading as 100 percent, so the top edge is flat and the bands show each part's share. Use it to see which part grew. The default shows whether the total grew. The drawing is hidden from screen readers. The text summary gives the latest reading's total and each part's share of it, and the table beside the chart has every number. **The plot is read by key.** It takes focus, named by 'label' or the caption. The left and right arrows move from reading to reading, Home and End go to the first and the last, and the up and down arrows move among the series of a reading. The tooltip follows, the 'live' part says the reading in words, and Escape puts the tooltip away. Every numeric column is a part, so leave a total column out of the table the chart reads, or it is counted twice. A negative reading is drawn as zero. */
|
|
12937
14013
|
"helix-headless-area-chart": DefineCustomElement<
|
|
12938
14014
|
HelixHeadlessAreaChart,
|
|
12939
14015
|
HelixHeadlessAreaChartVueProps,
|
|
@@ -12951,13 +14027,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12951
14027
|
HelixHeadlessAvatarVueProps,
|
|
12952
14028
|
HelixHeadlessAvatarVueEvents
|
|
12953
14029
|
>;
|
|
12954
|
-
/** Badge wraps the element it decorates and pins an indicator to its corner, so the wrapped element keeps its place in the layout. What the indicator shows depends on 'value': - A 'value' of zero shows no indicator. - No 'value' shows a dot. - Any other value shows the value. Above 'max', the indicator shows '{max}+', so its width stays the same as the count grows. A count is announced from its own text, and 'label' replaces that with a fuller name, such as '4 unread'. A dot needs a 'label'. Without one, the dot is a colored circle that screen readers do not announce. **
|
|
14030
|
+
/** Badge wraps the element it decorates and pins an indicator to its corner, so the wrapped element keeps its place in the layout. What the indicator shows depends on 'value': - A 'value' of zero shows no indicator. - No 'value' shows a dot. - Any other value shows the value. Above 'max', the indicator shows '{max}+', so its width stays the same as the count grows. A count is announced from its own text, and 'label' replaces that with a fuller name, such as '4 unread'. A dot needs a 'label'. Without one, the dot is a colored circle that screen readers do not announce. **A badge wrapped around a control is not part of the control's name.** It is a status of its own, read when it changes and when a reader moves to it, so focusing a button inside a badge announces the button's name alone. A reference from the control to the count would point into the badge's shadow root, which the platform does not allow. **Put the badge inside the control to have its count read with the control's name**, as Web Awesome and Shoelace do: '<button>Inbox <helix-badge value="8" label="8 unread"></helix-badge></button>' is the button "Inbox 8 unread", and stays current as the count changes. The styled tier's 'placement="inline"' draws the mark in the line for that case. */
|
|
12955
14031
|
"helix-headless-badge": DefineCustomElement<
|
|
12956
14032
|
HelixHeadlessBadge,
|
|
12957
14033
|
HelixHeadlessBadgeVueProps,
|
|
12958
14034
|
HelixHeadlessBadgeVueEvents
|
|
12959
14035
|
>;
|
|
12960
|
-
/** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is
|
|
14036
|
+
/** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is hidden from screen readers, so they get the numbers themselves. The 'summary' part names the chart, from 'label' or the table's caption, and gives each series' highest reading. **The plot is read by key.** It takes focus, named by 'label' or the caption. The arrows along the categories move from one to the next, which is left and right for columns and up and down for 'orientation="horizontal"'. Home and End go to the first and the last, and the other pair of arrows moves among the series of a category. The tooltip follows, the 'live' part says the reading in words, and Escape puts the tooltip away. The component writes the custom properties below with numbers it computes, and the stylesheet that draws the chart reads them. Do not set them yourself. */
|
|
12961
14037
|
"helix-headless-bar-chart": DefineCustomElement<
|
|
12962
14038
|
HelixHeadlessBarChart,
|
|
12963
14039
|
HelixHeadlessBarChartVueProps,
|
|
@@ -12987,13 +14063,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12987
14063
|
HelixHeadlessButtonGroupVueProps,
|
|
12988
14064
|
HelixHeadlessButtonGroupVueEvents
|
|
12989
14065
|
>;
|
|
12990
|
-
/** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button calls 'requestSubmit()' on its form, which runs validation, unlike 'submit()'. A 'submit' listener reads 'event.submitter' as 'null', because the platform accepts only a native submit button there. The button's 'name' and 'value' are in the form data, so read them from 'new FormData(form)' to tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. */
|
|
14066
|
+
/** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button calls 'requestSubmit()' on its form, which runs validation, unlike 'submit()'. A 'submit' listener reads 'event.submitter' as 'null', because the platform accepts only a native submit button there. The button's 'name' and 'value' are in the form data, so read them from 'new FormData(form)' to tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. Set 'pending' while the action a press started is still running. The button keeps focus and refuses presses, and a reader on it hears 'pending-label'. */
|
|
12991
14067
|
"helix-headless-button": DefineCustomElement<
|
|
12992
14068
|
HelixHeadlessButton,
|
|
12993
14069
|
HelixHeadlessButtonVueProps,
|
|
12994
14070
|
HelixHeadlessButtonVueEvents
|
|
12995
14071
|
>;
|
|
12996
|
-
/** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon region's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. Set 'tone-label' to say the name in another language. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. The tone's name stays on the region around it. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
|
|
14072
|
+
/** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon region's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. Set 'tone-label' to say the name in another language. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. The tone's name stays on the region around it. Set 'dismissible' for a note a reader may put away, as Shoelace's 'closable' alert does. The button fires 'helix-dismiss' and the callout stays until a listener removes it, so the page decides whether it comes back. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
|
|
12997
14073
|
"helix-headless-callout": DefineCustomElement<
|
|
12998
14074
|
HelixHeadlessCallout,
|
|
12999
14075
|
HelixHeadlessCalloutVueProps,
|
|
@@ -13017,7 +14093,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13017
14093
|
HelixHeadlessCanvasVueProps,
|
|
13018
14094
|
HelixHeadlessCanvasVueEvents
|
|
13019
14095
|
>;
|
|
13020
|
-
/** The header, body, and footer regions are slots, because they have no state, behavior, or API of their own. You bring your own markup, so a title can be a real '<h2>'. The host is the surface. The element itself takes the border, the radius, and the grid, so you style 'Card' directly and there is no wrapper part to reach through with '::part'. Name the card with 'aria-label' or 'aria-labelledby'. These are the only names that work with server rendering, because reading a title from the light DOM needs a DOM, and the server has none. */
|
|
14096
|
+
/** The header, body, and footer regions are slots, because they have no state, behavior, or API of their own. You bring your own markup, so a title can be a real '<h2>'. The host is the surface. The element itself takes the border, the radius, and the grid, so you style 'Card' directly and there is no wrapper part to reach through with '::part'. Name the card with 'aria-label' or 'aria-labelledby'. These are the only names that work with server rendering, because reading a title from the light DOM needs a DOM, and the server has none. **A named card is a group**, so a reader entering it hears its name; an unnamed one has no role, since a group with no name only adds "group" to what a reader says. 'header-actions' and 'footer-actions' hold controls at the end of the header's and the footer's line, as Web Awesome's card does. While one holds something, its line is a 'header-row' or 'footer-row' part; otherwise there is no wrapper and every region is a bare slot. A server cannot see slotted content, so served actions sit on their own line until the script runs. */
|
|
13021
14097
|
"helix-headless-card": DefineCustomElement<
|
|
13022
14098
|
HelixHeadlessCard,
|
|
13023
14099
|
HelixHeadlessCardVueProps,
|
|
@@ -13047,7 +14123,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13047
14123
|
HelixHeadlessChatVueProps,
|
|
13048
14124
|
HelixHeadlessChatVueEvents
|
|
13049
14125
|
>;
|
|
13050
|
-
/** The host is the group. It has 'role="group"' through internals, and 'label' names it. Without a name, screen readers announce the checkboxes as separate controls. **Each checkbox submits its own value.** Checkboxes are already form-associated, and a native group is several inputs that share a name, so the group adds no form value of its own. It adds the grouping, a shared 'name' that you write once, and one place to read and write the whole set. 'value' is the checked values, separated by commas, in the order the checkboxes are written, read from the boxes themselves. Setting it checks exactly those values and unchecks the rest. A checkbox is a member wherever it sits inside the group, in a row or a grid cell of your own, unless another group inside this one holds it. A field of another kind inside the group, such as an "Other" text field, sends its own 'input' and 'change' past the group. **The group shows the message you set in 'feedback'.** It is form-associated only for validity and never calls 'setFormValue', so the browser does not generate a message for it. */
|
|
14126
|
+
/** The host is the group. It has 'role="group"' through internals, and 'label' names it. Without a name, screen readers announce the checkboxes as separate controls. **Each checkbox submits its own value.** Checkboxes are already form-associated, and a native group is several inputs that share a name, so the group adds no form value of its own. It adds the grouping, a shared 'name' that you write once, and one place to read and write the whole set. 'value' is the checked values, separated by commas, in the order the checkboxes are written, read from the boxes themselves. Setting it checks exactly those values and unchecks the rest. 'select-all' draws a box above the set that checks every enabled box, or unchecks them all once every one is checked. It shows a dash while only some are checked, and changes the set through the same cancelable 'helix-before-change' a box does. A checkbox is a member wherever it sits inside the group, in a row or a grid cell of your own, unless another group inside this one holds it. A field of another kind inside the group, such as an "Other" text field, sends its own 'input' and 'change' past the group. **The group shows the message you set in 'feedback'.** It is form-associated only for validity and never calls 'setFormValue', so the browser does not generate a message for it. */
|
|
13051
14127
|
"helix-headless-checkbox-group": DefineCustomElement<
|
|
13052
14128
|
HelixHeadlessCheckboxGroup,
|
|
13053
14129
|
HelixHeadlessCheckboxGroupVueProps,
|
|
@@ -13059,7 +14135,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13059
14135
|
HelixHeadlessCheckboxVueProps,
|
|
13060
14136
|
HelixHeadlessCheckboxVueEvents
|
|
13061
14137
|
>;
|
|
13062
|
-
/** Renders a '<pre><code>' pair: 'pre' keeps the whitespace, and 'code' marks it as code. Long lines scroll inside the block and do not wrap, because a line break can be significant in code. A copy button is on by default. Set 'no-copy' to remove it. The button copies the slotted text, so there is no second copy of the code to keep in sync. For a fragment of code inside a sentence, use 'Code'. Set 'diff' to show a change. Put a unified diff, the output of 'git diff' or 'diff -u', in the same slot, and the block draws the lines it added and removed. The block never computes a diff itself. Line numbers come from the hunk headers and are hidden from the accessibility tree. Changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change does not depend on color. Each file in the patch is its own block under its own name, and its copy button copies the new version of the file. 'variant="split"' shows the old version beside the new, each removal opposite its replacement. On the server, the slot renders as ordinary code, so a diff first appears as the patch text in a '<pre>'. The client makes the same first render, which keeps hydration clean, and draws the diff once it can read the content. Diff mode is experimental. The rest of the family is stable. */
|
|
14138
|
+
/** Renders a '<pre><code>' pair: 'pre' keeps the whitespace, and 'code' marks it as code. Long lines scroll inside the block and do not wrap, because a line break can be significant in code. A copy button is on by default. Set 'no-copy' to remove it. The button copies the slotted text, so there is no second copy of the code to keep in sync. For a fragment of code inside a sentence, use 'Code'. Set 'line-numbers' to number the lines in a gutter beside the code, hidden from the accessibility tree and left out of a copy. Set 'highlight' to a function that turns the code into highlighted markup, such as one wrapping Shiki or Prism, and the block draws what it returns; the code stays in the slot, so the copy button and the page's own text are the code as written. Set 'diff' to show a change. Put a unified diff, the output of 'git diff' or 'diff -u', in the same slot, and the block draws the lines it added and removed. The block never computes a diff itself. Line numbers come from the hunk headers and are hidden from the accessibility tree. Changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change does not depend on color. Each file in the patch is its own block under its own name, and its copy button copies the new version of the file. 'variant="split"' shows the old version beside the new, each removal opposite its replacement. On the server, the slot renders as ordinary code, so a diff first appears as the patch text in a '<pre>'. The client makes the same first render, which keeps hydration clean, and draws the diff once it can read the content. Diff mode is experimental. The rest of the family is stable. */
|
|
13063
14139
|
"helix-headless-code-block": DefineCustomElement<
|
|
13064
14140
|
HelixHeadlessCodeBlock,
|
|
13065
14141
|
HelixHeadlessCodeBlockVueProps,
|
|
@@ -13071,31 +14147,31 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13071
14147
|
HelixHeadlessCodeVueProps,
|
|
13072
14148
|
HelixHeadlessCodeVueEvents
|
|
13073
14149
|
>;
|
|
13074
|
-
/** 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%)', and 'hsl(0 100% 50%)'. 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 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. */
|
|
14150
|
+
/** 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%)', and 'hsl(0 100% 50%)'. 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. */
|
|
13075
14151
|
"helix-headless-color-input": DefineCustomElement<
|
|
13076
14152
|
HelixHeadlessColorInput,
|
|
13077
14153
|
HelixHeadlessColorInputVueProps,
|
|
13078
14154
|
HelixHeadlessColorInputVueEvents
|
|
13079
14155
|
>;
|
|
13080
|
-
/** 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. */
|
|
14156
|
+
/** 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. Set 'color-words' to speak the names in another language. */
|
|
13081
14157
|
"helix-headless-color-picker": DefineCustomElement<
|
|
13082
14158
|
HelixHeadlessColorPicker,
|
|
13083
14159
|
HelixHeadlessColorPickerVueProps,
|
|
13084
14160
|
HelixHeadlessColorPickerVueEvents
|
|
13085
14161
|
>;
|
|
13086
|
-
/** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. ArrowDown and ArrowUp open the list on the chosen option, and Enter chooses the highlighted one. Space, Home, End and letters edit the text, and Enter in a closed field is left to the form. Emptying the field and leaving it clears a single choice; Escape puts the chosen words back. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
|
|
14162
|
+
/** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. ArrowDown and ArrowUp open the list on the chosen option, and Enter chooses the highlighted one. As typing narrows the list, a screen reader hears how many options are left, such as "3 results". Space, Home, End and letters edit the text, and Enter in a closed field is left to the form. Emptying the field and leaving it clears a single choice; Escape puts the chosen words back, and a second Escape on the closed field clears the choice. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
|
|
13087
14163
|
"helix-headless-combobox": DefineCustomElement<
|
|
13088
14164
|
HelixHeadlessCombobox,
|
|
13089
14165
|
HelixHeadlessComboboxVueProps,
|
|
13090
14166
|
HelixHeadlessComboboxVueEvents
|
|
13091
14167
|
>;
|
|
13092
|
-
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. */
|
|
14168
|
+
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. An option with 'href' is a link to a page, which the browser follows once the palette has closed. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. As typing narrows the list, a screen reader hears how many commands are left, such as "3 commands". */
|
|
13093
14169
|
"helix-headless-command": DefineCustomElement<
|
|
13094
14170
|
HelixHeadlessCommand,
|
|
13095
14171
|
HelixHeadlessCommandVueProps,
|
|
13096
14172
|
HelixHeadlessCommandVueEvents
|
|
13097
14173
|
>;
|
|
13098
|
-
/** Copies text to the clipboard and confirms the copy. The platform gives no feedback for a clipboard write, so without a confirmation a press that copies looks the same as one that fails. The confirmation and the event wait for the write to finish. The browser can refuse a clipboard write, for example on an insecure origin, in a document that is not focused, or after a gesture that does not qualify. A refused write
|
|
14174
|
+
/** Copies text to the clipboard and confirms the copy. The platform gives no feedback for a clipboard write, so without a confirmation a press that copies looks the same as one that fails. The confirmation and the event wait for the write to finish. The browser can refuse a clipboard write, for example on an insecure origin, in a document that is not focused, or after a gesture that does not qualify. A refused write, or nothing to copy, names the button with 'error-label' for the same moment a copy shows 'copied-label', draws a cross, and sends 'helix-copy-error'. 'from' copies from another element on the page: its text, an attribute written 'id[attribute]', or a property written 'id.property', read at the press. It takes the place of 'value'. It replaces Button's render and its press, so it never submits a form or sends a command: 'type', 'command', 'commandfor' and the 'form*' overrides have no effect, and the 'start' and 'end' slots and the 'text' part are not rendered. An 'aria-label' on the element names it before a copy, in place of 'label'. */
|
|
13099
14175
|
"helix-headless-copy-button": DefineCustomElement<
|
|
13100
14176
|
HelixHeadlessCopyButton,
|
|
13101
14177
|
HelixHeadlessCopyButtonVueProps,
|
|
@@ -13107,13 +14183,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13107
14183
|
HelixHeadlessDataTableVueProps,
|
|
13108
14184
|
HelixHeadlessDataTableVueEvents
|
|
13109
14185
|
>;
|
|
13110
|
-
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger
|
|
14186
|
+
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger and ArrowDown open the calendar with focus on the selected day, Tab moves between the calendar's controls without leaving it, and Escape closes it and returns focus to the field. A press into the field opens the calendar too. Tab into the field opens nothing, and Tab out of the field closes the calendar. With 'segmented', the field is a row of segments in place of the text: a month, a day and a year in the order the locale writes them, each set with digits or the arrow keys. Alt+Down opens the calendar from a segment. */
|
|
13111
14187
|
"helix-headless-date-input": DefineCustomElement<
|
|
13112
14188
|
HelixHeadlessDateInput,
|
|
13113
14189
|
HelixHeadlessDateInputVueProps,
|
|
13114
14190
|
HelixHeadlessDateInputVueEvents
|
|
13115
14191
|
>;
|
|
13116
|
-
/** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
|
|
14192
|
+
/** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. 'max-view' makes the heading a button that steps back to the months of the year, and with 'year' to a page of years, as Zag's date picker does. The arrows, Home, End and the page keys move there, Enter or a press chooses, and Escape goes back to the days. 'isDateUnavailable' and 'dayContent' are properties for a script: a rule that bars dates, and what each day shows in place of its number. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
|
|
13117
14193
|
"helix-headless-date-picker": DefineCustomElement<
|
|
13118
14194
|
HelixHeadlessDatePicker,
|
|
13119
14195
|
HelixHeadlessDatePickerVueProps,
|
|
@@ -13131,7 +14207,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13131
14207
|
HelixHeadlessDescriptionListVueProps,
|
|
13132
14208
|
HelixHeadlessDescriptionListVueEvents
|
|
13133
14209
|
>;
|
|
13134
|
-
/** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. While it is open, the page behind it does not scroll. */
|
|
14210
|
+
/** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. While it is open, the page behind it does not scroll. The dialog is described by the words at the start of its body: the elements in the default slot before the first one that is or holds a control. A question above a form describes the dialog, and the form does not. An 'aria-describedby' on the host replaces it. Set 'alert' for a dialog that interrupts to ask for an answer, such as a confirmation before a deletion. It is an 'alertdialog', which a screen reader announces with its description as it opens. Set 'dismissible' to draw a close control, labeled by 'dismiss-label'. */
|
|
13135
14211
|
"helix-headless-dialog": DefineCustomElement<
|
|
13136
14212
|
HelixHeadlessDialog,
|
|
13137
14213
|
HelixHeadlessDialogVueProps,
|
|
@@ -13143,13 +14219,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13143
14219
|
HelixHeadlessDividerVueProps,
|
|
13144
14220
|
HelixHeadlessDividerVueEvents
|
|
13145
14221
|
>;
|
|
13146
|
-
/** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. The ring is
|
|
14222
|
+
/** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. The ring is hidden from screen readers. The 'summary' part names the chart, from 'label' or the table's caption, and gives each slice's share, and the table beside the chart has every amount. **The ring is read by key.** The plot takes focus, named by 'label' or the caption. Every arrow moves from slice to slice, the right and down arrows to the next, and Home and End go to the first and the last. The tooltip follows, the 'live' part says the slice in words, and Escape puts the tooltip away. */
|
|
13147
14223
|
"helix-headless-donut-chart": DefineCustomElement<
|
|
13148
14224
|
HelixHeadlessDonutChart,
|
|
13149
14225
|
HelixHeadlessDonutChartVueProps,
|
|
13150
14226
|
HelixHeadlessDonutChartVueEvents
|
|
13151
14227
|
>;
|
|
13152
|
-
/** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
|
|
14228
|
+
/** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape, in a browser without 'closedby' as well. **A touch or a pen swipes it away**, toward the edge it came from, resolved against the writing direction. A swipe past halfway, or a quick one, closes it through the same request as every other way out. 'snap-points' lists the fractions of the panel a reader can leave on screen, such as '0.5 1' for a sheet that rests half open: it opens at the smallest, and a swipe settles at the nearest. While a swipe moves the panel, the distance is written on it as '--drawer-swipe-x' and '--drawer-swipe-y'. 'swipe="false"' turns swiping off. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
|
|
13153
14229
|
"helix-headless-drawer": DefineCustomElement<
|
|
13154
14230
|
HelixHeadlessDrawer,
|
|
13155
14231
|
HelixHeadlessDrawerVueProps,
|
|
@@ -13173,7 +14249,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13173
14249
|
HelixHeadlessEmptyVueProps,
|
|
13174
14250
|
HelixHeadlessEmptyVueEvents
|
|
13175
14251
|
>;
|
|
13176
|
-
/** File Input keeps a real '<input type="file">' and makes it invisible. Only a file input opens the file picker: the browser opens it for a click on the input or on a '<label>' that points at it, and a script cannot open it on its own. A custom button would still call '.click()' on a hidden input, and a screen reader would find two controls. The input holds the label, the name, the validity, and the focus, and the visible trigger is a '<label for>'. The label is not focusable. The input is, and Enter and Space on it open the picker. */
|
|
14252
|
+
/** File Input keeps a real '<input type="file">' and makes it invisible. Only a file input opens the file picker: the browser opens it for a click on the input or on a '<label>' that points at it, and a script cannot open it on its own. A custom button would still call '.click()' on a hidden input, and a screen reader would find two controls. The input holds the label, the name, the validity, and the focus, and the visible trigger is a '<label for>'. The label is not focusable. The input is, and Enter and Space on it open the picker. Files arrive from the picker, a drop, or a paste onto the field, and each one is screened: 'accept', 'max-file-size', 'max-files' and your own 'validate' can refuse it. A refused file is left out, 'helix-reject' lists each one with its reason, and a reader hears 'rejected-text' with the names filled in. 'directory' asks the picker for a folder. */
|
|
13177
14253
|
"helix-headless-file-input": DefineCustomElement<
|
|
13178
14254
|
HelixHeadlessFileInput,
|
|
13179
14255
|
HelixHeadlessFileInputVueProps,
|
|
@@ -13203,13 +14279,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13203
14279
|
HelixHeadlessFilterOperatorVueProps,
|
|
13204
14280
|
HelixHeadlessFilterOperatorVueEvents
|
|
13205
14281
|
>;
|
|
13206
|
-
/** Tokens are your own elements, slotted in. A filter can be a facet with a prefix, a saved query, or a range, and these belong to your model, so the element does not render tokens from a list of strings. Removing a token is a request the element fires, and you apply it. Combobox works the other way: its tokens show a selection it owns, drawn from the options it was given. 'value' is the typed text. Every keystroke fires 'input' with the text on the element, so a table can narrow as the user types.
|
|
14282
|
+
/** Tokens are your own elements, slotted in. A filter can be a facet with a prefix, a saved query, or a range, and these belong to your model, so the element does not render tokens from a list of strings. Removing a token is a request the element fires, and you apply it. Combobox works the other way: its tokens show a selection it owns, drawn from the options it was given. 'value' is the typed text. Every keystroke fires 'input' with the text on the element, so a table can narrow as the user types. A form receives the text under 'name', and then one more entry under 'name' for each token: its 'value' attribute, or for a 'FilterChip', its field and values written 'field:values' as the field reads them typed. Backspace in an empty field fires 'helix-dismiss' on the last token, the same event its remove control fires, so one handler covers the pointer and the keyboard. **Typed filters.** The field parses only the fields you declare. Write 'FilterField' elements, usually inside the 'FilterMenu' slotted into 'start', so the picker and the text share one set. On Enter, the field reads the text against them. 'disposition:refunded,settled' and '-disposition:refunded' fire 'helix-facet' exactly as ticking those values in the picker would, and the parsed text is removed. Everything else stays, so 'refund tuesday disposition:settled' is a filter and a search at once. Helix defines the punctuation and you define every word. 'grammar.ts' has the full rule, so read it before you rely on it. A field with no 'FilterField' in it parses nothing. A field whose values cannot be listed, such as 'assignee:ada', goes directly inside this element, outside the menu. It is not assigned to a slot, so nothing draws it and the menu has no page for it, and the grammar still reads it. **Suggestions.** Slot options into 'suggestions' and the field shows them, moves through them with the arrow keys, and presses one on Enter. The option fires its own 'helix-select', and you decide what choosing it means. Keys before a colon and values after it use the same panel with different contents. 'filter-suggestions' narrows the panel to the options whose words hold the term at the caret, after its colon, ignoring case and accents, and hides the rest. 'readFilterText' is exported so you can narrow it yourself against partly typed text. While the panel is open, a reader hears how many suggestions it offers. The panel opens when it has options and closes when it has none, and a choice does not close it, so after picking a key you see its values next. Use 'selectionStart' and 'setSelectionRange' to write a completion back and put the caret after it, or the next parse reads the wrong term. **State.** Three things have three different owners: - 'value' is the text. The user types, the element applies it, and 'input' reports it. Setting 'value' seeds or corrects the text, and the next keystroke overwrites it, even in React. To control the value, cancel 'helix-before-change' and write the value you want, as with every field in this library. 'default-value' seeds the field. - 'open' is the suggestions panel. Cancel 'helix-before-open' or 'helix-before-close' to control it, and use 'default-open' to seed it. - Tokens are your elements in a slot and hold no state. A token goes when you remove it from your markup after 'helix-dismiss'. A 'FilterChip' naming a declared field works differently, because the picker holds what is ticked and removing the chip alone would leave its value ticked in the hidden menu. Its dismissal is treated as the field being filtered by nothing, so it fires 'helix-facet' like every other change, and the chip goes when the filter goes. */
|
|
13207
14283
|
"helix-headless-filter-input": DefineCustomElement<
|
|
13208
14284
|
HelixHeadlessFilterInput,
|
|
13209
14285
|
HelixHeadlessFilterInputVueProps,
|
|
13210
14286
|
HelixHeadlessFilterInputVueEvents
|
|
13211
14287
|
>;
|
|
13212
|
-
/** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. */
|
|
14288
|
+
/** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **'relative' shows the same reading in words**, such as "3 hours ago" at 'long', "3 hr. ago" at 'short' and "3h ago" at 'narrow', the styles 'sl-relative-time' offers. 'numeric="always"' says "1 day ago" where the default says "yesterday". **'date-style' and 'time-style' take each locale's own pattern**, such as "Tuesday, August 4, 2026" at 'full', and stand in for the separate fields, which 'Intl' refuses beside them. 'hour-cycle' sets a twelve or twenty-four hour clock either way. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. */
|
|
13213
14289
|
"helix-headless-format-date": DefineCustomElement<
|
|
13214
14290
|
HelixHeadlessFormatDate,
|
|
13215
14291
|
HelixHeadlessFormatDateVueProps,
|
|
@@ -13221,7 +14297,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13221
14297
|
HelixHeadlessGraphVueProps,
|
|
13222
14298
|
HelixHeadlessGraphVueEvents
|
|
13223
14299
|
>;
|
|
13224
|
-
/** A grid of cells, each colored by a tone. 'rows="1"' makes a status strip, and 'rows="7"' makes a contribution graph. GitHub's contribution graph uses five discrete levels, which a set of tones covers. Color in a heatmap is per cell. In every other Helix chart, color is per series, so ninety differently colored cells would need ninety series. **The data is a real '<table>' named by 'for'**, as in every Helix chart, and the table is the accessible representation. Hide it with 'data-hidden-visually', and screen readers still read it. A cell takes its tone from its own 'data-tone', or from 'thresholds' and 'tones' applied to its value. 'data-tone' wins, so when you already know a day was degraded, you can set the tone directly. **The headless tier does not resolve tone names.** A tone named 'success' writes '--heatmap-tone: var(--heatmap-tone-success)', and the styled tier or your own stylesheet defines that property. The headless tier does not use 'var(--helix-color-*)'. */
|
|
14300
|
+
/** A grid of cells, each colored by a tone. 'rows="1"' makes a status strip, and 'rows="7"' makes a contribution graph. GitHub's contribution graph uses five discrete levels, which a set of tones covers. Color in a heatmap is per cell. In every other Helix chart, color is per series, so ninety differently colored cells would need ninety series. **The data is a real '<table>' named by 'for'**, as in every Helix chart, and the table is the accessible representation. Hide it with 'data-hidden-visually', and screen readers still read it. A cell takes its tone from its own 'data-tone', or from 'thresholds' and 'tones' applied to its value. 'data-tone' wins, so when you already know a day was degraded, you can set the tone directly. **The headless tier does not resolve tone names.** A tone named 'success' writes '--heatmap-tone: var(--heatmap-tone-success)', and the styled tier or your own stylesheet defines that property. The headless tier does not use 'var(--helix-color-*)'. **The strip is read by key.** It takes focus once it has cells. The up and down arrows move a cell, the left and right arrows move a column, which is a week with 'rows="7"', and Home and End go to the first and the last. The tooltip follows, the 'live' part says the cell's row in words, and Escape puts the tooltip away. */
|
|
13225
14301
|
"helix-headless-heatmap": DefineCustomElement<
|
|
13226
14302
|
HelixHeadlessHeatmap,
|
|
13227
14303
|
HelixHeadlessHeatmapVueProps,
|
|
@@ -13233,7 +14309,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13233
14309
|
HelixHeadlessIconButtonVueProps,
|
|
13234
14310
|
HelixHeadlessIconButtonVueEvents
|
|
13235
14311
|
>;
|
|
13236
|
-
/** The icons are Phosphor, drawn on a 256 box at stroke-width 16. Each glyph renders its full inner markup, because most icons are several elements, each with its own stroke and fill. The markup is generated at build time from SVG files in this repository and never comes from user input, so rendering it with 'unsafeSVG' is safe. The '<svg>' carries 'fill="currentColor"'. The generator keeps only the inner markup, and Phosphor sets its fill on the root tag that the generator discards. Without it, the 65 solid glyphs fall back to black and disappear on a dark background. Shapes that set their own 'fill' or 'stroke' are unaffected. A name with no match renders nothing, and the element fires 'error', so a typo in a name can be heard. An icon is decorative by default and hidden from assistive technology. Set 'label' only when the icon is the only carrier of meaning, such as in a button with no text. An 'aria-label' on the element works too: the element is then an image with that name. */
|
|
14312
|
+
/** The icons are Phosphor, drawn on a 256 box at stroke-width 16. Each glyph renders its full inner markup, because most icons are several elements, each with its own stroke and fill. The markup is generated at build time from SVG files in this repository and never comes from user input, so rendering it with 'unsafeSVG' is safe. The '<svg>' carries 'fill="currentColor"'. The generator keeps only the inner markup, and Phosphor sets its fill on the root tag that the generator discards. Without it, the 65 solid glyphs fall back to black and disappear on a dark background. Shapes that set their own 'fill' or 'stroke' are unaffected. **A name is looked up in a registry.** The family's entry registers the whole set, so any name in it draws. The element's own entry, '@fusion.dev/helix-headless/icon/root', registers none: a page that imports it and calls 'registerIcons' with the glyphs it names ships those and no others. 'registerIconLibrary' resolves names under a prefix of your own, such as 'lucide:camera', at once or later, and the element fires 'load' when a glyph that came later is drawn. A glyph registered after the element rendered is drawn then. A name with no match renders nothing, and the element fires 'error', so a typo in a name can be heard. An icon is decorative by default and hidden from assistive technology. Set 'label' only when the icon is the only carrier of meaning, such as in a button with no text. An 'aria-label' on the element works too: the element is then an image with that name. */
|
|
13237
14313
|
"helix-headless-icon": DefineCustomElement<
|
|
13238
14314
|
HelixHeadlessIcon,
|
|
13239
14315
|
HelixHeadlessIconVueProps,
|
|
@@ -13251,31 +14327,31 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13251
14327
|
HelixHeadlessInputVueProps,
|
|
13252
14328
|
HelixHeadlessInputVueEvents
|
|
13253
14329
|
>;
|
|
13254
|
-
/** Renders a '<kbd>' element. Each element holds one key, except when you use 'keys'. For a sequence or a chord, write one element per key and put the separator between them as text, such as "then" or "plus". 'keys' renders the right glyphs for the platform. Given 'mod', it renders '⌘K' on Apple devices and 'Ctrl+K' everywhere else. A '⌘K' typed into a template is wrong for anyone on Windows. The element binds the shortcut only when 'within' is set. By default it draws the key and listens for nothing. */
|
|
14330
|
+
/** Renders a '<kbd>' element. Each element holds one key, except when you use 'keys'. For a sequence or a chord, write one element per key and put the separator between them as text, such as "then" or "plus". 'keys' renders the right glyphs for the platform. Given 'mod', it renders '⌘K' on Apple devices and 'Ctrl+K' everywhere else. A '⌘K' typed into a template is wrong for anyone on Windows. The element binds the shortcut only when 'within' is set. By default it draws the key and listens for nothing. **'for' names the control the shortcut works**, and the key writes its chord onto that control's 'aria-keyshortcuts', in the platform's words ('Meta+K' on an Apple keyboard, 'Control+K' elsewhere), so a screen reader announces the shortcut with the control. A chord the page wrote there itself is left alone, and the key takes back only what it added. */
|
|
13255
14331
|
"helix-headless-kbd": DefineCustomElement<
|
|
13256
14332
|
HelixHeadlessKbd,
|
|
13257
14333
|
HelixHeadlessKbdVueProps,
|
|
13258
14334
|
HelixHeadlessKbdVueEvents
|
|
13259
14335
|
>;
|
|
13260
|
-
/** Renders a legend as a list, separate from any chart, so any chart can use one. Set 'for' to the table the chart reads, and the legend takes its entries from that table, so the two always match. 'entries' sets how the table is read: - 'series': one entry per data column, named by the header row. Use it for a line or bar chart. - 'categories': one entry per body row. Use it for a donut, whose slices are the rows and which has no axis to name them on. - 'measures': drops the first data column. Use it for a scatter. The table is resolved on the client. There is no server pass. */
|
|
14336
|
+
/** Renders a legend as a list, separate from any chart, so any chart can use one. Set 'for' to the table the chart reads, and the legend takes its entries from that table, so the two always match. 'entries' sets how the table is read: - 'series': one entry per data column, named by the header row. Use it for a line or bar chart. - 'categories': one entry per body row. Use it for a donut, whose slices are the rows and which has no axis to name them on. - 'measures': drops the first data column. Use it for a scatter. The table is resolved on the client. There is no server pass. **'toggles' makes each entry a button that hides its series.** Every chart reading the same table draws without a hidden series and fits its scale to the rest, and the series keeps its color. The button says whether its series is shown with 'aria-pressed'. 'hidden-series' holds the hidden names, so a page can start with some hidden or read which are. */
|
|
13261
14337
|
"helix-headless-legend": DefineCustomElement<
|
|
13262
14338
|
HelixHeadlessLegend,
|
|
13263
14339
|
HelixHeadlessLegendVueProps,
|
|
13264
14340
|
HelixHeadlessLegendVueEvents
|
|
13265
14341
|
>;
|
|
13266
|
-
/** Wraps one piece of content in the lightbox, such as a picture, a video frame, or a chart. The lightbox shows one item at a time, and the root decides which. An item that is not current is hidden and stays in the DOM, as a 'TabPanel' does. Crawlers can read it, it is in the server-rendered markup, and an '<img>' that has decoded does not decode again when you go back to it. */
|
|
14342
|
+
/** Wraps one piece of content in the lightbox, such as a picture, a video frame, or a chart. The lightbox shows one item at a time, and the root decides which. Each item is a 'group' with the role description 'slide', named by its 'label' or, without one, by its place in the set, such as "2 of 5", as the APG carousel pattern names a slide. The lightbox supplies both words, so they are translated on the lightbox. An item that is not current is hidden and stays in the DOM, as a 'TabPanel' does. Crawlers can read it, it is in the server-rendered markup, and an '<img>' that has decoded does not decode again when you go back to it. */
|
|
13267
14343
|
"helix-headless-lightbox-item": DefineCustomElement<
|
|
13268
14344
|
HelixHeadlessLightboxItem,
|
|
13269
14345
|
HelixHeadlessLightboxItemVueProps,
|
|
13270
14346
|
HelixHeadlessLightboxItemVueEvents
|
|
13271
14347
|
>;
|
|
13272
|
-
/** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
|
|
14348
|
+
/** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. Set 'controls' for the viewer's own previous, next and close controls, named by 'previous-label', 'next-label' and 'dismiss-label'. Without it, compose the chrome yourself in the 'header' and 'footer' slots, with buttons that send '--previous', '--next' and '--close'. Each item is a slide: a 'group' with the role description in 'slide-role-label', named by its 'label' or by 'slide-label'. A touch or a pen swiped across the picture shows the next or the previous item, the way the line of text runs. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
|
|
13273
14349
|
"helix-headless-lightbox": DefineCustomElement<
|
|
13274
14350
|
HelixHeadlessLightbox,
|
|
13275
14351
|
HelixHeadlessLightboxVueProps,
|
|
13276
14352
|
HelixHeadlessLightboxVueEvents
|
|
13277
14353
|
>;
|
|
13278
|
-
/** A line chart shows the shape of each series: where the readings went. The scale covers the range of the data. Including zero in the range of a series that moves between 980 and 1020 would flatten the line into a rule across the top of the box. 'BarChart' always starts at zero, because a bar's length is its value. Set 'zero' when the distance from zero is the point. Every series shares one scale, as in the bar chart. 'area' fills each series down to the floor on its own, so the fills overlap. For a total made of parts, use 'Area Chart', which stacks the series so the top edge is the total and each band is a share. The labels are HTML beside the drawing, as in 'BarChart'. Text inside an '<svg>' that fills its box scales with the box, so the same 'font-size' can render at 10px in a narrow chart and 43px in a wide one. The table is the accessible representation, and the drawing is
|
|
14354
|
+
/** A line chart shows the shape of each series: where the readings went. The scale covers the range of the data. Including zero in the range of a series that moves between 980 and 1020 would flatten the line into a rule across the top of the box. 'BarChart' always starts at zero, because a bar's length is its value. Set 'zero' when the distance from zero is the point. Every series shares one scale, as in the bar chart. 'area' fills each series down to the floor on its own, so the fills overlap. For a total made of parts, use 'Area Chart', which stacks the series so the top edge is the total and each band is a share. The labels are HTML beside the drawing, as in 'BarChart'. Text inside an '<svg>' that fills its box scales with the box, so the same 'font-size' can render at 10px in a narrow chart and 43px in a wide one. The table is the accessible representation, and the drawing is hidden from screen readers, who get the numbers. The 'summary' part names the chart, from 'label' or the table's caption, and gives each series' latest reading. **The plot is read by key.** It takes focus, named by 'label' or the caption. The left and right arrows move from reading to reading, Home and End go to the first and the last, and the up and down arrows move among the series of a reading. The tooltip follows, the 'live' part says the reading in words, and Escape puts the tooltip away. */
|
|
13279
14355
|
"helix-headless-line-chart": DefineCustomElement<
|
|
13280
14356
|
HelixHeadlessLineChart,
|
|
13281
14357
|
HelixHeadlessLineChartVueProps,
|
|
@@ -13293,13 +14369,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13293
14369
|
HelixHeadlessListVueProps,
|
|
13294
14370
|
HelixHeadlessListVueEvents
|
|
13295
14371
|
>;
|
|
13296
|
-
/** The listbox is the control, and options are its items. A Select is a listbox with a trigger in front of it, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. They differ only in what opens the list and what filters it. With 'multiple' set, 'value' is a comma-separated string, like 'Checkbox.Group''s, because 'MixinControllerValue' holds a string. The form receives one entry per selected option, as a native '<select multiple>' sends it, so your server does not split on commas. Selected and active are separate. The selected option is the value. The active option is where the keyboard is: the arrow keys move it, and 'aria-activedescendant' points to it while focus stays on the list. The arrow keys, Home, End, PageUp and PageDown move the highlight, and typed letters move it to the next option whose words start with them. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. With 'multiple', Space toggles the highlighted option, Shift with an arrow adds the option it moves to, and Control+A or Command+A chooses every option, or none where all are chosen. In a filter field, Space, Home, End and letters edit the text. */
|
|
14372
|
+
/** The listbox is the control, and options are its items. A Select is a listbox with a trigger in front of it, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. They differ only in what opens the list and what filters it. With 'multiple' set, 'value' is a comma-separated string, like 'Checkbox.Group''s, because 'MixinControllerValue' holds a string. The form receives one entry per selected option, as a native '<select multiple>' sends it, so your server does not split on commas. Selected and active are separate. The selected option is the value. The active option is where the keyboard is: the arrow keys move it, and 'aria-activedescendant' points to it while focus stays on the list. The arrow keys, Home, End, PageUp and PageDown move the highlight, and typed letters move it to the next option whose words start with them. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. With 'multiple', Space toggles the highlighted option, Shift with an arrow adds the option it moves to, Shift with Home or End adds every option from the highlight to that end, and Control+A or Command+A chooses every option, or none where all are chosen. In a filter field, Space, Home, End and letters edit the text. An option with 'href' is a link: Enter or a press follows it and selects nothing, and moving onto it with the arrows does not follow it. As a filter narrows the list, a screen reader hears how many options are left, such as "3 results", from 'result-label' and 'results-label'. A filter that leaves none says 'empty-text'. */
|
|
13297
14373
|
"helix-headless-listbox": DefineCustomElement<
|
|
13298
14374
|
HelixHeadlessListbox,
|
|
13299
14375
|
HelixHeadlessListboxVueProps,
|
|
13300
14376
|
HelixHeadlessListboxVueEvents
|
|
13301
14377
|
>;
|
|
13302
|
-
/** Draws two concentric circles: a track and a moving arc. The track shows the arc as a proportion of a whole, and costs one element. **The center is a slot, empty by default.** Put your logo there once, where your app wraps the loader. When nothing is slotted, nothing extra is rendered. Slotted content does not rotate. Only the arc moves, so a logo stays readable. The role is set on the host through 'ElementInternals'. A 'role' in the shadow root would leave the host itself without a role in the light DOM, and a 'role' attribute on the host would be missing from React server-rendered markup. */
|
|
14378
|
+
/** Draws two concentric circles: a track and a moving arc. The track shows the arc as a proportion of a whole, and costs one element. **The center is a slot, empty by default.** Put your logo there once, where your app wraps the loader. When nothing is slotted, nothing extra is rendered. Slotted content does not rotate. Only the arc moves, so a logo stays readable. The role is set on the host through 'ElementInternals'. A 'role' in the shadow root would leave the host itself without a role in the light DOM, and a 'role' attribute on the host would be missing from React server-rendered markup. **'for' names the region being loaded**, and the loader sets 'aria-busy="true"' on it for as long as the loader is on the page, so a screen reader waits for the region rather than reading it half filled. Two loaders in one region hold it busy until the last one leaves. **'delay' keeps a quick load from flashing a loader.** The loader stays hidden, and silent, for that many milliseconds, and appears only if the work is still going. */
|
|
13303
14379
|
"helix-headless-loader": DefineCustomElement<
|
|
13304
14380
|
HelixHeadlessLoader,
|
|
13305
14381
|
HelixHeadlessLoaderVueProps,
|
|
@@ -13413,13 +14489,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13413
14489
|
HelixHeadlessNotificationVueProps,
|
|
13414
14490
|
HelixHeadlessNotificationVueEvents
|
|
13415
14491
|
>;
|
|
13416
|
-
/** Notifications are slotted children. Each one is your own markup, with an avatar, a link, or a button in it. Feeds usually hold tens of items, so writing them out lets an item hold anything. The list does not virtualize. Windowing needs the list to own the data, and here you own it, so N notifications are N elements. For a feed of thousands, use a data table with a custom cell. Read state is reported to you. Marking read goes from the root to the item and from the item to you, so a canceled 'helix-read' changes nothing, and if you own 'read', nothing changes until you set it. 'unread' is derived from the items and written to an attribute, so a stylesheet and a badge can both use it without counting. */
|
|
14492
|
+
/** Notifications are slotted children. Each one is your own markup, with an avatar, a link, or a button in it. Feeds usually hold tens of items, so writing them out lets an item hold anything. The list does not virtualize. Windowing needs the list to own the data, and here you own it, so N notifications are N elements. For a feed of thousands, use a data table with a custom cell. Read state is reported to you. Marking read goes from the root to the item and from the item to you, so a canceled 'helix-read' changes nothing, and if you own 'read', nothing changes until you set it. 'unread' is derived from the items and written to an attribute, so a stylesheet and a badge can both use it without counting. **The feed is one 'Tab' stop for its rows.** Each row takes focus itself and is read by its label. 'ArrowDown' and 'ArrowUp' move to the next and the previous row, 'Home' and 'End' to the first and the last, and 'PageDown' and 'PageUp' move a row on or back from anywhere inside one, as in the APG feed pattern. The controls inside a row stay in the 'Tab' order. Set 'total' when the feed holds one page of a longer list, and each row says its place in the whole of it. */
|
|
13417
14493
|
"helix-headless-notifications": DefineCustomElement<
|
|
13418
14494
|
HelixHeadlessNotifications,
|
|
13419
14495
|
HelixHeadlessNotificationsVueProps,
|
|
13420
14496
|
HelixHeadlessNotificationsVueEvents
|
|
13421
14497
|
>;
|
|
13422
|
-
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. */
|
|
14498
|
+
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. On iOS and iPadOS the field is a text field described as a number field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. */
|
|
13423
14499
|
"helix-headless-number-input": DefineCustomElement<
|
|
13424
14500
|
HelixHeadlessNumberInput,
|
|
13425
14501
|
HelixHeadlessNumberInputVueProps,
|
|
@@ -13437,7 +14513,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13437
14513
|
HelixHeadlessOptionGroupVueProps,
|
|
13438
14514
|
HelixHeadlessOptionGroupVueEvents
|
|
13439
14515
|
>;
|
|
13440
|
-
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. */
|
|
14516
|
+
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. An option with 'href' is a link: choosing it follows the link and selects nothing, as an entry in a command palette that goes to a page does. */
|
|
13441
14517
|
"helix-headless-option": DefineCustomElement<
|
|
13442
14518
|
HelixHeadlessOption,
|
|
13443
14519
|
HelixHeadlessOptionVueProps,
|
|
@@ -13467,13 +14543,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13467
14543
|
HelixHeadlessPaginationSummaryVueProps,
|
|
13468
14544
|
HelixHeadlessPaginationSummaryVueEvents
|
|
13469
14545
|
>;
|
|
13470
|
-
/** Each cell is its own '<input>', so every box has a real focus ring, caret, and tab stop. Input longer than one character is treated as a paste, in any cell. This covers pasting, a browser autofilling an SMS code, and a password manager, which all put the whole code into the focused box. A six-character code that arrives in cell three fills from cell three. The code is one value to a form. The cells are in a shadow root and submit nothing. The host is form-associated and submits the joined string, which also carries validity and responds to a form reset. Only the first cell has 'autocomplete="one-time-code"', because the hint applies to the whole field. The row of cells always runs left to right, with 'dir="ltr"', including in Arabic and Hebrew. The first box is the leftmost, a paste fills to the right, and the right arrow moves to the next box. The label, hint, and feedback follow the page's direction. */
|
|
14546
|
+
/** Each cell is its own '<input>', so every box has a real focus ring, caret, and tab stop. Input longer than one character is treated as a paste, in any cell. This covers pasting, a browser autofilling an SMS code, and a password manager, which all put the whole code into the focused box. A six-character code that arrives in cell three fills from cell three. The code is one value to a form. The cells are in a shadow root and submit nothing. The host is form-associated and submits the joined string, which also carries validity and responds to a form reset. Only the first cell has 'autocomplete="one-time-code"', because the hint applies to the whole field. 'autosubmit' submits the form once the last box is filled, through the form's default button where there is one. 'format' draws separators between the boxes, such as the dash in '###-###', as text a screen reader skips. Delete removes the character in the focused box and pulls the rest of the code back, as Backspace removes the one before it. The row of cells always runs left to right, with 'dir="ltr"', including in Arabic and Hebrew. The first box is the leftmost, a paste fills to the right, and the right arrow moves to the next box. The label, hint, and feedback follow the page's direction. */
|
|
13471
14547
|
"helix-headless-pin-input": DefineCustomElement<
|
|
13472
14548
|
HelixHeadlessPinInput,
|
|
13473
14549
|
HelixHeadlessPinInputVueProps,
|
|
13474
14550
|
HelixHeadlessPinInputVueEvents
|
|
13475
14551
|
>;
|
|
13476
|
-
/** Popover is the general overlay that the specific ones build on. 'Menu' holds commands, 'Select' holds options, and 'Tooltip' holds a description. Popover holds any content you put in it, so it has no keyboard handling of its own. The trigger is slotted and stays your own element. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. It closes on Escape, on a press outside it, and when focus moves out of the trigger and the panel to somewhere else on the page.
|
|
14552
|
+
/** Popover is the general overlay that the specific ones build on. 'Menu' holds commands, 'Select' holds options, and 'Tooltip' holds a description. Popover holds any content you put in it, so it has no keyboard handling of its own. The trigger is slotted and stays your own element. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. **Opening moves focus into the panel**, to the first control in it, or to the panel itself where it holds none, and closing from inside gives it back to the trigger. It closes on Escape, on a press outside it, and when focus moves out of the trigger and the panel to somewhere else on the page. 'modal' keeps 'Tab' inside the panel while it is open and says so with 'aria-modal', for a panel that has to be answered before the page goes on. Without it the popover does not trap focus. The panel's name is 'label' when you set it. Otherwise it is the first heading in the panel, or the elements an 'aria-labelledby' on the host names. 'arrow' draws a point on the panel's edge facing the trigger. The side the panel landed on is on the host as ':state(placed-top)' and its kin, and the trigger's width is on the panel as '--floating-anchor-inline-size', for a panel as wide as its trigger: '''css helix-popover::part(popover) { min-inline-size: var(--floating-anchor-inline-size); } ''' */
|
|
13477
14553
|
"helix-headless-popover": DefineCustomElement<
|
|
13478
14554
|
HelixHeadlessPopover,
|
|
13479
14555
|
HelixHeadlessPopoverVueProps,
|
|
@@ -13485,7 +14561,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13485
14561
|
HelixHeadlessProgressVueProps,
|
|
13486
14562
|
HelixHeadlessProgressVueEvents
|
|
13487
14563
|
>;
|
|
13488
|
-
/** The code is drawn as one '<path>'. Runs of adjacent dark modules are joined, so a row of eight is one horizontal move. A code of useful length has about a thousand modules, and an element for each would be a thousand nodes for one image. The element has 'role="img"' and an accessible name. Set the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. A higher level holds fewer characters, so a value that fits at 'M' can be too long once a logo raises the level to 'H'. A value too long for the level draws no code, and the element fires 'error'. */
|
|
14564
|
+
/** The code is drawn as one '<path>'. Runs of adjacent dark modules are joined, so a row of eight is one horizontal move. A code of useful length has about a thousand modules, and an element for each would be a thousand nodes for one image. The element has 'role="img"' and an accessible name. Set the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. A higher level holds fewer characters, so a value that fits at 'M' can be too long once a logo raises the level to 'H'. A value too long for the level draws no code, and the element fires 'error'. 'toSvg()', 'toPng()' and 'download()' give the drawn code as a file of its own, in the colors it is drawn in, for a page that offers it to save or print, as Zag's download trigger does. */
|
|
13489
14565
|
"helix-headless-qr-code": DefineCustomElement<
|
|
13490
14566
|
HelixHeadlessQrCode,
|
|
13491
14567
|
HelixHeadlessQrCodeVueProps,
|
|
@@ -13497,7 +14573,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13497
14573
|
HelixHeadlessQuoteVueProps,
|
|
13498
14574
|
HelixHeadlessQuoteVueEvents
|
|
13499
14575
|
>;
|
|
13500
|
-
/** The group is the form control, and the radios are its options. A set of radios submits one answer, so the group owns the 'name', the 'value', and the validity. A radio outside a group is not a control. Checkboxes work the other way: each checkbox submits its own answer. 'MixinField' applies to the group for the same reason. The label, the hint, and the message describe the question, and the question belongs to the set. Selection moves up and state moves down. A radio dispatches an event when it is chosen, the group determines whether the choice stands, and the group writes 'selected' onto every radio. The group is the one source of which radio is on. 'value' is the current answer. 'defaultValue' is what the markup declared: the value until something is chosen, and where a reset returns. The two work like 'checked' and 'defaultChecked'. */
|
|
14576
|
+
/** The group is the form control, and the radios are its options. A set of radios submits one answer, so the group owns the 'name', the 'value', and the validity. A radio outside a group is not a control. Checkboxes work the other way: each checkbox submits its own answer. 'MixinField' applies to the group for the same reason. The label, the hint, and the message describe the question, and the question belongs to the set. Selection moves up and state moves down. A radio dispatches an event when it is chosen, the group determines whether the choice stands, and the group writes 'selected' onto every radio. The group is the one source of which radio is on. 'value' is the current answer. 'defaultValue' is what the markup declared: the value until something is chosen, and where a reset returns. The two work like 'checked' and 'defaultChecked'. A choice sends its events in this order: 'helix-select' from the radio, then, a microtask later and only if nobody refused it, 'helix-before-change' from the group, and once the value has moved, 'input' and 'change'. The microtask is what lets a listener you add to the group after it connected refuse the 'helix-select'. A native radio sends 'input' and 'change' in the same task as the click. */
|
|
13501
14577
|
"helix-headless-radio-group": DefineCustomElement<
|
|
13502
14578
|
HelixHeadlessRadioGroup,
|
|
13503
14579
|
HelixHeadlessRadioGroupVueProps,
|
|
@@ -13509,13 +14585,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13509
14585
|
HelixHeadlessRadioVueProps,
|
|
13510
14586
|
HelixHeadlessRadioVueEvents
|
|
13511
14587
|
>;
|
|
13512
|
-
/** Supports half marks, so the value is not always an integer and the press targets are not the marks: five stars at a half step give ten places to press. The pointer handling and 'step' are built around half marks. A partial mark is the full mark, clipped. The filled marks are drawn over the empty marks and cut off partway, so any mark and any fraction work. A read-only rating displays a score, which is the most common use. It is announced as a displayed value and does not look disabled. */
|
|
14588
|
+
/** Supports half marks, so the value is not always an integer and the press targets are not the marks: five stars at a half step give ten places to press. The pointer handling and 'step' are built around half marks. A partial mark is the full mark, clipped. The filled marks are drawn over the empty marks and cut off partway, so any mark and any fraction work. A read-only rating displays a score, which is the most common use. It is announced as a displayed value and does not look disabled. With 'clearable', pressing the chosen score again, or Backspace or Delete on the marks, takes the rating back to unrated and sends 'helix-clear'. */
|
|
13513
14589
|
"helix-headless-rating": DefineCustomElement<
|
|
13514
14590
|
HelixHeadlessRating,
|
|
13515
14591
|
HelixHeadlessRatingVueProps,
|
|
13516
14592
|
HelixHeadlessRatingVueEvents
|
|
13517
14593
|
>;
|
|
13518
|
-
/** A scatter chart shows how two measures relate. The table's first numeric column is measured across, every other numeric column is measured up, and each row is one point. A table of countries with an income column and a life expectancy column draws one point for each country. Each additional numeric column is another series, in its own color. Both axes are labeled, because both positions are values. The ticks sit at round numbers, and the range extends to them. The summary gives each series' correlation coefficient and its number of points. The table has every number, and the drawing is
|
|
14594
|
+
/** A scatter chart shows how two measures relate. The table's first numeric column is measured across, every other numeric column is measured up, and each row is one point. A table of countries with an income column and a life expectancy column draws one point for each country. Each additional numeric column is another series, in its own color. Both axes are labeled, because both positions are values. The ticks sit at round numbers, and the range extends to them. The summary gives each series' correlation coefficient and its number of points. The table has every number, and the drawing is hidden from screen readers. **The plot is read by key.** It takes focus, named by 'label' or the caption. The left and right arrows move from row to row in the table's order, Home and End go to the first and the last, and the up and down arrows move among the series of a row. The tooltip sits on that point, the 'live' part says the row in words, and Escape puts the tooltip away. Each point is a '<span>' placed by percentage over the drawing, as 'LineChart' places its end points, so points stay round when the drawing stretches. The plot runs left to right in every text direction, as a number line does. The plot, its axes, and the axis names sit in a 'plane' part with 'dir="ltr"'. The axis names carry 'dir="auto"', so a name in Arabic or Hebrew reads in its own direction. The summary and the tooltip bubble follow the page's direction. */
|
|
13519
14595
|
"helix-headless-scatter-chart": DefineCustomElement<
|
|
13520
14596
|
HelixHeadlessScatterChart,
|
|
13521
14597
|
HelixHeadlessScatterChartVueProps,
|
|
@@ -13527,13 +14603,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13527
14603
|
HelixHeadlessScrollAreaVueProps,
|
|
13528
14604
|
HelixHeadlessScrollAreaVueEvents
|
|
13529
14605
|
>;
|
|
13530
|
-
/** 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. In the open list the arrow keys, Home, End, PageUp, PageDown and typed letters move the highlight, and Enter, Space or a click chooses it and closes the list. Tab closes the list and moves on. On the closed trigger, ArrowDown, Enter and Space open the list on the chosen option, ArrowUp opens it on the chosen or last option, Home and End open it on the first or last, and typed letters choose the option whose words start with them, as a native '<select>' does. */
|
|
14606
|
+
/** 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. In the open list the arrow keys, Home, End, PageUp, PageDown and typed letters move the highlight, and Enter, Space or a click chooses it and closes the list. Tab closes the list and moves on. On the closed trigger, ArrowDown, Enter and Space open the list on the chosen option, ArrowUp opens it on the chosen or last option, Home and End open it on the first or last, and typed letters choose the option whose words start with them, as a native '<select>' does. */
|
|
13531
14607
|
"helix-headless-select": DefineCustomElement<
|
|
13532
14608
|
HelixHeadlessSelect,
|
|
13533
14609
|
HelixHeadlessSelectVueProps,
|
|
13534
14610
|
HelixHeadlessSelectVueEvents
|
|
13535
14611
|
>;
|
|
13536
|
-
/** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. */
|
|
14612
|
+
/** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. **Put the real content inside and set 'loading', and the skeleton takes its size.** While 'loading' is set the content is inert, the host is 'aria-busy', and the styled tier hides the content and paints the placeholder over its box, so nothing moves when the content arrives. Take 'loading' off and the content is shown as it is. An empty skeleton is a placeholder of its own size, as before. */
|
|
13537
14613
|
"helix-headless-skeleton": DefineCustomElement<
|
|
13538
14614
|
HelixHeadlessSkeleton,
|
|
13539
14615
|
HelixHeadlessSkeletonVueProps,
|
|
@@ -13545,7 +14621,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13545
14621
|
HelixHeadlessSkipLinkVueProps,
|
|
13546
14622
|
HelixHeadlessSkipLinkVueEvents
|
|
13547
14623
|
>;
|
|
13548
|
-
/** 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. '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. */
|
|
14624
|
+
/** 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. '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. */
|
|
13549
14625
|
"helix-headless-slider": DefineCustomElement<
|
|
13550
14626
|
HelixHeadlessSlider,
|
|
13551
14627
|
HelixHeadlessSliderVueProps,
|
|
@@ -13647,25 +14723,31 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13647
14723
|
HelixHeadlessTabVueProps,
|
|
13648
14724
|
HelixHeadlessTabVueEvents
|
|
13649
14725
|
>;
|
|
13650
|
-
/** A
|
|
14726
|
+
/** 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. '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. Name the set with 'label'. */
|
|
14727
|
+
"helix-headless-tag-group": DefineCustomElement<
|
|
14728
|
+
HelixHeadlessTagGroup,
|
|
14729
|
+
HelixHeadlessTagGroupVueProps,
|
|
14730
|
+
HelixHeadlessTagGroupVueEvents
|
|
14731
|
+
>;
|
|
14732
|
+
/** A label that people can optionally remove. 'dismissible' is the difference from a badge: a badge shows a state that people cannot change, and a tag names something they can remove. The remove button sends 'helix-dismiss'. The tag does not remove itself, because your code owns the list it is in, so remove it in your handler. A listener can cancel 'helix-dismiss', and 'dismiss()' then returns 'false'. When the handler removes a tag whose remove button has focus, focus moves to the next tag's remove button, or to the previous one's after the last tag. The remove button is named for its tag, such as "Remove Apple", so a list of buttons says which tag each one removes. Write '{label}' in 'dismiss-label' to put the tag's words somewhere else, such as 'dismiss-label="{label} entfernen"'. 'href' makes the label a link, and 'disabled' takes the tag out of reach: its link and its remove button stop answering. **In a 'Tag.Group' a tag is a row of a grid.** The group gives it its role, its place in the one tab stop and, where the group selects, whether it is selected. Its remove button leaves the tab order there, Delete and Backspace doing its job from the row. */
|
|
13651
14733
|
"helix-headless-tag": DefineCustomElement<
|
|
13652
14734
|
HelixHeadlessTag,
|
|
13653
14735
|
HelixHeadlessTagVueProps,
|
|
13654
14736
|
HelixHeadlessTagVueEvents
|
|
13655
14737
|
>;
|
|
13656
|
-
/** Renders a '<textarea>', so the caret, selection, spellcheck, resize handle, and phone keyboard come from the platform. It is in the server markup, so the field works before any script loads. It is a separate element from 'Input' because Enter inserts a line break here. In a single-line field, Enter submits the form. 'rows' sets the starting height, and 'auto-grow' makes the field grow with its content. You can use both: 'rows' sets where an empty field begins. */
|
|
14738
|
+
/** Renders a '<textarea>', so the caret, selection, spellcheck, resize handle, and phone keyboard come from the platform. It is in the server markup, so the field works before any script loads. It is a separate element from 'Input' because Enter inserts a line break here. In a single-line field, Enter submits the form. 'rows' sets the starting height, and 'auto-grow' makes the field grow with its content. You can use both: 'rows' sets where an empty field begins. 'max-rows' stops the growth at that many lines, and the field scrolls past them. */
|
|
13657
14739
|
"helix-headless-textarea": DefineCustomElement<
|
|
13658
14740
|
HelixHeadlessTextarea,
|
|
13659
14741
|
HelixHeadlessTextareaVueProps,
|
|
13660
14742
|
HelixHeadlessTextareaVueEvents
|
|
13661
14743
|
>;
|
|
13662
|
-
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. */
|
|
14744
|
+
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds', because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. The trigger and ArrowDown open the list, and so does a press into the field; Tab into the field opens nothing. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. With 'segmented', the field is a row of segments in place of the text: an hour, a minute, and AM or PM where the clock has them, each set with digits or the arrow keys. Alt+Down opens the list from a segment. */
|
|
13663
14745
|
"helix-headless-time-input": DefineCustomElement<
|
|
13664
14746
|
HelixHeadlessTimeInput,
|
|
13665
14747
|
HelixHeadlessTimeInputVueProps,
|
|
13666
14748
|
HelixHeadlessTimeInputVueEvents
|
|
13667
14749
|
>;
|
|
13668
|
-
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. */
|
|
14750
|
+
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem, and one for the second with 'seconds'. Left and Right move between the wheels, and Tab does too. 'hour-cycle' writes every time on a twelve or a twenty-four hour clock whatever the locale, and 'seconds' holds times to the second. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds'. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. */
|
|
13669
14751
|
"helix-headless-time-picker": DefineCustomElement<
|
|
13670
14752
|
HelixHeadlessTimePicker,
|
|
13671
14753
|
HelixHeadlessTimePickerVueProps,
|
|
@@ -13683,25 +14765,25 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13683
14765
|
HelixHeadlessTimelineVueProps,
|
|
13684
14766
|
HelixHeadlessTimelineVueEvents
|
|
13685
14767
|
>;
|
|
13686
|
-
/** Each message is an element because it has a timeout, a tone, a dismiss control, and a lifetime that pauses. **Each item runs its own timer.** A timer held by the region would restart with each new message, and the last of three messages would stay for nine seconds. **Messages are inverted by default.** The item flips 'color-scheme', so a new message stands out from the page without using a color that carries meaning. */
|
|
14768
|
+
/** Each message is an element because it has a timeout, a tone, a dismiss control, and a lifetime that pauses. **Each item runs its own timer.** A timer held by the region would restart with each new message, and the last of three messages would stay for nine seconds. **Each message is an 'alertdialog' named by its words**, which is how a reader who moves into the stack hears which message they are on. A 'danger' message is its own assertive live region, so it is announced at once; every other one is announced politely by the region. A touch or a pen swipes a message toward the end of the line, and past halfway, or quickly, dismisses it through the same 'helix-dismiss' as its control. While it moves, the distance is on the 'item' part as '--toast-swipe-x'. **Messages are inverted by default.** The item flips 'color-scheme', so a new message stands out from the page without using a color that carries meaning. */
|
|
13687
14769
|
"helix-headless-toast-item": DefineCustomElement<
|
|
13688
14770
|
HelixHeadlessToastItem,
|
|
13689
14771
|
HelixHeadlessToastItemVueProps,
|
|
13690
14772
|
HelixHeadlessToastItemVueEvents
|
|
13691
14773
|
>;
|
|
13692
|
-
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is
|
|
14774
|
+
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is a landmark named by 'label', and a polite live region.** A 'danger' message is announced assertively, and every other one politely. Each message is an 'alertdialog' named by its words, so a reader who moves into the stack hears which message they are on. **'hotkey' takes focus to the stack and back**, F8 unless you set it, and 'label' says which key: '{hotkey}' in it is filled in, so the default name is "Notifications (F8)". Pressed while focus is in the stack, it gives focus back to where it was. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. **'add()' shows a message from script**, for a page with no framework state to render them from: it appends a message of the region's own tier and removes it once it has been dismissed and has finished leaving. Messages you render yourself stay yours, and the region never removes them. A touch or a pen swipes a message away toward the end of the line. **The stack is in the top layer.** The 'region' part is a 'popover="manual"' shown while a message is showing, and shown again above a modal dialog that opened after it. Position the 'region' part, which is the box in the top layer. While a modal 'Dialog', 'Drawer' or 'Lightbox' is open, the browser makes everything outside it inert, the stack included, so a message stays visible and its actions cannot be pressed. Where the browser has 'ariaNotify', a message that arrives then is announced through it. For a message with an action, render a second region inside the dialog. When a message with focus inside it is dismissed, focus moves to the next message, then the one before it, then back to where it was before it entered the stack. */
|
|
13693
14775
|
"helix-headless-toast": DefineCustomElement<
|
|
13694
14776
|
HelixHeadlessToast,
|
|
13695
14777
|
HelixHeadlessToastVueProps,
|
|
13696
14778
|
HelixHeadlessToastVueEvents
|
|
13697
14779
|
>;
|
|
13698
|
-
/** The indicator is one element that moves to the selected item. A single moving object is easier to follow than a fill that swaps, and it shows where the selection came from. Its size and position are measured from the selected item and written to the indicator as custom properties, because labels have different lengths. Measurement happens on the client, so the server renders the indicator hidden and it fades in once measured. */
|
|
14780
|
+
/** The indicator is one element that moves to the selected item. A single moving object is easier to follow than a fill that swaps, and it shows where the selection came from. Its size and position are measured from the selected item and written to the indicator as custom properties, because labels have different lengths. Measurement happens on the client, so the server renders the indicator hidden and it fades in once measured. 'selection-mode="multiple"' makes the group a toolbar of buttons that each say whether they are pressed with 'aria-pressed', as React Aria's ToggleButtonGroup and Radix's ToggleGroup do. A press presses or releases one item, the arrow keys move focus without pressing, and 'value' is the pressed values, comma separated, which 'values' also gives as a list. The form receives one entry per pressed value. The indicator stays hidden, and each pressed item is marked with ':state(pressed)'. 'orientation="vertical"' runs the items down a column, says so to the accessibility tree, and the up and down arrows move between them. */
|
|
13699
14781
|
"helix-headless-toggle-group": DefineCustomElement<
|
|
13700
14782
|
HelixHeadlessToggleGroup,
|
|
13701
14783
|
HelixHeadlessToggleGroupVueProps,
|
|
13702
14784
|
HelixHeadlessToggleGroupVueEvents
|
|
13703
14785
|
>;
|
|
13704
|
-
/** Renders a '<button role="radio">' for use as a form control. Do not use it for navigation. For navigation, use links marked with 'aria-current' and styled by the 'data-navigation-item' recipe in the base layer. The recipe has the same look, and links are not announced as choices. */
|
|
14786
|
+
/** Renders a '<button role="radio">' for use as a form control. In a group with 'selection-mode="multiple"' it is a '<button>' that says whether it is pressed with 'aria-pressed'. Do not use it for navigation. For navigation, use links marked with 'aria-current' and styled by the 'data-navigation-item' recipe in the base layer. The recipe has the same look, and links are not announced as choices. */
|
|
13705
14787
|
"helix-headless-toggle": DefineCustomElement<
|
|
13706
14788
|
HelixHeadlessToggle,
|
|
13707
14789
|
HelixHeadlessToggleVueProps,
|
|
@@ -13713,19 +14795,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13713
14795
|
HelixHeadlessToolbarVueProps,
|
|
13714
14796
|
HelixHeadlessToolbarVueEvents
|
|
13715
14797
|
>;
|
|
13716
|
-
/** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit.
|
|
14798
|
+
/** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit. **The tooltip describes its trigger itself, in both forms.** Wrap the trigger, or place the tooltip beside it and name the trigger with 'for': '''html <helix-headless-button id="save">Save</helix-headless-button> <helix-headless-tooltip for="save" content="Save your work"></helix-headless-tooltip> ''' The link is an element reference on the control that takes focus, and it is never written into your markup before a reader has acted. A trigger that is a Helix component is described at once, inside its own shadow root. A plain element in your markup is described when a reader first points at it or focuses it, which is after any hydration, and only where you have written no 'aria-describedby' or 'aria-labelledby' of your own. Write 'aria-describedby' pointing at the tooltip yourself to have the link in the server's markup. Where the browser has no element references, write it yourself; the tooltip warns once on first open if nothing links the two. The tooltip shows on hover and on focus. It hides on pointer leave, on blur, on Escape, and when the trigger is activated. The pointer can move from the trigger onto the bubble and the bubble stays. Once one tooltip is showing, moving to another trigger shows its tooltip with no 'delay', and the first one hides. The same holds for 'skip-delay' milliseconds after a tooltip hides, 300 unless you set it. 'show-on="focus"' shows the tooltip on keyboard focus only, for a hint a pointer does not need. */
|
|
13717
14799
|
"helix-headless-tooltip": DefineCustomElement<
|
|
13718
14800
|
HelixHeadlessTooltip,
|
|
13719
14801
|
HelixHeadlessTooltipVueProps,
|
|
13720
14802
|
HelixHeadlessTooltipVueEvents
|
|
13721
14803
|
>;
|
|
13722
|
-
/** The root holds the order of the stops: which stop is current, what Next and Back do, and when the tour is finished. Each stop holds its target, and you write all the text. **The spotlight is a shadow.** The scrim is a box the size of the current target with a very large 'box-shadow' spread, and the shadow paints the darkness. A 'clip-path' on a full-screen scrim breaks as soon as an element between the scrim and the viewport is transformed. The root measures the target's position in the browser. Nothing is measured on the server, because a tour starts only on request. 'open', 'default-open', 'helix-before-open', 'helix-before-close' and 'toggle' work as they do on 'Dialog'. Setting 'open' starts the run, and 'skip()' and 'requestOpen(false)' end it early. **Focus follows the run.** Opening moves focus to the first stop's panel, and moving on from a control in a stop moves it to the next one. Ending the tour puts focus back on the element that had it when the tour opened, unless you have moved it somewhere else on the page. A stop does not trap focus, so you can still 'Tab' out to the element it describes. */
|
|
14804
|
+
/** The root holds the order of the stops: which stop is current, what Next and Back do, and when the tour is finished. Each stop holds its target, and you write all the text. **The spotlight is a shadow.** The scrim is a box the size of the current target with a very large 'box-shadow' spread, and the shadow paints the darkness. A 'clip-path' on a full-screen scrim breaks as soon as an element between the scrim and the viewport is transformed. The root measures the target's position in the browser. Nothing is measured on the server, because a tour starts only on request. 'open', 'default-open', 'helix-before-open', 'helix-before-close' and 'toggle' work as they do on 'Dialog'. Setting 'open' starts the run, and 'skip()' and 'requestOpen(false)' end it early. Each stop is told its place in the run, from 'progress-label', such as "2 of 5". It describes the stop's panel, so a screen reader says it at every stop, and 'progress' draws it in the panel as well. A dialog or a floating stop, which has nothing to light, is shown over the 'backdrop' part. At a 'wait' stop the run waits for that stop's target to be on the page, and moves on by itself. **Focus follows the run.** Opening moves focus to the first stop's panel, and moving on from a control in a stop moves it to the next one. Ending the tour puts focus back on the element that had it when the tour opened, unless you have moved it somewhere else on the page. A stop does not trap focus, so you can still 'Tab' out to the element it describes. */
|
|
13723
14805
|
"helix-headless-tour": DefineCustomElement<
|
|
13724
14806
|
HelixHeadlessTour,
|
|
13725
14807
|
HelixHeadlessTourVueProps,
|
|
13726
14808
|
HelixHeadlessTourVueEvents
|
|
13727
14809
|
>;
|
|
13728
|
-
/** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text.
|
|
14810
|
+
/** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text. The 'heading' and 'description' slots are optional places for the title and the line under it, which then name and describe the panel. **A stop has a type.** Without one it is a bubble pointing at its target. 'type="dialog"' is a panel in the middle of the window, over a backdrop, for a welcome or a summary with nothing to point at. 'type="floating"' is a panel in a corner of the window, which the styled tier puts at the end of the line, for a note that points at nothing in particular. 'type="wait"' shows nothing: the tour waits for the element 'for' names to be on the page, such as a menu the reader has to open, and moves on by itself. **The buttons are slot fallback.** With nothing in the 'actions' slot, you get Back, Next, and Skip, already wired. Slot your own 'actions' and drive them with 'next()', 'back()', and 'skip()' on the root. **'for' is an id, as with 'Tooltip'**, so you can point at a target elsewhere on the page from markup. It resolves against the stop's root node, so a stop inside a shadow tree points at a target in that tree. The panel is a 'group', and a 'dialog' for a dialog stop, only while the stop is shown. It is named by the 'heading' slot, then by the first heading in the content, then by 'label', and otherwise by its place in the tour. It is described by the 'description' slot and by its place, such as "2 of 5", so a screen reader says where the reader is at every stop. 'focus()' moves focus to the panel, which is what the tour does when it opens or moves on. */
|
|
13729
14811
|
"helix-headless-tour-stop": DefineCustomElement<
|
|
13730
14812
|
HelixHeadlessTourStop,
|
|
13731
14813
|
HelixHeadlessTourStopVueProps,
|