@fusion.dev/helix-headless 0.143.0 → 0.145.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 +16990 -1383
- package/dist/accordion/item/accordion-item.d.ts +48 -12
- package/dist/accordion/item/accordion-item.js +26 -5
- package/dist/accordion/root/accordion-root.d.ts +6 -0
- package/dist/accordion/root/accordion-root.js +7 -1
- package/dist/announcement/root/announcement-root.d.ts +21 -1
- package/dist/announcement/root/announcement-root.js +36 -1
- package/dist/app-header/root/app-header-root.d.ts +7 -0
- package/dist/app-header/root/app-header-root.js +5 -1
- package/dist/app-header/sectioning.d.ts +7 -0
- package/dist/app-header/sectioning.js +26 -0
- package/dist/area-chart/root/area-chart-root.d.ts +12 -4
- package/dist/area-chart/root/area-chart-root.js +24 -7
- package/dist/avatar/root/avatar-root.d.ts +14 -0
- package/dist/avatar/root/avatar-root.js +23 -9
- package/dist/badge/root/badge-root.d.ts +11 -7
- package/dist/badge/root/badge-root.js +1 -1
- package/dist/bar-chart/root/bar-chart-root.d.ts +12 -3
- package/dist/bar-chart/root/bar-chart-root.js +17 -10
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +32 -1
- package/dist/breadcrumbs/root/breadcrumbs-root.js +25 -2
- package/dist/button/root/button-root.d.ts +47 -1
- package/dist/button/root/button-root.js +38 -4
- package/dist/callout/root/callout-root.d.ts +18 -1
- package/dist/callout/root/callout-root.js +15 -4
- package/dist/canvas/root/canvas-root.d.ts +38 -3
- package/dist/canvas/root/canvas-root.js +121 -40
- package/dist/card/root/card-root.d.ts +30 -1
- package/dist/card/root/card-root.js +38 -5
- package/dist/carousel/root/carousel-root.d.ts +90 -0
- package/dist/carousel/root/carousel-root.js +134 -12
- package/dist/chat/composer/chat-composer.d.ts +38 -6
- package/dist/chat/composer/chat-composer.js +42 -9
- package/dist/chat/message/chat-message.d.ts +32 -1
- package/dist/chat/message/chat-message.js +25 -9
- package/dist/chat/naming.d.ts +22 -0
- package/dist/chat/naming.js +12 -0
- package/dist/chat/relative-clock.d.ts +39 -0
- package/dist/chat/relative-clock.js +31 -0
- package/dist/chat/root/chat-root.d.ts +36 -0
- package/dist/chat/root/chat-root.js +24 -1
- package/dist/checkbox/root/checkbox-root.js +2 -0
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +53 -3
- package/dist/checkbox-group/root/checkbox-group-root.js +71 -22
- package/dist/code-block/lines.d.ts +13 -0
- package/dist/code-block/lines.js +2 -0
- package/dist/code-block/root/code-block-root.d.ts +38 -1
- package/dist/code-block/root/code-block-root.js +28 -7
- package/dist/color-input/root/color-input-root.d.ts +34 -1
- package/dist/color-input/root/color-input-root.js +23 -4
- package/dist/color-picker/channels.d.ts +26 -0
- package/dist/color-picker/channels.js +84 -0
- package/dist/color-picker/root/color-picker-root.d.ts +81 -5
- package/dist/color-picker/root/color-picker-root.js +103 -10
- package/dist/combobox/root/combobox-root.d.ts +38 -3
- package/dist/combobox/root/combobox-root.js +64 -2
- package/dist/command/root/command-root.d.ts +30 -4
- package/dist/command/root/command-root.js +33 -3
- package/dist/copy-button/from.d.ts +22 -0
- package/dist/copy-button/from.js +28 -0
- package/dist/copy-button/root/copy-button-root.d.ts +47 -1
- package/dist/copy-button/root/copy-button-root.js +44 -8
- package/dist/data-table/root/data-table-root.d.ts +150 -2
- package/dist/data-table/root/data-table-root.js +303 -29
- package/dist/data-table/tree.d.ts +40 -0
- package/dist/data-table/tree.js +55 -0
- package/dist/date-input/root/date-input-root.d.ts +73 -4
- package/dist/date-input/root/date-input-root.js +93 -43
- package/dist/date-picker/root/date-picker-root.d.ts +145 -1
- package/dist/date-picker/root/date-picker-root.js +239 -48
- package/dist/description-list/item/description-list-item.d.ts +17 -2
- package/dist/description-list/item/description-list-item.js +15 -2
- package/dist/description-list/root/description-list-root.d.ts +27 -1
- package/dist/description-list/root/description-list-root.js +26 -1
- package/dist/dialog/description.d.ts +9 -0
- package/dist/dialog/description.js +14 -0
- package/dist/dialog/root/dialog-root.d.ts +64 -1
- package/dist/dialog/root/dialog-root.js +49 -23
- package/dist/donut-chart/root/donut-chart-root.d.ts +25 -4
- package/dist/donut-chart/root/donut-chart-root.js +21 -6
- package/dist/drawer/root/drawer-root.d.ts +63 -2
- package/dist/drawer/root/drawer-root.js +95 -19
- package/dist/drawer/swipe-start.d.ts +9 -0
- package/dist/drawer/swipe-start.js +12 -0
- package/dist/drilldown/item/drilldown-item.d.ts +11 -6
- package/dist/drilldown/item/drilldown-item.js +8 -5
- package/dist/drilldown/root/drilldown-root.d.ts +11 -0
- package/dist/drilldown/root/drilldown-root.js +8 -3
- package/dist/element-events.generated.js +61 -13
- package/dist/empty/root/empty-root.d.ts +1 -1
- package/dist/file-input/root/file-input-root.d.ts +47 -0
- package/dist/file-input/root/file-input-root.js +60 -22
- package/dist/file-input/screen.d.ts +35 -0
- package/dist/file-input/screen.js +49 -0
- package/dist/filter-input/menu/filter-menu.d.ts +3 -0
- package/dist/filter-input/menu/filter-menu.js +8 -4
- package/dist/filter-input/root/filter-input-root.d.ts +38 -4
- package/dist/filter-input/root/filter-input-root.js +67 -3
- package/dist/filter-input/suggest.d.ts +17 -0
- package/dist/filter-input/suggest.js +23 -0
- package/dist/format-date/options.d.ts +33 -0
- package/dist/format-date/options.js +42 -0
- package/dist/format-date/root/format-date-root.d.ts +51 -0
- package/dist/format-date/root/format-date-root.js +58 -38
- package/dist/heatmap/root/heatmap-root.d.ts +23 -6
- package/dist/heatmap/root/heatmap-root.js +24 -13
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +2 -0
- package/dist/icon/registry.d.ts +37 -0
- package/dist/icon/registry.js +83 -0
- package/dist/icon/root/icon-root.d.ts +30 -4
- package/dist/icon/root/icon-root.js +41 -6
- package/dist/icon/root/index.d.ts +2 -0
- package/dist/icon/root/index.js +2 -0
- package/dist/icon/set.d.ts +1 -0
- package/dist/icon/set.js +3 -0
- package/dist/image/root/image-root.d.ts +14 -0
- package/dist/image/root/image-root.js +23 -2
- package/dist/input/root/input-root.d.ts +11 -0
- package/dist/input/root/input-root.js +16 -1
- package/dist/kbd/root/kbd-root.d.ts +20 -13
- package/dist/kbd/root/kbd-root.js +35 -37
- package/dist/kbd/shortcut.d.ts +18 -0
- package/dist/kbd/shortcut.js +35 -0
- package/dist/legend/hidden-series.d.ts +8 -0
- package/dist/legend/hidden-series.js +13 -0
- package/dist/legend/root/legend-root.d.ts +56 -0
- package/dist/legend/root/legend-root.js +54 -5
- package/dist/lightbox/item/lightbox-item.d.ts +15 -0
- package/dist/lightbox/item/lightbox-item.js +10 -1
- package/dist/lightbox/root/lightbox-root.d.ts +61 -1
- package/dist/lightbox/root/lightbox-root.js +94 -4
- package/dist/line-chart/root/line-chart-root.d.ts +11 -3
- package/dist/line-chart/root/line-chart-root.js +19 -5
- package/dist/list/item/list-item.d.ts +68 -1
- package/dist/list/item/list-item.js +66 -4
- package/dist/list/numbering.d.ts +14 -0
- package/dist/list/numbering.js +8 -0
- package/dist/list/root/list-root.d.ts +106 -9
- package/dist/list/root/list-root.js +189 -4
- package/dist/list/selection.d.ts +19 -0
- package/dist/list/selection.js +21 -0
- package/dist/listbox/root/listbox-root.d.ts +74 -3
- package/dist/listbox/root/listbox-root.js +86 -9
- package/dist/loader/busy.d.ts +17 -0
- package/dist/loader/busy.js +24 -0
- package/dist/loader/root/loader-root.d.ts +37 -0
- package/dist/loader/root/loader-root.js +52 -3
- package/dist/map/root/map-root.d.ts +6 -2
- package/dist/map/root/map-root.js +5 -2
- package/dist/megamenu/root/megamenu-root.d.ts +21 -0
- package/dist/megamenu/root/megamenu-root.js +16 -2
- package/dist/menu/index.d.ts +1 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu/item/menu-item.d.ts +38 -11
- package/dist/menu/item/menu-item.js +33 -1
- package/dist/menu/root/menu-root.d.ts +25 -1
- package/dist/menu/root/menu-root.js +63 -6
- package/dist/menu/section/menu-section.d.ts +55 -0
- package/dist/menu/section/menu-section.js +60 -0
- package/dist/meter/root/meter-root.d.ts +7 -0
- package/dist/meter/root/meter-root.js +6 -3
- package/dist/navigation/root/navigation-root.d.ts +16 -1
- package/dist/navigation/root/navigation-root.js +27 -1
- package/dist/notifications/feed-keys.d.ts +10 -0
- package/dist/notifications/feed-keys.js +14 -0
- package/dist/notifications/notification/notification.d.ts +17 -0
- package/dist/notifications/notification/notification.js +21 -2
- package/dist/notifications/root/notifications-root.d.ts +60 -0
- package/dist/notifications/root/notifications-root.js +76 -1
- package/dist/number-input/root/number-input-root.d.ts +47 -0
- package/dist/number-input/root/number-input-root.js +58 -22
- package/dist/object-inspector/root/object-inspector-root.d.ts +98 -16
- package/dist/object-inspector/root/object-inspector-root.js +180 -80
- package/dist/object-inspector/rows.d.ts +57 -0
- package/dist/object-inspector/rows.js +86 -0
- package/dist/option/root/option-root.d.ts +54 -5
- package/dist/option/root/option-root.js +34 -5
- package/dist/outline/levels.d.ts +31 -0
- package/dist/outline/levels.js +23 -0
- package/dist/outline/root/outline-root.d.ts +68 -3
- package/dist/outline/root/outline-root.js +73 -8
- package/dist/pagination/size/pagination-size.d.ts +11 -2
- package/dist/pagination/size/pagination-size.js +19 -4
- package/dist/pin-input/format.d.ts +7 -0
- package/dist/pin-input/format.js +16 -0
- package/dist/pin-input/root/pin-input-root.d.ts +21 -0
- package/dist/pin-input/root/pin-input-root.js +29 -2
- package/dist/popover/root/popover-root.d.ts +62 -4
- package/dist/popover/root/popover-root.js +53 -5
- package/dist/progress/root/progress-root.d.ts +7 -0
- package/dist/progress/root/progress-root.js +9 -3
- package/dist/qr-code/export.d.ts +31 -0
- package/dist/qr-code/export.js +10 -0
- package/dist/qr-code/root/qr-code-root.d.ts +26 -0
- package/dist/qr-code/root/qr-code-root.js +49 -2
- package/dist/radio/group/radio-group.d.ts +17 -0
- package/dist/radio/group/radio-group.js +14 -1
- package/dist/rating/root/rating-root.d.ts +25 -0
- package/dist/rating/root/rating-root.js +46 -4
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +17 -3
- package/dist/scatter-chart/root/scatter-chart-root.js +25 -7
- package/dist/scroll-area/root/scroll-area-root.d.ts +113 -0
- package/dist/scroll-area/root/scroll-area-root.js +218 -3
- package/dist/scroll-area/scrollbar.d.ts +65 -0
- package/dist/scroll-area/scrollbar.js +24 -0
- package/dist/select/root/select-root.d.ts +24 -0
- package/dist/select/root/select-root.js +21 -7
- package/dist/skeleton/root/skeleton-root.d.ts +25 -0
- package/dist/skeleton/root/skeleton-root.js +17 -2
- package/dist/slider/root/slider-root.d.ts +39 -0
- package/dist/slider/root/slider-root.js +45 -9
- package/dist/splitter/root/splitter-root.d.ts +13 -0
- package/dist/splitter/root/splitter-root.js +20 -2
- package/dist/splitter/snap.d.ts +9 -0
- package/dist/splitter/snap.js +12 -0
- package/dist/stat/root/stat-root.d.ts +2 -0
- package/dist/stat/root/stat-root.js +1 -1
- package/dist/steps/reach.d.ts +15 -0
- package/dist/steps/reach.js +12 -0
- package/dist/steps/root/steps-root.d.ts +30 -0
- package/dist/steps/root/steps-root.js +53 -0
- package/dist/steps/step/step.d.ts +39 -2
- package/dist/steps/step/step.js +29 -7
- package/dist/switch/root/switch-root.d.ts +12 -2
- package/dist/switch/root/switch-root.js +6 -1
- package/dist/table/column/table-column.d.ts +11 -0
- package/dist/table/column/table-column.js +6 -1
- package/dist/table/root/table-root.d.ts +101 -0
- package/dist/table/root/table-root.js +166 -5
- package/dist/table/row/table-row.d.ts +47 -1
- package/dist/table/row/table-row.js +39 -2
- package/dist/tabs/panel/tab-panel.d.ts +9 -5
- package/dist/tabs/panel/tab-panel.js +3 -4
- package/dist/tabs/root/tabs-root.d.ts +25 -1
- package/dist/tabs/root/tabs-root.js +21 -3
- package/dist/tabs/tab/tab.d.ts +36 -4
- package/dist/tabs/tab/tab.js +46 -3
- package/dist/tag/group/tag-group.d.ts +107 -0
- package/dist/tag/group/tag-group.js +157 -0
- package/dist/tag/index.d.ts +1 -0
- package/dist/tag/index.js +1 -0
- package/dist/tag/root/tag-root.d.ts +60 -0
- package/dist/tag/root/tag-root.js +74 -18
- package/dist/tag/selection.d.ts +10 -0
- package/dist/tag/selection.js +12 -0
- package/dist/textarea/grow.d.ts +22 -0
- package/dist/textarea/grow.js +20 -0
- package/dist/textarea/root/textarea-root.d.ts +9 -0
- package/dist/textarea/root/textarea-root.js +9 -1
- package/dist/time-input/root/time-input-root.d.ts +44 -5
- package/dist/time-input/root/time-input-root.js +69 -39
- package/dist/time-picker/root/time-picker-root.d.ts +54 -8
- package/dist/time-picker/root/time-picker-root.js +121 -91
- package/dist/timeline/group/timeline-group.d.ts +46 -0
- package/dist/timeline/group/timeline-group.js +37 -0
- package/dist/timeline/index.d.ts +1 -0
- package/dist/timeline/index.js +1 -0
- package/dist/timeline/root/timeline-root.d.ts +10 -3
- package/dist/toast/hotkey.d.ts +22 -0
- package/dist/toast/hotkey.js +23 -0
- package/dist/toast/item/toast-item.d.ts +26 -18
- package/dist/toast/item/toast-item.js +55 -48
- package/dist/toast/root/toast-root.d.ts +42 -8
- package/dist/toast/root/toast-root.js +64 -4
- package/dist/toggle/group/toggle-group.d.ts +57 -15
- package/dist/toggle/group/toggle-group.js +69 -9
- package/dist/toggle/root/toggle-root.d.ts +12 -1
- package/dist/toggle/root/toggle-root.js +11 -3
- package/dist/toolbar/root/toolbar-root.d.ts +13 -0
- package/dist/toolbar/root/toolbar-root.js +15 -5
- package/dist/tooltip/focus-target.d.ts +6 -0
- package/dist/tooltip/focus-target.js +9 -0
- package/dist/tooltip/root/tooltip-root.d.ts +42 -17
- package/dist/tooltip/root/tooltip-root.js +50 -9
- package/dist/tour/naming.d.ts +30 -0
- package/dist/tour/naming.js +10 -0
- package/dist/tour/root/tour-root.d.ts +35 -0
- package/dist/tour/root/tour-root.js +56 -5
- package/dist/tour/stop/tour-stop.d.ts +53 -8
- package/dist/tour/stop/tour-stop.js +45 -15
- package/dist/tour/wait.d.ts +11 -0
- package/dist/tour/wait.js +19 -0
- package/dist/tree/item/tree-item.d.ts +54 -1
- package/dist/tree/item/tree-item.js +89 -20
- package/dist/tree/root/tree-root.d.ts +37 -0
- package/dist/tree/root/tree-root.js +51 -6
- package/dist/tree/selection.d.ts +24 -0
- package/dist/tree/selection.js +26 -0
- package/dist/trend/root/trend-root.d.ts +13 -0
- package/dist/trend/root/trend-root.js +14 -9
- package/dist/video/media-events.d.ts +49 -0
- package/dist/video/media-events.js +39 -0
- package/dist/video/root/video-root.d.ts +99 -13
- package/dist/video/root/video-root.js +84 -47
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +3 -0
- package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
- package/dist/video-playlist/order.d.ts +41 -0
- package/dist/video-playlist/order.js +34 -0
- package/dist/video-playlist/root/video-playlist-root.d.ts +70 -2
- package/dist/video-playlist/root/video-playlist-root.js +60 -16
- package/dist/virtual-list/controls.d.ts +4 -0
- package/dist/virtual-list/controls.js +30 -0
- package/dist/virtual-list/fill.d.ts +30 -0
- package/dist/virtual-list/fill.js +39 -0
- package/dist/virtual-list/keys.d.ts +15 -0
- package/dist/virtual-list/keys.js +24 -0
- package/dist/virtual-list/root/virtual-list-root.d.ts +155 -23
- package/dist/virtual-list/root/virtual-list-root.js +175 -34
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +8871 -1286
- package/types/svelte.d.ts +3 -0
- package/types/vue.d.ts +1918 -269
package/types/vue.d.ts
CHANGED
|
@@ -94,6 +94,7 @@ import type {
|
|
|
94
94
|
HelixHeadlessMegamenu,
|
|
95
95
|
HelixHeadlessMenuItem,
|
|
96
96
|
HelixHeadlessMenu,
|
|
97
|
+
HelixHeadlessMenuSection,
|
|
97
98
|
HelixHeadlessMeter,
|
|
98
99
|
HelixHeadlessNavigation,
|
|
99
100
|
HelixHeadlessNotificationGroup,
|
|
@@ -141,10 +142,12 @@ import type {
|
|
|
141
142
|
HelixHeadlessTabPanel,
|
|
142
143
|
HelixHeadlessTabs,
|
|
143
144
|
HelixHeadlessTab,
|
|
145
|
+
HelixHeadlessTagGroup,
|
|
144
146
|
HelixHeadlessTag,
|
|
145
147
|
HelixHeadlessTextarea,
|
|
146
148
|
HelixHeadlessTimeInput,
|
|
147
149
|
HelixHeadlessTimePicker,
|
|
150
|
+
HelixHeadlessTimelineGroup,
|
|
148
151
|
HelixHeadlessTimelineItem,
|
|
149
152
|
HelixHeadlessTimeline,
|
|
150
153
|
HelixHeadlessToastItem,
|
|
@@ -183,6 +186,7 @@ import type {
|
|
|
183
186
|
HelixSelectEvent,
|
|
184
187
|
HelixActivateEvent,
|
|
185
188
|
HelixSendEvent,
|
|
189
|
+
HelixTypingEvent,
|
|
186
190
|
HelixBeforePinEvent,
|
|
187
191
|
HelixHistoryEvent,
|
|
188
192
|
HelixPinEvent,
|
|
@@ -193,13 +197,17 @@ import type {
|
|
|
193
197
|
HelixSampleStartEvent,
|
|
194
198
|
HelixCreateEvent,
|
|
195
199
|
HelixFilterEvent,
|
|
200
|
+
HelixCopyErrorEvent,
|
|
201
|
+
HelixExpandEvent,
|
|
196
202
|
HelixFilteredEvent,
|
|
203
|
+
HelixLoadMoreEvent,
|
|
197
204
|
HelixNavigateEvent,
|
|
198
205
|
HelixReorderEvent,
|
|
199
206
|
HelixReorderedEvent,
|
|
200
207
|
HelixSelectedEvent,
|
|
201
208
|
HelixSortEvent,
|
|
202
209
|
HelixSortedEvent,
|
|
210
|
+
HelixRejectEvent,
|
|
203
211
|
HelixFacetEvent,
|
|
204
212
|
HelixBeforeActivateEvent,
|
|
205
213
|
HelixGraphFilterEvent,
|
|
@@ -210,7 +218,9 @@ import type {
|
|
|
210
218
|
HelixGraphSignalEvent,
|
|
211
219
|
HelixGraphZoomEvent,
|
|
212
220
|
HelixResizeEvent,
|
|
221
|
+
HelixClearEvent,
|
|
213
222
|
HelixShortcutEvent,
|
|
223
|
+
HelixActionEvent,
|
|
214
224
|
HelixMapPartChangeEvent,
|
|
215
225
|
HelixMapClusterEvent,
|
|
216
226
|
HelixMapPanEvent,
|
|
@@ -218,6 +228,7 @@ import type {
|
|
|
218
228
|
HelixMapRotateEvent,
|
|
219
229
|
HelixMapTiltEvent,
|
|
220
230
|
HelixMapZoomEvent,
|
|
231
|
+
HelixToggleEvent,
|
|
221
232
|
HelixReadEvent,
|
|
222
233
|
HelixCompleteEvent,
|
|
223
234
|
HelixBeforeCollapseEvent,
|
|
@@ -225,8 +236,11 @@ import type {
|
|
|
225
236
|
HelixCollapseEvent,
|
|
226
237
|
HelixResizedEvent,
|
|
227
238
|
HelixTourAskEvent,
|
|
239
|
+
HelixLoadEvent,
|
|
240
|
+
HelixEndEvent,
|
|
228
241
|
HelixNextEvent,
|
|
229
242
|
HelixPreviousEvent,
|
|
243
|
+
HelixRangeChangeEvent,
|
|
230
244
|
} from "@fusion.dev/helix-headless";
|
|
231
245
|
import type { HTMLAttributes, PublicProps, EmitFn, EmitsToProps } from "vue";
|
|
232
246
|
|
|
@@ -314,6 +328,22 @@ too. */
|
|
|
314
328
|
Unset takes the accordion's `heading-level`, and 3 where that is unset
|
|
315
329
|
too. */
|
|
316
330
|
headingLevel?: (HelixHeadlessAccordionItem["headingLevel"]) | undefined;
|
|
331
|
+
/** Whether find in page searches the section while it is closed, and opens it
|
|
332
|
+
on a match.
|
|
333
|
+
|
|
334
|
+
Off by default. A closed section is then `hidden="until-found"`, which
|
|
335
|
+
hides through `content-visibility`, so a stylesheet that animates the
|
|
336
|
+
section closed shows an empty box for the length of that animation. The
|
|
337
|
+
accordion's own `hidden-until-found` turns it on for every section. */
|
|
338
|
+
"hidden-until-found"?: (HelixHeadlessAccordionItem["hiddenUntilFound"]) | undefined;
|
|
339
|
+
/** Whether find in page searches the section while it is closed, and opens it
|
|
340
|
+
on a match.
|
|
341
|
+
|
|
342
|
+
Off by default. A closed section is then `hidden="until-found"`, which
|
|
343
|
+
hides through `content-visibility`, so a stylesheet that animates the
|
|
344
|
+
section closed shows an empty box for the length of that animation. The
|
|
345
|
+
accordion's own `hidden-until-found` turns it on for every section. */
|
|
346
|
+
hiddenUntilFound?: (HelixHeadlessAccordionItem["hiddenUntilFound"]) | undefined;
|
|
317
347
|
/** A group name. Opening an item closes the other items with the same name,
|
|
318
348
|
as `<details name>` does.
|
|
319
349
|
|
|
@@ -370,6 +400,14 @@ Unset is 3. An item's own `heading-level` wins over this. */
|
|
|
370
400
|
|
|
371
401
|
Unset is 3. An item's own `heading-level` wins over this. */
|
|
372
402
|
headingLevel?: (HelixHeadlessAccordion["headingLevel"]) | undefined;
|
|
403
|
+
/** Whether find in page searches every closed section, and opens the one it
|
|
404
|
+
matches in. Each item's own `hidden-until-found` turns it on for that item
|
|
405
|
+
alone. */
|
|
406
|
+
"hidden-until-found"?: (HelixHeadlessAccordion["hiddenUntilFound"]) | undefined;
|
|
407
|
+
/** Whether find in page searches every closed section, and opens the one it
|
|
408
|
+
matches in. Each item's own `hidden-until-found` turns it on for that item
|
|
409
|
+
alone. */
|
|
410
|
+
hiddenUntilFound?: (HelixHeadlessAccordion["hiddenUntilFound"]) | undefined;
|
|
373
411
|
/** How many sections may be open at once.
|
|
374
412
|
|
|
375
413
|
Absent is `multiple`, so nothing closes unexpectedly and the default costs
|
|
@@ -398,6 +436,12 @@ export type HelixHeadlessAnnouncementHelixDismissElementEvent =
|
|
|
398
436
|
HelixHeadlessAnnouncementElementEvent<HelixDismissEvent>;
|
|
399
437
|
|
|
400
438
|
export type HelixHeadlessAnnouncementVueProps = {
|
|
439
|
+
/** How long the announcement stays, in milliseconds, before it sends
|
|
440
|
+
`helix-dismiss`. When it is not set, it stays until it is dismissed.
|
|
441
|
+
|
|
442
|
+
Read once when the announcement is first rendered, as `Toast` reads its
|
|
443
|
+
own. The clock stops while the pointer or focus is on the announcement. */
|
|
444
|
+
duration?: (HelixHeadlessAnnouncement["duration"]) | undefined;
|
|
401
445
|
/** The band's color.
|
|
402
446
|
|
|
403
447
|
Paint only: unlike `Callout`, no value here draws a mark, changes the label,
|
|
@@ -438,7 +482,7 @@ would catch. */
|
|
|
438
482
|
};
|
|
439
483
|
|
|
440
484
|
export type HelixHeadlessAnnouncementVueEvents = {
|
|
441
|
-
/** The dismiss button was pressed. The announcement does not remove itself, so remove it in response. Cancelable. */
|
|
485
|
+
/** The dismiss button was pressed, or `duration` ran out. The announcement does not remove itself, so remove it in response. Cancelable. */
|
|
442
486
|
"helix-dismiss": HelixHeadlessAnnouncementHelixDismissElementEvent;
|
|
443
487
|
};
|
|
444
488
|
|
|
@@ -590,6 +634,24 @@ export type HelixHeadlessAvatarElementEvent<E = Event> = TypedEvent<
|
|
|
590
634
|
>;
|
|
591
635
|
|
|
592
636
|
export type HelixHeadlessAvatarVueProps = {
|
|
637
|
+
/** How long, in milliseconds, a picture may take before the initials stand
|
|
638
|
+
in for it while it loads.
|
|
639
|
+
|
|
640
|
+
Absent keeps the picture's place empty until it arrives or fails. Set,
|
|
641
|
+
the initials show once the wait is over and the picture
|
|
642
|
+
replaces them when it arrives, so a slow connection shows who it is
|
|
643
|
+
without a cached picture flashing initials first. Radix's `delayMs` is the
|
|
644
|
+
same idea. */
|
|
645
|
+
"fallback-delay"?: (HelixHeadlessAvatar["fallbackDelay"] | `${number}`) | undefined;
|
|
646
|
+
/** How long, in milliseconds, a picture may take before the initials stand
|
|
647
|
+
in for it while it loads.
|
|
648
|
+
|
|
649
|
+
Absent keeps the picture's place empty until it arrives or fails. Set,
|
|
650
|
+
the initials show once the wait is over and the picture
|
|
651
|
+
replaces them when it arrives, so a slow connection shows who it is
|
|
652
|
+
without a cached picture flashing initials first. Radix's `delayMs` is the
|
|
653
|
+
same idea. */
|
|
654
|
+
fallbackDelay?: (HelixHeadlessAvatar["fallbackDelay"]) | undefined;
|
|
593
655
|
/** Name of the person or entity.
|
|
594
656
|
|
|
595
657
|
Used for the label and the initials. */
|
|
@@ -802,6 +864,12 @@ export type HelixHeadlessBreadcrumbsVueProps = {
|
|
|
802
864
|
/** The landmark's name, read by screen readers. An `aria-label` on the host
|
|
803
865
|
wins over it. */
|
|
804
866
|
label?: (HelixHeadlessBreadcrumbs["label"]) | undefined;
|
|
867
|
+
/** The trail as data, drawn as crumbs before any you slot. The last item is the
|
|
868
|
+
current page.
|
|
869
|
+
|
|
870
|
+
React Aria's `items`. A property only: a trail is built by script, and an
|
|
871
|
+
attribute would put the whole path into the markup twice. */
|
|
872
|
+
items?: (HelixHeadlessBreadcrumbs["items"]) | undefined;
|
|
805
873
|
};
|
|
806
874
|
|
|
807
875
|
export type HelixHeadlessBreadcrumbsVueEvents = {};
|
|
@@ -908,6 +976,22 @@ Lives here rather than only on `IconButton` so the two share one render.
|
|
|
908
976
|
An icon-only button without it is a control a screen reader announces as
|
|
909
977
|
"button" and nothing else. */
|
|
910
978
|
label?: (HelixHeadlessButton["label"]) | undefined;
|
|
979
|
+
/** Whether the action the button started is still running.
|
|
980
|
+
|
|
981
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
982
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
983
|
+
click does not reach your listeners. The inner control carries
|
|
984
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
985
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
986
|
+
turning ring over its words.
|
|
987
|
+
|
|
988
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
989
|
+
a press, so focus stays where the reader left it. */
|
|
990
|
+
pending?: (HelixHeadlessButton["pending"]) | undefined;
|
|
991
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
992
|
+
"pending-label"?: (HelixHeadlessButton["pendingLabel"]) | undefined;
|
|
993
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
994
|
+
pendingLabel?: (HelixHeadlessButton["pendingLabel"]) | undefined;
|
|
911
995
|
/** What activating the button does to its form. */
|
|
912
996
|
type?: (HelixHeadlessButton["type"]) | undefined;
|
|
913
997
|
/** The value this button submits under its own `name`, as a native submit
|
|
@@ -1007,6 +1091,15 @@ invoker without an id in the same tree needs. */
|
|
|
1007
1091
|
|
|
1008
1092
|
export type HelixHeadlessButtonVueEvents = {};
|
|
1009
1093
|
|
|
1094
|
+
/** `HelixHeadlessCallout` component event */
|
|
1095
|
+
export type HelixHeadlessCalloutElementEvent<E = Event> = TypedEvent<
|
|
1096
|
+
HelixHeadlessCallout,
|
|
1097
|
+
E
|
|
1098
|
+
>;
|
|
1099
|
+
/** `helix-dismiss` event type */
|
|
1100
|
+
export type HelixHeadlessCalloutHelixDismissElementEvent =
|
|
1101
|
+
HelixHeadlessCalloutElementEvent<HelixDismissEvent>;
|
|
1102
|
+
|
|
1010
1103
|
export type HelixHeadlessCalloutVueProps = {
|
|
1011
1104
|
/** What kind of attention the passage needs.
|
|
1012
1105
|
|
|
@@ -1025,9 +1118,28 @@ Absent is the English for the tone: "Error", "Information", "Note",
|
|
|
1025
1118
|
Absent is the English for the tone: "Error", "Information", "Note",
|
|
1026
1119
|
"Success" or "Warning". */
|
|
1027
1120
|
toneLabel?: (HelixHeadlessCallout["toneLabel"]) | undefined;
|
|
1121
|
+
/** Whether the element shows a control that dismisses it. */
|
|
1122
|
+
dismissible?: (HelixHeadlessCallout["dismissible"]) | undefined;
|
|
1123
|
+
/** The dismiss control's label, read by screen readers.
|
|
1124
|
+
|
|
1125
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
1126
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
1127
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
1128
|
+
would catch. */
|
|
1129
|
+
"dismiss-label"?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
|
|
1130
|
+
/** The dismiss control's label, read by screen readers.
|
|
1131
|
+
|
|
1132
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
1133
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
1134
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
1135
|
+
would catch. */
|
|
1136
|
+
dismissLabel?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
|
|
1028
1137
|
};
|
|
1029
1138
|
|
|
1030
|
-
export type HelixHeadlessCalloutVueEvents = {
|
|
1139
|
+
export type HelixHeadlessCalloutVueEvents = {
|
|
1140
|
+
/** The dismiss button was pressed. The callout does not remove itself, so remove it in response. Cancelable. */
|
|
1141
|
+
"helix-dismiss": HelixHeadlessCalloutHelixDismissElementEvent;
|
|
1142
|
+
};
|
|
1031
1143
|
|
|
1032
1144
|
export type HelixHeadlessCanvasEdgeVueProps = {
|
|
1033
1145
|
/** The name of the card the connection starts from. */
|
|
@@ -1593,6 +1705,10 @@ twice what this says once.
|
|
|
1593
1705
|
Reflected and undefaulted, so a card that has not asked reads as a card
|
|
1594
1706
|
with no attribute on it and the stylesheet only describes the departure. */
|
|
1595
1707
|
mediaPlacement?: (HelixHeadlessCard["mediaPlacement"]) | undefined;
|
|
1708
|
+
/** */
|
|
1709
|
+
"aria-labelledby"?: unknown;
|
|
1710
|
+
/** */
|
|
1711
|
+
"aria-label"?: unknown;
|
|
1596
1712
|
};
|
|
1597
1713
|
|
|
1598
1714
|
export type HelixHeadlessCardVueEvents = {};
|
|
@@ -1675,6 +1791,18 @@ read out in English. */
|
|
|
1675
1791
|
label?: (HelixHeadlessCarousel["label"]) | undefined;
|
|
1676
1792
|
/** Whether moving past either end wraps to the other. */
|
|
1677
1793
|
loop?: (HelixHeadlessCarousel["loop"]) | undefined;
|
|
1794
|
+
/** Whether a mouse can drag the track from slide to slide.
|
|
1795
|
+
|
|
1796
|
+
Off unless asked for, because a press on a slide is then the start of a
|
|
1797
|
+
drag, and text in a slide can no longer be selected with the mouse. A drag
|
|
1798
|
+
of a few pixels or less is still a press. */
|
|
1799
|
+
"mouse-drag"?: (HelixHeadlessCarousel["mouseDrag"]) | undefined;
|
|
1800
|
+
/** Whether a mouse can drag the track from slide to slide.
|
|
1801
|
+
|
|
1802
|
+
Off unless asked for, because a press on a slide is then the start of a
|
|
1803
|
+
drag, and text in a slide can no longer be selected with the mouse. A drag
|
|
1804
|
+
of a few pixels or less is still a press. */
|
|
1805
|
+
mouseDrag?: (HelixHeadlessCarousel["mouseDrag"]) | undefined;
|
|
1678
1806
|
/** The name of the control that moves to the next slide. */
|
|
1679
1807
|
"next-label"?: (HelixHeadlessCarousel["nextLabel"]) | undefined;
|
|
1680
1808
|
/** The name of the control that moves to the next slide. */
|
|
@@ -1816,6 +1944,14 @@ case is the absent attribute, and the styles read it that way. */
|
|
|
1816
1944
|
"previous-label"?: (HelixHeadlessCarousel["previousLabel"]) | undefined;
|
|
1817
1945
|
/** The name of the control that moves to the previous slide. */
|
|
1818
1946
|
previousLabel?: (HelixHeadlessCarousel["previousLabel"]) | undefined;
|
|
1947
|
+
/** The word screen readers announce in place of the carousel's role, set as
|
|
1948
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
1949
|
+
it to leave the role as `group`. */
|
|
1950
|
+
"role-label"?: (HelixHeadlessCarousel["roleLabel"]) | undefined;
|
|
1951
|
+
/** The word screen readers announce in place of the carousel's role, set as
|
|
1952
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
1953
|
+
it to leave the role as `group`. */
|
|
1954
|
+
roleLabel?: (HelixHeadlessCarousel["roleLabel"]) | undefined;
|
|
1819
1955
|
/** The name of each slide, with `{index}` and `{count}` filled in. */
|
|
1820
1956
|
"slide-label"?: (HelixHeadlessCarousel["slideLabel"]) | undefined;
|
|
1821
1957
|
/** The name of each slide, with `{index}` and `{count}` filled in. */
|
|
@@ -1851,10 +1987,11 @@ export type HelixHeadlessChatComposerElementEvent<E = Event> = TypedEvent<
|
|
|
1851
1987
|
/** `helix-send` event type */
|
|
1852
1988
|
export type HelixHeadlessChatComposerHelixSendElementEvent =
|
|
1853
1989
|
HelixHeadlessChatComposerElementEvent<HelixSendEvent>;
|
|
1990
|
+
/** `helix-typing` event type */
|
|
1991
|
+
export type HelixHeadlessChatComposerHelixTypingElementEvent =
|
|
1992
|
+
HelixHeadlessChatComposerElementEvent<HelixTypingEvent>;
|
|
1854
1993
|
|
|
1855
1994
|
export type HelixHeadlessChatComposerVueProps = {
|
|
1856
|
-
/** Whether the composer blocks input, such as while a turn is being sent. */
|
|
1857
|
-
disabled?: (HelixHeadlessChatComposer["disabled"]) | undefined;
|
|
1858
1995
|
/** The field's name, read by screen readers. */
|
|
1859
1996
|
label?: (HelixHeadlessChatComposer["label"]) | undefined;
|
|
1860
1997
|
/** Placeholder text shown in an empty field. */
|
|
@@ -1881,16 +2018,50 @@ button only.
|
|
|
1881
2018
|
`button` is what a composer holding several paragraphs wants, where Enter
|
|
1882
2019
|
has to mean a new line and nothing else. */
|
|
1883
2020
|
submitOn?: (HelixHeadlessChatComposer["submitOn"]) | undefined;
|
|
2021
|
+
/** How long after the last keystroke the user still counts as typing, in
|
|
2022
|
+
milliseconds. */
|
|
2023
|
+
"typing-timeout"?: (HelixHeadlessChatComposer["typingTimeout"] | `${number}`) | undefined;
|
|
2024
|
+
/** How long after the last keystroke the user still counts as typing, in
|
|
2025
|
+
milliseconds. */
|
|
2026
|
+
typingTimeout?: (HelixHeadlessChatComposer["typingTimeout"]) | undefined;
|
|
1884
2027
|
/** The text the user has written.
|
|
1885
2028
|
|
|
1886
2029
|
It follows typing, so reading it gives the draft. Set it to seed a draft or
|
|
1887
2030
|
to replace the one in the field, and set it to `''` to clear it. */
|
|
1888
2031
|
value?: (HelixHeadlessChatComposer["value"]) | undefined;
|
|
2032
|
+
/** Whether the control is disabled and cannot be used.
|
|
2033
|
+
|
|
2034
|
+
Reflected, because the styled tier selects on it, and mirrored to
|
|
2035
|
+
`aria-disabled` rather than removing the element from the accessibility
|
|
2036
|
+
tree, so a screen reader can still announce that the control exists.
|
|
2037
|
+
|
|
2038
|
+
The mirror itself is in `willUpdate` below, here rather than in each
|
|
2039
|
+
control, because here is where `disabled` is. */
|
|
2040
|
+
disabled?: (HelixHeadlessChatComposer["disabled"]) | undefined;
|
|
2041
|
+
/** The name the control's value is submitted under.
|
|
2042
|
+
|
|
2043
|
+
**Reflected, and it is the exception to "reflect only what CSS selects
|
|
2044
|
+
on".** The platform builds a form's entry list from the `name` *content
|
|
2045
|
+
attribute*, not from the property, so a control named through the property
|
|
2046
|
+
submitted under no name at all and was silently dropped. Measured: two
|
|
2047
|
+
inputs in one form, one named by attribute and one by property, and the
|
|
2048
|
+
form carried a single entry.
|
|
2049
|
+
|
|
2050
|
+
Safe for a React consumer, which is what the rule is protecting: React
|
|
2051
|
+
renders a custom element's props as attributes on the server, so the name
|
|
2052
|
+
is already in the markup being hydrated and reflecting it writes what is
|
|
2053
|
+
there. It is only a change to the markup when a consumer assigns it
|
|
2054
|
+
imperatively later, and nothing is hydrating by then.
|
|
2055
|
+
|
|
2056
|
+
Here rather than on each control. */
|
|
2057
|
+
name?: (HelixHeadlessChatComposer["name"]) | undefined;
|
|
1889
2058
|
};
|
|
1890
2059
|
|
|
1891
2060
|
export type HelixHeadlessChatComposerVueEvents = {
|
|
1892
2061
|
/** Fired when the user sends their turn, and cancelable. */
|
|
1893
2062
|
"helix-send": HelixHeadlessChatComposerHelixSendElementEvent;
|
|
2063
|
+
/** The user started or stopped writing, with `typing` saying which, as the composer's `typing` does. */
|
|
2064
|
+
"helix-typing": HelixHeadlessChatComposerHelixTypingElementEvent;
|
|
1894
2065
|
/** The user changed the text. Read it from `value`, for a typing indicator or a saved draft. Sent on the composer and does not bubble. */
|
|
1895
2066
|
input: HelixHeadlessChatComposerElementEvent;
|
|
1896
2067
|
};
|
|
@@ -1915,6 +2086,18 @@ participants is the ordinary case for anything worth building this for.
|
|
|
1915
2086
|
`me` and `them` are the conventional values and the stylesheet knows them;
|
|
1916
2087
|
anything else is a name the consumer styles. */
|
|
1917
2088
|
author?: (HelixHeadlessChatMessage["author"]) | undefined;
|
|
2089
|
+
/** The author's name, as a screen reader says it at the start of the turn,
|
|
2090
|
+
such as "Support" or "Ada Lovelace".
|
|
2091
|
+
|
|
2092
|
+
Empty reads "You" for `me`, the `author` itself where it is a name, and
|
|
2093
|
+
nothing for `them`. */
|
|
2094
|
+
"author-label"?: (HelixHeadlessChatMessage["authorLabel"]) | undefined;
|
|
2095
|
+
/** The author's name, as a screen reader says it at the start of the turn,
|
|
2096
|
+
such as "Support" or "Ada Lovelace".
|
|
2097
|
+
|
|
2098
|
+
Empty reads "You" for `me`, the `author` itself where it is a name, and
|
|
2099
|
+
nothing for `them`. */
|
|
2100
|
+
authorLabel?: (HelixHeadlessChatMessage["authorLabel"]) | undefined;
|
|
1918
2101
|
/** Label for a message that did not send. */
|
|
1919
2102
|
"failed-label"?: (HelixHeadlessChatMessage["failedLabel"]) | undefined;
|
|
1920
2103
|
/** Label for a message that did not send. */
|
|
@@ -1995,6 +2178,18 @@ only the consumer knows whether the server has anything older. */
|
|
|
1995
2178
|
historyText?: (HelixHeadlessChat["historyText"]) | undefined;
|
|
1996
2179
|
/** The conversation's name, read by screen readers. */
|
|
1997
2180
|
label?: (HelixHeadlessChat["label"]) | undefined;
|
|
2181
|
+
/** The word a screen reader says for `me` when it names a turn. */
|
|
2182
|
+
"me-label"?: (HelixHeadlessChat["meLabel"]) | undefined;
|
|
2183
|
+
/** The word a screen reader says for `me` when it names a turn. */
|
|
2184
|
+
meLabel?: (HelixHeadlessChat["meLabel"]) | undefined;
|
|
2185
|
+
/** The name a screen reader gives a turn with both an author and a time.
|
|
2186
|
+
`{author}` is who wrote it and `{time}` is when, as the turn shows it. A
|
|
2187
|
+
turn with only one of the two is named by that one. */
|
|
2188
|
+
"message-label"?: (HelixHeadlessChat["messageLabel"]) | undefined;
|
|
2189
|
+
/** The name a screen reader gives a turn with both an author and a time.
|
|
2190
|
+
`{author}` is who wrote it and `{time}` is when, as the turn shows it. A
|
|
2191
|
+
turn with only one of the two is named by that one. */
|
|
2192
|
+
messageLabel?: (HelixHeadlessChat["messageLabel"]) | undefined;
|
|
1998
2193
|
/** Whether the transcript follows new turns to the bottom.
|
|
1999
2194
|
|
|
2000
2195
|
The reader's scrolling asks first: `helix-before-pin` is cancelable, so a
|
|
@@ -2066,10 +2261,19 @@ export type HelixHeadlessCheckboxGroupHelixBeforeChangeElementEvent =
|
|
|
2066
2261
|
HelixHeadlessCheckboxGroupElementEvent<HelixBeforeChangeEvent>;
|
|
2067
2262
|
|
|
2068
2263
|
export type HelixHeadlessCheckboxGroupVueProps = {
|
|
2264
|
+
/** Whether a box above the set checks or unchecks every enabled box. */
|
|
2265
|
+
"select-all"?: (HelixHeadlessCheckboxGroup["selectAll"]) | undefined;
|
|
2266
|
+
/** Whether a box above the set checks or unchecks every enabled box. */
|
|
2267
|
+
selectAll?: (HelixHeadlessCheckboxGroup["selectAll"]) | undefined;
|
|
2268
|
+
/** The words beside the box `select-all` draws. */
|
|
2269
|
+
"select-all-label"?: (HelixHeadlessCheckboxGroup["selectAllLabel"]) | undefined;
|
|
2270
|
+
/** The words beside the box `select-all` draws. */
|
|
2271
|
+
selectAllLabel?: (HelixHeadlessCheckboxGroup["selectAllLabel"]) | undefined;
|
|
2069
2272
|
/** The checked values, comma separated.
|
|
2070
2273
|
|
|
2071
2274
|
Read from the boxes once they are known, so a box a script ticks directly
|
|
2072
|
-
is in it at once. Written, it is pushed onto the boxes.
|
|
2275
|
+
is in it at once. Written, it is pushed onto the boxes. A box whose value
|
|
2276
|
+
holds a comma cannot be named here: use `values`. */
|
|
2073
2277
|
value?: (HelixHeadlessCheckboxGroup["value"]) | undefined;
|
|
2074
2278
|
/** */
|
|
2075
2279
|
"aria-label"?: unknown;
|
|
@@ -2127,6 +2331,11 @@ imperatively later, and nothing is hydrating by then.
|
|
|
2127
2331
|
|
|
2128
2332
|
Here rather than on each control. */
|
|
2129
2333
|
name?: (HelixHeadlessCheckboxGroup["name"]) | undefined;
|
|
2334
|
+
/** The checked values, as a list, in the order the boxes are written.
|
|
2335
|
+
|
|
2336
|
+
The same set as `value`, and the one to use where a value may hold a
|
|
2337
|
+
comma. Written, it checks exactly those boxes and unchecks the rest. */
|
|
2338
|
+
values?: (HelixHeadlessCheckboxGroup["values"]) | undefined;
|
|
2130
2339
|
};
|
|
2131
2340
|
|
|
2132
2341
|
export type HelixHeadlessCheckboxGroupVueEvents = {
|
|
@@ -2171,6 +2380,28 @@ stylesheets. */
|
|
|
2171
2380
|
"default-checked"?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2172
2381
|
/** Whether the control starts checked. A form reset returns it to this state. */
|
|
2173
2382
|
defaultChecked?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
|
|
2383
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
2384
|
+
read-only control still submits its value.
|
|
2385
|
+
|
|
2386
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
2387
|
+
the press is refused at the inner control, which keeps its box as it
|
|
2388
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
2389
|
+
`checked`, as it can set the value of a read-only text field.
|
|
2390
|
+
|
|
2391
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
2392
|
+
text fields. */
|
|
2393
|
+
readonly?: (HelixHeadlessCheckbox["readOnly"]) | undefined;
|
|
2394
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
2395
|
+
read-only control still submits its value.
|
|
2396
|
+
|
|
2397
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
2398
|
+
the press is refused at the inner control, which keeps its box as it
|
|
2399
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
2400
|
+
`checked`, as it can set the value of a read-only text field.
|
|
2401
|
+
|
|
2402
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
2403
|
+
text fields. */
|
|
2404
|
+
readOnly?: (HelixHeadlessCheckbox["readOnly"]) | undefined;
|
|
2174
2405
|
/** */
|
|
2175
2406
|
"aria-label"?: unknown;
|
|
2176
2407
|
/** The validation message shown under the control. It replaces the
|
|
@@ -2243,9 +2474,17 @@ export type HelixHeadlessCodeBlockVueProps = {
|
|
|
2243
2474
|
"copied-label"?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
|
|
2244
2475
|
/** The copy button's name and tooltip text after a copy. */
|
|
2245
2476
|
copiedLabel?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
|
|
2246
|
-
/** The copy button's name and tooltip text before a copy.
|
|
2477
|
+
/** The copy button's name and tooltip text before a copy.
|
|
2478
|
+
|
|
2479
|
+
Where the block has a name, the button says it too, such as "Copy code,
|
|
2480
|
+
app.ts", so each copy button on a page with several blocks is told apart.
|
|
2481
|
+
In a diff, that is each file's own name. */
|
|
2247
2482
|
"copy-label"?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
|
|
2248
|
-
/** The copy button's name and tooltip text before a copy.
|
|
2483
|
+
/** The copy button's name and tooltip text before a copy.
|
|
2484
|
+
|
|
2485
|
+
Where the block has a name, the button says it too, such as "Copy code,
|
|
2486
|
+
app.ts", so each copy button on a page with several blocks is told apart.
|
|
2487
|
+
In a diff, that is each file's own name. */
|
|
2249
2488
|
copyLabel?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
|
|
2250
2489
|
/** Whether the content is a unified diff, drawn as the lines it changed.
|
|
2251
2490
|
|
|
@@ -2257,6 +2496,20 @@ Reflected, because the stylesheet paints a diff differently from code, and
|
|
|
2257
2496
|
In a diff, each file is named from the patch, and this names a patch that
|
|
2258
2497
|
carries no name of its own. */
|
|
2259
2498
|
label?: (HelixHeadlessCodeBlock["label"]) | undefined;
|
|
2499
|
+
/** Whether the lines are numbered in a gutter beside the code.
|
|
2500
|
+
|
|
2501
|
+
The numbers are hidden from the accessibility tree and are not part of a
|
|
2502
|
+
copy, which takes the code alone. Reflected, because the stylesheet lays
|
|
2503
|
+
the gutter out beside the code. A diff numbers its lines from its hunks
|
|
2504
|
+
whether or not this is set. */
|
|
2505
|
+
"line-numbers"?: (HelixHeadlessCodeBlock["lineNumbers"]) | undefined;
|
|
2506
|
+
/** Whether the lines are numbered in a gutter beside the code.
|
|
2507
|
+
|
|
2508
|
+
The numbers are hidden from the accessibility tree and are not part of a
|
|
2509
|
+
copy, which takes the code alone. Reflected, because the stylesheet lays
|
|
2510
|
+
the gutter out beside the code. A diff numbers its lines from its hunks
|
|
2511
|
+
whether or not this is set. */
|
|
2512
|
+
lineNumbers?: (HelixHeadlessCodeBlock["lineNumbers"]) | undefined;
|
|
2260
2513
|
/** Whether to leave the copy button off.
|
|
2261
2514
|
|
|
2262
2515
|
Negative, which is not a style choice. A boolean attribute is true whenever
|
|
@@ -2303,6 +2556,17 @@ Absent is unified, each removal above its replacement, which fits any
|
|
|
2303
2556
|
width. `split` sets the old version beside the new one. Optional rather
|
|
2304
2557
|
than defaulted, so the host carries no attribute the consumer did not write. */
|
|
2305
2558
|
variant?: (HelixHeadlessCodeBlock["variant"]) | undefined;
|
|
2559
|
+
/** Turns the code into highlighted markup, which the block draws in place of
|
|
2560
|
+
the plain text.
|
|
2561
|
+
|
|
2562
|
+
Called with the code as written and returning HTML, such as the output of
|
|
2563
|
+
Shiki's `codeToHtml` or Prism's `highlight`. **The markup is drawn as
|
|
2564
|
+
given**, so it has to escape the code it was handed, which those
|
|
2565
|
+
highlighters do. Bind the language in the function you pass. The code
|
|
2566
|
+
stays in the slot, so the copy button copies it as written and a reader
|
|
2567
|
+
without the script still has it. Not called on a server, which has no code
|
|
2568
|
+
to read, nor for a diff. */
|
|
2569
|
+
highlight?: (HelixHeadlessCodeBlock["highlight"]) | undefined;
|
|
2306
2570
|
};
|
|
2307
2571
|
|
|
2308
2572
|
export type HelixHeadlessCodeBlockVueEvents = {};
|
|
@@ -2339,6 +2603,26 @@ point.** The field holds a color, so a browser offering to fill it with a
|
|
|
2339
2603
|
saved address is competing for the same keystrokes as the picker. A
|
|
2340
2604
|
consumer who wants autofill can still ask. */
|
|
2341
2605
|
autocomplete?: (HelixHeadlessColorInput["autocomplete"]) | undefined;
|
|
2606
|
+
/** Whether the panel shows a number field for each channel of the color.
|
|
2607
|
+
Passed to the panel; see Color Picker's `channel-fields`. */
|
|
2608
|
+
"channel-fields"?: (HelixHeadlessColorInput["channelFields"]) | undefined;
|
|
2609
|
+
/** Whether the panel shows a number field for each channel of the color.
|
|
2610
|
+
Passed to the panel; see Color Picker's `channel-fields`. */
|
|
2611
|
+
channelFields?: (HelixHeadlessColorInput["channelFields"]) | undefined;
|
|
2612
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2613
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2614
|
+
|
|
2615
|
+
Passed to the panel, whose square, hue ramp and presets say the color's
|
|
2616
|
+
name, and read by the swatch in `swatch`, which says it before the value.
|
|
2617
|
+
Color Picker lists the keys. */
|
|
2618
|
+
"color-words"?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
2619
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2620
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2621
|
+
|
|
2622
|
+
Passed to the panel, whose square, hue ramp and presets say the color's
|
|
2623
|
+
name, and read by the swatch in `swatch`, which says it before the value.
|
|
2624
|
+
Color Picker lists the keys. */
|
|
2625
|
+
colorWords?: (HelixHeadlessColorInput["colorWords"]) | undefined;
|
|
2342
2626
|
/** The syntax the value is written in: `hex`, `rgb`, or `hsl`.
|
|
2343
2627
|
|
|
2344
2628
|
**Undefaulted, because it reflects.** The two together stamp an attribute
|
|
@@ -2539,6 +2823,10 @@ ramps. A consumer who wants autofill can still ask. */
|
|
|
2539
2823
|
"bad-input-message"?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
|
|
2540
2824
|
/** The message shown when the value is text that is not a color. */
|
|
2541
2825
|
badInputMessage?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
|
|
2826
|
+
/** What the blue channel's field is called, in `channel-fields`. */
|
|
2827
|
+
"blue-label"?: (HelixHeadlessColorPicker["blueLabel"]) | undefined;
|
|
2828
|
+
/** What the blue channel's field is called, in `channel-fields`. */
|
|
2829
|
+
blueLabel?: (HelixHeadlessColorPicker["blueLabel"]) | undefined;
|
|
2542
2830
|
/** What the square's vertical ramp is called.
|
|
2543
2831
|
|
|
2544
2832
|
**Every word the picker speaks is a property**, so a page in another
|
|
@@ -2549,6 +2837,50 @@ language hears its own rather than English between its own labels. */
|
|
|
2549
2837
|
**Every word the picker speaks is a property**, so a page in another
|
|
2550
2838
|
language hears its own rather than English between its own labels. */
|
|
2551
2839
|
brightnessLabel?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
|
|
2840
|
+
/** Whether the picker shows a number field for each channel of the color, as
|
|
2841
|
+
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
2842
|
+
and rgb, hue, saturation and lightness for hsl, and the opacity with
|
|
2843
|
+
`alpha`.
|
|
2844
|
+
|
|
2845
|
+
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
2846
|
+
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
2847
|
+
the syntax the format toggle sets. */
|
|
2848
|
+
"channel-fields"?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
2849
|
+
/** Whether the picker shows a number field for each channel of the color, as
|
|
2850
|
+
React Aria's ColorField does with `channel`: red, green and blue for hex
|
|
2851
|
+
and rgb, hue, saturation and lightness for hsl, and the opacity with
|
|
2852
|
+
`alpha`.
|
|
2853
|
+
|
|
2854
|
+
For a reader who has the numbers from a brand guide, and for a keyboard,
|
|
2855
|
+
where typing 128 is quicker than holding an arrow key. The fields follow
|
|
2856
|
+
the syntax the format toggle sets. */
|
|
2857
|
+
channelFields?: (HelixHeadlessColorPicker["channelFields"]) | undefined;
|
|
2858
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2859
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2860
|
+
|
|
2861
|
+
**A color is named the way React Aria names one**, as "vibrant red" or
|
|
2862
|
+
"dark grayish blue", and the keys are the ones `@react-stately/color`
|
|
2863
|
+
translates, so a table a page already has for it can be handed over whole.
|
|
2864
|
+
`colorName` and `transparentColorName` are the two sentences that put the
|
|
2865
|
+
words together. A word left out is spoken in English.
|
|
2866
|
+
|
|
2867
|
+
The name follows the numbers on the square, follows the number on the hue
|
|
2868
|
+
ramp, and names each preset, so a reader who cannot see the color hears
|
|
2869
|
+
which one it is. */
|
|
2870
|
+
"color-words"?: (HelixHeadlessColorPicker["colorWords"]) | undefined;
|
|
2871
|
+
/** The words a color's name is spoken in, as JSON keyed by their English,
|
|
2872
|
+
such as `{"red": "rot", "vibrant": "kräftiges"}`.
|
|
2873
|
+
|
|
2874
|
+
**A color is named the way React Aria names one**, as "vibrant red" or
|
|
2875
|
+
"dark grayish blue", and the keys are the ones `@react-stately/color`
|
|
2876
|
+
translates, so a table a page already has for it can be handed over whole.
|
|
2877
|
+
`colorName` and `transparentColorName` are the two sentences that put the
|
|
2878
|
+
words together. A word left out is spoken in English.
|
|
2879
|
+
|
|
2880
|
+
The name follows the numbers on the square, follows the number on the hue
|
|
2881
|
+
ramp, and names each preset, so a reader who cannot see the color hears
|
|
2882
|
+
which one it is. */
|
|
2883
|
+
colorWords?: (HelixHeadlessColorPicker["colorWords"]) | undefined;
|
|
2552
2884
|
/** The text the sample shows for a moment after it copies the value. */
|
|
2553
2885
|
"copied-label"?: (HelixHeadlessColorPicker["copiedLabel"]) | undefined;
|
|
2554
2886
|
/** The text the sample shows for a moment after it copies the value. */
|
|
@@ -2572,6 +2904,10 @@ Only what is written. Everything is read whatever this says, so a picker on
|
|
|
2572
2904
|
"format-label"?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
2573
2905
|
/** What the syntax toggle is called, with `{format}` filled in. */
|
|
2574
2906
|
formatLabel?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
|
|
2907
|
+
/** What the green channel's field is called, in `channel-fields`. */
|
|
2908
|
+
"green-label"?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
2909
|
+
/** What the green channel's field is called, in `channel-fields`. */
|
|
2910
|
+
greenLabel?: (HelixHeadlessColorPicker["greenLabel"]) | undefined;
|
|
2575
2911
|
/** What the hue channel is called. */
|
|
2576
2912
|
"hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
|
|
2577
2913
|
/** What the hue channel is called. */
|
|
@@ -2584,6 +2920,12 @@ the label, the hint and the feedback, and a second message inside the panel
|
|
|
2584
2920
|
would be the same error said twice. What is left for the picker is the one
|
|
2585
2921
|
thing the field cannot draw from outside, the mark on the answer itself. */
|
|
2586
2922
|
invalid?: (HelixHeadlessColorPicker["invalid"]) | undefined;
|
|
2923
|
+
/** What the lightness channel's field is called, in `channel-fields` with
|
|
2924
|
+
hsl. */
|
|
2925
|
+
"lightness-label"?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
2926
|
+
/** What the lightness channel's field is called, in `channel-fields` with
|
|
2927
|
+
hsl. */
|
|
2928
|
+
lightnessLabel?: (HelixHeadlessColorPicker["lightnessLabel"]) | undefined;
|
|
2587
2929
|
/** Hides the eyedropper. Without it, the eyedropper appears in browsers that
|
|
2588
2930
|
support one. */
|
|
2589
2931
|
"no-eyedropper"?: (HelixHeadlessColorPicker["noEyedropper"]) | undefined;
|
|
@@ -2680,6 +3022,10 @@ letting it move would show `rgb` over a hex it is no longer allowed to
|
|
|
2680
3022
|
restate. The eyedropper clears the screen and runs a system sampler, so
|
|
2681
3023
|
letting it open would take a color from the reader and drop it. */
|
|
2682
3024
|
readOnly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
|
|
3025
|
+
/** What the red channel's field is called, in `channel-fields`. */
|
|
3026
|
+
"red-label"?: (HelixHeadlessColorPicker["redLabel"]) | undefined;
|
|
3027
|
+
/** What the red channel's field is called, in `channel-fields`. */
|
|
3028
|
+
redLabel?: (HelixHeadlessColorPicker["redLabel"]) | undefined;
|
|
2683
3029
|
/** Requires a color before the form can submit.
|
|
2684
3030
|
|
|
2685
3031
|
**A color is exactly as requirable as a date**, which is the comparison
|
|
@@ -2806,6 +3152,24 @@ export type HelixHeadlessComboboxToggleElementEvent =
|
|
|
2806
3152
|
HelixHeadlessComboboxElementEvent<ToggleEvent>;
|
|
2807
3153
|
|
|
2808
3154
|
export type HelixHeadlessComboboxVueProps = {
|
|
3155
|
+
/** Whether text that names no option is taken as the value, as React Aria's
|
|
3156
|
+
`allowsCustomValue`.
|
|
3157
|
+
|
|
3158
|
+
For a field where the list is a help and not the whole of the answer, a
|
|
3159
|
+
city or a job title. What was typed becomes the value when the reader
|
|
3160
|
+
leaves the field or presses Enter with nothing highlighted, and text that
|
|
3161
|
+
names an option takes that option. Unlike `creatable`, no event asks
|
|
3162
|
+
first and no option is expected to be added: the value is the text. */
|
|
3163
|
+
"allows-custom-value"?: (HelixHeadlessCombobox["allowsCustomValue"]) | undefined;
|
|
3164
|
+
/** Whether text that names no option is taken as the value, as React Aria's
|
|
3165
|
+
`allowsCustomValue`.
|
|
3166
|
+
|
|
3167
|
+
For a field where the list is a help and not the whole of the answer, a
|
|
3168
|
+
city or a job title. What was typed becomes the value when the reader
|
|
3169
|
+
leaves the field or presses Enter with nothing highlighted, and text that
|
|
3170
|
+
names an option takes that option. Unlike `creatable`, no event asks
|
|
3171
|
+
first and no option is expected to be added: the value is the text. */
|
|
3172
|
+
allowsCustomValue?: (HelixHeadlessCombobox["allowsCustomValue"]) | undefined;
|
|
2809
3173
|
/** What the browser may autofill in the text field, as a platform token.
|
|
2810
3174
|
|
|
2811
3175
|
**Defaults to `off`, which is not the platform's default and is the
|
|
@@ -2884,6 +3248,20 @@ filled in.
|
|
|
2884
3248
|
**The name goes in**, so a row of them is heard as which one each
|
|
2885
3249
|
removes rather than as "Remove" said once per chosen option. */
|
|
2886
3250
|
removeLabel?: (HelixHeadlessCombobox["removeLabel"]) | undefined;
|
|
3251
|
+
/** What a screen reader hears when typing leaves one option. `{count}` is
|
|
3252
|
+
the count. */
|
|
3253
|
+
"result-label"?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
|
|
3254
|
+
/** What a screen reader hears when typing leaves one option. `{count}` is
|
|
3255
|
+
the count. */
|
|
3256
|
+
resultLabel?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
|
|
3257
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3258
|
+
options. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3259
|
+
two. */
|
|
3260
|
+
"results-label"?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
|
|
3261
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3262
|
+
options. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3263
|
+
two. */
|
|
3264
|
+
resultsLabel?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
|
|
2887
3265
|
/** Whether the field completes the word as the user types.
|
|
2888
3266
|
|
|
2889
3267
|
`suggest` rather than `autocomplete`, which is a real HTML attribute this
|
|
@@ -3045,6 +3423,14 @@ export type HelixHeadlessCommandVueProps = {
|
|
|
3045
3423
|
"empty-text"?: (HelixHeadlessCommand["emptyText"]) | undefined;
|
|
3046
3424
|
/** The text shown when the filter matches no commands. */
|
|
3047
3425
|
emptyText?: (HelixHeadlessCommand["emptyText"]) | undefined;
|
|
3426
|
+
/** How long typing rests before the commands are filtered, in milliseconds,
|
|
3427
|
+
so a palette filtered on a server sends one `helix-filter` for a word.
|
|
3428
|
+
`0` filters on every keystroke. See Listbox's `filter-delay`. */
|
|
3429
|
+
"filter-delay"?: (HelixHeadlessCommand["filterDelay"] | `${number}`) | undefined;
|
|
3430
|
+
/** How long typing rests before the commands are filtered, in milliseconds,
|
|
3431
|
+
so a palette filtered on a server sends one `helix-filter` for a word.
|
|
3432
|
+
`0` filters on every keystroke. See Listbox's `filter-delay`. */
|
|
3433
|
+
filterDelay?: (HelixHeadlessCommand["filterDelay"]) | undefined;
|
|
3048
3434
|
/** The key that opens the palette, written as `mod+k`, `shift+p`, or `k`.
|
|
3049
3435
|
|
|
3050
3436
|
Empty turns it off, for a consumer who opens the palette from a button or
|
|
@@ -3064,6 +3450,20 @@ Passed to the list, which shows `loading-text` and tells screen readers. */
|
|
|
3064
3450
|
loadingText?: (HelixHeadlessCommand["loadingText"]) | undefined;
|
|
3065
3451
|
/** The text shown in the filter field before anything is typed. */
|
|
3066
3452
|
placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
|
|
3453
|
+
/** What a screen reader hears when typing leaves one command. `{count}` is
|
|
3454
|
+
the count. */
|
|
3455
|
+
"result-label"?: (HelixHeadlessCommand["resultLabel"]) | undefined;
|
|
3456
|
+
/** What a screen reader hears when typing leaves one command. `{count}` is
|
|
3457
|
+
the count. */
|
|
3458
|
+
resultLabel?: (HelixHeadlessCommand["resultLabel"]) | undefined;
|
|
3459
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3460
|
+
commands. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3461
|
+
two. */
|
|
3462
|
+
"results-label"?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
|
|
3463
|
+
/** What a screen reader hears when typing leaves any other number of
|
|
3464
|
+
commands. `{count}` is the count, and `Intl.PluralRules` picks between the
|
|
3465
|
+
two. */
|
|
3466
|
+
resultsLabel?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
|
|
3067
3467
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
3068
3468
|
"default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
|
|
3069
3469
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -3090,7 +3490,7 @@ export type HelixHeadlessCommandVueEvents = {
|
|
|
3090
3490
|
"helix-before-open": HelixHeadlessCommandHelixBeforeOpenElementEvent;
|
|
3091
3491
|
/** Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and filter the commands yourself, for example on a server while `loading` is set. */
|
|
3092
3492
|
"helix-filter": HelixHeadlessCommandHelixFilterElementEvent;
|
|
3093
|
-
/** A command was chosen. Cancelable: cancel it to keep the palette open. */
|
|
3493
|
+
/** A command was chosen, with its `href` where the option is a link. Cancelable: cancel it to keep the palette open, and to keep the browser from following the link. */
|
|
3094
3494
|
"helix-select": HelixHeadlessCommandHelixSelectElementEvent;
|
|
3095
3495
|
/** The palette opened or closed. The event carries `newState` and `oldState`. */
|
|
3096
3496
|
toggle: HelixHeadlessCommandToggleElementEvent;
|
|
@@ -3104,6 +3504,9 @@ export type HelixHeadlessCopyButtonElementEvent<E = Event> = TypedEvent<
|
|
|
3104
3504
|
/** `helix-copy` event type */
|
|
3105
3505
|
export type HelixHeadlessCopyButtonHelixCopyElementEvent =
|
|
3106
3506
|
HelixHeadlessCopyButtonElementEvent<HelixCopyEvent>;
|
|
3507
|
+
/** `helix-copy-error` event type */
|
|
3508
|
+
export type HelixHeadlessCopyButtonHelixCopyErrorElementEvent =
|
|
3509
|
+
HelixHeadlessCopyButtonElementEvent<HelixCopyErrorEvent>;
|
|
3107
3510
|
|
|
3108
3511
|
export type HelixHeadlessCopyButtonVueProps = {
|
|
3109
3512
|
/** The button's name and tooltip text after a copy.
|
|
@@ -3116,6 +3519,17 @@ dash-casing it, and `copiedlabel` is not what anyone would type. */
|
|
|
3116
3519
|
`attribute` written out, because Lit lowercases a property name rather than
|
|
3117
3520
|
dash-casing it, and `copiedlabel` is not what anyone would type. */
|
|
3118
3521
|
copiedLabel?: (HelixHeadlessCopyButton["copiedLabel"]) | undefined;
|
|
3522
|
+
/** The button's name and tooltip text after a press that put nothing on the
|
|
3523
|
+
clipboard. */
|
|
3524
|
+
"error-label"?: (HelixHeadlessCopyButton["errorLabel"]) | undefined;
|
|
3525
|
+
/** The button's name and tooltip text after a press that put nothing on the
|
|
3526
|
+
clipboard. */
|
|
3527
|
+
errorLabel?: (HelixHeadlessCopyButton["errorLabel"]) | undefined;
|
|
3528
|
+
/** The element to copy from, by its id: `key` for its text, `key[value]` for
|
|
3529
|
+
an attribute, and `key.value` for a property. Read at the press, and used
|
|
3530
|
+
in place of `value`. An element that is not there copies nothing, which is
|
|
3531
|
+
a failed copy. */
|
|
3532
|
+
from?: (HelixHeadlessCopyButton["from"]) | undefined;
|
|
3119
3533
|
/** The button's name and tooltip text before a copy.
|
|
3120
3534
|
|
|
3121
3535
|
Defaulted rather than left empty. An icon-only control must be named, and
|
|
@@ -3129,74 +3543,22 @@ whatever its `type`. Declared here so its own page says what it holds. */
|
|
|
3129
3543
|
value?: (HelixHeadlessCopyButton["value"]) | undefined;
|
|
3130
3544
|
/** */
|
|
3131
3545
|
"aria-label"?: unknown;
|
|
3132
|
-
/**
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
/** The id of the element the command is sent to. */
|
|
3149
|
-
commandfor?: (HelixHeadlessCopyButton["commandFor"]) | undefined;
|
|
3150
|
-
/** The id of the element the command is sent to. */
|
|
3151
|
-
commandFor?: (HelixHeadlessCopyButton["commandFor"]) | undefined;
|
|
3152
|
-
/** Where this button's submission goes, overriding the form's own.
|
|
3153
|
-
|
|
3154
|
-
**The five `form*` overrides work by writing the form and putting it back**,
|
|
3155
|
-
which is the only mechanism available and is closer to the platform than it
|
|
3156
|
-
sounds. `requestSubmit(submitter)` is how a native submitter carries these,
|
|
3157
|
-
and it refuses ours twice over: the inner `<button>` is `type="button"` so
|
|
3158
|
-
it is not a submit button, and it sits in this shadow root so its form owner
|
|
3159
|
-
is not the consumer's form. Both throw. So the submission is started with no
|
|
3160
|
-
submitter and the overrides are applied to the form for the duration of it.
|
|
3161
|
-
|
|
3162
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
3163
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
3164
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
3165
|
-
native submitter would have given it, which is the point. */
|
|
3166
|
-
formaction?: (HelixHeadlessCopyButton["formAction"]) | undefined;
|
|
3167
|
-
/** Where this button's submission goes, overriding the form's own.
|
|
3168
|
-
|
|
3169
|
-
**The five `form*` overrides work by writing the form and putting it back**,
|
|
3170
|
-
which is the only mechanism available and is closer to the platform than it
|
|
3171
|
-
sounds. `requestSubmit(submitter)` is how a native submitter carries these,
|
|
3172
|
-
and it refuses ours twice over: the inner `<button>` is `type="button"` so
|
|
3173
|
-
it is not a submit button, and it sits in this shadow root so its form owner
|
|
3174
|
-
is not the consumer's form. Both throw. So the submission is started with no
|
|
3175
|
-
submitter and the overrides are applied to the form for the duration of it.
|
|
3176
|
-
|
|
3177
|
-
The whole submit algorithm runs synchronously inside `requestSubmit()`, so
|
|
3178
|
-
the window is one call and a `finally` closes it whether or not a listener
|
|
3179
|
-
refused. What a `submit` handler observes during that window is the form a
|
|
3180
|
-
native submitter would have given it, which is the point. */
|
|
3181
|
-
formAction?: (HelixHeadlessCopyButton["formAction"]) | undefined;
|
|
3182
|
-
/** How the submission is encoded, overriding the form's own. */
|
|
3183
|
-
formenctype?: (HelixHeadlessCopyButton["formEnctype"]) | undefined;
|
|
3184
|
-
/** How the submission is encoded, overriding the form's own. */
|
|
3185
|
-
formEnctype?: (HelixHeadlessCopyButton["formEnctype"]) | undefined;
|
|
3186
|
-
/** Which HTTP method the submission uses, overriding the form's own. */
|
|
3187
|
-
formmethod?: (HelixHeadlessCopyButton["formMethod"]) | undefined;
|
|
3188
|
-
/** Which HTTP method the submission uses, overriding the form's own. */
|
|
3189
|
-
formMethod?: (HelixHeadlessCopyButton["formMethod"]) | undefined;
|
|
3190
|
-
/** Whether this submission skips the form's validation. */
|
|
3191
|
-
formnovalidate?: (HelixHeadlessCopyButton["formNoValidate"]) | undefined;
|
|
3192
|
-
/** Whether this submission skips the form's validation. */
|
|
3193
|
-
formNoValidate?: (HelixHeadlessCopyButton["formNoValidate"]) | undefined;
|
|
3194
|
-
/** Which browsing context the response lands in, overriding the form's own. */
|
|
3195
|
-
formtarget?: (HelixHeadlessCopyButton["formTarget"]) | undefined;
|
|
3196
|
-
/** Which browsing context the response lands in, overriding the form's own. */
|
|
3197
|
-
formTarget?: (HelixHeadlessCopyButton["formTarget"]) | undefined;
|
|
3198
|
-
/** What activating the button does to its form. */
|
|
3199
|
-
type?: (HelixHeadlessCopyButton["type"]) | undefined;
|
|
3546
|
+
/** Whether the action the button started is still running.
|
|
3547
|
+
|
|
3548
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
3549
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
3550
|
+
click does not reach your listeners. The inner control carries
|
|
3551
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
3552
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
3553
|
+
turning ring over its words.
|
|
3554
|
+
|
|
3555
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
3556
|
+
a press, so focus stays where the reader left it. */
|
|
3557
|
+
pending?: (HelixHeadlessCopyButton["pending"]) | undefined;
|
|
3558
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
3559
|
+
"pending-label"?: (HelixHeadlessCopyButton["pendingLabel"]) | undefined;
|
|
3560
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
3561
|
+
pendingLabel?: (HelixHeadlessCopyButton["pendingLabel"]) | undefined;
|
|
3200
3562
|
/** Whether the control is disabled and cannot be used.
|
|
3201
3563
|
|
|
3202
3564
|
Reflected, because the styled tier selects on it, and mirrored to
|
|
@@ -3223,31 +3585,6 @@ imperatively later, and nothing is hydrating by then.
|
|
|
3223
3585
|
|
|
3224
3586
|
Here rather than on each control. */
|
|
3225
3587
|
name?: (HelixHeadlessCopyButton["name"]) | undefined;
|
|
3226
|
-
/** Whether this button is a disclosure trigger, and whether its panel is open.
|
|
3227
|
-
|
|
3228
|
-
**Set by whatever owns the panel, and a property rather than an attribute
|
|
3229
|
-
for the reason `Menu` already states about its items**: an attribute
|
|
3230
|
-
written onto a consumer's element after it upgrades is a hydration mismatch
|
|
3231
|
-
waiting to happen. Measured 28 Aug 2026 against React 19.2.8, server markup
|
|
3232
|
-
hydrated with the definitions loaded either side of `hydrateRoot`:
|
|
3233
|
-
`Megamenu` and `SpeedDial` wrote `aria-expanded` onto the slotted trigger
|
|
3234
|
-
and React reported "some attributes of the server rendered HTML didn't
|
|
3235
|
-
match the client properties. This won't be patched up" in both orders;
|
|
3236
|
-
`Popover` and `Menu`, which write nothing, were clean in both.
|
|
3237
|
-
|
|
3238
|
-
**A property crosses that gap because React never looks at one.** It diffs
|
|
3239
|
-
the attributes it rendered, and this one is `attribute: false`, so the state
|
|
3240
|
-
travels to the inner `<button>` and lands inside a shadow root React does
|
|
3241
|
-
not own and cannot compare. The consumer's own element is left exactly as
|
|
3242
|
-
they served it and the reader is still told what the control does.
|
|
3243
|
-
|
|
3244
|
-
`undefined` renders nothing at all, so a button that is not a trigger
|
|
3245
|
-
carries no `aria-expanded`: the resting state is the attribute's absence,
|
|
3246
|
-
which is the rule every reflected property here follows.
|
|
3247
|
-
|
|
3248
|
-
A consumer who wants to say this statically writes `aria-expanded` on the
|
|
3249
|
-
host instead, which `AriaForwardController` carries to the same place. */
|
|
3250
|
-
expanded?: (HelixHeadlessCopyButton["expanded"]) | undefined;
|
|
3251
3588
|
/** Whether the button holds its group's tab stop.
|
|
3252
3589
|
|
|
3253
3590
|
A toolbar keeps one tab stop across its children, and the obvious way to do
|
|
@@ -3259,14 +3596,6 @@ and the stop lands on the inner control inside the shadow root.
|
|
|
3259
3596
|
No attribute, because it is coordination between elements rather than
|
|
3260
3597
|
anything a consumer sets. */
|
|
3261
3598
|
focusable?: (HelixHeadlessCopyButton["focusable"]) | undefined;
|
|
3262
|
-
/** What kind of panel this button opens, where it opens one: `menu` for a
|
|
3263
|
-
`Menu`.
|
|
3264
|
-
|
|
3265
|
-
Set by the component that owns the panel, as a property for the reason
|
|
3266
|
-
`expanded` gives above. It is what makes a reader say the button opens a
|
|
3267
|
-
menu. Read from Chromium's tree, a Menu's trigger was a plain button that
|
|
3268
|
-
reported collapsed and expanded and no popup. */
|
|
3269
|
-
popup?: (HelixHeadlessCopyButton["popup"]) | undefined;
|
|
3270
3599
|
/** The element this button's command is sent to, resolved.
|
|
3271
3600
|
|
|
3272
3601
|
The platform's own accessor, because the resolution is otherwise kept
|
|
@@ -3280,6 +3609,8 @@ invoker without an id in the same tree needs. */
|
|
|
3280
3609
|
export type HelixHeadlessCopyButtonVueEvents = {
|
|
3281
3610
|
/** Fired after the clipboard write succeeds. */
|
|
3282
3611
|
"helix-copy": HelixHeadlessCopyButtonHelixCopyElementEvent;
|
|
3612
|
+
/** Fired when a press put nothing on the clipboard: the browser did not allow the write, or there was nothing to copy. */
|
|
3613
|
+
"helix-copy-error": HelixHeadlessCopyButtonHelixCopyErrorElementEvent;
|
|
3283
3614
|
};
|
|
3284
3615
|
|
|
3285
3616
|
/** `HelixHeadlessDataTable` component event */
|
|
@@ -3290,12 +3621,18 @@ export type HelixHeadlessDataTableElementEvent<E = Event> = TypedEvent<
|
|
|
3290
3621
|
/** `helix-activate` event type */
|
|
3291
3622
|
export type HelixHeadlessDataTableHelixActivateElementEvent =
|
|
3292
3623
|
HelixHeadlessDataTableElementEvent<HelixActivateEvent>;
|
|
3624
|
+
/** `helix-expand` event type */
|
|
3625
|
+
export type HelixHeadlessDataTableHelixExpandElementEvent =
|
|
3626
|
+
HelixHeadlessDataTableElementEvent<HelixExpandEvent>;
|
|
3293
3627
|
/** `helix-filter` event type */
|
|
3294
3628
|
export type HelixHeadlessDataTableHelixFilterElementEvent =
|
|
3295
3629
|
HelixHeadlessDataTableElementEvent<HelixFilterEvent>;
|
|
3296
3630
|
/** `helix-filtered` event type */
|
|
3297
3631
|
export type HelixHeadlessDataTableHelixFilteredElementEvent =
|
|
3298
3632
|
HelixHeadlessDataTableElementEvent<HelixFilteredEvent>;
|
|
3633
|
+
/** `helix-load-more` event type */
|
|
3634
|
+
export type HelixHeadlessDataTableHelixLoadMoreElementEvent =
|
|
3635
|
+
HelixHeadlessDataTableElementEvent<HelixLoadMoreEvent>;
|
|
3299
3636
|
/** `helix-navigate` event type */
|
|
3300
3637
|
export type HelixHeadlessDataTableHelixNavigateElementEvent =
|
|
3301
3638
|
HelixHeadlessDataTableElementEvent<HelixNavigateEvent>;
|
|
@@ -3323,6 +3660,24 @@ export type HelixHeadlessDataTableVueProps = {
|
|
|
3323
3660
|
"ascending-label"?: (HelixHeadlessDataTable["ascendingLabel"]) | undefined;
|
|
3324
3661
|
/** The word for an ascending sort, in `sorted-label`. */
|
|
3325
3662
|
ascendingLabel?: (HelixHeadlessDataTable["ascendingLabel"]) | undefined;
|
|
3663
|
+
/** The field that holds a row's child rows, as an array. Set it, and `row-key`,
|
|
3664
|
+
and the grid becomes a tree grid.
|
|
3665
|
+
|
|
3666
|
+
Reflected, because the styled tier indents a tree grid's row headers by
|
|
3667
|
+
it. No default, so a table that sets none writes nothing onto its host. */
|
|
3668
|
+
"child-field"?: (HelixHeadlessDataTable["childField"]) | undefined;
|
|
3669
|
+
/** The field that holds a row's child rows, as an array. Set it, and `row-key`,
|
|
3670
|
+
and the grid becomes a tree grid.
|
|
3671
|
+
|
|
3672
|
+
Reflected, because the styled tier indents a tree grid's row headers by
|
|
3673
|
+
it. No default, so a table that sets none writes nothing onto its host. */
|
|
3674
|
+
childField?: (HelixHeadlessDataTable["childField"]) | undefined;
|
|
3675
|
+
/** The keys of the rows open at the start, separated by commas. Used until
|
|
3676
|
+
`expanded` is set. */
|
|
3677
|
+
"default-expanded"?: (HelixHeadlessDataTable["defaultExpanded"]) | undefined;
|
|
3678
|
+
/** The keys of the rows open at the start, separated by commas. Used until
|
|
3679
|
+
`expanded` is set. */
|
|
3680
|
+
defaultExpanded?: (HelixHeadlessDataTable["defaultExpanded"]) | undefined;
|
|
3326
3681
|
/** The starting search query, used until `filter` is set. */
|
|
3327
3682
|
"default-filter"?: (HelixHeadlessDataTable["defaultFilter"]) | undefined;
|
|
3328
3683
|
/** The starting search query, used until `filter` is set. */
|
|
@@ -3361,6 +3716,9 @@ replaces this with what each row came to as it draws. It still has to be
|
|
|
3361
3716
|
close, because it is what the scrollbar is built from before anything has
|
|
3362
3717
|
been measured. */
|
|
3363
3718
|
estimate?: (HelixHeadlessDataTable["estimate"]) | undefined;
|
|
3719
|
+
/** The keys of the open rows in a tree grid, separated by commas, the shape of
|
|
3720
|
+
`selected`. A reader's press writes it and then sends `helix-expand`. */
|
|
3721
|
+
expanded?: (HelixHeadlessDataTable["expanded"]) | undefined;
|
|
3364
3722
|
/** The search query. A row is shown when the query matches any of its columns.
|
|
3365
3723
|
|
|
3366
3724
|
One query rather than a predicate per column, which is what a reader means
|
|
@@ -3375,6 +3733,22 @@ replaced with the page it jumps to. */
|
|
|
3375
3733
|
gapLabel?: (HelixHeadlessDataTable["gapLabel"]) | undefined;
|
|
3376
3734
|
/** The grid's name, read by screen readers. */
|
|
3377
3735
|
label?: (HelixHeadlessDataTable["label"]) | undefined;
|
|
3736
|
+
/** Draws a row after the last one with a button that asks for more rows.
|
|
3737
|
+
|
|
3738
|
+
The button sends `helix-load-more`, and a `windowed` table sends it by
|
|
3739
|
+
itself once a reader scrolls within one screen of the end. Turn it off
|
|
3740
|
+
when there are no more rows to load. */
|
|
3741
|
+
"load-more"?: (HelixHeadlessDataTable["loadMore"]) | undefined;
|
|
3742
|
+
/** Draws a row after the last one with a button that asks for more rows.
|
|
3743
|
+
|
|
3744
|
+
The button sends `helix-load-more`, and a `windowed` table sends it by
|
|
3745
|
+
itself once a reader scrolls within one screen of the end. Turn it off
|
|
3746
|
+
when there are no more rows to load. */
|
|
3747
|
+
loadMore?: (HelixHeadlessDataTable["loadMore"]) | undefined;
|
|
3748
|
+
/** The words on the button in the `more` row. */
|
|
3749
|
+
"load-more-label"?: (HelixHeadlessDataTable["loadMoreLabel"]) | undefined;
|
|
3750
|
+
/** The words on the button in the `more` row. */
|
|
3751
|
+
loadMoreLabel?: (HelixHeadlessDataTable["loadMoreLabel"]) | undefined;
|
|
3378
3752
|
/** Where filtering, sorting, and paging happen. `client` does them in the
|
|
3379
3753
|
table, and `server` leaves them to your code.
|
|
3380
3754
|
|
|
@@ -3582,10 +3956,14 @@ holds and reordering it under them is a mutation they did not ask for. */
|
|
|
3582
3956
|
export type HelixHeadlessDataTableVueEvents = {
|
|
3583
3957
|
/** Fired after the page changes, with the new page as a string in `detail.value`. */
|
|
3584
3958
|
"helix-activate": HelixHeadlessDataTableHelixActivateElementEvent;
|
|
3959
|
+
/** Fired after a row opens or closes, with every open row's key, separated by commas, which `expanded` also holds. */
|
|
3960
|
+
"helix-expand": HelixHeadlessDataTableHelixExpandElementEvent;
|
|
3585
3961
|
/** The search query is about to change. Cancelable: cancel it to keep the current query. */
|
|
3586
3962
|
"helix-filter": HelixHeadlessDataTableHelixFilterElementEvent;
|
|
3587
3963
|
/** Fired after the search query changes, with the new query. */
|
|
3588
3964
|
"helix-filtered": HelixHeadlessDataTableHelixFilteredElementEvent;
|
|
3965
|
+
/** Fired when a reader asks for more rows, by the `load-more` row's button or by scrolling a `windowed` table near its end. */
|
|
3966
|
+
"helix-load-more": HelixHeadlessDataTableHelixLoadMoreElementEvent;
|
|
3589
3967
|
/** Another page was requested. Cancelable: cancel it to stay on the current page. */
|
|
3590
3968
|
"helix-navigate": HelixHeadlessDataTableHelixNavigateElementEvent;
|
|
3591
3969
|
/** The columns are about to move. The event carries every field in the new order. Cancelable: cancel it to keep the current order. */
|
|
@@ -3705,6 +4083,12 @@ and is Sunday otherwise. */
|
|
|
3705
4083
|
locale?: (HelixHeadlessDateInput["locale"]) | undefined;
|
|
3706
4084
|
/** The latest date that can be chosen, as `YYYY-MM-DD`. */
|
|
3707
4085
|
max?: (HelixHeadlessDateInput["max"]) | undefined;
|
|
4086
|
+
/** How far the calendar's heading steps back from the days: `month` or
|
|
4087
|
+
`year`. Handed to the calendar; see Date Picker's `max-view`. */
|
|
4088
|
+
"max-view"?: (HelixHeadlessDateInput["maxView"]) | undefined;
|
|
4089
|
+
/** How far the calendar's heading steps back from the days: `month` or
|
|
4090
|
+
`year`. Handed to the calendar; see Date Picker's `max-view`. */
|
|
4091
|
+
maxView?: (HelixHeadlessDateInput["maxView"]) | undefined;
|
|
3708
4092
|
/** The earliest date that can be chosen, as `YYYY-MM-DD`. */
|
|
3709
4093
|
min?: (HelixHeadlessDateInput["min"]) | undefined;
|
|
3710
4094
|
/** How many dates can be held at once.
|
|
@@ -3720,16 +4104,38 @@ an end in April otherwise means paging between them and losing sight of the
|
|
|
3720
4104
|
first. The panel is sized by its content, so this widens it, and where the
|
|
3721
4105
|
window has no room for that width it shows one month until there is. */
|
|
3722
4106
|
months?: (HelixHeadlessDateInput["months"]) | undefined;
|
|
4107
|
+
/** The name of the calendar's heading where it shows the months, with
|
|
4108
|
+
`{heading}` filled in. */
|
|
4109
|
+
"month-view-label"?: (HelixHeadlessDateInput["monthViewLabel"]) | undefined;
|
|
4110
|
+
/** The name of the calendar's heading where it shows the months, with
|
|
4111
|
+
`{heading}` filled in. */
|
|
4112
|
+
monthViewLabel?: (HelixHeadlessDateInput["monthViewLabel"]) | undefined;
|
|
3723
4113
|
/** The name of the calendar's control that moves to the next month. */
|
|
3724
4114
|
"next-label"?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
|
|
3725
4115
|
/** The name of the calendar's control that moves to the next month. */
|
|
3726
4116
|
nextLabel?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
|
|
4117
|
+
/** The name of the calendar's control that moves forward a year. */
|
|
4118
|
+
"next-year-label"?: (HelixHeadlessDateInput["nextYearLabel"]) | undefined;
|
|
4119
|
+
/** The name of the calendar's control that moves forward a year. */
|
|
4120
|
+
nextYearLabel?: (HelixHeadlessDateInput["nextYearLabel"]) | undefined;
|
|
4121
|
+
/** The name of the calendar's control that moves forward a page of years. */
|
|
4122
|
+
"next-years-label"?: (HelixHeadlessDateInput["nextYearsLabel"]) | undefined;
|
|
4123
|
+
/** The name of the calendar's control that moves forward a page of years. */
|
|
4124
|
+
nextYearsLabel?: (HelixHeadlessDateInput["nextYearsLabel"]) | undefined;
|
|
3727
4125
|
/** The text the field shows before a date is entered. */
|
|
3728
4126
|
placeholder?: (HelixHeadlessDateInput["placeholder"]) | undefined;
|
|
3729
4127
|
/** The name of the calendar's control that moves to the previous month. */
|
|
3730
4128
|
"previous-label"?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
|
|
3731
4129
|
/** The name of the calendar's control that moves to the previous month. */
|
|
3732
4130
|
previousLabel?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
|
|
4131
|
+
/** The name of the calendar's control that moves back a year. */
|
|
4132
|
+
"previous-year-label"?: (HelixHeadlessDateInput["previousYearLabel"]) | undefined;
|
|
4133
|
+
/** The name of the calendar's control that moves back a year. */
|
|
4134
|
+
previousYearLabel?: (HelixHeadlessDateInput["previousYearLabel"]) | undefined;
|
|
4135
|
+
/** The name of the calendar's control that moves back a page of years. */
|
|
4136
|
+
"previous-years-label"?: (HelixHeadlessDateInput["previousYearsLabel"]) | undefined;
|
|
4137
|
+
/** The name of the calendar's control that moves back a page of years. */
|
|
4138
|
+
previousYearsLabel?: (HelixHeadlessDateInput["previousYearsLabel"]) | undefined;
|
|
3733
4139
|
/** The message shown when a range holds more than two dates.
|
|
3734
4140
|
|
|
3735
4141
|
**Every sentence a control raises in the browser's bubble is a property**,
|
|
@@ -3785,6 +4191,26 @@ platform's base. */
|
|
|
3785
4191
|
"unavailable-message"?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
|
|
3786
4192
|
/** The message shown when `disable-dates` or `disable-days` bars a date. */
|
|
3787
4193
|
unavailableMessage?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
|
|
4194
|
+
/** The name of the calendar's heading where it shows a page of years, with
|
|
4195
|
+
`{heading}` filled in. */
|
|
4196
|
+
"year-view-label"?: (HelixHeadlessDateInput["yearViewLabel"]) | undefined;
|
|
4197
|
+
/** The name of the calendar's heading where it shows a page of years, with
|
|
4198
|
+
`{heading}` filled in. */
|
|
4199
|
+
yearViewLabel?: (HelixHeadlessDateInput["yearViewLabel"]) | undefined;
|
|
4200
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
4201
|
+
sighted reader sees as dashes. */
|
|
4202
|
+
"empty-segment-label"?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
|
|
4203
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
4204
|
+
sighted reader sees as dashes. */
|
|
4205
|
+
emptySegmentLabel?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
|
|
4206
|
+
/** Whether the field is a row of segments, one for each part of the date or
|
|
4207
|
+
time, in place of a line of text.
|
|
4208
|
+
|
|
4209
|
+
Each segment is set with digits or the arrow keys, in the order the
|
|
4210
|
+
locale writes them, so a reader types a date the way they write one and
|
|
4211
|
+
no format has to be read back. The picker still opens from the trigger
|
|
4212
|
+
and with Alt+Down. */
|
|
4213
|
+
segmented?: (HelixHeadlessDateInput["segmented"]) | undefined;
|
|
3788
4214
|
/** Whether the value is locked. A read-only control still submits its value.
|
|
3789
4215
|
|
|
3790
4216
|
**Enforced by refusing every request in one place**, which is the seam this
|
|
@@ -3925,6 +4351,14 @@ imperatively later, and nothing is hydrating by then.
|
|
|
3925
4351
|
|
|
3926
4352
|
Here rather than on each control. */
|
|
3927
4353
|
name?: (HelixHeadlessDateInput["name"]) | undefined;
|
|
4354
|
+
/** What each day in the calendar shows, in place of its number: a function
|
|
4355
|
+
given the date as `YYYY-MM-DD`. Handed to the calendar; see Date Picker's
|
|
4356
|
+
`dayContent`. */
|
|
4357
|
+
dayContent?: (HelixHeadlessDateInput["dayContent"]) | undefined;
|
|
4358
|
+
/** A rule for which dates cannot be chosen: a function given the date as
|
|
4359
|
+
`YYYY-MM-DD` that returns `true` to bar it. The calendar offers such a date
|
|
4360
|
+
as unavailable, and a typed one is invalid, as with `disable-dates`. */
|
|
4361
|
+
isDateUnavailable?: (HelixHeadlessDateInput["isDateUnavailable"]) | undefined;
|
|
3928
4362
|
/** The value as a `Date`, at midnight UTC, or `null` while there is no date.
|
|
3929
4363
|
|
|
3930
4364
|
The platform's own pair on `<input type="date">`, and this control holds the
|
|
@@ -4017,6 +4451,24 @@ Absent uses the runtime's own. */
|
|
|
4017
4451
|
locale?: (HelixHeadlessDatePicker["locale"]) | undefined;
|
|
4018
4452
|
/** Latest selectable date, as `YYYY-MM-DD`. */
|
|
4019
4453
|
max?: (HelixHeadlessDatePicker["max"]) | undefined;
|
|
4454
|
+
/** How far the heading lets a reader step back from the days: `month` to a
|
|
4455
|
+
year's months, or `year` to a page of years and then its months.
|
|
4456
|
+
|
|
4457
|
+
Absent, the heading is text and the calendar moves a month at a time. Set,
|
|
4458
|
+
the heading is a button that shows the months, and from there the years,
|
|
4459
|
+
so a birth date forty years back is three presses rather than four hundred
|
|
4460
|
+
and eighty. Choosing a year shows its months, and choosing a month shows
|
|
4461
|
+
its days. */
|
|
4462
|
+
"max-view"?: (HelixHeadlessDatePicker["maxView"]) | undefined;
|
|
4463
|
+
/** How far the heading lets a reader step back from the days: `month` to a
|
|
4464
|
+
year's months, or `year` to a page of years and then its months.
|
|
4465
|
+
|
|
4466
|
+
Absent, the heading is text and the calendar moves a month at a time. Set,
|
|
4467
|
+
the heading is a button that shows the months, and from there the years,
|
|
4468
|
+
so a birth date forty years back is three presses rather than four hundred
|
|
4469
|
+
and eighty. Choosing a year shows its months, and choosing a month shows
|
|
4470
|
+
its days. */
|
|
4471
|
+
maxView?: (HelixHeadlessDatePicker["maxView"]) | undefined;
|
|
4020
4472
|
/** Earliest selectable date, as `YYYY-MM-DD`. */
|
|
4021
4473
|
min?: (HelixHeadlessDatePicker["min"]) | undefined;
|
|
4022
4474
|
/** How many dates can be held at once. */
|
|
@@ -4030,10 +4482,24 @@ can drive the view. Reading gives the month on show; writing sets it, and
|
|
|
4030
4482
|
month?: (HelixHeadlessDatePicker["month"]) | undefined;
|
|
4031
4483
|
/** How many months to show, side by side. */
|
|
4032
4484
|
months?: (HelixHeadlessDatePicker["months"]) | undefined;
|
|
4485
|
+
/** The name of the heading where it shows the months, with `{heading}`
|
|
4486
|
+
filled in as the month on show. */
|
|
4487
|
+
"month-view-label"?: (HelixHeadlessDatePicker["monthViewLabel"]) | undefined;
|
|
4488
|
+
/** The name of the heading where it shows the months, with `{heading}`
|
|
4489
|
+
filled in as the month on show. */
|
|
4490
|
+
monthViewLabel?: (HelixHeadlessDatePicker["monthViewLabel"]) | undefined;
|
|
4033
4491
|
/** Accessible name for the control that pages forward. */
|
|
4034
4492
|
"next-label"?: (HelixHeadlessDatePicker["nextLabel"]) | undefined;
|
|
4035
4493
|
/** Accessible name for the control that pages forward. */
|
|
4036
4494
|
nextLabel?: (HelixHeadlessDatePicker["nextLabel"]) | undefined;
|
|
4495
|
+
/** Accessible name for the control that moves forward a year, in the months. */
|
|
4496
|
+
"next-year-label"?: (HelixHeadlessDatePicker["nextYearLabel"]) | undefined;
|
|
4497
|
+
/** Accessible name for the control that moves forward a year, in the months. */
|
|
4498
|
+
nextYearLabel?: (HelixHeadlessDatePicker["nextYearLabel"]) | undefined;
|
|
4499
|
+
/** Accessible name for the control that moves forward a page, in the years. */
|
|
4500
|
+
"next-years-label"?: (HelixHeadlessDatePicker["nextYearsLabel"]) | undefined;
|
|
4501
|
+
/** Accessible name for the control that moves forward a page, in the years. */
|
|
4502
|
+
nextYearsLabel?: (HelixHeadlessDatePicker["nextYearsLabel"]) | undefined;
|
|
4037
4503
|
/** Accessible name for the control that pages back.
|
|
4038
4504
|
|
|
4039
4505
|
A property because a calendar rendering its own month names from `locale`
|
|
@@ -4048,6 +4514,14 @@ would otherwise still announce its controls in English. `attribute:`
|
|
|
4048
4514
|
spelled out, since Lit lowercases a camelCase name rather than dash-casing
|
|
4049
4515
|
it. */
|
|
4050
4516
|
previousLabel?: (HelixHeadlessDatePicker["previousLabel"]) | undefined;
|
|
4517
|
+
/** Accessible name for the control that moves back a year, in the months. */
|
|
4518
|
+
"previous-year-label"?: (HelixHeadlessDatePicker["previousYearLabel"]) | undefined;
|
|
4519
|
+
/** Accessible name for the control that moves back a year, in the months. */
|
|
4520
|
+
previousYearLabel?: (HelixHeadlessDatePicker["previousYearLabel"]) | undefined;
|
|
4521
|
+
/** Accessible name for the control that moves back a page, in the years. */
|
|
4522
|
+
"previous-years-label"?: (HelixHeadlessDatePicker["previousYearsLabel"]) | undefined;
|
|
4523
|
+
/** Accessible name for the control that moves back a page, in the years. */
|
|
4524
|
+
previousYearsLabel?: (HelixHeadlessDatePicker["previousYearsLabel"]) | undefined;
|
|
4051
4525
|
/** The validation message for a date after `max`. `{max}` is replaced with
|
|
4052
4526
|
`max`, written as a date in `locale`. */
|
|
4053
4527
|
"range-overflow-message"?: (HelixHeadlessDatePicker["rangeOverflowMessage"]) | undefined;
|
|
@@ -4112,6 +4586,17 @@ bars. */
|
|
|
4112
4586
|
"value-missing-message"?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
|
|
4113
4587
|
/** The validation message for a required date picker with no date chosen. */
|
|
4114
4588
|
valueMissingMessage?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
|
|
4589
|
+
/** What the calendar shows: the days of a month, the months of a year, or a
|
|
4590
|
+
page of years. `day` unless `max-view` lets a reader step back.
|
|
4591
|
+
|
|
4592
|
+
Not reflected, being state. Set it to open on the months or the years. */
|
|
4593
|
+
view?: (HelixHeadlessDatePicker["view"]) | undefined;
|
|
4594
|
+
/** The name of the heading where it shows a page of years, with `{heading}`
|
|
4595
|
+
filled in as the year on show. */
|
|
4596
|
+
"year-view-label"?: (HelixHeadlessDatePicker["yearViewLabel"]) | undefined;
|
|
4597
|
+
/** The name of the heading where it shows a page of years, with `{heading}`
|
|
4598
|
+
filled in as the year on show. */
|
|
4599
|
+
yearViewLabel?: (HelixHeadlessDatePicker["yearViewLabel"]) | undefined;
|
|
4115
4600
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
4116
4601
|
"default-value"?: (HelixHeadlessDatePicker["defaultValue"]) | undefined;
|
|
4117
4602
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -4149,6 +4634,24 @@ imperatively later, and nothing is hydrating by then.
|
|
|
4149
4634
|
|
|
4150
4635
|
Here rather than on each control. */
|
|
4151
4636
|
name?: (HelixHeadlessDatePicker["name"]) | undefined;
|
|
4637
|
+
/** What each day shows, in place of its number: a function given the date as
|
|
4638
|
+
`YYYY-MM-DD` that returns text, an element or a Lit template.
|
|
4639
|
+
|
|
4640
|
+
For a price or a dot under the number, as React Aria's `CalendarCell`
|
|
4641
|
+
takes children. The cell is still named by its whole date, so what you
|
|
4642
|
+
draw here is for the eye; say anything a reader must hear in the date's
|
|
4643
|
+
description elsewhere. Return the day's number with it where it should
|
|
4644
|
+
still show. A property only, there being no way to write a function in
|
|
4645
|
+
markup. */
|
|
4646
|
+
dayContent?: (HelixHeadlessDatePicker["dayContent"]) | undefined;
|
|
4647
|
+
/** A rule for which dates cannot be chosen: a function given the date as
|
|
4648
|
+
`YYYY-MM-DD` that returns `true` to bar it.
|
|
4649
|
+
|
|
4650
|
+
For what a list cannot say, such as the second Tuesday of each month or
|
|
4651
|
+
the days a server has fully booked. It bars a date as `disable-dates`
|
|
4652
|
+
does, in the grid and in validation. A property only, as React Aria's
|
|
4653
|
+
`isDateUnavailable` is a prop. */
|
|
4654
|
+
isDateUnavailable?: (HelixHeadlessDatePicker["isDateUnavailable"]) | undefined;
|
|
4152
4655
|
/** The value as a `Date`, at midnight UTC, or `null` while there is no date.
|
|
4153
4656
|
|
|
4154
4657
|
The platform's own pair on `<input type="date">`, and this control holds the
|
|
@@ -4202,6 +4705,9 @@ labels line up, and lining up is a fact about all of them.
|
|
|
4202
4705
|
a reflecting default writes an attribute onto markup the consumer rendered,
|
|
4203
4706
|
and React reports that as a hydration mismatch. */
|
|
4204
4707
|
direction?: (HelixHeadlessDescriptionList["direction"]) | undefined;
|
|
4708
|
+
/** The list's name, read by screen readers, such as "Server details". It
|
|
4709
|
+
makes the list a named group. */
|
|
4710
|
+
label?: (HelixHeadlessDescriptionList["label"]) | undefined;
|
|
4205
4711
|
};
|
|
4206
4712
|
|
|
4207
4713
|
export type HelixHeadlessDescriptionListVueEvents = {};
|
|
@@ -4222,6 +4728,16 @@ export type HelixHeadlessDialogToggleElementEvent =
|
|
|
4222
4728
|
HelixHeadlessDialogElementEvent<ToggleEvent>;
|
|
4223
4729
|
|
|
4224
4730
|
export type HelixHeadlessDialogVueProps = {
|
|
4731
|
+
/** Makes the dialog an alert dialog, for a message that interrupts to ask for
|
|
4732
|
+
an answer, such as a confirmation before something is deleted.
|
|
4733
|
+
|
|
4734
|
+
The `<dialog>` takes `role="alertdialog"`, so a screen reader announces the
|
|
4735
|
+
dialog and its description as it opens. Everything else stays the same:
|
|
4736
|
+
the dialog is modal, Escape asks to close it, and `persistent` still
|
|
4737
|
+
refuses that.
|
|
4738
|
+
|
|
4739
|
+
Not reflected, because no stylesheet selects on it. */
|
|
4740
|
+
alert?: (HelixHeadlessDialog["alert"]) | undefined;
|
|
4225
4741
|
/** Which close requests the browser handles on its own.
|
|
4226
4742
|
|
|
4227
4743
|
`<dialog closedby>`, forwarded, and safe to forward because every path it
|
|
@@ -4244,6 +4760,17 @@ the property this component exists to keep.
|
|
|
4244
4760
|
Absent by default, which is the platform's `auto` and this library's rule
|
|
4245
4761
|
that a resting value is an attribute's absence. */
|
|
4246
4762
|
closedBy?: (HelixHeadlessDialog["closedBy"]) | undefined;
|
|
4763
|
+
/** Draws a control that closes the dialog, in the corner where the title is.
|
|
4764
|
+
|
|
4765
|
+
Pressing it is `close()`, so it sends `helix-before-close` like every other
|
|
4766
|
+
way out, and `persistent` does not disable it. */
|
|
4767
|
+
dismissible?: (HelixHeadlessDialog["dismissible"]) | undefined;
|
|
4768
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
4769
|
+
interface. */
|
|
4770
|
+
"dismiss-label"?: (HelixHeadlessDialog["dismissLabel"]) | undefined;
|
|
4771
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
4772
|
+
interface. */
|
|
4773
|
+
dismissLabel?: (HelixHeadlessDialog["dismissLabel"]) | undefined;
|
|
4247
4774
|
/** Accessible name for the dialog. When it is empty, the heading in the
|
|
4248
4775
|
`header` slot names the dialog. */
|
|
4249
4776
|
label?: (HelixHeadlessDialog["label"]) | undefined;
|
|
@@ -4451,6 +4978,24 @@ default assigned to the property would reflect onto every host and put a
|
|
|
4451
4978
|
`placement="end"` into markup no consumer wrote. So what this tier
|
|
4452
4979
|
guarantees is the absence, and a sheet selects on it. */
|
|
4453
4980
|
placement?: (HelixHeadlessDrawer["placement"]) | undefined;
|
|
4981
|
+
/** The fractions of the panel a reader can leave on screen, as a list such as
|
|
4982
|
+
`0.5 1`. The drawer opens at the smallest, and a swipe comes to rest at the
|
|
4983
|
+
nearest, or closes the drawer below the smallest.
|
|
4984
|
+
|
|
4985
|
+
Empty is `1`: the whole panel, and a swipe either closes it or puts it
|
|
4986
|
+
back. */
|
|
4987
|
+
"snap-points"?: (HelixHeadlessDrawer["snapPoints"]) | undefined;
|
|
4988
|
+
/** The fractions of the panel a reader can leave on screen, as a list such as
|
|
4989
|
+
`0.5 1`. The drawer opens at the smallest, and a swipe comes to rest at the
|
|
4990
|
+
nearest, or closes the drawer below the smallest.
|
|
4991
|
+
|
|
4992
|
+
Empty is `1`: the whole panel, and a swipe either closes it or puts it
|
|
4993
|
+
back. */
|
|
4994
|
+
snapPoints?: (HelixHeadlessDrawer["snapPoints"]) | undefined;
|
|
4995
|
+
/** Whether a touch or a pen can swipe the drawer away. `swipe="false"` turns
|
|
4996
|
+
it off, for a panel whose content has its own use for the gesture, such as
|
|
4997
|
+
a map. */
|
|
4998
|
+
swipe?: (HelixHeadlessDrawer["swipe"]) | undefined;
|
|
4454
4999
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
4455
5000
|
"default-open"?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
|
|
4456
5001
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -4522,14 +5067,6 @@ elements, and writing `tabindex` onto a host the consumer rendered is a
|
|
|
4522
5067
|
change a React consumer's hydration reports and does not patch up. The stop
|
|
4523
5068
|
lands inside this shadow root instead. */
|
|
4524
5069
|
focusable?: (HelixHeadlessDrilldownItem["focusable"]) | undefined;
|
|
4525
|
-
/** Whether the page showing is the one this row is on.
|
|
4526
|
-
|
|
4527
|
-
Written by the stack. */
|
|
4528
|
-
onPage?: (HelixHeadlessDrilldownItem["onPage"]) | undefined;
|
|
4529
|
-
/** Whether this row's own page is the one showing.
|
|
4530
|
-
|
|
4531
|
-
Written by the stack. */
|
|
4532
|
-
showingPage?: (HelixHeadlessDrilldownItem["showingPage"]) | undefined;
|
|
4533
5070
|
};
|
|
4534
5071
|
|
|
4535
5072
|
export type HelixHeadlessDrilldownItemVueEvents = {
|
|
@@ -4603,6 +5140,9 @@ export type HelixHeadlessFileInputElementEvent<E = Event> = TypedEvent<
|
|
|
4603
5140
|
/** `helix-before-change` event type */
|
|
4604
5141
|
export type HelixHeadlessFileInputHelixBeforeChangeElementEvent =
|
|
4605
5142
|
HelixHeadlessFileInputElementEvent<HelixBeforeChangeEvent>;
|
|
5143
|
+
/** `helix-reject` event type */
|
|
5144
|
+
export type HelixHeadlessFileInputHelixRejectElementEvent =
|
|
5145
|
+
HelixHeadlessFileInputElementEvent<HelixRejectEvent>;
|
|
4606
5146
|
|
|
4607
5147
|
export type HelixHeadlessFileInputVueProps = {
|
|
4608
5148
|
/** Which files the picker offers and a drop takes, as a native `accept` list.
|
|
@@ -4612,12 +5152,31 @@ filter is the only check the platform makes and a drop never meets it. */
|
|
|
4612
5152
|
accept?: (HelixHeadlessFileInput["accept"]) | undefined;
|
|
4613
5153
|
/** Which camera or microphone a mobile picker should offer, if any. */
|
|
4614
5154
|
capture?: (HelixHeadlessFileInput["capture"]) | undefined;
|
|
5155
|
+
/** Whether the picker chooses a folder, and the field takes every file in
|
|
5156
|
+
it. The platform's `webkitdirectory`. */
|
|
5157
|
+
directory?: (HelixHeadlessFileInput["directory"]) | undefined;
|
|
4615
5158
|
/** Language tag the sizes are written in.
|
|
4616
5159
|
|
|
4617
5160
|
Absent uses the runtime's own. */
|
|
4618
5161
|
locale?: (HelixHeadlessFileInput["locale"]) | undefined;
|
|
5162
|
+
/** The most files the field holds, under `multiple`. Files past it are
|
|
5163
|
+
refused. */
|
|
5164
|
+
"max-files"?: (HelixHeadlessFileInput["maxFiles"] | `${number}`) | undefined;
|
|
5165
|
+
/** The most files the field holds, under `multiple`. Files past it are
|
|
5166
|
+
refused. */
|
|
5167
|
+
maxFiles?: (HelixHeadlessFileInput["maxFiles"]) | undefined;
|
|
5168
|
+
/** The most bytes one file may have. A larger one is refused. */
|
|
5169
|
+
"max-file-size"?: (HelixHeadlessFileInput["maxFileSize"] | `${number}`) | undefined;
|
|
5170
|
+
/** The most bytes one file may have. A larger one is refused. */
|
|
5171
|
+
maxFileSize?: (HelixHeadlessFileInput["maxFileSize"]) | undefined;
|
|
4619
5172
|
/** Whether more than one file can be chosen. */
|
|
4620
5173
|
multiple?: (HelixHeadlessFileInput["multiple"]) | undefined;
|
|
5174
|
+
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5175
|
+
filled in. */
|
|
5176
|
+
"rejected-text"?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
5177
|
+
/** What a reader hears when files are refused, with `{count}` and `{names}`
|
|
5178
|
+
filled in. */
|
|
5179
|
+
rejectedText?: (HelixHeadlessFileInput["rejectedText"]) | undefined;
|
|
4621
5180
|
/** The accessible name of the control that removes a file. `{name}` is
|
|
4622
5181
|
replaced with the file's name.
|
|
4623
5182
|
|
|
@@ -4692,6 +5251,9 @@ imperatively later, and nothing is hydrating by then.
|
|
|
4692
5251
|
|
|
4693
5252
|
Here rather than on each control. */
|
|
4694
5253
|
name?: (HelixHeadlessFileInput["name"]) | undefined;
|
|
5254
|
+
/** Your own check on each arriving file, which returns why it is refused, or
|
|
5255
|
+
nothing to take it. A property, since a function cannot be an attribute. */
|
|
5256
|
+
validate?: (HelixHeadlessFileInput["validate"]) | undefined;
|
|
4695
5257
|
};
|
|
4696
5258
|
|
|
4697
5259
|
export type HelixHeadlessFileInputVueEvents = {
|
|
@@ -4699,6 +5261,8 @@ export type HelixHeadlessFileInputVueEvents = {
|
|
|
4699
5261
|
change: HelixHeadlessFileInputElementEvent;
|
|
4700
5262
|
/** Fired before the chosen files change, with their names, and cancelable. Canceling it keeps the files the field had, even when the browser has already written a new pick. */
|
|
4701
5263
|
"helix-before-change": HelixHeadlessFileInputHelixBeforeChangeElementEvent;
|
|
5264
|
+
/** Fired when files arrive and some are left out. `detail.files` lists each with its `reason`: `type`, `size`, `count` or `invalid`, and your `validate` message. */
|
|
5265
|
+
"helix-reject": HelixHeadlessFileInputHelixRejectElementEvent;
|
|
4702
5266
|
/** Fired after the value changes. */
|
|
4703
5267
|
input: HelixHeadlessFileInputElementEvent;
|
|
4704
5268
|
};
|
|
@@ -4912,10 +5476,26 @@ an icon. */
|
|
|
4912
5476
|
/** The name of the clear button, read by screen readers. The button shows only
|
|
4913
5477
|
an icon. */
|
|
4914
5478
|
clearLabel?: (HelixHeadlessFilterInput["clearLabel"]) | undefined;
|
|
5479
|
+
/** Whether the panel narrows itself to the suggestions that hold the term
|
|
5480
|
+
being typed, as React Aria's Autocomplete filters. Off, the panel shows
|
|
5481
|
+
what you slot and you narrow it. */
|
|
5482
|
+
"filter-suggestions"?: (HelixHeadlessFilterInput["filterSuggestions"]) | undefined;
|
|
5483
|
+
/** Whether the panel narrows itself to the suggestions that hold the term
|
|
5484
|
+
being typed, as React Aria's Autocomplete filters. Off, the panel shows
|
|
5485
|
+
what you slot and you narrow it. */
|
|
5486
|
+
filterSuggestions?: (HelixHeadlessFilterInput["filterSuggestions"]) | undefined;
|
|
4915
5487
|
/** The text shown while the field is empty.
|
|
4916
5488
|
|
|
4917
5489
|
Not a label: it goes when typing starts. */
|
|
4918
5490
|
placeholder?: (HelixHeadlessFilterInput["placeholder"]) | undefined;
|
|
5491
|
+
/** What a reader hears for one suggestion, with `{count}` filled in. */
|
|
5492
|
+
"suggestion-label"?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
|
|
5493
|
+
/** What a reader hears for one suggestion, with `{count}` filled in. */
|
|
5494
|
+
suggestionLabel?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
|
|
5495
|
+
/** What a reader hears for any other number of suggestions, with `{count}` filled in. */
|
|
5496
|
+
"suggestions-label"?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
|
|
5497
|
+
/** What a reader hears for any other number of suggestions, with `{count}` filled in. */
|
|
5498
|
+
suggestionsLabel?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
|
|
4919
5499
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
4920
5500
|
"default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
|
|
4921
5501
|
/** Whether the element starts open. Ignored once `open` is written. */
|
|
@@ -5056,6 +5636,12 @@ Lit's server shim, `textContent`, `children`, `firstChild` and
|
|
|
5056
5636
|
it. An element rendered on a server needs the attribute; one rendered in a
|
|
5057
5637
|
browser may use either. */
|
|
5058
5638
|
date?: (HelixHeadlessFormatDate["date"]) | undefined;
|
|
5639
|
+
/** The locale's own pattern for the date: `full`, `long`, `medium`, or
|
|
5640
|
+
`short`. Set, it stands in for `weekday`, `day`, `month`, `year` and `era`. */
|
|
5641
|
+
"date-style"?: (HelixHeadlessFormatDate["dateStyle"]) | undefined;
|
|
5642
|
+
/** The locale's own pattern for the date: `full`, `long`, `medium`, or
|
|
5643
|
+
`short`. Set, it stands in for `weekday`, `day`, `month`, `year` and `era`. */
|
|
5644
|
+
dateStyle?: (HelixHeadlessFormatDate["dateStyle"]) | undefined;
|
|
5059
5645
|
/** How the day of the month is written, where a date is shown. */
|
|
5060
5646
|
day?: (HelixHeadlessFormatDate["day"]) | undefined;
|
|
5061
5647
|
/** Shows how long ago the timestamp was, in a compact form such as "3h", in
|
|
@@ -5065,8 +5651,22 @@ Reflected, because it is the one property that decides which of two readings
|
|
|
5065
5651
|
this is and a stylesheet has a reason to know: a compact reading is a fixed
|
|
5066
5652
|
few characters and a date is not. */
|
|
5067
5653
|
elapsed?: (HelixHeadlessFormatDate["elapsed"]) | undefined;
|
|
5654
|
+
/** How the era is written, such as AD, where a date is shown. */
|
|
5655
|
+
era?: (HelixHeadlessFormatDate["era"]) | undefined;
|
|
5068
5656
|
/** How the hour is written, where a time of day is shown. */
|
|
5069
5657
|
hour?: (HelixHeadlessFormatDate["hour"]) | undefined;
|
|
5658
|
+
/** The clock a time of day is written on: `h12` or `h11` for twelve hours,
|
|
5659
|
+
`h23` or `h24` for twenty-four.
|
|
5660
|
+
|
|
5661
|
+
Absent is the locale's own, which is right unless your product shows every
|
|
5662
|
+
reader the same clock whatever their language. */
|
|
5663
|
+
"hour-cycle"?: (HelixHeadlessFormatDate["hourCycle"]) | undefined;
|
|
5664
|
+
/** The clock a time of day is written on: `h12` or `h11` for twelve hours,
|
|
5665
|
+
`h23` or `h24` for twenty-four.
|
|
5666
|
+
|
|
5667
|
+
Absent is the locale's own, which is right unless your product shows every
|
|
5668
|
+
reader the same clock whatever their language. */
|
|
5669
|
+
hourCycle?: (HelixHeadlessFormatDate["hourCycle"]) | undefined;
|
|
5070
5670
|
/** The locale to format the timestamp in.
|
|
5071
5671
|
|
|
5072
5672
|
Empty is the runtime's own. */
|
|
@@ -5075,8 +5675,26 @@ Empty is the runtime's own. */
|
|
|
5075
5675
|
minute?: (HelixHeadlessFormatDate["minute"]) | undefined;
|
|
5076
5676
|
/** How the month is written, where a date is shown. */
|
|
5077
5677
|
month?: (HelixHeadlessFormatDate["month"]) | undefined;
|
|
5678
|
+
/** Whether a `relative` reading may use a word for a number: `auto` says
|
|
5679
|
+
"yesterday" and "now", and `always` says "1 day ago" and "in 0 seconds". */
|
|
5680
|
+
numeric?: (HelixHeadlessFormatDate["numeric"]) | undefined;
|
|
5681
|
+
/** Shows how long ago the timestamp was, or how long until it, in words, in
|
|
5682
|
+
place of the date: `long` ("3 hours ago"), `short` ("3 hr. ago") or
|
|
5683
|
+
`narrow` ("3h ago").
|
|
5684
|
+
|
|
5685
|
+
The reading refreshes as it goes stale, as `elapsed` does, and the whole
|
|
5686
|
+
date is its title. `elapsed` wins where both are set. */
|
|
5687
|
+
relative?: (HelixHeadlessFormatDate["relative"]) | undefined;
|
|
5078
5688
|
/** How the second is written, where a time of day is shown. */
|
|
5079
5689
|
second?: (HelixHeadlessFormatDate["second"]) | undefined;
|
|
5690
|
+
/** The locale's own pattern for the time of day: `full`, `long`, `medium`, or
|
|
5691
|
+
`short`. Set, it stands in for `hour`, `minute`, `second` and
|
|
5692
|
+
`time-zone-name`. */
|
|
5693
|
+
"time-style"?: (HelixHeadlessFormatDate["timeStyle"]) | undefined;
|
|
5694
|
+
/** The locale's own pattern for the time of day: `full`, `long`, `medium`, or
|
|
5695
|
+
`short`. Set, it stands in for `hour`, `minute`, `second` and
|
|
5696
|
+
`time-zone-name`. */
|
|
5697
|
+
timeStyle?: (HelixHeadlessFormatDate["timeStyle"]) | undefined;
|
|
5080
5698
|
/** The time zone to read the timestamp in.
|
|
5081
5699
|
|
|
5082
5700
|
Empty is the runtime's own. */
|
|
@@ -5584,6 +6202,22 @@ Lives here rather than only on `IconButton` so the two share one render.
|
|
|
5584
6202
|
An icon-only button without it is a control a screen reader announces as
|
|
5585
6203
|
"button" and nothing else. */
|
|
5586
6204
|
label?: (HelixHeadlessIconButton["label"]) | undefined;
|
|
6205
|
+
/** Whether the action the button started is still running.
|
|
6206
|
+
|
|
6207
|
+
A pending button keeps focus and stays in the tab order, and refuses every
|
|
6208
|
+
press: a click, Enter and Space, and Enter in a field of its form. The
|
|
6209
|
+
click does not reach your listeners. The inner control carries
|
|
6210
|
+
`aria-busy` and `aria-disabled`, and when the button becomes pending while
|
|
6211
|
+
it has focus, a reader hears `pending-label`. The styled button draws a
|
|
6212
|
+
turning ring over its words.
|
|
6213
|
+
|
|
6214
|
+
`disabled` takes the button out of reach. Use `pending` for the wait after
|
|
6215
|
+
a press, so focus stays where the reader left it. */
|
|
6216
|
+
pending?: (HelixHeadlessIconButton["pending"]) | undefined;
|
|
6217
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
6218
|
+
"pending-label"?: (HelixHeadlessIconButton["pendingLabel"]) | undefined;
|
|
6219
|
+
/** What a reader hears when the button becomes pending while it has focus. */
|
|
6220
|
+
pendingLabel?: (HelixHeadlessIconButton["pendingLabel"]) | undefined;
|
|
5587
6221
|
/** What activating the button does to its form. */
|
|
5588
6222
|
type?: (HelixHeadlessIconButton["type"]) | undefined;
|
|
5589
6223
|
/** The value this button submits under its own `name`, as a native submit
|
|
@@ -5706,8 +6340,12 @@ disagreeing with its own name for every reader who meant the left. */
|
|
|
5706
6340
|
so it is what markup can carry, and resolving one means an index of the
|
|
5707
6341
|
whole set that no bundler can shake: 15 kB for a consumer who renders one
|
|
5708
6342
|
mark. An attribute is the only thing an HTML author can write, and that is
|
|
5709
|
-
worth the index; a consumer who would rather not pay it
|
|
5710
|
-
|
|
6343
|
+
worth the index; a consumer who would rather not pay it imports the
|
|
6344
|
+
element from `icon/root` and registers the glyphs it names, or hands over
|
|
6345
|
+
the value instead.
|
|
6346
|
+
|
|
6347
|
+
A name written `prefix:name` asks the library registered under that
|
|
6348
|
+
prefix. */
|
|
5711
6349
|
name?: (HelixHeadlessIcon["name"]) | undefined;
|
|
5712
6350
|
/** The icon to draw, as an object you import.
|
|
5713
6351
|
|
|
@@ -5725,8 +6363,10 @@ for. Set both and this wins, the value being the more specific statement. */
|
|
|
5725
6363
|
};
|
|
5726
6364
|
|
|
5727
6365
|
export type HelixHeadlessIconVueEvents = {
|
|
5728
|
-
/** `name` matches no icon
|
|
6366
|
+
/** `name` matches no registered icon and no library answers it, so nothing is drawn. */
|
|
5729
6367
|
error: HelixHeadlessIconElementEvent;
|
|
6368
|
+
/** A glyph a library gave later for `name` is drawn. */
|
|
6369
|
+
load: HelixHeadlessIconElementEvent;
|
|
5730
6370
|
};
|
|
5731
6371
|
|
|
5732
6372
|
/** `HelixHeadlessImage` component event */
|
|
@@ -5780,6 +6420,18 @@ ninety-nine pictures. */
|
|
|
5780
6420
|
picture worth putting in a component is usually below the fold and the one
|
|
5781
6421
|
that is not is the exception worth writing down. */
|
|
5782
6422
|
loading?: (HelixHeadlessImage["loading"]) | undefined;
|
|
6423
|
+
/** How long, in milliseconds, the placeholder waits before it shows.
|
|
6424
|
+
|
|
6425
|
+
Absent or `0` shows it at once. A picture that arrives inside
|
|
6426
|
+
the wait never shows a placeholder at all, so a cached or fast image does
|
|
6427
|
+
not flash one. Radix's `delayMs` on its avatar fallback is the same idea. */
|
|
6428
|
+
"placeholder-delay"?: (HelixHeadlessImage["placeholderDelay"] | `${number}`) | undefined;
|
|
6429
|
+
/** How long, in milliseconds, the placeholder waits before it shows.
|
|
6430
|
+
|
|
6431
|
+
Absent or `0` shows it at once. A picture that arrives inside
|
|
6432
|
+
the wait never shows a placeholder at all, so a cached or fast image does
|
|
6433
|
+
not flash one. Radix's `delayMs` on its avatar fallback is the same idea. */
|
|
6434
|
+
placeholderDelay?: (HelixHeadlessImage["placeholderDelay"]) | undefined;
|
|
5783
6435
|
/** How much of the referring URL to send with the request. */
|
|
5784
6436
|
referrerpolicy?: (HelixHeadlessImage["referrerPolicy"]) | undefined;
|
|
5785
6437
|
/** How much of the referring URL to send with the request. */
|
|
@@ -5826,6 +6478,9 @@ export type HelixHeadlessInputElementEvent<E = Event> = TypedEvent<
|
|
|
5826
6478
|
/** `helix-before-change` event type */
|
|
5827
6479
|
export type HelixHeadlessInputHelixBeforeChangeElementEvent =
|
|
5828
6480
|
HelixHeadlessInputElementEvent<HelixBeforeChangeEvent>;
|
|
6481
|
+
/** `helix-clear` event type */
|
|
6482
|
+
export type HelixHeadlessInputHelixClearElementEvent =
|
|
6483
|
+
HelixHeadlessInputElementEvent<HelixClearEvent>;
|
|
5829
6484
|
|
|
5830
6485
|
export type HelixHeadlessInputVueProps = {
|
|
5831
6486
|
/** Whether a phone capitalizes as the reader types: `off`, `sentences`,
|
|
@@ -6028,6 +6683,8 @@ export type HelixHeadlessInputVueEvents = {
|
|
|
6028
6683
|
change: HelixHeadlessInputElementEvent;
|
|
6029
6684
|
/** The text is about to change. Cancelable: cancel it to keep the current text. */
|
|
6030
6685
|
"helix-before-change": HelixHeadlessInputHelixBeforeChangeElementEvent;
|
|
6686
|
+
/** Fired after the clear button has emptied the field, after `input` and `change`. */
|
|
6687
|
+
"helix-clear": HelixHeadlessInputHelixClearElementEvent;
|
|
6031
6688
|
/** Fired as the value changes. */
|
|
6032
6689
|
input: HelixHeadlessInputElementEvent;
|
|
6033
6690
|
};
|
|
@@ -6042,6 +6699,13 @@ export type HelixHeadlessKbdHelixShortcutElementEvent =
|
|
|
6042
6699
|
HelixHeadlessKbdElementEvent<HelixShortcutEvent>;
|
|
6043
6700
|
|
|
6044
6701
|
export type HelixHeadlessKbdVueProps = {
|
|
6702
|
+
/** The id of the control the shortcut works, which is given the chord as its
|
|
6703
|
+
`aria-keyshortcuts`.
|
|
6704
|
+
|
|
6705
|
+
Names an element in the same tree, the way `Tooltip.for` does. Separate
|
|
6706
|
+
from `within`, which says where the key listens: a key can describe a
|
|
6707
|
+
shortcut the page binds itself. */
|
|
6708
|
+
for?: (HelixHeadlessKbd["for"]) | undefined;
|
|
6045
6709
|
/** The key or chord to show, such as `mod+k`, `?`, or `/`.
|
|
6046
6710
|
|
|
6047
6711
|
`mod` is the platform's own command modifier, which is the reason to write
|
|
@@ -6070,6 +6734,15 @@ export type HelixHeadlessKbdVueEvents = {
|
|
|
6070
6734
|
"helix-shortcut": HelixHeadlessKbdHelixShortcutElementEvent;
|
|
6071
6735
|
};
|
|
6072
6736
|
|
|
6737
|
+
/** `HelixHeadlessLegend` component event */
|
|
6738
|
+
export type HelixHeadlessLegendElementEvent<E = Event> = TypedEvent<
|
|
6739
|
+
HelixHeadlessLegend,
|
|
6740
|
+
E
|
|
6741
|
+
>;
|
|
6742
|
+
/** `helix-before-change` event type */
|
|
6743
|
+
export type HelixHeadlessLegendHelixBeforeChangeElementEvent =
|
|
6744
|
+
HelixHeadlessLegendElementEvent<HelixBeforeChangeEvent>;
|
|
6745
|
+
|
|
6073
6746
|
export type HelixHeadlessLegendVueProps = {
|
|
6074
6747
|
/** How the entries are read from the table: `series`, `categories`, or
|
|
6075
6748
|
`measures`.
|
|
@@ -6098,14 +6771,40 @@ shadow root reads a table in that root rather than one in the document.
|
|
|
6098
6771
|
**In React this arrives as a property and not as an attribute**, the way
|
|
6099
6772
|
`Tooltip.for` does, so it does not reflect and nothing styles on it. */
|
|
6100
6773
|
for?: (HelixHeadlessLegend["for"]) | undefined;
|
|
6774
|
+
/** The series hidden on the table, by name, separated by commas: what
|
|
6775
|
+
`toggles` hides and shows.
|
|
6776
|
+
|
|
6777
|
+
Set it to start with series hidden. Every chart reading the same table
|
|
6778
|
+
draws without them. Commas only, because a column's heading may hold a
|
|
6779
|
+
space. For a ring the names are the rows. */
|
|
6780
|
+
"hidden-series"?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6781
|
+
/** The series hidden on the table, by name, separated by commas: what
|
|
6782
|
+
`toggles` hides and shows.
|
|
6783
|
+
|
|
6784
|
+
Set it to start with series hidden. Every chart reading the same table
|
|
6785
|
+
draws without them. Commas only, because a column's heading may hold a
|
|
6786
|
+
space. For a ring the names are the rows. */
|
|
6787
|
+
hiddenSeries?: (HelixHeadlessLegend["hiddenSeries"]) | undefined;
|
|
6101
6788
|
/** The name of the list, which a screen reader announces before its entries.
|
|
6102
6789
|
|
|
6103
6790
|
Absent names the list after the table's caption, so a page with several
|
|
6104
6791
|
charts has a legend list for each that says which chart it keys. */
|
|
6105
6792
|
label?: (HelixHeadlessLegend["label"]) | undefined;
|
|
6793
|
+
/** Makes each entry a button that hides or shows its series in every chart
|
|
6794
|
+
reading the same table.
|
|
6795
|
+
|
|
6796
|
+
Absent, the legend only displays, which is what it did before this
|
|
6797
|
+
existed. Reflected, because the styled tier draws a button differently
|
|
6798
|
+
from a plain entry. */
|
|
6799
|
+
toggles?: (HelixHeadlessLegend["toggles"]) | undefined;
|
|
6106
6800
|
};
|
|
6107
6801
|
|
|
6108
|
-
export type HelixHeadlessLegendVueEvents = {
|
|
6802
|
+
export type HelixHeadlessLegendVueEvents = {
|
|
6803
|
+
/** Fired once a toggle has hidden or shown a series. */
|
|
6804
|
+
change: HelixHeadlessLegendElementEvent;
|
|
6805
|
+
/** Fired before a toggle hides or shows a series, with the `hidden-series` it would leave. Cancelable. */
|
|
6806
|
+
"helix-before-change": HelixHeadlessLegendHelixBeforeChangeElementEvent;
|
|
6807
|
+
};
|
|
6109
6808
|
|
|
6110
6809
|
export type HelixHeadlessLightboxItemVueProps = {
|
|
6111
6810
|
/** Whether this item is the one shown.
|
|
@@ -6143,6 +6842,19 @@ export type HelixHeadlessLightboxToggleElementEvent =
|
|
|
6143
6842
|
HelixHeadlessLightboxElementEvent<ToggleEvent>;
|
|
6144
6843
|
|
|
6145
6844
|
export type HelixHeadlessLightboxVueProps = {
|
|
6845
|
+
/** Draws the viewer's own previous, next and close controls over the picture.
|
|
6846
|
+
|
|
6847
|
+
Off by default, for a viewer whose chrome you compose in the `header` and
|
|
6848
|
+
`footer` slots. The controls hide with the rest of the chrome while the
|
|
6849
|
+
reader is idle, and the previous and next ones say they are unavailable at
|
|
6850
|
+
either end of a set that does not `loop`. */
|
|
6851
|
+
controls?: (HelixHeadlessLightbox["controls"]) | undefined;
|
|
6852
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
6853
|
+
interface. */
|
|
6854
|
+
"dismiss-label"?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
|
|
6855
|
+
/** The close control's accessible name. Translate it with the rest of your
|
|
6856
|
+
interface. */
|
|
6857
|
+
dismissLabel?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
|
|
6146
6858
|
/** How long the user can be idle before the header and footer hide, in
|
|
6147
6859
|
milliseconds.
|
|
6148
6860
|
|
|
@@ -6161,6 +6873,28 @@ keep the chrome up is the consumer's to decide with this. */
|
|
|
6161
6873
|
label?: (HelixHeadlessLightbox["label"]) | undefined;
|
|
6162
6874
|
/** Whether moving past the last item returns to the first. */
|
|
6163
6875
|
loop?: (HelixHeadlessLightbox["loop"]) | undefined;
|
|
6876
|
+
/** The next control's accessible name. */
|
|
6877
|
+
"next-label"?: (HelixHeadlessLightbox["nextLabel"]) | undefined;
|
|
6878
|
+
/** The next control's accessible name. */
|
|
6879
|
+
nextLabel?: (HelixHeadlessLightbox["nextLabel"]) | undefined;
|
|
6880
|
+
/** The previous control's accessible name. */
|
|
6881
|
+
"previous-label"?: (HelixHeadlessLightbox["previousLabel"]) | undefined;
|
|
6882
|
+
/** The previous control's accessible name. */
|
|
6883
|
+
previousLabel?: (HelixHeadlessLightbox["previousLabel"]) | undefined;
|
|
6884
|
+
/** The name of an item with no `label` of its own, with `{index}` and
|
|
6885
|
+
`{count}` filled in. */
|
|
6886
|
+
"slide-label"?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
|
|
6887
|
+
/** The name of an item with no `label` of its own, with `{index}` and
|
|
6888
|
+
`{count}` filled in. */
|
|
6889
|
+
slideLabel?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
|
|
6890
|
+
/** The word screen readers announce in place of an item's role, set as
|
|
6891
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
6892
|
+
it to leave the role as `group`. */
|
|
6893
|
+
"slide-role-label"?: (HelixHeadlessLightbox["slideRoleLabel"]) | undefined;
|
|
6894
|
+
/** The word screen readers announce in place of an item's role, set as
|
|
6895
|
+
`aria-roledescription`. Translate it with the rest of your text, or empty
|
|
6896
|
+
it to leave the role as `group`. */
|
|
6897
|
+
slideRoleLabel?: (HelixHeadlessLightbox["slideRoleLabel"]) | undefined;
|
|
6164
6898
|
/** The status text that says which item is shown, with `{index}`, `{count}`
|
|
6165
6899
|
and the item's `{label}` filled in.
|
|
6166
6900
|
|
|
@@ -6344,7 +7078,27 @@ writes them, whatever this says. */
|
|
|
6344
7078
|
|
|
6345
7079
|
export type HelixHeadlessLineChartVueEvents = {};
|
|
6346
7080
|
|
|
7081
|
+
/** `HelixHeadlessListItem` component event */
|
|
7082
|
+
export type HelixHeadlessListItemElementEvent<E = Event> = TypedEvent<
|
|
7083
|
+
HelixHeadlessListItem,
|
|
7084
|
+
E
|
|
7085
|
+
>;
|
|
7086
|
+
/** `helix-action` event type */
|
|
7087
|
+
export type HelixHeadlessListItemHelixActionElementEvent =
|
|
7088
|
+
HelixHeadlessListItemElementEvent<HelixActionEvent>;
|
|
7089
|
+
|
|
6347
7090
|
export type HelixHeadlessListItemVueProps = {
|
|
7091
|
+
/** Marks the row a reader is on: `page` for the page they are reading, `step`,
|
|
7092
|
+
`location`, `date` or `time` for those, and written bare for the current
|
|
7093
|
+
one of a set. It is `aria-current` on the row's link, or on the row where
|
|
7094
|
+
it has none.
|
|
7095
|
+
|
|
7096
|
+
Not reflected, as a state never is. `row-current` is the part a
|
|
7097
|
+
stylesheet draws it from. */
|
|
7098
|
+
current?: (HelixHeadlessListItem["current"]) | undefined;
|
|
7099
|
+
/** Takes the row out of reach in a list with `selection-mode`: the arrow keys
|
|
7100
|
+
pass over it and it cannot be selected or acted on. */
|
|
7101
|
+
disabled?: (HelixHeadlessListItem["disabled"]) | undefined;
|
|
6348
7102
|
/** The URL the row links to. Leave it empty for a row that is not a link.
|
|
6349
7103
|
|
|
6350
7104
|
Empty rather than optional, and unset by default: a list is not always a
|
|
@@ -6356,9 +7110,39 @@ to the current page on every row a consumer never asked to be one. */
|
|
|
6356
7110
|
rel?: (HelixHeadlessListItem["rel"]) | undefined;
|
|
6357
7111
|
/** Where the link opens. Use it for a row that leaves the site. */
|
|
6358
7112
|
target?: (HelixHeadlessListItem["target"]) | undefined;
|
|
7113
|
+
/** What the row stands for in its list's `value`.
|
|
7114
|
+
|
|
7115
|
+
Absent is the row's own words. */
|
|
7116
|
+
value?: (HelixHeadlessListItem["value"]) | undefined;
|
|
7117
|
+
/** Whether the row holds its list's tab stop.
|
|
7118
|
+
|
|
7119
|
+
Written by a list with `selection-mode` on every row it holds, and unset
|
|
7120
|
+
otherwise, which is how a row knows it is a row of a grid. No attribute:
|
|
7121
|
+
it is coordination between elements, as `Tag.focusable` is. */
|
|
7122
|
+
focusable?: (HelixHeadlessListItem["focusable"]) | undefined;
|
|
7123
|
+
/** Whether the row is selected, in a list that selects.
|
|
7124
|
+
|
|
7125
|
+
Written by the list from its own `value`, and unset where nothing can be
|
|
7126
|
+
selected, which keeps `aria-selected` off a list that does not select. */
|
|
7127
|
+
selected?: (HelixHeadlessListItem["selected"]) | undefined;
|
|
7128
|
+
};
|
|
7129
|
+
|
|
7130
|
+
export type HelixHeadlessListItemVueEvents = {
|
|
7131
|
+
/** The reader pressed Enter on the row, or pressed the row in a list that selects nothing, in a list with `selection-mode`. Read the row from `target`. A row with `href` follows its link instead. */
|
|
7132
|
+
"helix-action": HelixHeadlessListItemHelixActionElementEvent;
|
|
6359
7133
|
};
|
|
6360
7134
|
|
|
6361
|
-
|
|
7135
|
+
/** `HelixHeadlessList` component event */
|
|
7136
|
+
export type HelixHeadlessListElementEvent<E = Event> = TypedEvent<
|
|
7137
|
+
HelixHeadlessList,
|
|
7138
|
+
E
|
|
7139
|
+
>;
|
|
7140
|
+
/** `helix-action` event type */
|
|
7141
|
+
export type HelixHeadlessListHelixActionElementEvent =
|
|
7142
|
+
HelixHeadlessListElementEvent<HelixActionEvent>;
|
|
7143
|
+
/** `helix-before-change` event type */
|
|
7144
|
+
export type HelixHeadlessListHelixBeforeChangeElementEvent =
|
|
7145
|
+
HelixHeadlessListElementEvent<HelixBeforeChangeEvent>;
|
|
6362
7146
|
|
|
6363
7147
|
export type HelixHeadlessListVueProps = {
|
|
6364
7148
|
/** The kind of list, which follows from the content.
|
|
@@ -6384,6 +7168,20 @@ has to survive with the stylesheet turned off.
|
|
|
6384
7168
|
kind?: (HelixHeadlessList["kind"]) | undefined;
|
|
6385
7169
|
/** The list's name, read by screen readers. */
|
|
6386
7170
|
label?: (HelixHeadlessList["label"]) | undefined;
|
|
7171
|
+
/** Numbers an ordered list downward, so the count falls row by row and ends at
|
|
7172
|
+
its last row, as `<ol reversed>` does. */
|
|
7173
|
+
reversed?: (HelixHeadlessList["reversed"]) | undefined;
|
|
7174
|
+
/** Makes the list interactive: `single` selects one row, `multiple` any
|
|
7175
|
+
number, and `none` moves and acts without selecting. Unset is a list a
|
|
7176
|
+
reader reads, with no tab stop of its own. */
|
|
7177
|
+
"selection-mode"?: (HelixHeadlessList["selectionMode"]) | undefined;
|
|
7178
|
+
/** Makes the list interactive: `single` selects one row, `multiple` any
|
|
7179
|
+
number, and `none` moves and acts without selecting. Unset is a list a
|
|
7180
|
+
reader reads, with no tab stop of its own. */
|
|
7181
|
+
selectionMode?: (HelixHeadlessList["selectionMode"]) | undefined;
|
|
7182
|
+
/** The number of an ordered list's first row, as `<ol start>` is. Unset counts
|
|
7183
|
+
from one, or down from the number of rows where `reversed`. */
|
|
7184
|
+
start?: (HelixHeadlessList["start"]) | undefined;
|
|
6387
7185
|
/** The markers an ordered list draws. It takes the five values of `<ol type>`.
|
|
6388
7186
|
|
|
6389
7187
|
Reflected, because this is one of the things a stylesheet selects on, each
|
|
@@ -6391,18 +7189,24 @@ value mapping to a `list-style-type`. The platform's spellings rather than
|
|
|
6391
7189
|
the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
|
|
6392
7190
|
consumer would have written on an `<ol>`.
|
|
6393
7191
|
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
`list-item` counter, and that counter is not author-resettable. Measured in
|
|
6397
|
-
Chrome 148, `counter-reset: list-item 4` moves nothing on a `<div>`, on a
|
|
6398
|
-
`<ul>`, or even on a real `<ol>`, while `<ol start="5">` does and a *named*
|
|
6399
|
-
counter with explicit `::before` content does. So the markers would have to
|
|
6400
|
-
be rebuilt out of generated content to gain a start, which is a different
|
|
6401
|
-
component. `type` is only `list-style-type` and works. */
|
|
7192
|
+
`type` is only `list-style-type`. `start` and `reversed` move the count
|
|
7193
|
+
itself. */
|
|
6402
7194
|
type?: (HelixHeadlessList["type"]) | undefined;
|
|
7195
|
+
/** The selected rows' values, separated by commas, in a list that selects.
|
|
7196
|
+
|
|
7197
|
+
Set it to start with rows selected. A row's value is its `value`, or its
|
|
7198
|
+
words where it has none. */
|
|
7199
|
+
value?: (HelixHeadlessList["value"]) | undefined;
|
|
6403
7200
|
};
|
|
6404
7201
|
|
|
6405
|
-
export type HelixHeadlessListVueEvents = {
|
|
7202
|
+
export type HelixHeadlessListVueEvents = {
|
|
7203
|
+
/** Fired once a press has changed which rows are selected. */
|
|
7204
|
+
change: HelixHeadlessListElementEvent;
|
|
7205
|
+
/** Sent from a row when the reader acts on it: Enter, or a press in a list that selects nothing. Read the row from `target`. A row with `href` follows its link instead. */
|
|
7206
|
+
"helix-action": HelixHeadlessListHelixActionElementEvent;
|
|
7207
|
+
/** Fired before a press changes which rows are selected, with the `value` it would leave. Cancelable. */
|
|
7208
|
+
"helix-before-change": HelixHeadlessListHelixBeforeChangeElementEvent;
|
|
7209
|
+
};
|
|
6406
7210
|
|
|
6407
7211
|
/** `HelixHeadlessListbox` component event */
|
|
6408
7212
|
export type HelixHeadlessListboxElementEvent<E = Event> = TypedEvent<
|
|
@@ -6456,6 +7260,22 @@ filtering already does: `filter`, the empty state and the keyboard are all
|
|
|
6456
7260
|
this component's. A select, a combobox and a command palette drawing their
|
|
6457
7261
|
own search boxes would be three copies of one field. */
|
|
6458
7262
|
filterable?: (HelixHeadlessListbox["filterable"]) | undefined;
|
|
7263
|
+
/** How long typing in the filter field rests before the list is filtered, in
|
|
7264
|
+
milliseconds. `0` filters on every keystroke.
|
|
7265
|
+
|
|
7266
|
+
For a list filtered on a server, where `helix-filter` starts a request: a
|
|
7267
|
+
reader typing a word sends one request for the word, not one for each
|
|
7268
|
+
letter. Enter and the arrow keys filter at once on what is typed, so they
|
|
7269
|
+
act on the list the reader expects. */
|
|
7270
|
+
"filter-delay"?: (HelixHeadlessListbox["filterDelay"] | `${number}`) | undefined;
|
|
7271
|
+
/** How long typing in the filter field rests before the list is filtered, in
|
|
7272
|
+
milliseconds. `0` filters on every keystroke.
|
|
7273
|
+
|
|
7274
|
+
For a list filtered on a server, where `helix-filter` starts a request: a
|
|
7275
|
+
reader typing a word sends one request for the word, not one for each
|
|
7276
|
+
letter. Enter and the arrow keys filter at once on what is typed, so they
|
|
7277
|
+
act on the list the reader expects. */
|
|
7278
|
+
filterDelay?: (HelixHeadlessListbox["filterDelay"]) | undefined;
|
|
6459
7279
|
/** Placeholder text for the filter field. */
|
|
6460
7280
|
"filter-label"?: (HelixHeadlessListbox["filterLabel"]) | undefined;
|
|
6461
7281
|
/** Placeholder text for the filter field. */
|
|
@@ -6469,6 +7289,26 @@ a reader can move through the options before closing the panel on one. */
|
|
|
6469
7289
|
manual?: (HelixHeadlessListbox["manual"]) | undefined;
|
|
6470
7290
|
/** Whether more than one option can be chosen. */
|
|
6471
7291
|
multiple?: (HelixHeadlessListbox["multiple"]) | undefined;
|
|
7292
|
+
/** What a screen reader hears when a filter leaves one option. `{count}` is
|
|
7293
|
+
the count. */
|
|
7294
|
+
"result-label"?: (HelixHeadlessListbox["resultLabel"]) | undefined;
|
|
7295
|
+
/** What a screen reader hears when a filter leaves one option. `{count}` is
|
|
7296
|
+
the count. */
|
|
7297
|
+
resultLabel?: (HelixHeadlessListbox["resultLabel"]) | undefined;
|
|
7298
|
+
/** What a screen reader hears when a filter leaves any other number of
|
|
7299
|
+
options. `{count}` is the count.
|
|
7300
|
+
|
|
7301
|
+
**Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
|
|
7302
|
+
pair: a language with more forms than two picks the one for its `one` and
|
|
7303
|
+
writes the rest here. */
|
|
7304
|
+
"results-label"?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
|
|
7305
|
+
/** What a screen reader hears when a filter leaves any other number of
|
|
7306
|
+
options. `{count}` is the count.
|
|
7307
|
+
|
|
7308
|
+
**Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
|
|
7309
|
+
pair: a language with more forms than two picks the one for its `one` and
|
|
7310
|
+
writes the rest here. */
|
|
7311
|
+
resultsLabel?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
|
|
6472
7312
|
/** Whether the rows are still loading.
|
|
6473
7313
|
|
|
6474
7314
|
Reflected, because a stylesheet needs it: the rows that are already there
|
|
@@ -6571,6 +7411,18 @@ export type HelixHeadlessListboxVueEvents = {
|
|
|
6571
7411
|
};
|
|
6572
7412
|
|
|
6573
7413
|
export type HelixHeadlessLoaderVueProps = {
|
|
7414
|
+
/** How long the loader waits before it shows, in milliseconds, so work that
|
|
7415
|
+
finishes quickly never flashes one.
|
|
7416
|
+
|
|
7417
|
+
Absent shows it at once. Hidden in the served markup too, so a page that
|
|
7418
|
+
loads quickly never draws it. */
|
|
7419
|
+
delay?: (HelixHeadlessLoader["delay"]) | undefined;
|
|
7420
|
+
/** The id of the region being loaded, which is marked `aria-busy` while the
|
|
7421
|
+
loader is on the page.
|
|
7422
|
+
|
|
7423
|
+
Names an element in the same tree. In React it arrives as a property, the
|
|
7424
|
+
way `Tooltip.for` does. */
|
|
7425
|
+
for?: (HelixHeadlessLoader["for"]) | undefined;
|
|
6574
7426
|
/** The loader's name, announced by screen readers while the work is in
|
|
6575
7427
|
progress. */
|
|
6576
7428
|
label?: (HelixHeadlessLoader["label"]) | undefined;
|
|
@@ -6918,6 +7770,9 @@ export type HelixHeadlessMapHelixMapTiltElementEvent =
|
|
|
6918
7770
|
/** `helix-map-zoom` event type */
|
|
6919
7771
|
export type HelixHeadlessMapHelixMapZoomElementEvent =
|
|
6920
7772
|
HelixHeadlessMapElementEvent<HelixMapZoomEvent>;
|
|
7773
|
+
/** `helix-toggle` event type */
|
|
7774
|
+
export type HelixHeadlessMapHelixToggleElementEvent =
|
|
7775
|
+
HelixHeadlessMapElementEvent<HelixToggleEvent>;
|
|
6921
7776
|
|
|
6922
7777
|
export type HelixHeadlessMapVueProps = {
|
|
6923
7778
|
/** The map's rotation, in degrees clockwise from north. `connectMap` keeps it
|
|
@@ -7222,6 +8077,8 @@ export type HelixHeadlessMapVueEvents = {
|
|
|
7222
8077
|
"helix-map-tilt": HelixHeadlessMapHelixMapTiltElementEvent;
|
|
7223
8078
|
/** A zoom button or key was pressed, with a direction. Zoom your map in response. */
|
|
7224
8079
|
"helix-map-zoom": HelixHeadlessMapHelixMapZoomElementEvent;
|
|
8080
|
+
/** A layer's tile in the layers menu showed or hid it. Sent from the layer once its `hidden` attribute holds the choice, with `checked` true when it is shown. */
|
|
8081
|
+
"helix-toggle": HelixHeadlessMapHelixToggleElementEvent;
|
|
7225
8082
|
};
|
|
7226
8083
|
|
|
7227
8084
|
/** `HelixHeadlessMapRoute` component event */
|
|
@@ -7491,37 +8348,24 @@ So the anchor *is* the row, carrying `menuitem` and the `tabindex` the menu
|
|
|
7491
8348
|
roves, which is the same maneuver `Tree.Item` makes and the reason `href`
|
|
7492
8349
|
changes the markup rather than only adding an attribute.
|
|
7493
8350
|
|
|
7494
|
-
**`Option`
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
option
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
back `null`. So `role="option"` is pinned to the host, and an anchor under
|
|
7501
|
-
it hits the naming failure above. A menu has no such constraint because
|
|
7502
|
-
focus really moves to the row. */
|
|
8351
|
+
**`Option` takes an `href` too, and keeps its role a different way.** A
|
|
8352
|
+
listbox keeps focus somewhere else, in the text field for a combobox, and
|
|
8353
|
+
names the current option with `aria-activedescendant`, which can only point
|
|
8354
|
+
at the option's host. So an option stays `role="option"` on its host, draws
|
|
8355
|
+
no anchor, and follows its link through an anchor made for the moment. A
|
|
8356
|
+
menu has no such constraint, because focus really moves to the row. */
|
|
7503
8357
|
href?: (HelixHeadlessMenuItem["href"]) | undefined;
|
|
7504
8358
|
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
7505
8359
|
rel?: (HelixHeadlessMenuItem["rel"]) | undefined;
|
|
8360
|
+
/** The row's keyboard shortcut as a chord, such as `mod+s`, shown after the
|
|
8361
|
+
label in the platform's glyphs and given to the row as
|
|
8362
|
+
`aria-keyshortcuts`. `mod` is Command on an Apple keyboard and Control
|
|
8363
|
+
elsewhere. Showing a shortcut does not bind it. */
|
|
8364
|
+
shortcut?: (HelixHeadlessMenuItem["shortcut"]) | undefined;
|
|
7506
8365
|
/** Where the link opens, for rows that should open outside the current page. */
|
|
7507
8366
|
target?: (HelixHeadlessMenuItem["target"]) | undefined;
|
|
7508
8367
|
/** The row's value, sent in `helix-select` when the row is chosen. */
|
|
7509
8368
|
value?: (HelixHeadlessMenuItem["value"]) | undefined;
|
|
7510
|
-
/** Whether the row is on the menu page that is showing.
|
|
7511
|
-
|
|
7512
|
-
Set by the menu, and a property rather than an attribute for that reason.
|
|
7513
|
-
Public because the menu has to reach it, and not something a consumer
|
|
7514
|
-
writes: which page is open is the menu's business. */
|
|
7515
|
-
onPage?: (HelixHeadlessMenuItem["onPage"]) | undefined;
|
|
7516
|
-
/** Whether the page showing is this row's submenu, or one below it.
|
|
7517
|
-
|
|
7518
|
-
Separate from `onPage`, and it has to be. A row that opened a page is not
|
|
7519
|
-
itself on that page, so both are false for it, and rendering nothing on
|
|
7520
|
-
that basis takes its `slot[name="submenu"]` with it: the rows inside have
|
|
7521
|
-
nowhere to be assigned and are never laid out. Every row on the way down to
|
|
7522
|
-
the open page has to keep its slot, not only the one directly above it.
|
|
7523
|
-
Three levels deep, the topmost row holds the slot the middle one lives in. */
|
|
7524
|
-
showingSubmenu?: (HelixHeadlessMenuItem["showingSubmenu"]) | undefined;
|
|
7525
8369
|
};
|
|
7526
8370
|
|
|
7527
8371
|
export type HelixHeadlessMenuItemVueEvents = {
|
|
@@ -7554,6 +8398,9 @@ export type HelixHeadlessMenuVueProps = {
|
|
|
7554
8398
|
"back-label"?: (HelixHeadlessMenu["backLabel"]) | undefined;
|
|
7555
8399
|
/** The text of the row that returns from a submenu. */
|
|
7556
8400
|
backLabel?: (HelixHeadlessMenu["backLabel"]) | undefined;
|
|
8401
|
+
/** Whether the menu is the trigger's context menu: it opens where the reader
|
|
8402
|
+
asks for one, with a right-click, a long press, Shift+F10 or the menu key. */
|
|
8403
|
+
context?: (HelixHeadlessMenu["context"]) | undefined;
|
|
7557
8404
|
/** Accessible name for the surface.
|
|
7558
8405
|
|
|
7559
8406
|
Empty by default, which names the surface by its trigger, so a menu opened
|
|
@@ -7610,6 +8457,14 @@ export type HelixHeadlessMenuVueEvents = {
|
|
|
7610
8457
|
toggle: HelixHeadlessMenuToggleElementEvent;
|
|
7611
8458
|
};
|
|
7612
8459
|
|
|
8460
|
+
export type HelixHeadlessMenuSectionVueProps = {
|
|
8461
|
+
/** The heading's words, when they are plain text. Content in the `heading`
|
|
8462
|
+
slot replaces it. */
|
|
8463
|
+
label?: (HelixHeadlessMenuSection["label"]) | undefined;
|
|
8464
|
+
};
|
|
8465
|
+
|
|
8466
|
+
export type HelixHeadlessMenuSectionVueEvents = {};
|
|
8467
|
+
|
|
7613
8468
|
export type HelixHeadlessMeterVueProps = {
|
|
7614
8469
|
/** Sets the band directly, for a rule that `low`, `high`, and `optimum` cannot
|
|
7615
8470
|
express.
|
|
@@ -7643,7 +8498,10 @@ no reader. */
|
|
|
7643
8498
|
|
|
7644
8499
|
Absent leaves the range unbanded. */
|
|
7645
8500
|
high?: (HelixHeadlessMeter["high"]) | undefined;
|
|
7646
|
-
/** Accessible name for the reading.
|
|
8501
|
+
/** Accessible name for the reading.
|
|
8502
|
+
|
|
8503
|
+
A visible label in the `label` slot names it instead, with the words it
|
|
8504
|
+
shows, so the name and the label cannot disagree. */
|
|
7647
8505
|
label?: (HelixHeadlessMeter["label"]) | undefined;
|
|
7648
8506
|
/** The locale the percentage is written in, such as `fr` for `72 %`.
|
|
7649
8507
|
|
|
@@ -7713,6 +8571,11 @@ fair summary of a task and a poor one of a quantity. */
|
|
|
7713
8571
|
export type HelixHeadlessMeterVueEvents = {};
|
|
7714
8572
|
|
|
7715
8573
|
export type HelixHeadlessNavigationVueProps = {
|
|
8574
|
+
/** Whether the arrow keys move focus between the destinations.
|
|
8575
|
+
|
|
8576
|
+
Off by default, so a page whose readers scroll with the arrow keys while
|
|
8577
|
+
a link has focus keeps doing so. */
|
|
8578
|
+
arrows?: (HelixHeadlessNavigation["arrows"]) | undefined;
|
|
7716
8579
|
/** The landmark's name, read by screen readers.
|
|
7717
8580
|
|
|
7718
8581
|
An `aria-label` or `aria-labelledby` on the host names the landmark too,
|
|
@@ -7874,6 +8737,9 @@ export type HelixHeadlessNotificationsElementEvent<E = Event> = TypedEvent<
|
|
|
7874
8737
|
/** `helix-dismiss` event type */
|
|
7875
8738
|
export type HelixHeadlessNotificationsHelixDismissElementEvent =
|
|
7876
8739
|
HelixHeadlessNotificationsElementEvent<HelixDismissEvent>;
|
|
8740
|
+
/** `helix-load-more` event type */
|
|
8741
|
+
export type HelixHeadlessNotificationsHelixLoadMoreElementEvent =
|
|
8742
|
+
HelixHeadlessNotificationsElementEvent<HelixLoadMoreEvent>;
|
|
7877
8743
|
/** `helix-read` event type */
|
|
7878
8744
|
export type HelixHeadlessNotificationsHelixReadElementEvent =
|
|
7879
8745
|
HelixHeadlessNotificationsElementEvent<HelixReadEvent>;
|
|
@@ -7881,6 +8747,16 @@ export type HelixHeadlessNotificationsHelixReadElementEvent =
|
|
|
7881
8747
|
export type HelixHeadlessNotificationsVueProps = {
|
|
7882
8748
|
/** The feed's name, read by screen readers. */
|
|
7883
8749
|
label?: (HelixHeadlessNotifications["label"]) | undefined;
|
|
8750
|
+
/** Whether to draw a button after the list that asks for the next page, by
|
|
8751
|
+
sending `helix-load-more`. Take it off once there is nothing more. */
|
|
8752
|
+
"load-more"?: (HelixHeadlessNotifications["loadMore"]) | undefined;
|
|
8753
|
+
/** Whether to draw a button after the list that asks for the next page, by
|
|
8754
|
+
sending `helix-load-more`. Take it off once there is nothing more. */
|
|
8755
|
+
loadMore?: (HelixHeadlessNotifications["loadMore"]) | undefined;
|
|
8756
|
+
/** The text of the `load-more` button. */
|
|
8757
|
+
"load-more-label"?: (HelixHeadlessNotifications["loadMoreLabel"]) | undefined;
|
|
8758
|
+
/** The text of the `load-more` button. */
|
|
8759
|
+
loadMoreLabel?: (HelixHeadlessNotifications["loadMoreLabel"]) | undefined;
|
|
7884
8760
|
/** Whether to draw a control that marks everything read. */
|
|
7885
8761
|
"mark-all"?: (HelixHeadlessNotifications["markAll"]) | undefined;
|
|
7886
8762
|
/** Whether to draw a control that marks everything read. */
|
|
@@ -7889,6 +8765,12 @@ export type HelixHeadlessNotificationsVueProps = {
|
|
|
7889
8765
|
"mark-all-label"?: (HelixHeadlessNotifications["markAllLabel"]) | undefined;
|
|
7890
8766
|
/** Label for the mark-all control. */
|
|
7891
8767
|
markAllLabel?: (HelixHeadlessNotifications["markAllLabel"]) | undefined;
|
|
8768
|
+
/** How many notifications there are in all, where the feed holds only some of
|
|
8769
|
+
them, read as each row's `aria-setsize`. `-1` says the count is unknown.
|
|
8770
|
+
|
|
8771
|
+
Unset, the browser counts the rows it can see, which is right for a feed
|
|
8772
|
+
that holds everything. */
|
|
8773
|
+
total?: (HelixHeadlessNotifications["total"]) | undefined;
|
|
7892
8774
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
7893
8775
|
"empty-text"?: (HelixHeadlessNotifications["emptyText"]) | undefined;
|
|
7894
8776
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
@@ -7908,6 +8790,8 @@ say that without the component knowing what a row looks like. */
|
|
|
7908
8790
|
export type HelixHeadlessNotificationsVueEvents = {
|
|
7909
8791
|
/** Fired when the user dismisses a row. The row dispatches it, and you can listen for it on the feed. Cancelable: cancel it to keep the row. */
|
|
7910
8792
|
"helix-dismiss": HelixHeadlessNotificationsHelixDismissElementEvent;
|
|
8793
|
+
/** Fired when a reader presses the `load-more` button, asking for the next page of the feed. */
|
|
8794
|
+
"helix-load-more": HelixHeadlessNotificationsHelixLoadMoreElementEvent;
|
|
7911
8795
|
/** Fired by an item when it is marked read or unread, and by the feed when everything is marked read. Cancelable. */
|
|
7912
8796
|
"helix-read": HelixHeadlessNotificationsHelixReadElementEvent;
|
|
7913
8797
|
};
|
|
@@ -7949,6 +8833,22 @@ reach the bubble. Absent is the control's own sentence, in English. */
|
|
|
7949
8833
|
"decrement-label"?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
|
|
7950
8834
|
/** The name of the step down button, read by screen readers. */
|
|
7951
8835
|
decrementLabel?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
|
|
8836
|
+
/** `Intl.NumberFormat` options the number is shown with while the field is
|
|
8837
|
+
not being edited: a currency, a percent, a unit, or a number of decimals.
|
|
8838
|
+
Written as JSON in the attribute.
|
|
8839
|
+
|
|
8840
|
+
```html
|
|
8841
|
+
<helix-number-input format-options='{"style":"currency","currency":"EUR"}'></helix-number-input>
|
|
8842
|
+
``` */
|
|
8843
|
+
"format-options"?: (HelixHeadlessNumberInput["formatOptions"]) | undefined;
|
|
8844
|
+
/** `Intl.NumberFormat` options the number is shown with while the field is
|
|
8845
|
+
not being edited: a currency, a percent, a unit, or a number of decimals.
|
|
8846
|
+
Written as JSON in the attribute.
|
|
8847
|
+
|
|
8848
|
+
```html
|
|
8849
|
+
<helix-number-input format-options='{"style":"currency","currency":"EUR"}'></helix-number-input>
|
|
8850
|
+
``` */
|
|
8851
|
+
formatOptions?: (HelixHeadlessNumberInput["formatOptions"]) | undefined;
|
|
7952
8852
|
/** The name of the step up button, read by screen readers. */
|
|
7953
8853
|
"increment-label"?: (HelixHeadlessNumberInput["incrementLabel"]) | undefined;
|
|
7954
8854
|
/** The name of the step up button, read by screen readers. */
|
|
@@ -8000,6 +8900,12 @@ filled in. */
|
|
|
8000
8900
|
readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
|
|
8001
8901
|
/** Prevents editing. The value is still submitted with the form. */
|
|
8002
8902
|
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;
|
|
8003
8909
|
/** Makes the label a grip that changes the value when it is dragged.
|
|
8004
8910
|
|
|
8005
8911
|
The label is what is dragged, so this adds no chrome at all. Still opt-in,
|
|
@@ -8032,6 +8938,10 @@ A unit slotted into `end` is drawn beside the number and is not part of
|
|
|
8032
8938
|
what the spinbutton announces, so it goes here too. Empty announces the
|
|
8033
8939
|
number alone. */
|
|
8034
8940
|
valueText?: (HelixHeadlessNumberInput["valueText"]) | undefined;
|
|
8941
|
+
/** Whether the mouse wheel steps the number while the field has focus, as
|
|
8942
|
+
React Aria's NumberField does unless told not to. Off, the wheel scrolls
|
|
8943
|
+
the page, which is what a reader passing over a form expects. */
|
|
8944
|
+
wheel?: (HelixHeadlessNumberInput["wheel"]) | undefined;
|
|
8035
8945
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
8036
8946
|
"default-value"?: (HelixHeadlessNumberInput["defaultValue"]) | undefined;
|
|
8037
8947
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -8121,11 +9031,31 @@ export type HelixHeadlessObjectInspectorElementEvent<E = Event> = TypedEvent<
|
|
|
8121
9031
|
HelixHeadlessObjectInspector,
|
|
8122
9032
|
E
|
|
8123
9033
|
>;
|
|
9034
|
+
/** `helix-activate` event type */
|
|
9035
|
+
export type HelixHeadlessObjectInspectorHelixActivateElementEvent =
|
|
9036
|
+
HelixHeadlessObjectInspectorElementEvent<HelixActivateEvent>;
|
|
9037
|
+
/** `helix-before-activate` event type */
|
|
9038
|
+
export type HelixHeadlessObjectInspectorHelixBeforeActivateElementEvent =
|
|
9039
|
+
HelixHeadlessObjectInspectorElementEvent<HelixBeforeActivateEvent>;
|
|
8124
9040
|
/** `helix-copy` event type */
|
|
8125
9041
|
export type HelixHeadlessObjectInspectorHelixCopyElementEvent =
|
|
8126
9042
|
HelixHeadlessObjectInspectorElementEvent<HelixCopyEvent>;
|
|
9043
|
+
/** `helix-filter` event type */
|
|
9044
|
+
export type HelixHeadlessObjectInspectorHelixFilterElementEvent =
|
|
9045
|
+
HelixHeadlessObjectInspectorElementEvent<HelixFilterEvent>;
|
|
9046
|
+
/** `helix-filtered` event type */
|
|
9047
|
+
export type HelixHeadlessObjectInspectorHelixFilteredElementEvent =
|
|
9048
|
+
HelixHeadlessObjectInspectorElementEvent<HelixFilteredEvent>;
|
|
8127
9049
|
|
|
8128
9050
|
export type HelixHeadlessObjectInspectorVueProps = {
|
|
9051
|
+
/** The active row's path, such as `/meta/tags/0`, and the empty string for the
|
|
9052
|
+
root.
|
|
9053
|
+
|
|
9054
|
+
Reading gives the row the keys are on. Writing moves there, opening the
|
|
9055
|
+
branches around it, and sends no event, the way a script's write to any
|
|
9056
|
+
current value sends none. A path the value does not hold moves to the
|
|
9057
|
+
nearest branch above it that it does. */
|
|
9058
|
+
active?: (HelixHeadlessObjectInspector["active"]) | undefined;
|
|
8129
9059
|
/** The copy button's accessible name on a row with a key, with the key filled
|
|
8130
9060
|
in as `{name}`.
|
|
8131
9061
|
|
|
@@ -8156,6 +9086,15 @@ reader sees the shape of the value before its contents. `0` starts with the
|
|
|
8156
9086
|
root closed; a large number opens everything, which on a big value is the
|
|
8157
9087
|
wall of text this exists to avoid. */
|
|
8158
9088
|
defaultDepth?: (HelixHeadlessObjectInspector["defaultDepth"]) | undefined;
|
|
9089
|
+
/** Text the tree is narrowed to: the entries whose key or value holds it,
|
|
9090
|
+
ignoring case, and the branches that lead to them. Empty shows everything. */
|
|
9091
|
+
filter?: (HelixHeadlessObjectInspector["filter"]) | undefined;
|
|
9092
|
+
/** Whether to show a field that sets `filter`. */
|
|
9093
|
+
filterable?: (HelixHeadlessObjectInspector["filterable"]) | undefined;
|
|
9094
|
+
/** The filter field's placeholder and accessible name. */
|
|
9095
|
+
"filter-label"?: (HelixHeadlessObjectInspector["filterLabel"]) | undefined;
|
|
9096
|
+
/** The filter field's placeholder and accessible name. */
|
|
9097
|
+
filterLabel?: (HelixHeadlessObjectInspector["filterLabel"]) | undefined;
|
|
8159
9098
|
/** The id of a `<script type="application/json">` holding the value.
|
|
8160
9099
|
|
|
8161
9100
|
Read once the document exists, and again whenever this changes. Text that
|
|
@@ -8204,6 +9143,16 @@ who set the property. This button is positioned out of the flow and takes no
|
|
|
8204
9143
|
room, so nothing selects on it, and reflection exists so that a selector can
|
|
8205
9144
|
reach a value. */
|
|
8206
9145
|
noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
|
|
9146
|
+
/** What a screen reader hears when a filter matches one entry. `{count}` is the count. */
|
|
9147
|
+
"result-label"?: (HelixHeadlessObjectInspector["resultLabel"]) | undefined;
|
|
9148
|
+
/** What a screen reader hears when a filter matches one entry. `{count}` is the count. */
|
|
9149
|
+
resultLabel?: (HelixHeadlessObjectInspector["resultLabel"]) | undefined;
|
|
9150
|
+
/** What a screen reader hears when a filter matches any other number of
|
|
9151
|
+
entries. `{count}` is the count. The two are chosen by `Intl.PluralRules`. */
|
|
9152
|
+
"results-label"?: (HelixHeadlessObjectInspector["resultsLabel"]) | undefined;
|
|
9153
|
+
/** What a screen reader hears when a filter matches any other number of
|
|
9154
|
+
entries. `{count}` is the count. The two are chosen by `Intl.PluralRules`. */
|
|
9155
|
+
resultsLabel?: (HelixHeadlessObjectInspector["resultsLabel"]) | undefined;
|
|
8207
9156
|
/** The tree's accessible name when `label` is empty and the host names it
|
|
8208
9157
|
with neither `aria-label` nor `aria-labelledby`. */
|
|
8209
9158
|
"tree-label"?: (HelixHeadlessObjectInspector["treeLabel"]) | undefined;
|
|
@@ -8215,6 +9164,11 @@ with neither `aria-label` nor `aria-labelledby`. */
|
|
|
8215
9164
|
For a value of thousands of entries. Reflected, because the box it scrolls
|
|
8216
9165
|
needs a height, which is a stylesheet rule reading this attribute. */
|
|
8217
9166
|
windowed?: (HelixHeadlessObjectInspector["windowed"]) | undefined;
|
|
9167
|
+
/** The open branches, by path, in no set order.
|
|
9168
|
+
|
|
9169
|
+
Writing opens exactly these and closes every other, keeping the active row
|
|
9170
|
+
where it stays visible. A property, never an attribute. */
|
|
9171
|
+
expanded?: (HelixHeadlessObjectInspector["expanded"]) | undefined;
|
|
8218
9172
|
/** The value to show, when your code already holds it as an object.
|
|
8219
9173
|
|
|
8220
9174
|
Takes precedence over `for`. Anything JSON can say is drawn; anything else
|
|
@@ -8223,8 +9177,16 @@ is shown as its string. */
|
|
|
8223
9177
|
};
|
|
8224
9178
|
|
|
8225
9179
|
export type HelixHeadlessObjectInspectorVueEvents = {
|
|
9180
|
+
/** The active row moved, by a key or a click. The detail's `value` is its path. */
|
|
9181
|
+
"helix-activate": HelixHeadlessObjectInspectorHelixActivateElementEvent;
|
|
9182
|
+
/** The active row is about to move, with its new path. Cancelable: cancel it to keep the row where it is. */
|
|
9183
|
+
"helix-before-activate": HelixHeadlessObjectInspectorHelixBeforeActivateElementEvent;
|
|
8226
9184
|
/** A value was put on the clipboard, from the copy button or the keyboard. */
|
|
8227
9185
|
"helix-copy": HelixHeadlessObjectInspectorHelixCopyElementEvent;
|
|
9186
|
+
/** Text was typed in the filter field, with what it now holds. Cancelable: cancel it to keep the filter as it was. */
|
|
9187
|
+
"helix-filter": HelixHeadlessObjectInspectorHelixFilterElementEvent;
|
|
9188
|
+
/** The filter field changed `filter`, which now holds the text. */
|
|
9189
|
+
"helix-filtered": HelixHeadlessObjectInspectorHelixFilteredElementEvent;
|
|
8228
9190
|
};
|
|
8229
9191
|
|
|
8230
9192
|
export type HelixHeadlessOptionGroupVueProps = {
|
|
@@ -8310,6 +9272,24 @@ string is not a fact a selector needs. */
|
|
|
8310
9272
|
description?: (HelixHeadlessOption["description"]) | undefined;
|
|
8311
9273
|
/** Prevents the option from being chosen. */
|
|
8312
9274
|
disabled?: (HelixHeadlessOption["disabled"]) | undefined;
|
|
9275
|
+
/** Whether following the link downloads what it names. Only meaningful
|
|
9276
|
+
beside an `href`. */
|
|
9277
|
+
download?: (HelixHeadlessOption["download"]) | undefined;
|
|
9278
|
+
/** The URL the option links to. Setting it makes the option a link: choosing
|
|
9279
|
+
it, with a press, Enter or a click, follows the link and selects nothing,
|
|
9280
|
+
as React Aria's items with `href` do. Command, Control and Shift open it
|
|
9281
|
+
where they open a link, in a new tab or a new window.
|
|
9282
|
+
|
|
9283
|
+
`helix-select` is said first with the `href` in it, and canceling it keeps
|
|
9284
|
+
the browser from following, so a client-side router follows it instead.
|
|
9285
|
+
|
|
9286
|
+
**The option stays an option**, and an anchor is never drawn inside it:
|
|
9287
|
+
`role="option"` sits on the host, where a listbox's
|
|
9288
|
+
`aria-activedescendant` can name it, and an `<a>` inside would be exposed
|
|
9289
|
+
as a link within the option and take its name (Menu Item's `href` records
|
|
9290
|
+
the measurement). The link is followed through an anchor made for the
|
|
9291
|
+
moment, which `followLink` describes. */
|
|
9292
|
+
href?: (HelixHeadlessOption["href"]) | undefined;
|
|
8313
9293
|
/** A shorter name for this choice, for where the row does not fit.
|
|
8314
9294
|
|
|
8315
9295
|
`<option label>`'s own meaning: the text a chooser shows when it has less
|
|
@@ -8321,10 +9301,30 @@ simply the accessible name.
|
|
|
8321
9301
|
`<option label>` does: written the platform's way, a select listed a row of
|
|
8322
9302
|
nothing for every choice. */
|
|
8323
9303
|
label?: (HelixHeadlessOption["label"]) | undefined;
|
|
9304
|
+
/** The link's `rel`. Set it whenever you set `target="_blank"`. */
|
|
9305
|
+
rel?: (HelixHeadlessOption["rel"]) | undefined;
|
|
8324
9306
|
/** Whether this choice is currently chosen.
|
|
8325
9307
|
|
|
8326
9308
|
Written by the listbox. */
|
|
8327
9309
|
selected?: (HelixHeadlessOption["selected"]) | undefined;
|
|
9310
|
+
/** Where the link opens, such as `_blank`, for an option with an `href`. */
|
|
9311
|
+
target?: (HelixHeadlessOption["target"]) | undefined;
|
|
9312
|
+
/** The words a reader types to reach this choice, where the row's own words
|
|
9313
|
+
are not them: typeahead, a filter and a combobox match against it, and a
|
|
9314
|
+
select's trigger shows it.
|
|
9315
|
+
|
|
9316
|
+
For a row whose content is a picture, an avatar beside a name and a role,
|
|
9317
|
+
or a name written in another script, as React Aria's `textValue`. Empty
|
|
9318
|
+
reads the row's words, then `label`. */
|
|
9319
|
+
"text-value"?: (HelixHeadlessOption["textValue"]) | undefined;
|
|
9320
|
+
/** The words a reader types to reach this choice, where the row's own words
|
|
9321
|
+
are not them: typeahead, a filter and a combobox match against it, and a
|
|
9322
|
+
select's trigger shows it.
|
|
9323
|
+
|
|
9324
|
+
For a row whose content is a picture, an avatar beside a name and a role,
|
|
9325
|
+
or a name written in another script, as React Aria's `textValue`. Empty
|
|
9326
|
+
reads the row's words, then `label`. */
|
|
9327
|
+
textValue?: (HelixHeadlessOption["textValue"]) | undefined;
|
|
8328
9328
|
/** The value that identifies the option, and that a form submits. */
|
|
8329
9329
|
value?: (HelixHeadlessOption["value"]) | undefined;
|
|
8330
9330
|
/** Whether the markup declares this option selected. A form reset returns to it.
|
|
@@ -8356,7 +9356,7 @@ change of its own rather than a property being added. */
|
|
|
8356
9356
|
};
|
|
8357
9357
|
|
|
8358
9358
|
export type HelixHeadlessOptionVueEvents = {
|
|
8359
|
-
/** The option was chosen. Cancelable: canceling it leaves the selection as it was
|
|
9359
|
+
/** The option was chosen. Cancelable: canceling it leaves the selection as it was, and keeps the browser from following an option's `href`. */
|
|
8360
9360
|
"helix-select": HelixHeadlessOptionHelixSelectElementEvent;
|
|
8361
9361
|
};
|
|
8362
9362
|
|
|
@@ -8390,7 +9390,8 @@ read at the click rather than cached, because a reader can change it while
|
|
|
8390
9390
|
the page is open and this is the only motion in the component that
|
|
8391
9391
|
JavaScript rather than CSS decides. */
|
|
8392
9392
|
behavior?: (HelixHeadlessOutline["behavior"]) | undefined;
|
|
8393
|
-
/** The navigation's name, read by screen readers.
|
|
9393
|
+
/** The navigation's name, read by screen readers. A heading in the `heading`
|
|
9394
|
+
slot names it in place of this. */
|
|
8394
9395
|
label?: (HelixHeadlessOutline["label"]) | undefined;
|
|
8395
9396
|
/** How far below the top of the scroll container a heading counts as reached,
|
|
8396
9397
|
in pixels. The scroll container is the window or the panel the sections
|
|
@@ -8600,6 +9601,32 @@ Reading gives the real one; writing declares it the consumer's, and
|
|
|
8600
9601
|
`default-value` seeds one this element owns. Same accessor pair as
|
|
8601
9602
|
`Pagination.page` and the calendar's `month`. */
|
|
8602
9603
|
value?: (HelixHeadlessPaginationSize["value"]) | undefined;
|
|
9604
|
+
/** Whether the control is disabled and cannot be used.
|
|
9605
|
+
|
|
9606
|
+
Reflected, because the styled tier selects on it, and mirrored to
|
|
9607
|
+
`aria-disabled` rather than removing the element from the accessibility
|
|
9608
|
+
tree, so a screen reader can still announce that the control exists.
|
|
9609
|
+
|
|
9610
|
+
The mirror itself is in `willUpdate` below, here rather than in each
|
|
9611
|
+
control, because here is where `disabled` is. */
|
|
9612
|
+
disabled?: (HelixHeadlessPaginationSize["disabled"]) | undefined;
|
|
9613
|
+
/** The name the control's value is submitted under.
|
|
9614
|
+
|
|
9615
|
+
**Reflected, and it is the exception to "reflect only what CSS selects
|
|
9616
|
+
on".** The platform builds a form's entry list from the `name` *content
|
|
9617
|
+
attribute*, not from the property, so a control named through the property
|
|
9618
|
+
submitted under no name at all and was silently dropped. Measured: two
|
|
9619
|
+
inputs in one form, one named by attribute and one by property, and the
|
|
9620
|
+
form carried a single entry.
|
|
9621
|
+
|
|
9622
|
+
Safe for a React consumer, which is what the rule is protecting: React
|
|
9623
|
+
renders a custom element's props as attributes on the server, so the name
|
|
9624
|
+
is already in the markup being hydrated and reflecting it writes what is
|
|
9625
|
+
there. It is only a change to the markup when a consumer assigns it
|
|
9626
|
+
imperatively later, and nothing is hydrating by then.
|
|
9627
|
+
|
|
9628
|
+
Here rather than on each control. */
|
|
9629
|
+
name?: (HelixHeadlessPaginationSize["name"]) | undefined;
|
|
8603
9630
|
};
|
|
8604
9631
|
|
|
8605
9632
|
export type HelixHeadlessPaginationSizeVueEvents = {
|
|
@@ -8663,10 +9690,18 @@ that lets a phone offer the code out of a message. Later cells stay `off`
|
|
|
8663
9690
|
for the reason in the class comment above, that six cells each offering
|
|
8664
9691
|
the same code is one offer made six times. */
|
|
8665
9692
|
autocomplete?: (HelixHeadlessPinInput["autocomplete"]) | undefined;
|
|
9693
|
+
/** Whether the form is submitted once the last box is filled, as Web
|
|
9694
|
+
Awesome's `autosubmit` and Radix's `autoSubmit`. Only for a code the field
|
|
9695
|
+
took: a refused last character submits nothing. */
|
|
9696
|
+
autosubmit?: (HelixHeadlessPinInput["autosubmit"]) | undefined;
|
|
8666
9697
|
/** Accessible name for one box, with `{index}` and `{length}` filled in. */
|
|
8667
9698
|
"cell-label"?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
8668
9699
|
/** Accessible name for one box, with `{index}` and `{length}` filled in. */
|
|
8669
9700
|
cellLabel?: (HelixHeadlessPinInput["cellLabel"]) | undefined;
|
|
9701
|
+
/** Separators drawn between the boxes: `#` or `*` for a box and anything
|
|
9702
|
+
else as it is written, so `###-###` draws a dash after the third. The
|
|
9703
|
+
separators are hidden from screen readers and are not part of the value. */
|
|
9704
|
+
format?: (HelixHeadlessPinInput["format"]) | undefined;
|
|
8670
9705
|
/** How many characters the code has. */
|
|
8671
9706
|
length?: (HelixHeadlessPinInput["length"]) | undefined;
|
|
8672
9707
|
/** Whether the characters are hidden, the way a password is. */
|
|
@@ -8808,8 +9843,17 @@ export type HelixHeadlessPopoverToggleElementEvent =
|
|
|
8808
9843
|
HelixHeadlessPopoverElementEvent<ToggleEvent>;
|
|
8809
9844
|
|
|
8810
9845
|
export type HelixHeadlessPopoverVueProps = {
|
|
8811
|
-
/**
|
|
9846
|
+
/** Draws a point on the panel's edge facing the trigger.
|
|
9847
|
+
|
|
9848
|
+
Off by default, which is the house style: a panel that opens from its
|
|
9849
|
+
trigger already reads as belonging to it. */
|
|
9850
|
+
arrow?: (HelixHeadlessPopover["arrow"]) | undefined;
|
|
9851
|
+
/** The panel's name, read by screen readers. Left at `Popover`, the first
|
|
9852
|
+
heading in the panel names it instead. */
|
|
8812
9853
|
label?: (HelixHeadlessPopover["label"]) | undefined;
|
|
9854
|
+
/** Keeps `Tab` inside the panel while it is open, and marks the panel
|
|
9855
|
+
`aria-modal`. A press outside and Escape still close it. */
|
|
9856
|
+
modal?: (HelixHeadlessPopover["modal"]) | undefined;
|
|
8813
9857
|
/** Space between the trigger and the panel, in pixels. */
|
|
8814
9858
|
offset?: (HelixHeadlessPopover["offset"]) | undefined;
|
|
8815
9859
|
/** Preferred side.
|
|
@@ -8858,7 +9902,10 @@ Not `Loader`, which is the other thing this could be. A loader says the
|
|
|
8858
9902
|
page is busy; a bar says a named piece of work is running, and keeps its
|
|
8859
9903
|
place in the layout when the answer arrives and it becomes determinate. */
|
|
8860
9904
|
indeterminate?: (HelixHeadlessProgress["indeterminate"]) | undefined;
|
|
8861
|
-
/** Accessible name for what is in progress.
|
|
9905
|
+
/** Accessible name for what is in progress.
|
|
9906
|
+
|
|
9907
|
+
A visible label in the `label` slot names it instead, with the words it
|
|
9908
|
+
shows, so the name and the label cannot disagree. */
|
|
8862
9909
|
label?: (HelixHeadlessProgress["label"]) | undefined;
|
|
8863
9910
|
/** The locale the percentage is written in, such as `fr` for `72 %`.
|
|
8864
9911
|
|
|
@@ -9003,6 +10050,22 @@ not touch, and React reads that as a hydration mismatch. The absent
|
|
|
9003
10050
|
attribute *is* the column, which the stylesheet reads as the base rule, so
|
|
9004
10051
|
only `horizontal` has to be named. */
|
|
9005
10052
|
orientation?: (HelixHeadlessRadioGroup["orientation"]) | undefined;
|
|
10053
|
+
/** Whether a reader can see and focus the answer and cannot change it. A
|
|
10054
|
+
read-only group still submits its value.
|
|
10055
|
+
|
|
10056
|
+
React Aria's `isReadOnly`. A press on a radio is refused. The arrow keys,
|
|
10057
|
+
Home and End move focus between the radios and choose nothing, so a reader
|
|
10058
|
+
can hear every choice, and Tab still reaches the answer. The group says
|
|
10059
|
+
`aria-readonly`. A script can still set `value`. */
|
|
10060
|
+
readonly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
|
|
10061
|
+
/** Whether a reader can see and focus the answer and cannot change it. A
|
|
10062
|
+
read-only group still submits its value.
|
|
10063
|
+
|
|
10064
|
+
React Aria's `isReadOnly`. A press on a radio is refused. The arrow keys,
|
|
10065
|
+
Home and End move focus between the radios and choose nothing, so a reader
|
|
10066
|
+
can hear every choice, and Tab still reaches the answer. The group says
|
|
10067
|
+
`aria-readonly`. A script can still set `value`. */
|
|
10068
|
+
readOnly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
|
|
9006
10069
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
9007
10070
|
"default-value"?: (HelixHeadlessRadioGroup["defaultValue"]) | undefined;
|
|
9008
10071
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -9173,8 +10236,15 @@ export type HelixHeadlessRatingElementEvent<E = Event> = TypedEvent<
|
|
|
9173
10236
|
/** `helix-before-change` event type */
|
|
9174
10237
|
export type HelixHeadlessRatingHelixBeforeChangeElementEvent =
|
|
9175
10238
|
HelixHeadlessRatingElementEvent<HelixBeforeChangeEvent>;
|
|
10239
|
+
/** `helix-clear` event type */
|
|
10240
|
+
export type HelixHeadlessRatingHelixClearElementEvent =
|
|
10241
|
+
HelixHeadlessRatingElementEvent<HelixClearEvent>;
|
|
9176
10242
|
|
|
9177
10243
|
export type HelixHeadlessRatingVueProps = {
|
|
10244
|
+
/** Whether a reader can take the rating back to unrated: by pressing the
|
|
10245
|
+
chosen score again, or with Backspace or Delete. Zag's rating group
|
|
10246
|
+
clears the same way. */
|
|
10247
|
+
clearable?: (HelixHeadlessRating["clearable"]) | undefined;
|
|
9178
10248
|
/** How many marks there are. */
|
|
9179
10249
|
max?: (HelixHeadlessRating["max"]) | undefined;
|
|
9180
10250
|
/** The lowest score that can be given. A cleared rating shows this score.
|
|
@@ -9361,6 +10431,8 @@ export type HelixHeadlessRatingVueEvents = {
|
|
|
9361
10431
|
change: HelixHeadlessRatingElementEvent;
|
|
9362
10432
|
/** The score is about to change. Cancelable: cancel it to keep the current score. */
|
|
9363
10433
|
"helix-before-change": HelixHeadlessRatingHelixBeforeChangeElementEvent;
|
|
10434
|
+
/** The rating went back to unrated, under `clearable`. Sent after `input` and `change`. */
|
|
10435
|
+
"helix-clear": HelixHeadlessRatingHelixClearElementEvent;
|
|
9364
10436
|
/** The score changed. */
|
|
9365
10437
|
input: HelixHeadlessRatingElementEvent;
|
|
9366
10438
|
};
|
|
@@ -9405,14 +10477,44 @@ writes them, whatever this says. */
|
|
|
9405
10477
|
|
|
9406
10478
|
export type HelixHeadlessScatterChartVueEvents = {};
|
|
9407
10479
|
|
|
10480
|
+
/** `HelixHeadlessScrollArea` component event */
|
|
10481
|
+
export type HelixHeadlessScrollAreaElementEvent<E = Event> = TypedEvent<
|
|
10482
|
+
HelixHeadlessScrollArea,
|
|
10483
|
+
E
|
|
10484
|
+
>;
|
|
10485
|
+
|
|
9408
10486
|
export type HelixHeadlessScrollAreaVueProps = {
|
|
10487
|
+
/** How long the scrollbars stay after the content stops moving, or the pointer
|
|
10488
|
+
leaves, in milliseconds. Read under `scrollbars="scroll"` and
|
|
10489
|
+
`scrollbars="hover"`. */
|
|
10490
|
+
"hide-delay"?: (HelixHeadlessScrollArea["hideDelay"] | `${number}`) | undefined;
|
|
10491
|
+
/** How long the scrollbars stay after the content stops moving, or the pointer
|
|
10492
|
+
leaves, in milliseconds. Read under `scrollbars="scroll"` and
|
|
10493
|
+
`scrollbars="hover"`. */
|
|
10494
|
+
hideDelay?: (HelixHeadlessScrollArea["hideDelay"]) | undefined;
|
|
9409
10495
|
/** The region's name, read by screen readers.
|
|
9410
10496
|
|
|
9411
10497
|
Without one there is no region: see the note on the class. */
|
|
9412
10498
|
label?: (HelixHeadlessScrollArea["label"]) | undefined;
|
|
10499
|
+
/** Draws scrollbars of the component's own in place of the browser's, and
|
|
10500
|
+
says when they show.
|
|
10501
|
+
|
|
10502
|
+
- `auto`: on each axis that has content past it.
|
|
10503
|
+
- `always`: on each axis that can scroll, whether or not it has anything to
|
|
10504
|
+
scroll, so the scrollbar is there before the content grows.
|
|
10505
|
+
- `scroll`: while the content is moving, and for `hide-delay` after.
|
|
10506
|
+
- `hover`: as `scroll`, and while the pointer is over the scroll area.
|
|
10507
|
+
|
|
10508
|
+
Absent keeps the browser's scrollbars. */
|
|
10509
|
+
scrollbars?: (HelixHeadlessScrollArea["scrollbars"]) | undefined;
|
|
9413
10510
|
};
|
|
9414
10511
|
|
|
9415
|
-
export type HelixHeadlessScrollAreaVueEvents = {
|
|
10512
|
+
export type HelixHeadlessScrollAreaVueEvents = {
|
|
10513
|
+
/** The content scrolled. Sent from the host, because the viewport's own does not leave the shadow root. Does not bubble. */
|
|
10514
|
+
scroll: HelixHeadlessScrollAreaElementEvent;
|
|
10515
|
+
/** The content stopped scrolling. Sent from the host, as `scroll` is. Does not bubble. */
|
|
10516
|
+
scrollend: HelixHeadlessScrollAreaElementEvent;
|
|
10517
|
+
};
|
|
9416
10518
|
|
|
9417
10519
|
/** `HelixHeadlessSelect` component event */
|
|
9418
10520
|
export type HelixHeadlessSelectElementEvent<E = Event> = TypedEvent<
|
|
@@ -9543,6 +10645,15 @@ imperatively later, and nothing is hydrating by then.
|
|
|
9543
10645
|
|
|
9544
10646
|
Here rather than on each control. */
|
|
9545
10647
|
name?: (HelixHeadlessSelect["name"]) | undefined;
|
|
10648
|
+
/** What the trigger shows for the chosen options: a function given them, in
|
|
10649
|
+
the order they appear, that returns text, an element or a Lit template.
|
|
10650
|
+
|
|
10651
|
+
For a trigger that shows more than the words, an avatar beside a name or a
|
|
10652
|
+
count of a long set, as React Aria's `SelectValue` takes children. The
|
|
10653
|
+
trigger is named by what this draws, so keep the words in it. Nothing
|
|
10654
|
+
chosen still shows `placeholder`. A property only, there being no way to
|
|
10655
|
+
write a function in markup. */
|
|
10656
|
+
valueContent?: (HelixHeadlessSelect["valueContent"]) | undefined;
|
|
9546
10657
|
/** Which option is chosen, as an index, or `-1` where none is.
|
|
9547
10658
|
|
|
9548
10659
|
Read off the listbox this renders, which owns the options and is where the
|
|
@@ -9575,6 +10686,12 @@ profile".
|
|
|
9575
10686
|
|
|
9576
10687
|
Absent hides the placeholder from screen readers. */
|
|
9577
10688
|
label?: (HelixHeadlessSkeleton["label"]) | undefined;
|
|
10689
|
+
/** Whether the content inside is still loading, which keeps it inert and
|
|
10690
|
+
draws the placeholder over it.
|
|
10691
|
+
|
|
10692
|
+
Absent shows the content. An empty skeleton is a placeholder whatever
|
|
10693
|
+
this says. Reflected, because the styled tier hides the content on it. */
|
|
10694
|
+
loading?: (HelixHeadlessSkeleton["loading"]) | undefined;
|
|
9578
10695
|
};
|
|
9579
10696
|
|
|
9580
10697
|
export type HelixHeadlessSkeletonVueEvents = {};
|
|
@@ -9606,6 +10723,25 @@ export type HelixHeadlessSliderHelixBeforeChangeElementEvent =
|
|
|
9606
10723
|
HelixHeadlessSliderElementEvent<HelixBeforeChangeEvent>;
|
|
9607
10724
|
|
|
9608
10725
|
export type HelixHeadlessSliderVueProps = {
|
|
10726
|
+
/** `Intl.NumberFormat` options the value is written with: a currency, a
|
|
10727
|
+
percent, a unit, or a number of decimals. Written as JSON in the
|
|
10728
|
+
attribute.
|
|
10729
|
+
|
|
10730
|
+
```html
|
|
10731
|
+
<helix-slider format-options='{"style":"currency","currency":"USD"}'></helix-slider>
|
|
10732
|
+
``` */
|
|
10733
|
+
"format-options"?: (HelixHeadlessSlider["formatOptions"]) | undefined;
|
|
10734
|
+
/** `Intl.NumberFormat` options the value is written with: a currency, a
|
|
10735
|
+
percent, a unit, or a number of decimals. Written as JSON in the
|
|
10736
|
+
attribute.
|
|
10737
|
+
|
|
10738
|
+
```html
|
|
10739
|
+
<helix-slider format-options='{"style":"currency","currency":"USD"}'></helix-slider>
|
|
10740
|
+
``` */
|
|
10741
|
+
formatOptions?: (HelixHeadlessSlider["formatOptions"]) | undefined;
|
|
10742
|
+
/** The locale `format-options` writes the value in, such as `de-DE`. Empty is
|
|
10743
|
+
the reader's own. */
|
|
10744
|
+
locale?: (HelixHeadlessSlider["locale"]) | undefined;
|
|
9609
10745
|
/** Shows the value at each mark. */
|
|
9610
10746
|
"marker-labels"?: (HelixHeadlessSlider["markerLabels"]) | undefined;
|
|
9611
10747
|
/** Shows the value at each mark. */
|
|
@@ -9648,6 +10784,12 @@ property, like every other word a control speaks. */
|
|
|
9648
10784
|
"minimum-label"?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
|
|
9649
10785
|
/** The name of a range's lower thumb, read after the slider's label. */
|
|
9650
10786
|
minimumLabel?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
|
|
10787
|
+
/** How many steps a range's two thumbs stay apart, as Zag's
|
|
10788
|
+
`minStepsBetweenThumbs`. A thumb pushed closer stops there. */
|
|
10789
|
+
"min-steps-between-thumbs"?: (HelixHeadlessSlider["minStepsBetweenThumbs"] | `${number}`) | undefined;
|
|
10790
|
+
/** How many steps a range's two thumbs stay apart, as Zag's
|
|
10791
|
+
`minStepsBetweenThumbs`. A thumb pushed closer stops there. */
|
|
10792
|
+
minStepsBetweenThumbs?: (HelixHeadlessSlider["minStepsBetweenThumbs"]) | undefined;
|
|
9651
10793
|
/** The direction the track runs. `vertical` stands it on end.
|
|
9652
10794
|
|
|
9653
10795
|
For a level rather than a quantity: a fader, a channel, anything a reader
|
|
@@ -9744,6 +10886,10 @@ imperatively later, and nothing is hydrating by then.
|
|
|
9744
10886
|
|
|
9745
10887
|
Here rather than on each control. */
|
|
9746
10888
|
name?: (HelixHeadlessSlider["name"]) | undefined;
|
|
10889
|
+
/** Writes a value as text, in place of `format-options`: words for a scale,
|
|
10890
|
+
or anything `Intl.NumberFormat` cannot say. A property, since a function
|
|
10891
|
+
cannot be written in an attribute. */
|
|
10892
|
+
formatter?: (HelixHeadlessSlider["formatter"]) | undefined;
|
|
9747
10893
|
};
|
|
9748
10894
|
|
|
9749
10895
|
export type HelixHeadlessSliderVueEvents = {
|
|
@@ -10045,6 +11191,15 @@ Reading gives where it is; writing declares it the consumer's, and
|
|
|
10045
11191
|
`default-position` seeds one this element owns. The same accessor pair
|
|
10046
11192
|
`Pagination.page` and the calendar's `month` carry. */
|
|
10047
11193
|
position?: (HelixHeadlessSplitter["position"]) | undefined;
|
|
11194
|
+
/** Where a dragged divider snaps, comma separated, as Web Awesome's split
|
|
11195
|
+
panel does: a bare number is a percentage and a length such as `240px` is
|
|
11196
|
+
measured along the splitter, so `snap="25, 50, 75"` or `snap="240px, 50"`.
|
|
11197
|
+
The arrow keys move by `step` and do not snap. */
|
|
11198
|
+
snap?: (HelixHeadlessSplitter["snap"]) | undefined;
|
|
11199
|
+
/** How close a drag has to come to a snap point to land on it, in pixels. */
|
|
11200
|
+
"snap-threshold"?: (HelixHeadlessSplitter["snapThreshold"] | `${number}`) | undefined;
|
|
11201
|
+
/** How close a drag has to come to a snap point to land on it, in pixels. */
|
|
11202
|
+
snapThreshold?: (HelixHeadlessSplitter["snapThreshold"]) | undefined;
|
|
10048
11203
|
/** How far one arrow key press moves the divider, as a percentage. */
|
|
10049
11204
|
step?: (HelixHeadlessSplitter["step"]) | undefined;
|
|
10050
11205
|
};
|
|
@@ -10120,6 +11275,9 @@ export type HelixHeadlessStepsVueProps = {
|
|
|
10120
11275
|
A list of stages is a landmark a reader arrives at out of order, so it
|
|
10121
11276
|
needs a name of its own rather than borrowing the heading above it. */
|
|
10122
11277
|
label?: (HelixHeadlessSteps["label"]) | undefined;
|
|
11278
|
+
/** Whether a reader has to finish each stage, or pass an `optional` one,
|
|
11279
|
+
before going on to the next. */
|
|
11280
|
+
linear?: (HelixHeadlessSteps["linear"]) | undefined;
|
|
10123
11281
|
/** Which way the steps run.
|
|
10124
11282
|
|
|
10125
11283
|
Absent is a row, which is what a form header wants, with each name under
|
|
@@ -10183,10 +11341,19 @@ export type HelixHeadlessStepHelixSelectElementEvent =
|
|
|
10183
11341
|
export type HelixHeadlessStepVueProps = {
|
|
10184
11342
|
/** Whether this stage is finished. */
|
|
10185
11343
|
complete?: (HelixHeadlessStep["complete"]) | undefined;
|
|
11344
|
+
/** The words that tell a screen reader the stage is finished. Translate it
|
|
11345
|
+
with the page. */
|
|
11346
|
+
"complete-label"?: (HelixHeadlessStep["completeLabel"]) | undefined;
|
|
11347
|
+
/** The words that tell a screen reader the stage is finished. Translate it
|
|
11348
|
+
with the page. */
|
|
11349
|
+
completeLabel?: (HelixHeadlessStep["completeLabel"]) | undefined;
|
|
10186
11350
|
/** Whether this is the current stage. */
|
|
10187
11351
|
current?: (HelixHeadlessStep["current"]) | undefined;
|
|
10188
11352
|
/** Whether the stage is disabled, so the user cannot go to it. */
|
|
10189
11353
|
disabled?: (HelixHeadlessStep["disabled"]) | undefined;
|
|
11354
|
+
/** Whether a reader may pass the stage without finishing it, in a sequence
|
|
11355
|
+
with `linear`. Ark UI's skippable step. */
|
|
11356
|
+
optional?: (HelixHeadlessStep["optional"]) | undefined;
|
|
10190
11357
|
/** The value the step sends in `helix-select`. */
|
|
10191
11358
|
value?: (HelixHeadlessStep["value"]) | undefined;
|
|
10192
11359
|
};
|
|
@@ -10221,6 +11388,28 @@ stylesheets. */
|
|
|
10221
11388
|
"default-checked"?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
10222
11389
|
/** Whether the control starts checked. A form reset returns it to this state. */
|
|
10223
11390
|
defaultChecked?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
|
|
11391
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
11392
|
+
read-only control still submits its value.
|
|
11393
|
+
|
|
11394
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
11395
|
+
the press is refused at the inner control, which keeps its box as it
|
|
11396
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
11397
|
+
`checked`, as it can set the value of a read-only text field.
|
|
11398
|
+
|
|
11399
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
11400
|
+
text fields. */
|
|
11401
|
+
readonly?: (HelixHeadlessSwitch["readOnly"]) | undefined;
|
|
11402
|
+
/** Whether a reader can see and focus the control and cannot change it. A
|
|
11403
|
+
read-only control still submits its value.
|
|
11404
|
+
|
|
11405
|
+
React Aria's `isReadOnly`. A native checkbox has no read-only state, so
|
|
11406
|
+
the press is refused at the inner control, which keeps its box as it
|
|
11407
|
+
was, and the control says `aria-readonly`. A script can still set
|
|
11408
|
+
`checked`, as it can set the value of a read-only text field.
|
|
11409
|
+
|
|
11410
|
+
The attribute is `readonly`, which is the platform's spelling for the
|
|
11411
|
+
text fields. */
|
|
11412
|
+
readOnly?: (HelixHeadlessSwitch["readOnly"]) | undefined;
|
|
10224
11413
|
/** */
|
|
10225
11414
|
"aria-label"?: unknown;
|
|
10226
11415
|
/** The validation message shown under the control. It replaces the
|
|
@@ -10304,6 +11493,9 @@ export type HelixHeadlessTableColumnElementEvent<E = Event> = TypedEvent<
|
|
|
10304
11493
|
/** `helix-before-resize` event type */
|
|
10305
11494
|
export type HelixHeadlessTableColumnHelixBeforeResizeElementEvent =
|
|
10306
11495
|
HelixHeadlessTableColumnElementEvent<HelixBeforeResizeEvent>;
|
|
11496
|
+
/** `helix-resized` event type */
|
|
11497
|
+
export type HelixHeadlessTableColumnHelixResizedElementEvent =
|
|
11498
|
+
HelixHeadlessTableColumnElementEvent<HelixResizedEvent>;
|
|
10307
11499
|
|
|
10308
11500
|
export type HelixHeadlessTableColumnVueProps = {
|
|
10309
11501
|
/** The key this column reads out of a row.
|
|
@@ -10345,6 +11537,22 @@ replaced with the heading text. */
|
|
|
10345
11537
|
/** The accessible name of the separator that resizes the column. `{name}` is
|
|
10346
11538
|
replaced with the heading text. */
|
|
10347
11539
|
resizeLabel?: (HelixHeadlessTableColumn["resizeLabel"]) | undefined;
|
|
11540
|
+
/** Makes this column's cells the headers of their rows, in `DataTable`.
|
|
11541
|
+
|
|
11542
|
+
A screen reader moving along a row or down a column names the row by its
|
|
11543
|
+
row header, so the cell that identifies a row, a file's name say, is the
|
|
11544
|
+
one to mark. Where no column sets it, `DataTable` makes the first column
|
|
11545
|
+
with a `field` the row header. A `Table`'s cells are your markup, so there
|
|
11546
|
+
a cell is a row header through its own `header` attribute. */
|
|
11547
|
+
"row-header"?: (HelixHeadlessTableColumn["rowHeader"]) | undefined;
|
|
11548
|
+
/** Makes this column's cells the headers of their rows, in `DataTable`.
|
|
11549
|
+
|
|
11550
|
+
A screen reader moving along a row or down a column names the row by its
|
|
11551
|
+
row header, so the cell that identifies a row, a file's name say, is the
|
|
11552
|
+
one to mark. Where no column sets it, `DataTable` makes the first column
|
|
11553
|
+
with a `field` the row header. A `Table`'s cells are your markup, so there
|
|
11554
|
+
a cell is a row header through its own `header` attribute. */
|
|
11555
|
+
rowHeader?: (HelixHeadlessTableColumn["rowHeader"]) | undefined;
|
|
10348
11556
|
/** Whether the table can be sorted by this column.
|
|
10349
11557
|
|
|
10350
11558
|
Ignored without a `field`, and silently: a column with nothing to sort by
|
|
@@ -10472,6 +11680,8 @@ correct default: the raw value is what an API sorted by. */
|
|
|
10472
11680
|
export type HelixHeadlessTableColumnVueEvents = {
|
|
10473
11681
|
/** The column is about to be resized, with the requested width. Cancelable: cancel it to keep the current width. */
|
|
10474
11682
|
"helix-before-resize": HelixHeadlessTableColumnHelixBeforeResizeElementEvent;
|
|
11683
|
+
/** Fired after the column is resized, with the new width. */
|
|
11684
|
+
"helix-resized": HelixHeadlessTableColumnHelixResizedElementEvent;
|
|
10475
11685
|
};
|
|
10476
11686
|
|
|
10477
11687
|
/** `HelixHeadlessTable` component event */
|
|
@@ -10479,9 +11689,18 @@ export type HelixHeadlessTableElementEvent<E = Event> = TypedEvent<
|
|
|
10479
11689
|
HelixHeadlessTable,
|
|
10480
11690
|
E
|
|
10481
11691
|
>;
|
|
11692
|
+
/** `helix-select` event type */
|
|
11693
|
+
export type HelixHeadlessTableHelixSelectElementEvent =
|
|
11694
|
+
HelixHeadlessTableElementEvent<HelixSelectEvent>;
|
|
11695
|
+
/** `helix-selected` event type */
|
|
11696
|
+
export type HelixHeadlessTableHelixSelectedElementEvent =
|
|
11697
|
+
HelixHeadlessTableElementEvent<HelixSelectedEvent>;
|
|
10482
11698
|
/** `helix-sort` event type */
|
|
10483
11699
|
export type HelixHeadlessTableHelixSortElementEvent =
|
|
10484
11700
|
HelixHeadlessTableElementEvent<HelixSortEvent>;
|
|
11701
|
+
/** `helix-sorted` event type */
|
|
11702
|
+
export type HelixHeadlessTableHelixSortedElementEvent =
|
|
11703
|
+
HelixHeadlessTableElementEvent<HelixSortedEvent>;
|
|
10485
11704
|
|
|
10486
11705
|
export type HelixHeadlessTableVueProps = {
|
|
10487
11706
|
/** The word for an ascending sort, in `sorted-label`. */
|
|
@@ -10517,6 +11736,12 @@ and a list here would be a second way to say what that says. This table's
|
|
|
10517
11736
|
cells are markup, and a table written as rows of cells with no column
|
|
10518
11737
|
declared in it has nowhere else to be sized from. */
|
|
10519
11738
|
columns?: (HelixHeadlessTable["columns"]) | undefined;
|
|
11739
|
+
/** The keys selected at the start, separated by commas. Used until `selected`
|
|
11740
|
+
is set. */
|
|
11741
|
+
"default-selected"?: (HelixHeadlessTable["defaultSelected"]) | undefined;
|
|
11742
|
+
/** The keys selected at the start, separated by commas. Used until `selected`
|
|
11743
|
+
is set. */
|
|
11744
|
+
defaultSelected?: (HelixHeadlessTable["defaultSelected"]) | undefined;
|
|
10520
11745
|
/** The starting sort order, used until `sort` is set. */
|
|
10521
11746
|
"default-sort"?: (HelixHeadlessTable["defaultSort"]) | undefined;
|
|
10522
11747
|
/** The starting sort order, used until `sort` is set. */
|
|
@@ -10530,6 +11755,31 @@ declared in it has nowhere else to be sized from. */
|
|
|
10530
11755
|
An `aria-label` or `aria-labelledby` on the host names the table too, and
|
|
10531
11756
|
wins over this. */
|
|
10532
11757
|
label?: (HelixHeadlessTable["label"]) | undefined;
|
|
11758
|
+
/** Adds a column of checkboxes for selecting rows. Each row is known by its
|
|
11759
|
+
`value`, and by its place among the rows as written where it has none. */
|
|
11760
|
+
selectable?: (HelixHeadlessTable["selectable"]) | undefined;
|
|
11761
|
+
/** The name of the checkbox in the heading that selects every row. */
|
|
11762
|
+
"select-all-label"?: (HelixHeadlessTable["selectAllLabel"]) | undefined;
|
|
11763
|
+
/** The name of the checkbox in the heading that selects every row. */
|
|
11764
|
+
selectAllLabel?: (HelixHeadlessTable["selectAllLabel"]) | undefined;
|
|
11765
|
+
/** The keys of the selected rows, separated by commas.
|
|
11766
|
+
|
|
11767
|
+
A reader's press fires `helix-select` first, and refusing it leaves the
|
|
11768
|
+
selection as it was. `default-selected` seeds a selection this element
|
|
11769
|
+
then owns. */
|
|
11770
|
+
selected?: (HelixHeadlessTable["selected"]) | undefined;
|
|
11771
|
+
/** What screen readers hear when the chosen rows change. `{count}` is how many
|
|
11772
|
+
rows are chosen. */
|
|
11773
|
+
"selected-label"?: (HelixHeadlessTable["selectedLabel"]) | undefined;
|
|
11774
|
+
/** What screen readers hear when the chosen rows change. `{count}` is how many
|
|
11775
|
+
rows are chosen. */
|
|
11776
|
+
selectedLabel?: (HelixHeadlessTable["selectedLabel"]) | undefined;
|
|
11777
|
+
/** The name of a row's checkbox. `{row}` is replaced with the words of the
|
|
11778
|
+
row's first cell. */
|
|
11779
|
+
"select-row-label"?: (HelixHeadlessTable["selectRowLabel"]) | undefined;
|
|
11780
|
+
/** The name of a row's checkbox. `{row}` is replaced with the words of the
|
|
11781
|
+
row's first cell. */
|
|
11782
|
+
selectRowLabel?: (HelixHeadlessTable["selectRowLabel"]) | undefined;
|
|
10533
11783
|
/** The sort order, as `field:direction`, where `field` is a sortable column's
|
|
10534
11784
|
`field`.
|
|
10535
11785
|
|
|
@@ -10565,11 +11815,21 @@ say that without the component knowing what a row looks like. */
|
|
|
10565
11815
|
};
|
|
10566
11816
|
|
|
10567
11817
|
export type HelixHeadlessTableVueEvents = {
|
|
11818
|
+
/** The selection is about to change. The event carries every selected key, separated by commas. Cancelable: cancel it to keep the current selection. */
|
|
11819
|
+
"helix-select": HelixHeadlessTableHelixSelectElementEvent;
|
|
11820
|
+
/** Fired after the selection changes, with every selected key, separated by commas. */
|
|
11821
|
+
"helix-selected": HelixHeadlessTableHelixSelectedElementEvent;
|
|
10568
11822
|
/** A different sort order was requested, as `field:direction`, or empty for the order the rows were written in. Cancelable: cancel it to keep the current order. */
|
|
10569
11823
|
"helix-sort": HelixHeadlessTableHelixSortElementEvent;
|
|
11824
|
+
/** Fired after the sort order changes, with the new order. */
|
|
11825
|
+
"helix-sorted": HelixHeadlessTableHelixSortedElementEvent;
|
|
10570
11826
|
};
|
|
10571
11827
|
|
|
10572
|
-
export type HelixHeadlessTableRowVueProps = {
|
|
11828
|
+
export type HelixHeadlessTableRowVueProps = {
|
|
11829
|
+
/** The key the table's `selected` lists this row by. Left empty, the row is
|
|
11830
|
+
known by its place among the rows as written. */
|
|
11831
|
+
value?: (HelixHeadlessTableRow["value"]) | undefined;
|
|
11832
|
+
};
|
|
10573
11833
|
|
|
10574
11834
|
export type HelixHeadlessTableRowVueEvents = {};
|
|
10575
11835
|
|
|
@@ -10585,10 +11845,9 @@ because it is coordination between elements rather than anything a consumer
|
|
|
10585
11845
|
writes: the tab already says it.
|
|
10586
11846
|
|
|
10587
11847
|
A string and not a reference: an IDREF resolves only in the tree it is
|
|
10588
|
-
written in, and
|
|
10589
|
-
|
|
10590
|
-
|
|
10591
|
-
anyway. */
|
|
11848
|
+
written in, and the tab's control is inside the tab's shadow root, which no
|
|
11849
|
+
reference from the light DOM can reach. `aria-label` on a `tabpanel` is how
|
|
11850
|
+
the pattern names one anyway. */
|
|
10592
11851
|
label?: (HelixHeadlessTabPanel["label"]) | undefined;
|
|
10593
11852
|
};
|
|
10594
11853
|
|
|
@@ -10622,6 +11881,11 @@ Automatic is the default because showing a panel is usually cheap. Set this
|
|
|
10622
11881
|
where it is not, so a reader arrowing past four tabs does not load four
|
|
10623
11882
|
panels on the way. */
|
|
10624
11883
|
manual?: (HelixHeadlessTabs["manual"]) | undefined;
|
|
11884
|
+
/** The direction the tabs run. `vertical` sets them in a column beside the
|
|
11885
|
+
panels and tells a screen reader the list is vertical.
|
|
11886
|
+
|
|
11887
|
+
Optional, so the resting row writes no attribute onto the host. */
|
|
11888
|
+
orientation?: (HelixHeadlessTabs["orientation"]) | undefined;
|
|
10625
11889
|
/** How the row of tabs is drawn.
|
|
10626
11890
|
|
|
10627
11891
|
Unset is a raised pill on the selected tab with nothing behind the row,
|
|
@@ -10683,6 +11947,13 @@ export type HelixHeadlessTabHelixSelectElementEvent =
|
|
|
10683
11947
|
HelixHeadlessTabElementEvent<HelixSelectEvent>;
|
|
10684
11948
|
|
|
10685
11949
|
export type HelixHeadlessTabVueProps = {
|
|
11950
|
+
/** The URL the tab links to. Setting it renders the tab as a link, for a set
|
|
11951
|
+
of tabs that are pages of a site. */
|
|
11952
|
+
href?: (HelixHeadlessTab["href"]) | undefined;
|
|
11953
|
+
/** The link's `rel`, for a tab with an `href`. */
|
|
11954
|
+
rel?: (HelixHeadlessTab["rel"]) | undefined;
|
|
11955
|
+
/** Where the link opens, such as `_blank`, for a tab with an `href`. */
|
|
11956
|
+
target?: (HelixHeadlessTab["target"]) | undefined;
|
|
10686
11957
|
/** Whether the item is disabled and cannot be chosen. */
|
|
10687
11958
|
disabled?: (HelixHeadlessTab["disabled"]) | undefined;
|
|
10688
11959
|
/** Whether the item is selected.
|
|
@@ -10701,6 +11972,47 @@ export type HelixHeadlessTabVueEvents = {
|
|
|
10701
11972
|
"helix-select": HelixHeadlessTabHelixSelectElementEvent;
|
|
10702
11973
|
};
|
|
10703
11974
|
|
|
11975
|
+
/** `HelixHeadlessTagGroup` component event */
|
|
11976
|
+
export type HelixHeadlessTagGroupElementEvent<E = Event> = TypedEvent<
|
|
11977
|
+
HelixHeadlessTagGroup,
|
|
11978
|
+
E
|
|
11979
|
+
>;
|
|
11980
|
+
/** `helix-before-change` event type */
|
|
11981
|
+
export type HelixHeadlessTagGroupHelixBeforeChangeElementEvent =
|
|
11982
|
+
HelixHeadlessTagGroupElementEvent<HelixBeforeChangeEvent>;
|
|
11983
|
+
/** `helix-dismiss` event type */
|
|
11984
|
+
export type HelixHeadlessTagGroupHelixDismissElementEvent =
|
|
11985
|
+
HelixHeadlessTagGroupElementEvent<HelixDismissEvent>;
|
|
11986
|
+
|
|
11987
|
+
export type HelixHeadlessTagGroupVueProps = {
|
|
11988
|
+
/** The name of the set, such as "Filters", which a screen reader announces
|
|
11989
|
+
before its tags. */
|
|
11990
|
+
label?: (HelixHeadlessTagGroup["label"]) | undefined;
|
|
11991
|
+
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
11992
|
+
|
|
11993
|
+
Absent selects nothing, and the tags carry no selected state at all. */
|
|
11994
|
+
"selection-mode"?: (HelixHeadlessTagGroup["selectionMode"]) | undefined;
|
|
11995
|
+
/** How many tags a reader can select: `single`, `multiple`, or none.
|
|
11996
|
+
|
|
11997
|
+
Absent selects nothing, and the tags carry no selected state at all. */
|
|
11998
|
+
selectionMode?: (HelixHeadlessTagGroup["selectionMode"]) | undefined;
|
|
11999
|
+
/** The selected tags' values, separated by commas, since a value may hold a
|
|
12000
|
+
space.
|
|
12001
|
+
|
|
12002
|
+
Set it to start with tags selected. A tag's value is its `value`, or its
|
|
12003
|
+
words where it has none. */
|
|
12004
|
+
value?: (HelixHeadlessTagGroup["value"]) | undefined;
|
|
12005
|
+
};
|
|
12006
|
+
|
|
12007
|
+
export type HelixHeadlessTagGroupVueEvents = {
|
|
12008
|
+
/** Fired once a press has changed which tags are selected. */
|
|
12009
|
+
change: HelixHeadlessTagGroupElementEvent;
|
|
12010
|
+
/** Fired before a press changes which tags are selected, with the `value` it would leave. Cancelable. */
|
|
12011
|
+
"helix-before-change": HelixHeadlessTagGroupHelixBeforeChangeElementEvent;
|
|
12012
|
+
/** A tag's remove button was pressed, or Delete or Backspace on the focused tag. Bubbles from that tag, which is its `target`; remove the tag in response. Cancelable. */
|
|
12013
|
+
"helix-dismiss": HelixHeadlessTagGroupHelixDismissElementEvent;
|
|
12014
|
+
};
|
|
12015
|
+
|
|
10704
12016
|
/** `HelixHeadlessTag` component event */
|
|
10705
12017
|
export type HelixHeadlessTagElementEvent<E = Event> = TypedEvent<
|
|
10706
12018
|
HelixHeadlessTag,
|
|
@@ -10711,6 +12023,16 @@ export type HelixHeadlessTagHelixDismissElementEvent =
|
|
|
10711
12023
|
HelixHeadlessTagElementEvent<HelixDismissEvent>;
|
|
10712
12024
|
|
|
10713
12025
|
export type HelixHeadlessTagVueProps = {
|
|
12026
|
+
/** Takes the tag out of reach: its link and its remove button stop
|
|
12027
|
+
answering, and in a `Tag.Group` the arrow keys pass over it and it cannot
|
|
12028
|
+
be selected or removed. */
|
|
12029
|
+
disabled?: (HelixHeadlessTag["disabled"]) | undefined;
|
|
12030
|
+
/** Makes the label a link to this address. */
|
|
12031
|
+
href?: (HelixHeadlessTag["href"]) | undefined;
|
|
12032
|
+
/** What the tag stands for in its group's `value`.
|
|
12033
|
+
|
|
12034
|
+
Absent is the tag's own words, its category first. */
|
|
12035
|
+
value?: (HelixHeadlessTag["value"]) | undefined;
|
|
10714
12036
|
/** Whether the element shows a control that dismisses it. */
|
|
10715
12037
|
dismissible?: (HelixHeadlessTag["dismissible"]) | undefined;
|
|
10716
12038
|
/** The dismiss control's label, read by screen readers.
|
|
@@ -10727,6 +12049,18 @@ derive one rather than dash-casing it, so this would otherwise be
|
|
|
10727
12049
|
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
10728
12050
|
would catch. */
|
|
10729
12051
|
dismissLabel?: (HelixHeadlessTag["dismissLabel"]) | undefined;
|
|
12052
|
+
/** Whether the tag holds its group's tab stop.
|
|
12053
|
+
|
|
12054
|
+
Written by `Tag.Group` on every tag it holds, and unset outside one, which
|
|
12055
|
+
is how a tag knows it is a row. No attribute: it is coordination between
|
|
12056
|
+
elements, the same shape `Toggle.focusable` has. */
|
|
12057
|
+
focusable?: (HelixHeadlessTag["focusable"]) | undefined;
|
|
12058
|
+
/** Whether the tag is selected, in a `Tag.Group` that selects.
|
|
12059
|
+
|
|
12060
|
+
Written by the group from its own `value`, and unset where nothing can be
|
|
12061
|
+
selected, which is what keeps `aria-selected` off a set that does not
|
|
12062
|
+
select. */
|
|
12063
|
+
selected?: (HelixHeadlessTag["selected"]) | undefined;
|
|
10730
12064
|
};
|
|
10731
12065
|
|
|
10732
12066
|
export type HelixHeadlessTagVueEvents = {
|
|
@@ -10785,6 +12119,12 @@ element sends two entries, and that is what this does. */
|
|
|
10785
12119
|
maxlength?: (HelixHeadlessTextarea["maxLength"] | `${number}`) | undefined;
|
|
10786
12120
|
/** The most characters the value can have. */
|
|
10787
12121
|
maxLength?: (HelixHeadlessTextarea["maxLength"]) | undefined;
|
|
12122
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
12123
|
+
it grows with all of its text. */
|
|
12124
|
+
"max-rows"?: (HelixHeadlessTextarea["maxRows"] | `${number}`) | undefined;
|
|
12125
|
+
/** How many lines an `auto-grow` field grows to before it scrolls. Absent,
|
|
12126
|
+
it grows with all of its text. */
|
|
12127
|
+
maxRows?: (HelixHeadlessTextarea["maxRows"]) | undefined;
|
|
10788
12128
|
/** The fewest characters the value can have.
|
|
10789
12129
|
|
|
10790
12130
|
Forwarded to the real `<textarea>` rather than checked here, which is what
|
|
@@ -10940,6 +12280,16 @@ a typed time, which is then invalid. */
|
|
|
10940
12280
|
Handed to the list, which offers them as unavailable, and checked against
|
|
10941
12281
|
a typed time, which is then invalid. */
|
|
10942
12282
|
disableTimes?: (HelixHeadlessTimeInput["disableTimes"]) | undefined;
|
|
12283
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12284
|
+
meridiem, `h23` for twenty-four. Absent is the locale's own.
|
|
12285
|
+
|
|
12286
|
+
Handed to the list. The value is `HH:mm` on twenty-four hours either way. */
|
|
12287
|
+
"hour-cycle"?: (HelixHeadlessTimeInput["hourCycle"]) | undefined;
|
|
12288
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12289
|
+
meridiem, `h23` for twenty-four. Absent is the locale's own.
|
|
12290
|
+
|
|
12291
|
+
Handed to the list. The value is `HH:mm` on twenty-four hours either way. */
|
|
12292
|
+
hourCycle?: (HelixHeadlessTimeInput["hourCycle"]) | undefined;
|
|
10943
12293
|
/** Language tag the times are written in.
|
|
10944
12294
|
|
|
10945
12295
|
Absent uses the runtime's own. */
|
|
@@ -10991,7 +12341,12 @@ removes rather than as "Remove" said once per time. */
|
|
|
10991
12341
|
**The name goes in**, so a row of them is heard as which one each
|
|
10992
12342
|
removes rather than as "Remove" said once per time. */
|
|
10993
12343
|
removeLabel?: (HelixHeadlessTimeInput["removeLabel"]) | undefined;
|
|
10994
|
-
/**
|
|
12344
|
+
/** Whether times carry their seconds: the value is `HH:mm:ss`, a typed time
|
|
12345
|
+
may give them, the field writes them, and the list's `step` counts seconds.
|
|
12346
|
+
See Time Picker's `seconds`. */
|
|
12347
|
+
seconds?: (HelixHeadlessTimeInput["seconds"]) | undefined;
|
|
12348
|
+
/** How far apart the offered times are, in minutes, or in seconds with
|
|
12349
|
+
`seconds`. */
|
|
10995
12350
|
step?: (HelixHeadlessTimeInput["step"]) | undefined;
|
|
10996
12351
|
/** Whether the field shows the time in the local style or as the value
|
|
10997
12352
|
itself.
|
|
@@ -11032,6 +12387,20 @@ not touch, and React reads that as a hydration mismatch. The absent
|
|
|
11032
12387
|
attribute *is* the list, which the stylesheet reads as the base rule, so
|
|
11033
12388
|
only the departure has to be named. */
|
|
11034
12389
|
variant?: (HelixHeadlessTimeInput["variant"]) | undefined;
|
|
12390
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
12391
|
+
sighted reader sees as dashes. */
|
|
12392
|
+
"empty-segment-label"?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
|
|
12393
|
+
/** What a screen reader hears for a segment with nothing in it, which a
|
|
12394
|
+
sighted reader sees as dashes. */
|
|
12395
|
+
emptySegmentLabel?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
|
|
12396
|
+
/** Whether the field is a row of segments, one for each part of the date or
|
|
12397
|
+
time, in place of a line of text.
|
|
12398
|
+
|
|
12399
|
+
Each segment is set with digits or the arrow keys, in the order the
|
|
12400
|
+
locale writes them, so a reader types a date the way they write one and
|
|
12401
|
+
no format has to be read back. The picker still opens from the trigger
|
|
12402
|
+
and with Alt+Down. */
|
|
12403
|
+
segmented?: (HelixHeadlessTimeInput["segmented"]) | undefined;
|
|
11035
12404
|
/** Whether the value is locked. A read-only control still submits its value.
|
|
11036
12405
|
|
|
11037
12406
|
**Enforced by refusing every request in one place**, which is the seam this
|
|
@@ -11244,6 +12613,20 @@ A time not on the step is simply never offered, so it is not an error to
|
|
|
11244
12613
|
name one, and naming every time in the list is how the empty state is
|
|
11245
12614
|
reached honestly rather than by handing over an empty range. */
|
|
11246
12615
|
disableTimes?: (HelixHeadlessTimePicker["disableTimes"]) | undefined;
|
|
12616
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12617
|
+
meridiem, `h23` for twenty-four.
|
|
12618
|
+
|
|
12619
|
+
Absent is the locale's own, which is right for a reader's own form. Set it
|
|
12620
|
+
where every reader must see the same clock whatever their language, as a
|
|
12621
|
+
timetable does. The value is `HH:mm` on twenty-four hours either way. */
|
|
12622
|
+
"hour-cycle"?: (HelixHeadlessTimePicker["hourCycle"]) | undefined;
|
|
12623
|
+
/** The clock the times are written on: `h12` for twelve hours with a
|
|
12624
|
+
meridiem, `h23` for twenty-four.
|
|
12625
|
+
|
|
12626
|
+
Absent is the locale's own, which is right for a reader's own form. Set it
|
|
12627
|
+
where every reader must see the same clock whatever their language, as a
|
|
12628
|
+
timetable does. The value is `HH:mm` on twenty-four hours either way. */
|
|
12629
|
+
hourCycle?: (HelixHeadlessTimePicker["hourCycle"]) | undefined;
|
|
11247
12630
|
/** What the wheel of hours is called, read by screen readers. */
|
|
11248
12631
|
"hour-label"?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
|
|
11249
12632
|
/** What the wheel of hours is called, read by screen readers. */
|
|
@@ -11340,7 +12723,20 @@ else set needs. */
|
|
|
11340
12723
|
readOnly?: (HelixHeadlessTimePicker["readOnly"]) | undefined;
|
|
11341
12724
|
/** Stops the form from submitting while no time is chosen. */
|
|
11342
12725
|
required?: (HelixHeadlessTimePicker["required"]) | undefined;
|
|
11343
|
-
/**
|
|
12726
|
+
/** What the wheel of seconds is called, read by screen readers. */
|
|
12727
|
+
"second-label"?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12728
|
+
/** What the wheel of seconds is called, read by screen readers. */
|
|
12729
|
+
secondLabel?: (HelixHeadlessTimePicker["secondLabel"]) | undefined;
|
|
12730
|
+
/** Whether times carry their seconds.
|
|
12731
|
+
|
|
12732
|
+
The value becomes `HH:mm:ss`, each time is written with its seconds, the
|
|
12733
|
+
wheels take a column of seconds, and `step` counts seconds, the unit
|
|
12734
|
+
`<input type="time">` counts in. A list at a step of one second is 86,400
|
|
12735
|
+
rows, so give `seconds` a `step` and bounds that keep it a list, or use
|
|
12736
|
+
the wheels. */
|
|
12737
|
+
seconds?: (HelixHeadlessTimePicker["seconds"]) | undefined;
|
|
12738
|
+
/** How far apart the offered times are, in minutes, or in seconds with
|
|
12739
|
+
`seconds`.
|
|
11344
12740
|
|
|
11345
12741
|
Fifteen, which is four rows an hour and ninety-six in a day: enough that a
|
|
11346
12742
|
reader scrolls rather than hunts, and few enough that the list is a list.
|
|
@@ -11442,6 +12838,19 @@ export type HelixHeadlessTimePickerVueEvents = {
|
|
|
11442
12838
|
input: HelixHeadlessTimePickerElementEvent;
|
|
11443
12839
|
};
|
|
11444
12840
|
|
|
12841
|
+
export type HelixHeadlessTimelineGroupVueProps = {
|
|
12842
|
+
/** The level of the group's heading, from 1 to 6. */
|
|
12843
|
+
"heading-level"?: (HelixHeadlessTimelineGroup["headingLevel"] | `${number}`) | undefined;
|
|
12844
|
+
/** The level of the group's heading, from 1 to 6. */
|
|
12845
|
+
headingLevel?: (HelixHeadlessTimelineGroup["headingLevel"]) | undefined;
|
|
12846
|
+
/** The heading, when it is plain text, such as "Today".
|
|
12847
|
+
|
|
12848
|
+
The fallback of the `heading` slot, so slotted content replaces it. */
|
|
12849
|
+
label?: (HelixHeadlessTimelineGroup["label"]) | undefined;
|
|
12850
|
+
};
|
|
12851
|
+
|
|
12852
|
+
export type HelixHeadlessTimelineGroupVueEvents = {};
|
|
12853
|
+
|
|
11445
12854
|
export type HelixHeadlessTimelineItemVueProps = {
|
|
11446
12855
|
/** When it happened, in machine-readable form. Setting it wraps the time in a
|
|
11447
12856
|
`<time>` element.
|
|
@@ -11528,7 +12937,11 @@ export type HelixHeadlessToastHelixDismissElementEvent =
|
|
|
11528
12937
|
HelixHeadlessToastElementEvent<HelixDismissEvent>;
|
|
11529
12938
|
|
|
11530
12939
|
export type HelixHeadlessToastVueProps = {
|
|
11531
|
-
/**
|
|
12940
|
+
/** The key that takes focus to the stack and back, such as `F8` or `Alt+T`:
|
|
12941
|
+
keys joined by `+`, the last one the key. Empty turns it off. */
|
|
12942
|
+
hotkey?: (HelixHeadlessToast["hotkey"]) | undefined;
|
|
12943
|
+
/** Accessible name for the region, with `{hotkey}` filled in. Translate it with
|
|
12944
|
+
the rest of your interface. */
|
|
11532
12945
|
label?: (HelixHeadlessToast["label"]) | undefined;
|
|
11533
12946
|
/** Which corner or edge the stack sits at.
|
|
11534
12947
|
|
|
@@ -11605,6 +13018,21 @@ reader while looking correct to everybody else. Worse, setting both draws
|
|
|
11605
13018
|
it twice. One property moves the label the consumer already has to give,
|
|
11606
13019
|
and cannot be used to remove it. */
|
|
11607
13020
|
labelPlacement?: (HelixHeadlessToggleGroup["labelPlacement"]) | undefined;
|
|
13021
|
+
/** The direction the items run. `vertical` puts them in a column, and the up
|
|
13022
|
+
and down arrows move between them.
|
|
13023
|
+
|
|
13024
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
13025
|
+
orientation?: (HelixHeadlessToggleGroup["orientation"]) | undefined;
|
|
13026
|
+
/** Whether one item is chosen, as a radio group, or several can be pressed,
|
|
13027
|
+
as a toolbar of buttons with `aria-pressed`.
|
|
13028
|
+
|
|
13029
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
13030
|
+
"selection-mode"?: (HelixHeadlessToggleGroup["selectionMode"]) | undefined;
|
|
13031
|
+
/** Whether one item is chosen, as a radio group, or several can be pressed,
|
|
13032
|
+
as a toolbar of buttons with `aria-pressed`.
|
|
13033
|
+
|
|
13034
|
+
Optional, so the attribute is absent until a consumer writes it. */
|
|
13035
|
+
selectionMode?: (HelixHeadlessToggleGroup["selectionMode"]) | undefined;
|
|
11608
13036
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
11609
13037
|
"default-value"?: (HelixHeadlessToggleGroup["defaultValue"]) | undefined;
|
|
11610
13038
|
/** The value the control starts with. A form reset returns it to this value. */
|
|
@@ -11682,6 +13110,10 @@ work as before once focus is in it.
|
|
|
11682
13110
|
No attribute: it is coordination between elements, and a consumer has no
|
|
11683
13111
|
reason to set it. */
|
|
11684
13112
|
focusable?: (HelixHeadlessToggleGroup["focusable"]) | undefined;
|
|
13113
|
+
/** The pressed values as a list, under `selection-mode="multiple"`, in the
|
|
13114
|
+
order the items are written. Written, it presses exactly those items.
|
|
13115
|
+
Where one item is chosen, it is that one value, or none. */
|
|
13116
|
+
values?: (HelixHeadlessToggleGroup["values"]) | undefined;
|
|
11685
13117
|
};
|
|
11686
13118
|
|
|
11687
13119
|
export type HelixHeadlessToggleGroupVueEvents = {
|
|
@@ -11752,6 +13184,11 @@ group sits in holds the stop. No attribute: it is coordination between
|
|
|
11752
13184
|
elements, and `tabindex` on a host the consumer rendered is the change a
|
|
11753
13185
|
React consumer's hydration reports and does not patch up. */
|
|
11754
13186
|
focusable?: (HelixHeadlessToggle["focusable"]) | undefined;
|
|
13187
|
+
/** Whether the item is pressed, in a group where several can be, and
|
|
13188
|
+
`undefined` in a group where one is chosen.
|
|
13189
|
+
|
|
13190
|
+
Written by the group, like `selected`, so no attribute. */
|
|
13191
|
+
pressed?: (HelixHeadlessToggle["pressed"]) | undefined;
|
|
11755
13192
|
};
|
|
11756
13193
|
|
|
11757
13194
|
export type HelixHeadlessToggleVueEvents = {
|
|
@@ -11767,6 +13204,12 @@ and wins over this. */
|
|
|
11767
13204
|
label?: (HelixHeadlessToolbar["label"]) | undefined;
|
|
11768
13205
|
/** The direction the arrow keys move focus in. */
|
|
11769
13206
|
orientation?: (HelixHeadlessToolbar["orientation"]) | undefined;
|
|
13207
|
+
/** Whether the arrow keys stop at the first and the last control. Unset, they
|
|
13208
|
+
wrap around from one end to the other. */
|
|
13209
|
+
"stop-at-ends"?: (HelixHeadlessToolbar["stopAtEnds"]) | undefined;
|
|
13210
|
+
/** Whether the arrow keys stop at the first and the last control. Unset, they
|
|
13211
|
+
wrap around from one end to the other. */
|
|
13212
|
+
stopAtEnds?: (HelixHeadlessToolbar["stopAtEnds"]) | undefined;
|
|
11770
13213
|
};
|
|
11771
13214
|
|
|
11772
13215
|
export type HelixHeadlessToolbarVueEvents = {};
|
|
@@ -11854,6 +13297,22 @@ worked. */
|
|
|
11854
13297
|
|
|
11855
13298
|
It moves if that side does not fit. */
|
|
11856
13299
|
placement?: (HelixHeadlessTooltip["placement"]) | undefined;
|
|
13300
|
+
/** What shows the bubble. Unset, it is a pointer resting on the trigger and
|
|
13301
|
+
keyboard focus. `focus` is keyboard focus alone, for a hint a pointer does
|
|
13302
|
+
not need, such as a shortcut a mouse reader has no use for. */
|
|
13303
|
+
"show-on"?: (HelixHeadlessTooltip["showOn"]) | undefined;
|
|
13304
|
+
/** What shows the bubble. Unset, it is a pointer resting on the trigger and
|
|
13305
|
+
keyboard focus. `focus` is keyboard focus alone, for a hint a pointer does
|
|
13306
|
+
not need, such as a shortcut a mouse reader has no use for. */
|
|
13307
|
+
showOn?: (HelixHeadlessTooltip["showOn"]) | undefined;
|
|
13308
|
+
/** How long after a tooltip hides the next one still shows at once, with no
|
|
13309
|
+
`delay`, in milliseconds. The same skip delay Radix uses. Zero makes every
|
|
13310
|
+
tooltip wait. */
|
|
13311
|
+
"skip-delay"?: (HelixHeadlessTooltip["skipDelay"] | `${number}`) | undefined;
|
|
13312
|
+
/** How long after a tooltip hides the next one still shows at once, with no
|
|
13313
|
+
`delay`, in milliseconds. The same skip delay Radix uses. Zero makes every
|
|
13314
|
+
tooltip wait. */
|
|
13315
|
+
skipDelay?: (HelixHeadlessTooltip["skipDelay"]) | undefined;
|
|
11857
13316
|
/** The id of a box to keep the bubble inside. Defaults to the viewport.
|
|
11858
13317
|
|
|
11859
13318
|
Resolved the way `for` is, so an id in the same tree, which is what lets a
|
|
@@ -11951,6 +13410,14 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
|
|
|
11951
13410
|
"next-label"?: (HelixHeadlessTour["nextLabel"]) | undefined;
|
|
11952
13411
|
/** Label for the control that goes on. */
|
|
11953
13412
|
nextLabel?: (HelixHeadlessTour["nextLabel"]) | undefined;
|
|
13413
|
+
/** Draws each stop's place in the run in its panel, as well as saying it. */
|
|
13414
|
+
progress?: (HelixHeadlessTour["progress"]) | undefined;
|
|
13415
|
+
/** Each stop's place in the run, with `{index}` and `{count}` filled in.
|
|
13416
|
+
Translate it with the rest of your text. */
|
|
13417
|
+
"progress-label"?: (HelixHeadlessTour["progressLabel"]) | undefined;
|
|
13418
|
+
/** Each stop's place in the run, with `{index}` and `{count}` filled in.
|
|
13419
|
+
Translate it with the rest of your text. */
|
|
13420
|
+
progressLabel?: (HelixHeadlessTour["progressLabel"]) | undefined;
|
|
11954
13421
|
/** Label for the control that leaves the tour. */
|
|
11955
13422
|
"skip-label"?: (HelixHeadlessTour["skipLabel"]) | undefined;
|
|
11956
13423
|
/** Label for the control that leaves the tour. */
|
|
@@ -12025,6 +13492,9 @@ closed tour, a closed tour shows nothing, and nothing can disagree. */
|
|
|
12025
13492
|
first?: (HelixHeadlessTourStop["first"]) | undefined;
|
|
12026
13493
|
/** The id of the element the stop points at. */
|
|
12027
13494
|
for?: (HelixHeadlessTourStop["for"]) | undefined;
|
|
13495
|
+
/** The panel's name, where neither the `heading` slot nor the content holds a
|
|
13496
|
+
heading. */
|
|
13497
|
+
label?: (HelixHeadlessTourStop["label"]) | undefined;
|
|
12028
13498
|
/** Whether the stop is the last one. Its next control then shows `doneLabel`. */
|
|
12029
13499
|
last?: (HelixHeadlessTourStop["last"]) | undefined;
|
|
12030
13500
|
/** Label for the control that goes on. */
|
|
@@ -12037,6 +13507,15 @@ closed tour, a closed tour shows nothing, and nothing can disagree. */
|
|
|
12037
13507
|
"skip-label"?: (HelixHeadlessTourStop["skipLabel"]) | undefined;
|
|
12038
13508
|
/** Label for the control that leaves the tour. */
|
|
12039
13509
|
skipLabel?: (HelixHeadlessTourStop["skipLabel"]) | undefined;
|
|
13510
|
+
/** What kind of stop this is. Unset, it is a bubble pointing at its target.
|
|
13511
|
+
|
|
13512
|
+
- `dialog`: a panel in the middle of the window, over a backdrop
|
|
13513
|
+
- `floating`: a panel in a corner of the window
|
|
13514
|
+
- `wait`: nothing shown, while the tour waits for the target to be on the page
|
|
13515
|
+
|
|
13516
|
+
Reflected, because the styled tier places a dialog and a floating panel by
|
|
13517
|
+
it, and unset at rest, so no default is written onto the host. */
|
|
13518
|
+
type?: (HelixHeadlessTourStop["type"]) | undefined;
|
|
12040
13519
|
};
|
|
12041
13520
|
|
|
12042
13521
|
export type HelixHeadlessTourStopVueEvents = {
|
|
@@ -12055,6 +13534,9 @@ export type HelixHeadlessTreeItemHelixBeforeCloseElementEvent =
|
|
|
12055
13534
|
/** `helix-before-open` event type */
|
|
12056
13535
|
export type HelixHeadlessTreeItemHelixBeforeOpenElementEvent =
|
|
12057
13536
|
HelixHeadlessTreeItemElementEvent<HelixBeforeOpenEvent>;
|
|
13537
|
+
/** `helix-load` event type */
|
|
13538
|
+
export type HelixHeadlessTreeItemHelixLoadElementEvent =
|
|
13539
|
+
HelixHeadlessTreeItemElementEvent<HelixLoadEvent>;
|
|
12058
13540
|
/** `helix-select` event type */
|
|
12059
13541
|
export type HelixHeadlessTreeItemHelixSelectElementEvent =
|
|
12060
13542
|
HelixHeadlessTreeItemElementEvent<HelixSelectEvent>;
|
|
@@ -12063,12 +13545,20 @@ export type HelixHeadlessTreeItemToggleElementEvent =
|
|
|
12063
13545
|
HelixHeadlessTreeItemElementEvent<ToggleEvent>;
|
|
12064
13546
|
|
|
12065
13547
|
export type HelixHeadlessTreeItemVueProps = {
|
|
13548
|
+
/** Whether the item cannot be chosen, opened or followed. The arrow keys still
|
|
13549
|
+
reach it, so a reader knows it is there. */
|
|
13550
|
+
disabled?: (HelixHeadlessTreeItem["disabled"]) | undefined;
|
|
12066
13551
|
/** The URL this node links to. Setting it makes the row a link.
|
|
12067
13552
|
|
|
12068
13553
|
Unset by default, and unreflected: a tree of choosable nodes is not a tree
|
|
12069
13554
|
of links, and an empty `href` written onto every row would be a link to the
|
|
12070
13555
|
current page on every item a consumer never asked to be one. */
|
|
12071
13556
|
href?: (HelixHeadlessTreeItem["href"]) | undefined;
|
|
13557
|
+
/** Whether the item is a branch whose children are loaded when it opens.
|
|
13558
|
+
|
|
13559
|
+
Opening it sends `helix-load`. Add the children to its `children` slot,
|
|
13560
|
+
and remove `lazy` once they are in, as Web Awesome's tree item does. */
|
|
13561
|
+
lazy?: (HelixHeadlessTreeItem["lazy"]) | undefined;
|
|
12072
13562
|
/** The link's `rel` value, which describes how the linked page relates to this
|
|
12073
13563
|
one.
|
|
12074
13564
|
|
|
@@ -12136,6 +13626,8 @@ export type HelixHeadlessTreeItemVueEvents = {
|
|
|
12136
13626
|
"helix-before-close": HelixHeadlessTreeItemHelixBeforeCloseElementEvent;
|
|
12137
13627
|
/** Fired before a branch opens, and cancelable. */
|
|
12138
13628
|
"helix-before-open": HelixHeadlessTreeItemHelixBeforeOpenElementEvent;
|
|
13629
|
+
/** Fired when a `lazy` item opens, so you can load its children. */
|
|
13630
|
+
"helix-load": HelixHeadlessTreeItemHelixLoadElementEvent;
|
|
12139
13631
|
/** Fired when the item is chosen, and cancelable. Canceling it changes nothing. */
|
|
12140
13632
|
"helix-select": HelixHeadlessTreeItemHelixSelectElementEvent;
|
|
12141
13633
|
/** Sent when the branch opens or closes, with `newState` and `oldState`. */
|
|
@@ -12198,6 +13690,16 @@ branch as a label; a headless consumer reads the attribute and the
|
|
|
12198
13690
|
written here appears in the served markup of every tree anybody renders.
|
|
12199
13691
|
The resting state is the absence of the attribute, which is `peer`. */
|
|
12200
13692
|
nesting?: (HelixHeadlessTree["nesting"]) | undefined;
|
|
13693
|
+
/** Whether a reader can check many items. Unset, one item is chosen at a
|
|
13694
|
+
time.
|
|
13695
|
+
|
|
13696
|
+
Optional, so a tree of one choice writes no attribute onto the host. */
|
|
13697
|
+
"selection-mode"?: (HelixHeadlessTree["selectionMode"]) | undefined;
|
|
13698
|
+
/** Whether a reader can check many items. Unset, one item is chosen at a
|
|
13699
|
+
time.
|
|
13700
|
+
|
|
13701
|
+
Optional, so a tree of one choice writes no attribute onto the host. */
|
|
13702
|
+
selectionMode?: (HelixHeadlessTree["selectionMode"]) | undefined;
|
|
12201
13703
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
12202
13704
|
"empty-text"?: (HelixHeadlessTree["emptyText"]) | undefined;
|
|
12203
13705
|
/** The text shown and announced when there are no rows and none are loading. */
|
|
@@ -12229,6 +13731,9 @@ Ignored once `active` is written. */
|
|
|
12229
13731
|
|
|
12230
13732
|
Ignored once `active` is written. */
|
|
12231
13733
|
defaultActive?: (HelixHeadlessTree["defaultActive"]) | undefined;
|
|
13734
|
+
/** The checked values, as a list, under `selection-mode="multiple"`, and the
|
|
13735
|
+
chosen value alone otherwise. Writing it sets `active`. */
|
|
13736
|
+
values?: (HelixHeadlessTree["values"]) | undefined;
|
|
12232
13737
|
};
|
|
12233
13738
|
|
|
12234
13739
|
export type HelixHeadlessTreeVueEvents = {
|
|
@@ -12358,10 +13863,25 @@ export type HelixHeadlessVideoPlaylistHelixActivateElementEvent =
|
|
|
12358
13863
|
/** `helix-before-activate` event type */
|
|
12359
13864
|
export type HelixHeadlessVideoPlaylistHelixBeforeActivateElementEvent =
|
|
12360
13865
|
HelixHeadlessVideoPlaylistElementEvent<HelixBeforeActivateEvent>;
|
|
13866
|
+
/** `helix-end` event type */
|
|
13867
|
+
export type HelixHeadlessVideoPlaylistHelixEndElementEvent =
|
|
13868
|
+
HelixHeadlessVideoPlaylistElementEvent<HelixEndEvent>;
|
|
12361
13869
|
|
|
12362
13870
|
export type HelixHeadlessVideoPlaylistVueProps = {
|
|
12363
13871
|
/** The list's name, read by screen readers. */
|
|
12364
13872
|
label?: (HelixHeadlessVideoPlaylist["label"]) | undefined;
|
|
13873
|
+
/** What happens when an entry ends with no next one to go to. `one` plays the
|
|
13874
|
+
same entry again, and `all` goes from the last entry back to the first.
|
|
13875
|
+
Absent, the playlist stops on the last entry and sends `helix-end`.
|
|
13876
|
+
|
|
13877
|
+
`all` also lets the next and previous controls go round, so next on the
|
|
13878
|
+
last entry is the first. `one` changes only what an ending does: next and
|
|
13879
|
+
previous still move, being a reader asking for another entry. */
|
|
13880
|
+
repeat?: (HelixHeadlessVideoPlaylist["repeat"]) | undefined;
|
|
13881
|
+
/** Whether the entries play in a random order. The order starts from the
|
|
13882
|
+
entry that is current, and holds until shuffle is turned off or an entry
|
|
13883
|
+
arrives or leaves, so previous goes back through what has played. */
|
|
13884
|
+
shuffle?: (HelixHeadlessVideoPlaylist["shuffle"]) | undefined;
|
|
12365
13885
|
/** The `value` of the current item.
|
|
12366
13886
|
|
|
12367
13887
|
Not `option.active`, which is the option the keyboard is on: that is a
|
|
@@ -12386,6 +13906,8 @@ export type HelixHeadlessVideoPlaylistVueEvents = {
|
|
|
12386
13906
|
"helix-activate": HelixHeadlessVideoPlaylistHelixActivateElementEvent;
|
|
12387
13907
|
/** The current entry is about to change. Cancelable: cancel it to keep the current entry. */
|
|
12388
13908
|
"helix-before-activate": HelixHeadlessVideoPlaylistHelixBeforeActivateElementEvent;
|
|
13909
|
+
/** The last entry finished playing, and the playlist stopped there. Not sent while `repeat` is set. */
|
|
13910
|
+
"helix-end": HelixHeadlessVideoPlaylistHelixEndElementEvent;
|
|
12389
13911
|
};
|
|
12390
13912
|
|
|
12391
13913
|
/** `HelixHeadlessVideo` component event */
|
|
@@ -12404,10 +13926,10 @@ export type HelixHeadlessVideoVueProps = {
|
|
|
12404
13926
|
/** Whether the video starts playing on its own. Browsers allow this only while
|
|
12405
13927
|
it is muted.
|
|
12406
13928
|
|
|
12407
|
-
Forwarded
|
|
12408
|
-
the browser's policy and
|
|
12409
|
-
|
|
12410
|
-
|
|
13929
|
+
Forwarded to the video, which decides. Whether an unprompted play is
|
|
13930
|
+
permitted is the browser's policy, and what follows a refused autoplay is a
|
|
13931
|
+
paused player showing its start control, which is the correct thing to be
|
|
13932
|
+
looking at. */
|
|
12411
13933
|
autoplay?: (HelixHeadlessVideo["autoplay"]) | undefined;
|
|
12412
13934
|
/** The name of the captions control when the video has one track. The control
|
|
12413
13935
|
turns that track on and off.
|
|
@@ -12641,6 +14163,12 @@ bar: two of the same control is worse than either placement. */
|
|
|
12641
14163
|
"pip-label"?: (HelixHeadlessVideo["pipLabel"]) | undefined;
|
|
12642
14164
|
/** What the control that floats the video over other windows is called. */
|
|
12643
14165
|
pipLabel?: (HelixHeadlessVideo["pipLabel"]) | undefined;
|
|
14166
|
+
/** The name of the player when `label` is not set. The player is a group, and
|
|
14167
|
+
this is what a screen reader calls it on arriving. */
|
|
14168
|
+
"player-label"?: (HelixHeadlessVideo["playerLabel"]) | undefined;
|
|
14169
|
+
/** The name of the player when `label` is not set. The player is a group, and
|
|
14170
|
+
this is what a screen reader calls it on arriving. */
|
|
14171
|
+
playerLabel?: (HelixHeadlessVideo["playerLabel"]) | undefined;
|
|
12644
14172
|
/** The name of the play control while pressing it would start the video. */
|
|
12645
14173
|
"play-label"?: (HelixHeadlessVideo["playLabel"]) | undefined;
|
|
12646
14174
|
/** The name of the play control while pressing it would start the video. */
|
|
@@ -12690,6 +14218,14 @@ nothing in it says "press to watch".
|
|
|
12690
14218
|
behind a hero, a grid of eight thumbnails, anything where the video is
|
|
12691
14219
|
decoration rather than something to start.
|
|
12692
14220
|
|
|
14221
|
+
**It is for the pointer, and the bar's Play is for everyone else.** Both
|
|
14222
|
+
play the video, so a keyboard met two stops called "Play" one after the
|
|
14223
|
+
other and a screen reader read the same button twice. The large one is out
|
|
14224
|
+
of the tab order and hidden from assistive technology while the bar is
|
|
14225
|
+
drawn, which is whenever it is: it shows only while the video is not
|
|
14226
|
+
playing, and the bar does not fade then. A press on it leaves focus on the
|
|
14227
|
+
player, so the keys go on working once it has gone.
|
|
14228
|
+
|
|
12693
14229
|
A value rather than a boolean, so the resting state is the attribute's
|
|
12694
14230
|
absence: a boolean defaulting to on would have to be spelled as its own
|
|
12695
14231
|
negation. */
|
|
@@ -12707,6 +14243,14 @@ nothing in it says "press to watch".
|
|
|
12707
14243
|
behind a hero, a grid of eight thumbnails, anything where the video is
|
|
12708
14244
|
decoration rather than something to start.
|
|
12709
14245
|
|
|
14246
|
+
**It is for the pointer, and the bar's Play is for everyone else.** Both
|
|
14247
|
+
play the video, so a keyboard met two stops called "Play" one after the
|
|
14248
|
+
other and a screen reader read the same button twice. The large one is out
|
|
14249
|
+
of the tab order and hidden from assistive technology while the bar is
|
|
14250
|
+
drawn, which is whenever it is: it shows only while the video is not
|
|
14251
|
+
playing, and the bar does not fade then. A press on it leaves focus on the
|
|
14252
|
+
player, so the keys go on working once it has gone.
|
|
14253
|
+
|
|
12710
14254
|
A value rather than a boolean, so the resting state is the attribute's
|
|
12711
14255
|
absence: a boolean defaulting to on would have to be spelled as its own
|
|
12712
14256
|
negation. */
|
|
@@ -12741,17 +14285,69 @@ past the end is the one write the platform answers with an exception. */
|
|
|
12741
14285
|
};
|
|
12742
14286
|
|
|
12743
14287
|
export type HelixHeadlessVideoVueEvents = {
|
|
12744
|
-
/** The
|
|
14288
|
+
/** The media stopped loading before it finished, without an error. */
|
|
14289
|
+
abort: HelixHeadlessVideoElementEvent;
|
|
14290
|
+
/** Enough has loaded to start playing. */
|
|
14291
|
+
canplay: HelixHeadlessVideoElementEvent;
|
|
14292
|
+
/** Enough has loaded to play to the end without stopping, at the current rate. */
|
|
14293
|
+
canplaythrough: HelixHeadlessVideoElementEvent;
|
|
14294
|
+
/** The duration changed, which it does once the metadata is in. */
|
|
14295
|
+
durationchange: HelixHeadlessVideoElementEvent;
|
|
14296
|
+
/** The media was reset, as when `src` changes. */
|
|
14297
|
+
emptied: HelixHeadlessVideoElementEvent;
|
|
14298
|
+
/** The video reached its end. */
|
|
12745
14299
|
ended: HelixHeadlessVideoElementEvent;
|
|
14300
|
+
/** The source could not be loaded or played. The player shows `error-label` as well. */
|
|
14301
|
+
error: HelixHeadlessVideoElementEvent;
|
|
12746
14302
|
/** The next video was requested. Load it in response. */
|
|
12747
14303
|
"helix-next": HelixHeadlessVideoHelixNextElementEvent;
|
|
12748
14304
|
/** The previous video was requested. Load it in response. */
|
|
12749
14305
|
"helix-previous": HelixHeadlessVideoHelixPreviousElementEvent;
|
|
12750
|
-
/**
|
|
14306
|
+
/** The frame at the current position has loaded. */
|
|
14307
|
+
loadeddata: HelixHeadlessVideoElementEvent;
|
|
14308
|
+
/** The duration and the size of the video are known. */
|
|
14309
|
+
loadedmetadata: HelixHeadlessVideoElementEvent;
|
|
14310
|
+
/** The video started looking for its media. */
|
|
14311
|
+
loadstart: HelixHeadlessVideoElementEvent;
|
|
14312
|
+
/** Playback paused. */
|
|
12751
14313
|
pause: HelixHeadlessVideoElementEvent;
|
|
12752
|
-
/** Playback
|
|
14314
|
+
/** Playback was asked to start. */
|
|
12753
14315
|
play: HelixHeadlessVideoElementEvent;
|
|
12754
|
-
|
|
14316
|
+
/** Playback started, or started again after waiting for data. */
|
|
14317
|
+
playing: HelixHeadlessVideoElementEvent;
|
|
14318
|
+
/** More of the media has downloaded. */
|
|
14319
|
+
progress: HelixHeadlessVideoElementEvent;
|
|
14320
|
+
/** The playback rate changed. Read `playbackRate`. */
|
|
14321
|
+
ratechange: HelixHeadlessVideoElementEvent;
|
|
14322
|
+
/** The video's own width or height changed. Read `videoWidth` and `videoHeight`. */
|
|
14323
|
+
resize: HelixHeadlessVideoElementEvent;
|
|
14324
|
+
/** A move to a new position finished. */
|
|
14325
|
+
seeked: HelixHeadlessVideoElementEvent;
|
|
14326
|
+
/** A move to a new position started. */
|
|
14327
|
+
seeking: HelixHeadlessVideoElementEvent;
|
|
14328
|
+
/** The browser is trying to load more data and none is arriving. */
|
|
14329
|
+
stalled: HelixHeadlessVideoElementEvent;
|
|
14330
|
+
/** Loading paused on purpose, as when `preload` asks for no more. */
|
|
14331
|
+
suspend: HelixHeadlessVideoElementEvent;
|
|
14332
|
+
/** The position changed. Read `currentTime`. */
|
|
14333
|
+
timeupdate: HelixHeadlessVideoElementEvent;
|
|
14334
|
+
/** The volume or the mute changed. Read `volume` and `muted`. */
|
|
14335
|
+
volumechange: HelixHeadlessVideoElementEvent;
|
|
14336
|
+
/** Playback stopped to wait for more data. */
|
|
14337
|
+
waiting: HelixHeadlessVideoElementEvent;
|
|
14338
|
+
};
|
|
14339
|
+
|
|
14340
|
+
/** `HelixHeadlessVirtualList` component event */
|
|
14341
|
+
export type HelixHeadlessVirtualListElementEvent<E = Event> = TypedEvent<
|
|
14342
|
+
HelixHeadlessVirtualList,
|
|
14343
|
+
E
|
|
14344
|
+
>;
|
|
14345
|
+
/** `helix-load-more` event type */
|
|
14346
|
+
export type HelixHeadlessVirtualListHelixLoadMoreElementEvent =
|
|
14347
|
+
HelixHeadlessVirtualListElementEvent<HelixLoadMoreEvent>;
|
|
14348
|
+
/** `helix-range-change` event type */
|
|
14349
|
+
export type HelixHeadlessVirtualListHelixRangeChangeElementEvent =
|
|
14350
|
+
HelixHeadlessVirtualListElementEvent<HelixRangeChangeEvent>;
|
|
12755
14351
|
|
|
12756
14352
|
export type HelixHeadlessVirtualListVueProps = {
|
|
12757
14353
|
/** The height of one row, in pixels, used to find the row at a scroll offset.
|
|
@@ -12759,7 +14355,8 @@ export type HelixHeadlessVirtualListVueProps = {
|
|
|
12759
14355
|
An estimate rather than a measurement while `measured` is off, which is
|
|
12760
14356
|
right whenever the rows really are one height and is the cheaper of the two. */
|
|
12761
14357
|
estimate?: (HelixHeadlessVirtualList["estimate"]) | undefined;
|
|
12762
|
-
/** The id of the script element that holds the
|
|
14358
|
+
/** The id of the script element that holds the items as JSON. `items` wins
|
|
14359
|
+
where both are set. */
|
|
12763
14360
|
for?: (HelixHeadlessVirtualList["for"]) | undefined;
|
|
12764
14361
|
/** The list's name, read by screen readers, because only some of its rows
|
|
12765
14362
|
are rendered at a time.
|
|
@@ -12776,9 +14373,27 @@ disagree with itself; measuring is what a set of genuinely different
|
|
|
12776
14373
|
heights needs and costs a read of each row as it renders. A list of
|
|
12777
14374
|
one-line rows should leave this alone. */
|
|
12778
14375
|
measured?: (HelixHeadlessVirtualList["measured"]) | undefined;
|
|
14376
|
+
/** The items, as an array. Set it as a property.
|
|
14377
|
+
|
|
14378
|
+
Each item is drawn by `renderItem`, or into the row `<template>` by its
|
|
14379
|
+
fields. A new array draws the new rows, so replace the array to change it.
|
|
14380
|
+
Left unset, the list reads the script that `for` names. */
|
|
14381
|
+
items?: (HelixHeadlessVirtualList["items"]) | undefined;
|
|
14382
|
+
/** Draws one item into its row, given the item and its index. Set it as a
|
|
14383
|
+
property.
|
|
14384
|
+
|
|
14385
|
+
It returns what Lit renders: a template from `html`, a string, or a DOM
|
|
14386
|
+
node. The list wraps each result in a `<div>` that carries the row's role
|
|
14387
|
+
and place in the set. Where it is unset, the row `<template>` is used. */
|
|
14388
|
+
renderItem?: (HelixHeadlessVirtualList["renderItem"]) | undefined;
|
|
12779
14389
|
};
|
|
12780
14390
|
|
|
12781
|
-
export type HelixHeadlessVirtualListVueEvents = {
|
|
14391
|
+
export type HelixHeadlessVirtualListVueEvents = {
|
|
14392
|
+
/** Fired when a reader comes within one screen of the last item, once for each length of the set. */
|
|
14393
|
+
"helix-load-more": HelixHeadlessVirtualListHelixLoadMoreElementEvent;
|
|
14394
|
+
/** Fired when the items on screen change, with the new `first` and `last`, which `range` also holds. */
|
|
14395
|
+
"helix-range-change": HelixHeadlessVirtualListHelixRangeChangeElementEvent;
|
|
14396
|
+
};
|
|
12782
14397
|
|
|
12783
14398
|
export type CustomCssProperties = {
|
|
12784
14399
|
/** 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. */
|
|
@@ -12809,12 +14424,18 @@ export type CustomCssProperties = {
|
|
|
12809
14424
|
"--color-picker-swatch"?: (string) | undefined;
|
|
12810
14425
|
/** The alignment of the cell's column: `start`, `center`, or `end`. Unset when the column sets none. The component writes it on each cell it draws, and the stylesheet reads it. `Table` sets `--table-cell-align` for the same purpose. */
|
|
12811
14426
|
"--data-table-cell-align"?: (string) | undefined;
|
|
14427
|
+
/** How deep a row is in a tree grid, from 1. The component writes it on each row header cell, and the stylesheet indents by it. */
|
|
14428
|
+
"--data-table-level"?: (string) | undefined;
|
|
12812
14429
|
/** The column track list, worked out from the columns. The component writes it inline on the element that reads it, so setting it has no effect. Set a column's `width` to change it. */
|
|
12813
14430
|
"--data-table-template"?: (string) | undefined;
|
|
12814
14431
|
/** How many month columns are drawn, capped at two. `--date-picker-columns` overrides it. */
|
|
12815
14432
|
"--date-picker-column-count"?: (string) | undefined;
|
|
12816
14433
|
/** How thick the ring is drawn, derived from `hole`. */
|
|
12817
14434
|
"--donut-chart-stroke"?: (string) | undefined;
|
|
14435
|
+
/** How far a swipe, or a snap point, has moved the panel across, in pixels, toward the right. */
|
|
14436
|
+
"--drawer-swipe-x"?: (string) | undefined;
|
|
14437
|
+
/** How far a swipe, or a snap point, has moved the panel down, in pixels. */
|
|
14438
|
+
"--drawer-swipe-y"?: (string) | undefined;
|
|
12818
14439
|
/** How many rows the strip lays out. The component writes it from the data, and the stylesheet that draws the strip reads it. */
|
|
12819
14440
|
"--heatmap-rows"?: (string) | undefined;
|
|
12820
14441
|
/** The tone of the cell it is set on. The component writes it, and the stylesheet that paints the cell reads it. */
|
|
@@ -12847,6 +14468,10 @@ export type CustomCssProperties = {
|
|
|
12847
14468
|
"--chart-terminus-x"?: (string) | undefined;
|
|
12848
14469
|
/** Where a series' last reading sits vertically, as a percentage. Written by the component. */
|
|
12849
14470
|
"--chart-terminus-y"?: (string) | undefined;
|
|
14471
|
+
/** The number of the first row, written where `start` or `reversed` moves it. */
|
|
14472
|
+
"--list-first"?: (string) | undefined;
|
|
14473
|
+
/** What each row adds to the number before it: `1`, or `-1` where `reversed`. */
|
|
14474
|
+
"--list-step"?: (string) | undefined;
|
|
12850
14475
|
/** How far the needle turns to point north, as an angle. The frame writes it from `bearing`. */
|
|
12851
14476
|
"--map-needle-turn"?: (string) | undefined;
|
|
12852
14477
|
/** Where the panel starts, measured from the bar above it. */
|
|
@@ -12877,6 +14502,10 @@ export type CustomCssProperties = {
|
|
|
12877
14502
|
"--chart-point-y"?: (string) | undefined;
|
|
12878
14503
|
/** A tick's position along its axis, as a percentage. The component writes it. */
|
|
12879
14504
|
"--chart-tick"?: (string) | undefined;
|
|
14505
|
+
/** How far along its axis the content is scrolled, from 0 at the start to 1 at the end. Written on each `scrollbar` part, so its thumb inherits it. Counted from the right on a right-to-left page. */
|
|
14506
|
+
"--scroll-area-scroll-fraction"?: (string) | undefined;
|
|
14507
|
+
/** 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
|
+
"--scroll-area-thumb-fraction"?: (string) | undefined;
|
|
12880
14509
|
/** The value as a fraction of the range, 0 to 1. */
|
|
12881
14510
|
"--slider-fraction"?: (string) | undefined;
|
|
12882
14511
|
/** Where a range's filled span starts, as a fraction of the track, 0 to 1. */
|
|
@@ -12895,6 +14524,8 @@ export type CustomCssProperties = {
|
|
|
12895
14524
|
"--table-template"?: (string) | undefined;
|
|
12896
14525
|
/** How long this message stays, in milliseconds, for a progress hint. */
|
|
12897
14526
|
"--toast-duration"?: (string) | undefined;
|
|
14527
|
+
/** How far a swipe has moved the message across, in pixels, toward the right. */
|
|
14528
|
+
"--toast-swipe-x"?: (string) | undefined;
|
|
12898
14529
|
/** How deep this row sits, counting from one as `aria-level` does, for the indent. */
|
|
12899
14530
|
"--tree-level"?: (string) | undefined;
|
|
12900
14531
|
/** The media's own aspect ratio, once it is known. `--video-aspect-ratio` overrides it. */
|
|
@@ -12909,7 +14540,7 @@ export type CustomCssProperties = {
|
|
|
12909
14540
|
// Note: Some tooling expects this augmentation under "@vue/runtime-core", while
|
|
12910
14541
|
// other docs/examples use "vue". We emit both for compatibility.
|
|
12911
14542
|
export interface WcToolkitVueGlobalComponents {
|
|
12912
|
-
/** 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. Closed content has both 'hidden' and 'inert'. 'hidden' collapses it when no stylesheet is loaded. 'inert' keeps it out of the tab order and the accessibility tree after the styled tier's 'display' overrides 'hidden'. */
|
|
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. Closed content has both 'hidden' and 'inert'. 'hidden' collapses it when no stylesheet is loaded. 'inert' keeps it out of the tab order and the accessibility tree after the styled tier's 'display' overrides 'hidden'. Set 'hidden-until-found' and the browser's find in page searches a closed section too: a match opens it, with 'helix-before-open' first, as React Aria's disclosure does. The content is then 'hidden="until-found"' while closed, and not 'inert', since an inert region is never searched. */
|
|
12913
14544
|
"helix-headless-accordion-item": DefineCustomElement<
|
|
12914
14545
|
HelixHeadlessAccordionItem,
|
|
12915
14546
|
HelixHeadlessAccordionItemVueProps,
|
|
@@ -12921,19 +14552,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12921
14552
|
HelixHeadlessAccordionVueProps,
|
|
12922
14553
|
HelixHeadlessAccordionVueEvents
|
|
12923
14554
|
>;
|
|
12924
|
-
/** 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, so the message is not in the page twice. 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. */
|
|
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, so the message is not in the page twice. 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. When the time runs out it sends 'helix-dismiss', as the button does. */
|
|
12925
14556
|
"helix-headless-announcement": DefineCustomElement<
|
|
12926
14557
|
HelixHeadlessAnnouncement,
|
|
12927
14558
|
HelixHeadlessAnnouncementVueProps,
|
|
12928
14559
|
HelixHeadlessAnnouncementVueEvents
|
|
12929
14560
|
>;
|
|
12930
|
-
/** 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. */
|
|
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. */
|
|
12931
14562
|
"helix-headless-app-header": DefineCustomElement<
|
|
12932
14563
|
HelixHeadlessAppHeader,
|
|
12933
14564
|
HelixHeadlessAppHeaderVueProps,
|
|
12934
14565
|
HelixHeadlessAppHeaderVueEvents
|
|
12935
14566
|
>;
|
|
12936
|
-
/** Shows how a total is made up. Each numeric column of the table is a part, the parts add up to the total at each reading, and the top edge is that total. The thickness of a band is that part's amount. Use 'LineChart' with 'area' to show how each series moved: it fills each series from the floor separately, so the fills overlap. Use this chart to show the composition: it stacks the series. **The value axis always starts at zero**, as in 'BarChart', because a band's thickness is its value. For the same reason there is no streamgraph mode, which moves the baseline. To show how the composition changed, set 'share'. Band edges are straight between readings by default. A smoothed curve through one sum can dip below the curve through the sum beneath it, which draws a part as less than zero. Other curves: - 'curve="smooth"': for a stack read as an overall shape. - 'curve="step"': holds each reading and jumps at the midpoint, so stacked edges stay in order, as with 'straight'. Use it for a quantity that changes at a moment, such as a headcount or a price. 'share' draws each reading as 100 percent, so the top edge is flat and the bands show each part's share. Use it to see which part grew. The default shows whether the total grew. The drawing is
|
|
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. */
|
|
12937
14568
|
"helix-headless-area-chart": DefineCustomElement<
|
|
12938
14569
|
HelixHeadlessAreaChart,
|
|
12939
14570
|
HelixHeadlessAreaChartVueProps,
|
|
@@ -12951,13 +14582,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12951
14582
|
HelixHeadlessAvatarVueProps,
|
|
12952
14583
|
HelixHeadlessAvatarVueEvents
|
|
12953
14584
|
>;
|
|
12954
|
-
/** Badge wraps the element it decorates and pins an indicator to its corner, so the wrapped element keeps its place in the layout. What the indicator shows depends on 'value': - A 'value' of zero shows no indicator. - No 'value' shows a dot. - Any other value shows the value. Above 'max', the indicator shows '{max}+', so its width stays the same as the count grows. A count is announced from its own text, and 'label' replaces that with a fuller name, such as '4 unread'. A dot needs a 'label'. Without one, the dot is a colored circle that screen readers do not announce. **
|
|
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 is not part of the control's name.** It is a status of its own, read when it changes and when a reader moves to it, so focusing a button inside a badge announces the button's name alone. A reference from the control to the count would point into the badge's shadow root, which the platform does not allow. **Put the badge inside the control to have its count read with the control's name**, as Web Awesome and Shoelace do: '<button>Inbox <helix-badge value="8" label="8 unread"></helix-badge></button>' is the button "Inbox 8 unread", and stays current as the count changes. The styled tier's 'placement="inline"' draws the mark in the line for that case. */
|
|
12955
14586
|
"helix-headless-badge": DefineCustomElement<
|
|
12956
14587
|
HelixHeadlessBadge,
|
|
12957
14588
|
HelixHeadlessBadgeVueProps,
|
|
12958
14589
|
HelixHeadlessBadgeVueEvents
|
|
12959
14590
|
>;
|
|
12960
|
-
/** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is
|
|
14591
|
+
/** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is hidden from screen readers, so they get the numbers themselves. The 'summary' part names the chart, from 'label' or the table's caption, and gives each series' highest reading. **The plot is read by key.** It takes focus, named by 'label' or the caption. The arrows along the categories move from one to the next, which is left and right for columns and up and down for 'orientation="horizontal"'. Home and End go to the first and the last, and the other pair of arrows moves among the series of a category. The tooltip follows, the 'live' part says the reading in words, and Escape puts the tooltip away. The component writes the custom properties below with numbers it computes, and the stylesheet that draws the chart reads them. Do not set them yourself. */
|
|
12961
14592
|
"helix-headless-bar-chart": DefineCustomElement<
|
|
12962
14593
|
HelixHeadlessBarChart,
|
|
12963
14594
|
HelixHeadlessBarChartVueProps,
|
|
@@ -12975,7 +14606,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12975
14606
|
HelixHeadlessBreadcrumbVueProps,
|
|
12976
14607
|
HelixHeadlessBreadcrumbVueEvents
|
|
12977
14608
|
>;
|
|
12978
|
-
/** 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. */
|
|
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. */
|
|
12979
14610
|
"helix-headless-breadcrumbs": DefineCustomElement<
|
|
12980
14611
|
HelixHeadlessBreadcrumbs,
|
|
12981
14612
|
HelixHeadlessBreadcrumbsVueProps,
|
|
@@ -12987,13 +14618,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
12987
14618
|
HelixHeadlessButtonGroupVueProps,
|
|
12988
14619
|
HelixHeadlessButtonGroupVueEvents
|
|
12989
14620
|
>;
|
|
12990
|
-
/** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button calls 'requestSubmit()' on its form, which runs validation, unlike 'submit()'. A 'submit' listener reads 'event.submitter' as 'null', because the platform accepts only a native submit button there. The button's 'name' and 'value' are in the form data, so read them from 'new FormData(form)' to tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. */
|
|
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()' on its form, which runs validation, unlike 'submit()'. A 'submit' listener reads 'event.submitter' as 'null', because the platform accepts only a native submit button there. The button's 'name' and 'value' are in the form data, so read them from 'new FormData(form)' to tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. Set 'pending' while the action a press started is still running. The button keeps focus and refuses presses, and a reader on it hears 'pending-label'. */
|
|
12991
14622
|
"helix-headless-button": DefineCustomElement<
|
|
12992
14623
|
HelixHeadlessButton,
|
|
12993
14624
|
HelixHeadlessButtonVueProps,
|
|
12994
14625
|
HelixHeadlessButtonVueEvents
|
|
12995
14626
|
>;
|
|
12996
|
-
/** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon region's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. Set 'tone-label' to say the name in another language. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. The tone's name stays on the region around it. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
|
|
14627
|
+
/** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon region's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. Set 'tone-label' to say the name in another language. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. The tone's name stays on the region around it. Set 'dismissible' for a note a reader may put away, as Shoelace's 'closable' alert does. The button fires 'helix-dismiss' and the callout stays until a listener removes it, so the page decides whether it comes back. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
|
|
12997
14628
|
"helix-headless-callout": DefineCustomElement<
|
|
12998
14629
|
HelixHeadlessCallout,
|
|
12999
14630
|
HelixHeadlessCalloutVueProps,
|
|
@@ -13017,37 +14648,37 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13017
14648
|
HelixHeadlessCanvasVueProps,
|
|
13018
14649
|
HelixHeadlessCanvasVueEvents
|
|
13019
14650
|
>;
|
|
13020
|
-
/** The header, body, and footer regions are slots, because they have no state, behavior, or API of their own. You bring your own markup, so a title can be a real '<h2>'. The host is the surface. The element itself takes the border, the radius, and the grid, so you style 'Card' directly and there is no wrapper part to reach through with '::part'. Name the card with 'aria-label' or 'aria-labelledby'. These are the only names that work with server rendering, because reading a title from the light DOM needs a DOM, and the server has none. */
|
|
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. */
|
|
13021
14652
|
"helix-headless-card": DefineCustomElement<
|
|
13022
14653
|
HelixHeadlessCard,
|
|
13023
14654
|
HelixHeadlessCardVueProps,
|
|
13024
14655
|
HelixHeadlessCardVueEvents
|
|
13025
14656
|
>;
|
|
13026
|
-
/** 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. The arrow keys along the track move between them, Up and Down on a vertical carousel, and Home and End go to the first and the last. Without 'loop', Previous on the first slide and Next on the last are marked 'aria-disabled'. */
|
|
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. The arrow keys along the track move between them, Up and Down on a vertical carousel, and Home and End go to the first and the last. Without 'loop', Previous on the first slide and Next on the last are marked 'aria-disabled'. **'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'. */
|
|
13027
14658
|
"helix-headless-carousel": DefineCustomElement<
|
|
13028
14659
|
HelixHeadlessCarousel,
|
|
13029
14660
|
HelixHeadlessCarouselVueProps,
|
|
13030
14661
|
HelixHeadlessCarouselVueEvents
|
|
13031
14662
|
>;
|
|
13032
|
-
/** The composer is a separate element so you can replace it. If you need attachments, slash commands, or a model picker, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. */
|
|
14663
|
+
/** The composer is a separate element so you can replace it. If you need attachments, slash commands, or a model picker, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. **In a form, the draft is the composer's value**, submitted under 'name'. A form reset puts back the 'value' the markup declared, and a '<fieldset disabled>' turns the composer off. Sending is still 'helix-send', and it does not submit the form. **'typing' says whether the user is writing**, and 'helix-typing' is sent each time it changes: when they start, and when they send or stop for 'typing-timeout' milliseconds. Pass it on to show "is typing" to the other side. */
|
|
13033
14664
|
"helix-headless-chat-composer": DefineCustomElement<
|
|
13034
14665
|
HelixHeadlessChatComposer,
|
|
13035
14666
|
HelixHeadlessChatComposerVueProps,
|
|
13036
14667
|
HelixHeadlessChatComposerVueEvents
|
|
13037
14668
|
>;
|
|
13038
|
-
/** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. */
|
|
14669
|
+
/** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. A screen reader names the turn by its author and its time, such as "You, 2 minutes ago". The author is 'author-label', or "You" for 'me', or the 'author' itself where it is a name; give a turn by 'them' an 'author-label' to name it. The chat it sits in holds the sentence and the word for 'me', so a page in another language sets them once there. The time moves on by itself, so "now" becomes "1 minute ago" while the page is open. */
|
|
13039
14670
|
"helix-headless-chat-message": DefineCustomElement<
|
|
13040
14671
|
HelixHeadlessChatMessage,
|
|
13041
14672
|
HelixHeadlessChatMessageVueProps,
|
|
13042
14673
|
HelixHeadlessChatMessageVueEvents
|
|
13043
14674
|
>;
|
|
13044
|
-
/** 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 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, pass the turns as children. */
|
|
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. Show the other side's typing in the 'status' slot. 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 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, pass the turns as children. */
|
|
13045
14676
|
"helix-headless-chat": DefineCustomElement<
|
|
13046
14677
|
HelixHeadlessChat,
|
|
13047
14678
|
HelixHeadlessChatVueProps,
|
|
13048
14679
|
HelixHeadlessChatVueEvents
|
|
13049
14680
|
>;
|
|
13050
|
-
/** The host is the group. It has 'role="group"' through internals, and 'label' names it. Without a name, screen readers announce the checkboxes as separate controls. **Each checkbox submits its own value.** Checkboxes are already form-associated, and a native group is several inputs that share a name, so the group adds no form value of its own. It adds the grouping, a shared 'name' that you write once, and one place to read and write the whole set. 'value' is the checked values, separated by commas, in the order the checkboxes are written, read from the boxes themselves. Setting it checks exactly those values and unchecks the rest. A checkbox is a member wherever it sits inside the group, in a row or a grid cell of your own, unless another group inside this one holds it. A field of another kind inside the group, such as an "Other" text field, sends its own 'input' and 'change' past the group. **The group shows the message you set in 'feedback'.** It is form-associated only for validity and never calls 'setFormValue', so the browser does not generate a message for it. */
|
|
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. */
|
|
13051
14682
|
"helix-headless-checkbox-group": DefineCustomElement<
|
|
13052
14683
|
HelixHeadlessCheckboxGroup,
|
|
13053
14684
|
HelixHeadlessCheckboxGroupVueProps,
|
|
@@ -13059,7 +14690,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13059
14690
|
HelixHeadlessCheckboxVueProps,
|
|
13060
14691
|
HelixHeadlessCheckboxVueEvents
|
|
13061
14692
|
>;
|
|
13062
|
-
/** Renders a '<pre><code>' pair: 'pre' keeps the whitespace, and 'code' marks it as code. Long lines scroll inside the block and do not wrap, because a line break can be significant in code. A copy button is on by default. Set 'no-copy' to remove it. The button copies the slotted text, so there is no second copy of the code to keep in sync. For a fragment of code inside a sentence, use 'Code'. Set 'diff' to show a change. Put a unified diff, the output of 'git diff' or 'diff -u', in the same slot, and the block draws the lines it added and removed. The block never computes a diff itself. Line numbers come from the hunk headers and are hidden from the accessibility tree. Changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change does not depend on color. Each file in the patch is its own block under its own name, and its copy button copies the new version of the file. 'variant="split"' shows the old version beside the new, each removal opposite its replacement. On the server, the slot renders as ordinary code, so a diff first appears as the patch text in a '<pre>'. The client makes the same first render, which keeps hydration clean, and draws the diff once it can read the content. Diff mode is experimental. The rest of the family is stable. */
|
|
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. */
|
|
13063
14694
|
"helix-headless-code-block": DefineCustomElement<
|
|
13064
14695
|
HelixHeadlessCodeBlock,
|
|
13065
14696
|
HelixHeadlessCodeBlockVueProps,
|
|
@@ -13071,67 +14702,67 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13071
14702
|
HelixHeadlessCodeVueProps,
|
|
13072
14703
|
HelixHeadlessCodeVueEvents
|
|
13073
14704
|
>;
|
|
13074
|
-
/** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)', and 'hsl(0 100% 50%)'. It writes colors in the syntax that 'format' names. The field shows the value without reformatting it, because half-typed input does not survive a round trip through a formatter. Date Input does the same with dates. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does, so the message about a color it cannot read waits until you are done. Dragging in the panel sends 'input' as the color moves and 'change' when it settles. The component sets '--color-input-swatch', so do not set it yourself. It holds the resolved color, so the styled tier can paint the swatch without parsing the value. */
|
|
14705
|
+
/** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)', and 'hsl(0 100% 50%)'. It writes colors in the syntax that 'format' names. The field shows the value without reformatting it, because half-typed input does not survive a round trip through a formatter. Date Input does the same with dates. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does, so the message about a color it cannot read waits until you are done. Dragging in the panel sends 'input' as the color moves and 'change' when it settles. The trigger and ArrowDown open the panel with focus in the square. Tab moves between the panel's controls without leaving it, and Escape closes it and returns focus to the field. The component sets '--color-input-swatch', so do not set it yourself. It holds the resolved color, so the styled tier can paint the swatch without parsing the value. */
|
|
13075
14706
|
"helix-headless-color-input": DefineCustomElement<
|
|
13076
14707
|
HelixHeadlessColorInput,
|
|
13077
14708
|
HelixHeadlessColorInputVueProps,
|
|
13078
14709
|
HelixHeadlessColorInputVueEvents
|
|
13079
14710
|
>;
|
|
13080
|
-
/** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. The square is one tab stop. In it, the up and down arrows move brightness and the left and right arrows move saturation, and PageUp and PageDown move brightness by ten. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. */
|
|
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. */
|
|
13081
14712
|
"helix-headless-color-picker": DefineCustomElement<
|
|
13082
14713
|
HelixHeadlessColorPicker,
|
|
13083
14714
|
HelixHeadlessColorPickerVueProps,
|
|
13084
14715
|
HelixHeadlessColorPickerVueEvents
|
|
13085
14716
|
>;
|
|
13086
|
-
/** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. ArrowDown and ArrowUp open the list on the chosen option, and Enter chooses the highlighted one. Space, Home, End and letters edit the text, and Enter in a closed field is left to the form. Emptying the field and leaving it clears a single choice; Escape puts the chosen words back. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
|
|
14717
|
+
/** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. ArrowDown and ArrowUp open the list on the chosen option, and Enter chooses the highlighted one. As typing narrows the list, a screen reader hears how many options are left, such as "3 results". Space, Home, End and letters edit the text, and Enter in a closed field is left to the form. Emptying the field and leaving it clears a single choice; Escape puts the chosen words back, and a second Escape on the closed field clears the choice. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
|
|
13087
14718
|
"helix-headless-combobox": DefineCustomElement<
|
|
13088
14719
|
HelixHeadlessCombobox,
|
|
13089
14720
|
HelixHeadlessComboboxVueProps,
|
|
13090
14721
|
HelixHeadlessComboboxVueEvents
|
|
13091
14722
|
>;
|
|
13092
|
-
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. */
|
|
14723
|
+
/** The list is a 'Listbox', which handles filtering, the empty state, the match highlight, 'aria-activedescendant', scrolling an option into view, and moving between options with the keyboard. The palette adds a dialog and a hotkey that opens it. The palette keeps no value. It is not a form control and submits nothing. Choosing an option dispatches 'helix-select' once. To remember the last command, store it yourself. An option with 'href' is a link to a page, which the browser follows once the palette has closed. The hotkey listener is on the document, so the hotkey works from anywhere on the page, including inside another control's text field, whether or not the palette is open. 'mod' means Command on a Mac and Control elsewhere, so you write one binding. The filter is cleared when the palette closes, so each opening starts from the full list. Combobox and Select do the same. As typing narrows the list, a screen reader hears how many commands are left, such as "3 commands". */
|
|
13093
14724
|
"helix-headless-command": DefineCustomElement<
|
|
13094
14725
|
HelixHeadlessCommand,
|
|
13095
14726
|
HelixHeadlessCommandVueProps,
|
|
13096
14727
|
HelixHeadlessCommandVueEvents
|
|
13097
14728
|
>;
|
|
13098
|
-
/** Copies text to the clipboard and confirms the copy. The platform gives no feedback for a clipboard write, so without a confirmation a press that copies looks the same as one that fails. The confirmation and the event wait for the write to finish. The browser can refuse a clipboard write, for example on an insecure origin, in a document that is not focused, or after a gesture that does not qualify. A refused write
|
|
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'. */
|
|
13099
14730
|
"helix-headless-copy-button": DefineCustomElement<
|
|
13100
14731
|
HelixHeadlessCopyButton,
|
|
13101
14732
|
HelixHeadlessCopyButtonVueProps,
|
|
13102
14733
|
HelixHeadlessCopyButtonVueEvents
|
|
13103
14734
|
>;
|
|
13104
|
-
/** 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. 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: - The arrow keys move one cell, and Home and End to the ends of the row. - Control with Home or End moves to the first or the last cell of the grid. - Page Up and Page Down move by the rows that fit in view. - Enter or F2 moves into the cell's controls, and Escape moves back to the cell. Tab moves between the controls of one cell. - Enter or Space on a sortable heading sorts by it, and Space on a row of a 'selectable' table selects it. 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'. */
|
|
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: - The arrow keys move one cell, and Home and End to the ends of the row. - Control with Home or End moves to the first or the last cell of the grid. - Page Up and Page Down move by the rows that fit in view. - Enter or F2 moves into the cell's controls, and Escape moves back to the cell. Tab moves between the controls of one cell. - Enter or Space on a sortable heading sorts by it, and Space on a row of a 'selectable' table selects it. - In a 'selectable' table, Shift with Up or Down selects the rows it moves across, Shift with Space selects every row from the one last chosen, and Control or Command with A selects every row. - Typing letters moves to the next row whose row header starts with them. 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'. */
|
|
13105
14736
|
"helix-headless-data-table": DefineCustomElement<
|
|
13106
14737
|
HelixHeadlessDataTable,
|
|
13107
14738
|
HelixHeadlessDataTableVueProps,
|
|
13108
14739
|
HelixHeadlessDataTableVueEvents
|
|
13109
14740
|
>;
|
|
13110
|
-
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger
|
|
14741
|
+
/** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger and ArrowDown open the calendar with focus on the selected day, Tab moves between the calendar's controls without leaving it, and Escape closes it and returns focus to the field. A press into the field opens the calendar too. Tab into the field opens nothing, and Tab out of the field closes the calendar. With 'segmented', the field is a row of segments in place of the text: a month, a day and a year in the order the locale writes them, each set with digits or the arrow keys. Alt+Down opens the calendar from a segment. */
|
|
13111
14742
|
"helix-headless-date-input": DefineCustomElement<
|
|
13112
14743
|
HelixHeadlessDateInput,
|
|
13113
14744
|
HelixHeadlessDateInputVueProps,
|
|
13114
14745
|
HelixHeadlessDateInputVueEvents
|
|
13115
14746
|
>;
|
|
13116
|
-
/** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
|
|
14747
|
+
/** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. 'max-view' makes the heading a button that steps back to the months of the year, and with 'year' to a page of years, as Zag's date picker does. The arrows, Home, End and the page keys move there, Enter or a press chooses, and Escape goes back to the days. 'isDateUnavailable' and 'dayContent' are properties for a script: a rule that bars dates, and what each day shows in place of its number. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
|
|
13117
14748
|
"helix-headless-date-picker": DefineCustomElement<
|
|
13118
14749
|
HelixHeadlessDatePicker,
|
|
13119
14750
|
HelixHeadlessDatePickerVueProps,
|
|
13120
14751
|
HelixHeadlessDatePickerVueEvents
|
|
13121
14752
|
>;
|
|
13122
|
-
/** 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. */
|
|
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. */
|
|
13123
14754
|
"helix-headless-description-list-item": DefineCustomElement<
|
|
13124
14755
|
HelixHeadlessDescriptionListItem,
|
|
13125
14756
|
HelixHeadlessDescriptionListItemVueProps,
|
|
13126
14757
|
HelixHeadlessDescriptionListItemVueEvents
|
|
13127
14758
|
>;
|
|
13128
|
-
/** Renders a '<dl>', with each item's label as a '<dt>' and its value as a '<dd>', for panels such as "Owner: Ada, Region: us-east, Created: 3 days ago". A screen reader announces which label goes with which value and how many pairs there are. **Each item renders its own term and description**, and the list takes the items through its slot. The accessibility tree is built from the flattened tree, so the pairs appear inside the list. Measured in Chromium, the result matches a plain '<dl>' with the same content node for node, both with a slotted label and with an item set to 'display: contents'. */
|
|
14759
|
+
/** Renders a '<dl>', with each item's label as a '<dt>' and its value as a '<dd>', for panels such as "Owner: Ada, Region: us-east, Created: 3 days ago". A screen reader announces which label goes with which value and how many pairs there are. **Each item renders its own term and description**, and the list takes the items through its slot. The accessibility tree is built from the flattened tree, so the pairs appear inside the list. Measured in Chromium, the result matches a plain '<dl>' with the same content node for node, both with a slotted label and with an item set to 'display: contents'. **A named list is a named group.** A '<dl>' takes no name in ARIA 1.2, so the list becomes a group around it when it has 'label', 'aria-label' or 'aria-labelledby', and the name lands on the group. Unnamed, the host adds nothing to the tree. */
|
|
13129
14760
|
"helix-headless-description-list": DefineCustomElement<
|
|
13130
14761
|
HelixHeadlessDescriptionList,
|
|
13131
14762
|
HelixHeadlessDescriptionListVueProps,
|
|
13132
14763
|
HelixHeadlessDescriptionListVueEvents
|
|
13133
14764
|
>;
|
|
13134
|
-
/** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. While it is open, the page behind it does not scroll. */
|
|
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'. */
|
|
13135
14766
|
"helix-headless-dialog": DefineCustomElement<
|
|
13136
14767
|
HelixHeadlessDialog,
|
|
13137
14768
|
HelixHeadlessDialogVueProps,
|
|
@@ -13143,13 +14774,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13143
14774
|
HelixHeadlessDividerVueProps,
|
|
13144
14775
|
HelixHeadlessDividerVueEvents
|
|
13145
14776
|
>;
|
|
13146
|
-
/** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. The ring is
|
|
14777
|
+
/** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. The ring is hidden from screen readers. The 'summary' part names the chart, from 'label' or the table's caption, and gives each slice's share, and the table beside the chart has every amount. **The ring is read by key.** The plot takes focus, named by 'label' or the caption. Every arrow moves from slice to slice, the right and down arrows to the next, and Home and End go to the first and the last. The tooltip follows, the 'live' part says the slice in words, and Escape puts the tooltip away. */
|
|
13147
14778
|
"helix-headless-donut-chart": DefineCustomElement<
|
|
13148
14779
|
HelixHeadlessDonutChart,
|
|
13149
14780
|
HelixHeadlessDonutChartVueProps,
|
|
13150
14781
|
HelixHeadlessDonutChartVueEvents
|
|
13151
14782
|
>;
|
|
13152
|
-
/** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
|
|
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> ''' */
|
|
13153
14784
|
"helix-headless-drawer": DefineCustomElement<
|
|
13154
14785
|
HelixHeadlessDrawer,
|
|
13155
14786
|
HelixHeadlessDrawerVueProps,
|
|
@@ -13161,7 +14792,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13161
14792
|
HelixHeadlessDrilldownItemVueProps,
|
|
13162
14793
|
HelixHeadlessDrilldownItemVueEvents
|
|
13163
14794
|
>;
|
|
13164
|
-
/** 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. 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. */
|
|
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 does, and holds still under reduced motion. 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. */
|
|
13165
14796
|
"helix-headless-drilldown": DefineCustomElement<
|
|
13166
14797
|
HelixHeadlessDrilldown,
|
|
13167
14798
|
HelixHeadlessDrilldownVueProps,
|
|
@@ -13173,7 +14804,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13173
14804
|
HelixHeadlessEmptyVueProps,
|
|
13174
14805
|
HelixHeadlessEmptyVueEvents
|
|
13175
14806
|
>;
|
|
13176
|
-
/** File Input keeps a real '<input type="file">' and makes it invisible. Only a file input opens the file picker: the browser opens it for a click on the input or on a '<label>' that points at it, and a script cannot open it on its own. A custom button would still call '.click()' on a hidden input, and a screen reader would find two controls. The input holds the label, the name, the validity, and the focus, and the visible trigger is a '<label for>'. The label is not focusable. The input is, and Enter and Space on it open the picker. */
|
|
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. */
|
|
13177
14808
|
"helix-headless-file-input": DefineCustomElement<
|
|
13178
14809
|
HelixHeadlessFileInput,
|
|
13179
14810
|
HelixHeadlessFileInputVueProps,
|
|
@@ -13203,13 +14834,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13203
14834
|
HelixHeadlessFilterOperatorVueProps,
|
|
13204
14835
|
HelixHeadlessFilterOperatorVueEvents
|
|
13205
14836
|
>;
|
|
13206
|
-
/** Tokens are your own elements, slotted in. A filter can be a facet with a prefix, a saved query, or a range, and these belong to your model, so the element does not render tokens from a list of strings. Removing a token is a request the element fires, and you apply it. Combobox works the other way: its tokens show a selection it owns, drawn from the options it was given. 'value' is the typed text. Every keystroke fires 'input' with the text on the element, so a table can narrow as the user types.
|
|
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. A form receives the text under 'name', and then one more entry under 'name' for each token: its 'value' attribute, or for a 'FilterChip', its field and values written 'field:values' as the field reads them typed. Backspace in an empty field fires 'helix-dismiss' on the last token, the same event its remove control fires, so one handler covers the pointer and the keyboard. **Typed filters.** The field parses only the fields you declare. Write 'FilterField' elements, usually inside the 'FilterMenu' slotted into 'start', so the picker and the text share one set. On Enter, the field reads the text against them. 'disposition:refunded,settled' and '-disposition:refunded' fire 'helix-facet' exactly as ticking those values in the picker would, and the parsed text is removed. Everything else stays, so 'refund tuesday disposition:settled' is a filter and a search at once. Helix defines the punctuation and you define every word. 'grammar.ts' has the full rule, so read it before you rely on it. A field with no 'FilterField' in it parses nothing. A field whose values cannot be listed, such as 'assignee:ada', goes directly inside this element, outside the menu. It is not assigned to a slot, so nothing draws it and the menu has no page for it, and the grammar still reads it. **Suggestions.** Slot options into 'suggestions' and the field shows them, moves through them with the arrow keys, and presses one on Enter. The option fires its own 'helix-select', and you decide what choosing it means. Keys before a colon and values after it use the same panel with different contents. 'filter-suggestions' narrows the panel to the options whose words hold the term at the caret, after its colon, ignoring case and accents, and hides the rest. 'readFilterText' is exported so you can narrow it yourself against partly typed text. While the panel is open, a reader hears how many suggestions it offers. The panel opens when it has options and closes when it has none, and a choice does not close it, so after picking a key you see its values next. Use 'selectionStart' and 'setSelectionRange' to write a completion back and put the caret after it, or the next parse reads the wrong term. **State.** Three things have three different owners: - 'value' is the text. The user types, the element applies it, and 'input' reports it. Setting 'value' seeds or corrects the text, and the next keystroke overwrites it, even in React. To control the value, cancel 'helix-before-change' and write the value you want, as with every field in this library. 'default-value' seeds the field. - 'open' is the suggestions panel. Cancel 'helix-before-open' or 'helix-before-close' to control it, and use 'default-open' to seed it. - Tokens are your elements in a slot and hold no state. A token goes when you remove it from your markup after 'helix-dismiss'. A 'FilterChip' naming a declared field works differently, because the picker holds what is ticked and removing the chip alone would leave its value ticked in the hidden menu. Its dismissal is treated as the field being filtered by nothing, so it fires 'helix-facet' like every other change, and the chip goes when the filter goes. */
|
|
13207
14838
|
"helix-headless-filter-input": DefineCustomElement<
|
|
13208
14839
|
HelixHeadlessFilterInput,
|
|
13209
14840
|
HelixHeadlessFilterInputVueProps,
|
|
13210
14841
|
HelixHeadlessFilterInputVueEvents
|
|
13211
14842
|
>;
|
|
13212
|
-
/** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. */
|
|
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. */
|
|
13213
14844
|
"helix-headless-format-date": DefineCustomElement<
|
|
13214
14845
|
HelixHeadlessFormatDate,
|
|
13215
14846
|
HelixHeadlessFormatDateVueProps,
|
|
@@ -13221,7 +14852,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13221
14852
|
HelixHeadlessGraphVueProps,
|
|
13222
14853
|
HelixHeadlessGraphVueEvents
|
|
13223
14854
|
>;
|
|
13224
|
-
/** A grid of cells, each colored by a tone. 'rows="1"' makes a status strip, and 'rows="7"' makes a contribution graph. GitHub's contribution graph uses five discrete levels, which a set of tones covers. Color in a heatmap is per cell. In every other Helix chart, color is per series, so ninety differently colored cells would need ninety series. **The data is a real '<table>' named by 'for'**, as in every Helix chart, and the table is the accessible representation. Hide it with 'data-hidden-visually', and screen readers still read it. A cell takes its tone from its own 'data-tone', or from 'thresholds' and 'tones' applied to its value. 'data-tone' wins, so when you already know a day was degraded, you can set the tone directly. **The headless tier does not resolve tone names.** A tone named 'success' writes '--heatmap-tone: var(--heatmap-tone-success)', and the styled tier or your own stylesheet defines that property. The headless tier does not use 'var(--helix-color-*)'. */
|
|
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. */
|
|
13225
14856
|
"helix-headless-heatmap": DefineCustomElement<
|
|
13226
14857
|
HelixHeadlessHeatmap,
|
|
13227
14858
|
HelixHeadlessHeatmapVueProps,
|
|
@@ -13233,7 +14864,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13233
14864
|
HelixHeadlessIconButtonVueProps,
|
|
13234
14865
|
HelixHeadlessIconButtonVueEvents
|
|
13235
14866
|
>;
|
|
13236
|
-
/** The icons are Phosphor, drawn on a 256 box at stroke-width 16. Each glyph renders its full inner markup, because most icons are several elements, each with its own stroke and fill. The markup is generated at build time from SVG files in this repository and never comes from user input, so rendering it with 'unsafeSVG' is safe. The '<svg>' carries 'fill="currentColor"'. The generator keeps only the inner markup, and Phosphor sets its fill on the root tag that the generator discards. Without it, the 65 solid glyphs fall back to black and disappear on a dark background. Shapes that set their own 'fill' or 'stroke' are unaffected. A name with no match renders nothing, and the element fires 'error', so a typo in a name can be heard. An icon is decorative by default and hidden from assistive technology. Set 'label' only when the icon is the only carrier of meaning, such as in a button with no text. An 'aria-label' on the element works too: the element is then an image with that name. */
|
|
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. */
|
|
13237
14868
|
"helix-headless-icon": DefineCustomElement<
|
|
13238
14869
|
HelixHeadlessIcon,
|
|
13239
14870
|
HelixHeadlessIconVueProps,
|
|
@@ -13251,55 +14882,55 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13251
14882
|
HelixHeadlessInputVueProps,
|
|
13252
14883
|
HelixHeadlessInputVueEvents
|
|
13253
14884
|
>;
|
|
13254
|
-
/** Renders a '<kbd>' element. Each element holds one key, except when you use 'keys'. For a sequence or a chord, write one element per key and put the separator between them as text, such as "then" or "plus". 'keys' renders the right glyphs for the platform. Given 'mod', it renders '⌘K' on Apple devices and 'Ctrl+K' everywhere else. A '⌘K' typed into a template is wrong for anyone on Windows. The element binds the shortcut only when 'within' is set. By default it draws the key and listens for nothing. */
|
|
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. */
|
|
13255
14886
|
"helix-headless-kbd": DefineCustomElement<
|
|
13256
14887
|
HelixHeadlessKbd,
|
|
13257
14888
|
HelixHeadlessKbdVueProps,
|
|
13258
14889
|
HelixHeadlessKbdVueEvents
|
|
13259
14890
|
>;
|
|
13260
|
-
/** Renders a legend as a list, separate from any chart, so any chart can use one. Set 'for' to the table the chart reads, and the legend takes its entries from that table, so the two always match. 'entries' sets how the table is read: - 'series': one entry per data column, named by the header row. Use it for a line or bar chart. - 'categories': one entry per body row. Use it for a donut, whose slices are the rows and which has no axis to name them on. - 'measures': drops the first data column. Use it for a scatter. The table is resolved on the client. There is no server pass. */
|
|
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. */
|
|
13261
14892
|
"helix-headless-legend": DefineCustomElement<
|
|
13262
14893
|
HelixHeadlessLegend,
|
|
13263
14894
|
HelixHeadlessLegendVueProps,
|
|
13264
14895
|
HelixHeadlessLegendVueEvents
|
|
13265
14896
|
>;
|
|
13266
|
-
/** Wraps one piece of content in the lightbox, such as a picture, a video frame, or a chart. The lightbox shows one item at a time, and the root decides which. An item that is not current is hidden and stays in the DOM, as a 'TabPanel' does. Crawlers can read it, it is in the server-rendered markup, and an '<img>' that has decoded does not decode again when you go back to it. */
|
|
14897
|
+
/** Wraps one piece of content in the lightbox, such as a picture, a video frame, or a chart. The lightbox shows one item at a time, and the root decides which. Each item is a 'group' with the role description 'slide', named by its 'label' or, without one, by its place in the set, such as "2 of 5", as the APG carousel pattern names a slide. The lightbox supplies both words, so they are translated on the lightbox. An item that is not current is hidden and stays in the DOM, as a 'TabPanel' does. Crawlers can read it, it is in the server-rendered markup, and an '<img>' that has decoded does not decode again when you go back to it. */
|
|
13267
14898
|
"helix-headless-lightbox-item": DefineCustomElement<
|
|
13268
14899
|
HelixHeadlessLightboxItem,
|
|
13269
14900
|
HelixHeadlessLightboxItemVueProps,
|
|
13270
14901
|
HelixHeadlessLightboxItemVueEvents
|
|
13271
14902
|
>;
|
|
13272
|
-
/** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
|
|
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. */
|
|
13273
14904
|
"helix-headless-lightbox": DefineCustomElement<
|
|
13274
14905
|
HelixHeadlessLightbox,
|
|
13275
14906
|
HelixHeadlessLightboxVueProps,
|
|
13276
14907
|
HelixHeadlessLightboxVueEvents
|
|
13277
14908
|
>;
|
|
13278
|
-
/** A line chart shows the shape of each series: where the readings went. The scale covers the range of the data. Including zero in the range of a series that moves between 980 and 1020 would flatten the line into a rule across the top of the box. 'BarChart' always starts at zero, because a bar's length is its value. Set 'zero' when the distance from zero is the point. Every series shares one scale, as in the bar chart. 'area' fills each series down to the floor on its own, so the fills overlap. For a total made of parts, use 'Area Chart', which stacks the series so the top edge is the total and each band is a share. The labels are HTML beside the drawing, as in 'BarChart'. Text inside an '<svg>' that fills its box scales with the box, so the same 'font-size' can render at 10px in a narrow chart and 43px in a wide one. The table is the accessible representation, and the drawing is
|
|
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. */
|
|
13279
14910
|
"helix-headless-line-chart": DefineCustomElement<
|
|
13280
14911
|
HelixHeadlessLineChart,
|
|
13281
14912
|
HelixHeadlessLineChartVueProps,
|
|
13282
14913
|
HelixHeadlessLineChartVueEvents
|
|
13283
14914
|
>;
|
|
13284
|
-
/** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the row a link.** The component wraps the leading content, the label, and the description in an '<a part="link">' inside the row, as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. **The 'end' slot sits beside the link, outside it**, so a button or a menu there is a control of its own: a click on it does not follow the link, and its name is not part of the link's. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. */
|
|
14915
|
+
/** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the row a link.** The component wraps the leading content, the label, and the description in an '<a part="link">' inside the row, as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. **The 'end' slot sits beside the link, outside it**, so a button or a menu there is a control of its own: a click on it does not follow the link, and its name is not part of the link's. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. 'current' marks the row a reader is on, such as the page in a list of pages, with 'aria-current' on its link, or on the row where it has none. **In a list with 'selection-mode', the row is a row of a grid.** The list gives it its role, its place in the one tab stop and, where the list selects, whether it is selected. Its link leaves the tab order there, and Enter follows it from the row. */
|
|
13285
14916
|
"helix-headless-list-item": DefineCustomElement<
|
|
13286
14917
|
HelixHeadlessListItem,
|
|
13287
14918
|
HelixHeadlessListItemVueProps,
|
|
13288
14919
|
HelixHeadlessListItemVueEvents
|
|
13289
14920
|
>;
|
|
13290
|
-
/** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". */
|
|
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. Up and Down move between rows, Home and End go to the first and the last, and a typed letter goes to the next row starting with it. Left and Right move between the row and the controls in its 'end' slot. 'single' selects one row at a time and 'multiple' any number, with Space or a press, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. Enter acts on the row: it follows the row's link, or sends 'helix-action' from the row. 'none' selects nothing, so a press acts too. A 'disabled' row is passed over. **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. */
|
|
13291
14922
|
"helix-headless-list": DefineCustomElement<
|
|
13292
14923
|
HelixHeadlessList,
|
|
13293
14924
|
HelixHeadlessListVueProps,
|
|
13294
14925
|
HelixHeadlessListVueEvents
|
|
13295
14926
|
>;
|
|
13296
|
-
/** The listbox is the control, and options are its items. A Select is a listbox with a trigger in front of it, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. They differ only in what opens the list and what filters it. With 'multiple' set, 'value' is a comma-separated string, like 'Checkbox.Group''s, because 'MixinControllerValue' holds a string. The form receives one entry per selected option, as a native '<select multiple>' sends it, so your server does not split on commas. Selected and active are separate. The selected option is the value. The active option is where the keyboard is: the arrow keys move it, and 'aria-activedescendant' points to it while focus stays on the list. The arrow keys, Home, End, PageUp and PageDown move the highlight, and typed letters move it to the next option whose words start with them. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. With 'multiple', Space toggles the highlighted option, Shift with an arrow adds the option it moves to, and Control+A or Command+A chooses every option, or none where all are chosen. In a filter field, Space, Home, End and letters edit the text. */
|
|
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'. */
|
|
13297
14928
|
"helix-headless-listbox": DefineCustomElement<
|
|
13298
14929
|
HelixHeadlessListbox,
|
|
13299
14930
|
HelixHeadlessListboxVueProps,
|
|
13300
14931
|
HelixHeadlessListboxVueEvents
|
|
13301
14932
|
>;
|
|
13302
|
-
/** Draws two concentric circles: a track and a moving arc. The track shows the arc as a proportion of a whole, and costs one element. **The center is a slot, empty by default.** Put your logo there once, where your app wraps the loader. When nothing is slotted, nothing extra is rendered. Slotted content does not rotate. Only the arc moves, so a logo stays readable. The role is set on the host through 'ElementInternals'. A 'role' in the shadow root would leave the host itself without a role in the light DOM, and a 'role' attribute on the host would be missing from React server-rendered markup. */
|
|
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. */
|
|
13303
14934
|
"helix-headless-loader": DefineCustomElement<
|
|
13304
14935
|
HelixHeadlessLoader,
|
|
13305
14936
|
HelixHeadlessLoaderVueProps,
|
|
@@ -13353,7 +14984,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13353
14984
|
HelixHeadlessMapRasterVueProps,
|
|
13354
14985
|
HelixHeadlessMapRasterVueEvents
|
|
13355
14986
|
>;
|
|
13356
|
-
/** Wraps a map drawn by MapLibre, Leaflet, or another renderer. The frame adds a name for the map, a column of controls, and a strip for the map credit. Helix does not draw the map itself. The controls are one column, and 'controls' names which ones: 'fullscreen', 'layers', 'tilt', 'zoom', and 'compass', top to bottom. 'zoom compass fullscreen' by default. The compass's needle points north as the map turns, and pressing it turns the map to face north. Add 'pan' and 'rotate' for buttons around the compass that move and turn the map. Dragging is otherwise the only way a pointer moves the map, so add them where the map has to be usable without dragging, as WCAG 2.2 asks at level AA. The arrow keys pan the map and Shift with Left or Right turns it either way. The pan and zoom buttons and the arrow keys send 'helix-map-pan' and 'helix-map-zoom'. Move your map in response, or connect it with 'connectMap' from '@fusion.dev/helix-map', which does this for you. Add 'tilt' to 'controls' for the 3D button, which a map with 3D buildings or terrain needs. It is a toggle. Pressed, it tilts the map 50 degrees, and 'connectMap' raises the buildings and the ground. Pressed again, it makes the map flat, and lays them flat too. Shift with Up or Down tilts the map in steps. Turning and tilting send 'helix-map-rotate' and 'helix-map-tilt', which 'connectMap' answers on MapLibre. Leaflet draws maps flat and does not rotate. Add 'layers' to 'controls' for a layers button. It opens a menu with a tile for each layer, which sets the layer's 'hidden' attribute. Layers with the same 'group', such as a route and its dotted legs, share one tile. A tile sends 'helix-before-toggle' from the layer first, so you can store the choice or refuse it. Imagery, a 'helix-map-raster' with 'ground', is a map type and not a tile. The menu opens with a card for each type, Standard, Hybrid, and Satellite, with a picture of the map in it, and 'map-type' says which is chosen. Standard hides the imagery, Hybrid draws it under the roads and names, and Satellite draws it alone. Choosing one sends 'helix-before-change' with its name, and 'change' once 'map-type' holds it. 'connectMap' does not draw a hidden layer, so a layer you write with 'hidden' starts turned off. Markers, routes, areas, live positions, and points layers go inside the frame as child elements. */
|
|
14987
|
+
/** Wraps a map drawn by MapLibre, Leaflet, or another renderer. The frame adds a name for the map, a column of controls, and a strip for the map credit. Helix does not draw the map itself. The controls are one column, and 'controls' names which ones: 'fullscreen', 'layers', 'tilt', 'zoom', and 'compass', top to bottom. 'zoom compass fullscreen' by default. The compass's needle points north as the map turns, and pressing it turns the map to face north. Add 'pan' and 'rotate' for buttons around the compass that move and turn the map. Dragging is otherwise the only way a pointer moves the map, so add them where the map has to be usable without dragging, as WCAG 2.2 asks at level AA. The arrow keys pan the map and Shift with Left or Right turns it either way. The pan and zoom buttons and the arrow keys send 'helix-map-pan' and 'helix-map-zoom'. Move your map in response, or connect it with 'connectMap' from '@fusion.dev/helix-map', which does this for you. Add 'tilt' to 'controls' for the 3D button, which a map with 3D buildings or terrain needs. It is a toggle. Pressed, it tilts the map 50 degrees, and 'connectMap' raises the buildings and the ground. Pressed again, it makes the map flat, and lays them flat too. Shift with Up or Down tilts the map in steps. Turning and tilting send 'helix-map-rotate' and 'helix-map-tilt', which 'connectMap' answers on MapLibre. Leaflet draws maps flat and does not rotate. Add 'layers' to 'controls' for a layers button. It opens a menu with a tile for each layer, which sets the layer's 'hidden' attribute. Layers with the same 'group', such as a route and its dotted legs, share one tile. A tile sends 'helix-before-toggle' from the layer first, so you can store the choice or refuse it, and 'helix-toggle' from it once 'hidden' holds the choice. Imagery, a 'helix-map-raster' with 'ground', is a map type and not a tile. The menu opens with a card for each type, Standard, Hybrid, and Satellite, with a picture of the map in it, and 'map-type' says which is chosen. Standard hides the imagery, Hybrid draws it under the roads and names, and Satellite draws it alone. Choosing one sends 'helix-before-change' with its name, and 'change' once 'map-type' holds it. 'connectMap' does not draw a hidden layer, so a layer you write with 'hidden' starts turned off. Markers, routes, areas, live positions, and points layers go inside the frame as child elements. */
|
|
13357
14988
|
"helix-headless-map": DefineCustomElement<
|
|
13358
14989
|
HelixHeadlessMap,
|
|
13359
14990
|
HelixHeadlessMapVueProps,
|
|
@@ -13371,31 +15002,37 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13371
15002
|
HelixHeadlessMapTerrainVueProps,
|
|
13372
15003
|
HelixHeadlessMapTerrainVueEvents
|
|
13373
15004
|
>;
|
|
13374
|
-
/** 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. */
|
|
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: the one opening is ':state(from-start)' or ':state(from-end)', by where the one closing sits in the bar, and the one closing is ':state(to-start)' or ':state(to-end)'. A stylesheet slides them on that. Put megamenus in a 'Navigation' with 'arrows' and the arrow keys move between their triggers. */
|
|
13375
15006
|
"helix-headless-megamenu": DefineCustomElement<
|
|
13376
15007
|
HelixHeadlessMegamenu,
|
|
13377
15008
|
HelixHeadlessMegamenuVueProps,
|
|
13378
15009
|
HelixHeadlessMegamenuVueEvents
|
|
13379
15010
|
>;
|
|
13380
|
-
/** 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. */
|
|
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. */
|
|
13381
15012
|
"helix-headless-menu-item": DefineCustomElement<
|
|
13382
15013
|
HelixHeadlessMenuItem,
|
|
13383
15014
|
HelixHeadlessMenuItemVueProps,
|
|
13384
15015
|
HelixHeadlessMenuItemVueEvents
|
|
13385
15016
|
>;
|
|
13386
|
-
/** 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. */
|
|
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. */
|
|
13387
15018
|
"helix-headless-menu": DefineCustomElement<
|
|
13388
15019
|
HelixHeadlessMenu,
|
|
13389
15020
|
HelixHeadlessMenuVueProps,
|
|
13390
15021
|
HelixHeadlessMenuVueEvents
|
|
13391
15022
|
>;
|
|
15023
|
+
/** The rows inside it are the menu's rows: the arrow keys and typed letters move through them with the rest, and a set of 'exclusive' rows is still the run of them next to each other. The section is a 'group' named by its heading, as React Aria's menu section is, so a screen reader says which group a row is in as it arrives. A section goes on the menu's first page. A submenu's page takes rows and dividers. */
|
|
15024
|
+
"helix-headless-menu-section": DefineCustomElement<
|
|
15025
|
+
HelixHeadlessMenuSection,
|
|
15026
|
+
HelixHeadlessMenuSectionVueProps,
|
|
15027
|
+
HelixHeadlessMenuSectionVueEvents
|
|
15028
|
+
>;
|
|
13392
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. */
|
|
13393
15030
|
"helix-headless-meter": DefineCustomElement<
|
|
13394
15031
|
HelixHeadlessMeter,
|
|
13395
15032
|
HelixHeadlessMeterVueProps,
|
|
13396
15033
|
HelixHeadlessMeterVueEvents
|
|
13397
15034
|
>;
|
|
13398
|
-
/** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Any value but 'false' counts, so a sidebar of sections on one page can mark the section in view with 'aria-current="location"'. Where several are marked, 'page' wins. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. */
|
|
15035
|
+
/** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Any value but 'false' counts, so a sidebar of sections on one page can mark the section in view with 'aria-current="location"'. Where several are marked, 'page' wins. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. Set 'arrows' and the arrow keys move focus between the destinations, as Radix's navigation menu does: left and right along a row, up and down a column, Home and End to the ends. A 'Megamenu' among them is reached at its trigger. Tab still stops at every link, since a navigation is a list of links and not a single control, and the keys across the other axis are left to the page and to an open panel. */
|
|
13399
15036
|
"helix-headless-navigation": DefineCustomElement<
|
|
13400
15037
|
HelixHeadlessNavigation,
|
|
13401
15038
|
HelixHeadlessNavigationVueProps,
|
|
@@ -13413,19 +15050,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13413
15050
|
HelixHeadlessNotificationVueProps,
|
|
13414
15051
|
HelixHeadlessNotificationVueEvents
|
|
13415
15052
|
>;
|
|
13416
|
-
/** Notifications are slotted children. Each one is your own markup, with an avatar, a link, or a button in it. Feeds usually hold tens of items, so writing them out lets an item hold anything. The list does not virtualize. Windowing needs the list to own the data, and here you own it, so N notifications are N elements. For a feed of thousands, use a data table with a custom cell. Read state is reported to you. Marking read goes from the root to the item and from the item to you, so a canceled 'helix-read' changes nothing, and if you own 'read', nothing changes until you set it. 'unread' is derived from the items and written to an attribute, so a stylesheet and a badge can both use it without counting. */
|
|
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. The button is hidden while the feed is loading. */
|
|
13417
15054
|
"helix-headless-notifications": DefineCustomElement<
|
|
13418
15055
|
HelixHeadlessNotifications,
|
|
13419
15056
|
HelixHeadlessNotificationsVueProps,
|
|
13420
15057
|
HelixHeadlessNotificationsVueEvents
|
|
13421
15058
|
>;
|
|
13422
|
-
/** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. */
|
|
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 described as a number field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. */
|
|
13423
15060
|
"helix-headless-number-input": DefineCustomElement<
|
|
13424
15061
|
HelixHeadlessNumberInput,
|
|
13425
15062
|
HelixHeadlessNumberInputVueProps,
|
|
13426
15063
|
HelixHeadlessNumberInputVueEvents
|
|
13427
15064
|
>;
|
|
13428
|
-
/** 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. Up and Down move between rows, Right opens a branch or moves into it, Left closes it or moves to its parent, and Home and End move to the first and last rows. Typing moves to the next row whose key starts with what was typed, and '*' opens every branch beside the active row. Focus stays on the tree, and 'aria-activedescendant' marks the active row. Each row carries its real level, position, and set size, including in a windowed 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. */
|
|
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. Up and Down move between rows, Right opens a branch or moves into it, Left closes it or moves to its parent, and Home and End move to the first and last rows. Typing moves to the next row whose key starts with what was typed, and '*' opens every branch beside the active row. Focus stays on the tree, and 'aria-activedescendant' marks the active row. Each row carries its real level, position, and set size, including in a windowed tree. '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. */
|
|
13429
15066
|
"helix-headless-object-inspector": DefineCustomElement<
|
|
13430
15067
|
HelixHeadlessObjectInspector,
|
|
13431
15068
|
HelixHeadlessObjectInspectorVueProps,
|
|
@@ -13437,13 +15074,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13437
15074
|
HelixHeadlessOptionGroupVueProps,
|
|
13438
15075
|
HelixHeadlessOptionGroupVueEvents
|
|
13439
15076
|
>;
|
|
13440
|
-
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. */
|
|
15077
|
+
/** Options are their own family, separate from Select, because an option belongs to a listbox and several controls contain one. 'role="option"' requires an owning 'role="listbox"'. A Select is a listbox with a trigger, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. 'Radio' is a part of its group, because a radio has only one kind of owner. Selection works the way it does for a radio. Choosing an option dispatches an event, the listbox decides whether the choice stands, and the listbox sets 'selected'. Filtering belongs to the owner, which hides an option with 'hidden'. What counts as a match differs between a select and a command palette. An option with 'href' is a link: choosing it follows the link and selects nothing, as an entry in a command palette that goes to a page does. */
|
|
13441
15078
|
"helix-headless-option": DefineCustomElement<
|
|
13442
15079
|
HelixHeadlessOption,
|
|
13443
15080
|
HelixHeadlessOptionVueProps,
|
|
13444
15081
|
HelixHeadlessOptionVueEvents
|
|
13445
15082
|
>;
|
|
13446
|
-
/** 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 a nested
|
|
15083
|
+
/** 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'. 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. */
|
|
13447
15084
|
"helix-headless-outline": DefineCustomElement<
|
|
13448
15085
|
HelixHeadlessOutline,
|
|
13449
15086
|
HelixHeadlessOutlineVueProps,
|
|
@@ -13455,7 +15092,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13455
15092
|
HelixHeadlessPaginationVueProps,
|
|
13456
15093
|
HelixHeadlessPaginationVueEvents
|
|
13457
15094
|
>;
|
|
13458
|
-
/** 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. */
|
|
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. */
|
|
13459
15096
|
"helix-headless-pagination-size": DefineCustomElement<
|
|
13460
15097
|
HelixHeadlessPaginationSize,
|
|
13461
15098
|
HelixHeadlessPaginationSizeVueProps,
|
|
@@ -13467,13 +15104,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13467
15104
|
HelixHeadlessPaginationSummaryVueProps,
|
|
13468
15105
|
HelixHeadlessPaginationSummaryVueEvents
|
|
13469
15106
|
>;
|
|
13470
|
-
/** Each cell is its own '<input>', so every box has a real focus ring, caret, and tab stop. Input longer than one character is treated as a paste, in any cell. This covers pasting, a browser autofilling an SMS code, and a password manager, which all put the whole code into the focused box. A six-character code that arrives in cell three fills from cell three. The code is one value to a form. The cells are in a shadow root and submit nothing. The host is form-associated and submits the joined string, which also carries validity and responds to a form reset. Only the first cell has 'autocomplete="one-time-code"', because the hint applies to the whole field. The row of cells always runs left to right, with 'dir="ltr"', including in Arabic and Hebrew. The first box is the leftmost, a paste fills to the right, and the right arrow moves to the next box. The label, hint, and feedback follow the page's direction. */
|
|
15107
|
+
/** Each cell is its own '<input>', so every box has a real focus ring, caret, and tab stop. Input longer than one character is treated as a paste, in any cell. This covers pasting, a browser autofilling an SMS code, and a password manager, which all put the whole code into the focused box. A six-character code that arrives in cell three fills from cell three. The code is one value to a form. The cells are in a shadow root and submit nothing. The host is form-associated and submits the joined string, which also carries validity and responds to a form reset. Only the first cell has 'autocomplete="one-time-code"', because the hint applies to the whole field. 'autosubmit' submits the form once the last box is filled, through the form's default button where there is one. 'format' draws separators between the boxes, such as the dash in '###-###', as text a screen reader skips. Delete removes the character in the focused box and pulls the rest of the code back, as Backspace removes the one before it. The row of cells always runs left to right, with 'dir="ltr"', including in Arabic and Hebrew. The first box is the leftmost, a paste fills to the right, and the right arrow moves to the next box. The label, hint, and feedback follow the page's direction. */
|
|
13471
15108
|
"helix-headless-pin-input": DefineCustomElement<
|
|
13472
15109
|
HelixHeadlessPinInput,
|
|
13473
15110
|
HelixHeadlessPinInputVueProps,
|
|
13474
15111
|
HelixHeadlessPinInputVueEvents
|
|
13475
15112
|
>;
|
|
13476
|
-
/** Popover is the general overlay that the specific ones build on. 'Menu' holds commands, 'Select' holds options, and 'Tooltip' holds a description. Popover holds any content you put in it, so it has no keyboard handling of its own. The trigger is slotted and stays your own element. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. It closes on Escape, on a press outside it, and when focus moves out of the trigger and the panel to somewhere else on the page.
|
|
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. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. **Opening moves focus into the panel**, to the first control in it, or to the panel itself where it holds none, and closing from inside gives it back to the trigger. It closes on Escape, on a press outside it, and when focus moves out of the trigger and the panel to somewhere else on the page. 'modal' keeps 'Tab' inside the panel while it is open and says so with 'aria-modal', for a panel that has to be answered before the page goes on. Without it the popover does not trap focus. The panel's name is 'label' when you set it. Otherwise it is the first heading in the panel, or the elements an 'aria-labelledby' on the host names. 'arrow' draws a point on the panel's edge facing the trigger. The side the panel landed on is on the host as ':state(placed-top)' and its kin, and the trigger's width is on the panel as '--floating-anchor-inline-size', for a panel as wide as its trigger: '''css helix-popover::part(popover) { min-inline-size: var(--floating-anchor-inline-size); } ''' */
|
|
13477
15114
|
"helix-headless-popover": DefineCustomElement<
|
|
13478
15115
|
HelixHeadlessPopover,
|
|
13479
15116
|
HelixHeadlessPopoverVueProps,
|
|
@@ -13485,7 +15122,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13485
15122
|
HelixHeadlessProgressVueProps,
|
|
13486
15123
|
HelixHeadlessProgressVueEvents
|
|
13487
15124
|
>;
|
|
13488
|
-
/** The code is drawn as one '<path>'. Runs of adjacent dark modules are joined, so a row of eight is one horizontal move. A code of useful length has about a thousand modules, and an element for each would be a thousand nodes for one image. The element has 'role="img"' and an accessible name. Set the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. A higher level holds fewer characters, so a value that fits at 'M' can be too long once a logo raises the level to 'H'. A value too long for the level draws no code, and the element fires 'error'. */
|
|
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 the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. A higher level holds fewer characters, so a value that fits at 'M' can be too long once a logo raises the level to 'H'. A value too long for the level draws no code, and the element fires 'error'. 'toSvg()', 'toPng()' and 'download()' give the drawn code as a file of its own, in the colors it is drawn in, for a page that offers it to save or print, as Zag's download trigger does. */
|
|
13489
15126
|
"helix-headless-qr-code": DefineCustomElement<
|
|
13490
15127
|
HelixHeadlessQrCode,
|
|
13491
15128
|
HelixHeadlessQrCodeVueProps,
|
|
@@ -13497,7 +15134,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13497
15134
|
HelixHeadlessQuoteVueProps,
|
|
13498
15135
|
HelixHeadlessQuoteVueEvents
|
|
13499
15136
|
>;
|
|
13500
|
-
/** The group is the form control, and the radios are its options. A set of radios submits one answer, so the group owns the 'name', the 'value', and the validity. A radio outside a group is not a control. Checkboxes work the other way: each checkbox submits its own answer. 'MixinField' applies to the group for the same reason. The label, the hint, and the message describe the question, and the question belongs to the set. Selection moves up and state moves down. A radio dispatches an event when it is chosen, the group determines whether the choice stands, and the group writes 'selected' onto every radio. The group is the one source of which radio is on. 'value' is the current answer. 'defaultValue' is what the markup declared: the value until something is chosen, and where a reset returns. The two work like 'checked' and 'defaultChecked'. */
|
|
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. */
|
|
13501
15138
|
"helix-headless-radio-group": DefineCustomElement<
|
|
13502
15139
|
HelixHeadlessRadioGroup,
|
|
13503
15140
|
HelixHeadlessRadioGroupVueProps,
|
|
@@ -13509,31 +15146,31 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13509
15146
|
HelixHeadlessRadioVueProps,
|
|
13510
15147
|
HelixHeadlessRadioVueEvents
|
|
13511
15148
|
>;
|
|
13512
|
-
/** Supports half marks, so the value is not always an integer and the press targets are not the marks: five stars at a half step give ten places to press. The pointer handling and 'step' are built around half marks. A partial mark is the full mark, clipped. The filled marks are drawn over the empty marks and cut off partway, so any mark and any fraction work. A read-only rating displays a score, which is the most common use. It is announced as a displayed value and does not look disabled. */
|
|
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'. */
|
|
13513
15150
|
"helix-headless-rating": DefineCustomElement<
|
|
13514
15151
|
HelixHeadlessRating,
|
|
13515
15152
|
HelixHeadlessRatingVueProps,
|
|
13516
15153
|
HelixHeadlessRatingVueEvents
|
|
13517
15154
|
>;
|
|
13518
|
-
/** A scatter chart shows how two measures relate. The table's first numeric column is measured across, every other numeric column is measured up, and each row is one point. A table of countries with an income column and a life expectancy column draws one point for each country. Each additional numeric column is another series, in its own color. Both axes are labeled, because both positions are values. The ticks sit at round numbers, and the range extends to them. The summary gives each series' correlation coefficient and its number of points. The table has every number, and the drawing is
|
|
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. */
|
|
13519
15156
|
"helix-headless-scatter-chart": DefineCustomElement<
|
|
13520
15157
|
HelixHeadlessScatterChart,
|
|
13521
15158
|
HelixHeadlessScatterChartVueProps,
|
|
13522
15159
|
HelixHeadlessScatterChartVueEvents
|
|
13523
15160
|
>;
|
|
13524
|
-
/** 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". */
|
|
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'. */
|
|
13525
15162
|
"helix-headless-scroll-area": DefineCustomElement<
|
|
13526
15163
|
HelixHeadlessScrollArea,
|
|
13527
15164
|
HelixHeadlessScrollAreaVueProps,
|
|
13528
15165
|
HelixHeadlessScrollAreaVueEvents
|
|
13529
15166
|
>;
|
|
13530
|
-
/** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. In the open list the arrow keys, Home, End, PageUp, PageDown and typed letters move the highlight, and Enter, Space or a click chooses it and closes the list. Tab closes the list and moves on. On the closed trigger, ArrowDown, Enter and Space open the list on the chosen option, ArrowUp opens it on the chosen or last option, Home and End open it on the first or last, and typed letters choose the option whose words start with them, as a native '<select>' does. */
|
|
15167
|
+
/** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. Set 'valueContent' to draw the trigger's content from the chosen options, and several chosen options are written as a list in the reader's language. In the open list the arrow keys, Home, End, PageUp, PageDown and typed letters move the highlight, and Enter, Space or a click chooses it and closes the list. Tab closes the list and moves on. On the closed trigger, ArrowDown, Enter and Space open the list on the chosen option, ArrowUp opens it on the chosen or last option, Home and End open it on the first or last, and typed letters choose the option whose words start with them, as a native '<select>' does. */
|
|
13531
15168
|
"helix-headless-select": DefineCustomElement<
|
|
13532
15169
|
HelixHeadlessSelect,
|
|
13533
15170
|
HelixHeadlessSelectVueProps,
|
|
13534
15171
|
HelixHeadlessSelectVueEvents
|
|
13535
15172
|
>;
|
|
13536
|
-
/** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. */
|
|
15173
|
+
/** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. **Put the real content inside and set 'loading', and the skeleton takes its size.** While 'loading' is set the content is inert, the host is 'aria-busy', and the styled tier hides the content and paints the placeholder over its box, so nothing moves when the content arrives. Take 'loading' off and the content is shown as it is. An empty skeleton is a placeholder of its own size, as before. */
|
|
13537
15174
|
"helix-headless-skeleton": DefineCustomElement<
|
|
13538
15175
|
HelixHeadlessSkeleton,
|
|
13539
15176
|
HelixHeadlessSkeletonVueProps,
|
|
@@ -13545,7 +15182,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13545
15182
|
HelixHeadlessSkipLinkVueProps,
|
|
13546
15183
|
HelixHeadlessSkipLinkVueEvents
|
|
13547
15184
|
>;
|
|
13548
|
-
/** Renders a native '<input type="range">', so the drag, the arrow keys, Home, End, the page keys, and the touch target come from the platform. A native range has a hit area larger than its thumb, sized for a finger. The value is a string, like every other form control's, and 'MixinControllerValue' holds text. Use 'valueAsNumber' for arithmetic. Marks are drawn by the component. The ticks of a '<datalist>' cannot be styled, and Firefox does not render them for a range. Marks are decoration. 'step' sets where the value can land, and the input enforces it whether or not marks are drawn. 'markers' is a count, so a slider from zero to a hundred does not draw a hundred and one marks by accident. A range with two thumbs is two inputs stacked on one track, because there is no native two-thumb range. Each thumb keeps its own value. 'required' comes with the field mixin and cannot fail. A range is never empty: the platform shows its midpoint when no value is set, and 'willUpdate' seeds that midpoint into 'defaultValue', so the value matches the handle from the first render. HTML does not apply 'required' to a range either, so it is not set on the input. It only adds the marker beside the label. */
|
|
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. */
|
|
13549
15186
|
"helix-headless-slider": DefineCustomElement<
|
|
13550
15187
|
HelixHeadlessSlider,
|
|
13551
15188
|
HelixHeadlessSliderVueProps,
|
|
@@ -13587,13 +15224,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13587
15224
|
HelixHeadlessStatVueProps,
|
|
13588
15225
|
HelixHeadlessStatVueEvents
|
|
13589
15226
|
>;
|
|
13590
|
-
/** '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. */
|
|
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 leaves it, cancel 'helix-before-activate' while it is not valid. 'next()' and 'previous()' move one stage either way, under the same rules, for your own buttons. */
|
|
13591
15228
|
"helix-headless-steps": DefineCustomElement<
|
|
13592
15229
|
HelixHeadlessSteps,
|
|
13593
15230
|
HelixHeadlessStepsVueProps,
|
|
13594
15231
|
HelixHeadlessStepsVueEvents
|
|
13595
15232
|
>;
|
|
13596
|
-
/** Only the step's name is a button. The marker is 'aria-hidden' decoration, so it is outside the button. The name uses 'Button', so the hover wash, the focus ring, and the disabled style come from 'Button'. Every step can be pressed and fires 'helix-select'. To stop the user from moving to a step, set 'disabled' on it. The marker is a slot, and its fallback shows the step's state: a check for a finished stage, a target for the current stage, and an empty ring for a stage not reached yet. Only that one mark is rendered, so the accessibility tree has no hidden marks. The half lines on each side of the mark are drawn on the step's '::before' and '::after' from properties the list sets, so the step renders no extra element for them. */
|
|
15233
|
+
/** Only the step's name is a button. The marker is 'aria-hidden' decoration, so it is outside the button. The name uses 'Button', so the hover wash, the focus ring, and the disabled style come from 'Button'. Every step can be pressed and fires 'helix-select'. To stop the user from moving to a step, set 'disabled' on it. The marker is a slot, and its fallback shows the step's state: a check for a finished stage, a target for the current stage, and an empty ring for a stage not reached yet. Only that one mark is rendered, so the accessibility tree has no hidden marks. The half lines on each side of the mark are drawn on the step's '::before' and '::after' from properties the list sets, so the step renders no extra element for them. A finished stage says so in words: the name's button is described by 'complete-label', "Complete" unless you translate it, and a stage that becomes complete while the page is open says it once in a polite live region. The current stage's button carries 'aria-current="step"', and only the button, so the state is said once, on the control. */
|
|
13597
15234
|
"helix-headless-step": DefineCustomElement<
|
|
13598
15235
|
HelixHeadlessStep,
|
|
13599
15236
|
HelixHeadlessStepVueProps,
|
|
@@ -13617,127 +15254,139 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13617
15254
|
HelixHeadlessTableColumnVueProps,
|
|
13618
15255
|
HelixHeadlessTableColumnVueEvents
|
|
13619
15256
|
>;
|
|
13620
|
-
/** 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, so you can refuse it and reorder the rows yourself. 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. */
|
|
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, so you can refuse it and reorder the rows yourself. 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. 'selectable' adds a column of checkboxes. Each row is known by its 'value', and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. The checkbox in the heading selects every row. 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. */
|
|
13621
15258
|
"helix-headless-table": DefineCustomElement<
|
|
13622
15259
|
HelixHeadlessTable,
|
|
13623
15260
|
HelixHeadlessTableVueProps,
|
|
13624
15261
|
HelixHeadlessTableVueEvents
|
|
13625
15262
|
>;
|
|
13626
|
-
/** 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. */
|
|
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. */
|
|
13627
15264
|
"helix-headless-table-row": DefineCustomElement<
|
|
13628
15265
|
HelixHeadlessTableRow,
|
|
13629
15266
|
HelixHeadlessTableRowVueProps,
|
|
13630
15267
|
HelixHeadlessTableRowVueEvents
|
|
13631
15268
|
>;
|
|
13632
|
-
/** 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. */
|
|
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 takes the focus, for a panel with nothing focusable in it. */
|
|
13633
15270
|
"helix-headless-tab-panel": DefineCustomElement<
|
|
13634
15271
|
HelixHeadlessTabPanel,
|
|
13635
15272
|
HelixHeadlessTabPanelVueProps,
|
|
13636
15273
|
HelixHeadlessTabPanelVueEvents
|
|
13637
15274
|
>;
|
|
13638
|
-
/** 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. */
|
|
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, and the arrow keys move focus without choosing, so arrowing past a tab never leaves the page. 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. */
|
|
13639
15276
|
"helix-headless-tabs": DefineCustomElement<
|
|
13640
15277
|
HelixHeadlessTabs,
|
|
13641
15278
|
HelixHeadlessTabsVueProps,
|
|
13642
15279
|
HelixHeadlessTabsVueEvents
|
|
13643
15280
|
>;
|
|
13644
|
-
/** A tab is an element, because it manages selection and its own tab stop.
|
|
15281
|
+
/** A tab is an element, because it manages selection and its own tab stop. With an 'href', the tab is a link: 'role="tab"' on an '<a>', which a press, Enter and the browser's own link gestures follow. 'helix-select' is sent first, and canceling it keeps the browser from following, so a client-side router follows it instead. */
|
|
13645
15282
|
"helix-headless-tab": DefineCustomElement<
|
|
13646
15283
|
HelixHeadlessTab,
|
|
13647
15284
|
HelixHeadlessTabVueProps,
|
|
13648
15285
|
HelixHeadlessTabVueEvents
|
|
13649
15286
|
>;
|
|
13650
|
-
/** A
|
|
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'. */
|
|
15288
|
+
"helix-headless-tag-group": DefineCustomElement<
|
|
15289
|
+
HelixHeadlessTagGroup,
|
|
15290
|
+
HelixHeadlessTagGroupVueProps,
|
|
15291
|
+
HelixHeadlessTagGroupVueEvents
|
|
15292
|
+
>;
|
|
15293
|
+
/** A label that people can optionally remove. 'dismissible' is the difference from a badge: a badge shows a state that people cannot change, and a tag names something they can remove. The remove button sends 'helix-dismiss'. The tag does not remove itself, because your code owns the list it is in, so remove it in your handler. A listener can cancel 'helix-dismiss', and 'dismiss()' then returns 'false'. When the handler removes a tag whose remove button has focus, focus moves to the next tag's remove button, or to the previous one's after the last tag. The remove button is named for its tag, such as "Remove Apple", so a list of buttons says which tag each one removes. Write '{label}' in 'dismiss-label' to put the tag's words somewhere else, such as 'dismiss-label="{label} entfernen"'. 'href' makes the label a link, and 'disabled' takes the tag out of reach: its link and its remove button stop answering. **In a 'Tag.Group' a tag is a row of a grid.** The group gives it its role, its place in the one tab stop and, where the group selects, whether it is selected. Its remove button leaves the tab order there, Delete and Backspace doing its job from the row. */
|
|
13651
15294
|
"helix-headless-tag": DefineCustomElement<
|
|
13652
15295
|
HelixHeadlessTag,
|
|
13653
15296
|
HelixHeadlessTagVueProps,
|
|
13654
15297
|
HelixHeadlessTagVueEvents
|
|
13655
15298
|
>;
|
|
13656
|
-
/** Renders a '<textarea>', so the caret, selection, spellcheck, resize handle, and phone keyboard come from the platform. It is in the server markup, so the field works before any script loads. It is a separate element from 'Input' because Enter inserts a line break here. In a single-line field, Enter submits the form. 'rows' sets the starting height, and 'auto-grow' makes the field grow with its content. You can use both: 'rows' sets where an empty field begins. */
|
|
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. */
|
|
13657
15300
|
"helix-headless-textarea": DefineCustomElement<
|
|
13658
15301
|
HelixHeadlessTextarea,
|
|
13659
15302
|
HelixHeadlessTextareaVueProps,
|
|
13660
15303
|
HelixHeadlessTextareaVueEvents
|
|
13661
15304
|
>;
|
|
13662
|
-
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. */
|
|
15305
|
+
/** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds', because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. The trigger and ArrowDown open the list, and so does a press into the field; Tab into the field opens nothing. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. With 'segmented', the field is a row of segments in place of the text: an hour, a minute, and AM or PM where the clock has them, each set with digits or the arrow keys. Alt+Down opens the list from a segment. */
|
|
13663
15306
|
"helix-headless-time-input": DefineCustomElement<
|
|
13664
15307
|
HelixHeadlessTimeInput,
|
|
13665
15308
|
HelixHeadlessTimeInputVueProps,
|
|
13666
15309
|
HelixHeadlessTimeInputVueEvents
|
|
13667
15310
|
>;
|
|
13668
|
-
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. */
|
|
15311
|
+
/** Shows the times at each 'step' as a 'Listbox', which provides the keyboard behavior, typeahead, scrolling into view, and announcements for a set of options. 'variant="wheels"' shows a column each for the hour, the minute, and the meridiem, and one for the second with 'seconds'. Left and Right move between the wheels, and Tab does too. 'hour-cycle' writes every time on a twelve or a twenty-four hour clock whatever the locale, and 'seconds' holds times to the second. The step keeps the list usable. At the default of 15 minutes a day is 96 rows, which people can scroll or type into. At 1 minute it is 1,440. Use the list for the times your product offers, and Time Input for any time, the same way Date Input separates typing a date from picking one on the calendar. The value is always 'HH:mm' on a 24-hour clock, or 'HH:mm:ss' with 'seconds'. A form submits that shape, 'min' and 'max' compare against it, and it sorts as a string. Each row's text follows the person's own conventions, from 'Intl'. The chosen row is marked in the served markup. The listbox gets the answer as '.value', and Lit SSR serializes no property binding, so without more the 96 served rows would carry no mark until the listbox upgrades and runs 'place'. Each option also gets 'selected', an attribute binding that does serialize, and 'place' then writes the same answer from the same value. This is the same 'selected' you write on 'Option' elsewhere in Helix, and Date Picker marks its choice in markup for the same reason. The list and the wheels both do this, because each wheel is also a listbox. */
|
|
13669
15312
|
"helix-headless-time-picker": DefineCustomElement<
|
|
13670
15313
|
HelixHeadlessTimePicker,
|
|
13671
15314
|
HelixHeadlessTimePickerVueProps,
|
|
13672
15315
|
HelixHeadlessTimePickerVueEvents
|
|
13673
15316
|
>;
|
|
15317
|
+
/** Groups entries by date, such as "Today" and "Yesterday", in a timeline that holds many. The group is an entry of the timeline, and its entries are a list of their own, named by the heading. A screen reader lists the heading with the page's headings and hears how many entries each day holds. The heading's level is 'heading-level', and 3 where it is not set. Each group draws its own line, so the line stops at the last entry of one day and starts again at the first entry of the next. */
|
|
15318
|
+
"helix-headless-timeline-group": DefineCustomElement<
|
|
15319
|
+
HelixHeadlessTimelineGroup,
|
|
15320
|
+
HelixHeadlessTimelineGroupVueProps,
|
|
15321
|
+
HelixHeadlessTimelineGroupVueEvents
|
|
15322
|
+
>;
|
|
13674
15323
|
/** Given 'datetime', the label you write is wrapped in a '<time>' element, so a machine-readable value such as "2026-08-19" travels with a label such as "yesterday". Without 'datetime', the label is a '<span>'. Each entry draws the connector line that arrives at it and hides it when it is the first entry, using ':host(:first-child)'. This needs no index, no counting parent, and no script. 'Steps' and 'Breadcrumbs' work the same way. 'tone' sets the kind of event and is the only thing that colors the mark. It uses the same values as 'Announcement'. */
|
|
13675
15324
|
"helix-headless-timeline-item": DefineCustomElement<
|
|
13676
15325
|
HelixHeadlessTimelineItem,
|
|
13677
15326
|
HelixHeadlessTimelineItemVueProps,
|
|
13678
15327
|
HelixHeadlessTimelineItemVueEvents
|
|
13679
15328
|
>;
|
|
13680
|
-
/** A timeline is a record of events that happened or are scheduled. Each entry carries a time, and no entry is current or complete. For a process you move through, with a current stage and 'active' and 'complete' states, use 'Steps'. Each entry draws the connector line that arrives at it and hides it when it is first, using ':host(:first-child)'. This resolves at layout with no script, so the server markup is correct before anything runs. The host has 'role="list"', because the entries are your elements in the light DOM. 'Steps' does the same.
|
|
15329
|
+
/** A timeline is a record of events that happened or are scheduled. Each entry carries a time, and no entry is current or complete. For a process you move through, with a current stage and 'active' and 'complete' states, use 'Steps'. Each entry draws the connector line that arrives at it and hides it when it is first, using ':host(:first-child)'. This resolves at layout with no script, so the server markup is correct before anything runs. The host has 'role="list"', because the entries are your elements in the light DOM. 'Steps' does the same. **Group entries by date with 'Timeline.Group'**, which puts a heading such as "Today" over its entries. The group is an entry of the timeline, and its entries are a list of their own named by the heading. **The reading order is the order you write the entries in**, in every layout the styled tier draws: down the page, either side of a line down the middle, or across the page. Inside each entry the time is read before what happened. Write the entries in the order the events happened, oldest or newest first, and the layout only moves where they are drawn. */
|
|
13681
15330
|
"helix-headless-timeline": DefineCustomElement<
|
|
13682
15331
|
HelixHeadlessTimeline,
|
|
13683
15332
|
HelixHeadlessTimelineVueProps,
|
|
13684
15333
|
HelixHeadlessTimelineVueEvents
|
|
13685
15334
|
>;
|
|
13686
|
-
/** Each message is an element because it has a timeout, a tone, a dismiss control, and a lifetime that pauses. **Each item runs its own timer.** A timer held by the region would restart with each new message, and the last of three messages would stay for nine seconds. **Messages are inverted by default.** The item flips 'color-scheme', so a new message stands out from the page without using a color that carries meaning. */
|
|
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. A 'danger' message is its own assertive live region, so it is announced at once; every other one is announced politely by the region. A touch or a pen swipes a message toward the end of the line, and past halfway, or quickly, dismisses it through the same 'helix-dismiss' as its control. While it moves, the distance is on the 'item' part as '--toast-swipe-x'. **Messages are inverted by default.** The item flips 'color-scheme', so a new message stands out from the page without using a color that carries meaning. */
|
|
13687
15336
|
"helix-headless-toast-item": DefineCustomElement<
|
|
13688
15337
|
HelixHeadlessToastItem,
|
|
13689
15338
|
HelixHeadlessToastItemVueProps,
|
|
13690
15339
|
HelixHeadlessToastItemVueEvents
|
|
13691
15340
|
>;
|
|
13692
|
-
/** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is
|
|
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 a polite live region.** A 'danger' message is announced assertively, and every other one politely. Each message is an 'alertdialog' named by its words, so a reader who moves into the stack hears which message they are on. **'hotkey' takes focus to the stack and back**, F8 unless you set it, and 'label' says which key: '{hotkey}' in it is filled in, so the default name is "Notifications (F8)". Pressed while focus is in the stack, it gives focus back to where it was. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. **'add()' shows a message from script**, for a page with no framework state to render them from: it appends a message of the region's own tier and removes it once it has been dismissed and has finished leaving. Messages you render yourself stay yours, and the region never removes them. A touch or a pen swipes a message away toward the end of the line. **The stack is in the top layer.** The 'region' part is a 'popover="manual"' shown while a message is showing, and shown again above a modal dialog that opened after it. Position the 'region' part, which is the box in the top layer. While a modal 'Dialog', 'Drawer' or 'Lightbox' is open, the browser makes everything outside it inert, the stack included, so a message stays visible and its actions cannot be pressed. Where the browser has 'ariaNotify', a message that arrives then is announced through it. For a message with an action, render a second region inside the dialog. When a message with focus inside it is dismissed, focus moves to the next message, then the one before it, then back to where it was before it entered the stack. */
|
|
13693
15342
|
"helix-headless-toast": DefineCustomElement<
|
|
13694
15343
|
HelixHeadlessToast,
|
|
13695
15344
|
HelixHeadlessToastVueProps,
|
|
13696
15345
|
HelixHeadlessToastVueEvents
|
|
13697
15346
|
>;
|
|
13698
|
-
/** The indicator is one element that moves to the selected item. A single moving object is easier to follow than a fill that swaps, and it shows where the selection came from. Its size and position are measured from the selected item and written to the indicator as custom properties, because labels have different lengths. Measurement happens on the client, so the server renders the indicator hidden and it fades in once measured. */
|
|
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. */
|
|
13699
15348
|
"helix-headless-toggle-group": DefineCustomElement<
|
|
13700
15349
|
HelixHeadlessToggleGroup,
|
|
13701
15350
|
HelixHeadlessToggleGroupVueProps,
|
|
13702
15351
|
HelixHeadlessToggleGroupVueEvents
|
|
13703
15352
|
>;
|
|
13704
|
-
/** Renders a '<button role="radio">' for use as a form control. Do not use it for navigation. For navigation, use links marked with 'aria-current' and styled by the 'data-navigation-item' recipe in the base layer. The recipe has the same look, and links are not announced as choices. */
|
|
15353
|
+
/** Renders a '<button role="radio">' for use as a form control. In a group with 'selection-mode="multiple"' it is a '<button>' that says whether it is pressed with 'aria-pressed'. Do not use it for navigation. For navigation, use links marked with 'aria-current' and styled by the 'data-navigation-item' recipe in the base layer. The recipe has the same look, and links are not announced as choices. */
|
|
13705
15354
|
"helix-headless-toggle": DefineCustomElement<
|
|
13706
15355
|
HelixHeadlessToggle,
|
|
13707
15356
|
HelixHeadlessToggleVueProps,
|
|
13708
15357
|
HelixHeadlessToggleVueEvents
|
|
13709
15358
|
>;
|
|
13710
|
-
/** 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. 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. */
|
|
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. */
|
|
13711
15360
|
"helix-headless-toolbar": DefineCustomElement<
|
|
13712
15361
|
HelixHeadlessToolbar,
|
|
13713
15362
|
HelixHeadlessToolbarVueProps,
|
|
13714
15363
|
HelixHeadlessToolbarVueEvents
|
|
13715
15364
|
>;
|
|
13716
|
-
/** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit.
|
|
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. */
|
|
13717
15366
|
"helix-headless-tooltip": DefineCustomElement<
|
|
13718
15367
|
HelixHeadlessTooltip,
|
|
13719
15368
|
HelixHeadlessTooltipVueProps,
|
|
13720
15369
|
HelixHeadlessTooltipVueEvents
|
|
13721
15370
|
>;
|
|
13722
|
-
/** The root holds the order of the stops: which stop is current, what Next and Back do, and when the tour is finished. Each stop holds its target, and you write all the text. **The spotlight is a shadow.** The scrim is a box the size of the current target with a very large 'box-shadow' spread, and the shadow paints the darkness. A 'clip-path' on a full-screen scrim breaks as soon as an element between the scrim and the viewport is transformed. The root measures the target's position in the browser. Nothing is measured on the server, because a tour starts only on request. 'open', 'default-open', 'helix-before-open', 'helix-before-close' and 'toggle' work as they do on 'Dialog'. Setting 'open' starts the run, and 'skip()' and 'requestOpen(false)' end it early. **Focus follows the run.** Opening moves focus to the first stop's panel, and moving on from a control in a stop moves it to the next one. Ending the tour puts focus back on the element that had it when the tour opened, unless you have moved it somewhere else on the page. A stop does not trap focus, so you can still 'Tab' out to the element it describes. */
|
|
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. */
|
|
13723
15372
|
"helix-headless-tour": DefineCustomElement<
|
|
13724
15373
|
HelixHeadlessTour,
|
|
13725
15374
|
HelixHeadlessTourVueProps,
|
|
13726
15375
|
HelixHeadlessTourVueEvents
|
|
13727
15376
|
>;
|
|
13728
|
-
/** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text.
|
|
15377
|
+
/** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text. The 'heading' and 'description' slots are optional places for the title and the line under it, which then name and describe the panel. **A stop has a type.** Without one it is a bubble pointing at its target. 'type="dialog"' is a panel in the middle of the window, over a backdrop, for a welcome or a summary with nothing to point at. 'type="floating"' is a panel in a corner of the window, which the styled tier puts at the end of the line, for a note that points at nothing in particular. 'type="wait"' shows nothing: the tour waits for the element 'for' names to be on the page, such as a menu the reader has to open, and moves on by itself. **The buttons are slot fallback.** With nothing in the 'actions' slot, you get Back, Next, and Skip, already wired. Slot your own 'actions' and drive them with 'next()', 'back()', and 'skip()' on the root. **'for' is an id, as with 'Tooltip'**, so you can point at a target elsewhere on the page from markup. It resolves against the stop's root node, so a stop inside a shadow tree points at a target in that tree. The panel is a 'group', and a 'dialog' for a dialog stop, only while the stop is shown. It is named by the 'heading' slot, then by the first heading in the content, then by 'label', and otherwise by its place in the tour. It is described by the 'description' slot and by its place, such as "2 of 5", so a screen reader says where the reader is at every stop. 'focus()' moves focus to the panel, which is what the tour does when it opens or moves on. */
|
|
13729
15378
|
"helix-headless-tour-stop": DefineCustomElement<
|
|
13730
15379
|
HelixHeadlessTourStop,
|
|
13731
15380
|
HelixHeadlessTourStopVueProps,
|
|
13732
15381
|
HelixHeadlessTourStopVueEvents
|
|
13733
15382
|
>;
|
|
13734
|
-
/** '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. */
|
|
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. */
|
|
13735
15384
|
"helix-headless-tree-item": DefineCustomElement<
|
|
13736
15385
|
HelixHeadlessTreeItem,
|
|
13737
15386
|
HelixHeadlessTreeItemVueProps,
|
|
13738
15387
|
HelixHeadlessTreeItemVueEvents
|
|
13739
15388
|
>;
|
|
13740
|
-
/** 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. */
|
|
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'. */
|
|
13741
15390
|
"helix-headless-tree": DefineCustomElement<
|
|
13742
15391
|
HelixHeadlessTree,
|
|
13743
15392
|
HelixHeadlessTreeVueProps,
|
|
@@ -13761,19 +15410,19 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
13761
15410
|
HelixHeadlessVideoPlaylistMenuVueProps,
|
|
13762
15411
|
HelixHeadlessVideoPlaylistMenuVueEvents
|
|
13763
15412
|
>;
|
|
13764
|
-
/** **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. */
|
|
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. */
|
|
13765
15414
|
"helix-headless-video-playlist": DefineCustomElement<
|
|
13766
15415
|
HelixHeadlessVideoPlaylist,
|
|
13767
15416
|
HelixHeadlessVideoPlaylistVueProps,
|
|
13768
15417
|
HelixHeadlessVideoPlaylistVueEvents
|
|
13769
15418
|
>;
|
|
13770
|
-
/** 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: - Space and 'k' play or pause. - The arrow keys seek and change the volume. - 'm' mutes. - 'f' toggles fullscreen. '<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. */
|
|
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: - Space and 'k' play or pause. - The arrow keys seek and change the volume. - 'm' mutes. - 'f' toggles fullscreen. '<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. */
|
|
13771
15420
|
"helix-headless-video": DefineCustomElement<
|
|
13772
15421
|
HelixHeadlessVideo,
|
|
13773
15422
|
HelixHeadlessVideoVueProps,
|
|
13774
15423
|
HelixHeadlessVideoVueEvents
|
|
13775
15424
|
>;
|
|
13776
|
-
/** The items arrive as data: - 'for' names a '<script type="application/json">' that holds an array of
|
|
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. Up and Down move between items, Home and End go to the first and the last, and Page Up and Page Down move by a screen. An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. Tab moves on into the focused row's own links and buttons. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. 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. **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. 'scrollToIndex' takes a reader to an item. 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. */
|
|
13777
15426
|
"helix-headless-virtual-list": DefineCustomElement<
|
|
13778
15427
|
HelixHeadlessVirtualList,
|
|
13779
15428
|
HelixHeadlessVirtualListVueProps,
|