@fusion.dev/helix-headless 0.162.1 → 0.164.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 +1041 -47
- package/dist/callout/root/callout-root.d.ts +43 -4
- package/dist/callout/root/callout-root.js +58 -2
- package/dist/canvas/index.d.ts +1 -1
- package/dist/canvas/root/canvas-document.d.ts +33 -0
- package/dist/canvas/root/canvas-root.d.ts +50 -2
- package/dist/canvas/root/canvas-root.js +98 -3
- package/dist/chat/composer/chat-composer.js +1 -1
- package/dist/chat/root/chat-root.d.ts +15 -4
- package/dist/chat/root/chat-root.js +19 -8
- package/dist/code-block/patch.d.ts +42 -0
- package/dist/code-block/patch.js +118 -0
- package/dist/code-block/root/code-block-root.d.ts +37 -1
- package/dist/code-block/root/code-block-root.js +57 -9
- package/dist/color-picker/root/color-picker-root.d.ts +7 -3
- package/dist/color-picker/root/color-picker-root.js +7 -4
- package/dist/combobox/root/combobox-root.d.ts +1 -0
- package/dist/combobox/root/combobox-root.js +10 -1
- package/dist/data-table/root/data-table-root.d.ts +1 -0
- package/dist/data-table/root/data-table-root.js +1 -0
- package/dist/element-events.generated.js +7 -1
- package/dist/map/root/map-root.d.ts +8 -1
- package/dist/map/root/map-root.js +12 -0
- package/dist/menu/item/menu-item.d.ts +38 -7
- package/dist/menu/item/menu-item.js +20 -9
- package/dist/menu/root/menu-root.d.ts +10 -1
- package/dist/menu/root/menu-root.js +8 -3
- package/dist/object-inspector/root/object-inspector-root.d.ts +23 -0
- package/dist/object-inspector/root/object-inspector-root.js +19 -1
- package/dist/steps/root/steps-root.d.ts +7 -1
- package/dist/steps/root/steps-root.js +6 -1
- package/dist/table/grid-controller.d.ts +7 -0
- package/dist/table/grid-controller.js +15 -1
- package/dist/table/root/table-root.d.ts +10 -0
- package/dist/table/root/table-root.js +18 -1
- package/dist/video/root/video-root.js +2 -1
- package/dist/video-playlist/item/video-playlist-item.d.ts +8 -0
- package/dist/video-playlist/item/video-playlist-item.js +7 -0
- package/dist/video-playlist/root/video-playlist-root.d.ts +60 -0
- package/dist/video-playlist/root/video-playlist-root.js +55 -1
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +502 -40
- package/types/vue.d.ts +126 -14
- package/types/words.d.ts +58 -0
package/types/vue.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ import type {
|
|
|
25
25
|
CanvasNode,
|
|
26
26
|
CanvasNodeProps,
|
|
27
27
|
CanvasPath,
|
|
28
|
+
CanvasRoute,
|
|
29
|
+
CanvasRouteEnds,
|
|
28
30
|
CanvasSide,
|
|
29
31
|
CanvasTone,
|
|
30
32
|
fromJsonCanvas,
|
|
@@ -1553,6 +1555,11 @@ none.
|
|
|
1553
1555
|
takes away, where every button was "Dismiss". A label without `{label}` is
|
|
1554
1556
|
read as written. */
|
|
1555
1557
|
dismissLabel?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
|
|
1558
|
+
/** Whether the callout is showing. A dismissal nobody canceled turns it
|
|
1559
|
+
false and the callout hides itself, and setting it true shows the callout
|
|
1560
|
+
again. Not reflected: open is the resting state, so an `open` attribute
|
|
1561
|
+
would appear on markup a server sent without it. */
|
|
1562
|
+
open?: (HelixHeadlessCallout["open"]) | undefined;
|
|
1556
1563
|
/** What kind of attention the passage needs.
|
|
1557
1564
|
|
|
1558
1565
|
`tone` is the axis for what a thing means, and this is a subset of it: a
|
|
@@ -1589,7 +1596,7 @@ out keeps its English, and `tone-label` wins over both.
|
|
|
1589
1596
|
};
|
|
1590
1597
|
|
|
1591
1598
|
export type HelixHeadlessCalloutVueEvents = {
|
|
1592
|
-
/** The dismiss button was pressed.
|
|
1599
|
+
/** The dismiss button was pressed. Unless a listener cancels it, the callout hides itself, and a listener may remove it instead. Cancelable: cancel it to keep the callout showing. */
|
|
1593
1600
|
"helix-dismiss": HelixHeadlessCalloutHelixDismissElementEvent;
|
|
1594
1601
|
};
|
|
1595
1602
|
|
|
@@ -2175,6 +2182,13 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
|
|
|
2175
2182
|
"zoom-out-label"?: (HelixHeadlessCanvas["zoomOutLabel"]) | undefined;
|
|
2176
2183
|
/** The zoom out button's label. */
|
|
2177
2184
|
zoomOutLabel?: (HelixHeadlessCanvas["zoomOutLabel"]) | undefined;
|
|
2185
|
+
/** Draws every connection's line: a function from where it leaves and
|
|
2186
|
+
arrives, and the sides it does, to its SVG path and where its label sits.
|
|
2187
|
+
|
|
2188
|
+
Absent, or returning nothing for a connection, draws the board's own
|
|
2189
|
+
route. A function that throws draws the board's own too, and the error is
|
|
2190
|
+
reported to the page as an uncaught one. Set it as a property. */
|
|
2191
|
+
edgeRoute?: (HelixHeadlessCanvas["edgeRoute"]) | undefined;
|
|
2178
2192
|
/** The board's current view: the document's point at the middle of the view,
|
|
2179
2193
|
and the zoom.
|
|
2180
2194
|
|
|
@@ -3166,6 +3180,14 @@ app.ts", as `code-name-label` puts it. */
|
|
|
3166
3180
|
"collapse-label"?: (HelixHeadlessCodeBlock["collapseLabel"]) | undefined;
|
|
3167
3181
|
/** The expand button's words while the block shows every line. */
|
|
3168
3182
|
collapseLabel?: (HelixHeadlessCodeBlock["collapseLabel"]) | undefined;
|
|
3183
|
+
/** In a diff, how many unchanged lines to keep beside each change. Each
|
|
3184
|
+
longer run of unchanged lines is folded behind a button that shows it.
|
|
3185
|
+
Unset shows every line the diff holds. */
|
|
3186
|
+
"context-lines"?: (HelixHeadlessCodeBlock["contextLines"] | `${number}`) | undefined;
|
|
3187
|
+
/** In a diff, how many unchanged lines to keep beside each change. Each
|
|
3188
|
+
longer run of unchanged lines is folded behind a button that shows it.
|
|
3189
|
+
Unset shows every line the diff holds. */
|
|
3190
|
+
contextLines?: (HelixHeadlessCodeBlock["contextLines"]) | undefined;
|
|
3169
3191
|
/** The copy button's name and tooltip text after a copy. */
|
|
3170
3192
|
"copied-label"?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
|
|
3171
3193
|
/** The copy button's name and tooltip text after a copy. */
|
|
@@ -3204,6 +3226,14 @@ block lays out. Not for a diff, whose files each scroll on their own. */
|
|
|
3204
3226
|
"expand-label"?: (HelixHeadlessCodeBlock["expandLabel"]) | undefined;
|
|
3205
3227
|
/** The expand button's words while the cap hides lines. */
|
|
3206
3228
|
expandLabel?: (HelixHeadlessCodeBlock["expandLabel"]) | undefined;
|
|
3229
|
+
/** The words of a button that hides a run of unchanged lines it showed, in a
|
|
3230
|
+
diff with `context-lines`. `{count}` is how many, and each language
|
|
3231
|
+
writes the forms it has. */
|
|
3232
|
+
"hide-unchanged-label"?: (HelixHeadlessCodeBlock["hideUnchangedLabel"]) | undefined;
|
|
3233
|
+
/** The words of a button that hides a run of unchanged lines it showed, in a
|
|
3234
|
+
diff with `context-lines`. `{count}` is how many, and each language
|
|
3235
|
+
writes the forms it has. */
|
|
3236
|
+
hideUnchangedLabel?: (HelixHeadlessCodeBlock["hideUnchangedLabel"]) | undefined;
|
|
3207
3237
|
/** The block's name, usually a file name, drawn in the header.
|
|
3208
3238
|
|
|
3209
3239
|
Absent, the block is named by `language` where there is one. In a diff,
|
|
@@ -3279,6 +3309,12 @@ A false boolean reflects as the attribute's absence, so this costs no
|
|
|
3279
3309
|
reflected property taking no default is satisfied by the default being
|
|
3280
3310
|
`false`. */
|
|
3281
3311
|
noCopy?: (HelixHeadlessCodeBlock["noCopy"]) | undefined;
|
|
3312
|
+
/** The words of a button that shows a folded run of unchanged lines, in a
|
|
3313
|
+
diff with `context-lines`. `{count}` is how many. */
|
|
3314
|
+
"show-unchanged-label"?: (HelixHeadlessCodeBlock["showUnchangedLabel"]) | undefined;
|
|
3315
|
+
/** The words of a button that shows a folded run of unchanged lines, in a
|
|
3316
|
+
diff with `context-lines`. `{count}` is how many. */
|
|
3317
|
+
showUnchangedLabel?: (HelixHeadlessCodeBlock["showUnchangedLabel"]) | undefined;
|
|
3282
3318
|
/** How a diff's two versions are arranged. It has no effect without `diff`.
|
|
3283
3319
|
|
|
3284
3320
|
Absent is unified, each removal above its replacement, which fits any
|
|
@@ -10559,7 +10595,8 @@ was never tickable look identical from here. Announcing only the ticked one
|
|
|
10559
10595
|
as a checkbox tells a reader its siblings are commands, which is the one
|
|
10560
10596
|
thing they are not.
|
|
10561
10597
|
|
|
10562
|
-
`checked`
|
|
10598
|
+
`checked` and `exclusive` imply it, so a row that is on, or one of a set,
|
|
10599
|
+
never has to say both.
|
|
10563
10600
|
|
|
10564
10601
|
Choosing the row checks or unchecks it, after a `helix-before-toggle` that
|
|
10565
10602
|
you can cancel. */
|
|
@@ -10569,6 +10606,18 @@ you can cancel. */
|
|
|
10569
10606
|
The row changes it when it is chosen. Not reflected: the attribute is the
|
|
10570
10607
|
state you start the row in, and `:state(checked)` carries the current one. */
|
|
10571
10608
|
checked?: (HelixHeadlessMenuItem["checked"]) | undefined;
|
|
10609
|
+
/** Whether choosing the row closes the menu.
|
|
10610
|
+
|
|
10611
|
+
Unset takes the menu's `close-on-select`, which is on, and keeps the menu
|
|
10612
|
+
open after a Space on a choice row. Write `close-on-select="false"` for a
|
|
10613
|
+
row that changes something the reader is watching, such as a zoom step. */
|
|
10614
|
+
"close-on-select"?: (HelixHeadlessMenuItem["closeOnSelect"]) | undefined;
|
|
10615
|
+
/** Whether choosing the row closes the menu.
|
|
10616
|
+
|
|
10617
|
+
Unset takes the menu's `close-on-select`, which is on, and keeps the menu
|
|
10618
|
+
open after a Space on a choice row. Write `close-on-select="false"` for a
|
|
10619
|
+
row that changes something the reader is watching, such as a zoom step. */
|
|
10620
|
+
closeOnSelect?: (HelixHeadlessMenuItem["closeOnSelect"]) | undefined;
|
|
10572
10621
|
/** Whether the row is disabled, so it cannot be chosen. */
|
|
10573
10622
|
disabled?: (HelixHeadlessMenuItem["disabled"]) | undefined;
|
|
10574
10623
|
/** Whether the link downloads the file when the row is chosen.
|
|
@@ -10585,8 +10634,7 @@ that row and unchecks the others. Choosing the row that is checked leaves
|
|
|
10585
10634
|
it checked. `menuitemradio` tells a reader which kind of set they are in,
|
|
10586
10635
|
where `menuitemcheckbox` says every row is independent.
|
|
10587
10636
|
|
|
10588
|
-
|
|
10589
|
-
one of a set of anything. */
|
|
10637
|
+
It makes the row a choice, so it needs no `checkable` beside it. */
|
|
10590
10638
|
exclusive?: (HelixHeadlessMenuItem["exclusive"]) | undefined;
|
|
10591
10639
|
/** The URL the row links to. Setting it renders the row as a link.
|
|
10592
10640
|
|
|
@@ -10647,6 +10695,18 @@ export type HelixHeadlessMenuVueProps = {
|
|
|
10647
10695
|
"back-label"?: (HelixHeadlessMenu["backLabel"]) | undefined;
|
|
10648
10696
|
/** The text of the row that returns from a submenu. */
|
|
10649
10697
|
backLabel?: (HelixHeadlessMenu["backLabel"]) | undefined;
|
|
10698
|
+
/** Whether choosing a row closes the menu.
|
|
10699
|
+
|
|
10700
|
+
On by default, and a Space on a choice row leaves the menu open either way.
|
|
10701
|
+
Write `close-on-select="false"` to keep the menu open after every choice, as
|
|
10702
|
+
Ark UI's `closeOnSelect` does. A row's own `close-on-select` wins over this. */
|
|
10703
|
+
"close-on-select"?: (HelixHeadlessMenu["closeOnSelect"]) | undefined;
|
|
10704
|
+
/** Whether choosing a row closes the menu.
|
|
10705
|
+
|
|
10706
|
+
On by default, and a Space on a choice row leaves the menu open either way.
|
|
10707
|
+
Write `close-on-select="false"` to keep the menu open after every choice, as
|
|
10708
|
+
Ark UI's `closeOnSelect` does. A row's own `close-on-select` wins over this. */
|
|
10709
|
+
closeOnSelect?: (HelixHeadlessMenu["closeOnSelect"]) | undefined;
|
|
10650
10710
|
/** Whether the menu is the trigger's context menu: it opens where the reader
|
|
10651
10711
|
asks for one, with a right-click, a long press, Shift+F10 or the menu key. */
|
|
10652
10712
|
context?: (HelixHeadlessMenu["context"]) | undefined;
|
|
@@ -11517,6 +11577,12 @@ reader sees the shape of the value before its contents. `0` starts with the
|
|
|
11517
11577
|
root closed; a large number opens everything, which on a big value is the
|
|
11518
11578
|
wall of text this exists to avoid. */
|
|
11519
11579
|
defaultDepth?: (HelixHeadlessObjectInspector["defaultDepth"]) | undefined;
|
|
11580
|
+
/** What the tree says while there is no value to show, such as before a
|
|
11581
|
+
fetch answers. The `empty` slot replaces it. */
|
|
11582
|
+
"empty-label"?: (HelixHeadlessObjectInspector["emptyLabel"]) | undefined;
|
|
11583
|
+
/** What the tree says while there is no value to show, such as before a
|
|
11584
|
+
fetch answers. The `empty` slot replaces it. */
|
|
11585
|
+
emptyLabel?: (HelixHeadlessObjectInspector["emptyLabel"]) | undefined;
|
|
11520
11586
|
/** Text the tree is narrowed to: the entries whose key or value holds it,
|
|
11521
11587
|
ignoring case, and the branches that lead to them. Empty shows everything. */
|
|
11522
11588
|
filter?: (HelixHeadlessObjectInspector["filter"]) | undefined;
|
|
@@ -11586,6 +11652,12 @@ who set the property. This button is positioned out of the flow and takes no
|
|
|
11586
11652
|
room, so nothing selects on it, and reflection exists so that a selector can
|
|
11587
11653
|
reach a value. */
|
|
11588
11654
|
noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
|
|
11655
|
+
/** What the tree says while a filter matched no entry. The `empty` slot
|
|
11656
|
+
replaces it. */
|
|
11657
|
+
"no-matches-label"?: (HelixHeadlessObjectInspector["noMatchesLabel"]) | undefined;
|
|
11658
|
+
/** What the tree says while a filter matched no entry. The `empty` slot
|
|
11659
|
+
replaces it. */
|
|
11660
|
+
noMatchesLabel?: (HelixHeadlessObjectInspector["noMatchesLabel"]) | undefined;
|
|
11589
11661
|
/** What a screen reader hears when a filter matches one entry, where
|
|
11590
11662
|
`results-label` should not say it. `{count}` is the count. */
|
|
11591
11663
|
"result-label"?: (HelixHeadlessObjectInspector["resultLabel"]) | undefined;
|
|
@@ -17695,17 +17767,43 @@ export type HelixHeadlessVideoPlaylistHelixActivateElementEvent =
|
|
|
17695
17767
|
/** `helix-before-activate` event type */
|
|
17696
17768
|
export type HelixHeadlessVideoPlaylistHelixBeforeActivateElementEvent =
|
|
17697
17769
|
HelixHeadlessVideoPlaylistElementEvent<HelixBeforeActivateEvent>;
|
|
17770
|
+
/** `helix-before-reorder` event type */
|
|
17771
|
+
export type HelixHeadlessVideoPlaylistHelixBeforeReorderElementEvent =
|
|
17772
|
+
HelixHeadlessVideoPlaylistElementEvent<HelixBeforeReorderEvent>;
|
|
17698
17773
|
/** `helix-end` event type */
|
|
17699
17774
|
export type HelixHeadlessVideoPlaylistHelixEndElementEvent =
|
|
17700
17775
|
HelixHeadlessVideoPlaylistElementEvent<HelixEndEvent>;
|
|
17776
|
+
/** `helix-reorder` event type */
|
|
17777
|
+
export type HelixHeadlessVideoPlaylistHelixReorderElementEvent =
|
|
17778
|
+
HelixHeadlessVideoPlaylistElementEvent<HelixReorderEvent>;
|
|
17701
17779
|
|
|
17702
17780
|
export type HelixHeadlessVideoPlaylistVueProps = {
|
|
17781
|
+
/** What screen readers hear when a move is put back, in a `reorderable`
|
|
17782
|
+
playlist. `{name}` is the entry's words. */
|
|
17783
|
+
"canceled-label"?: (HelixHeadlessVideoPlaylist["canceledLabel"]) | undefined;
|
|
17784
|
+
/** What screen readers hear when a move is put back, in a `reorderable`
|
|
17785
|
+
playlist. `{name}` is the entry's words. */
|
|
17786
|
+
canceledLabel?: (HelixHeadlessVideoPlaylist["canceledLabel"]) | undefined;
|
|
17787
|
+
/** What screen readers hear when a moved entry is let go, in a `reorderable`
|
|
17788
|
+
playlist. `{name}` is the entry's words. */
|
|
17789
|
+
"dropped-label"?: (HelixHeadlessVideoPlaylist["droppedLabel"]) | undefined;
|
|
17790
|
+
/** What screen readers hear when a moved entry is let go, in a `reorderable`
|
|
17791
|
+
playlist. `{name}` is the entry's words. */
|
|
17792
|
+
droppedLabel?: (HelixHeadlessVideoPlaylist["droppedLabel"]) | undefined;
|
|
17703
17793
|
/** What the playlist says while it has no entries. The `empty` slot replaces it. */
|
|
17704
17794
|
"empty-label"?: (HelixHeadlessVideoPlaylist["emptyLabel"]) | undefined;
|
|
17705
17795
|
/** What the playlist says while it has no entries. The `empty` slot replaces it. */
|
|
17706
17796
|
emptyLabel?: (HelixHeadlessVideoPlaylist["emptyLabel"]) | undefined;
|
|
17707
17797
|
/** The list's name, read by screen readers. */
|
|
17708
17798
|
label?: (HelixHeadlessVideoPlaylist["label"]) | undefined;
|
|
17799
|
+
/** What screen readers hear each time a key moves an entry, in a
|
|
17800
|
+
`reorderable` playlist. `{name}` is the entry's words, `{position}` its
|
|
17801
|
+
new place, counting from 1, and `{count}` the number of entries. */
|
|
17802
|
+
"moved-label"?: (HelixHeadlessVideoPlaylist["movedLabel"]) | undefined;
|
|
17803
|
+
/** What screen readers hear each time a key moves an entry, in a
|
|
17804
|
+
`reorderable` playlist. `{name}` is the entry's words, `{position}` its
|
|
17805
|
+
new place, counting from 1, and `{count}` the number of entries. */
|
|
17806
|
+
movedLabel?: (HelixHeadlessVideoPlaylist["movedLabel"]) | undefined;
|
|
17709
17807
|
/** Stays on an entry when its clip ends, where the playlist would otherwise
|
|
17710
17808
|
play the next one. The player's controls, a press, and `next()` still
|
|
17711
17809
|
move. `repeat="one"` still plays the entry again. */
|
|
@@ -17714,6 +17812,12 @@ move. `repeat="one"` still plays the entry again. */
|
|
|
17714
17812
|
play the next one. The player's controls, a press, and `next()` still
|
|
17715
17813
|
move. `repeat="one"` still plays the entry again. */
|
|
17716
17814
|
noAdvance?: (HelixHeadlessVideoPlaylist["noAdvance"]) | undefined;
|
|
17815
|
+
/** What screen readers hear when a pointer picks up an entry, in a
|
|
17816
|
+
`reorderable` playlist. `{name}` is the entry's words. */
|
|
17817
|
+
"picked-up-label"?: (HelixHeadlessVideoPlaylist["pickedUpLabel"]) | undefined;
|
|
17818
|
+
/** What screen readers hear when a pointer picks up an entry, in a
|
|
17819
|
+
`reorderable` playlist. `{name}` is the entry's words. */
|
|
17820
|
+
pickedUpLabel?: (HelixHeadlessVideoPlaylist["pickedUpLabel"]) | undefined;
|
|
17717
17821
|
/** What the live region says when the playlist moves to another entry.
|
|
17718
17822
|
`{title}` is the entry's name.
|
|
17719
17823
|
|
|
@@ -17728,6 +17832,10 @@ playlist starts the next one, and the only other trace of that is the
|
|
|
17728
17832
|
playlist starts the next one, and the only other trace of that is the
|
|
17729
17833
|
`aria-current` on a button the reader is not on. */
|
|
17730
17834
|
playingLabel?: (HelixHeadlessVideoPlaylist["playingLabel"]) | undefined;
|
|
17835
|
+
/** Lets a reader move the entries, with Alt and the arrow keys or by
|
|
17836
|
+
dragging one. The playlist moves no entry itself: you move your entries
|
|
17837
|
+
on `helix-reorder`. */
|
|
17838
|
+
reorderable?: (HelixHeadlessVideoPlaylist["reorderable"]) | undefined;
|
|
17731
17839
|
/** What happens when an entry ends with no next one to go to. `one` plays the
|
|
17732
17840
|
same entry again, and `all` goes from the last entry back to the first.
|
|
17733
17841
|
Absent, the playlist stops on the last entry and sends `helix-end`.
|
|
@@ -17764,8 +17872,12 @@ export type HelixHeadlessVideoPlaylistVueEvents = {
|
|
|
17764
17872
|
"helix-activate": HelixHeadlessVideoPlaylistHelixActivateElementEvent;
|
|
17765
17873
|
/** The current entry is about to change, and `detail.cause` says why: `press`, `next`, `previous`, `ended`, or `removed`. Cancelable: cancel it to keep the current entry. */
|
|
17766
17874
|
"helix-before-activate": HelixHeadlessVideoPlaylistHelixBeforeActivateElementEvent;
|
|
17875
|
+
/** An entry was moved to a new place, in a `reorderable` playlist, with every entry's value in the new order in `detail.keys`. Cancelable: cancel it to keep the entry where it is. */
|
|
17876
|
+
"helix-before-reorder": HelixHeadlessVideoPlaylistHelixBeforeReorderElementEvent;
|
|
17767
17877
|
/** The last entry finished playing, and the playlist stopped there. Not sent while `repeat` is set. */
|
|
17768
17878
|
"helix-end": HelixHeadlessVideoPlaylistHelixEndElementEvent;
|
|
17879
|
+
/** Fired after `helix-before-reorder` when nobody canceled it. Move your entries to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
|
|
17880
|
+
"helix-reorder": HelixHeadlessVideoPlaylistHelixReorderElementEvent;
|
|
17769
17881
|
};
|
|
17770
17882
|
|
|
17771
17883
|
/** `HelixHeadlessVideo` component event */
|
|
@@ -18675,7 +18787,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
18675
18787
|
HelixHeadlessButtonVueProps,
|
|
18676
18788
|
HelixHeadlessButtonVueEvents
|
|
18677
18789
|
>;
|
|
18678
|
-
/** '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
|
|
18790
|
+
/** '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 unless a listener cancels it the callout hides itself: 'open' turns false, ':state(exiting)' holds while its exit animations run, and then it is 'hidden'. Remove it in your listener to take it out of the page, or set 'open' to show it again, which holds ':state(entering)' while it comes back. Focus on its dismiss button moves to the next callout's, or to the tab stop beside it, once it hides. 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'. */
|
|
18679
18791
|
"helix-headless-callout": DefineCustomElement<
|
|
18680
18792
|
HelixHeadlessCallout,
|
|
18681
18793
|
HelixHeadlessCalloutVueProps,
|
|
@@ -18693,7 +18805,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
18693
18805
|
HelixHeadlessCanvasNodeVueProps,
|
|
18694
18806
|
HelixHeadlessCanvasNodeVueEvents
|
|
18695
18807
|
>;
|
|
18696
|
-
/** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - The card you land on is selected. Control or Command with an arrow key, Home, or End moves without changing the selection, and Space adds the card to the selection or takes it out, so you can select cards that are not next to each other. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. - Control or Command with C copies the selected cards, and the connections between them, as a JSON Canvas document in text, which another board or an app that reads the format takes. A paste is your page's: listen for 'paste' on the board, read the text with 'fromJsonCanvas', and add the cards it holds. - Control or Command with Z undoes the last move or resize the board made, and with Shift, or Control with Y, makes it again. 'undo()' and 'redo()' do the same from a script. Each asks with 'helix-before-move' and tells with 'helix-move', as a move does, so a board that holds its positions in your state is undone through your state. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. Once your page removes what Delete asked for, focus moves to the next stop, to the one before where it was the last, and to the board where none is left. A focused card your page removes for its own reasons hands focus on the same way, unless the reader has already moved focus somewhere else. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
|
|
18808
|
+
/** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - The card you land on is selected. Control or Command with an arrow key, Home, or End moves without changing the selection, and Space adds the card to the selection or takes it out, so you can select cards that are not next to each other. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. - Control or Command with C copies the selected cards, and the connections between them, as a JSON Canvas document in text, which another board or an app that reads the format takes. A paste is your page's: listen for 'paste' on the board, read the text with 'fromJsonCanvas', and add the cards it holds. - Control or Command with Z undoes the last move or resize the board made, and with Shift, or Control with Y, makes it again. 'undo()' and 'redo()' do the same from a script. Each asks with 'helix-before-move' and tells with 'helix-move', as a move does, so a board that holds its positions in your state is undone through your state. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. Once your page removes what Delete asked for, focus moves to the next stop, to the one before where it was the last, and to the board where none is left. A focused card your page removes for its own reasons hands focus on the same way, unless the reader has already moved focus somewhere else. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. **'edgeRoute' draws the connections' lines your own way**: a function from where a line leaves and arrives, and the sides it does, to its SVG path, for a route such as one that bends around the cards between. What it returns is the line drawn, the line pressed and focused, and the one an arrowhead sits at the end of. Nothing back draws the board's own. Add 'minimap' to 'controls' for a picture of the whole board in a corner: each card as a box, and a frame around what is on screen. A press or a drag on it brings that place to the middle of the view. It is for a pointer, and a screen reader skips it: the arrow keys and 'show()' reach every card. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
|
|
18697
18809
|
"helix-headless-canvas": DefineCustomElement<
|
|
18698
18810
|
HelixHeadlessCanvas,
|
|
18699
18811
|
HelixHeadlessCanvasVueProps,
|
|
@@ -18741,7 +18853,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
18741
18853
|
HelixHeadlessCheckboxVueProps,
|
|
18742
18854
|
HelixHeadlessCheckboxVueEvents
|
|
18743
18855
|
>;
|
|
18744
|
-
/** 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 'mark-lines' to mark lines a reader should look at, such as '2, 4-6': the block draws a band behind each run, placed where the lines are laid out, so it follows a highlighter's markup and lines that wrap. Set 'wrap' to wrap long lines rather than scroll them; a gutter then numbers each line where it starts. Set 'wrappable' for a button in the header that turns 'wrap' on and off, pressed while the lines wrap. The header holds the name, the 'actions' slot, and the copy button. Slot a control into 'actions', such as a button that sets 'wrap' or one that opens the code in an editor, and the block draws a header for it even with no name. 'copy-icon' and 'copied-icon' replace the copy button's two icons. Set 'highlight' to a function that turns the code into highlighted markup, such as one wrapping Shiki or Prism, and the block draws what it returns; it is handed the block's 'language', so one function serves every block. The code stays in the slot, so the copy button and the page's own text are the code as written. Set 'expandable' on a block whose height is capped, such as by '--code-block-max-block-size', and a button under it shows every line and then fewer again, as a docs site's long example does. The button is drawn only while the cap hides something, says whether the block is expanded with 'aria-expanded', names the block it opens with 'aria-controls', and the block carries ':state(expanded)' while it is. Set 'diff' to show a change. Put a unified diff, the output of 'git diff' or 'diff -u', in the same slot, and the block draws the lines it added and removed. The block never computes a diff itself. Line numbers come from the hunk headers and are hidden from the accessibility tree. Changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change does not depend on color. Each file in the patch is its own block under its own name, and its copy button copies the new version of the file. 'variant="split"' shows the old version beside the new, each removal opposite its replacement. **A block that scrolls is a tab stop.** While its lines run past its width or its cap, the scroller is a region named for the block, such as "Code, app.ts", that Tab reaches, so a keyboard scrolls it with the arrow keys in every browser. Chromium and Firefox make a scrolling box focusable on their own, and Safari does not. A block that fits is no stop at all. **The code the block draws is marked untranslated**, 'translate="no"' on its '<pre>', so a page translator leaves highlighted lines and a diff as written. Code in the slot takes its translation mode from the element, which writes nothing onto itself, so set 'translate="no"' on the element to keep a translator off plain code too. 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. */
|
|
18856
|
+
/** 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 'mark-lines' to mark lines a reader should look at, such as '2, 4-6': the block draws a band behind each run, placed where the lines are laid out, so it follows a highlighter's markup and lines that wrap. Set 'wrap' to wrap long lines rather than scroll them; a gutter then numbers each line where it starts. Set 'wrappable' for a button in the header that turns 'wrap' on and off, pressed while the lines wrap. The header holds the name, the 'actions' slot, and the copy button. Slot a control into 'actions', such as a button that sets 'wrap' or one that opens the code in an editor, and the block draws a header for it even with no name. 'copy-icon' and 'copied-icon' replace the copy button's two icons. Set 'highlight' to a function that turns the code into highlighted markup, such as one wrapping Shiki or Prism, and the block draws what it returns; it is handed the block's 'language', so one function serves every block. The code stays in the slot, so the copy button and the page's own text are the code as written. Set 'expandable' on a block whose height is capped, such as by '--code-block-max-block-size', and a button under it shows every line and then fewer again, as a docs site's long example does. The button is drawn only while the cap hides something, says whether the block is expanded with 'aria-expanded', names the block it opens with 'aria-controls', and the block carries ':state(expanded)' while it is. Set 'diff' to show a change. Put a unified diff, the output of 'git diff' or 'diff -u', in the same slot, and the block draws the lines it added and removed. The block never computes a diff itself. Line numbers come from the hunk headers and are hidden from the accessibility tree. Changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change does not depend on color. Where a removed line is paired with the added line that replaced it, the words each does not share with the other are the 'changed' part, so the eye goes to what changed within the line. 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. 'context-lines' folds each long run of unchanged lines, keeping that many beside each change, behind a button that shows them and hides them again, as a code host draws a diff written with more context than a reader needs. **A block that scrolls is a tab stop.** While its lines run past its width or its cap, the scroller is a region named for the block, such as "Code, app.ts", that Tab reaches, so a keyboard scrolls it with the arrow keys in every browser. Chromium and Firefox make a scrolling box focusable on their own, and Safari does not. A block that fits is no stop at all. **The code the block draws is marked untranslated**, 'translate="no"' on its '<pre>', so a page translator leaves highlighted lines and a diff as written. Code in the slot takes its translation mode from the element, which writes nothing onto itself, so set 'translate="no"' on the element to keep a translator off plain code too. 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. */
|
|
18745
18857
|
"helix-headless-code-block": DefineCustomElement<
|
|
18746
18858
|
HelixHeadlessCodeBlock,
|
|
18747
18859
|
HelixHeadlessCodeBlockVueProps,
|
|
@@ -18759,13 +18871,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
18759
18871
|
HelixHeadlessColorInputVueProps,
|
|
18760
18872
|
HelixHeadlessColorInputVueEvents
|
|
18761
18873
|
>;
|
|
18762
|
-
/** 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,
|
|
18874
|
+
/** 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, by ten with Shift. PageUp and PageDown move brightness by ten, and Home and End move saturation by ten, turned on a right-to-left page as the arrows are, as React Aria's ColorArea does. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. A screen reader hears the color's name, such as "vibrant red", after the two numbers on the square and after the number on the hue ramp, and each preset is named by its color. The opacity ramp is heard as a percentage. Set 'color-words' to speak the names in another language. 'label' names the picker, which is then a group with that name, and the square's ramps say it before their own, as "Brand, Saturation". 'hint' writes help under the picker, which the square, the ramps and the value field are described by. Inside Color Input the field carries both. The presets are a listbox with the current color selected, and one tab stop. The arrow keys move between them, Home and End go to the ends, and Enter, Space or a press chooses one. */
|
|
18763
18875
|
"helix-headless-color-picker": DefineCustomElement<
|
|
18764
18876
|
HelixHeadlessColorPicker,
|
|
18765
18877
|
HelixHeadlessColorPickerVueProps,
|
|
18766
18878
|
HelixHeadlessColorPickerVueEvents
|
|
18767
18879
|
>;
|
|
18768
|
-
/** 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. As typing narrows the list, a screen reader hears how many options are left, such as "3 results". Emptying the field and leaving it clears a single choice. **Keyboard.** | Key | What it does | |---|---| | Down, Up | On a closed field, opens the list on the chosen option, or the first or the last. In the open list, moves the highlight, round from the last option to the first. | | Page Down, Page Up | In the open list, moves the highlight by as many options as the list shows at once. | | Enter | Chooses the highlighted option. With nothing left in the list, creates what was typed with 'creatable', or takes it with 'allows-custom-value'. On a closed field, submits the form. | | Escape | Closes the list and puts the chosen words back. On a closed field, a second Escape clears a single choice. | | Tab | Closes the list and moves on. | | Backspace | With 'multiple', on an empty field, removes the last tag. | | Left | With 'multiple', with the caret at the start of the text, moves to the last tag's remove button. Right on a right-to-left page. | | Left, Right on a tag | Move between the tags, and past the last back to the text. | | Delete, Backspace on a tag | Removes the tag. | | Space, Home, End, letters | Edit the text. | **ARIA.** The input is the 'combobox', named by the label, with 'aria-expanded', 'aria-controls' naming the list, 'aria-autocomplete' ('both' with 'suggest', 'list' otherwise) and 'aria-activedescendant' on the highlighted option. The list is the listbox 'Listbox' describes. On Apple devices, where VoiceOver does not read the option the field points to, the field says it in a live region as the highlight moves, says how many options there are as the list opens, and says a choice once it is made, as React Aria's combobox does there. Set 'autocomplete' to let a browser's autofill choose an option. With 'multiple', each chosen option is a tag in the field with its own remove control. The text is the field's one tab stop, and the arrow keys reach the tags from it. 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. */
|
|
18880
|
+
/** 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. As typing narrows the list, a screen reader hears how many options are left, such as "3 results". Emptying the field and leaving it clears a single choice. **Keyboard.** | Key | What it does | |---|---| | Down, Up | On a closed field, opens the list on the chosen option, or the first or the last. In the open list, moves the highlight, round from the last option to the first. | | Alt with Down, Alt with Up | Opens the list without moving the highlight, and closes it, choosing nothing. | | Page Down, Page Up | In the open list, moves the highlight by as many options as the list shows at once. | | Enter | Chooses the highlighted option. With nothing left in the list, creates what was typed with 'creatable', or takes it with 'allows-custom-value'. On a closed field, submits the form. | | Escape | Closes the list and puts the chosen words back. On a closed field, a second Escape clears a single choice. | | Tab | Closes the list and moves on. | | Backspace | With 'multiple', on an empty field, removes the last tag. | | Left | With 'multiple', with the caret at the start of the text, moves to the last tag's remove button. Right on a right-to-left page. | | Left, Right on a tag | Move between the tags, and past the last back to the text. | | Delete, Backspace on a tag | Removes the tag. | | Space, Home, End, letters | Edit the text. | **ARIA.** The input is the 'combobox', named by the label, with 'aria-expanded', 'aria-controls' naming the list, 'aria-autocomplete' ('both' with 'suggest', 'list' otherwise) and 'aria-activedescendant' on the highlighted option. The list is the listbox 'Listbox' describes. On Apple devices, where VoiceOver does not read the option the field points to, the field says it in a live region as the highlight moves, says how many options there are as the list opens, and says a choice once it is made, as React Aria's combobox does there. Set 'autocomplete' to let a browser's autofill choose an option. With 'multiple', each chosen option is a tag in the field with its own remove control. The text is the field's one tab stop, and the arrow keys reach the tags from it. 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. */
|
|
18769
18881
|
"helix-headless-combobox": DefineCustomElement<
|
|
18770
18882
|
HelixHeadlessCombobox,
|
|
18771
18883
|
HelixHeadlessComboboxVueProps,
|
|
@@ -19035,7 +19147,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
19035
19147
|
HelixHeadlessMapRasterVueProps,
|
|
19036
19148
|
HelixHeadlessMapRasterVueEvents
|
|
19037
19149
|
>;
|
|
19038
|
-
/** 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. */
|
|
19150
|
+
/** 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. Escape closes the menu and returns focus to its button, and the menu closes when focus moves on from it or a press lands outside the map. 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. */
|
|
19039
19151
|
"helix-headless-map": DefineCustomElement<
|
|
19040
19152
|
HelixHeadlessMap,
|
|
19041
19153
|
HelixHeadlessMapVueProps,
|
|
@@ -19059,13 +19171,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
19059
19171
|
HelixHeadlessMegamenuVueProps,
|
|
19060
19172
|
HelixHeadlessMegamenuVueEvents
|
|
19061
19173
|
>;
|
|
19062
|
-
/** 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'
|
|
19174
|
+
/** 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 'checkable' or 'checked' is 'menuitemcheckbox' with 'aria-checked', and an 'exclusive' row is '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. Space on a choice row changes it and leaves the menu open, so a reader can set several in a row, as the APG's menu does. Enter and a press change it and close the menu. 'close-on-select="false"' on the row keeps the menu open after any choice of it, and 'close-on-select' on the row closes it after a Space as well. The menu sets whether the row's page is showing as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. 'shortcut' shows a row's keyboard shortcut after its label, drawn by 'Kbd' in the platform's glyphs, and gives the row 'aria-keyshortcuts'. It binds nothing: the shortcut is the page's to bind. Other trailing words, such as a count, go in the 'end' slot. The row is named by its label alone. Words in 'description', a line under the label, and in 'end' describe it instead, through 'aria-describedby', as React Aria's menu item does with its description: a reader hears "Copy", then "Copies the selection". A development build warns when a row has no words to be named by, such as a row holding only an icon with no label. The check mark and the caret are the fallbacks of the 'check' and 'chevron' slots, so a mark of your own replaces either by being slotted. Neither is read as part of the row's name. */
|
|
19063
19175
|
"helix-headless-menu-item": DefineCustomElement<
|
|
19064
19176
|
HelixHeadlessMenuItem,
|
|
19065
19177
|
HelixHeadlessMenuItemVueProps,
|
|
19066
19178
|
HelixHeadlessMenuItemVueEvents
|
|
19067
19179
|
>;
|
|
19068
|
-
/** 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, inside its own shadow root. On a plain element, such as a '<button>', the menu writes 'aria-haspopup="menu"' and 'aria-expanded', from a frame after its own first render, so a server's markup is never changed while a framework hydrates it. It never writes 'aria-expanded' where you wrote it yourself. Submenus drill down by default. A submenu replaces the panel's content, and a back row returns to the previous page. One panel stays inside a narrow window, and works on touch screens, which have no hover. **'submenus="flyout"' opens each submenu in a panel of its own beside its row**, as React Aria's 'SubmenuTrigger' and Radix's 'Sub' do. Resting the pointer on the row opens it, and a pointer crossing toward the open panel over the rows between keeps it open, as Radix's grace area does. Right Arrow opens a row's submenu on its first row, and Left Arrow or Escape closes it and returns focus to the row, the two arrows swapping on a right-to-left page. The row says 'aria-expanded', and the panel is a 'menu' named by the row. 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>' is a separator a screen reader announces. Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first row, and Up Arrow on its last. In the menu, Up and Down Arrow move between rows, Home and End go to the first and the last, a typed letter moves to the next row whose name starts with it, Enter and Space choose, Right Arrow opens a row's submenu and Left Arrow goes back, the two swapping on a right-to-left page. Left Arrow on the top page does nothing. Escape closes the menu and returns focus to the trigger. Tab closes it and moves on. While it is open, the surface carries the trigger's width as '--floating-anchor-inline-size' and the room left below it as '--floating-available-block-size', as Radix's dropdown menu publishes its trigger's width, for a menu as wide as its trigger: 'helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }'. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. A touch or a pen held still on the area opens it too, on every browser, since iOS sends no 'contextmenu' for one. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, and a press held for half a second opens the menu, as React Aria's 'trigger="longPress"' does. Alt+Down or Alt+Up opens it from the keyboard, and the trigger is described by 'long-press-label', which says so. */
|
|
19180
|
+
/** 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, inside its own shadow root. On a plain element, such as a '<button>', the menu writes 'aria-haspopup="menu"' and 'aria-expanded', from a frame after its own first render, so a server's markup is never changed while a framework hydrates it. It never writes 'aria-expanded' where you wrote it yourself. Submenus drill down by default. A submenu replaces the panel's content, and a back row returns to the previous page. One panel stays inside a narrow window, and works on touch screens, which have no hover. **'submenus="flyout"' opens each submenu in a panel of its own beside its row**, as React Aria's 'SubmenuTrigger' and Radix's 'Sub' do. Resting the pointer on the row opens it, and a pointer crossing toward the open panel over the rows between keeps it open, as Radix's grace area does. Right Arrow opens a row's submenu on its first row, and Left Arrow or Escape closes it and returns focus to the row, the two arrows swapping on a right-to-left page. The row says 'aria-expanded', and the panel is a 'menu' named by the row. 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>' is a separator a screen reader announces. Keys: Enter, Space or Down Arrow on the trigger opens the menu on its first row, and Up Arrow on its last. In the menu, Up and Down Arrow move between rows, Home and End go to the first and the last, a typed letter moves to the next row whose name starts with it, Enter and Space choose (Space on a choice row changes it and leaves the menu open), Right Arrow opens a row's submenu and Left Arrow goes back, the two swapping on a right-to-left page. Left Arrow on the top page does nothing. Escape closes the menu and returns focus to the trigger. Tab closes it and moves on. While it is open, the surface carries the trigger's width as '--floating-anchor-inline-size' and the room left below it as '--floating-available-block-size', as Radix's dropdown menu publishes its trigger's width, for a menu as wide as its trigger: 'helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }'. With 'context', the trigger is an area and the menu is its context menu: a right-click, a long press, Shift+F10 or the menu key over the area opens it at the pointer, or at the area's corner from the keyboard, as Radix's context menu does. A press on the area does not open it, and closing it returns focus to where it was. A touch or a pen held still on the area opens it too, on every browser, since iOS sends no 'contextmenu' for one. **A trigger with its own action.** With 'open-on="long-press"', a press on the trigger is the trigger's own, and a press held for half a second opens the menu, as React Aria's 'trigger="longPress"' does. Alt+Down or Alt+Up opens it from the keyboard, and the trigger is described by 'long-press-label', which says so. */
|
|
19069
19181
|
"helix-headless-menu": DefineCustomElement<
|
|
19070
19182
|
HelixHeadlessMenu,
|
|
19071
19183
|
HelixHeadlessMenuVueProps,
|
|
@@ -19317,7 +19429,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
19317
19429
|
HelixHeadlessTableColumnVueProps,
|
|
19318
19430
|
HelixHeadlessTableColumnVueEvents
|
|
19319
19431
|
>;
|
|
19320
|
-
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. 'selection-mode="single"' selects one row at a time: ticking a row lets go of the one before, the heading holds no checkbox, and Shift and Control with A take in nothing more. 'selection-behavior="replace"' makes a press on a row, anywhere but its own controls, select it alone, as a file list does, and in a 'grid' table the arrow keys carry the selection with them. Control or Command with a press adds or takes out the row, and with an arrow moves without selecting. Shift with a press takes in the rows from the one last chosen. **Nesting rows.** A row with 'parent' sits under the row of that key, as a file sits in a folder. The table then draws a column of disclosure buttons, under a heading named by 'expand-column-label': a row with rows under it has a button named by 'expand-row-label' ("Expand {row}") that says with 'aria-expanded' whether it is open, and the rows under a shut row are not drawn. 'expanded' holds the open rows' keys, comma separated, and 'default-expanded' is where it starts. A press asks with 'helix-before-toggle' and tells with 'helix-toggle', both from the row, so you can refuse it or load the rows on the way. A sort orders the rows under each row among themselves, and in a 'grid' table the table is a 'treegrid' whose rows say their depth. **Moving rows.** 'reorderable' adds a column of grips before the checkboxes, under a heading named by 'row-grips-label'. 1. Each row is known by its 'value', or by its place among the rows where it has none, as for selecting. Give rows a 'value' when they move, so a key stays with its row. 2. A grip is a button named by 'move-row-label' ("Move {row}") with the words of the row's first cell. Drag it to move its row, and the page scrolls near an edge. Or press it with Space, Enter, or a click to pick the row up, move it with Up, Down, Home, and End, and press it again to drop it. A click on another row drops it there, and Escape puts it back. 3. 'helix-before-reorder' asks first, and 'helix-reorder' follows with 'keys', every row's key in the new order. **You move the rows**: the table moves no element of yours, and focus goes back to the moved row's grip once you have. 4. Each step is said in the table's live region, in words you can change: 'picked-up-label', 'moved-label', 'dropped-label', and 'canceled-label'. The grips do nothing while a sort is set. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Enter or Space on a disclosure cell | Shows or hides the rows under the row, in a table whose rows nest. | | Enter or Space on a grip cell | Picks the row up, or drops it, in a 'reorderable' table. Up, Down, Home, and End move a row picked up, and Escape puts it back. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | A letter or a word | Moves to the next row whose first cell starts with what you typed. | | Tab | Leaves the table. | **Loading more.** 'load-more' sends 'helix-load-more' once the end of the table comes within a screen of view, in the box that scrolls it or the page, once for each number of rows: add rows and it can send it again. Set 'loading' while you fetch, and the table asks for nothing until it clears. When the rows did not load, set 'error-text', such as "The orders did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
|
|
19432
|
+
/** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. 'selection-mode="single"' selects one row at a time: ticking a row lets go of the one before, the heading holds no checkbox, and Shift and Control with A take in nothing more. 'selection-behavior="replace"' makes a press on a row, anywhere but its own controls, select it alone, as a file list does, and in a 'grid' table the arrow keys carry the selection with them. Control or Command with a press adds or takes out the row, and with an arrow moves without selecting. Shift with a press takes in the rows from the one last chosen. **Nesting rows.** A row with 'parent' sits under the row of that key, as a file sits in a folder. The table then draws a column of disclosure buttons, under a heading named by 'expand-column-label': a row with rows under it has a button named by 'expand-row-label' ("Expand {row}") that says with 'aria-expanded' whether it is open, and the rows under a shut row are not drawn. 'expanded' holds the open rows' keys, comma separated, and 'default-expanded' is where it starts. A press asks with 'helix-before-toggle' and tells with 'helix-toggle', both from the row, so you can refuse it or load the rows on the way. A sort orders the rows under each row among themselves, and in a 'grid' table the table is a 'treegrid' whose rows say their depth. **Moving rows.** 'reorderable' adds a column of grips before the checkboxes, under a heading named by 'row-grips-label'. 1. Each row is known by its 'value', or by its place among the rows where it has none, as for selecting. Give rows a 'value' when they move, so a key stays with its row. 2. A grip is a button named by 'move-row-label' ("Move {row}") with the words of the row's first cell. Drag it to move its row, and the page scrolls near an edge. Or press it with Space, Enter, or a click to pick the row up, move it with Up, Down, Home, and End, and press it again to drop it. A click on another row drops it there, and Escape puts it back. 3. 'helix-before-reorder' asks first, and 'helix-reorder' follows with 'keys', every row's key in the new order. **You move the rows**: the table moves no element of yours, and focus goes back to the moved row's grip once you have. 4. Each step is said in the table's live region, in words you can change: 'picked-up-label', 'moved-label', 'dropped-label', and 'canceled-label'. The grips do nothing while a sort is set. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Enter or Space on a disclosure cell | Shows or hides the rows under the row, in a table whose rows nest. | | Right on a disclosure cell | Shows the rows under a shut row, and otherwise moves one cell along the row. Left does, on a right-to-left page. | | Left on a disclosure cell | Hides the rows under an open row, and moves to the row this one sits under from any other. | | Enter or Space on a grip cell | Picks the row up, or drops it, in a 'reorderable' table. Up, Down, Home, and End move a row picked up, and Escape puts it back. | | Down, Up, Page Down, Page Up under 'selection-behavior="replace"' | Selects the row it moves to alone. Control or Command with the key moves without selecting. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | A letter or a word | Moves to the next row whose first cell starts with what you typed. | | Tab | Leaves the table. | **Loading more.** 'load-more' sends 'helix-load-more' once the end of the table comes within a screen of view, in the box that scrolls it or the page, once for each number of rows: add rows and it can send it again. Set 'loading' while you fetch, and the table asks for nothing until it clears. When the rows did not load, set 'error-text', such as "The orders did not load", and put a button that tries again in the 'error' slot. The line shows after the rows in place of the empty and loading lines, the live region says it, and the table takes the 'error' state. Clear it once you try again. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
|
|
19321
19433
|
"helix-headless-table": DefineCustomElement<
|
|
19322
19434
|
HelixHeadlessTable,
|
|
19323
19435
|
HelixHeadlessTableVueProps,
|
|
@@ -19473,7 +19585,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
19473
19585
|
HelixHeadlessVideoPlaylistMenuVueProps,
|
|
19474
19586
|
HelixHeadlessVideoPlaylistMenuVueEvents
|
|
19475
19587
|
>;
|
|
19476
|
-
/** **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. 'no-advance' turns that off, and the playlist stays on the entry that ended. '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. **'helix-before-activate' says why the playlist is moving**, in 'detail.cause': 'press' for an entry or a menu choice, 'next' and 'previous' for the player's controls and the methods, 'ended' at the end of a clip, and 'removed' when the current entry leaves the playlist. Cancel an 'ended' move to show your own "Up next" countdown, then call 'next()'. **Removing the current entry moves the playlist on**, to the entry after it, or to the one before it when it was the last. A clip that was playing keeps playing in the entry that takes its place. **The player is named by the current entry**, and the device's own media controls show the entry as the title. A player you gave a 'label' keeps your name, and only the title follows the entry. **Keyboard.** The entries take one stop in the tab order: the entry you last focused, or the current entry before you have focused one. Enter or Space plays it. The arrow keys move focus to the entry before or after, and Home and End to the first and the last, passing over disabled entries. The current entry carries 'aria-current'. While focus is on the player, the player's own keys work, and 'Video' lists them, and Shift with N or P plays the next or the previous entry. The player's previous and next controls move through the entries in the same order the playlist does. **What a screen reader hears.** A list named by 'label', with a button for each entry. When the playlist moves to another entry, by a press, by the player's controls, or at the end of a clip, a live region says 'playing-label', "Now playing" and the entry's name. */
|
|
19588
|
+
/** **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. 'no-advance' turns that off, and the playlist stays on the entry that ended. '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. **'helix-before-activate' says why the playlist is moving**, in 'detail.cause': 'press' for an entry or a menu choice, 'next' and 'previous' for the player's controls and the methods, 'ended' at the end of a clip, and 'removed' when the current entry leaves the playlist. Cancel an 'ended' move to show your own "Up next" countdown, then call 'next()'. **Removing the current entry moves the playlist on**, to the entry after it, or to the one before it when it was the last. A clip that was playing keeps playing in the entry that takes its place. **The player is named by the current entry**, and the device's own media controls show the entry as the title. A player you gave a 'label' keeps your name, and only the title follows the entry. **Keyboard.** The entries take one stop in the tab order: the entry you last focused, or the current entry before you have focused one. Enter or Space plays it. The arrow keys move focus to the entry before or after, and Home and End to the first and the last, passing over disabled entries. The current entry carries 'aria-current'. While focus is on the player, the player's own keys work, and 'Video' lists them, and Shift with N or P plays the next or the previous entry. The player's previous and next controls move through the entries in the same order the playlist does. **Moving entries.** 'reorderable' lets a reader change the order of the queue: - Alt with Up or Down moves the focused entry a place, and Alt with Home or End moves it to either end, as the APG's rearrangeable listbox does. Focus stays on it. - A pointer drags an entry, with a drop indicator, and the page scrolls near an edge. A press that does not travel still plays the entry. - A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold every entry's 'value' in the new order. **You move the entries**: the playlist moves no element of yours, and the next entry is the one after the current entry in the order you leave. - Each move is said in the live region, in words you can change: 'moved-label', 'dropped-label', 'canceled-label', and 'picked-up-label'. **What a screen reader hears.** A list named by 'label', with a button for each entry. When the playlist moves to another entry, by a press, by the player's controls, or at the end of a clip, a live region says 'playing-label', "Now playing" and the entry's name. */
|
|
19477
19589
|
"helix-headless-video-playlist": DefineCustomElement<
|
|
19478
19590
|
HelixHeadlessVideoPlaylist,
|
|
19479
19591
|
HelixHeadlessVideoPlaylistVueProps,
|
package/types/words.d.ts
CHANGED
|
@@ -623,6 +623,21 @@ declare module '@fusion.dev/helix-core' {
|
|
|
623
623
|
* English: `Show all lines`
|
|
624
624
|
*/
|
|
625
625
|
expandLabel: Message
|
|
626
|
+
/**
|
|
627
|
+
* The words of a button that hides a run of unchanged lines it showed, in a
|
|
628
|
+
* diff with `context-lines`. `{count}` is how many, and each language
|
|
629
|
+
* writes the forms it has.
|
|
630
|
+
*
|
|
631
|
+
* English: `{count, plural, one {Hide # unchanged line} other {Hide # unchanged lines}}`
|
|
632
|
+
*/
|
|
633
|
+
hideUnchangedLabel: Message
|
|
634
|
+
/**
|
|
635
|
+
* The words of a button that shows a folded run of unchanged lines, in a
|
|
636
|
+
* diff with `context-lines`. `{count}` is how many.
|
|
637
|
+
*
|
|
638
|
+
* English: `{count, plural, one {Show # unchanged line} other {Show # unchanged lines}}`
|
|
639
|
+
*/
|
|
640
|
+
showUnchangedLabel: Message
|
|
626
641
|
/**
|
|
627
642
|
* The wrap button's name, which it keeps whether it is pressed or not.
|
|
628
643
|
*
|
|
@@ -2460,6 +2475,13 @@ declare module '@fusion.dev/helix-core' {
|
|
|
2460
2475
|
* English: `Copy value`
|
|
2461
2476
|
*/
|
|
2462
2477
|
copyValueLabel: Message
|
|
2478
|
+
/**
|
|
2479
|
+
* What the tree says while there is no value to show, such as before a
|
|
2480
|
+
* fetch answers. The `empty` slot replaces it.
|
|
2481
|
+
*
|
|
2482
|
+
* English: `Nothing to show`
|
|
2483
|
+
*/
|
|
2484
|
+
emptyLabel: Message
|
|
2463
2485
|
/**
|
|
2464
2486
|
* The filter field's placeholder and accessible name.
|
|
2465
2487
|
*
|
|
@@ -2482,6 +2504,13 @@ declare module '@fusion.dev/helix-core' {
|
|
|
2482
2504
|
* English: `{count, plural, one {# key} other {# keys}}`
|
|
2483
2505
|
*/
|
|
2484
2506
|
keysLabel: Message
|
|
2507
|
+
/**
|
|
2508
|
+
* What the tree says while a filter matched no entry. The `empty` slot
|
|
2509
|
+
* replaces it.
|
|
2510
|
+
*
|
|
2511
|
+
* English: `No matches`
|
|
2512
|
+
*/
|
|
2513
|
+
noMatchesLabel: Message
|
|
2485
2514
|
/**
|
|
2486
2515
|
* What a screen reader hears when a filter matches entries. `{count}` is
|
|
2487
2516
|
* how many, written in the locale, and each language writes the forms it
|
|
@@ -3629,6 +3658,20 @@ declare module '@fusion.dev/helix-core' {
|
|
|
3629
3658
|
volumeLabel: Message
|
|
3630
3659
|
}
|
|
3631
3660
|
'helix-video-playlist': {
|
|
3661
|
+
/**
|
|
3662
|
+
* What screen readers hear when a move is put back, in a `reorderable`
|
|
3663
|
+
* playlist. `{name}` is the entry's words.
|
|
3664
|
+
*
|
|
3665
|
+
* English: `Canceled`
|
|
3666
|
+
*/
|
|
3667
|
+
canceledLabel: Message
|
|
3668
|
+
/**
|
|
3669
|
+
* What screen readers hear when a moved entry is let go, in a `reorderable`
|
|
3670
|
+
* playlist. `{name}` is the entry's words.
|
|
3671
|
+
*
|
|
3672
|
+
* English: `Dropped`
|
|
3673
|
+
*/
|
|
3674
|
+
droppedLabel: Message
|
|
3632
3675
|
/**
|
|
3633
3676
|
* What the playlist says while it has no entries. The `empty` slot replaces it.
|
|
3634
3677
|
*
|
|
@@ -3641,6 +3684,21 @@ declare module '@fusion.dev/helix-core' {
|
|
|
3641
3684
|
* English: `Playlist`
|
|
3642
3685
|
*/
|
|
3643
3686
|
label: Message
|
|
3687
|
+
/**
|
|
3688
|
+
* What screen readers hear each time a key moves an entry, in a
|
|
3689
|
+
* `reorderable` playlist. `{name}` is the entry's words, `{position}` its
|
|
3690
|
+
* new place, counting from 1, and `{count}` the number of entries.
|
|
3691
|
+
*
|
|
3692
|
+
* English: `{name} moved to position {position} of {count}`
|
|
3693
|
+
*/
|
|
3694
|
+
movedLabel: Message
|
|
3695
|
+
/**
|
|
3696
|
+
* What screen readers hear when a pointer picks up an entry, in a
|
|
3697
|
+
* `reorderable` playlist. `{name}` is the entry's words.
|
|
3698
|
+
*
|
|
3699
|
+
* English: `Picked up {name}`
|
|
3700
|
+
*/
|
|
3701
|
+
pickedUpLabel: Message
|
|
3644
3702
|
/**
|
|
3645
3703
|
* What the live region says when the playlist moves to another entry.
|
|
3646
3704
|
* `{title}` is the entry's name.
|