@fusion.dev/helix-headless 0.23.0 → 0.24.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 +48376 -26638
- package/dist/announcement/root/announcement-root.d.ts +19 -5
- package/dist/area-chart/index.d.ts +1 -0
- package/dist/area-chart/index.js +1 -0
- package/dist/area-chart/root/area-chart-root.d.ts +182 -0
- package/dist/area-chart/root/area-chart-root.js +205 -0
- package/dist/carousel/root/carousel-root.d.ts +1 -0
- package/dist/carousel/root/carousel-root.js +18 -2
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/message/chat-message.d.ts +7 -0
- package/dist/chat/message/chat-message.js +2 -1
- package/dist/chat/root/chat-root.d.ts +195 -4
- package/dist/chat/root/chat-root.js +316 -23
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +2 -0
- package/dist/checkbox-group/root/checkbox-group-root.js +12 -2
- package/dist/code-block/index.d.ts +1 -0
- package/dist/code-block/index.js +1 -0
- package/dist/code-block/patch.d.ts +62 -0
- package/dist/code-block/patch.js +93 -0
- package/dist/code-block/root/code-block-root.d.ts +82 -17
- package/dist/code-block/root/code-block-root.js +83 -6
- package/dist/color-picker/root/color-picker-root.d.ts +4 -3
- package/dist/color-picker/root/color-picker-root.js +4 -1
- package/dist/data-table/root/data-table-root.d.ts +195 -23
- package/dist/data-table/root/data-table-root.js +308 -27
- package/dist/description-list/index.d.ts +2 -0
- package/dist/description-list/index.js +2 -0
- package/dist/description-list/item/description-list-item.d.ts +39 -0
- package/dist/description-list/item/description-list-item.js +26 -0
- package/dist/description-list/root/description-list-root.d.ts +56 -0
- package/dist/description-list/root/description-list-root.js +21 -0
- package/dist/element-events.generated.js +27 -6
- package/dist/filter-input/chip/filter-chip.d.ts +114 -0
- package/dist/filter-input/chip/filter-chip.js +61 -0
- package/dist/filter-input/field/filter-field.d.ts +128 -0
- package/dist/filter-input/field/filter-field.js +70 -0
- package/dist/filter-input/grammar.d.ts +96 -0
- package/dist/filter-input/grammar.js +133 -0
- package/dist/filter-input/index.d.ts +5 -0
- package/dist/filter-input/index.js +5 -0
- package/dist/filter-input/menu/filter-menu.d.ts +153 -0
- package/dist/filter-input/menu/filter-menu.js +164 -0
- package/dist/filter-input/operator/filter-operator.d.ts +105 -0
- package/dist/filter-input/operator/filter-operator.js +39 -0
- package/dist/filter-input/root/filter-input-root.d.ts +118 -9
- package/dist/filter-input/root/filter-input-root.js +96 -2
- package/dist/format-date/root/format-date-root.js +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/line-chart/root/line-chart-root.d.ts +9 -2
- package/dist/listbox/root/listbox-root.d.ts +8 -7
- package/dist/listbox/root/listbox-root.js +7 -2
- package/dist/menu/item/menu-item.d.ts +31 -6
- package/dist/menu/item/menu-item.js +18 -5
- package/dist/menu/root/menu-root.js +7 -2
- package/dist/notifications/group/notification-group.d.ts +129 -0
- package/dist/notifications/group/notification-group.js +106 -0
- package/dist/notifications/index.d.ts +1 -0
- package/dist/notifications/index.js +1 -0
- package/dist/notifications/notification/notification.d.ts +39 -13
- package/dist/notifications/notification/notification.js +11 -8
- package/dist/notifications/root/notifications-root.d.ts +57 -1
- package/dist/notifications/root/notifications-root.js +35 -4
- package/dist/number-input/root/number-input-root.d.ts +21 -1
- package/dist/number-input/root/number-input-root.js +18 -5
- package/dist/object-inspector/index.d.ts +1 -0
- package/dist/object-inspector/index.js +1 -0
- package/dist/object-inspector/root/object-inspector-root.d.ts +183 -0
- package/dist/object-inspector/root/object-inspector-root.js +348 -0
- package/dist/outline/root/outline-root.d.ts +16 -1
- package/dist/outline/root/outline-root.js +27 -9
- package/dist/radio/group/radio-group.d.ts +1 -0
- package/dist/scatter-chart/index.d.ts +1 -0
- package/dist/scatter-chart/index.js +1 -0
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +144 -0
- package/dist/scatter-chart/root/scatter-chart-root.js +205 -0
- package/dist/skip-link/index.d.ts +1 -0
- package/dist/skip-link/index.js +1 -0
- package/dist/skip-link/root/skip-link-root.d.ts +81 -0
- package/dist/skip-link/root/skip-link-root.js +58 -0
- package/dist/speed-dial/root/speed-dial-root.d.ts +1 -0
- package/dist/speed-dial/root/speed-dial-root.js +6 -2
- package/dist/steps/root/steps-root.d.ts +1 -0
- package/dist/table/column/table-column.d.ts +79 -0
- package/dist/table/column/table-column.js +125 -5
- package/dist/table/root/table-root.d.ts +2 -0
- package/dist/table/root/table-root.js +12 -3
- package/dist/time-picker/root/time-picker-root.d.ts +9 -0
- package/dist/time-picker/root/time-picker-root.js +5 -0
- package/dist/toast/root/toast-root.d.ts +2 -0
- package/dist/tooltip/root/tooltip-root.js +1 -1
- package/dist/tour/root/tour-root.d.ts +1 -0
- package/dist/tree/item/tree-item.d.ts +7 -4
- package/dist/tree/item/tree-item.js +4 -1
- package/dist/video/root/video-root.d.ts +23 -1
- package/dist/video/root/video-root.js +42 -22
- package/dist/virtual-list/root/virtual-list-root.d.ts +10 -6
- package/dist/virtual-list/root/virtual-list-root.js +10 -4
- package/package.json +5 -5
- package/types/jsx.d.ts +4535 -346
- package/types/svelte.d.ts +11 -0
- package/types/vue.d.ts +737 -39
package/types/vue.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type {
|
|
|
3
3
|
HelixHeadlessAccordion,
|
|
4
4
|
HelixHeadlessAnnouncement,
|
|
5
5
|
HelixHeadlessAppHeader,
|
|
6
|
+
HelixHeadlessAreaChart,
|
|
6
7
|
FOLDS_UP_TO,
|
|
7
8
|
HelixHeadlessAvatarGroup,
|
|
8
9
|
initialsOf,
|
|
@@ -18,6 +19,7 @@ import type {
|
|
|
18
19
|
HelixHeadlessCard,
|
|
19
20
|
HelixHeadlessCarousel,
|
|
20
21
|
HelixHeadlessChatComposer,
|
|
22
|
+
FAILED_LABEL,
|
|
21
23
|
HelixHeadlessChatMessage,
|
|
22
24
|
HelixHeadlessChat,
|
|
23
25
|
HelixHeadlessCheckboxGroup,
|
|
@@ -32,6 +34,8 @@ import type {
|
|
|
32
34
|
HelixHeadlessDataTable,
|
|
33
35
|
HelixHeadlessDateInput,
|
|
34
36
|
HelixHeadlessDatePicker,
|
|
37
|
+
HelixHeadlessDescriptionListItem,
|
|
38
|
+
HelixHeadlessDescriptionList,
|
|
35
39
|
HelixHeadlessDialog,
|
|
36
40
|
HelixHeadlessDivider,
|
|
37
41
|
HelixHeadlessDonutChart,
|
|
@@ -40,6 +44,10 @@ import type {
|
|
|
40
44
|
HelixHeadlessDrilldown,
|
|
41
45
|
HelixHeadlessEmpty,
|
|
42
46
|
HelixHeadlessFileInput,
|
|
47
|
+
HelixHeadlessFilterChip,
|
|
48
|
+
HelixHeadlessFilterField,
|
|
49
|
+
HelixHeadlessFilterMenu,
|
|
50
|
+
HelixHeadlessFilterOperator,
|
|
43
51
|
HelixHeadlessFilterInput,
|
|
44
52
|
HelixHeadlessFormatDate,
|
|
45
53
|
HelixHeadlessHeatmap,
|
|
@@ -59,9 +67,11 @@ import type {
|
|
|
59
67
|
HelixHeadlessMenu,
|
|
60
68
|
HelixHeadlessMeter,
|
|
61
69
|
HelixHeadlessNavigation,
|
|
70
|
+
HelixHeadlessNotificationGroup,
|
|
62
71
|
HelixHeadlessNotification,
|
|
63
72
|
HelixHeadlessNotifications,
|
|
64
73
|
HelixHeadlessNumberInput,
|
|
74
|
+
HelixHeadlessObjectInspector,
|
|
65
75
|
HelixHeadlessOptionGroup,
|
|
66
76
|
HelixHeadlessOption,
|
|
67
77
|
HelixHeadlessOutline,
|
|
@@ -76,10 +86,12 @@ import type {
|
|
|
76
86
|
HelixHeadlessRadioGroup,
|
|
77
87
|
HelixHeadlessRadio,
|
|
78
88
|
HelixHeadlessRating,
|
|
89
|
+
HelixHeadlessScatterChart,
|
|
79
90
|
HelixHeadlessScrollArea,
|
|
80
91
|
EDGES,
|
|
81
92
|
HelixHeadlessSelect,
|
|
82
93
|
HelixHeadlessSkeleton,
|
|
94
|
+
HelixHeadlessSkipLink,
|
|
83
95
|
HelixHeadlessSlider,
|
|
84
96
|
HelixHeadlessSparkline,
|
|
85
97
|
HelixHeadlessSpeedDialItem,
|
|
@@ -91,6 +103,7 @@ import type {
|
|
|
91
103
|
HelixHeadlessStep,
|
|
92
104
|
HelixHeadlessSwitch,
|
|
93
105
|
HelixHeadlessTableCell,
|
|
106
|
+
at,
|
|
94
107
|
HelixHeadlessTableColumn,
|
|
95
108
|
HelixHeadlessTable,
|
|
96
109
|
HelixHeadlessTableRow,
|
|
@@ -130,6 +143,7 @@ import type {
|
|
|
130
143
|
HelixSelectEvent,
|
|
131
144
|
HelixSendEvent,
|
|
132
145
|
HelixBeforePinEvent,
|
|
146
|
+
HelixHistoryEvent,
|
|
133
147
|
HelixBeforeChangeEvent,
|
|
134
148
|
HelixBeforeToggleEvent,
|
|
135
149
|
HelixCopyEvent,
|
|
@@ -138,7 +152,9 @@ import type {
|
|
|
138
152
|
HelixCreateEvent,
|
|
139
153
|
HelixFilterEvent,
|
|
140
154
|
HelixNavigateEvent,
|
|
155
|
+
HelixReorderEvent,
|
|
141
156
|
HelixSortEvent,
|
|
157
|
+
HelixFacetEvent,
|
|
142
158
|
HelixResizeEvent,
|
|
143
159
|
HelixShortcutEvent,
|
|
144
160
|
HelixReadEvent,
|
|
@@ -294,10 +310,24 @@ export type HelixHeadlessAnnouncementVueProps = {
|
|
|
294
310
|
/** Which color the band wears.
|
|
295
311
|
|
|
296
312
|
Paint only: unlike `Callout`, no value here draws a mark, changes the label,
|
|
297
|
-
or moves the live region off polite.
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
313
|
+
or moves the live region off polite. `neutral` is the resting value, said
|
|
314
|
+
out loud so a consumer can put a band back to it from markup.
|
|
315
|
+
|
|
316
|
+
**The set is `Tag`'s and `Badge`'s, and now actually is.** This doc claimed
|
|
317
|
+
to match `Tag` while differing from it in both directions: it carried
|
|
318
|
+
`surface`, which `Tag` does not, and lacked `accent`, which `Tag` has. Three
|
|
319
|
+
components saying what a thing means, in three vocabularies, one of which
|
|
320
|
+
described itself as a fourth.
|
|
321
|
+
|
|
322
|
+
`accent` is the second emphasis, a rotation off the brand seed rather than a
|
|
323
|
+
color of its own, so it stays in relation when somebody rethemes. `primary`
|
|
324
|
+
is the seed itself.
|
|
325
|
+
|
|
326
|
+
**`surface` was never a color and has moved to `separation`**, which is the
|
|
327
|
+
axis that owns where a box sits relative to the page. It said the band rode
|
|
328
|
+
the surface step instead of the sunken one, which is an elevation, and a
|
|
329
|
+
band can be `info` and elevated at once: two values true together are two
|
|
330
|
+
axes, which is the test the registry answers to. */
|
|
301
331
|
tone?: (HelixHeadlessAnnouncement["tone"]) | undefined;
|
|
302
332
|
/** Whether it offers a control to take it away. */
|
|
303
333
|
dismissible?: (HelixHeadlessAnnouncement["dismissible"]) | undefined;
|
|
@@ -367,6 +397,47 @@ export type HelixHeadlessAppHeaderVueEvents = {
|
|
|
367
397
|
"helix-scrolled": HelixHeadlessAppHeaderHelixScrolledElementEvent;
|
|
368
398
|
};
|
|
369
399
|
|
|
400
|
+
export type HelixHeadlessAreaChartVueProps = {
|
|
401
|
+
/** How a band's edge gets from one reading to the next.
|
|
402
|
+
|
|
403
|
+
Absent is `straight`, for the reason the class doc gives, and absent rather
|
|
404
|
+
than defaulted because a reflecting property with a default writes its
|
|
405
|
+
attribute onto every host, including the ones nobody configured. */
|
|
406
|
+
curve?: (HelixHeadlessAreaChart["curve"]) | undefined;
|
|
407
|
+
/** Which rules are drawn across the plot, if any.
|
|
408
|
+
|
|
409
|
+
The same three values `LineChart` takes, with the same fallback: a bare
|
|
410
|
+
`gridlines`, or anything unrecognized, rules the levels. Drawn over the bands
|
|
411
|
+
rather than under them, because the bands are opaque and a rule under one is
|
|
412
|
+
a rule nobody sees. */
|
|
413
|
+
gridlines?: (HelixHeadlessAreaChart["gridlines"]) | undefined;
|
|
414
|
+
/** Whether each reading is drawn as a hundred percent.
|
|
415
|
+
|
|
416
|
+
Absent stacks the amounts, so the top edge is the total. Set, every reading
|
|
417
|
+
fills the height and the bands are shares of it. */
|
|
418
|
+
share?: (HelixHeadlessAreaChart["share"]) | undefined;
|
|
419
|
+
/** What to call the sum of the parts, in the tooltip and the summary. */
|
|
420
|
+
"total-label"?: (HelixHeadlessAreaChart["totalLabel"]) | undefined;
|
|
421
|
+
/** What to call the sum of the parts, in the tooltip and the summary. */
|
|
422
|
+
totalLabel?: (HelixHeadlessAreaChart["totalLabel"]) | undefined;
|
|
423
|
+
/** The id of the table to read.
|
|
424
|
+
|
|
425
|
+
Resolved through `getRootNode()`, so a chart inside another component's
|
|
426
|
+
shadow root names a table in that root rather than in the document. A
|
|
427
|
+
`<table>` or anything built from grid roles, including `helix-table`.
|
|
428
|
+
|
|
429
|
+
**In React this arrives as a property and not as an attribute**, the way
|
|
430
|
+
`Tooltip.for` does, so it does not reflect and nothing styles on it. */
|
|
431
|
+
for?: (HelixHeadlessAreaChart["for"]) | undefined;
|
|
432
|
+
/** The drawing's name, for a pointer resting on it.
|
|
433
|
+
|
|
434
|
+
Absent falls back to the table's own caption, which is usually the right
|
|
435
|
+
words and is already written. */
|
|
436
|
+
label?: (HelixHeadlessAreaChart["label"]) | undefined;
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
export type HelixHeadlessAreaChartVueEvents = {};
|
|
440
|
+
|
|
370
441
|
export type HelixHeadlessAvatarGroupVueProps = {
|
|
371
442
|
/** Accessible name for the set, such as "Reviewers". */
|
|
372
443
|
label?: (HelixHeadlessAvatarGroup["label"]) | undefined;
|
|
@@ -1023,12 +1094,29 @@ export type HelixHeadlessChatElementEvent<E = Event> = TypedEvent<
|
|
|
1023
1094
|
/** `helix-before-pin` event type */
|
|
1024
1095
|
export type HelixHeadlessChatHelixBeforePinElementEvent =
|
|
1025
1096
|
HelixHeadlessChatElementEvent<HelixBeforePinEvent>;
|
|
1097
|
+
/** `helix-history` event type */
|
|
1098
|
+
export type HelixHeadlessChatHelixHistoryElementEvent =
|
|
1099
|
+
HelixHeadlessChatElementEvent<HelixHistoryEvent>;
|
|
1100
|
+
/** `helix-send` event type */
|
|
1101
|
+
export type HelixHeadlessChatHelixSendElementEvent =
|
|
1102
|
+
HelixHeadlessChatElementEvent<HelixSendEvent>;
|
|
1026
1103
|
|
|
1027
1104
|
export type HelixHeadlessChatVueProps = {
|
|
1028
1105
|
/** Whether to open pinned, where nothing declared it. */
|
|
1029
1106
|
"default-pinned"?: (HelixHeadlessChat["defaultPinned"]) | undefined;
|
|
1030
1107
|
/** Whether to open pinned, where nothing declared it. */
|
|
1031
1108
|
defaultPinned?: (HelixHeadlessChat["defaultPinned"]) | undefined;
|
|
1109
|
+
/** Whether there are older turns than the ones here, and whether they are coming.
|
|
1110
|
+
|
|
1111
|
+
`more` makes reaching the top fire `helix-history`, once per arrival;
|
|
1112
|
+
`loading` draws `history-text` above the oldest turn and fires nothing; empty
|
|
1113
|
+
says this is the start of the conversation. The consumer owns it, because
|
|
1114
|
+
only the consumer knows whether the server has anything older. */
|
|
1115
|
+
history?: (HelixHeadlessChat["history"]) | undefined;
|
|
1116
|
+
/** What to say while older turns are on their way. */
|
|
1117
|
+
"history-text"?: (HelixHeadlessChat["historyText"]) | undefined;
|
|
1118
|
+
/** What to say while older turns are on their way. */
|
|
1119
|
+
historyText?: (HelixHeadlessChat["historyText"]) | undefined;
|
|
1032
1120
|
/** Accessible name for the conversation. */
|
|
1033
1121
|
label?: (HelixHeadlessChat["label"]) | undefined;
|
|
1034
1122
|
/** Whether the transcript follows new turns to the bottom.
|
|
@@ -1053,7 +1141,8 @@ it. Measured rather than assumed: `label, pinned` after upgrade against
|
|
|
1053
1141
|
A hook rather than a constant, because the right number depends on how tall
|
|
1054
1142
|
a turn is: a transcript of one-line replies wants a smaller threshold than
|
|
1055
1143
|
one of paragraphs, and a reader who has scrolled up by half a message has
|
|
1056
|
-
not left.
|
|
1144
|
+
not left. The same distance from the top is what counts as reaching the
|
|
1145
|
+
history. */
|
|
1057
1146
|
threshold?: (HelixHeadlessChat["threshold"]) | undefined;
|
|
1058
1147
|
/** What is said where there are none, and none are coming. */
|
|
1059
1148
|
"empty-text"?: (HelixHeadlessChat["emptyText"]) | undefined;
|
|
@@ -1069,11 +1158,24 @@ say that without the component knowing what a row looks like. */
|
|
|
1069
1158
|
"loading-text"?: (HelixHeadlessChat["loadingText"]) | undefined;
|
|
1070
1159
|
/** What is said while they are on their way. */
|
|
1071
1160
|
loadingText?: (HelixHeadlessChat["loadingText"]) | undefined;
|
|
1161
|
+
/** The turns as data, for a transcript too long to hold as elements.
|
|
1162
|
+
|
|
1163
|
+
Drawn a window at a time, so the log needs a block size. Set it or declare
|
|
1164
|
+
children, not both: while it holds anything the children are not drawn.
|
|
1165
|
+
|
|
1166
|
+
**Read, never written**, and replaced rather than mutated: a streamed turn
|
|
1167
|
+
is a new array with the last turn's text longer, which is what tells this
|
|
1168
|
+
element to look again. */
|
|
1169
|
+
turns?: (HelixHeadlessChat["turns"]) | undefined;
|
|
1072
1170
|
};
|
|
1073
1171
|
|
|
1074
1172
|
export type HelixHeadlessChatVueEvents = {
|
|
1075
1173
|
/** Fired when the reader pins or unpins the transcript by scrolling. Cancelable. */
|
|
1076
1174
|
"helix-before-pin": HelixHeadlessChatHelixBeforePinElementEvent;
|
|
1175
|
+
/** Fired when the reader reaches the oldest turn while `history` is `more`, reporting where they are rather than asking. */
|
|
1176
|
+
"helix-history": HelixHeadlessChatHelixHistoryElementEvent;
|
|
1177
|
+
/** A turn offered from the composer, or a failed one asked to go again, dispatched inside and heard here because the conversation is what a consumer holds. Cancelable: refusing it takes the decision and nothing is sent. */
|
|
1178
|
+
"helix-send": HelixHeadlessChatHelixSendElementEvent;
|
|
1077
1179
|
};
|
|
1078
1180
|
|
|
1079
1181
|
/** `HelixHeadlessCheckboxGroup` component event */
|
|
@@ -1208,7 +1310,15 @@ export type HelixHeadlessCheckboxVueEvents = {
|
|
|
1208
1310
|
};
|
|
1209
1311
|
|
|
1210
1312
|
export type HelixHeadlessCodeBlockVueProps = {
|
|
1211
|
-
/**
|
|
1313
|
+
/** Whether the content is a unified diff, drawn as the lines it changed.
|
|
1314
|
+
|
|
1315
|
+
Reflected, because the stylesheet paints a diff differently from code, and
|
|
1316
|
+
`false` reflects as no attribute at all. */
|
|
1317
|
+
diff?: (HelixHeadlessCodeBlock["diff"]) | undefined;
|
|
1318
|
+
/** What to call this block, usually a file name or a language.
|
|
1319
|
+
|
|
1320
|
+
In a diff, each file is named from the patch, and this names a patch that
|
|
1321
|
+
carries no name of its own. */
|
|
1212
1322
|
label?: (HelixHeadlessCodeBlock["label"]) | undefined;
|
|
1213
1323
|
/** Whether to leave the copy button off.
|
|
1214
1324
|
|
|
@@ -1250,6 +1360,12 @@ A false boolean reflects as the attribute's absence, so this costs no
|
|
|
1250
1360
|
reflected property taking no default is satisfied by the default being
|
|
1251
1361
|
`false`. */
|
|
1252
1362
|
noCopy?: (HelixHeadlessCodeBlock["noCopy"]) | undefined;
|
|
1363
|
+
/** How a diff's two versions are arranged; nothing without `diff`.
|
|
1364
|
+
|
|
1365
|
+
Absent is unified, each removal above its replacement, which fits any
|
|
1366
|
+
width. `split` sets the old version beside the new one. Optional rather
|
|
1367
|
+
than defaulted, so the host carries no attribute the consumer did not write. */
|
|
1368
|
+
variant?: (HelixHeadlessCodeBlock["variant"]) | undefined;
|
|
1253
1369
|
};
|
|
1254
1370
|
|
|
1255
1371
|
export type HelixHeadlessCodeBlockVueEvents = {};
|
|
@@ -1968,6 +2084,12 @@ export type HelixHeadlessDataTableHelixFilterElementEvent =
|
|
|
1968
2084
|
/** `helix-navigate` event type */
|
|
1969
2085
|
export type HelixHeadlessDataTableHelixNavigateElementEvent =
|
|
1970
2086
|
HelixHeadlessDataTableElementEvent<HelixNavigateEvent>;
|
|
2087
|
+
/** `helix-reorder` event type */
|
|
2088
|
+
export type HelixHeadlessDataTableHelixReorderElementEvent =
|
|
2089
|
+
HelixHeadlessDataTableElementEvent<HelixReorderEvent>;
|
|
2090
|
+
/** `helix-select` event type */
|
|
2091
|
+
export type HelixHeadlessDataTableHelixSelectElementEvent =
|
|
2092
|
+
HelixHeadlessDataTableElementEvent<HelixSelectEvent>;
|
|
1971
2093
|
/** `helix-sort` event type */
|
|
1972
2094
|
export type HelixHeadlessDataTableHelixSortElementEvent =
|
|
1973
2095
|
HelixHeadlessDataTableElementEvent<HelixSortEvent>;
|
|
@@ -1977,6 +2099,10 @@ export type HelixHeadlessDataTableVueProps = {
|
|
|
1977
2099
|
"default-filter"?: (HelixHeadlessDataTable["defaultFilter"]) | undefined;
|
|
1978
2100
|
/** Query to open with, where nothing declared one. */
|
|
1979
2101
|
defaultFilter?: (HelixHeadlessDataTable["defaultFilter"]) | undefined;
|
|
2102
|
+
/** Column order to open with, where nothing declared one. */
|
|
2103
|
+
"default-order"?: (HelixHeadlessDataTable["defaultOrder"]) | undefined;
|
|
2104
|
+
/** Column order to open with, where nothing declared one. */
|
|
2105
|
+
defaultOrder?: (HelixHeadlessDataTable["defaultOrder"]) | undefined;
|
|
1980
2106
|
/** Page to open on, where nothing declared one. */
|
|
1981
2107
|
"default-page"?: (HelixHeadlessDataTable["defaultPage"]) | undefined;
|
|
1982
2108
|
/** Page to open on, where nothing declared one. */
|
|
@@ -1985,6 +2111,10 @@ export type HelixHeadlessDataTableVueProps = {
|
|
|
1985
2111
|
"default-page-size"?: (HelixHeadlessDataTable["defaultPageSize"]) | undefined;
|
|
1986
2112
|
/** Page size to open with, where nothing declared one. */
|
|
1987
2113
|
defaultPageSize?: (HelixHeadlessDataTable["defaultPageSize"]) | undefined;
|
|
2114
|
+
/** Keys to open with selected, comma separated, where nothing declared any. */
|
|
2115
|
+
"default-selected"?: (HelixHeadlessDataTable["defaultSelected"]) | undefined;
|
|
2116
|
+
/** Keys to open with selected, comma separated, where nothing declared any. */
|
|
2117
|
+
defaultSelected?: (HelixHeadlessDataTable["defaultSelected"]) | undefined;
|
|
1988
2118
|
/** Order to open on, where nothing declared one. */
|
|
1989
2119
|
"default-sort"?: (HelixHeadlessDataTable["defaultSort"]) | undefined;
|
|
1990
2120
|
/** Order to open on, where nothing declared one. */
|
|
@@ -2003,29 +2133,14 @@ Set it and this element defers: a reader's click fires `helix-sort` and
|
|
|
2003
2133
|
changes nothing until a new value arrives. `default-sort` seeds an order this
|
|
2004
2134
|
element then owns. */
|
|
2005
2135
|
sort?: (HelixHeadlessDataTable["sort"]) | undefined;
|
|
2006
|
-
/**
|
|
2007
|
-
|
|
2008
|
-
**Needed before selection exists, not after.** Lit keys the rendered rows by
|
|
2009
|
-
it, so a sort moves a row's element rather than rewriting every cell in
|
|
2010
|
-
place, which is what keeps focus inside a cell and keeps a CSS transition
|
|
2011
|
-
attached to the row it belongs to. Left unset the index is the key, which is
|
|
2012
|
-
correct only while nothing reorders: it is why this defaults to something
|
|
2013
|
-
that works and is worth setting anyway. */
|
|
2014
|
-
key?: (HelixHeadlessDataTable["key"]) | undefined;
|
|
2136
|
+
/** Accessible name for the grid. */
|
|
2137
|
+
label?: (HelixHeadlessDataTable["label"]) | undefined;
|
|
2015
2138
|
/** What the rows are narrowed to, as one query across every column.
|
|
2016
2139
|
|
|
2017
2140
|
One query rather than a predicate per column, which is what a reader means
|
|
2018
2141
|
by a search box above a table. It matches on each column's ordering value,
|
|
2019
2142
|
so search and sort cannot disagree about what a column holds. */
|
|
2020
2143
|
filter?: (HelixHeadlessDataTable["filter"]) | undefined;
|
|
2021
|
-
/** Accessible name for the grid. */
|
|
2022
|
-
label?: (HelixHeadlessDataTable["label"]) | undefined;
|
|
2023
|
-
/** The page on show, from 1.
|
|
2024
|
-
|
|
2025
|
-
Clamped on the way out, so what this reports is the page it drew: a
|
|
2026
|
-
bookmarked link to page 99 of a result that has since shrunk reads back as
|
|
2027
|
-
the last page rather than as 99. */
|
|
2028
|
-
page?: (HelixHeadlessDataTable["page"]) | undefined;
|
|
2029
2144
|
/** Whether this element does the work or asks the consumer to.
|
|
2030
2145
|
|
|
2031
2146
|
`client` filters, sorts and pages `rows` itself. `server` applies none of
|
|
@@ -2035,6 +2150,64 @@ the client cannot hold the data, so this is not an optimization, it is the
|
|
|
2035
2150
|
only mode that works, and it is here from the start because adding it later
|
|
2036
2151
|
inverts the data flow. */
|
|
2037
2152
|
mode?: (HelixHeadlessDataTable["mode"]) | undefined;
|
|
2153
|
+
/** The page on show, from 1.
|
|
2154
|
+
|
|
2155
|
+
Clamped on the way out, so what this reports is the page it drew: a
|
|
2156
|
+
bookmarked link to page 99 of a result that has since shrunk reads back as
|
|
2157
|
+
the last page rather than as 99. */
|
|
2158
|
+
page?: (HelixHeadlessDataTable["page"]) | undefined;
|
|
2159
|
+
/** Whether a reader may move the columns.
|
|
2160
|
+
|
|
2161
|
+
Each heading with a `field` gets a grip, dragged along the header or moved a
|
|
2162
|
+
place at a time with the arrow keys once it has focus. */
|
|
2163
|
+
reorderable?: (HelixHeadlessDataTable["reorderable"]) | undefined;
|
|
2164
|
+
/** The columns' order, as their fields separated by spaces.
|
|
2165
|
+
|
|
2166
|
+
A reader's move fires `helix-reorder` first, and refusing it leaves the
|
|
2167
|
+
columns where they were, which is how a consumer who stores the order takes
|
|
2168
|
+
the decision. `default-order` seeds an order this element then owns. A field not named
|
|
2169
|
+
keeps its place after the named ones, and a column with no field never
|
|
2170
|
+
moves. */
|
|
2171
|
+
order?: (HelixHeadlessDataTable["order"]) | undefined;
|
|
2172
|
+
/** The field naming a row's stable identity.
|
|
2173
|
+
|
|
2174
|
+
**Needed before selection exists, not after.** Lit keys the rendered rows by
|
|
2175
|
+
it, so a sort moves a row's element rather than rewriting every cell in
|
|
2176
|
+
place, which is what keeps focus inside a cell and keeps a CSS transition
|
|
2177
|
+
attached to the row it belongs to. Left unset the index is the key, which is
|
|
2178
|
+
correct only while nothing reorders: it is why this defaults to something
|
|
2179
|
+
that works and is worth setting anyway.
|
|
2180
|
+
|
|
2181
|
+
**`row-key` and not `key`**, which is what it was called until selection
|
|
2182
|
+
needed it from React: `key` is reserved there, and a JSX `key` never reaches
|
|
2183
|
+
the element, so a React page could not tell the table which field a row is. */
|
|
2184
|
+
"row-key"?: (HelixHeadlessDataTable["rowKey"]) | undefined;
|
|
2185
|
+
/** The field naming a row's stable identity.
|
|
2186
|
+
|
|
2187
|
+
**Needed before selection exists, not after.** Lit keys the rendered rows by
|
|
2188
|
+
it, so a sort moves a row's element rather than rewriting every cell in
|
|
2189
|
+
place, which is what keeps focus inside a cell and keeps a CSS transition
|
|
2190
|
+
attached to the row it belongs to. Left unset the index is the key, which is
|
|
2191
|
+
correct only while nothing reorders: it is why this defaults to something
|
|
2192
|
+
that works and is worth setting anyway.
|
|
2193
|
+
|
|
2194
|
+
**`row-key` and not `key`**, which is what it was called until selection
|
|
2195
|
+
needed it from React: `key` is reserved there, and a JSX `key` never reaches
|
|
2196
|
+
the element, so a React page could not tell the table which field a row is. */
|
|
2197
|
+
rowKey?: (HelixHeadlessDataTable["rowKey"]) | undefined;
|
|
2198
|
+
/** Whether a reader may select rows, with a column of checkboxes.
|
|
2199
|
+
|
|
2200
|
+
Wants `row-key`: a selection is a set of identities, and without one the rows
|
|
2201
|
+
are known by their place in the result, which a sort changes. */
|
|
2202
|
+
selectable?: (HelixHeadlessDataTable["selectable"]) | undefined;
|
|
2203
|
+
/** The keys of the selected rows, comma separated.
|
|
2204
|
+
|
|
2205
|
+
A string rather than an array, so it is an attribute a server writes and a
|
|
2206
|
+
framework's hydration keeps, and the shape a multiple Listbox already uses.
|
|
2207
|
+
A key holding a comma cannot be told apart from two keys, which is the
|
|
2208
|
+
price of the shape. A reader's choice fires `helix-select` first, and
|
|
2209
|
+
refusing it leaves the selection as it was. */
|
|
2210
|
+
selected?: (HelixHeadlessDataTable["selected"]) | undefined;
|
|
2038
2211
|
/** How many rows a page holds. Zero is every row, which is what "no paging" means.
|
|
2039
2212
|
|
|
2040
2213
|
**It announces nothing, and that is not an omission.** Nothing in this
|
|
@@ -2114,6 +2287,10 @@ export type HelixHeadlessDataTableVueEvents = {
|
|
|
2114
2287
|
"helix-filter": HelixHeadlessDataTableHelixFilterElementEvent;
|
|
2115
2288
|
/** Fired when a reader asks for another page, and cancelable. */
|
|
2116
2289
|
"helix-navigate": HelixHeadlessDataTableHelixNavigateElementEvent;
|
|
2290
|
+
/** Fired when a reader asks for the columns in another order, with every field in the new one, and cancelable. */
|
|
2291
|
+
"helix-reorder": HelixHeadlessDataTableHelixReorderElementEvent;
|
|
2292
|
+
/** Fired when a reader changes which rows are selected, with every selected key comma separated, and cancelable. */
|
|
2293
|
+
"helix-select": HelixHeadlessDataTableHelixSelectElementEvent;
|
|
2117
2294
|
/** Fired when a reader asks for a different order, and cancelable. */
|
|
2118
2295
|
"helix-sort": HelixHeadlessDataTableHelixSortElementEvent;
|
|
2119
2296
|
};
|
|
@@ -2531,6 +2708,35 @@ export type HelixHeadlessDatePickerVueEvents = {
|
|
|
2531
2708
|
input: HelixHeadlessDatePickerElementEvent;
|
|
2532
2709
|
};
|
|
2533
2710
|
|
|
2711
|
+
export type HelixHeadlessDescriptionListItemVueProps = {
|
|
2712
|
+
/** What the value is, for the common case of plain text.
|
|
2713
|
+
|
|
2714
|
+
The fallback of the `label` slot, so slotted content replaces it rather than
|
|
2715
|
+
appearing beside it. */
|
|
2716
|
+
label?: (HelixHeadlessDescriptionListItem["label"]) | undefined;
|
|
2717
|
+
};
|
|
2718
|
+
|
|
2719
|
+
export type HelixHeadlessDescriptionListItemVueEvents = {};
|
|
2720
|
+
|
|
2721
|
+
export type HelixHeadlessDescriptionListVueProps = {
|
|
2722
|
+
/** Whether each label sits over its value or beside it.
|
|
2723
|
+
|
|
2724
|
+
Absent is a column, the label over the value, which fits any width and is
|
|
2725
|
+
how a narrow panel reads. `row` puts every label in one column and every
|
|
2726
|
+
value in the next, which is how a wide panel is scanned: down the labels to
|
|
2727
|
+
the one wanted, then across.
|
|
2728
|
+
|
|
2729
|
+
On the list rather than on each item, because beside only reads when the
|
|
2730
|
+
labels line up, and lining up is a fact about all of them.
|
|
2731
|
+
|
|
2732
|
+
**Optional rather than defaulted to `column`**, for the reason `Stat` gives:
|
|
2733
|
+
a reflecting default writes an attribute onto markup the consumer rendered,
|
|
2734
|
+
and React reports that as a hydration mismatch. */
|
|
2735
|
+
direction?: (HelixHeadlessDescriptionList["direction"]) | undefined;
|
|
2736
|
+
};
|
|
2737
|
+
|
|
2738
|
+
export type HelixHeadlessDescriptionListVueEvents = {};
|
|
2739
|
+
|
|
2534
2740
|
/** `HelixHeadlessDialog` component event */
|
|
2535
2741
|
export type HelixHeadlessDialogElementEvent<E = Event> = TypedEvent<
|
|
2536
2742
|
HelixHeadlessDialog,
|
|
@@ -2967,6 +3173,171 @@ export type HelixHeadlessFileInputVueEvents = {
|
|
|
2967
3173
|
"helix-before-change": HelixHeadlessFileInputHelixBeforeChangeElementEvent;
|
|
2968
3174
|
};
|
|
2969
3175
|
|
|
3176
|
+
/** `HelixHeadlessFilterChip` component event */
|
|
3177
|
+
export type HelixHeadlessFilterChipElementEvent<E = Event> = TypedEvent<
|
|
3178
|
+
HelixHeadlessFilterChip,
|
|
3179
|
+
E
|
|
3180
|
+
>;
|
|
3181
|
+
/** `helix-dismiss` event type */
|
|
3182
|
+
export type HelixHeadlessFilterChipHelixDismissElementEvent =
|
|
3183
|
+
HelixHeadlessFilterChipElementEvent<HelixDismissEvent>;
|
|
3184
|
+
|
|
3185
|
+
export type HelixHeadlessFilterChipVueProps = {
|
|
3186
|
+
/** The field this filter is on, as a reader sees it.
|
|
3187
|
+
|
|
3188
|
+
The slot's fallback rather than the slot's replacement: a consumer who wants
|
|
3189
|
+
a mark beside the name slots `field` and this goes unused. */
|
|
3190
|
+
label?: (HelixHeadlessFilterChip["label"]) | undefined;
|
|
3191
|
+
/** The field this filter is on, as the consumer's model calls it.
|
|
3192
|
+
|
|
3193
|
+
Never shown. Reflected, because a consumer removing one filter from a list
|
|
3194
|
+
of them selects on this, and so undefaulted for the reason `operator` gives.
|
|
3195
|
+
|
|
3196
|
+
**A chip built in script should be given the attribute, not the property**,
|
|
3197
|
+
if the next thing to happen might select on it. Reflection is written on
|
|
3198
|
+
this element's next update rather than during the assignment, so a second
|
|
3199
|
+
`helix-facet` for the same field arriving in the same frame selects nothing,
|
|
3200
|
+
builds a second chip, and leaves the row holding two of one filter. The
|
|
3201
|
+
lookup then finds whichever came first, so dismissing one chip takes the
|
|
3202
|
+
other away. `setAttribute('name', field)` is true immediately and costs
|
|
3203
|
+
nothing; the property is for markup and for frameworks that write both. */
|
|
3204
|
+
name?: (HelixHeadlessFilterChip["name"]) | undefined;
|
|
3205
|
+
/** What the consumer's own model calls the comparison in force.
|
|
3206
|
+
|
|
3207
|
+
Never shown, and it is what a consumer matches on when the chip comes back
|
|
3208
|
+
to them. `label` translates; this does not.
|
|
3209
|
+
|
|
3210
|
+
Reflected and so undefaulted: a reflected property with a default writes an
|
|
3211
|
+
attribute on upgrade that the server never wrote, and the two markups differ
|
|
3212
|
+
before a reader has touched anything. */
|
|
3213
|
+
operator?: (HelixHeadlessFilterChip["operator"]) | undefined;
|
|
3214
|
+
/** The comparison, as a reader sees it, and empty for the field's usual one.
|
|
3215
|
+
|
|
3216
|
+
**Empty is the whole design and not an oversight.** A chip drawn for the
|
|
3217
|
+
comparison a field is normally filtered by says the field and the values and
|
|
3218
|
+
nothing between them, because a word every chip carries is a word nobody
|
|
3219
|
+
reads. The moment somebody picks a different comparison it appears, which
|
|
3220
|
+
makes an unusual filter look unusual. */
|
|
3221
|
+
"operator-label"?: (HelixHeadlessFilterChip["operatorLabel"]) | undefined;
|
|
3222
|
+
/** The comparison, as a reader sees it, and empty for the field's usual one.
|
|
3223
|
+
|
|
3224
|
+
**Empty is the whole design and not an oversight.** A chip drawn for the
|
|
3225
|
+
comparison a field is normally filtered by says the field and the values and
|
|
3226
|
+
nothing between them, because a word every chip carries is a word nobody
|
|
3227
|
+
reads. The moment somebody picks a different comparison it appears, which
|
|
3228
|
+
makes an unusual filter look unusual. */
|
|
3229
|
+
operatorLabel?: (HelixHeadlessFilterChip["operatorLabel"]) | undefined;
|
|
3230
|
+
/** Whether it offers a control to take it away. */
|
|
3231
|
+
dismissible?: (HelixHeadlessFilterChip["dismissible"]) | undefined;
|
|
3232
|
+
/** Accessible name for that control.
|
|
3233
|
+
|
|
3234
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
3235
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
3236
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
3237
|
+
would catch. */
|
|
3238
|
+
"dismiss-label"?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
|
|
3239
|
+
/** Accessible name for that control.
|
|
3240
|
+
|
|
3241
|
+
`attribute` is spelled out because Lit lowercases a property name to
|
|
3242
|
+
derive one rather than dash-casing it, so this would otherwise be
|
|
3243
|
+
reachable only as `dismisslabel`, which nobody would guess and no linter
|
|
3244
|
+
would catch. */
|
|
3245
|
+
dismissLabel?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
|
|
3246
|
+
};
|
|
3247
|
+
|
|
3248
|
+
export type HelixHeadlessFilterChipVueEvents = {
|
|
3249
|
+
/** Fired when the reader asks to remove the filter. Cancelable: refusing it takes the decision and nothing moves. */
|
|
3250
|
+
"helix-dismiss": HelixHeadlessFilterChipHelixDismissElementEvent;
|
|
3251
|
+
};
|
|
3252
|
+
|
|
3253
|
+
export type HelixHeadlessFilterFieldVueProps = {
|
|
3254
|
+
/** What a reader is shown, in the menu and on every chip built from this field. */
|
|
3255
|
+
label?: (HelixHeadlessFilterField["label"]) | undefined;
|
|
3256
|
+
/** What the consumer's own model calls this field.
|
|
3257
|
+
|
|
3258
|
+
Never shown, and what arrives in the filter this helps build.
|
|
3259
|
+
|
|
3260
|
+
Reflected and so undefaulted: a reflected property with a default writes an
|
|
3261
|
+
attribute on upgrade that the server never wrote. */
|
|
3262
|
+
name?: (HelixHeadlessFilterField["name"]) | undefined;
|
|
3263
|
+
};
|
|
3264
|
+
|
|
3265
|
+
export type HelixHeadlessFilterFieldVueEvents = {};
|
|
3266
|
+
|
|
3267
|
+
/** `HelixHeadlessFilterMenu` component event */
|
|
3268
|
+
export type HelixHeadlessFilterMenuElementEvent<E = Event> = TypedEvent<
|
|
3269
|
+
HelixHeadlessFilterMenu,
|
|
3270
|
+
E
|
|
3271
|
+
>;
|
|
3272
|
+
/** `helix-facet` event type */
|
|
3273
|
+
export type HelixHeadlessFilterMenuHelixFacetElementEvent =
|
|
3274
|
+
HelixHeadlessFilterMenuElementEvent<HelixFacetEvent>;
|
|
3275
|
+
|
|
3276
|
+
export type HelixHeadlessFilterMenuVueProps = {
|
|
3277
|
+
/** Accessible name for the menu. */
|
|
3278
|
+
label?: (HelixHeadlessFilterMenu["label"]) | undefined;
|
|
3279
|
+
};
|
|
3280
|
+
|
|
3281
|
+
export type HelixHeadlessFilterMenuVueEvents = {
|
|
3282
|
+
/** Fired when a field's values change. Cancelable: refusing it takes the decision and nothing moves. */
|
|
3283
|
+
"helix-facet": HelixHeadlessFilterMenuHelixFacetElementEvent;
|
|
3284
|
+
};
|
|
3285
|
+
|
|
3286
|
+
export type HelixHeadlessFilterOperatorVueProps = {
|
|
3287
|
+
/** How many values this comparison takes.
|
|
3288
|
+
|
|
3289
|
+
`none` is a comparison that is complete on its own, which is what `is empty`
|
|
3290
|
+
and `is set` are: a chip drawn for one shows no values because there are
|
|
3291
|
+
none to show, and the menu that builds it offers nothing to pick.
|
|
3292
|
+
|
|
3293
|
+
`one` takes a single value, which is every scalar comparison: `is after` a
|
|
3294
|
+
date, `is above` a number. `many` takes a set, which is what `is any of` and
|
|
3295
|
+
`is none of` are, and is the only arity a multi-select panel makes sense
|
|
3296
|
+
for.
|
|
3297
|
+
|
|
3298
|
+
Read rather than enforced. This element applies nothing, so the arity is a
|
|
3299
|
+
fact the picker uses to decide what to offer, not a rule it polices. What
|
|
3300
|
+
the picker does with it: `none` offers no values at all and takes back any
|
|
3301
|
+
that were ticked, since the comparison is the whole filter; `one` replaces
|
|
3302
|
+
rather than adds, and its rows announce as one of a set. The typed grammar
|
|
3303
|
+
reads it too, refusing a list where a scalar was declared and never writing
|
|
3304
|
+
a comparison that takes nothing.
|
|
3305
|
+
|
|
3306
|
+
The arity reaches a consumer in `helix-facet`, which is what tells an empty
|
|
3307
|
+
filter from no filter: `values` empty means the field is no longer narrowing
|
|
3308
|
+
anything, unless the comparison is one that never had values to give.
|
|
3309
|
+
|
|
3310
|
+
**Undefined reads as `many`, and takes no default**, which is the rule every
|
|
3311
|
+
reflected property here answers to: a default writes an attribute on upgrade
|
|
3312
|
+
that the server never wrote, and the two markups differ before a reader has
|
|
3313
|
+
touched anything. */
|
|
3314
|
+
arity?: (HelixHeadlessFilterOperator["arity"]) | undefined;
|
|
3315
|
+
/** Whether this is the comparison the field is filtered by unless asked
|
|
3316
|
+
otherwise.
|
|
3317
|
+
|
|
3318
|
+
The chip leaves a default operator unwritten, so the common filter reads as
|
|
3319
|
+
a field and its values and nothing else, and the word only appears once
|
|
3320
|
+
somebody has chosen a comparison worth noticing. */
|
|
3321
|
+
default?: (HelixHeadlessFilterOperator["default"]) | undefined;
|
|
3322
|
+
/** What a reader is shown, in the chip and in the menu that changes it.
|
|
3323
|
+
|
|
3324
|
+
Words rather than symbols, and the reason is that a set has more than one
|
|
3325
|
+
negation: `!=` cannot tell "is none of" from "is not all of", and both are
|
|
3326
|
+
filters somebody wants. A chip is read, so it takes the reading. The text
|
|
3327
|
+
grammar a consumer types is theirs and may use whatever symbols it likes. */
|
|
3328
|
+
label?: (HelixHeadlessFilterOperator["label"]) | undefined;
|
|
3329
|
+
/** What the consumer's own model calls this comparison.
|
|
3330
|
+
|
|
3331
|
+
Never shown. It is what arrives in the filter this element helps build, so
|
|
3332
|
+
a consumer matches on it rather than on the words a reader sees, and
|
|
3333
|
+
translating the label breaks nothing.
|
|
3334
|
+
|
|
3335
|
+
Reflected and so undefaulted, for the reason `arity` gives above. */
|
|
3336
|
+
name?: (HelixHeadlessFilterOperator["name"]) | undefined;
|
|
3337
|
+
};
|
|
3338
|
+
|
|
3339
|
+
export type HelixHeadlessFilterOperatorVueEvents = {};
|
|
3340
|
+
|
|
2970
3341
|
/** `HelixHeadlessFilterInput` component event */
|
|
2971
3342
|
export type HelixHeadlessFilterInputElementEvent<E = Event> = TypedEvent<
|
|
2972
3343
|
HelixHeadlessFilterInput,
|
|
@@ -2981,6 +3352,15 @@ export type HelixHeadlessFilterInputHelixBeforeCloseElementEvent =
|
|
|
2981
3352
|
/** `helix-before-open` event type */
|
|
2982
3353
|
export type HelixHeadlessFilterInputHelixBeforeOpenElementEvent =
|
|
2983
3354
|
HelixHeadlessFilterInputElementEvent<HelixBeforeOpenEvent>;
|
|
3355
|
+
/** `helix-dismiss` event type */
|
|
3356
|
+
export type HelixHeadlessFilterInputHelixDismissElementEvent =
|
|
3357
|
+
HelixHeadlessFilterInputElementEvent<HelixDismissEvent>;
|
|
3358
|
+
/** `helix-facet` event type */
|
|
3359
|
+
export type HelixHeadlessFilterInputHelixFacetElementEvent =
|
|
3360
|
+
HelixHeadlessFilterInputElementEvent<HelixFacetEvent>;
|
|
3361
|
+
/** `helix-select` event type */
|
|
3362
|
+
export type HelixHeadlessFilterInputHelixSelectElementEvent =
|
|
3363
|
+
HelixHeadlessFilterInputElementEvent<HelixSelectEvent>;
|
|
2984
3364
|
|
|
2985
3365
|
export type HelixHeadlessFilterInputVueProps = {
|
|
2986
3366
|
/** Whether the field offers a button that empties it.
|
|
@@ -3085,6 +3465,12 @@ export type HelixHeadlessFilterInputVueEvents = {
|
|
|
3085
3465
|
"helix-before-close": HelixHeadlessFilterInputHelixBeforeCloseElementEvent;
|
|
3086
3466
|
/** Fired before the suggestions show, and cancelable. */
|
|
3087
3467
|
"helix-before-open": HelixHeadlessFilterInputHelixBeforeOpenElementEvent;
|
|
3468
|
+
/** A token asking to go, from its close control or from Backspace on an empty field. A `FilterChip` naming a declared field is answered as `helix-facet` instead. Cancelable: refusing it takes the decision and the token stays. */
|
|
3469
|
+
"helix-dismiss": HelixHeadlessFilterInputHelixDismissElementEvent;
|
|
3470
|
+
/** Fired when a filter changes, whether read out of the text, picked, or dismissed. Cancelable: refusing it leaves the text and the chip where they were. */
|
|
3471
|
+
"helix-facet": HelixHeadlessFilterInputHelixFacetElementEvent;
|
|
3472
|
+
/** A suggestion was chosen: the option's own, heard here because it bubbles out of `suggestions`. Cancelable: refusing it takes the decision from any other listener, and this field never acts on a choice itself, since what it means is the page's. */
|
|
3473
|
+
"helix-select": HelixHeadlessFilterInputHelixSelectElementEvent;
|
|
3088
3474
|
/** Announced once the text has moved. */
|
|
3089
3475
|
input: HelixHeadlessFilterInputElementEvent;
|
|
3090
3476
|
/** Says the panel moved, carrying `newState` and `oldState`. */
|
|
@@ -3726,10 +4112,12 @@ shadow root names a table in that root rather than in the document.
|
|
|
3726
4112
|
export type HelixHeadlessLegendVueEvents = {};
|
|
3727
4113
|
|
|
3728
4114
|
export type HelixHeadlessLineChartVueProps = {
|
|
3729
|
-
/** Whether a wash is drawn under each line.
|
|
4115
|
+
/** Whether a wash is drawn under each line, each from the floor on its own.
|
|
4116
|
+
The washes overlap rather than add up: for parts that make a total, use
|
|
4117
|
+
`Area Chart`, which stacks them.
|
|
3730
4118
|
|
|
3731
4119
|
Absent is lines alone, which is what suits more than one series: washes
|
|
3732
|
-
|
|
4120
|
+
overlap and the lower ones are read through the upper. One series over a
|
|
3733
4121
|
ground it should feel like a quantity against is the case for this. */
|
|
3734
4122
|
area?: (HelixHeadlessLineChart["area"]) | undefined;
|
|
3735
4123
|
/** How the line gets from one reading to the next.
|
|
@@ -4156,6 +4544,17 @@ Only meaningful beside an `href`, and only for a file served from this
|
|
|
4156
4544
|
origin: the attribute is ignored cross-origin, which is the browser's rule
|
|
4157
4545
|
about who may name a file on somebody's disk rather than a gap here. */
|
|
4158
4546
|
download?: (HelixHeadlessMenuItem["download"]) | undefined;
|
|
4547
|
+
/** Whether only one row of the set it belongs to can be on.
|
|
4548
|
+
|
|
4549
|
+
Announcement and nothing else, the way `checkable` is: this element applies
|
|
4550
|
+
no choice and polices no group, so what it does is tell a reader which kind
|
|
4551
|
+
of set they are in. `menuitemcheckbox` says every row here is independent,
|
|
4552
|
+
which for a run of comparisons, or the values of a filter that compares
|
|
4553
|
+
against one, is the opposite of true.
|
|
4554
|
+
|
|
4555
|
+
Meaningless without `checkable`, since a row that cannot be ticked is not
|
|
4556
|
+
one of a set of anything. */
|
|
4557
|
+
exclusive?: (HelixHeadlessMenuItem["exclusive"]) | undefined;
|
|
4159
4558
|
/** Where the row goes, which makes it a real link.
|
|
4160
4559
|
|
|
4161
4560
|
**The row itself becomes an `<a>`, and the role goes with it.** A
|
|
@@ -4187,13 +4586,14 @@ Set by the menu, and a property rather than an attribute for that reason.
|
|
|
4187
4586
|
Public because the menu has to reach it, and not something a consumer
|
|
4188
4587
|
writes: which page is open is the menu's business. */
|
|
4189
4588
|
onPage?: (HelixHeadlessMenuItem["onPage"]) | undefined;
|
|
4190
|
-
/** Whether this row's submenu
|
|
4589
|
+
/** Whether the page showing is this row's submenu, or one below it.
|
|
4191
4590
|
|
|
4192
4591
|
Separate from `onPage`, and it has to be. A row that opened a page is not
|
|
4193
4592
|
itself on that page, so both are false for it, and rendering nothing on
|
|
4194
4593
|
that basis takes its `slot[name="submenu"]` with it: the rows inside have
|
|
4195
|
-
nowhere to be assigned and are never laid out.
|
|
4196
|
-
page has to keep
|
|
4594
|
+
nowhere to be assigned and are never laid out. Every row on the way down to
|
|
4595
|
+
the open page has to keep its slot, not only the one directly above it.
|
|
4596
|
+
Three levels deep, the topmost row holds the slot the middle one lives in. */
|
|
4197
4597
|
showingSubmenu?: (HelixHeadlessMenuItem["showingSubmenu"]) | undefined;
|
|
4198
4598
|
};
|
|
4199
4599
|
|
|
@@ -4374,6 +4774,63 @@ export type HelixHeadlessNavigationVueProps = {
|
|
|
4374
4774
|
|
|
4375
4775
|
export type HelixHeadlessNavigationVueEvents = {};
|
|
4376
4776
|
|
|
4777
|
+
/** `HelixHeadlessNotificationGroup` component event */
|
|
4778
|
+
export type HelixHeadlessNotificationGroupElementEvent<E = Event> = TypedEvent<
|
|
4779
|
+
HelixHeadlessNotificationGroup,
|
|
4780
|
+
E
|
|
4781
|
+
>;
|
|
4782
|
+
/** `helix-before-close` event type */
|
|
4783
|
+
export type HelixHeadlessNotificationGroupHelixBeforeCloseElementEvent =
|
|
4784
|
+
HelixHeadlessNotificationGroupElementEvent<HelixBeforeCloseEvent>;
|
|
4785
|
+
/** `helix-before-open` event type */
|
|
4786
|
+
export type HelixHeadlessNotificationGroupHelixBeforeOpenElementEvent =
|
|
4787
|
+
HelixHeadlessNotificationGroupElementEvent<HelixBeforeOpenEvent>;
|
|
4788
|
+
|
|
4789
|
+
export type HelixHeadlessNotificationGroupVueProps = {
|
|
4790
|
+
/** Whether the group can be collapsed to its first row.
|
|
4791
|
+
|
|
4792
|
+
Off by default, because a group is a heading before it is a control: a feed
|
|
4793
|
+
cut by day wants its days named and rarely wants them folded, and a control
|
|
4794
|
+
that does nothing anybody asked for is still a tab stop. */
|
|
4795
|
+
collapsible?: (HelixHeadlessNotificationGroup["collapsible"]) | undefined;
|
|
4796
|
+
/** How many notifications this group stands for.
|
|
4797
|
+
|
|
4798
|
+
**Not the number of rows, and that is the point.** A group saying five with
|
|
4799
|
+
one row under it and a link to the rest is the ordinary shape of a feed that
|
|
4800
|
+
has been trimmed, and deriving this from the children would make it
|
|
4801
|
+
unsayable. Left off, it is the number of rows. */
|
|
4802
|
+
count?: (HelixHeadlessNotificationGroup["count"]) | undefined;
|
|
4803
|
+
/** What the group is called: a day, a subject, a person.
|
|
4804
|
+
|
|
4805
|
+
The slot's fallback rather than its replacement, so a consumer who wants a
|
|
4806
|
+
mark beside the name slots `label` and this goes unused. */
|
|
4807
|
+
label?: (HelixHeadlessNotificationGroup["label"]) | undefined;
|
|
4808
|
+
/** Whether the element is open.
|
|
4809
|
+
|
|
4810
|
+
One property, not two, so `dialog.open` answers the question anyone
|
|
4811
|
+
asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
4812
|
+
same statement in markup.
|
|
4813
|
+
|
|
4814
|
+
**Not reflected, and that is required rather than tidy.** Reflection
|
|
4815
|
+
writes the resolved state back as an attribute, so an element that opened
|
|
4816
|
+
itself would put `open` on its own host: cloned, serialized for
|
|
4817
|
+
hydration, or diffed by a framework, it comes back holding whatever the
|
|
4818
|
+
last reader did rather than what the author wrote. `:state(open)` carries
|
|
4819
|
+
the resolved state for stylesheets, which is what the mirror is for. */
|
|
4820
|
+
open?: (HelixHeadlessNotificationGroup["open"]) | undefined;
|
|
4821
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
4822
|
+
"default-open"?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
|
|
4823
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
4824
|
+
defaultOpen?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
|
|
4825
|
+
};
|
|
4826
|
+
|
|
4827
|
+
export type HelixHeadlessNotificationGroupVueEvents = {
|
|
4828
|
+
/** Fired before the group folds, and cancelable. */
|
|
4829
|
+
"helix-before-close": HelixHeadlessNotificationGroupHelixBeforeCloseElementEvent;
|
|
4830
|
+
/** Fired before the group unfolds. Cancelable: refusing it takes the decision and nothing moves. */
|
|
4831
|
+
"helix-before-open": HelixHeadlessNotificationGroupHelixBeforeOpenElementEvent;
|
|
4832
|
+
};
|
|
4833
|
+
|
|
4377
4834
|
/** `HelixHeadlessNotification` component event */
|
|
4378
4835
|
export type HelixHeadlessNotificationElementEvent<E = Event> = TypedEvent<
|
|
4379
4836
|
HelixHeadlessNotification,
|
|
@@ -4436,6 +4893,9 @@ export type HelixHeadlessNotificationsElementEvent<E = Event> = TypedEvent<
|
|
|
4436
4893
|
HelixHeadlessNotifications,
|
|
4437
4894
|
E
|
|
4438
4895
|
>;
|
|
4896
|
+
/** `helix-dismiss` event type */
|
|
4897
|
+
export type HelixHeadlessNotificationsHelixDismissElementEvent =
|
|
4898
|
+
HelixHeadlessNotificationsElementEvent<HelixDismissEvent>;
|
|
4439
4899
|
/** `helix-read` event type */
|
|
4440
4900
|
export type HelixHeadlessNotificationsHelixReadElementEvent =
|
|
4441
4901
|
HelixHeadlessNotificationsElementEvent<HelixReadEvent>;
|
|
@@ -4468,6 +4928,8 @@ say that without the component knowing what a row looks like. */
|
|
|
4468
4928
|
};
|
|
4469
4929
|
|
|
4470
4930
|
export type HelixHeadlessNotificationsVueEvents = {
|
|
4931
|
+
/** A row asking to be removed, dispatched by the row and heard here because the feed is what a consumer holds. Cancelable: refusing it takes the decision and the row stays. */
|
|
4932
|
+
"helix-dismiss": HelixHeadlessNotificationsHelixDismissElementEvent;
|
|
4471
4933
|
/** Fired by an item, and by this element when everything is marked read. Cancelable. */
|
|
4472
4934
|
"helix-read": HelixHeadlessNotificationsHelixReadElementEvent;
|
|
4473
4935
|
};
|
|
@@ -4598,6 +5060,65 @@ export type HelixHeadlessNumberInputVueEvents = {
|
|
|
4598
5060
|
input: HelixHeadlessNumberInputElementEvent;
|
|
4599
5061
|
};
|
|
4600
5062
|
|
|
5063
|
+
/** `HelixHeadlessObjectInspector` component event */
|
|
5064
|
+
export type HelixHeadlessObjectInspectorElementEvent<E = Event> = TypedEvent<
|
|
5065
|
+
HelixHeadlessObjectInspector,
|
|
5066
|
+
E
|
|
5067
|
+
>;
|
|
5068
|
+
/** `helix-copy` event type */
|
|
5069
|
+
export type HelixHeadlessObjectInspectorHelixCopyElementEvent =
|
|
5070
|
+
HelixHeadlessObjectInspectorElementEvent<HelixCopyEvent>;
|
|
5071
|
+
|
|
5072
|
+
export type HelixHeadlessObjectInspectorVueProps = {
|
|
5073
|
+
/** How many levels start open.
|
|
5074
|
+
|
|
5075
|
+
One by default: the root is open and everything under it closed, so a
|
|
5076
|
+
reader sees the shape of the value before its contents. `0` starts with the
|
|
5077
|
+
root closed; a large number opens everything, which on a big value is the
|
|
5078
|
+
wall of text this exists to avoid. */
|
|
5079
|
+
"default-depth"?: (HelixHeadlessObjectInspector["defaultDepth"]) | undefined;
|
|
5080
|
+
/** How many levels start open.
|
|
5081
|
+
|
|
5082
|
+
One by default: the root is open and everything under it closed, so a
|
|
5083
|
+
reader sees the shape of the value before its contents. `0` starts with the
|
|
5084
|
+
root closed; a large number opens everything, which on a big value is the
|
|
5085
|
+
wall of text this exists to avoid. */
|
|
5086
|
+
defaultDepth?: (HelixHeadlessObjectInspector["defaultDepth"]) | undefined;
|
|
5087
|
+
/** The id of a `<script type="application/json">` holding the value.
|
|
5088
|
+
|
|
5089
|
+
Read once the document exists, and again whenever this changes. Text that
|
|
5090
|
+
does not parse leaves the inspector empty rather than throwing, since a
|
|
5091
|
+
page's markup should not take the page down over a comma. */
|
|
5092
|
+
for?: (HelixHeadlessObjectInspector["for"]) | undefined;
|
|
5093
|
+
/** Accessible name for the tree, and the text of the header where there is one. */
|
|
5094
|
+
label?: (HelixHeadlessObjectInspector["label"]) | undefined;
|
|
5095
|
+
/** Whether to leave the copy button off.
|
|
5096
|
+
|
|
5097
|
+
Negative for the reason Code Block's is: a boolean attribute defaulting to
|
|
5098
|
+
true could never be turned off from markup. */
|
|
5099
|
+
"no-copy"?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
|
|
5100
|
+
/** Whether to leave the copy button off.
|
|
5101
|
+
|
|
5102
|
+
Negative for the reason Code Block's is: a boolean attribute defaulting to
|
|
5103
|
+
true could never be turned off from markup. */
|
|
5104
|
+
noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
|
|
5105
|
+
/** Whether to draw only the rows in view.
|
|
5106
|
+
|
|
5107
|
+
For a value of thousands of entries. Reflected, because the box it scrolls
|
|
5108
|
+
needs a height, which is a stylesheet rule reading this attribute. */
|
|
5109
|
+
windowed?: (HelixHeadlessObjectInspector["windowed"]) | undefined;
|
|
5110
|
+
/** The value itself, for a page that already holds it.
|
|
5111
|
+
|
|
5112
|
+
Takes precedence over `for`. Anything JSON can say is drawn; anything else
|
|
5113
|
+
is shown as its string. */
|
|
5114
|
+
value?: (HelixHeadlessObjectInspector["value"]) | undefined;
|
|
5115
|
+
};
|
|
5116
|
+
|
|
5117
|
+
export type HelixHeadlessObjectInspectorVueEvents = {
|
|
5118
|
+
/** A value was put on the clipboard, from the copy button or the keyboard. */
|
|
5119
|
+
"helix-copy": HelixHeadlessObjectInspectorHelixCopyElementEvent;
|
|
5120
|
+
};
|
|
5121
|
+
|
|
4601
5122
|
export type HelixHeadlessOptionGroupVueProps = {
|
|
4602
5123
|
/** The heading over the run. */
|
|
4603
5124
|
label?: (HelixHeadlessOptionGroup["label"]) | undefined;
|
|
@@ -4743,7 +5264,8 @@ JavaScript rather than CSS decides. */
|
|
|
4743
5264
|
behavior?: (HelixHeadlessOutline["behavior"]) | undefined;
|
|
4744
5265
|
/** Accessible name for the navigation. */
|
|
4745
5266
|
label?: (HelixHeadlessOutline["label"]) | undefined;
|
|
4746
|
-
/** How far below the top of
|
|
5267
|
+
/** How far below the top of what scrolls a heading counts as reached, in
|
|
5268
|
+
pixels: the window, or the panel the sections scroll in.
|
|
4747
5269
|
|
|
4748
5270
|
The reading line. A page with a sticky masthead sets this to its height, or
|
|
4749
5271
|
a little more: without it the current section changes as a heading slides
|
|
@@ -5268,6 +5790,9 @@ export type HelixHeadlessRadioGroupElementEvent<E = Event> = TypedEvent<
|
|
|
5268
5790
|
/** `helix-before-change` event type */
|
|
5269
5791
|
export type HelixHeadlessRadioGroupHelixBeforeChangeElementEvent =
|
|
5270
5792
|
HelixHeadlessRadioGroupElementEvent<HelixBeforeChangeEvent>;
|
|
5793
|
+
/** `helix-select` event type */
|
|
5794
|
+
export type HelixHeadlessRadioGroupHelixSelectElementEvent =
|
|
5795
|
+
HelixHeadlessRadioGroupElementEvent<HelixSelectEvent>;
|
|
5271
5796
|
|
|
5272
5797
|
export type HelixHeadlessRadioGroupVueProps = {
|
|
5273
5798
|
/** Which way the choices run. A column reads one line per answer.
|
|
@@ -5331,6 +5856,8 @@ export type HelixHeadlessRadioGroupVueEvents = {
|
|
|
5331
5856
|
change: HelixHeadlessRadioGroupElementEvent;
|
|
5332
5857
|
/** Fired when the answer changes, and cancelable. */
|
|
5333
5858
|
"helix-before-change": HelixHeadlessRadioGroupHelixBeforeChangeElementEvent;
|
|
5859
|
+
/** Fired when an answer is chosen. Dispatched by the radio and listened for here, because the group is what a consumer holds. Cancelable: refusing it takes the decision and nothing moves. */
|
|
5860
|
+
"helix-select": HelixHeadlessRadioGroupHelixSelectElementEvent;
|
|
5334
5861
|
/** Announced once the value has moved. */
|
|
5335
5862
|
input: HelixHeadlessRadioGroupElementEvent;
|
|
5336
5863
|
};
|
|
@@ -5505,6 +6032,40 @@ export type HelixHeadlessRatingVueEvents = {
|
|
|
5505
6032
|
input: HelixHeadlessRatingElementEvent;
|
|
5506
6033
|
};
|
|
5507
6034
|
|
|
6035
|
+
export type HelixHeadlessScatterChartVueProps = {
|
|
6036
|
+
/** What to call the strength of the relation in the summary. */
|
|
6037
|
+
"correlation-label"?: (HelixHeadlessScatterChart["correlationLabel"]) | undefined;
|
|
6038
|
+
/** What to call the strength of the relation in the summary. */
|
|
6039
|
+
correlationLabel?: (HelixHeadlessScatterChart["correlationLabel"]) | undefined;
|
|
6040
|
+
/** Which rules are drawn across the plot, if any.
|
|
6041
|
+
|
|
6042
|
+
Both axes are measured, so the values name an axis rather than a role:
|
|
6043
|
+
`x` rules the levels across, `y` the levels up. A bare `gridlines`, or
|
|
6044
|
+
anything unrecognized, means `both`, since neither axis is the one a scatter
|
|
6045
|
+
is read along. */
|
|
6046
|
+
gridlines?: (HelixHeadlessScatterChart["gridlines"]) | undefined;
|
|
6047
|
+
/** What to call a row in the summary, which counts them. */
|
|
6048
|
+
"points-label"?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
|
|
6049
|
+
/** What to call a row in the summary, which counts them. */
|
|
6050
|
+
pointsLabel?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
|
|
6051
|
+
/** The id of the table to read.
|
|
6052
|
+
|
|
6053
|
+
Resolved through `getRootNode()`, so a chart inside another component's
|
|
6054
|
+
shadow root names a table in that root rather than in the document. A
|
|
6055
|
+
`<table>` or anything built from grid roles, including `helix-table`.
|
|
6056
|
+
|
|
6057
|
+
**In React this arrives as a property and not as an attribute**, the way
|
|
6058
|
+
`Tooltip.for` does, so it does not reflect and nothing styles on it. */
|
|
6059
|
+
for?: (HelixHeadlessScatterChart["for"]) | undefined;
|
|
6060
|
+
/** The drawing's name, for a pointer resting on it.
|
|
6061
|
+
|
|
6062
|
+
Absent falls back to the table's own caption, which is usually the right
|
|
6063
|
+
words and is already written. */
|
|
6064
|
+
label?: (HelixHeadlessScatterChart["label"]) | undefined;
|
|
6065
|
+
};
|
|
6066
|
+
|
|
6067
|
+
export type HelixHeadlessScatterChartVueEvents = {};
|
|
6068
|
+
|
|
5508
6069
|
export type HelixHeadlessScrollAreaVueProps = {
|
|
5509
6070
|
/** Names the region, for a reader arriving at it out of context.
|
|
5510
6071
|
|
|
@@ -5643,6 +6204,23 @@ export type HelixHeadlessSkeletonVueProps = {};
|
|
|
5643
6204
|
|
|
5644
6205
|
export type HelixHeadlessSkeletonVueEvents = {};
|
|
5645
6206
|
|
|
6207
|
+
export type HelixHeadlessSkipLinkVueProps = {
|
|
6208
|
+
/** Where the reader is sent, as an in-page fragment.
|
|
6209
|
+
|
|
6210
|
+
`#main` by default, because that is the id the content region almost always
|
|
6211
|
+
has; a page whose content is somewhere else says so. Anything that is not a
|
|
6212
|
+
fragment naming an element on the page is left to the browser, as a plain
|
|
6213
|
+
link. */
|
|
6214
|
+
href?: (HelixHeadlessSkipLink["href"]) | undefined;
|
|
6215
|
+
/** The link's words, for the common case of plain text.
|
|
6216
|
+
|
|
6217
|
+
The fallback of the default slot, so slotted content replaces it rather than
|
|
6218
|
+
appearing beside it. */
|
|
6219
|
+
label?: (HelixHeadlessSkipLink["label"]) | undefined;
|
|
6220
|
+
};
|
|
6221
|
+
|
|
6222
|
+
export type HelixHeadlessSkipLinkVueEvents = {};
|
|
6223
|
+
|
|
5646
6224
|
/** `HelixHeadlessSlider` component event */
|
|
5647
6225
|
export type HelixHeadlessSliderElementEvent<E = Event> = TypedEvent<
|
|
5648
6226
|
HelixHeadlessSlider,
|
|
@@ -5863,6 +6441,9 @@ export type HelixHeadlessSpeedDialHelixBeforeCloseElementEvent =
|
|
|
5863
6441
|
/** `helix-before-open` event type */
|
|
5864
6442
|
export type HelixHeadlessSpeedDialHelixBeforeOpenElementEvent =
|
|
5865
6443
|
HelixHeadlessSpeedDialElementEvent<HelixBeforeOpenEvent>;
|
|
6444
|
+
/** `helix-select` event type */
|
|
6445
|
+
export type HelixHeadlessSpeedDialHelixSelectElementEvent =
|
|
6446
|
+
HelixHeadlessSpeedDialElementEvent<HelixSelectEvent>;
|
|
5866
6447
|
|
|
5867
6448
|
export type HelixHeadlessSpeedDialVueProps = {
|
|
5868
6449
|
/** Names the trigger and the set of actions it opens. */
|
|
@@ -5898,6 +6479,8 @@ export type HelixHeadlessSpeedDialVueEvents = {
|
|
|
5898
6479
|
"helix-before-close": HelixHeadlessSpeedDialHelixBeforeCloseElementEvent;
|
|
5899
6480
|
/** Fired before it opens, and cancelable. */
|
|
5900
6481
|
"helix-before-open": HelixHeadlessSpeedDialHelixBeforeOpenElementEvent;
|
|
6482
|
+
/** Fired when an action is chosen. Dispatched by the action and listened for here, and the dial closes behind it once it has been heard. Cancelable: refusing it takes the decision and the dial stays open. */
|
|
6483
|
+
"helix-select": HelixHeadlessSpeedDialHelixSelectElementEvent;
|
|
5901
6484
|
/** Says the state moved, carrying `newState` and `oldState`. */
|
|
5902
6485
|
toggle: HelixHeadlessSpeedDialElementEvent;
|
|
5903
6486
|
};
|
|
@@ -6062,6 +6645,9 @@ export type HelixHeadlessStepsHelixActivateElementEvent =
|
|
|
6062
6645
|
/** `helix-before-activate` event type */
|
|
6063
6646
|
export type HelixHeadlessStepsHelixBeforeActivateElementEvent =
|
|
6064
6647
|
HelixHeadlessStepsElementEvent<HelixBeforeActivateEvent>;
|
|
6648
|
+
/** `helix-select` event type */
|
|
6649
|
+
export type HelixHeadlessStepsHelixSelectElementEvent =
|
|
6650
|
+
HelixHeadlessStepsElementEvent<HelixSelectEvent>;
|
|
6065
6651
|
|
|
6066
6652
|
export type HelixHeadlessStepsVueProps = {
|
|
6067
6653
|
/** Accessible name for the sequence.
|
|
@@ -6116,6 +6702,8 @@ export type HelixHeadlessStepsVueEvents = {
|
|
|
6116
6702
|
"helix-activate": HelixHeadlessStepsHelixActivateElementEvent;
|
|
6117
6703
|
/** Fired before the active step changes. Cancelable: refusing it takes the decision and nothing moves. */
|
|
6118
6704
|
"helix-before-activate": HelixHeadlessStepsHelixBeforeActivateElementEvent;
|
|
6705
|
+
/** Fired when a step is pressed. Dispatched by the step and listened for here, because the root is what a consumer holds. Cancelable: refusing it takes the decision and nothing moves. */
|
|
6706
|
+
"helix-select": HelixHeadlessStepsHelixSelectElementEvent;
|
|
6119
6707
|
};
|
|
6120
6708
|
|
|
6121
6709
|
/** `HelixHeadlessStep` component event */
|
|
@@ -6220,6 +6808,15 @@ export type HelixHeadlessTableCellVueProps = {
|
|
|
6220
6808
|
|
|
6221
6809
|
export type HelixHeadlessTableCellVueEvents = {};
|
|
6222
6810
|
|
|
6811
|
+
/** `HelixHeadlessTableColumn` component event */
|
|
6812
|
+
export type HelixHeadlessTableColumnElementEvent<E = Event> = TypedEvent<
|
|
6813
|
+
HelixHeadlessTableColumn,
|
|
6814
|
+
E
|
|
6815
|
+
>;
|
|
6816
|
+
/** `helix-before-resize` event type */
|
|
6817
|
+
export type HelixHeadlessTableColumnHelixBeforeResizeElementEvent =
|
|
6818
|
+
HelixHeadlessTableColumnElementEvent<HelixBeforeResizeEvent>;
|
|
6819
|
+
|
|
6223
6820
|
export type HelixHeadlessTableColumnVueProps = {
|
|
6224
6821
|
/** Which edge the values line up against.
|
|
6225
6822
|
|
|
@@ -6241,6 +6838,13 @@ after a column moves is a sort a consumer cannot store in a URL.
|
|
|
6241
6838
|
Empty on a column that is purely presentational, an actions column say, and
|
|
6242
6839
|
such a column is never sortable however it is marked. */
|
|
6243
6840
|
field?: (HelixHeadlessTableColumn["field"]) | undefined;
|
|
6841
|
+
/** Whether a reader may change this column's width.
|
|
6842
|
+
|
|
6843
|
+
By dragging the edge at the end of the heading, or with the arrow keys once
|
|
6844
|
+
it has focus, a step at a time and four with Shift. The width lands in
|
|
6845
|
+
`width` as pixels, and `helix-before-resize` asks first, so a consumer who
|
|
6846
|
+
stores the widths can take the decision. */
|
|
6847
|
+
resizable?: (HelixHeadlessTableColumn["resizable"]) | undefined;
|
|
6244
6848
|
/** Whether a reader may reorder the set by this column.
|
|
6245
6849
|
|
|
6246
6850
|
Ignored without a `field`, and silently: a column with nothing to sort by
|
|
@@ -6286,7 +6890,10 @@ correct default: the raw value is what an API sorted by. */
|
|
|
6286
6890
|
compare?: (HelixHeadlessTableColumn["compare"]) | undefined;
|
|
6287
6891
|
};
|
|
6288
6892
|
|
|
6289
|
-
export type HelixHeadlessTableColumnVueEvents = {
|
|
6893
|
+
export type HelixHeadlessTableColumnVueEvents = {
|
|
6894
|
+
/** Fired as a reader resizes the column, with the width asked for, and cancelable. */
|
|
6895
|
+
"helix-before-resize": HelixHeadlessTableColumnHelixBeforeResizeElementEvent;
|
|
6896
|
+
};
|
|
6290
6897
|
|
|
6291
6898
|
export type HelixHeadlessTableVueProps = {
|
|
6292
6899
|
/** Column track list, as CSS. Deprecated: declare columns instead.
|
|
@@ -7071,6 +7678,15 @@ export type HelixHeadlessToastItemVueEvents = {
|
|
|
7071
7678
|
"helix-dismiss": HelixHeadlessToastItemHelixDismissElementEvent;
|
|
7072
7679
|
};
|
|
7073
7680
|
|
|
7681
|
+
/** `HelixHeadlessToast` component event */
|
|
7682
|
+
export type HelixHeadlessToastElementEvent<E = Event> = TypedEvent<
|
|
7683
|
+
HelixHeadlessToast,
|
|
7684
|
+
E
|
|
7685
|
+
>;
|
|
7686
|
+
/** `helix-dismiss` event type */
|
|
7687
|
+
export type HelixHeadlessToastHelixDismissElementEvent =
|
|
7688
|
+
HelixHeadlessToastElementEvent<HelixDismissEvent>;
|
|
7689
|
+
|
|
7074
7690
|
export type HelixHeadlessToastVueProps = {
|
|
7075
7691
|
/** Accessible name for the region, such as "Notifications". */
|
|
7076
7692
|
label?: (HelixHeadlessToast["label"]) | undefined;
|
|
@@ -7089,7 +7705,10 @@ departures, which is what `orientation` does. */
|
|
|
7089
7705
|
placement?: (HelixHeadlessToast["placement"]) | undefined;
|
|
7090
7706
|
};
|
|
7091
7707
|
|
|
7092
|
-
export type HelixHeadlessToastVueEvents = {
|
|
7708
|
+
export type HelixHeadlessToastVueEvents = {
|
|
7709
|
+
/** A message asking to go, by its control or by its timer, dispatched by the message and heard here because the stack is what a consumer holds. Cancelable: refusing it takes the decision and the message stays. */
|
|
7710
|
+
"helix-dismiss": HelixHeadlessToastHelixDismissElementEvent;
|
|
7711
|
+
};
|
|
7093
7712
|
|
|
7094
7713
|
/** `HelixHeadlessToggleGroup` component event */
|
|
7095
7714
|
export type HelixHeadlessToggleGroupElementEvent<E = Event> = TypedEvent<
|
|
@@ -7377,6 +7996,9 @@ export type HelixHeadlessTourHelixBeforeCloseElementEvent =
|
|
|
7377
7996
|
/** `helix-complete` event type */
|
|
7378
7997
|
export type HelixHeadlessTourHelixCompleteElementEvent =
|
|
7379
7998
|
HelixHeadlessTourElementEvent<HelixCompleteEvent>;
|
|
7999
|
+
/** `helix-tour-ask` event type */
|
|
8000
|
+
export type HelixHeadlessTourHelixTourAskElementEvent =
|
|
8001
|
+
HelixHeadlessTourElementEvent<HelixTourAskEvent>;
|
|
7380
8002
|
|
|
7381
8003
|
export type HelixHeadlessTourVueProps = {
|
|
7382
8004
|
/** Label for the control that goes back, handed to every stop. */
|
|
@@ -7427,6 +8049,8 @@ export type HelixHeadlessTourVueEvents = {
|
|
|
7427
8049
|
"helix-before-close": HelixHeadlessTourHelixBeforeCloseElementEvent;
|
|
7428
8050
|
/** Fired when the last stop is finished. */
|
|
7429
8051
|
"helix-complete": HelixHeadlessTourHelixCompleteElementEvent;
|
|
8052
|
+
/** A stop's own controls asking the tour to move, dispatched by the stop and heard here because the tour is what moves. */
|
|
8053
|
+
"helix-tour-ask": HelixHeadlessTourHelixTourAskElementEvent;
|
|
7430
8054
|
/** Says the state moved, carrying `newState` and `oldState`. */
|
|
7431
8055
|
toggle: HelixHeadlessTourElementEvent;
|
|
7432
8056
|
};
|
|
@@ -8102,6 +8726,8 @@ export type CustomCssProperties = {
|
|
|
8102
8726
|
"--meter-fraction"?: (string) | undefined;
|
|
8103
8727
|
/** How much of the circle the arc covers, as a path length. */
|
|
8104
8728
|
"--meter-sweep"?: (string) | undefined;
|
|
8729
|
+
/** How deep a row is, from 0 at the root, for indenting it. */
|
|
8730
|
+
"--object-inspector-level"?: (string) | undefined;
|
|
8105
8731
|
/** The value as a fraction of the range, 0 to 1. Pinned to 1 while indeterminate. */
|
|
8106
8732
|
"--progress-fraction"?: (string) | undefined;
|
|
8107
8733
|
/** How many marks are wholly filled. */
|
|
@@ -8112,6 +8738,12 @@ export type CustomCssProperties = {
|
|
|
8112
8738
|
"--rating-step"?: (string) | undefined;
|
|
8113
8739
|
/** How many steps one mark is divided into. */
|
|
8114
8740
|
"--rating-steps"?: (string) | undefined;
|
|
8741
|
+
/** Where a point sits across, as a percentage. Written by the component. */
|
|
8742
|
+
"--chart-point-x"?: (string) | undefined;
|
|
8743
|
+
/** Where a point sits up, as a percentage from the top. Written by the component. */
|
|
8744
|
+
"--chart-point-y"?: (string) | undefined;
|
|
8745
|
+
/** Where a tick sits along its axis, as a percentage. Written by the component. */
|
|
8746
|
+
"--chart-tick"?: (string) | undefined;
|
|
8115
8747
|
/** The value as a fraction of the range, 0 to 1. */
|
|
8116
8748
|
"--slider-fraction"?: (string) | undefined;
|
|
8117
8749
|
/** Where the filled span starts, as a percentage of the track. */
|
|
@@ -8172,6 +8804,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8172
8804
|
HelixHeadlessAppHeaderVueProps,
|
|
8173
8805
|
HelixHeadlessAppHeaderVueEvents
|
|
8174
8806
|
>;
|
|
8807
|
+
/** The chart for a composition: every column of the table is a part, the parts sum to the whole at each reading, and the top edge is that whole. What a line chart of the same table cannot show is the share, which here is the thickness of a band. **Not 'Line Chart' with 'area'.** That washes each series from the floor on its own, so the series overlap; this adds them. Reach for 'Line Chart' when the question is how each series moved, and for this when it is how the whole is made up. **It measures from zero, always**, which is 'BarChart''s rule and for the same reason: a band's thickness *is* its value, so a range that starts anywhere else draws every part in proportion to nothing. 'LineChart' measures from its own range because a line claims a position; a band claims an amount. **Straight between readings unless asked otherwise.** A band's top edge is a sum, and a curve fitted through one sum can pass under the curve fitted through the sum beneath it, so a smoothed stack can draw a part as less than nothing between two readings. Straight segments between ordered points stay ordered. 'curve="smooth"' is there for a stack that is read as a shape. **'share' draws each reading as a hundred percent**, so the bands are the parts' shares and the top edge is flat. It answers "which part grew" where the default answers "did the whole grow". **What a reader without the picture is told is the total and the share**, not every band in turn. The table beside the chart already reads out every number; what the drawing adds is the composition, so the summary says the latest reading's total and each part's share of it. The drawing itself is 'aria-hidden'. Every numeric column is a part. A table that carries its own total column would count it twice, so leave it out of the table the chart reads. A negative reading is drawn as none: a part of a whole cannot be less than nothing, and a band that folded under its neighbor would say it was. */
|
|
8808
|
+
"helix-headless-area-chart": DefineCustomElement<
|
|
8809
|
+
HelixHeadlessAreaChart,
|
|
8810
|
+
HelixHeadlessAreaChartVueProps,
|
|
8811
|
+
HelixHeadlessAreaChartVueEvents
|
|
8812
|
+
>;
|
|
8175
8813
|
/** A part of 'Avatar' rather than a family of its own: it arranges avatars and is about nothing else. **The overflow count is the group's, not a slot.** Which avatars are hidden is a fact the group works out from 'max', so a consumer writing the "+3" would be writing a number that has to agree with a list they do not control. **Hidden, not removed.** Past 'max' the extra avatars stay in the DOM and stop being shown, so nothing re-renders when 'max' changes and the accessible name is still built from all of them. */
|
|
8176
8814
|
"helix-headless-avatar-group": DefineCustomElement<
|
|
8177
8815
|
HelixHeadlessAvatarGroup,
|
|
@@ -8256,7 +8894,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8256
8894
|
HelixHeadlessChatMessageVueProps,
|
|
8257
8895
|
HelixHeadlessChatMessageVueEvents
|
|
8258
8896
|
>;
|
|
8259
|
-
/** **It has no opinion about where it sits.** A chat is asked for as a floating button, a page, a palette, a sidebar, a modal and an inline block, and none of those is a variant of a conversation: they are containers, and the containers already exist. Nothing here is positioned, nothing has a backdrop, and nothing owns a trigger. If a form factor needs a mode on this element, the split is wrong. **Scroll ownership is the behavior everything else depends on.** A transcript that grows wants to stay at the bottom, except when the reader has scrolled up to read, where pinning is hostile. The rule: pin while the reader is within 'threshold' of the bottom, and let go the moment they leave it. */
|
|
8897
|
+
/** **It has no opinion about where it sits.** A chat is asked for as a floating button, a page, a palette, a sidebar, a modal and an inline block, and none of those is a variant of a conversation: they are containers, and the containers already exist. Nothing here is positioned, nothing has a backdrop, and nothing owns a trigger. If a form factor needs a mode on this element, the split is wrong. **Scroll ownership is the behavior everything else depends on.** A transcript that grows wants to stay at the bottom, except when the reader has scrolled up to read, where pinning is hostile. The rule: pin while the reader is within 'threshold' of the bottom, and let go the moment they leave it. A turn growing under a pinned reader is not the reader leaving, so a streamed answer is followed to its last line. **History loads upward, under a reader who does not move.** With 'history' set to 'more', reaching the top fires 'helix-history'; the consumer sets 'loading' while it fetches and prepends the older turns, and the turn the reader was looking at stays where it was on screen while the room above it grows. **A turn is announced once, when it settles**, and not by the log. A log that is a live region reads what enters it, which is every token of a stream where 'aria-busy' is not honored, every page of history as it loads, and every window of a long transcript as the reader scrolls through it. So the log is 'aria-live="off"', and a status region of its own says each new turn when it has finished arriving: never the reader's own words unless they failed to send, never a turn loaded above the ones already there, and never what was in the transcript when it opened. **Turns are markup children or data, not both.** Children serve whole from a server and are what most conversations want. 'turns' is for the transcript too long to hold as elements: it is drawn a window at a time, measured as it goes, and the log needs a block size of its own for that to mean anything. */
|
|
8260
8898
|
"helix-headless-chat": DefineCustomElement<
|
|
8261
8899
|
HelixHeadlessChat,
|
|
8262
8900
|
HelixHeadlessChatVueProps,
|
|
@@ -8274,7 +8912,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8274
8912
|
HelixHeadlessCheckboxVueProps,
|
|
8275
8913
|
HelixHeadlessCheckboxVueEvents
|
|
8276
8914
|
>;
|
|
8277
|
-
/** **'<pre><code>' and nothing cleverer.** The pair is what the platform means by a block of code: 'pre' keeps the whitespace, 'code' says what the whitespace is for, and losing either one loses something no styling puts back. Indentation in a 'div' is a paragraph with odd spacing. **It scrolls rather than wraps.** A wrapped line of code is a lie about where the line ends, and in a language where a line break can be significant it is a lie that costs someone an afternoon. The box takes its own scrollbar. **The copy button is here because the alternative is selecting it by hand.** Every consumer would otherwise put one there, slightly differently, and the one that forgot would be the one with the longest snippet. It is on unless 'no-copy' says otherwise, and takes its text from the slot rather than from a property, so there is no second copy of the code to keep in step. A 'Code' for a fragment inside a sentence. Separate families, because one flows with prose and the other is a figure. */
|
|
8915
|
+
/** **'<pre><code>' and nothing cleverer.** The pair is what the platform means by a block of code: 'pre' keeps the whitespace, 'code' says what the whitespace is for, and losing either one loses something no styling puts back. Indentation in a 'div' is a paragraph with odd spacing. **It scrolls rather than wraps.** A wrapped line of code is a lie about where the line ends, and in a language where a line break can be significant it is a lie that costs someone an afternoon. The box takes its own scrollbar. **The copy button is here because the alternative is selecting it by hand.** Every consumer would otherwise put one there, slightly differently, and the one that forgot would be the one with the longest snippet. It is on unless 'no-copy' says otherwise, and takes its text from the slot rather than from a property, so there is no second copy of the code to keep in step. A 'Code' for a fragment inside a sentence. Separate families, because one flows with prose and the other is a figure. **'diff' reads the code as a change.** The content is then a unified diff, what 'git diff' and 'diff -u' write, in the same slot ordinary code goes in, and it is drawn as the lines it added and removed. The block reads a diff and never computes one, so the algorithm stays wherever the two versions are. Numbers come from the hunk headers, which makes them the file's; changed lines are '<ins>' and '<del>' with the '+' and '-' kept as text, so the change is not carried by color; the numbers are hidden from the accessibility tree. Each file in the patch is a block of its own under its own name, and its copy button takes the file as it now reads. 'variant="split"' sets the old version beside the new, each removal opposite its replacement. **Before the script runs, a diff is its own text.** A server has no children to read, so it renders the slot as ordinary code, which for a diff is the patch in a '<pre>': a legible diff, and the first render the client makes too, which is what keeps hydration clean. The drawn diff replaces it once the content can be read. Diff mode is experimental while the rest of the family is stable. */
|
|
8278
8916
|
"helix-headless-code-block": DefineCustomElement<
|
|
8279
8917
|
HelixHeadlessCodeBlock,
|
|
8280
8918
|
HelixHeadlessCodeBlockVueProps,
|
|
@@ -8316,7 +8954,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8316
8954
|
HelixHeadlessCopyButtonVueProps,
|
|
8317
8955
|
HelixHeadlessCopyButtonVueEvents
|
|
8318
8956
|
>;
|
|
8319
|
-
/** **The schema is markup and the data is a property.** Columns are declared as 'helix-table-column' children, because a schema is small and something a reader should see in the HTML; rows are handed over as an array, because a table that draws ten thousand elements cannot window them. '''html <helix-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-table-column field="name" sortable>Name</helix-table-column> <helix-table-column field="size" align="end" sortable .cell=${bytes}>Size</helix-table-column> </helix-data-table> ''' 'helix-table' takes rows as markup and is the right component for a table of twelve things a person wrote out. **Sort and filter apply to the whole set, never the page.** Sorting the drawn window is correct on the first screen and wrong on every other one. **The cell values do not server-render.** The headings do, and the row elements do, but reading a cell needs the columns, and the columns are markup children Lit SSR does not hand this element. So a crawler sees a table of the right shape with nothing in it. That is the cost of the first paragraph: use 'helix-table' where the served HTML has to carry the values. */
|
|
8957
|
+
/** **The schema is markup and the data is a property.** Columns are declared as 'helix-table-column' children, because a schema is small and something a reader should see in the HTML; rows are handed over as an array, because a table that draws ten thousand elements cannot window them. '''html <helix-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-table-column field="name" sortable>Name</helix-table-column> <helix-table-column field="size" align="end" sortable .cell=${bytes}>Size</helix-table-column> </helix-data-table> ''' 'helix-table' takes rows as markup and is the right component for a table of twelve things a person wrote out. **Sort and filter apply to the whole set, never the page.** Sorting the drawn window is correct on the first screen and wrong on every other one. **The cell values do not server-render.** The headings do, and the row elements do, but reading a cell needs the columns, and the columns are markup children Lit SSR does not hand this element. So a crawler sees a table of the right shape with nothing in it. That is the cost of the first paragraph: use 'helix-table' where the served HTML has to carry the values. **'selectable' adds a column of checkboxes, keyed on 'row-key'.** A row is selected by its identity rather than its position, so a selection survives a sort, a filter and a page. 'selected' is the chosen keys, comma separated, the shape Listbox uses for a multiple choice, and like 'sort' it is controlled when set and seeded by 'default-selected'. The box in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. Choosing one of many, rather than several, is opening a row, and that is a link or a button in a cell rather than a selection. **A reader can size and order the columns.** 'resizable' on a column puts a separator on its edge; 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The order lands in 'order' as fields, and the consumer's own markup is never rewritten: the table assigns the headings to its header in that order instead. **'csv()' hands back the result as text**: every row the filter lets through, in the order on screen, in the columns on screen. Saving it is the page's business, the same as any other file. */
|
|
8320
8958
|
"helix-headless-data-table": DefineCustomElement<
|
|
8321
8959
|
HelixHeadlessDataTable,
|
|
8322
8960
|
HelixHeadlessDataTableVueProps,
|
|
@@ -8334,6 +8972,18 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8334
8972
|
HelixHeadlessDatePickerVueProps,
|
|
8335
8973
|
HelixHeadlessDatePickerVueEvents
|
|
8336
8974
|
>;
|
|
8975
|
+
/** An element rather than a pair of slots on the list, because a pair is the unit a reader hears: the label is the '<dt>' and the value its '<dd>', and the two stay together however the list lays them out. The value is the default slot, since it is what varies and is often more than text: a tag, an avatar, a link. The label is text almost every time, so it is also a property. */
|
|
8976
|
+
"helix-headless-description-list-item": DefineCustomElement<
|
|
8977
|
+
HelixHeadlessDescriptionListItem,
|
|
8978
|
+
HelixHeadlessDescriptionListItemVueProps,
|
|
8979
|
+
HelixHeadlessDescriptionListItemVueEvents
|
|
8980
|
+
>;
|
|
8981
|
+
/** "Owner: Ada, Region: us-east, Created: 3 days ago" is the commonest panel in any console, and built from layout primitives it is a run of adjacent text: nothing tells a screen reader that a label and a value belong together, or how many pairs there are. This renders the element the platform has for it, a '<dl>', with each item's label a '<dt>' and its value a '<dd>'. **The items render their own term and description**, and the list takes them through its slot. The accessibility tree is built from the flattened tree, so the pairs reach it inside the list rather than beside it. Measured in Chromium's tree rather than assumed, because a list whose semantics stopped at a shadow boundary would look identical on screen: one description list holding term and definition pairs, node for node what a plain '<dl>' with the same content produces, with a slotted label and with an item drawn as 'display: contents' alike. */
|
|
8982
|
+
"helix-headless-description-list": DefineCustomElement<
|
|
8983
|
+
HelixHeadlessDescriptionList,
|
|
8984
|
+
HelixHeadlessDescriptionListVueProps,
|
|
8985
|
+
HelixHeadlessDescriptionListVueEvents
|
|
8986
|
+
>;
|
|
8337
8987
|
/** A real '<dialog>' opened with 'showModal()', not a div with a role and a hand-built trap. The platform gives four things that are each a day's work to reimplement: the top layer, so the dialog is above everything whatever 'z-index' anyone wrote; a real backdrop; Escape; and inert-behind, so the page underneath is unreachable by pointer, keyboard or virtual cursor. **'open' drives 'showModal()', and every way it can close comes back through 'requestOpen'.** A native dialog closes from three directions: the property, Escape, and a '<form method="dialog">' submit. Left alone, two of them would shut the dialog while the consumer's state still said open, which is the bug that makes a modal impossible to reopen. */
|
|
8338
8988
|
"helix-headless-dialog": DefineCustomElement<
|
|
8339
8989
|
HelixHeadlessDialog,
|
|
@@ -8382,7 +9032,31 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8382
9032
|
HelixHeadlessFileInputVueProps,
|
|
8383
9033
|
HelixHeadlessFileInputVueEvents
|
|
8384
9034
|
>;
|
|
8385
|
-
/**
|
|
9035
|
+
/** A chip is the readable form of the thing 'FilterField' declares. It carries the three parts a filter has and a control that asks for it to go. **The operator is drawn only when it is worth drawing**, which is the whole reason the common case reads as plainly as it does: ''' Disposition refunded, chargeback the field's usual comparison, unwritten Disposition is not refunded a comparison somebody chose, so it shows Created after 1 Aug a scalar, which has no usual comparison ''' A reader ticking two values in a menu gets the first, with no jargon on it. A reader who reaches for a comparison gets the third, which explains itself the first time they see one. The rule is one line: **omit 'operator-label' for the field's default operator and pass it for every other.** Whoever builds the chip holds the field, and the field knows which its default is. **It shows a filter and never applies one.** Dismissing is a request, the way it is on 'Tag' and 'Announcement': the chip is the consumer's element in a consumer's list, and taking it out from under them would put their model and the document out of step. 'preventDefault()' on the 'helix-dismiss' is a refusal, and that is also how a consumer takes control of the interaction for one press: 'requestChange' documents the whole pattern, and its first line is that control is an action rather than a mode. **Changing the comparison belongs to whatever is slotted into 'operator'.** A menu trigger there makes the segment a control; the text fallback makes it a label. This element does not learn either, for the reason 'FilterOperator' gives: what the words mean is the domain's. */
|
|
9036
|
+
"helix-headless-filter-chip": DefineCustomElement<
|
|
9037
|
+
HelixHeadlessFilterChip,
|
|
9038
|
+
HelixHeadlessFilterChipVueProps,
|
|
9039
|
+
HelixHeadlessFilterChipVueEvents
|
|
9040
|
+
>;
|
|
9041
|
+
/** **A declaration, not a control.** It renders nothing and is never seen. A consumer writes one per field, with the comparisons that field supports and the values it supports them on, and the filter input reads them to build its menu: '''html <helix-headless-filter-field name="disposition" label="Disposition"> <helix-headless-filter-operator name="any" label="is any of" default> </helix-headless-filter-operator> <helix-headless-filter-operator name="none" label="is none of"> </helix-headless-filter-operator> <helix-headless-option value="refunded">Refunded</helix-headless-option> </helix-headless-filter-field> ''' **Operators are per field and never global.** 'is after' belongs to a date and 'has all of' to a set, and a field that supports one comparison shows no chooser at all. A global list would offer every field every word and leave the component deciding which of them made sense, which is the domain question it declines to answer. **A field that declares none gets two, and they are the ones the punctuation can say.** 'is any of' and 'is none of' are what 'field:a,b' and '-field:a,b' mean, so declaring them was ceremony for the case every product has; the example above is what a consumer writes when the words matter, not the price of admission. Declaring one comparison replaces both rather than joining them — see 'vocabulary', which is where that is decided once for the menu and the grammar together. **Values are 'Option's, which is the element a consumer already has.** They carry a value, a label and a disabled state, and a picker built on 'Menu' or 'Listbox' can render them without this element inventing a second way to say the same thing. A field whose values cannot be enumerated declares none, and what fills a chip then is whatever the consumer types. */
|
|
9042
|
+
"helix-headless-filter-field": DefineCustomElement<
|
|
9043
|
+
HelixHeadlessFilterField,
|
|
9044
|
+
HelixHeadlessFilterFieldVueProps,
|
|
9045
|
+
HelixHeadlessFilterFieldVueEvents
|
|
9046
|
+
>;
|
|
9047
|
+
/** **It reads the declarations and renders a menu.** A consumer writes their fields as 'FilterField's inside this, and what comes out is a two level menu: the fields, and under each one its comparisons and its values. Nothing here knows what a field means, which is the line 'FilterField' already draws. '''html <helix-headless-filter-menu label="Filter"> <helix-headless-filter-field name="disposition" label="Disposition"> <helix-headless-option value="refunded">Refunded</helix-headless-option> </helix-headless-filter-field> </helix-headless-filter-menu> ''' That field declares no comparisons and so is offered 'is any of' and 'is none of', which are the two the typed grammar can say. The menu and the text end up offering the same filters because both read 'FilterField.vocabulary', and a consumer whose field needs other words declares them there. **A tick is a filter, immediately.** There is no Apply: ticking a value announces the field's whole set as it now stands, so a queue narrows as the reader works rather than after they have finished. Unticking the last value announces an empty set, which is a consumer's cue to drop the chip. **The operator is chosen here and written nowhere else.** 'helix-facet' carries 'operatorLabel' empty when the comparison is the field's default, which is exactly what a chip's 'operator-label' wants: the segment appears only where somebody picked something worth noticing. Deciding it here is the point, since this is the only thing that has read both the field and its operators. **How many values a comparison takes decides what is under it.** A field whose comparison is 'arity="none"', 'is empty' or 'is set', is offered no values at all and gives back any that were ticked: the comparison is the whole filter. One at 'arity="one"' offers its values as a single choice, so pressing another replaces it and pressing the one already on clears it. Both announce 'arity' in the facet, which is what lets a consumer tell an empty filter from no filter at all. **It applies nothing.** The chips are the consumer's markup and the rows are their data, so this announces and stops, the way 'Notification' reports a read rather than inventing one. Refusing 'helix-facet' refuses the change. */
|
|
9048
|
+
"helix-headless-filter-menu": DefineCustomElement<
|
|
9049
|
+
HelixHeadlessFilterMenu,
|
|
9050
|
+
HelixHeadlessFilterMenuVueProps,
|
|
9051
|
+
HelixHeadlessFilterMenuVueEvents
|
|
9052
|
+
>;
|
|
9053
|
+
/** **A declaration, not a control.** It renders nothing and is never seen: it is how a consumer says which comparisons their field supports, in markup, beside the values it supports them on. 'Field' reads them; the chip shows the one in force; the menu offers the rest. **The vocabulary is the consumer's and this element never learns it.** What 'is none of' means against a queue of refunds is a question about refunds, so nothing here compares anything or knows what 'name' will be handed to. Helix owns the shape a filter has, which is a field, an operator and some values, and owns the interaction that builds one. What the words mean is the domain's, which is the same line 'FilterInput' already draws when it declines to learn a grammar. **'default' is what makes a chip readable.** The operator a field is usually filtered by is the one nobody needs told, so a chip drawn with it says only the field and the values. Naming a second operator 'default' on one field is a consumer bug and the field reports it rather than guessing. */
|
|
9054
|
+
"helix-headless-filter-operator": DefineCustomElement<
|
|
9055
|
+
HelixHeadlessFilterOperator,
|
|
9056
|
+
HelixHeadlessFilterOperatorVueProps,
|
|
9057
|
+
HelixHeadlessFilterOperatorVueEvents
|
|
9058
|
+
>;
|
|
9059
|
+
/** **The tokens are the consumer's own elements, slotted.** What a filter narrows by belongs to the consumer's model rather than to this element: a facet with a prefix, a saved query, a range. So they are slotted rather than rendered from a list of strings, and removing one is a request this element makes rather than a change it applies. Combobox is the other way round, and that is the difference between the two: its tokens are a view of a selection it owns, drawn from options it was handed. **'value' is the text being typed, not the tokens**, which is what makes this a field a consumer can listen to. Every keystroke announces 'input' with the text on the element, so a table narrows as the reader types. The tokens need no reporting back, being markup the consumer already holds. Backspace on an empty field asks the last token to go, through the same 'helix-dismiss' its own remove control fires, so a consumer who handled the pointer has already handled the keyboard. **It reads what was declared, and nothing that was not.** Write 'FilterField's — usually inside the 'FilterMenu' slotted into 'start', so the picker and the text work off one set — and Enter reads the box against them: 'disposition:refunded,settled' and '-disposition:refunded' announce 'helix-facet', exactly as ticking those values in the picker would, and the text they were read from goes. Everything else stays where it was typed, so 'refund tuesday disposition:settled' is a filter and a search at once. 'grammar.ts' carries the whole rule and is worth reading before relying on it; the short version is that Helix owns the punctuation and the consumer owns every word in it. A field with no 'FilterField' in it parses nothing, which is the behavior this had before it could. **A field whose values cannot be listed belongs here rather than in the picker.** 'assignee:ada' is a filter and nobody wants to enumerate every name in the company, but a menu page for it would have nothing on it to press. Written directly inside this element it is read by the grammar and never offered as a page: unslotted, so nothing draws it, which is the same trick 'FilterField' already plays on its own children. **It can suggest what to type next, and deciding what to suggest is still the consumer's.** Slot 'helix-option' elements into 'suggestions' and the field shows them, moves through them with the arrows, and lets Enter press one; the option fires its own 'helix-select' and the consumer decides what choosing meant. Keys before a colon and values after it are the same panel with different contents, and 'readFilterText' is exported for a consumer narrowing that panel against what a reader has half typed. **The panel opens when there is something in it and closes when there is not**, rather than on a choice. A reader who picks a key wants its values next, and closing on the choice would shut the panel between two renders. Use 'selectionStart' and 'setSelectionRange' to write a completion back and put the caret after it, or the next parse reads the wrong term. **Three things here have three different owners, and only one of them is a controlled property.** 'value' is the text, and it is uncontrolled by default: the reader types, the element applies it, and 'input' says so. **Writing 'value' does not take that over.** It is a seed and a correction, so a consumer who sets it and then expects the field to hold still will watch the next keystroke overwrite them. Ownership is taken by refusing 'helix-before-change' and writing the value you want, which is the same shape every field in this library uses and is worth saying out loud here because the property looks like React's. 'default-value' seeds the field without claiming anything. 'open' is the suggestions panel, and it is the ordinary controlled pair: refuse 'helix-before-open' or 'helix-before-close' to take the decision, and 'default-open' to seed it. The tokens are neither, because they are not state. They are the consumer's own elements in a slot, so there is nothing for this to own and nothing to report back: a token goes when the consumer removes it from their markup, having been asked by 'helix-dismiss'. **A 'FilterChip' naming a declared field is asked differently**, and it has to be: the picker holds what is ticked, so a chip that removed itself without telling it left the value ticked in a list nobody could see was wrong. That dismissal is answered as the field being filtered by nothing, so it arrives as 'helix-facet' like every other change and the chip goes because the filter went. */
|
|
8386
9060
|
"helix-headless-filter-input": DefineCustomElement<
|
|
8387
9061
|
HelixHeadlessFilterInput,
|
|
8388
9062
|
HelixHeadlessFilterInputVueProps,
|
|
@@ -8436,7 +9110,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8436
9110
|
HelixHeadlessLegendVueProps,
|
|
8437
9111
|
HelixHeadlessLegendVueEvents
|
|
8438
9112
|
>;
|
|
8439
|
-
/** The chart for a shape rather than for a quantity, which is what decides the one thing a bar chart is not allowed to do. **It measures from its own range and not from zero, deliberately.** 'BarChart' refuses that switch because a bar's length *is* its value, so a baseline anywhere else makes the lengths proportional to nothing. A line claims no such thing: it says where the readings went, and forcing zero into the range of a series that moves between 980 and 1020 flattens the entire shape into a rule across the top of the box. The two rules are opposite because the two charts answer opposite questions, and 'zero' is here for the case where the distance from nothing is the point. **One scale across every series**, the same as the bar chart, because two series drawn to different scales are two charts sharing a picture. **The labels are HTML beside the drawing rather than '<text>' inside it**, for the reason 'BarChart' records: an '<svg>' that fills its box scales its type with everything else, the same 'font-size' arriving at 10px in a narrow chart and 43px in a wide one, and there is no non-scaling-font to answer it the way 'vector-effect' answers strokes. The table is the accessible representation and this drawing is 'aria-hidden'. A reader who wants the numbers gets the numbers, not a described picture. */
|
|
9113
|
+
/** The chart for a shape rather than for a quantity, which is what decides the one thing a bar chart is not allowed to do. **It measures from its own range and not from zero, deliberately.** 'BarChart' refuses that switch because a bar's length *is* its value, so a baseline anywhere else makes the lengths proportional to nothing. A line claims no such thing: it says where the readings went, and forcing zero into the range of a series that moves between 980 and 1020 flattens the entire shape into a rule across the top of the box. The two rules are opposite because the two charts answer opposite questions, and 'zero' is here for the case where the distance from nothing is the point. **One scale across every series**, the same as the bar chart, because two series drawn to different scales are two charts sharing a picture. **Not the chart for a total made of parts.** 'area' washes each series from the floor on its own, so they overlap; 'Area Chart' stacks them, so the top edge is the total and each band is a share. A line chart answers how each series moved, an area chart how the whole is made up. **The labels are HTML beside the drawing rather than '<text>' inside it**, for the reason 'BarChart' records: an '<svg>' that fills its box scales its type with everything else, the same 'font-size' arriving at 10px in a narrow chart and 43px in a wide one, and there is no non-scaling-font to answer it the way 'vector-effect' answers strokes. The table is the accessible representation and this drawing is 'aria-hidden'. A reader who wants the numbers gets the numbers, not a described picture. */
|
|
8440
9114
|
"helix-headless-line-chart": DefineCustomElement<
|
|
8441
9115
|
HelixHeadlessLineChart,
|
|
8442
9116
|
HelixHeadlessLineChartVueProps,
|
|
@@ -8472,7 +9146,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8472
9146
|
HelixHeadlessMegamenuVueProps,
|
|
8473
9147
|
HelixHeadlessMegamenuVueEvents
|
|
8474
9148
|
>;
|
|
8475
|
-
/** Three shapes, one element, because a reader moving down a menu with the arrow keys does not care which kind each row is and neither should the markup. What it is follows from what it was given: something slotted into 'submenu' makes it a way in, 'checked' makes it a choice, and neither makes it a command. **The role follows the shape.** A row that can be ticked is 'menuitemcheckbox' and carries 'aria-checked', because a reader is told "one of these is on" rather than "here is a button". A row that opens a page keeps 'menuitem' and says 'aria-haspopup', since the page it opens is a menu. Whether it is on the page showing is set by the menu as a property, never as an attribute: an attribute written onto a consumer's element after it upgrades is a hydration mismatch waiting to happen. */
|
|
9149
|
+
/** Three shapes, one element, because a reader moving down a menu with the arrow keys does not care which kind each row is and neither should the markup. What it is follows from what it was given: something slotted into 'submenu' makes it a way in, 'checked' makes it a choice, and neither makes it a command. **The role follows the shape.** A row that can be ticked is 'menuitemcheckbox' and carries 'aria-checked', because a reader is told "one of these is on" rather than "here is a button"; 'exclusive' makes it 'menuitemradio', for a set where only one can be. A row that opens a page keeps 'menuitem' and says 'aria-haspopup', since the page it opens is a menu. Whether it is on the page showing is set by the menu as a property, never as an attribute: an attribute written onto a consumer's element after it upgrades is a hydration mismatch waiting to happen. */
|
|
8476
9150
|
"helix-headless-menu-item": DefineCustomElement<
|
|
8477
9151
|
HelixHeadlessMenuItem,
|
|
8478
9152
|
HelixHeadlessMenuItemVueProps,
|
|
@@ -8496,6 +9170,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8496
9170
|
HelixHeadlessNavigationVueProps,
|
|
8497
9171
|
HelixHeadlessNavigationVueEvents
|
|
8498
9172
|
>;
|
|
9173
|
+
/** **What groups with what is the consumer's, and this never guesses.** A feed can be cut by day, by the thing being talked about, by the person doing the talking, or by nothing at all, and which of those is right is a question about the product. So a group is written by hand around the rows that belong together and told what to call itself, exactly as 'FilterField' is told what its operators are. **Collapsed shows the first row and assigns the rest nowhere.** Not 'hidden', not 'inert', not a stylesheet: the slot is assigned imperatively, so a collapsed group's later rows are absent from the layout and from the accessibility tree with no CSS at all, which is what the headless tier claims for itself. 'Notifications' already assigns its list this way and this borrows the mechanism. The count is separate from how many rows are written, because it usually is: a group saying five with one row under it and a link to the rest is the common shape, and computing the number from the children would make that unsayable. Left off, it is the number of rows. */
|
|
9174
|
+
"helix-headless-notification-group": DefineCustomElement<
|
|
9175
|
+
HelixHeadlessNotificationGroup,
|
|
9176
|
+
HelixHeadlessNotificationGroupVueProps,
|
|
9177
|
+
HelixHeadlessNotificationGroupVueEvents
|
|
9178
|
+
>;
|
|
8499
9179
|
/** A notification is a toast that did not go away. 'helix-toast' is deliberately the opposite of this: a live region whose items carry a 'duration' and whose root never creates or destroys anything. What makes this its own family is the state each item carries rather than the arrangement it sits in: read and unread, a timestamp that has to stay correct, and an action a reader can take later. **The row is a label, a caption under it, and one trailing column that holds either the time or the controls.** A feed is scanned rather than read, so the thing that happened gets the first line on its own and everything qualifying it goes under. The time and the controls occupy the same place because a reader wants exactly one of them at a time: the time while they are scanning, and what they can do about it once they have stopped on a row. **The timestamp is 'helix-format-date'**, which is where the reading, the '<time datetime>' and the shared timer now live. It was implemented here, and a component that formats a date is not a fact about notifications: Chat wanted the same thing and had its own copy of half of it. **Read state is reported, not invented.** Marking something read is usually a round trip, and a component that flips its own state and then hears the request failed has told the reader something untrue. 'helix-read' is cancelable, and a 'read' set by the consumer makes this element defer entirely. */
|
|
8500
9180
|
"helix-headless-notification": DefineCustomElement<
|
|
8501
9181
|
HelixHeadlessNotification,
|
|
@@ -8514,6 +9194,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8514
9194
|
HelixHeadlessNumberInputVueProps,
|
|
8515
9195
|
HelixHeadlessNumberInputVueEvents
|
|
8516
9196
|
>;
|
|
9197
|
+
/** What a developer-facing product shows constantly is a structured value: an API response, a config, a row's raw record. As text in a code block, a reader scrolls a wall of JSON and cannot put away the branch they do not care about; as a Tree, every node is a label and a string reads the same as a number. This reads the value and draws each entry with its type visible. **It reads and never edits.** An inspector that edits is a different component, with validation, undo and a model of what changed, and the reading one is what is wanted. **The data is text in the page or a property.** 'for' names a '<script type="application/json">' by id, the channel 'VirtualList' and the charts already read: it survives a server, which has attributes and no children, and React's hydration, which skips object properties. 'value' is there for a page that already holds the object, and wins when both are set. **One tab stop, and the rows are reached with the arrow keys**, the tree pattern: Up and Down move, Right opens a branch or enters it, Left closes it or goes to its parent, Home and End go to the ends. The tree keeps focus and points at the active row with 'aria-activedescendant', which is what lets a windowed tree drop rows from the page without dropping focus with them. Each row carries its real level, position and set size, so a reader on a windowed row hears where it is in the value rather than in the slice drawn. **Copying takes the active row**, as JSON for a branch and as itself for a string, from the copy button or from Command or Control with C while the tree has focus and nothing is selected. The button sits beside the tree rather than in each row, where a button would be an interactive control inside a tree item, which assistive technology cannot reach reliably. **'windowed' draws only the rows in view**, for a value of thousands of entries, through the same controller 'VirtualList' and 'DataTable' use. The box has to have a height for that to mean anything, which the styled tier gives it and a headless consumer has to. */
|
|
9198
|
+
"helix-headless-object-inspector": DefineCustomElement<
|
|
9199
|
+
HelixHeadlessObjectInspector,
|
|
9200
|
+
HelixHeadlessObjectInspectorVueProps,
|
|
9201
|
+
HelixHeadlessObjectInspectorVueEvents
|
|
9202
|
+
>;
|
|
8517
9203
|
/** A heading over a set, and nothing else: it holds no selection and no value, because grouping is presentation over a list whose owner is the listbox. Its options are still the listbox's options, which is what keeps the keyboard moving through a grouped list exactly as it moves through a flat one. 'role="group"' named by the heading, so a screen reader announces which run an option is in without the heading becoming something to land on. */
|
|
8518
9204
|
"helix-headless-option-group": DefineCustomElement<
|
|
8519
9205
|
HelixHeadlessOptionGroup,
|
|
@@ -8598,6 +9284,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8598
9284
|
HelixHeadlessRatingVueProps,
|
|
8599
9285
|
HelixHeadlessRatingVueEvents
|
|
8600
9286
|
>;
|
|
9287
|
+
/** The chart for a relation rather than a series. The table's first numeric column is measured across and every other numeric column is measured up, one point per row, so a table of countries with a column of income and a column of life expectancy draws one dot for each country. More numeric columns are more series against the same across, each in its own color. **Both axes are measured, so both are labeled.** A line chart's readings are named along the bottom and its values are read from the tooltip; here the horizontal position is itself a value, and a point with no scale under it says nothing about how far along it is. The ticks sit at round numbers and the range is widened to them, so the plot's edges are numbers a reader can name. **What a reader without the picture is told is how strongly the two relate**, because that is the question a scatter is drawn to answer and the one a table of the same numbers makes hardest to see. The summary gives each series' correlation coefficient and how many points it rests on; the table has every number, and the drawing is 'aria-hidden'. **The points are elements, not shapes in the drawing.** The drawing stretches to its box, and a circle in a stretched space is an ellipse, so each point is a '<span>' placed by percentage over it, which is how 'LineChart' draws its termini and for the same reason. */
|
|
9288
|
+
"helix-headless-scatter-chart": DefineCustomElement<
|
|
9289
|
+
HelixHeadlessScatterChart,
|
|
9290
|
+
HelixHeadlessScatterChartVueProps,
|
|
9291
|
+
HelixHeadlessScatterChartVueEvents
|
|
9292
|
+
>;
|
|
8601
9293
|
/** **The whole component is one fact a stylesheet cannot work out for itself: which edges have content past them.** A fade at the bottom of a list is easy to draw and impossible to decide, because CSS has no reading of scroll position. So this measures and says, in a custom state per edge, and the styled tier draws whatever it likes on the edges named. **States rather than attributes**, so an element that upgrades after a framework rendered its markup does not hand that framework markup it did not write. A stylesheet asks ':host(:state(more-block-end))'. **A scrolling region takes the keyboard when it scrolls, and not before.** A box a reader can only reach with a pointer is a box some readers cannot read at all, which is what 'tabindex' answers here. Only while it overflows: a tab stop on a box with nothing to scroll is a stop that does nothing, and a form full of them is worse than the problem. 'role="region"' only with a 'label', because an unnamed region is an announcement with no content: a screen reader says "region" and the reader has learned nothing they did not already know. */
|
|
8602
9294
|
"helix-headless-scroll-area": DefineCustomElement<
|
|
8603
9295
|
HelixHeadlessScrollArea,
|
|
@@ -8616,6 +9308,12 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8616
9308
|
HelixHeadlessSkeletonVueProps,
|
|
8617
9309
|
HelixHeadlessSkeletonVueEvents
|
|
8618
9310
|
>;
|
|
9311
|
+
/** A keyboard reader arriving on a page tabs through the whole header before reaching anything the page is about, and does it again on the next page. This is the control that skips it: first in the document, and pointed at the content. **It moves focus, not only the scroll position.** An in-page link on its own scrolls to its target and leaves focus behind, so the next Tab goes to whatever followed the link, which is the header it was meant to skip. Pressed, this focuses the target. A target that cannot take focus, which is most of them, since '<main>' cannot, is given 'tabindex="-1"' for as long as it holds focus and has it taken off again when focus leaves, so the page ends up as the consumer wrote it. **The address is left alone.** The press is handled rather than followed, so no '#main' lands in the URL and no history entry is added, which matters to a router reading the hash. The anchor is still a real anchor with a real 'href', so before any script has run the link does what a plain link does: it scrolls there and moves the point the next Tab starts from. **Hidden until focused is the styled tier's**, being a decision about paint, and on this tier the link is simply a link. A headless consumer hides '::part(link)' while the host is not ':focus-within' and shows it when it is. Hiding with 'display: none' or 'visibility: hidden' takes it out of the tab order as well, and a skip link nobody can reach is the most common way one is broken. */
|
|
9312
|
+
"helix-headless-skip-link": DefineCustomElement<
|
|
9313
|
+
HelixHeadlessSkipLink,
|
|
9314
|
+
HelixHeadlessSkipLinkVueProps,
|
|
9315
|
+
HelixHeadlessSkipLinkVueEvents
|
|
9316
|
+
>;
|
|
8619
9317
|
/** A real '<input type="range">', so the drag, the arrow keys, Home and End, the page keys and the touch target are the platform's. The last is the one nobody notices: a native range has a hit area larger than its thumb, sized by the platform for a finger. **The value is a string, like every other form control's.** A range submits text and 'MixinControllerValue' holds text, so the number is a reading of the value. 'valueAsNumber' is there for arithmetic. **Marks are drawn rather than left to '<datalist>'**, whose ticks cannot be styled and which Firefox does not render for a range at all. A mark is decoration; what a reader can land on is 'step', which the input enforces whether or not anything is drawn. 'markers' is a count rather than a flag, so a slider from zero to a hundred cannot silently ask for a hundred and one. **A range is two of them.** There is no native two-thumb range, so two are stacked on one track and each thumb keeps its own. */
|
|
8620
9318
|
"helix-headless-slider": DefineCustomElement<
|
|
8621
9319
|
HelixHeadlessSlider,
|
|
@@ -8682,7 +9380,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8682
9380
|
HelixHeadlessTableCellVueProps,
|
|
8683
9381
|
HelixHeadlessTableCellVueEvents
|
|
8684
9382
|
>;
|
|
8685
|
-
/** **The column is the source of both its heading and its track.** Add one and the table has another track; remove one and it does not. Declaring the widths separately, as a CSS track list on the table, leaves nothing tying the two together: a table with three headings and a two-track list renders without complaint, and a track list that is accidentally the headings is invalid CSS the grid silently ignores, collapsing the whole table into one column. **It is also where every per-column fact goes**, which is the reason 'helix-data-table' needs no column config object. 'field' names the key the cell reads, 'sortable' says a reader may reorder by it, 'align' says which edge the values line up against, and 'cell' takes a function for anything the field alone cannot express. The schema is markup and the data is a property: a schema is small, declarative, and something a reader should be able to see in the HTML, and data is large and windowed. **The same element serves both tables**, the markup one and the data one. It is identified by a flag rather than by 'instanceof', so a 'helix-table-column' works inside either without the two roots sharing anything else. **It generates no box of its own**, the same as a row: the heading is a grid item of the table, so it lines up with the cells under it rather than sitting in a wrapper that has to be kept the same width. */
|
|
9383
|
+
/** **The column is the source of both its heading and its track.** Add one and the table has another track; remove one and it does not. Declaring the widths separately, as a CSS track list on the table, leaves nothing tying the two together: a table with three headings and a two-track list renders without complaint, and a track list that is accidentally the headings is invalid CSS the grid silently ignores, collapsing the whole table into one column. **It is also where every per-column fact goes**, which is the reason 'helix-data-table' needs no column config object. 'field' names the key the cell reads, 'sortable' says a reader may reorder by it, 'align' says which edge the values line up against, and 'cell' takes a function for anything the field alone cannot express. The schema is markup and the data is a property: a schema is small, declarative, and something a reader should be able to see in the HTML, and data is large and windowed. **The same element serves both tables**, the markup one and the data one. It is identified by a flag rather than by 'instanceof', so a 'helix-table-column' works inside either without the two roots sharing anything else. **It generates no box of its own**, the same as a row: the heading is a grid item of the table, so it lines up with the cells under it rather than sitting in a wrapper that has to be kept the same width. **A heading that does something holds a control that does it.** The host is the column header, and a header is not focusable, so a sortable heading is a '<button>' inside it: the pattern for a sortable table, and the only way a reader on a keyboard reaches the sort at all. A column a reader may resize carries a 'separator' on its end edge, moved by dragging it or with the arrow keys, and a column in a table that lets a reader reorder its columns carries a grip the table moves. */
|
|
8686
9384
|
"helix-headless-table-column": DefineCustomElement<
|
|
8687
9385
|
HelixHeadlessTableColumn,
|
|
8688
9386
|
HelixHeadlessTableColumnVueProps,
|
|
@@ -8802,7 +9500,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
8802
9500
|
HelixHeadlessTourStopVueProps,
|
|
8803
9501
|
HelixHeadlessTourStopVueEvents
|
|
8804
9502
|
>;
|
|
8805
|
-
/** **'open', on 'MixinControllerOpen', rather than a bare boolean of its own.** A branch showing its children is the same state a disclosure holds. A hand-written toggle announces nothing, so a consumer could neither know a branch opened nor own the state. 'aria-expanded' is still what the row renders: the property differs, not the semantics. An element rather than a slot, because it owns state: whether it is open, selected, and whether it holds focus. A branch is any item with something slotted into 'children', detected
|
|
9503
|
+
/** **'open', on 'MixinControllerOpen', rather than a bare boolean of its own.** A branch showing its children is the same state a disclosure holds. A hand-written toggle announces nothing, so a consumer could neither know a branch opened nor own the state. 'aria-expanded' is still what the row renders: the property differs, not the semantics. An element rather than a slot, because it owns state: whether it is open, selected, and whether it holds focus. A branch is any item with something slotted into 'children', detected on the client because the server cannot inspect children. The server renders the node as a leaf and the twisty appears on hydration, which is the harmless direction. **'href' makes the row itself the link.** With the anchor slotted into the name instead, everything outside the words is dead: no Enter, no middle click, no status bar. Given an 'href' the row *is* an '<a>'. */
|
|
8806
9504
|
"helix-headless-tree-item": DefineCustomElement<
|
|
8807
9505
|
HelixHeadlessTreeItem,
|
|
8808
9506
|
HelixHeadlessTreeItemVueProps,
|