@fusion.dev/helix-headless 0.145.0 → 0.147.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 +12286 -4281
- package/dist/accordion/item/accordion-item.d.ts +51 -18
- package/dist/accordion/item/accordion-item.js +45 -13
- package/dist/accordion/root/accordion-root.d.ts +16 -7
- package/dist/accordion/root/accordion-root.js +3 -3
- package/dist/announcement/root/announcement-root.d.ts +16 -6
- package/dist/announcement/root/announcement-root.js +37 -7
- package/dist/app-header/root/app-header-root.d.ts +7 -2
- package/dist/app-header/root/app-header-root.js +9 -1
- package/dist/app-header/sectioning.d.ts +3 -1
- package/dist/app-header/sectioning.js +3 -2
- package/dist/area-chart/root/area-chart-root.d.ts +18 -1
- package/dist/area-chart/root/area-chart-root.js +11 -3
- package/dist/avatar/group/avatar-group.d.ts +20 -14
- package/dist/avatar/group/avatar-group.js +17 -19
- package/dist/avatar/root/avatar-root.d.ts +31 -1
- package/dist/avatar/root/avatar-root.js +11 -1
- package/dist/badge/root/badge-root.d.ts +60 -7
- package/dist/badge/root/badge-root.js +89 -6
- package/dist/bar-chart/root/bar-chart-root.d.ts +18 -1
- package/dist/bar-chart/root/bar-chart-root.js +48 -20
- package/dist/bar-chart/stack.d.ts +25 -0
- package/dist/bar-chart/stack.js +27 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +14 -0
- package/dist/breadcrumbs/breadcrumb/breadcrumb.js +12 -2
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +25 -0
- package/dist/breadcrumbs/root/breadcrumbs-root.js +51 -4
- package/dist/button/root/button-root.d.ts +50 -38
- package/dist/button/root/button-root.js +42 -53
- package/dist/button/submitter.d.ts +27 -0
- package/dist/button/submitter.js +25 -0
- package/dist/button-group/root/button-group-root.d.ts +2 -1
- package/dist/button-group/root/button-group-root.js +5 -1
- package/dist/canvas/node/canvas-node.d.ts +4 -3
- package/dist/canvas/node/canvas-node.js +3 -2
- package/dist/canvas/root/canvas-root.js +2 -2
- package/dist/card/root/card-root.d.ts +36 -4
- package/dist/card/root/card-root.js +29 -10
- package/dist/carousel/root/carousel-root.d.ts +43 -4
- package/dist/carousel/root/carousel-root.js +40 -12
- package/dist/carousel/stops.d.ts +20 -0
- package/dist/carousel/stops.js +30 -0
- package/dist/chat/message/chat-message.js +5 -4
- package/dist/chat/naming.d.ts +5 -1
- package/dist/chat/naming.js +4 -2
- package/dist/chat/root/chat-root.d.ts +40 -4
- package/dist/chat/root/chat-root.js +32 -6
- package/dist/checkbox/root/checkbox-root.d.ts +20 -0
- package/dist/checkbox/root/checkbox-root.js +18 -7
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +8 -2
- package/dist/checkbox-group/root/checkbox-group-root.js +14 -11
- package/dist/checkbox-group/select-all.d.ts +21 -0
- package/dist/checkbox-group/select-all.js +7 -0
- package/dist/code-block/highlight.d.ts +15 -0
- package/dist/code-block/highlight.js +4 -0
- package/dist/code-block/root/code-block-root.d.ts +79 -10
- package/dist/code-block/root/code-block-root.js +74 -5
- package/dist/color-input/root/color-input-root.d.ts +14 -0
- package/dist/color-input/root/color-input-root.js +17 -7
- package/dist/color-picker/channels.js +1 -2
- package/dist/color-picker/root/color-picker-root.d.ts +53 -16
- package/dist/color-picker/root/color-picker-root.js +155 -46
- package/dist/color-picker/wheel.d.ts +17 -0
- package/dist/color-picker/wheel.js +6 -0
- package/dist/combobox/root/combobox-root.d.ts +56 -0
- package/dist/combobox/root/combobox-root.js +92 -15
- package/dist/command/root/command-root.d.ts +19 -2
- package/dist/command/root/command-root.js +24 -23
- package/dist/copy-button/root/copy-button-root.d.ts +21 -1
- package/dist/copy-button/root/copy-button-root.js +16 -4
- package/dist/data-table/index.d.ts +1 -1
- package/dist/data-table/index.js +1 -1
- package/dist/data-table/keys.d.ts +6 -0
- package/dist/data-table/keys.js +14 -0
- package/dist/data-table/root/data-table-root.d.ts +27 -18
- package/dist/data-table/root/data-table-root.js +31 -57
- package/dist/data-table/tree.d.ts +16 -1
- package/dist/data-table/tree.js +2 -3
- package/dist/date-input/root/date-input-root.d.ts +11 -2
- package/dist/date-input/root/date-input-root.js +26 -12
- package/dist/date-picker/root/date-picker-root.d.ts +14 -9
- package/dist/date-picker/root/date-picker-root.js +33 -22
- package/dist/description-list/item/description-list-item.d.ts +18 -4
- package/dist/description-list/item/description-list-item.js +8 -4
- package/dist/dialog/description.js +15 -1
- package/dist/dialog/root/dialog-root.d.ts +8 -2
- package/dist/dialog/root/dialog-root.js +16 -1
- package/dist/divider/root/divider-root.d.ts +3 -0
- package/dist/divider/root/divider-root.js +2 -1
- package/dist/donut-chart/root/donut-chart-root.d.ts +31 -0
- package/dist/donut-chart/root/donut-chart-root.js +55 -1
- package/dist/donut-chart/slice-label.d.ts +35 -0
- package/dist/donut-chart/slice-label.js +11 -0
- package/dist/drawer/reveal.d.ts +8 -0
- package/dist/drawer/reveal.js +1 -0
- package/dist/drawer/root/drawer-root.d.ts +63 -2
- package/dist/drawer/root/drawer-root.js +75 -4
- package/dist/drilldown/item/drilldown-item.d.ts +21 -1
- package/dist/drilldown/item/drilldown-item.js +40 -5
- package/dist/drilldown/root/drilldown-root.d.ts +21 -3
- package/dist/drilldown/root/drilldown-root.js +22 -3
- package/dist/element-events.generated.js +35 -6
- package/dist/empty/root/empty-root.d.ts +34 -2
- package/dist/empty/root/empty-root.js +26 -4
- package/dist/file-input/root/file-input-root.d.ts +99 -8
- package/dist/file-input/root/file-input-root.js +120 -22
- package/dist/file-input/screen.d.ts +2 -1
- package/dist/file-input/status.d.ts +24 -0
- package/dist/file-input/status.js +10 -0
- package/dist/filter-input/chip/filter-chip.d.ts +23 -0
- package/dist/filter-input/chip/filter-chip.js +11 -2
- package/dist/filter-input/menu/filter-menu.d.ts +2 -0
- package/dist/filter-input/menu/filter-menu.js +12 -4
- package/dist/filter-input/root/filter-input-root.d.ts +38 -6
- package/dist/filter-input/root/filter-input-root.js +18 -28
- package/dist/filter-input/suggest.d.ts +28 -3
- package/dist/filter-input/suggest.js +18 -8
- package/dist/format-date/options.d.ts +3 -4
- package/dist/format-date/options.js +2 -2
- package/dist/format-date/root/format-date-root.d.ts +27 -17
- package/dist/format-date/root/format-date-root.js +27 -48
- package/dist/heatmap/root/buckets.d.ts +21 -0
- package/dist/heatmap/root/buckets.js +34 -0
- package/dist/heatmap/root/heatmap-root.d.ts +83 -11
- package/dist/heatmap/root/heatmap-root.js +104 -12
- package/dist/icon/index.d.ts +1 -1
- package/dist/icon/index.js +1 -1
- package/dist/icon/registry.d.ts +26 -1
- package/dist/icon/registry.js +12 -1
- package/dist/icon/root/icon-root.d.ts +25 -1
- package/dist/icon/root/icon-root.js +44 -12
- package/dist/icon/root/index.d.ts +1 -1
- package/dist/icon/root/index.js +1 -1
- package/dist/icon/settle.d.ts +7 -0
- package/dist/icon/settle.js +10 -0
- package/dist/icon-button/root/icon-button-root.d.ts +2 -0
- package/dist/image/root/image-root.d.ts +14 -1
- package/dist/image/root/image-root.js +7 -2
- package/dist/input/root/input-root.d.ts +34 -3
- package/dist/input/root/input-root.js +17 -4
- package/dist/kbd/keys.d.ts +29 -0
- package/dist/kbd/keys.js +52 -0
- package/dist/kbd/root/kbd-root.d.ts +52 -1
- package/dist/kbd/root/kbd-root.js +40 -47
- package/dist/legend/hidden-series.d.ts +10 -2
- package/dist/legend/hidden-series.js +5 -2
- package/dist/legend/root/legend-root.d.ts +77 -12
- package/dist/legend/root/legend-root.js +71 -17
- package/dist/lightbox/root/lightbox-root.d.ts +98 -10
- package/dist/lightbox/root/lightbox-root.js +153 -18
- package/dist/lightbox/zoom-controller.d.ts +59 -0
- package/dist/lightbox/zoom-controller.js +128 -0
- package/dist/lightbox/zoom.d.ts +24 -0
- package/dist/lightbox/zoom.js +18 -0
- package/dist/line-chart/root/line-chart-root.d.ts +38 -1
- package/dist/line-chart/root/line-chart-root.js +31 -3
- package/dist/list/item/list-item.d.ts +2 -0
- package/dist/list/item/list-item.js +11 -2
- package/dist/list/root/list-root.d.ts +70 -13
- package/dist/list/root/list-root.js +91 -13
- package/dist/list/selection.d.ts +54 -7
- package/dist/list/selection.js +32 -7
- package/dist/listbox/root/listbox-root.d.ts +44 -4
- package/dist/listbox/root/listbox-root.js +72 -34
- package/dist/loader/busy.d.ts +10 -0
- package/dist/loader/busy.js +11 -0
- package/dist/loader/root/loader-root.d.ts +9 -2
- package/dist/loader/root/loader-root.js +23 -3
- package/dist/megamenu/hand-over.d.ts +75 -0
- package/dist/megamenu/hand-over.js +67 -0
- package/dist/megamenu/root/megamenu-root.d.ts +80 -15
- package/dist/megamenu/root/megamenu-root.js +76 -19
- package/dist/menu/item/menu-item.d.ts +51 -2
- package/dist/menu/item/menu-item.js +50 -26
- package/dist/menu/root/menu-root.d.ts +17 -0
- package/dist/menu/root/menu-root.js +2 -2
- package/dist/meter/root/meter-root.d.ts +62 -1
- package/dist/meter/root/meter-root.js +38 -16
- package/dist/navigation/root/navigation-root.d.ts +2 -1
- package/dist/navigation/root/navigation-root.js +2 -2
- package/dist/notifications/root/notifications-root.d.ts +20 -4
- package/dist/notifications/root/notifications-root.js +30 -8
- package/dist/number-input/grain.d.ts +28 -0
- package/dist/number-input/grain.js +14 -0
- package/dist/number-input/root/number-input-root.d.ts +34 -9
- package/dist/number-input/root/number-input-root.js +31 -25
- package/dist/object-inspector/root/object-inspector-root.d.ts +88 -33
- package/dist/object-inspector/root/object-inspector-root.js +134 -92
- package/dist/object-inspector/rows.d.ts +18 -0
- package/dist/object-inspector/rows.js +33 -0
- package/dist/option/index.d.ts +1 -0
- package/dist/option/index.js +1 -0
- package/dist/option/root/option-root.d.ts +5 -3
- package/dist/option/separator/option-separator.d.ts +30 -0
- package/dist/option/separator/option-separator.js +21 -0
- package/dist/outline/root/outline-root.d.ts +30 -0
- package/dist/outline/root/outline-root.js +17 -13
- package/dist/pagination/size/pagination-size.d.ts +6 -0
- package/dist/pagination/size/pagination-size.js +5 -3
- package/dist/pin-input/code.d.ts +37 -0
- package/dist/pin-input/code.js +25 -0
- package/dist/pin-input/root/pin-input-root.d.ts +116 -115
- package/dist/pin-input/root/pin-input-root.js +163 -155
- package/dist/popover/hide-outside.d.ts +14 -0
- package/dist/popover/hide-outside.js +34 -0
- package/dist/popover/root/popover-root.d.ts +64 -8
- package/dist/popover/root/popover-root.js +67 -4
- package/dist/progress/root/progress-root.d.ts +47 -0
- package/dist/progress/root/progress-root.js +34 -16
- package/dist/qr-code/export.d.ts +45 -1
- package/dist/qr-code/export.js +28 -0
- package/dist/qr-code/name.d.ts +11 -0
- package/dist/qr-code/name.js +7 -0
- package/dist/qr-code/root/qr-code-root.d.ts +36 -11
- package/dist/qr-code/root/qr-code-root.js +58 -11
- package/dist/quote/marks.d.ts +8 -0
- package/dist/quote/marks.js +5 -0
- package/dist/quote/root/quote-root.d.ts +14 -2
- package/dist/quote/root/quote-root.js +23 -1
- package/dist/radio/group/radio-group.d.ts +15 -0
- package/dist/radio/root/radio-root.d.ts +6 -2
- package/dist/radio/root/radio-root.js +7 -2
- package/dist/rating/root/rating-root.d.ts +30 -12
- package/dist/rating/root/rating-root.js +27 -27
- package/dist/scatter-chart/fit.d.ts +15 -0
- package/dist/scatter-chart/fit.js +35 -0
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +51 -1
- package/dist/scatter-chart/root/scatter-chart-root.js +64 -24
- package/dist/scroll-area/root/scroll-area-root.d.ts +22 -51
- package/dist/scroll-area/root/scroll-area-root.js +57 -173
- package/dist/scroll-area/scrollbar-controller.d.ts +111 -0
- package/dist/scroll-area/scrollbar-controller.js +172 -0
- package/dist/scroll-area/scrollbar.d.ts +27 -8
- package/dist/scroll-area/scrollbar.js +10 -1
- package/dist/select/align.d.ts +47 -0
- package/dist/select/align.js +7 -0
- package/dist/select/root/select-root.d.ts +71 -0
- package/dist/select/root/select-root.js +78 -6
- package/dist/skeleton/root/skeleton-root.d.ts +3 -0
- package/dist/skeleton/root/skeleton-root.js +4 -2
- package/dist/skip-link/root/skip-link-root.js +2 -2
- package/dist/slider/root/slider-root.d.ts +59 -5
- package/dist/slider/root/slider-root.js +45 -3
- package/dist/sparkline/readings.d.ts +36 -0
- package/dist/sparkline/readings.js +36 -0
- package/dist/sparkline/root/sparkline-root.d.ts +121 -7
- package/dist/sparkline/root/sparkline-root.js +160 -26
- package/dist/speed-dial/item/speed-dial-item.d.ts +1 -1
- package/dist/speed-dial/item/speed-dial-item.js +2 -2
- package/dist/speed-dial/root/speed-dial-root.d.ts +6 -0
- package/dist/speed-dial/root/speed-dial-root.js +11 -3
- package/dist/splitter/root/splitter-root.d.ts +10 -12
- package/dist/splitter/root/splitter-root.js +211 -204
- package/dist/stat/root/stat-root.d.ts +14 -5
- package/dist/stat/root/stat-root.js +21 -5
- package/dist/steps/reach.d.ts +5 -0
- package/dist/steps/reach.js +3 -0
- package/dist/steps/root/steps-root.d.ts +56 -3
- package/dist/steps/root/steps-root.js +50 -6
- package/dist/steps/step/step.d.ts +8 -0
- package/dist/steps/step/step.js +8 -3
- package/dist/switch/root/switch-root.d.ts +10 -0
- package/dist/table/column/table-column.d.ts +6 -10
- package/dist/table/column/table-column.js +8 -20
- package/dist/table/root/table-root.d.ts +31 -10
- package/dist/table/root/table-root.js +14 -18
- package/dist/table/row/table-row.d.ts +24 -0
- package/dist/table/row/table-row.js +37 -1
- package/dist/tabs/panel/tab-panel.d.ts +16 -3
- package/dist/tabs/panel/tab-panel.js +34 -5
- package/dist/tabs/root/tabs-root.d.ts +17 -3
- package/dist/tabs/root/tabs-root.js +1 -1
- package/dist/tabs/tab/tab.d.ts +5 -0
- package/dist/tabs/tab/tab.js +5 -2
- package/dist/tag/group/tag-group.d.ts +44 -5
- package/dist/tag/group/tag-group.js +60 -9
- package/dist/tag/root/tag-root.js +9 -2
- package/dist/textarea/root/textarea-root.d.ts +41 -2
- package/dist/textarea/root/textarea-root.js +39 -1
- package/dist/time-input/root/time-input-root.d.ts +10 -2
- package/dist/time-input/root/time-input-root.js +24 -13
- package/dist/time-picker/root/time-picker-root.d.ts +28 -17
- package/dist/time-picker/root/time-picker-root.js +18 -29
- package/dist/time-picker/wheel-name.d.ts +9 -0
- package/dist/time-picker/wheel-name.js +15 -0
- package/dist/timeline/group/timeline-group.js +2 -2
- package/dist/toast/item/toast-item.d.ts +16 -3
- package/dist/toast/item/toast-item.js +22 -6
- package/dist/toast/root/toast-root.d.ts +34 -4
- package/dist/toast/root/toast-root.js +74 -13
- package/dist/toast/words.d.ts +12 -0
- package/dist/toast/words.js +25 -0
- package/dist/toggle/group/toggle-group.d.ts +52 -7
- package/dist/toggle/group/toggle-group.js +58 -44
- package/dist/toggle/root/toggle-root.js +2 -4
- package/dist/toolbar/root/toolbar-root.d.ts +21 -5
- package/dist/toolbar/root/toolbar-root.js +52 -8
- package/dist/tooltip/root/tooltip-root.d.ts +20 -3
- package/dist/tooltip/root/tooltip-root.js +18 -1
- package/dist/tour/back.d.ts +10 -0
- package/dist/tour/back.js +8 -0
- package/dist/tour/root/tour-root.d.ts +45 -2
- package/dist/tour/root/tour-root.js +53 -8
- package/dist/tour/stop/tour-stop.d.ts +3 -0
- package/dist/tour/stop/tour-stop.js +3 -3
- package/dist/tree/item/tree-item.d.ts +7 -3
- package/dist/tree/item/tree-item.js +3 -0
- package/dist/tree/root/tree-root.d.ts +24 -3
- package/dist/tree/root/tree-root.js +32 -13
- package/dist/tree/selection.js +2 -15
- package/dist/trend/figure.d.ts +16 -0
- package/dist/trend/figure.js +8 -0
- package/dist/trend/root/trend-root.d.ts +83 -19
- package/dist/trend/root/trend-root.js +59 -8
- package/dist/video/media-events.d.ts +13 -18
- package/dist/video/media-events.js +1 -5
- package/dist/video/root/extra-controls.d.ts +12 -0
- package/dist/video/root/extra-controls.js +6 -2
- package/dist/video/root/video-root.d.ts +23 -6
- package/dist/video/root/video-root.js +19 -10
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +2 -0
- package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
- package/dist/video-playlist/root/video-playlist-root.d.ts +17 -1
- package/dist/video-playlist/root/video-playlist-root.js +3 -0
- package/dist/virtual-list/fill.d.ts +11 -8
- package/dist/virtual-list/fill.js +10 -17
- package/dist/virtual-list/keys.d.ts +16 -7
- package/dist/virtual-list/keys.js +17 -6
- package/dist/virtual-list/plan.d.ts +65 -0
- package/dist/virtual-list/plan.js +27 -0
- package/dist/virtual-list/root/virtual-list-root.d.ts +136 -13
- package/dist/virtual-list/root/virtual-list-root.js +218 -51
- package/lint.json +1 -1
- package/package.json +8 -8
- package/types/jsx.d.ts +7441 -1458
- package/types/svelte.d.ts +1 -0
- package/types/vue.d.ts +1501 -326
- package/dist/chat/relative-clock.d.ts +0 -39
- package/dist/chat/relative-clock.js +0 -31
- package/dist/data-table/root/order.d.ts +0 -141
- package/dist/data-table/root/order.js +0 -76
- package/dist/tag/selection.d.ts +0 -10
- package/dist/tag/selection.js +0 -12
package/types/vue.d.ts
CHANGED
|
@@ -56,6 +56,7 @@ import type {
|
|
|
56
56
|
HelixHeadlessDrilldownItem,
|
|
57
57
|
HelixHeadlessDrilldown,
|
|
58
58
|
HelixHeadlessEmpty,
|
|
59
|
+
FileStatus,
|
|
59
60
|
HelixHeadlessFileInput,
|
|
60
61
|
HelixHeadlessFilterChip,
|
|
61
62
|
HelixHeadlessFilterField,
|
|
@@ -105,10 +106,13 @@ import type {
|
|
|
105
106
|
HelixHeadlessOptionGroup,
|
|
106
107
|
optionsAmong,
|
|
107
108
|
HelixHeadlessOption,
|
|
109
|
+
HelixHeadlessOptionSeparator,
|
|
108
110
|
HelixHeadlessOutline,
|
|
109
111
|
HelixHeadlessPagination,
|
|
110
112
|
HelixHeadlessPaginationSize,
|
|
111
113
|
HelixHeadlessPaginationSummary,
|
|
114
|
+
PinCase,
|
|
115
|
+
PinType,
|
|
112
116
|
HelixHeadlessPinInput,
|
|
113
117
|
HelixHeadlessPopover,
|
|
114
118
|
HelixHeadlessProgress,
|
|
@@ -134,7 +138,6 @@ import type {
|
|
|
134
138
|
HelixHeadlessStep,
|
|
135
139
|
HelixHeadlessSwitch,
|
|
136
140
|
HelixHeadlessTableCell,
|
|
137
|
-
at,
|
|
138
141
|
edgeOf,
|
|
139
142
|
HelixHeadlessTableColumn,
|
|
140
143
|
HelixHeadlessTable,
|
|
@@ -171,6 +174,7 @@ import type {
|
|
|
171
174
|
ToggleEvent,
|
|
172
175
|
HelixDismissEvent,
|
|
173
176
|
HelixScrolledEvent,
|
|
177
|
+
HelixPressEvent,
|
|
174
178
|
HelixBeforeMoveEvent,
|
|
175
179
|
HelixBeforeReconnectEvent,
|
|
176
180
|
HelixBeforeRelabelEvent,
|
|
@@ -197,10 +201,10 @@ import type {
|
|
|
197
201
|
HelixSampleStartEvent,
|
|
198
202
|
HelixCreateEvent,
|
|
199
203
|
HelixFilterEvent,
|
|
204
|
+
HelixLoadMoreEvent,
|
|
200
205
|
HelixCopyErrorEvent,
|
|
201
206
|
HelixExpandEvent,
|
|
202
207
|
HelixFilteredEvent,
|
|
203
|
-
HelixLoadMoreEvent,
|
|
204
208
|
HelixNavigateEvent,
|
|
205
209
|
HelixReorderEvent,
|
|
206
210
|
HelixReorderedEvent,
|
|
@@ -229,13 +233,16 @@ import type {
|
|
|
229
233
|
HelixMapTiltEvent,
|
|
230
234
|
HelixMapZoomEvent,
|
|
231
235
|
HelixToggleEvent,
|
|
236
|
+
HelixBandEvent,
|
|
232
237
|
HelixReadEvent,
|
|
233
238
|
HelixCompleteEvent,
|
|
239
|
+
HelixPreviewEvent,
|
|
234
240
|
HelixBeforeCollapseEvent,
|
|
235
241
|
HelixBeforeResizeEvent,
|
|
236
242
|
HelixCollapseEvent,
|
|
237
243
|
HelixResizedEvent,
|
|
238
244
|
HelixTourAskEvent,
|
|
245
|
+
HelixTourStatusEvent,
|
|
239
246
|
HelixLoadEvent,
|
|
240
247
|
HelixEndEvent,
|
|
241
248
|
HelixNextEvent,
|
|
@@ -331,18 +338,16 @@ too. */
|
|
|
331
338
|
/** Whether find in page searches the section while it is closed, and opens it
|
|
332
339
|
on a match.
|
|
333
340
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
accordion's own `hidden-until-found` turns it on for every section. */
|
|
341
|
+
Unset takes the accordion's `hidden-until-found`, which is on. Write
|
|
342
|
+
`hidden-until-found="false"` to keep find in page out of this section: a
|
|
343
|
+
closed section is then `hidden` and `inert`. */
|
|
338
344
|
"hidden-until-found"?: (HelixHeadlessAccordionItem["hiddenUntilFound"]) | undefined;
|
|
339
345
|
/** Whether find in page searches the section while it is closed, and opens it
|
|
340
346
|
on a match.
|
|
341
347
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
accordion's own `hidden-until-found` turns it on for every section. */
|
|
348
|
+
Unset takes the accordion's `hidden-until-found`, which is on. Write
|
|
349
|
+
`hidden-until-found="false"` to keep find in page out of this section: a
|
|
350
|
+
closed section is then `hidden` and `inert`. */
|
|
346
351
|
hiddenUntilFound?: (HelixHeadlessAccordionItem["hiddenUntilFound"]) | undefined;
|
|
347
352
|
/** A group name. Opening an item closes the other items with the same name,
|
|
348
353
|
as `<details name>` does.
|
|
@@ -401,12 +406,18 @@ Unset is 3. An item's own `heading-level` wins over this. */
|
|
|
401
406
|
Unset is 3. An item's own `heading-level` wins over this. */
|
|
402
407
|
headingLevel?: (HelixHeadlessAccordion["headingLevel"]) | undefined;
|
|
403
408
|
/** Whether find in page searches every closed section, and opens the one it
|
|
404
|
-
matches in.
|
|
405
|
-
|
|
409
|
+
matches in.
|
|
410
|
+
|
|
411
|
+
On by default, as in React Aria's disclosure. Write
|
|
412
|
+
`hidden-until-found="false"` to turn it off for every section; an item's
|
|
413
|
+
own `hidden-until-found` wins for that item. */
|
|
406
414
|
"hidden-until-found"?: (HelixHeadlessAccordion["hiddenUntilFound"]) | undefined;
|
|
407
415
|
/** Whether find in page searches every closed section, and opens the one it
|
|
408
|
-
matches in.
|
|
409
|
-
|
|
416
|
+
matches in.
|
|
417
|
+
|
|
418
|
+
On by default, as in React Aria's disclosure. Write
|
|
419
|
+
`hidden-until-found="false"` to turn it off for every section; an item's
|
|
420
|
+
own `hidden-until-found` wins for that item. */
|
|
410
421
|
hiddenUntilFound?: (HelixHeadlessAccordion["hiddenUntilFound"]) | undefined;
|
|
411
422
|
/** How many sections may be open at once.
|
|
412
423
|
|
|
@@ -559,6 +570,13 @@ The same three values `LineChart` takes, with the same fallback: a bare
|
|
|
559
570
|
rather than under them, because the bands are opaque and a rule under one is
|
|
560
571
|
a rule nobody sees. */
|
|
561
572
|
gridlines?: (HelixHeadlessAreaChart["gridlines"]) | undefined;
|
|
573
|
+
/** Draws every band from zero, in front of the next, so a band's height is
|
|
574
|
+
its own part's amount and not its place in a stack.
|
|
575
|
+
|
|
576
|
+
Absent stacks the parts, so the top edge is the total. Set, the first
|
|
577
|
+
column is in front and the scale fits the largest part. Reflected, because
|
|
578
|
+
the styled tier lets the bands behind show through the ones in front. */
|
|
579
|
+
overlap?: (HelixHeadlessAreaChart["overlap"]) | undefined;
|
|
562
580
|
/** Draws each reading as a hundred percent, so each band shows its share of
|
|
563
581
|
the total.
|
|
564
582
|
|
|
@@ -589,6 +607,22 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
589
607
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
590
608
|
writes them, whatever this says. */
|
|
591
609
|
locale?: (HelixHeadlessAreaChart["locale"]) | undefined;
|
|
610
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
611
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
612
|
+
`locale`.
|
|
613
|
+
|
|
614
|
+
Set it to the words of the page's language, such as `{position} von
|
|
615
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
616
|
+
legend hid is not counted. */
|
|
617
|
+
"position-label"?: (HelixHeadlessAreaChart["positionLabel"]) | undefined;
|
|
618
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
619
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
620
|
+
`locale`.
|
|
621
|
+
|
|
622
|
+
Set it to the words of the page's language, such as `{position} von
|
|
623
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
624
|
+
legend hid is not counted. */
|
|
625
|
+
positionLabel?: (HelixHeadlessAreaChart["positionLabel"]) | undefined;
|
|
592
626
|
};
|
|
593
627
|
|
|
594
628
|
export type HelixHeadlessAreaChartVueEvents = {};
|
|
@@ -613,15 +647,17 @@ everyone, assigning a matching property rather than an attribute.
|
|
|
613
647
|
takes no default**: `max = 0` would stamp `max="0"` onto every host that
|
|
614
648
|
never asked for a limit, including on the server. */
|
|
615
649
|
max?: (HelixHeadlessAvatarGroup["max"]) | undefined;
|
|
616
|
-
/** What a screen reader is told the count is, with `{count}` for the number
|
|
650
|
+
/** What a screen reader is told the count is, with `{count}` for the number
|
|
651
|
+
and `{names}` for the people it stands for, by each avatar's `name`.
|
|
617
652
|
|
|
618
653
|
The count shows "+3", which reads as "plus three" and says nothing about
|
|
619
|
-
what was counted. */
|
|
654
|
+
what was counted, nor who. */
|
|
620
655
|
"overflow-label"?: (HelixHeadlessAvatarGroup["overflowLabel"]) | undefined;
|
|
621
|
-
/** What a screen reader is told the count is, with `{count}` for the number
|
|
656
|
+
/** What a screen reader is told the count is, with `{count}` for the number
|
|
657
|
+
and `{names}` for the people it stands for, by each avatar's `name`.
|
|
622
658
|
|
|
623
659
|
The count shows "+3", which reads as "plus three" and says nothing about
|
|
624
|
-
what was counted. */
|
|
660
|
+
what was counted, nor who. */
|
|
625
661
|
overflowLabel?: (HelixHeadlessAvatarGroup["overflowLabel"]) | undefined;
|
|
626
662
|
};
|
|
627
663
|
|
|
@@ -652,6 +688,19 @@ replaces them when it arrives, so a slow connection shows who it is
|
|
|
652
688
|
without a cached picture flashing initials first. Radix's `delayMs` is the
|
|
653
689
|
same idea. */
|
|
654
690
|
fallbackDelay?: (HelixHeadlessAvatar["fallbackDelay"]) | undefined;
|
|
691
|
+
/** The letters shown where no picture loaded, such as `GH`, in place of the
|
|
692
|
+
ones taken from `name`.
|
|
693
|
+
|
|
694
|
+
For a name whose initials are not its first and last letters, or an
|
|
695
|
+
entity with a short mark of its own. Absent, the first letters of the
|
|
696
|
+
first and last words of `name` are shown. */
|
|
697
|
+
initials?: (HelixHeadlessAvatar["initials"]) | undefined;
|
|
698
|
+
/** When the browser fetches the picture: `lazy` waits until it is near the
|
|
699
|
+
screen, as an `<img loading="lazy">` does, and `eager` fetches it at once.
|
|
700
|
+
|
|
701
|
+
Absent is the browser's own default, which is `eager`. `lazy` suits a long
|
|
702
|
+
list of people, most of them off screen. */
|
|
703
|
+
loading?: (HelixHeadlessAvatar["loading"]) | undefined;
|
|
655
704
|
/** Name of the person or entity.
|
|
656
705
|
|
|
657
706
|
Used for the label and the initials. */
|
|
@@ -681,10 +730,28 @@ export type HelixHeadlessAvatarVueEvents = {
|
|
|
681
730
|
};
|
|
682
731
|
|
|
683
732
|
export type HelixHeadlessBadgeVueProps = {
|
|
733
|
+
/** `Intl.NumberFormat` options a count is written with, such as
|
|
734
|
+
`{"notation":"compact"}` for `1.2K`, written as JSON in the attribute.
|
|
735
|
+
|
|
736
|
+
Absent, a count is shown as it was given. Text that is not a number is
|
|
737
|
+
shown as it is either way. */
|
|
738
|
+
"format-options"?: (HelixHeadlessBadge["formatOptions"]) | undefined;
|
|
739
|
+
/** `Intl.NumberFormat` options a count is written with, such as
|
|
740
|
+
`{"notation":"compact"}` for `1.2K`, written as JSON in the attribute.
|
|
741
|
+
|
|
742
|
+
Absent, a count is shown as it was given. Text that is not a number is
|
|
743
|
+
shown as it is either way. */
|
|
744
|
+
formatOptions?: (HelixHeadlessBadge["formatOptions"]) | undefined;
|
|
684
745
|
/** The badge's name, read by screen readers.
|
|
685
746
|
|
|
686
|
-
Required for a dot, which has no text to read.
|
|
747
|
+
Required for a dot, which has no text to read. `{count}` is replaced with
|
|
748
|
+
what the badge shows, so `label="{count} unread"` reads "8 unread" and
|
|
749
|
+
stays current as `value` changes, with no label of yours to keep in step. */
|
|
687
750
|
label?: (HelixHeadlessBadge["label"]) | undefined;
|
|
751
|
+
/** The locale a count is written in under `format-options`, such as `de`.
|
|
752
|
+
|
|
753
|
+
Absent uses the runtime's own. */
|
|
754
|
+
locale?: (HelixHeadlessBadge["locale"]) | undefined;
|
|
688
755
|
/** The largest number the badge shows.
|
|
689
756
|
|
|
690
757
|
Past it the indicator reads `{max}+`. */
|
|
@@ -798,6 +865,15 @@ scales at once is a rule that means nothing. The tooltip is unaffected: it
|
|
|
798
865
|
has always shown every column's own number, which is the reader's way out
|
|
799
866
|
of any scale question the picture raises. */
|
|
800
867
|
secondary?: (HelixHeadlessBarChart["secondary"]) | undefined;
|
|
868
|
+
/** Stacks a category's columns into one, each series standing on the ones
|
|
869
|
+
before it, so the column's height is the category's total.
|
|
870
|
+
|
|
871
|
+
Absent stands them side by side, as it always did. A negative reading
|
|
872
|
+
hangs below zero on the negatives before it, so neither direction hides
|
|
873
|
+
the other. The scale fits the stacks. A series
|
|
874
|
+
in `lines` is still a line, measured on its own reading; columns on the
|
|
875
|
+
second scale stack among themselves. */
|
|
876
|
+
stacked?: (HelixHeadlessBarChart["stacked"]) | undefined;
|
|
801
877
|
/** The id of the table to read.
|
|
802
878
|
|
|
803
879
|
Names a table in the same tree, so a chart inside another component's
|
|
@@ -818,6 +894,22 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
818
894
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
819
895
|
writes them, whatever this says. */
|
|
820
896
|
locale?: (HelixHeadlessBarChart["locale"]) | undefined;
|
|
897
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
898
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
899
|
+
`locale`.
|
|
900
|
+
|
|
901
|
+
Set it to the words of the page's language, such as `{position} von
|
|
902
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
903
|
+
legend hid is not counted. */
|
|
904
|
+
"position-label"?: (HelixHeadlessBarChart["positionLabel"]) | undefined;
|
|
905
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
906
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
907
|
+
`locale`.
|
|
908
|
+
|
|
909
|
+
Set it to the words of the page's language, such as `{position} von
|
|
910
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
911
|
+
legend hid is not counted. */
|
|
912
|
+
positionLabel?: (HelixHeadlessBarChart["positionLabel"]) | undefined;
|
|
821
913
|
};
|
|
822
914
|
|
|
823
915
|
export type HelixHeadlessBarChartVueEvents = {};
|
|
@@ -861,9 +953,23 @@ The consumer's decision. */
|
|
|
861
953
|
export type HelixHeadlessBreadcrumbVueEvents = {};
|
|
862
954
|
|
|
863
955
|
export type HelixHeadlessBreadcrumbsVueProps = {
|
|
956
|
+
/** The name of the button that shows a folded trail's hidden crumbs. `{count}`
|
|
957
|
+
is replaced by how many it shows. Translate it with the page. */
|
|
958
|
+
"expand-label"?: (HelixHeadlessBreadcrumbs["expandLabel"]) | undefined;
|
|
959
|
+
/** The name of the button that shows a folded trail's hidden crumbs. `{count}`
|
|
960
|
+
is replaced by how many it shows. Translate it with the page. */
|
|
961
|
+
expandLabel?: (HelixHeadlessBreadcrumbs["expandLabel"]) | undefined;
|
|
864
962
|
/** The landmark's name, read by screen readers. An `aria-label` on the host
|
|
865
963
|
wins over it. */
|
|
866
964
|
label?: (HelixHeadlessBreadcrumbs["label"]) | undefined;
|
|
965
|
+
/** The most crumbs a trail drawn from `items` shows before it folds its middle
|
|
966
|
+
into one, counting the first and the last. Unset, it never folds. At least
|
|
967
|
+
2, so the first crumb and the current page always show. */
|
|
968
|
+
"max-items"?: (HelixHeadlessBreadcrumbs["maxItems"] | `${number}`) | undefined;
|
|
969
|
+
/** The most crumbs a trail drawn from `items` shows before it folds its middle
|
|
970
|
+
into one, counting the first and the last. Unset, it never folds. At least
|
|
971
|
+
2, so the first crumb and the current page always show. */
|
|
972
|
+
maxItems?: (HelixHeadlessBreadcrumbs["maxItems"]) | undefined;
|
|
867
973
|
/** The trail as data, drawn as crumbs before any you slot. The last item is the
|
|
868
974
|
current page.
|
|
869
975
|
|
|
@@ -902,6 +1008,15 @@ column. */
|
|
|
902
1008
|
|
|
903
1009
|
export type HelixHeadlessButtonGroupVueEvents = {};
|
|
904
1010
|
|
|
1011
|
+
/** `HelixHeadlessButton` component event */
|
|
1012
|
+
export type HelixHeadlessButtonElementEvent<E = Event> = TypedEvent<
|
|
1013
|
+
HelixHeadlessButton,
|
|
1014
|
+
E
|
|
1015
|
+
>;
|
|
1016
|
+
/** `helix-press` event type */
|
|
1017
|
+
export type HelixHeadlessButtonHelixPressElementEvent =
|
|
1018
|
+
HelixHeadlessButtonElementEvent<HelixPressEvent>;
|
|
1019
|
+
|
|
905
1020
|
export type HelixHeadlessButtonVueProps = {
|
|
906
1021
|
/** What to send when the button is activated, and what to send it to.
|
|
907
1022
|
|
|
@@ -925,33 +1040,23 @@ is the platform's `commandfor`. */
|
|
|
925
1040
|
commandFor?: (HelixHeadlessButton["commandFor"]) | undefined;
|
|
926
1041
|
/** Where this button's submission goes, overriding the form's own.
|
|
927
1042
|
|
|
928
|
-
**The five `form*` overrides
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
937
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
938
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
939
|
-
native submitter would have given it, which is the point. */
|
|
1043
|
+
**The five `form*` overrides ride on a native submit button that stands in
|
|
1044
|
+
for this one**, because `requestSubmit(submitter)` refuses the inner
|
|
1045
|
+
`<button>` twice over: it is `type="button"`, and it sits in this shadow
|
|
1046
|
+
root, so its form owner is not the consumer's form. The stand-in is a
|
|
1047
|
+
hidden `<button type="submit">` in the form for the one synchronous call,
|
|
1048
|
+
so the platform applies the overrides to that submission alone and leaves
|
|
1049
|
+
the form as it was. See `submitAs`. */
|
|
940
1050
|
formaction?: (HelixHeadlessButton["formAction"]) | undefined;
|
|
941
1051
|
/** Where this button's submission goes, overriding the form's own.
|
|
942
1052
|
|
|
943
|
-
**The five `form*` overrides
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
952
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
953
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
954
|
-
native submitter would have given it, which is the point. */
|
|
1053
|
+
**The five `form*` overrides ride on a native submit button that stands in
|
|
1054
|
+
for this one**, because `requestSubmit(submitter)` refuses the inner
|
|
1055
|
+
`<button>` twice over: it is `type="button"`, and it sits in this shadow
|
|
1056
|
+
root, so its form owner is not the consumer's form. The stand-in is a
|
|
1057
|
+
hidden `<button type="submit">` in the form for the one synchronous call,
|
|
1058
|
+
so the platform applies the overrides to that submission alone and leaves
|
|
1059
|
+
the form as it was. See `submitAs`. */
|
|
955
1060
|
formAction?: (HelixHeadlessButton["formAction"]) | undefined;
|
|
956
1061
|
/** How the submission is encoded, overriding the form's own. */
|
|
957
1062
|
formenctype?: (HelixHeadlessButton["formEnctype"]) | undefined;
|
|
@@ -997,13 +1102,10 @@ a press, so focus stays where the reader left it. */
|
|
|
997
1102
|
/** The value this button submits under its own `name`, as a native submit
|
|
998
1103
|
button does.
|
|
999
1104
|
|
|
1000
|
-
**
|
|
1105
|
+
**Sent with exactly the submission this button starts and not otherwise.**
|
|
1001
1106
|
A native submit button contributes `name=value` only when it is the one
|
|
1002
|
-
that submitted, and every other button on the form contributes nothing
|
|
1003
|
-
|
|
1004
|
-
every submission whoever started it, which is a different feature wearing
|
|
1005
|
-
the same name, so `submit` below sets it, submits, and clears it inside one
|
|
1006
|
-
synchronous call.
|
|
1107
|
+
that submitted, and every other button on the form contributes nothing,
|
|
1108
|
+
which is what the native button standing in for this one at submit does.
|
|
1007
1109
|
|
|
1008
1110
|
`CopyButton` has a `value` of its own meaning the text to put on the
|
|
1009
1111
|
clipboard, which is not this and is why it is declared there rather than
|
|
@@ -1089,7 +1191,10 @@ invoker without an id in the same tree needs. */
|
|
|
1089
1191
|
commandForElement?: (HelixHeadlessButton["commandForElement"]) | undefined;
|
|
1090
1192
|
};
|
|
1091
1193
|
|
|
1092
|
-
export type HelixHeadlessButtonVueEvents = {
|
|
1194
|
+
export type HelixHeadlessButtonVueEvents = {
|
|
1195
|
+
/** Fired when a press acts, with `detail.pointerType` saying what pressed the button. */
|
|
1196
|
+
"helix-press": HelixHeadlessButtonHelixPressElementEvent;
|
|
1197
|
+
};
|
|
1093
1198
|
|
|
1094
1199
|
/** `HelixHeadlessCallout` component event */
|
|
1095
1200
|
export type HelixHeadlessCalloutElementEvent<E = Event> = TypedEvent<
|
|
@@ -1229,9 +1334,10 @@ format does too, and moves them with it. Its `label` is drawn above it. */
|
|
|
1229
1334
|
/** The card's name as text. A group shows it, and another card's connections
|
|
1230
1335
|
read it out.
|
|
1231
1336
|
|
|
1232
|
-
A group needs one because it has no text of its own
|
|
1233
|
-
|
|
1234
|
-
|
|
1337
|
+
A group needs one because it has no text of its own. A card is named by
|
|
1338
|
+
it where it is set, and by its content where it is not, so a screen reader
|
|
1339
|
+
moving between cards hears each one's name. Set it on a card holding a
|
|
1340
|
+
picture or a figure, which has no words short enough to name it. */
|
|
1235
1341
|
label?: (HelixHeadlessCanvasNode["label"]) | undefined;
|
|
1236
1342
|
/** The name that connections and events use for this card, unique on its
|
|
1237
1343
|
board.
|
|
@@ -1681,6 +1787,12 @@ export type HelixHeadlessCanvasVueEvents = {
|
|
|
1681
1787
|
};
|
|
1682
1788
|
|
|
1683
1789
|
export type HelixHeadlessCardVueProps = {
|
|
1790
|
+
/** The card's accessible name, which makes it a named group.
|
|
1791
|
+
|
|
1792
|
+
The name `Stat.Group` and the other named regions take, set through
|
|
1793
|
+
`ElementInternals`. `aria-label` and `aria-labelledby` written on the card
|
|
1794
|
+
name it too, and win over this, as an author's attribute does. */
|
|
1795
|
+
label?: (HelixHeadlessCard["label"]) | undefined;
|
|
1684
1796
|
/** Places the media after the content. By default it comes before.
|
|
1685
1797
|
|
|
1686
1798
|
**A figure that concludes a card is the same region as one that opens it**,
|
|
@@ -1962,6 +2074,14 @@ it to leave the role as `group`. */
|
|
|
1962
2074
|
/** The word screen readers announce in place of a slide's role, set as
|
|
1963
2075
|
`aria-roledescription`. Translate it with the rest of your text. */
|
|
1964
2076
|
slideRoleLabel?: (HelixHeadlessCarousel["slideRoleLabel"]) | undefined;
|
|
2077
|
+
/** How many slides Previous, Next, the indicators, rotation, and a drag move
|
|
2078
|
+
at a time. Unset moves one. The track stops at every `slides-per-move`th
|
|
2079
|
+
position from the first, and at the last. */
|
|
2080
|
+
"slides-per-move"?: (HelixHeadlessCarousel["slidesPerMove"] | `${number}`) | undefined;
|
|
2081
|
+
/** How many slides Previous, Next, the indicators, rotation, and a drag move
|
|
2082
|
+
at a time. Unset moves one. The track stops at every `slides-per-move`th
|
|
2083
|
+
position from the first, and at the last. */
|
|
2084
|
+
slidesPerMove?: (HelixHeadlessCarousel["slidesPerMove"]) | undefined;
|
|
1965
2085
|
/** The name of the rotation control while rotation is stopped. */
|
|
1966
2086
|
"start-label"?: (HelixHeadlessCarousel["startLabel"]) | undefined;
|
|
1967
2087
|
/** The name of the rotation control while rotation is stopped. */
|
|
@@ -2151,6 +2271,22 @@ export type HelixHeadlessChatHelixSendElementEvent =
|
|
|
2151
2271
|
HelixHeadlessChatElementEvent<HelixSendEvent>;
|
|
2152
2272
|
|
|
2153
2273
|
export type HelixHeadlessChatVueProps = {
|
|
2274
|
+
/** Declarations for the turns from `turns` by each author, keyed by `author`,
|
|
2275
|
+
as JSON in the attribute: `{"ada": "--chat-message-background-color: …"}`.
|
|
2276
|
+
|
|
2277
|
+
The message drawn for each turn by that author takes them as its `style`,
|
|
2278
|
+
so the custom properties a message reads, its fill, text color, radius and
|
|
2279
|
+
padding, change for that author alone. A turn by an author with no entry
|
|
2280
|
+
takes none, and looks as it did. JSON that does not parse is no entries. */
|
|
2281
|
+
"author-styles"?: (HelixHeadlessChat["authorStyles"]) | undefined;
|
|
2282
|
+
/** Declarations for the turns from `turns` by each author, keyed by `author`,
|
|
2283
|
+
as JSON in the attribute: `{"ada": "--chat-message-background-color: …"}`.
|
|
2284
|
+
|
|
2285
|
+
The message drawn for each turn by that author takes them as its `style`,
|
|
2286
|
+
so the custom properties a message reads, its fill, text color, radius and
|
|
2287
|
+
padding, change for that author alone. A turn by an author with no entry
|
|
2288
|
+
takes none, and looks as it did. JSON that does not parse is no entries. */
|
|
2289
|
+
authorStyles?: (HelixHeadlessChat["authorStyles"]) | undefined;
|
|
2154
2290
|
/** Whether the transcript opens pinned to the bottom, when `pinned` is not
|
|
2155
2291
|
set.
|
|
2156
2292
|
|
|
@@ -2215,6 +2351,23 @@ one of paragraphs, and a reader who has scrolled up by half a message has
|
|
|
2215
2351
|
not left. The same distance from the top is what counts as reaching the
|
|
2216
2352
|
history. */
|
|
2217
2353
|
threshold?: (HelixHeadlessChat["threshold"]) | undefined;
|
|
2354
|
+
/** The name a screen reader gives a turn with neither an author it can say
|
|
2355
|
+
nor a time: a turn by `them` with no `author-label`, say. */
|
|
2356
|
+
"turn-label"?: (HelixHeadlessChat["turnLabel"]) | undefined;
|
|
2357
|
+
/** The name a screen reader gives a turn with neither an author it can say
|
|
2358
|
+
nor a time: a turn by `them` with no `author-label`, say. */
|
|
2359
|
+
turnLabel?: (HelixHeadlessChat["turnLabel"]) | undefined;
|
|
2360
|
+
/** Who on the other side is typing, by name, or empty while nobody is.
|
|
2361
|
+
|
|
2362
|
+
Set it from your connection, and clear it when they stop or send. The
|
|
2363
|
+
status band says it with `typing-label`. */
|
|
2364
|
+
typing?: (HelixHeadlessChat["typing"]) | undefined;
|
|
2365
|
+
/** What the status band says while someone is typing. `{author}` is the
|
|
2366
|
+
name in `typing`. */
|
|
2367
|
+
"typing-label"?: (HelixHeadlessChat["typingLabel"]) | undefined;
|
|
2368
|
+
/** What the status band says while someone is typing. `{author}` is the
|
|
2369
|
+
name in `typing`. */
|
|
2370
|
+
typingLabel?: (HelixHeadlessChat["typingLabel"]) | undefined;
|
|
2218
2371
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
2219
2372
|
"empty-text"?: (HelixHeadlessChat["emptyText"]) | undefined;
|
|
2220
2373
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
@@ -2376,9 +2529,13 @@ Not reflected: the attribute is the consumer's input and stays as they
|
|
|
2376
2529
|
wrote it, and `:state(checked)` carries the resolved state for
|
|
2377
2530
|
stylesheets. */
|
|
2378
2531
|
checked?: (HelixHeadlessCheckbox["checked"]) | undefined;
|
|
2379
|
-
/** Whether the control starts checked. A form reset returns it to this state
|
|
2532
|
+
/** Whether the control starts checked. A form reset returns it to this state,
|
|
2533
|
+
and to the `checked` attribute where this one is not written, as a native
|
|
2534
|
+
checkbox resets to the `checked` it declares. */
|
|
2380
2535
|
"default-checked"?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2381
|
-
/** Whether the control starts checked. A form reset returns it to this state
|
|
2536
|
+
/** Whether the control starts checked. A form reset returns it to this state,
|
|
2537
|
+
and to the `checked` attribute where this one is not written, as a native
|
|
2538
|
+
checkbox resets to the `checked` it declares. */
|
|
2382
2539
|
defaultChecked?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2383
2540
|
/** Whether a reader can see and focus the control and cannot change it. A
|
|
2384
2541
|
read-only control still submits its value.
|
|
@@ -2470,6 +2627,10 @@ export type HelixHeadlessCheckboxVueEvents = {
|
|
|
2470
2627
|
};
|
|
2471
2628
|
|
|
2472
2629
|
export type HelixHeadlessCodeBlockVueProps = {
|
|
2630
|
+
/** The expand button's words while the block shows every line. */
|
|
2631
|
+
"collapse-label"?: (HelixHeadlessCodeBlock["collapseLabel"]) | undefined;
|
|
2632
|
+
/** The expand button's words while the block shows every line. */
|
|
2633
|
+
collapseLabel?: (HelixHeadlessCodeBlock["collapseLabel"]) | undefined;
|
|
2473
2634
|
/** The copy button's name and tooltip text after a copy. */
|
|
2474
2635
|
"copied-label"?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
|
|
2475
2636
|
/** The copy button's name and tooltip text after a copy. */
|
|
@@ -2491,11 +2652,28 @@ In a diff, that is each file's own name. */
|
|
|
2491
2652
|
Reflected, because the stylesheet paints a diff differently from code, and
|
|
2492
2653
|
`false` reflects as no attribute at all. */
|
|
2493
2654
|
diff?: (HelixHeadlessCodeBlock["diff"]) | undefined;
|
|
2655
|
+
/** Whether a block whose height is capped takes a button that shows every
|
|
2656
|
+
line, and fewer again.
|
|
2657
|
+
|
|
2658
|
+
The cap is the page's, `--code-block-max-block-size` on the styled tier;
|
|
2659
|
+
the button is drawn only while the cap hides something, measured as the
|
|
2660
|
+
block lays out. Not for a diff, whose files each scroll on their own. */
|
|
2661
|
+
expandable?: (HelixHeadlessCodeBlock["expandable"]) | undefined;
|
|
2662
|
+
/** The expand button's words while the cap hides lines. */
|
|
2663
|
+
"expand-label"?: (HelixHeadlessCodeBlock["expandLabel"]) | undefined;
|
|
2664
|
+
/** The expand button's words while the cap hides lines. */
|
|
2665
|
+
expandLabel?: (HelixHeadlessCodeBlock["expandLabel"]) | undefined;
|
|
2494
2666
|
/** The block's name, usually a file name or a language.
|
|
2495
2667
|
|
|
2496
2668
|
In a diff, each file is named from the patch, and this names a patch that
|
|
2497
2669
|
carries no name of its own. */
|
|
2498
2670
|
label?: (HelixHeadlessCodeBlock["label"]) | undefined;
|
|
2671
|
+
/** The language the code is written in, such as `ts` or `css`, handed to
|
|
2672
|
+
`highlight` as its second argument.
|
|
2673
|
+
|
|
2674
|
+
Absent hands it an empty string. It draws nothing of its own: the block's
|
|
2675
|
+
name is `label`. */
|
|
2676
|
+
language?: (HelixHeadlessCodeBlock["language"]) | undefined;
|
|
2499
2677
|
/** Whether the lines are numbered in a gutter beside the code.
|
|
2500
2678
|
|
|
2501
2679
|
The numbers are hidden from the accessibility tree and are not part of a
|
|
@@ -2559,13 +2737,24 @@ than defaulted, so the host carries no attribute the consumer did not write. */
|
|
|
2559
2737
|
/** Turns the code into highlighted markup, which the block draws in place of
|
|
2560
2738
|
the plain text.
|
|
2561
2739
|
|
|
2562
|
-
Called with the code as written and
|
|
2563
|
-
Shiki's `codeToHtml` or Prism's `highlight`.
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2740
|
+
Called with the code as written and the block's `language`, and returning
|
|
2741
|
+
HTML, such as the output of Shiki's `codeToHtml` or Prism's `highlight`.
|
|
2742
|
+
One function serves every block on a page, each block saying its own
|
|
2743
|
+
language:
|
|
2744
|
+
|
|
2745
|
+
```js
|
|
2746
|
+
for (const block of document.querySelectorAll('helix-code-block')) {
|
|
2747
|
+
block.highlight = (code, lang) => codeToHtml(code, { lang, theme: 'github-light' })
|
|
2748
|
+
}
|
|
2749
|
+
```
|
|
2750
|
+
|
|
2751
|
+
**The markup is drawn as given**, so it has to escape the code it was
|
|
2752
|
+
handed, which those highlighters do. A `<pre>` and `<code>` around the
|
|
2753
|
+
whole of it, which Shiki writes, are taken off, so the lines sit level
|
|
2754
|
+
with the gutter's numbers and the block keeps one tab stop. The code stays
|
|
2755
|
+
in the slot, so the copy button copies it as written and a reader without
|
|
2756
|
+
the script still has it. Not called on a server, which has no code to
|
|
2757
|
+
read, nor for a diff. */
|
|
2569
2758
|
highlight?: (HelixHeadlessCodeBlock["highlight"]) | undefined;
|
|
2570
2759
|
};
|
|
2571
2760
|
|
|
@@ -2671,6 +2860,9 @@ The trade is real and is the reason this is not the default: a swatch cannot
|
|
|
2671
2860
|
be read or pasted into without opening the panel, which is worse for a form
|
|
2672
2861
|
where the color is the answer rather than a setting. */
|
|
2673
2862
|
variant?: (HelixHeadlessColorInput["variant"]) | undefined;
|
|
2863
|
+
/** Draws the panel's hue as a wheel around the square, in place of the hue
|
|
2864
|
+
ramp. See Color Picker's `wheel`. */
|
|
2865
|
+
wheel?: (HelixHeadlessColorInput["wheel"]) | undefined;
|
|
2674
2866
|
/** The message shown when the field holds text the picker cannot read as a
|
|
2675
2867
|
date, a time, or a color.
|
|
2676
2868
|
|
|
@@ -2704,9 +2896,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
|
|
|
2704
2896
|
last reader did rather than what the author wrote. `:state(open)` carries
|
|
2705
2897
|
the resolved state for stylesheets, which is what the mirror is for. */
|
|
2706
2898
|
open?: (HelixHeadlessColorInput["open"]) | undefined;
|
|
2707
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
2899
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
2900
|
+
and to the `value` attribute where this one is not written, as a native
|
|
2901
|
+
control resets to the `value` it declares. */
|
|
2708
2902
|
"default-value"?: (HelixHeadlessColorInput["defaultValue"]) | undefined;
|
|
2709
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
2903
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
2904
|
+
and to the `value` attribute where this one is not written, as a native
|
|
2905
|
+
control resets to the `value` it declares. */
|
|
2710
2906
|
defaultValue?: (HelixHeadlessColorInput["defaultValue"]) | undefined;
|
|
2711
2907
|
/** The control's current value, which its form submits.
|
|
2712
2908
|
|
|
@@ -2912,14 +3108,6 @@ Only what is written. Everything is read whatever this says, so a picker on
|
|
|
2912
3108
|
"hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
2913
3109
|
/** What the hue channel is called. */
|
|
2914
3110
|
hueLabel?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
2915
|
-
/** Whether the current selection fails validation.
|
|
2916
|
-
|
|
2917
|
-
A flag rather than a message, the split Date Picker also draws. A flat
|
|
2918
|
-
picker has no room of its own for a sentence: the field that wraps one owns
|
|
2919
|
-
the label, the hint and the feedback, and a second message inside the panel
|
|
2920
|
-
would be the same error said twice. What is left for the picker is the one
|
|
2921
|
-
thing the field cannot draw from outside, the mark on the answer itself. */
|
|
2922
|
-
invalid?: (HelixHeadlessColorPicker["invalid"]) | undefined;
|
|
2923
3111
|
/** What the lightness channel's field is called, in `channel-fields` with
|
|
2924
3112
|
hsl. */
|
|
2925
3113
|
"lightness-label"?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
@@ -3073,9 +3261,34 @@ speaks it. Absent is the control's own sentence, in English. */
|
|
|
3073
3261
|
named for the validity flag it reports, so a form in another language
|
|
3074
3262
|
speaks it. Absent is the control's own sentence, in English. */
|
|
3075
3263
|
valueMissingMessage?: (HelixHeadlessColorPicker["valueMissingMessage"]) | undefined;
|
|
3076
|
-
/**
|
|
3264
|
+
/** Draws the hue as a wheel around the square, in place of the hue ramp, as
|
|
3265
|
+
React Aria's ColorWheel sits round its ColorArea.
|
|
3266
|
+
|
|
3267
|
+
The ring is one stop, a slider a reader turns with the arrow keys, Home
|
|
3268
|
+
and End, the same way round in either writing direction, and a press or a
|
|
3269
|
+
drag on it takes the hue in that direction. Off, the picker keeps its
|
|
3270
|
+
ramp. */
|
|
3271
|
+
wheel?: (HelixHeadlessColorPicker["wheel"]) | undefined;
|
|
3272
|
+
/** A message under the picker, such as what is wrong with the answer.
|
|
3273
|
+
|
|
3274
|
+
While set, the picker is invalid and does not submit, as a field's
|
|
3275
|
+
`feedback` is, it is marked invalid to a reader and to CSS, and the
|
|
3276
|
+
controls a reader answers with are described by it. */
|
|
3277
|
+
feedback?: (HelixHeadlessColorPicker["feedback"]) | undefined;
|
|
3278
|
+
/** Whether the answer fails validation, marked on the controls a reader
|
|
3279
|
+
answers with and as `:state(invalid)`.
|
|
3280
|
+
|
|
3281
|
+
A flag a field that wraps the picker sets, since that field owns the
|
|
3282
|
+
label, the hint and the message; on its own, `feedback` both marks the
|
|
3283
|
+
picker and says why. */
|
|
3284
|
+
invalid?: (HelixHeadlessColorPicker["invalid"]) | undefined;
|
|
3285
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3286
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3287
|
+
control resets to the `value` it declares. */
|
|
3077
3288
|
"default-value"?: (HelixHeadlessColorPicker["defaultValue"]) | undefined;
|
|
3078
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
3289
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3290
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3291
|
+
control resets to the `value` it declares. */
|
|
3079
3292
|
defaultValue?: (HelixHeadlessColorPicker["defaultValue"]) | undefined;
|
|
3080
3293
|
/** The control's current value, which its form submits.
|
|
3081
3294
|
|
|
@@ -3147,6 +3360,9 @@ export type HelixHeadlessComboboxHelixCreateElementEvent =
|
|
|
3147
3360
|
/** `helix-filter` event type */
|
|
3148
3361
|
export type HelixHeadlessComboboxHelixFilterElementEvent =
|
|
3149
3362
|
HelixHeadlessComboboxElementEvent<HelixFilterEvent>;
|
|
3363
|
+
/** `helix-load-more` event type */
|
|
3364
|
+
export type HelixHeadlessComboboxHelixLoadMoreElementEvent =
|
|
3365
|
+
HelixHeadlessComboboxElementEvent<HelixLoadMoreEvent>;
|
|
3150
3366
|
/** `toggle` event type */
|
|
3151
3367
|
export type HelixHeadlessComboboxToggleElementEvent =
|
|
3152
3368
|
HelixHeadlessComboboxElementEvent<ToggleEvent>;
|
|
@@ -3193,10 +3409,34 @@ on it adds what was typed. */
|
|
|
3193
3409
|
"empty-text"?: (HelixHeadlessCombobox["emptyText"]) | undefined;
|
|
3194
3410
|
/** Text shown when the filter hides every option. */
|
|
3195
3411
|
emptyText?: (HelixHeadlessCombobox["emptyText"]) | undefined;
|
|
3412
|
+
/** How long typing rests before the list is narrowed and `helix-filter` is
|
|
3413
|
+
sent, in milliseconds.
|
|
3414
|
+
|
|
3415
|
+
For options filtered on a server, where `helix-filter` starts a request: a
|
|
3416
|
+
delay sends one request for a word instead of one per letter. The arrow
|
|
3417
|
+
keys, Enter and Escape narrow at once on what was typed. `0` narrows on
|
|
3418
|
+
every keystroke. See Listbox's `filter-delay`. */
|
|
3419
|
+
"filter-delay"?: (HelixHeadlessCombobox["filterDelay"] | `${number}`) | undefined;
|
|
3420
|
+
/** How long typing rests before the list is narrowed and `helix-filter` is
|
|
3421
|
+
sent, in milliseconds.
|
|
3422
|
+
|
|
3423
|
+
For options filtered on a server, where `helix-filter` starts a request: a
|
|
3424
|
+
delay sends one request for a word instead of one per letter. The arrow
|
|
3425
|
+
keys, Enter and Escape narrow at once on what was typed. `0` narrows on
|
|
3426
|
+
every keystroke. See Listbox's `filter-delay`. */
|
|
3427
|
+
filterDelay?: (HelixHeadlessCombobox["filterDelay"]) | undefined;
|
|
3196
3428
|
/** The list's name, read by screen readers. The list has no visible name. */
|
|
3197
3429
|
"list-label"?: (HelixHeadlessCombobox["listLabel"]) | undefined;
|
|
3198
3430
|
/** The list's name, read by screen readers. The list has no visible name. */
|
|
3199
3431
|
listLabel?: (HelixHeadlessCombobox["listLabel"]) | undefined;
|
|
3432
|
+
/** What the list says when its options could not be loaded, such as after a
|
|
3433
|
+
request to a server fails. Empty is no error. Passed to the list, which
|
|
3434
|
+
shows it under any options there are and tells screen readers. */
|
|
3435
|
+
"load-error"?: (HelixHeadlessCombobox["loadError"]) | undefined;
|
|
3436
|
+
/** What the list says when its options could not be loaded, such as after a
|
|
3437
|
+
request to a server fails. Empty is no error. Passed to the list, which
|
|
3438
|
+
shows it under any options there are and tells screen readers. */
|
|
3439
|
+
loadError?: (HelixHeadlessCombobox["loadError"]) | undefined;
|
|
3200
3440
|
/** Whether the options are still loading.
|
|
3201
3441
|
|
|
3202
3442
|
Passed straight to the list, which is where the rows are and so where the
|
|
@@ -3224,6 +3464,22 @@ property the role does not support and no spec here ever asserted: the one
|
|
|
3224
3464
|
that covers this says in as many words that telling the list is what this
|
|
3225
3465
|
element is responsible for. */
|
|
3226
3466
|
multiple?: (HelixHeadlessCombobox["multiple"]) | undefined;
|
|
3467
|
+
/** The text shown when typing hides every one of the options, where there are
|
|
3468
|
+
some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
3469
|
+
"no-results-text"?: (HelixHeadlessCombobox["noResultsText"]) | undefined;
|
|
3470
|
+
/** The text shown when typing hides every one of the options, where there are
|
|
3471
|
+
some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
3472
|
+
noResultsText?: (HelixHeadlessCombobox["noResultsText"]) | undefined;
|
|
3473
|
+
/** What opens the list: `input`, typing or pressing Down; `focus`, also
|
|
3474
|
+
arriving in the field, by Tab or a press; or `manual`, only Down, Alt+Down
|
|
3475
|
+
or a press on the caret, so typing narrows a list the reader has asked
|
|
3476
|
+
for. React Aria's `menuTrigger`. */
|
|
3477
|
+
"open-on"?: (HelixHeadlessCombobox["openOn"]) | undefined;
|
|
3478
|
+
/** What opens the list: `input`, typing or pressing Down; `focus`, also
|
|
3479
|
+
arriving in the field, by Tab or a press; or `manual`, only Down, Alt+Down
|
|
3480
|
+
or a press on the caret, so typing narrows a list the reader has asked
|
|
3481
|
+
for. React Aria's `menuTrigger`. */
|
|
3482
|
+
openOn?: (HelixHeadlessCombobox["openOn"]) | undefined;
|
|
3227
3483
|
/** Text shown while nothing has been chosen. */
|
|
3228
3484
|
placeholder?: (HelixHeadlessCombobox["placeholder"]) | undefined;
|
|
3229
3485
|
/** Whether the choice is locked. A read-only combobox still submits its value.
|
|
@@ -3302,9 +3558,13 @@ as `+3`, does not say what it does. */
|
|
|
3302
3558
|
"max-tags"?: (HelixHeadlessCombobox["maxTags"] | `${number}`) | undefined;
|
|
3303
3559
|
/** How many tokens to show before the rest become a count. */
|
|
3304
3560
|
maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
|
|
3305
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
3561
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3562
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3563
|
+
control resets to the `value` it declares. */
|
|
3306
3564
|
"default-value"?: (HelixHeadlessCombobox["defaultValue"]) | undefined;
|
|
3307
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
3565
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
3566
|
+
and to the `value` attribute where this one is not written, as a native
|
|
3567
|
+
control resets to the `value` it declares. */
|
|
3308
3568
|
defaultValue?: (HelixHeadlessCombobox["defaultValue"]) | undefined;
|
|
3309
3569
|
/** The control's current value, which its form submits.
|
|
3310
3570
|
|
|
@@ -3391,6 +3651,8 @@ export type HelixHeadlessComboboxVueEvents = {
|
|
|
3391
3651
|
"helix-create": HelixHeadlessComboboxHelixCreateElementEvent;
|
|
3392
3652
|
/** Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and do the filtering yourself. */
|
|
3393
3653
|
"helix-filter": HelixHeadlessComboboxHelixFilterElementEvent;
|
|
3654
|
+
/** Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page and set `loading` while you fetch it. */
|
|
3655
|
+
"helix-load-more": HelixHeadlessComboboxHelixLoadMoreElementEvent;
|
|
3394
3656
|
/** Fired after the value changes. */
|
|
3395
3657
|
input: HelixHeadlessComboboxElementEvent;
|
|
3396
3658
|
/** Fired when the panel opens or closes, with `newState` and `oldState`. */
|
|
@@ -3411,6 +3673,9 @@ export type HelixHeadlessCommandHelixBeforeOpenElementEvent =
|
|
|
3411
3673
|
/** `helix-filter` event type */
|
|
3412
3674
|
export type HelixHeadlessCommandHelixFilterElementEvent =
|
|
3413
3675
|
HelixHeadlessCommandElementEvent<HelixFilterEvent>;
|
|
3676
|
+
/** `helix-load-more` event type */
|
|
3677
|
+
export type HelixHeadlessCommandHelixLoadMoreElementEvent =
|
|
3678
|
+
HelixHeadlessCommandElementEvent<HelixLoadMoreEvent>;
|
|
3414
3679
|
/** `helix-select` event type */
|
|
3415
3680
|
export type HelixHeadlessCommandHelixSelectElementEvent =
|
|
3416
3681
|
HelixHeadlessCommandElementEvent<HelixSelectEvent>;
|
|
@@ -3431,7 +3696,9 @@ so a palette filtered on a server sends one `helix-filter` for a word.
|
|
|
3431
3696
|
so a palette filtered on a server sends one `helix-filter` for a word.
|
|
3432
3697
|
`0` filters on every keystroke. See Listbox's `filter-delay`. */
|
|
3433
3698
|
filterDelay?: (HelixHeadlessCommand["filterDelay"]) | undefined;
|
|
3434
|
-
/** The key that opens the palette, written as `mod+k`, `shift+p`, or `k
|
|
3699
|
+
/** The key that opens the palette, written as `mod+k`, `shift+p`, or `k`,
|
|
3700
|
+
in Kbd's chord spelling: `mod` is Command or Control, `ctrl`, `cmd`,
|
|
3701
|
+
`alt` and `shift` the keys they name.
|
|
3435
3702
|
|
|
3436
3703
|
Empty turns it off, for a consumer who opens the palette from a button or
|
|
3437
3704
|
from their own shortcut handler. There is no list of defaults to fight
|
|
@@ -3439,6 +3706,14 @@ with: one key, said once. */
|
|
|
3439
3706
|
hotkey?: (HelixHeadlessCommand["hotkey"]) | undefined;
|
|
3440
3707
|
/** Accessible name for the overlay, which has no visible heading. */
|
|
3441
3708
|
label?: (HelixHeadlessCommand["label"]) | undefined;
|
|
3709
|
+
/** What the list says when its commands could not be loaded, such as after a
|
|
3710
|
+
request to a server fails. Empty is no error. Passed to the list, which
|
|
3711
|
+
shows it under any commands there are and tells screen readers. */
|
|
3712
|
+
"load-error"?: (HelixHeadlessCommand["loadError"]) | undefined;
|
|
3713
|
+
/** What the list says when its commands could not be loaded, such as after a
|
|
3714
|
+
request to a server fails. Empty is no error. Passed to the list, which
|
|
3715
|
+
shows it under any commands there are and tells screen readers. */
|
|
3716
|
+
loadError?: (HelixHeadlessCommand["loadError"]) | undefined;
|
|
3442
3717
|
/** Whether the commands are still loading, for a palette that asks a server
|
|
3443
3718
|
for them as the user types.
|
|
3444
3719
|
|
|
@@ -3448,6 +3723,12 @@ Passed to the list, which shows `loading-text` and tells screen readers. */
|
|
|
3448
3723
|
"loading-text"?: (HelixHeadlessCommand["loadingText"]) | undefined;
|
|
3449
3724
|
/** The text shown while the commands load. */
|
|
3450
3725
|
loadingText?: (HelixHeadlessCommand["loadingText"]) | undefined;
|
|
3726
|
+
/** The text shown when typing hides every one of the commands, where there are
|
|
3727
|
+
some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
3728
|
+
"no-results-text"?: (HelixHeadlessCommand["noResultsText"]) | undefined;
|
|
3729
|
+
/** The text shown when typing hides every one of the commands, where there are
|
|
3730
|
+
some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
|
|
3731
|
+
noResultsText?: (HelixHeadlessCommand["noResultsText"]) | undefined;
|
|
3451
3732
|
/** The text shown in the filter field before anything is typed. */
|
|
3452
3733
|
placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
|
|
3453
3734
|
/** What a screen reader hears when typing leaves one command. `{count}` is
|
|
@@ -3490,6 +3771,8 @@ export type HelixHeadlessCommandVueEvents = {
|
|
|
3490
3771
|
"helix-before-open": HelixHeadlessCommandHelixBeforeOpenElementEvent;
|
|
3491
3772
|
/** 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. */
|
|
3492
3773
|
"helix-filter": HelixHeadlessCommandHelixFilterElementEvent;
|
|
3774
|
+
/** Fired once the list is scrolled within a screen of its end, once for each number of commands, and not while `loading` is set. Add the next page and set `loading` while you fetch it. */
|
|
3775
|
+
"helix-load-more": HelixHeadlessCommandHelixLoadMoreElementEvent;
|
|
3493
3776
|
/** 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. */
|
|
3494
3777
|
"helix-select": HelixHeadlessCommandHelixSelectElementEvent;
|
|
3495
3778
|
/** The palette opened or closed. The event carries `newState` and `oldState`. */
|
|
@@ -3507,6 +3790,9 @@ export type HelixHeadlessCopyButtonHelixCopyElementEvent =
|
|
|
3507
3790
|
/** `helix-copy-error` event type */
|
|
3508
3791
|
export type HelixHeadlessCopyButtonHelixCopyErrorElementEvent =
|
|
3509
3792
|
HelixHeadlessCopyButtonElementEvent<HelixCopyErrorEvent>;
|
|
3793
|
+
/** `helix-press` event type */
|
|
3794
|
+
export type HelixHeadlessCopyButtonHelixPressElementEvent =
|
|
3795
|
+
HelixHeadlessCopyButtonElementEvent<HelixPressEvent>;
|
|
3510
3796
|
|
|
3511
3797
|
export type HelixHeadlessCopyButtonVueProps = {
|
|
3512
3798
|
/** The button's name and tooltip text after a copy.
|
|
@@ -3525,6 +3811,12 @@ clipboard. */
|
|
|
3525
3811
|
/** The button's name and tooltip text after a press that put nothing on the
|
|
3526
3812
|
clipboard. */
|
|
3527
3813
|
errorLabel?: (HelixHeadlessCopyButton["errorLabel"]) | undefined;
|
|
3814
|
+
/** How long the confirmation or the failure stands, in milliseconds, before
|
|
3815
|
+
the button goes back to `label`. */
|
|
3816
|
+
"feedback-duration"?: (HelixHeadlessCopyButton["feedbackDuration"] | `${number}`) | undefined;
|
|
3817
|
+
/** How long the confirmation or the failure stands, in milliseconds, before
|
|
3818
|
+
the button goes back to `label`. */
|
|
3819
|
+
feedbackDuration?: (HelixHeadlessCopyButton["feedbackDuration"]) | undefined;
|
|
3528
3820
|
/** The element to copy from, by its id: `key` for its text, `key[value]` for
|
|
3529
3821
|
an attribute, and `key.value` for a property. Read at the press, and used
|
|
3530
3822
|
in place of `value`. An element that is not there copies nothing, which is
|
|
@@ -3611,6 +3903,8 @@ export type HelixHeadlessCopyButtonVueEvents = {
|
|
|
3611
3903
|
"helix-copy": HelixHeadlessCopyButtonHelixCopyElementEvent;
|
|
3612
3904
|
/** Fired when a press put nothing on the clipboard: the browser did not allow the write, or there was nothing to copy. */
|
|
3613
3905
|
"helix-copy-error": HelixHeadlessCopyButtonHelixCopyErrorElementEvent;
|
|
3906
|
+
/** Fired when a press acts, with `detail.pointerType` saying what pressed the button. */
|
|
3907
|
+
"helix-press": HelixHeadlessCopyButtonHelixPressElementEvent;
|
|
3614
3908
|
};
|
|
3615
3909
|
|
|
3616
3910
|
/** `HelixHeadlessDataTable` component event */
|
|
@@ -4079,7 +4373,11 @@ Saturday.
|
|
|
4079
4373
|
Absent follows `locale`, where the engine knows the week of that language,
|
|
4080
4374
|
and is Sunday otherwise. */
|
|
4081
4375
|
firstDayOfWeek?: (HelixHeadlessDateInput["firstDayOfWeek"]) | undefined;
|
|
4082
|
-
/** The language tag for the
|
|
4376
|
+
/** The language tag for the field's order and words, and for the names of
|
|
4377
|
+
months and days in the calendar.
|
|
4378
|
+
|
|
4379
|
+
Absent is the page's: the `lang` of the nearest element with one, as
|
|
4380
|
+
Shoelace and Web Awesome read it, then the runtime's own. */
|
|
4083
4381
|
locale?: (HelixHeadlessDateInput["locale"]) | undefined;
|
|
4084
4382
|
/** The latest date that can be chosen, as `YYYY-MM-DD`. */
|
|
4085
4383
|
max?: (HelixHeadlessDateInput["max"]) | undefined;
|
|
@@ -4284,9 +4582,13 @@ as `+3`, does not say what it does. */
|
|
|
4284
4582
|
"max-tags"?: (HelixHeadlessDateInput["maxTags"] | `${number}`) | undefined;
|
|
4285
4583
|
/** How many tokens to show before the rest become a count. */
|
|
4286
4584
|
maxTags?: (HelixHeadlessDateInput["maxTags"]) | undefined;
|
|
4287
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
4585
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
4586
|
+
and to the `value` attribute where this one is not written, as a native
|
|
4587
|
+
control resets to the `value` it declares. */
|
|
4288
4588
|
"default-value"?: (HelixHeadlessDateInput["defaultValue"]) | undefined;
|
|
4289
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
4589
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
4590
|
+
and to the `value` attribute where this one is not written, as a native
|
|
4591
|
+
control resets to the `value` it declares. */
|
|
4290
4592
|
defaultValue?: (HelixHeadlessDateInput["defaultValue"]) | undefined;
|
|
4291
4593
|
/** The control's current value, which its form submits.
|
|
4292
4594
|
|
|
@@ -4441,13 +4743,12 @@ Absent follows `locale`, where the engine knows the week of that language
|
|
|
4441
4743
|
Absent follows `locale`, where the engine knows the week of that language
|
|
4442
4744
|
(Firefox does not), and is Sunday otherwise. */
|
|
4443
4745
|
firstDayOfWeek?: (HelixHeadlessDatePicker["firstDayOfWeek"]) | undefined;
|
|
4444
|
-
/** Whether the current selection fails validation. */
|
|
4445
|
-
invalid?: (HelixHeadlessDatePicker["invalid"]) | undefined;
|
|
4446
4746
|
/** Accessible name for the grid. */
|
|
4447
4747
|
label?: (HelixHeadlessDatePicker["label"]) | undefined;
|
|
4448
|
-
/** Locale for month and day names.
|
|
4748
|
+
/** Locale for month and day names, and the day a week starts on.
|
|
4449
4749
|
|
|
4450
|
-
Absent
|
|
4750
|
+
Absent is the page's: the `lang` of the nearest element with one, as
|
|
4751
|
+
Shoelace and Web Awesome read it, then the runtime's own. */
|
|
4451
4752
|
locale?: (HelixHeadlessDatePicker["locale"]) | undefined;
|
|
4452
4753
|
/** Latest selectable date, as `YYYY-MM-DD`. */
|
|
4453
4754
|
max?: (HelixHeadlessDatePicker["max"]) | undefined;
|
|
@@ -4597,9 +4898,26 @@ filled in as the year on show. */
|
|
|
4597
4898
|
/** The name of the heading where it shows a page of years, with `{heading}`
|
|
4598
4899
|
filled in as the year on show. */
|
|
4599
4900
|
yearViewLabel?: (HelixHeadlessDatePicker["yearViewLabel"]) | undefined;
|
|
4600
|
-
/**
|
|
4901
|
+
/** A message under the picker, such as what is wrong with the answer.
|
|
4902
|
+
|
|
4903
|
+
While set, the picker is invalid and does not submit, as a field's
|
|
4904
|
+
`feedback` is, it is marked invalid to a reader and to CSS, and the
|
|
4905
|
+
controls a reader answers with are described by it. */
|
|
4906
|
+
feedback?: (HelixHeadlessDatePicker["feedback"]) | undefined;
|
|
4907
|
+
/** Whether the answer fails validation, marked on the controls a reader
|
|
4908
|
+
answers with and as `:state(invalid)`.
|
|
4909
|
+
|
|
4910
|
+
A flag a field that wraps the picker sets, since that field owns the
|
|
4911
|
+
label, the hint and the message; on its own, `feedback` both marks the
|
|
4912
|
+
picker and says why. */
|
|
4913
|
+
invalid?: (HelixHeadlessDatePicker["invalid"]) | undefined;
|
|
4914
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
4915
|
+
and to the `value` attribute where this one is not written, as a native
|
|
4916
|
+
control resets to the `value` it declares. */
|
|
4601
4917
|
"default-value"?: (HelixHeadlessDatePicker["defaultValue"]) | undefined;
|
|
4602
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
4918
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
4919
|
+
and to the `value` attribute where this one is not written, as a native
|
|
4920
|
+
control resets to the `value` it declares. */
|
|
4603
4921
|
defaultValue?: (HelixHeadlessDatePicker["defaultValue"]) | undefined;
|
|
4604
4922
|
/** The control's current value, which its form submits.
|
|
4605
4923
|
|
|
@@ -4686,6 +5004,10 @@ The fallback of the `label` slot, so slotted content replaces it rather than
|
|
|
4686
5004
|
appearing beside it. The value itself is the default slot: it is the half
|
|
4687
5005
|
that varies and is often more than text. */
|
|
4688
5006
|
label?: (HelixHeadlessDescriptionListItem["label"]) | undefined;
|
|
5007
|
+
/** Says the values are several `<dd>` elements of your own, so the item
|
|
5008
|
+
draws no `<dd>` of its own around them, on the server too. Without it the
|
|
5009
|
+
item finds them once it runs, and the served markup wraps them until then. */
|
|
5010
|
+
several?: (HelixHeadlessDescriptionListItem["several"]) | undefined;
|
|
4689
5011
|
};
|
|
4690
5012
|
|
|
4691
5013
|
export type HelixHeadlessDescriptionListItemVueEvents = {};
|
|
@@ -4872,6 +5194,22 @@ word is not. Reflected, it wrote a value onto every host a script had set
|
|
|
4872
5194
|
it on for nothing to read. `sweep` beside it is the converse and reflects,
|
|
4873
5195
|
because the styled sheet selects on it. */
|
|
4874
5196
|
hole?: (HelixHeadlessDonutChart["hole"]) | undefined;
|
|
5197
|
+
/** Writes each slice's share on the slice, the `slice-label` part, so a
|
|
5198
|
+
reader sees the parts without a legend or a pointer: "29%" in the middle
|
|
5199
|
+
of the band.
|
|
5200
|
+
|
|
5201
|
+
Absent writes none. A slice under a twentieth of the whole takes no
|
|
5202
|
+
label, there being no room on it for one. A screen reader hears every
|
|
5203
|
+
share in the summary, and the labels are hidden from it. */
|
|
5204
|
+
"slice-labels"?: (HelixHeadlessDonutChart["sliceLabels"]) | undefined;
|
|
5205
|
+
/** Writes each slice's share on the slice, the `slice-label` part, so a
|
|
5206
|
+
reader sees the parts without a legend or a pointer: "29%" in the middle
|
|
5207
|
+
of the band.
|
|
5208
|
+
|
|
5209
|
+
Absent writes none. A slice under a twentieth of the whole takes no
|
|
5210
|
+
label, there being no room on it for one. A screen reader hears every
|
|
5211
|
+
share in the summary, and the labels are hidden from it. */
|
|
5212
|
+
sliceLabels?: (HelixHeadlessDonutChart["sliceLabels"]) | undefined;
|
|
4875
5213
|
/** How much of the circle the whole occupies.
|
|
4876
5214
|
|
|
4877
5215
|
Absent is the full turn. `half` is a semi-donut: the same shares spread
|
|
@@ -4914,6 +5252,22 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
4914
5252
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
4915
5253
|
writes them, whatever this says. */
|
|
4916
5254
|
locale?: (HelixHeadlessDonutChart["locale"]) | undefined;
|
|
5255
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
5256
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
5257
|
+
`locale`.
|
|
5258
|
+
|
|
5259
|
+
Set it to the words of the page's language, such as `{position} von
|
|
5260
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
5261
|
+
legend hid is not counted. */
|
|
5262
|
+
"position-label"?: (HelixHeadlessDonutChart["positionLabel"]) | undefined;
|
|
5263
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
5264
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
5265
|
+
`locale`.
|
|
5266
|
+
|
|
5267
|
+
Set it to the words of the page's language, such as `{position} von
|
|
5268
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
5269
|
+
legend hid is not counted. */
|
|
5270
|
+
positionLabel?: (HelixHeadlessDonutChart["positionLabel"]) | undefined;
|
|
4917
5271
|
};
|
|
4918
5272
|
|
|
4919
5273
|
export type HelixHeadlessDonutChartVueEvents = {};
|
|
@@ -4956,6 +5310,17 @@ the property this component exists to keep.
|
|
|
4956
5310
|
Absent by default, which is the platform's `auto` and this library's rule
|
|
4957
5311
|
that a resting value is an attribute's absence. */
|
|
4958
5312
|
closedBy?: (HelixHeadlessDrawer["closedBy"]) | undefined;
|
|
5313
|
+
/** Draws a control that closes the drawer, in the corner where the title is.
|
|
5314
|
+
|
|
5315
|
+
Pressing it is `close()`, so it sends `helix-before-close` like every other
|
|
5316
|
+
way out. */
|
|
5317
|
+
dismissible?: (HelixHeadlessDrawer["dismissible"]) | undefined;
|
|
5318
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
5319
|
+
interface. */
|
|
5320
|
+
"dismiss-label"?: (HelixHeadlessDrawer["dismissLabel"]) | undefined;
|
|
5321
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
5322
|
+
interface. */
|
|
5323
|
+
dismissLabel?: (HelixHeadlessDrawer["dismissLabel"]) | undefined;
|
|
4959
5324
|
/** Accessible name for the panel. When it is empty, the heading in the
|
|
4960
5325
|
`header` slot names the panel. */
|
|
4961
5326
|
label?: (HelixHeadlessDrawer["label"]) | undefined;
|
|
@@ -5116,6 +5481,21 @@ export type HelixHeadlessDrilldownVueEvents = {
|
|
|
5116
5481
|
};
|
|
5117
5482
|
|
|
5118
5483
|
export type HelixHeadlessEmptyVueProps = {
|
|
5484
|
+
/** The heading as words, such as "No results", drawn as a heading when
|
|
5485
|
+
nothing is slotted into `heading`.
|
|
5486
|
+
|
|
5487
|
+
Absent draws none, and the `heading` slot is the only heading. */
|
|
5488
|
+
heading?: (HelixHeadlessEmpty["heading"]) | undefined;
|
|
5489
|
+
/** The level of the heading `heading` draws, from 1 to 6.
|
|
5490
|
+
|
|
5491
|
+
Absent is 3, the level of a heading inside a page's section. Set it to fit
|
|
5492
|
+
the outline the empty view sits in. A slotted heading keeps its own. */
|
|
5493
|
+
"heading-level"?: (HelixHeadlessEmpty["headingLevel"] | `${number}`) | undefined;
|
|
5494
|
+
/** The level of the heading `heading` draws, from 1 to 6.
|
|
5495
|
+
|
|
5496
|
+
Absent is 3, the level of a heading inside a page's section. Set it to fit
|
|
5497
|
+
the outline the empty view sits in. A slotted heading keeps its own. */
|
|
5498
|
+
headingLevel?: (HelixHeadlessEmpty["headingLevel"]) | undefined;
|
|
5119
5499
|
/** Whether the state is announced when it appears.
|
|
5120
5500
|
|
|
5121
5501
|
On by default: an empty view almost always replaces something that was
|
|
@@ -5150,6 +5530,12 @@ export type HelixHeadlessFileInputVueProps = {
|
|
|
5150
5530
|
A dropped file the list does not name is left out, because the picker's
|
|
5151
5531
|
filter is the only check the platform makes and a drop never meets it. */
|
|
5152
5532
|
accept?: (HelixHeadlessFileInput["accept"]) | undefined;
|
|
5533
|
+
/** What a reader hears when a drop or a paste adds files, with `{names}` and
|
|
5534
|
+
`{count}` filled in. */
|
|
5535
|
+
"added-text"?: (HelixHeadlessFileInput["addedText"]) | undefined;
|
|
5536
|
+
/** What a reader hears when a drop or a paste adds files, with `{names}` and
|
|
5537
|
+
`{count}` filled in. */
|
|
5538
|
+
addedText?: (HelixHeadlessFileInput["addedText"]) | undefined;
|
|
5153
5539
|
/** Which camera or microphone a mobile picker should offer, if any. */
|
|
5154
5540
|
capture?: (HelixHeadlessFileInput["capture"]) | undefined;
|
|
5155
5541
|
/** Whether the picker chooses a folder, and the field takes every file in
|
|
@@ -5171,12 +5557,22 @@ refused. */
|
|
|
5171
5557
|
maxFileSize?: (HelixHeadlessFileInput["maxFileSize"]) | undefined;
|
|
5172
5558
|
/** Whether more than one file can be chosen. */
|
|
5173
5559
|
multiple?: (HelixHeadlessFileInput["multiple"]) | undefined;
|
|
5560
|
+
/** The name of a file's progress bar, read by screen readers, with `{name}`
|
|
5561
|
+
filled in. A label with no `{name}` has it added after it. */
|
|
5562
|
+
"progress-label"?: (HelixHeadlessFileInput["progressLabel"]) | undefined;
|
|
5563
|
+
/** The name of a file's progress bar, read by screen readers, with `{name}`
|
|
5564
|
+
filled in. A label with no `{name}` has it added after it. */
|
|
5565
|
+
progressLabel?: (HelixHeadlessFileInput["progressLabel"]) | undefined;
|
|
5174
5566
|
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5175
5567
|
filled in. */
|
|
5176
5568
|
"rejected-text"?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
5177
5569
|
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5178
5570
|
filled in. */
|
|
5179
5571
|
rejectedText?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
5572
|
+
/** What a reader hears when a file is removed, with `{name}` filled in. */
|
|
5573
|
+
"removed-text"?: (HelixHeadlessFileInput["removedText"]) | undefined;
|
|
5574
|
+
/** What a reader hears when a file is removed, with `{name}` filled in. */
|
|
5575
|
+
removedText?: (HelixHeadlessFileInput["removedText"]) | undefined;
|
|
5180
5576
|
/** The accessible name of the control that removes a file. `{name}` is
|
|
5181
5577
|
replaced with the file's name.
|
|
5182
5578
|
|
|
@@ -5251,6 +5647,15 @@ imperatively later, and nothing is hydrating by then.
|
|
|
5251
5647
|
|
|
5252
5648
|
Here rather than on each control. */
|
|
5253
5649
|
name?: (HelixHeadlessFileInput["name"]) | undefined;
|
|
5650
|
+
/** Draws a file's row in place of its name, size, and type: a Lit template, a
|
|
5651
|
+
string, or a DOM node, given the file and its place in the list. The
|
|
5652
|
+
remove button stays beside it. */
|
|
5653
|
+
renderFile?: (HelixHeadlessFileInput["renderFile"]) | undefined;
|
|
5654
|
+
/** Your own step between taking files and holding them, such as shrinking an
|
|
5655
|
+
image, as Zag's file upload `transformFiles`. It is given the files taken
|
|
5656
|
+
from one pick, drop, or paste and returns the files to hold, or a promise
|
|
5657
|
+
of them. A promise that rejects refuses those files, with its message. */
|
|
5658
|
+
transformFiles?: (HelixHeadlessFileInput["transformFiles"]) | undefined;
|
|
5254
5659
|
/** Your own check on each arriving file, which returns why it is refused, or
|
|
5255
5660
|
nothing to take it. A property, since a function cannot be an attribute. */
|
|
5256
5661
|
validate?: (HelixHeadlessFileInput["validate"]) | undefined;
|
|
@@ -5529,9 +5934,13 @@ as `+3`, does not say what it does. */
|
|
|
5529
5934
|
"max-tags"?: (HelixHeadlessFilterInput["maxTags"] | `${number}`) | undefined;
|
|
5530
5935
|
/** How many tokens to show before the rest become a count. */
|
|
5531
5936
|
maxTags?: (HelixHeadlessFilterInput["maxTags"]) | undefined;
|
|
5532
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
5937
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
5938
|
+
and to the `value` attribute where this one is not written, as a native
|
|
5939
|
+
control resets to the `value` it declares. */
|
|
5533
5940
|
"default-value"?: (HelixHeadlessFilterInput["defaultValue"]) | undefined;
|
|
5534
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
5941
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
5942
|
+
and to the `value` attribute where this one is not written, as a native
|
|
5943
|
+
control resets to the `value` it declares. */
|
|
5535
5944
|
defaultValue?: (HelixHeadlessFilterInput["defaultValue"]) | undefined;
|
|
5536
5945
|
/** The control's current value, which its form submits.
|
|
5537
5946
|
|
|
@@ -5653,6 +6062,17 @@ few characters and a date is not. */
|
|
|
5653
6062
|
elapsed?: (HelixHeadlessFormatDate["elapsed"]) | undefined;
|
|
5654
6063
|
/** How the era is written, such as AD, where a date is shown. */
|
|
5655
6064
|
era?: (HelixHeadlessFormatDate["era"]) | undefined;
|
|
6065
|
+
/** Draws an `elapsed` or `relative` reading once and leaves it, where it
|
|
6066
|
+
would otherwise move on as it goes stale.
|
|
6067
|
+
|
|
6068
|
+
For a reading that describes a moment the page itself is about, such as
|
|
6069
|
+
"3 hours ago" in a report generated then, or a list a reader compares
|
|
6070
|
+
line by line while it should not change under them. The reading is taken
|
|
6071
|
+
when the element draws, and again whenever `date` or another option
|
|
6072
|
+
changes. Turned off, the reading catches up and moves on again.
|
|
6073
|
+
`sl-relative-time` and `wa-relative-time` keep still unless `sync` is
|
|
6074
|
+
set; this keeps moving unless `frozen` is. */
|
|
6075
|
+
frozen?: (HelixHeadlessFormatDate["frozen"]) | undefined;
|
|
5656
6076
|
/** How the hour is written, where a time of day is shown. */
|
|
5657
6077
|
hour?: (HelixHeadlessFormatDate["hour"]) | undefined;
|
|
5658
6078
|
/** The clock a time of day is written on: `h12` or `h11` for twelve hours,
|
|
@@ -5669,7 +6089,8 @@ reader the same clock whatever their language. */
|
|
|
5669
6089
|
hourCycle?: (HelixHeadlessFormatDate["hourCycle"]) | undefined;
|
|
5670
6090
|
/** The locale to format the timestamp in.
|
|
5671
6091
|
|
|
5672
|
-
|
|
6092
|
+
Absent is the page's: the `lang` of the nearest element with one, as
|
|
6093
|
+
Shoelace and Web Awesome read it, then the runtime's own. */
|
|
5673
6094
|
locale?: (HelixHeadlessFormatDate["locale"]) | undefined;
|
|
5674
6095
|
/** How the minute is written, where a time of day is shown. */
|
|
5675
6096
|
minute?: (HelixHeadlessFormatDate["minute"]) | undefined;
|
|
@@ -6021,11 +6442,18 @@ export type HelixHeadlessHeatmapElementEvent<E = Event> = TypedEvent<
|
|
|
6021
6442
|
HelixHeadlessHeatmap,
|
|
6022
6443
|
E
|
|
6023
6444
|
>;
|
|
6445
|
+
/** `helix-before-change` event type */
|
|
6446
|
+
export type HelixHeadlessHeatmapHelixBeforeChangeElementEvent =
|
|
6447
|
+
HelixHeadlessHeatmapElementEvent<HelixBeforeChangeEvent>;
|
|
6024
6448
|
/** `helix-resize` event type */
|
|
6025
6449
|
export type HelixHeadlessHeatmapHelixResizeElementEvent =
|
|
6026
6450
|
HelixHeadlessHeatmapElementEvent<HelixResizeEvent>;
|
|
6027
6451
|
|
|
6028
6452
|
export type HelixHeadlessHeatmapVueProps = {
|
|
6453
|
+
/** The word the `overview` puts before the busiest reading. */
|
|
6454
|
+
"busiest-label"?: (HelixHeadlessHeatmap["busiestLabel"]) | undefined;
|
|
6455
|
+
/** The word the `overview` puts before the busiest reading. */
|
|
6456
|
+
busiestLabel?: (HelixHeadlessHeatmap["busiestLabel"]) | undefined;
|
|
6029
6457
|
/** Shown when the table has no readings in it.
|
|
6030
6458
|
|
|
6031
6459
|
Never shown while the table cannot be read at all, which is a server render
|
|
@@ -6083,6 +6511,20 @@ calendar heatmap does: a week is a column, so the strip reads along the
|
|
|
6083
6511
|
line in weeks, from the right on a right-to-left page, and top to bottom in
|
|
6084
6512
|
days. */
|
|
6085
6513
|
rows?: (HelixHeadlessHeatmap["rows"]) | undefined;
|
|
6514
|
+
/** What the `selection` part says after the selection changes, with `{count}` for
|
|
6515
|
+
how many cells are selected. */
|
|
6516
|
+
"selection-label"?: (HelixHeadlessHeatmap["selectionLabel"]) | undefined;
|
|
6517
|
+
/** What the `selection` part says after the selection changes, with `{count}` for
|
|
6518
|
+
how many cells are selected. */
|
|
6519
|
+
selectionLabel?: (HelixHeadlessHeatmap["selectionLabel"]) | undefined;
|
|
6520
|
+
/** How many cells a reader can select: `single` or `multiple`.
|
|
6521
|
+
|
|
6522
|
+
Absent selects nothing, and a press or Space does what it did. */
|
|
6523
|
+
"selection-mode"?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
|
|
6524
|
+
/** How many cells a reader can select: `single` or `multiple`.
|
|
6525
|
+
|
|
6526
|
+
Absent selects nothing, and a press or Space does what it did. */
|
|
6527
|
+
selectionMode?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
|
|
6086
6528
|
/** Lower bounds for the tone buckets, in the order the tones are given.
|
|
6087
6529
|
|
|
6088
6530
|
`thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
|
|
@@ -6101,6 +6543,16 @@ compare two hues at all. `tones="surface info accent success primary"` for a
|
|
|
6101
6543
|
commit count is five unrelated hues for five amounts, which is confetti with
|
|
6102
6544
|
no order in it. */
|
|
6103
6545
|
tones?: (HelixHeadlessHeatmap["tones"]) | undefined;
|
|
6546
|
+
/** The word the `overview` puts before the total of the readings drawn. */
|
|
6547
|
+
"total-label"?: (HelixHeadlessHeatmap["totalLabel"]) | undefined;
|
|
6548
|
+
/** The word the `overview` puts before the total of the readings drawn. */
|
|
6549
|
+
totalLabel?: (HelixHeadlessHeatmap["totalLabel"]) | undefined;
|
|
6550
|
+
/** The selected cells, by the names their rows have in the table, such as
|
|
6551
|
+
`2026-06-11`, separated by commas.
|
|
6552
|
+
|
|
6553
|
+
Set it to start with cells selected. Written by a press or a key under
|
|
6554
|
+
`selection-mode`. */
|
|
6555
|
+
value?: (HelixHeadlessHeatmap["value"]) | undefined;
|
|
6104
6556
|
/** The id of the table to read.
|
|
6105
6557
|
|
|
6106
6558
|
Names a table in the same tree, so a chart inside another component's
|
|
@@ -6121,13 +6573,42 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
6121
6573
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
6122
6574
|
writes them, whatever this says. */
|
|
6123
6575
|
locale?: (HelixHeadlessHeatmap["locale"]) | undefined;
|
|
6576
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
6577
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
6578
|
+
`locale`.
|
|
6579
|
+
|
|
6580
|
+
Set it to the words of the page's language, such as `{position} von
|
|
6581
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
6582
|
+
legend hid is not counted. */
|
|
6583
|
+
"position-label"?: (HelixHeadlessHeatmap["positionLabel"]) | undefined;
|
|
6584
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
6585
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
6586
|
+
`locale`.
|
|
6587
|
+
|
|
6588
|
+
Set it to the words of the page's language, such as `{position} von
|
|
6589
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
6590
|
+
legend hid is not counted. */
|
|
6591
|
+
positionLabel?: (HelixHeadlessHeatmap["positionLabel"]) | undefined;
|
|
6124
6592
|
};
|
|
6125
6593
|
|
|
6126
6594
|
export type HelixHeadlessHeatmapVueEvents = {
|
|
6595
|
+
/** Fired once a press or a key has changed which cells are selected. */
|
|
6596
|
+
change: HelixHeadlessHeatmapElementEvent;
|
|
6597
|
+
/** Fired before a press or a key changes which cells are selected, with the `value` it would leave. Cancelable. */
|
|
6598
|
+
"helix-before-change": HelixHeadlessHeatmapHelixBeforeChangeElementEvent;
|
|
6127
6599
|
/** Fired when the number of cells drawn changes, with the new number. */
|
|
6128
6600
|
"helix-resize": HelixHeadlessHeatmapHelixResizeElementEvent;
|
|
6129
6601
|
};
|
|
6130
6602
|
|
|
6603
|
+
/** `HelixHeadlessIconButton` component event */
|
|
6604
|
+
export type HelixHeadlessIconButtonElementEvent<E = Event> = TypedEvent<
|
|
6605
|
+
HelixHeadlessIconButton,
|
|
6606
|
+
E
|
|
6607
|
+
>;
|
|
6608
|
+
/** `helix-press` event type */
|
|
6609
|
+
export type HelixHeadlessIconButtonHelixPressElementEvent =
|
|
6610
|
+
HelixHeadlessIconButtonElementEvent<HelixPressEvent>;
|
|
6611
|
+
|
|
6131
6612
|
export type HelixHeadlessIconButtonVueProps = {
|
|
6132
6613
|
/** What to send when the button is activated, and what to send it to.
|
|
6133
6614
|
|
|
@@ -6151,33 +6632,23 @@ is the platform's `commandfor`. */
|
|
|
6151
6632
|
commandFor?: (HelixHeadlessIconButton["commandFor"]) | undefined;
|
|
6152
6633
|
/** Where this button's submission goes, overriding the form's own.
|
|
6153
6634
|
|
|
6154
|
-
**The five `form*` overrides
|
|
6155
|
-
|
|
6156
|
-
|
|
6157
|
-
|
|
6158
|
-
|
|
6159
|
-
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
6163
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
6164
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
6165
|
-
native submitter would have given it, which is the point. */
|
|
6635
|
+
**The five `form*` overrides ride on a native submit button that stands in
|
|
6636
|
+
for this one**, because `requestSubmit(submitter)` refuses the inner
|
|
6637
|
+
`<button>` twice over: it is `type="button"`, and it sits in this shadow
|
|
6638
|
+
root, so its form owner is not the consumer's form. The stand-in is a
|
|
6639
|
+
hidden `<button type="submit">` in the form for the one synchronous call,
|
|
6640
|
+
so the platform applies the overrides to that submission alone and leaves
|
|
6641
|
+
the form as it was. See `submitAs`. */
|
|
6166
6642
|
formaction?: (HelixHeadlessIconButton["formAction"]) | undefined;
|
|
6167
6643
|
/** Where this button's submission goes, overriding the form's own.
|
|
6168
6644
|
|
|
6169
|
-
**The five `form*` overrides
|
|
6170
|
-
|
|
6171
|
-
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
|
|
6176
|
-
|
|
6177
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
6178
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
6179
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
6180
|
-
native submitter would have given it, which is the point. */
|
|
6645
|
+
**The five `form*` overrides ride on a native submit button that stands in
|
|
6646
|
+
for this one**, because `requestSubmit(submitter)` refuses the inner
|
|
6647
|
+
`<button>` twice over: it is `type="button"`, and it sits in this shadow
|
|
6648
|
+
root, so its form owner is not the consumer's form. The stand-in is a
|
|
6649
|
+
hidden `<button type="submit">` in the form for the one synchronous call,
|
|
6650
|
+
so the platform applies the overrides to that submission alone and leaves
|
|
6651
|
+
the form as it was. See `submitAs`. */
|
|
6181
6652
|
formAction?: (HelixHeadlessIconButton["formAction"]) | undefined;
|
|
6182
6653
|
/** How the submission is encoded, overriding the form's own. */
|
|
6183
6654
|
formenctype?: (HelixHeadlessIconButton["formEnctype"]) | undefined;
|
|
@@ -6223,13 +6694,10 @@ a press, so focus stays where the reader left it. */
|
|
|
6223
6694
|
/** The value this button submits under its own `name`, as a native submit
|
|
6224
6695
|
button does.
|
|
6225
6696
|
|
|
6226
|
-
**
|
|
6697
|
+
**Sent with exactly the submission this button starts and not otherwise.**
|
|
6227
6698
|
A native submit button contributes `name=value` only when it is the one
|
|
6228
|
-
that submitted, and every other button on the form contributes nothing
|
|
6229
|
-
|
|
6230
|
-
every submission whoever started it, which is a different feature wearing
|
|
6231
|
-
the same name, so `submit` below sets it, submits, and clears it inside one
|
|
6232
|
-
synchronous call.
|
|
6699
|
+
that submitted, and every other button on the form contributes nothing,
|
|
6700
|
+
which is what the native button standing in for this one at submit does.
|
|
6233
6701
|
|
|
6234
6702
|
`CopyButton` has a `value` of its own meaning the text to put on the
|
|
6235
6703
|
clipboard, which is not this and is why it is declared there rather than
|
|
@@ -6315,7 +6783,10 @@ invoker without an id in the same tree needs. */
|
|
|
6315
6783
|
commandForElement?: (HelixHeadlessIconButton["commandForElement"]) | undefined;
|
|
6316
6784
|
};
|
|
6317
6785
|
|
|
6318
|
-
export type HelixHeadlessIconButtonVueEvents = {
|
|
6786
|
+
export type HelixHeadlessIconButtonVueEvents = {
|
|
6787
|
+
/** Fired when a press acts, with `detail.pointerType` saying what pressed the button. */
|
|
6788
|
+
"helix-press": HelixHeadlessIconButtonHelixPressElementEvent;
|
|
6789
|
+
};
|
|
6319
6790
|
|
|
6320
6791
|
/** `HelixHeadlessIcon` component event */
|
|
6321
6792
|
export type HelixHeadlessIconElementEvent<E = Event> = TypedEvent<
|
|
@@ -6459,7 +6930,12 @@ the *first* update mirrors to a custom state instead, which is what
|
|
|
6459
6930
|
`:state(open)` and `:state(checked)` are.
|
|
6460
6931
|
|
|
6461
6932
|
`loading` writes nothing, because it is where every image starts and the
|
|
6462
|
-
resting state of a mirror is the attribute's absence.
|
|
6933
|
+
resting state of a mirror is the attribute's absence.
|
|
6934
|
+
|
|
6935
|
+
**Kept beside the custom states, and what the styled tier draws from.** An
|
|
6936
|
+
engine without `CustomStateSet`, Safari before 17.4 and Firefox before
|
|
6937
|
+
126, records no state, and a picture faded in by `:state(loaded)` alone
|
|
6938
|
+
would stay transparent there for good. A sheet of your own can read either. */
|
|
6463
6939
|
status?: (HelixHeadlessImage["status"]) | undefined;
|
|
6464
6940
|
};
|
|
6465
6941
|
|
|
@@ -6593,9 +7069,13 @@ Nothing reads it from the attribute either. The real `<input>` inside takes
|
|
|
6593
7069
|
it as a property binding, which is what makes the keyboard and the
|
|
6594
7070
|
validation follow. */
|
|
6595
7071
|
type?: (HelixHeadlessInput["type"]) | undefined;
|
|
6596
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
7072
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
7073
|
+
and to the `value` attribute where this one is not written, as a native
|
|
7074
|
+
control resets to the `value` it declares. */
|
|
6597
7075
|
"default-value"?: (HelixHeadlessInput["defaultValue"]) | undefined;
|
|
6598
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
7076
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
7077
|
+
and to the `value` attribute where this one is not written, as a native
|
|
7078
|
+
control resets to the `value` it declares. */
|
|
6599
7079
|
defaultValue?: (HelixHeadlessInput["defaultValue"]) | undefined;
|
|
6600
7080
|
/** The control's current value, which its form submits.
|
|
6601
7081
|
|
|
@@ -6676,6 +7156,10 @@ be anyway. */
|
|
|
6676
7156
|
selectionEnd?: (HelixHeadlessInput["selectionEnd"]) | undefined;
|
|
6677
7157
|
/** Where the selection starts, as an offset into the value. */
|
|
6678
7158
|
selectionStart?: (HelixHeadlessInput["selectionStart"]) | undefined;
|
|
7159
|
+
/** Your own rule for the value, run on every change once the browser finds
|
|
7160
|
+
nothing wrong. Return a message, or a list of them, to mark the field
|
|
7161
|
+
invalid, and `true`, `null`, or nothing to accept the value. */
|
|
7162
|
+
validate?: (HelixHeadlessInput["validate"]) | undefined;
|
|
6679
7163
|
};
|
|
6680
7164
|
|
|
6681
7165
|
export type HelixHeadlessInputVueEvents = {
|
|
@@ -6699,6 +7183,20 @@ export type HelixHeadlessKbdHelixShortcutElementEvent =
|
|
|
6699
7183
|
HelixHeadlessKbdElementEvent<HelixShortcutEvent>;
|
|
6700
7184
|
|
|
6701
7185
|
export type HelixHeadlessKbdVueProps = {
|
|
7186
|
+
/** What the chord does to the control `for` names once it is pressed:
|
|
7187
|
+
`focus` moves focus to the control and `click` presses it.
|
|
7188
|
+
|
|
7189
|
+
Unset, the chord sends `helix-shortcut` and does nothing else, for a page
|
|
7190
|
+
that acts on the event itself. It acts only where `within` listens, after
|
|
7191
|
+
`helix-shortcut`, and not when a listener cancels that event. */
|
|
7192
|
+
activate?: (HelixHeadlessKbd["activate"]) | undefined;
|
|
7193
|
+
/** Draws a chord under `keys` as one key per key, each a `key` part with a
|
|
7194
|
+
`separator` part between two where the platform writes a `+`, as GitHub
|
|
7195
|
+
and most docs draw `Ctrl` `K`.
|
|
7196
|
+
|
|
7197
|
+
Absent, a chord is one key holding the whole label, as it always was.
|
|
7198
|
+
Reflected, because the styled tier draws the caps on the keys under it. */
|
|
7199
|
+
caps?: (HelixHeadlessKbd["caps"]) | undefined;
|
|
6702
7200
|
/** The id of the control the shortcut works, which is given the chord as its
|
|
6703
7201
|
`aria-keyshortcuts`.
|
|
6704
7202
|
|
|
@@ -6706,6 +7204,26 @@ Names an element in the same tree, the way `Tooltip.for` does. Separate
|
|
|
6706
7204
|
from `within`, which says where the key listens: a key can describe a
|
|
6707
7205
|
shortcut the page binds itself. */
|
|
6708
7206
|
for?: (HelixHeadlessKbd["for"]) | undefined;
|
|
7207
|
+
/** Names for keys in place of the platform's own, by the key's name in
|
|
7208
|
+
`keys`, written as JSON in the attribute: `key-labels='{"mod":"Command",
|
|
7209
|
+
"enter":"Return"}'` shows `Command` and `Return` wherever `mod` and
|
|
7210
|
+
`enter` are written.
|
|
7211
|
+
|
|
7212
|
+
For a page in another language, or a product with its own word for a key.
|
|
7213
|
+
Absent, the platform's glyphs and words are used. Only what is shown
|
|
7214
|
+
changes: the chord written onto `aria-keyshortcuts` keeps the names a
|
|
7215
|
+
screen reader knows. */
|
|
7216
|
+
"key-labels"?: (HelixHeadlessKbd["keyLabels"]) | undefined;
|
|
7217
|
+
/** Names for keys in place of the platform's own, by the key's name in
|
|
7218
|
+
`keys`, written as JSON in the attribute: `key-labels='{"mod":"Command",
|
|
7219
|
+
"enter":"Return"}'` shows `Command` and `Return` wherever `mod` and
|
|
7220
|
+
`enter` are written.
|
|
7221
|
+
|
|
7222
|
+
For a page in another language, or a product with its own word for a key.
|
|
7223
|
+
Absent, the platform's glyphs and words are used. Only what is shown
|
|
7224
|
+
changes: the chord written onto `aria-keyshortcuts` keeps the names a
|
|
7225
|
+
screen reader knows. */
|
|
7226
|
+
keyLabels?: (HelixHeadlessKbd["keyLabels"]) | undefined;
|
|
6709
7227
|
/** The key or chord to show, such as `mod+k`, `?`, or `/`.
|
|
6710
7228
|
|
|
6711
7229
|
`mod` is the platform's own command modifier, which is the reason to write
|
|
@@ -6776,14 +7294,18 @@ shadow root reads a table in that root rather than one in the document.
|
|
|
6776
7294
|
|
|
6777
7295
|
Set it to start with series hidden. Every chart reading the same table
|
|
6778
7296
|
draws without them. Commas only, because a column's heading may hold a
|
|
6779
|
-
space. For a ring the names are the rows.
|
|
7297
|
+
space. For a ring the names are the rows. An array of names set on the
|
|
7298
|
+
property works too, as React sets `hiddenSeries={['Direct']}`; a toggle
|
|
7299
|
+
writes the list back as a string. */
|
|
6780
7300
|
"hidden-series"?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6781
7301
|
/** The series hidden on the table, by name, separated by commas: what
|
|
6782
7302
|
`toggles` hides and shows.
|
|
6783
7303
|
|
|
6784
7304
|
Set it to start with series hidden. Every chart reading the same table
|
|
6785
7305
|
draws without them. Commas only, because a column's heading may hold a
|
|
6786
|
-
space. For a ring the names are the rows.
|
|
7306
|
+
space. For a ring the names are the rows. An array of names set on the
|
|
7307
|
+
property works too, as React sets `hiddenSeries={['Direct']}`; a toggle
|
|
7308
|
+
writes the list back as a string. */
|
|
6787
7309
|
hiddenSeries?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6788
7310
|
/** The name of the list, which a screen reader announces before its entries.
|
|
6789
7311
|
|
|
@@ -6842,13 +7364,20 @@ export type HelixHeadlessLightboxToggleElementEvent =
|
|
|
6842
7364
|
HelixHeadlessLightboxElementEvent<ToggleEvent>;
|
|
6843
7365
|
|
|
6844
7366
|
export type HelixHeadlessLightboxVueProps = {
|
|
6845
|
-
/** Draws the viewer's own previous, next and close controls over the picture
|
|
7367
|
+
/** Draws the viewer's own previous, next and close controls over the picture,
|
|
7368
|
+
and zoom-out and zoom-in controls where `max-zoom` allows zooming.
|
|
6846
7369
|
|
|
6847
7370
|
Off by default, for a viewer whose chrome you compose in the `header` and
|
|
6848
7371
|
`footer` slots. The controls hide with the rest of the chrome while the
|
|
6849
|
-
reader is idle,
|
|
6850
|
-
either end of a set that does not `loop
|
|
7372
|
+
reader is idle, the previous and next ones say they are unavailable at
|
|
7373
|
+
either end of a set that does not `loop`, and the zoom ones at either end
|
|
7374
|
+
of the scale. */
|
|
6851
7375
|
controls?: (HelixHeadlessLightbox["controls"]) | undefined;
|
|
7376
|
+
/** Draws the place of the shown item in the set over the picture, in the
|
|
7377
|
+
words of `status-label`, such as "2 of 5". It hides with the controls while
|
|
7378
|
+
the reader is idle. Screen readers hear the place from the live region, so
|
|
7379
|
+
the drawn copy is hidden from them. */
|
|
7380
|
+
counter?: (HelixHeadlessLightbox["counter"]) | undefined;
|
|
6852
7381
|
/** The close control's accessible name. Translate it with the rest of your
|
|
6853
7382
|
interface. */
|
|
6854
7383
|
"dismiss-label"?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
|
|
@@ -6873,6 +7402,12 @@ keep the chrome up is the consumer's to decide with this. */
|
|
|
6873
7402
|
label?: (HelixHeadlessLightbox["label"]) | undefined;
|
|
6874
7403
|
/** Whether moving past the last item returns to the first. */
|
|
6875
7404
|
loop?: (HelixHeadlessLightbox["loop"]) | undefined;
|
|
7405
|
+
/** How far a reader can zoom into the shown item, as a scale, such as `3`.
|
|
7406
|
+
`1`, the default, turns zooming off. */
|
|
7407
|
+
"max-zoom"?: (HelixHeadlessLightbox["maxZoom"] | `${number}`) | undefined;
|
|
7408
|
+
/** How far a reader can zoom into the shown item, as a scale, such as `3`.
|
|
7409
|
+
`1`, the default, turns zooming off. */
|
|
7410
|
+
maxZoom?: (HelixHeadlessLightbox["maxZoom"]) | undefined;
|
|
6876
7411
|
/** The next control's accessible name. */
|
|
6877
7412
|
"next-label"?: (HelixHeadlessLightbox["nextLabel"]) | undefined;
|
|
6878
7413
|
/** The next control's accessible name. */
|
|
@@ -6909,6 +7444,20 @@ Announced rather than only drawn, because the picture changing under a
|
|
|
6909
7444
|
reader who cannot see it is otherwise silent. A consumer who has their own
|
|
6910
7445
|
counter in the chrome can empty this and say it themselves. */
|
|
6911
7446
|
statusLabel?: (HelixHeadlessLightbox["statusLabel"]) | undefined;
|
|
7447
|
+
/** The zoom-in control's accessible name. */
|
|
7448
|
+
"zoom-in-label"?: (HelixHeadlessLightbox["zoomInLabel"]) | undefined;
|
|
7449
|
+
/** The zoom-in control's accessible name. */
|
|
7450
|
+
zoomInLabel?: (HelixHeadlessLightbox["zoomInLabel"]) | undefined;
|
|
7451
|
+
/** The zoom-out control's accessible name. */
|
|
7452
|
+
"zoom-out-label"?: (HelixHeadlessLightbox["zoomOutLabel"]) | undefined;
|
|
7453
|
+
/** The zoom-out control's accessible name. */
|
|
7454
|
+
zoomOutLabel?: (HelixHeadlessLightbox["zoomOutLabel"]) | undefined;
|
|
7455
|
+
/** What the live region says once a reader has stopped zooming, with the
|
|
7456
|
+
scale as a whole `{percent}` filled in. Empty it to say nothing. */
|
|
7457
|
+
"zoom-status-label"?: (HelixHeadlessLightbox["zoomStatusLabel"]) | undefined;
|
|
7458
|
+
/** What the live region says once a reader has stopped zooming, with the
|
|
7459
|
+
scale as a whole `{percent}` filled in. Empty it to say nothing. */
|
|
7460
|
+
zoomStatusLabel?: (HelixHeadlessLightbox["zoomStatusLabel"]) | undefined;
|
|
6912
7461
|
/** The `value` of the current item.
|
|
6913
7462
|
|
|
6914
7463
|
Not `option.active`, which is the option the keyboard is on: that is a
|
|
@@ -6993,6 +7542,13 @@ sum can pass under the curve fitted through the sum beneath it, so a
|
|
|
6993
7542
|
smoothed stack can draw a part as less than nothing. There is no such edge
|
|
6994
7543
|
here, which is what lets a line take the reading aid. */
|
|
6995
7544
|
curve?: (HelixHeadlessLineChart["curve"]) | undefined;
|
|
7545
|
+
/** The series drawn as a dashed line, by their headings, separated by
|
|
7546
|
+
commas: `dashed="Forecast, Target"`.
|
|
7547
|
+
|
|
7548
|
+
For a series that is not a reading, such as a forecast or a goal, drawn
|
|
7549
|
+
beside the ones that are. Each takes a `line-dashed` part beside `line`,
|
|
7550
|
+
which a stylesheet draws dashed. Absent, every line is solid. */
|
|
7551
|
+
dashed?: (HelixHeadlessLineChart["dashed"]) | undefined;
|
|
6996
7552
|
/** Which rules are drawn across the plot, if any.
|
|
6997
7553
|
|
|
6998
7554
|
Absent draws none, which is the honest default rather than a timid one: a
|
|
@@ -7015,6 +7571,13 @@ the attribute being absent, which is the one thing a reader cannot debug.
|
|
|
7015
7571
|
Furniture rather than data, so the rules are inside the `aria-hidden` plot
|
|
7016
7572
|
and reach no reader through the table. */
|
|
7017
7573
|
gridlines?: (HelixHeadlessLineChart["gridlines"]) | undefined;
|
|
7574
|
+
/** Draws a mark on every reading, the `marker` part, so a reader sees where
|
|
7575
|
+
the readings are, as well as the line between them.
|
|
7576
|
+
|
|
7577
|
+
Absent draws none, except on a reading with a blank on either side: it
|
|
7578
|
+
has no line to be part of, so it takes a mark, the `marker` part with
|
|
7579
|
+
`marker-lone` beside it, or it would not be drawn at all. */
|
|
7580
|
+
markers?: (HelixHeadlessLineChart["markers"]) | undefined;
|
|
7018
7581
|
/** The shape of the mark on each series' last reading.
|
|
7019
7582
|
|
|
7020
7583
|
Absent is a dot, and absent rather than defaulted because a reflecting
|
|
@@ -7074,6 +7637,22 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
7074
7637
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
7075
7638
|
writes them, whatever this says. */
|
|
7076
7639
|
locale?: (HelixHeadlessLineChart["locale"]) | undefined;
|
|
7640
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
7641
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
7642
|
+
`locale`.
|
|
7643
|
+
|
|
7644
|
+
Set it to the words of the page's language, such as `{position} von
|
|
7645
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
7646
|
+
legend hid is not counted. */
|
|
7647
|
+
"position-label"?: (HelixHeadlessLineChart["positionLabel"]) | undefined;
|
|
7648
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
7649
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
7650
|
+
`locale`.
|
|
7651
|
+
|
|
7652
|
+
Set it to the words of the page's language, such as `{position} von
|
|
7653
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
7654
|
+
legend hid is not counted. */
|
|
7655
|
+
positionLabel?: (HelixHeadlessLineChart["positionLabel"]) | undefined;
|
|
7077
7656
|
};
|
|
7078
7657
|
|
|
7079
7658
|
export type HelixHeadlessLineChartVueEvents = {};
|
|
@@ -7171,6 +7750,14 @@ has to survive with the stylesheet turned off.
|
|
|
7171
7750
|
/** Numbers an ordered list downward, so the count falls row by row and ends at
|
|
7172
7751
|
its last row, as `<ol reversed>` does. */
|
|
7173
7752
|
reversed?: (HelixHeadlessList["reversed"]) | undefined;
|
|
7753
|
+
/** What a press does to the rows already selected, in a list that selects:
|
|
7754
|
+
`toggle` adds or takes out the row, and `replace` selects it alone and
|
|
7755
|
+
lets the arrow keys carry the selection. */
|
|
7756
|
+
"selection-behavior"?: (HelixHeadlessList["selectionBehavior"]) | undefined;
|
|
7757
|
+
/** What a press does to the rows already selected, in a list that selects:
|
|
7758
|
+
`toggle` adds or takes out the row, and `replace` selects it alone and
|
|
7759
|
+
lets the arrow keys carry the selection. */
|
|
7760
|
+
selectionBehavior?: (HelixHeadlessList["selectionBehavior"]) | undefined;
|
|
7174
7761
|
/** Makes the list interactive: `single` selects one row, `multiple` any
|
|
7175
7762
|
number, and `none` moves and acts without selecting. Unset is a list a
|
|
7176
7763
|
reader reads, with no tab stop of its own. */
|
|
@@ -7219,6 +7806,9 @@ export type HelixHeadlessListboxHelixBeforeChangeElementEvent =
|
|
|
7219
7806
|
/** `helix-filter` event type */
|
|
7220
7807
|
export type HelixHeadlessListboxHelixFilterElementEvent =
|
|
7221
7808
|
HelixHeadlessListboxElementEvent<HelixFilterEvent>;
|
|
7809
|
+
/** `helix-load-more` event type */
|
|
7810
|
+
export type HelixHeadlessListboxHelixLoadMoreElementEvent =
|
|
7811
|
+
HelixHeadlessListboxElementEvent<HelixLoadMoreEvent>;
|
|
7222
7812
|
|
|
7223
7813
|
export type HelixHeadlessListboxVueProps = {
|
|
7224
7814
|
/** What the browser may autofill in the text field, as a platform token.
|
|
@@ -7280,6 +7870,18 @@ act on the list the reader expects. */
|
|
|
7280
7870
|
"filter-label"?: (HelixHeadlessListbox["filterLabel"]) | undefined;
|
|
7281
7871
|
/** Placeholder text for the filter field. */
|
|
7282
7872
|
filterLabel?: (HelixHeadlessListbox["filterLabel"]) | undefined;
|
|
7873
|
+
/** What the list says when its options could not be loaded, such as after a
|
|
7874
|
+
request to a server fails. Empty is no error.
|
|
7875
|
+
|
|
7876
|
+
Set, it shows under any options there are, in place of `empty-text` and
|
|
7877
|
+
`loading-text`, and a screen reader hears it. Clear it when you ask again. */
|
|
7878
|
+
"load-error"?: (HelixHeadlessListbox["loadError"]) | undefined;
|
|
7879
|
+
/** What the list says when its options could not be loaded, such as after a
|
|
7880
|
+
request to a server fails. Empty is no error.
|
|
7881
|
+
|
|
7882
|
+
Set, it shows under any options there are, in place of `empty-text` and
|
|
7883
|
+
`loading-text`, and a screen reader hears it. Clear it when you ask again. */
|
|
7884
|
+
loadError?: (HelixHeadlessListbox["loadError"]) | undefined;
|
|
7283
7885
|
/** Stops the arrow keys from choosing each option they move to. Enter, Space
|
|
7284
7886
|
or a click chooses the highlighted option.
|
|
7285
7887
|
|
|
@@ -7289,6 +7891,16 @@ a reader can move through the options before closing the panel on one. */
|
|
|
7289
7891
|
manual?: (HelixHeadlessListbox["manual"]) | undefined;
|
|
7290
7892
|
/** Whether more than one option can be chosen. */
|
|
7291
7893
|
multiple?: (HelixHeadlessListbox["multiple"]) | undefined;
|
|
7894
|
+
/** The text shown when a filter hides every option of a list that has some.
|
|
7895
|
+
|
|
7896
|
+
Absent, the list says `empty-text` in both cases. Set it to tell "nothing
|
|
7897
|
+
matches what you typed" from "there is nothing here". */
|
|
7898
|
+
"no-results-text"?: (HelixHeadlessListbox["noResultsText"]) | undefined;
|
|
7899
|
+
/** The text shown when a filter hides every option of a list that has some.
|
|
7900
|
+
|
|
7901
|
+
Absent, the list says `empty-text` in both cases. Set it to tell "nothing
|
|
7902
|
+
matches what you typed" from "there is nothing here". */
|
|
7903
|
+
noResultsText?: (HelixHeadlessListbox["noResultsText"]) | undefined;
|
|
7292
7904
|
/** What a screen reader hears when a filter leaves one option. `{count}` is
|
|
7293
7905
|
the count. */
|
|
7294
7906
|
"result-label"?: (HelixHeadlessListbox["resultLabel"]) | undefined;
|
|
@@ -7319,9 +7931,13 @@ say that without the component knowing what a row looks like. */
|
|
|
7319
7931
|
"loading-text"?: (HelixHeadlessListbox["loadingText"]) | undefined;
|
|
7320
7932
|
/** The text shown and announced while the rows load. */
|
|
7321
7933
|
loadingText?: (HelixHeadlessListbox["loadingText"]) | undefined;
|
|
7322
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
7934
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
7935
|
+
and to the `value` attribute where this one is not written, as a native
|
|
7936
|
+
control resets to the `value` it declares. */
|
|
7323
7937
|
"default-value"?: (HelixHeadlessListbox["defaultValue"]) | undefined;
|
|
7324
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
7938
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
7939
|
+
and to the `value` attribute where this one is not written, as a native
|
|
7940
|
+
control resets to the `value` it declares. */
|
|
7325
7941
|
defaultValue?: (HelixHeadlessListbox["defaultValue"]) | undefined;
|
|
7326
7942
|
/** The control's current value, which its form submits.
|
|
7327
7943
|
|
|
@@ -7406,6 +8022,8 @@ export type HelixHeadlessListboxVueEvents = {
|
|
|
7406
8022
|
"helix-before-change": HelixHeadlessListboxHelixBeforeChangeElementEvent;
|
|
7407
8023
|
/** Fired before the list is filtered, and cancelable. */
|
|
7408
8024
|
"helix-filter": HelixHeadlessListboxHelixFilterElementEvent;
|
|
8025
|
+
/** Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page of options and set `loading` while you fetch it. */
|
|
8026
|
+
"helix-load-more": HelixHeadlessListboxHelixLoadMoreElementEvent;
|
|
7409
8027
|
/** Fired after the value changes. */
|
|
7410
8028
|
input: HelixHeadlessListboxElementEvent;
|
|
7411
8029
|
};
|
|
@@ -8465,6 +9083,15 @@ slot replaces it. */
|
|
|
8465
9083
|
|
|
8466
9084
|
export type HelixHeadlessMenuSectionVueEvents = {};
|
|
8467
9085
|
|
|
9086
|
+
/** `HelixHeadlessMeter` component event */
|
|
9087
|
+
export type HelixHeadlessMeterElementEvent<E = Event> = TypedEvent<
|
|
9088
|
+
HelixHeadlessMeter,
|
|
9089
|
+
E
|
|
9090
|
+
>;
|
|
9091
|
+
/** `helix-band` event type */
|
|
9092
|
+
export type HelixHeadlessMeterHelixBandElementEvent =
|
|
9093
|
+
HelixHeadlessMeterElementEvent<HelixBandEvent>;
|
|
9094
|
+
|
|
8468
9095
|
export type HelixHeadlessMeterVueProps = {
|
|
8469
9096
|
/** Sets the band directly, for a rule that `low`, `high`, and `optimum` cannot
|
|
8470
9097
|
express.
|
|
@@ -8494,6 +9121,42 @@ stylesheet outside as `indicator-good`, `-fair` or `-poor` among the fill's
|
|
|
8494
9121
|
part names, so reflecting here would write an attribute onto the host for
|
|
8495
9122
|
no reader. */
|
|
8496
9123
|
band?: (HelixHeadlessMeter["band"]) | undefined;
|
|
9124
|
+
/** The words each band is said with under `live`, by its name, written as
|
|
9125
|
+
JSON in the attribute: `band-labels='{"poor":"Almost full"}'`.
|
|
9126
|
+
|
|
9127
|
+
A band left out keeps its default: "Good", "Fair" or "Poor". */
|
|
9128
|
+
"band-labels"?: (HelixHeadlessMeter["bandLabels"]) | undefined;
|
|
9129
|
+
/** The words each band is said with under `live`, by its name, written as
|
|
9130
|
+
JSON in the attribute: `band-labels='{"poor":"Almost full"}'`.
|
|
9131
|
+
|
|
9132
|
+
A band left out keeps its default: "Good", "Fair" or "Poor". */
|
|
9133
|
+
bandLabels?: (HelixHeadlessMeter["bandLabels"]) | undefined;
|
|
9134
|
+
/** `Intl.NumberFormat` options the reading is written with, as React Aria's
|
|
9135
|
+
Meter and ProgressBar take them: a unit, a currency, or a number of
|
|
9136
|
+
decimals. Written as JSON in the attribute.
|
|
9137
|
+
|
|
9138
|
+
```html
|
|
9139
|
+
<helix-meter value="18" max="32" format-options='{"style":"unit","unit":"gigabyte"}'></helix-meter>
|
|
9140
|
+
```
|
|
9141
|
+
|
|
9142
|
+
A `percent` style writes the share of the range, and any other the value
|
|
9143
|
+
itself, so the example says "18 GB", and a value past an end as it is.
|
|
9144
|
+
Absent is a whole percentage. The words are announced as well as shown.
|
|
9145
|
+
`value-text` still wins. */
|
|
9146
|
+
"format-options"?: (HelixHeadlessMeter["formatOptions"]) | undefined;
|
|
9147
|
+
/** `Intl.NumberFormat` options the reading is written with, as React Aria's
|
|
9148
|
+
Meter and ProgressBar take them: a unit, a currency, or a number of
|
|
9149
|
+
decimals. Written as JSON in the attribute.
|
|
9150
|
+
|
|
9151
|
+
```html
|
|
9152
|
+
<helix-meter value="18" max="32" format-options='{"style":"unit","unit":"gigabyte"}'></helix-meter>
|
|
9153
|
+
```
|
|
9154
|
+
|
|
9155
|
+
A `percent` style writes the share of the range, and any other the value
|
|
9156
|
+
itself, so the example says "18 GB", and a value past an end as it is.
|
|
9157
|
+
Absent is a whole percentage. The words are announced as well as shown.
|
|
9158
|
+
`value-text` still wins. */
|
|
9159
|
+
formatOptions?: (HelixHeadlessMeter["formatOptions"]) | undefined;
|
|
8497
9160
|
/** Bottom of the high band.
|
|
8498
9161
|
|
|
8499
9162
|
Absent leaves the range unbanded. */
|
|
@@ -8503,6 +9166,13 @@ Absent leaves the range unbanded. */
|
|
|
8503
9166
|
A visible label in the `label` slot names it instead, with the words it
|
|
8504
9167
|
shows, so the name and the label cannot disagree. */
|
|
8505
9168
|
label?: (HelixHeadlessMeter["label"]) | undefined;
|
|
9169
|
+
/** Says the reading in a polite `live` region each time it moves into
|
|
9170
|
+
another band, with the band's word, such as "92%, Poor".
|
|
9171
|
+
|
|
9172
|
+
For a meter whose value changes while it is on screen. Off by default,
|
|
9173
|
+
because a meter that reads a fixed level has nothing new to say. A meter
|
|
9174
|
+
with no bands says nothing. */
|
|
9175
|
+
live?: (HelixHeadlessMeter["live"]) | undefined;
|
|
8506
9176
|
/** The locale the percentage is written in, such as `fr` for `72 %`.
|
|
8507
9177
|
|
|
8508
9178
|
Absent uses the runtime's own. */
|
|
@@ -8568,7 +9238,10 @@ fair summary of a task and a poor one of a quantity. */
|
|
|
8568
9238
|
valueText?: (HelixHeadlessMeter["valueText"]) | undefined;
|
|
8569
9239
|
};
|
|
8570
9240
|
|
|
8571
|
-
export type HelixHeadlessMeterVueEvents = {
|
|
9241
|
+
export type HelixHeadlessMeterVueEvents = {
|
|
9242
|
+
/** Fired when the reading moves into another band, with the band it is in now, or `''` where it is in none. Not sent on the first render, since a meter that arrives in a band has not moved. */
|
|
9243
|
+
"helix-band": HelixHeadlessMeterHelixBandElementEvent;
|
|
9244
|
+
};
|
|
8572
9245
|
|
|
8573
9246
|
export type HelixHeadlessNavigationVueProps = {
|
|
8574
9247
|
/** Whether the arrow keys move focus between the destinations.
|
|
@@ -8900,12 +9573,6 @@ filled in. */
|
|
|
8900
9573
|
readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
8901
9574
|
/** Prevents editing. The value is still submitted with the form. */
|
|
8902
9575
|
readOnly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
8903
|
-
/** What the field is described as on iOS and iPadOS, where it carries no
|
|
8904
|
-
spinbutton role. See the class description. */
|
|
8905
|
-
"role-description"?: (HelixHeadlessNumberInput["roleDescription"]) | undefined;
|
|
8906
|
-
/** What the field is described as on iOS and iPadOS, where it carries no
|
|
8907
|
-
spinbutton role. See the class description. */
|
|
8908
|
-
roleDescription?: (HelixHeadlessNumberInput["roleDescription"]) | undefined;
|
|
8909
9576
|
/** Makes the label a grip that changes the value when it is dragged.
|
|
8910
9577
|
|
|
8911
9578
|
The label is what is dragged, so this adds no chrome at all. Still opt-in,
|
|
@@ -8916,7 +9583,13 @@ than states: a duration, a weight, a count they are looking for rather than
|
|
|
8916
9583
|
one they already know. */
|
|
8917
9584
|
scrub?: (HelixHeadlessNumberInput["scrub"]) | undefined;
|
|
8918
9585
|
/** How far one step moves. A value off the step grid, counted from `min`, is
|
|
8919
|
-
invalid, as it is in a native number field.
|
|
9586
|
+
invalid, as it is in a native number field.
|
|
9587
|
+
|
|
9588
|
+
Unset, a step moves by one, or by one percent under a percent format, and
|
|
9589
|
+
a typed number is rounded to the smallest amount `format-options` shows
|
|
9590
|
+
rather than to whole steps, as React Aria's NumberField does: a field
|
|
9591
|
+
showing dollars keeps the cents typed into it. Without `format-options`
|
|
9592
|
+
the grid is whole numbers, as in a native number field. */
|
|
8920
9593
|
step?: (HelixHeadlessNumberInput["step"]) | undefined;
|
|
8921
9594
|
/** The message the browser shows when the number is off the step grid, with
|
|
8922
9595
|
`{below}` and `{above}` filled in with the nearest valid values. */
|
|
@@ -8942,9 +9615,13 @@ number alone. */
|
|
|
8942
9615
|
React Aria's NumberField does unless told not to. Off, the wheel scrolls
|
|
8943
9616
|
the page, which is what a reader passing over a form expects. */
|
|
8944
9617
|
wheel?: (HelixHeadlessNumberInput["wheel"]) | undefined;
|
|
8945
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
9618
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
9619
|
+
and to the `value` attribute where this one is not written, as a native
|
|
9620
|
+
control resets to the `value` it declares. */
|
|
8946
9621
|
"default-value"?: (HelixHeadlessNumberInput["defaultValue"]) | undefined;
|
|
8947
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
9622
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
9623
|
+
and to the `value` attribute where this one is not written, as a native
|
|
9624
|
+
control resets to the `value` it declares. */
|
|
8948
9625
|
defaultValue?: (HelixHeadlessNumberInput["defaultValue"]) | undefined;
|
|
8949
9626
|
/** The control's current value, which its form submits.
|
|
8950
9627
|
|
|
@@ -9037,6 +9714,12 @@ export type HelixHeadlessObjectInspectorHelixActivateElementEvent =
|
|
|
9037
9714
|
/** `helix-before-activate` event type */
|
|
9038
9715
|
export type HelixHeadlessObjectInspectorHelixBeforeActivateElementEvent =
|
|
9039
9716
|
HelixHeadlessObjectInspectorElementEvent<HelixBeforeActivateEvent>;
|
|
9717
|
+
/** `helix-before-close` event type */
|
|
9718
|
+
export type HelixHeadlessObjectInspectorHelixBeforeCloseElementEvent =
|
|
9719
|
+
HelixHeadlessObjectInspectorElementEvent<HelixBeforeCloseEvent>;
|
|
9720
|
+
/** `helix-before-open` event type */
|
|
9721
|
+
export type HelixHeadlessObjectInspectorHelixBeforeOpenElementEvent =
|
|
9722
|
+
HelixHeadlessObjectInspectorElementEvent<HelixBeforeOpenEvent>;
|
|
9040
9723
|
/** `helix-copy` event type */
|
|
9041
9724
|
export type HelixHeadlessObjectInspectorHelixCopyElementEvent =
|
|
9042
9725
|
HelixHeadlessObjectInspectorElementEvent<HelixCopyEvent>;
|
|
@@ -9046,6 +9729,9 @@ export type HelixHeadlessObjectInspectorHelixFilterElementEvent =
|
|
|
9046
9729
|
/** `helix-filtered` event type */
|
|
9047
9730
|
export type HelixHeadlessObjectInspectorHelixFilteredElementEvent =
|
|
9048
9731
|
HelixHeadlessObjectInspectorElementEvent<HelixFilteredEvent>;
|
|
9732
|
+
/** `toggle` event type */
|
|
9733
|
+
export type HelixHeadlessObjectInspectorToggleElementEvent =
|
|
9734
|
+
HelixHeadlessObjectInspectorElementEvent<ToggleEvent>;
|
|
9049
9735
|
|
|
9050
9736
|
export type HelixHeadlessObjectInspectorVueProps = {
|
|
9051
9737
|
/** The active row's path, such as `/meta/tags/0`, and the empty string for the
|
|
@@ -9181,12 +9867,18 @@ export type HelixHeadlessObjectInspectorVueEvents = {
|
|
|
9181
9867
|
"helix-activate": HelixHeadlessObjectInspectorHelixActivateElementEvent;
|
|
9182
9868
|
/** The active row is about to move, with its new path. Cancelable: cancel it to keep the row where it is. */
|
|
9183
9869
|
"helix-before-activate": HelixHeadlessObjectInspectorHelixBeforeActivateElementEvent;
|
|
9870
|
+
/** A reader is about to close the active branch. Cancelable: cancel it to keep the branch open. */
|
|
9871
|
+
"helix-before-close": HelixHeadlessObjectInspectorHelixBeforeCloseElementEvent;
|
|
9872
|
+
/** A reader is about to open the active branch, or `*` the branches beside it. Cancelable: cancel it to keep them closed. */
|
|
9873
|
+
"helix-before-open": HelixHeadlessObjectInspectorHelixBeforeOpenElementEvent;
|
|
9184
9874
|
/** A value was put on the clipboard, from the copy button or the keyboard. */
|
|
9185
9875
|
"helix-copy": HelixHeadlessObjectInspectorHelixCopyElementEvent;
|
|
9186
9876
|
/** Text was typed in the filter field, with what it now holds. Cancelable: cancel it to keep the filter as it was. */
|
|
9187
9877
|
"helix-filter": HelixHeadlessObjectInspectorHelixFilterElementEvent;
|
|
9188
9878
|
/** The filter field changed `filter`, which now holds the text. */
|
|
9189
9879
|
"helix-filtered": HelixHeadlessObjectInspectorHelixFilteredElementEvent;
|
|
9880
|
+
/** A reader opened or closed a branch, with `newState` and `oldState`. `expanded` holds every open branch. */
|
|
9881
|
+
toggle: HelixHeadlessObjectInspectorToggleElementEvent;
|
|
9190
9882
|
};
|
|
9191
9883
|
|
|
9192
9884
|
export type HelixHeadlessOptionGroupVueProps = {
|
|
@@ -9208,15 +9900,19 @@ export type HelixHeadlessOptionHelixSelectElementEvent =
|
|
|
9208
9900
|
export type HelixHeadlessOptionVueProps = {
|
|
9209
9901
|
/** Whether this is the option the keyboard is on.
|
|
9210
9902
|
|
|
9211
|
-
Written by the listbox
|
|
9212
|
-
|
|
9213
|
-
|
|
9903
|
+
Written by the listbox once a reader moves the highlight. Style it with
|
|
9904
|
+
`:state(active)`, or `::part(item-active)` for an option inside another
|
|
9905
|
+
component's shadow root. The `data-active` attribute sets it from markup;
|
|
9906
|
+
it is also written back for stylesheets from before the state, and no
|
|
9907
|
+
stylesheet of the library's own selects it. */
|
|
9214
9908
|
"data-active"?: (HelixHeadlessOption["active"]) | undefined;
|
|
9215
9909
|
/** Whether this is the option the keyboard is on.
|
|
9216
9910
|
|
|
9217
|
-
Written by the listbox
|
|
9218
|
-
|
|
9219
|
-
|
|
9911
|
+
Written by the listbox once a reader moves the highlight. Style it with
|
|
9912
|
+
`:state(active)`, or `::part(item-active)` for an option inside another
|
|
9913
|
+
component's shadow root. The `data-active` attribute sets it from markup;
|
|
9914
|
+
it is also written back for stylesheets from before the state, and no
|
|
9915
|
+
stylesheet of the library's own selects it. */
|
|
9220
9916
|
active?: (HelixHeadlessOption["active"]) | undefined;
|
|
9221
9917
|
/** A second destination for the row, opened when you choose it with the
|
|
9222
9918
|
modifier key held.
|
|
@@ -9360,6 +10056,10 @@ export type HelixHeadlessOptionVueEvents = {
|
|
|
9360
10056
|
"helix-select": HelixHeadlessOptionHelixSelectElementEvent;
|
|
9361
10057
|
};
|
|
9362
10058
|
|
|
10059
|
+
export type HelixHeadlessOptionSeparatorVueProps = {};
|
|
10060
|
+
|
|
10061
|
+
export type HelixHeadlessOptionSeparatorVueEvents = {};
|
|
10062
|
+
|
|
9363
10063
|
/** `HelixHeadlessOutline` component event */
|
|
9364
10064
|
export type HelixHeadlessOutlineElementEvent<E = Event> = TypedEvent<
|
|
9365
10065
|
HelixHeadlessOutline,
|
|
@@ -9390,6 +10090,11 @@ read at the click rather than cached, because a reader can change it while
|
|
|
9390
10090
|
the page is open and this is the only motion in the component that
|
|
9391
10091
|
JavaScript rather than CSS decides. */
|
|
9392
10092
|
behavior?: (HelixHeadlessOutline["behavior"]) | undefined;
|
|
10093
|
+
/** Keeps the link of the section in view in view itself, in an outline
|
|
10094
|
+
longer than the box it scrolls in, such as a contents rail with a
|
|
10095
|
+
scrollbar of its own. Only that box moves: never the page, and never the
|
|
10096
|
+
box the sections scroll in. */
|
|
10097
|
+
follow?: (HelixHeadlessOutline["follow"]) | undefined;
|
|
9393
10098
|
/** The navigation's name, read by screen readers. A heading in the `heading`
|
|
9394
10099
|
slot names it in place of this. */
|
|
9395
10100
|
label?: (HelixHeadlessOutline["label"]) | undefined;
|
|
@@ -9683,20 +10388,21 @@ export type HelixHeadlessPinInputHelixCompleteElementEvent =
|
|
|
9683
10388
|
HelixHeadlessPinInputElementEvent<HelixCompleteEvent>;
|
|
9684
10389
|
|
|
9685
10390
|
export type HelixHeadlessPinInputVueProps = {
|
|
9686
|
-
/** The autofill hint for the browser
|
|
9687
|
-
|
|
9688
|
-
|
|
9689
|
-
that lets a phone offer the code out of a message. Later cells stay `off`
|
|
9690
|
-
for the reason in the class comment above, that six cells each offering
|
|
9691
|
-
the same code is one offer made six times. */
|
|
10391
|
+
/** The autofill hint for the browser. `one-time-code` is why this defaults to
|
|
10392
|
+
anything at all: it is the token that lets a phone offer the code out of a
|
|
10393
|
+
message. */
|
|
9692
10394
|
autocomplete?: (HelixHeadlessPinInput["autocomplete"]) | undefined;
|
|
9693
10395
|
/** Whether the form is submitted once the last box is filled, as Web
|
|
9694
10396
|
Awesome's `autosubmit` and Radix's `autoSubmit`. Only for a code the field
|
|
9695
10397
|
took: a refused last character submits nothing. */
|
|
9696
10398
|
autosubmit?: (HelixHeadlessPinInput["autosubmit"]) | undefined;
|
|
9697
|
-
/**
|
|
10399
|
+
/** How typed and pasted letters are cased: `upper`, `lower`, or `preserve`
|
|
10400
|
+
to keep them as typed. Web Awesome's OTP input takes the same `case`, for
|
|
10401
|
+
a code a service reads in one case. */
|
|
10402
|
+
case?: (HelixHeadlessPinInput["case"]) | undefined;
|
|
10403
|
+
/** The name each box once had, with `{index}` and `{length}` filled in. */
|
|
9698
10404
|
"cell-label"?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
9699
|
-
/**
|
|
10405
|
+
/** The name each box once had, with `{index}` and `{length}` filled in. */
|
|
9700
10406
|
cellLabel?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
9701
10407
|
/** Separators drawn between the boxes: `#` or `*` for a box and anything
|
|
9702
10408
|
else as it is written, so `###-###` draws a dash after the third. The
|
|
@@ -9704,21 +10410,22 @@ separators are hidden from screen readers and are not part of the value. */
|
|
|
9704
10410
|
format?: (HelixHeadlessPinInput["format"]) | undefined;
|
|
9705
10411
|
/** How many characters the code has. */
|
|
9706
10412
|
length?: (HelixHeadlessPinInput["length"]) | undefined;
|
|
9707
|
-
/** Whether the characters are hidden, the way a password is.
|
|
10413
|
+
/** Whether the characters are hidden, the way a password is. The field is a
|
|
10414
|
+
password field, and each filled box draws `mask-character`. */
|
|
9708
10415
|
mask?: (HelixHeadlessPinInput["mask"]) | undefined;
|
|
9709
|
-
/** What
|
|
9710
|
-
|
|
9711
|
-
|
|
9712
|
-
|
|
9713
|
-
|
|
9714
|
-
|
|
9715
|
-
|
|
9716
|
-
|
|
9717
|
-
|
|
10416
|
+
/** What a filled box draws under `mask`, in place of its character, as Web
|
|
10417
|
+
Awesome's `--mask-char`. */
|
|
10418
|
+
"mask-character"?: (HelixHeadlessPinInput["maskCharacter"]) | undefined;
|
|
10419
|
+
/** What a filled box draws under `mask`, in place of its character, as Web
|
|
10420
|
+
Awesome's `--mask-char`. */
|
|
10421
|
+
maskCharacter?: (HelixHeadlessPinInput["maskCharacter"]) | undefined;
|
|
10422
|
+
/** What an empty box shows, usually a single dot. It is not shown in the box
|
|
10423
|
+
the caret is in. Empty by default, because a row of boxes already reads as
|
|
10424
|
+
a row of boxes. */
|
|
9718
10425
|
placeholder?: (HelixHeadlessPinInput["placeholder"]) | undefined;
|
|
9719
|
-
/** Whether the
|
|
10426
|
+
/** Whether the field blocks input. A read-only code still submits its value. */
|
|
9720
10427
|
readonly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
|
|
9721
|
-
/** Whether the
|
|
10428
|
+
/** Whether the field blocks input. A read-only code still submits its value. */
|
|
9722
10429
|
readOnly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
|
|
9723
10430
|
/** The message shown when the code is started and not finished, with
|
|
9724
10431
|
`{length}` filled in. When it is unset, an English default is shown. */
|
|
@@ -9743,13 +10450,16 @@ marked letters wants `text`, which judges nothing.
|
|
|
9743
10450
|
|
|
9744
10451
|
**Not reflected**: nothing selects on it, so reflecting only writes
|
|
9745
10452
|
`type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
|
|
9746
|
-
attribute no consumer's markup had. The
|
|
9747
|
-
"reflect only what CSS selects on". The real inputs take it as a binding,
|
|
10453
|
+
attribute no consumer's markup had. The field takes it as `inputmode`,
|
|
9748
10454
|
which is what makes the keyboard follow. */
|
|
9749
10455
|
type?: (HelixHeadlessPinInput["type"]) | undefined;
|
|
9750
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
10456
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
10457
|
+
and to the `value` attribute where this one is not written, as a native
|
|
10458
|
+
control resets to the `value` it declares. */
|
|
9751
10459
|
"default-value"?: (HelixHeadlessPinInput["defaultValue"]) | undefined;
|
|
9752
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
10460
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
10461
|
+
and to the `value` attribute where this one is not written, as a native
|
|
10462
|
+
control resets to the `value` it declares. */
|
|
9753
10463
|
defaultValue?: (HelixHeadlessPinInput["defaultValue"]) | undefined;
|
|
9754
10464
|
/** The control's current value, which its form submits.
|
|
9755
10465
|
|
|
@@ -9851,8 +10561,9 @@ trigger already reads as belonging to it. */
|
|
|
9851
10561
|
/** The panel's name, read by screen readers. Left at `Popover`, the first
|
|
9852
10562
|
heading in the panel names it instead. */
|
|
9853
10563
|
label?: (HelixHeadlessPopover["label"]) | undefined;
|
|
9854
|
-
/** Keeps `Tab` inside the panel while it is open,
|
|
9855
|
-
`aria-modal
|
|
10564
|
+
/** Keeps `Tab` inside the panel while it is open, marks the panel
|
|
10565
|
+
`aria-modal`, and hides the rest of the page from screen readers. A press
|
|
10566
|
+
outside and Escape still close it. */
|
|
9856
10567
|
modal?: (HelixHeadlessPopover["modal"]) | undefined;
|
|
9857
10568
|
/** Space between the trigger and the panel, in pixels. */
|
|
9858
10569
|
offset?: (HelixHeadlessPopover["offset"]) | undefined;
|
|
@@ -9888,7 +10599,52 @@ export type HelixHeadlessPopoverVueEvents = {
|
|
|
9888
10599
|
toggle: HelixHeadlessPopoverToggleElementEvent;
|
|
9889
10600
|
};
|
|
9890
10601
|
|
|
10602
|
+
/** `HelixHeadlessProgress` component event */
|
|
10603
|
+
export type HelixHeadlessProgressElementEvent<E = Event> = TypedEvent<
|
|
10604
|
+
HelixHeadlessProgress,
|
|
10605
|
+
E
|
|
10606
|
+
>;
|
|
10607
|
+
/** `helix-complete` event type */
|
|
10608
|
+
export type HelixHeadlessProgressHelixCompleteElementEvent =
|
|
10609
|
+
HelixHeadlessProgressElementEvent<HelixCompleteEvent>;
|
|
10610
|
+
|
|
9891
10611
|
export type HelixHeadlessProgressVueProps = {
|
|
10612
|
+
/** The words a screen reader hears when the value reaches `max`, such as
|
|
10613
|
+
"Upload complete".
|
|
10614
|
+
|
|
10615
|
+
Said once, politely, as the work finishes. Empty says nothing, for a bar
|
|
10616
|
+
whose page announces the result itself. */
|
|
10617
|
+
"complete-label"?: (HelixHeadlessProgress["completeLabel"]) | undefined;
|
|
10618
|
+
/** The words a screen reader hears when the value reaches `max`, such as
|
|
10619
|
+
"Upload complete".
|
|
10620
|
+
|
|
10621
|
+
Said once, politely, as the work finishes. Empty says nothing, for a bar
|
|
10622
|
+
whose page announces the result itself. */
|
|
10623
|
+
completeLabel?: (HelixHeadlessProgress["completeLabel"]) | undefined;
|
|
10624
|
+
/** `Intl.NumberFormat` options the reading is written with, as React Aria's
|
|
10625
|
+
Meter and ProgressBar take them: a unit, a currency, or a number of
|
|
10626
|
+
decimals. Written as JSON in the attribute.
|
|
10627
|
+
|
|
10628
|
+
```html
|
|
10629
|
+
<helix-progress value="18" max="32" format-options='{"style":"unit","unit":"gigabyte"}'></helix-progress>
|
|
10630
|
+
```
|
|
10631
|
+
|
|
10632
|
+
A `percent` style writes the share of the range, and any other the value
|
|
10633
|
+
itself, so the example says "18 GB". Absent is a whole percentage. The
|
|
10634
|
+
words are announced as well as shown. `value-text` still wins. */
|
|
10635
|
+
"format-options"?: (HelixHeadlessProgress["formatOptions"]) | undefined;
|
|
10636
|
+
/** `Intl.NumberFormat` options the reading is written with, as React Aria's
|
|
10637
|
+
Meter and ProgressBar take them: a unit, a currency, or a number of
|
|
10638
|
+
decimals. Written as JSON in the attribute.
|
|
10639
|
+
|
|
10640
|
+
```html
|
|
10641
|
+
<helix-progress value="18" max="32" format-options='{"style":"unit","unit":"gigabyte"}'></helix-progress>
|
|
10642
|
+
```
|
|
10643
|
+
|
|
10644
|
+
A `percent` style writes the share of the range, and any other the value
|
|
10645
|
+
itself, so the example says "18 GB". Absent is a whole percentage. The
|
|
10646
|
+
words are announced as well as shown. `value-text` still wins. */
|
|
10647
|
+
formatOptions?: (HelixHeadlessProgress["formatOptions"]) | undefined;
|
|
9892
10648
|
/** Whether the length of the task is unknown. The bar then shows activity
|
|
9893
10649
|
without a value.
|
|
9894
10650
|
|
|
@@ -9975,7 +10731,10 @@ report progress. */
|
|
|
9975
10731
|
valueText?: (HelixHeadlessProgress["valueText"]) | undefined;
|
|
9976
10732
|
};
|
|
9977
10733
|
|
|
9978
|
-
export type HelixHeadlessProgressVueEvents = {
|
|
10734
|
+
export type HelixHeadlessProgressVueEvents = {
|
|
10735
|
+
/** The value reached `max` from below. Its `value` is `max`. Not sent for a bar that starts full. */
|
|
10736
|
+
"helix-complete": HelixHeadlessProgressHelixCompleteElementEvent;
|
|
10737
|
+
};
|
|
9979
10738
|
|
|
9980
10739
|
/** `HelixHeadlessQrCode` component event */
|
|
9981
10740
|
export type HelixHeadlessQrCodeElementEvent<E = Event> = TypedEvent<
|
|
@@ -9984,6 +10743,12 @@ export type HelixHeadlessQrCodeElementEvent<E = Event> = TypedEvent<
|
|
|
9984
10743
|
>;
|
|
9985
10744
|
|
|
9986
10745
|
export type HelixHeadlessQrCodeVueProps = {
|
|
10746
|
+
/** The words a code with no `label` is named by, followed by its value where
|
|
10747
|
+
the value is a web address. */
|
|
10748
|
+
"code-label"?: (HelixHeadlessQrCode["codeLabel"]) | undefined;
|
|
10749
|
+
/** The words a code with no `label` is named by, followed by its value where
|
|
10750
|
+
the value is a web address. */
|
|
10751
|
+
codeLabel?: (HelixHeadlessQrCode["codeLabel"]) | undefined;
|
|
9987
10752
|
/** The error correction level, which sets how much of the code can be lost
|
|
9988
10753
|
and still scan.
|
|
9989
10754
|
|
|
@@ -9993,10 +10758,13 @@ chosen automatically when the slot is filled: it is the level that makes
|
|
|
9993
10758
|
covering safe, and a consumer who fills the slot has said what they want
|
|
9994
10759
|
without having to know that. */
|
|
9995
10760
|
correction?: (HelixHeadlessQrCode["correction"]) | undefined;
|
|
9996
|
-
/** The image's accessible name
|
|
10761
|
+
/** The image's accessible name: what the code is for, such as "Open the
|
|
10762
|
+
menu".
|
|
9997
10763
|
|
|
9998
|
-
|
|
9999
|
-
|
|
10764
|
+
Absent names it by `code-label` and, for a web address, the address,
|
|
10765
|
+
which is what a reader who cannot scan it needs. Any other value is left
|
|
10766
|
+
out of the name, since it may hold a secret, such as an authenticator's
|
|
10767
|
+
key or a network's password. */
|
|
10000
10768
|
label?: (HelixHeadlessQrCode["label"]) | undefined;
|
|
10001
10769
|
/** How the modules are drawn.
|
|
10002
10770
|
|
|
@@ -10066,9 +10834,13 @@ Home and End move focus between the radios and choose nothing, so a reader
|
|
|
10066
10834
|
can hear every choice, and Tab still reaches the answer. The group says
|
|
10067
10835
|
`aria-readonly`. A script can still set `value`. */
|
|
10068
10836
|
readOnly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
|
|
10069
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
10837
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
10838
|
+
and to the `value` attribute where this one is not written, as a native
|
|
10839
|
+
control resets to the `value` it declares. */
|
|
10070
10840
|
"default-value"?: (HelixHeadlessRadioGroup["defaultValue"]) | undefined;
|
|
10071
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
10841
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
10842
|
+
and to the `value` attribute where this one is not written, as a native
|
|
10843
|
+
control resets to the `value` it declares. */
|
|
10072
10844
|
defaultValue?: (HelixHeadlessRadioGroup["defaultValue"]) | undefined;
|
|
10073
10845
|
/** The control's current value, which its form submits.
|
|
10074
10846
|
|
|
@@ -10239,6 +11011,9 @@ export type HelixHeadlessRatingHelixBeforeChangeElementEvent =
|
|
|
10239
11011
|
/** `helix-clear` event type */
|
|
10240
11012
|
export type HelixHeadlessRatingHelixClearElementEvent =
|
|
10241
11013
|
HelixHeadlessRatingElementEvent<HelixClearEvent>;
|
|
11014
|
+
/** `helix-preview` event type */
|
|
11015
|
+
export type HelixHeadlessRatingHelixPreviewElementEvent =
|
|
11016
|
+
HelixHeadlessRatingElementEvent<HelixPreviewEvent>;
|
|
10242
11017
|
|
|
10243
11018
|
export type HelixHeadlessRatingVueProps = {
|
|
10244
11019
|
/** Whether a reader can take the rating back to unrated: by pressing the
|
|
@@ -10351,9 +11126,13 @@ answer from the value than from a sentence: "3.5" alone is a number without
|
|
|
10351
11126
|
a subject. This names the readout, where a control is named by its `label`
|
|
10352
11127
|
and each of its options by the score that option is. */
|
|
10353
11128
|
valueText?: (HelixHeadlessRating["valueText"]) | undefined;
|
|
10354
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11129
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11130
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11131
|
+
control resets to the `value` it declares. */
|
|
10355
11132
|
"default-value"?: (HelixHeadlessRating["defaultValue"]) | undefined;
|
|
10356
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11133
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11134
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11135
|
+
control resets to the `value` it declares. */
|
|
10357
11136
|
defaultValue?: (HelixHeadlessRating["defaultValue"]) | undefined;
|
|
10358
11137
|
/** The control's current value, which its form submits.
|
|
10359
11138
|
|
|
@@ -10433,6 +11212,8 @@ export type HelixHeadlessRatingVueEvents = {
|
|
|
10433
11212
|
"helix-before-change": HelixHeadlessRatingHelixBeforeChangeElementEvent;
|
|
10434
11213
|
/** The rating went back to unrated, under `clearable`. Sent after `input` and `change`. */
|
|
10435
11214
|
"helix-clear": HelixHeadlessRatingHelixClearElementEvent;
|
|
11215
|
+
/** The score under the pointer, shown before it is chosen, or `''` once the marks show the score again. Sent once each time the preview changes. */
|
|
11216
|
+
"helix-preview": HelixHeadlessRatingHelixPreviewElementEvent;
|
|
10436
11217
|
/** The score changed. */
|
|
10437
11218
|
input: HelixHeadlessRatingElementEvent;
|
|
10438
11219
|
};
|
|
@@ -10453,6 +11234,28 @@ is read along. */
|
|
|
10453
11234
|
"points-label"?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
|
|
10454
11235
|
/** The word the summary uses for a row when it counts them. */
|
|
10455
11236
|
pointsLabel?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
|
|
11237
|
+
/** The heading of a column whose numbers size the points, such as
|
|
11238
|
+
`Population`, which makes the chart a bubble chart.
|
|
11239
|
+
|
|
11240
|
+
That column is then a measure and no series: it draws no points of its
|
|
11241
|
+
own, and each point's area follows its row's number in it. Absent, every
|
|
11242
|
+
point is one size. */
|
|
11243
|
+
"size-by"?: (HelixHeadlessScatterChart["sizeBy"]) | undefined;
|
|
11244
|
+
/** The heading of a column whose numbers size the points, such as
|
|
11245
|
+
`Population`, which makes the chart a bubble chart.
|
|
11246
|
+
|
|
11247
|
+
That column is then a measure and no series: it draws no points of its
|
|
11248
|
+
own, and each point's area follows its row's number in it. Absent, every
|
|
11249
|
+
point is one size. */
|
|
11250
|
+
sizeBy?: (HelixHeadlessScatterChart["sizeBy"]) | undefined;
|
|
11251
|
+
/** Draws each series' line of best fit across the plot, by least squares, in
|
|
11252
|
+
the series' color: the regression line a reader would otherwise draw by
|
|
11253
|
+
eye.
|
|
11254
|
+
|
|
11255
|
+
Absent draws none. A series with fewer than two points, or with every
|
|
11256
|
+
point at one measure across, has no line to draw. The summary already
|
|
11257
|
+
gives each series' correlation, which says how near the points are to it. */
|
|
11258
|
+
trend?: (HelixHeadlessScatterChart["trend"]) | undefined;
|
|
10456
11259
|
/** The id of the table to read.
|
|
10457
11260
|
|
|
10458
11261
|
Names a table in the same tree, so a chart inside another component's
|
|
@@ -10473,6 +11276,22 @@ percentages and its totals, such as `de` for `1.240` and `32 %`.
|
|
|
10473
11276
|
Absent uses the runtime's own. The table's cells are shown as the table
|
|
10474
11277
|
writes them, whatever this says. */
|
|
10475
11278
|
locale?: (HelixHeadlessScatterChart["locale"]) | undefined;
|
|
11279
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
11280
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
11281
|
+
`locale`.
|
|
11282
|
+
|
|
11283
|
+
Set it to the words of the page's language, such as `{position} von
|
|
11284
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
11285
|
+
legend hid is not counted. */
|
|
11286
|
+
"position-label"?: (HelixHeadlessScatterChart["positionLabel"]) | undefined;
|
|
11287
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
11288
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
11289
|
+
`locale`.
|
|
11290
|
+
|
|
11291
|
+
Set it to the words of the page's language, such as `{position} von
|
|
11292
|
+
{count}`, or to nothing to say no position. A slice or a series a
|
|
11293
|
+
legend hid is not counted. */
|
|
11294
|
+
positionLabel?: (HelixHeadlessScatterChart["positionLabel"]) | undefined;
|
|
10476
11295
|
};
|
|
10477
11296
|
|
|
10478
11297
|
export type HelixHeadlessScatterChartVueEvents = {};
|
|
@@ -10496,6 +11315,9 @@ leaves, in milliseconds. Read under `scrollbars="scroll"` and
|
|
|
10496
11315
|
|
|
10497
11316
|
Without one there is no region: see the note on the class. */
|
|
10498
11317
|
label?: (HelixHeadlessScrollArea["label"]) | undefined;
|
|
11318
|
+
/** The one axis the content scrolls along: `vertical` or `horizontal`. The
|
|
11319
|
+
other axis clips what is past it and has no scrollbar. Unset scrolls both. */
|
|
11320
|
+
orientation?: (HelixHeadlessScrollArea["orientation"]) | undefined;
|
|
10499
11321
|
/** Draws scrollbars of the component's own in place of the browser's, and
|
|
10500
11322
|
says when they show.
|
|
10501
11323
|
|
|
@@ -10512,7 +11334,7 @@ Absent keeps the browser's scrollbars. */
|
|
|
10512
11334
|
export type HelixHeadlessScrollAreaVueEvents = {
|
|
10513
11335
|
/** The content scrolled. Sent from the host, because the viewport's own does not leave the shadow root. Does not bubble. */
|
|
10514
11336
|
scroll: HelixHeadlessScrollAreaElementEvent;
|
|
10515
|
-
/** The content stopped scrolling. Sent from the host, as `scroll` is. Does not bubble. */
|
|
11337
|
+
/** The content stopped scrolling. Sent from the host, as `scroll` is, and once for a thumb dragged across the content. Does not bubble. */
|
|
10516
11338
|
scrollend: HelixHeadlessScrollAreaElementEvent;
|
|
10517
11339
|
};
|
|
10518
11340
|
|
|
@@ -10533,6 +11355,9 @@ export type HelixHeadlessSelectHelixBeforeOpenElementEvent =
|
|
|
10533
11355
|
/** `helix-filter` event type */
|
|
10534
11356
|
export type HelixHeadlessSelectHelixFilterElementEvent =
|
|
10535
11357
|
HelixHeadlessSelectElementEvent<HelixFilterEvent>;
|
|
11358
|
+
/** `helix-load-more` event type */
|
|
11359
|
+
export type HelixHeadlessSelectHelixLoadMoreElementEvent =
|
|
11360
|
+
HelixHeadlessSelectElementEvent<HelixLoadMoreEvent>;
|
|
10536
11361
|
/** `toggle` event type */
|
|
10537
11362
|
export type HelixHeadlessSelectToggleElementEvent =
|
|
10538
11363
|
HelixHeadlessSelectElementEvent<ToggleEvent>;
|
|
@@ -10547,6 +11372,24 @@ export type HelixHeadlessSelectVueProps = {
|
|
|
10547
11372
|
Passed to the listbox rather than acted on here, because the listbox owns
|
|
10548
11373
|
the filtering, the empty state and the keyboard. */
|
|
10549
11374
|
filterable?: (HelixHeadlessSelect["filterable"]) | undefined;
|
|
11375
|
+
/** The open list's name where nothing names the Select, read by screen
|
|
11376
|
+
readers. The list has no visible name.
|
|
11377
|
+
|
|
11378
|
+
A Select named by `label`, `aria-label`, `aria-labelledby` or a `<label>`
|
|
11379
|
+
gives its list that name, and this is not used. Unnamed, the Select is
|
|
11380
|
+
reported once by the missing-name warning, and its list is not reported a
|
|
11381
|
+
second time for a name the page never wrote: the list is this element's,
|
|
11382
|
+
and so is the fallback. Combobox calls its list the same. */
|
|
11383
|
+
"list-label"?: (HelixHeadlessSelect["listLabel"]) | undefined;
|
|
11384
|
+
/** The open list's name where nothing names the Select, read by screen
|
|
11385
|
+
readers. The list has no visible name.
|
|
11386
|
+
|
|
11387
|
+
A Select named by `label`, `aria-label`, `aria-labelledby` or a `<label>`
|
|
11388
|
+
gives its list that name, and this is not used. Unnamed, the Select is
|
|
11389
|
+
reported once by the missing-name warning, and its list is not reported a
|
|
11390
|
+
second time for a name the page never wrote: the list is this element's,
|
|
11391
|
+
and so is the fallback. Combobox calls its list the same. */
|
|
11392
|
+
listLabel?: (HelixHeadlessSelect["listLabel"]) | undefined;
|
|
10550
11393
|
/** Whether the options are still loading.
|
|
10551
11394
|
|
|
10552
11395
|
Passed straight to the list, which is where the rows are and so where the
|
|
@@ -10561,6 +11404,16 @@ consumer wiring the same flag twice. */
|
|
|
10561
11404
|
multiple?: (HelixHeadlessSelect["multiple"]) | undefined;
|
|
10562
11405
|
/** Shown on the trigger while nothing is chosen. */
|
|
10563
11406
|
placeholder?: (HelixHeadlessSelect["placeholder"]) | undefined;
|
|
11407
|
+
/** Where the list opens: `floating`, under the trigger and above it where
|
|
11408
|
+
there is no room, or `item-aligned`, over the trigger with the chosen
|
|
11409
|
+
option where the trigger is, as a native select does on macOS and Radix
|
|
11410
|
+
Select does by default.
|
|
11411
|
+
|
|
11412
|
+
Over the trigger, a reader's eye stays on the answer as the list opens
|
|
11413
|
+
round it, and a short move reaches the options either side. Near an edge
|
|
11414
|
+
of the screen the list moves to stay on it, so the option may sit beside
|
|
11415
|
+
the trigger rather than on it. It follows the page as it scrolls. */
|
|
11416
|
+
position?: (HelixHeadlessSelect["position"]) | undefined;
|
|
10564
11417
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
10565
11418
|
"default-open"?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
|
|
10566
11419
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -10578,9 +11431,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
|
|
|
10578
11431
|
last reader did rather than what the author wrote. `:state(open)` carries
|
|
10579
11432
|
the resolved state for stylesheets, which is what the mirror is for. */
|
|
10580
11433
|
open?: (HelixHeadlessSelect["open"]) | undefined;
|
|
10581
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11434
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11435
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11436
|
+
control resets to the `value` it declares. */
|
|
10582
11437
|
"default-value"?: (HelixHeadlessSelect["defaultValue"]) | undefined;
|
|
10583
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11438
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11439
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11440
|
+
control resets to the `value` it declares. */
|
|
10584
11441
|
defaultValue?: (HelixHeadlessSelect["defaultValue"]) | undefined;
|
|
10585
11442
|
/** The control's current value, which its form submits.
|
|
10586
11443
|
|
|
@@ -10645,6 +11502,16 @@ imperatively later, and nothing is hydrating by then.
|
|
|
10645
11502
|
|
|
10646
11503
|
Here rather than on each control. */
|
|
10647
11504
|
name?: (HelixHeadlessSelect["name"]) | undefined;
|
|
11505
|
+
/** Whether the trigger holds its group's tab stop.
|
|
11506
|
+
|
|
11507
|
+
A toolbar keeps one tab stop across its controls, and writing `tabindex`
|
|
11508
|
+
onto this element would change markup the consumer rendered, which a React
|
|
11509
|
+
consumer's hydration reports. A toolbar sets this property instead, and
|
|
11510
|
+
the stop moves on the trigger inside the shadow root, as Button's does.
|
|
11511
|
+
|
|
11512
|
+
No attribute, because it is coordination between elements rather than
|
|
11513
|
+
anything a consumer sets. */
|
|
11514
|
+
focusable?: (HelixHeadlessSelect["focusable"]) | undefined;
|
|
10648
11515
|
/** What the trigger shows for the chosen options: a function given them, in
|
|
10649
11516
|
the order they appear, that returns text, an element or a Lit template.
|
|
10650
11517
|
|
|
@@ -10674,6 +11541,8 @@ export type HelixHeadlessSelectVueEvents = {
|
|
|
10674
11541
|
"helix-before-open": HelixHeadlessSelectHelixBeforeOpenElementEvent;
|
|
10675
11542
|
/** Fired as the user types in the filter field of a `filterable` select, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and filter the options yourself. */
|
|
10676
11543
|
"helix-filter": HelixHeadlessSelectHelixFilterElementEvent;
|
|
11544
|
+
/** Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page and set `loading` while you fetch it. */
|
|
11545
|
+
"helix-load-more": HelixHeadlessSelectHelixLoadMoreElementEvent;
|
|
10677
11546
|
/** Fired after the value changes. */
|
|
10678
11547
|
input: HelixHeadlessSelectElementEvent;
|
|
10679
11548
|
/** Fired after the list opens or closes, with `newState` and `oldState`. */
|
|
@@ -10801,27 +11670,46 @@ takes the width of the row it is in. `--slider-length` is that number and
|
|
|
10801
11670
|
defaults to nine rem, so one dropped into a layout is a usable height
|
|
10802
11671
|
rather than a thumb sitting on nothing. */
|
|
10803
11672
|
orientation?: (HelixHeadlessSlider["orientation"]) | undefined;
|
|
11673
|
+
/** Where a single thumb's fill starts: `start` at `min`, `center` at the
|
|
11674
|
+
middle of the track, or `end` at `max`. Absent is `start`. A range fills
|
|
11675
|
+
between its thumbs and ignores it. */
|
|
11676
|
+
origin?: (HelixHeadlessSlider["origin"]) | undefined;
|
|
10804
11677
|
/** Adds a second thumb, so the value is a pair.
|
|
10805
11678
|
|
|
10806
11679
|
The pair is one string, `"10,50"`, which is what a form submits and what
|
|
10807
11680
|
`MixinControllerValue` already holds. `valueAsNumber` reads the lower of
|
|
10808
11681
|
the two, since a range has no single number. */
|
|
10809
11682
|
range?: (HelixHeadlessSlider["range"]) | undefined;
|
|
11683
|
+
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
11684
|
+
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
11685
|
+
"range-text"?: (HelixHeadlessSlider["rangeText"]) | undefined;
|
|
11686
|
+
/** How the readout joins a range's two values, with `{start}` and `{end}`
|
|
11687
|
+
filled in. Write it in the page's language, such as `{start} bis {end}`. */
|
|
11688
|
+
rangeText?: (HelixHeadlessSlider["rangeText"]) | undefined;
|
|
10810
11689
|
/** Shows the chosen value beside the track. */
|
|
10811
11690
|
"show-value"?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
10812
11691
|
/** Shows the chosen value beside the track. */
|
|
10813
11692
|
showValue?: (HelixHeadlessSlider["showValue"]) | undefined;
|
|
10814
11693
|
/** How far one press of an arrow key moves the thumb. */
|
|
10815
11694
|
step?: (HelixHeadlessSlider["step"]) | undefined;
|
|
11695
|
+
/** Whether each thumb shows its value in a bubble beside it, as Web
|
|
11696
|
+
Awesome's `with-tooltip`. The styled slider shows the bubbles while the
|
|
11697
|
+
slider is under the pointer or holds focus. They repeat what each thumb
|
|
11698
|
+
already reports, so a screen reader skips them. */
|
|
11699
|
+
tooltip?: (HelixHeadlessSlider["tooltip"]) | undefined;
|
|
10816
11700
|
/** What a screen reader says for a thumb's value, with `{value}` filled in,
|
|
10817
11701
|
such as `{value} degrees`. Empty announces the number alone. */
|
|
10818
11702
|
"value-text"?: (HelixHeadlessSlider["valueText"]) | undefined;
|
|
10819
11703
|
/** What a screen reader says for a thumb's value, with `{value}` filled in,
|
|
10820
11704
|
such as `{value} degrees`. Empty announces the number alone. */
|
|
10821
11705
|
valueText?: (HelixHeadlessSlider["valueText"]) | undefined;
|
|
10822
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11706
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11707
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11708
|
+
control resets to the `value` it declares. */
|
|
10823
11709
|
"default-value"?: (HelixHeadlessSlider["defaultValue"]) | undefined;
|
|
10824
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
11710
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
11711
|
+
and to the `value` attribute where this one is not written, as a native
|
|
11712
|
+
control resets to the `value` it declares. */
|
|
10825
11713
|
defaultValue?: (HelixHeadlessSlider["defaultValue"]) | undefined;
|
|
10826
11714
|
/** The control's current value, which its form submits.
|
|
10827
11715
|
|
|
@@ -10945,6 +11833,32 @@ the accessible representation of a sparkline, and a list of the fourteen
|
|
|
10945
11833
|
numbers is not. Absent, the drawing is hidden from a screen reader rather
|
|
10946
11834
|
than announced without a name. */
|
|
10947
11835
|
label?: (HelixHeadlessSparkline["label"]) | undefined;
|
|
11836
|
+
/** The locale the readout's numbers and positions are written in, such as
|
|
11837
|
+
`de` for `1.240`.
|
|
11838
|
+
|
|
11839
|
+
Absent uses the runtime's own. A table's cells are shown as the table
|
|
11840
|
+
writes them, whatever this says. */
|
|
11841
|
+
locale?: (HelixHeadlessSparkline["locale"]) | undefined;
|
|
11842
|
+
/** Which readings take a mark of their own: `high`, `low`, or both,
|
|
11843
|
+
separated by spaces.
|
|
11844
|
+
|
|
11845
|
+
Absent marks none, and the drawing is what it was. Each mark is a part,
|
|
11846
|
+
placed at its reading, for a stylesheet to draw. */
|
|
11847
|
+
marks?: (HelixHeadlessSparkline["marks"]) | undefined;
|
|
11848
|
+
/** What the readings come to, said after the name: `{first}` and `{last}`
|
|
11849
|
+
for the first and the last reading, `{high}` and `{low}` for the highest
|
|
11850
|
+
and the lowest, each written as the readout writes it.
|
|
11851
|
+
|
|
11852
|
+
Set it to the words of the page's language, or to nothing to say no
|
|
11853
|
+
more than the name. Said only where the sparkline is named. */
|
|
11854
|
+
"overview-label"?: (HelixHeadlessSparkline["overviewLabel"]) | undefined;
|
|
11855
|
+
/** What the readings come to, said after the name: `{first}` and `{last}`
|
|
11856
|
+
for the first and the last reading, `{high}` and `{low}` for the highest
|
|
11857
|
+
and the lowest, each written as the readout writes it.
|
|
11858
|
+
|
|
11859
|
+
Set it to the words of the page's language, or to nothing to say no
|
|
11860
|
+
more than the name. Said only where the sparkline is named. */
|
|
11861
|
+
overviewLabel?: (HelixHeadlessSparkline["overviewLabel"]) | undefined;
|
|
10948
11862
|
/** What the readings are drawn as.
|
|
10949
11863
|
|
|
10950
11864
|
Absent is `area`, a line with the region beneath it washed. `line` is the
|
|
@@ -10973,6 +11887,26 @@ anywhere the fill would be noise, several of them in one box for instance.
|
|
|
10973
11887
|
This tier rather than the one above: a plot type is geometry and geometry
|
|
10974
11888
|
is markup, the same reason `curve` lives here. */
|
|
10975
11889
|
plot?: (HelixHeadlessSparkline["plot"]) | undefined;
|
|
11890
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
11891
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
11892
|
+
`locale`.
|
|
11893
|
+
|
|
11894
|
+
Set it to the words of the page's language, such as `{position} von
|
|
11895
|
+
{count}`, or to nothing to say no position. */
|
|
11896
|
+
"position-label"?: (HelixHeadlessSparkline["positionLabel"]) | undefined;
|
|
11897
|
+
/** Where a reading the keys moved to stands among the readings, said after
|
|
11898
|
+
it. `{position}` and `{count}` are replaced with the numbers, written in
|
|
11899
|
+
`locale`.
|
|
11900
|
+
|
|
11901
|
+
Set it to the words of the page's language, such as `{position} von
|
|
11902
|
+
{count}`, or to nothing to say no position. */
|
|
11903
|
+
positionLabel?: (HelixHeadlessSparkline["positionLabel"]) | undefined;
|
|
11904
|
+
/** Two values a band is drawn between, behind the line, separated by a
|
|
11905
|
+
space: `range="60 100"` marks a normal range.
|
|
11906
|
+
|
|
11907
|
+
The scale stretches to hold the band where the readings do not reach it.
|
|
11908
|
+
Absent draws none. */
|
|
11909
|
+
range?: (HelixHeadlessSparkline["range"]) | undefined;
|
|
10976
11910
|
/** The numbers, separated by whitespace or by commas.
|
|
10977
11911
|
|
|
10978
11912
|
An array assigned to the property works too, which is what React 19 does
|
|
@@ -11213,6 +12147,8 @@ export type HelixHeadlessSplitterVueEvents = {
|
|
|
11213
12147
|
"helix-collapse": HelixHeadlessSplitterHelixCollapseElementEvent;
|
|
11214
12148
|
/** Fired after the divider settles somewhere new, with the new position. */
|
|
11215
12149
|
"helix-resized": HelixHeadlessSplitterHelixResizedElementEvent;
|
|
12150
|
+
/** Fired each time a drag moves the divider, before it settles, as a range input does while it is dragged. Read `position` for where it is now. */
|
|
12151
|
+
input: HelixHeadlessSplitterElementEvent;
|
|
11216
12152
|
};
|
|
11217
12153
|
|
|
11218
12154
|
export type HelixHeadlessStatGroupVueProps = {
|
|
@@ -11237,10 +12173,9 @@ A property rather than a `Flex` around it, because the unit has to stay on
|
|
|
11237
12173
|
the value's baseline whichever way the pair goes, and only this element
|
|
11238
12174
|
knows which of its children the unit belongs to.
|
|
11239
12175
|
|
|
11240
|
-
|
|
11241
|
-
moved
|
|
11242
|
-
|
|
11243
|
-
layouts, and the pair stays the column.
|
|
12176
|
+
The name and the values are `Flex`'s, which lays out the same way. Which
|
|
12177
|
+
way a number moved is `Trend`'s `movement`. On a Stat, `up`, `down` and
|
|
12178
|
+
`neutral` are not layouts, and the pair stays the column.
|
|
11244
12179
|
|
|
11245
12180
|
**Optional rather than defaulted to `column`, which is not a style
|
|
11246
12181
|
preference.** A reflecting property with a default writes its attribute onto
|
|
@@ -11290,6 +12225,12 @@ in both. Of those four combinations three are ones nobody should pick, and
|
|
|
11290
12225
|
a property whose job is mostly to be left alone is a property that mostly
|
|
11291
12226
|
catches people out. */
|
|
11292
12227
|
orientation?: (HelixHeadlessSteps["orientation"]) | undefined;
|
|
12228
|
+
/** What the `progress` part says to a screen reader, with `{percent}` filled
|
|
12229
|
+
in with `progress`. */
|
|
12230
|
+
"progress-label"?: (HelixHeadlessSteps["progressLabel"]) | undefined;
|
|
12231
|
+
/** What the `progress` part says to a screen reader, with `{percent}` filled
|
|
12232
|
+
in with `progress`. */
|
|
12233
|
+
progressLabel?: (HelixHeadlessSteps["progressLabel"]) | undefined;
|
|
11293
12234
|
/** What each step is marked with.
|
|
11294
12235
|
|
|
11295
12236
|
Absent is the state itself: a check where a stage is done, a target where
|
|
@@ -11318,6 +12259,10 @@ Ignored once `active` is written. */
|
|
|
11318
12259
|
|
|
11319
12260
|
Ignored once `active` is written. */
|
|
11320
12261
|
defaultActive?: (HelixHeadlessSteps["defaultActive"]) | undefined;
|
|
12262
|
+
/** A function that answers whether a stage is valid, asked about the stage a
|
|
12263
|
+
reader is on before they move forward from it. Return `false` to keep them
|
|
12264
|
+
there. Not asked of an `optional` stage, nor for a move back. */
|
|
12265
|
+
validate?: (HelixHeadlessSteps["validate"]) | undefined;
|
|
11321
12266
|
};
|
|
11322
12267
|
|
|
11323
12268
|
export type HelixHeadlessStepsVueEvents = {
|
|
@@ -11384,9 +12329,13 @@ Not reflected: the attribute is the consumer's input and stays as they
|
|
|
11384
12329
|
wrote it, and `:state(checked)` carries the resolved state for
|
|
11385
12330
|
stylesheets. */
|
|
11386
12331
|
checked?: (HelixHeadlessSwitch["checked"]) | undefined;
|
|
11387
|
-
/** Whether the control starts checked. A form reset returns it to this state
|
|
12332
|
+
/** Whether the control starts checked. A form reset returns it to this state,
|
|
12333
|
+
and to the `checked` attribute where this one is not written, as a native
|
|
12334
|
+
checkbox resets to the `checked` it declares. */
|
|
11388
12335
|
"default-checked"?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
11389
|
-
/** Whether the control starts checked. A form reset returns it to this state
|
|
12336
|
+
/** Whether the control starts checked. A form reset returns it to this state,
|
|
12337
|
+
and to the `checked` attribute where this one is not written, as a native
|
|
12338
|
+
checkbox resets to the `checked` it declares. */
|
|
11390
12339
|
defaultChecked?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
11391
12340
|
/** Whether a reader can see and focus the control and cannot change it. A
|
|
11392
12341
|
read-only control still submits its value.
|
|
@@ -11826,6 +12775,13 @@ export type HelixHeadlessTableVueEvents = {
|
|
|
11826
12775
|
};
|
|
11827
12776
|
|
|
11828
12777
|
export type HelixHeadlessTableRowVueProps = {
|
|
12778
|
+
/** The URL a press on the row follows, which makes the whole row a link.
|
|
12779
|
+
Empty, the default, leaves presses to the row's cells. */
|
|
12780
|
+
href?: (HelixHeadlessTableRow["href"]) | undefined;
|
|
12781
|
+
/** The `rel` of the row's link. You set it yourself, as on an anchor. */
|
|
12782
|
+
rel?: (HelixHeadlessTableRow["rel"]) | undefined;
|
|
12783
|
+
/** Where the row's link opens, such as `_blank`. */
|
|
12784
|
+
target?: (HelixHeadlessTableRow["target"]) | undefined;
|
|
11829
12785
|
/** The key the table's `selected` lists this row by. Left empty, the row is
|
|
11830
12786
|
known by its place among the rows as written. */
|
|
11831
12787
|
value?: (HelixHeadlessTableRow["value"]) | undefined;
|
|
@@ -11985,6 +12941,12 @@ export type HelixHeadlessTagGroupHelixDismissElementEvent =
|
|
|
11985
12941
|
HelixHeadlessTagGroupElementEvent<HelixDismissEvent>;
|
|
11986
12942
|
|
|
11987
12943
|
export type HelixHeadlessTagGroupVueProps = {
|
|
12944
|
+
/** The words the group shows and says once its last tag is removed, where
|
|
12945
|
+
nothing is in the `empty` slot. */
|
|
12946
|
+
"empty-label"?: (HelixHeadlessTagGroup["emptyLabel"]) | undefined;
|
|
12947
|
+
/** The words the group shows and says once its last tag is removed, where
|
|
12948
|
+
nothing is in the `empty` slot. */
|
|
12949
|
+
emptyLabel?: (HelixHeadlessTagGroup["emptyLabel"]) | undefined;
|
|
11988
12950
|
/** The name of the set, such as "Filters", which a screen reader announces
|
|
11989
12951
|
before its tags. */
|
|
11990
12952
|
label?: (HelixHeadlessTagGroup["label"]) | undefined;
|
|
@@ -12076,6 +13038,9 @@ export type HelixHeadlessTextareaElementEvent<E = Event> = TypedEvent<
|
|
|
12076
13038
|
/** `helix-before-change` event type */
|
|
12077
13039
|
export type HelixHeadlessTextareaHelixBeforeChangeElementEvent =
|
|
12078
13040
|
HelixHeadlessTextareaElementEvent<HelixBeforeChangeEvent>;
|
|
13041
|
+
/** `helix-clear` event type */
|
|
13042
|
+
export type HelixHeadlessTextareaHelixClearElementEvent =
|
|
13043
|
+
HelixHeadlessTextareaElementEvent<HelixClearEvent>;
|
|
12079
13044
|
|
|
12080
13045
|
export type HelixHeadlessTextareaVueProps = {
|
|
12081
13046
|
/** What the browser can autofill in the field, as a standard `autocomplete`
|
|
@@ -12088,6 +13053,12 @@ a token like `email` or `bday` to ask for autofill, or to `off` to refuse. */
|
|
|
12088
13053
|
"auto-grow"?: (HelixHeadlessTextarea["autoGrow"]) | undefined;
|
|
12089
13054
|
/** Grows the box to fit its content, so it does not scroll. */
|
|
12090
13055
|
autoGrow?: (HelixHeadlessTextarea["autoGrow"]) | undefined;
|
|
13056
|
+
/** Draws a button that empties the field while it holds text. */
|
|
13057
|
+
clearable?: (HelixHeadlessTextarea["clearable"]) | undefined;
|
|
13058
|
+
/** The accessible name of the clear button, which shows only an icon. */
|
|
13059
|
+
"clear-label"?: (HelixHeadlessTextarea["clearLabel"]) | undefined;
|
|
13060
|
+
/** The accessible name of the clear button, which shows only an icon. */
|
|
13061
|
+
clearLabel?: (HelixHeadlessTextarea["clearLabel"]) | undefined;
|
|
12091
13062
|
/** How many characters wide the box is, when the layout does not set its
|
|
12092
13063
|
width.
|
|
12093
13064
|
|
|
@@ -12152,9 +13123,13 @@ Not a label: it goes when typing starts. */
|
|
|
12152
13123
|
/** How the browser wraps the text, and whether the breaks are submitted with
|
|
12153
13124
|
it. */
|
|
12154
13125
|
wrap?: (HelixHeadlessTextarea["wrap"]) | undefined;
|
|
12155
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
13126
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13127
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13128
|
+
control resets to the `value` it declares. */
|
|
12156
13129
|
"default-value"?: (HelixHeadlessTextarea["defaultValue"]) | undefined;
|
|
12157
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
13130
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13131
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13132
|
+
control resets to the `value` it declares. */
|
|
12158
13133
|
defaultValue?: (HelixHeadlessTextarea["defaultValue"]) | undefined;
|
|
12159
13134
|
/** The control's current value, which its form submits.
|
|
12160
13135
|
|
|
@@ -12235,6 +13210,10 @@ which is where an empty field's caret would be anyway. */
|
|
|
12235
13210
|
selectionEnd?: (HelixHeadlessTextarea["selectionEnd"]) | undefined;
|
|
12236
13211
|
/** Where the selection starts, as an offset into the value. */
|
|
12237
13212
|
selectionStart?: (HelixHeadlessTextarea["selectionStart"]) | undefined;
|
|
13213
|
+
/** Your own rule for the value, run on every change once the browser finds
|
|
13214
|
+
nothing wrong. Return a message, or a list of them, to mark the field
|
|
13215
|
+
invalid, and `true`, `null`, or nothing to accept the value. */
|
|
13216
|
+
validate?: (HelixHeadlessTextarea["validate"]) | undefined;
|
|
12238
13217
|
};
|
|
12239
13218
|
|
|
12240
13219
|
export type HelixHeadlessTextareaVueEvents = {
|
|
@@ -12242,6 +13221,8 @@ export type HelixHeadlessTextareaVueEvents = {
|
|
|
12242
13221
|
change: HelixHeadlessTextareaElementEvent;
|
|
12243
13222
|
/** Fired as the text changes, and cancelable. */
|
|
12244
13223
|
"helix-before-change": HelixHeadlessTextareaHelixBeforeChangeElementEvent;
|
|
13224
|
+
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
13225
|
+
"helix-clear": HelixHeadlessTextareaHelixClearElementEvent;
|
|
12245
13226
|
/** Fired after the value changes. */
|
|
12246
13227
|
input: HelixHeadlessTextareaElementEvent;
|
|
12247
13228
|
};
|
|
@@ -12292,7 +13273,8 @@ Handed to the list. The value is `HH:mm` on twenty-four hours either way. */
|
|
|
12292
13273
|
hourCycle?: (HelixHeadlessTimeInput["hourCycle"]) | undefined;
|
|
12293
13274
|
/** Language tag the times are written in.
|
|
12294
13275
|
|
|
12295
|
-
Absent
|
|
13276
|
+
Absent is the page's: the `lang` of the nearest element with one, as
|
|
13277
|
+
Shoelace and Web Awesome read it, then the runtime's own. */
|
|
12296
13278
|
locale?: (HelixHeadlessTimeInput["locale"]) | undefined;
|
|
12297
13279
|
/** Latest time that can be chosen, as `HH:mm`. */
|
|
12298
13280
|
max?: (HelixHeadlessTimeInput["max"]) | undefined;
|
|
@@ -12474,9 +13456,13 @@ as `+3`, does not say what it does. */
|
|
|
12474
13456
|
"max-tags"?: (HelixHeadlessTimeInput["maxTags"] | `${number}`) | undefined;
|
|
12475
13457
|
/** How many tokens to show before the rest become a count. */
|
|
12476
13458
|
maxTags?: (HelixHeadlessTimeInput["maxTags"]) | undefined;
|
|
12477
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
13459
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13460
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13461
|
+
control resets to the `value` it declares. */
|
|
12478
13462
|
"default-value"?: (HelixHeadlessTimeInput["defaultValue"]) | undefined;
|
|
12479
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
13463
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13464
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13465
|
+
control resets to the `value` it declares. */
|
|
12480
13466
|
defaultValue?: (HelixHeadlessTimeInput["defaultValue"]) | undefined;
|
|
12481
13467
|
/** The control's current value, which its form submits.
|
|
12482
13468
|
|
|
@@ -12627,25 +13613,24 @@ Absent is the locale's own, which is right for a reader's own form. Set it
|
|
|
12627
13613
|
where every reader must see the same clock whatever their language, as a
|
|
12628
13614
|
timetable does. The value is `HH:mm` on twenty-four hours either way. */
|
|
12629
13615
|
hourCycle?: (HelixHeadlessTimePicker["hourCycle"]) | undefined;
|
|
12630
|
-
/** What the wheel of hours is called, read by screen readers.
|
|
13616
|
+
/** What the wheel of hours is called, read by screen readers.
|
|
13617
|
+
|
|
13618
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Hour" in
|
|
13619
|
+
English, "Stunde" in German. */
|
|
12631
13620
|
"hour-label"?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
12632
|
-
/** What the wheel of hours is called, read by screen readers.
|
|
12633
|
-
hourLabel?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
12634
|
-
/** Whether the current selection fails validation.
|
|
13621
|
+
/** What the wheel of hours is called, read by screen readers.
|
|
12635
13622
|
|
|
12636
|
-
|
|
12637
|
-
|
|
12638
|
-
|
|
12639
|
-
would be the same error said twice. What is left for the picker is the one
|
|
12640
|
-
thing the field cannot draw from outside, the mark on the answer itself. */
|
|
12641
|
-
invalid?: (HelixHeadlessTimePicker["invalid"]) | undefined;
|
|
13623
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Hour" in
|
|
13624
|
+
English, "Stunde" in German. */
|
|
13625
|
+
hourLabel?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
12642
13626
|
/** Accessible name for the list, which has no visible one of its own.
|
|
12643
13627
|
|
|
12644
13628
|
An `aria-label` or `aria-labelledby` on the host names the list instead. */
|
|
12645
13629
|
label?: (HelixHeadlessTimePicker["label"]) | undefined;
|
|
12646
|
-
/** Language tag the times are written in.
|
|
13630
|
+
/** Language tag the times and the wheels' names are written in.
|
|
12647
13631
|
|
|
12648
|
-
Absent
|
|
13632
|
+
Absent is the page's: the `lang` of the nearest element with one, as
|
|
13633
|
+
Shoelace and Web Awesome read it, then the runtime's own. */
|
|
12649
13634
|
locale?: (HelixHeadlessTimePicker["locale"]) | undefined;
|
|
12650
13635
|
/** Stops the arrow keys in the list from choosing each time they move to.
|
|
12651
13636
|
Enter, Space or a click chooses.
|
|
@@ -12656,16 +13641,28 @@ closes on a time. */
|
|
|
12656
13641
|
/** Latest time offered, as `HH:mm`. */
|
|
12657
13642
|
max?: (HelixHeadlessTimePicker["max"]) | undefined;
|
|
12658
13643
|
/** What the wheel of the half of the day is called, read by screen readers.
|
|
12659
|
-
Its two options are written as the locale writes them, such as AM and PM.
|
|
13644
|
+
Its two options are written as the locale writes them, such as AM and PM.
|
|
13645
|
+
|
|
13646
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "AM/PM" in
|
|
13647
|
+
English, "Tageshälfte" in German. */
|
|
12660
13648
|
"meridiem-label"?: (HelixHeadlessTimePicker["meridiemLabel"]) | undefined;
|
|
12661
13649
|
/** What the wheel of the half of the day is called, read by screen readers.
|
|
12662
|
-
Its two options are written as the locale writes them, such as AM and PM.
|
|
13650
|
+
Its two options are written as the locale writes them, such as AM and PM.
|
|
13651
|
+
|
|
13652
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "AM/PM" in
|
|
13653
|
+
English, "Tageshälfte" in German. */
|
|
12663
13654
|
meridiemLabel?: (HelixHeadlessTimePicker["meridiemLabel"]) | undefined;
|
|
12664
13655
|
/** Earliest time offered, as `HH:mm`. */
|
|
12665
13656
|
min?: (HelixHeadlessTimePicker["min"]) | undefined;
|
|
12666
|
-
/** What the wheel of minutes is called, read by screen readers.
|
|
13657
|
+
/** What the wheel of minutes is called, read by screen readers.
|
|
13658
|
+
|
|
13659
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Minute" in
|
|
13660
|
+
English and German, "分" in Japanese. */
|
|
12667
13661
|
"minute-label"?: (HelixHeadlessTimePicker["minuteLabel"]) | undefined;
|
|
12668
|
-
/** What the wheel of minutes is called, read by screen readers.
|
|
13662
|
+
/** What the wheel of minutes is called, read by screen readers.
|
|
13663
|
+
|
|
13664
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Minute" in
|
|
13665
|
+
English and German, "分" in Japanese. */
|
|
12669
13666
|
minuteLabel?: (HelixHeadlessTimePicker["minuteLabel"]) | undefined;
|
|
12670
13667
|
/** How many times can be held at once.
|
|
12671
13668
|
|
|
@@ -12723,9 +13720,15 @@ else set needs. */
|
|
|
12723
13720
|
readOnly?: (HelixHeadlessTimePicker["readOnly"]) | undefined;
|
|
12724
13721
|
/** Stops the form from submitting while no time is chosen. */
|
|
12725
13722
|
required?: (HelixHeadlessTimePicker["required"]) | undefined;
|
|
12726
|
-
/** What the wheel of seconds is called, read by screen readers.
|
|
13723
|
+
/** What the wheel of seconds is called, read by screen readers.
|
|
13724
|
+
|
|
13725
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Second" in
|
|
13726
|
+
English, "Sekunde" in German. */
|
|
12727
13727
|
"second-label"?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12728
|
-
/** What the wheel of seconds is called, read by screen readers.
|
|
13728
|
+
/** What the wheel of seconds is called, read by screen readers.
|
|
13729
|
+
|
|
13730
|
+
Absent is the locale's own word, from `Intl.DisplayNames`: "Second" in
|
|
13731
|
+
English, "Sekunde" in German. */
|
|
12729
13732
|
secondLabel?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12730
13733
|
/** Whether times carry their seconds.
|
|
12731
13734
|
|
|
@@ -12780,9 +13783,26 @@ not touch, and React reads that as a hydration mismatch. The absent
|
|
|
12780
13783
|
attribute *is* the list, which the stylesheet reads as the base rule, so
|
|
12781
13784
|
only the departure has to be named. */
|
|
12782
13785
|
variant?: (HelixHeadlessTimePicker["variant"]) | undefined;
|
|
12783
|
-
/**
|
|
13786
|
+
/** A message under the picker, such as what is wrong with the answer.
|
|
13787
|
+
|
|
13788
|
+
While set, the picker is invalid and does not submit, as a field's
|
|
13789
|
+
`feedback` is, it is marked invalid to a reader and to CSS, and the
|
|
13790
|
+
controls a reader answers with are described by it. */
|
|
13791
|
+
feedback?: (HelixHeadlessTimePicker["feedback"]) | undefined;
|
|
13792
|
+
/** Whether the answer fails validation, marked on the controls a reader
|
|
13793
|
+
answers with and as `:state(invalid)`.
|
|
13794
|
+
|
|
13795
|
+
A flag a field that wraps the picker sets, since that field owns the
|
|
13796
|
+
label, the hint and the message; on its own, `feedback` both marks the
|
|
13797
|
+
picker and says why. */
|
|
13798
|
+
invalid?: (HelixHeadlessTimePicker["invalid"]) | undefined;
|
|
13799
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13800
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13801
|
+
control resets to the `value` it declares. */
|
|
12784
13802
|
"default-value"?: (HelixHeadlessTimePicker["defaultValue"]) | undefined;
|
|
12785
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
13803
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
13804
|
+
and to the `value` attribute where this one is not written, as a native
|
|
13805
|
+
control resets to the `value` it declares. */
|
|
12786
13806
|
defaultValue?: (HelixHeadlessTimePicker["defaultValue"]) | undefined;
|
|
12787
13807
|
/** The control's current value, which its form submits.
|
|
12788
13808
|
|
|
@@ -13033,9 +14053,13 @@ as a toolbar of buttons with `aria-pressed`.
|
|
|
13033
14053
|
|
|
13034
14054
|
Optional, so the attribute is absent until a consumer writes it. */
|
|
13035
14055
|
selectionMode?: (HelixHeadlessToggleGroup["selectionMode"]) | undefined;
|
|
13036
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
14056
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
14057
|
+
and to the `value` attribute where this one is not written, as a native
|
|
14058
|
+
control resets to the `value` it declares. */
|
|
13037
14059
|
"default-value"?: (HelixHeadlessToggleGroup["defaultValue"]) | undefined;
|
|
13038
|
-
/** The value the control starts with. A form reset returns it to this value
|
|
14060
|
+
/** The value the control starts with. A form reset returns it to this value,
|
|
14061
|
+
and to the `value` attribute where this one is not written, as a native
|
|
14062
|
+
control resets to the `value` it declares. */
|
|
13039
14063
|
defaultValue?: (HelixHeadlessToggleGroup["defaultValue"]) | undefined;
|
|
13040
14064
|
/** The control's current value, which its form submits.
|
|
13041
14065
|
|
|
@@ -13242,9 +14266,13 @@ Without one, sweeping across a row of controls flashes a tooltip for each
|
|
|
13242
14266
|
of them, which is noise rather than help. Focus opens with no delay: a
|
|
13243
14267
|
keyboard reader arriving on a control has already committed to it. */
|
|
13244
14268
|
delay?: (HelixHeadlessTooltip["delay"]) | undefined;
|
|
13245
|
-
/** How long the bubble stays after the pointer leaves
|
|
14269
|
+
/** How long the bubble stays after the pointer leaves the trigger or the
|
|
14270
|
+
bubble, in milliseconds: the close delay. It is the time a reader has to
|
|
14271
|
+
cross the gap onto the bubble. */
|
|
13246
14272
|
"delay-out"?: (HelixHeadlessTooltip["delayOut"] | `${number}`) | undefined;
|
|
13247
|
-
/** How long the bubble stays after the pointer leaves
|
|
14273
|
+
/** How long the bubble stays after the pointer leaves the trigger or the
|
|
14274
|
+
bubble, in milliseconds: the close delay. It is the time a reader has to
|
|
14275
|
+
cross the gap onto the bubble. */
|
|
13248
14276
|
delayOut?: (HelixHeadlessTooltip["delayOut"]) | undefined;
|
|
13249
14277
|
/** Stops the tooltip from showing. */
|
|
13250
14278
|
disabled?: (HelixHeadlessTooltip["disabled"]) | undefined;
|
|
@@ -13267,6 +14295,11 @@ through as attributes. Both paths reach the same place through Lit, so
|
|
|
13267
14295
|
nothing is broken by it; a `[for]` selector would find nothing, which is
|
|
13268
14296
|
why this does not reflect and nothing styles on it. */
|
|
13269
14297
|
for?: (HelixHeadlessTooltip["for"]) | undefined;
|
|
14298
|
+
/** Whether the pointer can move onto the bubble and the bubble stays, so a
|
|
14299
|
+
reader can read it under a magnifier or select its words, as WCAG 1.4.13
|
|
14300
|
+
asks. `hoverable="false"` hides the bubble once the pointer reaches it,
|
|
14301
|
+
for a bubble that covers something a reader moves on to. */
|
|
14302
|
+
hoverable?: (HelixHeadlessTooltip["hoverable"]) | undefined;
|
|
13270
14303
|
/** The space between the trigger and the tip of the bubble, in pixels.
|
|
13271
14304
|
|
|
13272
14305
|
**Measured from the point, which is what the arrow being back changed.**
|
|
@@ -13376,6 +14409,9 @@ export type HelixHeadlessTourHelixCompleteElementEvent =
|
|
|
13376
14409
|
/** `helix-tour-ask` event type */
|
|
13377
14410
|
export type HelixHeadlessTourHelixTourAskElementEvent =
|
|
13378
14411
|
HelixHeadlessTourElementEvent<HelixTourAskEvent>;
|
|
14412
|
+
/** `helix-tour-status` event type */
|
|
14413
|
+
export type HelixHeadlessTourHelixTourStatusElementEvent =
|
|
14414
|
+
HelixHeadlessTourElementEvent<HelixTourStatusEvent>;
|
|
13379
14415
|
/** `toggle` event type */
|
|
13380
14416
|
export type HelixHeadlessTourToggleElementEvent =
|
|
13381
14417
|
HelixHeadlessTourElementEvent<ToggleEvent>;
|
|
@@ -13458,6 +14494,8 @@ export type HelixHeadlessTourVueEvents = {
|
|
|
13458
14494
|
"helix-complete": HelixHeadlessTourHelixCompleteElementEvent;
|
|
13459
14495
|
/** Fired when a stop's control is pressed to move the tour. The stop sends it, and the tour handles it. */
|
|
13460
14496
|
"helix-tour-ask": HelixHeadlessTourHelixTourAskElementEvent;
|
|
14497
|
+
/** Fired when the tour starts waiting at a `wait` stop, is skipped, or is completed, with the stop's index and `detail.status` saying which. */
|
|
14498
|
+
"helix-tour-status": HelixHeadlessTourHelixTourStatusElementEvent;
|
|
13461
14499
|
/** Sent when the tour starts or ends, with `newState` and `oldState`. */
|
|
13462
14500
|
toggle: HelixHeadlessTourToggleElementEvent;
|
|
13463
14501
|
};
|
|
@@ -13690,13 +14728,13 @@ branch as a label; a headless consumer reads the attribute and the
|
|
|
13690
14728
|
written here appears in the served markup of every tree anybody renders.
|
|
13691
14729
|
The resting state is the absence of the attribute, which is `peer`. */
|
|
13692
14730
|
nesting?: (HelixHeadlessTree["nesting"]) | undefined;
|
|
13693
|
-
/** Whether a reader can check many items
|
|
13694
|
-
time.
|
|
14731
|
+
/** Whether a reader can check many items, or choose only the items at the
|
|
14732
|
+
ends. Unset, one item is chosen at a time, branches included.
|
|
13695
14733
|
|
|
13696
14734
|
Optional, so a tree of one choice writes no attribute onto the host. */
|
|
13697
14735
|
"selection-mode"?: (HelixHeadlessTree["selectionMode"]) | undefined;
|
|
13698
|
-
/** Whether a reader can check many items
|
|
13699
|
-
time.
|
|
14736
|
+
/** Whether a reader can check many items, or choose only the items at the
|
|
14737
|
+
ends. Unset, one item is chosen at a time, branches included.
|
|
13700
14738
|
|
|
13701
14739
|
Optional, so a tree of one choice writes no attribute onto the host. */
|
|
13702
14740
|
selectionMode?: (HelixHeadlessTree["selectionMode"]) | undefined;
|
|
@@ -13750,26 +14788,56 @@ export type HelixHeadlessTrendVueProps = {
|
|
|
13750
14788
|
"better-label"?: (HelixHeadlessTrend["betterLabel"]) | undefined;
|
|
13751
14789
|
/** The word read out after the direction when the move is an improvement. */
|
|
13752
14790
|
betterLabel?: (HelixHeadlessTrend["betterLabel"]) | undefined;
|
|
13753
|
-
/** Which way the measurement moved.
|
|
13754
|
-
|
|
13755
|
-
Absent is neutral, so a trend with nothing to report draws a bar rather
|
|
13756
|
-
than picking a direction. Optional rather than defaulted for the reason
|
|
13757
|
-
`Stat.direction` is: a reflecting property with a default writes its
|
|
13758
|
-
attribute onto the host the moment the element upgrades, and the host is
|
|
13759
|
-
markup the consumer rendered, which React compares against what it rendered
|
|
13760
|
-
and reports as a hydration mismatch. */
|
|
14791
|
+
/** Which way the measurement moved, as `movement` says it. */
|
|
13761
14792
|
direction?: (HelixHeadlessTrend["direction"]) | undefined;
|
|
13762
14793
|
/** The word read out for a move down. */
|
|
13763
14794
|
"down-label"?: (HelixHeadlessTrend["downLabel"]) | undefined;
|
|
13764
14795
|
/** The word read out for a move down. */
|
|
13765
14796
|
downLabel?: (HelixHeadlessTrend["downLabel"]) | undefined;
|
|
13766
|
-
/**
|
|
14797
|
+
/** `Intl.NumberFormat` options `value` is written with, as React Aria's
|
|
14798
|
+
NumberField takes them: a percent, a currency, a unit or a number of
|
|
14799
|
+
decimals. Written as JSON in the attribute.
|
|
14800
|
+
|
|
14801
|
+
```html
|
|
14802
|
+
<helix-trend value="-0.084" format-options='{"style":"percent","maximumFractionDigits":1}'></helix-trend>
|
|
14803
|
+
```
|
|
14804
|
+
|
|
14805
|
+
The example says "Down 8.4%". The size is written without a sign, since
|
|
14806
|
+
the arrow and the word say which way; set `signDisplay` for one. Absent
|
|
14807
|
+
writes the number as the locale writes any number. */
|
|
14808
|
+
"format-options"?: (HelixHeadlessTrend["formatOptions"]) | undefined;
|
|
14809
|
+
/** `Intl.NumberFormat` options `value` is written with, as React Aria's
|
|
14810
|
+
NumberField takes them: a percent, a currency, a unit or a number of
|
|
14811
|
+
decimals. Written as JSON in the attribute.
|
|
14812
|
+
|
|
14813
|
+
```html
|
|
14814
|
+
<helix-trend value="-0.084" format-options='{"style":"percent","maximumFractionDigits":1}'></helix-trend>
|
|
14815
|
+
```
|
|
14816
|
+
|
|
14817
|
+
The example says "Down 8.4%". The size is written without a sign, since
|
|
14818
|
+
the arrow and the word say which way; set `signDisplay` for one. Absent
|
|
14819
|
+
writes the number as the locale writes any number. */
|
|
14820
|
+
formatOptions?: (HelixHeadlessTrend["formatOptions"]) | undefined;
|
|
14821
|
+
/** Which movement counts as an improvement for this metric.
|
|
13767
14822
|
|
|
13768
14823
|
Absent states the movement without judging it, which is the honest default:
|
|
13769
14824
|
revenue up is good news and latency up is bad news, and only the consumer
|
|
13770
14825
|
knows which one this is. Set it once per metric and it holds while the
|
|
13771
|
-
|
|
14826
|
+
movement changes underneath. */
|
|
13772
14827
|
good?: (HelixHeadlessTrend["good"]) | undefined;
|
|
14828
|
+
/** The locale `value` is written in, such as `de` for `1.234,5`.
|
|
14829
|
+
|
|
14830
|
+
Absent uses the runtime's own. Set it on a page rendered on a server, so
|
|
14831
|
+
the server and the browser write the figure alike. */
|
|
14832
|
+
locale?: (HelixHeadlessTrend["locale"]) | undefined;
|
|
14833
|
+
/** Which way the measurement moved.
|
|
14834
|
+
|
|
14835
|
+
Absent is neutral, so a trend with nothing to report draws a bar rather
|
|
14836
|
+
than picking a direction. Optional rather than defaulted: a reflecting
|
|
14837
|
+
property with a default writes its attribute onto the host the moment the
|
|
14838
|
+
element upgrades, and the host is markup the consumer rendered, which React
|
|
14839
|
+
compares against what it rendered and reports as a hydration mismatch. */
|
|
14840
|
+
movement?: (HelixHeadlessTrend["movement"]) | undefined;
|
|
13773
14841
|
/** The word read out for no move, or for a direction that is not one of the
|
|
13774
14842
|
three. */
|
|
13775
14843
|
"unchanged-label"?: (HelixHeadlessTrend["unchangedLabel"]) | undefined;
|
|
@@ -13780,6 +14848,14 @@ three. */
|
|
|
13780
14848
|
"up-label"?: (HelixHeadlessTrend["upLabel"]) | undefined;
|
|
13781
14849
|
/** The word read out for a move up. */
|
|
13782
14850
|
upLabel?: (HelixHeadlessTrend["upLabel"]) | undefined;
|
|
14851
|
+
/** The change as a signed number, such as `0.12` or `-8`, which sets the
|
|
14852
|
+
movement by its sign and is written as the metric.
|
|
14853
|
+
|
|
14854
|
+
Above zero is up, below is down, and zero is neutral; `movement` wins when
|
|
14855
|
+
both are written. The size is written in the `value` part with
|
|
14856
|
+
`format-options` and `locale`, in place of a slotted metric. Absent leaves
|
|
14857
|
+
the movement to `movement` and the metric to the slot. */
|
|
14858
|
+
value?: (HelixHeadlessTrend["value"]) | undefined;
|
|
13783
14859
|
/** The word read out after the direction when the move is a setback. */
|
|
13784
14860
|
"worse-label"?: (HelixHeadlessTrend["worseLabel"]) | undefined;
|
|
13785
14861
|
/** The word read out after the direction when the move is a setback. */
|
|
@@ -13902,7 +14978,7 @@ Ignored once `active` is written. */
|
|
|
13902
14978
|
};
|
|
13903
14979
|
|
|
13904
14980
|
export type HelixHeadlessVideoPlaylistVueEvents = {
|
|
13905
|
-
/** The current entry changed. The playlist already holds the new entry when this is sent. */
|
|
14981
|
+
/** The current entry changed. The playlist already holds the new entry when this is sent, and `detail.previous` is the entry it left. `currentEntry` is the entry itself, with its `src`, `poster` and name. */
|
|
13906
14982
|
"helix-activate": HelixHeadlessVideoPlaylistHelixActivateElementEvent;
|
|
13907
14983
|
/** The current entry is about to change. Cancelable: cancel it to keep the current entry. */
|
|
13908
14984
|
"helix-before-activate": HelixHeadlessVideoPlaylistHelixBeforeActivateElementEvent;
|
|
@@ -14012,7 +15088,11 @@ assumed: it is absent on iPhone and behind a flag in Firefox, and a button
|
|
|
14012
15088
|
that cannot work is worse than one that is not there.
|
|
14013
15089
|
|
|
14014
15090
|
The names are `speed`, `pip`, `remote`, `download`, `rewind`, `forward`,
|
|
14015
|
-
`previous` and `next`.
|
|
15091
|
+
`previous` and `next`. `full` stands for `rewind`, `forward`, `speed`,
|
|
15092
|
+
`pip` and `remote` in that order, the controls that act on the video by
|
|
15093
|
+
themselves, as Web Awesome's `full` preset does, and a name it already
|
|
15094
|
+
holds is drawn once. `extra-controls="full"` is the whole bar, and
|
|
15095
|
+
`overflow-controls="full"` puts all of it behind one button.
|
|
14016
15096
|
|
|
14017
15097
|
**`previous` and `next` do nothing to the video, and are offered anyway.**
|
|
14018
15098
|
They announce `helix-previous` and `helix-next` and stop there, so what
|
|
@@ -14042,7 +15122,11 @@ assumed: it is absent on iPhone and behind a flag in Firefox, and a button
|
|
|
14042
15122
|
that cannot work is worse than one that is not there.
|
|
14043
15123
|
|
|
14044
15124
|
The names are `speed`, `pip`, `remote`, `download`, `rewind`, `forward`,
|
|
14045
|
-
`previous` and `next`.
|
|
15125
|
+
`previous` and `next`. `full` stands for `rewind`, `forward`, `speed`,
|
|
15126
|
+
`pip` and `remote` in that order, the controls that act on the video by
|
|
15127
|
+
themselves, as Web Awesome's `full` preset does, and a name it already
|
|
15128
|
+
holds is drawn once. `extra-controls="full"` is the whole bar, and
|
|
15129
|
+
`overflow-controls="full"` puts all of it behind one button.
|
|
14046
15130
|
|
|
14047
15131
|
**`previous` and `next` do nothing to the video, and are offered anyway.**
|
|
14048
15132
|
They announce `helix-previous` and `helix-next` and stop there, so what
|
|
@@ -14342,6 +15426,9 @@ export type HelixHeadlessVirtualListElementEvent<E = Event> = TypedEvent<
|
|
|
14342
15426
|
HelixHeadlessVirtualList,
|
|
14343
15427
|
E
|
|
14344
15428
|
>;
|
|
15429
|
+
/** `helix-before-change` event type */
|
|
15430
|
+
export type HelixHeadlessVirtualListHelixBeforeChangeElementEvent =
|
|
15431
|
+
HelixHeadlessVirtualListElementEvent<HelixBeforeChangeEvent>;
|
|
14345
15432
|
/** `helix-load-more` event type */
|
|
14346
15433
|
export type HelixHeadlessVirtualListHelixLoadMoreElementEvent =
|
|
14347
15434
|
HelixHeadlessVirtualListElementEvent<HelixLoadMoreEvent>;
|
|
@@ -14350,6 +15437,10 @@ export type HelixHeadlessVirtualListHelixRangeChangeElementEvent =
|
|
|
14350
15437
|
HelixHeadlessVirtualListElementEvent<HelixRangeChangeEvent>;
|
|
14351
15438
|
|
|
14352
15439
|
export type HelixHeadlessVirtualListVueProps = {
|
|
15440
|
+
/** How many items a line holds. One, the default, is a list; more lays the
|
|
15441
|
+
items out as a grid of that many equal columns, windowed a line at a
|
|
15442
|
+
time, with Left and Right moving along a line. */
|
|
15443
|
+
columns?: (HelixHeadlessVirtualList["columns"]) | undefined;
|
|
14353
15444
|
/** The height of one row, in pixels, used to find the row at a scroll offset.
|
|
14354
15445
|
|
|
14355
15446
|
An estimate rather than a measurement while `measured` is off, which is
|
|
@@ -14358,21 +15449,61 @@ right whenever the rows really are one height and is the cheaper of the two. */
|
|
|
14358
15449
|
/** The id of the script element that holds the items as JSON. `items` wins
|
|
14359
15450
|
where both are set. */
|
|
14360
15451
|
for?: (HelixHeadlessVirtualList["for"]) | undefined;
|
|
15452
|
+
/** The field of each item that is its key in `value`, as a key or a path of
|
|
15453
|
+
keys. Empty reads a string or a number item as its own key, and any
|
|
15454
|
+
other item by its place in the set. */
|
|
15455
|
+
"key-field"?: (HelixHeadlessVirtualList["keyField"]) | undefined;
|
|
15456
|
+
/** The field of each item that is its key in `value`, as a key or a path of
|
|
15457
|
+
keys. Empty reads a string or a number item as its own key, and any
|
|
15458
|
+
other item by its place in the set. */
|
|
15459
|
+
keyField?: (HelixHeadlessVirtualList["keyField"]) | undefined;
|
|
14361
15460
|
/** The list's name, read by screen readers, because only some of its rows
|
|
14362
15461
|
are rendered at a time.
|
|
14363
15462
|
|
|
14364
15463
|
An `aria-label` or `aria-labelledby` on the host names the list too, and
|
|
14365
15464
|
wins over this. */
|
|
14366
15465
|
label?: (HelixHeadlessVirtualList["label"]) | undefined;
|
|
14367
|
-
/**
|
|
14368
|
-
|
|
15466
|
+
/** Marks the list as busy fetching more items, and draws a row after the last
|
|
15467
|
+
item that says so.
|
|
15468
|
+
|
|
15469
|
+
Set it when `helix-load-more` starts a fetch, and clear it when the items
|
|
15470
|
+
arrive. The list does not ask for more while it is set. */
|
|
15471
|
+
loading?: (HelixHeadlessVirtualList["loading"]) | undefined;
|
|
15472
|
+
/** The text of the row drawn while `loading` is set, where the `loading` slot is empty. */
|
|
15473
|
+
"loading-label"?: (HelixHeadlessVirtualList["loadingLabel"]) | undefined;
|
|
15474
|
+
/** The text of the row drawn while `loading` is set, where the `loading` slot is empty. */
|
|
15475
|
+
loadingLabel?: (HelixHeadlessVirtualList["loadingLabel"]) | undefined;
|
|
15476
|
+
/** Places each row by its own measured height. Without it, rows are placed
|
|
15477
|
+
by one height: `estimate` until rows are drawn, then the drawn rows' height,
|
|
15478
|
+
read once.
|
|
14369
15479
|
|
|
14370
15480
|
**Off by default, because the straight line is better when it holds.** One
|
|
14371
|
-
|
|
15481
|
+
height makes offset and index convert by division, which can never
|
|
14372
15482
|
disagree with itself; measuring is what a set of genuinely different
|
|
14373
15483
|
heights needs and costs a read of each row as it renders. A list of
|
|
14374
15484
|
one-line rows should leave this alone. */
|
|
14375
15485
|
measured?: (HelixHeadlessVirtualList["measured"]) | undefined;
|
|
15486
|
+
/** Makes the list a list box a reader chooses from: `single` selects one
|
|
15487
|
+
item, and `multiple` any number. Unset is a list a reader reads. */
|
|
15488
|
+
"selection-mode"?: (HelixHeadlessVirtualList["selectionMode"]) | undefined;
|
|
15489
|
+
/** Makes the list a list box a reader chooses from: `single` selects one
|
|
15490
|
+
item, and `multiple` any number. Unset is a list a reader reads. */
|
|
15491
|
+
selectionMode?: (HelixHeadlessVirtualList["selectionMode"]) | undefined;
|
|
15492
|
+
/** The field of each item that typing matches, as a key or a path of keys
|
|
15493
|
+
(`author.name`).
|
|
15494
|
+
|
|
15495
|
+
Empty by default, which matches the first `data-field` of the row
|
|
15496
|
+
template, or the item itself where it is a string or a number. */
|
|
15497
|
+
"text-field"?: (HelixHeadlessVirtualList["textField"]) | undefined;
|
|
15498
|
+
/** The field of each item that typing matches, as a key or a path of keys
|
|
15499
|
+
(`author.name`).
|
|
15500
|
+
|
|
15501
|
+
Empty by default, which matches the first `data-field` of the row
|
|
15502
|
+
template, or the item itself where it is a string or a number. */
|
|
15503
|
+
textField?: (HelixHeadlessVirtualList["textField"]) | undefined;
|
|
15504
|
+
/** The keys of the chosen items, separated by commas, in a list with
|
|
15505
|
+
`selection-mode`. Set it to start with items chosen. */
|
|
15506
|
+
value?: (HelixHeadlessVirtualList["value"]) | undefined;
|
|
14376
15507
|
/** The items, as an array. Set it as a property.
|
|
14377
15508
|
|
|
14378
15509
|
Each item is drawn by `renderItem`, or into the row `<template>` by its
|
|
@@ -14389,6 +15520,10 @@ and place in the set. Where it is unset, the row `<template>` is used. */
|
|
|
14389
15520
|
};
|
|
14390
15521
|
|
|
14391
15522
|
export type HelixHeadlessVirtualListVueEvents = {
|
|
15523
|
+
/** Fired once a press or a key has changed which items are selected, in a list with `selection-mode`. */
|
|
15524
|
+
change: HelixHeadlessVirtualListElementEvent;
|
|
15525
|
+
/** Fired before a press or a key changes which items are selected, with the `value` it would leave. Cancelable. */
|
|
15526
|
+
"helix-before-change": HelixHeadlessVirtualListHelixBeforeChangeElementEvent;
|
|
14392
15527
|
/** Fired when a reader comes within one screen of the last item, once for each length of the set. */
|
|
14393
15528
|
"helix-load-more": HelixHeadlessVirtualListHelixLoadMoreElementEvent;
|
|
14394
15529
|
/** Fired when the items on screen change, with the new `first` and `last`, which `range` also holds. */
|
|
@@ -14396,6 +15531,8 @@ export type HelixHeadlessVirtualListVueEvents = {
|
|
|
14396
15531
|
};
|
|
14397
15532
|
|
|
14398
15533
|
export type CustomCssProperties = {
|
|
15534
|
+
/** The height of the content, in pixels, written on the `content` part while the section is open. */
|
|
15535
|
+
"--accordion-content-height"?: (string) | undefined;
|
|
14399
15536
|
/** The width of an axis, in `ch`, set from the widest number on it. The chart sets it on the axis itself, and only when the categories run along the bottom. In a horizontal chart the axis is a row, one line high. */
|
|
14400
15537
|
"--bar-chart-axis"?: (string) | undefined;
|
|
14401
15538
|
/** The color of the secondary axis, when one series is on it. The chart sets it from that series' `--chart-series-*` property, so the axis is drawn in whatever color that property resolves to. */
|
|
@@ -14464,6 +15601,12 @@ export type CustomCssProperties = {
|
|
|
14464
15601
|
"--heatmap-tone-success"?: (string) | undefined;
|
|
14465
15602
|
/** The color of the `warning` tone. */
|
|
14466
15603
|
"--heatmap-tone-warning"?: (string) | undefined;
|
|
15604
|
+
/** How far the zoomed item is moved across from the middle of the viewport, in pixels, toward the right. Written only while zoomed. */
|
|
15605
|
+
"--lightbox-pan-x"?: (string) | undefined;
|
|
15606
|
+
/** How far the zoomed item is moved down from the middle of the viewport, in pixels. Written only while zoomed. */
|
|
15607
|
+
"--lightbox-pan-y"?: (string) | undefined;
|
|
15608
|
+
/** The scale the shown item is zoomed to, such as `2`. Written only while zoomed. */
|
|
15609
|
+
"--lightbox-zoom"?: (string) | undefined;
|
|
14467
15610
|
/** Where a series' last reading sits horizontally, as a percentage. Written by the component. */
|
|
14468
15611
|
"--chart-terminus-x"?: (string) | undefined;
|
|
14469
15612
|
/** Where a series' last reading sits vertically, as a percentage. Written by the component. */
|
|
@@ -14474,8 +15617,20 @@ export type CustomCssProperties = {
|
|
|
14474
15617
|
"--list-step"?: (string) | undefined;
|
|
14475
15618
|
/** How far the needle turns to point north, as an angle. The frame writes it from `bearing`. */
|
|
14476
15619
|
"--map-needle-turn"?: (string) | undefined;
|
|
15620
|
+
/** The height of the panel this one took over from, written on the surface while it is open. */
|
|
15621
|
+
"--megamenu-from-block-size"?: (string) | undefined;
|
|
15622
|
+
/** The width of the panel this one took over from, written on the surface while it is open. */
|
|
15623
|
+
"--megamenu-from-inline-size"?: (string) | undefined;
|
|
15624
|
+
/** The panel's own height, written on the surface while it is open. */
|
|
15625
|
+
"--megamenu-surface-block-size"?: (string) | undefined;
|
|
15626
|
+
/** The panel's own width, written on the surface while it is open. */
|
|
15627
|
+
"--megamenu-surface-inline-size"?: (string) | undefined;
|
|
14477
15628
|
/** Where the panel starts, measured from the bar above it. */
|
|
14478
15629
|
"--megamenu-top"?: (string) | undefined;
|
|
15630
|
+
/** The trigger's width, written on the panel while it is open, as in `min-inline-size: var(--floating-anchor-inline-size)`. Read it; a value set here is written over. */
|
|
15631
|
+
"--floating-anchor-inline-size"?: (string) | undefined;
|
|
15632
|
+
/** The room between the panel and the edge of the screen it opens toward, written on the panel while it is open. Read it; a value set here is written over. */
|
|
15633
|
+
"--floating-available-block-size"?: (string) | undefined;
|
|
14479
15634
|
/** Where a bound sits on the arc, as a length along it. */
|
|
14480
15635
|
"--meter-along"?: (string) | undefined;
|
|
14481
15636
|
/** Where a bound sits on a linear track, as a percentage. */
|
|
@@ -14496,6 +15651,8 @@ export type CustomCssProperties = {
|
|
|
14496
15651
|
"--rating-step"?: (string) | undefined;
|
|
14497
15652
|
/** The number of steps in the whole row: `max` divided by `step`. */
|
|
14498
15653
|
"--rating-steps"?: (string) | undefined;
|
|
15654
|
+
/** How large a point is drawn under `size-by`, from 0 to 1, by area. The component writes it, and the stylesheet that sizes the point reads it. */
|
|
15655
|
+
"--chart-point-weight"?: (string) | undefined;
|
|
14499
15656
|
/** A point's horizontal position, as a percentage. The component writes it. */
|
|
14500
15657
|
"--chart-point-x"?: (string) | undefined;
|
|
14501
15658
|
/** A point's vertical position, as a percentage from the top. The component writes it. */
|
|
@@ -14506,18 +15663,22 @@ export type CustomCssProperties = {
|
|
|
14506
15663
|
"--scroll-area-scroll-fraction"?: (string) | undefined;
|
|
14507
15664
|
/** The share of the track the thumb covers, from 0 to 1, which is how much of the content is in view. Written on each `scrollbar` part. */
|
|
14508
15665
|
"--scroll-area-thumb-fraction"?: (string) | undefined;
|
|
15666
|
+
/** Where a bubble's thumb is, as a fraction of the track, 0 to 1. Set on each `tooltip` part. */
|
|
15667
|
+
"--slider-at"?: (string) | undefined;
|
|
14509
15668
|
/** The value as a fraction of the range, 0 to 1. */
|
|
14510
15669
|
"--slider-fraction"?: (string) | undefined;
|
|
14511
|
-
/** Where
|
|
15670
|
+
/** Where the filled span starts, as a fraction of the track, 0 to 1: a range's lower thumb, or a single thumb's `origin`. */
|
|
14512
15671
|
"--slider-from"?: (string) | undefined;
|
|
14513
15672
|
/** Where one marker sits, as a percentage of the track. */
|
|
14514
15673
|
"--slider-marker-at"?: (string) | undefined;
|
|
14515
|
-
/** Where
|
|
15674
|
+
/** Where the filled span ends, as a fraction of the track, 0 to 1: a range's upper thumb, or the farther of a single thumb and its `origin`. */
|
|
14516
15675
|
"--slider-to"?: (string) | undefined;
|
|
14517
15676
|
/** Where a nested splitter crosses this one, as a percentage. */
|
|
14518
15677
|
"--splitter-corner-at"?: (string) | undefined;
|
|
14519
15678
|
/** Where the divider sits, as a percentage of the box. */
|
|
14520
15679
|
"--splitter-position"?: (string) | undefined;
|
|
15680
|
+
/** How far through the sequence is, as a percentage, written on the `progress` part. */
|
|
15681
|
+
"--steps-progress"?: (string) | undefined;
|
|
14521
15682
|
/** The text alignment of the column above the cell: `start`, `center`, or `end`, and unset when the column sets none. The table writes it, and the stylesheet that draws the cell reads it for `justify-content` and `text-align`, which both follow the writing direction. */
|
|
14522
15683
|
"--table-cell-align"?: (string) | undefined;
|
|
14523
15684
|
/** The column track list the table works out from its columns. The component writes it inline on the element that reads it, so setting it has no effect. Set `columns` to change the tracks. */
|
|
@@ -14526,6 +15687,14 @@ export type CustomCssProperties = {
|
|
|
14526
15687
|
"--toast-duration"?: (string) | undefined;
|
|
14527
15688
|
/** How far a swipe has moved the message across, in pixels, toward the right. */
|
|
14528
15689
|
"--toast-swipe-x"?: (string) | undefined;
|
|
15690
|
+
/** The lit box's height, in pixels, padding included. Written on the spotlight while it lights a target. */
|
|
15691
|
+
"--tour-spotlight-height"?: (string) | undefined;
|
|
15692
|
+
/** The lit box's width, in pixels, padding included. Written on the spotlight while it lights a target. */
|
|
15693
|
+
"--tour-spotlight-width"?: (string) | undefined;
|
|
15694
|
+
/** The lit box's left edge, from the window's left edge, in pixels. Written on the spotlight while it lights a target. */
|
|
15695
|
+
"--tour-spotlight-x"?: (string) | undefined;
|
|
15696
|
+
/** The lit box's top edge, from the window's top edge, in pixels. Written on the spotlight while it lights a target. */
|
|
15697
|
+
"--tour-spotlight-y"?: (string) | undefined;
|
|
14529
15698
|
/** How deep this row sits, counting from one as `aria-level` does, for the indent. */
|
|
14530
15699
|
"--tree-level"?: (string) | undefined;
|
|
14531
15700
|
/** The media's own aspect ratio, once it is known. `--video-aspect-ratio` overrides it. */
|
|
@@ -14540,49 +15709,49 @@ export type CustomCssProperties = {
|
|
|
14540
15709
|
// Note: Some tooling expects this augmentation under "@vue/runtime-core", while
|
|
14541
15710
|
// other docs/examples use "vue". We emit both for compatibility.
|
|
14542
15711
|
export interface WcToolkitVueGlobalComponents {
|
|
14543
|
-
/** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. The trigger sits inside a heading, so a screen reader lists the section with the page's headings. The level is the item's 'heading-level', then the accordion's, then 3. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML.
|
|
15712
|
+
/** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. The trigger sits inside a heading, so a screen reader lists the section with the page's headings. The level is the item's 'heading-level', then the accordion's, then 3. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML. The browser's find in page searches a closed section, and a match opens it, with 'helix-before-open' first, as React Aria's disclosure does. Closed content is 'hidden="until-found"', which hides it with no stylesheet loaded and keeps it out of the tab order and the accessibility tree. A section that closes keeps its content drawn until the content part's animations and transitions end, so a sheet that animates the section closed shows the content shrinking rather than an empty box. Set 'hidden-until-found="false"' and a closed section is 'hidden' and 'inert' instead, and find in page skips it. While it is open, the content part carries the content's height as '--accordion-content-height', as Radix's accordion does, for a stylesheet that animates the section open with keyframes of its own. */
|
|
14544
15713
|
"helix-headless-accordion-item": DefineCustomElement<
|
|
14545
15714
|
HelixHeadlessAccordionItem,
|
|
14546
15715
|
HelixHeadlessAccordionItemVueProps,
|
|
14547
15716
|
HelixHeadlessAccordionItemVueEvents
|
|
14548
15717
|
>;
|
|
14549
|
-
/** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names.
|
|
15718
|
+
/** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names. Keys, on a trigger: Up and Down Arrow move to the previous and the next trigger, and so do Left and Right, wrapping at the ends; Home and End go to the first and the last. Enter and Space open and close the section. Disabled sections are passed over. Each trigger is a button with 'aria-expanded' and 'aria-controls', inside a heading, level 3 unless 'heading-level' says otherwise, so the sections are in a screen reader's list of headings. An open section is a region named by its trigger. Set the level that fits the page's outline. Find in page searches the closed sections too, and opens the one it matches in. 'hidden-until-found="false"' turns that off. */
|
|
14550
15719
|
"helix-headless-accordion": DefineCustomElement<
|
|
14551
15720
|
HelixHeadlessAccordion,
|
|
14552
15721
|
HelixHeadlessAccordionVueProps,
|
|
14553
15722
|
HelixHeadlessAccordionVueEvents
|
|
14554
15723
|
>;
|
|
14555
|
-
/** An announcement is a banner above the page header with news about the whole site or session, such as a trial ending, a degraded service, or a change of terms. For a passage inside a document, use 'Callout', which stays where it is placed and cannot be dismissed. The announcement is always a polite live region, whatever its 'tone'. 'role="alert"' is assertive and interrupts a screen reader, so an announcement served with the page would interrupt on every page load. The live region is its own part. When the announcement appears after the page has loaded, the message is written into the region one frame later, so screen readers read it reliably, and the region is emptied seven seconds later
|
|
15724
|
+
/** An announcement is a banner above the page header with news about the whole site or session, such as a trial ending, a degraded service, or a change of terms. For a passage inside a document, use 'Callout', which stays where it is placed and cannot be dismissed. The announcement is always a polite live region, whatever its 'tone'. 'role="alert"' is assertive and interrupts a screen reader, so an announcement served with the page would interrupt on every page load. The live region is its own part. When the announcement appears after the page has loaded, the message is written into the region one frame later, so screen readers read it reliably, and the region is emptied seven seconds later. While the region holds the copy, the message itself is hidden from screen readers, so it is in the page once. When the announcement is in the served HTML, the region stays empty and nothing is read out. The dismiss button fires 'helix-dismiss', and the announcement stays in the document, so remove it in your listener. The event is cancelable, and 'dismiss()' returns 'false' when a listener calls 'preventDefault()'. When your listener removes an announcement whose dismiss button has focus, focus moves to the dismiss button of the announcement beside it. With no other announcement beside it, move focus yourself, for example to the page's main heading. Set 'duration' to dismiss it after a time. The clock stops while the pointer or focus is on the announcement, and continues from what was left, so a reader partway through is not cut off. It stops while the page is hidden too, in another tab or a minimized window, so the message is not spent where nobody can see it. While the clock is stopped the announcement carries ':state(paused)'. When the time runs out it sends 'helix-dismiss', as the button does. */
|
|
14556
15725
|
"helix-headless-announcement": DefineCustomElement<
|
|
14557
15726
|
HelixHeadlessAnnouncement,
|
|
14558
15727
|
HelixHeadlessAnnouncementVueProps,
|
|
14559
15728
|
HelixHeadlessAnnouncementVueEvents
|
|
14560
15729
|
>;
|
|
14561
|
-
/** Tracks whether the page has scrolled and sets the custom state 'scrolled', so the styled tier can lift the bar without a scroll handler of its own. The state is read when the element connects. A fresh load starts at the top, which matches the server markup, and a reload partway down the page is corrected on hydration. The element uses a custom state because an attribute such as 'data-scrolled', written onto its own host, is one the server did not send. A hydrating framework would report a mismatch whenever the page reloads far enough down. 'ElementInternals.states' is not in the DOM, so hydration has nothing to compare. Select the state with ':state(scrolled)'. The page is the window unless 'scroller' names the element that scrolls, for an app shell whose content scrolls inside a container. The host is the page's 'banner' landmark. Placed inside 'main', 'article', 'aside', 'nav' or 'section', it is a plain box instead, as a native '<header>' is there, so a header inside a card or a pane does not add a second banner. A server cannot see the ancestors, so it serves the banner and the browser corrects it when the element connects. */
|
|
15730
|
+
/** Tracks whether the page has scrolled and sets the custom state 'scrolled', so the styled tier can lift the bar without a scroll handler of its own. The state is read when the element connects. A fresh load starts at the top, which matches the server markup, and a reload partway down the page is corrected on hydration. The element uses a custom state because an attribute such as 'data-scrolled', written onto its own host, is one the server did not send. A hydrating framework would report a mismatch whenever the page reloads far enough down. 'ElementInternals.states' is not in the DOM, so hydration has nothing to compare. Select the state with ':state(scrolled)'. The page is the window unless 'scroller' names the element that scrolls, for an app shell whose content scrolls inside a container. The host is the page's 'banner' landmark. Placed inside 'main', 'article', 'aside', 'nav' or 'section', it is a plain box instead, as a native '<header>' is there, so a header inside a card or a pane does not add a second banner. The ancestors are read as the accessibility tree reads them, through the slots that take the header in, so one slotted into a component that draws a '<nav>', such as 'Navigation', is not a banner either. A server cannot see the ancestors, so it serves the banner and the browser corrects it when the element connects. */
|
|
14562
15731
|
"helix-headless-app-header": DefineCustomElement<
|
|
14563
15732
|
HelixHeadlessAppHeader,
|
|
14564
15733
|
HelixHeadlessAppHeaderVueProps,
|
|
14565
15734
|
HelixHeadlessAppHeaderVueEvents
|
|
14566
15735
|
>;
|
|
14567
|
-
/** 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. */
|
|
15736
|
+
/** 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. 'overlap' draws every band from zero, one in front of another, so each part's own amount is its height: the first column is in front. Use it to compare the parts with each other; the scale then fits the largest part rather than the total. 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. */
|
|
14568
15737
|
"helix-headless-area-chart": DefineCustomElement<
|
|
14569
15738
|
HelixHeadlessAreaChart,
|
|
14570
15739
|
HelixHeadlessAreaChartVueProps,
|
|
14571
15740
|
HelixHeadlessAreaChartVueEvents
|
|
14572
15741
|
>;
|
|
14573
|
-
/** A part of 'Avatar' that arranges avatars. The group computes the overflow count from 'max' and renders the "+3" itself. There is no slot for it, because the number has to match which avatars are hidden. Avatars past 'max' stay in the DOM and are hidden. The group writes 'hidden' on each of them, so they are hidden on the headless tier as well, and
|
|
15742
|
+
/** A part of 'Avatar' that arranges avatars. The group computes the overflow count from 'max' and renders the "+3" itself. There is no slot for it, because the number has to match which avatars are hidden. Avatars past 'max' stay in the DOM and are hidden. The group writes 'hidden' on each of them, so they are hidden on the headless tier as well, and at any 'max'. The count is read out as 'overflow-label', such as "3 more: Grace Hopper, Alan Turing, Barbara Liskov", so a screen reader hears who is there past the ones it can reach. */
|
|
14574
15743
|
"helix-headless-avatar-group": DefineCustomElement<
|
|
14575
15744
|
HelixHeadlessAvatarGroup,
|
|
14576
15745
|
HelixHeadlessAvatarGroupVueProps,
|
|
14577
15746
|
HelixHeadlessAvatarGroupVueEvents
|
|
14578
15747
|
>;
|
|
14579
|
-
/** Shows 'src' until it fails to load. Without an image, or after a failure, the default slot is shown, and its own fallback is the initials. The host carries the accessible name, taken from 'name'. The '<img>' has an empty 'alt' and the initials are hidden from assistive technology, so the name is announced once. Set 'aria-label' on the host to override 'name' when a person's name does not describe what the avatar stands for. 'load' and 'error' are re-dispatched from the host, because they are not composed and would otherwise stop at the shadow boundary. */
|
|
15748
|
+
/** Shows 'src' until it fails to load. Without an image, or after a failure, the default slot is shown, and its own fallback is the initials. The host carries the accessible name, taken from 'name'. The '<img>' has an empty 'alt' and the initials are hidden from assistive technology, so the name is announced once. Set 'aria-label' on the host to override 'name' when a person's name does not describe what the avatar stands for. 'load' and 'error' are re-dispatched from the host, because they are not composed and would otherwise stop at the shadow boundary. 'status' says which of the two happened, for a listener that arrives after it, and the 'loading', 'loaded' and 'error' custom states say the same to a stylesheet. **On a server the avatar sends the picture's place**, an '<img>' that the browser fetches while it reads the page. The initials stand in only on the client: at once where the picture failed before the page hydrated, and after 'fallback-delay' where it is still on its way. 'load' or 'error' for a picture that settled before hydration is sent a task after the avatar hydrates, so a page's own scripts are listening by then. */
|
|
14580
15749
|
"helix-headless-avatar": DefineCustomElement<
|
|
14581
15750
|
HelixHeadlessAvatar,
|
|
14582
15751
|
HelixHeadlessAvatarVueProps,
|
|
14583
15752
|
HelixHeadlessAvatarVueEvents
|
|
14584
15753
|
>;
|
|
14585
|
-
/** 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
|
|
15754
|
+
/** 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. 'format-options' writes a count with 'Intl.NumberFormat', in 'locale': 'format-options='{"notation":"compact"}'' shows 1,200 as '1.2K'. Absent, the count is shown as it was given. 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 describes it.** The control is the first element in the badge that takes focus, and its description is the badge's words, so focusing '<helix-badge value="8" label="{count} unread"><button>Inbox </button></helix-badge>' announces "Inbox, button, 8 unread", current as the count changes. A control that already has a description keeps its own. The count is also a status of its own, read when it changes. **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. */
|
|
14586
15755
|
"helix-headless-badge": DefineCustomElement<
|
|
14587
15756
|
HelixHeadlessBadge,
|
|
14588
15757
|
HelixHeadlessBadgeVueProps,
|
|
@@ -14606,19 +15775,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14606
15775
|
HelixHeadlessBreadcrumbVueProps,
|
|
14607
15776
|
HelixHeadlessBreadcrumbVueEvents
|
|
14608
15777
|
>;
|
|
14609
|
-
/** The host is the navigation landmark, named "Breadcrumb" by default. An 'aria-label' on the host names the trail instead, and so does 'label'. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. A trail built from data, such as a router's matched routes, takes 'items': an array of '{ label, href }', drawn as crumbs in order, the last one as the current page. Slotted crumbs follow them. Use one way or the other in a trail. */
|
|
15778
|
+
/** The host is the navigation landmark, named "Breadcrumb" by default. An 'aria-label' on the host names the trail instead, and so does 'label'. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. A trail built from data, such as a router's matched routes, takes 'items': an array of '{ label, href }', drawn as crumbs in order, the last one as the current page. Slotted crumbs follow them. Use one way or the other in a trail. With 'max-items', a trail drawn from 'items' that is longer folds its middle into one crumb: the first crumb, a button, then the last 'max-items' less one. The button is named by 'expand-label' and shows the whole trail, moving focus to the first crumb it brought back. A new 'items' folds again. Slotted crumbs do not fold; write the folded crumb where the gap should be. */
|
|
14610
15779
|
"helix-headless-breadcrumbs": DefineCustomElement<
|
|
14611
15780
|
HelixHeadlessBreadcrumbs,
|
|
14612
15781
|
HelixHeadlessBreadcrumbsVueProps,
|
|
14613
15782
|
HelixHeadlessBreadcrumbsVueEvents
|
|
14614
15783
|
>;
|
|
14615
|
-
/** Sets 'role="group"' on the host through internals, and 'label' names the group. Without a name, a screen reader announces the buttons as separate controls. The group does not manage focus, so each button keeps its own tab stop. For one tab stop with arrow keys between the buttons, the APG toolbar pattern, use Toolbar. Buttons are slotted, so they stay your own elements and keep their own appearance and size. */
|
|
15784
|
+
/** Sets 'role="group"' on the host through internals, and 'label' names the group. Without a name, a screen reader announces the buttons as separate controls, and a development build warns once with the kind 'missing-name'. The group does not manage focus, so each button keeps its own tab stop. For one tab stop with arrow keys between the buttons, the APG toolbar pattern, use Toolbar. Buttons are slotted, so they stay your own elements and keep their own appearance and size. */
|
|
14616
15785
|
"helix-headless-button-group": DefineCustomElement<
|
|
14617
15786
|
HelixHeadlessButtonGroup,
|
|
14618
15787
|
HelixHeadlessButtonGroupVueProps,
|
|
14619
15788
|
HelixHeadlessButtonGroupVueEvents
|
|
14620
15789
|
>;
|
|
14621
|
-
/** 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()'
|
|
15790
|
+
/** 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 puts a hidden native submit button carrying its 'name', 'value' and 'form*' overrides into the form, calls 'requestSubmit()' with it, which runs validation, unlike 'submit()', and takes it out again, as Shoelace and Web Awesome do. A 'submit' listener reads that button as 'event.submitter', so 'event.submitter.value' and 'new FormData(form, event.submitter)' 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'. Every press that acts sends 'helix-press' with what pressed it in 'detail.pointerType': 'mouse', 'pen', 'touch', 'keyboard', or 'virtual' for a screen reader's press or a script's 'click()', as React Aria's 'onPress' does. It is sent once the press has done its own work, before 'click' reaches listeners on the element, and never for a disabled or pending button. **Keyboard.** Enter and Space press the button, as on a native one. */
|
|
14622
15791
|
"helix-headless-button": DefineCustomElement<
|
|
14623
15792
|
HelixHeadlessButton,
|
|
14624
15793
|
HelixHeadlessButtonVueProps,
|
|
@@ -14648,13 +15817,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14648
15817
|
HelixHeadlessCanvasVueProps,
|
|
14649
15818
|
HelixHeadlessCanvasVueEvents
|
|
14650
15819
|
>;
|
|
14651
|
-
/** 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. */
|
|
15820
|
+
/** 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 'label', as a Stat Group is named, or 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. 'label' is set through 'ElementInternals', so it writes no attribute onto the card. **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. Each region's slot is a part of the same name, 'body' for the main content, as Web Awesome's card names its regions. A slot draws no box, so a part passes inherited properties to what is slotted, and a page wanting a box there gives it one with 'display'. '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. **The card says which regions it holds**, as ':state(has-media)', ':state(has-header)' and ':state(has-footer)', so a sheet can draw a card with a header differently, as Web Awesome's 'with-header' does, with no attribute written onto the card. Read in the browser, so a served card carries none until the script runs. */
|
|
14652
15821
|
"helix-headless-card": DefineCustomElement<
|
|
14653
15822
|
HelixHeadlessCard,
|
|
14654
15823
|
HelixHeadlessCardVueProps,
|
|
14655
15824
|
HelixHeadlessCardVueEvents
|
|
14656
15825
|
>;
|
|
14657
|
-
/** The track is a scroll container with scroll snapping, so dragging, trackpad swipes, and the browser's momentum scrolling all work. The controls scroll the track. Slides are your own elements, and the carousel writes nothing onto them. It renders a pane for each slide with 'role="group"', 'aria-roledescription="slide"', and a name that gives the slide's position in the set, and assigns the slide into it. A screen reader announces the position, and a slide that is a link stays a link. See 'assign'. **Rotation stops on focus and on hover, and stays stopped** until the user starts it again, as the APG requires. The rotation control is labeled with the action it performs and is first in the tab order. Rotation goes on from the last slide to the first, with or without 'loop', which is about the reader's own moves. A move the reader makes is announced, the slide's position read from a polite live region. While the carousel rotates the region is off, so a screen reader is not interrupted every few seconds. The indicators are one tab stop.
|
|
15826
|
+
/** The track is a scroll container with scroll snapping, so dragging, trackpad swipes, and the browser's momentum scrolling all work. The controls scroll the track. Slides are your own elements, and the carousel writes nothing onto them. It renders a pane for each slide with 'role="group"', 'aria-roledescription="slide"', and a name that gives the slide's position in the set, and assigns the slide into it. A screen reader announces the position, and a slide that is a link stays a link. See 'assign'. **Rotation stops on focus and on hover, and stays stopped** until the user starts it again, as the APG requires. The rotation control is labeled with the action it performs and is first in the tab order. Rotation goes on from the last slide to the first, with or without 'loop', which is about the reader's own moves. A move the reader makes is announced, the slide's position read from a polite live region. While the carousel rotates the region is off, so a screen reader is not interrupted every few seconds. **Keyboard.** The indicators are one tab stop. | Key | What it does | |---|---| | Tab | Moves through the rotation control, Previous, Next, the slides' own links and buttons, and the indicators, in that order. | | Enter, Space | Presses the control or the indicator that has focus. | | Right, Left | On an indicator, moves to the next or the previous slide and its indicator. Left moves on, on a right-to-left page. | | Down, Up | The same, on a vertical carousel. | | Home, End | On an indicator, moves to the first or the last slide. | Without 'loop', Previous on the first slide and Next on the last are marked 'aria-disabled', and keep focus. **What a screen reader hears.** The carousel is a group named by 'label', announced as 'role-label' ("carousel"). Each slide is a group announced as 'slide-role-label' ("slide") and named by 'slide-label' ("2 of 5"). After a move by a control, an indicator, a key, or a drag, the 'live' part says the slide's name politely. While the carousel rotates the region is off. **'slides-per-move' moves several slides at a time.** With 'per-view="3"' and 'slides-per-move="3"', Next shows the next three, there is one indicator for each stop, and the track snaps only at the stops. The last stop is always the end of the run, so a run that does not divide evenly ends on its last slides. Unset moves one slide. **'mouse-drag' lets a mouse drag the track**, which otherwise only a touch screen, a trackpad, or the scroll wheel moves. The drag follows the pointer with snapping off and settles on the nearest slide when it is let go, and that move is announced and refusable like a press of Next. A link in a slide is not followed at the end of a drag. The glyphs on Previous and Next can be replaced by slotting an icon of your own into 'previous-icon' and 'next-icon'. */
|
|
14658
15827
|
"helix-headless-carousel": DefineCustomElement<
|
|
14659
15828
|
HelixHeadlessCarousel,
|
|
14660
15829
|
HelixHeadlessCarouselVueProps,
|
|
@@ -14672,25 +15841,25 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14672
15841
|
HelixHeadlessChatMessageVueProps,
|
|
14673
15842
|
HelixHeadlessChatMessageVueEvents
|
|
14674
15843
|
>;
|
|
14675
|
-
/** Chat has no positioning, no backdrop, and no trigger, so you can put it in any container, such as a page, a sidebar, a modal, or a floating panel. The transcript stays pinned to the bottom, including while a streamed answer grows, until the user scrolls more than 'threshold' away from it. With 'history' set to 'more', reaching the top fires 'helix-history'. Set 'loading' while you fetch, then prepend the older turns. The turn the user was reading stays in place on screen. The log is 'aria-live="off"'. A separate status region announces each new turn once, when it has finished arriving. It skips the user's own turns unless they failed to send, turns loaded as history, and the turns already there when the transcript opened. Pass the turns as children or as 'turns' data. Do not use both. Children render from the server and suit most conversations. 'turns' draws a long transcript one window at a time, so the log needs a block size of its own. **A conversation is built from three elements.** The chat holds the transcript, a 'Chat.Message' stands for each turn, and a 'Chat.Composer' sits in the 'composer' slot. When the user sends, 'helix-send' reaches the chat: add their turn with 'author="me"' and 'state="sending"', then set 'state' to 'sent' or 'failed' when your server answers. Add the reply as a turn with 'state="streaming"', write its text as it arrives, and set 'state' to 'sent' when it is complete. While the user types, the composer sends 'helix-typing', which you can pass on to the other side.
|
|
15844
|
+
/** Chat has no positioning, no backdrop, and no trigger, so you can put it in any container, such as a page, a sidebar, a modal, or a floating panel. The transcript stays pinned to the bottom, including while a streamed answer grows, until the user scrolls more than 'threshold' away from it. With 'history' set to 'more', reaching the top fires 'helix-history'. Set 'loading' while you fetch, then prepend the older turns. The turn the user was reading stays in place on screen. The log is 'aria-live="off"'. A separate status region announces each new turn once, when it has finished arriving. It skips the user's own turns unless they failed to send, turns loaded as history, and the turns already there when the transcript opened. Pass the turns as children or as 'turns' data. Do not use both. Children render from the server and suit most conversations. 'turns' draws a long transcript one window at a time, so the log needs a block size of its own. **A conversation is built from three elements.** The chat holds the transcript, a 'Chat.Message' stands for each turn, and a 'Chat.Composer' sits in the 'composer' slot. When the user sends, 'helix-send' reaches the chat: add their turn with 'author="me"' and 'state="sending"', then set 'state' to 'sent' or 'failed' when your server answers. Add the reply as a turn with 'state="streaming"', write its text as it arrives, and set 'state' to 'sent' when it is complete. While the user types, the composer sends 'helix-typing', which you can pass on to the other side. When the other side types, set 'typing' to their name: the status band draws three dots and "Ada is typing" ('typing-label'), which a screen reader hears, and clearing it takes them away. Anything slotted into 'status' is drawn first. A screen reader names each turn by its author and its time, such as "You, 2 minutes ago". Set 'me-label' and 'message-label' to say it in your language, and give each turn by 'them' an 'author-label'. A turn with neither an author label nor a time is named by 'turn-label', "Message". A turn from 'turns' is drawn in the chat's shadow root, so style it through the forwarded 'message-*' parts. A turn by 'me' also gets each part with '-mine' added, and the turn's state adds 'message-meta-failed', 'message-content-sending', and 'message-content-streaming'. To style each participant differently, give 'author-styles' the declarations for each author, such as '{"ada": "--chat-message-background-color: …"}': the message drawn for each of their turns takes them as its 'style', so the message's custom properties change for that author alone. Turns passed as children are styled by their 'author', such as 'helix-chat-message[author="ada"]'. */
|
|
14676
15845
|
"helix-headless-chat": DefineCustomElement<
|
|
14677
15846
|
HelixHeadlessChat,
|
|
14678
15847
|
HelixHeadlessChatVueProps,
|
|
14679
15848
|
HelixHeadlessChatVueEvents
|
|
14680
15849
|
>;
|
|
14681
|
-
/** 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. */
|
|
15850
|
+
/** 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. **Keyboard.** Each box is its own tab stop, as a set of native checkboxes is, and Space checks the focused one. The select-all box comes first. */
|
|
14682
15851
|
"helix-headless-checkbox-group": DefineCustomElement<
|
|
14683
15852
|
HelixHeadlessCheckboxGroup,
|
|
14684
15853
|
HelixHeadlessCheckboxGroupVueProps,
|
|
14685
15854
|
HelixHeadlessCheckboxGroupVueEvents
|
|
14686
15855
|
>;
|
|
14687
|
-
/** Renders a native '<input type="checkbox">', so the Space key, the focus ring, and the indeterminate glyph come from the platform. 'delegatesFocus' sends focus to the input, and the input is in the server-rendered markup, so the control works before any script loads. An input inside a shadow root does not submit with a form. The host is form-associated and uses 'ElementInternals' for its value, its validity, and form reset. A checked box submits its 'value', and an unchecked one submits nothing, as a native checkbox does. 'indeterminate' changes only the presentation. Assistive technology reports it as neither checked nor unchecked, it never submits, and the first click resolves it. */
|
|
15856
|
+
/** Renders a native '<input type="checkbox">', so the Space key, the focus ring, and the indeterminate glyph come from the platform. 'delegatesFocus' sends focus to the input, and the input is in the server-rendered markup, so the control works before any script loads. An input inside a shadow root does not submit with a form. The host is form-associated and uses 'ElementInternals' for its value, its validity, and form reset. A checked box submits its 'value', and an unchecked one submits nothing, as a native checkbox does. 'indeterminate' changes only the presentation. Assistive technology reports it as neither checked nor unchecked, it never submits, and the first click resolves it. **Keyboard.** The box is one tab stop. | Key | What it does | |---|---| | Space | Checks or unchecks the box, and resolves 'indeterminate'. | The native input reports checked, unchecked, or mixed. 'aria-readonly' is set under 'readonly', and 'aria-invalid' and 'aria-describedby' point at the message while one shows. */
|
|
14688
15857
|
"helix-headless-checkbox": DefineCustomElement<
|
|
14689
15858
|
HelixHeadlessCheckbox,
|
|
14690
15859
|
HelixHeadlessCheckboxVueProps,
|
|
14691
15860
|
HelixHeadlessCheckboxVueEvents
|
|
14692
15861
|
>;
|
|
14693
|
-
/** 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. */
|
|
15862
|
+
/** 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; it is handed the block's 'language', so one function serves every block. The code stays in the slot, so the copy button and the page's own text are the code as written. Set 'expandable' on a block whose height is capped, such as by '--code-block-max-block-size', and a button under it shows every line and then fewer again, as a docs site's long example does. The button is drawn only while the cap hides something, says whether the block is expanded with 'aria-expanded', names the block it opens with 'aria-controls', and the block carries ':state(expanded)' while it is. 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. */
|
|
14694
15863
|
"helix-headless-code-block": DefineCustomElement<
|
|
14695
15864
|
HelixHeadlessCodeBlock,
|
|
14696
15865
|
HelixHeadlessCodeBlockVueProps,
|
|
@@ -14708,7 +15877,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14708
15877
|
HelixHeadlessColorInputVueProps,
|
|
14709
15878
|
HelixHeadlessColorInputVueEvents
|
|
14710
15879
|
>;
|
|
14711
|
-
/** 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. */
|
|
15880
|
+
/** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. The square is one tab stop. In it, the up and down arrows move brightness and the left and right arrows move saturation, and PageUp and PageDown move brightness by ten. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. A screen reader hears the color's name, such as "vibrant red", after the two numbers on the square and after the number on the hue ramp, and each preset is named by its color. The opacity ramp is heard as a percentage. Set 'color-words' to speak the names in another language. The presets are a listbox with the current color selected, and one tab stop. The arrow keys move between them, Home and End go to the ends, and Enter, Space or a press chooses one. */
|
|
14712
15881
|
"helix-headless-color-picker": DefineCustomElement<
|
|
14713
15882
|
HelixHeadlessColorPicker,
|
|
14714
15883
|
HelixHeadlessColorPickerVueProps,
|
|
@@ -14726,13 +15895,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14726
15895
|
HelixHeadlessCommandVueProps,
|
|
14727
15896
|
HelixHeadlessCommandVueEvents
|
|
14728
15897
|
>;
|
|
14729
|
-
/** 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'. */
|
|
15898
|
+
/** 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'. **Keyboard.** Enter and Space copy, as they press a native button. The button is named 'label', or the host's 'aria-label', and its name changes to 'copied-label' or 'error-label' for the moment after a press, which is what a screen reader on it hears. The tooltip shows the same words. */
|
|
14730
15899
|
"helix-headless-copy-button": DefineCustomElement<
|
|
14731
15900
|
HelixHeadlessCopyButton,
|
|
14732
15901
|
HelixHeadlessCopyButtonVueProps,
|
|
14733
15902
|
HelixHeadlessCopyButtonVueEvents
|
|
14734
15903
|
>;
|
|
14735
|
-
/** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. To act on a single row, such as opening it, put a link or a button in a cell. The grid is one tab stop, and the arrow keys move between its cells, the headings included
|
|
15904
|
+
/** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
|
|
14736
15905
|
"helix-headless-data-table": DefineCustomElement<
|
|
14737
15906
|
HelixHeadlessDataTable,
|
|
14738
15907
|
HelixHeadlessDataTableVueProps,
|
|
@@ -14750,7 +15919,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14750
15919
|
HelixHeadlessDatePickerVueProps,
|
|
14751
15920
|
HelixHeadlessDatePickerVueEvents
|
|
14752
15921
|
>;
|
|
14753
|
-
/** Each pair is its own element: the label is the '<dt>' and the value its '<dd>', and a screen reader hears them together however the list lays them out. The value is the default slot, because it varies and is often more than text, such as a tag, an avatar, or a link. The label is almost always text, so it is also a property. **For a label with several values, write each value as a '<dd>'**, such as the authors of a paper. The item then puts your '<dd>' elements after its '<dt>' in place of its own, so a screen reader hears one term and each of its descriptions, as in a native '<dl>'. A server cannot see your elements, so the served item wraps them in its own '<dd>' until it runs. */
|
|
15922
|
+
/** Each pair is its own element: the label is the '<dt>' and the value its '<dd>', and a screen reader hears them together however the list lays them out. The value is the default slot, because it varies and is often more than text, such as a tag, an avatar, or a link. The label is almost always text, so it is also a property. **For a label with several values, write each value as a '<dd>'**, such as the authors of a paper. The item then puts your '<dd>' elements after its '<dt>' in place of its own, so a screen reader hears one term and each of its descriptions, as in a native '<dl>'. A server cannot see your elements, so set 'several' as well, and the served item leaves them unwrapped too. Without it, the served item wraps them in its own '<dd>' until it runs. **Controls that act on the value**, such as a copy button, go in the 'actions' slot, drawn after the value inside its '<dd>', as Radix Themes' data list puts an icon button beside a value. A screen reader hears them as part of the description they act on. With several values, put each control inside the '<dd>' it acts on. */
|
|
14754
15923
|
"helix-headless-description-list-item": DefineCustomElement<
|
|
14755
15924
|
HelixHeadlessDescriptionListItem,
|
|
14756
15925
|
HelixHeadlessDescriptionListItemVueProps,
|
|
@@ -14762,13 +15931,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14762
15931
|
HelixHeadlessDescriptionListVueProps,
|
|
14763
15932
|
HelixHeadlessDescriptionListVueEvents
|
|
14764
15933
|
>;
|
|
14765
|
-
/** 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'. */
|
|
15934
|
+
/** 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 The dialog adds one thing to those: 'Tab' from its last control goes to its first, and 'Shift+Tab' from its first to its last. A native modal lets 'Tab' past its last control out to the browser's own controls. '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. A Helix component that draws words and no control, such as 'Text', counts as words. 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'. */
|
|
14766
15935
|
"helix-headless-dialog": DefineCustomElement<
|
|
14767
15936
|
HelixHeadlessDialog,
|
|
14768
15937
|
HelixHeadlessDialogVueProps,
|
|
14769
15938
|
HelixHeadlessDialogVueEvents
|
|
14770
15939
|
>;
|
|
14771
|
-
/** The separator role is on the rule inside the shadow root. A role does not need to cross the shadow boundary the way an IDREF does, so it can sit on the rendered element. The semantics are then in the server-rendered markup, with no attribute written by script after the element connects. Use 'orientation="vertical"' between items on one line, such as inside a toolbar. A vertical divider stretches to fit its flex parent and sets no height of its own. */
|
|
15940
|
+
/** The separator role is on the rule inside the shadow root. A role does not need to cross the shadow boundary the way an IDREF does, so it can sit on the rendered element. The semantics are then in the server-rendered markup, with no attribute written by script after the element connects. Set 'announced' for a line that divides one thing from another, and it is read as a separator, named by any content set into it. Use 'orientation="vertical"' between items on one line, such as inside a toolbar. A vertical divider stretches to fit its flex parent and sets no height of its own. */
|
|
14772
15941
|
"helix-headless-divider": DefineCustomElement<
|
|
14773
15942
|
HelixHeadlessDivider,
|
|
14774
15943
|
HelixHeadlessDividerVueProps,
|
|
@@ -14780,37 +15949,37 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14780
15949
|
HelixHeadlessDonutChartVueProps,
|
|
14781
15950
|
HelixHeadlessDonutChartVueEvents
|
|
14782
15951
|
>;
|
|
14783
|
-
/** 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> ''' */
|
|
15952
|
+
/** 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: 'Tab' from the last control goes to the first, and 'Shift+Tab' from the first to the last, as in 'Dialog' - 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. 'snap' is the snap point the panel rests at, and ':state(snapped)' is on the host while that is less than the whole panel. 'snapTo()' moves it to another. **Focus moving to a control past the window's edge opens the panel to its largest snap point**, so a reader moving through a half open sheet with 'Tab' never lands on a control they cannot see. Set 'dismissible' to draw a close control in the corner, labeled by 'dismiss-label', as 'Dialog' draws one. 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> ''' */
|
|
14784
15953
|
"helix-headless-drawer": DefineCustomElement<
|
|
14785
15954
|
HelixHeadlessDrawer,
|
|
14786
15955
|
HelixHeadlessDrawerVueProps,
|
|
14787
15956
|
HelixHeadlessDrawerVueEvents
|
|
14788
15957
|
>;
|
|
14789
|
-
/** A row that opens a page contains that page: the page's rows are this row's own children, assigned to the 'page' slot. There are no ids to wire, and moving a row moves its page with it. What the item renders depends on the stack: - On the page that is showing, it renders its row. - When its own page is showing, it renders only that page's rows. Its row belongs to the page above. - Otherwise it renders nothing. The rows stay in the light DOM untouched, so there is no state to keep. Choosing a row dispatches an event, and the stack decides whether that drills in or runs a command. A row that opens a page shows a caret after its text and sets 'aria-haspopup', the same way 'Menu' marks a row with a submenu. The server render leaves both out, because the server cannot see the children. */
|
|
15958
|
+
/** A row that opens a page contains that page: the page's rows are this row's own children, assigned to the 'page' slot. There are no ids to wire, and moving a row moves its page with it. What the item renders depends on the stack: - On the page that is showing, it renders its row. - When its own page is showing, it renders only that page's rows. Its row belongs to the page above. - When a page further down its own is showing, it renders its page's slot alone, so the rows below reach the page. - Otherwise it renders nothing. The rows stay in the light DOM untouched, so there is no state to keep. Choosing a row dispatches an event, and the stack decides whether that drills in or runs a command. A row that opens a page shows a caret after its text and sets 'aria-haspopup', the same way 'Menu' marks a row with a submenu. The server render leaves both out, because the server cannot see the children. The row is named by its label alone. Words in 'description', a line under the label, and in 'end' describe it instead, through 'aria-describedby', as 'Menu.Item' does: a reader hears "Theme", then "Dark". */
|
|
14790
15959
|
"helix-headless-drilldown-item": DefineCustomElement<
|
|
14791
15960
|
HelixHeadlessDrilldownItem,
|
|
14792
15961
|
HelixHeadlessDrilldownItemVueProps,
|
|
14793
15962
|
HelixHeadlessDrilldownItemVueEvents
|
|
14794
15963
|
>;
|
|
14795
|
-
/** One panel whose content changes as you move between pages. Use it where there is no room for a second column, such as on a phone, or on a touch screen with no hover to open one. It is a region that stays where you put it, such as inside a drawer, a sidebar, or a settings panel. A 'Menu' opens from a trigger and closes when you are done. 'Menu' can drill into pages too, through the same controller. Rows are places to go and commands to run. Nothing here is form-associated and nothing is submitted. To choose a value, use a 'Listbox'. A row that opens a page contains that page, so the stack holds one reference and reads the rest from the DOM. The behavior lives in 'DrilldownController', which 'Menu' shares. After each move the host carries 'data-direction', 'forward' into a page or 'back' out of one, so a stylesheet can slide the new page in from the side the reader is going. The styled tier
|
|
15964
|
+
/** One panel whose content changes as you move between pages. Use it where there is no room for a second column, such as on a phone, or on a touch screen with no hover to open one. It is a region that stays where you put it, such as inside a drawer, a sidebar, or a settings panel. A 'Menu' opens from a trigger and closes when you are done. 'Menu' can drill into pages too, through the same controller. Rows are places to go and commands to run. Nothing here is form-associated and nothing is submitted. To choose a value, use a 'Listbox'. A row that opens a page contains that page, so the stack holds one reference and reads the rest from the DOM. The behavior lives in 'DrilldownController', which 'Menu' shares. After each move the host carries 'data-direction', 'forward' into a page or 'back' out of one, and records ':state(forward)' or ':state(back)', so a stylesheet can slide the new page in from the side the reader is going. Both are written again on every move, so an animation keyed on them runs for each page, two moves the same way included. The styled tier slides the page and swaps it at once under 'prefers-reduced-motion'. Keys, on a row: Up and Down Arrow move between the rows, Home and End go to the first and the last, and a typed letter moves to the next row whose name starts with it. Enter, Space, or Right Arrow opens a row's page, and Left Arrow or Escape goes back, the two arrows swapping on a right-to-left page. The rows of the page showing are a 'menu', named by 'label' on the top page and by the page's title below it. The back button and the title sit above the menu. Disabled rows stay reachable with the arrow keys, and typing a letter moves to the next row whose name starts with it. */
|
|
14796
15965
|
"helix-headless-drilldown": DefineCustomElement<
|
|
14797
15966
|
HelixHeadlessDrilldown,
|
|
14798
15967
|
HelixHeadlessDrilldownVueProps,
|
|
14799
15968
|
HelixHeadlessDrilldownVueEvents
|
|
14800
15969
|
>;
|
|
14801
|
-
/** Shows what would be in a region and the one action that would fill it, so an empty region does not look like one that failed to load. The message is announced, because an empty view often replaces content that was loading, and the announcement tells a screen reader user that the search returned nothing. It is announced from a status region of its own, which is rendered empty and filled a frame after the view appears. Screen readers read a region that arrives with its text already in it inconsistently. Every region is a bare slot. There is no 'empty-state-heading' or 'empty-state-actions' element: assign your own heading and actions to the slots. */
|
|
15970
|
+
/** Shows what would be in a region and the one action that would fill it, so an empty region does not look like one that failed to load. The message is announced, because an empty view often replaces content that was loading, and the announcement tells a screen reader user that the search returned nothing. It is announced from a status region of its own, which is rendered empty and filled a frame after the view appears. Screen readers read a region that arrives with its text already in it inconsistently. For the seven seconds the region holds its copy, the heading and the message are hidden from screen readers, so the words are in the page once. Every region is a bare slot. There is no 'empty-state-heading' or 'empty-state-actions' element: assign your own heading and actions to the slots. **Or give the heading as words.** 'heading' draws them in a 'heading' part that is a heading at 'heading-level', 3 where it is not set, so a page rendering from data or on a server gets a heading a reader finds in the outline without writing the element. A heading slotted in replaces it. */
|
|
14802
15971
|
"helix-headless-empty": DefineCustomElement<
|
|
14803
15972
|
HelixHeadlessEmpty,
|
|
14804
15973
|
HelixHeadlessEmptyVueProps,
|
|
14805
15974
|
HelixHeadlessEmptyVueEvents
|
|
14806
15975
|
>;
|
|
14807
|
-
/** 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. */
|
|
15976
|
+
/** 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. A reader also hears 'added-text' for the files a drop or a paste adds, and 'removed-text' for a file a remove button takes out, since neither moves focus or says anything on its own. 'directory' asks the picker for a folder. 'transformFiles' changes the files a field takes before it holds them, such as shrinking an image. Each chosen file is a row: its name, its size and type as tags, and a remove button. 'renderFile' draws the row's details your own way, and the 'remove-icon' slot replaces the button's icon. **Keyboard.** The input is the tab stop, and each file's remove button is one more. | Key | What it does | |---|---| | Enter, Space | On the input, opens the picker. On a remove button, removes that file and moves focus to the button of the file in its place, or back to the input. | | Control+V, Command+V | Takes files from the clipboard, as a drop does. | */
|
|
14808
15977
|
"helix-headless-file-input": DefineCustomElement<
|
|
14809
15978
|
HelixHeadlessFileInput,
|
|
14810
15979
|
HelixHeadlessFileInputVueProps,
|
|
14811
15980
|
HelixHeadlessFileInputVueEvents
|
|
14812
15981
|
>;
|
|
14813
|
-
/** Shows one filter declared by a 'FilterField': the field, the operator, and the values, with a control to remove the filter. The operator is shown only when it is not the field's default: ''' Disposition refunded, chargeback default operator, hidden Disposition is not refunded chosen operator, shown Created after 1 Aug a scalar field has no default ''' Omit 'operator-label' for the field's default operator and pass it for every other operator. The code that builds the chip has the field, and the field defines its default. The chip shows a filter and does not apply it. Dismissing fires 'helix-dismiss' as a request, as on 'Tag' and 'Announcement'. The chip is your element in your list, so you remove it, which keeps your model and the document in step. Call 'preventDefault()' on 'helix-dismiss' to cancel the dismissal, which is also how you take control of the interaction for one press. 'requestChange' documents the pattern. To let the user change the operator, slot a menu trigger into 'operator'. With the text fallback, the operator is a label. The chip does not interpret operators: their meaning belongs to your domain, as 'FilterOperator' explains. */
|
|
15982
|
+
/** Shows one filter declared by a 'FilterField': the field, the operator, and the values, with a control to remove the filter. The operator is shown only when it is not the field's default: ''' Disposition refunded, chargeback default operator, hidden Disposition is not refunded chosen operator, shown Created after 1 Aug a scalar field has no default ''' Omit 'operator-label' for the field's default operator and pass it for every other operator. The code that builds the chip has the field, and the field defines its default. The chip shows a filter and does not apply it. Dismissing fires 'helix-dismiss' as a request, as on 'Tag' and 'Announcement'. The chip is your element in your list, so you remove it, which keeps your model and the document in step. Call 'preventDefault()' on 'helix-dismiss' to cancel the dismissal, which is also how you take control of the interaction for one press. 'requestChange' documents the pattern. **Keyboard.** The remove button is a tab stop of its own, and Enter or Space on it asks to remove the filter. In a 'FilterInput', Backspace in the empty field asks to remove the last chip. The remove button is named 'dismiss-label' followed by the chip's words, such as "Remove filter Status is not open", so a row of chips says which filter each button removes. Write '{label}' in 'dismiss-label' to put the words elsewhere. To let the user change the operator, slot a menu trigger into 'operator'. With the text fallback, the operator is a label. The chip does not interpret operators: their meaning belongs to your domain, as 'FilterOperator' explains. */
|
|
14814
15983
|
"helix-headless-filter-chip": DefineCustomElement<
|
|
14815
15984
|
HelixHeadlessFilterChip,
|
|
14816
15985
|
HelixHeadlessFilterChipVueProps,
|
|
@@ -14834,13 +16003,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14834
16003
|
HelixHeadlessFilterOperatorVueProps,
|
|
14835
16004
|
HelixHeadlessFilterOperatorVueEvents
|
|
14836
16005
|
>;
|
|
14837
|
-
/** 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.
|
|
16006
|
+
/** 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. 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. **What a form receives.** The text under 'name', and then one more entry under 'name' for each token, in the order the tokens stand: | Token | Entry | |---|---| | Any element with a 'value' attribute | The value as written: 'saved:mine' | | 'FilterChip' with 'name' and values | 'status:open,pending' | | The same, with 'operator="none"' (what a typed '-status:' makes) | '-status:open,pending' | | The same, with any other 'operator' except 'any' | 'created[after]:2024' | | A token with neither | Nothing | The values are the chip's text outside its 'field' and 'operator' slots, with the spaces around each comma removed. A server splits an entry at its first colon, reads a leading '-' as the negation, and reads a word in brackets before the colon as the comparison. **Keyboard.** Focus stays in the text. The text names the highlighted suggestion as its 'aria-activedescendant'. | Key | What it does | |---|---| | Enter | Presses the highlighted suggestion. With none highlighted, reads the typed filters into chips, or submits the form when there are none. | | Down, Up | Moves the highlight through the suggestions, wrapping, and opens the panel. | | Home, End | Highlights the first or the last suggestion while the panel is open. | | Escape | Closes the panel and stops there, so a dialog around the field stays open. | | Backspace | In an empty field, asks the last token to go. | **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. */
|
|
14838
16007
|
"helix-headless-filter-input": DefineCustomElement<
|
|
14839
16008
|
HelixHeadlessFilterInput,
|
|
14840
16009
|
HelixHeadlessFilterInputVueProps,
|
|
14841
16010
|
HelixHeadlessFilterInputVueEvents
|
|
14842
16011
|
>;
|
|
14843
|
-
/** 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. */
|
|
16012
|
+
/** 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. 'frozen' draws the reading once and leaves it. **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. */
|
|
14844
16013
|
"helix-headless-format-date": DefineCustomElement<
|
|
14845
16014
|
HelixHeadlessFormatDate,
|
|
14846
16015
|
HelixHeadlessFormatDateVueProps,
|
|
@@ -14852,43 +16021,43 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14852
16021
|
HelixHeadlessGraphVueProps,
|
|
14853
16022
|
HelixHeadlessGraphVueEvents
|
|
14854
16023
|
>;
|
|
14855
|
-
/** 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. */
|
|
16024
|
+
/** 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. PageUp and PageDown move a month, to the same day, where each row's header carries its date as a '<time datetime>', and four columns otherwise, which is four weeks with 'rows="7"'. **The strip describes itself.** The 'overview' part says the busiest reading and the total of the readings drawn, "Busiest: 11 Jun, 12; Total 84", and the strip is described by it, as every chart is by its summary. Hide it visually. The 'summary' slot is still yours, for words of your own. **'selection-mode' lets a reader select cells**: 'single' one at a time and 'multiple' any number. Space, Enter or a press selects the cell the keys or the pointer rest on, or lets it go, and under 'multiple' Shift with an arrow, Home, End, PageUp or PageDown takes in every cell from the last one pressed to where the key went. 'value' holds the selected days, by the names their rows have in the table, separated by commas. A change asks with 'helix-before-change' and tells with 'change', and the 'selection' part says how many are selected, in 'selection-label'. */
|
|
14856
16025
|
"helix-headless-heatmap": DefineCustomElement<
|
|
14857
16026
|
HelixHeadlessHeatmap,
|
|
14858
16027
|
HelixHeadlessHeatmapVueProps,
|
|
14859
16028
|
HelixHeadlessHeatmapVueEvents
|
|
14860
16029
|
>;
|
|
14861
|
-
/** A button with an icon for its content. Always set 'label': an icon-only control has no accessible name unless you give it one, and a button whose content is a glyph is announced as "button" and nothing else. A separate component with a 'label' makes the name something a review can check. The element is registered, so other headless components can render 'helix-headless-icon-button', for example as an announcement's dismiss control. They do not depend on a styled tag, which would never upgrade in this tier. Icon Button is a top-level component. A namespace such as 'Button.Icon' would mean a part of a button, and an icon-only button is a complete button with different content and a different shape. */
|
|
16030
|
+
/** A button with an icon for its content. Always set 'label': an icon-only control has no accessible name unless you give it one, and a button whose content is a glyph is announced as "button" and nothing else. A separate component with a 'label' makes the name something a review can check. The element is registered, so other headless components can render 'helix-headless-icon-button', for example as an announcement's dismiss control. They do not depend on a styled tag, which would never upgrade in this tier. Icon Button is a top-level component. A namespace such as 'Button.Icon' would mean a part of a button, and an icon-only button is a complete button with different content and a different shape. **Keyboard.** Enter and Space press the button, as 'Button''s do. */
|
|
14862
16031
|
"helix-headless-icon-button": DefineCustomElement<
|
|
14863
16032
|
HelixHeadlessIconButton,
|
|
14864
16033
|
HelixHeadlessIconButtonVueProps,
|
|
14865
16034
|
HelixHeadlessIconButtonVueEvents
|
|
14866
16035
|
>;
|
|
14867
|
-
/** 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. */
|
|
16036
|
+
/** 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. It waits until the page has loaded and painted first, so a library a later module registers is not taken for a typo. 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. **A decorative icon that is all a control holds is reported.** In a development build, a button or a link whose only content is an icon with no 'label', and which has no name of its own, warns 'missing-name' once, through the runtime channel every Helix warning uses. */
|
|
14868
16037
|
"helix-headless-icon": DefineCustomElement<
|
|
14869
16038
|
HelixHeadlessIcon,
|
|
14870
16039
|
HelixHeadlessIconVueProps,
|
|
14871
16040
|
HelixHeadlessIconVueEvents
|
|
14872
16041
|
>;
|
|
14873
|
-
/** Image handles the part CSS cannot: when the picture has loaded, or that it failed. 'aspect-ratio' in your stylesheet reserves the box. The element tracks three states and relays the two events that move between them, and leaves the box to the stylesheet. The 'placeholder' slot is empty by default, so the headless tier does not depend on 'Skeleton', which it does not ship. */
|
|
16042
|
+
/** Image handles the part CSS cannot: when the picture has loaded, or that it failed. 'aspect-ratio' in your stylesheet reserves the box. The element tracks three states and relays the two events that move between them, and leaves the box to the stylesheet. The 'placeholder' slot is empty by default, so the headless tier does not depend on 'Skeleton', which it does not ship. The placeholder is hidden from screen readers, the picture having a name of its own. The fallback is read once the picture fails, after the picture's 'alt', so a reader hears that it did not load, as a sighted reader sees. */
|
|
14874
16043
|
"helix-headless-image": DefineCustomElement<
|
|
14875
16044
|
HelixHeadlessImage,
|
|
14876
16045
|
HelixHeadlessImageVueProps,
|
|
14877
16046
|
HelixHeadlessImageVueEvents
|
|
14878
16047
|
>;
|
|
14879
|
-
/** Renders a real '<input>', so the caret, selection, autofill, spellcheck, password managers, and a phone's on-screen keyboard all work natively. The field is in the server markup, so it works before any script loads. An input inside a shadow root does not submit with a form outside it, so the host is form-associated and reports its value through 'ElementInternals'. That also carries validity and handles a form reset. 'value' and 'defaultValue' work like 'checked' and 'defaultChecked'. 'value' is what is in the field now, and 'defaultValue' is the value from the markup, which a reset restores. Validity comes from the browser. 'type' and 'required' are set on the real input, and its 'validity' is copied to the host. */
|
|
16048
|
+
/** Renders a real '<input>', so the caret, selection, autofill, spellcheck, password managers, and a phone's on-screen keyboard all work natively. The field is in the server markup, so it works before any script loads. An input inside a shadow root does not submit with a form outside it, so the host is form-associated and reports its value through 'ElementInternals'. That also carries validity and handles a form reset. 'value' and 'defaultValue' work like 'checked' and 'defaultChecked'. 'value' is what is in the field now, and 'defaultValue' is the value from the markup, which a reset restores. Validity comes from the browser. 'type' and 'required' are set on the real input, and its 'validity' is copied to the host. 'validate' adds your own rule, run on every change once the browser finds nothing wrong, as React Aria's TextField 'validate' does. What it returns is the message the field shows once the user has edited it, and the message a submit raises. **Keyboard.** The field's own keys are the platform's. Enter submits the form through its default button, as in a native field. The clear button under 'clearable' and the reveal button under 'reveal' are tab stops of their own after the field, so a keyboard reaches them. The inner input is named by 'label', or by a host 'aria-label', 'aria-labelledby' or '<label for>', and is described by the hint and the message, with 'aria-invalid' while a message shows. The clear button is named 'clear-label', and the reveal button 'reveal-label' with 'aria-pressed' while the password shows. */
|
|
14880
16049
|
"helix-headless-input": DefineCustomElement<
|
|
14881
16050
|
HelixHeadlessInput,
|
|
14882
16051
|
HelixHeadlessInputVueProps,
|
|
14883
16052
|
HelixHeadlessInputVueEvents
|
|
14884
16053
|
>;
|
|
14885
|
-
/** 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. */
|
|
16054
|
+
/** 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. 'caps' draws a chord as a key per key: each is a 'key' part and the '+' between two a 'separator' part, so a sheet can draw a cap for each. 'key-labels' renames any key, on every platform, such as 'key-labels='{"mod":"Command"}''. On an Apple keyboard a word joins the next key with a hyphen, as in 'Command-K'. **'activate' makes the shortcut work the control 'for' names**, with no script: 'activate="focus"' moves focus to it, as '/' does to a search field, and 'activate="click"' presses it. It acts once 'helix-shortcut' has gone out and no listener canceled it, and only where 'within' listens. */
|
|
14886
16055
|
"helix-headless-kbd": DefineCustomElement<
|
|
14887
16056
|
HelixHeadlessKbd,
|
|
14888
16057
|
HelixHeadlessKbdVueProps,
|
|
14889
16058
|
HelixHeadlessKbdVueEvents
|
|
14890
16059
|
>;
|
|
14891
|
-
/** 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. */
|
|
16060
|
+
/** 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'. The buttons are a 'toolbar', named as the list is, and one tab stop: the arrow keys move between them, Home and End go to the first and the last, and a typed letter goes to the next name starting with it. 'hidden-series' holds the hidden names, so a page can start with some hidden or read which are. Two legends on one table show the same hidden series: the list written last wins, and the other legend takes it for its own entries. */
|
|
14892
16061
|
"helix-headless-legend": DefineCustomElement<
|
|
14893
16062
|
HelixHeadlessLegend,
|
|
14894
16063
|
HelixHeadlessLegendVueProps,
|
|
@@ -14900,13 +16069,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14900
16069
|
HelixHeadlessLightboxItemVueProps,
|
|
14901
16070
|
HelixHeadlessLightboxItemVueEvents
|
|
14902
16071
|
>;
|
|
14903
|
-
/** 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. */
|
|
16072
|
+
/** 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', whose glyphs you can replace in the 'previous-icon', 'next-icon' and 'dismiss-icon' slots. Without it, compose the chrome yourself in the 'header' and 'footer' slots, with buttons that send '--previous', '--next' and '--close'. **Set 'max-zoom' to let a reader zoom into the shown item**, such as '3'. Two fingers pinch it, a double click or a double tap zooms all the way in about the point pressed and back out, and once zoomed one pointer drags it about. '+' and '-' zoom in and out from the keyboard, and '0' puts it back. The scale and the offset are on the 'viewport' part as '--lightbox-zoom', '--lightbox-pan-x' and '--lightbox-pan-y', written only while zoomed, and a swipe moves to the next item only while the item is at its own size. With 'controls', the viewer also draws zoom-out and zoom-in controls, for a pointer with no wheel and no second finger. Once a reader stops zooming, the live region says the new scale in the words of 'zoom-status-label', such as "Zoomed to 150%". 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. */
|
|
14904
16073
|
"helix-headless-lightbox": DefineCustomElement<
|
|
14905
16074
|
HelixHeadlessLightbox,
|
|
14906
16075
|
HelixHeadlessLightboxVueProps,
|
|
14907
16076
|
HelixHeadlessLightboxVueEvents
|
|
14908
16077
|
>;
|
|
14909
|
-
/** 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. */
|
|
16078
|
+
/** 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. 'dashed' names the series drawn as a dashed line, such as a forecast or a target beside the readings: 'dashed="Forecast"'. Each takes a 'line-dashed' part beside 'line'. '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. */
|
|
14910
16079
|
"helix-headless-line-chart": DefineCustomElement<
|
|
14911
16080
|
HelixHeadlessLineChart,
|
|
14912
16081
|
HelixHeadlessLineChartVueProps,
|
|
@@ -14918,19 +16087,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
14918
16087
|
HelixHeadlessListItemVueProps,
|
|
14919
16088
|
HelixHeadlessListItemVueEvents
|
|
14920
16089
|
>;
|
|
14921
|
-
/** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop.
|
|
16090
|
+
/** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop. 'single' selects one row at a time and 'multiple' any number, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. 'none' selects nothing, so a press acts on the row. A 'disabled' row is passed over. Each row is named by its label and described by its description, so the words of the controls in 'end' are not read as part of its name. 'selection-behavior' says what a press does to the rows already selected. 'toggle', the default, adds or takes out the row. 'replace' selects the row alone, as a file list does, and the arrow keys carry the selection with them. Control or Command with a press then adds or takes out one row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. Under 'replace', selects it. | | Home, End | Moves to the first or the last row. Under 'replace', selects it. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. Under 'replace', selects the row it lands on. | | A letter or a word | Moves to the next row whose words start with what you typed. | | Left, Right | Moves between the row and the controls in its 'end' slot. | | Space | Selects the row, or lets it go. | | Shift with Down, Up, Home, End, Page Down, Page Up or Space | Selects every row from the last one pressed, in 'multiple'. | | Control or Command with Down, Up, Home, End, Page Down or Page Up | Moves without selecting, under 'replace'. | | Control or Command with A | Selects every row, in 'multiple'. | | Escape | Lets go of every selected row, asking first, and keeps the key from the dialog or menu around the list. With nothing selected, the key goes on to them. | | Enter | Acts on the row: follows its link, or sends 'helix-action' from it. | A press with Shift selects every row from the last one pressed, and a press with Control or Command adds or takes out one row under 'replace'. **Leave 'selection-mode' unset for a list a reader reads**, and set it for one a reader chooses from or acts on. The rows of an interactive list are grid rows, which hold controls as a list box option cannot. Give a control in 'end' 'tabindex="-1"' to leave it to the arrow keys and out of the tab order. 'start' and 'reversed' number an ordered list as '<ol>' does. The list writes where the numbers start and which way they run as '--list-first' and '--list-step' on its slot, which the styled tier counts from. Reversed with no 'start' counts down from the number of rows, which a server cannot know, so served markup counts from one until the list runs. */
|
|
14922
16091
|
"helix-headless-list": DefineCustomElement<
|
|
14923
16092
|
HelixHeadlessList,
|
|
14924
16093
|
HelixHeadlessListVueProps,
|
|
14925
16094
|
HelixHeadlessListVueEvents
|
|
14926
16095
|
>;
|
|
14927
|
-
/** 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'. */
|
|
16096
|
+
/** 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, and with 'multiple', Control with Shift and Home or End adds every option from the highlight to that end. 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'. */
|
|
14928
16097
|
"helix-headless-listbox": DefineCustomElement<
|
|
14929
16098
|
HelixHeadlessListbox,
|
|
14930
16099
|
HelixHeadlessListboxVueProps,
|
|
14931
16100
|
HelixHeadlessListboxVueEvents
|
|
14932
16101
|
>;
|
|
14933
|
-
/** 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. */
|
|
16102
|
+
/** 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. A region drawn after the loader is marked when it arrives. **'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. While it waits it carries ':state(waiting)'. */
|
|
14934
16103
|
"helix-headless-loader": DefineCustomElement<
|
|
14935
16104
|
HelixHeadlessLoader,
|
|
14936
16105
|
HelixHeadlessLoaderVueProps,
|
|
@@ -15002,19 +16171,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15002
16171
|
HelixHeadlessMapTerrainVueProps,
|
|
15003
16172
|
HelixHeadlessMapTerrainVueEvents
|
|
15004
16173
|
>;
|
|
15005
|
-
/** A disclosure: a button that shows and hides a region of your own links. It does not use 'role="menu"' or 'menuitem', which are for application commands. Those roles take over the arrow keys, announce "menu" to someone looking for navigation, and put every link inside a role that is not a link. As a disclosure, middle clicks, modified clicks, and the status bar keep working. Use 'Menu' for a row of commands. It renders no links. A router renders its own anchors and cannot render them inside this shadow root, so the panel is a slot for the lists and headings you write. It opens on hover by default, and a press always opens it too. 'open-on' sets which. Hover is the default because in a navigation bar people expect to move along the row and see each section. When one panel opens in place of another, each says which way the reader moved, as Radix's 'data-motion' does
|
|
16174
|
+
/** A disclosure: a button that shows and hides a region of your own links. It does not use 'role="menu"' or 'menuitem', which are for application commands. Those roles take over the arrow keys, announce "menu" to someone looking for navigation, and put every link inside a role that is not a link. As a disclosure, middle clicks, modified clicks, and the status bar keep working. Use 'Menu' for a row of commands. It renders no links. A router renders its own anchors and cannot render them inside this shadow root, so the panel is a slot for the lists and headings you write. It opens on hover by default, and a press always opens it too. 'open-on' sets which. Hover is the default because in a navigation bar people expect to move along the row and see each section. When one panel opens in place of another, each says which way the reader moved, as Radix's 'data-motion' does. Moving toward the end of the bar, the one opening is ':state(from-end)' and the one closing is ':state(to-start)'; moving back, they are ':state(from-start)' and ':state(to-end)'. A stylesheet slides them on that. Start and end follow the reading direction, so on a right-to-left page the end is on the left. A panel that opens or closes on its own carries none of the four. A press on another megamenu's trigger hands over the same way as hovering it. While a panel is open its surface carries its own size, as '--megamenu-surface-inline-size' and '--megamenu-surface-block-size', and a panel that took over from another also carries that one's size, as '--megamenu-from-inline-size' and '--megamenu-from-block-size'. Radix's navigation menu publishes the same pair from its shared viewport, so a stylesheet can grow or shrink one panel into the next. The panel's default slot is the 'columns' part and draws no box, so a sheet can give the columns one of their own. While a panel is open, an 'indicator' slot is rendered beside its trigger, as Radix's indicator marks the open one: slot a mark of your own, such as a bar or an arrow pointing at the panel, and it shows only while the panel is open. The styled tier rests it on the trigger's bottom edge. Left and Right Arrow move between the triggers of the megamenus beside this one, and Home and End go to the first and the last, as Radix's navigation menu does. In a 'Navigation', which holds them in a slot, the arrows are the navigation's, and move between its destinations under its 'arrows'. Down Arrow on the trigger of an open panel moves focus to the panel's first link, Escape closes the panel and returns focus to its trigger, and Tab moves through the panel's links and closes it on the way out. The trigger says 'aria-expanded', and the panel is a group named by 'label'. */
|
|
15006
16175
|
"helix-headless-megamenu": DefineCustomElement<
|
|
15007
16176
|
HelixHeadlessMegamenu,
|
|
15008
16177
|
HelixHeadlessMegamenuVueProps,
|
|
15009
16178
|
HelixHeadlessMegamenuVueEvents
|
|
15010
16179
|
>;
|
|
15011
|
-
/** One element covers three kinds of row, and what you give it decides which: - Content in the 'submenu' slot makes the row open a submenu page. - 'checked' makes the row a choice. - With neither, the row is a command. The role follows the kind. A row with 'checked' is 'menuitemcheckbox' with 'aria-checked', and 'exclusive' makes it 'menuitemradio', for a set where only one can be on. A row that opens a page keeps 'menuitem' and sets 'aria-haspopup'. Choosing a choice row checks or unchecks it before 'helix-select' is sent, so a listener reads the new 'checked'. An 'exclusive' row turns on and turns off the 'exclusive' rows next to it. Cancel 'helix-before-toggle' to keep a row as it is and set 'checked' yourself. The menu sets whether the row's page is showing as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. 'shortcut' shows a row's keyboard shortcut after its label, drawn by 'Kbd' in the platform's glyphs, and gives the row 'aria-keyshortcuts'. It binds nothing: the shortcut is the page's to bind. Other trailing words, such as a count, go in the 'end' slot. */
|
|
16180
|
+
/** One element covers three kinds of row, and what you give it decides which: - Content in the 'submenu' slot makes the row open a submenu page. - 'checked' makes the row a choice. - With neither, the row is a command. The role follows the kind. A row with 'checked' is 'menuitemcheckbox' with 'aria-checked', and 'exclusive' makes it 'menuitemradio', for a set where only one can be on. A row that opens a page keeps 'menuitem' and sets 'aria-haspopup'. Choosing a choice row checks or unchecks it before 'helix-select' is sent, so a listener reads the new 'checked'. An 'exclusive' row turns on and turns off the 'exclusive' rows next to it. Cancel 'helix-before-toggle' to keep a row as it is and set 'checked' yourself. The menu sets whether the row's page is showing as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. 'shortcut' shows a row's keyboard shortcut after its label, drawn by 'Kbd' in the platform's glyphs, and gives the row 'aria-keyshortcuts'. It binds nothing: the shortcut is the page's to bind. Other trailing words, such as a count, go in the 'end' slot. The row is named by its label alone. Words in 'description', a line under the label, and in 'end' describe it instead, through 'aria-describedby', as React Aria's menu item does with its description: a reader hears "Copy", then "Copies the selection". The check mark and the caret are the fallbacks of the 'check' and 'chevron' slots, so a mark of your own replaces either by being slotted. Neither is read as part of the row's name. */
|
|
15012
16181
|
"helix-headless-menu-item": DefineCustomElement<
|
|
15013
16182
|
HelixHeadlessMenuItem,
|
|
15014
16183
|
HelixHeadlessMenuItemVueProps,
|
|
15015
16184
|
HelixHeadlessMenuItemVueEvents
|
|
15016
16185
|
>;
|
|
15017
|
-
/** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Slot a 'helix-button' or 'helix-icon-button' as the trigger, and the menu tells it that it opens a menu and whether the menu is open. A plain '<button>' can only be told by writing attributes onto your markup, which the menu does not do, so give it 'aria-haspopup="menu"' and set its 'aria-expanded' from the 'toggle' event. Submenus drill down. A submenu replaces the panel's content, and a back row returns to the previous page. One panel avoids the diagonal pointer path that side-by-side panels need, stays inside a narrow window, and works on touch screens, which have no hover. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. Group rows under a heading with 'Menu.Section', which is a 'group' named by its heading. Between runs of rows, a '<helix-divider announced>' is a separator a screen reader announces. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. */
|
|
16186
|
+
/** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Slot a 'helix-button' or 'helix-icon-button' as the trigger, and the menu tells it that it opens a menu and whether the menu is open. A plain '<button>' can only be told by writing attributes onto your markup, which the menu does not do, so give it 'aria-haspopup="menu"' and set its 'aria-expanded' from the 'toggle' event. Submenus drill down. A submenu replaces the panel's content, and a back row returns to the previous page. One panel avoids the diagonal pointer path that side-by-side panels need, stays inside a narrow window, and works on touch screens, which have no hover. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. Group rows under a heading with 'Menu.Section', which is a 'group' named by its heading. Between runs of rows, a '<helix-divider announced>' is a separator a screen reader announces. Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first row, and Up Arrow on its last. In the menu, Up and Down Arrow move between rows, Home and End go to the first and the last, a typed letter moves to the next row whose name starts with it, Enter and Space choose, Right Arrow opens a row's submenu and Left Arrow goes back, the two swapping on a right-to-left page, and Escape closes the menu and returns focus to the trigger. Tab closes it and moves on. While it is open, the surface carries the trigger's width as '--floating-anchor-inline-size' and the room left below it as '--floating-available-block-size', as Radix's dropdown menu publishes its trigger's width, for a menu as wide as its trigger: 'helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }'. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. */
|
|
15018
16187
|
"helix-headless-menu": DefineCustomElement<
|
|
15019
16188
|
HelixHeadlessMenu,
|
|
15020
16189
|
HelixHeadlessMenuVueProps,
|
|
@@ -15026,7 +16195,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15026
16195
|
HelixHeadlessMenuSectionVueProps,
|
|
15027
16196
|
HelixHeadlessMenuSectionVueEvents
|
|
15028
16197
|
>;
|
|
15029
|
-
/** A meter shows a level within a range. Use 'Progress' to show how far along a task is. A progress bar starts empty and ends full, and full is always the good end. For a meter, which end is good depends on what is measured. There is no 'indeterminate', because a meter always has a value. **Set 'low', 'high', and 'optimum'**, as defined in the HTML specification. 'low' and 'high' divide the range into a low band, a middle band, and a high band. 'optimum' sets the preferred band. The band next to it is fair, and the band two away is poor. */
|
|
16198
|
+
/** A meter shows a level within a range. Use 'Progress' to show how far along a task is. A progress bar starts empty and ends full, and full is always the good end. For a meter, which end is good depends on what is measured. There is no 'indeterminate', because a meter always has a value. **Set 'low', 'high', and 'optimum'**, as defined in the HTML specification. 'low' and 'high' divide the range into a low band, a middle band, and a high band. 'optimum' sets the preferred band. The band next to it is fair, and the band two away is poor. The band is a custom state on the meter, 'good', 'fair' or 'poor', beside 'over' and 'under' for a value past an end, so a page styles the meter around the fill as well as the fill. **'live' says the reading when it moves into another band**, such as "92%, Poor", in a polite region, for a meter whose value changes while a reader is on the page: a disk filling or a battery draining. The band's word comes from 'band-labels'. */
|
|
15030
16199
|
"helix-headless-meter": DefineCustomElement<
|
|
15031
16200
|
HelixHeadlessMeter,
|
|
15032
16201
|
HelixHeadlessMeterVueProps,
|
|
@@ -15050,19 +16219,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15050
16219
|
HelixHeadlessNotificationVueProps,
|
|
15051
16220
|
HelixHeadlessNotificationVueEvents
|
|
15052
16221
|
>;
|
|
15053
|
-
/** 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. **'load-more' adds a button after the list** that sends 'helix-load-more', for a feed that holds one page of a longer list. Append the next page, set 'loading' while it is on its way, and take 'load-more' off once there is nothing more.
|
|
16222
|
+
/** 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. **'load-more' adds a button after the list** that sends 'helix-load-more', for a feed that holds one page of a longer list. Append the next page, set 'loading' while it is on its way, and take 'load-more' off once there is nothing more. While the feed is loading the button stays, so focus stays on it, and it is 'aria-disabled' and sends nothing. */
|
|
15054
16223
|
"helix-headless-notifications": DefineCustomElement<
|
|
15055
16224
|
HelixHeadlessNotifications,
|
|
15056
16225
|
HelixHeadlessNotificationsVueProps,
|
|
15057
16226
|
HelixHeadlessNotificationsVueEvents
|
|
15058
16227
|
>;
|
|
15059
|
-
/** 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
|
|
16228
|
+
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. On iOS and iPadOS the field is a plain text field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in, and no role description, so VoiceOver says the field is required. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. **Keyboard.** The field is one tab stop, and the stepper buttons are not in the tab order. | Key | What it does | |---|---| | Up, Down | Steps the value up or down by 'step'. | | Page Up, Page Down | Steps by 'large-step' steps, ten by default. | | Home, End | Goes to 'min' or 'max', where there is one. Without one, moves the caret. | | Enter | Commits the typed number and submits the form, as a native field does. | The field has 'role="spinbutton"' with 'aria-valuenow', 'aria-valuemin', 'aria-valuemax', and the formatted text in 'aria-valuetext'. */
|
|
15060
16229
|
"helix-headless-number-input": DefineCustomElement<
|
|
15061
16230
|
HelixHeadlessNumberInput,
|
|
15062
16231
|
HelixHeadlessNumberInputVueProps,
|
|
15063
16232
|
HelixHeadlessNumberInputVueEvents
|
|
15064
16233
|
>;
|
|
15065
|
-
/** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. The tree is one tab stop.
|
|
16234
|
+
/** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. **Keyboard.** The tree is one tab stop, and focus moves from row to row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. | | Right | Opens a closed branch, or moves into an open one. Left on a right-to-left page. | | Left | Closes an open branch, or moves to the parent. Right on a right-to-left page. | | Home, End | Moves to the first or the last row. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. | | Enter, Space | Opens or closes a branch. | | '*' | Opens every branch beside the active row. | | A letter or a word | Moves to the next row whose key starts with what you typed. | | Command+C, Control+C | Copies the active row, where no text is selected. | The tree is a 'treegrid', as React Aria's Tree is: each entry is a 'row' with one cell, and carries its real level, position, and set size, including in a windowed tree. Nothing in it is chosen, so no row carries 'aria-selected', and a focused row is not announced as selected. A reader opening or closing a branch sends 'helix-before-open' or 'helix-before-close', which you can cancel, and then 'toggle' with 'newState' and 'oldState', as '<details>' does. The branch is the active row, and 'expanded' holds every open branch. '*' asks once for all the branches it opens. A script writing 'expanded' or 'active' sends nothing. 'active' is the active row's path, written the way a JSON Pointer writes it: the empty string for the root and '/meta/tags/0' for an entry under it. Moving to another row sends 'helix-before-activate', which you can cancel, and then 'helix-activate', both with the path. Writing 'active' moves there and opens the branches around it, and sends nothing. 'expanded' holds the open branches by path, and writing it opens those and closes the rest. A row that closes around the active one hands it to the nearest open branch. 'filter' narrows the tree to the entries whose key or value holds the text, ignoring case, and the branches that lead to them, which it opens. A matched branch keeps everything under it. Each matched row carries 'row-match', and a screen reader hears how many entries matched from 'result-label' and 'results-label'. 'filterable' adds a field that sets it: typing sends 'helix-filter', which you can cancel, and then 'helix-filtered', and Down moves from the field to the tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
|
|
15066
16235
|
"helix-headless-object-inspector": DefineCustomElement<
|
|
15067
16236
|
HelixHeadlessObjectInspector,
|
|
15068
16237
|
HelixHeadlessObjectInspectorVueProps,
|
|
@@ -15080,7 +16249,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15080
16249
|
HelixHeadlessOptionVueProps,
|
|
15081
16250
|
HelixHeadlessOptionVueEvents
|
|
15082
16251
|
>;
|
|
15083
|
-
/**
|
|
16252
|
+
/** Sets one run of options apart from the next where a heading would say too much, as React Aria's ListBox takes a 'Separator': actions apart from choices in a command palette, say, or the options a reader uses most apart from the rest. It has 'role="separator"', so a screen reader can say where one run ends, and it is no stop: the arrow keys move from the option before it to the one after. The list hides it while a filter is narrowing the options, since a rule between two runs of which only some options are left separates nothing. */
|
|
16253
|
+
"helix-headless-option-separator": DefineCustomElement<
|
|
16254
|
+
HelixHeadlessOptionSeparator,
|
|
16255
|
+
HelixHeadlessOptionSeparatorVueProps,
|
|
16256
|
+
HelixHeadlessOptionSeparatorVueEvents
|
|
16257
|
+
>;
|
|
16258
|
+
/** Outline is a table of contents for a document. 'Navigation' does the same job for a site. The links are your own anchors. A router renders its own '<a>' and cannot render one inside the outline's shadow root, and the hrefs are fragments on the same page. Write the anchors flat, with 'data-level' for their depth, or nested in lists, '<ul><li><a>'. A screen reader hears the levels either way: the outline puts a flat run into lists inside list items of its own, nested by 'data-level', and leaves the links where they are. A link without 'data-level' is at the top level. A heading slotted into 'heading' names the navigation, in place of 'label'. In a contents rail with a scrollbar of its own, 'follow' keeps the link of the section in view showing as the reader scrolls the page. **Keyboard.** The links are your anchors, in the tab order as you wrote them, so the outline adds no keys of its own: Tab moves through the links and Enter follows one. Following a link moves focus to its section, so the next Tab goes on from the heading, also with 'behavior' set. **What a screen reader hears.** A navigation landmark named by 'label', "On this page", or by the slotted heading. The links are lists, nested by level, so a reader hears how many links a level holds and where each one is. The link to the section in view carries 'aria-current="location"', read as "current location", and it moves as the page scrolls without announcing, which would interrupt the reading it follows. The current section is decided by the headings' positions. An 'IntersectionObserver' with a band near the top fails both ways: when headings are far apart, none is in the band and no section is marked, and when they are close together, several are in the band at once. */
|
|
15084
16259
|
"helix-headless-outline": DefineCustomElement<
|
|
15085
16260
|
HelixHeadlessOutline,
|
|
15086
16261
|
HelixHeadlessOutlineVueProps,
|
|
@@ -15092,7 +16267,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15092
16267
|
HelixHeadlessPaginationVueProps,
|
|
15093
16268
|
HelixHeadlessPaginationVueEvents
|
|
15094
16269
|
>;
|
|
15095
|
-
/** A separate element that you place beside 'Pagination', like 'Pagination.Summary', so you choose the direction and order of your footer. It uses 'Select', so it matches a table's filter dropdowns in the same footer, both open and closed. The caret is 'Select''s, so it follows 'currentColor', and the label is a real '<label for>' pointing at the trigger's id. The label sits on the same row as the select. 'Select''s host is a column, and an outer-tree rule overrides a ':host' rule, so the row layout needs no property on 'Select' and nothing added to your markup. An empty 'sizes' renders nothing and does not fall back to the built-in list. 'Pagination' does the same with a single page, and both report it through 'ElementInternals.states'. 'value' is the current size, and 'default-value' is the size from the markup. Changing it dispatches 'helix-before-change', and then 'input' and 'change' once the size has moved, as a native '<select>' sends them together. Re-querying and returning to page one is up to you, because only you know whether the current position should be kept. It takes part in a form. Give it a 'name' and the size in force is submitted under that name, so a 'GET' form carries it in the address beside the page. A form reset returns it to 'default-value', and 'disabled', or a disabled '<fieldset>' around it, turns the select off. */
|
|
16270
|
+
/** A separate element that you place beside 'Pagination', like 'Pagination.Summary', so you choose the direction and order of your footer. It uses 'Select', so it matches a table's filter dropdowns in the same footer, both open and closed. The caret is 'Select''s, so it follows 'currentColor', and the label is a real '<label for>' pointing at the trigger's id. A '<label for>' pointing at this element, or its own 'aria-label' or 'aria-labelledby', names the select in place of 'label', so a reader hears the page's words for it, and the select draws no label of its own beside the page's. The label sits on the same row as the select. 'Select''s host is a column, and an outer-tree rule overrides a ':host' rule, so the row layout needs no property on 'Select' and nothing added to your markup. An empty 'sizes' renders nothing and does not fall back to the built-in list. 'Pagination' does the same with a single page, and both report it through 'ElementInternals.states'. 'value' is the current size, and 'default-value' is the size from the markup. Changing it dispatches 'helix-before-change', and then 'input' and 'change' once the size has moved, as a native '<select>' sends them together. Re-querying and returning to page one is up to you, because only you know whether the current position should be kept. It takes part in a form. Give it a 'name' and the size in force is submitted under that name, so a 'GET' form carries it in the address beside the page. A form reset returns it to 'default-value', and 'disabled', or a disabled '<fieldset>' around it, turns the select off. */
|
|
15096
16271
|
"helix-headless-pagination-size": DefineCustomElement<
|
|
15097
16272
|
HelixHeadlessPaginationSize,
|
|
15098
16273
|
HelixHeadlessPaginationSizeVueProps,
|
|
@@ -15104,37 +16279,37 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15104
16279
|
HelixHeadlessPaginationSummaryVueProps,
|
|
15105
16280
|
HelixHeadlessPaginationSummaryVueEvents
|
|
15106
16281
|
>;
|
|
15107
|
-
/**
|
|
16282
|
+
/** One real '<input>' holds the code, and the boxes are drawn from it, as Web Awesome's OTP input does. A screen reader meets one field, named by the label, and the code never sits in a row of separate fields. The boxes are hidden from it. The caret is drawn in the box it is in, and the box is marked with 'cell-active' while the field has focus. A filled box selects its character, so typing replaces it and moves on. Input longer than one character is treated as a paste. This covers pasting, a browser autofilling an SMS code, and a password manager. A six-character code pasted into an empty field fills from the first box. The code is one value to a form. The field is in a shadow root and submits nothing. The host is form-associated and submits the code, which also carries validity and responds to a form reset. The field carries 'autocomplete="one-time-code"', which lets a phone offer the code from a message. '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. 'mask' makes the field a password field and draws 'mask-character' in each filled box, so the code is never drawn as text. The row of boxes 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. **Keyboard.** The field is one tab stop. | Key | What it does | |---|---| | A character | Fills the box and moves to the next one. A longer run is read as a paste. | | Left, Right | Moves to the box before or after. | | Home, End | Moves to the first box, or to the box after the last character. | | Backspace | Removes the character in the box, or in an empty box the one before it, and moves there. | | Delete | Removes the character in the box and pulls the rest of the code back. | | Enter | Submits the form. | The field is a text field, or a password field under 'mask', named by the label and described by the hint and the message, with 'aria-invalid' while a message shows and 'aria-required' under 'required'. 'helix-complete' is a 'HelixCompleteEvent' sent once the last box is filled. */
|
|
15108
16283
|
"helix-headless-pin-input": DefineCustomElement<
|
|
15109
16284
|
HelixHeadlessPinInput,
|
|
15110
16285
|
HelixHeadlessPinInputVueProps,
|
|
15111
16286
|
HelixHeadlessPinInputVueEvents
|
|
15112
16287
|
>;
|
|
15113
|
-
/** 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.
|
|
16288
|
+
/** 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. A Helix trigger is told whether the popover is open inside its own shadow root. On a plain element, such as a '<button>', the popover writes 'aria-expanded' only once a reader has pressed it, which is after any hydration, and never where you wrote 'aria-expanded' yourself. It writes nothing else onto your markup. 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. The rest of the page is hidden from screen readers with 'aria-hidden' while it is open, so the virtual cursor stays in the panel too. 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); } ''' */
|
|
15114
16289
|
"helix-headless-popover": DefineCustomElement<
|
|
15115
16290
|
HelixHeadlessPopover,
|
|
15116
16291
|
HelixHeadlessPopoverVueProps,
|
|
15117
16292
|
HelixHeadlessPopoverVueEvents
|
|
15118
16293
|
>;
|
|
15119
|
-
/** Determinate by default. Set 'indeterminate' for a task whose total is not known yet. Use 'Loader' for a short wait or one with no place of its own on the page. The indeterminate bar runs a segment across the track and does not fill, so it shows that work is happening without claiming a proportion. 'aria-valuenow' is omitted in that state, which is the platform's signal for the same thing. The fill is a fraction of the track, written as a custom property. */
|
|
16294
|
+
/** Determinate by default. Set 'indeterminate' for a task whose total is not known yet. Use 'Loader' for a short wait or one with no place of its own on the page. The indeterminate bar runs a segment across the track and does not fill, so it shows that work is happening without claiming a proportion. 'aria-valuenow' is omitted in that state, which is the platform's signal for the same thing. The fill is a fraction of the track, written as a custom property. **Reaching 'max' is said and sent.** When the value arrives at 'max' from below, the bar says 'complete-label', "Complete" by default, in a polite 'live' region and sends 'helix-complete', so a reader hears that the work is done and a page can move on. A bar that starts full says nothing, and an empty 'complete-label' keeps it quiet. The 'complete' custom state is set while the bar is full. */
|
|
15120
16295
|
"helix-headless-progress": DefineCustomElement<
|
|
15121
16296
|
HelixHeadlessProgress,
|
|
15122
16297
|
HelixHeadlessProgressVueProps,
|
|
15123
16298
|
HelixHeadlessProgressVueEvents
|
|
15124
16299
|
>;
|
|
15125
|
-
/** 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
|
|
16300
|
+
/** 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 'label' to what the code is for, such as "Open the menu". With no 'label', a code is named by 'code-label', "QR code", followed by its value where the value is a web address, which a URL read aloud makes a destination. Any other value is never read out: a code that sets up an authenticator or joins a network carries a secret in it. 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: the element fires 'error', carries ':state(overflow)', and shows what is in the 'fallback' slot, such as the link written out. 'toSvg()', 'toPng()' and 'download()' give the drawn code as a file of its own, in the colors it is drawn in, with a slotted image or SVG logo where it sits, for a page that offers it to save or print, as Zag's download trigger does. */
|
|
15126
16301
|
"helix-headless-qr-code": DefineCustomElement<
|
|
15127
16302
|
HelixHeadlessQrCode,
|
|
15128
16303
|
HelixHeadlessQrCodeVueProps,
|
|
15129
16304
|
HelixHeadlessQrCodeVueEvents
|
|
15130
16305
|
>;
|
|
15131
|
-
/** Renders a real '<q>', so the browser supplies the quotation marks. It inserts the correct marks for the document's language and nests them correctly when one quotation sits inside another. Do not type quotation marks into the content. For a passage set off from the surrounding text, use a blockquote. */
|
|
16306
|
+
/** Renders a real '<q>', so the browser supplies the quotation marks. It inserts the correct marks for the document's language and nests them correctly when one quotation sits inside another. Do not type quotation marks into the content: one that starts or ends with a typed mark warns once, with the runtime kind 'typed-marks'. A quotation in a language other than the page's takes 'lang' on the element, and its marks follow it: 'lang="de"' sets „…“ and 'lang="fr"' «…» inside an English page. For a passage set off from the surrounding text, use a blockquote. */
|
|
15132
16307
|
"helix-headless-quote": DefineCustomElement<
|
|
15133
16308
|
HelixHeadlessQuote,
|
|
15134
16309
|
HelixHeadlessQuoteVueProps,
|
|
15135
16310
|
HelixHeadlessQuoteVueEvents
|
|
15136
16311
|
>;
|
|
15137
|
-
/** 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. */
|
|
16312
|
+
/** 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. **Keyboard.** The group is one tab stop: the chosen radio, or the first that can be chosen. | Key | What it does | |---|---| | Right, Down | Chooses the next radio, from the last back to the first. | | Left, Up | Chooses the radio before, from the first round to the last. | | Home, End | Chooses the first or the last radio. | | Space, Enter | Chooses the focused radio. | Left and Right swap on a right-to-left page, and a disabled radio is passed over. Under 'readonly' the arrows move focus and choose nothing. The group is a 'radiogroup' named by 'label', and each radio is a 'role="radio"' button with 'aria-checked'. */
|
|
15138
16313
|
"helix-headless-radio-group": DefineCustomElement<
|
|
15139
16314
|
HelixHeadlessRadioGroup,
|
|
15140
16315
|
HelixHeadlessRadioGroupVueProps,
|
|
@@ -15146,19 +16321,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15146
16321
|
HelixHeadlessRadioVueProps,
|
|
15147
16322
|
HelixHeadlessRadioVueEvents
|
|
15148
16323
|
>;
|
|
15149
|
-
/** 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'. */
|
|
16324
|
+
/** 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'. **Keyboard.** The marks are one tab stop, on the chosen score or the first. | Key | What it does | |---|---| | Right, Down | Chooses the next score up, and stops at the highest. | | Left, Up | Chooses the next score down, and stops at the lowest. | | Home, End | Chooses the lowest or the highest score. | | Space, Enter | Chooses the focused score, or clears it under 'clearable' when it is already chosen. | | Backspace, Delete | Clears the rating, under 'clearable'. | Left and Right swap on a right-to-left page. The marks are a 'radiogroup' named by 'label', and each score is a 'radio' named by 'option-label', such as "3 out of 5". A read-only rating is one 'img' named by its score. */
|
|
15150
16325
|
"helix-headless-rating": DefineCustomElement<
|
|
15151
16326
|
HelixHeadlessRating,
|
|
15152
16327
|
HelixHeadlessRatingVueProps,
|
|
15153
16328
|
HelixHeadlessRatingVueEvents
|
|
15154
16329
|
>;
|
|
15155
|
-
/** 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. */
|
|
16330
|
+
/** 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. 'trend' draws each series' line of best fit, by least squares, across the plot in the series' color. **'size-by' names a third measure, drawn as each point's size**, as a bubble chart does: 'size-by="Population"' takes that column out of the series and gives each point an area in proportion to its row's number there. The tooltip and the table still say the number. 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. */
|
|
15156
16331
|
"helix-headless-scatter-chart": DefineCustomElement<
|
|
15157
16332
|
HelixHeadlessScatterChart,
|
|
15158
16333
|
HelixHeadlessScatterChartVueProps,
|
|
15159
16334
|
HelixHeadlessScatterChartVueEvents
|
|
15160
16335
|
>;
|
|
15161
|
-
/** Measures which edges have content past them and sets one custom state per edge. CSS cannot read scroll position, so a stylesheet cannot work this out on its own. The styled tier draws a fade on each edge that has a state. Custom states keep an element that upgrades after a framework rendered it from adding markup the framework did not write. Select them with ':host(:state(more-block-end))'. While the content overflows, the region gets a 'tabindex', so keyboard users can scroll it. When nothing overflows, it is not a tab stop. It has 'role="region"' only when you set a 'label', because a screen reader announces an unnamed region as only "region". **'scrollbars' draws scrollbars of its own** in place of the browser's: a 'scrollbar' part for each axis that scrolls, a 'thumb' in each, and a 'corner' where the two meet. They are for the pointer. The thumb drags, and a press on the track moves the thumb to the press. The viewport stays the tab stop and the region a screen reader reads, and the scrollbars are hidden from screen readers. On the headless tier your stylesheet sizes and places them, hides the browser's own with 'scrollbar-width: none' on the viewport, and draws the thumb from the two custom properties written on each scrollbar. An axis whose 'overflow' is 'hidden' gets no scrollbar. The viewport's 'scroll' and 'scrollend' are sent again from the host, which is the element you hold. In React, bind them with 'onScroll' and 'onScrollEnd'. */
|
|
16336
|
+
/** Measures which edges have content past them and sets one custom state per edge. CSS cannot read scroll position, so a stylesheet cannot work this out on its own. The styled tier draws a fade on each edge that has a state. Custom states keep an element that upgrades after a framework rendered it from adding markup the framework did not write. Select them with ':host(:state(more-block-end))'. While the content overflows, the region gets a 'tabindex', so keyboard users can scroll it. When nothing overflows, it is not a tab stop. It has 'role="region"' only when you set a 'label', because a screen reader announces an unnamed region as only "region". **'scrollbars' draws scrollbars of its own** in place of the browser's: a 'scrollbar' part for each axis that scrolls, a 'thumb' in each, and a 'corner' where the two meet. They are for the pointer. The thumb drags, and a press on the track moves the thumb to the press. The viewport stays the tab stop and the region a screen reader reads, and the scrollbars are hidden from screen readers. On the headless tier your stylesheet sizes and places them, hides the browser's own with 'scrollbar-width: none' on the viewport, and draws the thumb from the two custom properties written on each scrollbar. An axis whose 'overflow' is 'hidden' gets no scrollbar. **'orientation' keeps the content to one axis.** 'vertical' scrolls up and down only, and 'horizontal' sideways only, so the other axis has no scrollbar, the browser's or the component's, and clips what is past it. Leave it unset to scroll both ways. The viewport's 'scroll' and 'scrollend' are sent again from the host, which is the element you hold. A thumb dragged across the content sends one 'scrollend', once it is let go. In React, bind them with 'onScroll' and 'onScrollEnd'. **Keyboard.** The viewport is the tab stop while the content overflows, and the browser's scrolling keys move it: the arrow keys, Page Up and Page Down, Home and End, and Space. The scrollbars take no focus. */
|
|
15162
16337
|
"helix-headless-scroll-area": DefineCustomElement<
|
|
15163
16338
|
HelixHeadlessScrollArea,
|
|
15164
16339
|
HelixHeadlessScrollAreaVueProps,
|
|
@@ -15182,13 +16357,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15182
16357
|
HelixHeadlessSkipLinkVueProps,
|
|
15183
16358
|
HelixHeadlessSkipLinkVueEvents
|
|
15184
16359
|
>;
|
|
15185
|
-
/** 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. */
|
|
16360
|
+
/** Renders a native '<input type="range">', so the drag, the arrow keys, Home, End, the page keys, and the touch target come from the platform. A native range has a hit area larger than its thumb, sized for a finger. The value is a string, like every other form control's, and 'MixinControllerValue' holds text. Use 'valueAsNumber' for arithmetic. Marks are drawn by the component. The ticks of a '<datalist>' cannot be styled, and Firefox does not render them for a range. Marks are decoration. 'step' sets where the value can land, and the input enforces it whether or not marks are drawn. 'markers' is a count, so a slider from zero to a hundred does not draw a hundred and one marks by accident. A range with two thumbs is two inputs stacked on one track, because there is no native two-thumb range. Each thumb keeps its own value. 'min-steps-between-thumbs' keeps them that many steps apart, and the readout joins the two as 'range-text' writes them. 'origin' sets where a single thumb's fill starts: at 'min', at the middle of the track, or at 'max'. A balance or an offset from zero fills from the middle, as Zag's slider 'origin' does. The fill's ends are published as '--slider-from' and '--slider-to'. 'format-options' writes the value with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, and 'formatter' writes it with a function of your own, such as words for a scale. Either one is what a screen reader hears, what the readout shows and what the marker labels say. 'value-text' still wraps it in a sentence, with the formatted value in its place. 'required' comes with the field mixin and cannot fail. A range is never empty: the platform shows its midpoint when no value is set, and 'willUpdate' seeds that midpoint into 'defaultValue', so the value matches the handle from the first render. HTML does not apply 'required' to a range either, so it is not set on the input. It only adds the marker beside the label. **Keyboard.** Each thumb is one tab stop, and its keys are the native range's. | Key | What it does | |---|---| | Right, Up | Moves the thumb up by 'step'. | | Left, Down | Moves the thumb down by 'step'. | | Page Up, Page Down | Moves the thumb by a larger step. | | Home, End | Moves the thumb to its lowest or highest value. | Each thumb is an '<input type="range">' with 'aria-valuetext' where the value is formatted or worded. A range's thumbs say they stop at each other with 'aria-valuemin' and 'aria-valuemax'. */
|
|
15186
16361
|
"helix-headless-slider": DefineCustomElement<
|
|
15187
16362
|
HelixHeadlessSlider,
|
|
15188
16363
|
HelixHeadlessSliderVueProps,
|
|
15189
16364
|
HelixHeadlessSliderVueEvents
|
|
15190
16365
|
>;
|
|
15191
|
-
/** Takes its numbers from the 'values' attribute. The other charts read a table, but a table behind a small trend line would be read aloud row by row. Set 'values' to the data and 'label' to the one sentence a screen reader announces. Use 'for' when a sparkline has a real table behind it. 'for' wins when both are set. Without a 'label' the sparkline is decorative and 'aria-hidden', for example beside a stat that already says "Sessions, 1,102". With a 'label' it is
|
|
16366
|
+
/** Takes its numbers from the 'values' attribute. The other charts read a table, but a table behind a small trend line would be read aloud row by row. Set 'values' to the data and 'label' to the one sentence a screen reader announces. Use 'for' when a sparkline has a real table behind it. 'for' wins when both are set. Without a 'label' the sparkline is decorative and 'aria-hidden', for example beside a stat that already says "Sessions, 1,102". With a 'label' it is named by that sentence and read by key, as every chart is: the drawing takes focus, the arrow keys walk the readings, Home and End go to the first and the last, Escape puts the reading away, and the 'live' part says each reading with where it stands, such as "Mon: 12 (3 of 7)". **A named sparkline describes itself.** Beside its name, a screen reader hears what the readings come to, the first and the last, the highest and the lowest, in 'overview-label': "From 12 to 20, highest 30, lowest 8". An 'aria-label' on the element names it as 'label' does. A pointer resting on the drawing shows the reading under it: the 'cursor' part marks it and the 'readout' part writes it. 'marks' adds a mark on the highest and the lowest reading, and 'range' draws a band between two values, such as a normal range. A blank cell in a 'for' table is a gap in the line, and a reading alone between two blanks is a 'lone' mark. Place it beside a 'Stat', because a change beside a figure is a second fact, as 'Stat''s own spec says. 'Trend' is composed the same way. The component writes the properties listed below, and the stylesheet that draws the sparkline reads them. Do not set them yourself. They carry numbers the component computes and CSS cannot, so a stylesheet can draw the sparkline without measuring anything. */
|
|
15192
16367
|
"helix-headless-sparkline": DefineCustomElement<
|
|
15193
16368
|
HelixHeadlessSparkline,
|
|
15194
16369
|
HelixHeadlessSparklineVueProps,
|
|
@@ -15218,13 +16393,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15218
16393
|
HelixHeadlessStatGroupVueProps,
|
|
15219
16394
|
HelixHeadlessStatGroupVueEvents
|
|
15220
16395
|
>;
|
|
15221
|
-
/** The label comes first in the markup and the value after it, so a screen reader reads what the figure counts before the number. Visually, the number stands out either way. Both are bare slots. An element that assigned itself a slot on connect would add an attribute after upgrade, which markup rendered on the server by React does not have. */
|
|
16396
|
+
/** The label comes first in the markup and the value after it, so a screen reader reads what the figure counts before the number. Visually, the number stands out either way. Both are bare slots. An element that assigned itself a slot on connect would add an attribute after upgrade, which markup rendered on the server by React does not have. **A stat with a label is a group named by it**, so a reader moving through a dashboard hears "Revenue, group" and then the figure, its unit and its trend as one reading, rather than a run of loose words. The role and the name are set through 'ElementInternals' once the label is known, which writes no attribute; a stat with no label has no role. Put a 'Trend' in the 'trend' slot to have it read inside the group, after the figure it qualifies. */
|
|
15222
16397
|
"helix-headless-stat": DefineCustomElement<
|
|
15223
16398
|
HelixHeadlessStat,
|
|
15224
16399
|
HelixHeadlessStatVueProps,
|
|
15225
16400
|
HelixHeadlessStatVueEvents
|
|
15226
16401
|
>;
|
|
15227
|
-
/** 'active' sets where the user is, and 'complete' stays on each step. Returning to stage one of three leaves stages one and two finished, so the root sets 'current' on the steps and never changes 'complete'. 'active' is optional. Without it, each step keeps its own 'current', so the sequence is correct in the server's markup, where the root cannot count its slotted children. 'linear' keeps a reader from passing a stage they have not finished, as Ark UI's linear steps do: a stage ahead is out of reach, and its button disabled, until every stage before it is 'complete' or 'optional'. Going back is always allowed. To check a stage before a reader
|
|
16402
|
+
/** 'active' sets where the user is, and 'complete' stays on each step. Returning to stage one of three leaves stages one and two finished, so the root sets 'current' on the steps and never changes 'complete'. 'active' is optional. Without it, each step keeps its own 'current', so the sequence is correct in the server's markup, where the root cannot count its slotted children. 'linear' keeps a reader from passing a stage they have not finished, as Ark UI's linear steps do: a stage ahead is out of reach, and its button disabled, until every stage before it is 'complete' or 'optional'. Going back is always allowed. 'next()' and 'previous()' move one stage either way, under the same rules, for your own buttons. To check a stage before a reader moves on from it, set 'validate' to a function that answers whether the stage is valid, as Ark UI's 'isStepValid' does. Moving forward asks it about the stage the reader is on, and where it answers 'false' the reader stays and the stage is ':state(invalid)' until it answers 'true'. An 'optional' stage is not asked. 'helix-before-activate' is still sent for every move, for a check of your own. 'progress' is how far through the sequence is, from 0 to 100: the share of its stages that are 'complete'. The 'progress' part carries it as a 'progressbar' and as '--steps-progress', and is hidden until a stylesheet gives it a 'display', so a bar of your own costs nothing until you draw it. A screen reader hears it as 'progress-label' says, "33% complete" unless set, as Ark UI's steps write it. The sequence is ':state(complete)' once every stage is. The sequence is a list named by 'label', and each step a list item. The current stage's button says 'aria-current="step"', and a finished stage's button is described by its 'complete-label'. */
|
|
15228
16403
|
"helix-headless-steps": DefineCustomElement<
|
|
15229
16404
|
HelixHeadlessSteps,
|
|
15230
16405
|
HelixHeadlessStepsVueProps,
|
|
@@ -15236,7 +16411,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15236
16411
|
HelixHeadlessStepVueProps,
|
|
15237
16412
|
HelixHeadlessStepVueEvents
|
|
15238
16413
|
>;
|
|
15239
|
-
/** A switch turns something on or off right away, and a checkbox is an answer the form submits later. A screen reader announces 'role="switch"' as "on" or "off", and people expect the change to take effect immediately. A switch is as common outside a form as inside one. It renders a real '<input type="checkbox">' with 'role="switch"', the pairing ARIA describes. The input is what a form submits and what a label forwards a press to, and the role is what a screen reader announces. The label sits beside the switch, inside the '<label>' that forwards the press, the same as a checkbox. The hint and the message go below the row, because the switch and its label share one line. */
|
|
16414
|
+
/** A switch turns something on or off right away, and a checkbox is an answer the form submits later. A screen reader announces 'role="switch"' as "on" or "off", and people expect the change to take effect immediately. A switch is as common outside a form as inside one. It renders a real '<input type="checkbox">' with 'role="switch"', the pairing ARIA describes. The input is what a form submits and what a label forwards a press to, and the role is what a screen reader announces. The label sits beside the switch, inside the '<label>' that forwards the press, the same as a checkbox. The hint and the message go below the row, because the switch and its label share one line. **Keyboard.** The switch is one tab stop. | Key | What it does | |---|---| | Space | Turns the switch on or off, as a native checkbox does. | The input carries 'role="switch"', so a screen reader says "on" or "off". 'aria-readonly' is set under 'readonly', and 'aria-invalid' and 'aria-describedby' point at the message while one shows. */
|
|
15240
16415
|
"helix-headless-switch": DefineCustomElement<
|
|
15241
16416
|
HelixHeadlessSwitch,
|
|
15242
16417
|
HelixHeadlessSwitchVueProps,
|
|
@@ -15254,25 +16429,25 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15254
16429
|
HelixHeadlessTableColumnVueProps,
|
|
15255
16430
|
HelixHeadlessTableColumnVueEvents
|
|
15256
16431
|
>;
|
|
15257
|
-
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. A column with 'sortable' and a 'field' sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 'helix-sort' asks first,
|
|
16432
|
+
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. For a grid a reader moves through with the arrow keys, with typeahead and range selection, use 'DataTable'. To act on one row, put a link or a button in a cell. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
|
|
15258
16433
|
"helix-headless-table": DefineCustomElement<
|
|
15259
16434
|
HelixHeadlessTable,
|
|
15260
16435
|
HelixHeadlessTableVueProps,
|
|
15261
16436
|
HelixHeadlessTableVueEvents
|
|
15262
16437
|
>;
|
|
15263
|
-
/** The row renders its cells straight through and lays out none of them, so a stylesheet can place them in the table's grid and every column lines up across rows. The row still exists as an element, so you can style it, hide it, or make it interactive. In a 'selectable' table the row draws a checkbox cell before its own cells, and 'value' is the key the table's 'selected' lists it by. */
|
|
16438
|
+
/** The row renders its cells straight through and lays out none of them, so a stylesheet can place them in the table's grid and every column lines up across rows. The row still exists as an element, so you can style it, hide it, or make it interactive. In a 'selectable' table the row draws a checkbox cell before its own cells, and 'value' is the key the table's 'selected' lists it by. **'href' makes the whole row a link**, as a row action does in React Aria's table: a press anywhere on the row follows it, except on a link or a control of the row's own, and Control, Command or Shift open it the way they open a link. A drag that selects text follows nothing. A row in a table is not a stop of its own, so put the same link in a cell, usually the row header, which is what the keyboard and a screen reader reach. */
|
|
15264
16439
|
"helix-headless-table-row": DefineCustomElement<
|
|
15265
16440
|
HelixHeadlessTableRow,
|
|
15266
16441
|
HelixHeadlessTableRowVueProps,
|
|
15267
16442
|
HelixHeadlessTableRowVueEvents
|
|
15268
16443
|
>;
|
|
15269
|
-
/** An inactive panel is hidden and stays mounted. Anything typed into it is still there when the person comes back, and the content of every panel is in the server-rendered markup for crawlers, whichever tab is open. The host is the 'tabpanel' while its tab is selected, through 'ElementInternals', so the tab's 'aria-controls' can reach it from the tab's shadow root. The box inside
|
|
16444
|
+
/** An inactive panel is hidden and stays mounted. Anything typed into it is still there when the person comes back, and the content of every panel is in the server-rendered markup for crawlers, whichever tab is open. The host is the 'tabpanel' while its tab is selected, through 'ElementInternals', so the tab's 'aria-controls' can reach it from the tab's shadow root. The box inside is a tab stop only while the panel holds nothing focusable, as the ARIA tabs pattern and React Aria's tab panel do: Tab from the tab list lands on the panel's first link or control where there is one, and on the panel itself where there is none. */
|
|
15270
16445
|
"helix-headless-tab-panel": DefineCustomElement<
|
|
15271
16446
|
HelixHeadlessTabPanel,
|
|
15272
16447
|
HelixHeadlessTabPanelVueProps,
|
|
15273
16448
|
HelixHeadlessTabPanelVueEvents
|
|
15274
16449
|
>;
|
|
15275
|
-
/** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link,
|
|
16450
|
+
/** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link. Where any tab is a link, the arrow keys move focus without choosing on every tab of the list, as under 'manual', so arrowing past a tab never leaves the page and the list answers the keys one way. Mark the tab of the page you are on with 'selected', or set 'active' to its value. Each tab says which panel it controls through 'aria-controls', set as an element reference to the panel's host, where the engine has reflection. Keys, on the tab list: Left and Right Arrow move between tabs, and so do Up and Down; Home and End go to the first and the last. The horizontal arrows follow the reading direction, so on a right-to-left page Left moves on. Disabled tabs are passed over. Tab leaves the list for the selected panel, which is a tab stop only while it holds nothing focusable. The 'indicator' part moves to the selected tab and carries its place and size, so a mark of your own can be drawn there: style the part, or slot an element into 'indicator', which sits inside the part and reads the same properties. */
|
|
15276
16451
|
"helix-headless-tabs": DefineCustomElement<
|
|
15277
16452
|
HelixHeadlessTabs,
|
|
15278
16453
|
HelixHeadlessTabsVueProps,
|
|
@@ -15284,7 +16459,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15284
16459
|
HelixHeadlessTabVueProps,
|
|
15285
16460
|
HelixHeadlessTabVueEvents
|
|
15286
16461
|
>;
|
|
15287
|
-
/** 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'. */
|
|
16462
|
+
/** 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. A selected tag that is removed leaves 'value', which then sends 'change'. Name the set with 'label'. Each tag is named by its words alone, without its remove button. 'value' takes an array of values on the property as well, as React sets 'value={['Apple']}'; a press writes it back as a string. **Removing the last tag keeps focus in the group.** With no tags left the set is a 'group', and focus moves to its 'empty' part, which holds the 'empty' slot: put words there such as "No filters" for a reader to hear. With nothing slotted it says 'empty-label', "No tags". */
|
|
15288
16463
|
"helix-headless-tag-group": DefineCustomElement<
|
|
15289
16464
|
HelixHeadlessTagGroup,
|
|
15290
16465
|
HelixHeadlessTagGroupVueProps,
|
|
@@ -15296,7 +16471,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15296
16471
|
HelixHeadlessTagVueProps,
|
|
15297
16472
|
HelixHeadlessTagVueEvents
|
|
15298
16473
|
>;
|
|
15299
|
-
/** 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. */
|
|
16474
|
+
/** 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. 'clearable' draws a button that empties the field while it holds text, and sends 'helix-clear', as 'Input' does. 'validate' adds your own rule, run on every change once the browser finds nothing wrong, as React Aria's TextField 'validate' does. **Keyboard.** The field's own keys are the platform's, and Enter starts a new line. The clear button under 'clearable' is a tab stop of its own after the field. The inner textarea is named by 'label', or by a host 'aria-label', 'aria-labelledby' or '<label for>', and is described by the hint and the message, with 'aria-invalid' while a message shows. The clear button is named 'clear-label'. */
|
|
15300
16475
|
"helix-headless-textarea": DefineCustomElement<
|
|
15301
16476
|
HelixHeadlessTextarea,
|
|
15302
16477
|
HelixHeadlessTextareaVueProps,
|
|
@@ -15332,19 +16507,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15332
16507
|
HelixHeadlessTimelineVueProps,
|
|
15333
16508
|
HelixHeadlessTimelineVueEvents
|
|
15334
16509
|
>;
|
|
15335
|
-
/** 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.
|
|
16510
|
+
/** 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. Give it a 'heading' and a 'description', and the heading names it and the description describes it, for a message with a title and a line of detail. The region says each message once as it arrives, a 'danger' one assertively, so a message is never a live region of its own. 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. */
|
|
15336
16511
|
"helix-headless-toast-item": DefineCustomElement<
|
|
15337
16512
|
HelixHeadlessToastItem,
|
|
15338
16513
|
HelixHeadlessToastItemVueProps,
|
|
15339
16514
|
HelixHeadlessToastItemVueEvents
|
|
15340
16515
|
>;
|
|
15341
|
-
/** 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
|
|
16516
|
+
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is a landmark named by 'label', and it says each message once as it arrives**: a 'danger' message assertively, and every other one politely. It says the word for the tone, the heading, the description and the text, and not the actions, through two live regions of its own, the 'live' parts, which it empties again a moment later. The stack itself is not a live region, so a message is never said twice, and changing the words of a message already showing says nothing. Each message is an 'alertdialog' named by its words, so a reader who moves into the stack hears which message they are on. **'hotkey' takes focus to the stack and back**, F8 unless you set it, and 'label' says which key: '{hotkey}' in it is filled in, so the default name is "Notifications (F8)". Pressed while focus is in the stack, it gives focus back to where it was. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. **'add()' shows a message from script**, for a page with no framework state to render them from: it appends a message of the region's own tier and removes it once it has been dismissed and has finished leaving. Messages you render yourself stay yours, and the region never removes them. A touch or a pen swipes a message away toward the end of the line. **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. */
|
|
15342
16517
|
"helix-headless-toast": DefineCustomElement<
|
|
15343
16518
|
HelixHeadlessToast,
|
|
15344
16519
|
HelixHeadlessToastVueProps,
|
|
15345
16520
|
HelixHeadlessToastVueEvents
|
|
15346
16521
|
>;
|
|
15347
|
-
/** 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. */
|
|
16522
|
+
/** 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. Use 'values' where an item's value holds a comma. The form receives one entry per pressed value, and a page the browser brings back presses the same items again. The indicator stays hidden, and each pressed item is marked with ':state(pressed)'. Inside a toolbar it is a named group of that toolbar's controls instead, so a reader meets one toolbar. 'orientation="vertical"' runs the items down a column, says so to the accessibility tree, and the up and down arrows move between them. **Keyboard.** The group is one tab stop: the chosen item, or the first that can be chosen, as in a radio group, and in a multiple group the item focus was last on. | Key | What it does | |---|---| | Right, Down | Moves to the next item, from the last back to the first. In a single group, chooses it. | | Left, Up | Moves to the item before, from the first round to the last. In a single group, chooses it. | | Home, End | Moves to the first or the last item. In a single group, chooses it. | | Space, Enter | Chooses the focused item, or presses or releases it in a multiple group. | Left and Right swap on a right-to-left page, and a disabled item is passed over. A single group is a 'radiogroup' of items with 'role="radio"' and 'aria-checked'. A multiple group is a 'toolbar' of buttons with 'aria-pressed', or a 'group' inside a toolbar. The group is named by 'label' and carries 'aria-orientation' under 'orientation'. */
|
|
15348
16523
|
"helix-headless-toggle-group": DefineCustomElement<
|
|
15349
16524
|
HelixHeadlessToggleGroup,
|
|
15350
16525
|
HelixHeadlessToggleGroupVueProps,
|
|
@@ -15356,19 +16531,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15356
16531
|
HelixHeadlessToggleVueProps,
|
|
15357
16532
|
HelixHeadlessToggleVueEvents
|
|
15358
16533
|
>;
|
|
15359
|
-
/** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. A child that takes no focus, such as a divider, is skipped. A menu is reached at its trigger. Controls inside a plain wrapper, such as a 'Button Group', are each a stop of the toolbar's own, as React Aria's toolbar flattens a group: the arrows walk through the group's buttons and on past it, and the group takes no tab stop of its own. The arrows wrap from the last control to the first. Set 'stop-at-ends' to keep them at the ends, as Radix's 'loop' set to false does. A nested composite, such as a toggle group, is one stop on the toolbar's axis: the toolbar's arrows move past it, and the arrows across the toolbar move inside it. A composite with a 'focusable' property, as Toggle Group has, gives up its own tab stop while the toolbar's is elsewhere, so Tab stops once in the toolbar. A composite without one keeps its own tab stop. */
|
|
16534
|
+
/** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. A child that takes no focus, such as a divider, is skipped. A menu is reached at its trigger. Controls inside a plain wrapper, such as a 'Button Group', are each a stop of the toolbar's own, as React Aria's toolbar flattens a group: the arrows walk through the group's buttons and on past it, and the group takes no tab stop of its own. The arrows wrap from the last control to the first. Set 'stop-at-ends' to keep them at the ends, as Radix's 'loop' set to false does. A toggle group of pressed buttons, 'selection-mode="multiple"', is walked through the same way, each toggle a stop on the toolbar's axis, as React Aria's toolbar walks its toggle buttons. Another nested composite, such as a radio-style toggle group, is one stop on the toolbar's axis: the toolbar's arrows move past it, and the arrows across the toolbar move inside it. A composite with a 'focusable' property, as Toggle Group has, gives up its own tab stop while the toolbar's is elsewhere, so Tab stops once in the toolbar. A composite without one keeps its own tab stop. A toolbar inside another toolbar, a Helix one or the page's own 'role="toolbar"', is a 'group' of the outer one, as React Aria's is: the outer toolbar's arrows walk through its controls and on past them, and it takes no keys and no tab stop of its own. A server renders it as a toolbar, having no parent to read, until it upgrades. */
|
|
15360
16535
|
"helix-headless-toolbar": DefineCustomElement<
|
|
15361
16536
|
HelixHeadlessToolbar,
|
|
15362
16537
|
HelixHeadlessToolbarVueProps,
|
|
15363
16538
|
HelixHeadlessToolbarVueEvents
|
|
15364
16539
|
>;
|
|
15365
|
-
/** 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. */
|
|
16540
|
+
/** 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. In the 'for' form the tooltip itself is out of the accessibility tree while its bubble is down, so a reader walking the page meets its words once, as the trigger's description. 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, unless you set 'hoverable="false"'. 'delay' is how long the pointer rests before it shows, and 'delay-out' how long it stays once the pointer leaves. 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. */
|
|
15366
16541
|
"helix-headless-tooltip": DefineCustomElement<
|
|
15367
16542
|
HelixHeadlessTooltip,
|
|
15368
16543
|
HelixHeadlessTooltipVueProps,
|
|
15369
16544
|
HelixHeadlessTooltipVueEvents
|
|
15370
16545
|
>;
|
|
15371
|
-
/** 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. */
|
|
16546
|
+
/** 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. The box the light falls on is on the 'spotlight' part as '--tour-spotlight-x', '--tour-spotlight-y', '--tour-spotlight-width' and '--tour-spotlight-height', for a sheet that draws its own light, such as a ring around the target. 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. **The arrow keys move between stops** while focus is in one: the arrow that points the way the line runs goes on, and the other goes back, so on a right-to-left page 'ArrowLeft' goes on. Neither finishes the tour at the last stop, and a text field in a stop keeps its own arrows. 'Escape' skips the tour. */
|
|
15372
16547
|
"helix-headless-tour": DefineCustomElement<
|
|
15373
16548
|
HelixHeadlessTour,
|
|
15374
16549
|
HelixHeadlessTourVueProps,
|
|
@@ -15380,19 +16555,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15380
16555
|
HelixHeadlessTourStopVueProps,
|
|
15381
16556
|
HelixHeadlessTourStopVueEvents
|
|
15382
16557
|
>;
|
|
15383
|
-
/** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. */
|
|
16558
|
+
/** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it, or 'selection-mode="leaf"', where only the items at the ends are chosen. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. */
|
|
15384
16559
|
"helix-headless-tree-item": DefineCustomElement<
|
|
15385
16560
|
HelixHeadlessTreeItem,
|
|
15386
16561
|
HelixHeadlessTreeItemVueProps,
|
|
15387
16562
|
HelixHeadlessTreeItemVueEvents
|
|
15388
16563
|
>;
|
|
15389
|
-
/** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. */
|
|
16564
|
+
/** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. 'selection-mode="leaf"' chooses one item at a time and only the items at the ends: a press, Enter or Space on a branch opens or closes it and chooses nothing, as Web Awesome's 'leaf' mode does. Keys: Up and Down Arrow move between the items a reader can see; Right Arrow opens a shut branch and then moves into it, and Left Arrow shuts an open one and then moves to its parent, the two swapping on a right-to-left page. Home and End go to the first and the last item, Enter and Space choose or open, and the tree's one tab stop stays on the item last reached. In a tree of check marks, Control+A (Command+A on an Apple keyboard) checks every item or clears them all, and Shift with Up or Down Arrow moves and checks. */
|
|
15390
16565
|
"helix-headless-tree": DefineCustomElement<
|
|
15391
16566
|
HelixHeadlessTree,
|
|
15392
16567
|
HelixHeadlessTreeVueProps,
|
|
15393
16568
|
HelixHeadlessTreeVueEvents
|
|
15394
16569
|
>;
|
|
15395
|
-
/** A trend has three parts: a
|
|
16570
|
+
/** A trend has three parts: a 'movement' of up, down, or neutral, the metric that moved, and a label for the period it moved over. The arrow shows the movement and its color shows whether the change is good. Movement and judgment are separate properties because they are separate facts. 'good' is unset by default, so a trend with no judgment is gray. For churn, latency, error rate, cost, and bounce rate, up is bad. Set the metric's polarity once with 'good', and the component picks the color from the movement. The judgment is also a custom state, 'better' or 'worse', for a sheet of your own. The movement is also written as a word, so a screen reader reads it. The styled tier hides 'part="direction"' visually and keeps it in the accessibility tree. The words are properties, 'up-label' through 'worse-label', so a page in another language can set its own. The arrow and any glyph slotted in its place are hidden from screen readers. **Or give the change as a number.** 'value' is the signed change, such as '0.12' or '-8': its sign is the movement, and its size is written as the metric with 'Intl.NumberFormat', in 'locale' and with 'format-options', such as '{"style":"percent"}' for '12%'. 'movement' still wins when it is written. Without 'value' the metric is what the page slots. Slot one glyph per movement into 'up-icon', 'down-icon' and 'neutral-icon', and the trend shows the one that matches; a glyph in 'icon' stands in for all three. Inside a 'Stat', put the trend in the stat's 'trend' slot so it is read with the figure it qualifies. The metric and the label are bare slots. An element that assigned its own slot on connect would add an attribute to its host after upgrade, which the React server markup did not have. */
|
|
15396
16571
|
"helix-headless-trend": DefineCustomElement<
|
|
15397
16572
|
HelixHeadlessTrend,
|
|
15398
16573
|
HelixHeadlessTrendVueProps,
|
|
@@ -15410,19 +16585,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
15410
16585
|
HelixHeadlessVideoPlaylistMenuVueProps,
|
|
15411
16586
|
HelixHeadlessVideoPlaylistMenuVueEvents
|
|
15412
16587
|
>;
|
|
15413
|
-
/** **You slot the player**, so it keeps your appearance, extra controls, captions, and poster treatment. 'Sandbox' takes its preview and 'Menu' its trigger the same way. **Entries are markup.** React skips properties it would set imperatively during hydration, so an array property on a custom element is missing on the first paint of a server-rendered page. 'using-the-elements.mdx' has the measurement. Markup also makes each entry a real button with its name inside. **The playlist does not play media.** It sets 'src' on the player and tracks which entry is current. The current entry moves when: - an entry is pressed, - the player dispatches 'helix-next' or 'helix-previous', or - the player reaches the end. On 'ended' the playlist advances and the next clip starts playing, because the user already pressed play once. 'repeat' decides what happens at the end: 'one' plays the same entry again, and 'all' goes from the last entry back to the first. Without it, the playlist stops on the last entry and sends 'helix-end'. 'shuffle' plays the entries in a random order, starting from the one that is current, and 'previous' retraces that order. */
|
|
16588
|
+
/** **You slot the player**, so it keeps your appearance, extra controls, captions, and poster treatment. 'Sandbox' takes its preview and 'Menu' its trigger the same way. **Entries are markup.** React skips properties it would set imperatively during hydration, so an array property on a custom element is missing on the first paint of a server-rendered page. 'using-the-elements.mdx' has the measurement. Markup also makes each entry a real button with its name inside. **The playlist does not play media.** It sets 'src' on the player and tracks which entry is current. The current entry moves when: - an entry is pressed, - the player dispatches 'helix-next' or 'helix-previous', or - the player reaches the end. On 'ended' the playlist advances and the next clip starts playing, because the user already pressed play once. 'repeat' decides what happens at the end: 'one' plays the same entry again, and 'all' goes from the last entry back to the first. Without it, the playlist stops on the last entry and sends 'helix-end'. 'shuffle' plays the entries in a random order, starting from the one that is current, and 'previous' retraces that order. **Keyboard.** Each entry is a button in the tab order, and Enter or Space plays it. The current entry carries 'aria-current'. While focus is on the player, the player's own keys work, and 'Video' lists them. Its previous and next controls move through the entries in the same order the playlist does. */
|
|
15414
16589
|
"helix-headless-video-playlist": DefineCustomElement<
|
|
15415
16590
|
HelixHeadlessVideoPlaylist,
|
|
15416
16591
|
HelixHeadlessVideoPlaylistVueProps,
|
|
15417
16592
|
HelixHeadlessVideoPlaylistVueEvents
|
|
15418
16593
|
>;
|
|
15419
|
-
/** The picture is a native '<video>', so decoding, buffering, captions, Picture in Picture, AirPlay, and codecs come from the platform. The component replaces the control bar, because the native bar cannot be styled. The scrubber and the volume are '<input type="range">' elements, so arrow keys, Home and End, touch targets, and screen reader announcements work as they do natively. When you set 'controls', the browser's control bar is used, the Helix bar is not drawn, and the keys below are not bound, so a key press does not seek twice. The keys match other players, and they are bound on the element only
|
|
16594
|
+
/** The picture is a native '<video>', so decoding, buffering, captions, Picture in Picture, AirPlay, and codecs come from the platform. The component replaces the control bar, because the native bar cannot be styled. The scrubber and the volume are '<input type="range">' elements, so arrow keys, Home and End, touch targets, and screen reader announcements work as they do natively. When you set 'controls', the browser's control bar is used, the Helix bar is not drawn, and the keys below are not bound, so a key press does not seek twice. **Keyboard.** The keys match other players, and they are bound on the element only, so they work while focus is on the player. | Key | What it does | |---|---| | Space, 'k' | Plays or pauses. Space on a button presses the button. | | Right, Left | Moves 5 seconds forward or back. | | Shift with Right or Left | Moves 10 seconds forward or back. | | 'l', 'j' | Moves 10 seconds forward or back, as the skip buttons do. | | Up, Down | Raises or lowers the volume by a tenth. | | 'm' | Mutes or unmutes. | | 'f' | Enters or leaves fullscreen. | | Tab | Moves through the controls on the bar. | On the scrubber and the volume slider, the arrow keys, Page Up, Page Down, Home, and End move the slider, as on any range input. '<source>' and '<track>' children are copied into the video. A media element selects resources from its own child nodes, and a slot is one node, so slotted sources would give the video no text tracks, no current source, and a 'readyState' of zero, and it would not play. They are copied so your light DOM stays intact, and are copied again whenever the slot changes. The player sends every media event of its inner video under the same name, without bubbling, as a '<video>' sends it. Listen on the player as you would on a video: 'timeupdate', 'volumechange', 'loadedmetadata', 'error', and the rest. */
|
|
15420
16595
|
"helix-headless-video": DefineCustomElement<
|
|
15421
16596
|
HelixHeadlessVideo,
|
|
15422
16597
|
HelixHeadlessVideoVueProps,
|
|
15423
16598
|
HelixHeadlessVideoVueEvents
|
|
15424
16599
|
>;
|
|
15425
|
-
/** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **Keyboard.** The list is one tab stop.
|
|
16600
|
+
/** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **A grid.** 'columns' lays the items out that many to a line, as a grid of equal columns, and windows the set a line at a time, as React Aria's grid layout does. Each item draws one element, a cell of the grid, and 'estimate' is the height of a line. Space the items with padding inside each one, which the list measures with the line. **Keyboard.** The list is one tab stop. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous item, or in a grid to the item in the same column on the next or the previous line. | | Right, Left | In a grid, moves to the next or the previous item along the line, the other way round on a right-to-left page. | | Home, End | Moves to the first or the last item. | | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. | | A letter or a word | Moves to the next item whose text starts with what you typed. | | Tab | Moves into the focused row's own links and buttons, then out of the list. | An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. Typing matches each item's 'text-field', which is the first 'data-field' of the row template by default, or the item itself when it is a string or a number. Each row says its place in the whole set with 'aria-posinset' and 'aria-setsize', so a screen reader says "4,000 of 10,000". The row holding focus stays drawn when it scrolls out. **Selecting.** 'selection-mode' makes the list a list box a reader chooses from: 'single' selects one item and 'multiple' any number. Space or a press selects an item, Shift with Space, an arrow, Home, End or a press takes in the items from the last one chosen, and Control or Command with A selects them all, in 'multiple'. 'value' holds the chosen items' keys, separated by commas, in the order of the set: 'key-field' names each item's key, and a string or a number item is its own key. A change asks with 'helix-before-change' and tells with 'change'. Each row is an 'option' marked 'aria-selected', so a row's own links and buttons are not reached there: keep those to a list without 'selection-mode'. **Loading more.** 'helix-range-change' fires as the items on screen change, and 'range' holds them. 'helix-load-more' fires once a reader is within one screen of the end, once for each length of the set: add to 'items' and it can fire again. While you fetch, set 'loading': the list is busy, and a row after the last item says "Loading more" ('loading-label', or your own content in the 'loading' slot). 'scrollToIndex' takes a reader to an item. **Row height.** Rows are placed by 'estimate' until they are drawn. Then the list reads the drawn rows' height once and places every row by it, so a wrong estimate still reaches the last item. Set 'measured' for rows of different heights. The list follows its source. A new 'items' array, an edit to the script's text, or a script replaced under the same id draws the new rows. A row that stays in view keeps its element as the list scrolls. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
|
|
15426
16601
|
"helix-headless-virtual-list": DefineCustomElement<
|
|
15427
16602
|
HelixHeadlessVirtualList,
|
|
15428
16603
|
HelixHeadlessVirtualListVueProps,
|